diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 36d5e223a4..3f32cf2063 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -10,12 +10,6 @@ jobs: steps: - uses: actions/checkout@v1 - - uses: actions/cache@v1 - with: - path: ~/.gradle/caches - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle.kts') }} - restore-keys: | - ${{ runner.os }}-gradle- - name: Make gradlew executable run: chmod +x ./gradlew - name: Update Gradle Wrapper @@ -28,4 +22,4 @@ jobs: PULL_REQUEST_TITLE: 'project: Update gradle wrapper' PULL_REQUEST_BODY: This is an auto-generated PR with an updated gradle version COMMIT_MESSAGE: 'project: Update gradle wrapper' - PULL_REQUEST_LABELS: automated-pull-request, gradle \ No newline at end of file + PULL_REQUEST_LABELS: automated-pull-request, gradle diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index b6ab279e6c..4395a67dac 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -1,6 +1,8 @@ name: OpenOSRS - CI (PR) -on: pull_request +on: + pull_request: + types: ['opened', 'edited', 'reopened', 'synchronize'] jobs: pr-lint: @@ -10,7 +12,7 @@ jobs: steps: - name: PR title lint if: github.event_name == 'pull_request' - uses: seferov/pr-lint-action@master + uses: seferov/pr-lint-action@v1.0.3 with: title-regex: '^([\w-/]+): \w+' @@ -35,7 +37,7 @@ jobs: - name: Assembling run: ./gradlew assemble --console=plain - name: Building - run: ./gradlew build --stacktrace -x test -x checkstyleMain --console=plain + run: ./gradlew build --stacktrace -x test -x checkstyleMain -x checkstyleTest --console=plain test: runs-on: ubuntu-latest @@ -116,4 +118,4 @@ jobs: if: github.event_name == 'pull_request' && github.actor == 'OpenOSRS' uses: hmarr/auto-approve-action@v2.0.0 with: - github-token: ${{ secrets.Owain }} \ No newline at end of file + github-token: ${{ secrets.Owain }} diff --git a/.github/workflows/scraper.yml b/.github/workflows/scraper.yml index 27c0a700a9..67c1ab49fa 100644 --- a/.github/workflows/scraper.yml +++ b/.github/workflows/scraper.yml @@ -10,12 +10,6 @@ jobs: steps: - uses: actions/checkout@v1 - - uses: actions/cache@v1 - with: - path: ~/.gradle/caches - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle.kts') }} - restore-keys: | - ${{ runner.os }}-gradle- - name: Set up JDK 11 uses: actions/setup-java@v1 with: @@ -42,4 +36,4 @@ jobs: PULL_REQUEST_TITLE: 'Client: Update NPC stats' PULL_REQUEST_BODY: This is an auto-generated PR with changes from the OSRS wiki COMMIT_MESSAGE: 'Client: Update NPC stats' - PULL_REQUEST_LABELS: automated-pull-request, NPC stats \ No newline at end of file + PULL_REQUEST_LABELS: automated-pull-request, NPC stats diff --git a/README.md b/README.md index f287b3039c..20cceef16f 100644 --- a/README.md +++ b/README.md @@ -2,15 +2,17 @@ -# OpenOSRS +# OpenOSRS + [![Build Status](https://github.com/open-osrs/runelite/workflows/OpenOSRS%20-%20CI%20(push)/badge.svg)](https://github.com/open-osrs/runelite/actions?query=workflow%3A%22OpenOSRS+-+CI+%28push%29%22) [![HitCount](http://hits.dwyl.io/open-osrs/runelite.svg)](http://hits.dwyl.io/open-osrs/runelite) -[OpenOSRS](https://openosrs.com) is an extended version of [RuneLite](https://github.com/runelite/runelite) that provides more functionality and less restrictions while staying more open-source. We are not affiliated with RuneLite. +[OpenOSRS](https://openosrs.com) is an extended version of [RuneLite](https://github.com/runelite/runelite) that provides more functionality and less restrictions while staying fully open-source. We are not affiliated with RuneLite. + +## Discord -## Discord [![Discord](https://img.shields.io/discord/373382904769675265.svg)](https://discord.gg/HN5gf3m) -## Project Layout +## Project Layout - [cache](cache/src/main/java/net/runelite/cache) - Libraries used for reading/writing cache files, as well as the data in it - [deobfuscator](deobfuscator/src/main/java/net/runelite/deob) - Can decompile and cleanup gamepacks as well as map updates to newer revs @@ -23,38 +25,18 @@ - [runescape-api](runescape-api/src/main/java/net/runelite) - Mappings correspond to these interfaces, runelite-api is a subset of this - [runelite-client](runelite-client/src/main/java/net/runelite/client) - Game client with plugins -## Building +## Building + We have migrated the project to Gradle. Information on how to setup and build the project can be found at https://github.com/open-osrs/runelite/wiki/Building-with-IntelliJ-IDEA -## Private Servers -Currently we support RSMod which can be found at: https://github.com/Tomm0017/rsmod but should work with any server that follows osrs protocol. -``` -Gradle -enter -run --args='--rs=RSPS' -into the tasks box - -Jar -Use -rs=RSPS arg. - -Exe -Use --clientargs="--rs=RSPS" arg. - ------ - -Codebase is set to 127.0.0.1 by default and can be changed in the Private Server plugin (requires restart) -Update modulus in Private Server plugin. - -Disable Default World plugin if you have it enabled, this causes issues with codebase. -``` -## License +## License OpenOSRS is licensed under the BSD 2-clause license. See the license header in the respective file to be sure. -## Contribute and Develop +## Contribute and Develop We've set up a separate document for our [contribution guidelines](https://github.com/open-osrs/runelite/blob/master/.github/CONTRIBUTING.md). -## Supported By +## Supported By OpenOSRS uses profiling tools provided by [![YourKit](https://www.yourkit.com/images/yklogo.png)](https://www.yourkit.com/java/profiler/) diff --git a/build.gradle.kts b/build.gradle.kts index 2a04395001..6ffad698ea 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -122,13 +122,6 @@ subprojects { options.encoding = "UTF-8" } - withType { - isPreserveFileTimestamps = false - isReproducibleFileOrder = true - dirMode = 493 - fileMode = 420 - } - withType { group = "verification" diff --git a/buildSrc/src/main/kotlin/BootstrapPlugin.kt b/buildSrc/src/main/kotlin/BootstrapPlugin.kt index ff90211c7f..a28ee8ced1 100644 --- a/buildSrc/src/main/kotlin/BootstrapPlugin.kt +++ b/buildSrc/src/main/kotlin/BootstrapPlugin.kt @@ -1,85 +1,42 @@ import org.gradle.api.Plugin import org.gradle.api.Project -import org.gradle.kotlin.dsl.get -import org.gradle.kotlin.dsl.register -import java.io.File +import org.gradle.kotlin.dsl.* class BootstrapPlugin : Plugin { - override fun apply(project: Project) { - project.tasks.register("bootstrapStaging") { - dependsOn("jar") - dependsOn("shadowJar") - - type = "staging" - clientJar = project.tasks["jar"].outputs.files.singleFile - - dependsOn(project.parent!!.project(":runelite-api").tasks["jar"]) - dependsOn(project.parent!!.project(":runescape-api").tasks["jar"]) - dependsOn(project.parent!!.project(":http-api").tasks["jar"]) - dependsOn(project.parent!!.project(":injected-client").tasks["jar"]) - - doLast { - - project.copy { - from(project.tasks["jar"]) - from(project.parent!!.project(":runelite-api").tasks["jar"]) - from(project.parent!!.project(":runescape-api").tasks["jar"]) - from(project.parent!!.project(":http-api").tasks["jar"]) - from(project.parent!!.project(":injected-client").tasks["jar"]) - - into("${project.buildDir}/bootstrap/${type}/") - } - } + override fun apply(project: Project): Unit = with(project) { + val clientJar by configurations.creating { + isCanBeConsumed = false + isCanBeResolved = true + isTransitive = false + } + val bootstrapDependencies by configurations.creating { + extendsFrom(clientJar) + isCanBeConsumed = false + isCanBeResolved = true + isTransitive = false } - project.tasks.register("bootstrapStable") { - dependsOn("jar") - dependsOn("shadowJar") - - type = "stable" - clientJar = project.tasks["jar"].outputs.files.singleFile - - dependsOn(project.parent!!.project(":runelite-api").tasks["jar"]) - dependsOn(project.parent!!.project(":runescape-api").tasks["jar"]) - dependsOn(project.parent!!.project(":http-api").tasks["jar"]) - dependsOn(project.parent!!.project(":injected-client").tasks["jar"]) - - doLast { - - project.copy { - from(project.tasks["jar"]) - from(project.parent!!.project(":runelite-api").tasks["jar"]) - from(project.parent!!.project(":runescape-api").tasks["jar"]) - from(project.parent!!.project(":http-api").tasks["jar"]) - from(project.parent!!.project(":injected-client").tasks["jar"]) - - into("${project.buildDir}/bootstrap/${type}/") - } - } + dependencies { + clientJar(tasks["jar"].outputs.files) + bootstrapDependencies(project(":runelite-api")) + bootstrapDependencies(project(":runescape-api")) + bootstrapDependencies(project(":http-api")) + bootstrapDependencies(project(":injected-client")) } - project.tasks.register("bootstrapNightly") { - dependsOn("jar") - dependsOn("shadowJar") + tasks.register("bootstrapStaging", "staging") + tasks.register("bootstrapNightly", "nightly") + tasks.register("bootstrapStable", "stable") - type = "nightly" - clientJar = project.tasks["jar"].outputs.files.singleFile + tasks.withType { + dependsOn(bootstrapDependencies) - dependsOn(project.parent!!.project(":runelite-api").tasks["jar"]) - dependsOn(project.parent!!.project(":runescape-api").tasks["jar"]) - dependsOn(project.parent!!.project(":http-api").tasks["jar"]) - dependsOn(project.parent!!.project(":injected-client").tasks["jar"]) + this.clientJar = clientJar.singleFile doLast { - - project.copy { - from(project.tasks["jar"]) - from(project.parent!!.project(":runelite-api").tasks["jar"]) - from(project.parent!!.project(":runescape-api").tasks["jar"]) - from(project.parent!!.project(":http-api").tasks["jar"]) - from(project.parent!!.project(":injected-client").tasks["jar"]) - - into("${project.buildDir}/bootstrap/${type}/") + copy { + from(bootstrapDependencies) + into("${buildDir}/bootstrap/${type}/") } } } diff --git a/buildSrc/src/main/kotlin/BootstrapTask.kt b/buildSrc/src/main/kotlin/BootstrapTask.kt index a6e0652cea..17d2fc2f3e 100644 --- a/buildSrc/src/main/kotlin/BootstrapTask.kt +++ b/buildSrc/src/main/kotlin/BootstrapTask.kt @@ -1,7 +1,6 @@ import org.gradle.api.DefaultTask import org.gradle.api.tasks.Input import org.gradle.api.tasks.InputFile -import org.gradle.api.tasks.Optional import org.gradle.api.tasks.PathSensitive import org.gradle.api.tasks.PathSensitivity import org.gradle.api.tasks.TaskAction @@ -9,12 +8,9 @@ import org.gradle.kotlin.dsl.extra import org.gradle.kotlin.dsl.get import java.io.File import java.security.MessageDigest +import javax.inject.Inject -open class BootstrapTask : DefaultTask() { - - @Input - @Optional - var type: String? = "stable" +open class BootstrapTask @Inject constructor(@Input val type: String) : DefaultTask() { @InputFile @PathSensitive(PathSensitivity.ABSOLUTE) @@ -27,10 +23,10 @@ open class BootstrapTask : DefaultTask() { val launcherArguments = arrayOf("-XX:+DisableAttachMechanism", "-Drunelite.launcher.nojvm=true", "-Xmx512m", "-Xss2m", "-XX:CompileThreshold=1500", "-Xincgc", "-XX:+UseConcMarkSweepGC", "-XX:+UseParNewGC", "-Djna.nosys=true") @Input - val clientJvmArguments = arrayOf("-XX:+DisableAttachMechanism", "-Xmx512m", "-Xss2m", "-XX:CompileThreshold=1500", "-Xincgc", "-XX:+UseConcMarkSweepGC", "-XX:+UseParNewGC", "-Djna.nosys=true") + val clientJvmArguments = arrayOf("-XX:+DisableAttachMechanism", "-Xmx512m", "-Xss2m", "-XX:CompileThreshold=1500", "-Xincgc", "-XX:+UseConcMarkSweepGC", "-XX:+UseParNewGC", "-Djna.nosys=true", "-Dawt.useSystemAAFontSettings=on", "-Dswing.aatext=true") @Input - val clientJvm9Arguments = arrayOf("-XX:+DisableAttachMechanism", "-Xmx512m", "-Xss2m", "-XX:CompileThreshold=1500", "-Djna.nosys=true") + val clientJvm9Arguments = arrayOf("-XX:+DisableAttachMechanism", "-Xmx512m", "-Xss2m", "-XX:CompileThreshold=1500", "-Djna.nosys=true", "-Dawt.useSystemAAFontSettings=on", "-Dswing.aatext=true") private fun hash(file: ByteArray): String { return MessageDigest.getInstance("SHA-256").digest(file).fold("", { str, it -> str + "%02x".format(it) }) @@ -42,10 +38,11 @@ open class BootstrapTask : DefaultTask() { project.configurations["runtimeClasspath"].resolvedConfiguration.resolvedArtifacts.forEach { val module = it.moduleVersion.id.toString() - val name = module.split(":")[1] - val group = module.split(":")[0] - val version = module.split(":")[2] - var path = "" + val splat = module.split(":") + val name = splat[1] + val group = splat[0] + val version = splat[2] + lateinit var path: String if (it.file.name.contains(ProjectVersions.rlVersion)) { path = "https://github.com/open-osrs/hosting/raw/master/${type}/${it.file.name}" @@ -84,7 +81,7 @@ open class BootstrapTask : DefaultTask() { } @TaskAction - fun boostrap() { + fun bootstrap() { val json = JsonBuilder( "projectVersion" to ProjectVersions.openosrsVersion, "minimumLauncherVersion" to ProjectVersions.launcherVersion, @@ -103,4 +100,4 @@ open class BootstrapTask : DefaultTask() { out.println(json) } } -} \ No newline at end of file +} diff --git a/buildSrc/src/main/kotlin/Dependencies.kt b/buildSrc/src/main/kotlin/Dependencies.kt index 48c43f775f..efd7fd0355 100644 --- a/buildSrc/src/main/kotlin/Dependencies.kt +++ b/buildSrc/src/main/kotlin/Dependencies.kt @@ -27,11 +27,11 @@ const val kotlinVersion = "1.3.50" object ProjectVersions { const val launcherVersion = "2.0.4" - const val rlVersion = "1.5.40-SNAPSHOT" + const val rlVersion = "1.5.42" - const val openosrsVersion = "2.1.12.0-SNAPSHOT" + const val openosrsVersion = "2.1.15.0" - const val rsversion = 185 + const val rsversion = 186 const val cacheversion = 165 } diff --git a/cache/src/main/java/net/runelite/cache/definitions/WorldMapTypeBase.java b/cache/src/main/java/net/runelite/cache/definitions/WorldMapTypeBase.java index d24d6d63f3..3e5229f8f9 100644 --- a/cache/src/main/java/net/runelite/cache/definitions/WorldMapTypeBase.java +++ b/cache/src/main/java/net/runelite/cache/definitions/WorldMapTypeBase.java @@ -24,7 +24,4 @@ */ package net.runelite.cache.definitions; -public interface WorldMapTypeBase -{ - -} +public interface WorldMapTypeBase {} diff --git a/cache/src/main/java/net/runelite/cache/definitions/loaders/ItemLoader.java b/cache/src/main/java/net/runelite/cache/definitions/loaders/ItemLoader.java index 6cb6c9bd41..806fa3eff8 100644 --- a/cache/src/main/java/net/runelite/cache/definitions/loaders/ItemLoader.java +++ b/cache/src/main/java/net/runelite/cache/definitions/loaders/ItemLoader.java @@ -25,13 +25,12 @@ package net.runelite.cache.definitions.loaders; +import java.util.HashMap; import net.runelite.cache.definitions.ItemDefinition; import net.runelite.cache.io.InputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.HashMap; - public class ItemLoader { private static final Logger logger = LoggerFactory.getLogger(ItemLoader.class); @@ -40,7 +39,7 @@ public class ItemLoader { ItemDefinition def = new ItemDefinition(id); InputStream is = new InputStream(b); - + while (true) { int opcode = is.readUnsignedByte(); diff --git a/cache/src/test/java/net/runelite/cache/ModelDumperTest.java b/cache/src/test/java/net/runelite/cache/ModelDumperTest.java index 32f5879ac1..bfd4bd9dba 100644 --- a/cache/src/test/java/net/runelite/cache/ModelDumperTest.java +++ b/cache/src/test/java/net/runelite/cache/ModelDumperTest.java @@ -25,7 +25,6 @@ package net.runelite.cache; - import com.google.common.io.Files; import java.io.File; import java.io.IOException; diff --git a/config/checkstyle/checkstyle.xml b/config/checkstyle/checkstyle.xml index 6f6c6e65da..35ebf4519b 100644 --- a/config/checkstyle/checkstyle.xml +++ b/config/checkstyle/checkstyle.xml @@ -32,6 +32,8 @@ + + @@ -42,12 +44,12 @@ - - - - + + + + + - @@ -57,6 +59,11 @@ + + + + + diff --git a/deobfuscator/deobfuscator.gradle.kts b/deobfuscator/deobfuscator.gradle.kts index 85872f50a3..d8e3b092db 100644 --- a/deobfuscator/deobfuscator.gradle.kts +++ b/deobfuscator/deobfuscator.gradle.kts @@ -90,4 +90,25 @@ tasks { filter(ReplaceTokens::class, "tokens" to tokens) filteringCharset = "UTF-8" } + + register("Downloader.main()") { + group = "gamepack" + + classpath = project.sourceSets.main.get().runtimeClasspath + main = "net.runelite.gamepack.Downloader" + } + + register("Deob.main()") { + group = "gamepack" + + classpath = project.sourceSets.main.get().runtimeClasspath + main = "net.runelite.deob.Deob" + } + + register("UpdateMappings.main()") { + group = "gamepack" + + classpath = project.sourceSets.main.get().runtimeClasspath + main = "net.runelite.deob.updater.UpdateMappings" + } } diff --git a/deobfuscator/src/main/java/net/runelite/asm/attributes/Annotations.java b/deobfuscator/src/main/java/net/runelite/asm/attributes/Annotations.java index 7c1a6ba535..6e184a89ec 100644 --- a/deobfuscator/src/main/java/net/runelite/asm/attributes/Annotations.java +++ b/deobfuscator/src/main/java/net/runelite/asm/attributes/Annotations.java @@ -28,7 +28,6 @@ package net.runelite.asm.attributes; import java.util.ArrayList; import java.util.Iterator; import java.util.List; - import net.runelite.asm.Type; import net.runelite.asm.attributes.annotation.Annotation; import net.runelite.asm.attributes.annotation.Element; diff --git a/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/ArrayStoreInstruction.java b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/ArrayStoreInstruction.java index de019ce9e0..cf00821d10 100644 --- a/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/ArrayStoreInstruction.java +++ b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/ArrayStoreInstruction.java @@ -25,7 +25,4 @@ package net.runelite.asm.attributes.code.instruction.types; -public interface ArrayStoreInstruction extends MappableInstruction -{ - -} +public interface ArrayStoreInstruction extends MappableInstruction {} diff --git a/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/ComparisonInstruction.java b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/ComparisonInstruction.java index 25e0cdf1da..2076baeadc 100644 --- a/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/ComparisonInstruction.java +++ b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/ComparisonInstruction.java @@ -25,7 +25,4 @@ package net.runelite.asm.attributes.code.instruction.types; -public interface ComparisonInstruction -{ - -} +public interface ComparisonInstruction {} diff --git a/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/ConversionInstruction.java b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/ConversionInstruction.java index 099b281725..22b4977b71 100644 --- a/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/ConversionInstruction.java +++ b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/ConversionInstruction.java @@ -25,7 +25,4 @@ package net.runelite.asm.attributes.code.instruction.types; -public interface ConversionInstruction -{ - -} +public interface ConversionInstruction {} diff --git a/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/GetFieldInstruction.java b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/GetFieldInstruction.java index f5a5af480a..a9b7ab3cf3 100644 --- a/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/GetFieldInstruction.java +++ b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/GetFieldInstruction.java @@ -25,6 +25,4 @@ package net.runelite.asm.attributes.code.instruction.types; -public interface GetFieldInstruction extends FieldInstruction -{ -} +public interface GetFieldInstruction extends FieldInstruction {} diff --git a/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/ReturnInstruction.java b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/ReturnInstruction.java index c23a0bdfb5..ce9a7e7d37 100644 --- a/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/ReturnInstruction.java +++ b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/ReturnInstruction.java @@ -25,7 +25,4 @@ package net.runelite.asm.attributes.code.instruction.types; -public interface ReturnInstruction -{ - -} +public interface ReturnInstruction {} diff --git a/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/SetFieldInstruction.java b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/SetFieldInstruction.java index 7147d93047..0e645b01ee 100644 --- a/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/SetFieldInstruction.java +++ b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instruction/types/SetFieldInstruction.java @@ -25,6 +25,4 @@ package net.runelite.asm.attributes.code.instruction.types; -public interface SetFieldInstruction extends FieldInstruction, MappableInstruction -{ -} +public interface SetFieldInstruction extends FieldInstruction, MappableInstruction {} diff --git a/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/InvokeStatic.java b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/InvokeStatic.java index 7d01d0d38c..bf85f47c95 100644 --- a/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/InvokeStatic.java +++ b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/InvokeStatic.java @@ -40,7 +40,6 @@ import net.runelite.asm.execution.InstructionContext; import net.runelite.asm.execution.Stack; import net.runelite.asm.execution.StackContext; import static net.runelite.asm.execution.StaticStep.stepInto; - import net.runelite.asm.execution.Value; import net.runelite.asm.pool.Method; import net.runelite.asm.signature.Signature; diff --git a/deobfuscator/src/main/java/net/runelite/asm/execution/Stack.java b/deobfuscator/src/main/java/net/runelite/asm/execution/Stack.java index 2d0fa58ba9..fb01c7463a 100644 --- a/deobfuscator/src/main/java/net/runelite/asm/execution/Stack.java +++ b/deobfuscator/src/main/java/net/runelite/asm/execution/Stack.java @@ -25,11 +25,10 @@ package net.runelite.asm.execution; -import net.runelite.asm.Type; - import java.util.Arrays; import java.util.List; import net.runelite.asm.Method; +import net.runelite.asm.Type; public class Stack { @@ -40,13 +39,13 @@ public class Stack { stack = new StackContext[sz * 2]; // XXX FIXME } - + public Stack(Stack other) { this.size = other.size; this.stack = other.stack.clone(); } - + private void printStack(StackContext ctx, int level) { for (int i = 0; i < level; ++i) @@ -66,7 +65,7 @@ public class Stack printStack(stack[c], 0); throw new RuntimeException("Stack overflow"); } - + assert !i.getType().equals(Type.VOID); stack[size] = i; @@ -80,12 +79,12 @@ public class Stack return stack[--size]; } - + public int getSize() { return size; } - + public List getStack() { return Arrays.asList(stack); diff --git a/deobfuscator/src/main/java/net/runelite/asm/execution/VariableContext.java b/deobfuscator/src/main/java/net/runelite/asm/execution/VariableContext.java index d1456737e5..56eabd3979 100644 --- a/deobfuscator/src/main/java/net/runelite/asm/execution/VariableContext.java +++ b/deobfuscator/src/main/java/net/runelite/asm/execution/VariableContext.java @@ -25,10 +25,9 @@ package net.runelite.asm.execution; -import net.runelite.asm.Type; - import java.util.ArrayList; import java.util.List; +import net.runelite.asm.Type; public class VariableContext { @@ -46,13 +45,13 @@ public class VariableContext type = ctx.getType(); value = ctx.getValue(); } - + public VariableContext(Type type) // for entrypoints { this.type = type; value = Value.UNKNOWN; } - + public VariableContext(InstructionContext i, VariableContext other) { ic = i; @@ -60,24 +59,24 @@ public class VariableContext type = other.type; value = other.value; } - + public VariableContext(InstructionContext i, Type type, Value value) { ic = i; this.type = type; this.value = value; } - + public StackContext getStackContext() { return ctx; } - + public InstructionContext getInstructionWhichStored() { return ic; } - + public Type getType() { return type; @@ -87,7 +86,7 @@ public class VariableContext { return value; } - + public void addRead(InstructionContext ctx) { if (!read.contains(ctx)) @@ -103,7 +102,7 @@ public class VariableContext { return isParameter; } - + public VariableContext markParameter() { isParameter = true; diff --git a/deobfuscator/src/main/java/net/runelite/asm/pool/Field.java b/deobfuscator/src/main/java/net/runelite/asm/pool/Field.java index ca24bb33af..5eb4a5c663 100644 --- a/deobfuscator/src/main/java/net/runelite/asm/pool/Field.java +++ b/deobfuscator/src/main/java/net/runelite/asm/pool/Field.java @@ -25,9 +25,8 @@ package net.runelite.asm.pool; -import net.runelite.asm.Type; - import java.util.Objects; +import net.runelite.asm.Type; public class Field { diff --git a/deobfuscator/src/main/java/net/runelite/asm/signature/Signature.java b/deobfuscator/src/main/java/net/runelite/asm/signature/Signature.java index f3cd779eda..58b56deb2f 100644 --- a/deobfuscator/src/main/java/net/runelite/asm/signature/Signature.java +++ b/deobfuscator/src/main/java/net/runelite/asm/signature/Signature.java @@ -24,8 +24,6 @@ */ package net.runelite.asm.signature; -import net.runelite.asm.Type; - import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -33,6 +31,7 @@ import java.util.List; import java.util.Objects; import java.util.regex.Matcher; import java.util.regex.Pattern; +import net.runelite.asm.Type; public class Signature { diff --git a/deobfuscator/src/main/java/net/runelite/deob/DeobAnnotations.java b/deobfuscator/src/main/java/net/runelite/deob/DeobAnnotations.java index 6294574e74..d5e83313da 100644 --- a/deobfuscator/src/main/java/net/runelite/deob/DeobAnnotations.java +++ b/deobfuscator/src/main/java/net/runelite/deob/DeobAnnotations.java @@ -24,6 +24,7 @@ */ package net.runelite.deob; +import java.util.List; import net.runelite.asm.ClassFile; import net.runelite.asm.Field; import net.runelite.asm.Method; @@ -33,8 +34,6 @@ import net.runelite.asm.attributes.annotation.Annotation; import net.runelite.asm.attributes.annotation.Element; import net.runelite.asm.signature.Signature; -import java.util.List; - public class DeobAnnotations { public static final Type OBFUSCATED_NAME = new Type("Lnet/runelite/mapping/ObfuscatedName;"); diff --git a/deobfuscator/src/main/java/net/runelite/deob/deobfuscators/RenameUnique.java b/deobfuscator/src/main/java/net/runelite/deob/deobfuscators/RenameUnique.java index 1f1789afb5..06c6e905ea 100644 --- a/deobfuscator/src/main/java/net/runelite/deob/deobfuscators/RenameUnique.java +++ b/deobfuscator/src/main/java/net/runelite/deob/deobfuscators/RenameUnique.java @@ -25,6 +25,7 @@ package net.runelite.deob.deobfuscators; +import java.util.List; import net.runelite.asm.ClassFile; import net.runelite.asm.ClassGroup; import net.runelite.asm.Field; @@ -35,31 +36,29 @@ import net.runelite.deob.DeobAnnotations; import net.runelite.deob.Deobfuscator; import net.runelite.deob.util.NameMappings; -import java.util.List; - public class RenameUnique implements Deobfuscator { private Renamer renamer; - + private void generateClassNames(NameMappings map, ClassGroup group) { int i = 0; - + for (ClassFile cf : group.getClasses()) { if (cf.getName().length() > Deob.OBFUSCATED_NAME_MAX_LEN) { continue; } - + map.map(cf.getPoolClass(), "class" + i++); } } - + private void generateFieldNames(NameMappings map, ClassGroup group) { int i = 0; - + for (ClassFile cf : group.getClasses()) for (Field field : cf.getFields()) { @@ -67,7 +66,7 @@ public class RenameUnique implements Deobfuscator { continue; } - + map.map(field.getPoolField(), "field" + i++); } } @@ -75,7 +74,7 @@ public class RenameUnique implements Deobfuscator private void generateMethodNames(NameMappings map, ClassGroup group) { int i = 0; - + for (ClassFile cf : group.getClasses()) for (Method method : cf.getMethods()) { @@ -83,16 +82,16 @@ public class RenameUnique implements Deobfuscator { continue; } - + List virtualMethods = VirtualMethods.getVirtualMethods(method); assert !virtualMethods.isEmpty(); - + String name; if (virtualMethods.size() == 1) name = "method" + i++; else name = "vmethod" + i++; - + for (Method m : virtualMethods) map.map(m.getPoolMethod(), name); } @@ -103,13 +102,13 @@ public class RenameUnique implements Deobfuscator { group.buildClassGraph(); group.lookup(); - + NameMappings mappings = new NameMappings(); - + this.generateClassNames(mappings, group); this.generateFieldNames(mappings, group); this.generateMethodNames(mappings, group); - + renamer = new Renamer(mappings); renamer.run(group); } diff --git a/deobfuscator/src/main/java/net/runelite/deob/deobfuscators/packethandler/PacketRead.java b/deobfuscator/src/main/java/net/runelite/deob/deobfuscators/packethandler/PacketRead.java index 18da7bc11d..8faf63dc0a 100644 --- a/deobfuscator/src/main/java/net/runelite/deob/deobfuscators/packethandler/PacketRead.java +++ b/deobfuscator/src/main/java/net/runelite/deob/deobfuscators/packethandler/PacketRead.java @@ -25,7 +25,6 @@ package net.runelite.deob.deobfuscators.packethandler; import java.util.Objects; - import net.runelite.asm.Type; import net.runelite.asm.attributes.code.Instruction; import net.runelite.asm.execution.InstructionContext; diff --git a/deobfuscator/src/main/java/net/runelite/gamepack/Downloader.java b/deobfuscator/src/main/java/net/runelite/gamepack/Downloader.java index 350454ac8b..119c103e4b 100644 --- a/deobfuscator/src/main/java/net/runelite/gamepack/Downloader.java +++ b/deobfuscator/src/main/java/net/runelite/gamepack/Downloader.java @@ -1,6 +1,5 @@ package net.runelite.gamepack; - import java.io.File; import java.io.IOException; import java.net.URL; @@ -58,4 +57,9 @@ public class Downloader e.printStackTrace(); } } + + public static void main(String[] args) + { + gamepack(); + } } \ No newline at end of file diff --git a/deobfuscator/src/test/java/net/runelite/deob/deobfuscators/unusedclass/EmptyClass.java b/deobfuscator/src/test/java/net/runelite/deob/deobfuscators/unusedclass/EmptyClass.java index 371b55daf9..1d3ba8614b 100644 --- a/deobfuscator/src/test/java/net/runelite/deob/deobfuscators/unusedclass/EmptyClass.java +++ b/deobfuscator/src/test/java/net/runelite/deob/deobfuscators/unusedclass/EmptyClass.java @@ -24,7 +24,4 @@ */ package net.runelite.deob.deobfuscators.unusedclass; -public class EmptyClass -{ - -} +public class EmptyClass {} diff --git a/deobfuscator/src/test/java/net/runelite/deob/deobfuscators/unusedclass/EmptyInterface.java b/deobfuscator/src/test/java/net/runelite/deob/deobfuscators/unusedclass/EmptyInterface.java index ffcb0a3188..4f7214f5b0 100644 --- a/deobfuscator/src/test/java/net/runelite/deob/deobfuscators/unusedclass/EmptyInterface.java +++ b/deobfuscator/src/test/java/net/runelite/deob/deobfuscators/unusedclass/EmptyInterface.java @@ -24,7 +24,4 @@ */ package net.runelite.deob.deobfuscators.unusedclass; -public interface EmptyInterface -{ - -} +public interface EmptyInterface {} diff --git a/deobfuscator/src/test/java/net/runelite/osb/HookImporter.java b/deobfuscator/src/test/java/net/runelite/osb/HookImporter.java index dbb17bfe55..ac178bfa7b 100644 --- a/deobfuscator/src/test/java/net/runelite/osb/HookImporter.java +++ b/deobfuscator/src/test/java/net/runelite/osb/HookImporter.java @@ -70,9 +70,7 @@ public class HookImporter Assert.assertNotNull(is); Gson gson = new Gson(); - java.lang.reflect.Type type = new TypeToken>() - { - }.getType(); + java.lang.reflect.Type type = new TypeToken>() {}.getType(); hooks = gson.fromJson(new InputStreamReader(is), type); group = JarUtil.loadJar(IN); diff --git a/deobfuscator/src/test/java/net/runelite/runesuite/HookImporter.java b/deobfuscator/src/test/java/net/runelite/runesuite/HookImporter.java index 5c78be64f1..d72e2ea46c 100644 --- a/deobfuscator/src/test/java/net/runelite/runesuite/HookImporter.java +++ b/deobfuscator/src/test/java/net/runelite/runesuite/HookImporter.java @@ -81,9 +81,7 @@ public class HookImporter InputStream is = getClass().getResourceAsStream("hooks.json"); Gson gson = new Gson(); - java.lang.reflect.Type type = new TypeToken>() - { - }.getType(); + java.lang.reflect.Type type = new TypeToken>() {}.getType(); hooks = gson.fromJson(new InputStreamReader(is), type); } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 562e2c8841..1ba7206f88 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.0-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/http-api/src/main/java/net/runelite/http/api/animation/AnimationClient.java b/http-api/src/main/java/net/runelite/http/api/animation/AnimationClient.java index 3ccea47be1..3dcf87781d 100644 --- a/http-api/src/main/java/net/runelite/http/api/animation/AnimationClient.java +++ b/http-api/src/main/java/net/runelite/http/api/animation/AnimationClient.java @@ -115,9 +115,7 @@ public class AnimationClient { InputStream in = response.body().byteStream(); // CHECKSTYLE:OFF - return RuneLiteAPI.GSON.fromJson(new InputStreamReader(in), new TypeToken>() - { - }.getType()); + return RuneLiteAPI.GSON.fromJson(new InputStreamReader(in), new TypeToken>() {}.getType()); // CHECKSTYLE:ON } catch (JsonParseException ex) diff --git a/http-api/src/main/java/net/runelite/http/api/hiscore/HiscoreEndpoint.java b/http-api/src/main/java/net/runelite/http/api/hiscore/HiscoreEndpoint.java index a88f2e208e..8e5a97dfb3 100644 --- a/http-api/src/main/java/net/runelite/http/api/hiscore/HiscoreEndpoint.java +++ b/http-api/src/main/java/net/runelite/http/api/hiscore/HiscoreEndpoint.java @@ -35,8 +35,7 @@ public enum HiscoreEndpoint HARDCORE_IRONMAN("Hardcore Ironman", "https://services.runescape.com/m=hiscore_oldschool_hardcore_ironman/index_lite.ws"), ULTIMATE_IRONMAN("Ultimate Ironman", "https://services.runescape.com/m=hiscore_oldschool_ultimate/index_lite.ws"), DEADMAN("Deadman", "https://services.runescape.com/m=hiscore_oldschool_deadman/index_lite.ws"), - SEASONAL_DEADMAN("Seasonal Deadman", "https://services.runescape.com/m=hiscore_oldschool_seasonal/index_lite.ws"), - DEADMAN_TOURNAMENT("Deadman Tournament", "https://services.runescape.com/m=hiscore_oldschool_tournament/index_lite.ws"); + LEAGUE("Twisted League", "https://services.runescape.com/m=hiscore_oldschool_seasonal/index_lite.ws"); private final String name; private final HttpUrl hiscoreURL; diff --git a/http-api/src/main/java/net/runelite/http/api/hiscore/HiscoreResult.java b/http-api/src/main/java/net/runelite/http/api/hiscore/HiscoreResult.java index 9af6f6e4b9..57f29c2910 100644 --- a/http-api/src/main/java/net/runelite/http/api/hiscore/HiscoreResult.java +++ b/http-api/src/main/java/net/runelite/http/api/hiscore/HiscoreResult.java @@ -54,6 +54,7 @@ public class HiscoreResult private Skill runecraft; private Skill hunter; private Skill construction; + private Skill leaguePoints; private Skill bountyHunterHunter; private Skill bountyHunterRogue; private Skill clueScrollAll; @@ -115,6 +116,8 @@ public class HiscoreResult return getHunter(); case CONSTRUCTION: return getConstruction(); + case LEAGUE_POINTS: + return getLeaguePoints(); case OVERALL: return getOverall(); case BOUNTY_HUNTER_HUNTER: diff --git a/http-api/src/main/java/net/runelite/http/api/hiscore/HiscoreResultBuilder.java b/http-api/src/main/java/net/runelite/http/api/hiscore/HiscoreResultBuilder.java index a6117160a4..10394b4919 100644 --- a/http-api/src/main/java/net/runelite/http/api/hiscore/HiscoreResultBuilder.java +++ b/http-api/src/main/java/net/runelite/http/api/hiscore/HiscoreResultBuilder.java @@ -26,8 +26,6 @@ package net.runelite.http.api.hiscore; import java.util.ArrayList; import java.util.List; -import net.runelite.http.api.hiscore.HiscoreResult; -import net.runelite.http.api.hiscore.Skill; public class HiscoreResultBuilder { @@ -77,9 +75,9 @@ public class HiscoreResultBuilder hiscoreResult.setRunecraft(skills.get(21)); hiscoreResult.setHunter(skills.get(22)); hiscoreResult.setConstruction(skills.get(23)); - hiscoreResult.setBountyHunterHunter(skills.get(24)); - hiscoreResult.setBountyHunterRogue(skills.get(25)); - hiscoreResult.setLastManStanding(skills.get(26)); + hiscoreResult.setLeaguePoints(skills.get(24)); + hiscoreResult.setBountyHunterHunter(skills.get(25)); + hiscoreResult.setBountyHunterRogue(skills.get(26)); hiscoreResult.setClueScrollAll(skills.get(27)); hiscoreResult.setClueScrollBeginner(skills.get(28)); hiscoreResult.setClueScrollEasy(skills.get(29)); @@ -87,6 +85,7 @@ public class HiscoreResultBuilder hiscoreResult.setClueScrollHard(skills.get(31)); hiscoreResult.setClueScrollElite(skills.get(32)); hiscoreResult.setClueScrollMaster(skills.get(33)); + hiscoreResult.setLastManStanding(skills.get(34)); return hiscoreResult; } } diff --git a/http-api/src/main/java/net/runelite/http/api/hiscore/HiscoreSkill.java b/http-api/src/main/java/net/runelite/http/api/hiscore/HiscoreSkill.java index db043dfcfb..f0864a9424 100644 --- a/http-api/src/main/java/net/runelite/http/api/hiscore/HiscoreSkill.java +++ b/http-api/src/main/java/net/runelite/http/api/hiscore/HiscoreSkill.java @@ -50,16 +50,17 @@ public enum HiscoreSkill RUNECRAFT("Runecraft"), HUNTER("Hunter"), CONSTRUCTION("Construction"), + LEAGUE_POINTS("League Points"), BOUNTY_HUNTER_HUNTER("Bounty Hunter - Hunter"), BOUNTY_HUNTER_ROGUE("Bounty Hunter - Rogue"), - LAST_MAN_STANDING("Last Man Standing"), CLUE_SCROLL_ALL("Clue Scrolls (all)"), CLUE_SCROLL_BEGINNER("Clue Scrolls (beginner)"), CLUE_SCROLL_EASY("Clue Scrolls (easy)"), CLUE_SCROLL_MEDIUM("Clue Scrolls (medium)"), CLUE_SCROLL_HARD("Clue Scrolls (hard)"), CLUE_SCROLL_ELITE("Clue Scrolls (elite)"), - CLUE_SCROLL_MASTER("Clue Scrolls (master)"); + CLUE_SCROLL_MASTER("Clue Scrolls (master)"), + LAST_MAN_STANDING("Last Man Standing"); private final String name; diff --git a/http-api/src/main/java/net/runelite/http/api/loottracker/LootTrackerClient.java b/http-api/src/main/java/net/runelite/http/api/loottracker/LootTrackerClient.java index 51b9329018..716798c3b1 100644 --- a/http-api/src/main/java/net/runelite/http/api/loottracker/LootTrackerClient.java +++ b/http-api/src/main/java/net/runelite/http/api/loottracker/LootTrackerClient.java @@ -102,9 +102,7 @@ public class LootTrackerClient } InputStream in = response.body().byteStream(); - return RuneLiteAPI.GSON.fromJson(new InputStreamReader(in), new TypeToken>() - { - }.getType()); + return RuneLiteAPI.GSON.fromJson(new InputStreamReader(in), new TypeToken>() {}.getType()); } catch (JsonParseException ex) { diff --git a/http-api/src/main/java/net/runelite/http/api/worlds/WorldClient.java b/http-api/src/main/java/net/runelite/http/api/worlds/WorldClient.java index 61169ab601..65e7f5a541 100644 --- a/http-api/src/main/java/net/runelite/http/api/worlds/WorldClient.java +++ b/http-api/src/main/java/net/runelite/http/api/worlds/WorldClient.java @@ -26,7 +26,7 @@ package net.runelite.http.api.worlds; import com.google.gson.JsonParseException; -import io.reactivex.Observable; +import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import javax.inject.Inject; @@ -50,7 +50,7 @@ public class WorldClient this.client = client; } - public Observable lookupWorlds() + public WorldResult lookupWorlds() throws IOException { HttpUrl url = RuneLiteAPI.getApiBase().newBuilder() .addPathSegment("worlds.js") @@ -58,27 +58,24 @@ public class WorldClient logger.debug("Built URI: {}", url); - return Observable.defer(() -> + Request request = new Request.Builder() + .url(url) + .build(); + + try (Response response = client.newCall(request).execute()) { - Request request = new Request.Builder() - .url(url) - .build(); - - try (Response response = client.newCall(request).execute()) + if (!response.isSuccessful()) { - if (!response.isSuccessful()) - { - logger.debug("Error looking up worlds: {}", response); - return Observable.just(null); - } + logger.debug("Error looking up worlds: {}", response); + throw new IOException("unsuccessful response looking up worlds"); + } - InputStream in = response.body().byteStream(); - return Observable.just(RuneLiteAPI.GSON.fromJson(new InputStreamReader(in), WorldResult.class)); - } - catch (JsonParseException ex) - { - return Observable.error(ex); - } - }); + InputStream in = response.body().byteStream(); + return RuneLiteAPI.GSON.fromJson(new InputStreamReader(in), WorldResult.class); + } + catch (JsonParseException ex) + { + throw new IOException(ex); + } } -} +} \ No newline at end of file diff --git a/http-api/src/main/java/net/runelite/http/api/worlds/WorldType.java b/http-api/src/main/java/net/runelite/http/api/worlds/WorldType.java index c94a7c70e6..af543b7383 100644 --- a/http-api/src/main/java/net/runelite/http/api/worlds/WorldType.java +++ b/http-api/src/main/java/net/runelite/http/api/worlds/WorldType.java @@ -34,6 +34,5 @@ public enum WorldType LAST_MAN_STANDING, TOURNAMENT, DEADMAN, - SEASONAL_DEADMAN, - DEADMAN_TOURNAMENT + LEAGUE; } diff --git a/http-api/src/main/java/net/runelite/http/api/ws/RuntimeTypeAdapterFactory.java b/http-api/src/main/java/net/runelite/http/api/ws/RuntimeTypeAdapterFactory.java index 2819c92ceb..e99fe5cd0b 100644 --- a/http-api/src/main/java/net/runelite/http/api/ws/RuntimeTypeAdapterFactory.java +++ b/http-api/src/main/java/net/runelite/http/api/ws/RuntimeTypeAdapterFactory.java @@ -16,10 +16,6 @@ package net.runelite.http.api.ws; -import java.io.IOException; -import java.util.LinkedHashMap; -import java.util.Map; - import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonObject; @@ -31,6 +27,9 @@ import com.google.gson.internal.Streams; import com.google.gson.reflect.TypeToken; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonWriter; +import java.io.IOException; +import java.util.LinkedHashMap; +import java.util.Map; /** * Adapts values whose runtime type may differ from their declaration type. This diff --git a/http-api/src/main/java/net/runelite/http/api/ws/messages/party/Part.java b/http-api/src/main/java/net/runelite/http/api/ws/messages/party/Part.java index 0d487a3be6..b03e3dc576 100644 --- a/http-api/src/main/java/net/runelite/http/api/ws/messages/party/Part.java +++ b/http-api/src/main/java/net/runelite/http/api/ws/messages/party/Part.java @@ -27,6 +27,4 @@ package net.runelite.http.api.ws.messages.party; import net.runelite.api.events.Event; import net.runelite.http.api.ws.WebsocketMessage; -public class Part extends WebsocketMessage implements Event -{ -} +public class Part extends WebsocketMessage implements Event {} diff --git a/http-api/src/main/java/net/runelite/http/api/ws/messages/party/UserSync.java b/http-api/src/main/java/net/runelite/http/api/ws/messages/party/UserSync.java index bcb6ca0ee7..e4d08d199f 100644 --- a/http-api/src/main/java/net/runelite/http/api/ws/messages/party/UserSync.java +++ b/http-api/src/main/java/net/runelite/http/api/ws/messages/party/UserSync.java @@ -30,6 +30,4 @@ import net.runelite.api.events.Event; @Value @EqualsAndHashCode(callSuper = true) -public class UserSync extends PartyMemberMessage implements Event -{ -} +public class UserSync extends PartyMemberMessage implements Event {} diff --git a/http-api/src/main/java/net/runelite/http/api/xtea/XteaClient.java b/http-api/src/main/java/net/runelite/http/api/xtea/XteaClient.java index 5c6789ee4b..a0c38c99b2 100644 --- a/http-api/src/main/java/net/runelite/http/api/xtea/XteaClient.java +++ b/http-api/src/main/java/net/runelite/http/api/xtea/XteaClient.java @@ -101,9 +101,7 @@ public class XteaClient { InputStream in = response.body().byteStream(); // CHECKSTYLE:OFF - return RuneLiteAPI.GSON.fromJson(new InputStreamReader(in), new TypeToken>() - { - }.getType()); + return RuneLiteAPI.GSON.fromJson(new InputStreamReader(in), new TypeToken>() {}.getType()); // CHECKSTYLE:ON } catch (JsonParseException ex) diff --git a/http-service/src/main/java/net/runelite/http/service/chat/ChatController.java b/http-service/src/main/java/net/runelite/http/service/chat/ChatController.java index 15381845b5..ccba9db430 100644 --- a/http-service/src/main/java/net/runelite/http/service/chat/ChatController.java +++ b/http-service/src/main/java/net/runelite/http/service/chat/ChatController.java @@ -47,6 +47,7 @@ public class ChatController { private static final Pattern STRING_VALIDATION = Pattern.compile("[^a-zA-Z0-9' -]"); private static final int STRING_MAX_LENGTH = 50; + private static final int MAX_LAYOUT_ROOMS = 16; private final Cache killCountCache = CacheBuilder.newBuilder() .expireAfterWrite(2, TimeUnit.MINUTES) @@ -214,6 +215,11 @@ public class ChatController @PostMapping("/layout") public void submitLayout(@RequestParam String name, @RequestBody LayoutRoom[] rooms) { + if (rooms.length > MAX_LAYOUT_ROOMS) + { + return; + } + chatService.setLayout(name, rooms); } diff --git a/http-service/src/main/java/net/runelite/http/service/feed/twitter/TwitterService.java b/http-service/src/main/java/net/runelite/http/service/feed/twitter/TwitterService.java index 9bb9dc8595..12b01c127c 100644 --- a/http-service/src/main/java/net/runelite/http/service/feed/twitter/TwitterService.java +++ b/http-service/src/main/java/net/runelite/http/service/feed/twitter/TwitterService.java @@ -110,9 +110,7 @@ public class TwitterService } InputStream in = response.body().byteStream(); - Type listType = new TypeToken>() - { - }.getType(); + Type listType = new TypeToken>() {}.getType(); List statusesResponse = RuneLiteAPI.GSON .fromJson(new InputStreamReader(in), listType); diff --git a/http-service/src/main/java/net/runelite/http/service/osbuddy/OsbuddyClient.java b/http-service/src/main/java/net/runelite/http/service/osbuddy/OsbuddyClient.java index 585577511a..e522301948 100644 --- a/http-service/src/main/java/net/runelite/http/service/osbuddy/OsbuddyClient.java +++ b/http-service/src/main/java/net/runelite/http/service/osbuddy/OsbuddyClient.java @@ -58,9 +58,7 @@ public class OsbuddyClient throw new IOException("Error retrieving summary from OSBuddy: " + responseOk.message()); } - Type type = new TypeToken>() - { - }.getType(); + Type type = new TypeToken>() {}.getType(); return RuneLiteAPI.GSON.fromJson(responseOk.body().string(), type); } diff --git a/http-service/src/main/java/net/runelite/http/service/util/HiscoreEndpointEditor.java b/http-service/src/main/java/net/runelite/http/service/util/HiscoreEndpointEditor.java index 816981f99a..bbc84f573a 100644 --- a/http-service/src/main/java/net/runelite/http/service/util/HiscoreEndpointEditor.java +++ b/http-service/src/main/java/net/runelite/http/service/util/HiscoreEndpointEditor.java @@ -26,9 +26,8 @@ package net.runelite.http.service.util; -import net.runelite.http.api.hiscore.HiscoreEndpoint; - import java.beans.PropertyEditorSupport; +import net.runelite.http.api.hiscore.HiscoreEndpoint; public class HiscoreEndpointEditor extends PropertyEditorSupport { diff --git a/http-service/src/main/java/net/runelite/http/service/util/exception/NotFoundException.java b/http-service/src/main/java/net/runelite/http/service/util/exception/NotFoundException.java index 83e04ceca6..c7d01175ef 100644 --- a/http-service/src/main/java/net/runelite/http/service/util/exception/NotFoundException.java +++ b/http-service/src/main/java/net/runelite/http/service/util/exception/NotFoundException.java @@ -29,7 +29,4 @@ import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; @ResponseStatus(code = HttpStatus.NOT_FOUND, reason = "Not found") -public class NotFoundException extends RuntimeException -{ - -} +public class NotFoundException extends RuntimeException {} diff --git a/http-service/src/main/java/net/runelite/http/service/worlds/ServiceWorldType.java b/http-service/src/main/java/net/runelite/http/service/worlds/ServiceWorldType.java index c6aa598321..896f152752 100644 --- a/http-service/src/main/java/net/runelite/http/service/worlds/ServiceWorldType.java +++ b/http-service/src/main/java/net/runelite/http/service/worlds/ServiceWorldType.java @@ -35,9 +35,8 @@ enum ServiceWorldType HIGH_RISK(WorldType.HIGH_RISK, 1 << 10), LAST_MAN_STANDING(WorldType.LAST_MAN_STANDING, 1 << 14), TOURNAMENT(WorldType.TOURNAMENT, 1 << 25), - DEADMAN_TOURNAMENT(WorldType.DEADMAN_TOURNAMENT, 1 << 26), DEADMAN(WorldType.DEADMAN, 1 << 29), - SEASONAL_DEADMAN(WorldType.SEASONAL_DEADMAN, 1 << 30); + LEAGUE(WorldType.LEAGUE, 1 << 30); private final WorldType apiType; private final int mask; diff --git a/http-service/src/test/java/net/runelite/http/service/hiscore/HiscoreServiceTest.java b/http-service/src/test/java/net/runelite/http/service/hiscore/HiscoreServiceTest.java index 4224205c91..e6c9f287aa 100644 --- a/http-service/src/test/java/net/runelite/http/service/hiscore/HiscoreServiceTest.java +++ b/http-service/src/test/java/net/runelite/http/service/hiscore/HiscoreServiceTest.java @@ -60,16 +60,17 @@ public class HiscoreServiceTest + "638177,1,0\n" + "516239,9,1000\n" + "492790,1,0\n" + + "2,2460\n" // leagues + "-1,-1\n" + "73,1738\n" - + "-1,-1\n" + "531,1432\n" + "324,212\n" + "8008,131\n" + "1337,911\n" + "42,14113\n" + "1,777\n" - + "254,92\n"; + + "254,92\n" + + "-1,-1\n"; // lms private final MockWebServer server = new MockWebServer(); @@ -105,6 +106,7 @@ public class HiscoreServiceTest Assert.assertEquals(777, result.getClueScrollElite().getLevel()); Assert.assertEquals(254, result.getClueScrollMaster().getRank()); Assert.assertEquals(-1, result.getLastManStanding().getLevel()); + Assert.assertEquals(2460, result.getLeaguePoints().getLevel()); } } diff --git a/injected-client/injected-client.gradle.kts b/injected-client/injected-client.gradle.kts index aeffd0a787..090e544662 100644 --- a/injected-client/injected-client.gradle.kts +++ b/injected-client/injected-client.gradle.kts @@ -32,34 +32,46 @@ plugins { id("com.openosrs.injector") } +val vanillaDep by configurations.creating +val rsapiDep by configurations.creating +val rsclientDep by configurations.creating +val mixinsDep by configurations.creating +val combined by configurations.creating { + extendsFrom(rsapiDep, rsclientDep, mixinsDep, vanillaDep) + isCanBeResolved = true + isCanBeConsumed = false +} + configurations { - create("vanilla") - create("injected-client") + all { + isTransitive = false + } } dependencies { - "vanilla"(Libraries.vanilla) + vanillaDep(Libraries.vanilla) + rsapiDep(project(":runescape-api")) + rsclientDep(project(":runescape-client")) + mixinsDep(project(":runelite-mixins")) } injector { - mixins.set(tasks.getByPath(":runelite-mixins:jar").outputs.files.singleFile) - rsapi.set(tasks.getByPath(":runescape-api:jar").outputs.files.singleFile) - rsclient.set(tasks.getByPath(":runescape-client:jar").outputs.files.singleFile) - vanilla.set(project.file(configurations["vanilla"].asPath)) + mixins.set(mixinsDep.singleFile) + rsapi.set(rsapiDep.singleFile) + rsclient.set(rsclientDep.singleFile) + vanilla.set(vanillaDep.singleFile) } -artifacts { - add("runtimeOnly", tasks.inject.get().output) { - builtBy(tasks.inject) +sourceSets { + main { + output.dir(tasks.inject.get().output.get().asFile.parentFile, "builtBy" to tasks.inject) } } // keep the sourcesets etc but remove useless tasks tasks { - build { - dependsOn(":runelite-mixins:build") - dependsOn(":runescape-api:build") - dependsOn(":runescape-client:build") + inject { + dependsOn(configurations["combined"]) } classes { enabled = false @@ -73,4 +85,4 @@ tasks { processResources { enabled = false } -} \ No newline at end of file +} diff --git a/protocol-api/src/main/java/net/runelite/protocol/api/handshake/HandshakePacket.java b/protocol-api/src/main/java/net/runelite/protocol/api/handshake/HandshakePacket.java index a81812813b..16794ac5e9 100644 --- a/protocol-api/src/main/java/net/runelite/protocol/api/handshake/HandshakePacket.java +++ b/protocol-api/src/main/java/net/runelite/protocol/api/handshake/HandshakePacket.java @@ -24,7 +24,4 @@ */ package net.runelite.protocol.api.handshake; -public abstract class HandshakePacket -{ - -} +public abstract class HandshakePacket {} diff --git a/protocol-api/src/main/java/net/runelite/protocol/api/handshake/LoginHandshakePacket.java b/protocol-api/src/main/java/net/runelite/protocol/api/handshake/LoginHandshakePacket.java index 16ccb85694..e19f72d725 100644 --- a/protocol-api/src/main/java/net/runelite/protocol/api/handshake/LoginHandshakePacket.java +++ b/protocol-api/src/main/java/net/runelite/protocol/api/handshake/LoginHandshakePacket.java @@ -29,7 +29,4 @@ import lombok.EqualsAndHashCode; @Data @EqualsAndHashCode(callSuper = true) -public class LoginHandshakePacket extends HandshakePacket -{ - -} +public class LoginHandshakePacket extends HandshakePacket {} diff --git a/runelite-api/src/main/java/net/runelite/api/ChatMessageType.java b/runelite-api/src/main/java/net/runelite/api/ChatMessageType.java index b4659dfa18..abed95406c 100644 --- a/runelite-api/src/main/java/net/runelite/api/ChatMessageType.java +++ b/runelite-api/src/main/java/net/runelite/api/ChatMessageType.java @@ -148,6 +148,10 @@ public enum ChatMessageType * A message that times out after 10 seconds. */ TENSECTIMEOUT(107), + /** + * The "Welcome to RuneScape" message + */ + WELCOME(108), /** * An unknown message type. */ diff --git a/runelite-api/src/main/java/net/runelite/api/Client.java b/runelite-api/src/main/java/net/runelite/api/Client.java index a24d41057d..c667680326 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -341,11 +341,12 @@ public interface Client extends GameShell * Gets the logged in player instance. * * @return the logged in player - * + *

* (getLocalPlayerIndex returns the local index, useful for menus/interacting) */ @Nullable Player getLocalPlayer(); + int getLocalPlayerIndex(); /** @@ -957,36 +958,42 @@ public interface Client extends GameShell /** * Gets the music volume + * * @return volume 0-255 inclusive */ int getMusicVolume(); /** * Sets the music volume + * * @param volume 0-255 inclusive */ void setMusicVolume(int volume); /** * Gets the sound effect volume + * * @return volume 0-127 inclusive */ int getSoundEffectVolume(); /** * Sets the sound effect volume + * * @param volume 0-127 inclusive */ void setSoundEffectVolume(int volume); /** * Gets the area sound effect volume + * * @return volume 0-127 inclusive */ int getAreaSoundEffectVolume(); /** * Sets the area sound effect volume + * * @param volume 0-127 inclusive */ void setAreaSoundEffectVolume(int volume); @@ -1554,6 +1561,13 @@ public interface Client extends GameShell */ void setNPCsHidden2D(boolean state); + /** + * Sets whether Pets from other players are hidden. + * + * @param state new pet hidden state + */ + void setPetsHidden(boolean state); + /** * Sets whether attacking players or NPCs are hidden. * @@ -1777,7 +1791,7 @@ public interface Client extends GameShell /** * @param param0 This is SceneX for gameObject, index for items, and 0 for npc. * @param param1 This is SceneY for gameObject, static for items, and 0 for npc. - * @param opcode Menu entry Action opcode. + * @param opcode Menu entry Action opcode. * @param id Targets ID * @param menuEntry Do these actually matter? * @param targetString Do these actually matter? @@ -1865,26 +1879,25 @@ public interface Client extends GameShell /** * Scales values from pixels onto canvas * - * @see net.runelite.client.util.ImageUtil#resizeSprite(Client, Sprite, int, int) - * - * @param canvas the array we're writing to - * @param pixels pixels to draw - * @param color should be 0 - * @param pixelX x index - * @param pixelY y index - * @param canvasIdx index in canvas (canvas[canvasIdx]) + * @param canvas the array we're writing to + * @param pixels pixels to draw + * @param color should be 0 + * @param pixelX x index + * @param pixelY y index + * @param canvasIdx index in canvas (canvas[canvasIdx]) * @param canvasOffset x offset - * @param newWidth new width - * @param newHeight new height - * @param pixelWidth pretty much horizontal scale - * @param pixelHeight pretty much vertical scale - * @param oldWidth old width + * @param newWidth new width + * @param newHeight new height + * @param pixelWidth pretty much horizontal scale + * @param pixelHeight pretty much vertical scale + * @param oldWidth old width + * @see net.runelite.client.util.ImageUtil#resizeSprite(Client, Sprite, int, int) */ void scaleSprite(int[] canvas, int[] pixels, int color, int pixelX, int pixelY, int canvasIdx, int canvasOffset, int newWidth, int newHeight, int pixelWidth, int pixelHeight, int oldWidth); /** * Get the MenuEntry at client.getMenuOptionCount() - 1 - * + *

* This is useful so you don't have to use getMenuEntries, * which will create a big array, when you only want to change * the left click one. @@ -1893,7 +1906,7 @@ public interface Client extends GameShell /** * Set the MenuEntry at client.getMenuOptionCount() - 1 - * + *

* This is useful so you don't have to use setMenuEntries, * which will arraycopy a big array to several smaller arrays lol, * when you only want to change the left click one. diff --git a/runelite-api/src/main/java/net/runelite/api/FriendManager.java b/runelite-api/src/main/java/net/runelite/api/FriendManager.java index 4bdd5a496f..2047959f2c 100644 --- a/runelite-api/src/main/java/net/runelite/api/FriendManager.java +++ b/runelite-api/src/main/java/net/runelite/api/FriendManager.java @@ -27,6 +27,4 @@ package net.runelite.api; /** * Represents the friend and ignore list manager. */ -public interface FriendManager -{ -} +public interface FriendManager {} diff --git a/runelite-api/src/main/java/net/runelite/api/InventoryID.java b/runelite-api/src/main/java/net/runelite/api/InventoryID.java index 8fb91cc959..a5a077d0fa 100644 --- a/runelite-api/src/main/java/net/runelite/api/InventoryID.java +++ b/runelite-api/src/main/java/net/runelite/api/InventoryID.java @@ -98,13 +98,14 @@ public enum InventoryID public static InventoryID getValue(int value) { - for (InventoryID e: InventoryID.values()) + for (InventoryID e : InventoryID.values()) { if (e.id == value) { return e; } } - return null; + + throw new IllegalArgumentException("No InventoryID with id " + value + " exists"); } } \ No newline at end of file diff --git a/runelite-api/src/main/java/net/runelite/api/ItemID.java b/runelite-api/src/main/java/net/runelite/api/ItemID.java index 798561fa36..67d3302660 100644 --- a/runelite-api/src/main/java/net/runelite/api/ItemID.java +++ b/runelite-api/src/main/java/net/runelite/api/ItemID.java @@ -11327,5 +11327,45 @@ public final class ItemID public static final int BOUNTY_HUNTER_HAT_TIER_4 = 24344; public static final int BOUNTY_HUNTER_HAT_TIER_5 = 24346; public static final int BOUNTY_HUNTER_HAT_TIER_6 = 24348; + public static final int SCROLL_BOX_BEGINNER = 24361; + public static final int SCROLL_BOX_EASY = 24362; + public static final int SCROLL_BOX_MEDIUM = 24363; + public static final int SCROLL_BOX_HARD = 24364; + public static final int SCROLL_BOX_ELITE = 24365; + public static final int SCROLL_BOX_MASTER = 24366; + public static final int CABBAGE_24367 = 24367; + public static final int TWISTED_SLAYER_HELMET = 24370; + public static final int TWISTED_LEAGUE_DRAGON_TROPHY = 24372; + public static final int TWISTED_LEAGUE_RUNE_TROPHY = 24374; + public static final int TWISTED_LEAGUE_ADAMANT_TROPHY = 24376; + public static final int TWISTED_LEAGUE_MITHRIL_TROPHY = 24378; + public static final int TWISTED_LEAGUE_STEEL_TROPHY = 24380; + public static final int TWISTED_LEAGUE_IRON_TROPHY = 24382; + public static final int TWISTED_LEAGUE_BRONZE_TROPHY = 24384; + public static final int TWISTED_HAT_T3 = 24387; + public static final int TWISTED_COAT_T3 = 24389; + public static final int TWISTED_TROUSERS_T3 = 24391; + public static final int TWISTED_BOOTS_T3 = 24393; + public static final int TWISTED_CANE = 24395; + public static final int TWISTED_HAT_T2 = 24397; + public static final int TWISTED_COAT_T2 = 24399; + public static final int TWISTED_TROUSERS_T2 = 24401; + public static final int TWISTED_BOOTS_T2 = 24403; + public static final int TWISTED_HAT_T1 = 24405; + public static final int TWISTED_COAT_T1 = 24407; + public static final int TWISTED_TROUSERS_T1 = 24409; + public static final int TWISTED_BOOTS_T1 = 24411; + public static final int TWISTED_LEAGUE_BANNER = 24413; + public static final int RUNE_POUCH_L = 24416; + public static final int INQUISITORS_MACE = 24417; + public static final int SIRENS_TOME = 24418; + public static final int INQUISITORS_GREAT_HELM = 24419; + public static final int INQUISITORS_HAUBERK = 24420; + public static final int INQUISITORS_PLATESKIRT = 24421; + public static final int NIGHTMARE_STAFF = 24422; + public static final int HARMONISED_NIGHTMARE_STAFF = 24423; + public static final int VOLATILE_NIGHTMARE_STAFF = 24424; + public static final int ELDRITCH_NIGHTMARE_STAFF = 24425; + public static final int CABBAGE_24426 = 24426; /* This file is automatically generated. Do not edit. */ } diff --git a/runelite-api/src/main/java/net/runelite/api/KeyFocusListener.java b/runelite-api/src/main/java/net/runelite/api/KeyFocusListener.java index 990c200086..04a12649e2 100644 --- a/runelite-api/src/main/java/net/runelite/api/KeyFocusListener.java +++ b/runelite-api/src/main/java/net/runelite/api/KeyFocusListener.java @@ -27,6 +27,4 @@ package net.runelite.api; /** * Detects when the window is focused or unfocused. */ -public interface KeyFocusListener -{ -} +public interface KeyFocusListener {} diff --git a/runelite-api/src/main/java/net/runelite/api/ModelID.java b/runelite-api/src/main/java/net/runelite/api/ModelID.java new file mode 100644 index 0000000000..0a2ea46816 --- /dev/null +++ b/runelite-api/src/main/java/net/runelite/api/ModelID.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2018 Magic fTail + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.api; + +public final class ModelID +{ + public static final int ANVIL = 1251; + public static final int WILLOW_TREE = 1570; + public static final int SLAYER_SKILL_MODEL = 1733; + public static final int FIREMAKING_SKILL_MODEL = 2260; + public static final int STEEL_KITESHIELD = 2339; + public static final int PURE_ESSENCE = 2349; + public static final int RAW_TUNA = 2355; + public static final int CLEAN_HERB = 2364; + public static final int HAMMER = 2376; + public static final int BLUE_WIZARD_HAT = 2483; + public static final int CHISEL = 2489; + public static final int HIGHWAYMAN_MASK = 2500; + public static final int STEEL_PICKAXE = 2529; + public static final int SHORTBOW = 2562; + public static final int STEEL_LONGSWORD = 2602; + public static final int STEEL_SWORD = 2604; + public static final int STEEL_ARROW = 2711; + public static final int PRAYER_SKILL_MODEL = 3325; + public static final int STRENGTH_SKILL_MODEL = 3327; + public static final int AGILITY_SKILL_MODEL = 3328; + public static final int HEARTH = 3326; + public static final int WATERING_CAN = 7331; + public static final int SAW = 12309; + public static final int FOOTPRINT = 19980; + public static final int COOKING_SKILL_MODEL = 27611; +} \ No newline at end of file diff --git a/runelite-api/src/main/java/net/runelite/api/NPCDefinition.java b/runelite-api/src/main/java/net/runelite/api/NPCDefinition.java index 7486cc1068..d0cafa8b58 100644 --- a/runelite-api/src/main/java/net/runelite/api/NPCDefinition.java +++ b/runelite-api/src/main/java/net/runelite/api/NPCDefinition.java @@ -48,6 +48,8 @@ public interface NPCDefinition boolean isClickable(); + boolean isFollower(); + /** * Gets whether the NPC is visible on the mini-map. */ diff --git a/runelite-api/src/main/java/net/runelite/api/Nameable.java b/runelite-api/src/main/java/net/runelite/api/Nameable.java index 081074594e..419f5206ed 100644 --- a/runelite-api/src/main/java/net/runelite/api/Nameable.java +++ b/runelite-api/src/main/java/net/runelite/api/Nameable.java @@ -27,6 +27,4 @@ package net.runelite.api; /** * Represents a chat entity that has a name. */ -public interface Nameable extends Comparable -{ -} +public interface Nameable extends Comparable {} diff --git a/runelite-api/src/main/java/net/runelite/api/NpcID.java b/runelite-api/src/main/java/net/runelite/api/NpcID.java index fac80584cc..c40eac4e49 100644 --- a/runelite-api/src/main/java/net/runelite/api/NpcID.java +++ b/runelite-api/src/main/java/net/runelite/api/NpcID.java @@ -308,7 +308,8 @@ public final class NpcID public static final int FROG = 312; public static final int REACHER_313 = 313; public static final int DR_JEKYLL_314 = 314; - public static final int PAUL = 317; + public static final int LEAGUES_TUTOR = 315; + public static final int LEAGUES_TUTOR_316 = 316; public static final int DARK_CORE = 318; public static final int CORPOREAL_BEAST = 319; public static final int DARK_ENERGY_CORE = 320; @@ -7160,6 +7161,7 @@ public final class NpcID public static final int REVENANT_DARK_BEAST = 7938; public static final int REVENANT_KNIGHT = 7939; public static final int REVENANT_DRAGON = 7940; + public static final int PAUL = 7941; public static final int EMBLEM_TRADER_7943 = 7943; public static final int FISHING_SPOT_7946 = 7946; public static final int FISHING_SPOT_7947 = 7947; diff --git a/runelite-api/src/main/java/net/runelite/api/NullItemID.java b/runelite-api/src/main/java/net/runelite/api/NullItemID.java index f5a405debc..49dbc67c58 100644 --- a/runelite-api/src/main/java/net/runelite/api/NullItemID.java +++ b/runelite-api/src/main/java/net/runelite/api/NullItemID.java @@ -12814,5 +12814,43 @@ public final class NullItemID public static final int NULL_24345 = 24345; public static final int NULL_24347 = 24347; public static final int NULL_24349 = 24349; + public static final int NULL_24350 = 24350; + public static final int NULL_24351 = 24351; + public static final int NULL_24352 = 24352; + public static final int NULL_24353 = 24353; + public static final int NULL_24354 = 24354; + public static final int NULL_24355 = 24355; + public static final int NULL_24356 = 24356; + public static final int NULL_24357 = 24357; + public static final int NULL_24358 = 24358; + public static final int NULL_24359 = 24359; + public static final int NULL_24360 = 24360; + public static final int NULL_24368 = 24368; + public static final int NULL_24369 = 24369; + public static final int NULL_24371 = 24371; + public static final int NULL_24373 = 24373; + public static final int NULL_24375 = 24375; + public static final int NULL_24377 = 24377; + public static final int NULL_24379 = 24379; + public static final int NULL_24381 = 24381; + public static final int NULL_24383 = 24383; + public static final int NULL_24385 = 24385; + public static final int NULL_24386 = 24386; + public static final int NULL_24388 = 24388; + public static final int NULL_24390 = 24390; + public static final int NULL_24392 = 24392; + public static final int NULL_24394 = 24394; + public static final int NULL_24396 = 24396; + public static final int NULL_24398 = 24398; + public static final int NULL_24400 = 24400; + public static final int NULL_24402 = 24402; + public static final int NULL_24404 = 24404; + public static final int NULL_24406 = 24406; + public static final int NULL_24408 = 24408; + public static final int NULL_24410 = 24410; + public static final int NULL_24412 = 24412; + public static final int NULL_24414 = 24414; + public static final int NULL_24415 = 24415; + public static final int NULL_24427 = 24427; /* This file is automatically generated. Do not edit. */ } diff --git a/runelite-api/src/main/java/net/runelite/api/NullObjectID.java b/runelite-api/src/main/java/net/runelite/api/NullObjectID.java index feaf84d503..9a0be1f67a 100644 --- a/runelite-api/src/main/java/net/runelite/api/NullObjectID.java +++ b/runelite-api/src/main/java/net/runelite/api/NullObjectID.java @@ -13793,6 +13793,9 @@ public final class NullObjectID public static final int NULL_29134 = 29134; public static final int NULL_29135 = 29135; public static final int NULL_29150 = 29150; + public static final int NULL_29154 = 29154; + public static final int NULL_29155 = 29155; + public static final int NULL_29156 = 29156; public static final int NULL_29228 = 29228; public static final int NULL_29229 = 29229; public static final int NULL_29265 = 29265; @@ -18041,6 +18044,8 @@ public final class NullObjectID public static final int NULL_37436 = 37436; public static final int NULL_37437 = 37437; public static final int NULL_37438 = 37438; + public static final int NULL_37439 = 37439; + public static final int NULL_37440 = 37440; public static final int NULL_37446 = 37446; public static final int NULL_37447 = 37447; public static final int NULL_37448 = 37448; @@ -18052,5 +18057,22 @@ public final class NullObjectID public static final int NULL_37455 = 37455; public static final int NULL_37456 = 37456; public static final int NULL_37457 = 37457; + public static final int NULL_37467 = 37467; + public static final int NULL_37468 = 37468; + public static final int NULL_37469 = 37469; + public static final int NULL_37470 = 37470; + public static final int NULL_37471 = 37471; + public static final int NULL_37472 = 37472; + public static final int NULL_37473 = 37473; + public static final int NULL_37474 = 37474; + public static final int NULL_37475 = 37475; + public static final int NULL_37476 = 37476; + public static final int NULL_37477 = 37477; + public static final int NULL_37478 = 37478; + public static final int NULL_37479 = 37479; + public static final int NULL_37480 = 37480; + public static final int NULL_37481 = 37481; + public static final int NULL_37490 = 37490; + public static final int NULL_37491 = 37491; /* This file is automatically generated. Do not edit. */ } diff --git a/runelite-api/src/main/java/net/runelite/api/ObjectID.java b/runelite-api/src/main/java/net/runelite/api/ObjectID.java index 1b3e52cf3b..13a71b0f9f 100644 --- a/runelite-api/src/main/java/net/runelite/api/ObjectID.java +++ b/runelite-api/src/main/java/net/runelite/api/ObjectID.java @@ -15349,9 +15349,6 @@ public final class ObjectID public static final int MAHOGANY_ADVENTURE_LOG = 29151; public static final int GILDED_ADVENTURE_LOG = 29152; public static final int MARBLE_ADVENTURE_LOG = 29153; - public static final int BASIC_JEWELLERY_BOX = 29154; - public static final int FANCY_JEWELLERY_BOX = 29155; - public static final int ORNATE_JEWELLERY_BOX = 29156; public static final int BOSS_LAIR_DISPLAY = 29157; public static final int KRAKEN_DISPLAY = 29158; public static final int ZULRAH_DISPLAY = 29159; @@ -16927,7 +16924,7 @@ public final class ObjectID public static final int CORPOREAL_BEAST_DISPLAY = 31921; public static final int GILDED_ADVENTURE_LOG_31922 = 31922; public static final int ALTAR_OF_THE_OCCULT_31923 = 31923; - public static final int ORNATE_JEWELLERY_BOX_31924 = 31924; + public static final int ORNATE_JEWELLERY_BOX = 31924; public static final int MOUNTED_MAX_CAPE_31925 = 31925; public static final int BURNING_BRAZIER_31926 = 31926; public static final int PYROMANCER = 31927; @@ -19385,7 +19382,83 @@ public final class ObjectID public static final int ROUGH_WALL_37431 = 37431; public static final int STREAK_INFO = 37434; public static final int SWAMPY_SINK = 37435; + public static final int SHUTTERED_WINDOW_37441 = 37441; + public static final int DECORATIVE_WINDOW_37442 = 37442; + public static final int STAINEDGLASS_WINDOW_37443 = 37443; public static final int LOG_PILE_37444 = 37444; public static final int HOTSPOT_MARKER = 37445; + public static final int DECORATIVE_WINDOW_37450 = 37450; + public static final int STAINEDGLASS_WINDOW_37458 = 37458; + public static final int DECORATIVE_WINDOW_37459 = 37459; + public static final int STAINEDGLASS_WINDOW_37460 = 37460; + public static final int DECORATIVE_WINDOW_37461 = 37461; + public static final int STAINEDGLASS_WINDOW_37462 = 37462; + public static final int DOOR_37463 = 37463; + public static final int DOOR_37464 = 37464; + public static final int DOOR_37465 = 37465; + public static final int DOOR_37466 = 37466; + public static final int LEAGUE_FIRSTS_BOARD = 37482; + public static final int DRAGON_TROPHY_DISPLAY = 37483; + public static final int DRAGON_TROPHY_DISPLAY_37484 = 37484; + public static final int DRAGON_TROPHY_DISPLAY_37485 = 37485; + public static final int DRAGON_TROPHY_DISPLAY_37486 = 37486; + public static final int DRAGON_TROPHY_DISPLAY_37487 = 37487; + public static final int DRAGON_TROPHY_DISPLAY_37488 = 37488; + public static final int DRAGON_TROPHY_DISPLAY_37489 = 37489; + public static final int BASIC_JEWELLERY_BOX = 37492; + public static final int BASIC_JEWELLERY_BOX_37493 = 37493; + public static final int BASIC_JEWELLERY_BOX_37494 = 37494; + public static final int BASIC_JEWELLERY_BOX_37495 = 37495; + public static final int BASIC_JEWELLERY_BOX_37496 = 37496; + public static final int BASIC_JEWELLERY_BOX_37497 = 37497; + public static final int BASIC_JEWELLERY_BOX_37498 = 37498; + public static final int BASIC_JEWELLERY_BOX_37499 = 37499; + public static final int BASIC_JEWELLERY_BOX_37500 = 37500; + public static final int FANCY_JEWELLERY_BOX = 37501; + public static final int FANCY_JEWELLERY_BOX_37502 = 37502; + public static final int FANCY_JEWELLERY_BOX_37503 = 37503; + public static final int FANCY_JEWELLERY_BOX_37504 = 37504; + public static final int FANCY_JEWELLERY_BOX_37505 = 37505; + public static final int FANCY_JEWELLERY_BOX_37506 = 37506; + public static final int FANCY_JEWELLERY_BOX_37507 = 37507; + public static final int FANCY_JEWELLERY_BOX_37508 = 37508; + public static final int FANCY_JEWELLERY_BOX_37509 = 37509; + public static final int FANCY_JEWELLERY_BOX_37510 = 37510; + public static final int FANCY_JEWELLERY_BOX_37511 = 37511; + public static final int FANCY_JEWELLERY_BOX_37512 = 37512; + public static final int FANCY_JEWELLERY_BOX_37513 = 37513; + public static final int FANCY_JEWELLERY_BOX_37514 = 37514; + public static final int FANCY_JEWELLERY_BOX_37515 = 37515; + public static final int FANCY_JEWELLERY_BOX_37516 = 37516; + public static final int FANCY_JEWELLERY_BOX_37517 = 37517; + public static final int FANCY_JEWELLERY_BOX_37518 = 37518; + public static final int FANCY_JEWELLERY_BOX_37519 = 37519; + public static final int ORNATE_JEWELLERY_BOX_37520 = 37520; + public static final int ORNATE_JEWELLERY_BOX_37521 = 37521; + public static final int ORNATE_JEWELLERY_BOX_37522 = 37522; + public static final int ORNATE_JEWELLERY_BOX_37523 = 37523; + public static final int ORNATE_JEWELLERY_BOX_37524 = 37524; + public static final int ORNATE_JEWELLERY_BOX_37525 = 37525; + public static final int ORNATE_JEWELLERY_BOX_37526 = 37526; + public static final int ORNATE_JEWELLERY_BOX_37527 = 37527; + public static final int ORNATE_JEWELLERY_BOX_37528 = 37528; + public static final int ORNATE_JEWELLERY_BOX_37529 = 37529; + public static final int ORNATE_JEWELLERY_BOX_37530 = 37530; + public static final int ORNATE_JEWELLERY_BOX_37531 = 37531; + public static final int ORNATE_JEWELLERY_BOX_37532 = 37532; + public static final int ORNATE_JEWELLERY_BOX_37533 = 37533; + public static final int ORNATE_JEWELLERY_BOX_37534 = 37534; + public static final int ORNATE_JEWELLERY_BOX_37535 = 37535; + public static final int ORNATE_JEWELLERY_BOX_37536 = 37536; + public static final int ORNATE_JEWELLERY_BOX_37537 = 37537; + public static final int ORNATE_JEWELLERY_BOX_37538 = 37538; + public static final int ORNATE_JEWELLERY_BOX_37539 = 37539; + public static final int ORNATE_JEWELLERY_BOX_37540 = 37540; + public static final int ORNATE_JEWELLERY_BOX_37541 = 37541; + public static final int ORNATE_JEWELLERY_BOX_37542 = 37542; + public static final int ORNATE_JEWELLERY_BOX_37543 = 37543; + public static final int ORNATE_JEWELLERY_BOX_37544 = 37544; + public static final int ORNATE_JEWELLERY_BOX_37545 = 37545; + public static final int ORNATE_JEWELLERY_BOX_37546 = 37546; /* This file is automatically generated. Do not edit. */ } diff --git a/runelite-api/src/main/java/net/runelite/api/VarPlayer.java b/runelite-api/src/main/java/net/runelite/api/VarPlayer.java index 414ed46de9..69a6a82377 100644 --- a/runelite-api/src/main/java/net/runelite/api/VarPlayer.java +++ b/runelite-api/src/main/java/net/runelite/api/VarPlayer.java @@ -273,9 +273,12 @@ public enum VarPlayer QUEST_ENTER_THE_ABYSS(492), QUEST_ALFRED_GRIMHANDS_BARCRAWL(77), QUEST_ALFRED_GRIMHANDS_BARCRAWL_STATE_76(76), - QUEST_THE_MAGE_ARENA(267); - + QUEST_THE_MAGE_ARENA(267), + /** + * 0 = 2 buttons, 1 = 1 button + */ + MOUSE_BUTTONS(170); public final int id; } diff --git a/runelite-api/src/main/java/net/runelite/api/Varbits.java b/runelite-api/src/main/java/net/runelite/api/Varbits.java index 6b09685e1a..936f262036 100644 --- a/runelite-api/src/main/java/net/runelite/api/Varbits.java +++ b/runelite-api/src/main/java/net/runelite/api/Varbits.java @@ -698,7 +698,37 @@ public enum Varbits WITHDRAW_X_AMOUNT(3960), - IN_PVP_AREA(8121); + IN_PVP_AREA(8121), + + /** + * Twisted league + */ + TWISTED_LEAGUE_RELIC_1(10049), + TWISTED_LEAGUE_RELIC_2(10050), + TWISTED_LEAGUE_RELIC_3(10051), + TWISTED_LEAGUE_RELIC_4(10052), + TWISTED_LEAGUE_RELIC_5(10053), + + /** + * Value of hotkey varbits can be 0-13 + * 0 corresponds to no hotkey set + * 1-12 correspond to F1-F12 respectively + * 13 corresponds to escape + */ + COMBAT_TAB_HOTKEY(4675), + STATS_TAB_HOTKEY(4676), + QUESTS_TAB_HOTKEY(4677), + INVENTORY_TAB_HOTKEY(4678), + EQUIPMENT_TAB_HOTKEY(4679), + PRAYER_TAB_HOTKEY(4680), + SPELLBOOK_TAB_HOTKEY(4682), + FRIENDS_TAB_HOTKEY(4684), + ACCOUNT_MANAGEMENT_TAB_HOTKEY(6517), + LOGOUT_TAB_HOTKEY(4689), + OPTIONS_TAB_HOTKEY(4686), + EMOTES_TAB_HOTKEY(4687), + CLAN_TAB_HOTKEY(4683), + MUSIC_TAB_HOTKEY(4688); /** * The raw varbit ID. diff --git a/runelite-api/src/main/java/net/runelite/api/WorldType.java b/runelite-api/src/main/java/net/runelite/api/WorldType.java index ec44fedd09..bb895ad504 100644 --- a/runelite-api/src/main/java/net/runelite/api/WorldType.java +++ b/runelite-api/src/main/java/net/runelite/api/WorldType.java @@ -1,3 +1,27 @@ +/* + * Copyright (c) 2018, Tomas Slusny + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ package net.runelite.api; import java.util.Collection; @@ -36,18 +60,14 @@ public enum WorldType * Tournament world type. */ TOURNAMENT(1 << 25), - /** - * Deadman Tournament world type. - */ - DEADMAN_TOURNAMENT(1 << 26), /** * Deadman world type. */ DEADMAN(1 << 29), /** - * Seasonal deadman world type. + * League world type */ - SEASONAL_DEADMAN(1 << 30); + LEAGUE(1 << 30); private final int mask; @@ -58,44 +78,34 @@ public enum WorldType private static final EnumSet PVP_WORLD_TYPES = EnumSet.of( DEADMAN, - DEADMAN_TOURNAMENT, - PVP, - SEASONAL_DEADMAN + PVP ); - + private static final EnumSet DEADMAN_WORLD_TYPES = EnumSet.of( - DEADMAN, - DEADMAN_TOURNAMENT, - SEASONAL_DEADMAN + DEADMAN ); private static final EnumSet HIGHRISK_WORLD_TYPES = EnumSet.of( HIGH_RISK ); - + private static final EnumSet ALL_HIGHRISK_WORLD_TYPES = EnumSet.of( HIGH_RISK, - DEADMAN, - DEADMAN_TOURNAMENT, - SEASONAL_DEADMAN + DEADMAN ); private static final EnumSet ALL_PVP_WORLD_TYPES = EnumSet.of( HIGH_RISK, DEADMAN, - DEADMAN_TOURNAMENT, - PVP, - SEASONAL_DEADMAN + PVP ); private static final EnumSet ALL_PK_WORLD_TYPES = EnumSet.of( HIGH_RISK, DEADMAN, - DEADMAN_TOURNAMENT, PVP, - SEASONAL_DEADMAN, BOUNTY - ); + ); /** * Create enum set of world types from mask. @@ -137,10 +147,10 @@ public enum WorldType } /** - * Checks whether a world having a {@link Collection} of {@link WorldType}s is a PVP/DEADMAN/HIGHRISK world. + * Checks whether a world having a {@link Collection} of {@link WorldType}s is a PVP world. * * @param worldTypes A {@link Collection} of {@link WorldType}s describing the given world. - * @return True if the given worldtypes of the world are a PVP/DEADMAN/HIGHRISK world, false otherwise. + * @return True if the given worldtypes of the world are a PVP world, false otherwise. * @see Client#getWorldType() */ public static boolean isPvpWorld(final Collection worldTypes) @@ -157,19 +167,19 @@ public enum WorldType { return worldTypes.stream().anyMatch(HIGHRISK_WORLD_TYPES::contains); } - + public static boolean isAllHighRiskWorld(final Collection worldTypes) { return worldTypes.stream().anyMatch(ALL_HIGHRISK_WORLD_TYPES::contains); } - + public static boolean isAllPvpWorld(final Collection worldTypes) { return worldTypes.stream().anyMatch(ALL_PVP_WORLD_TYPES::contains); } - + public static boolean isAllPKWorld(final Collection worldTypes) { return worldTypes.stream().anyMatch(ALL_PK_WORLD_TYPES::contains); } -} +} \ No newline at end of file diff --git a/runelite-api/src/main/java/net/runelite/api/annotations/VisibleForDevtools.java b/runelite-api/src/main/java/net/runelite/api/annotations/VisibleForDevtools.java index 9357969d16..a9db920cf8 100644 --- a/runelite-api/src/main/java/net/runelite/api/annotations/VisibleForDevtools.java +++ b/runelite-api/src/main/java/net/runelite/api/annotations/VisibleForDevtools.java @@ -33,6 +33,4 @@ import java.lang.annotation.RetentionPolicy; */ @Documented @Retention(RetentionPolicy.SOURCE) -public @interface VisibleForDevtools -{ -} +public @interface VisibleForDevtools {} diff --git a/runelite-api/src/main/java/net/runelite/api/coords/WorldPoint.java b/runelite-api/src/main/java/net/runelite/api/coords/WorldPoint.java index c4a64301a0..bd9a33c0f6 100644 --- a/runelite-api/src/main/java/net/runelite/api/coords/WorldPoint.java +++ b/runelite-api/src/main/java/net/runelite/api/coords/WorldPoint.java @@ -33,6 +33,7 @@ import javax.annotation.Nullable; import lombok.Value; import net.runelite.api.Client; import static net.runelite.api.Constants.CHUNK_SIZE; +import static net.runelite.api.Constants.REGION_SIZE; import net.runelite.api.Perspective; /** @@ -416,6 +417,6 @@ public class WorldPoint private static int getRegionOffset(final int position) { - return position & 0x3f; + return position & (REGION_SIZE - 1); } } diff --git a/runelite-api/src/main/java/net/runelite/api/events/Event.java b/runelite-api/src/main/java/net/runelite/api/events/Event.java index 33ea361467..b031dce09e 100644 --- a/runelite-api/src/main/java/net/runelite/api/events/Event.java +++ b/runelite-api/src/main/java/net/runelite/api/events/Event.java @@ -1,5 +1,3 @@ package net.runelite.api.events; -public interface Event -{ -} +public interface Event {} diff --git a/runelite-api/src/main/java/net/runelite/api/events/LocalPlayerDeath.java b/runelite-api/src/main/java/net/runelite/api/events/FakeXpDrop.java similarity index 82% rename from runelite-api/src/main/java/net/runelite/api/events/LocalPlayerDeath.java rename to runelite-api/src/main/java/net/runelite/api/events/FakeXpDrop.java index 6b22cf1784..698805ab24 100644 --- a/runelite-api/src/main/java/net/runelite/api/events/LocalPlayerDeath.java +++ b/runelite-api/src/main/java/net/runelite/api/events/FakeXpDrop.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, Matthew Steglinski + * Copyright (c) 2019, Adam * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -24,15 +24,12 @@ */ package net.runelite.api.events; -/** - * An event when the local player dies. - */ -public class LocalPlayerDeath implements Event -{ - public static final LocalPlayerDeath INSTANCE = new LocalPlayerDeath(); +import lombok.Value; +import net.runelite.api.Skill; - private LocalPlayerDeath() - { - // noop - } +@Value +public class FakeXpDrop implements Event +{ + private final Skill skill; + private final int xp; } diff --git a/runelite-api/src/main/java/net/runelite/api/events/PlayerAppearanceChanged.java b/runelite-api/src/main/java/net/runelite/api/events/PlayerAppearanceChanged.java new file mode 100644 index 0000000000..501b5664a2 --- /dev/null +++ b/runelite-api/src/main/java/net/runelite/api/events/PlayerAppearanceChanged.java @@ -0,0 +1,13 @@ +package net.runelite.api.events; + +import lombok.Value; +import net.runelite.api.Player; + +/** + * This will fire whenever the {@link net.runelite.api.PlayerAppearance} hash changes. + */ +@Value +public class PlayerAppearanceChanged implements Event +{ + private Player player; +} diff --git a/runelite-api/src/main/java/net/runelite/api/hooks/Callbacks.java b/runelite-api/src/main/java/net/runelite/api/hooks/Callbacks.java index ef121b3ebe..275c599788 100644 --- a/runelite-api/src/main/java/net/runelite/api/hooks/Callbacks.java +++ b/runelite-api/src/main/java/net/runelite/api/hooks/Callbacks.java @@ -24,13 +24,13 @@ */ package net.runelite.api.hooks; -import net.runelite.api.MainBufferProvider; -import net.runelite.api.events.Event; -import net.runelite.api.widgets.WidgetItem; import java.awt.Graphics; import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; import java.awt.event.MouseWheelEvent; +import net.runelite.api.MainBufferProvider; +import net.runelite.api.events.Event; +import net.runelite.api.widgets.WidgetItem; /** * Interface of callbacks the injected client uses to send events @@ -42,14 +42,14 @@ public interface Callbacks * * @param event the event */ - void post(Class eventClass, Event event); + void post(Class eventClass, E event); /** * Post a deferred event, which gets delayed until the next cycle. * * @param event the event */ - void postDeferred(Class eventClass, Event event); + void postDeferred(Class eventClass, E event); /** * Called each client cycle. diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/Widget.java b/runelite-api/src/main/java/net/runelite/api/widgets/Widget.java index 3e938a65e9..b8cb626ae6 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/Widget.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/Widget.java @@ -26,7 +26,6 @@ package net.runelite.api.widgets; import java.awt.Rectangle; import java.util.Collection; - import net.runelite.api.FontTypeFace; import net.runelite.api.Point; import net.runelite.api.Sprite; @@ -243,13 +242,6 @@ public interface Widget */ void setName(String name); - /** - * Gets the model ID displayed in the widget. - * - * @return the model ID - */ - int getModelId(); - /** * Gets the sprite ID displayed in the widget. * @@ -295,6 +287,76 @@ public interface Widget */ int getIndex(); + /** + * Gets the model ID displayed in the widget. + * + * @return the model ID + */ + int getModelId(); + + /** + * Sets the model ID displayed in the widget + * + * @param modelId the new model ID + */ + void setModelId(int modelId); + + /** + * Gets the x rotation of the model displayed in the widget + * + * @return the x rotation + */ + int getRotationX(); + + /** + * Sets the x rotation of the model displayed in the widget + * + * @param rotationX 0 = no rotation, 2047 = full rotation, outside range = crash + */ + void setRotationX(int rotationX); + + /** + * Gets the y rotation of the model displayed in the widget + * + * @return the y rotation + */ + int getRotationY(); + + /** + * Sets the y rotation of the model displayed in the widget + * + * @param rotationY 0 = no rotation, 2047 = full rotation, outside range = crash + */ + void setRotationY(int rotationY); + + /** + * Gets the z rotation of the model displayed in the widget + * + * @return the z rotation + */ + int getRotationZ(); + + /** + * Sets the z rotation of the model displayed in the widget + * + * @param rotationZ 0 = no rotation, 2047 = full rotation, outside range = crash + */ + void setRotationZ(int rotationZ); + + /** + * Gets the amount zoomed in on the model displayed in the widget + * + * @return the amount zoomed in + */ + int getModelZoom(); + + /** + * Sets the amount zoomed in on the model displayed in the widget + * + * @param modelZoom the new zoom amount + */ + void setModelZoom(int modelZoom); + /** * Gets the location the widget is being drawn on the canvas. *

diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java index 838bb1572e..93e23206c1 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java @@ -162,6 +162,7 @@ public class WidgetID public static final int JEWELLERY_BOX_GROUP_ID = 590; public static final int OPTIONS_GROUP_ID = 261; public static final int THEATRE_OF_BLOOD_PARTY_GROUP_ID = 28; + public static final int GWD_KC_GROUP_ID = 406; static class WorldMap { @@ -361,126 +362,126 @@ public class WidgetID static class Viewport { - static final int MINIMAP_RESIZABLE_WIDGET = 17; - static final int MINIMAP_RESIZABLE_CLICKBOX = 18; - static final int MINIMAP_RESIZABLE_DRAW_AREA = 25; - static final int MINIMAP_RESIZABLE_DECORATIONS = 27; - static final int MINIMAP_RESIZABLE_ORB_HOLDER = 28; - static final int MINIMAP_RESIZABLE_LOGOUT_BUTTON = 30; + static final int MINIMAP_RESIZABLE_WIDGET = 18; + static final int MINIMAP_RESIZABLE_CLICKBOX = 19; + static final int MINIMAP_RESIZABLE_DRAW_AREA = 26; + static final int MINIMAP_RESIZABLE_DECORATIONS = 28; + static final int MINIMAP_RESIZABLE_ORB_HOLDER = 29; + static final int MINIMAP_RESIZABLE_LOGOUT_BUTTON = 31; static final int FIXED_VIEWPORT = 17; - static final int RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX = 12; - static final int RESIZABLE_VIEWPORT_BOTTOM_LINE = 12; + static final int RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX = 13; + static final int RESIZABLE_VIEWPORT_BOTTOM_LINE = 13; } static class FixedViewport { static final int MINIMAP = 3; static final int MINIMAP_DRAW_AREA = 8; - static final int MULTICOMBAT_INDICATOR = 20; - static final int BANK_PIN = 21; - static final int CLAN_CHAT_TAB = 31; - static final int FRIENDS_TAB = 33; - static final int IGNORES_TAB = 32; - static final int LOGOUT_TAB = 34; - static final int OPTIONS_TAB = 35; - static final int EMOTES_TAB = 36; - static final int MUSIC_TAB = 37; - static final int CLAN_CHAT_ICON = 38; - static final int FRIENDS_ICON = 40; - static final int IGNORES_ICON = 39; - static final int LOGOUT_ICON = 41; - static final int OPTIONS_ICON = 42; - static final int EMOTES_ICON = 43; - static final int MUSIC_ICON = 44; - static final int COMBAT_TAB = 48; - static final int STATS_TAB = 49; - static final int QUESTS_TAB = 50; - static final int INVENTORY_TAB = 51; - static final int EQUIPMENT_TAB = 52; - static final int PRAYER_TAB = 53; - static final int MAGIC_TAB = 54; - static final int COMBAT_ICON = 55; - static final int STATS_ICON = 56; - static final int QUESTS_ICON = 57; - static final int INVENTORY_ICON = 58; - static final int EQUIPMENT_ICON = 59; - static final int PRAYER_ICON = 60; - static final int MAGIC_ICON = 61; - static final int ROOT_INTERFACE_CONTAINER = 62; - static final int BANK_CONTAINER = 64; - static final int INTERFACE_CONTAINER = 65; - static final int INVENTORY_CONTAINER = 69; + static final int MULTICOMBAT_INDICATOR = 21; + static final int BANK_PIN = 22; + static final int CLAN_CHAT_TAB = 32; + static final int FRIENDS_TAB = 34; + static final int IGNORES_TAB = 33; + static final int LOGOUT_TAB = 35; + static final int OPTIONS_TAB = 36; + static final int EMOTES_TAB = 37; + static final int MUSIC_TAB = 38; + static final int CLAN_CHAT_ICON = 39; + static final int FRIENDS_ICON = 41; + static final int IGNORES_ICON = 40; + static final int LOGOUT_ICON = 42; + static final int OPTIONS_ICON = 43; + static final int EMOTES_ICON = 44; + static final int MUSIC_ICON = 45; + static final int COMBAT_TAB = 49; + static final int STATS_TAB = 50; + static final int QUESTS_TAB = 51; + static final int INVENTORY_TAB = 52; + static final int EQUIPMENT_TAB = 53; + static final int PRAYER_TAB = 54; + static final int MAGIC_TAB = 55; + static final int COMBAT_ICON = 56; + static final int STATS_ICON = 57; + static final int QUESTS_ICON = 58; + static final int INVENTORY_ICON = 59; + static final int EQUIPMENT_ICON = 60; + static final int PRAYER_ICON = 61; + static final int MAGIC_ICON = 62; + static final int ROOT_INTERFACE_CONTAINER = 63; + static final int BANK_CONTAINER = 65; + static final int INTERFACE_CONTAINER = 66; + static final int INVENTORY_CONTAINER = 70; } static class ResizableViewport { static final int ITEMS_KEPT_ON_DEATH = 13; static final int BANK_PIN = 13; - static final int MULTICOMBAT_INDICATOR = 16; - static final int CLAN_CHAT_TAB = 35; - static final int FRIENDS_TAB = 37; - static final int IGNORES_TAB = 36; - static final int LOGOUT_TAB = 38; - static final int OPTIONS_TAB = 39; - static final int EMOTES_TAB = 40; - static final int MUSIC_TAB = 41; - static final int CLAN_CHAT_ICON = 42; - static final int FRIENDS_ICON = 44; - static final int IGNORES_ICON = 43; - static final int LOGOUT_ICON = 45; - static final int OPTIONS_ICON = 46; - static final int EMOTES_ICON = 47; - static final int MUSIC_ICON = 48; - static final int COMBAT_TAB = 51; - static final int STATS_TAB = 52; - static final int QUESTS_TAB = 53; - static final int INVENTORY_TAB = 54; - static final int EQUIPMENT_TAB = 55; - static final int PRAYER_TAB = 56; - static final int MAGIC_TAB = 57; - static final int COMBAT_ICON = 58; - static final int STATS_ICON = 59; - static final int QUESTS_ICON = 60; - static final int INVENTORY_ICON = 61; - static final int EQUIPMENT_ICON = 62; - static final int PRAYER_ICON = 63; - static final int MAGIC_ICON = 64; - static final int INTERFACE_CONTAINER = 65; - static final int INVENTORY_CONTAINER = 71; + static final int MULTICOMBAT_INDICATOR = 17; + static final int CLAN_CHAT_TAB = 36; + static final int FRIENDS_TAB = 38; + static final int IGNORES_TAB = 37; + static final int LOGOUT_TAB = 39; + static final int OPTIONS_TAB = 40; + static final int EMOTES_TAB = 41; + static final int MUSIC_TAB = 42; + static final int CLAN_CHAT_ICON = 43; + static final int FRIENDS_ICON = 45; + static final int IGNORES_ICON = 44; + static final int LOGOUT_ICON = 46; + static final int OPTIONS_ICON = 47; + static final int EMOTES_ICON = 48; + static final int MUSIC_ICON = 49; + static final int COMBAT_TAB = 52; + static final int STATS_TAB = 53; + static final int QUESTS_TAB = 54; + static final int INVENTORY_TAB = 55; + static final int EQUIPMENT_TAB = 56; + static final int PRAYER_TAB = 57; + static final int MAGIC_TAB = 58; + static final int COMBAT_ICON = 59; + static final int STATS_ICON = 60; + static final int QUESTS_ICON = 61; + static final int INVENTORY_ICON = 62; + static final int EQUIPMENT_ICON = 63; + static final int PRAYER_ICON = 64; + static final int MAGIC_ICON = 65; + static final int INTERFACE_CONTAINER = 66; + static final int INVENTORY_CONTAINER = 72; } static class ResizableViewportBottomLine { static final int BANK_PIN = 13; - static final int LOGOUT_BUTTON_OVERLAY = 29; + static final int LOGOUT_BUTTON_OVERLAY = 30; static final int CMB_TAB = 50; - static final int CMB_ICON = 57; + static final int CMB_ICON = 58; static final int SKILLS_TAB = 51; - static final int SKILLS_ICON = 58; + static final int SKILLS_ICON = 59; static final int QUESTS_TAB = 52; - static final int QUESTS_ICON = 59; - static final int INVENTORY_TAB = 53; - static final int INVENTORY_ICON = 60; + static final int QUESTS_ICON = 60; + static final int INVENTORY_TAB = 54; + static final int INVENTORY_ICON = 61; static final int EQUIP_TAB = 54; - static final int EQUIP_ICON = 61; - static final int PRAYER_TAB = 55; - static final int PRAYER_ICON = 62; - static final int MAGIC_TAB = 56; + static final int EQUIP_ICON = 62; + static final int PRAYER_TAB = 56; + static final int PRAYER_ICON = 63; + static final int SPELL_TAB = 56; static final int SPELL_ICON = 53; static final int FC_TAB = 35; - static final int FC_ICON = 41; + static final int FC_ICON = 42; static final int IGNORE_TAB = 36; static final int IGNORE_ICON = 42; static final int FRIEND_TAB = 37; - static final int FRIEND_ICON = 43; + static final int FRIEND_ICON = 44; static final int SETTINGS_TAB = 38; - static final int SETTINGS_ICON = 44; + static final int SETTINGS_ICON = 45; static final int EMOTE_TAB = 39; - static final int EMOTE_ICON = 45; + static final int EMOTE_ICON = 46; static final int MUSIC_TAB = 40; - static final int MUSIC_ICON = 46; - static final int MAGIC_ICON = 63; - static final int INVENTORY_CONTAINER = 71; + static final int MUSIC_ICON = 47; + static final int MAGIC_ICON = 64; + static final int INVENTORY_CONTAINER = 72; } static class Chatbox @@ -659,6 +660,11 @@ public class WidgetID static final int REWARD_TEXT = 57; } + static class GWD + { + static final int CONTAINER = 7; + } + static class LevelUp { static final int SKILL = 1; @@ -830,164 +836,178 @@ public class WidgetID static class SpellBook { - static final int FILTERED_SPELLS_PARENT = 1; static final int FILTERED_SPELLS_BOUNDS = 3; + static final int TOOLTIP = 189; // NORMAL SPELLS - static final int LUMBRIDGE_HOME_TELEPORT = 4; - static final int WIND_STRIKE = 5; - static final int CONFUSE = 6; - static final int ENCHANT_CROSSBOW_BOLT = 7; - static final int WATER_STRIKE = 8; - static final int LVL_1_ENCHANT = 9; - static final int EARTH_STRIKE = 10; - static final int WEAKEN = 11; - static final int FIRE_STRIKE = 12; - static final int BONES_TO_BANANAS = 13; - static final int WIND_BOLT = 14; - static final int CURSE = 15; - static final int BIND = 16; - static final int LOW_LEVEL_ALCHEMY = 17; - static final int WATER_BOLT = 18; - static final int VARROCK_TELEPORT = 19; - static final int LVL_2_ENCHANT = 20; - static final int EARTH_BOLT = 21; - static final int LUMBRIDGE_TELEPORT = 22; - static final int TELEKINETIC_GRAB = 23; - static final int FIRE_BOLT = 24; - static final int FALADOR_TELEPORT = 25; - static final int CRUMBLE_UNDEAD = 26; - static final int TELEPORT_TO_HOUSE = 27; - static final int WIND_BLAST = 28; - static final int SUPERHEAT_ITEM = 29; - static final int CAMELOT_TELEPORT = 30; - static final int WATER_BLAST = 31; - static final int LVL_3_ENCHANT = 32; - static final int IBAN_BLAST = 33; - static final int SNARE = 34; - static final int MAGIC_DART = 35; - static final int ARDOUGNE_TELEPORT = 36; - static final int EARTH_BLAST = 37; - static final int HIGH_LEVEL_ALCHEMY = 38; - static final int CHARGE_WATER_ORB = 39; - static final int LVL_4_ENCHANT = 40; - static final int WATCHTOWER_TELEPORT = 41; - static final int FIRE_BLAST = 42; - static final int CHARGE_EARTH_ORB = 43; - static final int BONES_TO_PEACHES = 44; - static final int SARADOMIN_STRIKE = 45; - static final int CLAWS_OF_GUTHIX = 46; - static final int FLAMES_OF_ZAMORAK = 47; - static final int TROLLHEIM_TELEPORT = 48; - static final int WIND_WAVE = 49; - static final int CHARGE_FIRE_ORB = 50; - static final int TELEPORT_TO_APE_ATOLL = 51; - static final int WATER_WAVE = 52; - static final int CHARGE_AIR_ORB = 53; - static final int VULNERABILITY = 54; - static final int LVL_5_ENCHANT = 55; - static final int TELEPORT_TO_KOUREND = 56; - static final int EARTH_WAVE = 57; - static final int ENFEEBLE = 58; - static final int TELEOTHER_LUMBRIDGE = 59; - static final int FIRE_WAVE = 60; - static final int ENTANGLE = 61; - static final int STUN = 62; - static final int CHARGE = 63; - static final int WIND_SURGE = 64; - static final int TELEOTHER_FALADOR = 65; - static final int WATER_SURGE = 66; - static final int TELE_BLOCK = 67; - static final int BOUNTY_TARGET_TELEPORT = 68; - static final int LVL_6_ENCHANT = 69; - static final int TELEOTHER_CAMELOT = 70; - static final int EARTH_SURGE = 71; - static final int LVL_7_ENCHANT = 72; - static final int FIRE_SURGE = 73; + static final int LUMBRIDGE_HOME_TELEPORT = 5; + static final int WIND_STRIKE = 6; + static final int CONFUSE = 7; + static final int ENCHANT_CROSSBOW_BOLT = 8; + static final int WATER_STRIKE = 9; + static final int LVL_1_ENCHANT = 10; + static final int EARTH_STRIKE = 11; + static final int WEAKEN = 12; + static final int FIRE_STRIKE = 13; + static final int BONES_TO_BANANAS = 14; + static final int WIND_BOLT = 15; + static final int CURSE = 16; + static final int BIND = 17; + static final int LOW_LEVEL_ALCHEMY = 18; + static final int WATER_BOLT = 19; + static final int VARROCK_TELEPORT = 20; + static final int LVL_2_ENCHANT = 21; + static final int EARTH_BOLT = 22; + static final int LUMBRIDGE_TELEPORT = 23; + static final int TELEKINETIC_GRAB = 24; + static final int FIRE_BOLT = 25; + static final int FALADOR_TELEPORT = 26; + static final int CRUMBLE_UNDEAD = 27; + static final int TELEPORT_TO_HOUSE = 28; + static final int WIND_BLAST = 29; + static final int SUPERHEAT_ITEM = 30; + static final int CAMELOT_TELEPORT = 31; + static final int WATER_BLAST = 32; + static final int LVL_3_ENCHANT = 33; + static final int IBAN_BLAST = 34; + static final int SNARE = 35; + static final int MAGIC_DART = 36; + static final int ARDOUGNE_TELEPORT = 37; + static final int EARTH_BLAST = 38; + static final int HIGH_LEVEL_ALCHEMY = 39; + static final int CHARGE_WATER_ORB = 40; + static final int LVL_4_ENCHANT = 41; + static final int WATCHTOWER_TELEPORT = 42; + static final int FIRE_BLAST = 43; + static final int CHARGE_EARTH_ORB = 44; + static final int BONES_TO_PEACHES = 45; + static final int SARADOMIN_STRIKE = 46; + static final int CLAWS_OF_GUTHIX = 47; + static final int FLAMES_OF_ZAMORAK = 48; + static final int TROLLHEIM_TELEPORT = 49; + static final int WIND_WAVE = 50; + static final int CHARGE_FIRE_ORB = 51; + static final int TELEPORT_TO_APE_ATOLL = 52; + static final int WATER_WAVE = 53; + static final int CHARGE_AIR_ORB = 54; + static final int VULNERABILITY = 55; + static final int LVL_5_ENCHANT = 56; + static final int TELEPORT_TO_KOUREND = 57; + static final int EARTH_WAVE = 58; + static final int ENFEEBLE = 59; + static final int TELEOTHER_LUMBRIDGE = 60; + static final int FIRE_WAVE = 61; + static final int ENTANGLE = 62; + static final int STUN = 63; + static final int CHARGE = 64; + static final int WIND_SURGE = 65; + static final int TELEOTHER_FALADOR = 66; + static final int WATER_SURGE = 67; + static final int TELE_BLOCK = 68; + static final int BOUNTY_TARGET_TELEPORT = 69; + static final int LVL_6_ENCHANT = 70; + static final int TELEOTHER_CAMELOT = 71; + static final int EARTH_SURGE = 72; + static final int LVL_7_ENCHANT = 73; + static final int FIRE_SURGE = 74; // ANCIENT SPELLS - static final int ICE_RUSH = 74; - static final int ICE_BLITZ = 75; - static final int ICE_BURST = 76; - static final int ICE_BARRAGE = 77; - static final int BLOOD_RUSH = 78; - static final int BLOOD_BLITZ = 79; - static final int BLOOD_BURST = 80; - static final int BLOOD_BARRAGE = 81; - static final int SMOKE_RUSH = 82; - static final int SMOKE_BLITZ = 83; - static final int SMOKE_BURST = 84; - static final int SMOKE_BARRAGE = 85; - static final int SHADOW_RUSH = 86; - static final int SHADOW_BLITZ = 87; - static final int SHADOW_BURST = 88; - static final int SHADOW_BARRAGE = 89; - static final int PADDEWWA_TELEPORT = 90; - static final int SENNTISTEN_TELEPORT = 91; - static final int KHARYRLL_TELEPORT = 92; - static final int LASSAR_TELEPORT = 93; - static final int DAREEYAK_TELEPORT = 94; - static final int CARRALLANGER_TELEPORT = 95; - static final int ANNAKARL_TELEPORT = 96; - static final int GHORROCK_TELEPORT = 97; - static final int EDGEVILLE_HOME_TELEPORT = 98; - static final int TOOLTIP = 188; - + static final int ICE_RUSH = 75; + static final int ICE_BLITZ = 76; + static final int ICE_BURST = 77; + static final int ICE_BARRAGE = 78; + static final int BLOOD_RUSH = 79; + static final int BLOOD_BLITZ = 80; + static final int BLOOD_BURST = 81; + static final int BLOOD_BARRAGE = 82; + static final int SMOKE_RUSH = 83; + static final int SMOKE_BLITZ = 84; + static final int SMOKE_BURST = 85; + static final int SMOKE_BARRAGE = 86; + static final int SHADOW_RUSH = 87; + static final int SHADOW_BLITZ = 88; + static final int SHADOW_BURST = 89; + static final int SHADOW_BARRAGE = 90; + static final int PADDEWWA_TELEPORT = 91; + static final int SENNTISTEN_TELEPORT = 92; + static final int KHARYRLL_TELEPORT = 93; + static final int LASSAR_TELEPORT = 94; + static final int DAREEYAK_TELEPORT = 95; + static final int CARRALLANGER_TELEPORT = 96; + static final int ANNAKARL_TELEPORT = 97; + static final int GHORROCK_TELEPORT = 98; + static final int EDGEVILLE_HOME_TELEPORT = 99; // LUNAR SPELLS - static final int LUNAR_HOME_TELEPORT = 99; - static final int BAKE_PIE = 100; - static final int CURE_PLANT = 101; - static final int MONSTER_EXAMINE = 102; - static final int NPC_CONTACT = 103; - static final int CURE_OTHER = 104; - static final int HUMIDIFY = 105; - static final int MOONCLAN_TELEPORT = 106; - static final int TELE_GROUP_MOONCLAN = 107; - static final int CURE_ME = 108; - static final int HUNTER_KIT = 109; - static final int WATERBIRTH_TELEPORT = 110; - static final int TELE_GROUP_WATERBIRTH = 111; - static final int CURE_GROUP = 112; - static final int STAT_SPY = 113; - static final int BARBARIAN_TELEPORT = 114; - static final int TELE_GROUP_BARBARIAN = 115; - static final int SUPERGLASS_MAKE = 116; - static final int TAN_LEATHER = 117; - static final int KHAZARD_TELEPORT = 118; - static final int TELE_GROUP_KHAZARD = 119; - static final int DREAM = 120; - static final int STRING_JEWELLERY = 121; - static final int STAT_RESTORE_POT_SHARE = 122; - static final int MAGIC_IMBUE = 123; - static final int FERTILE_SOIL = 124; - static final int BOOST_POTION_SHARE = 125; - static final int FISHING_GUILD_TELEPORT = 126; - static final int TELE_GROUP_FISHING_GUILD = 127; - static final int PLANK_MAKE = 128; - static final int CATHERBY_TELEPORT = 129; - static final int TELE_GROUP_CATHERBY = 130; - static final int RECHARGE_DRAGONSTONE = 131; - static final int ICE_PLATEAU_TELEPORT = 132; - static final int TELE_GROUP_ICE_PLATEAU = 133; - static final int ENERGY_TRANSFER = 134; - static final int HEAL_OTHER = 135; - static final int VENGEANCE_OTHER = 136; - static final int VENGEANCE = 137; - static final int HEAL_GROUP = 138; - static final int SPELLBOOK_SWAP = 139; - static final int GEOMANCY = 140; - static final int SPIN_FLAX = 141; - static final int OURANIA_TELEPORT = 142; + static final int LUNAR_HOME_TELEPORT = 100; + static final int BAKE_PIE = 101; + static final int CURE_PLANT = 102; + static final int MONSTER_EXAMINE = 103; + static final int NPC_CONTACT = 104; + static final int CURE_OTHER = 105; + static final int HUMIDIFY = 106; + static final int MOONCLAN_TELEPORT = 107; + static final int TELE_GROUP_MOONCLAN = 108; + static final int CURE_ME = 109; + static final int HUNTER_KIT = 110; + static final int WATERBIRTH_TELEPORT = 111; + static final int TELE_GROUP_WATERBIRTH = 112; + static final int CURE_GROUP = 113; + static final int STAT_SPY = 114; + static final int BARBARIAN_TELEPORT = 115; + static final int TELE_GROUP_BARBARIAN = 116; + static final int SUPERGLASS_MAKE = 117; + static final int TAN_LEATHER = 118; + static final int KHAZARD_TELEPORT = 119; + static final int TELE_GROUP_KHAZARD = 120; + static final int DREAM = 121; + static final int STRING_JEWELLERY = 122; + static final int STAT_RESTORE_POT_SHARE = 123; + static final int MAGIC_IMBUE = 124; + static final int FERTILE_SOIL = 125; + static final int BOOST_POTION_SHARE = 126; + static final int FISHING_GUILD_TELEPORT = 127; + static final int TELE_GROUP_FISHING_GUILD = 128; + static final int PLANK_MAKE = 129; + static final int CATHERBY_TELEPORT = 130; + static final int TELE_GROUP_CATHERBY = 131; + static final int RECHARGE_DRAGONSTONE = 132; + static final int ICE_PLATEAU_TELEPORT = 133; + static final int TELE_GROUP_ICE_PLATEAU = 134; + static final int ENERGY_TRANSFER = 135; + static final int HEAL_OTHER = 136; + static final int VENGEANCE_OTHER = 137; + static final int VENGEANCE = 138; + static final int HEAL_GROUP = 139; + static final int SPELLBOOK_SWAP = 140; + static final int GEOMANCY = 141; + static final int SPIN_FLAX = 142; + static final int OURANIA_TELEPORT = 143; // ARCEUUS SPELLS - static final int ARCEUUS_HOME_TELEPORT = 143; - static final int BATTLEFRONT_TELEPORT = 178; + static final int ARCEUUS_HOME_TELEPORT = 144; + static final int BATTLEFRONT_TELEPORT = 179; + } - static final int FILTER_SECTION_PARENT = 181; - static final int FILTER_BUTTONS_PARENT = 184; - static final int FILTER_BUTTON_PARENT = 185; - static final int FILTER_BUTTON = 187; + static class StandardSpellBook + { + static final int LUMBRIDGE_HOME_TELEPORT = 5; + static final int KOUREND_HOME_TELEPORT = 4; + } + + static class AncientSpellBook + { + static final int EDGEVILLE_HOME_TELEPORT = 99; + } + + static class LunarSpellBook + { + static final int LUNAR_HOME_TELEPORT = 100; + } + + static class ArceuusSpellBook + { + static final int ARCEUUS_HOME_TELEPORT = 144; } static class Pvp @@ -1025,7 +1045,7 @@ public class WidgetID static class FullScreenMap { - static final int ROOT = 25; + static final int ROOT = 26; } static class QuestList diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java index 7addb9f06d..d5f995ff3d 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java @@ -271,7 +271,7 @@ public enum WidgetInfo RESIZABLE_VIEWPORT_BOTTOM_LINE_EQUIPMENT_ICON(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.ResizableViewportBottomLine.EQUIP_ICON), RESIZABLE_VIEWPORT_BOTTOM_LINE_COMBAT_ICON(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.ResizableViewportBottomLine.CMB_ICON), RESIZABLE_VIEWPORT_BOTTOM_LINE_STATS_ICON(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.ResizableViewportBottomLine.SKILLS_ICON), - RESIZABLE_VIEWPORT_BOTTOM_LINE_MAGIC_TAB(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.ResizableViewportBottomLine.MAGIC_TAB), + RESIZABLE_VIEWPORT_BOTTOM_LINE_MAGIC_TAB(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.ResizableViewportBottomLine.SPELL_TAB), RESIZABLE_VIEWPORT_BOTTOM_LINE_MAGIC_ICON(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.ResizableViewportBottomLine.MAGIC_ICON), RESIZABLE_VIEWPORT_BOTTOM_LINE_FRIEND_ICON(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.ResizableViewportBottomLine.FRIEND_ICON), RESIZABLE_VIEWPORT_BOTTOM_LINE_FRIEND_CHAT_ICON(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.ResizableViewportBottomLine.FC_ICON), @@ -430,6 +430,8 @@ public enum WidgetInfo MOTHERLODE_MINE(WidgetID.MOTHERLODE_MINE_GROUP_ID, 0), THEATRE_OF_BLOOD_PARTY(WidgetID.THEATRE_OF_BLOOD_PARTY_GROUP_ID, WidgetID.TheatreOfBloodParty.CONTAINER), + + GWD_KC(WidgetID.GWD_KC_GROUP_ID, WidgetID.GWD.CONTAINER), PUZZLE_BOX(WidgetID.PUZZLE_BOX_GROUP_ID, WidgetID.PuzzleBox.VISIBLE_BOX), @@ -512,6 +514,7 @@ public enum WidgetInfo PVP_FOG_OVERLAY(WidgetID.PVP_GROUP_ID, WidgetID.Pvp.FOG_OVERLAY), PVP_CONTAINER(WidgetID.PVP_GROUP_ID, WidgetID.Pvp.PVP_WIDGET_CONTAINER), + PVP_SKULL_CONTAINER(WidgetID.PVP_GROUP_ID, WidgetID.Pvp.SKULL_CONTAINER), PVP_SKULL(WidgetID.PVP_GROUP_ID, WidgetID.Pvp.SKULL), PVP_ATTACK_RANGE(WidgetID.PVP_GROUP_ID, WidgetID.Pvp.ATTACK_RANGE), @@ -523,10 +526,9 @@ public enum WidgetInfo PVP_KILLDEATH_COUNTER(WidgetID.PVP_GROUP_ID, WidgetID.Pvp.KILLDEATH_RATIO), SPELLBOOK(WidgetID.SPELLBOOK_GROUP_ID, 0), - SPELLBOOK_FILTERED_SPELLS_PARENT(WidgetID.SPELLBOOK_GROUP_ID, WidgetID.SpellBook.FILTERED_SPELLS_PARENT), SPELLBOOK_FILTERED_BOUNDS(WidgetID.SPELLBOOK_GROUP_ID, WidgetID.SpellBook.FILTERED_SPELLS_BOUNDS), -/* STANDARD SPELL BOOK WIDGETS*/ + /* STANDARD SPELL BOOK WIDGETS*/ SPELL_LUMBRIDGE_HOME_TELEPORT(WidgetID.SPELLBOOK_GROUP_ID, WidgetID.SpellBook.LUMBRIDGE_HOME_TELEPORT), SPELL_WIND_STRIKE(WidgetID.SPELLBOOK_GROUP_ID, WidgetID.SpellBook.WIND_STRIKE), SPELL_CONFUSE(WidgetID.SPELLBOOK_GROUP_ID, WidgetID.SpellBook.CONFUSE), @@ -597,7 +599,7 @@ public enum WidgetInfo SPELL_LVL_7_ENCHANT(WidgetID.SPELLBOOK_GROUP_ID, WidgetID.SpellBook.LVL_7_ENCHANT), SPELL_FIRE_SURGE(WidgetID.SPELLBOOK_GROUP_ID, WidgetID.SpellBook.FIRE_SURGE), SPELL_BOUNTY_TARGET_TELEPORT2(WidgetID.SPELLBOOK_GROUP_ID, WidgetID.SpellBook.BOUNTY_TARGET_TELEPORT), -/* END OF STANDARD SPELL BOOK WIDGETS*/ + /* END OF STANDARD SPELL BOOK WIDGETS*/ /* ANCIENT SPELL BOOK WIDGETS*/ SPELL_ICE_RUSH(WidgetID.SPELLBOOK_GROUP_ID, WidgetID.SpellBook.ICE_RUSH), @@ -626,9 +628,9 @@ public enum WidgetInfo SPELL_GHORROCK_TELEPORT(WidgetID.SPELLBOOK_GROUP_ID, WidgetID.SpellBook.GHORROCK_TELEPORT), SPELL_EDGEVILLE_HOME_TELEPORT(WidgetID.SPELLBOOK_GROUP_ID, WidgetID.SpellBook.EDGEVILLE_HOME_TELEPORT), SPELL_BOUNTY_TARGET_TELEPORT(WidgetID.SPELLBOOK_GROUP_ID, WidgetID.SpellBook.BOUNTY_TARGET_TELEPORT), -/* END OF ANCIENT SPELL BOOK WIDGETS*/ + /* END OF ANCIENT SPELL BOOK WIDGETS*/ -/* LUNAR SPELL BOOK WIDGETS*/ + /* LUNAR SPELL BOOK WIDGETS*/ SPELL_LUNAR_HOME_TELEPORT(WidgetID.SPELLBOOK_GROUP_ID, WidgetID.SpellBook.LUNAR_HOME_TELEPORT), SPELL_VENGEANCE_OTHER(WidgetID.SPELLBOOK_GROUP_ID, WidgetID.SpellBook.VENGEANCE_OTHER), SPELL_VENGEANCE(WidgetID.SPELLBOOK_GROUP_ID, WidgetID.SpellBook.VENGEANCE), @@ -674,17 +676,13 @@ public enum WidgetInfo SPELL_GEOMANCY(WidgetID.SPELLBOOK_GROUP_ID, WidgetID.SpellBook.GEOMANCY), SPELL_SPIN_FLAX(WidgetID.SPELLBOOK_GROUP_ID, WidgetID.SpellBook.SPIN_FLAX), SPELL_OURANIA_TELEPORT(WidgetID.SPELLBOOK_GROUP_ID, WidgetID.SpellBook.OURANIA_TELEPORT), -/* END OF LUNAR SPELL BOOK WIDGETS*/ + /* END OF LUNAR SPELL BOOK WIDGETS*/ SPELL_TOOLTIP(WidgetID.SPELLBOOK_GROUP_ID, WidgetID.SpellBook.TOOLTIP), -/* ARCEUUS SPELL BOOK WIDGETS*/ + /* ARCEUUS SPELL BOOK WIDGETS*/ + SPELL_KOUREND_HOME_TELEPORT(WidgetID.SPELLBOOK_GROUP_ID, WidgetID.StandardSpellBook.KOUREND_HOME_TELEPORT), SPELL_ARCEUUS_HOME_TELEPORT(WidgetID.SPELLBOOK_GROUP_ID, WidgetID.SpellBook.ARCEUUS_HOME_TELEPORT), SPELL_BATTLEFRONT_TELEPORT(WidgetID.SPELLBOOK_GROUP_ID, WidgetID.SpellBook.BATTLEFRONT_TELEPORT), -/* END OF ARCEUUS SPELL BOOK WIDGETS*/ - SPELLBOOK_FILTER_SECTION_PARENT(WidgetID.SPELLBOOK_GROUP_ID, WidgetID.SpellBook.FILTER_SECTION_PARENT), - SPELLBOOK_FILTER_BUTTONS_PARENT(WidgetID.SPELLBOOK_GROUP_ID, WidgetID.SpellBook.FILTER_BUTTONS_PARENT), - SPELLBOOK_FILTER_BUTTON_PARENT(WidgetID.SPELLBOOK_GROUP_ID, WidgetID.SpellBook.FILTER_BUTTON_PARENT), - SPELLBOOK_FILTER_BUTTON(WidgetID.SPELLBOOK_GROUP_ID, WidgetID.SpellBook.FILTER_BUTTON), - + /* END OF ARCEUUS SPELL BOOK WIDGETS*/ KOUREND_FAVOUR_OVERLAY(WidgetID.KOUREND_FAVOUR_GROUP_ID, WidgetID.KourendFavour.KOUREND_FAVOUR_OVERLAY), ZEAH_MESS_HALL_COOKING_DISPLAY(WidgetID.ZEAH_MESS_HALL_GROUP_ID, WidgetID.Zeah.MESS_HALL_COOKING_DISPLAY), @@ -696,7 +694,6 @@ public enum WidgetInfo MULTICOMBAT_FIXED(WidgetID.FIXED_VIEWPORT_GROUP_ID, WidgetID.FixedViewport.MULTICOMBAT_INDICATOR), MULTICOMBAT_RESIZEABLE(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.ResizableViewport.MULTICOMBAT_INDICATOR), - FULLSCREEN_MAP_ROOT(WidgetID.FULLSCREEN_MAP_GROUP_ID, WidgetID.FullScreenMap.ROOT), QUESTLIST_BOX(WidgetID.QUESTLIST_GROUP_ID, WidgetID.QuestList.BOX), @@ -758,8 +755,8 @@ public enum WidgetInfo XP_DROP_7(WidgetID.EXPERIENCE_DROP_GROUP_ID, WidgetID.ExperienceDrop.DROP_7), ITEMS_KEPT_CUSTOM_TEXT_CONTAINER(WidgetID.KEPT_ON_DEATH_GROUP_ID, WidgetID.KeptOnDeath.CUSTOM_TEXT_CONTAINER), - ITEMS_KEPT_ON_DEATH_CONTAINER(WidgetID.ITEMS_KEPT_ON_DEATH_GROUP_ID, WidgetID.KeptOnDeath.KEPT_ITEMS_CONTAINER), ITEMS_KEPT_ON_DEATH_TEXT(WidgetID.ITEMS_KEPT_ON_DEATH_GROUP_ID, WidgetID.KeptOnDeath.KEPT_ITEMS_TEXT), + ITEMS_KEPT_ON_DEATH_CONTAINER(WidgetID.ITEMS_KEPT_ON_DEATH_GROUP_ID, WidgetID.KeptOnDeath.KEPT_ITEMS_CONTAINER), ITEMS_LOST_ON_DEATH_TEXT(WidgetID.ITEMS_KEPT_ON_DEATH_GROUP_ID, WidgetID.KeptOnDeath.LOST_ITEMS_TEXT), ITEMS_LOST_ON_DEATH_CONTAINER(WidgetID.ITEMS_KEPT_ON_DEATH_GROUP_ID, WidgetID.KeptOnDeath.LOST_ITEMS_CONTAINER), ITEMS_KEPT_INFORMATION_CONTAINER(WidgetID.ITEMS_KEPT_ON_DEATH_GROUP_ID, WidgetID.KeptOnDeath.INFORMATION_CONTAINER), diff --git a/runelite-client/runelite-client.gradle.kts b/runelite-client/runelite-client.gradle.kts index 9870c3187f..ac22c81790 100644 --- a/runelite-client/runelite-client.gradle.kts +++ b/runelite-client/runelite-client.gradle.kts @@ -89,10 +89,11 @@ dependencies { testImplementation(Libraries.guiceGrapher) testImplementation(Libraries.guiceTestlib) - testImplementation(Libraries.junit) testImplementation(Libraries.hamcrest) + testImplementation(Libraries.junit) testImplementation(Libraries.mockitoCore) testImplementation(Libraries.mockitoInline) + testImplementation(Libraries.okhttp3Webserver) testImplementation(Libraries.slf4jApi) } diff --git a/runelite-client/src/main/java/net/runelite/client/Notifier.java b/runelite-client/src/main/java/net/runelite/client/Notifier.java index ee4fff642f..0585c7a026 100644 --- a/runelite-client/src/main/java/net/runelite/client/Notifier.java +++ b/runelite-client/src/main/java/net/runelite/client/Notifier.java @@ -192,9 +192,9 @@ public class Notifier case SOLID_UNTIL_CANCELLED: case FLASH_UNTIL_CANCELLED: // Any interaction with the client since the notification started will cancel it after the minimum duration - if (client.getMouseIdleTicks() < MINIMUM_FLASH_DURATION_TICKS + if ((client.getMouseIdleTicks() < MINIMUM_FLASH_DURATION_TICKS || client.getKeyboardIdleTicks() < MINIMUM_FLASH_DURATION_TICKS - || client.getMouseLastPressedMillis() > mouseLastPressedMillis) + || client.getMouseLastPressedMillis() > mouseLastPressedMillis) && clientUI.isFocused()) { flashStart = null; } @@ -316,7 +316,7 @@ public class Notifier private static Process sendCommand(final List commands) throws IOException { - return new ProcessBuilder(commands.toArray(new String[commands.size()])) + return new ProcessBuilder(commands.toArray(new String[0])) .redirectErrorStream(true) .start(); } diff --git a/runelite-client/src/main/java/net/runelite/client/RuneLite.java b/runelite-client/src/main/java/net/runelite/client/RuneLite.java index 0130165588..1b5a09d14e 100644 --- a/runelite-client/src/main/java/net/runelite/client/RuneLite.java +++ b/runelite-client/src/main/java/net/runelite/client/RuneLite.java @@ -51,6 +51,7 @@ import lombok.Getter; import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; import net.runelite.api.events.GameStateChanged; +import net.runelite.api.events.ScriptCallbackEvent; import net.runelite.client.account.SessionManager; import net.runelite.client.callback.Hooks; import net.runelite.client.chat.ChatMessageManager; @@ -61,6 +62,7 @@ import net.runelite.client.eventbus.EventBus; import net.runelite.client.game.ClanManager; import net.runelite.client.game.ItemManager; import net.runelite.client.game.LootManager; +import net.runelite.client.game.PlayerManager; import net.runelite.client.game.XpDropManager; import net.runelite.client.game.chatbox.ChatboxPanelManager; import net.runelite.client.graphics.ModelOutlineRenderer; @@ -86,6 +88,7 @@ import org.slf4j.LoggerFactory; public class RuneLite { public static final File RUNELITE_DIR = new File(System.getProperty("user.home"), ".runelite"); + public static final File CACHE_DIR = new File(RUNELITE_DIR, "cache"); public static final File PROFILES_DIR = new File(RUNELITE_DIR, "profiles"); public static final File PLUGIN_DIR = new File(RUNELITE_DIR, "plugins"); public static final File SCREENSHOT_DIR = new File(RUNELITE_DIR, "screenshots"); @@ -156,6 +159,9 @@ public class RuneLite @Inject private Provider xpDropManager; + @Inject + private Provider playerManager; + @Inject private Provider chatboxPanelManager; @@ -236,7 +242,7 @@ public class RuneLite Authenticator.setDefault(new Authenticator() { - private PasswordAuthentication auth = new PasswordAuthentication(user, pass); + private final PasswordAuthentication auth = new PasswordAuthentication(user, pass); protected PasswordAuthentication getPasswordAuthentication() { @@ -288,8 +294,6 @@ public class RuneLite RuneLiteSplashScreen.setError("Error while loading!", "Please check your internet connection and your DNS settings."); }); - RuneLiteSplashScreen.stage(0, "Starting OpenOSRS injector"); - PROFILES_DIR.mkdirs(); final long start = System.currentTimeMillis(); @@ -306,7 +310,7 @@ public class RuneLite log.info("Client initialization took {}ms. Uptime: {}ms", end - start, uptime); } - public void start() throws Exception + private void start() throws Exception { // Load RuneLite or Vanilla client final boolean isOutdated = client == null; @@ -364,9 +368,11 @@ public class RuneLite commandManager.get(); lootManager.get(); xpDropManager.get(); + playerManager.get(); chatboxPanelManager.get(); eventBus.subscribe(GameStateChanged.class, this, hooks::onGameStateChanged); + eventBus.subscribe(ScriptCallbackEvent.class, this, hooks::onScriptCallbackEvent); // Add core overlays WidgetOverlay.createOverlays(client).forEach(overlayManager::add); diff --git a/runelite-client/src/main/java/net/runelite/client/RuneLiteModule.java b/runelite-client/src/main/java/net/runelite/client/RuneLiteModule.java index 4b6fe543ab..274c920b07 100644 --- a/runelite-client/src/main/java/net/runelite/client/RuneLiteModule.java +++ b/runelite-client/src/main/java/net/runelite/client/RuneLiteModule.java @@ -41,8 +41,8 @@ import net.runelite.client.callback.Hooks; import net.runelite.client.chat.ChatMessageManager; import net.runelite.client.config.ChatColorConfig; import net.runelite.client.config.ConfigManager; -import net.runelite.client.config.RuneLiteConfig; import net.runelite.client.config.OpenOSRSConfig; +import net.runelite.client.config.RuneLiteConfig; import net.runelite.client.eventbus.EventBus; import net.runelite.client.game.ItemManager; import net.runelite.client.menus.MenuManager; @@ -75,7 +75,7 @@ public class RuneLiteModule extends AbstractModule bindConstant().annotatedWith(Names.named("developerMode")).to(developerMode); bind(ScheduledExecutorService.class).toInstance(new ExecutorServiceExceptionLogger(Executors.newSingleThreadScheduledExecutor())); bind(OkHttpClient.class).toInstance(RuneLiteAPI.CLIENT.newBuilder() - .cache(new Cache(new File(RuneLite.RUNELITE_DIR, "cache" + File.separator + "okhttp"), MAX_OKHTTP_CACHE_SIZE)) + .cache(new Cache(new File(RuneLite.CACHE_DIR, "okhttp"), MAX_OKHTTP_CACHE_SIZE)) .build()); bind(MenuManager.class); bind(ChatMessageManager.class); diff --git a/runelite-client/src/main/java/net/runelite/client/callback/ClientThread.java b/runelite-client/src/main/java/net/runelite/client/callback/ClientThread.java index 8935c8118e..7e9bb4106d 100644 --- a/runelite-client/src/main/java/net/runelite/client/callback/ClientThread.java +++ b/runelite-client/src/main/java/net/runelite/client/callback/ClientThread.java @@ -29,6 +29,7 @@ import java.util.Iterator; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.Executor; import java.util.function.BooleanSupplier; +import javax.annotation.Nullable; import javax.inject.Singleton; import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; @@ -41,6 +42,7 @@ public class ClientThread implements Executor private final ConcurrentLinkedQueue invokes = new ConcurrentLinkedQueue<>(); @Inject + @Nullable private Client client; public void invoke(Runnable r) diff --git a/runelite-client/src/main/java/net/runelite/client/callback/Hooks.java b/runelite-client/src/main/java/net/runelite/client/callback/Hooks.java index 94648a1f68..62e2f22e4b 100644 --- a/runelite-client/src/main/java/net/runelite/client/callback/Hooks.java +++ b/runelite-client/src/main/java/net/runelite/client/callback/Hooks.java @@ -47,12 +47,15 @@ import net.runelite.api.Entity; import net.runelite.api.MainBufferProvider; import net.runelite.api.NullItemID; import net.runelite.api.RenderOverview; +import net.runelite.api.Skill; import net.runelite.api.WorldMapManager; import net.runelite.api.events.BeforeMenuRender; import net.runelite.api.events.BeforeRender; import net.runelite.api.events.Event; +import net.runelite.api.events.FakeXpDrop; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; +import net.runelite.api.events.ScriptCallbackEvent; import net.runelite.api.hooks.Callbacks; import net.runelite.api.hooks.DrawCallbacks; import net.runelite.api.widgets.Widget; @@ -136,6 +139,7 @@ public class Hooks implements Callbacks /** * Get the Graphics2D for the MainBufferProvider image * This caches the Graphics2D instance so it can be reused + * * @param mainBufferProvider * @return */ @@ -156,13 +160,13 @@ public class Hooks implements Callbacks } @Override - public void post(Class eventClass, Event event) + public void post(Class eventClass, E event) { eventBus.post(eventClass, event); } @Override - public void postDeferred(Class eventClass, Event event) + public void postDeferred(Class eventClass, E event) { deferredEventBus.post(eventClass, event); } @@ -544,4 +548,25 @@ public class Hooks implements Callbacks client.getCallbacks().post(BeforeMenuRender.class, event); return event.isConsumed(); } + + public void onScriptCallbackEvent(ScriptCallbackEvent scriptCallbackEvent) + { + if (!scriptCallbackEvent.getEventName().equals("fakeXpDrop")) + { + return; + } + + final int[] intStack = client.getIntStack(); + final int intStackSize = client.getIntStackSize(); + + final int statId = intStack[intStackSize - 2]; + final int xp = intStack[intStackSize - 1]; + + Skill skill = Skill.values()[statId]; + FakeXpDrop fakeXpDrop = new FakeXpDrop( + skill, + xp + ); + eventBus.post(FakeXpDrop.class, fakeXpDrop); + } } diff --git a/runelite-client/src/main/java/net/runelite/client/chat/ChatMessageBuilder.java b/runelite-client/src/main/java/net/runelite/client/chat/ChatMessageBuilder.java index 0c10d6753a..0b9b395146 100644 --- a/runelite-client/src/main/java/net/runelite/client/chat/ChatMessageBuilder.java +++ b/runelite-client/src/main/java/net/runelite/client/chat/ChatMessageBuilder.java @@ -25,8 +25,8 @@ package net.runelite.client.chat; import java.awt.Color; -import net.runelite.client.util.ColorUtil; import net.runelite.api.util.Text; +import net.runelite.client.util.ColorUtil; public class ChatMessageBuilder { diff --git a/runelite-client/src/main/java/net/runelite/client/chat/ChatMessageManager.java b/runelite-client/src/main/java/net/runelite/client/chat/ChatMessageManager.java index f00fa0cac4..4ead00a62a 100644 --- a/runelite-client/src/main/java/net/runelite/client/chat/ChatMessageManager.java +++ b/runelite-client/src/main/java/net/runelite/client/chat/ChatMessageManager.java @@ -46,13 +46,13 @@ import net.runelite.api.MessageNode; import net.runelite.api.Player; import net.runelite.api.Varbits; import net.runelite.api.events.ChatMessage; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.ResizeableChanged; import net.runelite.api.events.ScriptCallbackEvent; import net.runelite.api.events.VarbitChanged; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ChatColorConfig; import net.runelite.client.eventbus.EventBus; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.ui.JagexColors; import net.runelite.client.util.ColorUtil; diff --git a/runelite-client/src/main/java/net/runelite/client/config/Alpha.java b/runelite-client/src/main/java/net/runelite/client/config/Alpha.java index 79815f5ca2..51a0f4d50a 100644 --- a/runelite-client/src/main/java/net/runelite/client/config/Alpha.java +++ b/runelite-client/src/main/java/net/runelite/client/config/Alpha.java @@ -37,6 +37,4 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) @Documented -public @interface Alpha -{ -} +public @interface Alpha {} diff --git a/runelite-client/src/main/java/net/runelite/client/config/Button.java b/runelite-client/src/main/java/net/runelite/client/config/Button.java index 591332ce05..c6cc8d67ee 100644 --- a/runelite-client/src/main/java/net/runelite/client/config/Button.java +++ b/runelite-client/src/main/java/net/runelite/client/config/Button.java @@ -1,5 +1,3 @@ package net.runelite.client.config; -public class Button -{ -} +public class Button {} diff --git a/runelite-client/src/main/java/net/runelite/client/config/Config.java b/runelite-client/src/main/java/net/runelite/client/config/Config.java index 6c95e9941a..b8d7f71701 100644 --- a/runelite-client/src/main/java/net/runelite/client/config/Config.java +++ b/runelite-client/src/main/java/net/runelite/client/config/Config.java @@ -24,6 +24,4 @@ */ package net.runelite.client.config; -public interface Config -{ -} +public interface Config {} diff --git a/runelite-client/src/main/java/net/runelite/client/config/ConfigInvocationHandler.java b/runelite-client/src/main/java/net/runelite/client/config/ConfigInvocationHandler.java index 6e35195177..26844922cd 100644 --- a/runelite-client/src/main/java/net/runelite/client/config/ConfigInvocationHandler.java +++ b/runelite-client/src/main/java/net/runelite/client/config/ConfigInvocationHandler.java @@ -26,12 +26,11 @@ package net.runelite.client.config; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; -import java.lang.invoke.MethodHandles; -import java.lang.reflect.Constructor; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.util.Objects; import lombok.extern.slf4j.Slf4j; +import net.runelite.client.util.ReflectUtil; @Slf4j class ConfigInvocationHandler implements InvocationHandler @@ -169,12 +168,8 @@ class ConfigInvocationHandler implements InvocationHandler static Object callDefaultMethod(Object proxy, Method method, Object[] args) throws Throwable { - // Call the default method implementation - https://rmannibucau.wordpress.com/2014/03/27/java-8-default-interface-methods-and-jdk-dynamic-proxies/ - Constructor constructor = MethodHandles.Lookup.class.getDeclaredConstructor(Class.class, int.class); - constructor.setAccessible(true); - Class declaringClass = method.getDeclaringClass(); - return constructor.newInstance(declaringClass, MethodHandles.Lookup.PUBLIC | MethodHandles.Lookup.PRIVATE) + return ReflectUtil.privateLookupIn(declaringClass) .unreflectSpecial(method, declaringClass) .bindTo(proxy) .invokeWithArguments(args); diff --git a/runelite-client/src/main/java/net/runelite/client/config/ConfigItem.java b/runelite-client/src/main/java/net/runelite/client/config/ConfigItem.java index 77c58c7e86..0fb461efc1 100644 --- a/runelite-client/src/main/java/net/runelite/client/config/ConfigItem.java +++ b/runelite-client/src/main/java/net/runelite/client/config/ConfigItem.java @@ -71,6 +71,7 @@ public @interface ConfigItem /** * For Config items that have a value of multiple enums, + * * @return the number of rows that are display in the item without having to scroll. */ int displayRows() default 2; @@ -82,6 +83,7 @@ public @interface ConfigItem /** * Use this to indicate the enum class that is going to be used in the multiple select config. * This implementation made debugging problems with multiple selects a lot easier + * * @return The Enum that will be used for the multiple select */ Class enumClass() default Enum.class; diff --git a/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java b/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java index fff6a449c3..a4a0765cc3 100644 --- a/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java +++ b/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java @@ -59,10 +59,10 @@ import javax.inject.Inject; import javax.inject.Singleton; import lombok.extern.slf4j.Slf4j; import net.runelite.api.coords.WorldPoint; -import net.runelite.client.events.ConfigChanged; import net.runelite.client.RuneLite; import static net.runelite.client.RuneLite.PROFILES_DIR; import net.runelite.client.eventbus.EventBus; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.util.ColorUtil; import org.apache.commons.lang3.StringUtils; diff --git a/runelite-client/src/main/java/net/runelite/client/config/Title.java b/runelite-client/src/main/java/net/runelite/client/config/Title.java index e4474544a0..4605a9965c 100644 --- a/runelite-client/src/main/java/net/runelite/client/config/Title.java +++ b/runelite-client/src/main/java/net/runelite/client/config/Title.java @@ -1,5 +1,3 @@ package net.runelite.client.config; -public class Title -{ -} +public class Title {} diff --git a/runelite-client/src/main/java/net/runelite/client/database/DatabaseManager.java b/runelite-client/src/main/java/net/runelite/client/database/DatabaseManager.java index d52a266cd3..119c5d5f66 100644 --- a/runelite-client/src/main/java/net/runelite/client/database/DatabaseManager.java +++ b/runelite-client/src/main/java/net/runelite/client/database/DatabaseManager.java @@ -64,7 +64,7 @@ public class DatabaseManager Settings settings = new Settings(); settings.setExecuteLogging(false); - return DSL.using(connection, SQLDialect.H2, settings); + return DSL.using(connection, SQLDialect.H2, settings); } public boolean checkTableExists(String table) diff --git a/runelite-client/src/main/java/net/runelite/client/eventbus/EventBus.java b/runelite-client/src/main/java/net/runelite/client/eventbus/EventBus.java index 458c101158..d5dea07576 100644 --- a/runelite-client/src/main/java/net/runelite/client/eventbus/EventBus.java +++ b/runelite-client/src/main/java/net/runelite/client/eventbus/EventBus.java @@ -2,10 +2,14 @@ package net.runelite.client.eventbus; import com.jakewharton.rxrelay2.PublishRelay; import com.jakewharton.rxrelay2.Relay; +import io.reactivex.ObservableTransformer; +import io.reactivex.Scheduler; import io.reactivex.annotations.NonNull; +import io.reactivex.annotations.Nullable; import io.reactivex.disposables.CompositeDisposable; import io.reactivex.disposables.Disposable; import io.reactivex.functions.Consumer; +import io.reactivex.schedulers.Schedulers; import io.sentry.Sentry; import java.util.HashMap; import java.util.Map; @@ -15,21 +19,25 @@ import javax.inject.Singleton; import lombok.extern.slf4j.Slf4j; import net.runelite.api.events.Event; import net.runelite.client.RuneLiteProperties; +import net.runelite.client.callback.ClientThread; import net.runelite.client.config.OpenOSRSConfig; @Slf4j @Singleton public class EventBus implements EventBusInterface { - private Map subscriptionList = new HashMap<>(); - private Map, Relay> subjectList = new HashMap<>(); - private Map subscriptionsMap = new HashMap<>(); + private final Map subscriptionList = new HashMap<>(); + private final Map, Relay> subjectList = new HashMap<>(); + private final Map subscriptionsMap = new HashMap<>(); @Inject private OpenOSRSConfig openOSRSConfig; + @Inject + private ClientThread clientThread; + @NonNull - private Relay getSubject(Class eventClass) + private Relay getSubject(Class eventClass) { return subjectList.computeIfAbsent(eventClass, k -> PublishRelay.create().toSerialized()); } @@ -47,34 +55,65 @@ public class EventBus implements EventBusInterface return compositeDisposable; } - @Override - // Subscribe on lifecycle (for example from plugin startUp -> shutdown) - public void subscribe(Class eventClass, @NonNull Object lifecycle, @NonNull Consumer action) + private ObservableTransformer applyTake(int until) { - if (subscriptionList.containsKey(lifecycle) && eventClass.equals(subscriptionList.get(lifecycle))) + return observable -> until > 0 ? observable.take(until) : observable; + } + + private Scheduler getScheduler(EventScheduler scheduler) + { + Scheduler subscribeScheduler; + switch (scheduler) { - return; + case COMPUTATION: + subscribeScheduler = Schedulers.computation(); + break; + case IO: + subscribeScheduler = Schedulers.io(); + break; + case NEWTHREAD: + subscribeScheduler = Schedulers.newThread(); + break; + case SINGLE: + subscribeScheduler = Schedulers.single(); + break; + case TRAMPOLINE: + subscribeScheduler = Schedulers.trampoline(); + break; + case CLIENT: + subscribeScheduler = Schedulers.from(clientThread); + break; + case DEFAULT: + default: + subscribeScheduler = null; + break; } - Disposable disposable = getSubject(eventClass) - .filter(Objects::nonNull) // Filter out null objects, better safe than sorry - .cast(eventClass) // Cast it for easier usage - .subscribe(action, error -> - { - log.error("Exception in eventbus", error); + return subscribeScheduler; + } - if (RuneLiteProperties.getLauncherVersion() != null && openOSRSConfig.shareLogs()) - { - Sentry.capture(error); - } - }); + private ObservableTransformer applyScheduler(EventScheduler eventScheduler, boolean subscribe) + { + Scheduler scheduler = getScheduler(eventScheduler); - getCompositeDisposable(lifecycle).add(disposable); - subscriptionList.put(lifecycle, eventClass); + return observable -> scheduler == null ? observable : subscribe ? observable.subscribeOn(scheduler) : observable.observeOn(scheduler); } @Override - public void subscribe(Class eventClass, @NonNull Object lifecycle, @NonNull Consumer action, int takeUntil) + public void subscribe(Class eventClass, @NonNull Object lifecycle, @NonNull Consumer action) + { + subscribe(eventClass, lifecycle, action, -1, EventScheduler.DEFAULT, EventScheduler.DEFAULT); + } + + @Override + public void subscribe(Class eventClass, @NonNull Object lifecycle, @NonNull Consumer action, int takeUtil) + { + subscribe(eventClass, lifecycle, action, takeUtil, EventScheduler.DEFAULT, EventScheduler.DEFAULT); + } + + @Override + // Subscribe on lifecycle (for example from plugin startUp -> shutdown) + public void subscribe(Class eventClass, @NonNull Object lifecycle, @NonNull Consumer action, int takeUntil, @Nullable EventScheduler subscribe, @Nullable EventScheduler observe) { if (subscriptionList.containsKey(lifecycle) && eventClass.equals(subscriptionList.get(lifecycle))) { @@ -82,10 +121,12 @@ public class EventBus implements EventBusInterface } Disposable disposable = getSubject(eventClass) + .compose(applyTake(takeUntil)) .filter(Objects::nonNull) // Filter out null objects, better safe than sorry .cast(eventClass) // Cast it for easier usage - .take(takeUntil) .doFinally(() -> unregister(lifecycle)) + .compose(applyScheduler(subscribe, true)) + .compose(applyScheduler(observe, false)) .subscribe(action, error -> { log.error("Exception in eventbus", error); @@ -113,7 +154,7 @@ public class EventBus implements EventBusInterface } @Override - public void post(Class eventClass, @NonNull Event event) + public void post(Class eventClass, @NonNull T event) { getSubject(eventClass).accept(event); } diff --git a/runelite-client/src/main/java/net/runelite/client/eventbus/EventBusInterface.java b/runelite-client/src/main/java/net/runelite/client/eventbus/EventBusInterface.java index d18072891f..9b6d66f51a 100644 --- a/runelite-client/src/main/java/net/runelite/client/eventbus/EventBusInterface.java +++ b/runelite-client/src/main/java/net/runelite/client/eventbus/EventBusInterface.java @@ -6,11 +6,13 @@ import net.runelite.api.events.Event; public interface EventBusInterface { - void subscribe(Class eventClass, @NonNull Object lifecycle, @NonNull Consumer action); + void subscribe(Class eventClass, @NonNull Object lifecycle, @NonNull Consumer action); - void subscribe(Class eventClass, @NonNull Object lifecycle, @NonNull Consumer action, int takeUntil); + void subscribe(Class eventClass, @NonNull Object lifecycle, @NonNull Consumer action, int takeUntil); + + void subscribe(Class eventClass, @NonNull Object lifecycle, @NonNull Consumer action, int takeUntil, EventScheduler subscribe, EventScheduler observe); void unregister(@NonNull Object lifecycle); - void post(Class eventClass, @NonNull Event event); + void post(Class eventClass, @NonNull T event); } diff --git a/runelite-client/src/main/java/net/runelite/client/eventbus/EventScheduler.java b/runelite-client/src/main/java/net/runelite/client/eventbus/EventScheduler.java new file mode 100644 index 0000000000..7923cc17c8 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/eventbus/EventScheduler.java @@ -0,0 +1,21 @@ +package net.runelite.client.eventbus; + +import io.reactivex.annotations.Nullable; + +public enum EventScheduler +{ + DEFAULT(null), + COMPUTATION("computation"), + IO("io"), + NEWTHREAD("newThread"), + SINGLE("single"), + TRAMPOLINE("trampoline"), + CLIENT("client"); + + public final String scheduler; + + EventScheduler(@Nullable String scheduler) + { + this.scheduler = scheduler; + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/PlayerContainer.java b/runelite-client/src/main/java/net/runelite/client/eventbus/Subscribe.java similarity index 61% rename from runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/PlayerContainer.java rename to runelite-client/src/main/java/net/runelite/client/eventbus/Subscribe.java index 338fcd4357..cdecb670d8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/PlayerContainer.java +++ b/runelite-client/src/main/java/net/runelite/client/eventbus/Subscribe.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, gazivodag + * Copyright (c) 2018, Abex * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -10,6 +10,7 @@ * 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 @@ -21,44 +22,23 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +package net.runelite.client.eventbus; -package net.runelite.client.plugins.prayagainstplayer; - -import net.runelite.api.Player; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; /** - * Contains a player object - * When they attacked me - * And (in milliseconds) when to expire the overlay around them + * Marks a method as an event subscriber. */ -public class PlayerContainer +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +@Documented +public @interface Subscribe { - - private final Player player; - private final long whenTheyAttackedMe; - private final int millisToExpireHighlight; - - PlayerContainer(final Player player, final long whenTheyAttackedMe, final int millisToExpireHighlight) - { - this.player = player; - this.whenTheyAttackedMe = whenTheyAttackedMe; - this.millisToExpireHighlight = millisToExpireHighlight; - } - - //getters - public Player getPlayer() - { - return player; - } - - long getWhenTheyAttackedMe() - { - return whenTheyAttackedMe; - } - - int getMillisToExpireHighlight() - { - return millisToExpireHighlight; - } - + int takeUntil() default -1; + EventScheduler subscribe() default EventScheduler.DEFAULT; + EventScheduler observe() default EventScheduler.DEFAULT; } diff --git a/runelite-client/src/main/java/net/runelite/client/events/AttackStyleChanged.java b/runelite-client/src/main/java/net/runelite/client/events/AttackStyleChanged.java new file mode 100644 index 0000000000..59aad57147 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/events/AttackStyleChanged.java @@ -0,0 +1,34 @@ +package net.runelite.client.events; + +import lombok.Value; +import net.runelite.api.Player; +import net.runelite.api.events.Event; +import net.runelite.client.game.AttackStyle; + +/** + * This will fire when {@link net.runelite.client.game.PlayerManager} detects + * a change in the player appearance that resulted in the shifting of an attack style. + * For example, ranged str went to 0, but melee str went to 108. + */ +@Value +public class AttackStyleChanged implements Event +{ + /** + * The player that changed styles. + */ + private final Player player; + + /** + * Can be Unknown(nullable) + * + * @see net.runelite.client.game.AttackStyle + */ + private final AttackStyle oldStyle; + + /** + * Can be Unknown(nullable) + * + * @see net.runelite.client.game.AttackStyle + */ + private final AttackStyle newStyle; +} diff --git a/runelite-client/src/main/java/net/runelite/client/events/SessionClose.java b/runelite-client/src/main/java/net/runelite/client/events/SessionClose.java index f73d3a31b5..150b66f412 100644 --- a/runelite-client/src/main/java/net/runelite/client/events/SessionClose.java +++ b/runelite-client/src/main/java/net/runelite/client/events/SessionClose.java @@ -35,7 +35,4 @@ import net.runelite.api.events.Event; * it has nothing to do with whether an account is being logged out. */ @Data -public class SessionClose implements Event -{ - -} +public class SessionClose implements Event {} diff --git a/runelite-client/src/main/java/net/runelite/client/events/SessionOpen.java b/runelite-client/src/main/java/net/runelite/client/events/SessionOpen.java index b1d042af2b..130305798e 100644 --- a/runelite-client/src/main/java/net/runelite/client/events/SessionOpen.java +++ b/runelite-client/src/main/java/net/runelite/client/events/SessionOpen.java @@ -35,7 +35,4 @@ import net.runelite.api.events.Event; * it has nothing to do with whether an account is being logged in. */ @Data -public class SessionOpen implements Event -{ - -} +public class SessionOpen implements Event {} diff --git a/runelite-client/src/main/java/net/runelite/client/events/WorldsFetch.java b/runelite-client/src/main/java/net/runelite/client/events/WorldsFetch.java new file mode 100644 index 0000000000..47f6cc99f7 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/events/WorldsFetch.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2019, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.client.events; + +import lombok.Value; +import net.runelite.api.events.Event; +import net.runelite.http.api.worlds.WorldResult; + +/** + * Fired when the @{link net.runelite.client.game.WorldService} refreshes the world list + */ +@Value +public class WorldsFetch implements Event +{ + private final WorldResult worldResult; +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/flexo/Flexo.java b/runelite-client/src/main/java/net/runelite/client/flexo/Flexo.java index ec5730788d..813969ac72 100644 --- a/runelite-client/src/main/java/net/runelite/client/flexo/Flexo.java +++ b/runelite-client/src/main/java/net/runelite/client/flexo/Flexo.java @@ -74,7 +74,7 @@ public class Flexo extends Robot .getDefaultScreenDevice()); } - private void init(GraphicsDevice screen) throws AWTException + private void init(GraphicsDevice screen) { try { diff --git a/runelite-client/src/main/java/net/runelite/client/game/AgilityShortcut.java b/runelite-client/src/main/java/net/runelite/client/game/AgilityShortcut.java index d0441e964d..8771076e1c 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/AgilityShortcut.java +++ b/runelite-client/src/main/java/net/runelite/client/game/AgilityShortcut.java @@ -26,18 +26,7 @@ package net.runelite.client.game; import lombok.Getter; -import static net.runelite.api.NullObjectID.NULL_25337; -import static net.runelite.api.NullObjectID.NULL_26371; -import static net.runelite.api.NullObjectID.NULL_26375; -import static net.runelite.api.NullObjectID.NULL_26884; -import static net.runelite.api.NullObjectID.NULL_26886; -import static net.runelite.api.NullObjectID.NULL_29868; -import static net.runelite.api.NullObjectID.NULL_29869; -import static net.runelite.api.NullObjectID.NULL_29870; -import static net.runelite.api.NullObjectID.NULL_31823; -import static net.runelite.api.NullObjectID.NULL_31849; -import static net.runelite.api.NullObjectID.NULL_33327; -import static net.runelite.api.NullObjectID.NULL_33328; +import static net.runelite.api.NullObjectID.*; import static net.runelite.api.ObjectID.*; import net.runelite.api.coords.WorldPoint; @@ -45,40 +34,40 @@ import net.runelite.api.coords.WorldPoint; public enum AgilityShortcut { GENERIC_SHORTCUT(1, "Shortcut", null, - // Trollheim - ROCKS_3790, ROCKS_3791, - // Fremennik Slayer Cave - STEPS_29993, - // Fossil Island - LADDER_30938, LADDER_30939, LADDER_30940, LADDER_30941, RUBBER_CAP_MUSHROOM, - // Brimhaven dungeon - CREVICE_30198, - // Lumbridge - STILE_12982, - // Gu'Tanoth Bridge - GAP, GAP_2831, - // Lumbridge Swamp Caves - STEPPING_STONE_5948, STEPPING_STONE_5949, ROCKS_6673, - // Morytania Pirate Ship - ROCK_16115, - // Lumber Yard - BROKEN_FENCE_2618, - // McGrubor's Wood - LOOSE_RAILING, - // Underwater Area Fossil Island - TUNNEL_30959, HOLE_30966, OBSTACLE, OBSTACLE_30767, OBSTACLE_30964, OBSTACLE_30962, PLANT_DOOR_30961, - // Tree Gnome Village - LOOSE_RAILING_2186, - // Burgh de Rott - LOW_FENCE, - // Taverley - STILE, - // Asgarnian Ice Dungeon - STEPS, - // Fossil Island Wyvern Cave - STAIRS_31485, - // Trollweiss Mountain Cave - ROCKY_HANDHOLDS, ROCKY_HANDHOLDS_19847), + // Trollheim + ROCKS_3790, ROCKS_3791, + // Fremennik Slayer Cave + STEPS_29993, + // Fossil Island + LADDER_30938, LADDER_30939, LADDER_30940, LADDER_30941, RUBBER_CAP_MUSHROOM, + // Brimhaven dungeon + CREVICE_30198, + // Lumbridge + STILE_12982, + // Gu'Tanoth Bridge + GAP, GAP_2831, + // Lumbridge Swamp Caves + STEPPING_STONE_5948, STEPPING_STONE_5949, ROCKS_6673, + // Morytania Pirate Ship + ROCK_16115, + // Lumber Yard + BROKEN_FENCE_2618, + // McGrubor's Wood + LOOSE_RAILING, + // Underwater Area Fossil Island + TUNNEL_30959, HOLE_30966, OBSTACLE, OBSTACLE_30767, OBSTACLE_30964, OBSTACLE_30962, PLANT_DOOR_30961, + // Tree Gnome Village + LOOSE_RAILING_2186, + // Burgh de Rott + LOW_FENCE, + // Taverley + STILE, + // Asgarnian Ice Dungeon + STEPS, + // Fossil Island Wyvern Cave + STAIRS_31485, + // Trollweiss Mountain Cave + ROCKY_HANDHOLDS, ROCKY_HANDHOLDS_19847), BRIMHAVEN_DUNGEON_MEDIUM_PIPE_RETURN(1, "Pipe Squeeze", null, new WorldPoint(2698, 9491, 0), PIPE_21727), BRIMHAVEN_DUNGEON_PIPE_RETURN(1, "Pipe Squeeze", null, new WorldPoint(2655, 9573, 0), PIPE_21728), BRIMHAVEN_DUNGEON_STEPPING_STONES_RETURN(1, "Pipe Squeeze", null, STEPPING_STONE_21739), @@ -206,7 +195,7 @@ public enum AgilityShortcut REVENANT_CAVES_ANKOU_EAST(75, "Jump", new WorldPoint(3201, 10195, 0), PILLAR_31561), REVENANT_CAVES_ANKOU_NORTH(75, "Jump", new WorldPoint(3180, 10209, 0), PILLAR_31561), ZUL_ANDRA_ISLAND_CROSSING(76, "Stepping Stone", new WorldPoint(2156, 3073, 0), STEPPING_STONE_10663), - SHILO_VILLAGE_STEPPING_STONES( 77, "Stepping Stones", new WorldPoint(2863, 2974, 0), STEPPING_STONE_16466), + SHILO_VILLAGE_STEPPING_STONES(77, "Stepping Stones", new WorldPoint(2863, 2974, 0), STEPPING_STONE_16466), IORWERTHS_DUNGEON_NORTHERN_SHORTCUT_EAST(78, "Tight Gap", new WorldPoint(3221, 12441, 0), TIGHT_GAP), IORWERTHS_DUNGEON_NORTHERN_SHORTCUT_WEST(78, "Tight Gap", new WorldPoint(3215, 12441, 0), TIGHT_GAP_36693), KHARAZI_JUNGLE_VINE_CLIMB(79, "Vine", new WorldPoint(2897, 2939, 0), NULL_26884, NULL_26886), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hideunder/PlayerContainer.java b/runelite-client/src/main/java/net/runelite/client/game/AttackStyle.java similarity index 75% rename from runelite-client/src/main/java/net/runelite/client/plugins/hideunder/PlayerContainer.java rename to runelite-client/src/main/java/net/runelite/client/game/AttackStyle.java index c1393f19a5..65e110e59b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hideunder/PlayerContainer.java +++ b/runelite-client/src/main/java/net/runelite/client/game/AttackStyle.java @@ -21,25 +21,23 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package net.runelite.client.plugins.hideunder; +package net.runelite.client.game; -import lombok.AccessLevel; +import java.awt.Color; +import lombok.AllArgsConstructor; import lombok.Getter; -import lombok.Setter; -import net.runelite.api.Player; +import net.runelite.api.Prayer; -@Getter(AccessLevel.PACKAGE) -@Setter(AccessLevel.PACKAGE) -class PlayerContainer +@AllArgsConstructor +@Getter +public enum AttackStyle { - private Player player; - private boolean target; - private int timer; + MAGE("Mage", Color.CYAN, Prayer.PROTECT_FROM_MAGIC), + RANGE("Range", Color.GREEN, Prayer.PROTECT_FROM_MISSILES), + MELEE("Melee", Color.RED, Prayer.PROTECT_FROM_MELEE), + UNKNOWN("Unknown", Color.WHITE, null); - PlayerContainer(Player player) - { - this.player = player; - this.target = false; - this.timer = 0; - } -} \ No newline at end of file + private String name; + private Color color; + private Prayer prayer; +} diff --git a/runelite-client/src/main/java/net/runelite/client/game/ClanManager.java b/runelite-client/src/main/java/net/runelite/client/game/ClanManager.java index 932bf5ac02..c02d85c955 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/ClanManager.java +++ b/runelite-client/src/main/java/net/runelite/client/game/ClanManager.java @@ -45,9 +45,9 @@ import net.runelite.api.IndexedSprite; import net.runelite.api.SpriteID; import net.runelite.api.events.ClanChanged; import net.runelite.api.events.GameStateChanged; +import net.runelite.api.util.Text; import net.runelite.client.eventbus.EventBus; import net.runelite.client.util.ImageUtil; -import net.runelite.api.util.Text; @Singleton public class ClanManager diff --git a/runelite-client/src/main/java/net/runelite/client/game/CombatStats.java b/runelite-client/src/main/java/net/runelite/client/game/CombatStats.java new file mode 100644 index 0000000000..3f940b5e41 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/game/CombatStats.java @@ -0,0 +1,24 @@ +package net.runelite.client.game; + +import lombok.Value; + +@Value +public class CombatStats +{ + private int magicAttack; + private int magicDefence; + private int magicStr; + private int meleeAtkCrush; + private int meleeAtkSlash; + private int meleeAtkStab; + private int meleeAttack; + private int meleeDefCrush; + private int meleeDefence; + private int meleeDefSlash; + private int meleeDefStab; + private int meleeStr; + private int rangeAttack; + private int rangeDefence; + private int rangeStr; + private int speed; +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/game/HiscoreLoader.java b/runelite-client/src/main/java/net/runelite/client/game/HiscoreLoader.java index dbe603dc8d..13f8141cc3 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/HiscoreLoader.java +++ b/runelite-client/src/main/java/net/runelite/client/game/HiscoreLoader.java @@ -51,7 +51,7 @@ class HiscoreLoader extends CacheLoader gear; private LinkedHashMap riskedGear; + private MeleeStyle meleeStyle; private Player player; private String location; private String name; private String targetString; + private CombatStats combatStats; private boolean httpRetry; private boolean scouted; - private int prayer; + private boolean attacking; + private boolean friend; + private boolean clan; + private int hpLevel; + private int potionBoost; + private int prayerLevel; private int risk; private int scoutTimer; + private int shield; + private int timer; private int weapon; private int wildyLevel; PlayerContainer(Player player) { + this.attackStyle = AttackStyle.UNKNOWN; this.gear = new LinkedHashMap<>(); - this.httpRetry = false; + this.hpLevel = 0; this.location = "N/A"; + this.meleeStyle = MeleeStyle.STAB; this.name = player.getName(); this.player = player; - this.prayer = -1; - this.risk = 0; this.riskedGear = new LinkedHashMap<>(); this.scoutTimer = 500; this.scouted = false; this.skills = null; this.targetString = ""; - this.weapon = 0; - this.wildyLevel = 0; + this.weakness = AttackStyle.UNKNOWN; + } + + void reset() + { + setMeleeStyle(MeleeStyle.NONE); + if (getTimer() > 0) + { + setTimer(getTimer() - 1); + if (getTimer() == 0) + { + setAttacking(false); + } + } + } + + @Getter(AccessLevel.PACKAGE) + enum MeleeStyle + { + CRUSH, + SLASH, + STAB, + NONE } } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/game/PlayerManager.java b/runelite-client/src/main/java/net/runelite/client/game/PlayerManager.java new file mode 100644 index 0000000000..df728e19ad --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/game/PlayerManager.java @@ -0,0 +1,551 @@ +package net.runelite.client.game; + +import java.io.IOException; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.stream.Collectors; +import javax.annotation.Nullable; +import javax.inject.Inject; +import javax.inject.Singleton; +import lombok.extern.slf4j.Slf4j; +import net.runelite.api.Actor; +import net.runelite.api.Client; +import net.runelite.api.ItemDefinition; +import net.runelite.api.ItemID; +import net.runelite.api.NPC; +import net.runelite.api.Player; +import net.runelite.api.events.AnimationChanged; +import net.runelite.api.events.PlayerAppearanceChanged; +import net.runelite.api.events.PlayerDespawned; +import net.runelite.api.events.PlayerSpawned; +import net.runelite.api.kit.KitType; +import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.EventScheduler; +import net.runelite.client.events.AttackStyleChanged; +import net.runelite.client.util.PvPUtil; +import net.runelite.http.api.hiscore.HiscoreClient; +import net.runelite.http.api.hiscore.HiscoreResult; +import net.runelite.http.api.item.ItemEquipmentStats; +import net.runelite.http.api.item.ItemStats; + +@Singleton +@Slf4j +@SuppressWarnings("unused") +public class PlayerManager +{ + private static final HiscoreClient HISCORE_CLIENT = new HiscoreClient(); + private final Client client; + private final ItemManager itemManager; + private final EventBus eventBus; + private final Map playerMap = new ConcurrentHashMap<>(); + private final Map resultCache = new ConcurrentHashMap<>(); + private final ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() * 2); + + @Inject + PlayerManager( + final Client client, + final EventBus eventBus, + final ItemManager itemManager + ) + { + this.client = client; + this.itemManager = itemManager; + this.eventBus = eventBus; + eventBus.subscribe(PlayerDespawned.class, this, this::onPlayerDespawned); + eventBus.subscribe(PlayerSpawned.class, this, this::onPlayerSpawned); + eventBus.subscribe(AnimationChanged.class, this, this::onAnimationChanged); + eventBus.subscribe(PlayerAppearanceChanged.class, this, this::onAppearenceChanged, -1, EventScheduler.DEFAULT, EventScheduler.COMPUTATION); + } + + /** + * @return Collection of {@link PlayerContainer} that are attacking you, this can be empty. + */ + public Set getAllAttackers() + { + final Set set = new HashSet<>(); + for (PlayerContainer p : playerMap.values()) + { + if (p.isAttacking()) + { + set.add(p); + } + } + return set; + } + + /** + * @return Collection of {@link PlayerContainer}, this can be empty. + */ + public Collection getPlayerContainers() + { + return playerMap.values(); + } + + /** + * @param name Players name. + * @return {@link PlayerContainer} if provided with proper name, else null. + */ + @Nullable + public PlayerContainer getPlayer(String name) + { + return playerMap.get(name); + } + + /** + * @param player Player object. + * @return {@link PlayerContainer} if provided with proper name, else null. + */ + @Nullable + public PlayerContainer getPlayer(Player player) + { + if (player == null) + { + return null; + } + + return playerMap.get(player.getName()); + } + + /** + * This will keep submitting an http request until it successfully updates. + * + * @param name The player name you wish to update. + */ + public void updateStats(String name) + { + final PlayerContainer p = playerMap.get(name); + + if (p == null) + { + return; + } + + updateStats(p.getPlayer()); + } + + /** + * This will keep submitting an http request until it successfully updates. + * + * @param requestedPlayer The player object you wish to update. + */ + public void updateStats(Player requestedPlayer) + { + if (requestedPlayer == null) + { + return; + } + + final PlayerContainer player = playerMap.get(requestedPlayer.getName()); + + if (player == null) + { + return; + } + + if (resultCache.containsKey(player.getName())) + { + player.setSkills(resultCache.get(player.getName())); + player.setPrayerLevel(player.getSkills().getPrayer().getLevel()); + player.setHpLevel(player.getSkills().getHitpoints().getLevel()); + return; + } + + executorService.submit(() -> + { + player.setHttpRetry(true); + int timeout = 0; + HiscoreResult result; + do + { + try + { + result = HISCORE_CLIENT.lookup(player.getName()); + } + catch (IOException ex) + { + if (timeout == 10) + { + log.error("HiScore Lookup timed out on: {}", player.getName()); + return; + } + result = null; + timeout++; + try + { + Thread.sleep(1000); + } + catch (InterruptedException ignored) + { + } + } + } + while (result == null); + + resultCache.put(player.getName(), result); + player.setSkills(result); + player.setPrayerLevel(player.getSkills().getPrayer().getLevel()); + player.setHpLevel(player.getSkills().getHitpoints().getLevel()); + player.setHttpRetry(false); + }); + } + + private void onAppearenceChanged(PlayerAppearanceChanged event) + { + final PlayerContainer player = playerMap.get(event.getPlayer().getName()); + + if (player == null) + { + return; + } + + update(player); + player.reset(); + player.setFriend(client.isFriended(player.getName(), false)); + player.setClan(client.isClanMember(player.getName())); + } + + private void onPlayerDespawned(PlayerDespawned event) + { + final Player player = event.getPlayer(); + playerMap.remove(player.getName()); + } + + private void onPlayerSpawned(PlayerSpawned event) + { + final Player player = event.getPlayer(); + playerMap.put(player.getName(), new PlayerContainer(player)); + } + + private void onAnimationChanged(AnimationChanged event) + { + final Actor actor = event.getActor(); + + if (actor.getInteracting() != client.getLocalPlayer() || !(actor instanceof Player) || actor.getAnimation() == -1) + { + return; + } + + final PlayerContainer player = playerMap.getOrDefault(actor.getName(), null); + + if (player == null) + { + return; + } + + if (player.getPlayer().getInteracting() != null && + player.getPlayer().getInteracting() == client.getLocalPlayer()) + { + if (player.getSkills() == null) + { + updateStats(player.getPlayer()); + } + + player.setAttacking(true); + player.setTimer(8); + } + } + + private void update(PlayerContainer player) + { + player.setRisk(0); + updatePlayerGear(player); + updateAttackStyle(player); + updateWeakness(player); + player.setLocation(WorldLocation.location(player.getPlayer().getWorldLocation())); + player.setWildyLevel(PvPUtil.getWildernessLevelFrom(player.getPlayer().getWorldLocation())); + player.setTargetString(targetStringBuilder(player)); + } + + private void updatePlayerGear(PlayerContainer player) + { + final Map prices = new HashMap<>(); + + if (player.getPlayer().getPlayerAppearance() == null) + { + return; + } + + int magicAttack = 0, + magicDefence = 0, + magicStr = 0, + meleeAtkCrush = 0, + meleeAtkStab = 0, + meleeAtkSlash = 0, + meleeDefCrush = 0, + meleeDefStab = 0, + meleeDefSlash = 0, + meleeStr = 0, + rangeAttack = 0, + rangeDefence = 0, + rangeStr = 0, + speed = 0; + + for (KitType kitType : KitType.values()) + { + if (kitType.equals(KitType.RING) || kitType.equals(KitType.AMMUNITION)) + { + continue; + } + + final int id = player.getPlayer().getPlayerAppearance().getEquipmentId(kitType); + + if (id == -1) + { + continue; + } + + if (kitType.equals(KitType.WEAPON)) + { + player.setWeapon(id); + + switch (id) + { + case ItemID.HEAVY_BALLISTA: + case ItemID.HEAVY_BALLISTA_23630: + case ItemID.LIGHT_BALLISTA: + rangeStr += 150; + break; + case ItemID.MAPLE_LONGBOW: + case ItemID.MAPLE_SHORTBOW: + rangeStr += 31; + break; + case ItemID.MAGIC_SHORTBOW: + case ItemID.MAGIC_SHORTBOW_20558: + case ItemID.MAGIC_SHORTBOW_I: + rangeStr += +55; + break; + case ItemID.DARK_BOW: + case ItemID.DARK_BOW_12765: + case ItemID.DARK_BOW_12766: + case ItemID.DARK_BOW_12767: + case ItemID.DARK_BOW_12768: + case ItemID.DARK_BOW_20408: + rangeStr += +60; + break; + case ItemID.RUNE_CROSSBOW: + case ItemID.RUNE_CROSSBOW_23601: + rangeStr += +117; + break; + case ItemID.DRAGON_CROSSBOW: + case ItemID.ARMADYL_CROSSBOW: + case ItemID.ARMADYL_CROSSBOW_23611: + rangeStr += +122; + break; + } + } + + final ItemStats item = itemManager.getItemStats(id, false); + final ItemDefinition itemDefinition = itemManager.getItemDefinition(id); + + if (item == null) + { + log.debug("Item is null: {}", id); + continue; + } + + final ItemEquipmentStats stats = item.getEquipment(); + + speed += stats.getAspeed(); + meleeAtkCrush += stats.getAcrush(); + meleeAtkStab += stats.getAstab(); + meleeAtkSlash += stats.getAslash(); + meleeDefCrush += stats.getDcrush(); + meleeDefStab += stats.getDstab(); + meleeDefSlash += stats.getDslash(); + magicAttack += stats.getAmagic(); + rangeAttack += stats.getArange(); + magicDefence += stats.getDmagic(); + rangeDefence += stats.getDrange(); + rangeStr += stats.getRstr(); + meleeStr += stats.getStr(); + magicStr += stats.getMdmg(); + + if (ItemReclaimCost.breaksOnDeath(id)) + { + prices.put(id, itemManager.getRepairValue(id)); + log.debug("Item has a broken value: Id {}, Value {}", id, itemManager.getRepairValue(id)); + continue; + } + + if (!itemDefinition.isTradeable() && !ItemMapping.isMapped(id)) + { + prices.put(id, itemDefinition.getPrice()); + } + else if (itemDefinition.isTradeable()) + { + prices.put(id, itemManager.getItemPrice(id, false)); + } + } + + player.setCombatStats(new CombatStats( + magicAttack, + magicDefence, + magicStr, + meleeAtkCrush, + meleeAtkSlash, + meleeAtkStab, + (meleeAtkCrush + meleeAtkSlash + meleeAtkStab) / 3, + meleeDefCrush, + (meleeDefCrush + meleeDefSlash + meleeDefStab) / 3, + meleeDefSlash, + meleeDefStab, + meleeStr, + rangeAttack, + rangeDefence, + rangeStr, + speed + )); + updateGear(player, prices); + updateMeleeStyle(player); + } + + private void updateGear(PlayerContainer player, Map prices) + { + player.setGear(prices.entrySet() + .stream() + .sorted(Collections.reverseOrder(Map.Entry.comparingByValue())) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, LinkedHashMap::new)) + ); + + player.setRiskedGear(prices.entrySet() + .stream() + .sorted(Collections.reverseOrder(Map.Entry.comparingByValue())) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, LinkedHashMap::new)) + ); + + if (player.getPlayer().getSkullIcon() == null) + { + removeEntries(player.getRiskedGear(), player.getPrayerLevel() <= 25 ? 3 : 4); + } + else + { + removeEntries(player.getRiskedGear(), player.getPrayerLevel() <= 25 ? 0 : 1); + } + + player.getRiskedGear().values().forEach(price -> player.setRisk(player.getRisk() + price)); + prices.clear(); + } + + private void updateMeleeStyle(PlayerContainer player) + { + final CombatStats stats = player.getCombatStats(); + + if (stats.getMeleeAtkCrush() >= stats.getMeleeAtkSlash() && stats.getMeleeAtkCrush() >= stats.getMeleeAtkStab()) + { + player.setMeleeStyle(PlayerContainer.MeleeStyle.CRUSH); + } + else if (stats.getMeleeAtkSlash() >= stats.getMeleeAtkCrush() && stats.getMeleeAtkSlash() >= stats.getMeleeAtkStab()) + { + player.setMeleeStyle(PlayerContainer.MeleeStyle.SLASH); + } + else + { + player.setMeleeStyle(PlayerContainer.MeleeStyle.STAB); + } + } + + private void updateAttackStyle(PlayerContainer player) + { + final AttackStyle oldStyle = player.getAttackStyle(); + boolean staff = false; + + for (int id : player.getGear().keySet()) + { + ItemDefinition def = itemManager.getItemDefinition(id); + if (def.getName().toLowerCase().contains("staff")) + { + player.setAttackStyle(AttackStyle.MAGE); + staff = true; + break; + } + } + + if (staff) + { + if (oldStyle != player.getAttackStyle()) + { + eventBus.post(AttackStyleChanged.class, new AttackStyleChanged( + player.getPlayer(), oldStyle, player.getAttackStyle()) + ); + } + return; + } + + final CombatStats stats = player.getCombatStats(); + + if (stats.getMagicStr() >= stats.getRangeStr() && stats.getMagicStr() >= stats.getMeleeStr()) + { + player.setAttackStyle(AttackStyle.MAGE); + } + else if (stats.getRangeStr() >= stats.getMagicStr() && stats.getRangeStr() >= stats.getMeleeStr()) + { + player.setAttackStyle(AttackStyle.RANGE); + } + else + { + player.setAttackStyle(AttackStyle.MELEE); + } + + if (oldStyle != player.getAttackStyle()) + { + eventBus.post(AttackStyleChanged.class, new AttackStyleChanged( + player.getPlayer(), oldStyle, player.getAttackStyle()) + ); + } + } + + private void updateWeakness(PlayerContainer player) + { + final CombatStats stats = player.getCombatStats(); + + if (stats.getMagicDefence() <= stats.getRangeDefence() && stats.getMagicDefence() <= stats.getMeleeDefence()) + { + player.setWeakness(AttackStyle.MAGE); + } + else if (stats.getRangeDefence() <= stats.getMagicDefence() && stats.getRangeDefence() <= stats.getMeleeDefence()) + { + player.setWeakness(AttackStyle.RANGE); + } + else + { + player.setWeakness(AttackStyle.MELEE); + } + } + + private static void removeEntries(LinkedHashMap map, int quantity) + { + for (int i = 0; i < quantity; i++) + { + if (!map.entrySet().iterator().hasNext()) + { + return; + } + map.entrySet().remove(map.entrySet().iterator().next()); + } + } + + private String targetStringBuilder(PlayerContainer player) + { + if (player.getPlayer().getInteracting() != null) + { + Actor actor = player.getPlayer().getInteracting(); + if (actor instanceof Player) + { + return "(Player) " + actor.getName(); + } + else if (actor instanceof NPC) + { + return "(NPC) " + actor.getName(); + } + } + return "No Target Detected"; + } +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/game/SoundManager.java b/runelite-client/src/main/java/net/runelite/client/game/SoundManager.java index 2ea639918c..a306b4bf63 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/SoundManager.java +++ b/runelite-client/src/main/java/net/runelite/client/game/SoundManager.java @@ -41,15 +41,15 @@ public class SoundManager AudioInputStream in = AudioSystem.getAudioInputStream(this.getClass().getClassLoader().getResource(sound.getFilePath())); AudioFormat outFormat = SoundManager.this.getOutFormat(in.getFormat()); DataLine.Info info = new DataLine.Info(SourceDataLine.class, outFormat); - SourceDataLine line = (SourceDataLine)AudioSystem.getLine(info); + SourceDataLine line = (SourceDataLine) AudioSystem.getLine(info); if (line != null) { line.open(outFormat, 2200); if (line.isControlSupported(FloatControl.Type.MASTER_GAIN)) { int volume = SoundManager.this.runeliteConfig.volume(); - FloatControl gainControl = (FloatControl)line.getControl(FloatControl.Type.MASTER_GAIN); - BooleanControl muteControl = (BooleanControl)line.getControl(BooleanControl.Type.MUTE); + FloatControl gainControl = (FloatControl) line.getControl(FloatControl.Type.MASTER_GAIN); + BooleanControl muteControl = (BooleanControl) line.getControl(BooleanControl.Type.MUTE); if (volume == 0) { muteControl.setValue(true); @@ -57,7 +57,7 @@ public class SoundManager else { muteControl.setValue(false); - gainControl.setValue((float)(Math.log((double)volume / 100.0) / Math.log(10.0) * 20.0)); + gainControl.setValue((float) (Math.log((double) volume / 100.0) / Math.log(10.0) * 20.0)); } } line.start(); diff --git a/runelite-client/src/main/java/net/runelite/client/game/SpriteManager.java b/runelite-client/src/main/java/net/runelite/client/game/SpriteManager.java index 63469c4e49..fbc7dc9c2a 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/SpriteManager.java +++ b/runelite-client/src/main/java/net/runelite/client/game/SpriteManager.java @@ -57,7 +57,7 @@ public class SpriteManager @Inject private InfoBoxManager infoBoxManager; - public Cache cache = CacheBuilder.newBuilder() + private final Cache cache = CacheBuilder.newBuilder() .maximumSize(128L) .expireAfterAccess(1, TimeUnit.HOURS) .build(); diff --git a/runelite-client/src/main/java/net/runelite/client/game/WorldService.java b/runelite-client/src/main/java/net/runelite/client/game/WorldService.java new file mode 100644 index 0000000000..51858692cb --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/game/WorldService.java @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2019, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.client.game; + +import java.io.IOException; +import java.util.Comparator; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import javax.annotation.Nullable; +import javax.inject.Inject; +import javax.inject.Singleton; +import lombok.extern.slf4j.Slf4j; +import net.runelite.api.Client; +import net.runelite.api.GameState; +import net.runelite.client.eventbus.EventBus; +import net.runelite.client.events.WorldsFetch; +import net.runelite.client.util.RunnableExceptionLogger; +import net.runelite.http.api.worlds.World; +import net.runelite.http.api.worlds.WorldClient; +import net.runelite.http.api.worlds.WorldResult; + +@Singleton +@Slf4j +public class WorldService +{ + private static final int WORLD_FETCH_TIMER = 10; // minutes + + private final Client client; + private final ScheduledExecutorService scheduledExecutorService; + private final WorldClient worldClient; + private final EventBus eventBus; + private final CompletableFuture firstRunFuture = new CompletableFuture<>(); + + private WorldResult worlds; + + @Inject + private WorldService(Client client, ScheduledExecutorService scheduledExecutorService, WorldClient worldClient, + EventBus eventBus) + { + this.client = client; + this.scheduledExecutorService = scheduledExecutorService; + this.worldClient = worldClient; + this.eventBus = eventBus; + + scheduledExecutorService.scheduleWithFixedDelay(RunnableExceptionLogger.wrap(this::tick), 0, WORLD_FETCH_TIMER, TimeUnit.MINUTES); + } + + private void tick() + { + try + { + if (worlds == null || client.getGameState() == GameState.LOGGED_IN) + { + fetch(); + } + } + finally + { + firstRunFuture.complete(worlds); + } + } + + private void fetch() + { + log.debug("Fetching worlds"); + + try + { + WorldResult worldResult = worldClient.lookupWorlds(); + worldResult.getWorlds().sort(Comparator.comparingInt(World::getId)); + worlds = worldResult; + eventBus.post(WorldsFetch.class, new WorldsFetch(worldResult)); + } + catch (IOException ex) + { + log.warn("Error looking up worlds", ex); + } + } + + public void refresh() + { + scheduledExecutorService.execute(this::fetch); + } + + @Nullable + public WorldResult getWorlds() + { + if (!firstRunFuture.isDone()) + { + try + { + return firstRunFuture.get(10, TimeUnit.SECONDS); + } + catch (InterruptedException | ExecutionException | TimeoutException e) + { + log.warn("Failed to retrieve worlds on first run", e); + } + } + + return worlds; + } +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/game/XpDropManager.java b/runelite-client/src/main/java/net/runelite/client/game/XpDropManager.java index 614437b2a1..36055ae9a4 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/XpDropManager.java +++ b/runelite-client/src/main/java/net/runelite/client/game/XpDropManager.java @@ -21,9 +21,8 @@ public class XpDropManager private int damage = 0; @Getter(AccessLevel.PACKAGE) private int tickShow = 0; - private int previousExpGained; - private Client client; - private EventBus eventBus; + private final Client client; + private final EventBus eventBus; @Inject private XpDropManager( @@ -50,7 +49,7 @@ public class XpDropManager Integer previous = previousSkillExpTable.put(skill, xp); if (previous != null) { - previousExpGained = xp - previous; + int previousExpGained = xp - previous; XpDropEvent xpDropEvent = new XpDropEvent(); xpDropEvent.setExp(previousExpGained); xpDropEvent.setSkill(skill); diff --git a/runelite-client/src/main/java/net/runelite/client/game/chatbox/ChatboxItemSearch.java b/runelite-client/src/main/java/net/runelite/client/game/chatbox/ChatboxItemSearch.java index 8a4d885fb8..d474aca6a8 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/chatbox/ChatboxItemSearch.java +++ b/runelite-client/src/main/java/net/runelite/client/game/chatbox/ChatboxItemSearch.java @@ -59,7 +59,7 @@ public class ChatboxItemSearch extends ChatboxTextInput private final ItemManager itemManager; private final Client client; - private Map results = new LinkedHashMap<>(); + private final Map results = new LinkedHashMap<>(); private String tooltipText; private int index = -1; @@ -68,7 +68,7 @@ public class ChatboxItemSearch extends ChatboxTextInput @Inject private ChatboxItemSearch(ChatboxPanelManager chatboxPanelManager, ClientThread clientThread, - ItemManager itemManager, Client client) + ItemManager itemManager, Client client) { super(chatboxPanelManager, clientThread); this.chatboxPanelManager = chatboxPanelManager; @@ -181,7 +181,7 @@ public class ChatboxItemSearch extends ChatboxTextInput { if (onItemSelected != null) { - onItemSelected.accept(results.keySet().toArray(new Integer[results.size()])[index]); + onItemSelected.accept(results.keySet().toArray(new Integer[0])[index]); } chatboxPanelManager.close(); diff --git a/runelite-client/src/main/java/net/runelite/client/game/chatbox/ChatboxTextInput.java b/runelite-client/src/main/java/net/runelite/client/game/chatbox/ChatboxTextInput.java index 3880b7b400..f8641f374d 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/chatbox/ChatboxTextInput.java +++ b/runelite-client/src/main/java/net/runelite/client/game/chatbox/ChatboxTextInput.java @@ -48,6 +48,7 @@ import lombok.Getter; import lombok.extern.slf4j.Slf4j; import net.runelite.api.FontID; import net.runelite.api.FontTypeFace; +import net.runelite.api.util.Text; import net.runelite.api.widgets.JavaScriptCallback; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetPositionMode; @@ -58,7 +59,6 @@ import net.runelite.client.callback.ClientThread; import net.runelite.client.input.KeyListener; import net.runelite.client.input.MouseListener; import net.runelite.client.util.MiscUtils; -import net.runelite.api.util.Text; @Slf4j public class ChatboxTextInput extends ChatboxInput implements KeyListener, MouseListener @@ -67,7 +67,7 @@ public class ChatboxTextInput extends ChatboxInput implements KeyListener, Mouse private static final Pattern BREAK_MATCHER = Pattern.compile("[^a-zA-Z0-9']"); private final ChatboxPanelManager chatboxPanelManager; - protected final ClientThread clientThread; + final ClientThread clientThread; private static IntPredicate getDefaultCharValidator() { @@ -135,7 +135,7 @@ public class ChatboxTextInput extends ChatboxInput implements KeyListener, Mouse return this; } - public ChatboxTextInput lines(int lines) + protected ChatboxTextInput lines(int lines) { this.lines = lines; if (built) @@ -573,7 +573,7 @@ public class ChatboxTextInput extends ChatboxInput implements KeyListener, Mouse } @Override - protected void close() + void close() { if (this.onClose != null) { diff --git a/runelite-client/src/main/java/net/runelite/client/input/KeyListener.java b/runelite-client/src/main/java/net/runelite/client/input/KeyListener.java index d8b72f4a04..b86d317c71 100644 --- a/runelite-client/src/main/java/net/runelite/client/input/KeyListener.java +++ b/runelite-client/src/main/java/net/runelite/client/input/KeyListener.java @@ -24,6 +24,4 @@ */ package net.runelite.client.input; -public interface KeyListener extends java.awt.event.KeyListener -{ -} +public interface KeyListener extends java.awt.event.KeyListener {} diff --git a/runelite-client/src/main/java/net/runelite/client/menus/BaseComparableEntry.java b/runelite-client/src/main/java/net/runelite/client/menus/BaseComparableEntry.java index a5c6ea436b..6609486bb6 100644 --- a/runelite-client/src/main/java/net/runelite/client/menus/BaseComparableEntry.java +++ b/runelite-client/src/main/java/net/runelite/client/menus/BaseComparableEntry.java @@ -83,10 +83,7 @@ public class BaseComparableEntry extends AbstractComparableEntry { int type = entry.getOpcode(); - if (this.type != type) - { - return false; - } + return this.type == type; } return true; diff --git a/runelite-client/src/main/java/net/runelite/client/menus/ComparableEntries.java b/runelite-client/src/main/java/net/runelite/client/menus/ComparableEntries.java index 3383191584..f3e324f283 100644 --- a/runelite-client/src/main/java/net/runelite/client/menus/ComparableEntries.java +++ b/runelite-client/src/main/java/net/runelite/client/menus/ComparableEntries.java @@ -11,7 +11,6 @@ public interface ComparableEntries * * @param option has to equal entry option * @param target has to equal entry option - * * @return a new BaseComparableEntry */ static BaseComparableEntry newBaseComparableEntry(String option, String target) @@ -23,10 +22,9 @@ public interface ComparableEntries * BaseComparableEntries should only be used if there's * no better ComparableEntry available. * - * @param option has to equal option - * @param target equal or contains depending on strictTarget + * @param option has to equal option + * @param target equal or contains depending on strictTarget * @param strictTarget read up one line - * * @return a new BaseComparableEntry */ static BaseComparableEntry newBaseComparableEntry(String option, String target, boolean strictTarget) @@ -38,13 +36,12 @@ public interface ComparableEntries * BaseComparableEntries should only be used if there's * no better ComparableEntry available. * - * @param option equal or contains depending on strictOption - * @param target equal or contains depending on strictTarget - * @param id has to be the same, or -1 to skip checking - * @param type has to be the same, or -1 to skip checking + * @param option equal or contains depending on strictOption + * @param target equal or contains depending on strictTarget + * @param id has to be the same, or -1 to skip checking + * @param type has to be the same, or -1 to skip checking * @param strictOption strict option or nah * @param strictTarget strict target or nah - * * @return a new BaseComparableEntry */ static BaseComparableEntry newBaseComparableEntry(String option, String target, int id, int type, boolean strictOption, boolean strictTarget) @@ -57,7 +54,7 @@ public interface ComparableEntries * in their name. It then checks the ItemDefinition * for each of them, to see if it's possible for * the item to have option as one of their options. - * + *

* This has to be ran on the clientthread! */ static ItemComparableEntry newInvItemComparableEntry(Client client, String option, String itemName) diff --git a/runelite-client/src/main/java/net/runelite/client/menus/MenuManager.java b/runelite-client/src/main/java/net/runelite/client/menus/MenuManager.java index 0b4bb2fb29..c8b551b659 100644 --- a/runelite-client/src/main/java/net/runelite/client/menus/MenuManager.java +++ b/runelite-client/src/main/java/net/runelite/client/menus/MenuManager.java @@ -639,7 +639,7 @@ public class MenuManager /** * Adds to the map of swaps. */ - public void addSwap(String option, String target, String option2, String target2, boolean strictOption, boolean strictTarget) + private void addSwap(String option, String target, String option2, String target2, boolean strictOption, boolean strictTarget) { option = option.trim().toLowerCase(); target = Text.standardize(target); @@ -660,7 +660,7 @@ public class MenuManager } - public void removeSwap(String option, String target, String option2, String target2, boolean strictOption, boolean strictTarget) + private void removeSwap(String option, String target, String option2, String target2, boolean strictOption, boolean strictTarget) { option = option.trim().toLowerCase(); target = Text.standardize(target); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/ExternalPluginLoader.java b/runelite-client/src/main/java/net/runelite/client/plugins/ExternalPluginLoader.java index 81ca7c7a6f..52e6a25391 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/ExternalPluginLoader.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/ExternalPluginLoader.java @@ -61,7 +61,7 @@ public class ExternalPluginLoader BASE.mkdirs(); } - public void scanAndLoad() + void scanAndLoad() { if (!OpenOSRSConfig.enablePlugins()) { @@ -111,7 +111,7 @@ public class ExternalPluginLoader return; } - if (loadedPlugins.size() != 1) + if (loadedPlugins.size() > 1) { close(loader); log.warn("You can not have more than one plugin per jar"); @@ -119,8 +119,6 @@ public class ExternalPluginLoader } Plugin plugin = loadedPlugins.get(0); - plugin.file = pluginFile; - plugin.loader = loader; // Initialize default configuration Injector injector = plugin.getInjector(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/Plugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/Plugin.java index 5e2b612474..6ff4642b8f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/Plugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/Plugin.java @@ -24,17 +24,28 @@ */ package net.runelite.client.plugins; +import com.google.common.collect.ImmutableSet; import com.google.inject.Binder; import com.google.inject.Injector; import com.google.inject.Module; -import java.io.File; +import io.reactivex.functions.Consumer; +import java.lang.reflect.Method; +import java.util.Set; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.Value; +import net.runelite.api.events.Event; +import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.EventScheduler; +import net.runelite.client.eventbus.Subscribe; public abstract class Plugin implements Module { - protected Injector injector; + private final Set annotatedSubscriptions = findSubscriptions(); + private final Object annotatedSubsLock = new Object(); - public File file; - public PluginClassLoader loader; + @Getter(AccessLevel.PROTECTED) + protected Injector injector; @Override public void configure(Binder binder) @@ -49,8 +60,53 @@ public abstract class Plugin implements Module { } - public final Injector getInjector() + @SuppressWarnings("unchecked") + final void addAnnotatedSubscriptions(EventBus eventBus) { - return injector; + annotatedSubscriptions.forEach(sub -> eventBus.subscribe(sub.type, annotatedSubsLock, sub.method, sub.takeUntil, sub.subscribe, sub.observe)); + } + + final void removeAnnotatedSubscriptions(EventBus eventBus) + { + eventBus.unregister(annotatedSubsLock); + } + + private Set findSubscriptions() + { + ImmutableSet.Builder builder = ImmutableSet.builder(); + + for (Method method : this.getClass().getDeclaredMethods()) + { + Subscribe annotation = method.getAnnotation(Subscribe.class); + if (annotation == null) + { + continue; + } + + assert method.getParameterCount() == 1 : "Methods annotated with @Subscribe should have only one parameter"; + + Class type = method.getParameterTypes()[0]; + + assert Event.class.isAssignableFrom(type) : "Parameters of methods annotated with @Subscribe should implement net.runelite.api.events.Event"; + assert method.getReturnType() == void.class : "Methods annotated with @Subscribe should have a void return type"; + + method.setAccessible(true); + + Subscription sub = new Subscription(type.asSubclass(Event.class), event -> method.invoke(this, event), annotation.takeUntil(), annotation.subscribe(), annotation.observe()); + + builder.add(sub); + } + + return builder.build(); + } + + @Value + private static class Subscription + { + private final Class type; + private final Consumer method; + private final int takeUntil; + private final EventScheduler subscribe; + private final EventScheduler observe; } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java b/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java index 10ec3ef9ed..0e19d0b66c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java @@ -376,6 +376,8 @@ public class PluginManager } }); + plugin.addAnnotatedSubscriptions(eventBus); + log.debug("Plugin {} is now running", plugin.getClass().getSimpleName()); if (!isOutdated && sceneTileManager != null) { @@ -386,7 +388,6 @@ public class PluginManager } } - // eventBus.register(plugin); schedule(plugin); eventBus.post(PluginChanged.class, new PluginChanged(plugin, true)); } @@ -424,6 +425,8 @@ public class PluginManager } }); + plugin.removeAnnotatedSubscriptions(eventBus); + log.debug("Plugin {} is now stopped", plugin.getClass().getSimpleName()); eventBus.post(PluginChanged.class, new PluginChanged(plugin, false)); @@ -567,6 +570,7 @@ public class PluginManager * Plugins in group 2 has dependents in group 1, etc. * This allows for loading dependent groups serially, starting from the last group, * while loading plugins within each group in parallel. + * * @param graph * @param * @return diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/account/AccountPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/account/AccountPlugin.java index 04e8cd45ff..95e3dfeaaa 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/account/AccountPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/account/AccountPlugin.java @@ -24,17 +24,15 @@ */ package net.runelite.client.plugins.account; -import java.util.concurrent.ScheduledExecutorService; import javax.inject.Inject; import javax.inject.Singleton; import lombok.extern.slf4j.Slf4j; import net.runelite.client.account.AccountSession; import net.runelite.client.account.SessionManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.SessionOpen; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.ui.ClientToolbar; @PluginDescriptor( name = "Account", @@ -49,33 +47,7 @@ public class AccountPlugin extends Plugin @Inject private SessionManager sessionManager; - @Inject - private ClientToolbar clientToolbar; - - @Inject - private ScheduledExecutorService executor; - - @Inject - private EventBus eventBus; - - - @Override - protected void startUp() throws Exception - { - addSubscriptions(); - } - - @Override - protected void shutDown() throws Exception - { - eventBus.unregister(this); - } - - private void addSubscriptions() - { - eventBus.subscribe(SessionOpen.class, this, this::onSessionOpen); - } - + @Subscribe private void onSessionOpen(SessionOpen sessionOpen) { AccountSession session = sessionManager.getAccountSession(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/CombatLevelRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/CombatLevelRequirement.java index 4befd43eb1..1a16de26f4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/CombatLevelRequirement.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/CombatLevelRequirement.java @@ -24,11 +24,12 @@ */ package net.runelite.client.plugins.achievementdiary; +import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; @RequiredArgsConstructor -@Getter +@Getter(AccessLevel.PACKAGE) public class CombatLevelRequirement implements Requirement { private final int level; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/DiaryRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/DiaryRequirement.java index 9da905fe14..bf583c27b9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/DiaryRequirement.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/DiaryRequirement.java @@ -27,9 +27,10 @@ package net.runelite.client.plugins.achievementdiary; import com.google.common.collect.ImmutableList; import java.util.List; +import lombok.AccessLevel; import lombok.Getter; -@Getter +@Getter(AccessLevel.PACKAGE) class DiaryRequirement { private final String task; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/DiaryRequirementsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/DiaryRequirementsPlugin.java index b39c1da667..b0211c33fe 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/DiaryRequirementsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/DiaryRequirementsPlugin.java @@ -40,11 +40,12 @@ import net.runelite.api.QuestState; import net.runelite.api.ScriptID; import net.runelite.api.VarPlayer; import net.runelite.api.events.WidgetLoaded; +import net.runelite.api.util.Text; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetID; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.callback.ClientThread; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.achievementdiary.diaries.ArdougneDiaryRequirement; @@ -59,7 +60,6 @@ import net.runelite.client.plugins.achievementdiary.diaries.MorytaniaDiaryRequir import net.runelite.client.plugins.achievementdiary.diaries.VarrockDiaryRequirement; import net.runelite.client.plugins.achievementdiary.diaries.WesternDiaryRequirement; import net.runelite.client.plugins.achievementdiary.diaries.WildernessDiaryRequirement; -import net.runelite.api.util.Text; @Slf4j @PluginDescriptor( @@ -79,21 +79,7 @@ public class DiaryRequirementsPlugin extends Plugin @Inject private ClientThread clientThread; - @Inject - private EventBus eventBus; - - @Override - protected void startUp() throws Exception - { - eventBus.subscribe(WidgetLoaded.class, this, this::onWidgetLoaded); - } - - @Override - protected void shutDown() throws Exception - { - eventBus.unregister(this); - } - + @Subscribe private void onWidgetLoaded(final WidgetLoaded event) { if (event.getGroupId() == WidgetID.DIARY_QUEST_GROUP_ID) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/FavourRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/FavourRequirement.java index 575faa0e75..035c032e23 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/FavourRequirement.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/FavourRequirement.java @@ -24,12 +24,13 @@ */ package net.runelite.client.plugins.achievementdiary; +import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; import net.runelite.api.Favour; @RequiredArgsConstructor -@Getter +@Getter(AccessLevel.PACKAGE) public class FavourRequirement implements Requirement { private final Favour house; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/GenericDiaryRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/GenericDiaryRequirement.java index ba7834b151..f34d2ac505 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/GenericDiaryRequirement.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/GenericDiaryRequirement.java @@ -27,11 +27,12 @@ package net.runelite.client.plugins.achievementdiary; import java.util.HashSet; import java.util.Set; +import lombok.AccessLevel; import lombok.Getter; public abstract class GenericDiaryRequirement { - @Getter + @Getter(AccessLevel.PACKAGE) private Set requirements = new HashSet<>(); protected void add(String task, Requirement... requirements) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/OrRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/OrRequirement.java index 7b852426f9..9270b5203b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/OrRequirement.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/OrRequirement.java @@ -27,11 +27,12 @@ package net.runelite.client.plugins.achievementdiary; import com.google.common.base.Joiner; import com.google.common.collect.ImmutableList; import java.util.List; +import lombok.AccessLevel; import lombok.Getter; public class OrRequirement implements Requirement { - @Getter + @Getter(AccessLevel.PACKAGE) private final List requirements; public OrRequirement(Requirement... reqs) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/QuestPointRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/QuestPointRequirement.java index c2b13e7c9b..b8917067db 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/QuestPointRequirement.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/QuestPointRequirement.java @@ -24,11 +24,12 @@ */ package net.runelite.client.plugins.achievementdiary; +import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; @RequiredArgsConstructor -@Getter +@Getter(AccessLevel.PACKAGE) public class QuestPointRequirement implements Requirement { private final int qp; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/QuestRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/QuestRequirement.java index cbc471651f..2781e55f03 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/QuestRequirement.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/QuestRequirement.java @@ -24,11 +24,12 @@ */ package net.runelite.client.plugins.achievementdiary; +import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; import net.runelite.api.Quest; -@Getter +@Getter(AccessLevel.PACKAGE) @RequiredArgsConstructor public class QuestRequirement implements Requirement { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/Requirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/Requirement.java index a507cb4538..cddf78e866 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/Requirement.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/Requirement.java @@ -24,6 +24,4 @@ */ package net.runelite.client.plugins.achievementdiary; -public interface Requirement -{ -} +public interface Requirement {} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/SkillRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/SkillRequirement.java index 1a711f91ac..1f331a9aee 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/SkillRequirement.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/SkillRequirement.java @@ -24,12 +24,13 @@ */ package net.runelite.client.plugins.achievementdiary; +import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; import net.runelite.api.Skill; @RequiredArgsConstructor -@Getter +@Getter(AccessLevel.PACKAGE) public class SkillRequirement implements Requirement { private final Skill skill; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityPlugin.java index 0e813f3d4d..1ccf31b81e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityPlugin.java @@ -71,6 +71,7 @@ import net.runelite.api.events.WallObjectSpawned; import net.runelite.client.Notifier; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.AgilityShortcut; import net.runelite.client.game.ItemManager; @@ -134,12 +135,6 @@ public class AgilityPlugin extends Plugin @Getter(AccessLevel.PACKAGE) private int agilityLevel; - @Provides - AgilityConfig getConfig(ConfigManager configManager) - { - return configManager.getConfig(AgilityConfig.class); - } - // Config values @Getter(AccessLevel.PACKAGE) private boolean removeDistanceCap; @@ -166,11 +161,16 @@ public class AgilityPlugin extends Plugin private boolean notifyAgilityArena; private boolean showAgilityArenaTimer; + @Provides + AgilityConfig getConfig(ConfigManager configManager) + { + return configManager.getConfig(AgilityConfig.class); + } + @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); if (config.showShortcutLevel()) { @@ -183,9 +183,8 @@ public class AgilityPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); eventBus.unregister(MENU_SUBS); overlayManager.remove(agilityOverlay); @@ -196,34 +195,13 @@ public class AgilityPlugin extends Plugin agilityLevel = 0; } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(StatChanged .class, this, this::onStatChanged); - eventBus.subscribe(ItemSpawned.class, this, this::onItemSpawned); - eventBus.subscribe(ItemDespawned.class, this, this::onItemDespawned); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(GameObjectSpawned.class, this, this::onGameObjectSpawned); - eventBus.subscribe(GameObjectChanged.class, this, this::onGameObjectChanged); - eventBus.subscribe(GameObjectDespawned.class, this, this::onGameObjectDespawned); - eventBus.subscribe(GroundObjectSpawned.class, this, this::onGroundObjectSpawned); - eventBus.subscribe(GroundObjectChanged.class, this, this::onGroundObjectChanged); - eventBus.subscribe(GroundObjectDespawned.class, this, this::onGroundObjectDespawned); - eventBus.subscribe(WallObjectSpawned.class, this, this::onWallObjectSpawned); - eventBus.subscribe(WallObjectChanged.class, this, this::onWallObjectChanged); - eventBus.subscribe(WallObjectDespawned.class, this, this::onWallObjectDespawned); - eventBus.subscribe(DecorativeObjectSpawned.class, this, this::onDecorativeObjectSpawned); - eventBus.subscribe(DecorativeObjectChanged.class, this, this::onDecorativeObjectChanged); - eventBus.subscribe(DecorativeObjectDespawned.class, this, this::onDecorativeObjectDespawned); - } - private void addMenuSubscriptions() { eventBus.subscribe(BeforeRender.class, MENU_SUBS, this::onBeforeRender); eventBus.subscribe(MenuOpened.class, MENU_SUBS, this::onMenuOpened); } + @Subscribe private void onGameStateChanged(GameStateChanged event) { switch (event.getGameState()) @@ -248,6 +226,7 @@ public class AgilityPlugin extends Plugin } } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("agility")) @@ -276,7 +255,7 @@ public class AgilityPlugin extends Plugin } } - public void updateConfig() + private void updateConfig() { this.removeDistanceCap = config.removeDistanceCap(); this.showLapCount = config.showLapCount(); @@ -293,6 +272,7 @@ public class AgilityPlugin extends Plugin this.showAgilityArenaTimer = config.showAgilityArenaTimer(); } + @Subscribe public void onStatChanged(StatChanged statChanged) { if (statChanged.getSkill() != AGILITY) @@ -335,6 +315,7 @@ public class AgilityPlugin extends Plugin } } + @Subscribe private void onItemSpawned(ItemSpawned itemSpawned) { if (obstacles.isEmpty()) @@ -351,12 +332,14 @@ public class AgilityPlugin extends Plugin } } + @Subscribe private void onItemDespawned(ItemDespawned itemDespawned) { final Tile tile = itemDespawned.getTile(); marksOfGrace.remove(tile); } + @Subscribe private void onGameTick(GameTick tick) { if (isInAgilityArena()) @@ -408,61 +391,73 @@ public class AgilityPlugin extends Plugin infoBoxManager.addInfoBox(new AgilityArenaTimer(this, itemManager.getImage(AGILITY_ARENA_TICKET))); } + @Subscribe private void onGameObjectSpawned(GameObjectSpawned event) { onTileObject(event.getTile(), null, event.getGameObject()); } + @Subscribe private void onGameObjectChanged(GameObjectChanged event) { onTileObject(event.getTile(), event.getPrevious(), event.getGameObject()); } + @Subscribe private void onGameObjectDespawned(GameObjectDespawned event) { onTileObject(event.getTile(), event.getGameObject(), null); } + @Subscribe private void onGroundObjectSpawned(GroundObjectSpawned event) { onTileObject(event.getTile(), null, event.getGroundObject()); } + @Subscribe private void onGroundObjectChanged(GroundObjectChanged event) { onTileObject(event.getTile(), event.getPrevious(), event.getGroundObject()); } + @Subscribe private void onGroundObjectDespawned(GroundObjectDespawned event) { onTileObject(event.getTile(), event.getGroundObject(), null); } + @Subscribe private void onWallObjectSpawned(WallObjectSpawned event) { onTileObject(event.getTile(), null, event.getWallObject()); } + @Subscribe private void onWallObjectChanged(WallObjectChanged event) { onTileObject(event.getTile(), event.getPrevious(), event.getWallObject()); } + @Subscribe private void onWallObjectDespawned(WallObjectDespawned event) { onTileObject(event.getTile(), event.getWallObject(), null); } + @Subscribe private void onDecorativeObjectSpawned(DecorativeObjectSpawned event) { onTileObject(event.getTile(), null, event.getDecorativeObject()); } + @Subscribe private void onDecorativeObjectChanged(DecorativeObjectChanged event) { onTileObject(event.getTile(), event.getPrevious(), event.getDecorativeObject()); } + @Subscribe private void onDecorativeObjectDespawned(DecorativeObjectDespawned event) { onTileObject(event.getTile(), event.getDecorativeObject(), null); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilitySession.java b/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilitySession.java index 1c6e413a46..116f5725b6 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilitySession.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilitySession.java @@ -25,6 +25,7 @@ package net.runelite.client.plugins.agility; import java.time.Instant; +import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; import net.runelite.api.Client; @@ -32,8 +33,8 @@ import net.runelite.api.Experience; import net.runelite.api.Skill; import net.runelite.api.VarPlayer; -@Getter -@Setter +@Getter(AccessLevel.PACKAGE) +@Setter(AccessLevel.PACKAGE) class AgilitySession { private final Courses course; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/HydraPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/HydraPlugin.java index 2b7bcb2c52..10ad4af459 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/HydraPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/alchemicalhydra/HydraPlugin.java @@ -51,6 +51,7 @@ import net.runelite.api.events.NpcSpawned; import net.runelite.api.events.ProjectileMoved; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -69,6 +70,12 @@ import net.runelite.client.ui.overlay.OverlayManager; @Singleton public class HydraPlugin extends Plugin { + private static final int[] HYDRA_REGIONS = { + 5279, 5280, + 5535, 5536 + }; + private static final int STUN_LENGTH = 7; + @Getter(AccessLevel.PACKAGE) private Map poisonProjectiles = new HashMap<>(); @@ -86,13 +93,7 @@ public class HydraPlugin extends Plugin private boolean inHydraInstance; private int lastAttackTick; - - private static final int[] HYDRA_REGIONS = { - 5279, 5280, - 5535, 5536 - }; - private static final int STUN_LENGTH = 7; - + @Inject private Client client; @@ -122,9 +123,6 @@ public class HydraPlugin extends Plugin { initConfig(); - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - inHydraInstance = checkArea(); lastAttackTick = -1; poisonProjectiles.clear(); @@ -133,7 +131,6 @@ public class HydraPlugin extends Plugin @Override protected void shutDown() { - eventBus.unregister(this); eventBus.unregister("fight"); eventBus.unregister("npcSpawned"); @@ -165,6 +162,7 @@ public class HydraPlugin extends Plugin eventBus.subscribe(ChatMessage.class, "fight", this::onChatMessage); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("betterHydra")) @@ -207,6 +205,7 @@ public class HydraPlugin extends Plugin } } + @Subscribe private void onGameStateChanged(GameStateChanged state) { if (state.getGameState() != GameState.LOGGED_IN) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/ammo/AmmoPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/ammo/AmmoPlugin.java index 9796ef08ba..051229ee41 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/ammo/AmmoPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/ammo/AmmoPlugin.java @@ -31,11 +31,11 @@ import net.runelite.api.Client; import net.runelite.api.EquipmentInventorySlot; import net.runelite.api.InventoryID; import net.runelite.api.Item; -import net.runelite.api.ItemDefinition; import net.runelite.api.ItemContainer; +import net.runelite.api.ItemDefinition; import net.runelite.api.events.ItemContainerChanged; import net.runelite.client.callback.ClientThread; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -61,15 +61,11 @@ public class AmmoPlugin extends Plugin @Inject private ItemManager itemManager; - @Inject - private EventBus eventBus; - private AmmoCounter counterBox; @Override - protected void startUp() throws Exception + protected void startUp() { - eventBus.subscribe(ItemContainerChanged.class, this, this::onItemContainerChanged); clientThread.invokeLater(() -> { @@ -83,14 +79,13 @@ public class AmmoPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - infoBoxManager.removeInfoBox(counterBox); counterBox = null; } + @Subscribe private void onItemContainerChanged(ItemContainerChanged event) { if (event.getItemContainer() != client.getItemContainer(InventoryID.EQUIPMENT)) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/animsmoothing/AnimationSmoothingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/animsmoothing/AnimationSmoothingPlugin.java index 04fbfb0f23..9a7050c0a4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/animsmoothing/AnimationSmoothingPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/animsmoothing/AnimationSmoothingPlugin.java @@ -28,9 +28,9 @@ import com.google.inject.Provides; import javax.inject.Inject; import javax.inject.Singleton; import net.runelite.api.Client; -import net.runelite.client.events.ConfigChanged; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -51,9 +51,6 @@ public class AnimationSmoothingPlugin extends Plugin @Inject private AnimationSmoothingConfig config; - @Inject - private EventBus eventBus; - @Provides AnimationSmoothingConfig getConfig(ConfigManager configManager) { @@ -61,24 +58,21 @@ public class AnimationSmoothingPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - update(); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - client.setInterpolatePlayerAnimations(false); client.setInterpolateNpcAnimations(false); client.setInterpolateObjectAnimations(false); client.setInterpolateWidgetAnimations(false); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals(CONFIG_GROUP)) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/antidrag/AntiDragPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/antidrag/AntiDragPlugin.java index 7ee869cec5..da40cdf465 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/antidrag/AntiDragPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/antidrag/AntiDragPlugin.java @@ -34,7 +34,7 @@ import net.runelite.api.events.FocusChanged; import net.runelite.api.events.GameStateChanged; import net.runelite.client.config.ConfigManager; import net.runelite.client.config.Keybind; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.input.KeyManager; import net.runelite.client.plugins.Plugin; @@ -71,144 +71,15 @@ public class AntiDragPlugin extends Plugin @Inject private OverlayManager overlayManager; - @Inject - private ConfigManager configManager; - @Inject private KeyManager keyManager; - @Inject - private EventBus eventBus; - - @Provides - AntiDragConfig getConfig(ConfigManager configManager) - { - return configManager.getConfig(AntiDragConfig.class); - } - private boolean toggleDrag; private boolean configOverlay; private boolean changeCursor; private CustomCursor selectedCursor; private Keybind key; - @Override - protected void startUp() throws Exception - { - overlay.setColor(config.color()); - - addSubscriptions(); - updateConfig(); - updateKeyListeners(); - - if (config.alwaysOn()) - { - client.setInventoryDragDelay(config.dragDelay()); - } - } - - @Override - protected void shutDown() throws Exception - { - eventBus.unregister(this); - - client.setInventoryDragDelay(DEFAULT_DELAY); - keyManager.unregisterKeyListener(holdListener); - keyManager.unregisterKeyListener(toggleListener); - toggleDrag = false; - overlayManager.remove(overlay); - clientUI.resetCursor(); - } - - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(FocusChanged.class, this, this::onFocusChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - } - - private void onConfigChanged(ConfigChanged event) - { - if (event.getGroup().equals("antiDrag")) - { - updateConfig(); - - switch (event.getKey()) - { - case "toggleKeyBind": - case "holdKeyBind": - updateKeyListeners(); - break; - case "alwaysOn": - client.setInventoryDragDelay(config.alwaysOn() ? config.dragDelay() : DEFAULT_DELAY); - break; - case "dragDelay": - if (config.alwaysOn()) - { - client.setInventoryDragDelay(config.dragDelay()); - } - break; - case ("changeCursor"): - clientUI.resetCursor(); - break; - case ("color"): - overlay.setColor(config.color()); - break; - } - } - } - - private void onGameStateChanged(GameStateChanged event) - { - if (event.getGameState() == GameState.LOGIN_SCREEN) - { - keyManager.unregisterKeyListener(toggleListener); - keyManager.unregisterKeyListener(holdListener); - } - else if (event.getGameState() == GameState.LOGGING_IN) - { - updateKeyListeners(); - } - } - - private void updateConfig() - { - this.key = config.key(); - this.configOverlay = config.overlay(); - this.changeCursor = config.changeCursor(); - this.selectedCursor = config.selectedCursor(); - } - - private void onFocusChanged(FocusChanged focusChanged) - { - if (!focusChanged.isFocused() && config.reqFocus() && !config.alwaysOn()) - { - client.setInventoryDragDelay(DEFAULT_DELAY); - overlayManager.remove(overlay); - } - } - - private void updateKeyListeners() - { - if (config.holdKeyBind()) - { - keyManager.registerKeyListener(holdListener); - } - else - { - keyManager.unregisterKeyListener(holdListener); - } - - if (config.toggleKeyBind()) - { - keyManager.registerKeyListener(toggleListener); - } - else - { - keyManager.unregisterKeyListener(toggleListener); - } - } - private final HotkeyListener toggleListener = new HotkeyListener(() -> this.key) { @Override @@ -262,4 +133,119 @@ public class AntiDragPlugin extends Plugin clientUI.resetCursor(); } }; + + @Provides + AntiDragConfig getConfig(ConfigManager configManager) + { + return configManager.getConfig(AntiDragConfig.class); + } + + @Override + protected void startUp() + { + overlay.setColor(config.color()); + updateConfig(); + updateKeyListeners(); + + if (config.alwaysOn()) + { + client.setInventoryDragDelay(config.dragDelay()); + } + } + + @Override + protected void shutDown() + { + client.setInventoryDragDelay(DEFAULT_DELAY); + keyManager.unregisterKeyListener(holdListener); + keyManager.unregisterKeyListener(toggleListener); + toggleDrag = false; + overlayManager.remove(overlay); + clientUI.resetCursor(); + } + + @Subscribe + private void onConfigChanged(ConfigChanged event) + { + if (event.getGroup().equals("antiDrag")) + { + updateConfig(); + + switch (event.getKey()) + { + case "toggleKeyBind": + case "holdKeyBind": + updateKeyListeners(); + break; + case "alwaysOn": + client.setInventoryDragDelay(config.alwaysOn() ? config.dragDelay() : DEFAULT_DELAY); + break; + case "dragDelay": + if (config.alwaysOn()) + { + client.setInventoryDragDelay(config.dragDelay()); + } + break; + case ("changeCursor"): + clientUI.resetCursor(); + break; + case ("color"): + overlay.setColor(config.color()); + break; + } + } + } + + @Subscribe + private void onGameStateChanged(GameStateChanged event) + { + if (event.getGameState() == GameState.LOGIN_SCREEN) + { + keyManager.unregisterKeyListener(toggleListener); + keyManager.unregisterKeyListener(holdListener); + } + else if (event.getGameState() == GameState.LOGGING_IN) + { + updateKeyListeners(); + } + } + + private void updateConfig() + { + this.key = config.key(); + this.configOverlay = config.overlay(); + this.changeCursor = config.changeCursor(); + this.selectedCursor = config.selectedCursor(); + } + + @Subscribe + private void onFocusChanged(FocusChanged focusChanged) + { + if (!focusChanged.isFocused() && config.reqFocus() && !config.alwaysOn()) + { + client.setInventoryDragDelay(DEFAULT_DELAY); + overlayManager.remove(overlay); + } + } + + private void updateKeyListeners() + { + if (config.holdKeyBind()) + { + keyManager.registerKeyListener(holdListener); + } + else + { + keyManager.unregisterKeyListener(holdListener); + } + + if (config.toggleKeyBind()) + { + keyManager.registerKeyListener(toggleListener); + } + else + { + keyManager.unregisterKeyListener(toggleListener); + } + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/aoewarnings/AoeProjectileInfo.java b/runelite-client/src/main/java/net/runelite/client/plugins/aoewarnings/AoeProjectileInfo.java index bf288c62ac..16d7902528 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/aoewarnings/AoeProjectileInfo.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/aoewarnings/AoeProjectileInfo.java @@ -37,12 +37,12 @@ public enum AoeProjectileInfo LIZARDMAN_SHAMAN_AOE(ProjectileID.LIZARDMAN_SHAMAN_AOE, 5), CRAZY_ARCHAEOLOGIST_AOE(ProjectileID.CRAZY_ARCHAEOLOGIST_AOE, 3), ICE_DEMON_RANGED_AOE(ProjectileID.ICE_DEMON_RANGED_AOE, 3), - + /** * When you don't have pray range on ice demon does an ice barrage */ ICE_DEMON_ICE_BARRAGE_AOE(ProjectileID.ICE_DEMON_ICE_BARRAGE_AOE, 3), - + /** * The AOE when vasa first starts */ @@ -63,7 +63,7 @@ public enum AoeProjectileInfo */ GALVEK_MINE(ProjectileID.GALVEK_MINE, 3), GALVEK_BOMB(ProjectileID.GALVEK_BOMB, 3), - + /** * the AOEs of Grotesque Guardians */ diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/aoewarnings/AoeWarningConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/aoewarnings/AoeWarningConfig.java index 28fd21d42b..acce255546 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/aoewarnings/AoeWarningConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/aoewarnings/AoeWarningConfig.java @@ -28,6 +28,7 @@ package net.runelite.client.plugins.aoewarnings; import java.awt.Color; import java.awt.Font; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; import net.runelite.client.config.Config; @@ -40,7 +41,7 @@ import net.runelite.client.config.Title; @ConfigGroup("aoe") public interface AoeWarningConfig extends Config { - @Getter + @Getter(AccessLevel.PACKAGE) @AllArgsConstructor enum FontStyle { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/aoewarnings/AoeWarningPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/aoewarnings/AoeWarningPlugin.java index 7c78947a81..0d486a65ec 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/aoewarnings/AoeWarningPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/aoewarnings/AoeWarningPlugin.java @@ -26,7 +26,6 @@ */ package net.runelite.client.plugins.aoewarnings; - import com.google.inject.Provides; import java.awt.Color; import java.time.Instant; @@ -55,7 +54,7 @@ import net.runelite.api.events.ProjectileMoved; import net.runelite.api.events.ProjectileSpawned; import net.runelite.client.Notifier; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -73,32 +72,42 @@ import net.runelite.client.ui.overlay.OverlayManager; @Slf4j public class AoeWarningPlugin extends Plugin { - @Inject - public AoeWarningConfig config; - @Inject - private Notifier notifier; - @Inject - private OverlayManager overlayManager; - @Inject - private AoeWarningOverlay coreOverlay; - @Inject - private BombOverlay bombOverlay; - @Inject - private Client client; - @Inject - private EventBus eventbus; - @Getter(AccessLevel.PACKAGE) - private List lightningTrail = new ArrayList<>(); - @Getter(AccessLevel.PACKAGE) - private List acidTrail = new ArrayList<>(); - @Getter(AccessLevel.PACKAGE) - private List crystalSpike = new ArrayList<>(); - @Getter(AccessLevel.PACKAGE) - private List wintertodtSnowFall = new ArrayList<>(); @Getter(AccessLevel.PACKAGE) private final Set bombs = new HashSet<>(); + @Getter(AccessLevel.PACKAGE) private final Set projectiles = new HashSet<>(); + + @Inject + public AoeWarningConfig config; + + @Inject + private Notifier notifier; + + @Inject + private OverlayManager overlayManager; + + @Inject + private AoeWarningOverlay coreOverlay; + + @Inject + private BombOverlay bombOverlay; + + @Inject + private Client client; + + @Getter(AccessLevel.PACKAGE) + private List lightningTrail = new ArrayList<>(); + + @Getter(AccessLevel.PACKAGE) + private List acidTrail = new ArrayList<>(); + + @Getter(AccessLevel.PACKAGE) + private List crystalSpike = new ArrayList<>(); + + @Getter(AccessLevel.PACKAGE) + private List wintertodtSnowFall = new ArrayList<>(); + // Config values private boolean aoeNotifyAll; @Getter(AccessLevel.PACKAGE) @@ -168,7 +177,6 @@ public class AoeWarningPlugin extends Plugin protected void startUp() { updateConfig(); - addSubscriptions(); overlayManager.add(coreOverlay); overlayManager.add(bombOverlay); reset(); @@ -180,20 +188,9 @@ public class AoeWarningPlugin extends Plugin overlayManager.remove(coreOverlay); overlayManager.remove(bombOverlay); reset(); - eventbus.unregister(this); - } - - private void addSubscriptions() - { - eventbus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventbus.subscribe(ProjectileMoved.class, this, this::onProjectileMoved); - eventbus.subscribe(GameObjectSpawned.class, this, this::onGameObjectSpawned); - eventbus.subscribe(GameObjectDespawned.class, this, this::onGameObjectDespawned); - eventbus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventbus.subscribe(GameTick.class, this, this::onGameTick); - eventbus.subscribe(ProjectileSpawned.class, this, this::onProjectileSpawned); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("aoe")) @@ -204,6 +201,7 @@ public class AoeWarningPlugin extends Plugin updateConfig(); } + @Subscribe private void onProjectileSpawned(ProjectileSpawned event) { final Projectile projectile = event.getProjectile(); @@ -232,6 +230,7 @@ public class AoeWarningPlugin extends Plugin } } + @Subscribe private void onProjectileMoved(ProjectileMoved event) { if (projectiles.isEmpty()) @@ -250,6 +249,7 @@ public class AoeWarningPlugin extends Plugin }); } + @Subscribe private void onGameObjectSpawned(GameObjectSpawned event) { final GameObject gameObject = event.getGameObject(); @@ -284,6 +284,7 @@ public class AoeWarningPlugin extends Plugin } } + @Subscribe private void onGameObjectDespawned(GameObjectDespawned event) { final GameObject gameObject = event.getGameObject(); @@ -305,6 +306,7 @@ public class AoeWarningPlugin extends Plugin } } + @Subscribe private void onGameStateChanged(GameStateChanged event) { if (event.getGameState() == GameState.LOGGED_IN) @@ -314,6 +316,7 @@ public class AoeWarningPlugin extends Plugin reset(); } + @Subscribe private void onGameTick(GameTick event) { lightningTrail.clear(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/attackstyles/AttackStylesPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/attackstyles/AttackStylesPlugin.java index e9797c5657..2e70cda3e8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/attackstyles/AttackStylesPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/attackstyles/AttackStylesPlugin.java @@ -30,17 +30,16 @@ import com.google.common.collect.Table; import com.google.inject.Provides; import java.util.HashSet; import java.util.Set; +import javax.annotation.Nullable; import javax.inject.Inject; import javax.inject.Singleton; import lombok.AccessLevel; import lombok.Getter; -import javax.annotation.Nullable; import net.runelite.api.Client; import net.runelite.api.GameState; import net.runelite.api.Skill; import net.runelite.api.VarPlayer; import net.runelite.api.Varbits; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.VarbitChanged; import net.runelite.api.events.WidgetHiddenChanged; @@ -51,7 +50,8 @@ import net.runelite.api.widgets.WidgetInfo; import static net.runelite.api.widgets.WidgetInfo.TO_GROUP; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import static net.runelite.client.plugins.attackstyles.AttackStyle.CASTING; @@ -70,8 +70,11 @@ public class AttackStylesPlugin extends Plugin private int attackStyleVarbit = -1; private int equippedWeaponTypeVarbit = -1; private int castingModeVarbit = -1; + @Getter(AccessLevel.PACKAGE) + @Nullable private AttackStyle attackStyle; private final Set warnedSkills = new HashSet<>(); + @Getter(AccessLevel.PACKAGE) private boolean warnedSkillSelected = false; private final Table widgetsToHide = HashBasedTable.create(); @@ -90,9 +93,6 @@ public class AttackStylesPlugin extends Plugin @Inject private AttackStylesOverlay overlay; - @Inject - private EventBus eventBus; - @Provides AttackStylesConfig provideConfig(ConfigManager configManager) { @@ -108,13 +108,13 @@ public class AttackStylesPlugin extends Plugin private boolean warnForRanged; private boolean warnForMagic; private boolean hideAutoRetaliate; - private boolean removeWarnedStyles; + @VisibleForTesting + boolean removeWarnedStyles; @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); overlayManager.add(overlay); @@ -142,35 +142,15 @@ public class AttackStylesPlugin extends Plugin @Override protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(overlay); hideWarnedStyles(false); processWidgets(); hideWidget(client.getWidget(WidgetInfo.COMBAT_AUTO_RETALIATE), false); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(WidgetHiddenChanged.class, this, this::onWidgetHiddenChanged); - eventBus.subscribe(WidgetLoaded.class, this, this::onWidgetLoaded); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(VarbitChanged.class, this, this::onVarbitChanged); - } - - @Nullable - public AttackStyle getAttackStyle() - { - return attackStyle; - } - - boolean isWarnedSkillSelected() - { - return warnedSkillSelected; - } - - private void onWidgetHiddenChanged(WidgetHiddenChanged event) + @Subscribe + @VisibleForTesting + void onWidgetHiddenChanged(WidgetHiddenChanged event) { if (event.getWidget().isSelfHidden() || TO_GROUP(event.getWidget().getId()) != COMBAT_GROUP_ID) { @@ -180,6 +160,7 @@ public class AttackStylesPlugin extends Plugin processWidgets(); } + @Subscribe private void onWidgetLoaded(WidgetLoaded event) { if (event.getGroupId() != COMBAT_GROUP_ID) @@ -207,6 +188,7 @@ public class AttackStylesPlugin extends Plugin hideWidget(client.getWidget(WidgetInfo.COMBAT_AUTO_RETALIATE), this.hideAutoRetaliate); } + @Subscribe private void onGameStateChanged(GameStateChanged event) { if (event.getGameState() == GameState.LOGGED_IN) @@ -215,6 +197,8 @@ public class AttackStylesPlugin extends Plugin } } + @Subscribe + @VisibleForTesting void onVarbitChanged(VarbitChanged event) { int currentAttackStyleVarbit = client.getVar(VarPlayer.ATTACK_STYLE); @@ -240,6 +224,8 @@ public class AttackStylesPlugin extends Plugin } } + @Subscribe + @VisibleForTesting void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("attackIndicator")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankPlugin.java index e7547e9c34..ff6d0e4408 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankPlugin.java @@ -66,7 +66,7 @@ import net.runelite.api.widgets.WidgetID; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; @@ -95,16 +95,16 @@ public class BankPlugin extends Plugin ); private static final List BANK_PINS = ImmutableList.of( - WidgetInfo.BANK_PIN_1, - WidgetInfo.BANK_PIN_2, - WidgetInfo.BANK_PIN_3, - WidgetInfo.BANK_PIN_4, - WidgetInfo.BANK_PIN_5, - WidgetInfo.BANK_PIN_6, - WidgetInfo.BANK_PIN_7, - WidgetInfo.BANK_PIN_8, - WidgetInfo.BANK_PIN_9, - WidgetInfo.BANK_PIN_10 + WidgetInfo.BANK_PIN_1, + WidgetInfo.BANK_PIN_2, + WidgetInfo.BANK_PIN_3, + WidgetInfo.BANK_PIN_4, + WidgetInfo.BANK_PIN_5, + WidgetInfo.BANK_PIN_6, + WidgetInfo.BANK_PIN_7, + WidgetInfo.BANK_PIN_8, + WidgetInfo.BANK_PIN_9, + WidgetInfo.BANK_PIN_10 ); private static final String DEPOSIT_WORN = "Deposit worn items"; @@ -133,9 +133,6 @@ public class BankPlugin extends Plugin @Inject private BankSearch bankSearch; - @Inject - private EventBus eventBus; - @Inject private ContainerCalculation bankCalculation; @@ -163,33 +160,21 @@ public class BankPlugin extends Plugin private boolean rightClickBankLoot; @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); + searchString = ""; } @Override protected void shutDown() { - eventBus.unregister(this); clientThread.invokeLater(() -> bankSearch.reset(false)); forceRightClickFlag = false; itemQuantities = null; } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(MenuShouldLeftClick.class, this, this::onMenuShouldLeftClick); - eventBus.subscribe(MenuEntryAdded.class, this, this::onMenuEntryAdded); - eventBus.subscribe(ScriptCallbackEvent.class, this, this::onScriptCallbackEvent); - eventBus.subscribe(WidgetLoaded.class, this, this::onWidgetLoaded); - eventBus.subscribe(ItemContainerChanged.class, this, this::onItemContainerChanged); - eventBus.subscribe(VarClientStrChanged.class, this, this::onVarClientStrChanged); - searchString = ""; - } - + @Subscribe private void onMenuShouldLeftClick(MenuShouldLeftClick event) { if (!forceRightClickFlag) @@ -211,6 +196,7 @@ public class BankPlugin extends Plugin } } + @Subscribe private void onMenuEntryAdded(MenuEntryAdded event) { if ((event.getOption().equals(DEPOSIT_WORN) && this.rightClickBankEquip) @@ -221,6 +207,7 @@ public class BankPlugin extends Plugin } } + @Subscribe private void onScriptCallbackEvent(ScriptCallbackEvent event) { if (event.getEventName().equals("bankPinButtons") && this.largePinNumbers) @@ -265,6 +252,7 @@ public class BankPlugin extends Plugin } } + @Subscribe private void onWidgetLoaded(WidgetLoaded event) { if (event.getGroupId() != WidgetID.SEED_VAULT_GROUP_ID || !config.seedVaultValue()) @@ -275,6 +263,7 @@ public class BankPlugin extends Plugin updateSeedVaultTotal(); } + @Subscribe public void onVarClientStrChanged(VarClientStrChanged event) { String searchVar = client.getVar(VarClientStr.INPUT_TEXT); @@ -302,6 +291,7 @@ public class BankPlugin extends Plugin } } + @Subscribe public void onItemContainerChanged(ItemContainerChanged event) { int containerId = event.getContainerId(); @@ -427,6 +417,7 @@ public class BankPlugin extends Plugin return itemContainer.getItems(); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("bank")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/bank/ContainerCalculation.java b/runelite-client/src/main/java/net/runelite/client/plugins/bank/ContainerCalculation.java index 5fc2a423b5..d2543a7adc 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/bank/ContainerCalculation.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/bank/ContainerCalculation.java @@ -57,8 +57,8 @@ class ContainerCalculation return null; } - final int newHash = hashItems(items); - + final int newHash = hashItems(items); + if (containerPrices != null && hash == newHash) { return containerPrices; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/BankTagsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/BankTagsPlugin.java index 096c248cba..7018939a22 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/BankTagsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/BankTagsPlugin.java @@ -52,7 +52,6 @@ import net.runelite.api.ItemID; import net.runelite.api.MenuOpcode; import net.runelite.api.VarClientInt; import net.runelite.api.VarClientStr; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.DraggingWidgetChanged; import net.runelite.api.events.FocusChanged; import net.runelite.api.events.GameTick; @@ -68,7 +67,8 @@ import net.runelite.api.widgets.WidgetID; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.game.SpriteManager; import net.runelite.client.game.chatbox.ChatboxPanelManager; @@ -97,9 +97,9 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener, KeyLis { public static final String CONFIG_GROUP = "banktags"; public static final String TAG_SEARCH = "tag:"; - private static final String EDIT_TAGS_MENU_OPTION = "Edit-tags"; public static final String ICON_SEARCH = "icon_"; public static final String VAR_TAG_SUFFIX = "*"; + private static final String EDIT_TAGS_MENU_OPTION = "Edit-tags"; private static final String NUMBER_REGEX = "[0-9]+(\\.[0-9]+)?[kmb]?"; private static final String SEARCH_BANK_INPUT_TEXT = @@ -112,6 +112,8 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener, KeyLis " *(((?[<>=]|>=|<=) *(?" + NUMBER_REGEX + "))|" + "((?" + NUMBER_REGEX + ") *- *(?" + NUMBER_REGEX + ")))$", Pattern.CASE_INSENSITIVE); + @VisibleForTesting + final Multiset itemQuantities = HashMultiset.create(); @Inject private ItemManager itemManager; @@ -146,16 +148,11 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener, KeyLis @Inject private SpriteManager spriteManager; - @Inject - private EventBus eventBus; - @Inject private ConfigManager configManager; private boolean shiftPressed = false; private int nextRowIndex = 0; - @VisibleForTesting - Multiset itemQuantities = HashMultiset.create(); @Provides BankTagsConfig getConfig(ConfigManager configManager) @@ -166,7 +163,6 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener, KeyLis @Override public void startUp() { - addSubscriptions(); cleanConfig(); keyManager.registerKeyListener(this); @@ -175,6 +171,18 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener, KeyLis spriteManager.addSpriteOverrides(TabSprites.values()); } + @Override + public void shutDown() + { + keyManager.unregisterKeyListener(this); + mouseManager.unregisterMouseWheelListener(this); + clientThread.invokeLater(tabInterface::destroy); + spriteManager.removeSpriteOverrides(TabSprites.values()); + + shiftPressed = false; + itemQuantities.clear(); + } + @Deprecated private void cleanConfig() { @@ -228,33 +236,6 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener, KeyLis } } - @Override - public void shutDown() - { - eventBus.unregister(this); - - keyManager.unregisterKeyListener(this); - mouseManager.unregisterMouseWheelListener(this); - clientThread.invokeLater(tabInterface::destroy); - spriteManager.removeSpriteOverrides(TabSprites.values()); - - shiftPressed = false; - itemQuantities.clear(); - } - - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(ScriptCallbackEvent.class, this, this::onScriptCallbackEvent); - eventBus.subscribe(MenuEntryAdded.class, this, this::onMenuEntryAdded); - eventBus.subscribe(MenuOptionClicked.class, this, this::onMenuOptionClicked); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(DraggingWidgetChanged.class, this, this::onDraggingWidgetChanged); - eventBus.subscribe(WidgetLoaded.class, this, this::onWidgetLoaded); - eventBus.subscribe(FocusChanged.class, this, this::onFocusChanged); - eventBus.subscribe(ItemContainerChanged.class, this, this::onItemContainerChanged); - } - private boolean isSearching() { return client.getVar(VarClientInt.INPUT_TYPE) == InputType.SEARCH.getType() @@ -262,6 +243,7 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener, KeyLis && client.getVar(VarClientStr.INPUT_TEXT) != null && client.getVar(VarClientStr.INPUT_TEXT).length() > 0); } + @Subscribe private void onScriptCallbackEvent(ScriptCallbackEvent event) { String eventName = event.getEventName(); @@ -371,6 +353,7 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener, KeyLis } } + @Subscribe private void onMenuEntryAdded(MenuEntryAdded event) { if (event.getParam1() == WidgetInfo.BANK_ITEM_CONTAINER.getId() @@ -401,6 +384,7 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener, KeyLis tabInterface.handleAdd(event); } + @Subscribe private void onMenuOptionClicked(MenuOptionClicked event) { if (event.getParam1() == WidgetInfo.BANK_ITEM_CONTAINER.getId() @@ -476,6 +460,7 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener, KeyLis } } + @Subscribe private void onItemContainerChanged(ItemContainerChanged event) { if (event.getContainerId() == InventoryID.BANK.getId()) @@ -491,6 +476,7 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener, KeyLis } } + @Subscribe private void onConfigChanged(ConfigChanged configChanged) { if (configChanged.getGroup().equals("banktags") && configChanged.getKey().equals("useTabs")) @@ -506,16 +492,19 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener, KeyLis } } + @Subscribe private void onGameTick(GameTick event) { tabInterface.update(); } + @Subscribe private void onDraggingWidgetChanged(DraggingWidgetChanged event) { tabInterface.handleDrag(event.isDraggingWidget(), shiftPressed); } + @Subscribe private void onWidgetLoaded(WidgetLoaded event) { if (event.getGroupId() == WidgetID.BANK_GROUP_ID) @@ -524,6 +513,7 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener, KeyLis } } + @Subscribe private void onFocusChanged(FocusChanged event) { if (!event.isFocused()) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/TagManager.java b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/TagManager.java index 16bf1ce927..5f8f299c1a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/TagManager.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/TagManager.java @@ -33,6 +33,7 @@ import java.util.stream.Collectors; import javax.inject.Inject; import javax.inject.Singleton; import net.runelite.api.ItemID; +import net.runelite.api.util.Text; import net.runelite.client.config.ConfigManager; import net.runelite.client.game.ItemManager; import net.runelite.client.game.ItemVariationMapping; @@ -45,7 +46,6 @@ import net.runelite.client.plugins.cluescrolls.clues.FairyRingClue; import net.runelite.client.plugins.cluescrolls.clues.HotColdClue; import net.runelite.client.plugins.cluescrolls.clues.MapClue; import net.runelite.client.plugins.cluescrolls.clues.item.ItemRequirement; -import net.runelite.api.util.Text; @Singleton public class TagManager diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java index ea42cb3779..ed5638729b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java @@ -131,7 +131,7 @@ public class TabInterface private final Rectangle bounds = new Rectangle(); private final Rectangle canvasBounds = new Rectangle(); - private ChatboxItemSearch searchProvider; + private final ChatboxItemSearch searchProvider; private TagTab activeTab; private int maxTabs; private int currentTabIndex; @@ -302,7 +302,7 @@ public class TabInterface final Iterator dataIter = Text.fromCSV(dataString).iterator(); String name = dataIter.next(); - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); for (char c : name.toCharArray()) { if (FILTERED_CHARS.test(c)) @@ -324,7 +324,7 @@ public class TabInterface while (dataIter.hasNext()) { - final int itemId = Integer.valueOf(dataIter.next()); + final int itemId = Integer.parseInt(dataIter.next()); tagManager.addTag(itemId, name, itemId < 0); } @@ -600,10 +600,10 @@ public class TabInterface } if ((event.getIdentifier() == WidgetInfo.BANK_ITEM_CONTAINER.getId() - || event.getIdentifier() == WidgetInfo.BANK_INVENTORY_ITEMS_CONTAINER.getId()) + || event.getIdentifier() == WidgetInfo.BANK_INVENTORY_ITEMS_CONTAINER.getId()) && event.getMenuOpcode() == MenuOpcode.EXAMINE_ITEM_BANK_EQ && (event.getOption().equalsIgnoreCase("withdraw-x") - || event.getOption().equalsIgnoreCase("deposit-x"))) + || event.getOption().equalsIgnoreCase("deposit-x"))) { waitSearchTick = true; rememberedSearch = client.getVar(VarClientStr.INPUT_TEXT); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabManager.java b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabManager.java index cbe90f19e4..12466c6c32 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabManager.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabManager.java @@ -33,12 +33,13 @@ import java.util.Optional; import java.util.stream.Collectors; import javax.inject.Inject; import javax.inject.Singleton; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.ItemID; +import net.runelite.api.util.Text; import net.runelite.client.config.ConfigManager; import static net.runelite.client.plugins.banktags.BankTagsPlugin.CONFIG_GROUP; import static net.runelite.client.plugins.banktags.BankTagsPlugin.ICON_SEARCH; -import net.runelite.api.util.Text; import org.apache.commons.lang3.math.NumberUtils; @Singleton @@ -46,7 +47,7 @@ class TabManager { private static final String TAG_TABS_CONFIG = "tagtabs"; - @Getter + @Getter(AccessLevel.PACKAGE) private final List tabs = new ArrayList<>(); private final ConfigManager configManager; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabSprites.java b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabSprites.java index 20f9d0dfb6..7961380b1a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabSprites.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabSprites.java @@ -25,6 +25,7 @@ */ package net.runelite.client.plugins.banktags.tabs; +import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; import net.runelite.client.game.SpriteOverride; @@ -39,9 +40,9 @@ public enum TabSprites implements SpriteOverride DOWN_ARROW(-204, "down-arrow.png"), NEW_TAB(-205, "new-tab.png"); - @Getter + @Getter(AccessLevel.PUBLIC) private final int spriteId; - @Getter + @Getter(AccessLevel.PUBLIC) private final String fileName; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/banlist/BanListPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/banlist/BanListPlugin.java index e843a87b01..15f44c09ca 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/banlist/BanListPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/banlist/BanListPlugin.java @@ -51,7 +51,7 @@ import net.runelite.client.chat.ChatMessageBuilder; import net.runelite.client.chat.ChatMessageManager; import net.runelite.client.chat.QueuedMessage; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -92,9 +92,6 @@ public class BanListPlugin extends Plugin @Inject private ChatMessageManager chatMessageManager; - @Inject - private EventBus eventBus; - private String tobNames = ""; private boolean enableWDRScam; private boolean enableWDRToxic; @@ -109,10 +106,9 @@ public class BanListPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); manualBans.addAll(Text.fromCSV(Text.standardize(config.getBannedPlayers()))); @@ -120,25 +116,16 @@ public class BanListPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); wdrScamSet.clear(); wdrToxicSet.clear(); runeWatchSet.clear(); manualBans.clear(); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(WidgetHiddenChanged.class, this, this::onWidgetHiddenChanged); - eventBus.subscribe(ClanMemberJoined.class, this, this::onClanMemberJoined); - eventBus.subscribe(WidgetLoaded.class, this, this::onWidgetLoaded); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - } - + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("banlist") && event.getKey().equals("bannedPlayers")) @@ -163,6 +150,7 @@ public class BanListPlugin extends Plugin /** * Event to keep making sure player names are highlighted red in clan chat, since the red name goes away frequently */ + @Subscribe private void onWidgetHiddenChanged(WidgetHiddenChanged widgetHiddenChanged) { if (client.getGameState() != GameState.LOGGED_IN @@ -183,6 +171,7 @@ public class BanListPlugin extends Plugin }); } + @Subscribe private void onClanMemberJoined(ClanMemberJoined event) { ClanMember member = event.getMember(); @@ -213,6 +202,7 @@ public class BanListPlugin extends Plugin /** * If a trade window is opened and the person trading us is on the list, modify "trading with" */ + @Subscribe private void onWidgetLoaded(WidgetLoaded widgetLoaded) { if (this.highlightInTrade && widgetLoaded.getGroupId() == PLAYER_TRADE_SCREEN_GROUP_ID) @@ -234,6 +224,7 @@ public class BanListPlugin extends Plugin } } + @Subscribe private void onGameTick(GameTick event) { final Widget raidingParty = client.getWidget(WidgetInfo.THEATRE_OF_BLOOD_RAIDING_PARTY); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/AboveSceneOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/AboveSceneOverlay.java index 34313e61ac..6c091bd9c1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/AboveSceneOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/AboveSceneOverlay.java @@ -27,6 +27,13 @@ package net.runelite.client.plugins.barbarianassault; import com.google.common.collect.ImmutableMap; +import java.awt.BasicStroke; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Graphics2D; +import java.awt.Stroke; +import java.util.Map; +import javax.inject.Inject; import javax.inject.Singleton; import net.runelite.api.Client; import net.runelite.api.Perspective; @@ -39,14 +46,6 @@ import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.OverlayUtil; -import javax.inject.Inject; -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Graphics2D; -import java.awt.Stroke; -import java.awt.BasicStroke; -import java.util.Map; - @Singleton class AboveSceneOverlay extends Overlay { @@ -56,10 +55,10 @@ class AboveSceneOverlay extends Overlay private static final int EGG_DIAMETER = Perspective.LOCAL_HALF_TILE_SIZE / 4; private static final Color HEALTH_BAR_COLOR = new Color(225, 35, 0, 125); private static final ImmutableMap TEAMMATES = ImmutableMap.of( - WidgetInfo.BA_HEAL_TEAMMATE1, new Point(28, 2), - WidgetInfo.BA_HEAL_TEAMMATE2, new Point(26, 2), - WidgetInfo.BA_HEAL_TEAMMATE3, new Point(26, 2), - WidgetInfo.BA_HEAL_TEAMMATE4, new Point(25, 2)); + WidgetInfo.BA_HEAL_TEAMMATE1, new Point(28, 2), + WidgetInfo.BA_HEAL_TEAMMATE2, new Point(26, 2), + WidgetInfo.BA_HEAL_TEAMMATE3, new Point(26, 2), + WidgetInfo.BA_HEAL_TEAMMATE4, new Point(25, 2)); private final Client client; private final BarbarianAssaultPlugin game; @@ -124,9 +123,9 @@ class AboveSceneOverlay extends Overlay graphics.setColor(HEALTH_BAR_COLOR); graphics.fillRect((widget.getCanvasLocation().getX() - teammate.getValue().getX()), - (widget.getCanvasLocation().getY() - teammate.getValue().getY()), - getBarWidth(Integer.parseInt(teammateHealth[1]), Integer.parseInt(teammateHealth[0])), - HEALTH_BAR_HEIGHT); + (widget.getCanvasLocation().getY() - teammate.getValue().getY()), + getBarWidth(Integer.parseInt(teammateHealth[1]), Integer.parseInt(teammateHealth[0])), + HEALTH_BAR_HEIGHT); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/AboveWidgetsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/AboveWidgetsOverlay.java index 5019de1647..0d97291329 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/AboveWidgetsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/AboveWidgetsOverlay.java @@ -31,7 +31,6 @@ import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.image.BufferedImage; import javax.inject.Inject; - import javax.inject.Singleton; import net.runelite.api.Client; import net.runelite.api.Point; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/BarbarianAssaultConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/BarbarianAssaultConfig.java index 29e8b94f97..dfe2930e08 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/BarbarianAssaultConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/BarbarianAssaultConfig.java @@ -45,6 +45,7 @@ public interface BarbarianAssaultConfig extends Config { return true; } + @ConfigItem( keyName = "showTimer", name = "Show call change timer", @@ -223,7 +224,7 @@ public interface BarbarianAssaultConfig extends Config /*///************///*/ /*/// Defender ///*/ /*///************///*/ - + @ConfigSection( name = "Defender", description = "", @@ -301,7 +302,7 @@ public interface BarbarianAssaultConfig extends Config /*///**********///*/ /*/// Healer ///*/ /*///**********///*/ - + @ConfigSection( name = "Healer", description = "", diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/BarbarianAssaultMenu.java b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/BarbarianAssaultMenu.java index 01ea64478f..341ada9685 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/BarbarianAssaultMenu.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/BarbarianAssaultMenu.java @@ -26,18 +26,17 @@ package net.runelite.client.plugins.barbarianassault; import com.google.common.collect.Sets; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; import java.util.List; +import javax.inject.Inject; import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; import net.runelite.client.menus.AbstractComparableEntry; import net.runelite.client.menus.MenuManager; -import javax.inject.Inject; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.Iterator; - class BarbarianAssaultMenu { private final MenuManager menuManager; @@ -76,7 +75,7 @@ class BarbarianAssaultMenu void clearHiddenMenus() { // Clears menus from MenuManager and tracker - for (Iterator iterator = tracker.iterator(); iterator.hasNext();) + for (Iterator iterator = tracker.iterator(); iterator.hasNext(); ) { menuManager.removeHiddenEntry(iterator.next()); iterator.remove(); @@ -119,7 +118,7 @@ class BarbarianAssaultMenu case BLOCK_PENANCE_CAVE: return ((role != Role.DEFENDER && role != null) && game.isRemoveUnusedMenus()) - || (role == Role.DEFENDER && game.isRemovePenanceCave()); + || (role == Role.DEFENDER && game.isRemovePenanceCave()); case DUNK_LAVA_CRATER: case FIX: diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/BarbarianAssaultPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/BarbarianAssaultPlugin.java index e152297c2c..0db9e27d9b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/BarbarianAssaultPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/BarbarianAssaultPlugin.java @@ -82,7 +82,7 @@ import net.runelite.client.chat.ChatMessageBuilder; import net.runelite.client.chat.ChatMessageManager; import net.runelite.client.chat.QueuedMessage; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.input.KeyListener; @@ -122,6 +122,24 @@ public class BarbarianAssaultPlugin extends Plugin implements KeyListener private static final ImmutableList attackStyles = ImmutableList.of(WidgetInfo.COMBAT_STYLE_ONE, WidgetInfo.COMBAT_STYLE_TWO, WidgetInfo.COMBAT_STYLE_THREE, WidgetInfo.COMBAT_STYLE_FOUR); + @Getter(AccessLevel.PACKAGE) + private final Map redEggs = new HashMap<>(); + + @Getter(AccessLevel.PACKAGE) + private final Map greenEggs = new HashMap<>(); + + @Getter(AccessLevel.PACKAGE) + private final Map blueEggs = new HashMap<>(); + + @Getter(AccessLevel.PACKAGE) + private final Map yellowEggs = new HashMap<>(); + + @Getter(AccessLevel.PACKAGE) + private final Map healers = new HashMap<>(); + + private final List deathTimes = new ArrayList<>(); + private final Map projectiles = new HashMap<>(); + @Inject private Client client; @@ -155,102 +173,50 @@ public class BarbarianAssaultPlugin extends Plugin implements KeyListener @Inject private KeyManager keyManager; - @Inject - private EventBus eventBus; - - @Getter + @Getter(AccessLevel.PACKAGE) private boolean inGame = false; - - @Getter + @Getter(AccessLevel.PACKAGE) private Wave wave = null; - - @Getter + @Getter(AccessLevel.PACKAGE) private Role role = null; - - @Getter + @Getter(AccessLevel.PACKAGE) private Scorecard scorecard = null; - - @Getter + @Getter(AccessLevel.PACKAGE) private Timer gameTimer = null; - - @Getter + @Getter(AccessLevel.PACKAGE) private Timer callTimer = null; - - @Getter + @Getter(AccessLevel.PACKAGE) private int stage = -1; - - @Getter + @Getter(AccessLevel.PACKAGE) private BufferedImage clockImage; - - @Getter + @Getter(AccessLevel.PACKAGE) private Font font = null; - @Getter - private final Map redEggs = new HashMap<>(); - - @Getter - private final Map greenEggs = new HashMap<>(); - - @Getter - private final Map blueEggs = new HashMap<>(); - - @Getter - private final Map yellowEggs = new HashMap<>(); - - @Getter - private final Map healers = new HashMap<>(); - - @Getter - private String lastCallText = null; - - @Getter - private String lastListenText = null; - // private String lastClickedTell = null; - + @Getter(AccessLevel.PACKAGE) + private String lastCallText = null; + @Getter(AccessLevel.PACKAGE) + private String lastListenText = null; private int lastCallColor = -1; - private int lastInteracted = -1; - private int lastHealerPoisoned = -1; - - private int tickNum = 0; - // private int gameTick = -1; - + private int lastHealerPoisoned = -1; + private int tickNum = 0; private int inGameBit = 0; - private boolean syncd = true; - private boolean tickReset = false; - private boolean hornCalled = false; - private boolean hornListened = false; - - @Getter + @Getter(AccessLevel.PACKAGE) private boolean usingGloryHorn = false; - private boolean shiftDown = false; - private boolean controlDown = false; - private BufferedImage torsoImage, fighterImage, healerImage, rangerImage, runnerImage; - - private final List deathTimes = new ArrayList<>(); - - private final Map projectiles = new HashMap<>(); - private TimerBox tickCounter; private String poisonUsed = null; - @Provides - BarbarianAssaultConfig provideConfig(ConfigManager configManager) - { - return configManager.getConfig(BarbarianAssaultConfig.class); - } - // save config values @Getter(AccessLevel.PACKAGE) private boolean swapLadder; @@ -305,11 +271,16 @@ public class BarbarianAssaultPlugin extends Plugin implements KeyListener @Getter(AccessLevel.PACKAGE) private boolean showEggCountOverlay; + @Provides + BarbarianAssaultConfig provideConfig(ConfigManager configManager) + { + return configManager.getConfig(BarbarianAssaultConfig.class); + } + @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); font = FontManager.getRunescapeFont().deriveFont(Font.BOLD, 24); torsoImage = itemManager.getImage(ItemID.FIGHTER_TORSO); @@ -325,10 +296,8 @@ public class BarbarianAssaultPlugin extends Plugin implements KeyListener } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(widgetsOverlay); overlayManager.remove(sceneOverlay); keyManager.unregisterKeyListener(this); @@ -349,24 +318,6 @@ public class BarbarianAssaultPlugin extends Plugin implements KeyListener menu.clearHiddenMenus(); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(WidgetLoaded.class, this, this::onWidgetLoaded); - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - eventBus.subscribe(ItemSpawned.class, this, this::onItemSpawned); - eventBus.subscribe(ItemDespawned.class, this, this::onItemDespawned); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(NpcSpawned.class, this, this::onNpcSpawned); - eventBus.subscribe(NpcDespawned.class, this, this::onNpcDespawned); - eventBus.subscribe(BeforeRender.class, this, this::onBeforeRender); - eventBus.subscribe(MenuEntryAdded.class, this, this::onMenuEntryAdded); - eventBus.subscribe(MenuOptionClicked.class, this, this::onMenuOptionClicked); - eventBus.subscribe(InteractingChanged.class, this, this::onInteractingChanged); - eventBus.subscribe(ProjectileSpawned.class, this, this::onProjectileSpawned); - eventBus.subscribe(VarbitChanged.class, this, this::onVarbitChanged); - } - @Override public void keyTyped(KeyEvent e) { @@ -400,6 +351,7 @@ public class BarbarianAssaultPlugin extends Plugin implements KeyListener } } + @Subscribe private void onConfigChanged(ConfigChanged configChanged) { //not client thread be careful @@ -422,7 +374,7 @@ public class BarbarianAssaultPlugin extends Plugin implements KeyListener case "swapLadder": case "swapCollectorBag": case "swapDestroyEggs": - if (Boolean.valueOf(configChanged.getNewValue())) + if (Boolean.parseBoolean(configChanged.getNewValue())) { menu.enableSwaps(); } @@ -510,6 +462,7 @@ public class BarbarianAssaultPlugin extends Plugin implements KeyListener this.showEggCountOverlay = config.showEggCountOverlay(); } + @Subscribe private void onWidgetLoaded(WidgetLoaded event) { switch (event.getGroupId()) @@ -580,6 +533,7 @@ public class BarbarianAssaultPlugin extends Plugin implements KeyListener } } + @Subscribe private void onChatMessage(ChatMessage chatMessage) { if (!chatMessage.getType().equals(ChatMessageType.GAMEMESSAGE)) @@ -629,7 +583,7 @@ public class BarbarianAssaultPlugin extends Plugin implements KeyListener { String[] tokens = message.split(" "); - int time = wave == null ? -1 : (int)wave.getWaveTimer().getElapsedTime(); + int time = wave == null ? -1 : (int) wave.getWaveTimer().getElapsedTime(); switch (tokens[4]) { @@ -663,6 +617,7 @@ public class BarbarianAssaultPlugin extends Plugin implements KeyListener } } + @Subscribe private void onItemSpawned(ItemSpawned itemSpawned) { if (!isInGame()) @@ -682,6 +637,7 @@ public class BarbarianAssaultPlugin extends Plugin implements KeyListener } } + @Subscribe private void onItemDespawned(ItemDespawned itemDespawned) { if (!isInGame()) @@ -732,6 +688,7 @@ public class BarbarianAssaultPlugin extends Plugin implements KeyListener } } + @Subscribe private void onGameTick(GameTick event) { // Keep in mind isInGame is delayed by a tick when a wave ends @@ -763,6 +720,7 @@ public class BarbarianAssaultPlugin extends Plugin implements KeyListener } } + @Subscribe private void onNpcSpawned(NpcSpawned event) { if (!isInGame()) @@ -785,6 +743,7 @@ public class BarbarianAssaultPlugin extends Plugin implements KeyListener } } + @Subscribe private void onNpcDespawned(NpcDespawned event) { if (!isInGame()) @@ -800,6 +759,7 @@ public class BarbarianAssaultPlugin extends Plugin implements KeyListener // This was almost certainly a waste of time to get working, because almost nobody // actually uses the horn of glory. At least now there shouldn't be anyone complaining // about the horn of glory breaking anything and everything that should never break. + @Subscribe private void onBeforeRender(BeforeRender event) { if (!isInGame()) @@ -973,6 +933,7 @@ public class BarbarianAssaultPlugin extends Plugin implements KeyListener // onMenuEntryAdded is being used for conditional entry changes that are not // easily achievable using MenuManager, all other changes use MenuManager in // the BarbarianAssaultMenu/Menus classes + @Subscribe private void onMenuEntryAdded(MenuEntryAdded event) { if (!isInGame()) @@ -1163,6 +1124,7 @@ public class BarbarianAssaultPlugin extends Plugin implements KeyListener client.setMenuEntries(menu.toArray(new MenuEntry[0])); } + @Subscribe private void onMenuOptionClicked(MenuOptionClicked event) { if (!isInGame() && getRole() != null) @@ -1195,6 +1157,7 @@ public class BarbarianAssaultPlugin extends Plugin implements KeyListener } // Interacting changed has a slight delay until after the hitsplat is applied + @Subscribe private void onInteractingChanged(InteractingChanged event) { if (!isInGame() || getRole() != Role.HEALER) @@ -1225,11 +1188,12 @@ public class BarbarianAssaultPlugin extends Plugin implements KeyListener } else if (StringUtils.equals(opponent.getName(), "Penance Healer")) { - lastInteracted = ((NPC)opponent).getIndex(); + lastInteracted = ((NPC) opponent).getIndex(); } } + @Subscribe private void onProjectileSpawned(ProjectileSpawned event) { if (!isInGame()) @@ -1246,10 +1210,11 @@ public class BarbarianAssaultPlugin extends Plugin implements KeyListener String name = target.getName(); if ("Penance Fighter".equals(name) || "Penance Ranger".equals(name)) { - projectiles.put(((NPC)target).getIndex(), event.getProjectile()); + projectiles.put(((NPC) target).getIndex(), event.getProjectile()); } } + @Subscribe private void onVarbitChanged(VarbitChanged event) { int newInGameBit = client.getVar(Varbits.IN_GAME_BA); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/Healer.java b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/Healer.java index c6f1e0c2ad..f40657bb3a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/Healer.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/Healer.java @@ -26,32 +26,31 @@ package net.runelite.client.plugins.barbarianassault; import com.google.common.collect.ImmutableList; +import java.time.Duration; +import java.time.Instant; +import java.util.List; import lombok.AccessLevel; import lombok.Data; import lombok.Getter; import net.runelite.api.NPC; -import java.time.Duration; -import java.time.Instant; -import java.util.List; - @Data class Healer { @Getter(AccessLevel.NONE) private static final List> CODES = ImmutableList.of( - // ImmutableList.of(firstCallFood, secondCallFood, lastFoodTime), - ImmutableList.of(new int[]{1, 1}, new int[]{0, 0}, new int[]{0, 0}), - ImmutableList.of(new int[]{1, 1, 2}, new int[]{0, 0, 0}, new int[]{0, 0, 21}), - ImmutableList.of(new int[]{1, 6, 2}, new int[]{0, 0, 0}, new int[]{0, 0, 0}), - ImmutableList.of(new int[]{2, 5, 2, 0}, new int[]{0, 0, 7, 10}, new int[]{0, 0, 0, 0}), - ImmutableList.of(new int[]{2, 5, 2, 3, 0}, new int[]{0, 0, 0, 0, 7}, new int[]{0, 0, 21, 30, 0}), - ImmutableList.of(new int[]{3, 5, 2, 2, 0, 0}, new int[]{0, 0, 0, 2, 9, 10}, new int[]{12, 18, 21, 0, 0, 0}), - ImmutableList.of(new int[]{3, 7, 1, 1, 0, 0, 0}, new int[]{2, 0, 1, 1, 2, 4, 10}, new int[]{0, 21, 0, 0, 30, 45, 0}), - ImmutableList.of(new int[]{1, 9, 1, 1, 0, 0, 0}, new int[]{1, 0, 1, 1, 2, 2, 10}, new int[]{0, 0, 0, 0, 33, 42, 0}), - ImmutableList.of(new int[]{2, 8, 1, 1, 0, 0, 0, 0}, new int[]{1, 0, 1, 1, 2, 1, 1, 10}, new int[]{0, 21, 0, 0, 0, 0, 0, 0, 0}), - ImmutableList.of(new int[]{2, 5, 1, 1, 0, 0, 0}, new int[]{1, 0, 1, 1, 4, 4, 8}, new int[]{21, 33, 0, 33, 30, 45, 0})); + // ImmutableList.of(firstCallFood, secondCallFood, lastFoodTime), + ImmutableList.of(new int[]{1, 1}, new int[]{0, 0}, new int[]{0, 0}), + ImmutableList.of(new int[]{1, 1, 2}, new int[]{0, 0, 0}, new int[]{0, 0, 21}), + ImmutableList.of(new int[]{1, 6, 2}, new int[]{0, 0, 0}, new int[]{0, 0, 0}), + ImmutableList.of(new int[]{2, 5, 2, 0}, new int[]{0, 0, 7, 10}, new int[]{0, 0, 0, 0}), + ImmutableList.of(new int[]{2, 5, 2, 3, 0}, new int[]{0, 0, 0, 0, 7}, new int[]{0, 0, 21, 30, 0}), + ImmutableList.of(new int[]{3, 5, 2, 2, 0, 0}, new int[]{0, 0, 0, 2, 9, 10}, new int[]{12, 18, 21, 0, 0, 0}), + ImmutableList.of(new int[]{3, 7, 1, 1, 0, 0, 0}, new int[]{2, 0, 1, 1, 2, 4, 10}, new int[]{0, 21, 0, 0, 30, 45, 0}), + ImmutableList.of(new int[]{1, 9, 1, 1, 0, 0, 0}, new int[]{1, 0, 1, 1, 2, 2, 10}, new int[]{0, 0, 0, 0, 33, 42, 0}), + ImmutableList.of(new int[]{2, 8, 1, 1, 0, 0, 0, 0}, new int[]{1, 0, 1, 1, 2, 1, 1, 10}, new int[]{0, 21, 0, 0, 0, 0, 0, 0, 0}), + ImmutableList.of(new int[]{2, 5, 1, 1, 0, 0, 0}, new int[]{1, 0, 1, 1, 4, 4, 8}, new int[]{21, 33, 0, 33, 30, 45, 0})); private final NPC npc; @@ -90,7 +89,7 @@ class Healer else { long time = Duration.between(timeLastPoisoned, Instant.now()).getSeconds(); - return time > 20 ? 0 : (int)(20 - time); + return time > 20 ? 0 : (int) (20 - time); } } } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/Menus.java b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/Menus.java index 1c5651ce00..013c0093cf 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/Menus.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/Menus.java @@ -26,6 +26,7 @@ package net.runelite.client.plugins.barbarianassault; import com.google.common.collect.ImmutableSet; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; import net.runelite.api.MenuOpcode; @@ -86,10 +87,10 @@ public enum Menus MEDIC_HORN(null, newBaseComparableEntry("medic", "r horn", -1, -1, true, false)), USE_HORN(null, newBaseComparableEntry("use", "r horn", -1, -1, true, false)); - @Getter + @Getter(AccessLevel.PACKAGE) private final Role role; - @Getter + @Getter(AccessLevel.PACKAGE) private final BaseComparableEntry entry; private static final ImmutableSet ALL = ImmutableSet.copyOf(Menus.values()); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/Role.java b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/Role.java index 1f1e58e26a..696aa6b502 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/Role.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/Role.java @@ -27,6 +27,7 @@ package net.runelite.client.plugins.barbarianassault; import com.google.common.collect.ImmutableMap; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; import net.runelite.api.Client; @@ -39,90 +40,90 @@ import net.runelite.api.widgets.WidgetInfo; enum Role { ATTACKER(WidgetInfo.BA_ATK_WAVE_TEXT, WidgetInfo.BA_ATK_LISTEN_TOP_TEXT, WidgetInfo.BA_ATK_HORN_LISTEN_TEXT, - WidgetInfo.BA_ATK_CALL_TEXT, WidgetInfo.BA_COLL_HORN_LISTEN_TEXT, WidgetInfo.BA_ATK_ROLE_TEXT, - WidgetInfo.BA_ATK_ROLE_SPRITE), + WidgetInfo.BA_ATK_CALL_TEXT, WidgetInfo.BA_COLL_HORN_LISTEN_TEXT, WidgetInfo.BA_ATK_ROLE_TEXT, + WidgetInfo.BA_ATK_ROLE_SPRITE), DEFENDER(WidgetInfo.BA_DEF_WAVE_TEXT, WidgetInfo.BA_DEF_LISTEN_TEXT, WidgetInfo.BA_DEF_HORN_LISTEN_TEXT, - WidgetInfo.BA_DEF_CALL_TEXT, WidgetInfo.BA_HEAL_HORN_LISTEN_TEXT, WidgetInfo.BA_DEF_ROLE_TEXT, - WidgetInfo.BA_DEF_ROLE_SPRITE), + WidgetInfo.BA_DEF_CALL_TEXT, WidgetInfo.BA_HEAL_HORN_LISTEN_TEXT, WidgetInfo.BA_DEF_ROLE_TEXT, + WidgetInfo.BA_DEF_ROLE_SPRITE), COLLECTOR(WidgetInfo.BA_COLL_WAVE_TEXT, WidgetInfo.BA_COLL_LISTEN_TEXT, WidgetInfo.BA_COLL_HORN_LISTEN_TEXT, - WidgetInfo.BA_COLL_CALL_TEXT, WidgetInfo.BA_ATK_HORN_LISTEN_TEXT, WidgetInfo.BA_COLL_ROLE_TEXT, - WidgetInfo.BA_COLL_ROLE_SPRITE), + WidgetInfo.BA_COLL_CALL_TEXT, WidgetInfo.BA_ATK_HORN_LISTEN_TEXT, WidgetInfo.BA_COLL_ROLE_TEXT, + WidgetInfo.BA_COLL_ROLE_SPRITE), HEALER(WidgetInfo.BA_HEAL_WAVE_TEXT, WidgetInfo.BA_HEAL_LISTEN_TEXT, WidgetInfo.BA_DEF_HORN_LISTEN_TEXT, - WidgetInfo.BA_HEAL_CALL_TEXT, WidgetInfo.BA_DEF_HORN_LISTEN_TEXT, WidgetInfo.BA_HEAL_ROLE_TEXT, - WidgetInfo.BA_HEAL_ROLE_SPRITE); + WidgetInfo.BA_HEAL_CALL_TEXT, WidgetInfo.BA_DEF_HORN_LISTEN_TEXT, WidgetInfo.BA_HEAL_ROLE_TEXT, + WidgetInfo.BA_HEAL_ROLE_SPRITE); - @Getter + @Getter(AccessLevel.PACKAGE) private final WidgetInfo wave; - @Getter + @Getter(AccessLevel.PACKAGE) private final WidgetInfo listen; - @Getter + @Getter(AccessLevel.PACKAGE) private final WidgetInfo gloryListen; - @Getter + @Getter(AccessLevel.PACKAGE) private final WidgetInfo call; - @Getter + @Getter(AccessLevel.PACKAGE) private final WidgetInfo gloryCall; - @Getter + @Getter(AccessLevel.PACKAGE) private final WidgetInfo roleText; - @Getter + @Getter(AccessLevel.PACKAGE) private final WidgetInfo roleSprite; // Duplicate* entries are to catch instances where the horn of glory has // text different than the normal horn private static final ImmutableMap TELLS = ImmutableMap.builder() - .put("Red egg", "Tell-red") - .put("Green egg", "Tell-green") - .put("Blue egg", "Tell-blue") - .put("Controlled/Bullet/Wind", "Tell-controlled") - .put("Accurate/Field/Water", "Tell-accurate") - .put("Aggressive/Blunt/Earth", "Tell-aggressive") - .put("Defensive/Barbed/Fire", "Tell-defensive") - .put("Tofu", "Tell-tofu") - .put("Crackers", "Tell-crackers") - .put("Worms", "Tell-worms") - .put("Poison Worms", "Tell-worms") - .put("Pois. Worms", "Tell-worms") - .put("Poison Tofu", "Tell-tofu") - .put("Pois. Tofu", "Tell-tofu") - .put("Poison Meat", "Tell-meat") - .put("Pois. Meat", "Tell-meat") - .build(); + .put("Red egg", "Tell-red") + .put("Green egg", "Tell-green") + .put("Blue egg", "Tell-blue") + .put("Controlled/Bullet/Wind", "Tell-controlled") + .put("Accurate/Field/Water", "Tell-accurate") + .put("Aggressive/Blunt/Earth", "Tell-aggressive") + .put("Defensive/Barbed/Fire", "Tell-defensive") + .put("Tofu", "Tell-tofu") + .put("Crackers", "Tell-crackers") + .put("Worms", "Tell-worms") + .put("Poison Worms", "Tell-worms") + .put("Pois. Worms", "Tell-worms") + .put("Poison Tofu", "Tell-tofu") + .put("Pois. Tofu", "Tell-tofu") + .put("Poison Meat", "Tell-meat") + .put("Pois. Meat", "Tell-meat") + .build(); private static final ImmutableMap GLORY_CALLS = ImmutableMap.builder() - .put("Controlled/Bullet/Wind", "Controlled/") - .put("Accurate/Field/Water", "Accurate/") - .put("Aggressive/Blunt/Earth", "Aggressive/") - .put("Defensive/Barbed/Fire", "Defensive/") - .put("Tofu", "Tofu") - .put("Crackers", "Crackers") - .put("Worms", "Worms") - .put("Poison worms", "Pois. Worms") - .put("Poison tofu", "Pois. Tofu") - .put("Poison meat", "Pois. Meat") - .put("Red egg", "Red egg") - .put("Green egg", "Green egg") - .put("Blue egg", "Blue egg") - .build(); + .put("Controlled/Bullet/Wind", "Controlled/") + .put("Accurate/Field/Water", "Accurate/") + .put("Aggressive/Blunt/Earth", "Aggressive/") + .put("Defensive/Barbed/Fire", "Defensive/") + .put("Tofu", "Tofu") + .put("Crackers", "Crackers") + .put("Worms", "Worms") + .put("Poison worms", "Pois. Worms") + .put("Poison tofu", "Pois. Tofu") + .put("Poison meat", "Pois. Meat") + .put("Red egg", "Red egg") + .put("Green egg", "Green egg") + .put("Blue egg", "Blue egg") + .build(); private static final ImmutableMap ITEMS = ImmutableMap.builder() - .put("Tofu", ItemID.TOFU) - .put("Crackers", ItemID.CRACKERS) - .put("Worms", ItemID.WORMS) - .put("Pois. Worms", ItemID.POISONED_WORMS) - .put("Pois. Tofu", ItemID.POISONED_TOFU) - .put("Pois. Meat", ItemID.POISONED_MEAT) - .put("Defensive/", ItemID.BARBED_ARROW) - .put("Aggressive/", ItemID.BLUNT_ARROW) - .put("Accurate/", ItemID.FIELD_ARROW) - .put("Controlled/", ItemID.BULLET_ARROW) - .build(); + .put("Tofu", ItemID.TOFU) + .put("Crackers", ItemID.CRACKERS) + .put("Worms", ItemID.WORMS) + .put("Pois. Worms", ItemID.POISONED_WORMS) + .put("Pois. Tofu", ItemID.POISONED_TOFU) + .put("Pois. Meat", ItemID.POISONED_MEAT) + .put("Defensive/", ItemID.BARBED_ARROW) + .put("Aggressive/", ItemID.BLUNT_ARROW) + .put("Accurate/", ItemID.FIELD_ARROW) + .put("Controlled/", ItemID.BULLET_ARROW) + .build(); private static final ImmutableMap SPLIT_LISTENS = ImmutableMap.builder() - .put("Controlled/", "Bullet/Wind") - .put("Bullet/Wind", "Controlled/") - .put("Accurate/", "Field/Water") - .put("Field/Water", "Accurate/") - .put("Aggressive/", "Blunt/Earth") - .put("Blunt/Earth", "Aggressive/") - .put("Defensive/", "Barbed/Fire") - .put("Barbed/Fire", "Defensive/") - .build(); + .put("Controlled/", "Bullet/Wind") + .put("Bullet/Wind", "Controlled/") + .put("Accurate/", "Field/Water") + .put("Field/Water", "Accurate/") + .put("Aggressive/", "Blunt/Earth") + .put("Blunt/Earth", "Aggressive/") + .put("Defensive/", "Barbed/Fire") + .put("Barbed/Fire", "Defensive/") + .build(); int getListenItem(String listen) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/Scorecard.java b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/Scorecard.java index 59fe249b03..8e6c465b71 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/Scorecard.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/Scorecard.java @@ -27,7 +27,6 @@ package net.runelite.client.plugins.barbarianassault; import java.awt.Color; import java.util.ArrayList; - import java.util.List; import lombok.AccessLevel; import lombok.Getter; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/Timer.java b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/Timer.java index c936e82352..8845291326 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/Timer.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/Timer.java @@ -24,13 +24,12 @@ */ package net.runelite.client.plugins.barbarianassault; -import lombok.AccessLevel; -import lombok.Getter; - import java.time.Duration; import java.time.Instant; import java.time.LocalTime; import java.time.format.DateTimeFormatter; +import lombok.AccessLevel; +import lombok.Getter; class Timer { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/TimerBox.java b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/TimerBox.java index 36adc1efcc..1d65a35a31 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/TimerBox.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/TimerBox.java @@ -25,14 +25,13 @@ */ package net.runelite.client.plugins.barbarianassault; +import java.awt.Color; +import java.awt.image.BufferedImage; import lombok.Data; import lombok.EqualsAndHashCode; import net.runelite.client.plugins.Plugin; import net.runelite.client.ui.overlay.infobox.InfoBox; -import java.awt.Color; -import java.awt.image.BufferedImage; - @EqualsAndHashCode(callSuper = true) @Data public class TimerBox extends InfoBox diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/Wave.java b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/Wave.java index 9f90ab7612..39308e6b29 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/Wave.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/Wave.java @@ -27,6 +27,7 @@ package net.runelite.client.plugins.barbarianassault; import com.google.common.collect.ImmutableList; +import java.awt.Color; import lombok.AccessLevel; import lombok.Data; import lombok.Getter; @@ -35,38 +36,36 @@ import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.chat.ChatMessageBuilder; -import java.awt.Color; - @Data public class Wave { @Getter(AccessLevel.NONE) private static final ImmutableList WIDGETS = ImmutableList.of( - WidgetInfo.BA_FAILED_ATTACKER_ATTACKS, - WidgetInfo.BA_RUNNERS_PASSED, - WidgetInfo.BA_EGGS_COLLECTED, - WidgetInfo.BA_HITPOINTS_REPLENISHED, - WidgetInfo.BA_WRONG_POISON_PACKS, - WidgetInfo.BA_HONOUR_POINTS_REWARD + WidgetInfo.BA_FAILED_ATTACKER_ATTACKS, + WidgetInfo.BA_RUNNERS_PASSED, + WidgetInfo.BA_EGGS_COLLECTED, + WidgetInfo.BA_HITPOINTS_REPLENISHED, + WidgetInfo.BA_WRONG_POISON_PACKS, + WidgetInfo.BA_HONOUR_POINTS_REWARD ); @Getter(AccessLevel.NONE) private static final ImmutableList POINTSWIDGETS = ImmutableList.of( - //Base - WidgetInfo.BA_BASE_POINTS, - //Attacker - WidgetInfo.BA_FAILED_ATTACKER_ATTACKS_POINTS, - WidgetInfo.BA_RANGERS_KILLED, - WidgetInfo.BA_FIGHTERS_KILLED, - //Defender - WidgetInfo.BA_RUNNERS_PASSED_POINTS, - WidgetInfo.BA_RUNNERS_KILLED, - //Collector - WidgetInfo.BA_EGGS_COLLECTED_POINTS, - //Healer - WidgetInfo.BA_HEALERS_KILLED, - WidgetInfo.BA_HITPOINTS_REPLENISHED_POINTS, - WidgetInfo.BA_WRONG_POISON_PACKS_POINTS + //Base + WidgetInfo.BA_BASE_POINTS, + //Attacker + WidgetInfo.BA_FAILED_ATTACKER_ATTACKS_POINTS, + WidgetInfo.BA_RANGERS_KILLED, + WidgetInfo.BA_FIGHTERS_KILLED, + //Defender + WidgetInfo.BA_RUNNERS_PASSED_POINTS, + WidgetInfo.BA_RUNNERS_KILLED, + //Collector + WidgetInfo.BA_EGGS_COLLECTED_POINTS, + //Healer + WidgetInfo.BA_HEALERS_KILLED, + WidgetInfo.BA_HITPOINTS_REPLENISHED_POINTS, + WidgetInfo.BA_WRONG_POISON_PACKS_POINTS ); @Getter(AccessLevel.NONE) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsPlugin.java index e4f8e2ddc4..3157167fbf 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsPlugin.java @@ -54,7 +54,7 @@ import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetID; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.SpriteManager; import net.runelite.client.plugins.Plugin; @@ -101,7 +101,7 @@ public class BarrowsPlugin extends Plugin private LoopTimer barrowsPrayerDrainTimer; private boolean wasInCrypt = false; - @Getter + @Getter(AccessLevel.PACKAGE) private Widget puzzleAnswer; @Inject @@ -125,15 +125,6 @@ public class BarrowsPlugin extends Plugin @Inject private BarrowsConfig config; - @Inject - private EventBus eventBus; - - @Provides - BarrowsConfig provideConfig(ConfigManager configManager) - { - return configManager.getConfig(BarrowsConfig.class); - } - @Getter(AccessLevel.PACKAGE) private boolean showMinimap; @Getter(AccessLevel.PACKAGE) @@ -146,11 +137,16 @@ public class BarrowsPlugin extends Plugin private boolean showPuzzleAnswer; private boolean showPrayerDrainTimer; + @Provides + BarrowsConfig provideConfig(ConfigManager configManager) + { + return configManager.getConfig(BarrowsConfig.class); + } + @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); overlayManager.add(barrowsOverlay); overlayManager.add(brotherOverlay); @@ -159,8 +155,6 @@ public class BarrowsPlugin extends Plugin @Override protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(barrowsOverlay); overlayManager.remove(brotherOverlay); walls.clear(); @@ -183,19 +177,7 @@ public class BarrowsPlugin extends Plugin } } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(WallObjectSpawned.class, this, this::onWallObjectSpawned); - eventBus.subscribe(WallObjectChanged.class, this, this::onWallObjectChanged); - eventBus.subscribe(WallObjectDespawned.class, this, this::onWallObjectDespawned); - eventBus.subscribe(GameObjectSpawned.class, this, this::onGameObjectSpawned); - eventBus.subscribe(GameObjectChanged.class, this, this::onGameObjectChanged); - eventBus.subscribe(GameObjectDespawned.class, this, this::onGameObjectDespawned); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(WidgetLoaded.class, this, this::onWidgetLoaded); - } - + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("barrows")) @@ -219,6 +201,7 @@ public class BarrowsPlugin extends Plugin this.showPrayerDrainTimer = config.showPrayerDrainTimer(); } + @Subscribe private void onWallObjectSpawned(WallObjectSpawned event) { WallObject wallObject = event.getWallObject(); @@ -228,6 +211,7 @@ public class BarrowsPlugin extends Plugin } } + @Subscribe private void onWallObjectChanged(WallObjectChanged event) { WallObject previous = event.getPrevious(); @@ -240,12 +224,14 @@ public class BarrowsPlugin extends Plugin } } + @Subscribe private void onWallObjectDespawned(WallObjectDespawned event) { WallObject wallObject = event.getWallObject(); walls.remove(wallObject); } + @Subscribe private void onGameObjectSpawned(GameObjectSpawned event) { GameObject gameObject = event.getGameObject(); @@ -255,6 +241,7 @@ public class BarrowsPlugin extends Plugin } } + @Subscribe private void onGameObjectChanged(GameObjectChanged event) { GameObject previous = event.getPrevious(); @@ -267,12 +254,14 @@ public class BarrowsPlugin extends Plugin } } + @Subscribe private void onGameObjectDespawned(GameObjectDespawned event) { GameObject gameObject = event.getGameObject(); ladders.remove(gameObject); } + @Subscribe private void onGameStateChanged(GameStateChanged event) { if (event.getGameState() == GameState.LOADING) @@ -297,6 +286,7 @@ public class BarrowsPlugin extends Plugin } } + @Subscribe private void onWidgetLoaded(WidgetLoaded event) { if (event.getGroupId() == WidgetID.BARROWS_PUZZLE_GROUP_ID) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/blackjack/BlackjackPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/blackjack/BlackjackPlugin.java index fee3999230..8be40b6da6 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/blackjack/BlackjackPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/blackjack/BlackjackPlugin.java @@ -40,6 +40,7 @@ import net.runelite.api.events.GameTick; import net.runelite.api.util.Text; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.menus.AbstractComparableEntry; import net.runelite.client.menus.MenuManager; @@ -80,12 +81,16 @@ public class BlackjackPlugin extends Plugin @Inject private Client client; + @Inject private BlackjackConfig config; + @Inject private EventBus eventBus; + @Inject private MenuManager menuManager; + private boolean pickpocketOnAggro; private boolean random; private long nextKnockOutTick = 0; @@ -97,26 +102,24 @@ public class BlackjackPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); menuManager.addPriorityEntry(KNOCKOUT_BANDIT); menuManager.addPriorityEntry(KNOCKOUT_MENAPHITE); this.pickpocketOnAggro = config.pickpocketOnAggro(); } @Override - protected void shutDown() throws Exception + protected void shutDown() { menuManager.removePriorityEntry(PICKPOCKET_BANDIT); menuManager.removePriorityEntry(PICKPOCKET_MENAPHITE); menuManager.removePriorityEntry(KNOCKOUT_BANDIT); menuManager.removePriorityEntry(KNOCKOUT_MENAPHITE); - eventBus.unregister(this); eventBus.unregister("poll"); } + @Subscribe private void onGameStateChanged(GameStateChanged event) { if (event.getGameState() != GameState.LOGGED_IN || !ArrayUtils.contains(client.getMapRegions(), POLLNIVNEACH_REGION)) @@ -129,6 +132,7 @@ public class BlackjackPlugin extends Plugin eventBus.subscribe(ChatMessage.class, "poll", this::onChatMessage); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("blackjack")) @@ -183,7 +187,7 @@ public class BlackjackPlugin extends Plugin { return Text.removeTags(entry.getTarget(), true).equalsIgnoreCase(this.getTarget()) && - entry.getOption().equalsIgnoreCase(this.getOption()); + entry.getOption().equalsIgnoreCase(this.getOption()); } } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BarsOres.java b/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BarsOres.java index 52a295afd3..d7b522e8a9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BarsOres.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BarsOres.java @@ -26,6 +26,7 @@ package net.runelite.client.plugins.blastfurnace; import com.google.common.collect.ImmutableMap; import java.util.Map; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.ItemID; import net.runelite.api.Varbits; @@ -64,9 +65,9 @@ public enum BarsOres VARBIT = builder.build(); } - @Getter + @Getter(AccessLevel.PACKAGE) private final Varbits varbit; - @Getter + @Getter(AccessLevel.PACKAGE) private final int itemID; BarsOres(Varbits varbit, int itemID) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnaceCofferOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnaceCofferOverlay.java index b74ab77d30..7714c9f2c0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnaceCofferOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnaceCofferOverlay.java @@ -38,8 +38,8 @@ import static net.runelite.client.ui.overlay.OverlayManager.OPTION_CONFIGURE; import net.runelite.client.ui.overlay.OverlayMenuEntry; import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.components.PanelComponent; -import net.runelite.client.ui.overlay.components.table.TableComponent; import net.runelite.client.ui.overlay.components.table.TableAlignment; +import net.runelite.client.ui.overlay.components.table.TableComponent; import net.runelite.client.util.QuantityFormatter; @Singleton diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnacePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnacePlugin.java index d5ddc80085..25080d2891 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnacePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnacePlugin.java @@ -46,7 +46,7 @@ import net.runelite.api.util.Text; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; @@ -97,19 +97,15 @@ public class BlastFurnacePlugin extends Plugin @Inject private BlastFurnaceConfig config; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) private boolean showConveyorBelt; @Getter(AccessLevel.PACKAGE) private boolean showBarDispenser; @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); overlayManager.add(overlay); overlayManager.add(cofferOverlay); @@ -119,8 +115,6 @@ public class BlastFurnacePlugin extends Plugin @Override protected void shutDown() { - eventBus.unregister(this); - infoBoxManager.removeIf(ForemanTimer.class::isInstance); overlayManager.remove(overlay); overlayManager.remove(cofferOverlay); @@ -130,21 +124,13 @@ public class BlastFurnacePlugin extends Plugin foremanTimer = null; } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameObjectSpawned.class, this, this::onGameObjectSpawned); - eventBus.subscribe(GameObjectDespawned.class, this, this::onGameObjectDespawned); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - } - @Provides BlastFurnaceConfig provideConfig(ConfigManager configManager) { return configManager.getConfig(BlastFurnaceConfig.class); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("blastfurnace")) @@ -153,6 +139,7 @@ public class BlastFurnacePlugin extends Plugin } } + @Subscribe private void onGameObjectSpawned(GameObjectSpawned event) { GameObject gameObject = event.getGameObject(); @@ -169,6 +156,7 @@ public class BlastFurnacePlugin extends Plugin } } + @Subscribe private void onGameObjectDespawned(GameObjectDespawned event) { GameObject gameObject = event.getGameObject(); @@ -185,6 +173,7 @@ public class BlastFurnacePlugin extends Plugin } } + @Subscribe private void onGameStateChanged(GameStateChanged event) { if (event.getGameState() == GameState.LOADING) @@ -194,6 +183,7 @@ public class BlastFurnacePlugin extends Plugin } } + @Subscribe private void onGameTick(GameTick event) { Widget npcDialog = client.getWidget(WidgetInfo.DIALOG_NPC_TEXT); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/blastmine/BlastMinePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/blastmine/BlastMinePlugin.java index c4ec42e2dc..c76bf99bdd 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/blastmine/BlastMinePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/blastmine/BlastMinePlugin.java @@ -42,7 +42,7 @@ import net.runelite.api.events.GameTick; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.overlay.OverlayManager; @@ -73,15 +73,6 @@ public class BlastMinePlugin extends Plugin @Inject private BlastMinePluginConfig config; - @Inject - private EventBus eventBus; - - @Provides - BlastMinePluginConfig getConfig(ConfigManager configManager) - { - return configManager.getConfig(BlastMinePluginConfig.class); - } - @Getter(AccessLevel.PACKAGE) private boolean showOreOverlay; @Getter(AccessLevel.PACKAGE) @@ -95,21 +86,24 @@ public class BlastMinePlugin extends Plugin @Getter(AccessLevel.PACKAGE) private Color warningColor; + @Provides + BlastMinePluginConfig getConfig(ConfigManager configManager) + { + return configManager.getConfig(BlastMinePluginConfig.class); + } + @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); overlayManager.add(blastMineRockOverlay); overlayManager.add(blastMineOreCountOverlay); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(blastMineRockOverlay); overlayManager.remove(blastMineOreCountOverlay); final Widget blastMineWidget = client.getWidget(WidgetInfo.BLAST_MINE); @@ -120,13 +114,7 @@ public class BlastMinePlugin extends Plugin } } - private void addSubscriptions() - { - eventBus.subscribe(GameObjectSpawned.class, this, this::onGameObjectSpawned); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - } - + @Subscribe private void onGameObjectSpawned(GameObjectSpawned event) { final GameObject gameObject = event.getGameObject(); @@ -145,6 +133,7 @@ public class BlastMinePlugin extends Plugin } } + @Subscribe private void onGameStateChanged(GameStateChanged event) { if (event.getGameState() == GameState.LOADING) @@ -153,6 +142,7 @@ public class BlastMinePlugin extends Plugin } } + @Subscribe private void onGameTick(GameTick gameTick) { if (rocks.isEmpty()) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/boosts/BoostsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/boosts/BoostsConfig.java index 77642e72ac..1cd517308a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/boosts/BoostsConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/boosts/BoostsConfig.java @@ -100,7 +100,7 @@ public interface BoostsConfig extends Config { return false; } - + @ConfigItem( keyName = "displayNextBuffChange", name = "Display next buff change", diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/boosts/BoostsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/boosts/BoostsPlugin.java index 845cf954c6..c345eb734c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/boosts/BoostsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/boosts/BoostsPlugin.java @@ -39,13 +39,13 @@ import net.runelite.api.Client; import net.runelite.api.Constants; import net.runelite.api.Prayer; import net.runelite.api.Skill; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.StatChanged; import net.runelite.client.Notifier; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.SkillIconManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -73,6 +73,11 @@ public class BoostsPlugin extends Plugin Skill.COOKING, Skill.CRAFTING, Skill.FIREMAKING, Skill.FLETCHING, Skill.WOODCUTTING, Skill.RUNECRAFT, Skill.SLAYER, Skill.FARMING, Skill.CONSTRUCTION, Skill.HUNTER); + @Getter + private final Set shownSkills = new LinkedHashSet<>(); + private final int[] lastSkillLevels = new int[Skill.values().length - 1]; + private final List boostedSkillsChanged = new ArrayList<>(); + @Inject private Notifier notifier; @@ -88,28 +93,21 @@ public class BoostsPlugin extends Plugin @Inject private BoostsOverlay boostsOverlay; - //made this a LinkedHashSet so the order stays consistent for my OCD - @Getter - private final Set shownSkills = new LinkedHashSet<>(); @Inject private BoostsConfig config; @Inject private SkillIconManager skillIconManager; + @Inject private CombatIconsOverlay combatIconsOverlay; - @Inject - private EventBus eventBus; private boolean isChangedDown = false; private boolean isChangedUp = false; - private final int[] lastSkillLevels = new int[Skill.values().length - 1]; private int lastChangeDown = -1; private int lastChangeUp = -1; private boolean preserveBeenActive = false; private long lastTickMillis; - private final List boostedSkillsChanged = new ArrayList<>(); - private BoostsConfig.DisplayBoosts displayBoosts; @Getter(AccessLevel.PACKAGE) private boolean useRelativeBoost; @@ -132,10 +130,9 @@ public class BoostsPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); overlayManager.add(boostsOverlay); overlayManager.add(combatIconsOverlay); @@ -157,9 +154,8 @@ public class BoostsPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); overlayManager.remove(boostsOverlay); overlayManager.remove(combatIconsOverlay); infoBoxManager.removeIf(t -> t instanceof BoostIndicator || t instanceof StatChangeIndicator); @@ -170,14 +166,7 @@ public class BoostsPlugin extends Plugin isChangedDown = false; } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(StatChanged.class, this, this::onStatChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - } - + @Subscribe private void onGameStateChanged(GameStateChanged event) { switch (event.getGameState()) @@ -190,6 +179,7 @@ public class BoostsPlugin extends Plugin } } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("boosts")) @@ -211,6 +201,7 @@ public class BoostsPlugin extends Plugin } } + @Subscribe private void onStatChanged(StatChanged statChanged) { Skill skill = statChanged.getSkill(); @@ -260,6 +251,7 @@ public class BoostsPlugin extends Plugin } } + @Subscribe private void onGameTick(GameTick event) { lastTickMillis = System.currentTimeMillis(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/boosts/CombatIconsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/boosts/CombatIconsOverlay.java index 446cd5f800..ee15c1e851 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/boosts/CombatIconsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/boosts/CombatIconsOverlay.java @@ -11,6 +11,7 @@ import net.runelite.api.Client; import static net.runelite.api.MenuOpcode.RUNELITE_OVERLAY_CONFIG; import net.runelite.api.Skill; import net.runelite.client.game.SkillIconManager; +import net.runelite.client.ui.FontManager; import net.runelite.client.ui.overlay.Overlay; import static net.runelite.client.ui.overlay.OverlayManager.OPTION_CONFIGURE; import net.runelite.client.ui.overlay.OverlayMenuEntry; @@ -20,7 +21,6 @@ import net.runelite.client.ui.overlay.components.ComponentOrientation; import net.runelite.client.ui.overlay.components.ImageComponent; import net.runelite.client.ui.overlay.components.LineComponent; import net.runelite.client.ui.overlay.components.PanelComponent; -import net.runelite.client.ui.FontManager; import net.runelite.client.util.ColorUtil; import net.runelite.client.util.ImageUtil; @@ -51,12 +51,12 @@ class CombatIconsOverlay extends Overlay { return null; } - + if (plugin.isBoldIconFont()) { graphics.setFont(FontManager.getRunescapeBoldFont()); } - + panelComponent.getChildren().clear(); panelComponent.setPreferredSize(new Dimension(28, 0)); panelComponent.setWrapping(2); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/bosstimer/BossTimersPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/bosstimer/BossTimersPlugin.java index 1fd643cb84..9ba549be66 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/bosstimer/BossTimersPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/bosstimer/BossTimersPlugin.java @@ -30,7 +30,7 @@ import javax.inject.Singleton; import lombok.extern.slf4j.Slf4j; import net.runelite.api.NPC; import net.runelite.api.events.NpcDespawned; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -51,22 +51,13 @@ public class BossTimersPlugin extends Plugin @Inject private ItemManager itemManager; - @Inject - private EventBus eventBus; - @Override - protected void startUp() throws Exception + protected void shutDown() { - eventBus.subscribe(NpcDespawned.class, this, this::onNpcDespawned); - } - - @Override - protected void shutDown() throws Exception - { - eventBus.unregister(this); infoBoxManager.removeIf(t -> t instanceof RespawnTimer); } + @Subscribe private void onNpcDespawned(NpcDespawned npcDespawned) { NPC npc = npcDespawned.getNpc(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/bosstimetracker/BossTimeTracker.java b/runelite-client/src/main/java/net/runelite/client/plugins/bosstimetracker/BossTimeTracker.java index 882f415c9f..ad6afee6cf 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/bosstimetracker/BossTimeTracker.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/bosstimetracker/BossTimeTracker.java @@ -24,20 +24,19 @@ */ package net.runelite.client.plugins.bosstimetracker; -import net.runelite.client.ui.overlay.infobox.InfoBox; - -import java.awt.image.BufferedImage; import java.awt.Color; +import java.awt.image.BufferedImage; import java.time.Duration; import java.time.Instant; import java.time.LocalTime; import java.time.format.DateTimeFormatter; +import net.runelite.client.ui.overlay.infobox.InfoBox; public class BossTimeTracker extends InfoBox { private final Instant startTime; private LocalTime time; - private Instant lastTime; + private final Instant lastTime; public BossTimeTracker(BufferedImage image, BossTimeTrackerPlugin plugin, Instant startTime, Instant lastTime) { @@ -81,10 +80,7 @@ public class BossTimeTracker extends InfoBox @Override public String getTooltip() { - StringBuilder builder = new StringBuilder(); - builder.append("Elapsed time: "); - builder.append(time.format(DateTimeFormatter.ofPattern("HH:mm:ss"))); - - return builder.toString(); + return "Elapsed time: " + + time.format(DateTimeFormatter.ofPattern("HH:mm:ss")); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/bosstimetracker/BossTimeTrackerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/bosstimetracker/BossTimeTrackerPlugin.java index 02979340d1..5308c34802 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/bosstimetracker/BossTimeTrackerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/bosstimetracker/BossTimeTrackerPlugin.java @@ -24,29 +24,28 @@ */ package net.runelite.client.plugins.bosstimetracker; -import lombok.Getter; -import net.runelite.api.ChatMessageType; -import net.runelite.api.Client; -import net.runelite.api.events.ChatMessage; -import net.runelite.api.events.GameStateChanged; -import net.runelite.api.util.Text; -import net.runelite.client.config.ConfigManager; -import net.runelite.client.game.ItemManager; -import net.runelite.client.plugins.Plugin; -import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.plugins.PluginType; -import net.runelite.client.ui.overlay.infobox.InfoBoxManager; -import net.runelite.client.eventbus.EventBus; - -import javax.inject.Inject; import java.time.Duration; import java.time.Instant; import java.util.Arrays; import java.util.regex.Matcher; import java.util.regex.Pattern; - +import javax.inject.Inject; +import lombok.AccessLevel; +import lombok.Getter; +import net.runelite.api.ChatMessageType; +import net.runelite.api.Client; import static net.runelite.api.ItemID.FIRE_CAPE; import static net.runelite.api.ItemID.INFERNAL_CAPE; +import net.runelite.api.events.ChatMessage; +import net.runelite.api.events.GameStateChanged; +import net.runelite.api.util.Text; +import net.runelite.client.config.ConfigManager; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.game.ItemManager; +import net.runelite.client.plugins.Plugin; +import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; +import net.runelite.client.ui.overlay.infobox.InfoBoxManager; @PluginDescriptor( name = "Boss Time Tracker", @@ -78,10 +77,7 @@ public class BossTimeTrackerPlugin extends Plugin @Inject private ConfigManager configManager; - @Inject - private EventBus eventBus; - - @Getter + @Getter(AccessLevel.PACKAGE) private BossTimeTracker timer; private Instant startTime; @@ -89,12 +85,7 @@ public class BossTimeTrackerPlugin extends Plugin private Boolean started = false; private boolean loggingIn; - @Override - public void startUp() - { - addSubscriptions(); - } - + @Subscribe public void onGameStateChanged(GameStateChanged event) { switch (event.getGameState()) @@ -127,6 +118,7 @@ public class BossTimeTrackerPlugin extends Plugin } } + @Subscribe public void onChatMessage(ChatMessage event) { if (event.getType() != ChatMessageType.GAMEMESSAGE && event.getType() != ChatMessageType.SPAM) @@ -242,20 +234,13 @@ public class BossTimeTrackerPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); removeTimer(); resetConfig(); resetVars(); } - private void addSubscriptions() - { - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - } - private void loadConfig() { startTime = configManager.getConfiguration(CONFIG_GROUP, CONFIG_TIME, Instant.class); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/bronzeman/BronzeManOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/bronzeman/BronzeManOverlay.java index 2f10fbe748..3480fe881f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/bronzeman/BronzeManOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/bronzeman/BronzeManOverlay.java @@ -2,15 +2,15 @@ package net.runelite.client.plugins.bronzeman; import java.awt.Dimension; import java.awt.Graphics2D; +import java.awt.image.BufferedImage; +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; +import javax.inject.Inject; import net.runelite.api.Client; import net.runelite.api.GameState; import net.runelite.client.game.ItemManager; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayPosition; -import javax.inject.Inject; -import java.awt.image.BufferedImage; -import java.util.List; -import java.util.concurrent.CopyOnWriteArrayList; /** diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/bronzeman/BronzemanPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/bronzeman/BronzemanPlugin.java index d4cee2e647..2c32a0d697 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/bronzeman/BronzemanPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/bronzeman/BronzemanPlugin.java @@ -1,10 +1,19 @@ package net.runelite.client.plugins.bronzeman; +import java.awt.image.BufferedImage; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.InputStream; import java.io.PrintWriter; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; +import javax.imageio.ImageIO; +import javax.inject.Inject; +import lombok.AccessLevel; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; @@ -19,19 +28,11 @@ import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetID; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.RuneLite; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; -import javax.imageio.ImageIO; -import javax.inject.Inject; -import java.awt.image.BufferedImage; -import java.net.URL; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.List; /** * @author Seth Davis @@ -52,9 +53,6 @@ public class BronzemanPlugin extends Plugin @Inject private Client client; - @Inject - private EventBus eventBus; - @Inject private OverlayManager overlayManager; @@ -63,7 +61,7 @@ public class BronzemanPlugin extends Plugin private List unlockedItems; - @Getter + @Getter(AccessLevel.PACKAGE) private BufferedImage unlockImage = null; /** * Loads GrandExchange widgets for further manipulation of the interface @@ -72,34 +70,24 @@ public class BronzemanPlugin extends Plugin private Widget grandExchangeChatBox; @Override - protected void startUp() throws Exception + protected void startUp() { - addSubscriptions(); loadUnlockImage(); unlockedItems = new ArrayList<>(); overlayManager.add(bronzemanOverlay); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); unlockedItems = null; overlayManager.remove(bronzemanOverlay); } - private void addSubscriptions() - { - eventBus.subscribe(ItemContainerChanged.class, this, this::onItemContainerChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(WidgetLoaded.class, this, this::onWidgetLoaded); - - } - /** * Loads players unlocks on login **/ + @Subscribe public void onGameStateChanged(GameStateChanged e) { if (e.getGameState() == GameState.LOGGED_IN) @@ -111,6 +99,7 @@ public class BronzemanPlugin extends Plugin /** * Unlocks all new items that are currently not unlocked **/ + @Subscribe public void onItemContainerChanged(ItemContainerChanged e) { for (Item i : e.getItemContainer().getItems()) @@ -134,6 +123,7 @@ public class BronzemanPlugin extends Plugin } } + @Subscribe public void onWidgetLoaded(WidgetLoaded e) { switch (e.getGroupId()) @@ -151,6 +141,7 @@ public class BronzemanPlugin extends Plugin /** * Handles greying out items in the GrandExchange **/ + @Subscribe public void onGameTick(GameTick e) { if (grandExchangeWindow == null || grandExchangeChatBox == null || grandExchangeWindow.isHidden()) @@ -188,7 +179,7 @@ public class BronzemanPlugin extends Plugin /** * Queues a new unlock to be properly displayed **/ - public void queueItemUnlock(int itemId) + private void queueItemUnlock(int itemId) { unlockedItems.add(itemId); bronzemanOverlay.addItemUnlock(itemId); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/bronzeman/ItemUnlock.java b/runelite-client/src/main/java/net/runelite/client/plugins/bronzeman/ItemUnlock.java index f061bb5b9c..55f02ef83f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/bronzeman/ItemUnlock.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/bronzeman/ItemUnlock.java @@ -1,5 +1,6 @@ package net.runelite.client.plugins.bronzeman; +import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; @@ -11,14 +12,14 @@ import lombok.Setter; public class ItemUnlock { - @Getter + @Getter(AccessLevel.PACKAGE) private final int itemId; - @Getter + @Getter(AccessLevel.PACKAGE) private long initTime; - @Getter - @Setter + @Getter(AccessLevel.PACKAGE) + @Setter(AccessLevel.PACKAGE) private int locationY; ItemUnlock(int itemId) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/zoom/ZoomConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/camera/CameraConfig.java similarity index 80% rename from runelite-client/src/main/java/net/runelite/client/plugins/zoom/ZoomConfig.java rename to runelite-client/src/main/java/net/runelite/client/plugins/camera/CameraConfig.java index 36ca67e64f..fc6a20c676 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/zoom/ZoomConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/camera/CameraConfig.java @@ -22,7 +22,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package net.runelite.client.plugins.zoom; +package net.runelite.client.plugins.camera; import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; @@ -30,13 +30,13 @@ import net.runelite.client.config.ConfigItem; import net.runelite.client.config.Range; @ConfigGroup("zoom") -public interface ZoomConfig extends Config +public interface CameraConfig extends Config { int OUTER_LIMIT_MIN = -400; int OUTER_LIMIT_MAX = 400; /** * The largest (most zoomed in) value that can be used without the client crashing. - * + *

* Larger values trigger an overflow in the engine's fov to scale code. */ int INNER_ZOOM_LIMIT = 1004; @@ -115,4 +115,36 @@ public interface ZoomConfig extends Config return 25; } + @ConfigItem( + keyName = "rightClickMovesCamera", + name = "Right click moves camera", + description = "Remaps right click to middle mouse click if there are no menu options", + position = 7 + ) + default boolean rightClickMovesCamera() + { + return false; + } + + @ConfigItem( + keyName = "ignoreExamine", + name = "Ignore Examine", + description = "Ignore the Examine menu entry", + position = 8 + ) + default boolean ignoreExamine() + { + return false; + } + + @ConfigItem( + keyName = "middleClickMenu", + name = "Middle-button opens menu", + description = "Middle-mouse button always opens the menu", + position = 9 + ) + default boolean middleClickMenu() + { + return false; + } } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/camera/CameraPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/camera/CameraPlugin.java new file mode 100644 index 0000000000..71a6f5b8bf --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/camera/CameraPlugin.java @@ -0,0 +1,387 @@ +/* + * Copyright (c) 2018 Abex + * Copyright (c) 2018, Adam + * Copyright (c) 2019, Wynadorn + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.client.plugins.camera; + +import com.google.inject.Inject; +import com.google.inject.Provides; +import java.awt.event.KeyEvent; +import java.awt.event.MouseEvent; +import javax.swing.SwingUtilities; +import net.runelite.api.Client; +import net.runelite.api.MenuEntry; +import net.runelite.api.ScriptID; +import net.runelite.api.VarPlayer; +import net.runelite.api.events.ClientTick; +import net.runelite.api.events.FocusChanged; +import net.runelite.api.events.ScriptCallbackEvent; +import net.runelite.client.callback.ClientThread; +import net.runelite.client.config.ConfigManager; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; +import net.runelite.client.input.KeyListener; +import net.runelite.client.input.KeyManager; +import net.runelite.client.input.MouseListener; +import net.runelite.client.input.MouseManager; +import net.runelite.client.plugins.Plugin; +import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.util.MiscUtils; + +@PluginDescriptor( + name = "Camera Zoom", + description = "Expands zoom limit, provides vertical camera, and remaps mouse input keys", + tags = {"zoom", "limit", "vertical", "click", "mouse"}, + enabledByDefault = false +) +public class CameraPlugin extends Plugin implements KeyListener, MouseListener +{ + /** + * The largest (most zoomed in) value that can be used without the client crashing. + *

+ * Larger values trigger an overflow in the engine's fov to scale code. + */ + private static final int INNER_ZOOM_LIMIT = 1004; + private static final int DEFAULT_ZOOM_INCREMENT = 25; + + private boolean controlDown; + // flags used to store the mousedown states + private boolean rightClick; + private boolean middleClick; + /** + * Whether or not the current menu has any non-ignored menu entries + */ + private boolean menuHasEntries; + + @Inject + private Client client; + + @Inject + private ClientThread clientThread; + + @Inject + private CameraConfig cameraConfig; + + @Inject + private KeyManager keyManager; + + @Inject + private MouseManager mouseManager; + + @Provides + CameraConfig getConfig(ConfigManager configManager) + { + return configManager.getConfig(CameraConfig.class); + } + + @Subscribe + private void onScriptCallbackEvent(ScriptCallbackEvent event) + { + if (client.getIndexScripts().isOverlayOutdated()) + { + // if any cache overlay fails to load then assume at least one of the zoom scripts is outdated + // and prevent zoom extending entirely. + return; + } + + int[] intStack = client.getIntStack(); + int intStackSize = client.getIntStackSize(); + + if (!controlDown && "scrollWheelZoom".equals(event.getEventName()) && cameraConfig.controlFunction() == ControlFunction.CONTROL_TO_ZOOM) + { + intStack[intStackSize - 1] = 1; + } + + if ("innerZoomLimit".equals(event.getEventName()) && cameraConfig.innerLimit()) + { + intStack[intStackSize - 1] = INNER_ZOOM_LIMIT; + return; + } + + if ("outerZoomLimit".equals(event.getEventName())) + { + int outerLimit = MiscUtils.clamp(cameraConfig.outerLimit(), CameraConfig.OUTER_LIMIT_MIN, CameraConfig.OUTER_LIMIT_MAX); + int outerZoomLimit = 128 - outerLimit; + intStack[intStackSize - 1] = outerZoomLimit; + return; + } + + if ("scrollWheelZoomIncrement".equals(event.getEventName()) && cameraConfig.zoomIncrement() != DEFAULT_ZOOM_INCREMENT) + { + intStack[intStackSize - 1] = cameraConfig.zoomIncrement(); + return; + } + + if (cameraConfig.innerLimit()) + { + // This lets the options panel's slider have an exponential rate + final double exponent = 2.d; + switch (event.getEventName()) + { + case "zoomLinToExp": + { + double range = intStack[intStackSize - 1]; + double value = intStack[intStackSize - 2]; + value = Math.pow(value / range, exponent) * range; + intStack[intStackSize - 2] = (int) value; + break; + } + case "zoomExpToLin": + { + double range = intStack[intStackSize - 1]; + double value = intStack[intStackSize - 2]; + value = Math.pow(value / range, 1.d / exponent) * range; + intStack[intStackSize - 2] = (int) value; + break; + } + } + } + } + + @Subscribe + private void onFocusChanged(FocusChanged event) + { + if (!event.isFocused()) + { + controlDown = false; + } + } + + @Override + protected void startUp() + { + rightClick = false; + middleClick = false; + menuHasEntries = false; + + client.setCameraPitchRelaxerEnabled(cameraConfig.relaxCameraPitch()); + keyManager.registerKeyListener(this); + mouseManager.registerMouseListener(this); + } + + @Override + protected void shutDown() + { + client.setCameraPitchRelaxerEnabled(false); + keyManager.unregisterKeyListener(this); + mouseManager.unregisterMouseListener(this); + controlDown = false; + } + + @Subscribe + private void onConfigChanged(ConfigChanged ev) + { + client.setCameraPitchRelaxerEnabled(cameraConfig.relaxCameraPitch()); + } + + @Override + public void keyTyped(KeyEvent e) + { + } + + @Override + public void keyPressed(KeyEvent e) + { + if (e.getKeyCode() == KeyEvent.VK_CONTROL) + { + controlDown = true; + } + } + + @Override + public void keyReleased(KeyEvent e) + { + if (e.getKeyCode() == KeyEvent.VK_CONTROL) + { + controlDown = false; + + if (cameraConfig.controlFunction() == ControlFunction.CONTROL_TO_RESET) + { + final int zoomValue = MiscUtils.clamp(cameraConfig.ctrlZoomValue(), cameraConfig.OUTER_LIMIT_MIN, INNER_ZOOM_LIMIT); + clientThread.invokeLater(() -> client.runScript(ScriptID.CAMERA_DO_ZOOM, zoomValue, zoomValue)); + } + } + } + + /** + * Checks if the menu has any non-ignored entries + */ + private boolean hasMenuEntries(MenuEntry[] menuEntries) + { + for (MenuEntry menuEntry : menuEntries) + { + switch (menuEntry.getMenuOpcode()) + { + case CANCEL: + case WALK: + break; + case EXAMINE_OBJECT: + case EXAMINE_NPC: + case EXAMINE_ITEM_GROUND: + case EXAMINE_ITEM: + case EXAMINE_ITEM_BANK_EQ: + if (cameraConfig.ignoreExamine()) + { + break; + } + default: + return true; + } + } + return false; + } + + /** + * Checks if the menu has any options, because menu entries are built each + * tick and the MouseListener runs on the awt thread + */ + @Subscribe + public void onClientTick(ClientTick event) + { + menuHasEntries = hasMenuEntries(client.getMenuEntries()); + } + + /** + * The event that is triggered when a mouse button is pressed + * In this method the right click is changed to a middle-click to enable rotating the camera + *

+ * This method also provides the config option to enable the middle-mouse button to always open the right click menu + */ + @Override + public MouseEvent mousePressed(MouseEvent mouseEvent) + { + if (SwingUtilities.isRightMouseButton(mouseEvent) && cameraConfig.rightClickMovesCamera()) + { + boolean oneButton = client.getVar(VarPlayer.MOUSE_BUTTONS) == 1; + // Only move the camera if there is nothing at the menu, or if + // in one-button mode. In one-button mode, left and right click always do the same thing, + // so always treat it as the menu is empty + if (!menuHasEntries || oneButton) + { + // Set the rightClick flag to true so we can release the button in mouseReleased() later + rightClick = true; + // Change the mousePressed() MouseEvent to the middle mouse button + mouseEvent = new MouseEvent((java.awt.Component) mouseEvent.getSource(), + mouseEvent.getID(), + mouseEvent.getWhen(), + mouseEvent.getModifiersEx(), + mouseEvent.getX(), + mouseEvent.getY(), + mouseEvent.getClickCount(), + mouseEvent.isPopupTrigger(), + MouseEvent.BUTTON2); + } + } + else if (SwingUtilities.isMiddleMouseButton((mouseEvent)) && cameraConfig.middleClickMenu()) + { + // Set the middleClick flag to true so we can release it later in mouseReleased() + middleClick = true; + // Chance the middle mouse button MouseEvent to a right-click + mouseEvent = new MouseEvent((java.awt.Component) mouseEvent.getSource(), + mouseEvent.getID(), + mouseEvent.getWhen(), + mouseEvent.getModifiersEx(), + mouseEvent.getX(), + mouseEvent.getY(), + mouseEvent.getClickCount(), + mouseEvent.isPopupTrigger(), + MouseEvent.BUTTON3); + } + return mouseEvent; + } + + /** + * Correct the MouseEvent to release the correct button + */ + @Override + public MouseEvent mouseReleased(MouseEvent mouseEvent) + { + if (rightClick) + { + rightClick = false; + // Change the MouseEvent to button 2 so the middle mouse button will be released + mouseEvent = new MouseEvent((java.awt.Component) mouseEvent.getSource(), + mouseEvent.getID(), + mouseEvent.getWhen(), + mouseEvent.getModifiersEx(), + mouseEvent.getX(), + mouseEvent.getY(), + mouseEvent.getClickCount(), + mouseEvent.isPopupTrigger(), + MouseEvent.BUTTON2); + + } + if (middleClick) + { + middleClick = false; + // Change the MouseEvent ot button 3 so the right mouse button will be released + mouseEvent = new MouseEvent((java.awt.Component) mouseEvent.getSource(), + mouseEvent.getID(), + mouseEvent.getWhen(), + mouseEvent.getModifiersEx(), + mouseEvent.getX(), + mouseEvent.getY(), + mouseEvent.getClickCount(), + mouseEvent.isPopupTrigger(), + MouseEvent.BUTTON3); + } + return mouseEvent; + } + + /* + * These methods are unused but required to be present in a MouseListener implementation + */ + // region Unused MouseListener methods + @Override + public MouseEvent mouseDragged(MouseEvent mouseEvent) + { + return mouseEvent; + } + + @Override + public MouseEvent mouseMoved(MouseEvent mouseEvent) + { + return mouseEvent; + } + + @Override + public MouseEvent mouseClicked(MouseEvent mouseEvent) + { + return mouseEvent; + } + + @Override + public MouseEvent mouseEntered(MouseEvent mouseEvent) + { + return mouseEvent; + } + + @Override + public MouseEvent mouseExited(MouseEvent mouseEvent) + { + return mouseEvent; + } + // endregion +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/zoom/ControlFunction.java b/runelite-client/src/main/java/net/runelite/client/plugins/camera/ControlFunction.java similarity index 94% rename from runelite-client/src/main/java/net/runelite/client/plugins/zoom/ControlFunction.java rename to runelite-client/src/main/java/net/runelite/client/plugins/camera/ControlFunction.java index a5b2522b1c..c55a6269b1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/zoom/ControlFunction.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/camera/ControlFunction.java @@ -23,12 +23,13 @@ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package net.runelite.client.plugins.zoom; +package net.runelite.client.plugins.camera; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; -@Getter +@Getter(AccessLevel.PACKAGE) @AllArgsConstructor public enum ControlFunction { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonPlugin.java index a30083d02d..64292067e4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonPlugin.java @@ -48,7 +48,6 @@ import static net.runelite.api.ProjectileID.CANNONBALL; import static net.runelite.api.ProjectileID.GRANITE_CANNONBALL; import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.ChatMessage; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.GameObjectSpawned; import net.runelite.api.events.GameTick; import net.runelite.api.events.ItemContainerChanged; @@ -56,7 +55,8 @@ import net.runelite.api.events.ProjectileSpawned; import net.runelite.client.Notifier; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -79,36 +79,49 @@ public class CannonPlugin extends Plugin ); private CannonCounter counter; private boolean skipProjectileCheckThisTick; + @Getter(AccessLevel.PACKAGE) private int cballsLeft; + @Getter(AccessLevel.PACKAGE) private boolean cannonPlaced; + @Getter(AccessLevel.PACKAGE) private WorldPoint cannonPosition; + @Getter(AccessLevel.PACKAGE) private GameObject cannon; + @Getter(AccessLevel.PACKAGE) private List spotPoints = new ArrayList<>(); + @Inject private ItemManager itemManager; + @Inject private InfoBoxManager infoBoxManager; + @Inject private Notifier notifier; + @Inject private OverlayManager overlayManager; + @Inject private CannonOverlay cannonOverlay; + @Inject private CannonSpotOverlay cannonSpotOverlay; + @Inject private CannonConfig config; + @Inject private Client client; + @Inject private ClientThread clientThread; - @Inject - private EventBus eventbus; + private boolean lock; private boolean showEmptyCannonNotification; private boolean showInfobox; @@ -128,10 +141,9 @@ public class CannonPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); overlayManager.add(cannonOverlay); overlayManager.add(cannonSpotOverlay); @@ -139,10 +151,8 @@ public class CannonPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventbus.unregister(this); - cannonSpotOverlay.setHidden(true); overlayManager.remove(cannonOverlay); overlayManager.remove(cannonSpotOverlay); @@ -155,16 +165,7 @@ public class CannonPlugin extends Plugin spotPoints.clear(); } - private void addSubscriptions() - { - eventbus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventbus.subscribe(ItemContainerChanged.class, this, this::onItemContainerChanged); - eventbus.subscribe(GameObjectSpawned.class, this, this::onGameObjectSpawned); - eventbus.subscribe(ProjectileSpawned.class, this, this::onProjectileSpawned); - eventbus.subscribe(ChatMessage.class, this, this::onChatMessage); - eventbus.subscribe(GameTick.class, this, this::onGameTick); - } - + @Subscribe private void onItemContainerChanged(ItemContainerChanged event) { if (event.getItemContainer() != client.getItemContainer(InventoryID.INVENTORY)) @@ -175,6 +176,7 @@ public class CannonPlugin extends Plugin cannonSpotOverlay.setHidden(!ItemUtil.containsAllItemIds(event.getItemContainer().getItems(), CANNON_PARTS)); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("cannon")) @@ -196,8 +198,8 @@ public class CannonPlugin extends Plugin } @Schedule( - period = 1, - unit = ChronoUnit.SECONDS + period = 1, + unit = ChronoUnit.SECONDS ) public void checkSpots() { @@ -218,6 +220,7 @@ public class CannonPlugin extends Plugin } } + @Subscribe private void onGameObjectSpawned(GameObjectSpawned event) { final GameObject gameObject = event.getGameObject(); @@ -232,6 +235,7 @@ public class CannonPlugin extends Plugin } } + @Subscribe private void onProjectileSpawned(ProjectileSpawned event) { final Projectile projectile = event.getProjectile(); @@ -247,6 +251,7 @@ public class CannonPlugin extends Plugin } } + @Subscribe private void onChatMessage(ChatMessage event) { if (event.getType() != ChatMessageType.SPAM && event.getType() != ChatMessageType.GAMEMESSAGE) @@ -281,7 +286,7 @@ public class CannonPlugin extends Plugin // counter doesn't decrease if the player has been too far away // from the cannon due to the projectiels not being in memory, // so our counter can be higher than it is supposed to be. - int amt = Integer.valueOf(m.group()); + int amt = Integer.parseInt(m.group()); if (cballsLeft + amt >= MAX_CBALLS) { skipProjectileCheckThisTick = true; @@ -330,6 +335,7 @@ public class CannonPlugin extends Plugin } } + @Subscribe private void onGameTick(GameTick event) { skipProjectileCheckThisTick = false; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonSpots.java b/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonSpots.java index 848fd1dcd6..2deec48ded 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonSpots.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonSpots.java @@ -27,6 +27,7 @@ package net.runelite.client.plugins.cannon; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.coords.WorldPoint; @@ -40,7 +41,7 @@ public enum CannonSpots BLACK_DEMONS(new WorldPoint(2859, 9778, 0), new WorldPoint(2841, 9791, 0), new WorldPoint(1421, 10089, 1)), ELVES(new WorldPoint(2044, 4635, 0), new WorldPoint(3278, 6098, 0)), SUQAHS(new WorldPoint(2114, 3943, 0)), - TROLLS(new WorldPoint(2401, 3856, 0)), + TROLLS(new WorldPoint(2401, 3856, 0), new WorldPoint(1242, 3517, 0)), GREATER_DEMONS(new WorldPoint(1435, 10086, 2)), BRINE_RAT(new WorldPoint(2707, 10132, 0)), DAGGANOTH(new WorldPoint(2524, 10020, 0)), @@ -67,7 +68,7 @@ public enum CannonSpots ICE_WARRIOR(new WorldPoint(2955, 3876, 0)), BANDIT(new WorldPoint(3037, 3700, 0)); - @Getter + @Getter(AccessLevel.PACKAGE) private static final List cannonSpots = new ArrayList<>(); static diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cerberus/CerberusPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/cerberus/CerberusPlugin.java index 073616f72f..68bdedb1a4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cerberus/CerberusPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cerberus/CerberusPlugin.java @@ -30,6 +30,7 @@ import java.util.ArrayList; import java.util.List; import javax.inject.Inject; import javax.inject.Singleton; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.GameState; import net.runelite.api.NPC; @@ -37,7 +38,7 @@ import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.NpcDespawned; import net.runelite.api.events.NpcSpawned; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.overlay.OverlayManager; @@ -50,7 +51,7 @@ import net.runelite.client.ui.overlay.OverlayManager; @Singleton public class CerberusPlugin extends Plugin { - @Getter + @Getter(AccessLevel.PACKAGE) private final List ghosts = new ArrayList<>(); @Inject @@ -59,33 +60,20 @@ public class CerberusPlugin extends Plugin @Inject private CerberusOverlay overlay; - @Inject - private EventBus eventBus; - @Override - protected void startUp() throws Exception + protected void startUp() { overlayManager.add(overlay); - addSubscriptions(); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(overlay); ghosts.clear(); } - private void addSubscriptions() - { - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(NpcSpawned.class, this, this::onNpcSpawned); - eventBus.subscribe(NpcDespawned.class, this, this::onNpcDespawned); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - } - + @Subscribe private void onGameStateChanged(GameStateChanged event) { GameState gameState = event.getGameState(); @@ -95,17 +83,20 @@ public class CerberusPlugin extends Plugin } } + @Subscribe private void onNpcSpawned(final NpcSpawned event) { final NPC npc = event.getNpc(); CerberusGhost.fromNPC(npc).ifPresent(ghost -> ghosts.add(npc)); } + @Subscribe private void onNpcDespawned(final NpcDespawned event) { ghosts.remove(event.getNpc()); } + @Subscribe void onGameTick(GameTick gameTick) { if (ghosts.isEmpty()) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatboxperformance/ChatboxPerformanceConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatboxperformance/ChatboxPerformanceConfig.java index 977ac469ee..58b487b252 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatboxperformance/ChatboxPerformanceConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatboxperformance/ChatboxPerformanceConfig.java @@ -32,10 +32,10 @@ import net.runelite.client.config.ConfigItem; public interface ChatboxPerformanceConfig extends Config { @ConfigItem( - position = 1, - keyName = "Chatbox", - name = "Toggle gradient", - description = "Toggles the gradient inside the chatbox." + position = 1, + keyName = "Chatbox", + name = "Toggle gradient", + description = "Toggles the gradient inside the chatbox." ) default boolean transparentChatBox() { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatboxperformance/ChatboxPerformancePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatboxperformance/ChatboxPerformancePlugin.java index 95007434bc..88d5dd65a1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatboxperformance/ChatboxPerformancePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatboxperformance/ChatboxPerformancePlugin.java @@ -38,7 +38,7 @@ import net.runelite.api.widgets.WidgetSizeMode; import net.runelite.api.widgets.WidgetType; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -55,14 +55,10 @@ public class ChatboxPerformancePlugin extends Plugin @Inject private ClientThread clientThread; - @Inject - private EventBus eventBus; - @Inject private ChatboxPerformanceConfig config; - private boolean transparentChatBox; - + @Subscribe public void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("chatboxperformance")) @@ -80,7 +76,6 @@ public class ChatboxPerformancePlugin extends Plugin @Override public void startUp() { - addSubscriptions(); if (client.getGameState() == GameState.LOGGED_IN) { clientThread.invokeLater(() -> client.runScript(ScriptID.MESSAGE_LAYER_CLOSE, 0, 0)); @@ -94,21 +89,9 @@ public class ChatboxPerformancePlugin extends Plugin { clientThread.invokeLater(() -> client.runScript(ScriptID.MESSAGE_LAYER_CLOSE, 0, 0)); } - eventBus.unregister(this); - } - - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(ScriptCallbackEvent.class, this, this::onScriptCallbackEvent); - - } - - private void updateConfig() - { - this.transparentChatBox = config.transparentChatBox(); } + @Subscribe private void onScriptCallbackEvent(ScriptCallbackEvent ev) { if (!"chatboxBackgroundBuilt".equals(ev.getEventName())) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsConfig.java index a7e4963bcc..1e7d7b7cd7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsConfig.java @@ -24,9 +24,12 @@ */ package net.runelite.client.plugins.chatcommands; +import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; +import net.runelite.client.config.Keybind; @ConfigGroup("chatcommands") public interface ChatCommandsConfig extends Config @@ -121,17 +124,28 @@ public interface ChatCommandsConfig extends Config @ConfigItem( position = 8, - keyName = "clearShortcuts", - name = "Clear shortcuts", - description = "Enable shortcuts (ctrl+w and backspace) for clearing the chatbox" + keyName = "clearSingleWord", + name = "Clear Single Word", + description = "Enable hot key to clear single word at a time" ) - default boolean clearShortcuts() + default Keybind clearSingleWord() { - return true; + return new Keybind(KeyEvent.VK_W, InputEvent.CTRL_DOWN_MASK); } @ConfigItem( - position = 5, + position = 9, + keyName = "clearEntireChatBox", + name = "Clear Chat Box", + description = "Enable hotkey to clear entire chat box" + ) + default Keybind clearChatBox() + { + return new Keybind(KeyEvent.VK_BACK_SPACE, InputEvent.CTRL_DOWN_MASK); + } + + @ConfigItem( + position = 10, keyName = "clipboardShortcuts", name = "Clipboard shortcuts", description = "Enable clipboard shortcuts (ctrl+c and ctrl+v)" diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java index 4d3a1e522c..1a0e2fb9ac 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java @@ -28,6 +28,7 @@ package net.runelite.client.plugins.chatcommands; import com.google.inject.Provides; import io.reactivex.schedulers.Schedulers; import java.io.IOException; +import java.util.EnumSet; import java.util.List; import java.util.concurrent.ScheduledExecutorService; import java.util.regex.Matcher; @@ -42,12 +43,15 @@ import net.runelite.api.Experience; import net.runelite.api.IconID; import net.runelite.api.ItemDefinition; import net.runelite.api.MessageNode; +import net.runelite.api.Player; import net.runelite.api.VarPlayer; import net.runelite.api.Varbits; +import net.runelite.api.WorldType; import net.runelite.api.events.ChatMessage; import net.runelite.api.events.GameTick; import net.runelite.api.events.VarbitChanged; import net.runelite.api.events.WidgetLoaded; +import static net.runelite.api.util.Text.sanitize; import net.runelite.api.vars.AccountType; import net.runelite.api.widgets.Widget; import static net.runelite.api.widgets.WidgetID.KILL_LOGS_GROUP_ID; @@ -58,14 +62,13 @@ import net.runelite.client.chat.ChatCommandManager; import net.runelite.client.chat.ChatMessageBuilder; import net.runelite.client.chat.ChatMessageManager; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ChatInput; import net.runelite.client.game.ItemManager; import net.runelite.client.input.KeyManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.util.QuantityFormatter; -import static net.runelite.api.util.Text.sanitize; import net.runelite.http.api.chat.ChatClient; import net.runelite.http.api.chat.Duels; import net.runelite.http.api.hiscore.HiscoreClient; @@ -145,13 +148,195 @@ public class ChatCommandsPlugin extends Plugin @Inject private ChatKeyboardListener chatKeyboardListener; - @Inject - private EventBus eventBus; + /** + * Returns the ironman status based on the symbol in the name of the player. + * + * @param name player name + * @return hiscore endpoint + */ + private static HiscoreEndpoint getHiscoreEndpointByName(final String name) + { + if (name.contains(IconID.IRONMAN.toString())) + { + return toEndPoint(AccountType.IRONMAN); + } + else if (name.contains(IconID.ULTIMATE_IRONMAN.toString())) + { + return toEndPoint(AccountType.ULTIMATE_IRONMAN); + } + else if (name.contains(IconID.HARDCORE_IRONMAN.toString())) + { + return toEndPoint(AccountType.HARDCORE_IRONMAN); + } + else + { + return toEndPoint(AccountType.NORMAL); + } + } + + /** + * Converts account type to hiscore endpoint + * + * @param accountType account type + * @return hiscore endpoint + */ + private static HiscoreEndpoint toEndPoint(final AccountType accountType) + { + switch (accountType) + { + case IRONMAN: + return HiscoreEndpoint.IRONMAN; + case ULTIMATE_IRONMAN: + return HiscoreEndpoint.ULTIMATE_IRONMAN; + case HARDCORE_IRONMAN: + return HiscoreEndpoint.HARDCORE_IRONMAN; + default: + return HiscoreEndpoint.NORMAL; + } + } + + private static String longBossName(String boss) + { + switch (boss.toLowerCase()) + { + case "corp": + return "Corporeal Beast"; + + case "jad": + return "TzTok-Jad"; + + case "kq": + return "Kalphite Queen"; + + case "chaos ele": + return "Chaos Elemental"; + + case "dusk": + case "dawn": + case "gargs": + return "Grotesque Guardians"; + + case "crazy arch": + return "Crazy Archaeologist"; + + case "deranged arch": + return "Deranged Archaeologist"; + + case "mole": + return "Giant Mole"; + + case "vetion": + return "Vet'ion"; + + case "vene": + return "Venenatis"; + + case "kbd": + return "King Black Dragon"; + + case "vork": + return "Vorkath"; + + case "sire": + return "Abyssal Sire"; + + case "smoke devil": + case "thermy": + return "Thermonuclear Smoke Devil"; + + case "cerb": + return "Cerberus"; + + case "zuk": + case "inferno": + return "TzKal-Zuk"; + + case "hydra": + return "Alchemical Hydra"; + + // gwd + case "sara": + case "saradomin": + case "zilyana": + case "zily": + return "Commander Zilyana"; + case "zammy": + case "zamorak": + case "kril": + case "kril trutsaroth": + return "K'ril Tsutsaroth"; + case "arma": + case "kree": + case "kreearra": + case "armadyl": + return "Kree'arra"; + case "bando": + case "bandos": + case "graardor": + return "General Graardor"; + + // dks + case "supreme": + return "Dagannoth Supreme"; + case "rex": + return "Dagannoth Rex"; + case "prime": + return "Dagannoth Prime"; + + case "wt": + return "Wintertodt"; + case "barrows": + return "Barrows Chests"; + case "herbi": + return "Herbiboar"; + + // cox + case "cox": + case "xeric": + case "chambers": + case "olm": + case "raids": + return "Chambers of Xeric"; + + // cox cm + case "cox cm": + case "xeric cm": + case "chambers cm": + case "olm cm": + case "raids cm": + return "Chambers of Xeric Challenge Mode"; + + // tob + case "tob": + case "theatre": + case "verzik": + case "verzik vitur": + case "raids 2": + return "Theatre of Blood"; + + // agility course + case "prif": + case "prifddinas": + return "Prifddinas Agility Course"; + + // The Gauntlet + case "gaunt": + case "gauntlet": + return "Gauntlet"; + + // Corrupted Gauntlet + case "cgaunt": + case "cgauntlet": + return "Corrupted Gauntlet"; + + default: + return WordUtils.capitalize(boss); + } + } @Override public void startUp() { - addSubscriptions(); keyManager.registerKeyListener(chatKeyboardListener); @@ -170,8 +355,6 @@ public class ChatCommandsPlugin extends Plugin @Override public void shutDown() { - eventBus.unregister(this); - lastBossKill = null; keyManager.unregisterKeyListener(chatKeyboardListener); @@ -188,14 +371,6 @@ public class ChatCommandsPlugin extends Plugin chatCommandManager.unregisterCommand(DUEL_ARENA_COMMAND); } - private void addSubscriptions() - { - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(WidgetLoaded.class, this, this::onWidgetLoaded); - eventBus.subscribe(VarbitChanged.class, this, this::onVarbitChanged); - } - @Provides ChatCommandsConfig provideConfig(ConfigManager configManager) { @@ -228,6 +403,7 @@ public class ChatCommandsPlugin extends Plugin return personalBest == null ? 0 : personalBest; } + @Subscribe void onChatMessage(ChatMessage chatMessage) { if (chatMessage.getType() != ChatMessageType.TRADE @@ -361,6 +537,7 @@ public class ChatCommandsPlugin extends Plugin } } + @Subscribe private void onGameTick(GameTick event) { if (!logKills) @@ -397,6 +574,7 @@ public class ChatCommandsPlugin extends Plugin } } + @Subscribe private void onWidgetLoaded(WidgetLoaded widget) { // don't load kc if in an instance, if the player is in another players poh @@ -409,6 +587,7 @@ public class ChatCommandsPlugin extends Plugin logKills = true; } + @Subscribe private void onVarbitChanged(VarbitChanged varbitChanged) { hiscoreEndpoint = getLocalHiscoreEndpointType(); @@ -728,7 +907,6 @@ public class ChatCommandsPlugin extends Plugin return true; } - private void personalBestLookup(ChatMessage chatMessage, String message) { if (!config.pb()) @@ -1157,31 +1335,28 @@ public class ChatCommandsPlugin extends Plugin */ private HiscoreLookup getCorrectLookupFor(final ChatMessage chatMessage) { - final String player; - final HiscoreEndpoint ironmanStatus; + Player localPlayer = client.getLocalPlayer(); + final String player = sanitize(chatMessage.getName()); - if (chatMessage.getType().equals(ChatMessageType.PRIVATECHATOUT)) + // If we are sending the message then just use the local hiscore endpoint for the world + if (chatMessage.getType().equals(ChatMessageType.PRIVATECHATOUT) + || player.equals(localPlayer.getName())) { - player = client.getLocalPlayer().getName(); - ironmanStatus = hiscoreEndpoint; + return new HiscoreLookup(localPlayer.getName(), hiscoreEndpoint); } - else - { - player = sanitize(chatMessage.getName()); - if (player.equals(client.getLocalPlayer().getName())) + // Public chat on a leagues world is always league hiscores, regardless of icon + if (chatMessage.getType() == ChatMessageType.PUBLICCHAT || chatMessage.getType() == ChatMessageType.MODCHAT) + { + if (client.getWorldType().contains(WorldType.LEAGUE)) { - // Get ironman status from for the local player - ironmanStatus = hiscoreEndpoint; - } - else - { - // Get ironman status from their icon in chat - ironmanStatus = getHiscoreEndpointByName(chatMessage.getName()); + return new HiscoreLookup(player, HiscoreEndpoint.LEAGUE); } } - return new HiscoreLookup(player, ironmanStatus); + // Get ironman status from their icon in chat + HiscoreEndpoint endpoint = getHiscoreEndpointByName(chatMessage.getName()); + return new HiscoreLookup(player, endpoint); } /** @@ -1220,199 +1395,19 @@ public class ChatCommandsPlugin extends Plugin */ private HiscoreEndpoint getLocalHiscoreEndpointType() { + EnumSet worldType = client.getWorldType(); + if (worldType.contains(WorldType.LEAGUE)) + { + return HiscoreEndpoint.LEAGUE; + } + return toEndPoint(client.getAccountType()); } - /** - * Returns the ironman status based on the symbol in the name of the player. - * - * @param name player name - * @return hiscore endpoint - */ - private static HiscoreEndpoint getHiscoreEndpointByName(final String name) - { - if (name.contains(IconID.IRONMAN.toString())) - { - return toEndPoint(AccountType.IRONMAN); - } - else if (name.contains(IconID.ULTIMATE_IRONMAN.toString())) - { - return toEndPoint(AccountType.ULTIMATE_IRONMAN); - } - else if (name.contains(IconID.HARDCORE_IRONMAN.toString())) - { - return toEndPoint(AccountType.HARDCORE_IRONMAN); - } - else - { - return toEndPoint(AccountType.NORMAL); - } - } - - /** - * Converts account type to hiscore endpoint - * - * @param accountType account type - * @return hiscore endpoint - */ - private static HiscoreEndpoint toEndPoint(final AccountType accountType) - { - switch (accountType) - { - case IRONMAN: - return HiscoreEndpoint.IRONMAN; - case ULTIMATE_IRONMAN: - return HiscoreEndpoint.ULTIMATE_IRONMAN; - case HARDCORE_IRONMAN: - return HiscoreEndpoint.HARDCORE_IRONMAN; - default: - return HiscoreEndpoint.NORMAL; - } - } - @Value private static class HiscoreLookup { private final String name; private final HiscoreEndpoint endpoint; } - - private static String longBossName(String boss) - { - switch (boss.toLowerCase()) - { - case "corp": - return "Corporeal Beast"; - - case "jad": - return "TzTok-Jad"; - - case "kq": - return "Kalphite Queen"; - - case "chaos ele": - return "Chaos Elemental"; - - case "dusk": - case "dawn": - case "gargs": - return "Grotesque Guardians"; - - case "crazy arch": - return "Crazy Archaeologist"; - - case "deranged arch": - return "Deranged Archaeologist"; - - case "mole": - return "Giant Mole"; - - case "vetion": - return "Vet'ion"; - - case "vene": - return "Venenatis"; - - case "kbd": - return "King Black Dragon"; - - case "vork": - return "Vorkath"; - - case "sire": - return "Abyssal Sire"; - - case "smoke devil": - case "thermy": - return "Thermonuclear Smoke Devil"; - - case "cerb": - return "Cerberus"; - - case "zuk": - case "inferno": - return "TzKal-Zuk"; - - case "hydra": - return "Alchemical Hydra"; - - // gwd - case "sara": - case "saradomin": - case "zilyana": - case "zily": - return "Commander Zilyana"; - case "zammy": - case "zamorak": - case "kril": - case "kril trutsaroth": - return "K'ril Tsutsaroth"; - case "arma": - case "kree": - case "kreearra": - case "armadyl": - return "Kree'arra"; - case "bando": - case "bandos": - case "graardor": - return "General Graardor"; - - // dks - case "supreme": - return "Dagannoth Supreme"; - case "rex": - return "Dagannoth Rex"; - case "prime": - return "Dagannoth Prime"; - - case "wt": - return "Wintertodt"; - case "barrows": - return "Barrows Chests"; - case "herbi": - return "Herbiboar"; - - // cox - case "cox": - case "xeric": - case "chambers": - case "olm": - case "raids": - return "Chambers of Xeric"; - - // cox cm - case "cox cm": - case "xeric cm": - case "chambers cm": - case "olm cm": - case "raids cm": - return "Chambers of Xeric Challenge Mode"; - - // tob - case "tob": - case "theatre": - case "verzik": - case "verzik vitur": - case "raids 2": - return "Theatre of Blood"; - - // agility course - case "prif": - case "prifddinas": - return "Prifddinas Agility Course"; - - // The Gauntlet - case "gaunt": - case "gauntlet": - return "Gauntlet"; - - // Corrupted Gauntlet - case "cgaunt": - case "cgauntlet": - return "Corrupted Gauntlet"; - - default: - return WordUtils.capitalize(boss); - } - } } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatKeyboardListener.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatKeyboardListener.java index cd2678e520..553724596b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatKeyboardListener.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatKeyboardListener.java @@ -29,11 +29,9 @@ import javax.inject.Inject; import javax.inject.Singleton; import net.runelite.api.Client; import net.runelite.api.ScriptID; -import net.runelite.api.GameState; import net.runelite.api.VarClientStr; import net.runelite.client.callback.ClientThread; import net.runelite.client.input.KeyListener; -import net.runelite.client.util.Clipboard; @Singleton class ChatKeyboardListener implements KeyListener @@ -56,85 +54,43 @@ class ChatKeyboardListener implements KeyListener @Override public void keyPressed(KeyEvent e) { - if (!e.isControlDown() || client.getGameState() != GameState.LOGGED_IN) + if (chatCommandsConfig.clearSingleWord().matches(e)) { - return; - } - - String input = client.getVar(VarClientStr.CHATBOX_TYPED_TEXT); - - switch (e.getKeyCode()) - { - case KeyEvent.VK_C: - if (!chatCommandsConfig.clipboardShortcuts()) + String input = client.getVar(VarClientStr.CHATBOX_TYPED_TEXT); + if (input != null) + { + // remove trailing space + while (input.endsWith(" ")) { - break; + input = input.substring(0, input.length() - 1); } - Clipboard.store(input); - - break; - case KeyEvent.VK_V: - if (!chatCommandsConfig.clipboardShortcuts()) + // find next word + int idx = input.lastIndexOf(' '); + final String replacement; + if (idx != -1) { - break; + replacement = input.substring(0, idx); + } + else + { + replacement = ""; } - final String clipboard = Clipboard.retrieve(); - if (clipboard != null && !clipboard.isEmpty()) - { - final String replacement = input + clipboard; - - clientThread.invoke(() -> client.setVar(VarClientStr.CHATBOX_TYPED_TEXT, replacement)); - } - - break; - case KeyEvent.VK_W: - if (!chatCommandsConfig.clearShortcuts()) - { - break; - } - - if (input != null) - { - // remove trailing space - while (input.endsWith(" ")) - { - input = input.substring(0, input.length() - 1); - } - - // find next word - int idx = input.lastIndexOf(' '); - final String replacement; - if (idx != -1) - { - replacement = input.substring(0, idx); - } - else - { - replacement = ""; - } - - clientThread.invoke(() -> - { - client.setVar(VarClientStr.CHATBOX_TYPED_TEXT, replacement); - client.runScript(ScriptID.CHAT_PROMPT_INIT); - }); - } - break; - case KeyEvent.VK_BACK_SPACE: clientThread.invoke(() -> { - client.setVar(VarClientStr.CHATBOX_TYPED_TEXT, ""); + client.setVar(VarClientStr.CHATBOX_TYPED_TEXT, replacement); client.runScript(ScriptID.CHAT_PROMPT_INIT); }); - if (!chatCommandsConfig.clearShortcuts()) - { - break; - } - - clientThread.invoke(() -> client.setVar(VarClientStr.CHATBOX_TYPED_TEXT, "")); - break; + } + } + else if (chatCommandsConfig.clearChatBox().matches(e)) + { + clientThread.invoke(() -> + { + client.setVar(VarClientStr.CHATBOX_TYPED_TEXT, ""); + client.runScript(ScriptID.CHAT_PROMPT_INIT); + }); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterPlugin.java index af7e854198..5d244290a0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterPlugin.java @@ -42,12 +42,12 @@ import net.runelite.api.ChatMessageType; import net.runelite.api.Client; import net.runelite.api.MessageNode; import net.runelite.api.Player; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.OverheadTextChanged; import net.runelite.api.events.ScriptCallbackEvent; import net.runelite.api.util.Text; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import org.apache.commons.lang3.StringUtils; @@ -76,9 +76,6 @@ public class ChatFilterPlugin extends Plugin @Inject private ChatFilterConfig config; - @Inject - private EventBus eventBus; - @Setter(AccessLevel.PACKAGE) private ChatFilterType filterType; @Setter(AccessLevel.PACKAGE) @@ -97,31 +94,22 @@ public class ChatFilterPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); updateFilteredPatterns(); client.refreshChat(); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - filteredPatterns.clear(); client.refreshChat(); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(ScriptCallbackEvent.class, this, this::onScriptCallbackEvent); - eventBus.subscribe(OverheadTextChanged.class, this, this::onOverheadTextChanged); - } - + @Subscribe private void onScriptCallbackEvent(ScriptCallbackEvent event) { if (!"chatFilterCheck".equals(event.getEventName())) @@ -185,6 +173,7 @@ public class ChatFilterPlugin extends Plugin } } + @Subscribe private void onOverheadTextChanged(OverheadTextChanged event) { if (!(event.getActor() instanceof Player) || event.getActor().getName() == null || !shouldFilterPlayerMessage(event.getActor().getName())) @@ -267,6 +256,7 @@ public class ChatFilterPlugin extends Plugin .forEach(filteredPatterns::add); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!"chatfilter".equals(event.getGroup())) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chathistory/ChatHistoryPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chathistory/ChatHistoryPlugin.java index 5eb6009200..7a68d24622 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chathistory/ChatHistoryPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chathistory/ChatHistoryPlugin.java @@ -46,12 +46,13 @@ import net.runelite.client.callback.ClientThread; import net.runelite.client.chat.ChatMessageManager; import net.runelite.client.chat.QueuedMessage; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.input.KeyListener; import net.runelite.client.input.KeyManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import org.apache.commons.lang3.StringUtils; @PluginDescriptor( name = "Chat History", @@ -61,7 +62,7 @@ import net.runelite.client.plugins.PluginDescriptor; @Singleton public class ChatHistoryPlugin extends Plugin implements KeyListener { - private static final String WELCOME_MESSAGE = "Welcome to Old School RuneScape."; + private static final String WELCOME_MESSAGE = "Welcome to Old School RuneScape"; private static final String CLEAR_HISTORY = "Clear history"; private static final String CLEAR_PRIVATE = "Private:"; private static final int CYCLE_HOTKEY = KeyEvent.VK_TAB; @@ -85,12 +86,27 @@ public class ChatHistoryPlugin extends Plugin implements KeyListener @Inject private ChatMessageManager chatMessageManager; - @Inject - private EventBus eventBus; - private boolean retainChatHistory; private boolean pmTargetCycling; + /** + * Small hack to prevent plugins checking for specific messages to match. This works because the "—" character + * cannot be seen in-game. This replacement preserves wrapping on chat history messages. + * + * @param message message + * @return message with invisible character before every space + */ + private static String tweakSpaces(final String message) + { + if (message != null) + { + // First replacement cleans up prior applications of this so as not to keep extending the message + return message.replace("— ", " ").replace(" ", "— "); + } + + return null; + } + @Provides ChatHistoryConfig getConfig(ConfigManager configManager) { @@ -101,7 +117,6 @@ public class ChatHistoryPlugin extends Plugin implements KeyListener protected void startUp() { updateConfig(); - addSubscriptions(); messageQueue = EvictingQueue.create(100); friends = new ArrayDeque<>(FRIENDS_MAX_SIZE + 1); @@ -111,8 +126,6 @@ public class ChatHistoryPlugin extends Plugin implements KeyListener @Override protected void shutDown() { - eventBus.unregister(this); - messageQueue.clear(); messageQueue = null; friends.clear(); @@ -120,18 +133,13 @@ public class ChatHistoryPlugin extends Plugin implements KeyListener keyManager.unregisterKeyListener(this); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - eventBus.subscribe(MenuOptionClicked.class, this, this::onMenuOptionClicked); - } - + @Subscribe private void onChatMessage(ChatMessage chatMessage) { // Start sending old messages right after the welcome message, as that is most reliable source // of information that chat history was reset - if (chatMessage.getMessage().equals(WELCOME_MESSAGE)) + ChatMessageType chatMessageType = chatMessage.getType(); + if (chatMessageType == ChatMessageType.WELCOME && StringUtils.startsWithIgnoreCase(chatMessage.getMessage(), WELCOME_MESSAGE)) { if (!this.retainChatHistory) { @@ -148,7 +156,7 @@ public class ChatHistoryPlugin extends Plugin implements KeyListener return; } - switch (chatMessage.getType()) + switch (chatMessageType) { case PRIVATECHATOUT: case PRIVATECHAT: @@ -168,7 +176,7 @@ public class ChatHistoryPlugin extends Plugin implements KeyListener case FRIENDSCHAT: case CONSOLE: final QueuedMessage queuedMessage = QueuedMessage.builder() - .type(chatMessage.getType()) + .type(chatMessageType) .name(chatMessage.getName()) .sender(chatMessage.getSender()) .value(tweakSpaces(chatMessage.getMessage())) @@ -183,6 +191,7 @@ public class ChatHistoryPlugin extends Plugin implements KeyListener } } + @Subscribe private void onMenuOptionClicked(MenuOptionClicked event) { String menuOption = event.getOption(); @@ -202,22 +211,9 @@ public class ChatHistoryPlugin extends Plugin implements KeyListener } } - /** - * Small hack to prevent plugins checking for specific messages to match. This works because the "—" character - * cannot be seen in-game. This replacement preserves wrapping on chat history messages. - * - * @param message message - * @return message with invisible character before every space - */ - private static String tweakSpaces(final String message) + @Override + public void keyTyped(KeyEvent e) { - if (message != null) - { - // First replacement cleans up prior applications of this so as not to keep extending the message - return message.replace("— ", " ").replace(" ", "— "); - } - - return null; } @Override @@ -250,11 +246,6 @@ public class ChatHistoryPlugin extends Plugin implements KeyListener }); } - @Override - public void keyTyped(KeyEvent e) - { - } - @Override public void keyReleased(KeyEvent e) { @@ -280,6 +271,7 @@ public class ChatHistoryPlugin extends Plugin implements KeyListener return friends.getLast(); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!"chathistory".equals(event.getGroup())) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatnotifications/ChatNotificationsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatnotifications/ChatNotificationsConfig.java index 929c7caa03..5d9227c8f8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatnotifications/ChatNotificationsConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatnotifications/ChatNotificationsConfig.java @@ -97,12 +97,12 @@ public interface ChatNotificationsConfig extends Config { return false; } - + @ConfigItem( - position = 6, - keyName = "notifyOnPm", - name = "Notify on private messsage", - description = "Notifies you whenever a private message was received" + position = 6, + keyName = "notifyOnPm", + name = "Notify on private messsage", + description = "Notifies you whenever a private message was received" ) default boolean notifyOnPm() { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatnotifications/ChatNotificationsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatnotifications/ChatNotificationsPlugin.java index d6a5c16483..e1f38c3cdc 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatnotifications/ChatNotificationsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatnotifications/ChatNotificationsPlugin.java @@ -28,7 +28,6 @@ package net.runelite.client.plugins.chatnotifications; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Strings; import com.google.inject.Provides; - import java.util.HashSet; import java.util.List; import java.util.Set; @@ -41,17 +40,17 @@ import javax.inject.Singleton; import net.runelite.api.Client; import net.runelite.api.MessageNode; import net.runelite.api.events.ChatMessage; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.GameStateChanged; +import net.runelite.api.util.Text; import net.runelite.client.Notifier; import net.runelite.client.RuneLiteProperties; import net.runelite.client.chat.ChatColorType; import net.runelite.client.chat.ChatMessageManager; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.api.util.Text; @PluginDescriptor( name = "Chat Notifications", @@ -62,6 +61,9 @@ import net.runelite.api.util.Text; @Singleton public class ChatNotificationsPlugin extends Plugin { + // Private message cache used to avoid duplicate notifications from ChatHistory. + private final Set privateMessageHashes = new HashSet<>(); + @Inject private Client client; @@ -74,17 +76,10 @@ public class ChatNotificationsPlugin extends Plugin @Inject private Notifier notifier; - @Inject - private EventBus eventBus; - //Custom Highlights private Pattern usernameMatcher = null; private String usernameReplacer = ""; private Pattern highlightMatcher = null; - - // Private message cache used to avoid duplicate notifications from ChatHistory. - private final Set privateMessageHashes = new HashSet<>(); - private boolean highlightOwnName; private String highlightWordsString; private boolean notifyOnOwnName; @@ -93,6 +88,49 @@ public class ChatNotificationsPlugin extends Plugin private boolean notifyOnDuel; private boolean notifyOnPm; + /** + * Get the last color tag from a string, or null if there was none + * + * @param str + * @return + */ + private static String getLastColor(String str) + { + int colIdx = str.lastIndexOf(""); + + if (colEndIdx > colIdx) + { + // ends in a which resets the color to normal + return ""; + } + + if (colIdx == -1) + { + return null; // no color + } + + int closeIdx = str.indexOf('>', colIdx); + if (closeIdx == -1) + { + return null; // unclosed col tag + } + + return str.substring(colIdx, closeIdx + 1); // include the > + } + + /** + * Strip color tags from a string. + * + * @param str + * @return + */ + @VisibleForTesting + static String stripColor(String str) + { + return str.replaceAll("(|)", ""); + } + @Provides ChatNotificationsConfig provideConfig(ConfigManager configManager) { @@ -103,7 +141,6 @@ public class ChatNotificationsPlugin extends Plugin public void startUp() { updateConfig(); - addSubscriptions(); updateHighlights(); } @@ -111,18 +148,10 @@ public class ChatNotificationsPlugin extends Plugin @Override public void shutDown() { - eventBus.unregister(this); - this.privateMessageHashes.clear(); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - } - + @Subscribe private void onGameStateChanged(GameStateChanged event) { switch (event.getGameState()) @@ -134,6 +163,7 @@ public class ChatNotificationsPlugin extends Plugin } } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("chatnotification")) @@ -160,6 +190,7 @@ public class ChatNotificationsPlugin extends Plugin } } + @Subscribe void onChatMessage(ChatMessage chatMessage) { MessageNode messageNode = chatMessage.getMessageNode(); @@ -326,47 +357,4 @@ public class ChatNotificationsPlugin extends Plugin return stringBuilder.toString(); } - - /** - * Get the last color tag from a string, or null if there was none - * - * @param str - * @return - */ - private static String getLastColor(String str) - { - int colIdx = str.lastIndexOf(""); - - if (colEndIdx > colIdx) - { - // ends in a which resets the color to normal - return ""; - } - - if (colIdx == -1) - { - return null; // no color - } - - int closeIdx = str.indexOf('>', colIdx); - if (closeIdx == -1) - { - return null; // unclosed col tag - } - - return str.substring(colIdx, closeIdx + 1); // include the > - } - - /** - * Strip color tags from a string. - * - * @param str - * @return - */ - @VisibleForTesting - static String stripColor(String str) - { - return str.replaceAll("(|)", ""); - } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chattranslation/ChatTranslationPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chattranslation/ChatTranslationPlugin.java index cddbb066cf..2f62859442 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chattranslation/ChatTranslationPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chattranslation/ChatTranslationPlugin.java @@ -26,6 +26,7 @@ import net.runelite.client.callback.ClientThread; import net.runelite.client.chat.ChatMessageManager; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.input.KeyListener; import net.runelite.client.input.KeyManager; @@ -82,10 +83,8 @@ public class ChatTranslationPlugin extends Plugin implements KeyListener } @Override - protected void startUp() throws Exception + protected void startUp() { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - translator.setInLang(config.publicTargetLanguage()); translator.setOutLang(config.playerTargetLanguage()); @@ -113,9 +112,8 @@ public class ChatTranslationPlugin extends Plugin implements KeyListener } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); eventBus.unregister(OPTION); eventBus.unregister(PUBLIC); menuManager.removePlayerMenuItem(TRANSLATE); @@ -123,6 +121,7 @@ public class ChatTranslationPlugin extends Plugin implements KeyListener playerNames.clear(); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("chattranslation")) @@ -227,6 +226,7 @@ public class ChatTranslationPlugin extends Plugin implements KeyListener config.playerNames(Text.toCSV(playerNames)); } + @Subscribe private void onChatMessage(ChatMessage chatMessage) { if (client.getGameState() != GameState.LOADING && client.getGameState() != GameState.LOGGED_IN) @@ -265,6 +265,12 @@ public class ChatTranslationPlugin extends Plugin implements KeyListener client.refreshChat(); } + @Override + public void keyTyped(KeyEvent e) + { + // Nothing. + } + @Override public void keyPressed(KeyEvent event) { @@ -313,10 +319,4 @@ public class ChatTranslationPlugin extends Plugin implements KeyListener { // Nothing. } - - @Override - public void keyTyped(KeyEvent e) - { - // Nothing. - } } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chattranslation/Languages.java b/runelite-client/src/main/java/net/runelite/client/plugins/chattranslation/Languages.java index c1078c768c..d7bd91e1b0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chattranslation/Languages.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chattranslation/Languages.java @@ -1,5 +1,6 @@ package net.runelite.client.plugins.chattranslation; +import lombok.AccessLevel; import lombok.Getter; // TODO: Doesn't Locale pretty much do this as well? @@ -12,7 +13,7 @@ public enum Languages FRENCH("French", "fr"), GERMAN("German", "de"); - @Getter + @Getter(AccessLevel.PACKAGE) private final String name; private final String shortName; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chattranslation/Translator.java b/runelite-client/src/main/java/net/runelite/client/plugins/chattranslation/Translator.java index 88f5eb85ac..5b0a4aa8c1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chattranslation/Translator.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chattranslation/Translator.java @@ -23,6 +23,7 @@ class Translator { incomingUrlBase = BASE_URL + SOURCE + CENT_URL + lang.toShortString() + LAST_URL; } + void setOutLang(Languages lang) { outgoingUrlBase = BASE_URL + SOURCE + CENT_URL + lang.toShortString() + LAST_URL; @@ -40,7 +41,7 @@ class Translator return translate(new URL(url)); } - public String translate(URL url) throws IOException + private String translate(URL url) throws IOException { HttpURLConnection con = (HttpURLConnection) url.openConnection(); con.setRequestProperty("User-Agent", "Mozilla/5.0"); @@ -57,10 +58,6 @@ class Translator return parseResult(response.toString()); } - catch (IOException e) - { - throw e; - } } private String parseResult(String inputJson) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatConfig.java index 12476cc675..7700bff76e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatConfig.java @@ -137,7 +137,7 @@ public interface ClanChatConfig extends Config { return false; } - + @ConfigItem( position = 9, keyName = "clanname", diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatPlugin.java index 0ec05fe398..acd9988a4b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatPlugin.java @@ -57,7 +57,6 @@ import net.runelite.api.events.ChatMessage; import net.runelite.api.events.ClanChanged; import net.runelite.api.events.ClanMemberJoined; import net.runelite.api.events.ClanMemberLeft; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.PlayerDespawned; @@ -71,7 +70,8 @@ import net.runelite.api.widgets.WidgetType; import net.runelite.client.callback.ClientThread; import net.runelite.client.chat.ChatMessageBuilder; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ClanManager; import net.runelite.client.game.SpriteManager; import net.runelite.client.plugins.Plugin; @@ -95,6 +95,12 @@ public class ClanChatPlugin extends Plugin private static final String RECENT_TITLE = "Recent CCs"; private static final int JOIN_LEAVE_DURATION = 20; private static final int MESSAGE_DELAY = 10; + private static final CopyOnWriteArrayList clanMembers = new CopyOnWriteArrayList<>(); + /** + * queue of temporary messages added to the client + */ + private final Deque clanJoinMessages = new ArrayDeque<>(); + private final Map activityBuffer = new HashMap<>(); @Inject private Client client; @@ -114,26 +120,9 @@ public class ClanChatPlugin extends Plugin @Inject private ClientThread clientThread; - @Inject - private EventBus eventBus; - private List chats = new ArrayList<>(); - - @SuppressWarnings("unchecked") - public static CopyOnWriteArrayList getClanMembers() - { - return (CopyOnWriteArrayList) clanMembers.clone(); - } - - private static final CopyOnWriteArrayList clanMembers = new CopyOnWriteArrayList<>(); private ClanChatIndicator clanMemberCounter; - /** - * queue of temporary messages added to the client - */ - private final Deque clanJoinMessages = new ArrayDeque<>(); - private final Map activityBuffer = new HashMap<>(); private int clanJoinedTick; - private boolean clanChatIcons; private boolean recentChats; private boolean showClanCounter; @@ -145,6 +134,12 @@ public class ClanChatPlugin extends Plugin private boolean clanTabChat; private String clanname; + @SuppressWarnings("unchecked") + public static CopyOnWriteArrayList getClanMembers() + { + return (CopyOnWriteArrayList) clanMembers.clone(); + } + @Provides ClanChatConfig getConfig(ConfigManager configManager) { @@ -155,7 +150,6 @@ public class ClanChatPlugin extends Plugin public void startUp() { updateConfig(); - addSubscriptions(); chats = new ArrayList<>(Text.fromCSV(this.chatsData)); } @@ -163,28 +157,12 @@ public class ClanChatPlugin extends Plugin @Override public void shutDown() { - eventBus.unregister(this); - clanMembers.clear(); removeClanCounter(); resetClanChats(); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(ClanMemberJoined.class, this, this::onClanMemberJoined); - eventBus.subscribe(ClanMemberLeft.class, this, this::onClanMemberLeft); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(VarClientStrChanged.class, this, this::onVarClientStrChanged); - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(PlayerSpawned.class, this, this::onPlayerSpawned); - eventBus.subscribe(PlayerDespawned.class, this, this::onPlayerDespawned); - eventBus.subscribe(ClanChanged.class, this, this::onClanChanged); - eventBus.subscribe(ScriptCallbackEvent.class, this, this::onScriptCallbackEvent); - } - + @Subscribe private void onConfigChanged(ConfigChanged configChanged) { if (configChanged.getGroup().equals("clanchat")) @@ -207,6 +185,7 @@ public class ClanChatPlugin extends Plugin } } + @Subscribe private void onClanMemberJoined(ClanMemberJoined event) { final ClanMember member = event.getMember(); @@ -252,6 +231,7 @@ public class ClanChatPlugin extends Plugin } } + @Subscribe private void onClanMemberLeft(ClanMemberLeft event) { final ClanMember member = event.getMember(); @@ -295,6 +275,7 @@ public class ClanChatPlugin extends Plugin } } + @Subscribe private void onGameTick(GameTick gameTick) { if (client.getGameState() != GameState.LOGGED_IN) @@ -434,6 +415,7 @@ public class ClanChatPlugin extends Plugin clanJoinMessages.addLast(clanJoinMessage); } + @Subscribe private void onVarClientStrChanged(VarClientStrChanged strChanged) { if (strChanged.getIndex() == VarClientStr.RECENT_CLAN_CHAT.getIndex() && this.recentChats) @@ -442,6 +424,7 @@ public class ClanChatPlugin extends Plugin } } + @Subscribe private void onChatMessage(ChatMessage chatMessage) { if (client.getGameState() != GameState.LOADING && client.getGameState() != GameState.LOGGED_IN) @@ -483,6 +466,7 @@ public class ClanChatPlugin extends Plugin insertClanRankIcon(chatMessage); } + @Subscribe private void onGameStateChanged(GameStateChanged state) { GameState gameState = state.getGameState(); @@ -496,6 +480,7 @@ public class ClanChatPlugin extends Plugin } } + @Subscribe private void onPlayerSpawned(PlayerSpawned event) { final Player local = client.getLocalPlayer(); @@ -508,6 +493,7 @@ public class ClanChatPlugin extends Plugin } } + @Subscribe private void onPlayerDespawned(PlayerDespawned event) { if (clanMembers.remove(event.getPlayer()) && clanMembers.isEmpty()) @@ -516,6 +502,7 @@ public class ClanChatPlugin extends Plugin } } + @Subscribe private void onClanChanged(ClanChanged event) { if (event.isJoined()) @@ -531,6 +518,7 @@ public class ClanChatPlugin extends Plugin activityBuffer.clear(); } + @Subscribe private void onScriptCallbackEvent(ScriptCallbackEvent scriptCallbackEvent) { if (!scriptCallbackEvent.getEventName().equalsIgnoreCase("clanchatInput")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/clanmanmode/ClanManModePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/clanmanmode/ClanManModePlugin.java index 4daa72d926..43cce0cd77 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/clanmanmode/ClanManModePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/clanmanmode/ClanManModePlugin.java @@ -17,7 +17,7 @@ import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -34,6 +34,13 @@ import net.runelite.client.ui.overlay.OverlayManager; @Singleton public class ClanManModePlugin extends Plugin { + final Map clan = new HashMap<>(); + int wildernessLevel; + int clanmin; + int clanmax; + int inwildy; + int ticks; + @Inject private OverlayManager overlayManager; @@ -52,9 +59,6 @@ public class ClanManModePlugin extends Plugin @Inject private Client client; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) private boolean highlightAttackable; @Getter(AccessLevel.PACKAGE) @@ -92,29 +96,19 @@ public class ClanManModePlugin extends Plugin return configManager.getConfig(ClanManModeConfig.class); } - int wildernessLevel; - int clanmin; - int clanmax; - int inwildy; - int ticks; - final Map clan = new HashMap<>(); - @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); - + overlayManager.add(ClanManModeOverlay); overlayManager.add(ClanManModeTileOverlay); overlayManager.add(ClanManModeMinimapOverlay); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(ClanManModeOverlay); overlayManager.remove(ClanManModeTileOverlay); overlayManager.remove(ClanManModeMinimapOverlay); @@ -126,23 +120,18 @@ public class ClanManModePlugin extends Plugin inwildy = 0; } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - } - + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!"clanmanmode".equals(event.getGroup())) { return; } - + updateConfig(); } + @Subscribe private void onGameStateChanged(GameStateChanged gameStateChanged) { if (gameStateChanged.getGameState() == GameState.LOGIN_SCREEN || gameStateChanged.getGameState() == GameState.HOPPING) @@ -151,6 +140,7 @@ public class ClanManModePlugin extends Plugin } } + @Subscribe private void onGameTick(GameTick event) { ticks++; @@ -170,7 +160,7 @@ public class ClanManModePlugin extends Plugin clanmax = Collections.max(clan.values()); } } - + private void updateConfig() { this.highlightAttackable = config.highlightAttackable(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/clanmanmode/ClanManModeService.java b/runelite-client/src/main/java/net/runelite/client/plugins/clanmanmode/ClanManModeService.java index 02ccf87b7c..6ee96df85d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/clanmanmode/ClanManModeService.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/clanmanmode/ClanManModeService.java @@ -99,7 +99,7 @@ public class ClanManModeService consumer.accept(player, plugin.getGetClanMemberColor()); } if (plugin.isHighlightAttacked() && interactors.containsKey(player.getName())) - { + { String attackername = interactors.get(player.getName()); boolean found = false; for (Player attacker : client.getPlayers()) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java index 59d6d5acd0..3d1696fee6 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java @@ -40,6 +40,7 @@ import java.util.List; import java.util.Objects; import javax.inject.Inject; import javax.inject.Singleton; +import lombok.AccessLevel; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import net.runelite.api.ChatMessageType; @@ -60,7 +61,6 @@ import net.runelite.api.TileObject; import net.runelite.api.coords.LocalPoint; import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.ChatMessage; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.ItemContainerChanged; @@ -68,11 +68,13 @@ import net.runelite.api.events.MenuOptionClicked; import net.runelite.api.events.NpcDespawned; import net.runelite.api.events.NpcSpawned; import net.runelite.api.events.WidgetLoaded; +import net.runelite.api.util.Text; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetID; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -101,7 +103,6 @@ import net.runelite.client.ui.overlay.components.TextComponent; import net.runelite.client.ui.overlay.worldmap.WorldMapPointManager; import net.runelite.client.util.ImageUtil; import net.runelite.client.util.ItemUtil; -import net.runelite.api.util.Text; @PluginDescriptor( name = "Clue Scroll", @@ -122,24 +123,24 @@ public class ClueScrollPlugin extends Plugin 13150, 9011, 13151, 9012 }; - - @Getter - private ClueScroll clue; - - @Getter + @Getter(AccessLevel.PUBLIC) private final List npcsToMark = new ArrayList<>(); - @Getter + @Getter(AccessLevel.PUBLIC) private final List objectsToMark = new ArrayList<>(); + private final TextComponent textComponent = new TextComponent(); - @Getter + @Getter(AccessLevel.PACKAGE) + private ClueScroll clue; + + @Getter(AccessLevel.PUBLIC) private Item[] equippedItems; - @Getter + @Getter(AccessLevel.PUBLIC) private Item[] inventoryItems; @Inject - @Getter + @Getter(AccessLevel.PUBLIC) private Client client; @Inject @@ -166,18 +167,37 @@ public class ClueScrollPlugin extends Plugin @Inject private WorldMapPointManager worldMapPointManager; - @Inject - private EventBus eventBus; - private BufferedImage emoteImage; private BufferedImage mapArrow; private Integer clueItemId; private boolean worldMapPointsSet = false; - - private final TextComponent textComponent = new TextComponent(); - private boolean displayHintArrows; + /** + * Translate a coordinate either between overworld and real, or real and overworld + * + * @param worldPoint + * @param toOverworld whether to convert to overworld coordinates, or to real coordinates + * @return + */ + public static WorldPoint getMirrorPoint(WorldPoint worldPoint, boolean toOverworld) + { + int region = worldPoint.getRegionID(); + for (int i = 0; i < REGION_MIRRORS.length; i += 2) + { + int real = REGION_MIRRORS[i]; + int overworld = REGION_MIRRORS[i + 1]; + + // Test against what we are converting from + if (region == (toOverworld ? real : overworld)) + { + return WorldPoint.fromRegion(toOverworld ? overworld : real, + worldPoint.getRegionX(), worldPoint.getRegionY(), worldPoint.getPlane()); + } + } + return worldPoint; + } + @Provides ClueScrollConfig getConfig(ConfigManager configManager) { @@ -191,9 +211,8 @@ public class ClueScrollPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { - addSubscriptions(); this.displayHintArrows = config.displayHintArrows(); overlayManager.add(clueScrollOverlay); @@ -203,10 +222,8 @@ public class ClueScrollPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(clueScrollOverlay); overlayManager.remove(clueScrollEmoteOverlay); overlayManager.remove(clueScrollWorldOverlay); @@ -217,19 +234,7 @@ public class ClueScrollPlugin extends Plugin resetClue(true); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - eventBus.subscribe(MenuOptionClicked.class, this, this::onMenuOptionClicked); - eventBus.subscribe(ItemContainerChanged.class, this, this::onItemContainerChanged); - eventBus.subscribe(NpcSpawned.class, this, this::onNpcSpawned); - eventBus.subscribe(NpcDespawned.class, this, this::onNpcDespawned); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(WidgetLoaded.class, this, this::onWidgetLoaded); - } - + @Subscribe private void onChatMessage(ChatMessage event) { if (event.getType() != ChatMessageType.GAMEMESSAGE && event.getType() != ChatMessageType.SPAM) @@ -255,6 +260,7 @@ public class ClueScrollPlugin extends Plugin } } + @Subscribe private void onMenuOptionClicked(final MenuOptionClicked event) { if ("read".equalsIgnoreCase(event.getOption())) @@ -269,6 +275,7 @@ public class ClueScrollPlugin extends Plugin } } + @Subscribe private void onItemContainerChanged(final ItemContainerChanged event) { if (event.getItemContainer() == client.getItemContainer(InventoryID.EQUIPMENT)) @@ -309,12 +316,14 @@ public class ClueScrollPlugin extends Plugin } } + @Subscribe private void onNpcSpawned(final NpcSpawned event) { final NPC npc = event.getNpc(); checkClueNPCs(clue, npc); } + @Subscribe private void onNpcDespawned(final NpcDespawned event) { final boolean removed = npcsToMark.remove(event.getNpc()); @@ -333,6 +342,7 @@ public class ClueScrollPlugin extends Plugin } } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("cluescroll")) @@ -345,6 +355,7 @@ public class ClueScrollPlugin extends Plugin } } + @Subscribe private void onGameStateChanged(final GameStateChanged event) { if (event.getGameState() == GameState.LOGIN_SCREEN) @@ -353,6 +364,7 @@ public class ClueScrollPlugin extends Plugin } } + @Subscribe private void onGameTick(final GameTick event) { objectsToMark.clear(); @@ -431,6 +443,7 @@ public class ClueScrollPlugin extends Plugin updateClue(findClueScroll()); } + @Subscribe private void onWidgetLoaded(WidgetLoaded event) { if (event.getGroupId() < WidgetID.BEGINNER_CLUE_MAP_CHAMPIONS_GUILD @@ -844,29 +857,4 @@ public class ClueScrollPlugin extends Plugin newScroll ); } - - /** - * Translate a coordinate either between overworld and real, or real and overworld - * - * @param worldPoint - * @param toOverworld whether to convert to overworld coordinates, or to real coordinates - * @return - */ - public static WorldPoint getMirrorPoint(WorldPoint worldPoint, boolean toOverworld) - { - int region = worldPoint.getRegionID(); - for (int i = 0; i < REGION_MIRRORS.length; i += 2) - { - int real = REGION_MIRRORS[i]; - int overworld = REGION_MIRRORS[i + 1]; - - // Test against what we are converting from - if (region == (toOverworld ? real : overworld)) - { - return WorldPoint.fromRegion(toOverworld ? overworld : real, - worldPoint.getRegionX(), worldPoint.getRegionY(), worldPoint.getPlane()); - } - } - return worldPoint; - } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/AnagramClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/AnagramClue.java index 5c8e38e72a..35abffe0ee 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/AnagramClue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/AnagramClue.java @@ -28,6 +28,7 @@ import com.google.common.collect.ImmutableSet; import java.awt.Color; import java.awt.Graphics2D; import java.util.Set; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.NPC; import net.runelite.api.ObjectID; @@ -44,7 +45,7 @@ import net.runelite.client.ui.overlay.components.LineComponent; import net.runelite.client.ui.overlay.components.PanelComponent; import net.runelite.client.ui.overlay.components.TitleComponent; -@Getter +@Getter(AccessLevel.PUBLIC) public class AnagramClue extends ClueScroll implements TextClueScroll, NpcClueScroll, ObjectClueScroll { private static final String ANAGRAM_TEXT = "This anagram reveals who to speak to next: "; @@ -273,12 +274,12 @@ public class AnagramClue extends ClueScroll implements TextClueScroll, NpcClueSc @Override public String[] getNpcs() { - return new String[] {npc}; + return new String[]{npc}; } @Override public int[] getObjectIds() { - return new int[] {objectId}; + return new int[]{objectId}; } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/BeginnerMapClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/BeginnerMapClue.java index caaeaeeb61..0e84f596c0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/BeginnerMapClue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/BeginnerMapClue.java @@ -25,11 +25,12 @@ package net.runelite.client.plugins.cluescrolls.clues; import com.google.common.collect.ImmutableList; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.coords.WorldPoint; import net.runelite.api.widgets.WidgetID; -@Getter +@Getter(AccessLevel.PUBLIC) public class BeginnerMapClue extends MapClue implements LocationClueScroll { private static final ImmutableList CLUES = ImmutableList.of( diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CipherClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CipherClue.java index e59e25eb56..0ed8b0652a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CipherClue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CipherClue.java @@ -28,6 +28,7 @@ import com.google.common.collect.ImmutableSet; import java.awt.Color; import java.awt.Graphics2D; import java.util.Set; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.NPC; import net.runelite.api.coords.WorldPoint; @@ -39,7 +40,7 @@ import net.runelite.client.ui.overlay.components.LineComponent; import net.runelite.client.ui.overlay.components.PanelComponent; import net.runelite.client.ui.overlay.components.TitleComponent; -@Getter +@Getter(AccessLevel.PUBLIC) public class CipherClue extends ClueScroll implements TextClueScroll, NpcClueScroll, LocationClueScroll { private static final Set CLUES = ImmutableSet.of( @@ -140,6 +141,6 @@ public class CipherClue extends ClueScroll implements TextClueScroll, NpcClueScr public String[] getNpcs() { - return new String[] {npc}; + return new String[]{npc}; } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CoordinateClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CoordinateClue.java index e085efc313..9e90c58169 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CoordinateClue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CoordinateClue.java @@ -28,6 +28,7 @@ import com.google.common.collect.ImmutableMap; import java.awt.Color; import java.awt.Graphics2D; import javax.annotation.Nullable; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.coords.LocalPoint; import net.runelite.api.coords.WorldPoint; @@ -37,7 +38,7 @@ import net.runelite.client.ui.overlay.components.LineComponent; import net.runelite.client.ui.overlay.components.PanelComponent; import net.runelite.client.ui.overlay.components.TitleComponent; -@Getter +@Getter(AccessLevel.PUBLIC) public class CoordinateClue extends ClueScroll implements TextClueScroll, LocationClueScroll { private static final ImmutableMap CLUES = new ImmutableMap.Builder() @@ -127,7 +128,7 @@ public class CoordinateClue extends ClueScroll implements TextClueScroll, Locati .put(new WorldPoint(3058, 3884, 0), "Wilderness. Near runite ore north of Lava Maze.") .put(new WorldPoint(3290, 3889, 0), "Wilderness. Demonic Ruins.") .put(new WorldPoint(3770, 3897, 0), "Small Island north of Fossil Island.") - .put(new WorldPoint(2505, 3899, 0), "Small Island north-east of Miscellania (AJS).") + .put(new WorldPoint(2505, 3899, 0), "Small Island north-west of Miscellania (AJS).") .put(new WorldPoint(3285, 3942, 0), "Wilderness. Rogues' Castle.") .put(new WorldPoint(3159, 3959, 0), "Wilderness. North of Deserted Keep, west of Resource Area.") .put(new WorldPoint(3039, 3960, 0), "Wilderness. Pirates' Hideout.") @@ -206,7 +207,7 @@ public class CoordinateClue extends ClueScroll implements TextClueScroll, Locati @Nullable private final WorldPoint mirrorLocation; - public CoordinateClue(String text, WorldPoint location, WorldPoint mirrorLocation) + public CoordinateClue(String text, WorldPoint location, @Nullable WorldPoint mirrorLocation) { this.text = text; this.location = location; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CrypticClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CrypticClue.java index 5523ea04db..210e54d4a0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CrypticClue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CrypticClue.java @@ -28,6 +28,7 @@ import com.google.common.collect.ImmutableSet; import java.awt.Color; import java.awt.Graphics2D; import java.util.Set; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.NPC; import static net.runelite.api.NullObjectID.NULL_1293; @@ -47,7 +48,7 @@ import net.runelite.client.ui.overlay.components.LineComponent; import net.runelite.client.ui.overlay.components.PanelComponent; import net.runelite.client.ui.overlay.components.TitleComponent; -@Getter +@Getter(AccessLevel.PUBLIC) public class CrypticClue extends ClueScroll implements TextClueScroll, NpcClueScroll, ObjectClueScroll { public static final Set CLUES = ImmutableSet.of( @@ -116,7 +117,7 @@ public class CrypticClue extends ClueScroll implements TextClueScroll, NpcClueSc new CrypticClue("Probably filled with wizards socks.", "Wizard", DRAWERS_350, new WorldPoint(3116, 9562, 0), "Search the drawers in the basement of the Wizard's Tower south of Draynor Village. Kill one of the Wizards for the key. Fairy ring DIS"), new CrypticClue("Even the seers say this clue goes right over their heads.", CRATE_14934, new WorldPoint(2707, 3488, 2), "Search the crate on the Seers Agility Course in Seers Village"), new CrypticClue("Speak to a Wyse man.", "Wyson the gardener", new WorldPoint(3026, 3378, 0), "Talk to Wyson the gardener at Falador Park."), - new CrypticClue("You'll need to look for a town with a central fountain. Look for a locked chest in the town's chapel.", "Monk" , CLOSED_CHEST_5108, new WorldPoint(3256, 3487, 0), "Search the chest by the stairs in the Varrock church. Kill a Monk in Ardougne Monastery to obtain the key."), + new CrypticClue("You'll need to look for a town with a central fountain. Look for a locked chest in the town's chapel.", "Monk", CLOSED_CHEST_5108, new WorldPoint(3256, 3487, 0), "Search the chest by the stairs in the Varrock church. Kill a Monk in Ardougne Monastery to obtain the key."), new CrypticClue("Talk to Ambassador Spanfipple in the White Knights Castle.", "Ambassador Spanfipple", new WorldPoint(2979, 3340, 0), "Ambassador Spanfipple can be found roaming on the first floor of the White Knights Castle."), new CrypticClue("Mine was the strangest birth under the sun. I left the crimson sack, yet life had not begun. Entered the world, and yet was seen by none.", new WorldPoint(2832, 9586, 0), "Inside Karamja Volcano, dig directly underneath the Red spiders' eggs respawn."), new CrypticClue("Search for a crate in Varrock Castle.", CRATE_5113, new WorldPoint(3224, 3492, 0), "Search the crate in the corner of the kitchen in Varrock Castle."), @@ -202,7 +203,7 @@ public class CrypticClue extends ClueScroll implements TextClueScroll, NpcClueSc new CrypticClue("Search the drawers on the first floor of a building overlooking Ardougne's Market.", DRAWERS_352, new WorldPoint(2657, 3322, 1), "Climb the ladder in the house north of the market."), new CrypticClue("'A bag belt only?', he asked his balding brothers.", "Abbot Langley", new WorldPoint(3058, 3487, 0), "Talk-to Abbot Langley in Monastery west of Edgeville"), new CrypticClue("Search the drawers upstairs in Falador's shield shop.", DRAWERS, new WorldPoint(2971, 3386, 1), "Cassie's Shield Shop at the northern Falador entrance."), - new CrypticClue("Go to this building to be illuminated, and check the drawers while you are there.", "Market Guard", DRAWERS_350 , new WorldPoint(2512, 3641, 1), "Search the drawers in the first floor of the Lighthouse. Kill a Rellekka marketplace guard to obtain the key."), + new CrypticClue("Go to this building to be illuminated, and check the drawers while you are there.", "Market Guard", DRAWERS_350, new WorldPoint(2512, 3641, 1), "Search the drawers in the first floor of the Lighthouse. Kill a Rellekka marketplace guard to obtain the key."), new CrypticClue("Dig near some giant mushrooms, behind the Grand Tree.", new WorldPoint(2458, 3504, 0), "Dig near the red mushrooms northwest of the Grand Tree."), new CrypticClue("Pentagrams and demons, burnt bones and remains, I wonder what the blood contains.", new WorldPoint(3297, 3890, 0), "Dig under the blood rune spawn next to the Demonic Ruins."), new CrypticClue("Search the drawers above Varrock's shops.", DRAWERS_7194, new WorldPoint(3206, 3419, 1), "Located upstairs in Thessalia's Fine Clothes shop in Varrock."), @@ -447,7 +448,7 @@ public class CrypticClue extends ClueScroll implements TextClueScroll, NpcClueSc for (TileObject gameObject : plugin.getObjectsToMark()) { OverlayUtil.renderHoverableArea(graphics, gameObject.getClickbox(), mousePosition, - CLICKBOX_FILL_COLOR, CLICKBOX_BORDER_COLOR, CLICKBOX_HOVER_BORDER_COLOR); + CLICKBOX_FILL_COLOR, CLICKBOX_BORDER_COLOR, CLICKBOX_HOVER_BORDER_COLOR); OverlayUtil.renderImageLocation(plugin.getClient(), graphics, gameObject.getLocalLocation(), plugin.getClueScrollImage(), IMAGE_Z_OFFSET); } @@ -471,12 +472,12 @@ public class CrypticClue extends ClueScroll implements TextClueScroll, NpcClueSc @Override public int[] getObjectIds() { - return new int[] {objectId}; + return new int[]{objectId}; } @Override public String[] getNpcs() { - return new String[] {npc}; + return new String[]{npc}; } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/EmoteClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/EmoteClue.java index dff0c2f105..108e080b88 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/EmoteClue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/EmoteClue.java @@ -31,10 +31,11 @@ import java.awt.Polygon; import java.util.Set; import javax.annotation.Nonnull; import javax.annotation.Nullable; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.Client; -import static net.runelite.api.EquipmentInventorySlot.*; import static net.runelite.api.EquipmentInventorySlot.LEGS; +import static net.runelite.api.EquipmentInventorySlot.*; import net.runelite.api.Item; import net.runelite.api.ItemID; import static net.runelite.api.ItemID.*; @@ -45,19 +46,23 @@ import net.runelite.api.coords.WorldPoint; import static net.runelite.client.plugins.cluescrolls.ClueScrollOverlay.TITLED_CONTENT_COLOR; import net.runelite.client.plugins.cluescrolls.ClueScrollPlugin; import net.runelite.client.plugins.cluescrolls.clues.emote.Emote; -import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.*; import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.BULL_ROARER; +import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.*; import net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit; -import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.*; import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.SHANTAY_PASS; +import static net.runelite.client.plugins.cluescrolls.clues.emote.STASHUnit.*; import net.runelite.client.plugins.cluescrolls.clues.item.ItemRequirement; -import static net.runelite.client.plugins.cluescrolls.clues.item.ItemRequirements.*; +import static net.runelite.client.plugins.cluescrolls.clues.item.ItemRequirements.all; +import static net.runelite.client.plugins.cluescrolls.clues.item.ItemRequirements.any; +import static net.runelite.client.plugins.cluescrolls.clues.item.ItemRequirements.emptySlot; +import static net.runelite.client.plugins.cluescrolls.clues.item.ItemRequirements.item; +import static net.runelite.client.plugins.cluescrolls.clues.item.ItemRequirements.range; import net.runelite.client.ui.overlay.OverlayUtil; import net.runelite.client.ui.overlay.components.LineComponent; import net.runelite.client.ui.overlay.components.PanelComponent; import net.runelite.client.ui.overlay.components.TitleComponent; -@Getter +@Getter(AccessLevel.PUBLIC) public class EmoteClue extends ClueScroll implements TextClueScroll, LocationClueScroll { private static final Set CLUES = ImmutableSet.of( @@ -195,7 +200,7 @@ public class EmoteClue extends ClueScroll implements TextClueScroll, LocationClu this(text, locationName, stashUnit, location, firstEmote, null, itemRequirements); } - private EmoteClue(String text, String locationName, STASHUnit stashUnit, WorldPoint location, Emote firstEmote, Emote secondEmote, @Nonnull ItemRequirement... itemRequirements) + private EmoteClue(String text, String locationName, @Nullable STASHUnit stashUnit, WorldPoint location, Emote firstEmote, Emote secondEmote, @Nonnull ItemRequirement... itemRequirements) { this.text = text; this.locationName = locationName; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/FairyRingClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/FairyRingClue.java index 6fc915db54..fb4662cc22 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/FairyRingClue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/FairyRingClue.java @@ -28,6 +28,7 @@ import com.google.common.collect.ImmutableSet; import java.awt.Color; import java.awt.Graphics2D; import java.util.Set; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.coords.LocalPoint; import net.runelite.api.coords.WorldPoint; @@ -38,7 +39,7 @@ import net.runelite.client.ui.overlay.components.LineComponent; import net.runelite.client.ui.overlay.components.PanelComponent; import net.runelite.client.ui.overlay.components.TitleComponent; -@Getter +@Getter(AccessLevel.PUBLIC) public class FairyRingClue extends ClueScroll implements TextClueScroll, LocationClueScroll { private static final Set CLUES = ImmutableSet.of( diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/FaloTheBardClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/FaloTheBardClue.java index 8350483589..bbb1a4bf8a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/FaloTheBardClue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/FaloTheBardClue.java @@ -29,11 +29,12 @@ import java.awt.Color; import java.awt.Graphics2D; import java.util.List; import javax.annotation.Nonnull; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.Item; +import static net.runelite.api.ItemID.*; import net.runelite.api.NPC; import net.runelite.api.coords.WorldPoint; -import static net.runelite.api.ItemID.*; import static net.runelite.client.plugins.cluescrolls.ClueScrollOverlay.TITLED_CONTENT_COLOR; import net.runelite.client.plugins.cluescrolls.ClueScrollPlugin; import static net.runelite.client.plugins.cluescrolls.ClueScrollWorldOverlay.IMAGE_Z_OFFSET; @@ -46,7 +47,7 @@ import net.runelite.client.ui.overlay.components.LineComponent; import net.runelite.client.ui.overlay.components.PanelComponent; import net.runelite.client.ui.overlay.components.TitleComponent; -@Getter +@Getter(AccessLevel.PUBLIC) public class FaloTheBardClue extends ClueScroll implements TextClueScroll, NpcClueScroll { private static final List CLUES = ImmutableList.of( @@ -156,7 +157,7 @@ public class FaloTheBardClue extends ClueScroll implements TextClueScroll, NpcCl @Override public String[] getNpcs() { - return new String[] {FALO_THE_BARD}; + return new String[]{FALO_THE_BARD}; } public static FaloTheBardClue forText(String text) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/HotColdClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/HotColdClue.java index f88a428caa..6c1b1f248c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/HotColdClue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/HotColdClue.java @@ -35,6 +35,7 @@ import java.util.Map; import java.util.Set; import java.util.stream.Collectors; import javax.annotation.Nullable; +import lombok.AccessLevel; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.extern.slf4j.Slf4j; @@ -54,8 +55,8 @@ import net.runelite.client.ui.overlay.components.LineComponent; import net.runelite.client.ui.overlay.components.PanelComponent; import net.runelite.client.ui.overlay.components.TitleComponent; -@EqualsAndHashCode(callSuper = false, exclude = { "hotColdSolver", "location" }) -@Getter +@EqualsAndHashCode(callSuper = false, exclude = {"hotColdSolver", "location"}) +@Getter(AccessLevel.PUBLIC) @Slf4j public class HotColdClue extends ClueScroll implements LocationClueScroll, LocationsClueScroll, TextClueScroll, NpcClueScroll { @@ -68,6 +69,10 @@ public class HotColdClue extends ClueScroll implements LocationClueScroll, Locat "Jorral", "Speak to Jorral to receive a strange device.", new WorldPoint(2436, 3347, 0)); + private static final HotColdClue MASTER_CLUE_LEAGUE = new HotColdClue("Buried beneath the ground, who knows where it's found. Lucky for you, A man called Watson may have a clue.", + "Watson", + "Speak to Watson to receive a strange device.", + new WorldPoint(1645, 3572, 0)); private final String text; private final String npc; @@ -89,6 +94,11 @@ public class HotColdClue extends ClueScroll implements LocationClueScroll, Locat MASTER_CLUE.reset(); return MASTER_CLUE; } + else if (MASTER_CLUE_LEAGUE.text.equalsIgnoreCase(text)) + { + MASTER_CLUE_LEAGUE.reset(); + return MASTER_CLUE_LEAGUE; + } return null; } @@ -113,7 +123,7 @@ public class HotColdClue extends ClueScroll implements LocationClueScroll, Locat if (hotColdSolver.getLastWorldPoint() == null) { - return new WorldPoint[] {npcLocation}; + return new WorldPoint[]{npcLocation}; } else { @@ -272,11 +282,11 @@ public class HotColdClue extends ClueScroll implements LocationClueScroll, Locat final Set temperatureSet; - if (this.equals(BEGINNER_CLUE)) + if (this == BEGINNER_CLUE) { temperatureSet = HotColdTemperature.BEGINNER_HOT_COLD_TEMPERATURES; } - else if (this.equals(MASTER_CLUE)) + else if (this == MASTER_CLUE || this == MASTER_CLUE_LEAGUE) { temperatureSet = HotColdTemperature.MASTER_HOT_COLD_TEMPERATURES; } @@ -300,8 +310,9 @@ public class HotColdClue extends ClueScroll implements LocationClueScroll, Locat return false; } - if ((this.equals(BEGINNER_CLUE) && temperature == HotColdTemperature.BEGINNER_VISIBLY_SHAKING) - || (this.equals(MASTER_CLUE) && temperature == HotColdTemperature.MASTER_VISIBLY_SHAKING)) + boolean master = this == MASTER_CLUE || this == MASTER_CLUE_LEAGUE; + if ((this == BEGINNER_CLUE && temperature == HotColdTemperature.BEGINNER_VISIBLY_SHAKING) + || (master && temperature == HotColdTemperature.MASTER_VISIBLY_SHAKING)) { markFinalSpot(localWorld); } @@ -327,11 +338,11 @@ public class HotColdClue extends ClueScroll implements LocationClueScroll, Locat { final boolean isBeginner; - if (this.equals(BEGINNER_CLUE)) + if (this == BEGINNER_CLUE) { isBeginner = true; } - else if (this.equals(MASTER_CLUE)) + else if (this == MASTER_CLUE || this == MASTER_CLUE_LEAGUE) { isBeginner = false; } @@ -356,6 +367,6 @@ public class HotColdClue extends ClueScroll implements LocationClueScroll, Locat public String[] getNpcs() { - return new String[] {npc}; + return new String[]{npc}; } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/MapClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/MapClue.java index e3b6a3d098..87cd2c5c31 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/MapClue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/MapClue.java @@ -28,6 +28,7 @@ import com.google.common.collect.ImmutableSet; import java.awt.Color; import java.awt.Graphics2D; import java.util.Set; +import lombok.AccessLevel; import lombok.Getter; import static net.runelite.api.ItemID.*; import net.runelite.api.ObjectDefinition; @@ -49,7 +50,7 @@ import net.runelite.client.ui.overlay.components.LineComponent; import net.runelite.client.ui.overlay.components.PanelComponent; import net.runelite.client.ui.overlay.components.TitleComponent; -@Getter +@Getter(AccessLevel.PUBLIC) public class MapClue extends ClueScroll implements ObjectClueScroll { private static final Set CLUES = ImmutableSet.of( @@ -204,6 +205,6 @@ public class MapClue extends ClueScroll implements ObjectClueScroll public int[] getObjectIds() { - return new int[] {objectId}; + return new int[]{objectId}; } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/MusicClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/MusicClue.java index cc27dabbbb..32e9ed61f9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/MusicClue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/MusicClue.java @@ -42,7 +42,7 @@ import net.runelite.client.ui.overlay.components.PanelComponent; import net.runelite.client.ui.overlay.components.TitleComponent; @AllArgsConstructor(access = AccessLevel.PRIVATE) -@Getter +@Getter(AccessLevel.PUBLIC) public class MusicClue extends ClueScroll implements NpcClueScroll { private static final WorldPoint LOCATION = new WorldPoint(2990, 3384, 0); @@ -91,7 +91,7 @@ public class MusicClue extends ClueScroll implements NpcClueScroll @Override public String[] getNpcs() { - return new String[] {CECILIA}; + return new String[]{CECILIA}; } public static MusicClue forText(String text) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/SkillChallengeClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/SkillChallengeClue.java index ced104cc30..7da0669dcd 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/SkillChallengeClue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/SkillChallengeClue.java @@ -25,6 +25,12 @@ package net.runelite.client.plugins.cluescrolls.clues; import com.google.common.collect.ImmutableSet; +import java.awt.Color; +import java.awt.Graphics2D; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; @@ -32,28 +38,28 @@ import net.runelite.api.EquipmentInventorySlot; import net.runelite.api.Item; import net.runelite.api.ItemID; import net.runelite.api.NPC; +import static net.runelite.client.plugins.cluescrolls.ClueScrollOverlay.TITLED_CONTENT_COLOR; import net.runelite.client.plugins.cluescrolls.ClueScrollPlugin; +import static net.runelite.client.plugins.cluescrolls.ClueScrollWorldOverlay.IMAGE_Z_OFFSET; import net.runelite.client.plugins.cluescrolls.clues.item.AnyRequirementCollection; -import static net.runelite.client.plugins.cluescrolls.clues.item.ItemRequirements.*; import net.runelite.client.plugins.cluescrolls.clues.item.ItemRequirement; +import static net.runelite.client.plugins.cluescrolls.clues.item.ItemRequirements.all; +import static net.runelite.client.plugins.cluescrolls.clues.item.ItemRequirements.any; +import static net.runelite.client.plugins.cluescrolls.clues.item.ItemRequirements.emptySlot; +import static net.runelite.client.plugins.cluescrolls.clues.item.ItemRequirements.item; +import static net.runelite.client.plugins.cluescrolls.clues.item.ItemRequirements.range; +import static net.runelite.client.plugins.cluescrolls.clues.item.ItemRequirements.xOfItem; import net.runelite.client.plugins.cluescrolls.clues.item.SingleItemRequirement; import net.runelite.client.ui.overlay.OverlayUtil; import net.runelite.client.ui.overlay.components.LineComponent; import net.runelite.client.ui.overlay.components.PanelComponent; import net.runelite.client.ui.overlay.components.TitleComponent; -import java.awt.Color; -import java.awt.Graphics2D; -import java.util.ArrayList; -import java.util.List; -import java.util.Set; -import static net.runelite.client.plugins.cluescrolls.ClueScrollOverlay.TITLED_CONTENT_COLOR; -import static net.runelite.client.plugins.cluescrolls.ClueScrollWorldOverlay.IMAGE_Z_OFFSET; -@Getter +@Getter(AccessLevel.PUBLIC) public class SkillChallengeClue extends ClueScroll implements NpcClueScroll { @AllArgsConstructor - @Getter + @Getter(AccessLevel.PRIVATE) enum ChallengeType { CHARLIE("Charlie the Tramp", "Southern Entrance to Varrock"), @@ -124,20 +130,20 @@ public class SkillChallengeClue extends ClueScroll implements NpcClueScroll any("Earth Rune x15", xOfItem(ItemID.EARTH_RUNE, 15), xOfItem(ItemID.DUST_RUNE, 15), xOfItem(ItemID.MUD_RUNE, 15), xOfItem(ItemID.LAVA_RUNE, 15), item(ItemID.STAFF_OF_EARTH), item(ItemID.EARTH_BATTLESTAFF), item(ItemID.MYSTIC_EARTH_STAFF), item(ItemID.MUD_BATTLESTAFF), item(ItemID.MYSTIC_MUD_STAFF), item(ItemID.DUST_BATTLESTAFF), item(ItemID.MYSTIC_DUST_STAFF), item(ItemID.LAVA_BATTLESTAFF), item(ItemID.MYSTIC_LAVA_STAFF), item(ItemID.LAVA_BATTLESTAFF_21198), item(ItemID.MYSTIC_LAVA_STAFF_21200)), any("Unenchanted Dragonstone Jewellery", item(ItemID.DRAGONSTONE_RING), item(ItemID.DRAGON_NECKLACE), item(ItemID.DRAGON_BRACELET), item(ItemID.DRAGONSTONE_AMULET))), new SkillChallengeClue("Craft a nature rune.", item(ItemID.PURE_ESSENCE)), - new SkillChallengeClue("Catch a mottled eel with aerial fishing in Lake Molch.", any("Fish chunks or King worms", item(ItemID.FISH_CHUNKS), item(ItemID.KING_WORM)), emptySlot("No Gloves", EquipmentInventorySlot.GLOVES), emptySlot("No Weapon", EquipmentInventorySlot.WEAPON), emptySlot("No Shield", EquipmentInventorySlot.SHIELD)), + new SkillChallengeClue("Catch a mottled eel with aerial fishing in Lake Molch.", any("Fish chunks or King worms", item(ItemID.FISH_CHUNKS), item(ItemID.KING_WORM)), emptySlot("No Gloves", EquipmentInventorySlot.GLOVES), emptySlot("No Weapon", EquipmentInventorySlot.WEAPON), emptySlot("No Shield", EquipmentInventorySlot.SHIELD)), new SkillChallengeClue("Score a goal in skullball.", true, any("Ring of Charos", item(ItemID.RING_OF_CHAROS), item(ItemID.RING_OF_CHAROSA))), new SkillChallengeClue("Complete a lap of Ape atoll agility course.", true, any("Ninja Monkey Greegree", item(ItemID.NINJA_MONKEY_GREEGREE), item(ItemID.NINJA_MONKEY_GREEGREE_4025), item(ItemID.KRUK_MONKEY_GREEGREE))), new SkillChallengeClue("Create a super defence potion.", item(ItemID.CADANTINE_POTION_UNF), item(ItemID.WHITE_BERRIES)), new SkillChallengeClue("Steal from a chest in King Lathas' castle in East Ardougne."), new SkillChallengeClue("Craft a green d'hide body.", xOfItem(ItemID.GREEN_DRAGON_LEATHER, 3), item(ItemID.NEEDLE), item(ItemID.THREAD)), new SkillChallengeClue("String a yew longbow.", item(ItemID.YEW_LONGBOW_U), item(ItemID.BOW_STRING)), - new SkillChallengeClue("Kill a Dust Devil.", "slay a dust devil.", true, any("Facemask or Slayer Helmet", item(ItemID.FACEMASK), item(ItemID.SLAYER_HELMET), item(ItemID. SLAYER_HELMET_I), item(ItemID. BLACK_SLAYER_HELMET), item(ItemID. BLACK_SLAYER_HELMET_I), item(ItemID. PURPLE_SLAYER_HELMET), item(ItemID. PURPLE_SLAYER_HELMET_I), item(ItemID. RED_SLAYER_HELMET), item(ItemID. RED_SLAYER_HELMET_I), item(ItemID.GREEN_SLAYER_HELMET), item(ItemID. GREEN_SLAYER_HELMET_I), item(ItemID. TURQUOISE_SLAYER_HELMET), item(ItemID. TURQUOISE_SLAYER_HELMET_I), item(ItemID. HYDRA_SLAYER_HELMET), item(ItemID. HYDRA_SLAYER_HELMET_I))), + new SkillChallengeClue("Kill a Dust Devil.", "slay a dust devil.", true, any("Facemask or Slayer Helmet", item(ItemID.FACEMASK), item(ItemID.SLAYER_HELMET), item(ItemID.SLAYER_HELMET_I), item(ItemID.BLACK_SLAYER_HELMET), item(ItemID.BLACK_SLAYER_HELMET_I), item(ItemID.PURPLE_SLAYER_HELMET), item(ItemID.PURPLE_SLAYER_HELMET_I), item(ItemID.RED_SLAYER_HELMET), item(ItemID.RED_SLAYER_HELMET_I), item(ItemID.GREEN_SLAYER_HELMET), item(ItemID.GREEN_SLAYER_HELMET_I), item(ItemID.TURQUOISE_SLAYER_HELMET), item(ItemID.TURQUOISE_SLAYER_HELMET_I), item(ItemID.HYDRA_SLAYER_HELMET), item(ItemID.HYDRA_SLAYER_HELMET_I))), new SkillChallengeClue("Catch a black warlock.", item(ItemID.BUTTERFLY_JAR), any("Butterfly Net", item(ItemID.BUTTERFLY_NET), item(ItemID.MAGIC_BUTTERFLY_NET))), new SkillChallengeClue("Catch a red chinchompa.", item(ItemID.BOX_TRAP)), new SkillChallengeClue("Mine a piece of mithril ore.", ANY_PICKAXE), new SkillChallengeClue("Smith a mithril 2h sword.", item(ItemID.HAMMER), xOfItem(ItemID.MITHRIL_BAR, 3)), new SkillChallengeClue("Catch a raw shark.", ANY_HARPOON), - new SkillChallengeClue("Chop a yew tree.", ANY_AXE), + new SkillChallengeClue("Cut a yew log.", ANY_AXE), new SkillChallengeClue("Fix a magical lamp in Dorgesh-Kaan.", item(ItemID.LIGHT_ORB)), new SkillChallengeClue("Burn a yew log.", item(ItemID.YEW_LOGS), item(ItemID.TINDERBOX)), new SkillChallengeClue("Cook a swordfish", "cook a swordfish", item(ItemID.RAW_SWORDFISH)), @@ -177,7 +183,7 @@ public class SkillChallengeClue extends ClueScroll implements NpcClueScroll new SkillChallengeClue("Chop a redwood log.", "chop a redwood log whilst sporting the finest lumberjack gear.", true, ANY_AXE, all("Lumberjack outfit", item(ItemID.LUMBERJACK_HAT), item(ItemID.LUMBERJACK_TOP), item(ItemID.LUMBERJACK_LEGS), item(ItemID.LUMBERJACK_BOOTS))), new SkillChallengeClue("Craft a light orb in the Dorgesh-Kaan bank.", item(ItemID.CAVE_GOBLIN_WIRE), item(ItemID.EMPTY_LIGHT_ORB)), new SkillChallengeClue("Kill a reanimated Abyssal Demon.", "kill a reanimated abyssal.", xOfItem(ItemID.SOUL_RUNE, 4), xOfItem(ItemID.BLOOD_RUNE, 1), any("Nature Rune x4", xOfItem(ItemID.NATURE_RUNE, 4), item(ItemID.BRYOPHYTAS_STAFF)), range("Ensouled abyssal head", ItemID.ENSOULED_ABYSSAL_HEAD, ItemID.ENSOULED_ABYSSAL_HEAD_13508)), - new SkillChallengeClue("Kill a Fiyr shade inside Mort'tons shade catacombs.", any("Any Silver Shade Key", item(ItemID.SILVER_KEY_RED), item(ItemID.SILVER_KEY_BROWN), item(ItemID.SILVER_KEY_CRIMSON), item(ItemID.SILVER_KEY_BLACK), item(ItemID.SILVER_KEY_PURPLE))) + new SkillChallengeClue("Kill a Fiyr shade inside Mort'tons shade catacombs.", any("Any Silver Shade Key", item(ItemID.SILVER_KEY_RED), item(ItemID.SILVER_KEY_BROWN), item(ItemID.SILVER_KEY_CRIMSON), item(ItemID.SILVER_KEY_BLACK), item(ItemID.SILVER_KEY_PURPLE))) ); private final ChallengeType type; @@ -191,7 +197,7 @@ public class SkillChallengeClue extends ClueScroll implements NpcClueScroll private boolean challengeCompleted; // Charlie Tasks - private SkillChallengeClue(String challenge, String rawChallenge, String returnText, SingleItemRequirement returnItem, ItemRequirement ... itemRequirements) + private SkillChallengeClue(String challenge, String rawChallenge, String returnText, SingleItemRequirement returnItem, ItemRequirement... itemRequirements) { this.type = ChallengeType.CHARLIE; this.challenge = challenge; @@ -204,25 +210,25 @@ public class SkillChallengeClue extends ClueScroll implements NpcClueScroll } // Non-cryptic Sherlock Tasks - private SkillChallengeClue(String challenge, ItemRequirement ... itemRequirements) + private SkillChallengeClue(String challenge, ItemRequirement... itemRequirements) { this(challenge, challenge.toLowerCase(), itemRequirements); } // Non-cryptic Sherlock Tasks - private SkillChallengeClue(String challenge, boolean requireEquip, ItemRequirement ... itemRequirements) + private SkillChallengeClue(String challenge, boolean requireEquip, ItemRequirement... itemRequirements) { this(challenge, challenge.toLowerCase(), requireEquip, itemRequirements); } // Sherlock Tasks - private SkillChallengeClue(String challenge, String rawChallenge, ItemRequirement ... itemRequirements) + private SkillChallengeClue(String challenge, String rawChallenge, ItemRequirement... itemRequirements) { this(challenge, rawChallenge, false, itemRequirements); } // Sherlock Tasks - private SkillChallengeClue(String challenge, String rawChallenge, boolean requireEquip, ItemRequirement ... itemRequirements) + private SkillChallengeClue(String challenge, String rawChallenge, boolean requireEquip, ItemRequirement... itemRequirements) { this.type = ChallengeType.SHERLOCK; this.challenge = challenge; @@ -296,7 +302,7 @@ public class SkillChallengeClue extends ClueScroll implements NpcClueScroll } } - private static List getRequirements(ClueScrollPlugin plugin, boolean requireEquipped, ItemRequirement ... requirements) + private static List getRequirements(ClueScrollPlugin plugin, boolean requireEquipped, ItemRequirement... requirements) { List components = new ArrayList<>(); @@ -356,6 +362,6 @@ public class SkillChallengeClue extends ClueScroll implements NpcClueScroll @Override public String[] getNpcs() { - return new String[] {type.getName()}; + return new String[]{type.getName()}; } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/ThreeStepCrypticClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/ThreeStepCrypticClue.java index ffc461d470..c5cf8289e7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/ThreeStepCrypticClue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/ThreeStepCrypticClue.java @@ -32,6 +32,7 @@ import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Stream; +import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; import net.runelite.api.Client; @@ -42,15 +43,15 @@ import static net.runelite.api.ItemID.TORN_CLUE_SCROLL_PART_2; import static net.runelite.api.ItemID.TORN_CLUE_SCROLL_PART_3; import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.ItemContainerChanged; +import net.runelite.api.util.Text; import net.runelite.client.game.ItemManager; import static net.runelite.client.plugins.cluescrolls.ClueScrollOverlay.TITLED_CONTENT_COLOR; import net.runelite.client.plugins.cluescrolls.ClueScrollPlugin; import net.runelite.client.ui.overlay.components.LineComponent; import net.runelite.client.ui.overlay.components.PanelComponent; import net.runelite.client.ui.overlay.components.TitleComponent; -import net.runelite.api.util.Text; -@Getter +@Getter(AccessLevel.PUBLIC) @RequiredArgsConstructor public class ThreeStepCrypticClue extends ClueScroll implements TextClueScroll, ObjectClueScroll, NpcClueScroll, LocationsClueScroll { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/Emote.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/Emote.java index 1be5825d72..004f9fe6a2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/Emote.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/Emote.java @@ -24,10 +24,11 @@ */ package net.runelite.client.plugins.cluescrolls.clues.emote; +import lombok.AccessLevel; import lombok.Getter; import static net.runelite.api.SpriteID.*; -@Getter +@Getter(AccessLevel.PUBLIC) public enum Emote { BULL_ROARER("Bull Roarer", -1), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/STASHUnit.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/STASHUnit.java index 05874dd05b..26d397422d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/STASHUnit.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/STASHUnit.java @@ -24,11 +24,12 @@ */ package net.runelite.client.plugins.cluescrolls.clues.emote; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.NullObjectID; import net.runelite.api.coords.WorldPoint; -@Getter +@Getter(AccessLevel.PUBLIC) public enum STASHUnit { NEAR_A_SHED_IN_LUMBRIDGE_SWAMP(NullObjectID.NULL_28958, new WorldPoint(3201, 3171, 0)), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdArea.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdArea.java index 0835fba279..a73bef8900 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdArea.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdArea.java @@ -24,11 +24,12 @@ */ package net.runelite.client.plugins.cluescrolls.clues.hotcold; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; @AllArgsConstructor -@Getter +@Getter(AccessLevel.PUBLIC) public enum HotColdArea { ASGARNIA("Asgarnia"), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdLocation.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdLocation.java index 9d896d8ed7..83290d4ca1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdLocation.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdLocation.java @@ -27,20 +27,11 @@ package net.runelite.client.plugins.cluescrolls.clues.hotcold; import java.awt.Rectangle; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; import net.runelite.api.coords.WorldPoint; -import static net.runelite.client.plugins.cluescrolls.clues.hotcold.HotColdArea.ASGARNIA; -import static net.runelite.client.plugins.cluescrolls.clues.hotcold.HotColdArea.DESERT; -import static net.runelite.client.plugins.cluescrolls.clues.hotcold.HotColdArea.FELDIP_HILLS; -import static net.runelite.client.plugins.cluescrolls.clues.hotcold.HotColdArea.FREMENNIK_PROVINCE; -import static net.runelite.client.plugins.cluescrolls.clues.hotcold.HotColdArea.KANDARIN; -import static net.runelite.client.plugins.cluescrolls.clues.hotcold.HotColdArea.KARAMJA; -import static net.runelite.client.plugins.cluescrolls.clues.hotcold.HotColdArea.MISTHALIN; -import static net.runelite.client.plugins.cluescrolls.clues.hotcold.HotColdArea.MORYTANIA; -import static net.runelite.client.plugins.cluescrolls.clues.hotcold.HotColdArea.WESTERN_PROVINCE; -import static net.runelite.client.plugins.cluescrolls.clues.hotcold.HotColdArea.WILDERNESS; -import static net.runelite.client.plugins.cluescrolls.clues.hotcold.HotColdArea.ZEAH; +import static net.runelite.client.plugins.cluescrolls.clues.hotcold.HotColdArea.*; // The locations contains all hot/cold points and their descriptions according to the wiki // these central points were obtained by checking wiki location pictures against a coordinate map @@ -48,7 +39,7 @@ import static net.runelite.client.plugins.cluescrolls.clues.hotcold.HotColdArea. // calculations are done considering the 9x9 grid around the central point where the strange device shakes // because the calculations consider the 9x9 grid, slightly off-center points should still be found by the calculations @AllArgsConstructor -@Getter +@Getter(AccessLevel.PUBLIC) public enum HotColdLocation { ASGARNIA_WARRIORS(new WorldPoint(2860, 3562, 0), ASGARNIA, "North of the Warriors' Guild in Burthorpe."), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdSolver.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdSolver.java index 052fef03ea..1169e2f6c7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdSolver.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdSolver.java @@ -30,6 +30,7 @@ import java.awt.Rectangle; import java.util.Set; import javax.annotation.Nonnull; import javax.annotation.Nullable; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.coords.WorldPoint; @@ -42,7 +43,7 @@ import net.runelite.api.coords.WorldPoint; * with specific set of solution points, so this solver will filter from a provided set of possible solutions as new * signals of temperatures and temperature changes are provided. */ -@Getter +@Getter(AccessLevel.PUBLIC) public class HotColdSolver { private final Set possibleLocations; @@ -63,7 +64,7 @@ public class HotColdSolver * @param temperature The temperature of the checked point * @param temperatureChange The change of temperature of the checked point compared to the previously-checked point * @return A set of {@link HotColdLocation}s which are still possible after the filtering occurs. This return value - * is the same as would be returned by {@code getPossibleLocations()}. + * is the same as would be returned by {@code getPossibleLocations()}. */ public Set signal(@Nonnull final WorldPoint worldPoint, @Nonnull final HotColdTemperature temperature, @Nullable final HotColdTemperatureChange temperatureChange) { @@ -118,11 +119,11 @@ public class HotColdSolver * @param secondPoint Second point to test * @param rect Rectangle, whose corner points will be compared to the first and second points passed * @return {@code true} if {@code firstPoint} is closer to each of {@code rect}'s four corner points than - * {@code secondPoint}, {@code false} otherwise. + * {@code secondPoint}, {@code false} otherwise. * @see WorldPoint#distanceTo2D */ @VisibleForTesting - static boolean isFirstPointCloserRect(final WorldPoint firstPoint, final WorldPoint secondPoint, final Rectangle rect) + private static boolean isFirstPointCloserRect(final WorldPoint firstPoint, final WorldPoint secondPoint, final Rectangle rect) { final WorldPoint nePoint = new WorldPoint((rect.x + rect.width), (rect.y + rect.height), 0); @@ -156,11 +157,11 @@ public class HotColdSolver * @param secondPoint Second point to test * @param worldPoint Point to compare to the first and second points passed * @return {@code true} if {@code firstPoint} is closer to {@code worldPoint} than {@code secondPoint}, - * {@code false} otherwise. + * {@code false} otherwise. * @see WorldPoint#distanceTo2D */ @VisibleForTesting - static boolean isFirstPointCloser(final WorldPoint firstPoint, final WorldPoint secondPoint, final WorldPoint worldPoint) + private static boolean isFirstPointCloser(final WorldPoint firstPoint, final WorldPoint secondPoint, final WorldPoint worldPoint) { return firstPoint.distanceTo2D(worldPoint) < secondPoint.distanceTo2D(worldPoint); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdTemperature.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdTemperature.java index f495b1f36b..923da763e3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdTemperature.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdTemperature.java @@ -30,12 +30,13 @@ import java.util.Comparator; import java.util.List; import java.util.Set; import javax.annotation.Nullable; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; import net.runelite.api.util.Text; @AllArgsConstructor -@Getter +@Getter(AccessLevel.PUBLIC) public enum HotColdTemperature { ICE_COLD("ice cold", 500, 5000), @@ -82,9 +83,9 @@ public enum HotColdTemperature * @param temperatureSet A set of temperature values to select from * @param message A string containing a temperature value * @return The corresponding enum from the given temperature set. - *

- * Note that in cases where two temperature values in the given set are equally likely to be the given - * temperature (say, two temperatures with identical text values), the behavior is undefined. + *

+ * Note that in cases where two temperature values in the given set are equally likely to be the given + * temperature (say, two temperatures with identical text values), the behavior is undefined. */ @Nullable public static HotColdTemperature getFromTemperatureSet(final Set temperatureSet, final String message) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/item/MultipleOfItemRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/item/MultipleOfItemRequirement.java index f5e5905ab8..152840c027 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/item/MultipleOfItemRequirement.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/item/MultipleOfItemRequirement.java @@ -30,8 +30,8 @@ import net.runelite.api.ItemDefinition; public class MultipleOfItemRequirement implements ItemRequirement { - private int itemId; - private int quantity; + private final int itemId; + private final int quantity; public MultipleOfItemRequirement(int itemId, int quantity) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/combatcounter/CombatCounter.java b/runelite-client/src/main/java/net/runelite/client/plugins/combatcounter/CombatCounter.java index e568487af0..415aed3e9d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/combatcounter/CombatCounter.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/combatcounter/CombatCounter.java @@ -56,6 +56,7 @@ import net.runelite.api.events.HitsplatApplied; import net.runelite.api.kit.KitType; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -63,15 +64,15 @@ import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( - name = "Tick Counter", - description = "Count the amount of perfect combat ticks performed by each player.", - tags = {"combat", "counter", "tick"}, - type = PluginType.UTILITY, - enabledByDefault = false + name = "Tick Counter", + description = "Count the amount of perfect combat ticks performed by each player.", + tags = {"combat", "counter", "tick"}, + type = PluginType.UTILITY, + enabledByDefault = false ) @Singleton @Slf4j -public class CombatCounter extends Plugin +public class CombatCounter extends Plugin { @Inject @@ -236,7 +237,7 @@ public class CombatCounter extends Plugin ); @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); addSubscriptions(); @@ -251,7 +252,7 @@ public class CombatCounter extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { eventBus.unregister(this); @@ -266,7 +267,6 @@ public class CombatCounter extends Plugin private void addSubscriptions() { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); eventBus.subscribe(AnimationChanged.class, this, this::onAnimationChanged); eventBus.subscribe(GameTick.class, this, this::onGameTick); eventBus.subscribe(HitsplatApplied.class, this, this::onHitsplatApplied); @@ -422,7 +422,7 @@ public class CombatCounter extends Plugin { boolean prevInstance = instanced; instanced = client.isInInstancedRegion(); - if (!prevInstance && instanced) + if (!prevInstance && instanced) { this.counter.clear(); this.blowpipe.clear(); @@ -654,6 +654,7 @@ public class CombatCounter extends Plugin return 2 + (int) Math.floor((3d + distance) / 6d); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("combatcounter")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/combatcounter/CombatCounterConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/combatcounter/CombatCounterConfig.java index 56a212fbab..74966f963b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/combatcounter/CombatCounterConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/combatcounter/CombatCounterConfig.java @@ -1,11 +1,10 @@ package net.runelite.client.plugins.combatcounter; +import java.awt.Color; import net.runelite.client.config.Alpha; import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; - -import java.awt.*; import net.runelite.client.config.ConfigTitleSection; import net.runelite.client.config.Title; @@ -57,7 +56,7 @@ public interface CombatCounterConfig extends Config { return new Title(); } - + @Alpha @ConfigItem( keyName = "selfColor", @@ -70,7 +69,7 @@ public interface CombatCounterConfig extends Config { return Color.green; } - + @Alpha @ConfigItem( keyName = "totalColor", @@ -83,7 +82,7 @@ public interface CombatCounterConfig extends Config { return Color.RED; } - + @Alpha @ConfigItem( keyName = "otherColor", @@ -96,7 +95,7 @@ public interface CombatCounterConfig extends Config { return Color.white; } - + @Alpha @ConfigItem( keyName = "bgColor", @@ -109,7 +108,7 @@ public interface CombatCounterConfig extends Config { return new Color(70, 61, 50, 156); } - + @Alpha @ConfigItem( keyName = "titleColor", diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/combatlevel/CombatLevelPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/combatlevel/CombatLevelPlugin.java index b6e0a4626e..4ac83f1bb0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/combatlevel/CombatLevelPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/combatlevel/CombatLevelPlugin.java @@ -38,14 +38,14 @@ import net.runelite.api.Experience; import net.runelite.api.GameState; import net.runelite.api.Skill; import net.runelite.api.WorldType; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.ScriptCallbackEvent; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.overlay.OverlayManager; @@ -84,9 +84,6 @@ public class CombatLevelPlugin extends Plugin @Inject private OverlayManager overlayManager; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) private boolean showLevelsUntil; private boolean wildernessAttackLevelRange; @@ -98,10 +95,9 @@ public class CombatLevelPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); overlayManager.add(overlay); @@ -112,10 +108,8 @@ public class CombatLevelPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(overlay); Widget combatLevelWidget = client.getWidget(WidgetInfo.COMBAT_LEVEL); @@ -132,13 +126,7 @@ public class CombatLevelPlugin extends Plugin shutDownAttackLevelRange(); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(ScriptCallbackEvent.class, this, this::onScriptCallbackEvent); - } - + @Subscribe private void onGameTick(GameTick event) { if (client.getGameState() != GameState.LOGGED_IN) @@ -165,6 +153,7 @@ public class CombatLevelPlugin extends Plugin combatLevelWidget.setText("Combat Lvl: " + DECIMAL_FORMAT.format(combatLevelPrecise)); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!CONFIG_GROUP.equals(event.getGroup()) || !ATTACK_RANGE_CONFIG_KEY.equals(event.getKey())) @@ -184,6 +173,7 @@ public class CombatLevelPlugin extends Plugin } } + @Subscribe private void onScriptCallbackEvent(ScriptCallbackEvent event) { if (this.wildernessAttackLevelRange diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java index b8ef9d4ff6..ff256507c9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java @@ -149,7 +149,7 @@ public class ConfigPanel extends PluginPanel private final OpenOSRSConfig OpenOSRSConfig; private final ChatColorConfig chatColorConfig; private final ColorPickerManager colorPickerManager; - public static List pluginList = new ArrayList<>(); + public static final List pluginList = new ArrayList<>(); private final IconTextField searchBar = new IconTextField(); private final JPanel topPanel; @@ -1238,11 +1238,13 @@ public class ConfigPanel extends PluginPanel cid.getItem().keyName(), EnumSet.class); if (enumSet == null) { + //noinspection unchecked enumSet = EnumSet.noneOf(enumType); } enumSet.clear(); EnumSet finalEnumSet = enumSet; + //noinspection unchecked jList.getSelectedValuesList().forEach(value -> finalEnumSet.add(Enum.valueOf(cid.getItem().enumClass(), value.toString()))); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPlugin.java index e68e2b7786..2acaf6af08 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPlugin.java @@ -35,9 +35,9 @@ import net.runelite.client.RuneLite; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ChatColorConfig; import net.runelite.client.config.ConfigManager; -import net.runelite.client.config.RuneLiteConfig; import net.runelite.client.config.OpenOSRSConfig; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.config.RuneLiteConfig; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.OverlayMenuClicked; import net.runelite.client.events.PluginChanged; import net.runelite.client.plugins.Plugin; @@ -84,16 +84,12 @@ public class ConfigPlugin extends Plugin @Inject private ColorPickerManager colorPickerManager; - @Inject - private EventBus eventBus; - private ConfigPanel configPanel; private NavigationButton navButton; @Override - protected void startUp() throws Exception + protected void startUp() { - addSubscriptions(); configPanel = new ConfigPanel(pluginManager, configManager, executorService, runeLiteConfig, OpenOSRSConfig, chatColorConfig, colorPickerManager); @@ -110,10 +106,8 @@ public class ConfigPlugin extends Plugin } @Override - public void shutDown() throws Exception + public void shutDown() { - eventBus.unregister(this); - clientToolbar.removeNavigation(navButton); RuneLite.getInjector().getInstance(ClientThread.class).invokeLater(() -> { @@ -133,17 +127,13 @@ public class ConfigPlugin extends Plugin }); } - private void addSubscriptions() - { - eventBus.subscribe(PluginChanged.class, this, this::onPluginChanged); - eventBus.subscribe(OverlayMenuClicked.class, this, this::onOverlayMenuClicked); - } - + @Subscribe private void onPluginChanged(PluginChanged event) { SwingUtilities.invokeLater(configPanel::refreshPluginList); } + @Subscribe private void onOverlayMenuClicked(OverlayMenuClicked overlayMenuClicked) { OverlayMenuEntry overlayMenuEntry = overlayMenuClicked.getEntry(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/config/PluginListItem.java b/runelite-client/src/main/java/net/runelite/client/plugins/config/PluginListItem.java index 05f8f3c513..c3b48368c8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/config/PluginListItem.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/config/PluginListItem.java @@ -66,7 +66,7 @@ public class PluginListItem extends JPanel private final ConfigPanel configPanel; - @Getter + @Getter(AccessLevel.PACKAGE) @Nullable private final Plugin plugin; @@ -93,13 +93,13 @@ public class PluginListItem extends JPanel private final IconButton configButton = new IconButton(CONFIG_ICON, CONFIG_ICON_HOVER); private final IconButton toggleButton = new IconButton(OFF_SWITCHER); - @Getter + @Getter(AccessLevel.PACKAGE) private boolean isPluginEnabled = false; - @Getter + @Getter(AccessLevel.PACKAGE) private boolean isPinned = false; - @Getter + @Getter(AccessLevel.PACKAGE) private boolean isHidden = false; private Color color = null; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cooking/CookingOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/cooking/CookingOverlay.java index a98151815b..f3fbadee3f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cooking/CookingOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cooking/CookingOverlay.java @@ -29,8 +29,8 @@ import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics2D; import java.text.DecimalFormat; -import java.time.Instant; import java.time.Duration; +import java.time.Instant; import javax.inject.Inject; import javax.inject.Singleton; import static net.runelite.api.AnimationID.COOKING_FIRE; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cooking/CookingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/cooking/CookingPlugin.java index 24e339d09f..e8ba114f82 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cooking/CookingPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cooking/CookingPlugin.java @@ -44,7 +44,7 @@ import net.runelite.api.events.ChatMessage; import net.runelite.api.events.GameTick; import net.runelite.api.events.SpotAnimationChanged; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.events.OverlayMenuClicked; import net.runelite.client.game.ItemManager; @@ -83,9 +83,6 @@ public class CookingPlugin extends Plugin @Inject private ItemManager itemManager; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) private CookingSession session; @@ -100,34 +97,23 @@ public class CookingPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); session = null; overlayManager.add(overlay); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - infoBoxManager.removeIf(FermentTimer.class::isInstance); overlayManager.remove(overlay); session = null; } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(SpotAnimationChanged.class, this, this::onSpotAnimationChanged); - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - eventBus.subscribe(OverlayMenuClicked.class, this, this::onOverlayMenuClicked); - } - + @Subscribe private void onOverlayMenuClicked(OverlayMenuClicked overlayMenuClicked) { OverlayMenuEntry overlayMenuEntry = overlayMenuClicked.getEntry(); @@ -139,6 +125,7 @@ public class CookingPlugin extends Plugin } } + @Subscribe private void onGameTick(GameTick gameTick) { if (session == null || this.statTimeout == 0) @@ -155,6 +142,7 @@ public class CookingPlugin extends Plugin } } + @Subscribe void onSpotAnimationChanged(SpotAnimationChanged graphicChanged) { Player player = client.getLocalPlayer(); @@ -184,6 +172,7 @@ public class CookingPlugin extends Plugin } } + @Subscribe void onChatMessage(ChatMessage event) { if (event.getType() != ChatMessageType.SPAM) @@ -221,6 +210,7 @@ public class CookingPlugin extends Plugin } } + @Subscribe private void onConfigChanged(ConfigChanged configChanged) { if (configChanged.getGroup().equals("cooking")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/corp/CorpPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/corp/CorpPlugin.java index 38d7db620b..5ba48932e1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/corp/CorpPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/corp/CorpPlugin.java @@ -51,7 +51,7 @@ import net.runelite.client.chat.ChatMessageBuilder; import net.runelite.client.chat.ChatMessageManager; import net.runelite.client.chat.QueuedMessage; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -100,9 +100,6 @@ public class CorpPlugin extends Plugin @Inject private CorpConfig config; - @Inject - private EventBus eventBus; - private boolean leftClickCore; @Getter(AccessLevel.PACKAGE) private boolean showDamage; @@ -114,20 +111,17 @@ public class CorpPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); overlayManager.add(corpOverlay); overlayManager.add(coreOverlay); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(corpOverlay); overlayManager.remove(coreOverlay); @@ -137,17 +131,7 @@ public class CorpPlugin extends Plugin players.clear(); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(NpcSpawned.class, this, this::onNpcSpawned); - eventBus.subscribe(NpcDespawned.class, this, this::onNpcDespawned); - eventBus.subscribe(HitsplatApplied.class, this, this::onHitsplatApplied); - eventBus.subscribe(InteractingChanged.class, this, this::onInteractingChanged); - eventBus.subscribe(MenuEntryAdded.class, this, this::onMenuEntryAdded); - } - + @Subscribe private void onGameStateChanged(GameStateChanged gameStateChanged) { if (gameStateChanged.getGameState() == GameState.LOADING) @@ -156,6 +140,7 @@ public class CorpPlugin extends Plugin } } + @Subscribe private void onNpcSpawned(NpcSpawned npcSpawned) { NPC npc = npcSpawned.getNpc(); @@ -175,6 +160,7 @@ public class CorpPlugin extends Plugin } } + @Subscribe private void onNpcDespawned(NpcDespawned npcDespawned) { NPC npc = npcDespawned.getNpc(); @@ -211,6 +197,7 @@ public class CorpPlugin extends Plugin } } + @Subscribe private void onHitsplatApplied(HitsplatApplied hitsplatApplied) { Actor actor = hitsplatApplied.getActor(); @@ -229,6 +216,7 @@ public class CorpPlugin extends Plugin totalDamage += hitsplatApplied.getHitsplat().getAmount(); } + @Subscribe private void onInteractingChanged(InteractingChanged interactingChanged) { Actor source = interactingChanged.getSource(); @@ -242,6 +230,7 @@ public class CorpPlugin extends Plugin players.add(source); } + @Subscribe private void onMenuEntryAdded(MenuEntryAdded event) { if (event.getOpcode() != NPC_SECOND_OPTION.getId() @@ -261,6 +250,7 @@ public class CorpPlugin extends Plugin event.setModified(); } + @Subscribe private void onConfigChanged(ConfigChanged configChanged) { if (configChanged.getGroup().equals("corp")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/coxhelper/CoxPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/coxhelper/CoxPlugin.java index 5a983db6f7..6648fc4e53 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/coxhelper/CoxPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/coxhelper/CoxPlugin.java @@ -66,6 +66,7 @@ import net.runelite.api.util.Text; import net.runelite.client.chat.ChatMessageManager; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -87,27 +88,35 @@ public class CoxPlugin extends Plugin { private static final int ANIMATION_ID_G1 = 430; private static final Pattern TP_REGEX = Pattern.compile("You have been paired with (.*)! The magical power will enact soon..."); + @Inject @Getter(AccessLevel.NONE) private Client client; + @Inject @Getter(AccessLevel.NONE) private ChatMessageManager chatMessageManager; + @Inject @Getter(AccessLevel.NONE) private CoxOverlay coxOverlay; + @Inject @Getter(AccessLevel.NONE) private CoxInfoBox coxInfoBox; + @Inject @Getter(AccessLevel.NONE) private CoxConfig config; + @Inject @Getter(AccessLevel.NONE) private OverlayManager overlayManager; + @Inject @Getter(AccessLevel.NONE) private EventBus eventBus; + private boolean handCripple; private boolean runOlm; private int vanguards; @@ -162,7 +171,6 @@ public class CoxPlugin extends Plugin protected void startUp() { updateConfig(); - addSubscriptions(); overlayManager.add(coxOverlay); overlayManager.add(coxInfoBox); handCripple = false; @@ -178,22 +186,11 @@ public class CoxPlugin extends Plugin @Override protected void shutDown() { - eventBus.unregister(this); overlayManager.remove(coxOverlay); overlayManager.remove(coxInfoBox); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - eventBus.subscribe(ProjectileSpawned.class, this, this::onProjectileSpawned); - eventBus.subscribe(SpotAnimationChanged.class, this, this::onSpotAnimationChanged); - eventBus.subscribe(NpcSpawned.class, this, this::onNpcSpawned); - eventBus.subscribe(NpcDespawned.class, this, this::onNpcDespawned); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - } - + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("Cox")) @@ -202,6 +199,7 @@ public class CoxPlugin extends Plugin } } + @Subscribe private void onChatMessage(ChatMessage event) { if (!inRaid()) @@ -274,6 +272,7 @@ public class CoxPlugin extends Plugin } } + @Subscribe private void onProjectileSpawned(ProjectileSpawned event) { if (!inRaid()) @@ -299,6 +298,7 @@ public class CoxPlugin extends Plugin } } + @Subscribe private void onSpotAnimationChanged(SpotAnimationChanged event) { if (!inRaid()) @@ -332,6 +332,7 @@ public class CoxPlugin extends Plugin } } + @Subscribe private void onNpcSpawned(NpcSpawned event) { if (!inRaid()) @@ -376,6 +377,7 @@ public class CoxPlugin extends Plugin } } + @Subscribe private void onNpcDespawned(NpcDespawned event) { if (!inRaid()) @@ -423,6 +425,7 @@ public class CoxPlugin extends Plugin } } + @Subscribe private void onGameTick(GameTick event) { if (!inRaid()) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/coxhelper/NPCContainer.java b/runelite-client/src/main/java/net/runelite/client/plugins/coxhelper/NPCContainer.java index d5048877c9..2faf9df5a2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/coxhelper/NPCContainer.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/coxhelper/NPCContainer.java @@ -81,7 +81,7 @@ class NPCContainer MELEE("Melee", Color.RED), UNKNOWN("Unknown", Color.WHITE); - private String name = ""; + private String name; private Color color; } } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/crystalmathlabs/CrystalMathLabs.java b/runelite-client/src/main/java/net/runelite/client/plugins/crystalmathlabs/CrystalMathLabs.java index d4d8da33f4..431d1006dc 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/crystalmathlabs/CrystalMathLabs.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/crystalmathlabs/CrystalMathLabs.java @@ -44,6 +44,7 @@ import okhttp3.HttpUrl; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; +import org.jetbrains.annotations.NotNull; @PluginDescriptor( name = "Crystal Math Labs", @@ -71,7 +72,7 @@ public class CrystalMathLabs extends Plugin private long lastXp; @Override - protected void startUp() throws Exception + protected void startUp() { fetchXp = true; @@ -80,7 +81,7 @@ public class CrystalMathLabs extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { eventBus.unregister(this); } @@ -146,13 +147,13 @@ public class CrystalMathLabs extends Plugin httpClient.newCall(request).enqueue(new Callback() { @Override - public void onFailure(Call call, IOException e) + public void onFailure(@NotNull Call call, @NotNull IOException e) { log.warn("Error submitting CML update, caused by {}.", e.getMessage()); } @Override - public void onResponse(Call call, Response response) throws IOException + public void onResponse(@NotNull Call call, @NotNull Response response) { response.close(); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/customcursor/CustomCursorPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/customcursor/CustomCursorPlugin.java index 43f950c12b..6f66cef621 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/customcursor/CustomCursorPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/customcursor/CustomCursorPlugin.java @@ -36,7 +36,7 @@ import javax.sound.sampled.LineUnavailableException; import javax.sound.sampled.UnsupportedAudioFileException; import lombok.extern.slf4j.Slf4j; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -57,9 +57,6 @@ public class CustomCursorPlugin extends Plugin @Inject private CustomCursorConfig config; - @Inject - private EventBus eventBus; - private Clip skillSpecsRage; private int volume = 35; @@ -72,7 +69,6 @@ public class CustomCursorPlugin extends Plugin @Override protected void startUp() { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); updateCursor(); try (AudioInputStream ais = AudioSystem.getAudioInputStream(this.getClass().getResourceAsStream("specs-rage.wav"))) @@ -93,11 +89,10 @@ public class CustomCursorPlugin extends Plugin @Override protected void shutDown() { - eventBus.unregister(this); - clientUI.resetCursor(); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("customcursor") && event.getKey().equals("cursorStyle")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/dailytaskindicators/DailyTasksPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/dailytaskindicators/DailyTasksPlugin.java index fa8c5a3e5e..6b3769f315 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/dailytaskindicators/DailyTasksPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/dailytaskindicators/DailyTasksPlugin.java @@ -43,7 +43,7 @@ import net.runelite.client.chat.ChatMessageBuilder; import net.runelite.client.chat.ChatMessageManager; import net.runelite.client.chat.QueuedMessage; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -80,9 +80,6 @@ public class DailyTasksPlugin extends Plugin @Inject private ChatMessageManager chatMessageManager; - @Inject - private EventBus eventBus; - private long lastReset; private boolean loggingIn; @@ -106,7 +103,6 @@ public class DailyTasksPlugin extends Plugin public void startUp() { updateConfig(); - addSubscriptions(); loggingIn = true; } @@ -114,19 +110,10 @@ public class DailyTasksPlugin extends Plugin @Override public void shutDown() { - eventBus.unregister(this); - - eventBus.unregister(this); lastReset = 0L; } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - } - + @Subscribe private void onGameStateChanged(GameStateChanged event) { if (event.getGameState() == GameState.LOGGING_IN) @@ -135,6 +122,7 @@ public class DailyTasksPlugin extends Plugin } } + @Subscribe private void onGameTick(GameTick event) { long currentTime = System.currentTimeMillis(); @@ -186,7 +174,7 @@ public class DailyTasksPlugin extends Plugin { checkArrows(dailyReset); } - + if (this.showDynamite) { checkDynamite(dailyReset); @@ -310,6 +298,7 @@ public class DailyTasksPlugin extends Plugin .build()); } + @Subscribe private void onConfigChanged(ConfigChanged configChanged) { if (configChanged.getGroup().equals("dailytaskindicators")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/Bone.java b/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/Bone.java index 28daed468e..4144632a40 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/Bone.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/Bone.java @@ -2,6 +2,7 @@ package net.runelite.client.plugins.deathindicator; import java.time.Duration; import java.time.Instant; +import lombok.AccessLevel; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter; @@ -12,8 +13,8 @@ import net.runelite.client.util.ColorUtil; import net.runelite.client.util.MiscUtils; @EqualsAndHashCode -@Getter -@Setter +@Getter(AccessLevel.PACKAGE) +@Setter(AccessLevel.PACKAGE) class Bone { private String name; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/Bones.java b/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/Bones.java index 40e44c1073..5d886b56a3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/Bones.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/Bones.java @@ -15,7 +15,7 @@ import net.runelite.client.config.ConfigManager; import static net.runelite.http.api.RuneLiteAPI.GSON; @Slf4j -public class Bones +class Bones { private static final String CONFIG_GROUP = "deathIndicator"; private static final String BONES_PREFIX = "bones_"; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/DeathIndicatorPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/DeathIndicatorPlugin.java index 905cdc03bd..5568934fa3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/DeathIndicatorPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/DeathIndicatorPlugin.java @@ -44,11 +44,9 @@ import net.runelite.api.MenuEntry; import net.runelite.api.MenuOpcode; import net.runelite.api.Player; import net.runelite.api.coords.WorldPoint; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.ItemDespawned; -import net.runelite.api.events.LocalPlayerDeath; import net.runelite.api.events.MenuEntryAdded; import net.runelite.api.events.MenuOpened; import net.runelite.api.events.MenuOptionClicked; @@ -58,6 +56,8 @@ import net.runelite.api.util.Text; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -80,6 +80,7 @@ public class DeathIndicatorPlugin extends Plugin static final int HIJACKED_ITEMID = 0x69696969; private static final Set RESPAWN_REGIONS = ImmutableSet.of( + 6457, // Kourend 12850, // Lumbridge 11828, // Falador 12342, // Edgeville @@ -122,6 +123,7 @@ public class DeathIndicatorPlugin extends Plugin private Instant lastDeathTime; private int lastDeathWorld; private int despawnIdx = 0; + @Provides DeathIndicatorConfig deathIndicatorConfig(ConfigManager configManager) { @@ -131,7 +133,10 @@ public class DeathIndicatorPlugin extends Plugin @Override protected void startUp() { - addSubscriptions(); + if (config.permaBones()) + { + addBoneSubs(); + } if (!hasDied()) { @@ -165,7 +170,6 @@ public class DeathIndicatorPlugin extends Plugin @Override protected void shutDown() { - eventBus.unregister(this); eventBus.unregister(BONES); if (client.hasHintArrow()) @@ -194,22 +198,9 @@ public class DeathIndicatorPlugin extends Plugin bones.clear(client.getScene()); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(LocalPlayerDeath.class, this, this::onLocalPlayerDeath); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - if (config.permaBones()) - { - addBoneSubs(); - } - } - private void addBoneSubs() { eventBus.subscribe(ItemDespawned.class, BONES, this::onItemDespawn); - eventBus.subscribe(PlayerDeath.class, BONES, this::onPlayerDeath); eventBus.subscribe(MenuEntryAdded.class, BONES, this::onMenuEntryAdded); eventBus.subscribe(MenuOptionClicked.class, BONES, this::onMenuOptionClicked); eventBus.subscribe(MenuOpened.class, BONES, this::onMenuOpened); @@ -228,9 +219,29 @@ public class DeathIndicatorPlugin extends Plugin } } + @Subscribe private void onPlayerDeath(PlayerDeath death) { - newBoneFor(death.getPlayer()); + if (client.isInInstancedRegion()) + { + return; + } + + final Player player = death.getPlayer(); + + if (config.permaBones() && player.getWorldLocation().getRegionID() != 13362) + { + newBoneFor(player); + } + + if (player != client.getLocalPlayer()) + { + return; + } + + lastDeath = player.getWorldLocation(); + lastDeathWorld = client.getWorld(); + lastDeathTime = Instant.now(); } private void newBoneFor(Player player) @@ -301,24 +312,7 @@ public class DeathIndicatorPlugin extends Plugin } } - private void onLocalPlayerDeath(LocalPlayerDeath death) - { - if (client.isInInstancedRegion()) - { - return; - } - - Player lp = client.getLocalPlayer(); - if (config.permaBones()) - { - newBoneFor(lp); - } - - lastDeath = lp.getWorldLocation(); - lastDeathWorld = client.getWorld(); - lastDeathTime = Instant.now(); - } - + @Subscribe private void onGameTick(GameTick event) { // Check if player respawned in a death respawn location @@ -383,6 +377,7 @@ public class DeathIndicatorPlugin extends Plugin } } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("deathIndicator")) @@ -436,6 +431,7 @@ public class DeathIndicatorPlugin extends Plugin } } + @Subscribe private void onGameStateChanged(GameStateChanged event) { switch (event.getGameState()) @@ -547,4 +543,4 @@ public class DeathIndicatorPlugin extends Plugin { return itemManager.getImage(ItemID.BONES); } -} +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/defaultworld/DefaultWorldConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/defaultworld/DefaultWorldConfig.java index 480d4c891d..d53ede7a7b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/defaultworld/DefaultWorldConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/defaultworld/DefaultWorldConfig.java @@ -28,9 +28,11 @@ import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup("defaultworld") +@ConfigGroup(DefaultWorldConfig.GROUP) public interface DefaultWorldConfig extends Config { + String GROUP = "defaultworld"; + @ConfigItem( keyName = "defaultWorld", name = "Default world", @@ -40,4 +42,32 @@ public interface DefaultWorldConfig extends Config { return 0; } + + @ConfigItem( + keyName = "useLastWorld", + name = "Use Last World", + description = "Use the last world you used as the default" + ) + default boolean useLastWorld() + { + return false; + } + + @ConfigItem( + keyName = "lastWorld", + name = "", + description = "", + hidden = true + ) + default int lastWorld() + { + return 0; + } + + @ConfigItem( + keyName = "lastWorld", + name = "", + description = "" + ) + void lastWorld(int lastWorld); } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/defaultworld/DefaultWorldPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/defaultworld/DefaultWorldPlugin.java index cb5272a491..006f05601f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/defaultworld/DefaultWorldPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/defaultworld/DefaultWorldPlugin.java @@ -25,22 +25,21 @@ package net.runelite.client.plugins.defaultworld; import com.google.inject.Provides; -import io.reactivex.schedulers.Schedulers; import javax.inject.Inject; import javax.inject.Singleton; import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; import net.runelite.api.GameState; import net.runelite.api.events.GameStateChanged; -import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.SessionOpen; +import net.runelite.client.game.WorldService; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.util.WorldUtil; import net.runelite.http.api.worlds.World; -import net.runelite.http.api.worlds.WorldClient; +import net.runelite.http.api.worlds.WorldResult; @PluginDescriptor( name = "Default World", @@ -58,55 +57,47 @@ public class DefaultWorldPlugin extends Plugin private DefaultWorldConfig config; @Inject - private EventBus eventBus; - - @Inject - private ClientThread clientThread; - - @Inject - private WorldClient worldClient; + private WorldService worldService; private int worldCache; private boolean worldChangeRequired; @Override - protected void startUp() throws Exception + protected void startUp() { - addSubscriptions(); worldChangeRequired = true; applyWorld(); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - worldChangeRequired = true; changeWorld(worldCache); } - private void addSubscriptions() - { - eventBus.subscribe(SessionOpen.class, this, this::onSessionOpen); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - } - @Provides DefaultWorldConfig getConfig(ConfigManager configManager) { return configManager.getConfig(DefaultWorldConfig.class); } + @Subscribe private void onSessionOpen(SessionOpen event) { worldChangeRequired = true; applyWorld(); } + @Subscribe(takeUntil = 2) private void onGameStateChanged(GameStateChanged event) { + if (event.getGameState() == GameState.LOGGED_IN) + { + config.lastWorld(client.getWorld()); + } + applyWorld(); } @@ -127,39 +118,33 @@ public class DefaultWorldPlugin extends Plugin return; } - worldClient.lookupWorlds() - .subscribeOn(Schedulers.io()) - .observeOn(Schedulers.from(clientThread)) - .subscribe( - (worldResult) -> - { - if (worldResult == null) - { - return; - } + final WorldResult worldResult = worldService.getWorlds(); - final World world = worldResult.findWorld(correctedWorld); + if (worldResult == null) + { + log.warn("Failed to lookup worlds."); + return; + } - if (world != null) - { - final net.runelite.api.World rsWorld = client.createWorld(); - rsWorld.setActivity(world.getActivity()); - rsWorld.setAddress(world.getAddress()); - rsWorld.setId(world.getId()); - rsWorld.setPlayerCount(world.getPlayers()); - rsWorld.setLocation(world.getLocation()); - rsWorld.setTypes(WorldUtil.toWorldTypes(world.getTypes())); + final World world = worldResult.findWorld(correctedWorld); - client.changeWorld(rsWorld); - log.debug("Applied new world {}", correctedWorld); - } - else - { - log.warn("World {} not found.", correctedWorld); - } - }, - (e) -> log.warn("Error looking up world {}. Error: {}", correctedWorld, e) - ); + if (world != null) + { + final net.runelite.api.World rsWorld = client.createWorld(); + rsWorld.setActivity(world.getActivity()); + rsWorld.setAddress(world.getAddress()); + rsWorld.setId(world.getId()); + rsWorld.setPlayerCount(world.getPlayers()); + rsWorld.setLocation(world.getLocation()); + rsWorld.setTypes(WorldUtil.toWorldTypes(world.getTypes())); + + client.changeWorld(rsWorld); + log.debug("Applied new world {}", correctedWorld); + } + else + { + log.warn("World {} not found.", correctedWorld); + } } private void applyWorld() @@ -170,7 +155,7 @@ public class DefaultWorldPlugin extends Plugin log.debug("Stored old world {}", worldCache); } - final int newWorld = config.getWorld(); + final int newWorld = !config.useLastWorld() ? config.getWorld() : config.lastWorld(); changeWorld(newWorld); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/demonicgorilla/DemonicGorilla.java b/runelite-client/src/main/java/net/runelite/client/plugins/demonicgorilla/DemonicGorilla.java index fb876683c7..fb0e30f048 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/demonicgorilla/DemonicGorilla.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/demonicgorilla/DemonicGorilla.java @@ -26,6 +26,7 @@ package net.runelite.client.plugins.demonicgorilla; import java.util.Arrays; import java.util.List; +import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; import net.runelite.api.Actor; @@ -34,7 +35,7 @@ import net.runelite.api.NPC; import net.runelite.api.NPCDefinition; import net.runelite.api.coords.WorldArea; -public class DemonicGorilla +class DemonicGorilla { static final int MAX_ATTACK_RANGE = 10; // Needs <= 10 tiles to reach target static final int ATTACK_RATE = 5; // 5 ticks between each attack @@ -45,7 +46,7 @@ public class DemonicGorilla static final int PROJECTILE_MAGIC_DELAY = 12; // Requires an extra 12 tiles static final int PROJECTILE_RANGED_DELAY = 9; // Requires an extra 9 tiles - public static final AttackStyle[] ALL_REGULAR_ATTACK_STYLES = + static final AttackStyle[] ALL_REGULAR_ATTACK_STYLES = { AttackStyle.MELEE, AttackStyle.RANGED, @@ -60,66 +61,66 @@ public class DemonicGorilla BOULDER } - @Getter + @Getter(AccessLevel.PACKAGE) private NPC npc; - @Getter - @Setter + @Getter(AccessLevel.PACKAGE) + @Setter(AccessLevel.PACKAGE) private List nextPosibleAttackStyles; - @Getter - @Setter + @Getter(AccessLevel.PACKAGE) + @Setter(AccessLevel.PACKAGE) private int attacksUntilSwitch; - @Getter - @Setter + @Getter(AccessLevel.PACKAGE) + @Setter(AccessLevel.PACKAGE) private int nextAttackTick; - @Getter - @Setter + @Getter(AccessLevel.PACKAGE) + @Setter(AccessLevel.PACKAGE) private int lastTickAnimation; - @Getter - @Setter + @Getter(AccessLevel.PACKAGE) + @Setter(AccessLevel.PACKAGE) private WorldArea lastWorldArea; - @Getter - @Setter + @Getter(AccessLevel.PACKAGE) + @Setter(AccessLevel.PACKAGE) private boolean initiatedCombat; - @Getter - @Setter + @Getter(AccessLevel.PACKAGE) + @Setter(AccessLevel.PACKAGE) private Actor lastTickInteracting; - @Getter - @Setter + @Getter(AccessLevel.PACKAGE) + @Setter(AccessLevel.PACKAGE) private boolean takenDamageRecently; - @Getter - @Setter + @Getter(AccessLevel.PACKAGE) + @Setter(AccessLevel.PACKAGE) private int recentProjectileId; - @Getter - @Setter + @Getter(AccessLevel.PACKAGE) + @Setter(AccessLevel.PACKAGE) private boolean changedPrayerThisTick; - @Getter - @Setter + @Getter(AccessLevel.PACKAGE) + @Setter(AccessLevel.PACKAGE) private boolean changedAttackStyleThisTick; - @Getter - @Setter + @Getter(AccessLevel.PACKAGE) + @Setter(AccessLevel.PACKAGE) private boolean changedAttackStyleLastTick; - @Getter - @Setter + @Getter(AccessLevel.PACKAGE) + @Setter(AccessLevel.PACKAGE) private HeadIcon lastTickOverheadIcon; - @Getter - @Setter + @Getter(AccessLevel.PACKAGE) + @Setter(AccessLevel.PACKAGE) private int disabledMeleeMovementForTicks; - public DemonicGorilla(NPC npc) + DemonicGorilla(NPC npc) { this.npc = npc; this.nextPosibleAttackStyles = Arrays.asList(ALL_REGULAR_ATTACK_STYLES); @@ -128,7 +129,7 @@ public class DemonicGorilla this.recentProjectileId = -1; } - public HeadIcon getOverheadIcon() + HeadIcon getOverheadIcon() { NPCDefinition composition = this.npc.getDefinition(); if (composition != null) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/demonicgorilla/DemonicGorillaPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/demonicgorilla/DemonicGorillaPlugin.java index 94a4237d59..5599484b7e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/demonicgorilla/DemonicGorillaPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/demonicgorilla/DemonicGorillaPlugin.java @@ -58,7 +58,7 @@ import net.runelite.api.events.PlayerDespawned; import net.runelite.api.events.PlayerSpawned; import net.runelite.api.events.ProjectileSpawned; import net.runelite.client.callback.ClientThread; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.overlay.OverlayManager; @@ -85,9 +85,6 @@ public class DemonicGorillaPlugin extends Plugin @Inject private ClientThread clientThread; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) private Map gorillas; @@ -98,9 +95,8 @@ public class DemonicGorillaPlugin extends Plugin private Map memorizedPlayers; @Override - protected void startUp() throws Exception + protected void startUp() { - addSubscriptions(); overlayManager.add(overlay); gorillas = new HashMap<>(); recentBoulders = new ArrayList<>(); @@ -110,9 +106,8 @@ public class DemonicGorillaPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); overlayManager.remove(overlay); gorillas = null; recentBoulders = null; @@ -120,18 +115,6 @@ public class DemonicGorillaPlugin extends Plugin memorizedPlayers = null; } - private void addSubscriptions() - { - eventBus.subscribe(ProjectileSpawned.class, this, this::onProjectileSpawned); - eventBus.subscribe(HitsplatApplied.class, this, this::onHitsplatApplied); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(PlayerSpawned.class, this, this::onPlayerSpawned); - eventBus.subscribe(PlayerDespawned.class, this, this::onPlayerDespawned); - eventBus.subscribe(NpcSpawned.class, this, this::onNpcSpawned); - eventBus.subscribe(NpcDespawned.class, this, this::onNpcDespawned); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - } - private void clear() { recentBoulders.clear(); @@ -548,6 +531,7 @@ public class DemonicGorillaPlugin extends Plugin } } + @Subscribe private void onProjectileSpawned(ProjectileSpawned event) { final Projectile projectile = event.getProjectile(); @@ -627,6 +611,7 @@ public class DemonicGorillaPlugin extends Plugin } } + @Subscribe private void onHitsplatApplied(HitsplatApplied event) { if (gorillas.isEmpty()) @@ -655,6 +640,7 @@ public class DemonicGorillaPlugin extends Plugin } } + @Subscribe private void onGameStateChanged(GameStateChanged event) { GameState gs = event.getGameState(); @@ -666,6 +652,7 @@ public class DemonicGorillaPlugin extends Plugin } } + @Subscribe private void onPlayerSpawned(PlayerSpawned event) { if (gorillas.isEmpty()) @@ -677,6 +664,7 @@ public class DemonicGorillaPlugin extends Plugin memorizedPlayers.put(player, new MemorizedPlayer(player)); } + @Subscribe private void onPlayerDespawned(PlayerDespawned event) { if (gorillas.isEmpty()) @@ -687,6 +675,7 @@ public class DemonicGorillaPlugin extends Plugin memorizedPlayers.remove(event.getPlayer()); } + @Subscribe private void onNpcSpawned(NpcSpawned event) { NPC npc = event.getNpc(); @@ -703,6 +692,7 @@ public class DemonicGorillaPlugin extends Plugin } } + @Subscribe private void onNpcDespawned(NpcDespawned event) { if (gorillas.remove(event.getNpc()) != null && gorillas.isEmpty()) @@ -711,6 +701,7 @@ public class DemonicGorillaPlugin extends Plugin } } + @Subscribe private void onGameTick(GameTick event) { checkGorillaAttacks(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsButton.java b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsButton.java index e21af75f5a..eb56041e48 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsButton.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsButton.java @@ -26,11 +26,12 @@ package net.runelite.client.plugins.devtools; import java.awt.Color; import javax.swing.JButton; +import lombok.AccessLevel; import lombok.Getter; class DevToolsButton extends JButton { - @Getter + @Getter(AccessLevel.PACKAGE) private boolean active; DevToolsButton(String title) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPlugin.java index dc39eb00f3..710c9dbad1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPlugin.java @@ -32,6 +32,7 @@ import java.awt.image.BufferedImage; import static java.lang.Math.min; import java.util.List; import javax.inject.Inject; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.ChatMessageType; import net.runelite.api.Client; @@ -50,6 +51,7 @@ import net.runelite.api.events.VarbitChanged; import net.runelite.api.kit.KitType; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.ClientToolbar; @@ -66,7 +68,7 @@ import org.slf4j.LoggerFactory; tags = {"panel"}, developerPlugin = true ) -@Getter +@Getter(AccessLevel.PACKAGE) public class DevToolsPlugin extends Plugin { private static final List EXAMINE_MENU_ACTIONS = ImmutableList.of(MenuOpcode.EXAMINE_ITEM, @@ -140,9 +142,8 @@ public class DevToolsPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { - addSubscriptions(); players = new DevToolsButton("Players"); npcs = new DevToolsButton("NPCs"); @@ -204,10 +205,8 @@ public class DevToolsPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(overlay); overlayManager.remove(locationOverlay); overlayManager.remove(sceneOverlay); @@ -218,14 +217,7 @@ public class DevToolsPlugin extends Plugin clientToolbar.removeNavigation(navButton); } - private void addSubscriptions() - { - eventBus.subscribe(CommandExecuted.class, this, this::onCommandExecuted); - eventBus.subscribe(MenuEntryAdded.class, this, this::onMenuEntryAdded); - eventBus.subscribe(AreaSoundEffectPlayed.class, this, this::onAreaSoundEffectPlayed); - eventBus.subscribe(SoundEffectPlayed.class, this, this::onSoundEffectPlayed); - } - + @Subscribe private void onCommandExecuted(CommandExecuted commandExecuted) { String[] args = commandExecuted.getArguments(); @@ -379,6 +371,7 @@ public class DevToolsPlugin extends Plugin } } + @Subscribe private void onMenuEntryAdded(MenuEntryAdded entry) { if (!examine.isActive()) @@ -414,6 +407,7 @@ public class DevToolsPlugin extends Plugin } } + @Subscribe private void onSoundEffectPlayed(SoundEffectPlayed event) { if (!getSoundEffects().isActive() || soundEffectOverlay == null) @@ -424,6 +418,7 @@ public class DevToolsPlugin extends Plugin soundEffectOverlay.onSoundEffectPlayed(event); } + @Subscribe private void onAreaSoundEffectPlayed(AreaSoundEffectPlayed event) { if (!getSoundEffects().isActive() || soundEffectOverlay == null) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/SoundEffectOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/SoundEffectOverlay.java index ea9f060ee6..86b878d8c1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/SoundEffectOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/SoundEffectOverlay.java @@ -77,7 +77,7 @@ class SoundEffectOverlay extends Overlay { String text = "Id: " + event.getSoundId() + - " - D: " + event.getDelay(); + " - D: " + event.getDelay(); panelComponent.getChildren().add(LineComponent.builder() .left(text) @@ -110,10 +110,10 @@ class SoundEffectOverlay extends Overlay String text = "Id: " + event.getSoundId() + - " - S: " + (event.getSource() != null ? event.getSource().getName() : "") + - " - L: " + event.getSceneX() + "," + event.getSceneY() + - " - R: " + event.getRange() + - " - D: " + event.getDelay(); + " - S: " + (event.getSource() != null ? event.getSource().getName() : "") + + " - L: " + event.getSceneX() + "," + event.getSceneY() + + " - R: " + event.getRange() + + " - D: " + event.getDelay(); panelComponent.getChildren().add(LineComponent.builder() .left(text) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/VarInspector.java b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/VarInspector.java index a02659b4c5..5a5ced2878 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/VarInspector.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/VarInspector.java @@ -45,6 +45,7 @@ import javax.swing.JScrollBar; import javax.swing.JScrollPane; import javax.swing.SwingUtilities; import javax.swing.border.CompoundBorder; +import lombok.AccessLevel; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; @@ -64,7 +65,7 @@ import net.runelite.client.ui.FontManager; @Slf4j class VarInspector extends JFrame { - @Getter + @Getter(AccessLevel.PACKAGE) private enum VarType { VARBIT("Varbit"), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/WidgetField.java b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/WidgetField.java index 6c8c26054b..243f1a9c08 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/WidgetField.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/WidgetField.java @@ -26,6 +26,7 @@ package net.runelite.client.plugins.devtools; import java.util.function.BiConsumer; import java.util.function.Function; +import lombok.AccessLevel; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import net.runelite.api.widgets.Widget; @@ -34,7 +35,7 @@ import org.slf4j.helpers.MessageFormatter; @Slf4j public class WidgetField { - @Getter + @Getter(AccessLevel.PACKAGE) private final String name; private final Function getter; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/WidgetInfoTableModel.java b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/WidgetInfoTableModel.java index acd8851c0b..3e6898ebb3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/WidgetInfoTableModel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/WidgetInfoTableModel.java @@ -35,7 +35,7 @@ import javax.swing.table.AbstractTableModel; import net.runelite.api.widgets.Widget; import net.runelite.client.callback.ClientThread; -public class WidgetInfoTableModel extends AbstractTableModel +class WidgetInfoTableModel extends AbstractTableModel { @Inject private ClientThread clientThread; @@ -175,6 +175,10 @@ public class WidgetInfoTableModel extends AbstractTableModel out.add(new WidgetField<>("RelativeY", Widget::getRelativeY, Widget::setRelativeY, Integer.class)); out.add(new WidgetField<>("Width", Widget::getWidth, Widget::setWidth, Integer.class)); out.add(new WidgetField<>("Height", Widget::getHeight, Widget::setHeight, Integer.class)); + out.add(new WidgetField<>("RotationX", Widget::getRotationX, Widget::setRotationX, Integer.class)); + out.add(new WidgetField<>("RotationY", Widget::getRotationY, Widget::setRotationY, Integer.class)); + out.add(new WidgetField<>("RotationZ", Widget::getRotationZ, Widget::setRotationZ, Integer.class)); + out.add(new WidgetField<>("ModelZoom", Widget::getModelZoom, Widget::setModelZoom, Integer.class)); out.add(new WidgetField<>("CanvasLocation", Widget::getCanvasLocation)); out.add(new WidgetField<>("Bounds", Widget::getBounds)); out.add(new WidgetField<>("ScrollX", Widget::getScrollX, Widget::setScrollX, Integer.class)); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/WidgetInspector.java b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/WidgetInspector.java index 6048e6d12a..7d3c124b84 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/WidgetInspector.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/WidgetInspector.java @@ -53,13 +53,13 @@ import javax.swing.SwingUtilities; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreePath; +import lombok.AccessLevel; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; import net.runelite.api.MenuEntry; import net.runelite.api.MenuOpcode; import net.runelite.api.SpriteID; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.MenuEntryAdded; import net.runelite.api.events.MenuOptionClicked; import net.runelite.api.widgets.JavaScriptCallback; @@ -70,6 +70,7 @@ import net.runelite.api.widgets.WidgetItem; import net.runelite.api.widgets.WidgetType; import net.runelite.client.callback.ClientThread; import net.runelite.client.eventbus.EventBus; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.ui.ClientUI; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.util.ColorUtil; @@ -103,15 +104,15 @@ class WidgetInspector extends JFrame private DefaultMutableTreeNode root; - @Getter + @Getter(AccessLevel.PACKAGE) private Widget selectedWidget; - @Getter + @Getter(AccessLevel.PACKAGE) private int selectedItem; private Widget picker = null; - @Getter + @Getter(AccessLevel.PACKAGE) private boolean pickerSelected = false; @Inject @@ -450,12 +451,9 @@ class WidgetInspector extends JFrame Widget[] roots = client.getWidgetRoots(); parent = Stream.of(roots) - .filter(w -> w.getType() == WidgetType.LAYER && w.getContentType() == 0 && !w.isSelfHidden()) - .sorted(Comparator.comparing((Widget w) -> w.getRelativeX() + w.getRelativeY()) + .filter(w -> w.getType() == WidgetType.LAYER && w.getContentType() == 0 && !w.isSelfHidden()).max(Comparator.comparing((Widget w) -> w.getRelativeX() + w.getRelativeY()) .reversed() - .thenComparing(Widget::getId) - .reversed()) - .findFirst().get(); + .thenComparing(Widget::getId)).get(); x = 4; y = 4; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/WorldMapRegionOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/WorldMapRegionOverlay.java index 1e136267b8..a7c55edfbb 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/WorldMapRegionOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/WorldMapRegionOverlay.java @@ -47,6 +47,7 @@ class WorldMapRegionOverlay extends Overlay private static final int LABEL_PADDING = 4; private static final int REGION_SIZE = 1 << 6; // Bitmask to return first coordinate in region + @SuppressWarnings("PointlessBitwiseExpression") private static final int REGION_TRUNCATE = ~((1 << 6) - 1); private final Client client; private final DevToolsPlugin plugin; @@ -77,7 +78,7 @@ class WorldMapRegionOverlay extends Overlay { RenderOverview ro = client.getRenderOverview(); Widget map = client.getWidget(WidgetInfo.WORLD_MAP_VIEW); - Float pixelsPerTile = ro.getWorldMapZoom(); + float pixelsPerTile = ro.getWorldMapZoom(); if (map == null) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordGameEventType.java b/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordGameEventType.java index d493b9980c..981b83b154 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordGameEventType.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordGameEventType.java @@ -88,70 +88,70 @@ enum DiscordGameEventType BOSS_ZULRAH("Zulrah", DiscordAreaType.BOSSES, 9007), // Cities - CITY_AL_KHARID("Al Kharid" , DiscordAreaType.CITIES, 13105, 13106), - CITY_APE_ATOLL("Ape Atoll" , DiscordAreaType.CITIES, 10795, 11051, 10974, 11050), - CITY_ARCEUUS_HOUSE("Arceuus" , DiscordAreaType.CITIES, 6459, 6715, 6458, 6714), - CITY_ARDOUGNE("Ardougne" , DiscordAreaType.CITIES, 10548, 10547, 10292, 10291, 10036, 10035, 9780, 9779), - CITY_BARBARIAN_VILLAGE("Barbarian Village" , DiscordAreaType.CITIES, 12341), - CITY_BANDIT_CAMP("Bandit Camp" , DiscordAreaType.CITIES, 12591), - CITY_BEDABIN_CAMP("Bedabin Camp" , DiscordAreaType.CITIES, 12590), - CITY_BRIMHAVEN("Brimhaven" , DiscordAreaType.CITIES, 11057, 11058), - CITY_BURGH_DE_ROTT("Burgh de Rott" , DiscordAreaType.CITIES, 13874, 13873, 14130, 14129), - CITY_BURTHORPE("Burthorpe" , DiscordAreaType.CITIES, 11319, 11575), - CITY_CANIFIS("Canifis" , DiscordAreaType.CITIES, 13878), - CITY_CATHERBY("Catherby" , DiscordAreaType.CITIES, 11317, 11318, 11061), - CITY_CORSAIR_CAVE("Corsair Cove" , DiscordAreaType.CITIES, 10028, 10284), - CITY_DORGESH_KAAN("Dorgesh-Kaan" , DiscordAreaType.CITIES, 10835, 10834), - CITY_DRAYNOR("Draynor" , DiscordAreaType.CITIES, 12338), - CITY_EDGEVILLE("Edgeville" , DiscordAreaType.CITIES, 12342), - CITY_ENTRANA("Entrana" , DiscordAreaType.CITIES, 11060, 11316), - CITY_FALADOR("Falador" , DiscordAreaType.CITIES, 11828, 11572, 11571, 11827, 12084), - CITY_GOBLIN_VILLAGE("Goblin Village" , DiscordAreaType.CITIES, 11830), - CITY_GUTANOTH("Gu'Tanoth" , DiscordAreaType.CITIES, 10031), + CITY_AL_KHARID("Al Kharid", DiscordAreaType.CITIES, 13105, 13106), + CITY_APE_ATOLL("Ape Atoll", DiscordAreaType.CITIES, 10795, 11051, 10974, 11050), + CITY_ARCEUUS_HOUSE("Arceuus", DiscordAreaType.CITIES, 6459, 6715, 6458, 6714), + CITY_ARDOUGNE("Ardougne", DiscordAreaType.CITIES, 10548, 10547, 10292, 10291, 10036, 10035, 9780, 9779), + CITY_BARBARIAN_VILLAGE("Barbarian Village", DiscordAreaType.CITIES, 12341), + CITY_BANDIT_CAMP("Bandit Camp", DiscordAreaType.CITIES, 12591), + CITY_BEDABIN_CAMP("Bedabin Camp", DiscordAreaType.CITIES, 12590), + CITY_BRIMHAVEN("Brimhaven", DiscordAreaType.CITIES, 11057, 11058), + CITY_BURGH_DE_ROTT("Burgh de Rott", DiscordAreaType.CITIES, 13874, 13873, 14130, 14129), + CITY_BURTHORPE("Burthorpe", DiscordAreaType.CITIES, 11319, 11575), + CITY_CANIFIS("Canifis", DiscordAreaType.CITIES, 13878), + CITY_CATHERBY("Catherby", DiscordAreaType.CITIES, 11317, 11318, 11061), + CITY_CORSAIR_CAVE("Corsair Cove", DiscordAreaType.CITIES, 10028, 10284), + CITY_DORGESH_KAAN("Dorgesh-Kaan", DiscordAreaType.CITIES, 10835, 10834), + CITY_DRAYNOR("Draynor", DiscordAreaType.CITIES, 12338), + CITY_EDGEVILLE("Edgeville", DiscordAreaType.CITIES, 12342), + CITY_ENTRANA("Entrana", DiscordAreaType.CITIES, 11060, 11316), + CITY_FALADOR("Falador", DiscordAreaType.CITIES, 11828, 11572, 11571, 11827, 12084), + CITY_GOBLIN_VILLAGE("Goblin Village", DiscordAreaType.CITIES, 11830), + CITY_GUTANOTH("Gu'Tanoth", DiscordAreaType.CITIES, 10031), CITY_GWENITH("Gwenith", DiscordAreaType.CITIES, 8501, 8757, 9013), - CITY_HOSIDIUS_HOUSE("Hosidius" , DiscordAreaType.CITIES, 6713, 6712, 6455, 6711, 6710, 6965, 6966, 7222, 7223, 6967), - CITY_JATISZO("Jatizso" , DiscordAreaType.CITIES, 9531), - CITY_JIGGIG("Jiggig" , DiscordAreaType.CITIES, 9775), - CITY_KARAMJA("Karamja" , DiscordAreaType.CITIES, 11569, 11568, 11567, 11566, 11313, 11312, 11311), - CITY_KELDAGRIM("Keldagrim" , DiscordAreaType.CITIES, 11423, 11422, 11679, 11678), - CITY_LLETYA("Lletya" , DiscordAreaType.CITIES, 9265), - CITY_LOVAKENGJ_HOUSE("Lovakengj" , DiscordAreaType.CITIES, 5692, 5948, 5691, 5947, 6203, 6202, 5690, 5946), - CITY_LUMBRIDGE("Lumbridge" , DiscordAreaType.CITIES, 12850), - CITY_LUNAR_ISLE("Lunar Isle" , DiscordAreaType.CITIES, 8253, 8252, 8509, 8508), - CITY_MEIYERDITCH("Meiyerditch" , DiscordAreaType.CITIES, 14132, 14388, 14387, 14386, 14385), - CITY_MISCELLANIA("Miscellania" , DiscordAreaType.CITIES, 10044, 10300), - CITY_MOS_LE_HARMLESS("Mos Le'Harmless" , DiscordAreaType.CITIES, 14638), - CITY_MORTTON("Mort'ton" , DiscordAreaType.CITIES, 13875), - CITY_MOR_UI_REK("Mor UI Rek" , DiscordAreaType.CITIES, 9808, 9807, 10064, 10063), + CITY_HOSIDIUS_HOUSE("Hosidius", DiscordAreaType.CITIES, 6713, 6712, 6455, 6711, 6710, 6965, 6966, 7222, 7223, 6967), + CITY_JATISZO("Jatizso", DiscordAreaType.CITIES, 9531), + CITY_JIGGIG("Jiggig", DiscordAreaType.CITIES, 9775), + CITY_KARAMJA("Karamja", DiscordAreaType.CITIES, 11569, 11568, 11567, 11566, 11313, 11312, 11311), + CITY_KELDAGRIM("Keldagrim", DiscordAreaType.CITIES, 11423, 11422, 11679, 11678), + CITY_LLETYA("Lletya", DiscordAreaType.CITIES, 9265), + CITY_LOVAKENGJ_HOUSE("Lovakengj", DiscordAreaType.CITIES, 5692, 5948, 5691, 5947, 6203, 6202, 5690, 5946), + CITY_LUMBRIDGE("Lumbridge", DiscordAreaType.CITIES, 12850), + CITY_LUNAR_ISLE("Lunar Isle", DiscordAreaType.CITIES, 8253, 8252, 8509, 8508), + CITY_MEIYERDITCH("Meiyerditch", DiscordAreaType.CITIES, 14132, 14388, 14387, 14386, 14385), + CITY_MISCELLANIA("Miscellania", DiscordAreaType.CITIES, 10044, 10300), + CITY_MOS_LE_HARMLESS("Mos Le'Harmless", DiscordAreaType.CITIES, 14638), + CITY_MORTTON("Mort'ton", DiscordAreaType.CITIES, 13875), + CITY_MOR_UI_REK("Mor UI Rek", DiscordAreaType.CITIES, 9808, 9807, 10064, 10063), CITY_MOUNT_KARUULM("Mount Karuulm", DiscordAreaType.CITIES, 5179, 4923, 5180), - CITY_NARDAH("Nardah" , DiscordAreaType.CITIES, 13613), - CITY_NEITIZNOT("Neitiznot" , DiscordAreaType.CITIES, 9275), - CITY_PISCATORIS("Piscatoris" , DiscordAreaType.CITIES, 9273), - CITY_POLLNIVNEACH("Pollnivneach" , DiscordAreaType.CITIES, 13358), - CITY_PORT_KHAZARD("Port Khazard" , DiscordAreaType.CITIES, 10545), - CITY_PORT_PHASMATYS("Port Phasmatys" , DiscordAreaType.CITIES, 14646), - CITY_PORT_SARIM("Port Sarim" , DiscordAreaType.CITIES, 12082), - CITY_PISCARILIUS_HOUSE("Port Piscarilius" , DiscordAreaType.CITIES, 6971, 7227, 6970, 7226), + CITY_NARDAH("Nardah", DiscordAreaType.CITIES, 13613), + CITY_NEITIZNOT("Neitiznot", DiscordAreaType.CITIES, 9275), + CITY_PISCATORIS("Piscatoris", DiscordAreaType.CITIES, 9273), + CITY_POLLNIVNEACH("Pollnivneach", DiscordAreaType.CITIES, 13358), + CITY_PORT_KHAZARD("Port Khazard", DiscordAreaType.CITIES, 10545), + CITY_PORT_PHASMATYS("Port Phasmatys", DiscordAreaType.CITIES, 14646), + CITY_PORT_SARIM("Port Sarim", DiscordAreaType.CITIES, 12082), + CITY_PISCARILIUS_HOUSE("Port Piscarilius", DiscordAreaType.CITIES, 6971, 7227, 6970, 7226), CITY_PRIFDDINAS("Prifddinas", DiscordAreaType.CITIES, 12894, 12895, 13150, 13151), - CITY_RELLEKKA("Rellekka" , DiscordAreaType.CITIES, 10553), - CITY_RIMMINGTON("Rimmington" , DiscordAreaType.CITIES, 11826, 11570), - CITY_SEERS_VILLAGE("Seers' Village" , DiscordAreaType.CITIES, 10806), - CITY_SHAYZIEN_HOUSE("Shayzien" , DiscordAreaType.CITIES, 5944, 5943, 6200, 6199, 5688), - CITY_SHILO_VILLAGE("Shilo Village" , DiscordAreaType.CITIES, 11310), - CITY_SOPHANEM("Sophanem" , DiscordAreaType.CITIES, 13099), - CITY_TAI_BWO_WANNAI("Tai Bwo Wannai" , DiscordAreaType.CITIES, 11056, 11055), - CITY_TAVERLEY("Taverley" , DiscordAreaType.CITIES, 11574, 11573), - CITY_TREE_GNOME_STRONGHOLD("Tree Gnome Stronghold" , DiscordAreaType.CITIES, 9782, 9781), - CITY_TREE_GNOME_VILLAGE("Tree Gnome Village" , DiscordAreaType.CITIES, 10033), - CITY_TROLL_STRONGHOLD("Troll Stronghold" , DiscordAreaType.CITIES, 11321), - CITY_TYRAS_CAMP("Tyras Camp" , DiscordAreaType.CITIES, 8753, 8752), - CITY_UZER("Uzer" , DiscordAreaType.CITIES, 13872), - CITY_VARROCK("Varrock" , DiscordAreaType.CITIES, 12596, 12597, 12598, 12852, 12853, 12854, 13108, 13109, 13110), - CITY_WITCHHAVEN("Witchaven" , DiscordAreaType.CITIES, 10803), + CITY_RELLEKKA("Rellekka", DiscordAreaType.CITIES, 10553), + CITY_RIMMINGTON("Rimmington", DiscordAreaType.CITIES, 11826, 11570), + CITY_SEERS_VILLAGE("Seers' Village", DiscordAreaType.CITIES, 10806), + CITY_SHAYZIEN_HOUSE("Shayzien", DiscordAreaType.CITIES, 5944, 5943, 6200, 6199, 5688), + CITY_SHILO_VILLAGE("Shilo Village", DiscordAreaType.CITIES, 11310), + CITY_SOPHANEM("Sophanem", DiscordAreaType.CITIES, 13099), + CITY_TAI_BWO_WANNAI("Tai Bwo Wannai", DiscordAreaType.CITIES, 11056, 11055), + CITY_TAVERLEY("Taverley", DiscordAreaType.CITIES, 11574, 11573), + CITY_TREE_GNOME_STRONGHOLD("Tree Gnome Stronghold", DiscordAreaType.CITIES, 9782, 9781), + CITY_TREE_GNOME_VILLAGE("Tree Gnome Village", DiscordAreaType.CITIES, 10033), + CITY_TROLL_STRONGHOLD("Troll Stronghold", DiscordAreaType.CITIES, 11321), + CITY_TYRAS_CAMP("Tyras Camp", DiscordAreaType.CITIES, 8753, 8752), + CITY_UZER("Uzer", DiscordAreaType.CITIES, 13872), + CITY_VARROCK("Varrock", DiscordAreaType.CITIES, 12596, 12597, 12598, 12852, 12853, 12854, 13108, 13109, 13110), + CITY_WITCHHAVEN("Witchaven", DiscordAreaType.CITIES, 10803), CITY_WOODCUTTING_GUILD("Woodcutting Guild", DiscordAreaType.CITIES, 6454, 6198, 6298), - CITY_YANILLE("Yanille" , DiscordAreaType.CITIES, 10288, 10032), - CITY_ZANARIS("Zanaris" , DiscordAreaType.CITIES, 9285, 9541, 9540, 9797), - CITY_ZULANDRA("Zul-Andra" , DiscordAreaType.CITIES, 8751), + CITY_YANILLE("Yanille", DiscordAreaType.CITIES, 10288, 10032), + CITY_ZANARIS("Zanaris", DiscordAreaType.CITIES, 9285, 9541, 9540, 9797), + CITY_ZULANDRA("Zul-Andra", DiscordAreaType.CITIES, 8751), // Dungeons DUNGEON_ABANDONED_MINE("Abandoned Mine", DiscordAreaType.DUNGEONS, 13718, 11079, 11078, 11077, 10823, 10822, 10821), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordPlugin.java index 3dca3deef2..40fa5ffafd 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordPlugin.java @@ -46,7 +46,6 @@ import net.runelite.api.GameState; import net.runelite.api.Skill; import net.runelite.api.WorldType; import net.runelite.api.coords.WorldPoint; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.StatChanged; import net.runelite.api.events.VarbitChanged; @@ -56,7 +55,8 @@ import net.runelite.client.discord.DiscordService; import net.runelite.client.discord.events.DiscordJoinGame; import net.runelite.client.discord.events.DiscordJoinRequest; import net.runelite.client.discord.events.DiscordReady; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.events.PartyChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -76,6 +76,7 @@ import okhttp3.Call; import okhttp3.Callback; import okhttp3.Request; import okhttp3.Response; +import org.jetbrains.annotations.NotNull; @PluginDescriptor( name = "Discord", @@ -107,9 +108,6 @@ public class DiscordPlugin extends Plugin @Inject private WSClient wsClient; - @Inject - private EventBus eventBus; - private final Map skillExp = new HashMap<>(); private NavigationButton discordButton; private boolean loginFlag; @@ -134,10 +132,9 @@ public class DiscordPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); final BufferedImage icon = ImageUtil.getResourceStreamFromClass(getClass(), "discord.png"); @@ -161,32 +158,15 @@ public class DiscordPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - clientToolbar.removeNavigation(discordButton); discordState.reset(); partyService.changeParty(null); wsClient.unregisterMessage(DiscordUserInfo.class); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(StatChanged.class, this, this::onStatChanged); - eventBus.subscribe(VarbitChanged.class, this, this::onVarbitChanged); - eventBus.subscribe(DiscordReady.class, this, this::onDiscordReady); - eventBus.subscribe(DiscordJoinRequest.class, this, this::onDiscordJoinRequest); - eventBus.subscribe(DiscordJoinGame.class, this, this::onDiscordJoinGame); - eventBus.subscribe(DiscordUserInfo.class, this, this::onDiscordUserInfo); - eventBus.subscribe(UserJoin.class, this, this::onUserJoin); - eventBus.subscribe(UserSync.class, this, this::onUserSync); - eventBus.subscribe(UserPart.class, this, this::onUserPart); - eventBus.subscribe(PartyChanged.class, this, this::onPartyChanged); - } - + @Subscribe private void onGameStateChanged(GameStateChanged event) { switch (event.getGameState()) @@ -210,6 +190,7 @@ public class DiscordPlugin extends Plugin checkForAreaUpdate(); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equalsIgnoreCase("discord")) @@ -222,6 +203,7 @@ public class DiscordPlugin extends Plugin } } + @Subscribe private void onStatChanged(StatChanged statChanged) { final Skill skill = statChanged.getSkill(); @@ -241,6 +223,7 @@ public class DiscordPlugin extends Plugin } } + @Subscribe private void onVarbitChanged(VarbitChanged event) { if (!this.showRaidingActivity) @@ -256,11 +239,13 @@ public class DiscordPlugin extends Plugin } } + @Subscribe private void onDiscordReady(DiscordReady event) { partyService.setUsername(event.getUsername() + "#" + event.getDiscriminator()); } + @Subscribe private void onDiscordJoinRequest(DiscordJoinRequest request) { log.debug("Got discord join request {}", request); @@ -272,6 +257,7 @@ public class DiscordPlugin extends Plugin } } + @Subscribe private void onDiscordJoinGame(DiscordJoinGame joinGame) { log.debug("Got discord join game {}", joinGame); @@ -280,6 +266,7 @@ public class DiscordPlugin extends Plugin updatePresence(); } + @Subscribe private void onDiscordUserInfo(final DiscordUserInfo event) { final PartyMember memberById = partyService.getMemberById(event.getMemberId()); @@ -297,7 +284,7 @@ public class DiscordPlugin extends Plugin if (split.length == 2) { - int disc = Integer.valueOf(split[1]); + int disc = Integer.parseInt(split[1]); int avatarId = disc % 5; url = "https://cdn.discordapp.com/embed/avatars/" + avatarId + ".png"; } @@ -312,14 +299,15 @@ public class DiscordPlugin extends Plugin RuneLiteAPI.CLIENT.newCall(request).enqueue(new Callback() { @Override - public void onFailure(Call call, IOException e) + public void onFailure(@NotNull Call call, @NotNull IOException e) { } @Override - public void onResponse(Call call, Response response) throws IOException + public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { + //noinspection TryFinallyCanBeTryWithResources try { if (!response.isSuccessful()) @@ -339,11 +327,13 @@ public class DiscordPlugin extends Plugin }); } + @Subscribe private void onUserJoin(final UserJoin event) { updatePresence(); } + @Subscribe private void onUserSync(final UserSync event) { final PartyMember localMember = partyService.getLocalMember(); @@ -359,11 +349,13 @@ public class DiscordPlugin extends Plugin } } + @Subscribe private void onUserPart(final UserPart event) { updatePresence(); } + @Subscribe private void onPartyChanged(final PartyChanged event) { updatePresence(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/dropparty/DropPartyPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/dropparty/DropPartyPlugin.java index 4ee77399b8..79e3ead171 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/dropparty/DropPartyPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/dropparty/DropPartyPlugin.java @@ -1,210 +1,201 @@ -/* - * Copyright (c) 2017, Adam - * All rights reserved. - * - * - * Modified by farhan1666 - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package net.runelite.client.plugins.dropparty; - -import com.google.inject.Provides; -import java.awt.Color; -import java.util.ArrayList; -import java.util.List; -import javax.inject.Inject; -import javax.inject.Singleton; -import lombok.AccessLevel; -import lombok.Getter; -import net.runelite.api.Client; -import net.runelite.api.Player; -import net.runelite.api.coords.WorldPoint; -import net.runelite.api.events.GameTick; -import net.runelite.api.util.Text; -import net.runelite.client.Notifier; -import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; -import net.runelite.client.events.ConfigChanged; -import net.runelite.client.plugins.Plugin; -import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.plugins.PluginType; -import net.runelite.client.ui.overlay.OverlayManager; - - -@PluginDescriptor( - name = "Drop Party", - description = "Marks where a user ran, for drop partys", - tags = {"Drop", "Party", "marker", "player"}, - type = PluginType.UTILITY, - enabledByDefault = false -) -@Singleton -public class DropPartyPlugin extends Plugin -{ - @Inject - private DropPartyConfig config; - @Getter(AccessLevel.PACKAGE) - private List playerPath = new ArrayList<>(); - @Getter(AccessLevel.PACKAGE) - private String playerName = ""; - @Getter(AccessLevel.PACKAGE) - private int showAmmount = 0; - @Getter(AccessLevel.PACKAGE) - private int MAXPATHSIZE = 100; - private Player runningPlayer; - @Getter(AccessLevel.PACKAGE) - private Color overlayColor; - - @Inject - private Notifier notifier; - @Inject - private OverlayManager overlayManager; - @Inject - private DropPartyOverlay coreOverlay; - @Inject - private EventBus eventbus; - @Inject - private Client client; - @Getter(AccessLevel.PACKAGE) - private int fontStyle; - @Getter(AccessLevel.PACKAGE) - private int textSize; - - @Provides - DropPartyConfig getConfig(ConfigManager configManager) - { - return configManager.getConfig(DropPartyConfig.class); - } - - @Override - protected void startUp() - { - updateConfig(); - addSubscriptions(); - overlayManager.add(coreOverlay); - reset(); - } - - @Override - protected void shutDown() - { - overlayManager.remove(coreOverlay); - reset(); - eventbus.unregister(this); - } - - private void addSubscriptions() - { - eventbus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventbus.subscribe(GameTick.class, this, this::onGameTick); - } - - - private void onGameTick(GameTick event) - { - shuffleList(); - if (playerName.equalsIgnoreCase("")) - { - return; - } - - runningPlayer = null; - - for (Player player : client.getPlayers()) - { - if (player.getName() == null) - { - continue; - } - if (Text.standardize(player.getName()).equalsIgnoreCase(playerName)) - { - runningPlayer = player; - break; - } - - } - - if (runningPlayer == null) - { - cordsError(); - return; - } - addCords(); - } - - private void cordsError() - { - playerPath.add(null); - - } - - private void shuffleList() - { - if (playerPath.size() > MAXPATHSIZE - 1) - { - playerPath.remove(0); - } - } - - private void addCords() - { - while (true) - { - if (playerPath.size() >= MAXPATHSIZE) - { - playerPath.add(runningPlayer.getWorldLocation()); - break; - } - playerPath.add(null); - - } - - - } - - private void onConfigChanged(ConfigChanged event) - { - if (!event.getGroup().equals("drop")) - { - return; - } - - updateConfig(); - } - - - private void reset() - { - playerPath.clear(); - - } - - - private void updateConfig() - { - this.playerName = config.playerName(); - this.showAmmount = config.showAmmount(); - this.overlayColor = config.overlayColor(); - this.fontStyle = config.fontStyle().getFont(); - this.textSize = config.textSize(); - } -} +/* + * Copyright (c) 2017, Adam + * All rights reserved. + * + * + * Modified by farhan1666 + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.client.plugins.dropparty; + +import com.google.inject.Provides; +import java.awt.Color; +import java.util.ArrayList; +import java.util.List; +import javax.inject.Inject; +import javax.inject.Singleton; +import lombok.AccessLevel; +import lombok.Getter; +import net.runelite.api.Client; +import net.runelite.api.Player; +import net.runelite.api.coords.WorldPoint; +import net.runelite.api.events.GameTick; +import net.runelite.api.util.Text; +import net.runelite.client.config.ConfigManager; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; +import net.runelite.client.plugins.Plugin; +import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; +import net.runelite.client.ui.overlay.OverlayManager; + + +@PluginDescriptor( + name = "Drop Party", + description = "Marks where a user ran, for drop partys", + tags = {"Drop", "Party", "marker", "player"}, + type = PluginType.UTILITY, + enabledByDefault = false +) +@Singleton +public class DropPartyPlugin extends Plugin +{ + @Inject + private DropPartyConfig config; + @Getter(AccessLevel.PACKAGE) + private List playerPath = new ArrayList<>(); + @Getter(AccessLevel.PACKAGE) + private String playerName = ""; + @Getter(AccessLevel.PACKAGE) + private int showAmmount = 0; + @Getter(AccessLevel.PACKAGE) + private int MAXPATHSIZE = 100; + private Player runningPlayer; + @Getter(AccessLevel.PACKAGE) + private Color overlayColor; + + @Inject + private OverlayManager overlayManager; + + @Inject + private DropPartyOverlay coreOverlay; + + @Inject + private Client client; + + @Getter(AccessLevel.PACKAGE) + private int fontStyle; + @Getter(AccessLevel.PACKAGE) + private int textSize; + + @Provides + DropPartyConfig getConfig(ConfigManager configManager) + { + return configManager.getConfig(DropPartyConfig.class); + } + + @Override + protected void startUp() + { + updateConfig(); + overlayManager.add(coreOverlay); + reset(); + } + + @Override + protected void shutDown() + { + overlayManager.remove(coreOverlay); + reset(); + } + + @Subscribe + private void onGameTick(GameTick event) + { + shuffleList(); + if (playerName.equalsIgnoreCase("")) + { + return; + } + + runningPlayer = null; + + for (Player player : client.getPlayers()) + { + if (player.getName() == null) + { + continue; + } + if (Text.standardize(player.getName()).equalsIgnoreCase(playerName)) + { + runningPlayer = player; + break; + } + + } + + if (runningPlayer == null) + { + cordsError(); + return; + } + addCords(); + } + + private void cordsError() + { + playerPath.add(null); + + } + + private void shuffleList() + { + if (playerPath.size() > MAXPATHSIZE - 1) + { + playerPath.remove(0); + } + } + + private void addCords() + { + while (true) + { + if (playerPath.size() >= MAXPATHSIZE) + { + playerPath.add(runningPlayer.getWorldLocation()); + break; + } + playerPath.add(null); + + } + + + } + + @Subscribe + private void onConfigChanged(ConfigChanged event) + { + if (!event.getGroup().equals("drop")) + { + return; + } + + updateConfig(); + } + + + private void reset() + { + playerPath.clear(); + + } + + + private void updateConfig() + { + this.playerName = config.playerName(); + this.showAmmount = config.showAmmount(); + this.overlayColor = config.overlayColor(); + this.fontStyle = config.fontStyle().getFont(); + this.textSize = config.textSize(); + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/dynamicmaxhit/AttackStyle.java b/runelite-client/src/main/java/net/runelite/client/plugins/dynamicmaxhit/AttackStyle.java index 3813c30fe0..058dbc8f53 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/dynamicmaxhit/AttackStyle.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/dynamicmaxhit/AttackStyle.java @@ -24,12 +24,13 @@ package net.runelite.client.plugins.dynamicmaxhit; import java.awt.Color; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; import net.runelite.api.Prayer; @AllArgsConstructor -@Getter +@Getter(AccessLevel.PACKAGE) public enum AttackStyle { MAGE("Mage", Color.CYAN, Prayer.PROTECT_FROM_MAGIC), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/dynamicmaxhit/DynamicMaxHit.java b/runelite-client/src/main/java/net/runelite/client/plugins/dynamicmaxhit/DynamicMaxHit.java index b8abfbb60a..6560fc0f92 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/dynamicmaxhit/DynamicMaxHit.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/dynamicmaxhit/DynamicMaxHit.java @@ -55,6 +55,7 @@ import net.runelite.api.kit.KitType; import net.runelite.api.util.Text; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.menus.MenuManager; @@ -113,8 +114,8 @@ public class DynamicMaxHit extends Plugin @Getter(AccessLevel.PACKAGE) private Map victims = new HashMap<>(); private boolean antiFireActive; - private ExecutorService httpExecutor = Executors.newFixedThreadPool(100); - private Map resultCache = new HashMap<>(); + private final ExecutorService httpExecutor = Executors.newFixedThreadPool(100); + private final Map resultCache = new HashMap<>(); private boolean enablePrayer; private boolean enablePotions; @@ -163,9 +164,9 @@ public class DynamicMaxHit extends Plugin eventBus.subscribe(SpotAnimationChanged.class, this, this::onSpotAnimationChanged); eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); eventBus.subscribe(PlayerMenuOptionClicked.class, this, this::onPlayerMenuOptionClicked); - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("dynamicMaxHit")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/dynamicmaxhit/Potions.java b/runelite-client/src/main/java/net/runelite/client/plugins/dynamicmaxhit/Potions.java index 4bcb49bd39..eaca31d43c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/dynamicmaxhit/Potions.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/dynamicmaxhit/Potions.java @@ -23,11 +23,12 @@ */ package net.runelite.client.plugins.dynamicmaxhit; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; import net.runelite.http.api.hiscore.HiscoreSkill; -@Getter +@Getter(AccessLevel.PACKAGE) @AllArgsConstructor public enum Potions { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/dynamicmaxhit/Spells.java b/runelite-client/src/main/java/net/runelite/client/plugins/dynamicmaxhit/Spells.java index f361f20257..11f4717f5b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/dynamicmaxhit/Spells.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/dynamicmaxhit/Spells.java @@ -23,10 +23,11 @@ */ package net.runelite.client.plugins.dynamicmaxhit; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; -@Getter +@Getter(AccessLevel.PACKAGE) @AllArgsConstructor enum Spells { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/dynamicmaxhit/Weapons.java b/runelite-client/src/main/java/net/runelite/client/plugins/dynamicmaxhit/Weapons.java index d1d3f21294..6d43bf9a18 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/dynamicmaxhit/Weapons.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/dynamicmaxhit/Weapons.java @@ -25,12 +25,13 @@ package net.runelite.client.plugins.dynamicmaxhit; import com.google.common.collect.ImmutableSet; import java.util.Set; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; import net.runelite.api.ItemID; @AllArgsConstructor -@Getter +@Getter(AccessLevel.PACKAGE) enum Weapons { ABYSSAL_DAGGER(ImmutableSet.of(ItemID.ABYSSAL_DAGGER, ItemID.ABYSSAL_DAGGER_P, ItemID.ABYSSAL_DAGGER_P_13269, ItemID.ABYSSAL_DAGGER_P_13271), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/emojis/Emoji.java b/runelite-client/src/main/java/net/runelite/client/plugins/emojis/Emoji.java index b0ed60a55e..16e27b1519 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/emojis/Emoji.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/emojis/Emoji.java @@ -79,7 +79,14 @@ enum Emoji PARTY_POPPER("@@@"), EYES("O.O"), SWEAT(";;"), - PILE_OF_POO("~@~"); + PILE_OF_POO("~@~"), + FIRE("(/\\)"), + ALIEN("(@.@)"), + EGGPLANT("8=D"), + WAVE("(^_^)/"), + HEART_EYES("(*.*)"), + FACEPALM("M-)"), + ; private static final Map emojiMap; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/emojis/EmojiPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/emojis/EmojiPlugin.java index 24eedb2c63..cafd835cce 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/emojis/EmojiPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/emojis/EmojiPlugin.java @@ -42,7 +42,7 @@ import net.runelite.api.events.ChatMessage; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.OverheadTextChanged; import net.runelite.client.chat.ChatMessageManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.util.ImageUtil; @@ -65,31 +65,15 @@ public class EmojiPlugin extends Plugin @Inject private ChatMessageManager chatMessageManager; - @Inject - private EventBus eventBus; - private int modIconsStart = -1; @Override protected void startUp() { loadEmojiIcons(); - addSubscriptions(); - } - - @Override - protected void shutDown() throws Exception - { - eventBus.unregister(this); - } - - private void addSubscriptions() - { - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - eventBus.subscribe(OverheadTextChanged.class, this, this::onOverheadTextChanged); } + @Subscribe void onGameStateChanged(GameStateChanged gameStateChanged) { if (gameStateChanged.getGameState() == GameState.LOGGED_IN) @@ -130,6 +114,7 @@ public class EmojiPlugin extends Plugin client.setModIcons(newModIcons); } + @Subscribe void onChatMessage(ChatMessage chatMessage) { if (client.getGameState() != GameState.LOGGED_IN || modIconsStart == -1) @@ -164,6 +149,7 @@ public class EmojiPlugin extends Plugin client.refreshChat(); } + @Subscribe private void onOverheadTextChanged(final OverheadTextChanged event) { if (!(event.getActor() instanceof Player)) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/entityhider/EntityHiderConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/entityhider/EntityHiderConfig.java index 7ca7cd85fc..dc82354a4e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/entityhider/EntityHiderConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/entityhider/EntityHiderConfig.java @@ -234,11 +234,22 @@ public interface EntityHiderConfig extends Config return ""; } + @ConfigItem( + position = 18, + keyName = "hidePets", + name = "Hide Pets", + description = "Configures whether or not other player pets are hidden" + ) + default boolean hidePets() + { + return false; + } + @ConfigTitleSection( keyName = "miscTitle", name = "Miscellaneous", description = "", - position = 18 + position = 19 ) default Title miscTitle() { @@ -246,7 +257,7 @@ public interface EntityHiderConfig extends Config } @ConfigItem( - position = 19, + position = 20, keyName = "hideProjectiles", name = "Hide Projectiles", description = "Configures whether or not projectiles are hidden", diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/entityhider/EntityHiderPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/entityhider/EntityHiderPlugin.java index 4817fbc706..e89ac5a252 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/entityhider/EntityHiderPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/entityhider/EntityHiderPlugin.java @@ -36,11 +36,11 @@ import net.runelite.api.Client; import net.runelite.api.GameState; import net.runelite.api.Player; import net.runelite.api.coords.WorldPoint; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.GameStateChanged; import net.runelite.api.util.Text; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -59,9 +59,6 @@ public class EntityHiderPlugin extends Plugin @Inject private EntityHiderConfig config; - @Inject - private EventBus eventBus; - @Provides EntityHiderConfig provideConfig(ConfigManager configManager) { @@ -72,18 +69,12 @@ public class EntityHiderPlugin extends Plugin protected void startUp() { updateConfig(); - addSubscriptions(); Text.fromCSV(config.hideNPCsNames()).forEach(client::addHiddenNpcName); Text.fromCSV(config.hideNPCsOnDeath()).forEach(client::addHiddenNpcDeath); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - } - + @Subscribe public void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("entityhider")) @@ -121,6 +112,7 @@ public class EntityHiderPlugin extends Plugin } } + @Subscribe public void onGameStateChanged(GameStateChanged event) { if (event.getGameState() == GameState.LOGGED_IN) @@ -148,6 +140,8 @@ public class EntityHiderPlugin extends Plugin //client.setNPCsNames(Text.fromCSV(config.hideNPCsNames())); //client.setNPCsHiddenOnDeath(Text.fromCSV(config.hideNPCsOnDeath())); + client.setPetsHidden(config.hidePets()); + client.setAttackersHidden(config.hideAttackers()); client.setProjectilesHidden(config.hideProjectiles()); @@ -156,10 +150,8 @@ public class EntityHiderPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - client.setIsHidingEntities(false); client.setPlayersHidden(false); @@ -174,6 +166,8 @@ public class EntityHiderPlugin extends Plugin client.setNPCsHidden(false); client.setNPCsHidden2D(false); + client.setPetsHidden(false); + client.setAttackersHidden(false); client.setProjectilesHidden(false); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/equipmentinspector/EquipmentInspectorConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/equipmentinspector/EquipmentInspectorConfig.java index 713779892a..526a49144b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/equipmentinspector/EquipmentInspectorConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/equipmentinspector/EquipmentInspectorConfig.java @@ -38,7 +38,7 @@ public interface EquipmentInspectorConfig extends Config description = "shows the total value of the items", position = 1 ) - default boolean ShowValue() + default boolean showValue() { return true; } @@ -49,11 +49,11 @@ public interface EquipmentInspectorConfig extends Config ) @ConfigItem( keyName = "protecteditems", - name = "protected items", - description = "Limit 4", + name = "Protected Items", + description = "Limited to 4", position = 2 ) - default int protecteditems() + default int protectedItems() { return 1; } @@ -64,7 +64,7 @@ public interface EquipmentInspectorConfig extends Config description = "shows the excact gp value", position = 3 ) - default boolean ExactValue() + default boolean exactValue() { return false; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/equipmentinspector/EquipmentInspectorPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/equipmentinspector/EquipmentInspectorPlugin.java index da5dedc012..bdb574111a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/equipmentinspector/EquipmentInspectorPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/equipmentinspector/EquipmentInspectorPlugin.java @@ -24,18 +24,14 @@ */ package net.runelite.client.plugins.equipmentinspector; - import com.google.inject.Provides; import java.awt.image.BufferedImage; import java.lang.reflect.InvocationTargetException; import java.text.NumberFormat; import java.util.HashMap; -import java.util.List; +import java.util.LinkedHashMap; import java.util.Map; -import java.util.Objects; -import java.util.Optional; import java.util.concurrent.ScheduledExecutorService; -import javax.annotation.Nullable; import javax.inject.Inject; import javax.inject.Singleton; import javax.swing.SwingUtilities; @@ -43,7 +39,6 @@ import lombok.extern.slf4j.Slf4j; import net.runelite.api.ChatMessageType; import net.runelite.api.Client; import net.runelite.api.ItemDefinition; -import net.runelite.api.Player; import net.runelite.api.events.PlayerMenuOptionClicked; import net.runelite.api.kit.KitType; import net.runelite.api.util.Text; @@ -52,9 +47,11 @@ import net.runelite.client.chat.ChatMessageBuilder; import net.runelite.client.chat.ChatMessageManager; import net.runelite.client.chat.QueuedMessage; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; +import net.runelite.client.game.PlayerContainer; +import net.runelite.client.game.PlayerManager; import net.runelite.client.menus.MenuManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -62,6 +59,7 @@ import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.ClientToolbar; import net.runelite.client.ui.NavigationButton; import net.runelite.client.util.ImageUtil; +import net.runelite.client.util.QuantityFormatter; @PluginDescriptor( name = "Equipment Inspector", @@ -75,40 +73,27 @@ public class EquipmentInspectorPlugin extends Plugin private static final String INSPECT_EQUIPMENT = "Gear"; @Inject - @Nullable private Client client; - @Inject private ItemManager itemManager; - @Inject private EquipmentInspectorConfig config; - @Inject private ChatMessageManager chatMessageManager; @Inject private MenuManager menuManager; - @Inject private ScheduledExecutorService executor; - @Inject private ClientToolbar pluginToolbar; - @Inject - private EventBus eventBus; + private PlayerManager playerManager; private NavigationButton navButton; private EquipmentInspectorPanel equipmentInspectorPanel; - private int TotalPrice = 0; - private int Prot1 = 0; - private int Prot2 = 0; - private int Prot3 = 0; - private int Prot4 = 0; - - private boolean ShowValue; - private int protecteditems; - private boolean ExactValue; + private boolean showValue; + private int protectedItems; + private boolean exactValue; @Provides EquipmentInspectorConfig provideConfig(ConfigManager configManager) @@ -117,10 +102,9 @@ public class EquipmentInspectorPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); equipmentInspectorPanel = injector.getInstance(EquipmentInspectorPanel.class); if (client != null) @@ -142,170 +126,100 @@ public class EquipmentInspectorPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - menuManager.removePlayerMenuItem(INSPECT_EQUIPMENT); pluginToolbar.removeNavigation(navButton); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(PlayerMenuOptionClicked.class, this, this::onPlayerMenuOptionClicked); - } - + @Subscribe private void onPlayerMenuOptionClicked(PlayerMenuOptionClicked event) { - if (event.getMenuOption().equals(INSPECT_EQUIPMENT)) + if (!event.getMenuOption().equals(INSPECT_EQUIPMENT)) { - executor.execute(() -> - { - try - { - SwingUtilities.invokeAndWait(() -> - { - if (!navButton.isSelected()) - { - navButton.getOnSelect().run(); - } - }); - } - catch (InterruptedException | InvocationTargetException e) - { - - throw new RuntimeException(e); - - } - String playerName = Text.removeTags(event.getMenuTarget()); - // The player menu uses a non-breaking space in the player name, we need to replace this to compare - // against the playerName in the player cache. - String finalPlayerName = playerName.replace('\u00A0', ' '); - List players = null; - if (client != null) - { - players = client.getPlayers(); - } - Optional targetPlayer = Optional.empty(); - if (players != null) - { - targetPlayer = players.stream() - .filter(Objects::nonNull) - .filter(p -> p.getName().equals(finalPlayerName)).findFirst(); - } - - if (targetPlayer.isPresent()) - { - TotalPrice = 0; - Prot1 = 0; - Prot2 = 0; - Prot3 = 0; - Prot4 = 0; - Player p = targetPlayer.get(); - Map playerEquipment = new HashMap<>(); - - for (KitType kitType : KitType.values()) - { - if (kitType == KitType.RING) - { - continue; //prevents the equipment inspector from breaking - } - if (kitType == KitType.AMMUNITION) - { - continue; - } - - int itemId = p.getPlayerAppearance().getEquipmentId(kitType); - if (itemId != -1) - { - ItemDefinition itemComposition = client.getItemDefinition(itemId); - playerEquipment.put(kitType, itemComposition); - int ItemPrice = itemManager.getItemPrice(itemId); - TotalPrice += ItemPrice; - if (ItemPrice > Prot1) - { - Prot4 = Prot3; - Prot3 = Prot2; - Prot2 = Prot1; - - Prot1 = ItemPrice; - } - else if (ItemPrice > Prot2) - { - Prot4 = Prot3; - Prot3 = Prot2; - Prot2 = ItemPrice; - } - else if (ItemPrice > Prot3) - { - Prot4 = Prot3; - Prot3 = ItemPrice; - } - else if (ItemPrice > Prot4) - { - Prot4 = ItemPrice; - } - } - } - int IgnoredItems = this.protecteditems; - if (IgnoredItems != 0 && IgnoredItems != 1 && IgnoredItems != 2 && IgnoredItems != 3) - { - IgnoredItems = 4; - - } - if (this.ShowValue) - { - switch (IgnoredItems) - { - case 1: - TotalPrice = TotalPrice - Prot1; - break; - case 2: - TotalPrice = TotalPrice - Prot1; - TotalPrice = TotalPrice - Prot2; - - break; - case 3: - TotalPrice = TotalPrice - Prot1; - TotalPrice = TotalPrice - Prot2; - TotalPrice = TotalPrice - Prot3; - break; - case 4: - TotalPrice = TotalPrice - Prot1; - TotalPrice = TotalPrice - Prot2; - TotalPrice = TotalPrice - Prot3; - TotalPrice = TotalPrice - Prot4; - break; - } - String StringPrice = ""; - if (!this.ExactValue) - { - TotalPrice = TotalPrice / 1000; - StringPrice = NumberFormat.getIntegerInstance().format(TotalPrice); - StringPrice = StringPrice + 'K'; - } - if (this.ExactValue) - { - StringPrice = NumberFormat.getIntegerInstance().format(TotalPrice); - } - chatMessageManager.queue(QueuedMessage.builder() - .type(ChatMessageType.CONSOLE) - .runeLiteFormattedMessage(new ChatMessageBuilder() - .append(ChatColorType.HIGHLIGHT) - .append("Risked Value: ") - .append(ChatColorType.NORMAL) - .append(StringPrice) - .build()) - .build()); - } - equipmentInspectorPanel.update(playerEquipment, playerName); - - } - }); + return; } + + executor.execute(() -> + { + try + { + SwingUtilities.invokeAndWait(() -> + { + if (!navButton.isSelected()) + { + navButton.getOnSelect().run(); + } + }); + } + catch (InterruptedException | InvocationTargetException e) + { + throw new RuntimeException(e); + } + + String playerName = Text.removeTags(event.getMenuTarget()).replace('\u00A0', ' '); + final PlayerContainer player = playerManager.getPlayer(playerName); + final Map playerEquipment = new HashMap<>(); + + if (player == null) + { + return; + } + + for (KitType kitType : KitType.values()) + { + if (kitType == KitType.RING || kitType == KitType.AMMUNITION || + player.getPlayer().getPlayerAppearance() == null) + { + continue; + } + + final int itemId = player.getPlayer().getPlayerAppearance().getEquipmentId(kitType); + + if (itemId != -1) + { + ItemDefinition itemComposition = client.getItemDefinition(itemId); + playerEquipment.put(kitType, itemComposition); + } + } + + if (this.showValue) + { + final LinkedHashMap gear = new LinkedHashMap<>(player.getGear()); + removeEntries(gear, this.protectedItems); + + int risk = 0; + for (int value : gear.values()) + { + risk += value; + } + + String price; + + if (!this.exactValue) + { + price = QuantityFormatter.quantityToRSDecimalStack(risk); + } + else + { + price = NumberFormat.getIntegerInstance().format(risk); + } + + chatMessageManager.queue(QueuedMessage.builder() + .type(ChatMessageType.CONSOLE) + .runeLiteFormattedMessage(new ChatMessageBuilder() + .append(ChatColorType.HIGHLIGHT) + .append("Risked Value: ") + .append(ChatColorType.NORMAL) + .append(price) + .build()) + .build()); + } + equipmentInspectorPanel.update(playerEquipment, playerName); + }); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equalsIgnoreCase("equipmentinspector")) @@ -314,10 +228,22 @@ public class EquipmentInspectorPlugin extends Plugin } } + private static void removeEntries(LinkedHashMap map, int quantity) + { + for (int i = 0; i < quantity; i++) + { + if (!map.entrySet().iterator().hasNext()) + { + return; + } + map.entrySet().remove(map.entrySet().iterator().next()); + } + } + private void updateConfig() { - this.ShowValue = config.ShowValue(); - this.protecteditems = config.protecteditems(); - this.ExactValue = config.ExactValue(); + this.showValue = config.showValue(); + this.protectedItems = config.protectedItems(); + this.exactValue = config.exactValue(); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java index a86db6b477..a7db4ca64f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java @@ -54,7 +54,7 @@ import net.runelite.client.chat.ChatColorType; import net.runelite.client.chat.ChatMessageBuilder; import net.runelite.client.chat.ChatMessageManager; import net.runelite.client.chat.QueuedMessage; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -102,33 +102,13 @@ public class ExaminePlugin extends Plugin @Inject private ScheduledExecutorService executor; - @Inject - private EventBus eventBus; - - @Override - protected void startUp() throws Exception - { - addSubscriptions(); - } - - @Override - protected void shutDown() throws Exception - { - eventBus.unregister(this); - } - - private void addSubscriptions() - { - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(MenuOptionClicked.class, this, this::onMenuOptionClicked); - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - } - + @Subscribe private void onGameStateChanged(GameStateChanged event) { pending.clear(); } + @Subscribe void onMenuOptionClicked(MenuOptionClicked event) { if (!event.getOption().equals("Examine")) @@ -190,6 +170,7 @@ public class ExaminePlugin extends Plugin pending.push(pendingExamine); } + @Subscribe void onChatMessage(ChatMessage event) { ExamineType type; @@ -336,24 +317,6 @@ public class ExaminePlugin extends Plugin return new int[]{1, widgetItem.getItemId()}; } } - else if (WidgetInfo.CLUE_SCROLL_REWARD_ITEM_CONTAINER.getGroupId() == widgetGroup) - { - Widget[] children = widget.getDynamicChildren(); - if (actionParam < children.length) - { - Widget widgetItem = children[actionParam]; - return new int[]{widgetItem.getItemQuantity(), widgetItem.getItemId()}; - } - } - else if (WidgetInfo.LOOTING_BAG_CONTAINER.getGroupId() == widgetGroup) - { - Widget[] children = widget.getDynamicChildren(); - if (actionParam < children.length) - { - Widget widgetItem = children[actionParam]; - return new int[]{widgetItem.getItemQuantity(), widgetItem.getItemId()}; - } - } else if (WidgetID.SEED_VAULT_GROUP_ID == widgetGroup) { Widget[] children = client.getWidget(SEED_VAULT_ITEM_CONTAINER).getDynamicChildren(); @@ -363,15 +326,6 @@ public class ExaminePlugin extends Plugin return new int[]{widgetItem.getItemQuantity(), widgetItem.getItemId()}; } } - else if (WidgetID.SEED_VAULT_INVENTORY_GROUP_ID == widgetGroup) - { - Widget[] children = widget.getDynamicChildren(); - if (actionParam < children.length) - { - Widget widgetItem = children[actionParam]; - return new int[]{widgetItem.getItemQuantity(), widgetItem.getItemId()}; - } - } return null; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/experiencedrop/DefaultColors.java b/runelite-client/src/main/java/net/runelite/client/plugins/experiencedrop/DefaultColors.java index 227d82b3ee..5ac836435f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/experiencedrop/DefaultColors.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/experiencedrop/DefaultColors.java @@ -25,6 +25,7 @@ package net.runelite.client.plugins.experiencedrop; import java.awt.Color; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; @@ -40,6 +41,6 @@ enum DefaultColors ORANGE(new Color(0xFF, 0x98, 0x1F)), PINK(new Color(0xFF, 0xC8, 0xC8)); - @Getter + @Getter(AccessLevel.PACKAGE) private final Color color; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/experiencedrop/XpDropConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/experiencedrop/XpDropConfig.java index 5efa95a184..62d5e4937b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/experiencedrop/XpDropConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/experiencedrop/XpDropConfig.java @@ -36,7 +36,7 @@ public interface XpDropConfig extends Config { NONE, ABOVE_OPPONENT, - IN_XP_DROP; + IN_XP_DROP } @ConfigItem( diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/experiencedrop/XpDropPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/experiencedrop/XpDropPlugin.java index a987f56242..c26b51a2e6 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/experiencedrop/XpDropPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/experiencedrop/XpDropPlugin.java @@ -43,6 +43,7 @@ import net.runelite.api.Skill; import net.runelite.api.SpriteID; import net.runelite.api.Varbits; import net.runelite.api.WorldType; +import net.runelite.api.events.FakeXpDrop; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.ScriptCallbackEvent; @@ -51,7 +52,7 @@ import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetID; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.NPCManager; import net.runelite.client.game.XpDropEvent; @@ -70,18 +71,24 @@ public class XpDropPlugin extends Plugin private static final int XPDROP_PADDING = 2; // space between xp drop icons private static final double HITPOINT_RATIO = 1.33; // Base rate of hp xp per point damage private static final double DMM_MULTIPLIER_RATIO = 10; + private static final double TL_MULTIPLIER_RATIO = 5; + private static final int TWISTED_LEAGUE_WAY_OF_THE_WARRIOR = 3; + private static final int TWISTED_LEAGUE_XERICS_WISDOM = 3; + @Inject private Client client; + @Inject private XpDropConfig config; + @Inject private NPCManager npcManager; + @Inject private OverlayManager overlayManager; + @Inject private XpDropOverlay overlay; - @Inject - private EventBus eventBus; @Getter(AccessLevel.PACKAGE) private int damage = 0; @@ -116,10 +123,9 @@ public class XpDropPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); damageMode = config.showdamagedrops(); @@ -130,23 +136,12 @@ public class XpDropPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(overlay); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(WidgetHiddenChanged.class, this, this::onWidgetHiddenChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(XpDropEvent.class, this, this::onXpDropEvent); - eventBus.subscribe(ScriptCallbackEvent.class, this, this::onScriptCallbackEvent); - } - + @Subscribe private void onXpDropEvent(XpDropEvent event) { previousExpGained = event.getExp(); @@ -154,6 +149,7 @@ public class XpDropPlugin extends Plugin hasDropped = true; } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("xpdrop")) @@ -183,12 +179,14 @@ public class XpDropPlugin extends Plugin } } + @Subscribe private void onGameStateChanged(GameStateChanged event) { tickShow = 0; damage = 0; } + @Subscribe private void onWidgetHiddenChanged(WidgetHiddenChanged event) { Widget widget = event.getWidget(); @@ -316,6 +314,7 @@ public class XpDropPlugin extends Plugin return null; } + @Subscribe private void onGameTick(GameTick tick) { lastOpponent = client.getLocalPlayer().getInteracting(); @@ -351,6 +350,16 @@ public class XpDropPlugin extends Plugin client.runScript(XPDROP_DISABLED, lastSkill.ordinal(), previousExpGained); } + @Subscribe + private void onFakeXpDrop(FakeXpDrop fakeXpDrop) + { + if (fakeXpDrop.getSkill() == Skill.HITPOINTS) + { + calculateDamageDealt(fakeXpDrop.getXp()); + } + } + + @Subscribe private void onScriptCallbackEvent(ScriptCallbackEvent e) { if (this.showdamagedrops == XpDropConfig.DamageMode.NONE) @@ -364,21 +373,6 @@ public class XpDropPlugin extends Plugin { damage = 0; } - // Handles Fake XP drops (Ironman, DMM Cap, 200m xp, etc) - else if (eventName.equals("fakeXpDrop")) - { - final int[] intStack = client.getIntStack(); - final int intStackSize = client.getIntStackSize(); - - final int skillId = intStack[intStackSize - 2]; - final Skill skill = Skill.values()[skillId]; - - if (skill.equals(Skill.HITPOINTS)) - { - final int exp = intStack[intStackSize - 1]; - calculateDamageDealt(exp); - } - } else if (eventName.equals("hpXpGained")) { final int[] intStack = client.getIntStack(); @@ -407,11 +401,25 @@ public class XpDropPlugin extends Plugin private void calculateDamageDealt(int diff) { double damageDealt = diff / HITPOINT_RATIO; - // DeadMan mode has an XP modifier + + // DeadMan mode has an XP modifier of 10x, Twisted League mode has an XP modifier of 5x if (client.getWorldType().contains(WorldType.DEADMAN)) { damageDealt = damageDealt / DMM_MULTIPLIER_RATIO; } + if (client.getWorldType().contains(WorldType.LEAGUE)) + { + damageDealt = damageDealt / TL_MULTIPLIER_RATIO; + + if (client.getVar(Varbits.TWISTED_LEAGUE_RELIC_3) == TWISTED_LEAGUE_WAY_OF_THE_WARRIOR) + { + damageDealt = damageDealt / 2; + } + if (client.getVar(Varbits.TWISTED_LEAGUE_RELIC_5) == TWISTED_LEAGUE_XERICS_WISDOM) + { + damageDealt = damageDealt / 2; + } + } // Some NPCs have an XP modifier, account for it here. Actor a = client.getLocalPlayer().getInteracting(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/experiencedrop/XpPrayer.java b/runelite-client/src/main/java/net/runelite/client/plugins/experiencedrop/XpPrayer.java index 2d7c2d39c5..a3651267d9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/experiencedrop/XpPrayer.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/experiencedrop/XpPrayer.java @@ -24,24 +24,10 @@ */ package net.runelite.client.plugins.experiencedrop; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.Prayer; -import static net.runelite.api.Prayer.AUGURY; -import static net.runelite.api.Prayer.BURST_OF_STRENGTH; -import static net.runelite.api.Prayer.CHIVALRY; -import static net.runelite.api.Prayer.CLARITY_OF_THOUGHT; -import static net.runelite.api.Prayer.EAGLE_EYE; -import static net.runelite.api.Prayer.HAWK_EYE; -import static net.runelite.api.Prayer.IMPROVED_REFLEXES; -import static net.runelite.api.Prayer.INCREDIBLE_REFLEXES; -import static net.runelite.api.Prayer.MYSTIC_LORE; -import static net.runelite.api.Prayer.MYSTIC_MIGHT; -import static net.runelite.api.Prayer.MYSTIC_WILL; -import static net.runelite.api.Prayer.PIETY; -import static net.runelite.api.Prayer.RIGOUR; -import static net.runelite.api.Prayer.SHARP_EYE; -import static net.runelite.api.Prayer.SUPERHUMAN_STRENGTH; -import static net.runelite.api.Prayer.ULTIMATE_STRENGTH; +import static net.runelite.api.Prayer.*; import static net.runelite.client.plugins.experiencedrop.PrayerType.MAGIC; import static net.runelite.client.plugins.experiencedrop.PrayerType.MELEE; import static net.runelite.client.plugins.experiencedrop.PrayerType.RANGE; @@ -65,9 +51,9 @@ enum XpPrayer XP_RIGOUR(RIGOUR, RANGE), XP_AUGURY(AUGURY, MAGIC); - @Getter + @Getter(AccessLevel.PACKAGE) private final Prayer prayer; - @Getter + @Getter(AccessLevel.PACKAGE) private final PrayerType type; XpPrayer(Prayer prayer, PrayerType type) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/fairyring/FairyRingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/fairyring/FairyRingPlugin.java index 876cf25c49..f52c6c7d11 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/fairyring/FairyRingPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/fairyring/FairyRingPlugin.java @@ -55,7 +55,7 @@ import net.runelite.api.widgets.WidgetInfo; import net.runelite.api.widgets.WidgetType; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.chatbox.ChatboxPanelManager; import net.runelite.client.game.chatbox.ChatboxTextInput; @@ -92,9 +92,6 @@ public class FairyRingPlugin extends Plugin @Inject private ClientThread clientThread; - @Inject - private EventBus eventBus; - private ChatboxTextInput searchInput = null; private Widget searchBtn; private Collection codes = null; @@ -115,26 +112,12 @@ public class FairyRingPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { this.autoOpen = config.autoOpen(); - addSubscriptions(); - } - - @Override - protected void shutDown() throws Exception - { - eventBus.unregister(this); - } - - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(VarbitChanged.class, this, this::onVarbitChanged); - eventBus.subscribe(WidgetLoaded.class, this, this::onWidgetLoaded); - eventBus.subscribe(GameTick.class, this, this::onGameTick); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("fairyrings")) @@ -151,11 +134,13 @@ public class FairyRingPlugin extends Plugin return configManager.getConfig(FairyRingConfig.class); } + @Subscribe private void onVarbitChanged(VarbitChanged event) { setWidgetTextToDestination(); } + @Subscribe private void onWidgetLoaded(WidgetLoaded widgetLoaded) { if (widgetLoaded.getGroupId() == WidgetID.FAIRY_RING_PANEL_GROUP_ID) @@ -242,6 +227,7 @@ public class FairyRingPlugin extends Plugin .build(); } + @Subscribe private void onGameTick(GameTick t) { // This has to happen because the only widget that gets hidden is the tli one diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/fairyring/FairyRings.java b/runelite-client/src/main/java/net/runelite/client/plugins/fairyring/FairyRings.java index 344094a2ba..9cc44b44b5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/fairyring/FairyRings.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/fairyring/FairyRings.java @@ -26,6 +26,7 @@ package net.runelite.client.plugins.fairyring; +import lombok.AccessLevel; import lombok.Getter; public enum FairyRings @@ -83,10 +84,10 @@ public enum FairyRings DLR("(Island) Poison Waste south of Isafdar"), DLS("Myreque hideout under The Hollows"); - @Getter + @Getter(AccessLevel.PACKAGE) private final String destination; - @Getter + @Getter(AccessLevel.PACKAGE) private final String tags; FairyRings(String destination) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/feed/FeedPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/feed/FeedPanel.java index 437f32700c..0fb4bfb418 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/feed/FeedPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/feed/FeedPanel.java @@ -65,6 +65,7 @@ import okhttp3.Callback; import okhttp3.Request; import okhttp3.Response; import okhttp3.ResponseBody; +import org.jetbrains.annotations.NotNull; @Slf4j @Singleton @@ -163,13 +164,13 @@ class FeedPanel extends PluginPanel RuneLiteAPI.CLIENT.newCall(request).enqueue(new Callback() { @Override - public void onFailure(Call call, IOException e) + public void onFailure(@NotNull Call call, @NotNull IOException e) { log.warn(null, e); } @Override - public void onResponse(Call call, Response response) throws IOException + public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { try (ResponseBody responseBody = response.body()) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/feed/FeedPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/feed/FeedPlugin.java index fc8823a727..15824c894e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/feed/FeedPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/feed/FeedPlugin.java @@ -35,9 +35,9 @@ import java.util.function.Supplier; import javax.inject.Inject; import javax.inject.Singleton; import lombok.extern.slf4j.Slf4j; -import net.runelite.client.events.ConfigChanged; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.task.Schedule; @@ -69,9 +69,6 @@ public class FeedPlugin extends Plugin @Inject private FeedClient feedClient; - @Inject - private EventBus eventBus; - private FeedPanel feedPanel; private NavigationButton navButton; @@ -89,10 +86,8 @@ public class FeedPlugin extends Plugin }, 10, TimeUnit.MINUTES); @Override - protected void startUp() throws Exception + protected void startUp() { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - feedPanel = new FeedPanel(config, feedSupplier); final BufferedImage icon = ImageUtil.getResourceStreamFromClass(getClass(), "icon.png"); @@ -109,9 +104,8 @@ public class FeedPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); clientToolbar.removeNavigation(navButton); } @@ -120,6 +114,7 @@ public class FeedPlugin extends Plugin feedPanel.rebuildFeed(); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("feed")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/fightcave/FightCavePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/fightcave/FightCavePlugin.java index d08914b6cf..55560b55b7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/fightcave/FightCavePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/fightcave/FightCavePlugin.java @@ -51,7 +51,7 @@ import net.runelite.api.events.GameTick; import net.runelite.api.events.NpcDespawned; import net.runelite.api.events.NpcSpawned; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.NPCManager; import net.runelite.client.plugins.Plugin; @@ -120,18 +120,22 @@ public class FightCavePlugin extends Plugin @Inject private Client client; + @Inject private NPCManager npcManager; + @Inject private OverlayManager overlayManager; + @Inject private WaveOverlay waveOverlay; + @Inject private FightCaveOverlay fightCaveOverlay; + @Inject private FightCaveConfig config; - @Inject - private EventBus eventBus; + @Getter(AccessLevel.PACKAGE) private Set fightCaveContainer = new HashSet<>(); @Getter(AccessLevel.PACKAGE) @@ -172,7 +176,6 @@ public class FightCavePlugin extends Plugin public void startUp() { updateConfig(); - addSubscriptions(); if (client.getGameState() == GameState.LOGGED_IN && regionCheck()) { @@ -185,23 +188,12 @@ public class FightCavePlugin extends Plugin @Override public void shutDown() { - eventBus.unregister(this); - overlayManager.remove(waveOverlay); overlayManager.remove(fightCaveOverlay); currentWave = -1; } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(NpcSpawned.class, this, this::onNpcSpawned); - eventBus.subscribe(NpcDespawned.class, this, this::onNpcDespawned); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - } - + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("fightcave")) @@ -212,6 +204,7 @@ public class FightCavePlugin extends Plugin updateConfig(); } + @Subscribe private void onChatMessage(ChatMessage event) { if (!validRegion) @@ -229,6 +222,7 @@ public class FightCavePlugin extends Plugin currentWave = Integer.parseInt(waveMatcher.group(1)); } + @Subscribe private void onGameStateChanged(GameStateChanged event) { if (event.getGameState() != GameState.LOGGED_IN) @@ -252,6 +246,7 @@ public class FightCavePlugin extends Plugin fightCaveContainer.clear(); } + @Subscribe private void onNpcSpawned(NpcSpawned event) { if (!validRegion) @@ -276,6 +271,7 @@ public class FightCavePlugin extends Plugin } } + @Subscribe private void onNpcDespawned(NpcDespawned event) { if (!validRegion) @@ -300,6 +296,7 @@ public class FightCavePlugin extends Plugin } } + @Subscribe private void onGameTick(GameTick Event) { if (!validRegion) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingPlugin.java index c2b18af2af..b7c17443d4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingPlugin.java @@ -65,7 +65,7 @@ import net.runelite.api.widgets.WidgetID; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.Notifier; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.events.OverlayMenuClicked; import net.runelite.client.plugins.Plugin; @@ -135,9 +135,6 @@ public class FishingPlugin extends Plugin @Inject private FishingSpotMinimapOverlay fishingSpotMinimapOverlay; - @Inject - private EventBus eventBus; - private boolean trawlerNotificationSent; @Provides @@ -169,10 +166,9 @@ public class FishingPlugin extends Plugin private Color aerialOverlayColor; @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); overlayManager.add(overlay); overlayManager.add(spotOverlay); @@ -180,10 +176,8 @@ public class FishingPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - spotOverlay.setHidden(true); fishingSpotMinimapOverlay.setHidden(true); overlayManager.remove(overlay); @@ -196,21 +190,7 @@ public class FishingPlugin extends Plugin trawlerStartTime = null; } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(ItemContainerChanged.class, this, this::onItemContainerChanged); - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - eventBus.subscribe(InteractingChanged.class, this, this::onInteractingChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(NpcSpawned.class, this, this::onNpcSpawned); - eventBus.subscribe(NpcDespawned.class, this, this::onNpcDespawned); - eventBus.subscribe(VarbitChanged.class, this, this::onVarbitChanged); - eventBus.subscribe(WidgetLoaded.class, this, this::onWidgetLoaded); - eventBus.subscribe(OverlayMenuClicked.class, this, this::onOverlayMenuClicked); - } - + @Subscribe private void onOverlayMenuClicked(OverlayMenuClicked overlayMenuClicked) { OverlayMenuEntry overlayMenuEntry = overlayMenuClicked.getEntry(); @@ -222,6 +202,7 @@ public class FishingPlugin extends Plugin } } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("fishing")) @@ -232,6 +213,7 @@ public class FishingPlugin extends Plugin updateConfig(); } + @Subscribe private void onGameStateChanged(GameStateChanged gameStateChanged) { GameState gameState = gameStateChanged.getGameState(); @@ -242,6 +224,7 @@ public class FishingPlugin extends Plugin } } + @Subscribe private void onItemContainerChanged(ItemContainerChanged event) { if (event.getItemContainer() != client.getItemContainer(InventoryID.INVENTORY) @@ -263,6 +246,7 @@ public class FishingPlugin extends Plugin fishingSpotMinimapOverlay.setHidden(!showOverlays); } + @Subscribe private void onChatMessage(ChatMessage event) { if (event.getType() != ChatMessageType.SPAM) @@ -279,6 +263,7 @@ public class FishingPlugin extends Plugin } } + @Subscribe private void onInteractingChanged(InteractingChanged event) { if (event.getSource() != client.getLocalPlayer()) @@ -314,6 +299,7 @@ public class FishingPlugin extends Plugin return ItemUtil.containsAnyItemId(itemContainer.getItems(), FISHING_TOOLS); } + @Subscribe private void onGameTick(GameTick event) { // Reset fishing session @@ -354,6 +340,7 @@ public class FishingPlugin extends Plugin } } + @Subscribe private void onNpcSpawned(NpcSpawned event) { final NPC npc = event.getNpc(); @@ -367,6 +354,7 @@ public class FishingPlugin extends Plugin inverseSortSpotDistanceFromPlayer(); } + @Subscribe private void onNpcDespawned(NpcDespawned npcDespawned) { final NPC npc = npcDespawned.getNpc(); @@ -380,6 +368,7 @@ public class FishingPlugin extends Plugin } } + @Subscribe private void onVarbitChanged(VarbitChanged event) { if (!this.trawlerNotification || client.getGameState() != GameState.LOGGED_IN) @@ -404,6 +393,7 @@ public class FishingPlugin extends Plugin } } + @Subscribe private void onWidgetLoaded(WidgetLoaded event) { if (event.getGroupId() == WidgetID.FISHING_TRAWLER_GROUP_ID) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingSpot.java b/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingSpot.java index d01b2e8fa6..c9fd8d1cd4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingSpot.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingSpot.java @@ -26,84 +26,12 @@ package net.runelite.client.plugins.fishing; import com.google.common.collect.ImmutableMap; import java.util.Map; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.ItemID; -import static net.runelite.api.NpcID.FISHING_SPOT_1497; -import static net.runelite.api.NpcID.FISHING_SPOT_1498; -import static net.runelite.api.NpcID.FISHING_SPOT_1510; -import static net.runelite.api.NpcID.FISHING_SPOT_1511; -import static net.runelite.api.NpcID.FISHING_SPOT_1514; -import static net.runelite.api.NpcID.FISHING_SPOT_1518; -import static net.runelite.api.NpcID.FISHING_SPOT_1519; -import static net.runelite.api.NpcID.FISHING_SPOT_1520; -import static net.runelite.api.NpcID.FISHING_SPOT_1521; -import static net.runelite.api.NpcID.FISHING_SPOT_1522; -import static net.runelite.api.NpcID.FISHING_SPOT_1523; -import static net.runelite.api.NpcID.FISHING_SPOT_1524; -import static net.runelite.api.NpcID.FISHING_SPOT_1525; -import static net.runelite.api.NpcID.FISHING_SPOT_1528; -import static net.runelite.api.NpcID.FISHING_SPOT_1530; -import static net.runelite.api.NpcID.FISHING_SPOT_1536; -import static net.runelite.api.NpcID.FISHING_SPOT_1542; -import static net.runelite.api.NpcID.FISHING_SPOT_1544; -import static net.runelite.api.NpcID.FISHING_SPOT_2653; -import static net.runelite.api.NpcID.FISHING_SPOT_2654; -import static net.runelite.api.NpcID.FISHING_SPOT_2655; -import static net.runelite.api.NpcID.FISHING_SPOT_3913; -import static net.runelite.api.NpcID.FISHING_SPOT_3914; -import static net.runelite.api.NpcID.FISHING_SPOT_3915; -import static net.runelite.api.NpcID.FISHING_SPOT_4316; -import static net.runelite.api.NpcID.FISHING_SPOT_4476; -import static net.runelite.api.NpcID.FISHING_SPOT_4477; -import static net.runelite.api.NpcID.FISHING_SPOT_4710; -import static net.runelite.api.NpcID.FISHING_SPOT_4712; -import static net.runelite.api.NpcID.FISHING_SPOT_4713; -import static net.runelite.api.NpcID.FISHING_SPOT_5233; -import static net.runelite.api.NpcID.FISHING_SPOT_5234; -import static net.runelite.api.NpcID.FISHING_SPOT_5820; -import static net.runelite.api.NpcID.FISHING_SPOT_5821; -import static net.runelite.api.NpcID.FISHING_SPOT_6488; -import static net.runelite.api.NpcID.FISHING_SPOT_7155; -import static net.runelite.api.NpcID.FISHING_SPOT_7199; -import static net.runelite.api.NpcID.FISHING_SPOT_7200; -import static net.runelite.api.NpcID.FISHING_SPOT_7323; -import static net.runelite.api.NpcID.FISHING_SPOT_7459; -import static net.runelite.api.NpcID.FISHING_SPOT_7460; -import static net.runelite.api.NpcID.FISHING_SPOT_7461; -import static net.runelite.api.NpcID.FISHING_SPOT_7462; -import static net.runelite.api.NpcID.FISHING_SPOT_7465; -import static net.runelite.api.NpcID.FISHING_SPOT_7466; -import static net.runelite.api.NpcID.FISHING_SPOT_7467; -import static net.runelite.api.NpcID.FISHING_SPOT_7469; -import static net.runelite.api.NpcID.FISHING_SPOT_7470; -import static net.runelite.api.NpcID.FISHING_SPOT_7730; -import static net.runelite.api.NpcID.FISHING_SPOT_7731; -import static net.runelite.api.NpcID.FISHING_SPOT_7732; -import static net.runelite.api.NpcID.FISHING_SPOT_7733; -import static net.runelite.api.NpcID.FISHING_SPOT_7946; -import static net.runelite.api.NpcID.FISHING_SPOT_7947; -import static net.runelite.api.NpcID.FISHING_SPOT_8523; -import static net.runelite.api.NpcID.FISHING_SPOT_8525; -import static net.runelite.api.NpcID.FISHING_SPOT_8526; -import static net.runelite.api.NpcID.FISHING_SPOT_8527; -import static net.runelite.api.NpcID.ROD_FISHING_SPOT; -import static net.runelite.api.NpcID.ROD_FISHING_SPOT_1508; -import static net.runelite.api.NpcID.ROD_FISHING_SPOT_1509; -import static net.runelite.api.NpcID.ROD_FISHING_SPOT_1513; -import static net.runelite.api.NpcID.ROD_FISHING_SPOT_1515; -import static net.runelite.api.NpcID.ROD_FISHING_SPOT_1516; -import static net.runelite.api.NpcID.ROD_FISHING_SPOT_1526; -import static net.runelite.api.NpcID.ROD_FISHING_SPOT_1527; -import static net.runelite.api.NpcID.ROD_FISHING_SPOT_6825; -import static net.runelite.api.NpcID.ROD_FISHING_SPOT_7463; -import static net.runelite.api.NpcID.ROD_FISHING_SPOT_7464; -import static net.runelite.api.NpcID.ROD_FISHING_SPOT_7468; -import static net.runelite.api.NpcID.ROD_FISHING_SPOT_7676; -import static net.runelite.api.NpcID.ROD_FISHING_SPOT_8524; -import static net.runelite.api.NpcID.FISHING_SPOT_4928; -import static net.runelite.api.NpcID.FISHING_SPOT_6784; +import static net.runelite.api.NpcID.*; -@Getter +@Getter(AccessLevel.PACKAGE) enum FishingSpot { SHRIMP("Shrimp, Anchovies", ItemID.RAW_SHRIMPS, diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/fps/FpsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/fps/FpsConfig.java index 16922d9874..6f418e18ec 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/fps/FpsConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/fps/FpsConfig.java @@ -33,14 +33,15 @@ import net.runelite.client.config.Range; public interface FpsConfig extends Config { @ConfigItem( - keyName = "limitMode", - name = "Limit Mode", - description = "Stay at or under the target frames per second even when in this mode", + keyName = "limitFps", + name = "Limit Global FPS", + description = "Global FPS limit in effect regardless of
" + + "whether window is in focus or not", position = 1 ) - default FpsLimitMode limitMode() + default boolean limitFps() { - return FpsLimitMode.NEVER; + return false; } @Range( @@ -49,8 +50,8 @@ public interface FpsConfig extends Config ) @ConfigItem( keyName = "maxFps", - name = "FPS target", - description = "Desired max frames per second", + name = "Global FPS target", + description = "Desired max global frames per second", position = 2 ) default int maxFps() @@ -58,11 +59,33 @@ public interface FpsConfig extends Config return 50; } + @ConfigItem( + keyName = "limitFpsUnfocused", + name = "Limit FPS unfocused", + description = "FPS limit while window is out of focus", + position = 3 + ) + default boolean limitFpsUnfocused() + { + return false; + } + + @ConfigItem( + keyName = "maxFpsUnfocused", + name = "Unfocused FPS target", + description = "Desired max frames per second for unfocused", + position = 4 + ) + default int maxFpsUnfocused() + { + return 50; + } + @ConfigItem( keyName = "drawFps", name = "Draw FPS indicator", description = "Show a number in the corner for the current FPS", - position = 3 + position = 5 ) default boolean drawFps() { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/fps/FpsDrawListener.java b/runelite-client/src/main/java/net/runelite/client/plugins/fps/FpsDrawListener.java index b729a4ad9f..8871780b1e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/fps/FpsDrawListener.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/fps/FpsDrawListener.java @@ -69,7 +69,13 @@ public class FpsDrawListener implements Runnable void reloadConfig() { lastMillis = System.currentTimeMillis(); - targetDelay = 1000 / Math.max(1, config.maxFps()); + + int fps = config.limitFpsUnfocused() && !isFocused + ? config.maxFpsUnfocused() + : config.maxFps(); + + targetDelay = 1000 / Math.max(1, fps); + sleepDelay = targetDelay; for (int i = 0; i < SAMPLE_SIZE; i++) @@ -81,18 +87,18 @@ public class FpsDrawListener implements Runnable void onFocusChanged(FocusChanged event) { this.isFocused = event.isFocused(); + reloadConfig(); // load new delay } private boolean isEnforced() { - return FpsLimitMode.ALWAYS == plugin.getLimitMode() - || (FpsLimitMode.UNFOCUSED == plugin.getLimitMode() && !isFocused); + return config.limitFps() + || (config.limitFpsUnfocused() && !isFocused); } @Override public void run() { - if (!isEnforced()) { return; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/fps/FpsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/fps/FpsOverlay.java index 0103337792..e7e3f669a0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/fps/FpsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/fps/FpsOverlay.java @@ -57,16 +57,16 @@ public class FpsOverlay extends Overlay // Local dependencies private final Client client; - private final FpsPlugin plugin; + private final FpsConfig config; // Often changing values private boolean isFocused = true; @Inject - private FpsOverlay(final FpsPlugin plugin, final Client client) + private FpsOverlay(final FpsConfig config, final Client client) { this.client = client; - this.plugin = plugin; + this.config = config; setLayer(OverlayLayer.ABOVE_WIDGETS); setPriority(OverlayPriority.HIGH); setPosition(OverlayPosition.DYNAMIC); @@ -79,8 +79,8 @@ public class FpsOverlay extends Overlay private boolean isEnforced() { - return FpsLimitMode.ALWAYS == plugin.getLimitMode() - || (FpsLimitMode.UNFOCUSED == plugin.getLimitMode() && !isFocused); + return config.limitFps() + || (config.limitFpsUnfocused() && !isFocused); } private Color getFpsValueColor() @@ -91,7 +91,7 @@ public class FpsOverlay extends Overlay @Override public Dimension render(Graphics2D graphics) { - if (!plugin.isDrawFps()) + if (!config.drawFps()) { return null; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/fps/FpsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/fps/FpsPlugin.java index a3d6dd829f..24767d2b7d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/fps/FpsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/fps/FpsPlugin.java @@ -27,11 +27,9 @@ package net.runelite.client.plugins.fps; import com.google.inject.Inject; import com.google.inject.Provides; import com.google.inject.Singleton; -import lombok.AccessLevel; -import lombok.Getter; import net.runelite.api.events.FocusChanged; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -71,35 +69,22 @@ public class FpsPlugin extends Plugin @Inject private DrawManager drawManager; - @Inject - private FpsConfig fpsConfig; - - @Inject - private EventBus eventBus; - - @Getter(AccessLevel.PACKAGE) - private FpsLimitMode limitMode; - - @Getter(AccessLevel.PACKAGE) - private boolean drawFps; - @Provides FpsConfig provideConfig(ConfigManager configManager) { return configManager.getConfig(FpsConfig.class); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals(CONFIG_GROUP_KEY)) { drawListener.reloadConfig(); - - limitMode = fpsConfig.limitMode(); - drawFps = fpsConfig.drawFps(); } } + @Subscribe private void onFocusChanged(FocusChanged event) { drawListener.onFocusChanged(event); @@ -107,29 +92,18 @@ public class FpsPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { - addSubscriptions(); - - limitMode = fpsConfig.limitMode(); - drawFps = fpsConfig.drawFps(); overlayManager.add(overlay); drawManager.registerEveryFrameListener(drawListener); drawListener.reloadConfig(); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(overlay); drawManager.unregisterEveryFrameListener(drawListener); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(FocusChanged.class, this, this::onFocusChanged); - } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/FreezeTimersOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/FreezeTimersOverlay.java index eae75918f5..7daa3b7089 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/FreezeTimersOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/FreezeTimersOverlay.java @@ -26,6 +26,7 @@ package net.runelite.client.plugins.freezetimers; import java.awt.Color; +import static java.awt.Color.WHITE; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics2D; @@ -42,7 +43,6 @@ import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.ui.overlay.OverlayUtil; import net.runelite.client.util.ImageUtil; -import static java.awt.Color.WHITE; @Singleton public class FreezeTimersOverlay extends Overlay @@ -264,7 +264,7 @@ public class FreezeTimersOverlay extends Overlay g.setColor(WHITE); final int xOffset = plugin.getOffset(); renderActorTextAndImage(g, actor, text, Color.WHITE, image, yOffset, - xOffset); + xOffset); } private void renderImageLocation(Graphics2D graphics, Point imgLoc, BufferedImage image) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/FreezeTimersPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/FreezeTimersPlugin.java index a97325d87c..93a0566faa 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/FreezeTimersPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/FreezeTimersPlugin.java @@ -40,11 +40,11 @@ import net.runelite.api.WorldType; import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.ChatMessage; import net.runelite.api.events.GameTick; -import net.runelite.api.events.LocalPlayerDeath; import net.runelite.api.events.NpcDespawned; +import net.runelite.api.events.PlayerDeath; import net.runelite.api.events.SpotAnimationChanged; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -68,18 +68,21 @@ public class FreezeTimersPlugin extends Plugin @Inject private Client client; + @Inject private OverlayManager overlayManager; + @Inject private Timers timers; + @Inject private PrayerTracker prayerTracker; + @Inject private FreezeTimersOverlay overlay; + @Inject private FreezeTimersConfig config; - @Inject - private EventBus eventBus; @Getter(AccessLevel.PACKAGE) private boolean showPlayers; @@ -103,14 +106,12 @@ public class FreezeTimersPlugin extends Plugin public void startUp() { updateConfig(); - addSubscriptions(); overlayManager.add(overlay); } public void shutDown() { - eventBus.unregister(this); overlayManager.remove(overlay); } @@ -120,16 +121,7 @@ public class FreezeTimersPlugin extends Plugin return configManager.getConfig(FreezeTimersConfig.class); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(SpotAnimationChanged.class, this, this::onSpotAnimationChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(LocalPlayerDeath.class, this, this::onLocalPlayerDeath); - eventBus.subscribe(NpcDespawned.class, this, this::onNpcDespawned); - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - } - + @Subscribe public void onSpotAnimationChanged(SpotAnimationChanged graphicChanged) { final int oldGraphic = prayerTracker.getSpotanimLastTick(graphicChanged.getActor()); @@ -162,9 +154,10 @@ public class FreezeTimersPlugin extends Plugin } timers.setTimerEnd(graphicChanged.getActor(), effect.getType(), - currentTime + length); + currentTime + length); } + @Subscribe public void onGameTick(GameTick tickEvent) { prayerTracker.gameTick(); @@ -194,12 +187,12 @@ public class FreezeTimersPlugin extends Plugin timers.setTimerReApply(actor, TimerType.TELEBLOCK, System.currentTimeMillis()); } else if (WorldType.isPvpWorld(worldTypes) && - MapLocations.getPvpSafeZones(actorLoc.getPlane()).contains(actorLoc.getX(), actorLoc.getY())) + MapLocations.getPvpSafeZones(actorLoc.getPlane()).contains(actorLoc.getX(), actorLoc.getY())) { timers.setTimerReApply(actor, TimerType.TELEBLOCK, System.currentTimeMillis()); } else if (WorldType.isDeadmanWorld(worldTypes) && - MapLocations.getDeadmanSafeZones(actorLoc.getPlane()).contains(actorLoc.getX(), actorLoc.getY())) + MapLocations.getDeadmanSafeZones(actorLoc.getPlane()).contains(actorLoc.getX(), actorLoc.getY())) { timers.setTimerReApply(actor, TimerType.TELEBLOCK, System.currentTimeMillis()); } @@ -207,7 +200,8 @@ public class FreezeTimersPlugin extends Plugin } } - private void onLocalPlayerDeath(LocalPlayerDeath event) + @Subscribe + private void onPlayerDeath(PlayerDeath event) { final Player localPlayer = client.getLocalPlayer(); final long currentTime = System.currentTimeMillis(); @@ -223,6 +217,7 @@ public class FreezeTimersPlugin extends Plugin } } + @Subscribe public void onNpcDespawned(NpcDespawned event) { if (!isAtVorkath()) @@ -240,14 +235,15 @@ public class FreezeTimersPlugin extends Plugin if (npc.getName().equals("Zombified Spawn")) { timers.setTimerReApply(client.getLocalPlayer(), TimerType.FREEZE, - System.currentTimeMillis()); + System.currentTimeMillis()); } } + @Subscribe public void onChatMessage(ChatMessage event) { if (event.getType() != ChatMessageType.GAMEMESSAGE - || !event.getMessage().contains("Your Tele Block has been removed")) + || !event.getMessage().contains("Your Tele Block has been removed")) { return; } @@ -260,6 +256,7 @@ public class FreezeTimersPlugin extends Plugin return ArrayUtils.contains(client.getMapRegions(), VORKATH_REGION); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("freezetimers")) @@ -280,4 +277,4 @@ public class FreezeTimersPlugin extends Plugin this.fontStyle = config.fontStyle(); this.textSize = config.textSize(); } -} +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/Timers.java b/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/Timers.java index 303a5d4868..7e025e6ad4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/Timers.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/freezetimers/Timers.java @@ -34,7 +34,7 @@ import net.runelite.api.Actor; @Slf4j @Singleton -public class Timers +class Timers { private final Map> timerMap = new HashMap<>(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/friendlist/FriendListPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/friendlist/FriendListPlugin.java index 1d71c487bf..84d27d15f3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/friendlist/FriendListPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/friendlist/FriendListPlugin.java @@ -32,7 +32,7 @@ import net.runelite.api.VarPlayer; import net.runelite.api.events.GameTick; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -52,25 +52,15 @@ public class FriendListPlugin extends Plugin @Inject private Client client; - @Inject - private EventBus eventBus; - - @Override - protected void startUp() throws Exception - { - eventBus.subscribe(GameTick.class, this, this::onGameTick); - } - @Override protected void shutDown() { - eventBus.unregister(this); - final int world = client.getWorld(); setFriendsListTitle("Friends List - World " + world); setIgnoreListTitle("Ignore List - World " + world); } + @Subscribe private void onGameTick(GameTick tick) { final int world = client.getWorld(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/friendnotes/FriendNotesPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/friendnotes/FriendNotesPlugin.java index 944374279d..272ae40e96 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/friendnotes/FriendNotesPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/friendnotes/FriendNotesPlugin.java @@ -32,6 +32,7 @@ import java.awt.Color; import javax.annotation.Nullable; import javax.inject.Inject; import javax.inject.Singleton; +import lombok.AccessLevel; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; @@ -45,7 +46,7 @@ import net.runelite.api.events.NameableNameChanged; import net.runelite.api.util.Text; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.game.chatbox.ChatboxPanelManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -83,35 +84,21 @@ public class FriendNotesPlugin extends Plugin @Inject private ChatboxPanelManager chatboxPanelManager; - @Inject - private EventBus eventBus; - - @Getter + @Getter(AccessLevel.PACKAGE) private HoveredFriend hoveredFriend = null; @Override - protected void startUp() throws Exception + protected void startUp() { - addSubscriptions(); overlayManager.add(overlay); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(overlay); } - private void addSubscriptions() - { - eventBus.subscribe(MenuEntryAdded.class, this, this::onMenuEntryAdded); - eventBus.subscribe(MenuOptionClicked.class, this, this::onMenuOptionClicked); - eventBus.subscribe(NameableNameChanged.class, this, this::onNameableNameChanged); - eventBus.subscribe(FriendRemoved.class, this, this::onFriendRemoved); - } - /** * Set a friend note, or unset by passing a null/empty note. */ @@ -172,6 +159,7 @@ public class FriendNotesPlugin extends Plugin } } + @Subscribe private void onMenuEntryAdded(MenuEntryAdded event) { final int groupId = WidgetInfo.TO_GROUP(event.getParam1()); @@ -200,6 +188,7 @@ public class FriendNotesPlugin extends Plugin } } + @Subscribe private void onMenuOptionClicked(MenuOptionClicked event) { if (WidgetInfo.TO_GROUP(event.getParam1()) == WidgetInfo.FRIENDS_LIST.getGroupId()) @@ -237,6 +226,7 @@ public class FriendNotesPlugin extends Plugin } + @Subscribe private void onNameableNameChanged(NameableNameChanged event) { final Nameable nameable = event.getNameable(); @@ -258,6 +248,7 @@ public class FriendNotesPlugin extends Plugin } } + @Subscribe private void onFriendRemoved(FriendRemoved event) { // Delete a friend's note if they are removed diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/friendtagging/FriendTaggingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/friendtagging/FriendTaggingPlugin.java index d72c80f3f2..886312fbb4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/friendtagging/FriendTaggingPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/friendtagging/FriendTaggingPlugin.java @@ -33,7 +33,7 @@ import net.runelite.api.events.WidgetMenuOptionClicked; import net.runelite.api.util.Text; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.game.chatbox.ChatboxPanelManager; import net.runelite.client.game.chatbox.ChatboxTextInput; import net.runelite.client.menus.MenuManager; @@ -82,13 +82,9 @@ public class FriendTaggingPlugin extends Plugin @Inject private ChatboxPanelManager chatboxPanelManager; - @Inject - private EventBus eventBus; - @Override - protected void startUp() throws Exception + protected void startUp() { - addSubscriptions(); menuManager.addManagedCustomMenu(friendsTabMenuOption); menuManager.addManagedCustomMenu(ignoreTabMenuOption); @@ -98,25 +94,15 @@ public class FriendTaggingPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - menuManager.removeManagedCustomMenu(friendsTabMenuOption); menuManager.removeManagedCustomMenu(ignoreTabMenuOption); menuManager.removeManagedCustomMenu(friendTabResizableOption); menuManager.removeManagedCustomMenu(ignoreTabResizableOption); } - private void addSubscriptions() - { - eventBus.subscribe(MenuEntryAdded.class, this, this::onMenuEntryAdded); - eventBus.subscribe(FriendRemoved.class, this, this::onFriendRemoved); - eventBus.subscribe(NameableNameChanged.class, this, this::onNameableNameChanged); - eventBus.subscribe(WidgetMenuOptionClicked.class, this, this::onWidgetMenuOptionClicked); - eventBus.subscribe(MenuOptionClicked.class, this, this::onMenuOptionClicked); - } - + @Subscribe private void onMenuEntryAdded(MenuEntryAdded event) { final int groupId = WidgetInfo.TO_GROUP(event.getParam1()); @@ -141,12 +127,14 @@ public class FriendTaggingPlugin extends Plugin } } + @Subscribe private void onFriendRemoved(FriendRemoved event) { final String displayName = event.getName().trim().toLowerCase(); deleteTag(displayName); } + @Subscribe private void onNameableNameChanged(NameableNameChanged event) { final Nameable nameable = event.getNameable(); @@ -162,6 +150,7 @@ public class FriendTaggingPlugin extends Plugin } } + @Subscribe private void onWidgetMenuOptionClicked(WidgetMenuOptionClicked event) { if (event.getWidget().getId() == WidgetInfo.FIXED_VIEWPORT_FRIENDS_TAB.getId() && @@ -171,6 +160,7 @@ public class FriendTaggingPlugin extends Plugin } } + @Subscribe private void onMenuOptionClicked(MenuOptionClicked event) { if (WidgetInfo.TO_GROUP(event.getParam1()) == WidgetInfo.FRIENDS_LIST.getGroupId()) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/gauntlet/GauntletOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/gauntlet/GauntletOverlay.java index a65a72a335..1f70af8837 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/gauntlet/GauntletOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/gauntlet/GauntletOverlay.java @@ -62,22 +62,22 @@ public class GauntletOverlay extends Overlay { @Inject private OverlayManager overlayManager; + @Inject private GauntletCounter GauntletCounter; + private static final Color FLASH_COLOR = new Color(255, 0, 0, 70); private static final int MAX_DISTANCE = 2400; private final Client client; private final GauntletPlugin plugin; - private final GauntletConfig config; private final ModelOutlineRenderer outlineRenderer; private int timeout; @Inject - private GauntletOverlay(Client client, GauntletConfig config, GauntletPlugin plugin, ModelOutlineRenderer outlineRenderer) + private GauntletOverlay(Client client, GauntletPlugin plugin, ModelOutlineRenderer outlineRenderer) { this.client = client; this.plugin = plugin; - this.config = config; this.outlineRenderer = outlineRenderer; setPosition(OverlayPosition.DYNAMIC); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/gauntlet/GauntletPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/gauntlet/GauntletPlugin.java index dd618a167b..626df7f17c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/gauntlet/GauntletPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/gauntlet/GauntletPlugin.java @@ -67,6 +67,7 @@ import net.runelite.api.events.VarbitChanged; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.events.NpcLootReceived; import net.runelite.client.game.ItemManager; @@ -114,43 +115,57 @@ public class GauntletPlugin extends Plugin ); private static final int GATHERING_HERB = 0; private static final int GATHERING_CLOTH = 1; + @Inject @Getter(AccessLevel.NONE) private Client client; + @Inject @Getter(AccessLevel.NONE) private ClientThread clientThread; + @Inject @Getter(AccessLevel.NONE) private OverlayManager overlayManager; + @Inject @Getter(AccessLevel.NONE) private GauntletOverlay overlay; + @Inject @Getter(AccessLevel.NONE) private GauntletInfoBoxOverlay infoboxoverlay; + @Inject @Getter(AccessLevel.NONE) private GauntletConfig config; + @Inject @Getter(AccessLevel.NONE) private EventBus eventBus; + @Inject @Getter(AccessLevel.NONE) private GauntletTimer timer; + @Inject @Getter(AccessLevel.NONE) private SkillIconManager skillIconManager; + @Inject @Getter(AccessLevel.NONE) private GauntletCounter GauntletCounter; + @Setter(AccessLevel.PACKAGE) @Nullable private Hunllef hunllef; + @Inject private InfoBoxManager infoBoxManager; + @Inject private ItemManager itemManager; + private boolean attackVisualOutline; private boolean completeStartup = false; private boolean displayTimerChat; @@ -201,7 +216,6 @@ public class GauntletPlugin extends Plugin @Override protected void startUp() { - addSubscriptions(); updateConfig(); initializeCounters(); overlayManager.add(overlay); @@ -272,7 +286,6 @@ public class GauntletPlugin extends Plugin @Override protected void shutDown() { - eventBus.unregister(this); timer.resetStates(); if (timerVisible) { @@ -300,23 +313,7 @@ public class GauntletPlugin extends Plugin countersVisible = false; } - private void addSubscriptions() - { - eventBus.subscribe(AnimationChanged.class, this, this::onAnimationChanged); - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameObjectDespawned.class, this, this::onGameObjectDespawned); - eventBus.subscribe(GameObjectSpawned.class, this, this::onGameObjectSpawned); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(NpcDespawned.class, this, this::onNpcDespawned); - eventBus.subscribe(NpcSpawned.class, this, this::onNpcSpawned); - eventBus.subscribe(ProjectileSpawned.class, this, this::onProjectileSpawned); - eventBus.subscribe(VarbitChanged.class, this, this::onVarbitChanged); - eventBus.subscribe(XpDropEvent.class, this, this::onXpDropEvent); - eventBus.subscribe(NpcLootReceived.class, this, this::onNpcLootReceived); - eventBus.subscribe(MenuOptionClicked.class, this, this::onMenuOptionClicked); - } - + @Subscribe private void onMenuOptionClicked(MenuOptionClicked menuOptionClicked) { if (menuOptionClicked.getTarget().toUpperCase().contains("LINUM")) @@ -329,6 +326,7 @@ public class GauntletPlugin extends Plugin } } + @Subscribe private void onNpcLootReceived(NpcLootReceived npcLootReceived) { fishGathered += (int) npcLootReceived.getItems().stream().filter(item -> item.getId() == ItemID.RAW_PADDLEFISH).count(); @@ -336,6 +334,7 @@ public class GauntletPlugin extends Plugin updateCounters(); } + @Subscribe private void onXpDropEvent(XpDropEvent experienceChanged) { if (experienceChanged.getSkill().compareTo(Skill.MINING) == 0) @@ -364,6 +363,7 @@ public class GauntletPlugin extends Plugin updateCounters(); } + @Subscribe private void onAnimationChanged(AnimationChanged event) { if (hunllef == null) @@ -434,6 +434,7 @@ public class GauntletPlugin extends Plugin } } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("Gauntlet")) @@ -470,6 +471,7 @@ public class GauntletPlugin extends Plugin } } + @Subscribe private void onGameObjectDespawned(GameObjectDespawned event) { final GameObject obj = event.getGameObject(); @@ -479,6 +481,7 @@ public class GauntletPlugin extends Plugin } } + @Subscribe private void onGameObjectSpawned(GameObjectSpawned event) { final GameObject obj = event.getGameObject(); @@ -488,6 +491,7 @@ public class GauntletPlugin extends Plugin } } + @Subscribe private void onGameStateChanged(GameStateChanged event) { if (event.getGameState() == GameState.LOADING) @@ -496,6 +500,7 @@ public class GauntletPlugin extends Plugin } } + @Subscribe private void onGameTick(GameTick event) { // This handles the timer based on player health. @@ -516,6 +521,7 @@ public class GauntletPlugin extends Plugin } } + @Subscribe private void onNpcDespawned(NpcDespawned event) { final NPC npc = event.getNpc(); @@ -530,6 +536,7 @@ public class GauntletPlugin extends Plugin } } + @Subscribe private void onNpcSpawned(NpcSpawned event) { final NPC npc = event.getNpc(); @@ -543,6 +550,7 @@ public class GauntletPlugin extends Plugin } } + @Subscribe private void onProjectileSpawned(ProjectileSpawned event) { if (hunllef == null) @@ -574,6 +582,7 @@ public class GauntletPlugin extends Plugin } } + @Subscribe private void onVarbitChanged(VarbitChanged event) { if (this.completeStartup) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java index 4aad1d3ee0..89e385bf9a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java @@ -70,7 +70,7 @@ import net.runelite.api.events.GameStateChanged; import net.runelite.api.hooks.DrawCallbacks; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -121,9 +121,6 @@ public class GpuPlugin extends Plugin implements DrawCallbacks @Inject private PluginManager pluginManager; - @Inject - private EventBus eventbus; - private Canvas canvas; private JAWTWindow jawtWindow; private GL4 gl; @@ -243,6 +240,7 @@ public class GpuPlugin extends Plugin implements DrawCallbacks private int fogCircularity; private int fogDensity; + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("gpu")) @@ -263,10 +261,9 @@ public class GpuPlugin extends Plugin implements DrawCallbacks } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); clientThread.invoke(() -> { @@ -374,8 +371,6 @@ public class GpuPlugin extends Plugin implements DrawCallbacks @Override protected void shutDown() { - eventbus.unregister(this); - clientThread.invoke(() -> { client.setGpu(false); @@ -445,12 +440,6 @@ public class GpuPlugin extends Plugin implements DrawCallbacks }); } - private void addSubscriptions() - { - eventbus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventbus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - } - @Provides GpuPluginConfig provideConfig(ConfigManager configManager) { @@ -827,7 +816,7 @@ public class GpuPlugin extends Plugin implements DrawCallbacks shutDown(); startUp(); } - catch (Exception e) + catch (Exception ignored) { } return; @@ -1317,6 +1306,7 @@ public class GpuPlugin extends Plugin implements DrawCallbacks textureManager.animate(texture, diff); } + @Subscribe private void onGameStateChanged(GameStateChanged gameStateChanged) { if (gameStateChanged.getGameState() != GameState.LOGGED_IN) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/SceneUploader.java b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/SceneUploader.java index cfcd1bcc87..4a7e8bd628 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/SceneUploader.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/SceneUploader.java @@ -30,16 +30,16 @@ import javax.inject.Singleton; import net.runelite.api.Client; import net.runelite.api.Constants; import net.runelite.api.DecorativeObject; +import net.runelite.api.Entity; import net.runelite.api.GameObject; import net.runelite.api.GroundObject; import net.runelite.api.Model; import net.runelite.api.Perspective; import net.runelite.api.Point; -import net.runelite.api.Entity; import net.runelite.api.Scene; +import net.runelite.api.Tile; import net.runelite.api.TileModel; import net.runelite.api.TilePaint; -import net.runelite.api.Tile; import net.runelite.api.WallObject; import static net.runelite.client.plugins.gpu.GpuPlugin.SMALL_TRIANGLE_COUNT; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/config/AnisotropicFilteringMode.java b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/config/AnisotropicFilteringMode.java index a5fd8aa831..6c10002a85 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/config/AnisotropicFilteringMode.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/config/AnisotropicFilteringMode.java @@ -24,10 +24,11 @@ */ package net.runelite.client.plugins.gpu.config; +import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; -@Getter +@Getter(AccessLevel.PUBLIC) @RequiredArgsConstructor public enum AnisotropicFilteringMode { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/config/AntiAliasingMode.java b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/config/AntiAliasingMode.java index 3d1efa2d56..131c639da4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/config/AntiAliasingMode.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/config/AntiAliasingMode.java @@ -24,10 +24,11 @@ */ package net.runelite.client.plugins.gpu.config; +import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; -@Getter +@Getter(AccessLevel.PUBLIC) @RequiredArgsConstructor public enum AntiAliasingMode { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeInputListener.java b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeInputListener.java index 107518652c..a7fbc8824b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeInputListener.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeInputListener.java @@ -31,10 +31,10 @@ import javax.inject.Singleton; import javax.swing.SwingUtilities; import net.runelite.api.Client; import net.runelite.api.MenuEntry; +import net.runelite.api.util.Text; import net.runelite.client.input.KeyListener; import net.runelite.client.input.MouseAdapter; import static net.runelite.client.plugins.grandexchange.GrandExchangePlugin.SEARCH_GRAND_EXCHANGE; -import net.runelite.api.util.Text; @Singleton public class GrandExchangeInputListener extends MouseAdapter implements KeyListener diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeItemPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeItemPanel.java index 9d119fcb46..0909d7dec8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeItemPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeItemPanel.java @@ -40,8 +40,8 @@ import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.border.CompoundBorder; import javax.swing.border.EmptyBorder; -import net.runelite.client.util.AsyncBufferedImage; import net.runelite.client.ui.ColorScheme; +import net.runelite.client.util.AsyncBufferedImage; import net.runelite.client.util.LinkBrowser; import net.runelite.client.util.QuantityFormatter; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeOfferSlot.java b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeOfferSlot.java index b90a1b05d5..348b7a2b87 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeOfferSlot.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeOfferSlot.java @@ -40,8 +40,8 @@ import java.awt.image.BufferedImage; import javax.annotation.Nullable; import javax.inject.Singleton; import javax.swing.ImageIcon; -import javax.swing.JMenuItem; import javax.swing.JLabel; +import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.border.EmptyBorder; @@ -50,8 +50,8 @@ import net.runelite.api.GrandExchangeOfferState; import static net.runelite.api.GrandExchangeOfferState.CANCELLED_BUY; import static net.runelite.api.GrandExchangeOfferState.CANCELLED_SELL; import static net.runelite.api.GrandExchangeOfferState.EMPTY; -import static net.runelite.client.plugins.grandexchange.GrandExchangeItemPanel.geLink; import net.runelite.api.ItemDefinition; +import static net.runelite.client.plugins.grandexchange.GrandExchangeItemPanel.geLink; import net.runelite.client.ui.ColorScheme; import net.runelite.client.ui.FontManager; import net.runelite.client.ui.components.ThinProgressBar; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeOffersPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeOffersPanel.java index b58e28cbac..e73987f0fb 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeOffersPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeOffersPanel.java @@ -30,6 +30,7 @@ import java.awt.CardLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.image.BufferedImage; +import java.util.Arrays; import javax.inject.Singleton; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; @@ -98,10 +99,7 @@ class GrandExchangeOffersPanel extends JPanel void resetOffers() { offerPanel.removeAll(); - for (int i = 0; i < offerSlotPanels.length; i++) - { - offerSlotPanels[i] = null; - } + Arrays.fill(offerSlotPanels, null); updateEmptyOffersPanel(); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java index 81f2fe06e6..de7eceef43 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java @@ -56,7 +56,6 @@ import static net.runelite.api.ItemID.COINS_995; import net.runelite.api.MenuOpcode; import net.runelite.api.Varbits; import net.runelite.api.events.ChatMessage; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.FocusChanged; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GrandExchangeOfferChanged; @@ -72,7 +71,8 @@ import net.runelite.client.account.AccountSession; import net.runelite.client.account.SessionManager; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.events.SessionClose; import net.runelite.client.events.SessionOpen; import net.runelite.client.game.ItemManager; @@ -157,9 +157,6 @@ public class GrandExchangePlugin extends Plugin @Inject private ConfigManager configManager; - @Inject - private EventBus eventBus; - private Widget grandExchangeText; private Widget grandExchangeItem; private Widget grandExchangeOfferQuantityHeading; @@ -215,7 +212,6 @@ public class GrandExchangePlugin extends Plugin protected void startUp() throws Exception { updateConfig(); - addSubscriptions(); itemGELimits = loadGELimits(); panel = injector.getInstance(GrandExchangePanel.class); @@ -251,8 +247,6 @@ public class GrandExchangePlugin extends Plugin @Override protected void shutDown() { - eventBus.unregister(this); - clientToolbar.removeNavigation(button); mouseManager.unregisterMouseListener(inputListener); keyManager.unregisterKeyListener(inputListener); @@ -263,20 +257,7 @@ public class GrandExchangePlugin extends Plugin grandExchangeClient = null; } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - eventBus.subscribe(SessionOpen.class, this, this::onSessionOpen); - eventBus.subscribe(SessionClose.class, this, this::onSessionClose); - eventBus.subscribe(GrandExchangeOfferChanged.class, this, this::onGrandExchangeOfferChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(MenuEntryAdded.class, this, this::onMenuEntryAdded); - eventBus.subscribe(FocusChanged.class, this, this::onFocusChanged); - eventBus.subscribe(WidgetLoaded.class, this, this::onWidgetLoaded); - eventBus.subscribe(ScriptCallbackEvent.class, this, this::onScriptCallbackEvent); - } - + @Subscribe private void onSessionOpen(SessionOpen sessionOpen) { AccountSession accountSession = sessionManager.getAccountSession(); @@ -299,11 +280,13 @@ public class GrandExchangePlugin extends Plugin this.enableAfford = config.enableAfford(); } + @Subscribe private void onSessionClose(SessionClose sessionClose) { grandExchangeClient = null; } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("grandexchange")) @@ -325,6 +308,7 @@ public class GrandExchangePlugin extends Plugin } } + @Subscribe private void onGrandExchangeOfferChanged(GrandExchangeOfferChanged offerEvent) { final int slot = offerEvent.getSlot(); @@ -402,6 +386,7 @@ public class GrandExchangePlugin extends Plugin return savedOffer.getState() != grandExchangeOffer.getState(); } + @Subscribe private void onChatMessage(ChatMessage event) { if (!this.enableNotifications || event.getType() != ChatMessageType.GAMEMESSAGE) @@ -417,6 +402,7 @@ public class GrandExchangePlugin extends Plugin } } + @Subscribe private void onGameStateChanged(GameStateChanged gameStateChanged) { if (gameStateChanged.getGameState() == GameState.LOGIN_SCREEN) @@ -425,6 +411,7 @@ public class GrandExchangePlugin extends Plugin } } + @Subscribe private void onMenuEntryAdded(MenuEntryAdded menuEntry) { // At the moment, if the user disables quick lookup, the input listener gets disabled. Thus, isHotKeyPressed() @@ -456,6 +443,7 @@ public class GrandExchangePlugin extends Plugin } } + @Subscribe private void onFocusChanged(FocusChanged focusChanged) { if (!focusChanged.isFocused()) @@ -464,6 +452,7 @@ public class GrandExchangePlugin extends Plugin } } + @Subscribe private void onWidgetLoaded(WidgetLoaded event) { switch (event.getGroupId()) @@ -482,6 +471,7 @@ public class GrandExchangePlugin extends Plugin } } + @Subscribe private void onScriptCallbackEvent(ScriptCallbackEvent event) { if (event.getEventName().equals("geBuilt")) @@ -546,7 +536,6 @@ public class GrandExchangePlugin extends Plugin } - if (this.enableAfford && offerType == OFFER_TYPE_BUY) { final ItemContainer inventory = client.getItemContainer(InventoryID.INVENTORY); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeSearchPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeSearchPanel.java index 0c5355a1e7..048c9598f8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeSearchPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeSearchPanel.java @@ -46,11 +46,11 @@ import lombok.Setter; import lombok.extern.slf4j.Slf4j; import net.runelite.api.ItemDefinition; import net.runelite.client.callback.ClientThread; -import net.runelite.client.util.AsyncBufferedImage; import net.runelite.client.game.ItemManager; import net.runelite.client.ui.ColorScheme; import net.runelite.client.ui.components.IconTextField; import net.runelite.client.ui.components.PluginErrorPanel; +import net.runelite.client.util.AsyncBufferedImage; import net.runelite.http.api.item.ItemPrice; /** @@ -108,6 +108,7 @@ class GrandExchangeSearchPanel extends JPanel searchBar.setBackground(ColorScheme.DARKER_GRAY_COLOR); searchBar.setHoverBackgroundColor(ColorScheme.DARK_GRAY_HOVER_COLOR); searchBar.addActionListener(e -> executor.execute(() -> priceLookup(false))); + searchBar.addClearListener(e -> updateSearch()); searchItemsPanel.setLayout(new GridBagLayout()); searchItemsPanel.setBackground(ColorScheme.DARK_GRAY_COLOR); @@ -154,7 +155,7 @@ class GrandExchangeSearchPanel extends JPanel executor.execute(() -> priceLookup(true)); } - private void priceLookup(boolean exactMatch) + private boolean updateSearch() { String lookup = searchBar.getText(); @@ -162,7 +163,7 @@ class GrandExchangeSearchPanel extends JPanel { searchItemsPanel.removeAll(); SwingUtilities.invokeLater(searchItemsPanel::updateUI); - return; + return false; } // Input is not empty, add searching label @@ -170,8 +171,17 @@ class GrandExchangeSearchPanel extends JPanel searchBar.setBackground(ColorScheme.DARKER_GRAY_COLOR); searchBar.setEditable(false); searchBar.setIcon(IconTextField.Icon.LOADING); + return true; + } - List result = itemManager.search(lookup); + private void priceLookup(boolean exactMatch) + { + if (!updateSearch()) + { + return; + } + + List result = itemManager.search(searchBar.getText()); if (result.isEmpty()) { searchBar.setIcon(IconTextField.Icon.ERROR); @@ -182,7 +192,7 @@ class GrandExchangeSearchPanel extends JPanel } // move to client thread to lookup item composition - clientThread.invokeLater(() -> processResult(result, lookup, exactMatch)); + clientThread.invokeLater(() -> processResult(result, searchBar.getText(), exactMatch)); } private void processResult(List result, String lookup, boolean exactMatch) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grotesqueguardians/GrotesqueGuardiansPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/grotesqueguardians/GrotesqueGuardiansPlugin.java index 08b063cef5..273233eabf 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grotesqueguardians/GrotesqueGuardiansPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grotesqueguardians/GrotesqueGuardiansPlugin.java @@ -24,26 +24,25 @@ */ package net.runelite.client.plugins.grotesqueguardians; +import java.util.ArrayList; +import javax.annotation.Nullable; import javax.inject.Inject; import javax.inject.Singleton; -import net.runelite.client.eventbus.EventBus; +import net.runelite.api.Client; +import net.runelite.api.NPC; +import static net.runelite.api.NpcID.DUSK_7888; +import net.runelite.api.events.GameTick; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; -import java.util.ArrayList; -import net.runelite.api.events.GameTick; -import net.runelite.api.NPC; -import javax.annotation.Nullable; -import net.runelite.api.Client; - -import static net.runelite.api.NpcID.DUSK_7888; @PluginDescriptor( name = "Grotesque Guardians", description = "Show various helpful utitiles during the Grotesque Gaurdians (Gargoyles) fight", - tags = { "bosses", "combat", "gargs", "overlay", "grotesque", "pve", "pvm" }, + tags = {"bosses", "combat", "gargs", "overlay", "grotesque", "pve", "pvm"}, type = PluginType.PVM, enabledByDefault = false ) @@ -51,18 +50,22 @@ import static net.runelite.api.NpcID.DUSK_7888; public class GrotesqueGuardiansPlugin extends Plugin { private static final int GARGOYLES_REGION = 6727; + @Inject private Client client; + @Inject private OverlayManager overlayManager; + @Inject private GrotesqueGuardiansPrayerOverlay prayerOverlay; - @Inject - private EventBus eventBus; + @Nullable private DuskAttack prayAgainst; + @Nullable private NPC dusk; + private boolean inGargs; private boolean needingToRun; @@ -76,9 +79,8 @@ public class GrotesqueGuardiansPlugin extends Plugin private GrotesqueGuardiansOverlay overlay; @Override - protected void startUp() throws Exception + protected void startUp() { - eventBus.subscribe(GameTick.class, this, this::onGameTick); overlayManager.add(overlay); overlayManager.add(prayerOverlay); @@ -87,16 +89,15 @@ public class GrotesqueGuardiansPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(overlay); overlayManager.remove(prayerOverlay); dusk = null; prayAgainst = null; } + @Subscribe private void onGameTick(final GameTick event) { final ArrayList regions = new ArrayList<>(); @@ -129,14 +130,14 @@ public class GrotesqueGuardiansPlugin extends Plugin } } else - { + { prayAgainst = null; } needingToRun = dusk.getAnimation() == 7802; } } else - { + { inGargs = false; prayAgainst = null; dusk = null; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grotesqueguardians/GrotesqueGuardiansPrayerOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/grotesqueguardians/GrotesqueGuardiansPrayerOverlay.java index c0acd20c66..507553913d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grotesqueguardians/GrotesqueGuardiansPrayerOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grotesqueguardians/GrotesqueGuardiansPrayerOverlay.java @@ -28,7 +28,6 @@ import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.image.BufferedImage; - import java.util.Objects; import javax.inject.Inject; import javax.inject.Singleton; @@ -74,7 +73,7 @@ public class GrotesqueGuardiansPrayerOverlay extends Overlay BufferedImage prayerImage; prayerImage = getPrayerImage(attack); imagePanelComponent.setBackgroundColor(client - .isPrayerActive(attack.getPrayer()) ? ComponentConstants.STANDARD_BACKGROUND_COLOR : NOT_ACTIVATED_BACKGROUND_COLOR); + .isPrayerActive(attack.getPrayer()) ? ComponentConstants.STANDARD_BACKGROUND_COLOR : NOT_ACTIVATED_BACKGROUND_COLOR); NPC dusk = plugin.getDusk(); imagePanelComponent.getChildren().add(new ImageComponent(prayerImage)); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItem.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItem.java index 9a28266918..33250fbc60 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItem.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItem.java @@ -34,8 +34,7 @@ import net.runelite.api.coords.WorldPoint; @Data @Builder -public -class GroundItem +public class GroundItem { private int id; private int itemId; @@ -53,14 +52,14 @@ class GroundItem private boolean isAlwaysPrivate; private boolean isOwnedByPlayer; private Instant droppedInstant; - + @Nonnull private LootType lootType; /** * Is dropped by me */ private boolean isDropped; - + @Nullable private Instant spawnTime; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java index 926fcb7a3a..7309679418 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java @@ -68,7 +68,6 @@ import net.runelite.api.TileItem; import net.runelite.api.TileItemPile; import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.ClientTick; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.FocusChanged; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; @@ -80,7 +79,8 @@ import net.runelite.api.events.MenuOptionClicked; import net.runelite.api.util.Text; import net.runelite.client.Notifier; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.events.NpcLootReceived; import net.runelite.client.events.PlayerLootReceived; import net.runelite.client.game.ItemManager; @@ -389,40 +389,53 @@ public class GroundItemsPlugin extends Plugin @Getter(AccessLevel.PACKAGE) @Setter(AccessLevel.PACKAGE) private Map.Entry textBoxBounds; + @Getter(AccessLevel.PACKAGE) @Setter(AccessLevel.PACKAGE) private Map.Entry hiddenBoxBounds; + @Getter(AccessLevel.PACKAGE) @Setter(AccessLevel.PACKAGE) private Map.Entry highlightBoxBounds; + @Getter(AccessLevel.PACKAGE) @Setter(AccessLevel.PACKAGE) private boolean hotKeyPressed; + @Getter(AccessLevel.PACKAGE) @Setter(AccessLevel.PACKAGE) private boolean hideAll; + private List hiddenItemList = new CopyOnWriteArrayList<>(); private List highlightedItemsList = new CopyOnWriteArrayList<>(); + @Inject private GroundItemInputListener inputListener; + @Inject private MouseManager mouseManager; + @Inject private KeyManager keyManager; + @Inject private Client client; + @Inject private ItemManager itemManager; + @Inject private OverlayManager overlayManager; + @Inject private GroundItemsConfig config; + @Inject private GroundItemsOverlay overlay; + @Inject private Notifier notifier; - @Inject - private EventBus eventBus; + private LoadingCache highlightedItems; private Color defaultColor; private Color highlightedColor; @@ -487,7 +500,6 @@ public class GroundItemsPlugin extends Plugin protected void startUp() { updateConfig(); - addSubscriptions(); overlayManager.add(overlay); reset(); @@ -496,10 +508,8 @@ public class GroundItemsPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(overlay); mouseManager.unregisterMouseListener(inputListener); keyManager.unregisterKeyListener(inputListener); @@ -512,22 +522,7 @@ public class GroundItemsPlugin extends Plugin collectedGroundItems.clear(); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(ItemSpawned.class, this, this::onItemSpawned); - eventBus.subscribe(ItemDespawned.class, this, this::onItemDespawned); - eventBus.subscribe(ItemQuantityChanged.class, this, this::onItemQuantityChanged); - eventBus.subscribe(NpcLootReceived.class, this, this::onNpcLootReceived); - eventBus.subscribe(PlayerLootReceived.class, this, this::onPlayerLootReceived); - eventBus.subscribe(ClientTick.class, this, this::onClientTick); - eventBus.subscribe(MenuEntryAdded.class, this, this::onMenuEntryAdded); - eventBus.subscribe(FocusChanged.class, this, this::onFocusChanged); - eventBus.subscribe(MenuOptionClicked.class, this, this::onMenuOptionClicked); - } - + @Subscribe private void onGameTick(GameTick event) { for (GroundItem item : collectedGroundItems.values()) @@ -540,6 +535,7 @@ public class GroundItemsPlugin extends Plugin } } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("grounditems")) @@ -549,6 +545,7 @@ public class GroundItemsPlugin extends Plugin } } + @Subscribe private void onGameStateChanged(final GameStateChanged event) { if (event.getGameState() == GameState.LOADING) @@ -557,6 +554,7 @@ public class GroundItemsPlugin extends Plugin } } + @Subscribe private void onItemSpawned(ItemSpawned itemSpawned) { TileItem item = itemSpawned.getItem(); @@ -583,6 +581,7 @@ public class GroundItemsPlugin extends Plugin } } + @Subscribe private void onItemDespawned(ItemDespawned itemDespawned) { TileItem item = itemDespawned.getItem(); @@ -609,6 +608,7 @@ public class GroundItemsPlugin extends Plugin } } + @Subscribe private void onItemQuantityChanged(ItemQuantityChanged itemQuantityChanged) { TileItem item = itemQuantityChanged.getItem(); @@ -625,6 +625,7 @@ public class GroundItemsPlugin extends Plugin } } + @Subscribe private void onNpcLootReceived(NpcLootReceived npcLootReceived) { npcLootReceived.getItems().forEach(item -> @@ -642,6 +643,7 @@ public class GroundItemsPlugin extends Plugin lootNotifier(items); } + @Subscribe private void onPlayerLootReceived(PlayerLootReceived playerLootReceived) { Collection items = playerLootReceived.getItems(); @@ -689,6 +691,7 @@ public class GroundItemsPlugin extends Plugin notifier.notify(notification); } + @Subscribe private void onClientTick(ClientTick event) { final MenuEntry[] menuEntries = client.getMenuEntries(); @@ -931,6 +934,7 @@ public class GroundItemsPlugin extends Plugin } } + @Subscribe private void onMenuEntryAdded(MenuEntryAdded lastEntry) { if (this.itemHighlightMode != OVERLAY) @@ -1174,6 +1178,7 @@ public class GroundItemsPlugin extends Plugin return this.defaultColor; } + @Subscribe private void onFocusChanged(FocusChanged focusChanged) { if (!focusChanged.isFocused()) @@ -1182,6 +1187,7 @@ public class GroundItemsPlugin extends Plugin } } + @Subscribe private void onMenuOptionClicked(MenuOptionClicked menuOptionClicked) { if (menuOptionClicked.getMenuOpcode() == MenuOpcode.ITEM_DROP) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/LootType.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/LootType.java index abd6c815e0..7a07226d61 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/LootType.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/LootType.java @@ -28,5 +28,5 @@ enum LootType { UNKNOWN, PVP, - PVM; + PVM } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/config/ItemHighlightMode.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/config/ItemHighlightMode.java index f6d1b0c80f..3cccecd936 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/config/ItemHighlightMode.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/config/ItemHighlightMode.java @@ -24,10 +24,11 @@ */ package net.runelite.client.plugins.grounditems.config; +import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; -@Getter +@Getter(AccessLevel.PUBLIC) @RequiredArgsConstructor public enum ItemHighlightMode { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/config/MenuHighlightMode.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/config/MenuHighlightMode.java index e103109c59..8d62f86c8e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/config/MenuHighlightMode.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/config/MenuHighlightMode.java @@ -24,10 +24,11 @@ */ package net.runelite.client.plugins.grounditems.config; +import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; -@Getter +@Getter(AccessLevel.PUBLIC) @RequiredArgsConstructor public enum MenuHighlightMode { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/config/PriceDisplayMode.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/config/PriceDisplayMode.java index 5d64fa723c..b93c556b8c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/config/PriceDisplayMode.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/config/PriceDisplayMode.java @@ -24,10 +24,11 @@ */ package net.runelite.client.plugins.grounditems.config; +import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; -@Getter +@Getter(AccessLevel.PUBLIC) @RequiredArgsConstructor public enum PriceDisplayMode { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/config/TimerDisplayMode.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/config/TimerDisplayMode.java index e8236e8a34..33b8fa0afe 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/config/TimerDisplayMode.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/config/TimerDisplayMode.java @@ -24,10 +24,11 @@ */ package net.runelite.client.plugins.grounditems.config; +import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; -@Getter +@Getter(AccessLevel.PUBLIC) @RequiredArgsConstructor public enum TimerDisplayMode { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/config/ValueCalculationMode.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/config/ValueCalculationMode.java index 26830f14ba..948f0b73d6 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/config/ValueCalculationMode.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/config/ValueCalculationMode.java @@ -25,10 +25,11 @@ package net.runelite.client.plugins.grounditems.config; +import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; -@Getter +@Getter(AccessLevel.PUBLIC) @RequiredArgsConstructor public enum ValueCalculationMode { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/groundmarkers/GroundMarkerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/groundmarkers/GroundMarkerPlugin.java index 711c9046a0..b8162cb442 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/groundmarkers/GroundMarkerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/groundmarkers/GroundMarkerPlugin.java @@ -58,7 +58,7 @@ import net.runelite.api.events.MenuEntryAdded; import net.runelite.api.events.MenuOptionClicked; import net.runelite.api.util.Text; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.input.KeyManager; import net.runelite.client.plugins.Plugin; @@ -112,9 +112,6 @@ public class GroundMarkerPlugin extends Plugin @Inject private GroundMarkerMinimapOverlay minimapOverlay; - @Inject - private EventBus eventBus; - @Inject private KeyManager keyManager; @@ -295,6 +292,7 @@ public class GroundMarkerPlugin extends Plugin return point; } + @Subscribe private void onGameStateChanged(GameStateChanged gameStateChanged) { if (gameStateChanged.getGameState() != GameState.LOGGED_IN) @@ -306,6 +304,7 @@ public class GroundMarkerPlugin extends Plugin loadPoints(); } + @Subscribe private void onFocusChanged(FocusChanged focusChanged) { if (!focusChanged.isFocused()) @@ -314,6 +313,7 @@ public class GroundMarkerPlugin extends Plugin } } + @Subscribe private void onMenuEntryAdded(MenuEntryAdded event) { if (hotKeyPressed && event.getOption().equals(WALK_HERE)) @@ -360,6 +360,7 @@ public class GroundMarkerPlugin extends Plugin } } + @Subscribe private void onMenuOptionClicked(MenuOptionClicked event) { if (!event.getOption().contains(MARK) && !event.getOption().contains(UNMARK)) @@ -387,7 +388,6 @@ public class GroundMarkerPlugin extends Plugin protected void startUp() { updateConfig(); - addSubscriptions(); overlayManager.add(overlay); overlayManager.add(minimapOverlay); @@ -398,22 +398,12 @@ public class GroundMarkerPlugin extends Plugin @Override protected void shutDown() { - eventBus.unregister(this); overlayManager.remove(overlay); overlayManager.remove(minimapOverlay); keyManager.unregisterKeyListener(inputListener); points.clear(); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(FocusChanged.class, this, this::onFocusChanged); - eventBus.subscribe(MenuEntryAdded.class, this, this::onMenuEntryAdded); - eventBus.subscribe(MenuOptionClicked.class, this, this::onMenuOptionClicked); - } - private void markTile(LocalPoint localPoint, int group) { if (localPoint == null) @@ -495,6 +485,7 @@ public class GroundMarkerPlugin extends Plugin return color; } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("groundMarker")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/groundmarkers/GroundMarkerPoint.java b/runelite-client/src/main/java/net/runelite/client/plugins/groundmarkers/GroundMarkerPoint.java index 1d4e987862..99b1b489b1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/groundmarkers/GroundMarkerPoint.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/groundmarkers/GroundMarkerPoint.java @@ -30,7 +30,7 @@ import lombok.EqualsAndHashCode; import lombok.Value; @Value -@EqualsAndHashCode(exclude = { "group" }) +@EqualsAndHashCode(exclude = {"group"}) class GroundMarkerPoint { private int regionId; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/herbiboars/HerbiboarMinimapOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/herbiboars/HerbiboarMinimapOverlay.java index 2cb9567ed1..ea27aeaa7c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/herbiboars/HerbiboarMinimapOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/herbiboars/HerbiboarMinimapOverlay.java @@ -36,6 +36,7 @@ import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.OverlayUtil; + @Singleton public class HerbiboarMinimapOverlay extends Overlay { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/herbiboars/HerbiboarOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/herbiboars/HerbiboarOverlay.java index 4dd77d1f5f..6eac5222c4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/herbiboars/HerbiboarOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/herbiboars/HerbiboarOverlay.java @@ -47,7 +47,7 @@ class HerbiboarOverlay extends Overlay { private static final Color TRANSPARENT = new Color(0, 0, 0, 0); - private Client client; + private final Client client; private final HerbiboarPlugin plugin; private final ModelOutlineRenderer modelOutlineRenderer; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/herbiboars/HerbiboarPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/herbiboars/HerbiboarPlugin.java index 9108b83e55..0ef828c8e9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/herbiboars/HerbiboarPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/herbiboars/HerbiboarPlugin.java @@ -59,7 +59,7 @@ import net.runelite.api.events.GroundObjectDespawned; import net.runelite.api.events.GroundObjectSpawned; import net.runelite.api.events.VarbitChanged; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -115,9 +115,6 @@ public class HerbiboarPlugin extends Plugin @Inject private HerbiboarConfig config; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) private boolean inHerbiboarArea; @@ -149,16 +146,16 @@ public class HerbiboarPlugin extends Plugin @Setter(AccessLevel.PACKAGE) private int finishId; - @Getter - @Setter + @Getter(AccessLevel.PACKAGE) + @Setter(AccessLevel.PACKAGE) private Set previousShownTrailIds; - @Getter - @Setter + @Getter(AccessLevel.PACKAGE) + @Setter(AccessLevel.PACKAGE) private Integer previousTrailId = null; - @Getter - @Setter + @Getter(AccessLevel.PACKAGE) + @Setter(AccessLevel.PACKAGE) private boolean herbiboarRendered = false; @Getter(AccessLevel.PACKAGE) @@ -191,10 +188,9 @@ public class HerbiboarPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); overlayManager.add(overlay); overlayManager.add(minimapOverlay); @@ -202,28 +198,12 @@ public class HerbiboarPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(overlay); overlayManager.remove(minimapOverlay); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(VarbitChanged.class, this, this::onVarbitChanged); - eventBus.subscribe(AnimationChanged.class, this, this::onAnimationChanged); - eventBus.subscribe(GameObjectSpawned.class, this, this::onGameObjectSpawned); - eventBus.subscribe(GameObjectChanged.class, this, this::onGameObjectChanged); - eventBus.subscribe(GameObjectDespawned.class, this, this::onGameObjectDespawned); - eventBus.subscribe(GroundObjectSpawned.class, this, this::onGroundObjectSpawned); - eventBus.subscribe(GroundObjectChanged.class, this, this::onGroundObjectChanged); - eventBus.subscribe(GroundObjectDespawned.class, this, this::onGroundObjectDespawned); - } - private void updateTrailData() { currentTrail = null; @@ -318,6 +298,7 @@ public class HerbiboarPlugin extends Plugin tunnels.clear(); } + @Subscribe private void onGameStateChanged(GameStateChanged event) { switch (event.getGameState()) @@ -335,6 +316,7 @@ public class HerbiboarPlugin extends Plugin } } + @Subscribe private void onVarbitChanged(VarbitChanged event) { if (isInHerbiboarArea()) @@ -343,11 +325,13 @@ public class HerbiboarPlugin extends Plugin } } + @Subscribe private void onGameObjectSpawned(GameObjectSpawned event) { onGameObject(event.getTile(), null, event.getGameObject()); } + @Subscribe public void onAnimationChanged(AnimationChanged event) { if (!(event.getActor() instanceof NPC)) @@ -373,26 +357,31 @@ public class HerbiboarPlugin extends Plugin } } + @Subscribe private void onGameObjectChanged(GameObjectChanged event) { onGameObject(event.getTile(), event.getPrevious(), event.getGameObject()); } + @Subscribe private void onGameObjectDespawned(GameObjectDespawned event) { onGameObject(event.getTile(), event.getGameObject(), null); } + @Subscribe private void onGroundObjectSpawned(GroundObjectSpawned event) { - onGroundObject( null, event.getGroundObject()); + onGroundObject(null, event.getGroundObject()); } + @Subscribe private void onGroundObjectChanged(GroundObjectChanged event) { onGroundObject(event.getPrevious(), event.getGroundObject()); } + @Subscribe private void onGroundObjectDespawned(GroundObjectDespawned event) { onGroundObject(event.getGroundObject(), null); @@ -476,6 +465,7 @@ public class HerbiboarPlugin extends Plugin return END_LOCATIONS; } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("herbiboar")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/herbiboars/HerbiboarTrail.java b/runelite-client/src/main/java/net/runelite/client/plugins/herbiboars/HerbiboarTrail.java index 6f1dba41fb..f7d70558b4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/herbiboars/HerbiboarTrail.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/herbiboars/HerbiboarTrail.java @@ -27,6 +27,7 @@ package net.runelite.client.plugins.herbiboars; import java.util.Arrays; import java.util.HashSet; import java.util.Set; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; import net.runelite.api.Varbits; @@ -61,18 +62,18 @@ public enum HerbiboarTrail TRAIL_31369(31369, Varbits.HB_TRAIL_31369, new WorldPoint(3706, 3811, 0), null, null, null), TRAIL_31372(31372, Varbits.HB_TRAIL_31372, new WorldPoint(3713, 3840, 0), null, null, null); - @Getter + @Getter(AccessLevel.PACKAGE) private final int trailId; - @Getter + @Getter(AccessLevel.PACKAGE) private final Varbits varbit; private final WorldPoint objectLoc1; private final WorldPoint objectLoc2; private final WorldPoint objectLoc3; private final WorldPoint objectLoc4; - @Getter + @Getter(AccessLevel.PACKAGE) private static Set trailIds = new HashSet<>(); - @Getter + @Getter(AccessLevel.PACKAGE) private static Set allObjectLocs = new HashSet<>(); static diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/HidePrayersConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/HidePrayersConfig.java index 0784dac22b..1e2ccbb828 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/HidePrayersConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/HidePrayersConfig.java @@ -76,7 +76,7 @@ public interface HidePrayersConfig extends Config { return false; } - + @ConfigItem( position = 0, keyName = "showindividualprayers", @@ -538,7 +538,7 @@ public interface HidePrayersConfig extends Config { return false; } - + @ConfigItem( position = 3, keyName = "barrows", diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/HidePrayersPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/HidePrayersPlugin.java index b58470499a..dcc474db34 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/HidePrayersPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/HidePrayersPlugin.java @@ -46,7 +46,7 @@ import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetID; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -72,36 +72,36 @@ import net.runelite.client.plugins.hideprayers.util.Zulrah; public class HidePrayersPlugin extends Plugin { private static final List PRAYER_WIDGET_INFO_LIST = ImmutableList.of( - WidgetInfo.PRAYER_THICK_SKIN, //0 - WidgetInfo.PRAYER_BURST_OF_STRENGTH, //1 - WidgetInfo.PRAYER_CLARITY_OF_THOUGHT, //2 - WidgetInfo.PRAYER_SHARP_EYE, //3 - WidgetInfo.PRAYER_MYSTIC_WILL, //4 - WidgetInfo.PRAYER_ROCK_SKIN, //5 - WidgetInfo.PRAYER_SUPERHUMAN_STRENGTH, //6 - WidgetInfo.PRAYER_IMPROVED_REFLEXES, //7 - WidgetInfo.PRAYER_RAPID_RESTORE, //8 - WidgetInfo.PRAYER_RAPID_HEAL, //9 - WidgetInfo.PRAYER_PROTECT_ITEM, //10 - WidgetInfo.PRAYER_HAWK_EYE, //11 - WidgetInfo.PRAYER_MYSTIC_LORE, //12 - WidgetInfo.PRAYER_STEEL_SKIN, //13 - WidgetInfo.PRAYER_ULTIMATE_STRENGTH, //14 - WidgetInfo.PRAYER_INCREDIBLE_REFLEXES, //15 - WidgetInfo.PRAYER_PROTECT_FROM_MAGIC, //16 - WidgetInfo.PRAYER_PROTECT_FROM_MISSILES, //17 - WidgetInfo.PRAYER_PROTECT_FROM_MELEE, //18 - WidgetInfo.PRAYER_EAGLE_EYE, //19 - WidgetInfo.PRAYER_MYSTIC_MIGHT, //20 - WidgetInfo.PRAYER_RETRIBUTION, //21 - WidgetInfo.PRAYER_REDEMPTION, //22 - WidgetInfo.PRAYER_SMITE, //23 - WidgetInfo.PRAYER_PRESERVE, //24 - WidgetInfo.PRAYER_CHIVALRY, //25 - WidgetInfo.PRAYER_PIETY, //26 - WidgetInfo.PRAYER_RIGOUR, //27 - WidgetInfo.PRAYER_AUGURY //28 - ); + WidgetInfo.PRAYER_THICK_SKIN, //0 + WidgetInfo.PRAYER_BURST_OF_STRENGTH, //1 + WidgetInfo.PRAYER_CLARITY_OF_THOUGHT, //2 + WidgetInfo.PRAYER_SHARP_EYE, //3 + WidgetInfo.PRAYER_MYSTIC_WILL, //4 + WidgetInfo.PRAYER_ROCK_SKIN, //5 + WidgetInfo.PRAYER_SUPERHUMAN_STRENGTH, //6 + WidgetInfo.PRAYER_IMPROVED_REFLEXES, //7 + WidgetInfo.PRAYER_RAPID_RESTORE, //8 + WidgetInfo.PRAYER_RAPID_HEAL, //9 + WidgetInfo.PRAYER_PROTECT_ITEM, //10 + WidgetInfo.PRAYER_HAWK_EYE, //11 + WidgetInfo.PRAYER_MYSTIC_LORE, //12 + WidgetInfo.PRAYER_STEEL_SKIN, //13 + WidgetInfo.PRAYER_ULTIMATE_STRENGTH, //14 + WidgetInfo.PRAYER_INCREDIBLE_REFLEXES, //15 + WidgetInfo.PRAYER_PROTECT_FROM_MAGIC, //16 + WidgetInfo.PRAYER_PROTECT_FROM_MISSILES, //17 + WidgetInfo.PRAYER_PROTECT_FROM_MELEE, //18 + WidgetInfo.PRAYER_EAGLE_EYE, //19 + WidgetInfo.PRAYER_MYSTIC_MIGHT, //20 + WidgetInfo.PRAYER_RETRIBUTION, //21 + WidgetInfo.PRAYER_REDEMPTION, //22 + WidgetInfo.PRAYER_SMITE, //23 + WidgetInfo.PRAYER_PRESERVE, //24 + WidgetInfo.PRAYER_CHIVALRY, //25 + WidgetInfo.PRAYER_PIETY, //26 + WidgetInfo.PRAYER_RIGOUR, //27 + WidgetInfo.PRAYER_AUGURY //28 + ); @Inject private Client client; @@ -109,9 +109,6 @@ public class HidePrayersPlugin extends Plugin @Inject private HidePrayersConfig config; - @Inject - private EventBus eventBus; - private boolean showindividualprayers; private boolean ShowTHICK_SKIN; private boolean ShowBURST_OF_STRENGTH; @@ -169,29 +166,20 @@ public class HidePrayersPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); hidePrayers(); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - restorePrayers(); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(WidgetLoaded.class, this, this::onWidgetLoaded); - } - + @Subscribe private void onGameStateChanged(GameStateChanged event) { if (event.getGameState() == GameState.LOGGED_IN) @@ -201,6 +189,7 @@ public class HidePrayersPlugin extends Plugin } } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("hideprayers")) @@ -210,6 +199,7 @@ public class HidePrayersPlugin extends Plugin } } + @Subscribe private void onWidgetLoaded(WidgetLoaded event) { if (event.getGroupId() == WidgetID.PRAYER_GROUP_ID || event.getGroupId() == WidgetID.QUICK_PRAYERS_GROUP_ID) @@ -306,7 +296,7 @@ public class HidePrayersPlugin extends Plugin return; } - if ( !this.showindividualprayers + if (!this.showindividualprayers && !this.getarmadylprayers && !this.getbarrowsprayers && !this.getbandosprayers @@ -325,35 +315,35 @@ public class HidePrayersPlugin extends Plugin if (this.showindividualprayers) { - prayerWidgets.get(0).setHidden(!this.ShowTHICK_SKIN); // Thick Skin - prayerWidgets.get(1).setHidden(!this.ShowBURST_OF_STRENGTH); // Burst of Strength - prayerWidgets.get(2).setHidden(!this.ShowCLARITY_OF_THOUGHT); // Clarity of Thought - prayerWidgets.get(3).setHidden(!this.ShowSHARP_EYE); // Sharp Eye - prayerWidgets.get(4).setHidden(!this.ShowMYSTIC_WILL); // Mystic Will - prayerWidgets.get(5).setHidden(!this.ShowROCK_SKIN); // Rock Skin - prayerWidgets.get(6).setHidden(!this.ShowSUPERHUMAN_STRENGTH); // Super Human Strength - prayerWidgets.get(7).setHidden(!this.ShowIMPROVED_REFLEXES); // Improved_Reflexes - prayerWidgets.get(8).setHidden(!this.ShowRapidRestore); // Rapid Restore - prayerWidgets.get(9).setHidden(!this.ShowRapidHeal); // Rapid Heal - prayerWidgets.get(10).setHidden(!this.ShowProtectItem); // Protect Item - prayerWidgets.get(11).setHidden(!this.ShowHAWK_EYE); // Hawk Eye - prayerWidgets.get(12).setHidden(!this.ShowMYSTIC_LORE); // Mystic Lore - prayerWidgets.get(13).setHidden(!this.ShowSteelSkin); // Steel Skin - prayerWidgets.get(14).setHidden(!this.ShowUltimateStrength); // Ultimate Strength - prayerWidgets.get(15).setHidden(!this.ShowIncredibleReflex); // Incredible Reflexes - prayerWidgets.get(16).setHidden(!this.ShowPTFMagic); // Protect from Magic - prayerWidgets.get(17).setHidden(!this.ShowPTFRange); // Protect from Range - prayerWidgets.get(18).setHidden(!this.ShowPTFMelee); // Protect from Melee - prayerWidgets.get(19).setHidden(!this.ShowEagle); // eagle eye - prayerWidgets.get(20).setHidden(!this.ShowMystic); // Mystic Might - prayerWidgets.get(21).setHidden(!this.ShowRETRIBUTION); // Retribution - prayerWidgets.get(22).setHidden(!this.ShowRedemption); // Redemption - prayerWidgets.get(23).setHidden(!this.ShowSmite); // Smite - prayerWidgets.get(24).setHidden(!this.ShowPreserve); // Preserve - prayerWidgets.get(25).setHidden(!this.ShowChivalry); // Chivalry - prayerWidgets.get(26).setHidden(!this.ShowPiety); // Piety - prayerWidgets.get(27).setHidden(!this.ShowRigour); // Rigour - prayerWidgets.get(28).setHidden(!this.ShowAugury); // Augury + prayerWidgets.get(0).setHidden(!this.ShowTHICK_SKIN); // Thick Skin + prayerWidgets.get(1).setHidden(!this.ShowBURST_OF_STRENGTH); // Burst of Strength + prayerWidgets.get(2).setHidden(!this.ShowCLARITY_OF_THOUGHT); // Clarity of Thought + prayerWidgets.get(3).setHidden(!this.ShowSHARP_EYE); // Sharp Eye + prayerWidgets.get(4).setHidden(!this.ShowMYSTIC_WILL); // Mystic Will + prayerWidgets.get(5).setHidden(!this.ShowROCK_SKIN); // Rock Skin + prayerWidgets.get(6).setHidden(!this.ShowSUPERHUMAN_STRENGTH); // Super Human Strength + prayerWidgets.get(7).setHidden(!this.ShowIMPROVED_REFLEXES); // Improved_Reflexes + prayerWidgets.get(8).setHidden(!this.ShowRapidRestore); // Rapid Restore + prayerWidgets.get(9).setHidden(!this.ShowRapidHeal); // Rapid Heal + prayerWidgets.get(10).setHidden(!this.ShowProtectItem); // Protect Item + prayerWidgets.get(11).setHidden(!this.ShowHAWK_EYE); // Hawk Eye + prayerWidgets.get(12).setHidden(!this.ShowMYSTIC_LORE); // Mystic Lore + prayerWidgets.get(13).setHidden(!this.ShowSteelSkin); // Steel Skin + prayerWidgets.get(14).setHidden(!this.ShowUltimateStrength); // Ultimate Strength + prayerWidgets.get(15).setHidden(!this.ShowIncredibleReflex); // Incredible Reflexes + prayerWidgets.get(16).setHidden(!this.ShowPTFMagic); // Protect from Magic + prayerWidgets.get(17).setHidden(!this.ShowPTFRange); // Protect from Range + prayerWidgets.get(18).setHidden(!this.ShowPTFMelee); // Protect from Melee + prayerWidgets.get(19).setHidden(!this.ShowEagle); // eagle eye + prayerWidgets.get(20).setHidden(!this.ShowMystic); // Mystic Might + prayerWidgets.get(21).setHidden(!this.ShowRETRIBUTION); // Retribution + prayerWidgets.get(22).setHidden(!this.ShowRedemption); // Redemption + prayerWidgets.get(23).setHidden(!this.ShowSmite); // Smite + prayerWidgets.get(24).setHidden(!this.ShowPreserve); // Preserve + prayerWidgets.get(25).setHidden(!this.ShowChivalry); // Chivalry + prayerWidgets.get(26).setHidden(!this.ShowPiety); // Piety + prayerWidgets.get(27).setHidden(!this.ShowRigour); // Rigour + prayerWidgets.get(28).setHidden(!this.ShowAugury); // Augury } else if (this.getarmadylprayers) @@ -518,7 +508,7 @@ public class HidePrayersPlugin extends Plugin break; } } - + else if (this.getzamorakprayers) { switch (this.zamorak) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/util/Armadyl.java b/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/util/Armadyl.java index 72231afd7e..80802f5a22 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/util/Armadyl.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/util/Armadyl.java @@ -26,10 +26,11 @@ */ package net.runelite.client.plugins.hideprayers.util; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; -@Getter +@Getter(AccessLevel.PACKAGE) @AllArgsConstructor public enum Armadyl { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/util/Bandos.java b/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/util/Bandos.java index bf94c424db..c3f0c39294 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/util/Bandos.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/util/Bandos.java @@ -26,10 +26,11 @@ */ package net.runelite.client.plugins.hideprayers.util; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; -@Getter +@Getter(AccessLevel.PACKAGE) @AllArgsConstructor public enum Bandos { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/util/Barrows.java b/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/util/Barrows.java index db72e23b56..414024f356 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/util/Barrows.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/util/Barrows.java @@ -26,10 +26,11 @@ */ package net.runelite.client.plugins.hideprayers.util; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; -@Getter +@Getter(AccessLevel.PACKAGE) @AllArgsConstructor public enum Barrows { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/util/Cerberus.java b/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/util/Cerberus.java index a6cc36c16b..3894a71b12 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/util/Cerberus.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/util/Cerberus.java @@ -26,10 +26,11 @@ */ package net.runelite.client.plugins.hideprayers.util; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; -@Getter +@Getter(AccessLevel.PACKAGE) @AllArgsConstructor public enum Cerberus { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/util/PVPPrayers.java b/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/util/PVPPrayers.java index 80c62073ac..8571c7611c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/util/PVPPrayers.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/util/PVPPrayers.java @@ -24,11 +24,13 @@ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package net.runelite.client.plugins.hideprayers.util;; +package net.runelite.client.plugins.hideprayers.util; + +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; -@Getter +@Getter(AccessLevel.PACKAGE) @AllArgsConstructor public enum PVPPrayers { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/util/Saradomin.java b/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/util/Saradomin.java index 34c5912cb0..8b108f50f0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/util/Saradomin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/util/Saradomin.java @@ -26,10 +26,11 @@ */ package net.runelite.client.plugins.hideprayers.util; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; -@Getter +@Getter(AccessLevel.PACKAGE) @AllArgsConstructor public enum Saradomin { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/util/Vorkath.java b/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/util/Vorkath.java index e3aa580a8c..499566d9ee 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/util/Vorkath.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/util/Vorkath.java @@ -26,10 +26,11 @@ */ package net.runelite.client.plugins.hideprayers.util; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; -@Getter +@Getter(AccessLevel.PACKAGE) @AllArgsConstructor public enum Vorkath { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/util/Zamorak.java b/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/util/Zamorak.java index 5d57ffee3c..fd77e1f848 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/util/Zamorak.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/util/Zamorak.java @@ -26,10 +26,11 @@ */ package net.runelite.client.plugins.hideprayers.util; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; -@Getter +@Getter(AccessLevel.PACKAGE) @AllArgsConstructor public enum Zamorak { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/util/Zulrah.java b/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/util/Zulrah.java index ccb57f49a8..2590016edd 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/util/Zulrah.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hideprayers/util/Zulrah.java @@ -26,10 +26,11 @@ */ package net.runelite.client.plugins.hideprayers.util; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; -@Getter +@Getter(AccessLevel.PACKAGE) @AllArgsConstructor public enum Zulrah { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hideunder/HideUnder.java b/runelite-client/src/main/java/net/runelite/client/plugins/hideunder/HideUnder.java index 15ffef6f90..de92bff3fc 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hideunder/HideUnder.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hideunder/HideUnder.java @@ -23,23 +23,18 @@ */ package net.runelite.client.plugins.hideunder; -import java.util.HashSet; -import java.util.Set; import javax.inject.Inject; import lombok.extern.slf4j.Slf4j; -import net.runelite.api.Actor; import net.runelite.api.Client; import net.runelite.api.GameState; import net.runelite.api.Player; import net.runelite.api.Varbits; import net.runelite.api.coords.WorldPoint; -import net.runelite.api.events.AnimationChanged; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; -import net.runelite.api.events.InteractingChanged; -import net.runelite.api.events.PlayerDespawned; -import net.runelite.api.events.PlayerSpawned; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.game.PlayerContainer; +import net.runelite.client.game.PlayerManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.PluginType; @@ -57,32 +52,21 @@ public class HideUnder extends Plugin @Inject private Client client; @Inject - private EventBus eventBus; - private Set playerContainer = new HashSet<>(); + private PlayerManager playerManager; + @Override protected void startUp() { - addSubscriptions(); - playerContainer.clear(); } @Override protected void shutDown() { - eventBus.unregister(this); - } - - private void addSubscriptions() - { - eventBus.subscribe(PlayerSpawned.class, this, this::onPlayerSpawned); - eventBus.subscribe(PlayerDespawned.class, this, this::onPlayerDespawned); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(InteractingChanged.class, this, this::onInteractingChanged); - eventBus.subscribe(AnimationChanged.class, this, this::onAnimationChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); + } + @Subscribe private void onGameStateChanged(GameStateChanged event) { if (event.getGameState() == GameState.LOGGED_IN) @@ -91,122 +75,32 @@ public class HideUnder extends Plugin } } - private void onInteractingChanged(InteractingChanged event) - { - if ((event.getSource() instanceof Player) && (event.getTarget() instanceof Player)) - { - final Player source = (Player) event.getSource(); - final Player target = (Player) event.getTarget(); - - if (source == client.getLocalPlayer()) - { - for (PlayerContainer player : playerContainer) - { - if (player.getPlayer() == target) - { - player.setTimer(16); - player.setTarget(true); - } - } - } - else if (target == client.getLocalPlayer()) - { - for (PlayerContainer player : playerContainer) - { - if (player.getPlayer() == source) - { - player.setTimer(16); - player.setTarget(true); - } - } - } - } - } - - private void onAnimationChanged(AnimationChanged event) - { - final Actor actor = event.getActor(); - - if (actor.getInteracting() != client.getLocalPlayer() || !(actor instanceof Player)) - { - return; - } - - if (actor.getAnimation() != -1 && actor.getInteracting() != null && actor.getInteracting() == client.getLocalPlayer()) - { - for (PlayerContainer player : playerContainer) - { - if (player.getPlayer() == actor) - { - player.setTimer(16); - player.setTarget(true); - } - } - } - } - - private void onPlayerSpawned(PlayerSpawned event) - { - final Player player = event.getPlayer(); - - if (player == client.getLocalPlayer()) - { - return; - } - - playerContainer.add(new PlayerContainer(player)); - } - - private void onPlayerDespawned(PlayerDespawned event) - { - final Player player = event.getPlayer(); - playerContainer.removeIf(playa -> playa.getPlayer() == player); - } - + @Subscribe private void onGameTick(GameTick event) { - if (playerContainer.isEmpty() || client.getLocalPlayer() == null) + if (client.getLocalPlayer() == null) { return; } - final WorldPoint lp = client.getLocalPlayer().getWorldLocation(); - final WorldPoint localPlayerWp = WorldPoint.fromLocalInstance(client, client.getLocalPlayer().getLocalLocation()); - client.setLocalPlayerHidden(false); - if (localPlayerWp == null) + final WorldPoint localPlayerWp = WorldPoint.fromLocalInstance(client, client.getLocalPlayer().getLocalLocation()); + final WorldPoint lp = client.getLocalPlayer().getWorldLocation(); + + for (PlayerContainer player : playerManager.getAllAttackers()) { - return; - } - - for (PlayerContainer player : playerContainer) - { - if (player.getTimer() > 0) - { - player.setTimer(player.getTimer() - 1); - } - else - { - player.setTarget(false); - } - - if (!player.isTarget()) - { - continue; - } - if (client.getVar(Varbits.LMS_IN_GAME) == 1) { final WorldPoint playerWp = WorldPoint.fromLocalInstance(client, player.getPlayer().getLocalLocation()); - if (playerWp != null && localPlayerWp.distanceTo(playerWp) == 0) + if (localPlayerWp != null && localPlayerWp.distanceTo(playerWp) == 0) { client.setLocalPlayerHidden(true); } continue; } - if (player.getPlayer().getWorldLocation().distanceTo(lp) == 0) + if (lp != null && player.getPlayer().getWorldLocation().distanceTo(lp) == 0) { client.setLocalPlayerHidden(true); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/highalchemy/HighAlchemyPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/highalchemy/HighAlchemyPlugin.java index fb48147a67..81aa12827c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/highalchemy/HighAlchemyPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/highalchemy/HighAlchemyPlugin.java @@ -45,7 +45,7 @@ import static net.runelite.api.widgets.WidgetID.GUIDE_PRICES_INVENTORY_GROUP_ID; import static net.runelite.api.widgets.WidgetID.INVENTORY_GROUP_ID; import static net.runelite.api.widgets.WidgetID.SHOP_INVENTORY_GROUP_ID; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -76,9 +76,6 @@ public class HighAlchemyPlugin extends Plugin @Inject private HighAlchemyOverlay overlay; - @Inject - private EventBus eventBus; - @Provides HighAlchemyConfig getConfig(ConfigManager configManager) { @@ -95,21 +92,20 @@ public class HighAlchemyPlugin extends Plugin private boolean usingFireRunes; @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - buildGroupList(); overlayManager.add(overlay); } @Override - protected void shutDown() throws Exception + protected void shutDown() { overlayManager.remove(overlay); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals(CONFIG_GROUP)) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePanel.java index b0ab7c0c94..76989fd3e0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePanel.java @@ -65,34 +65,7 @@ import net.runelite.http.api.hiscore.HiscoreClient; import net.runelite.http.api.hiscore.HiscoreEndpoint; import net.runelite.http.api.hiscore.HiscoreResult; import net.runelite.http.api.hiscore.HiscoreSkill; -import static net.runelite.http.api.hiscore.HiscoreSkill.AGILITY; -import static net.runelite.http.api.hiscore.HiscoreSkill.ATTACK; -import static net.runelite.http.api.hiscore.HiscoreSkill.BOUNTY_HUNTER_HUNTER; -import static net.runelite.http.api.hiscore.HiscoreSkill.BOUNTY_HUNTER_ROGUE; -import static net.runelite.http.api.hiscore.HiscoreSkill.CLUE_SCROLL_ALL; -import static net.runelite.http.api.hiscore.HiscoreSkill.CONSTRUCTION; -import static net.runelite.http.api.hiscore.HiscoreSkill.COOKING; -import static net.runelite.http.api.hiscore.HiscoreSkill.CRAFTING; -import static net.runelite.http.api.hiscore.HiscoreSkill.DEFENCE; -import static net.runelite.http.api.hiscore.HiscoreSkill.FARMING; -import static net.runelite.http.api.hiscore.HiscoreSkill.FIREMAKING; -import static net.runelite.http.api.hiscore.HiscoreSkill.FISHING; -import static net.runelite.http.api.hiscore.HiscoreSkill.FLETCHING; -import static net.runelite.http.api.hiscore.HiscoreSkill.HERBLORE; -import static net.runelite.http.api.hiscore.HiscoreSkill.HITPOINTS; -import static net.runelite.http.api.hiscore.HiscoreSkill.HUNTER; -import static net.runelite.http.api.hiscore.HiscoreSkill.LAST_MAN_STANDING; -import static net.runelite.http.api.hiscore.HiscoreSkill.MAGIC; -import static net.runelite.http.api.hiscore.HiscoreSkill.MINING; -import static net.runelite.http.api.hiscore.HiscoreSkill.OVERALL; -import static net.runelite.http.api.hiscore.HiscoreSkill.PRAYER; -import static net.runelite.http.api.hiscore.HiscoreSkill.RANGED; -import static net.runelite.http.api.hiscore.HiscoreSkill.RUNECRAFT; -import static net.runelite.http.api.hiscore.HiscoreSkill.SLAYER; -import static net.runelite.http.api.hiscore.HiscoreSkill.SMITHING; -import static net.runelite.http.api.hiscore.HiscoreSkill.STRENGTH; -import static net.runelite.http.api.hiscore.HiscoreSkill.THIEVING; -import static net.runelite.http.api.hiscore.HiscoreSkill.WOODCUTTING; +import static net.runelite.http.api.hiscore.HiscoreSkill.*; import net.runelite.http.api.hiscore.Skill; @Slf4j @@ -275,6 +248,7 @@ public class HiscorePanel extends PluginPanel minigamePanel.setBackground(ColorScheme.DARKER_GRAY_COLOR); minigamePanel.add(makeSkillPanel(CLUE_SCROLL_ALL)); + minigamePanel.add(makeSkillPanel(LEAGUE_POINTS)); minigamePanel.add(makeSkillPanel(LAST_MAN_STANDING)); minigamePanel.add(makeSkillPanel(BOUNTY_HUNTER_ROGUE)); minigamePanel.add(makeSkillPanel(BOUNTY_HUNTER_HUNTER)); @@ -470,15 +444,17 @@ public class HiscorePanel extends PluginPanel case 0: return null; case 1: - return HiscoreSkill.OVERALL; + return OVERALL; case 2: - return HiscoreSkill.CLUE_SCROLL_ALL; + return CLUE_SCROLL_ALL; case 3: - return HiscoreSkill.LAST_MAN_STANDING; + return LEAGUE_POINTS; case 4: - return HiscoreSkill.BOUNTY_HUNTER_ROGUE; + return LAST_MAN_STANDING; case 5: - return HiscoreSkill.BOUNTY_HUNTER_HUNTER; + return BOUNTY_HUNTER_ROGUE; + case 6: + return BOUNTY_HUNTER_HUNTER; } return null; @@ -562,6 +538,12 @@ public class HiscorePanel extends PluginPanel content += "

Rank: " + rank + "

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

Rank: " + rank + "

"; + break; + } case OVERALL: { Skill requestedSkill = result.getSkill(skill); @@ -651,18 +633,14 @@ public class HiscorePanel extends PluginPanel { EnumSet wTypes = client.getWorldType(); - if (wTypes.contains(WorldType.DEADMAN_TOURNAMENT)) - { - return HiscoreEndpoint.DEADMAN_TOURNAMENT; - } - else if (wTypes.contains(WorldType.SEASONAL_DEADMAN)) - { - return HiscoreEndpoint.SEASONAL_DEADMAN; - } - else if (wTypes.contains(WorldType.DEADMAN)) + if (wTypes.contains(WorldType.DEADMAN)) { return HiscoreEndpoint.DEADMAN; } + else if (wTypes.contains(WorldType.LEAGUE)) + { + return HiscoreEndpoint.LEAGUE; + } } return HiscoreEndpoint.NORMAL; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePlugin.java index c46944a721..85beadca87 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePlugin.java @@ -44,13 +44,13 @@ import net.runelite.api.Client; import net.runelite.api.MenuEntry; import net.runelite.api.MenuOpcode; import net.runelite.api.events.ChatMessage; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.MenuEntryAdded; import net.runelite.api.events.PlayerMenuOptionClicked; import net.runelite.api.util.Text; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.menus.MenuManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -97,9 +97,6 @@ public class HiscorePlugin extends Plugin @Inject private HiscoreConfig config; - @Inject - private EventBus eventBus; - private NavigationButton navButton; private HiscorePanel hiscorePanel; @@ -113,9 +110,8 @@ public class HiscorePlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { - addSubscriptions(); updateConfig(); hiscorePanel = injector.getInstance(HiscorePanel.class); @@ -142,10 +138,8 @@ public class HiscorePlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - hiscorePanel.removeInputKeyListener(autocompleter); clientToolbar.removeNavigation(navButton); @@ -155,14 +149,7 @@ public class HiscorePlugin extends Plugin } } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(MenuEntryAdded.class, this, this::onMenuEntryAdded); - eventBus.subscribe(PlayerMenuOptionClicked.class, this, this::onPlayerMenuOptionClicked); - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - } - + @Subscribe private void onConfigChanged(ConfigChanged event) { @@ -171,30 +158,31 @@ public class HiscorePlugin extends Plugin return; } updateConfig(); - if (client != null) - { - menuManager.get().removePlayerMenuItem(LOOKUP); + if (client != null) + { + menuManager.get().removePlayerMenuItem(LOOKUP); - if (this.playerOption) - { - menuManager.get().addPlayerMenuItem(LOOKUP); - } - } - - if (event.getKey().equals("autocomplete")) + if (this.playerOption) { - if (this.autocomplete) - { - hiscorePanel.addInputKeyListener(autocompleter); - } - else - { - hiscorePanel.removeInputKeyListener(autocompleter); - } + menuManager.get().addPlayerMenuItem(LOOKUP); } } + if (event.getKey().equals("autocomplete")) + { + if (this.autocomplete) + { + hiscorePanel.addInputKeyListener(autocompleter); + } + else + { + hiscorePanel.removeInputKeyListener(autocompleter); + } + } + } + + @Subscribe private void onMenuEntryAdded(MenuEntryAdded event) { if (!this.menuOption) @@ -229,6 +217,7 @@ public class HiscorePlugin extends Plugin } } + @Subscribe private void onPlayerMenuOptionClicked(PlayerMenuOptionClicked event) { if (event.getMenuOption().equals(LOOKUP)) @@ -237,6 +226,7 @@ public class HiscorePlugin extends Plugin } } + @Subscribe private void onChatMessage(ChatMessage event) { if (!this.bountyLookup || !event.getType().equals(ChatMessageType.GAMEMESSAGE)) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hunter/HunterPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/hunter/HunterPlugin.java index c82cf60f4d..fbf164e897 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hunter/HunterPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hunter/HunterPlugin.java @@ -43,12 +43,12 @@ import net.runelite.api.Tile; import net.runelite.api.coords.Direction; import net.runelite.api.coords.LocalPoint; import net.runelite.api.coords.WorldPoint; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.GameObjectSpawned; import net.runelite.api.events.GameTick; import net.runelite.client.Notifier; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.overlay.OverlayManager; @@ -77,9 +77,6 @@ public class HunterPlugin extends Plugin @Inject private HunterConfig config; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) private final Map traps = new HashMap<>(); @@ -108,29 +105,20 @@ public class HunterPlugin extends Plugin protected void startUp() { updateConfig(); - addSubscriptions(); overlayManager.add(overlay); overlay.updateConfig(); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(overlay); lastActionTime = Instant.ofEpochMilli(0); traps.clear(); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(GameObjectSpawned.class, this, this::onGameObjectSpawned); - } - + @Subscribe private void onGameObjectSpawned(GameObjectSpawned event) { final GameObject gameObject = event.getGameObject(); @@ -262,30 +250,30 @@ public class HunterPlugin extends Plugin // Imp entering box case ObjectID.MAGIC_BOX_19225: - // Black chin shaking box + // Black chin shaking box case ObjectID.BOX_TRAP: case ObjectID.BOX_TRAP_2026: case ObjectID.BOX_TRAP_2028: case ObjectID.BOX_TRAP_2029: - // Red chin shaking box + // Red chin shaking box case ObjectID.BOX_TRAP_9381: case ObjectID.BOX_TRAP_9390: case ObjectID.BOX_TRAP_9391: case ObjectID.BOX_TRAP_9392: case ObjectID.BOX_TRAP_9393: - // Grey chin shaking box + // Grey chin shaking box case ObjectID.BOX_TRAP_9386: case ObjectID.BOX_TRAP_9387: case ObjectID.BOX_TRAP_9388: - // Ferret shaking box + // Ferret shaking box case ObjectID.BOX_TRAP_9394: case ObjectID.BOX_TRAP_9396: case ObjectID.BOX_TRAP_9397: - // Bird traps + // Bird traps case ObjectID.BIRD_SNARE_9346: case ObjectID.BIRD_SNARE_9347: case ObjectID.BIRD_SNARE_9349: @@ -293,7 +281,7 @@ public class HunterPlugin extends Plugin case ObjectID.BIRD_SNARE_9376: case ObjectID.BIRD_SNARE_9378: - // Deadfall trap + // Deadfall trap case ObjectID.DEADFALL_19218: case ObjectID.DEADFALL_19851: case ObjectID.DEADFALL_20128: @@ -301,7 +289,7 @@ public class HunterPlugin extends Plugin case ObjectID.DEADFALL_20130: case ObjectID.DEADFALL_20131: - // Net trap + // Net trap case ObjectID.NET_TRAP_9003: case ObjectID.NET_TRAP_9005: case ObjectID.NET_TRAP_8972: @@ -311,7 +299,7 @@ public class HunterPlugin extends Plugin case ObjectID.NET_TRAP_8993: case ObjectID.NET_TRAP_8997: - // Maniacal monkey boulder trap + // Maniacal monkey boulder trap case ObjectID.MONKEY_TRAP_28828: case ObjectID.MONKEY_TRAP_28829: if (myTrap != null) @@ -327,6 +315,7 @@ public class HunterPlugin extends Plugin * checks if the trap is still there. If the trap is gone, it removes * the trap from the local players trap collection. */ + @Subscribe private void onGameTick(GameTick event) { // Check if all traps are still there, and remove the ones that are not. @@ -404,6 +393,7 @@ public class HunterPlugin extends Plugin lastTickLocalPlayerLocation = client.getLocalPlayer().getWorldLocation(); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("hunterplugin")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hydra/BabyHydraPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/hydra/BabyHydraPlugin.java index 75959f65ed..dc063bdcc3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hydra/BabyHydraPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hydra/BabyHydraPlugin.java @@ -38,7 +38,7 @@ import net.runelite.api.events.AnimationChanged; import net.runelite.api.events.NpcDespawned; import net.runelite.api.events.NpcSpawned; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -73,9 +73,6 @@ public class BabyHydraPlugin extends Plugin @Inject private Client client; - @Inject - private EventBus eventBus; - @Provides BabyHydraConfig provideConfig(ConfigManager configManager) { @@ -97,10 +94,9 @@ public class BabyHydraPlugin extends Plugin private boolean PrayerHelper; @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); if (this.TextIndicator) { @@ -114,10 +110,8 @@ public class BabyHydraPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(hydraOverlay); overlayManager.remove(hydraPrayOverlay); overlayManager.remove(hydraIndicatorOverlay); @@ -125,14 +119,7 @@ public class BabyHydraPlugin extends Plugin hydraattacks.clear(); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(NpcSpawned.class, this, this::onNpcSpawned); - eventBus.subscribe(NpcDespawned.class, this, this::onNpcDespawned); - eventBus.subscribe(AnimationChanged.class, this, this::onAnimationChanged); - } - + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("hydra")) @@ -168,6 +155,7 @@ public class BabyHydraPlugin extends Plugin } } + @Subscribe private void onNpcSpawned(NpcSpawned event) { NPC hydra = event.getNpc(); @@ -177,6 +165,7 @@ public class BabyHydraPlugin extends Plugin } } + @Subscribe private void onNpcDespawned(NpcDespawned event) { NPC hydra = event.getNpc(); @@ -187,6 +176,7 @@ public class BabyHydraPlugin extends Plugin } } + @Subscribe private void onAnimationChanged(AnimationChanged event) { Actor monster = event.getActor(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPlugin.java index 1d6203b8fa..8b33be30ef 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPlugin.java @@ -71,7 +71,7 @@ import net.runelite.api.events.SpotAnimationChanged; import net.runelite.api.events.WallObjectSpawned; import net.runelite.client.Notifier; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.Sound; import net.runelite.client.game.SoundManager; @@ -240,9 +240,6 @@ public class IdleNotifierPlugin extends Plugin @Inject private IdleNotifierConfig config; - @Inject - private EventBus eventBus; - private Instant lastAnimating; private int lastAnimation = AnimationID.IDLE; private Instant lastInteracting; @@ -305,6 +302,7 @@ public class IdleNotifierPlugin extends Plugin return configManager.getConfig(IdleNotifierConfig.class); } + @Subscribe void onAnimationChanged(AnimationChanged event) { if (client.getGameState() != GameState.LOGGED_IN) @@ -343,6 +341,7 @@ public class IdleNotifierPlugin extends Plugin } } + @Subscribe private void onPlayerSpawned(PlayerSpawned event) { final Player p = event.getPlayer(); @@ -357,6 +356,7 @@ public class IdleNotifierPlugin extends Plugin } } + @Subscribe private void onWallObjectSpawned(WallObjectSpawned event) { WallObject wall = event.getWallObject(); @@ -370,6 +370,7 @@ public class IdleNotifierPlugin extends Plugin } } + @Subscribe private void onItemContainerChanged(ItemContainerChanged event) { ItemContainer itemContainer = event.getItemContainer(); @@ -447,6 +448,7 @@ public class IdleNotifierPlugin extends Plugin itemQuantitiesPrevious = itemQuantities; } + @Subscribe void onInteractingChanged(InteractingChanged event) { final Actor source = event.getSource(); @@ -497,6 +499,7 @@ public class IdleNotifierPlugin extends Plugin } } + @Subscribe void onGameStateChanged(GameStateChanged gameStateChanged) { lastInteracting = null; @@ -530,6 +533,7 @@ public class IdleNotifierPlugin extends Plugin } } + @Subscribe void onHitsplatApplied(HitsplatApplied event) { if (event.getActor() != client.getLocalPlayer()) @@ -546,6 +550,7 @@ public class IdleNotifierPlugin extends Plugin } } + @Subscribe private void onSpotAnimationChanged(SpotAnimationChanged event) { Actor actor = event.getActor(); @@ -561,6 +566,7 @@ public class IdleNotifierPlugin extends Plugin } } + @Subscribe void onGameTick(GameTick event) { skullNotifier(); @@ -950,7 +956,7 @@ public class IdleNotifierPlugin extends Plugin final Player local = client.getLocalPlayer(); SkullIcon currentTickSkull = local.getSkullIcon(); EnumSet worldTypes = client.getWorldType(); - if (!(worldTypes.contains(WorldType.DEADMAN) || worldTypes.contains(WorldType.SEASONAL_DEADMAN))) + if (!(worldTypes.contains(WorldType.DEADMAN))) { if (!isFirstTick) { @@ -977,38 +983,18 @@ public class IdleNotifierPlugin extends Plugin return ArrayUtils.contains(client.getMapRegions(), RESOURCE_AREA_REGION); } - private void notifyWith(Player local, String message) + private void notifyWith(Player local, String message) { notifier.notify("[" + local.getName() + "] " + message); } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); - } - - @Override - protected void shutDown() throws Exception - { - eventBus.unregister(this); - } - - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(AnimationChanged.class, this, this::onAnimationChanged); - eventBus.subscribe(PlayerSpawned.class, this, this::onPlayerSpawned); - eventBus.subscribe(WallObjectSpawned.class, this, this::onWallObjectSpawned); - eventBus.subscribe(ItemContainerChanged.class, this, this::onItemContainerChanged); - eventBus.subscribe(InteractingChanged.class, this, this::onInteractingChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(HitsplatApplied.class, this, this::onHitsplatApplied); - eventBus.subscribe(SpotAnimationChanged.class, this, this::onSpotAnimationChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("idlenotifier")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/OutOfItemsMapping.java b/runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/OutOfItemsMapping.java index 10738f1273..b2adb691cd 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/OutOfItemsMapping.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/OutOfItemsMapping.java @@ -27,7 +27,10 @@ package net.runelite.client.plugins.idlenotifier; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; import java.util.Collection; -import static net.runelite.api.ItemID.*; +import static net.runelite.api.ItemID.BLUEGILL; +import static net.runelite.api.ItemID.COMMON_TENCH; +import static net.runelite.api.ItemID.GREATER_SIREN; +import static net.runelite.api.ItemID.MOTTLED_EEL; public enum OutOfItemsMapping { @@ -58,7 +61,7 @@ public enum OutOfItemsMapping * Some actions consume multiple different items. To properly handle these * cases for the out of items notification the different items must be * recognised as belonging to a single group. - * + *

* Map an item that is part of a group of items that are consumed by a single * action to the first item in that group. */ diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/implings/Impling.java b/runelite-client/src/main/java/net/runelite/client/plugins/implings/Impling.java index 69aa92f625..04d1c6e2eb 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/implings/Impling.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/implings/Impling.java @@ -26,12 +26,13 @@ package net.runelite.client.plugins.implings; import com.google.common.collect.ImmutableMap; import java.util.Map; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; import net.runelite.api.NpcID; @AllArgsConstructor -@Getter +@Getter(AccessLevel.PACKAGE) enum Impling { BABY(ImplingType.BABY, NpcID.BABY_IMPLING), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/implings/ImplingCounterOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/implings/ImplingCounterOverlay.java index bcd2fb41d5..d625eff9b2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/implings/ImplingCounterOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/implings/ImplingCounterOverlay.java @@ -7,9 +7,9 @@ import javax.inject.Inject; import javax.inject.Singleton; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayPosition; +import net.runelite.client.ui.overlay.components.PanelComponent; import net.runelite.client.ui.overlay.components.table.TableAlignment; import net.runelite.client.ui.overlay.components.table.TableComponent; -import net.runelite.client.ui.overlay.components.PanelComponent; @Singleton public class ImplingCounterOverlay extends Overlay diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/implings/ImplingsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/implings/ImplingsConfig.java index 45c5e75184..1dd486c3f9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/implings/ImplingsConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/implings/ImplingsConfig.java @@ -239,7 +239,7 @@ public interface ImplingsConfig extends Config { return new Color(71, 70, 75); } - + @ConfigItem( position = 19, keyName = "showCrystal", diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/implings/ImplingsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/implings/ImplingsPlugin.java index 6aaf4f1b81..ddc289c807 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/implings/ImplingsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/implings/ImplingsPlugin.java @@ -43,7 +43,7 @@ import net.runelite.api.events.NpcDespawned; import net.runelite.api.events.NpcSpawned; import net.runelite.client.Notifier; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -85,9 +85,6 @@ public class ImplingsPlugin extends Plugin @Inject private ImplingsConfig config; - @Inject - private EventBus eventBus; - @Inject private Notifier notifier; @@ -134,7 +131,6 @@ public class ImplingsPlugin extends Plugin protected void startUp() { updateConfig(); - addSubscriptions(); dynamicSpawns.put(DYNAMIC_SPAWN_NATURE_DRAGON, "T3 Nature-Lucky Dynamic"); dynamicSpawns.put(DYNAMIC_SPAWN_ECLECTIC, "T2 Eclectic Dynamic"); @@ -148,24 +144,13 @@ public class ImplingsPlugin extends Plugin @Override protected void shutDown() { - eventBus.unregister(this); - implings.clear(); overlayManager.remove(overlay); overlayManager.remove(minimapOverlay); overlayManager.remove(implingCounterOverlay); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(NpcSpawned.class, this, this::onNpcSpawned); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(NpcDespawned.class, this, this::onNpcDespawned); - eventBus.subscribe(NpcDefinitionChanged.class, this, this::onNpcDefinitionChanged); - } - + @Subscribe private void onGameTick(GameTick event) { implingCounterMap.clear(); @@ -190,6 +175,7 @@ public class ImplingsPlugin extends Plugin } } + @Subscribe private void onNpcSpawned(NpcSpawned npcSpawned) { NPC npc = npcSpawned.getNpc(); @@ -206,6 +192,7 @@ public class ImplingsPlugin extends Plugin } } + @Subscribe private void onNpcDefinitionChanged(NpcDefinitionChanged npcCompositionChanged) { NPC npc = npcCompositionChanged.getNpc(); @@ -222,6 +209,7 @@ public class ImplingsPlugin extends Plugin } } + @Subscribe private void onGameStateChanged(GameStateChanged event) { if (event.getGameState() == GameState.LOGIN_SCREEN || event.getGameState() == GameState.HOPPING) @@ -231,6 +219,7 @@ public class ImplingsPlugin extends Plugin } } + @Subscribe private void onNpcDespawned(NpcDespawned npcDespawned) { if (implings.isEmpty()) @@ -334,6 +323,7 @@ public class ImplingsPlugin extends Plugin } } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("implings")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/inferno/InfernoConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/inferno/InfernoConfig.java index 6658a37345..d3f9915aad 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/inferno/InfernoConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/inferno/InfernoConfig.java @@ -96,7 +96,7 @@ public interface InfernoConfig extends Config { return false; } - + @ConfigSection( name = "Bats", description = "Configuration options for Bats", @@ -107,7 +107,7 @@ public interface InfernoConfig extends Config { return false; } - + @ConfigSection( name = "Blobs", description = "Configuration options for Blobs", @@ -129,7 +129,7 @@ public interface InfernoConfig extends Config { return false; } - + @ConfigSection( name = "Rangers", description = "Configuration options for Rangers", @@ -140,7 +140,7 @@ public interface InfernoConfig extends Config { return false; } - + @ConfigSection( name = "Magers", description = "Configuration options for Magers", @@ -196,7 +196,7 @@ public interface InfernoConfig extends Config return false; } - + @ConfigItem( position = 0, keyName = "prayerDisplayMode", diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/inferno/InfernoNPC.java b/runelite-client/src/main/java/net/runelite/client/plugins/inferno/InfernoNPC.java index 6e6e122785..175c4bedb9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/inferno/InfernoNPC.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/inferno/InfernoNPC.java @@ -40,7 +40,7 @@ import net.runelite.api.coords.WorldArea; import net.runelite.api.coords.WorldPoint; import org.apache.commons.lang3.ArrayUtils; -public class InfernoNPC +class InfernoNPC { @Getter(AccessLevel.PACKAGE) private NPC npc; @@ -63,7 +63,7 @@ public class InfernoNPC this.ticksTillNextAttack = 0; this.lastAnimation = -1; this.lastCanAttack = false; - this.safeSpotCache = new HashMap(); + this.safeSpotCache = new HashMap<>(); } void updateNextAttack(Attack nextAttack, int ticksTillNextAttack) @@ -235,7 +235,7 @@ public class InfernoNPC case BAT: // Range + LOS check for bat because it suffers from the defense animation bug, also dont activate on "stand" animation if (this.canAttack(client, client.getLocalPlayer().getWorldLocation()) - && this.getNpc().getAnimation() != AnimationID.JAL_MEJRAH_STAND && this.getNpc().getAnimation() != -1) + && this.getNpc().getAnimation() != AnimationID.JAL_MEJRAH_STAND && this.getNpc().getAnimation() != -1) { this.updateNextAttack(this.getType().getDefaultAttack(), this.getType().getTicksAfterAnimation()); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/inferno/InfernoOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/inferno/InfernoOverlay.java index c710e00eb2..41d2a4a86b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/inferno/InfernoOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/inferno/InfernoOverlay.java @@ -165,9 +165,9 @@ public class InfernoOverlay extends Overlay continue; } - Color colorEdge1 = null; + Color colorEdge1; Color colorEdge2 = null; - Color colorFill = null; + Color colorFill; switch (safeSpotId) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/inferno/InfernoPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/inferno/InfernoPlugin.java index 4ea9934558..166f13336b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/inferno/InfernoPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/inferno/InfernoPlugin.java @@ -48,7 +48,7 @@ import net.runelite.api.events.GameTick; import net.runelite.api.events.NpcDespawned; import net.runelite.api.events.NpcSpawned; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -94,9 +94,6 @@ public class InfernoPlugin extends Plugin @Inject private InfernoConfig config; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) private InfernoConfig.FontStyle fontStyle = InfernoConfig.FontStyle.BOLD; @Getter(AccessLevel.PACKAGE) @@ -240,10 +237,9 @@ public class InfernoPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); waveOverlay.setDisplayMode(this.waveDisplay); waveOverlay.setWaveHeaderColor(this.getWaveOverlayHeaderColor); @@ -265,10 +261,8 @@ public class InfernoPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(infernoOverlay); overlayManager.remove(waveOverlay); overlayManager.remove(jadOverlay); @@ -279,17 +273,7 @@ public class InfernoPlugin extends Plugin showNpcDeaths(); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(NpcSpawned.class, this, this::onNpcSpawned); - eventBus.subscribe(NpcDespawned.class, this, this::onNpcDespawned); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(AnimationChanged.class, this, this::onAnimationChanged); - } - + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!"inferno".equals(event.getGroup())) @@ -319,6 +303,7 @@ public class InfernoPlugin extends Plugin } } + @Subscribe private void onGameTick(GameTick GameTickEvent) { if (!isInInferno()) @@ -347,6 +332,7 @@ public class InfernoPlugin extends Plugin calculateCentralNibbler(); } + @Subscribe private void onNpcSpawned(NpcSpawned event) { if (!isInInferno()) @@ -392,6 +378,7 @@ public class InfernoPlugin extends Plugin } } + @Subscribe private void onNpcDespawned(NpcDespawned event) { if (!isInInferno()) @@ -407,6 +394,7 @@ public class InfernoPlugin extends Plugin infernoNpcs.removeIf(infernoNPC -> infernoNPC.getNpc() == event.getNpc()); } + @Subscribe private void onAnimationChanged(AnimationChanged event) { if (!isInInferno()) @@ -426,6 +414,7 @@ public class InfernoPlugin extends Plugin } } + @Subscribe private void onGameStateChanged(GameStateChanged event) { if (event.getGameState() != GameState.LOGGED_IN) @@ -461,6 +450,7 @@ public class InfernoPlugin extends Plugin } } + @Subscribe private void onChatMessage(ChatMessage event) { if (!isInInferno() || event.getType() != ChatMessageType.GAMEMESSAGE) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/info/InfoPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/info/InfoPlugin.java index 26e4bcfbbc..9a51598f43 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/info/InfoPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/info/InfoPlugin.java @@ -27,7 +27,6 @@ package net.runelite.client.plugins.info; import java.awt.image.BufferedImage; import javax.inject.Inject; import javax.inject.Singleton; -import net.runelite.client.eventbus.EventBus; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.ClientToolbar; @@ -45,14 +44,11 @@ public class InfoPlugin extends Plugin @Inject private ClientToolbar clientToolbar; - @Inject - private EventBus eventbus; - private NavigationButton navButton; @Override - protected void startUp() throws Exception + protected void startUp() { InfoPanel panel = injector.getInstance(InfoPanel.class); panel.init(); @@ -70,10 +66,8 @@ public class InfoPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventbus.unregister(this); - clientToolbar.removeNavigation(navButton); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/info/JRichTextPane.java b/runelite-client/src/main/java/net/runelite/client/plugins/info/JRichTextPane.java index e86007d0b0..1edf78ca6d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/info/JRichTextPane.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/info/JRichTextPane.java @@ -53,14 +53,14 @@ public class JRichTextPane extends JEditorPane ek.getStyleSheet().addRule("a {color: #DDDDDD }"); } - public JRichTextPane(String type, String text) + private JRichTextPane(String type, String text) { this(); setContentType(type); setText(text); } - void enableAutoLinkHandler(boolean enable) + private void enableAutoLinkHandler(boolean enable) { if (enable == (linkHandler == null)) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/instancemap/InstanceMapOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/instancemap/InstanceMapOverlay.java index 0db24547e1..b76369c0b1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/instancemap/InstanceMapOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/instancemap/InstanceMapOverlay.java @@ -37,9 +37,9 @@ import lombok.Getter; import lombok.Setter; import net.runelite.api.Client; import net.runelite.api.Player; +import net.runelite.api.Sprite; import static net.runelite.api.SpriteID.WINDOW_CLOSE_BUTTON_RED_X; import static net.runelite.api.SpriteID.WINDOW_CLOSE_BUTTON_RED_X_HOVERED; -import net.runelite.api.Sprite; import net.runelite.api.Tile; import net.runelite.api.coords.LocalPoint; import net.runelite.api.events.GameStateChanged; @@ -90,7 +90,7 @@ class InstanceMapOverlay extends Overlay @Setter(AccessLevel.PACKAGE) private boolean isCloseButtonHovered; - @Getter + @Getter(AccessLevel.PACKAGE) private Rectangle closeButtonBounds; private BufferedImage closeButtonImage; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/instancemap/InstanceMapPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/instancemap/InstanceMapPlugin.java index 8110db2eb3..f27bee9ae0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/instancemap/InstanceMapPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/instancemap/InstanceMapPlugin.java @@ -31,7 +31,7 @@ import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.WidgetMenuOptionClicked; import net.runelite.api.widgets.WidgetInfo; import static net.runelite.api.widgets.WidgetInfo.WORLD_MAP_OPTION; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.input.KeyManager; import net.runelite.client.input.MouseManager; import net.runelite.client.menus.MenuManager; @@ -67,9 +67,6 @@ public class InstanceMapPlugin extends Plugin @Inject private MouseManager mouseManager; - @Inject - private EventBus eventBus; - @Override public void configure(Binder binder) { @@ -87,9 +84,8 @@ public class InstanceMapPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { - addSubscriptions(); overlayManager.add(overlay); addCustomOptions(); @@ -99,10 +95,8 @@ public class InstanceMapPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlay.setShowMap(false); overlayManager.remove(overlay); removeCustomOptions(); @@ -111,12 +105,7 @@ public class InstanceMapPlugin extends Plugin mouseManager.unregisterMouseWheelListener(inputListener); } - private void addSubscriptions() - { - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(WidgetMenuOptionClicked.class, this, this::onWidgetMenuOptionClicked); - } - + @Subscribe private void onGameStateChanged(GameStateChanged event) { overlay.onGameStateChange(event); @@ -127,6 +116,7 @@ public class InstanceMapPlugin extends Plugin return event.getMenuOption().equals(widgetMenuOption.getMenuOption()) && event.getMenuTarget().equals(widgetMenuOption.getMenuTarget()); } + @Subscribe private void onWidgetMenuOptionClicked(WidgetMenuOptionClicked event) { if (event.getWidget() != WORLD_MAP_OPTION) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/InterfaceStylesPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/InterfaceStylesPlugin.java index 79ca146fa9..668afae749 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/InterfaceStylesPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/InterfaceStylesPlugin.java @@ -44,7 +44,7 @@ import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.SpriteManager; import net.runelite.client.plugins.Plugin; @@ -73,9 +73,6 @@ public class InterfaceStylesPlugin extends Plugin @Inject private SpriteManager spriteManager; - @Inject - private EventBus eventBus; - private Sprite[] defaultCrossSprites; private Skin skin; @@ -90,18 +87,15 @@ public class InterfaceStylesPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); clientThread.invoke(this::updateAllOverrides); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - clientThread.invoke(() -> { restoreWidgetDimensions(); @@ -111,15 +105,7 @@ public class InterfaceStylesPlugin extends Plugin }); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(WidgetPositioned.class, this, this::onWidgetPositioned); - eventBus.subscribe(PostHealthBar.class, this, this::onPostHealthBar); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(BeforeMenuRender.class, this, this::onBeforeMenuRender); - } - + @Subscribe private void onConfigChanged(ConfigChanged config) { if (config.getGroup().equals("interfaceStyles")) @@ -129,11 +115,13 @@ public class InterfaceStylesPlugin extends Plugin } } + @Subscribe private void onWidgetPositioned(WidgetPositioned widgetPositioned) { adjustWidgetDimensions(); } + @Subscribe private void onPostHealthBar(PostHealthBar postHealthBar) { if (!this.hdHealthBars) @@ -152,6 +140,7 @@ public class InterfaceStylesPlugin extends Plugin } } + @Subscribe private void onGameStateChanged(GameStateChanged gameStateChanged) { if (gameStateChanged.getGameState() != GameState.LOGIN_SCREEN) @@ -178,6 +167,7 @@ public class InterfaceStylesPlugin extends Plugin overrideCrossSprites(); } + @Subscribe private void onBeforeMenuRender(BeforeMenuRender event) { if (this.hdMenu) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/inventorygrid/InventoryGridOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/inventorygrid/InventoryGridOverlay.java index 160733fdde..d63be48c39 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/inventorygrid/InventoryGridOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/inventorygrid/InventoryGridOverlay.java @@ -34,7 +34,6 @@ import java.awt.Point; import java.awt.Rectangle; import java.awt.image.BufferedImage; import net.runelite.api.Client; -import net.runelite.api.Constants; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; import net.runelite.api.widgets.WidgetItem; @@ -47,11 +46,15 @@ import net.runelite.client.ui.overlay.OverlayPosition; class InventoryGridOverlay extends Overlay { private static final int INVENTORY_SIZE = 28; + private static final int DISTANCE_TO_ACTIVATE_HOVER = 5; private final InventoryGridPlugin plugin; private final Client client; private final ItemManager itemManager; + private Point initialMousePoint; + private boolean hoverActive = false; + @Inject private InventoryGridOverlay(final InventoryGridPlugin plugin, final Client client, final ItemManager itemManager) { @@ -69,9 +72,11 @@ class InventoryGridOverlay extends Overlay final Widget if1DraggingWidget = client.getIf1DraggedWidget(); final Widget inventoryWidget = client.getWidget(WidgetInfo.INVENTORY); - if (if1DraggingWidget == null || if1DraggingWidget != inventoryWidget - || client.getItemPressedDuration() < plugin.getDragDelay() / Constants.CLIENT_TICK_LENGTH) + + if (if1DraggingWidget == null || if1DraggingWidget != inventoryWidget) { + initialMousePoint = null; + hoverActive = false; return null; } @@ -79,26 +84,31 @@ class InventoryGridOverlay extends Overlay final Point mousePoint = new Point(mouse.getX(), mouse.getY()); final int if1DraggedItemIndex = client.getIf1DraggedItemIndex(); final WidgetItem draggedItem = inventoryWidget.getWidgetItem(if1DraggedItemIndex); - final int itemId = draggedItem.getId(); final Rectangle initialBounds = draggedItem.getCanvasBounds(); - if (itemId == -1) + if (initialMousePoint == null) + { + initialMousePoint = mousePoint; + } + + if (draggedItem.getId() == -1 || !hoverActive && initialMousePoint.distance(mousePoint) < DISTANCE_TO_ACTIVATE_HOVER) { return null; } + hoverActive = true; + for (int i = 0; i < INVENTORY_SIZE; ++i) { - WidgetItem widgetItem = inventoryWidget.getWidgetItem(i); - final int targetItemId = widgetItem.getId(); + WidgetItem targetWidgetItem = inventoryWidget.getWidgetItem(i); - final Rectangle bounds = widgetItem.getCanvasBounds(); + final Rectangle bounds = targetWidgetItem.getCanvasBounds(); boolean inBounds = bounds.contains(mousePoint); if (plugin.isShowItem() && inBounds) { - drawItem(graphics, bounds, itemId); - drawItem(graphics, initialBounds, targetItemId); + drawItem(graphics, bounds, draggedItem); + drawItem(graphics, initialBounds, targetWidgetItem); } if (plugin.isShowHighlight() && inBounds) @@ -116,14 +126,14 @@ class InventoryGridOverlay extends Overlay return null; } - private void drawItem(Graphics2D graphics, Rectangle bounds, int itemId) + private void drawItem(Graphics2D graphics, Rectangle bounds, WidgetItem item) { - if (itemId == -1) + if (item.getId() == -1) { return; } - final BufferedImage draggedItemImage = itemManager.getImage(itemId); + final BufferedImage draggedItemImage = itemManager.getImage(item.getId(), item.getQuantity(), false); final int x = (int) bounds.getX(); final int y = (int) bounds.getY(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/inventorygrid/InventoryGridPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/inventorygrid/InventoryGridPlugin.java index 7ad9236043..2abecac755 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/inventorygrid/InventoryGridPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/inventorygrid/InventoryGridPlugin.java @@ -32,7 +32,7 @@ import java.awt.Color; import lombok.AccessLevel; import lombok.Getter; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -56,9 +56,6 @@ public class InventoryGridPlugin extends Plugin @Inject private InventoryGridConfig config; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) private boolean showItem; @Getter(AccessLevel.PACKAGE) @@ -76,16 +73,12 @@ public class InventoryGridPlugin extends Plugin public void startUp() { updateConfig(); - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - overlayManager.add(overlay); } @Override public void shutDown() { - eventBus.unregister(this); - overlayManager.remove(overlay); } @@ -95,6 +88,7 @@ public class InventoryGridPlugin extends Plugin return configManager.getConfig(InventoryGridConfig.class); } + @Subscribe private void onConfigChanged(ConfigChanged config) { if (config.getGroup().equals("inventorygrid")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/inventorysetups/InventorySetup.java b/runelite-client/src/main/java/net/runelite/client/plugins/inventorysetups/InventorySetup.java index 6a91aecbf8..a71c109185 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/inventorysetups/InventorySetup.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/inventorysetups/InventorySetup.java @@ -26,14 +26,15 @@ package net.runelite.client.plugins.inventorysetups; import java.util.List; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; @AllArgsConstructor public class InventorySetup { - @Getter + @Getter(AccessLevel.PUBLIC) private List inventory; - @Getter + @Getter(AccessLevel.PUBLIC) private List equipment; } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/inventorysetups/InventorySetupItem.java b/runelite-client/src/main/java/net/runelite/client/plugins/inventorysetups/InventorySetupItem.java index a3136be8b1..cda1fc2c89 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/inventorysetups/InventorySetupItem.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/inventorysetups/InventorySetupItem.java @@ -25,16 +25,17 @@ */ package net.runelite.client.plugins.inventorysetups; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; @AllArgsConstructor public class InventorySetupItem { - @Getter + @Getter(AccessLevel.PUBLIC) private final int id; - @Getter + @Getter(AccessLevel.PUBLIC) private final String name; - @Getter + @Getter(AccessLevel.PUBLIC) private final int quantity; } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/inventorysetups/InventorySetupPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/inventorysetups/InventorySetupPlugin.java index e9bd791ff0..593797ae0e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/inventorysetups/InventorySetupPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/inventorysetups/InventorySetupPlugin.java @@ -53,7 +53,7 @@ import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.ItemContainerChanged; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.game.ItemVariationMapping; @@ -104,9 +104,6 @@ public class InventorySetupPlugin extends Plugin @Inject private ClientThread clientThread; - @Inject - private EventBus eventBus; - @Inject private ConfigManager configManager; @@ -134,7 +131,6 @@ public class InventorySetupPlugin extends Plugin public void startUp() { updateConfigOptions(); - addSubscriptions(); overlayManager.add(overlay); @@ -261,6 +257,7 @@ public class InventorySetupPlugin extends Plugin return configManager.getConfig(InventorySetupConfig.class); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals(CONFIG_GROUP)) @@ -303,7 +300,6 @@ public class InventorySetupPlugin extends Plugin final Gson gson = new Gson(); Type type = new TypeToken>() { - }.getType(); inventorySetups.clear(); inventorySetups.putAll(gson.fromJson(json, type)); @@ -316,6 +312,7 @@ public class InventorySetupPlugin extends Plugin } + @Subscribe private void onItemContainerChanged(ItemContainerChanged event) { @@ -349,6 +346,7 @@ public class InventorySetupPlugin extends Plugin } + @Subscribe private void onGameStateChanged(GameStateChanged event) { switch (event.getGameState()) @@ -371,7 +369,7 @@ public class InventorySetupPlugin extends Plugin { return; } - + final String setupName = panel.getSelectedInventorySetup(); if (!setupName.isEmpty()) { @@ -416,11 +414,6 @@ public class InventorySetupPlugin extends Plugin return newContainer; } - public final InventorySetupConfig getConfig() - { - return config; - } - public boolean getHighlightDifference() { return highlightDifference; @@ -429,18 +422,10 @@ public class InventorySetupPlugin extends Plugin @Override public void shutDown() { - eventBus.unregister(this); overlayManager.remove(overlay); clientToolbar.removeNavigation(navButton); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(ItemContainerChanged.class, this, this::onItemContainerChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - } - final int[] getCurrentInventorySetupIds() { InventorySetup setup = inventorySetups.get(panel.getSelectedInventorySetup()); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/inventorysetups/ui/InventorySetupInventoryPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/inventorysetups/ui/InventorySetupInventoryPanel.java index 0ad4e36247..85121c3920 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/inventorysetups/ui/InventorySetupInventoryPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/inventorysetups/ui/InventorySetupInventoryPanel.java @@ -35,6 +35,7 @@ import net.runelite.client.plugins.inventorysetups.InventorySetup; import net.runelite.client.plugins.inventorysetups.InventorySetupItem; import net.runelite.client.plugins.inventorysetups.InventorySetupPlugin; import net.runelite.client.ui.ColorScheme; + @Singleton public class InventorySetupInventoryPanel extends InventorySetupContainerPanel { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/inventorytags/InventoryTagsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/inventorytags/InventoryTagsPlugin.java index 8db657806d..65ba41e5c3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/inventorytags/InventoryTagsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/inventorytags/InventoryTagsPlugin.java @@ -39,7 +39,7 @@ import net.runelite.api.events.WidgetMenuOptionClicked; import net.runelite.api.util.Text; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.menus.MenuManager; import net.runelite.client.menus.WidgetMenuOption; @@ -106,9 +106,6 @@ public class InventoryTagsPlugin extends Plugin @Inject private OverlayManager overlayManager; - @Inject - private EventBus eventBus; - private boolean editorMode; private InventoryTagsConfig.amount amount; @@ -149,33 +146,23 @@ public class InventoryTagsPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); refreshInventoryMenuOptions(); overlayManager.add(overlay); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - removeInventoryMenuOptions(); overlayManager.remove(overlay); editorMode = false; } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(WidgetMenuOptionClicked.class, this, this::onWidgetMenuOptionClicked); - eventBus.subscribe(MenuOptionClicked.class, this, this::onMenuOptionClicked); - eventBus.subscribe(MenuOpened.class, this, this::onMenuOpened); - } - + @Subscribe private void onWidgetMenuOptionClicked(final WidgetMenuOptionClicked event) { if (event.getWidget() == WidgetInfo.FIXED_VIEWPORT_INVENTORY_TAB @@ -187,6 +174,7 @@ public class InventoryTagsPlugin extends Plugin } } + @Subscribe private void onMenuOptionClicked(final MenuOptionClicked event) { if (event.getMenuOpcode() != MenuOpcode.RUNELITE) @@ -206,6 +194,7 @@ public class InventoryTagsPlugin extends Plugin } } + @Subscribe private void onMenuOpened(final MenuOpened event) { final MenuEntry firstEntry = event.getFirstEntry(); @@ -305,6 +294,7 @@ public class InventoryTagsPlugin extends Plugin } } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("inventorytags")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/inventoryviewer/InventoryViewerOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/inventoryviewer/InventoryViewerOverlay.java index 4494924196..0b13bf9149 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/inventoryviewer/InventoryViewerOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/inventoryviewer/InventoryViewerOverlay.java @@ -38,8 +38,8 @@ import net.runelite.api.Client; import net.runelite.api.Constants; import net.runelite.api.InventoryID; import net.runelite.api.Item; -import net.runelite.api.ItemDefinition; import net.runelite.api.ItemContainer; +import net.runelite.api.ItemDefinition; import net.runelite.api.VarClientInt; import net.runelite.api.vars.InterfaceTab; import net.runelite.client.game.ItemManager; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/inventoryviewer/InventoryViewerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/inventoryviewer/InventoryViewerPlugin.java index a0ec9a957b..9e1b7b6252 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/inventoryviewer/InventoryViewerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/inventoryviewer/InventoryViewerPlugin.java @@ -30,7 +30,7 @@ import javax.inject.Singleton; import lombok.AccessLevel; import lombok.Getter; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -56,9 +56,6 @@ public class InventoryViewerPlugin extends Plugin @Inject private InventoryViewerConfig config; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) private InventoryViewerMode viewerMode; @Getter(AccessLevel.PACKAGE) @@ -76,11 +73,10 @@ public class InventoryViewerPlugin extends Plugin public void startUp() { updateConfig(); - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - overlayManager.add(overlay); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals(CONFIG_GROUP_KEY)) @@ -92,8 +88,6 @@ public class InventoryViewerPlugin extends Plugin @Override public void shutDown() { - eventBus.unregister(this); - overlayManager.remove(overlay); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeOverlay.java index 79f8510ebb..c6cf5a613d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeOverlay.java @@ -34,13 +34,13 @@ import net.runelite.api.ItemID; import net.runelite.api.widgets.WidgetItem; import static net.runelite.client.plugins.itemcharges.ItemChargeType.ABYSSAL_BRACELET; import static net.runelite.client.plugins.itemcharges.ItemChargeType.BELLOWS; +import static net.runelite.client.plugins.itemcharges.ItemChargeType.FRUIT_BASKET; import static net.runelite.client.plugins.itemcharges.ItemChargeType.FUNGICIDE_SPRAY; import static net.runelite.client.plugins.itemcharges.ItemChargeType.IMPBOX; import static net.runelite.client.plugins.itemcharges.ItemChargeType.SACK; import static net.runelite.client.plugins.itemcharges.ItemChargeType.TELEPORT; import static net.runelite.client.plugins.itemcharges.ItemChargeType.WATERCAN; import static net.runelite.client.plugins.itemcharges.ItemChargeType.WATERSKIN; -import static net.runelite.client.plugins.itemcharges.ItemChargeType.FRUIT_BASKET; import net.runelite.client.ui.FontManager; import net.runelite.client.ui.overlay.WidgetItemOverlay; import net.runelite.client.ui.overlay.components.TextComponent; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java index 1d37a29763..0cd4ab76cc 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java @@ -57,7 +57,7 @@ import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.Notifier; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; @@ -168,9 +168,6 @@ public class ItemChargePlugin extends Plugin @Inject private ItemChargeConfig config; - @Inject - private EventBus eventBus; - // Limits destroy callback to once per tick private int lastCheckTick; @@ -247,7 +244,6 @@ public class ItemChargePlugin extends Plugin protected void startUp() { updateConfig(); - addSubscriptions(); overlayManager.add(overlay); overlayManager.add(recoilOverlay); @@ -255,27 +251,15 @@ public class ItemChargePlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(overlay); overlayManager.remove(recoilOverlay); infoBoxManager.removeIf(ItemChargeInfobox.class::isInstance); lastCheckTick = -1; } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - eventBus.subscribe(ItemContainerChanged.class, this, this::onItemContainerChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(SpotAnimationChanged.class, this, this::onSpotAnimationChanged); - eventBus.subscribe(ScriptCallbackEvent.class, this, this::onScriptCallbackEvent); - eventBus.subscribe(VarbitChanged.class, this, this::onVarbitChanged); - } - + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("itemCharge")) @@ -328,6 +312,7 @@ public class ItemChargePlugin extends Plugin } } + @Subscribe void onChatMessage(ChatMessage event) { String message = event.getMessage(); @@ -490,6 +475,7 @@ public class ItemChargePlugin extends Plugin } } + @Subscribe private void onItemContainerChanged(ItemContainerChanged event) { if (event.getItemContainer() != client.getItemContainer(InventoryID.EQUIPMENT) || !this.showInfoboxes) @@ -536,6 +522,7 @@ public class ItemChargePlugin extends Plugin } } + @Subscribe private void onGameTick(GameTick event) { Widget braceletBreakWidget = client.getWidget(WidgetInfo.DIALOG_SPRITE_TEXT); @@ -635,6 +622,7 @@ public class ItemChargePlugin extends Plugin } } + @Subscribe private void onSpotAnimationChanged(SpotAnimationChanged event) { if (event.getActor() == client.getLocalPlayer() && client.getLocalPlayer().getSpotAnimation() == GraphicID.XERIC_TELEPORT) @@ -644,6 +632,7 @@ public class ItemChargePlugin extends Plugin } } + @Subscribe private void onScriptCallbackEvent(ScriptCallbackEvent event) { if (!"destroyOnOpKey".equals(event.getEventName())) @@ -658,6 +647,7 @@ public class ItemChargePlugin extends Plugin } } + @Subscribe private void onVarbitChanged(VarbitChanged event) { int explorerRingCharge = client.getVar(Varbits.EXPLORER_RING_ALCHS); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemRecoilOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemRecoilOverlay.java index 8a80d84de0..eebd7786e0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemRecoilOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemRecoilOverlay.java @@ -64,7 +64,7 @@ class ItemRecoilOverlay extends Overlay { BufferedImage recoilImage = plugin.getRecoilRingImage(); imagePanelComponent.setBackgroundColor(plugin - .isRingOfRecoilEquipped() ? ACTIVATED_BACKGROUND_COLOR : NOT_ACTIVATED_BACKGROUND_COLOR); + .isRingOfRecoilEquipped() ? ACTIVATED_BACKGROUND_COLOR : NOT_ACTIVATED_BACKGROUND_COLOR); imagePanelComponent.getChildren().add(new ImageComponent(recoilImage)); imagePanelComponent.getChildren().add(tableComponent); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationOverlay.java index 8a96c772bf..13f9d607f8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationOverlay.java @@ -31,9 +31,9 @@ import java.awt.Point; import java.awt.Rectangle; import static net.runelite.api.widgets.WidgetID.GUIDE_PRICE_GROUP_ID; import static net.runelite.api.widgets.WidgetID.KEPT_ON_DEATH_GROUP_ID; +import static net.runelite.api.widgets.WidgetID.KINGDOM_GROUP_ID; import static net.runelite.api.widgets.WidgetID.LOOTING_BAG_GROUP_ID; import static net.runelite.api.widgets.WidgetID.SEED_BOX_GROUP_ID; -import static net.runelite.api.widgets.WidgetID.KINGDOM_GROUP_ID; import net.runelite.api.widgets.WidgetItem; import net.runelite.client.game.ItemManager; import net.runelite.client.ui.FontManager; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationPlugin.java index 98e043e30c..a8a246ae4a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationPlugin.java @@ -31,7 +31,7 @@ import javax.inject.Singleton; import lombok.AccessLevel; import lombok.Getter; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -54,9 +54,6 @@ public class ItemIdentificationPlugin extends Plugin @Inject private ItemIdentificationConfig config; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) private ItemIdentificationMode identificationType; @Getter(AccessLevel.PACKAGE) @@ -82,19 +79,16 @@ public class ItemIdentificationPlugin extends Plugin protected void startUp() { updateConfig(); - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - overlayManager.add(overlay); } @Override protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(overlay); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("itemidentification")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemprices/ItemPricesPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemprices/ItemPricesPlugin.java index a2673d8ad6..957805663e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemprices/ItemPricesPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemprices/ItemPricesPlugin.java @@ -30,7 +30,7 @@ import javax.inject.Singleton; import lombok.AccessLevel; import lombok.Getter; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -54,9 +54,6 @@ public class ItemPricesPlugin extends Plugin @Inject private ItemPricesConfig config; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) private boolean showGEPrice; @Getter(AccessLevel.PACKAGE) @@ -77,21 +74,19 @@ public class ItemPricesPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - overlayManager.add(overlay); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); overlayManager.remove(overlay); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("itemprices")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/AlwaysLostItem.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/AlwaysLostItem.java index bbb8e1b66a..48d2df85f4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/AlwaysLostItem.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/AlwaysLostItem.java @@ -33,7 +33,7 @@ import net.runelite.api.ItemID; /** * Certain Items receive a white outline by Jagex as they are always lost on death. This is sometimes incorrectly * added to Items by Jagex as the item is actually kept in non-pvp areas of the game, such as the Rune Pouch. - * + *

* The white outline will be added to these items when they are lost on death. */ @AllArgsConstructor diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/DynamicPriceItem.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/DynamicPriceItem.java index 4726555485..3e5a47564f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/DynamicPriceItem.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/DynamicPriceItem.java @@ -27,6 +27,7 @@ package net.runelite.client.plugins.itemskeptondeath; import com.google.common.collect.ImmutableMap; import java.util.Map; import javax.annotation.Nullable; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; import net.runelite.api.ItemID; @@ -38,7 +39,7 @@ import net.runelite.api.ItemID; * Death Price = Charge price * Current Charges */ @AllArgsConstructor -@Getter +@Getter(AccessLevel.PACKAGE) enum DynamicPriceItem { GAMES_NECKLACE1(ItemID.GAMES_NECKLACE1, 1, 8, ItemID.GAMES_NECKLACE8), @@ -91,12 +92,13 @@ enum DynamicPriceItem /** * Calculates the price off the partially charged jewelry based on the base items price + * * @param basePrice price of the base item, usually the trade-able variant * @return death price of the current DynamicPriceItem */ int calculateDeathPrice(final int basePrice) { - return (basePrice / maxCharges) * currentCharges; + return (basePrice / maxCharges) * currentCharges; } @Nullable diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/FixedPriceItem.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/FixedPriceItem.java index ba5a1e08f5..34e1ee25b5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/FixedPriceItem.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/FixedPriceItem.java @@ -28,6 +28,7 @@ package net.runelite.client.plugins.itemskeptondeath; import com.google.common.collect.ImmutableMap; import java.util.Map; import javax.annotation.Nullable; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.ItemID; @@ -35,7 +36,7 @@ import net.runelite.api.ItemID; * Some items have a fixed price that is added to its default value when calculating death prices. * These are typically imbued items, such as Berserker ring (i), to help it protect over the non-imbued variants. */ -@Getter +@Getter(AccessLevel.PACKAGE) enum FixedPriceItem { IMBUED_BLACK_MASK_I(ItemID.BLACK_MASK_I, 5000), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/ItemsKeptOnDeathPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/ItemsKeptOnDeathPlugin.java index 6cbee4b19e..f4b2142bbd 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/ItemsKeptOnDeathPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/ItemsKeptOnDeathPlugin.java @@ -38,6 +38,7 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; import javax.inject.Inject; import javax.inject.Singleton; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.extern.slf4j.Slf4j; @@ -59,7 +60,7 @@ import net.runelite.api.vars.AccountType; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; import net.runelite.api.widgets.WidgetType; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.game.ItemManager; import net.runelite.client.game.ItemMapping; import net.runelite.client.game.ItemReclaimCost; @@ -81,7 +82,7 @@ public class ItemsKeptOnDeathPlugin extends Plugin private static final Pattern WILDERNESS_LEVEL_PATTERN = Pattern.compile("^Level: (\\d+).*"); @AllArgsConstructor - @Getter + @Getter(AccessLevel.PACKAGE) @VisibleForTesting static class DeathItems { @@ -116,9 +117,6 @@ public class ItemsKeptOnDeathPlugin extends Plugin @Inject private ItemManager itemManager; - @Inject - private EventBus eventBus; - private WidgetButton deepWildyButton; private WidgetButton lowWildyButton; @@ -129,18 +127,7 @@ public class ItemsKeptOnDeathPlugin extends Plugin @VisibleForTesting int wildyLevel; - @Override - protected void startUp() throws Exception - { - eventBus.subscribe(ScriptCallbackEvent.class, this, this::onScriptCallbackEvent); - } - - @Override - protected void shutDown() throws Exception - { - eventBus.unregister(this); - } - + @Subscribe private void onScriptCallbackEvent(ScriptCallbackEvent event) { if (event.getEventName().equals("itemsKeptOnDeath")) @@ -353,12 +340,16 @@ public class ItemsKeptOnDeathPlugin extends Plugin // Items are kept if: // 1) is not tradeable - // 2) is under the deep wilderness line - // 3) is outside of the wilderness, or item has a broken form + // 2) Outside the wilderness: All are kept excluding `Pets` & `LostIfNotProtected`. (`AlwaysLostItem` are handled above) + // 3) In low level wilderness: (<=20) only `LockedItem`s and `BrokenOnDeathItem`s are kept + // 4) In deep level wilderness: (>=21) only `LockedItem`s are kept if (!Pets.isPet(id) && !LostIfNotProtected.isLostIfNotProtected(id) - && !isTradeable(itemManager.getItemDefinition(id)) && wildyLevel <= DEEP_WILDY - && (wildyLevel <= 0 || ItemReclaimCost.of(id) != null)) + && !isTradeable(itemManager.getItemDefinition(id)) + && (wildyLevel <= 0 + || LockedItem.getBaseIdFromLockedId(id) != null + || (wildyLevel <= DEEP_WILDY && ItemReclaimCost.of(id) != null)) + ) { keptItems.add(new ItemStack(id, qty)); } @@ -436,17 +427,33 @@ public class ItemsKeptOnDeathPlugin extends Plugin */ @VisibleForTesting int getDeathPrice(Item item) + { + return getDeathPriceById(item.getId()); + } + + /** + * Get the price of an item by its id + * + * @param itemId + * @return + */ + private int getDeathPriceById(final int itemId) { // 1) Check if the death price is dynamically calculated, if so return that value // 2) If death price is based off another item default to that price, otherwise apply normal ItemMapping GE price // 3) If still no price, default to store price // 4) Apply fixed price offset if applicable - - int itemId = item.getId(); // Unnote/unplaceholder item int canonicalizedItemId = itemManager.canonicalize(itemId); int exchangePrice = 0; + + final Integer lockedBase = LockedItem.getBaseIdFromLockedId(canonicalizedItemId); + if (lockedBase != null) + { + return getDeathPriceById(lockedBase); + } + final DynamicPriceItem dynamicPrice = DynamicPriceItem.find(canonicalizedItemId); if (dynamicPrice != null) { @@ -778,4 +785,4 @@ public class ItemsKeptOnDeathPlugin extends Plugin return itemWidget; } -} \ No newline at end of file +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/LockedItem.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/LockedItem.java new file mode 100644 index 0000000000..6c1689eb53 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/LockedItem.java @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2019, TheStonedTurtle + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.client.plugins.itemskeptondeath; + +import com.google.common.collect.ImmutableMap; +import java.util.Map; +import javax.annotation.Nullable; +import lombok.AllArgsConstructor; +import net.runelite.api.ItemID; + +/** + * A locked item will be kept in its unbroken state upon dying with it past level 20 Wildy but its locked status will be lost. + * Only certain untradeable items can be combined with a Trouver parchment by talking to Perdu and paying a fee. + *

+ * View the Trouver parchment wiki page for more information: https://oldschool.runescape.wiki/w/Trouver_parchment + */ +@AllArgsConstructor +public enum LockedItem +{ + LOCKED_INFERNAL_CAPE(ItemID.INFERNAL_CAPE_L, ItemID.INFERNAL_CAPE), + LOCKED_INFERNAL_MAX_CAPE(ItemID.INFERNAL_MAX_CAPE_L, ItemID.INFERNAL_MAX_CAPE), + LOCKED_FIRE_CAPE(ItemID.FIRE_CAPE_L, ItemID.FIRE_CAPE), + LOCKED_FIRE_MAX_CAPE(ItemID.FIRE_MAX_CAPE_L, ItemID.FIRE_MAX_CAPE), + LOCKED_AVAS_ASSEMBLER(ItemID.AVAS_ASSEMBLER_L, ItemID.AVAS_ASSEMBLER), + LOCKED_ASSEMBLER_MAX_CAPE(ItemID.ASSEMBLER_MAX_CAPE_L, ItemID.ASSEMBLER_MAX_CAPE), + LOCKED_IMBUED_SARADOMIN_CAPE(ItemID.IMBUED_SARADOMIN_CAPE_L, ItemID.IMBUED_SARADOMIN_CAPE), + LOCKED_IMBUED_SARADOMIN_MAX_CAPE(ItemID.IMBUED_SARADOMIN_MAX_CAPE_L, ItemID.IMBUED_SARADOMIN_MAX_CAPE), + LOCKED_IMBUED_GUTHIX_CAPE(ItemID.IMBUED_GUTHIX_CAPE_L, ItemID.IMBUED_GUTHIX_CAPE), + LOCKED_IMBUED_GUTHIX_MAX_CAPE(ItemID.IMBUED_GUTHIX_MAX_CAPE_L, ItemID.IMBUED_GUTHIX_MAX_CAPE), + LOCKED_IMBUED_ZAMORAK_CAPE(ItemID.IMBUED_ZAMORAK_CAPE_L, ItemID.IMBUED_ZAMORAK_CAPE), + LOCKED_IMBUED_ZAMORAK_MAX_CAPE(ItemID.IMBUED_ZAMORAK_MAX_CAPE_L, ItemID.IMBUED_ZAMORAK_MAX_CAPE), + LOCKED_BRONZE_DEFENDER(ItemID.BRONZE_DEFENDER_L, ItemID.BRONZE_DEFENDER), + LOCKED_IRON_DEFENDER(ItemID.IRON_DEFENDER_L, ItemID.IRON_DEFENDER), + LOCKED_STEEL_DEFENDER(ItemID.STEEL_DEFENDER_L, ItemID.STEEL_DEFENDER), + LOCKED_BLACK_DEFENDER(ItemID.BLACK_DEFENDER_L, ItemID.BLACK_DEFENDER), + LOCKED_MITHRIL_DEFENDER(ItemID.MITHRIL_DEFENDER_L, ItemID.MITHRIL_DEFENDER), + LOCKED_ADAMANT_DEFENDER(ItemID.ADAMANT_DEFENDER_L, ItemID.ADAMANT_DEFENDER), + LOCKED_RUNE_DEFENDER(ItemID.RUNE_DEFENDER_L, ItemID.RUNE_DEFENDER), + LOCKED_DRAGON_DEFENDER(ItemID.DRAGON_DEFENDER_L, ItemID.DRAGON_DEFENDER), + LOCKED_AVERNIC_DEFENDER(ItemID.AVERNIC_DEFENDER_L, ItemID.AVERNIC_DEFENDER), + LOCKED_SARADOMIN_HALO(ItemID.SARADOMIN_HALO_L, ItemID.SARADOMIN_HALO), + LOCKED_ZAMORAK_HALO(ItemID.ZAMORAK_HALO_L, ItemID.ZAMORAK_HALO), + LOCKED_GUTHIX_HALO(ItemID.GUTHIX_HALO_L, ItemID.GUTHIX_HALO), + LOCKED_ARMADYL_HALO(ItemID.ARMADYL_HALO_L, ItemID.ARMADYL_HALO), + LOCKED_BANDOS_HALO(ItemID.BANDOS_HALO_L, ItemID.BANDOS_HALO), + LOCKED_SEREN_HALO(ItemID.SEREN_HALO_L, ItemID.SEREN_HALO), + LOCKED_ANCIENT_HALO(ItemID.ANCIENT_HALO_L, ItemID.ANCIENT_HALO), + LOCKED_BRASSICA_HALO(ItemID.BRASSICA_HALO_L, ItemID.BRASSICA_HALO), + LOCKED_HEALER_HAT(ItemID.HEALER_HAT_L, ItemID.HEALER_HAT), + LOCKED_FIGHTER_HAT(ItemID.FIGHTER_HAT_L, ItemID.FIGHTER_HAT), + LOCKED_RANGER_HAT(ItemID.RANGER_HAT_L, ItemID.RANGER_HAT), + LOCKED_FIGHTER_TORSO(ItemID.FIGHTER_TORSO_L, ItemID.FIGHTER_TORSO), + LOCKED_PENANCE_SKIRT(ItemID.PENANCE_SKIRT_L, ItemID.PENANCE_SKIRT), + LOCKED_VOID_KNIGHT_TOP(ItemID.VOID_KNIGHT_TOP_L, ItemID.VOID_KNIGHT_TOP), + LOCKED_ELITE_VOID_TOP(ItemID.ELITE_VOID_TOP_L, ItemID.ELITE_VOID_TOP), + LOCKED_VOID_KNIGHT_ROBE(ItemID.VOID_KNIGHT_ROBE_L, ItemID.VOID_KNIGHT_ROBE), + LOCKED_ELITE_VOID_ROBE(ItemID.ELITE_VOID_ROBE_L, ItemID.ELITE_VOID_ROBE), + LOCKED_VOID_KNIGHT_MACE(ItemID.VOID_KNIGHT_MACE_L, ItemID.VOID_KNIGHT_MACE), + LOCKED_VOID_KNIGHT_GLOVES(ItemID.VOID_KNIGHT_GLOVES_L, ItemID.VOID_KNIGHT_GLOVES), + LOCKED_VOID_MAGE_HELM(ItemID.VOID_MAGE_HELM_L, ItemID.VOID_MAGE_HELM), + LOCKED_VOID_RANGER_HELM(ItemID.VOID_RANGER_HELM_L, ItemID.VOID_RANGER_HELM), + LOCKED_VOID_MELEE_HELM(ItemID.VOID_MELEE_HELM_L, ItemID.VOID_MELEE_HELM), + LOCKED_GOLD_DECORATIVE_SWORD(ItemID.DECORATIVE_SWORD_L, ItemID.DECORATIVE_SWORD_4508), + LOCKED_GOLD_DECORATIVE_BODY(ItemID.DECORATIVE_ARMOUR_L, ItemID.DECORATIVE_ARMOUR_4509), + LOCKED_GOLD_DECORATIVE_LEGS(ItemID.DECORATIVE_ARMOUR_L_24159, ItemID.DECORATIVE_ARMOUR_4510), + LOCKED_GOLD_DECORATIVE_HELM(ItemID.DECORATIVE_HELM_L, ItemID.DECORATIVE_HELM_4511), + LOCKED_GOLD_DECORATIVE_SHIELD(ItemID.DECORATIVE_SHIELD_L, ItemID.DECORATIVE_SHIELD_4512), + LOCKED_GOLD_DECORATIVE_SKIRT(ItemID.DECORATIVE_ARMOUR_L_24162, ItemID.DECORATIVE_ARMOUR_11895), + LOCKED_DECORATIVE_MAGE_HAT(ItemID.DECORATIVE_ARMOUR_L_24165, ItemID.DECORATIVE_ARMOUR_11898), + LOCKED_DECORATIVE_MAGE_ROBE_TOP(ItemID.DECORATIVE_ARMOUR_L_24163, ItemID.DECORATIVE_ARMOUR_11896), + LOCKED_DECORATIVE_MAGE_ROBE_LEGS(ItemID.DECORATIVE_ARMOUR_L_24164, ItemID.DECORATIVE_ARMOUR_11897), + LOCKED_DECORATIVE_RANGE_TOP(ItemID.DECORATIVE_ARMOUR_L_24166, ItemID.DECORATIVE_ARMOUR_11899), + LOCKED_DECORATIVE_RANGE_BOTTOM(ItemID.DECORATIVE_ARMOUR_L_24167, ItemID.DECORATIVE_ARMOUR_11900), + LOCKED_DECORATIVE_RANGE_QUIVER(ItemID.DECORATIVE_ARMOUR_L_24168, ItemID.DECORATIVE_ARMOUR_11901), + LOCKED_RUNE_POUCH(ItemID.RUNE_POUCH_L, ItemID.RUNE_POUCH), + ; + + final private int lockedID; + final private int baseID; + + private final static Map ITEMS; + + static + { + final ImmutableMap.Builder builder = new ImmutableMap.Builder<>(); + + for (final LockedItem item : values()) + { + builder.put(item.lockedID, item.baseID); + } + + ITEMS = builder.build(); + } + + @Nullable + public static Integer getBaseIdFromLockedId(final int itemID) + { + return ITEMS.get(itemID); + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/LostIfNotProtected.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/LostIfNotProtected.java index 56a12c4b79..edfa3bb7ea 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/LostIfNotProtected.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/LostIfNotProtected.java @@ -38,7 +38,7 @@ final class LostIfNotProtected ItemID.KERIS, ItemID.KERISP, ItemID.KERISP_10583, ItemID.KERISP_10584 ); - public static boolean isLostIfNotProtected(int id) + static boolean isLostIfNotProtected(int id) { return ITEMS.contains(id); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/Pets.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/Pets.java index de2b0edcb7..32fd8798a3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/Pets.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/Pets.java @@ -35,61 +35,140 @@ final class Pets } private static final Set PETS = ImmutableSet.of( - BABY_MOLE, - PRINCE_BLACK_DRAGON, - PET_CORPOREAL_CRITTER, PET_DARK_CORE, - JALNIBREK, TZREKZUK, - KALPHITE_PRINCESS, KALPHITE_PRINCESS_12654, - LIL_ZIK, - SKOTOS, - PET_SNAKELING, PET_SNAKELING_12939, PET_SNAKELING_12940, - TZREKJAD, - VORKI, - - OLMLET, PUPPADILE, TEKTINY, VANGUARD, VASA_MINIRIO, VESPINA, - - PET_DAGANNOTH_PRIME, PET_DAGANNOTH_REX, PET_DAGANNOTH_SUPREME, - - PET_GENERAL_GRAARDOR, PET_KRIL_TSUTSAROTH, PET_KREEARRA, PET_ZILYANA, - - ABYSSAL_ORPHAN, - HELLPUPPY, - PET_KRAKEN, - MIDNIGHT, NOON, - PET_SMOKE_DEVIL, PET_SMOKE_DEVIL_22663, - IKKLE_HYDRA, IKKLE_HYDRA_22748, IKKLE_HYDRA_22750, IKKLE_HYDRA_22752, - - CALLISTO_CUB, - PET_CHAOS_ELEMENTAL, - SCORPIAS_OFFSPRING, - VENENATIS_SPIDERLING, - VETION_JR, VETION_JR_13180, - - BABY_CHINCHOMPA, BABY_CHINCHOMPA_13324, BABY_CHINCHOMPA_13325, BABY_CHINCHOMPA_13326, - BEAVER, - GIANT_SQUIRREL, - HERON, - RIFT_GUARDIAN, RIFT_GUARDIAN_20667, RIFT_GUARDIAN_20669, RIFT_GUARDIAN_20671, RIFT_GUARDIAN_20673, RIFT_GUARDIAN_20675, - RIFT_GUARDIAN_20677, RIFT_GUARDIAN_20679, RIFT_GUARDIAN_20681, RIFT_GUARDIAN_20683, RIFT_GUARDIAN_20685, RIFT_GUARDIAN_20687, - RIFT_GUARDIAN_20689, RIFT_GUARDIAN_20691, RIFT_GUARDIAN_21990, - ROCK_GOLEM, ROCK_GOLEM_21187, ROCK_GOLEM_21188, ROCK_GOLEM_21189, ROCK_GOLEM_21190, ROCK_GOLEM_21191, ROCK_GOLEM_21192, - ROCK_GOLEM_21193, ROCK_GOLEM_21194, ROCK_GOLEM_21195, ROCK_GOLEM_21196, ROCK_GOLEM_21197, ROCK_GOLEM_21340, ROCK_GOLEM_21358, - ROCK_GOLEM_21359, ROCK_GOLEM_21360, - ROCKY, - TANGLEROOT, - - PET_KITTEN, PET_KITTEN_1556, PET_KITTEN_1557, PET_KITTEN_1558, PET_KITTEN_1559, PET_KITTEN_1560, - PET_CAT, PET_CAT_1562, PET_CAT_1563, PET_CAT_1564, PET_CAT_1565, PET_CAT_1566, PET_CAT_1567, PET_CAT_1568, PET_CAT_1569, - PET_CAT_1570, PET_CAT_1571, PET_CAT_1572, - LAZY_CAT, LAZY_CAT_6550, LAZY_CAT_6551, LAZY_CAT_6552, LAZY_CAT_6553, LAZY_CAT_6554, - WILY_CAT, WILY_CAT_6556, WILY_CAT_6557, WILY_CAT_6558, WILY_CAT_6559, WILY_CAT_6560, - OVERGROWN_HELLCAT, HELL_CAT, HELLKITTEN, LAZY_HELL_CAT, WILY_HELLCAT, + //Cats + HELL_CAT, + HELLKITTEN, + LAZY_CAT, + LAZY_CAT_6550, + LAZY_CAT_6551, + LAZY_CAT_6552, + LAZY_CAT_6553, + LAZY_CAT_6554, + LAZY_HELL_CAT, + OVERGROWN_HELLCAT, + PET_CAT, + PET_CAT_1562, + PET_CAT_1563, + PET_CAT_1564, + PET_CAT_1565, + PET_CAT_1566, + PET_CAT_1567, + PET_CAT_1568, + PET_CAT_1569, + PET_CAT_1570, + PET_CAT_1571, + PET_CAT_1572, + PET_KITTEN, + PET_KITTEN_1556, + PET_KITTEN_1557, + PET_KITTEN_1558, + PET_KITTEN_1559, + PET_KITTEN_1560, + WILY_CAT, + WILY_CAT_6556, + WILY_CAT_6557, + WILY_CAT_6558, + WILY_CAT_6559, + WILY_CAT_6560, + WILY_HELLCAT, + //ClueScroll Pets BLOODHOUND, - CHOMPY_CHICK, - HERBI, + + //PVM Pets + ABYSSAL_ORPHAN, + BABY_MOLE, + CALLISTO_CUB, + CORRUPTED_YOUNGLLEF, + HELLPUPPY, + IKKLE_HYDRA, + IKKLE_HYDRA_22748, + IKKLE_HYDRA_22750, + IKKLE_HYDRA_22752, + JALNIBREK, + KALPHITE_PRINCESS, + KALPHITE_PRINCESS_12654, + LIL_ZIK, + MIDNIGHT, + NOON, + OLMLET, + PET_CHAOS_ELEMENTAL, + PET_CORPOREAL_CRITTER, + PET_DAGANNOTH_PRIME, + PET_DAGANNOTH_REX, + PET_DAGANNOTH_SUPREME, + PET_DARK_CORE, + PET_GENERAL_GRAARDOR, + PET_KRAKEN, + PET_KREEARRA, + PET_KRIL_TSUTSAROTH, PET_PENANCE_QUEEN, - PHOENIX + PET_SMOKE_DEVIL, + PET_SMOKE_DEVIL_22663, + PET_SNAKELING, + PET_SNAKELING_12939, + PET_SNAKELING_12940, + PET_ZILYANA, + PRINCE_BLACK_DRAGON, + PUPPADILE, + SCORPIAS_OFFSPRING, + SKOTOS, + SMOLCANO, + SRARACHA, + TEKTINY, + TZREKJAD, + TZREKZUK, + VANGUARD, + VASA_MINIRIO, + VENENATIS_SPIDERLING, + VESPINA, + VETION_JR, + VETION_JR_13180, + VORKI, + YOUNGLLEF, + + //Skilling Pets + BABY_CHINCHOMPA, + BABY_CHINCHOMPA_13324, + BABY_CHINCHOMPA_13325, + BABY_CHINCHOMPA_13326, + BEAVER, + CHOMPY_CHICK, + GIANT_SQUIRREL, + HERBI, + HERON, + PHOENIX, + RIFT_GUARDIAN, + RIFT_GUARDIAN_20667, + RIFT_GUARDIAN_20669, + RIFT_GUARDIAN_20671, + RIFT_GUARDIAN_20673, + RIFT_GUARDIAN_20675, + RIFT_GUARDIAN_20677, + RIFT_GUARDIAN_20679, + RIFT_GUARDIAN_20681, + RIFT_GUARDIAN_20683, + RIFT_GUARDIAN_20685, + RIFT_GUARDIAN_20687, + RIFT_GUARDIAN_20689, + RIFT_GUARDIAN_20691, + RIFT_GUARDIAN_21990, + ROCK_GOLEM, + ROCK_GOLEM_21187, + ROCK_GOLEM_21188, + ROCK_GOLEM_21189, + ROCK_GOLEM_21190, + ROCK_GOLEM_21191, + ROCK_GOLEM_21192, + ROCK_GOLEM_21193, + ROCK_GOLEM_21194, + ROCK_GOLEM_21195, + ROCK_GOLEM_21196, + ROCK_GOLEM_21197, + ROCK_GOLEM_21340, + ROCK_GOLEM_21358, + ROCK_GOLEM_21359, + ROCK_GOLEM_21360 ); public static boolean isPet(int id) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/TrueItemValue.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/TrueItemValue.java index 8dc5522417..11bdcc6e01 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/TrueItemValue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/TrueItemValue.java @@ -3,6 +3,7 @@ package net.runelite.client.plugins.itemskeptondeath; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import java.util.Set; +import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; import static net.runelite.api.ItemID.ABYSSAL_TENTACLE; @@ -14,7 +15,7 @@ import static net.runelite.api.ItemID.GRANITE_MAUL_24227; import static net.runelite.api.ItemID.KRAKEN_TENTACLE; import static net.runelite.api.ItemID.ORNATE_MAUL_HANDLE; -@Getter +@Getter(AccessLevel.PACKAGE) @RequiredArgsConstructor public enum TrueItemValue { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/WidgetButton.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/WidgetButton.java index 93cb27e41c..15fdd40534 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/WidgetButton.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemskeptondeath/WidgetButton.java @@ -125,7 +125,7 @@ class WidgetButton final int yIncrement = BACKGROUND_HEIGHT + PADDING; int maxRowItems = container.getWidth() / xIncrement; // Ensure at least 1 button per row - maxRowItems = maxRowItems < 1 ? 1 : maxRowItems; + maxRowItems = Math.max(maxRowItems, 1); int index = 0; for (final WidgetButton w : buttons) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatChanges.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatChanges.java index d7e2aa22b5..e57d28b504 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatChanges.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatChanges.java @@ -31,7 +31,13 @@ import java.util.HashSet; import java.util.Map; import lombok.extern.slf4j.Slf4j; import static net.runelite.api.ItemID.*; -import static net.runelite.client.plugins.itemstats.Builders.*; +import static net.runelite.client.plugins.itemstats.Builders.boost; +import static net.runelite.client.plugins.itemstats.Builders.combo; +import static net.runelite.client.plugins.itemstats.Builders.dec; +import static net.runelite.client.plugins.itemstats.Builders.food; +import static net.runelite.client.plugins.itemstats.Builders.heal; +import static net.runelite.client.plugins.itemstats.Builders.perc; +import static net.runelite.client.plugins.itemstats.Builders.range; import net.runelite.client.plugins.itemstats.food.Anglerfish; import net.runelite.client.plugins.itemstats.potions.GauntletPotion; import net.runelite.client.plugins.itemstats.potions.PrayerPotion; @@ -43,7 +49,7 @@ import static net.runelite.client.plugins.itemstats.stats.Stats.*; @Singleton @Slf4j -public class ItemStatChanges +class ItemStatChanges { ItemStatChanges() { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatPlugin.java index 3a26a30d43..45dfaef6e3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatPlugin.java @@ -47,7 +47,6 @@ import net.runelite.api.ItemID; import net.runelite.api.SpriteID; import net.runelite.api.VarPlayer; import net.runelite.api.Varbits; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.ScriptCallbackEvent; import net.runelite.api.events.VarbitChanged; @@ -58,7 +57,8 @@ import net.runelite.api.widgets.WidgetTextAlignment; import net.runelite.api.widgets.WidgetType; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -98,9 +98,6 @@ public class ItemStatPlugin extends Plugin @Inject private ClientThread clientThread; - @Inject - private EventBus eventBus; - private Widget itemInformationTitle; @Getter(AccessLevel.PACKAGE) @@ -140,30 +137,20 @@ public class ItemStatPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); overlayManager.add(overlay); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(overlay); clientThread.invokeLater(this::resetGEInventory); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(VarbitChanged.class, this, this::onVarbitChanged); - eventBus.subscribe(ScriptCallbackEvent.class, this, this::onScriptCallbackEvent); - } - + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getKey().equals("geStats")) @@ -173,6 +160,7 @@ public class ItemStatPlugin extends Plugin } } + @Subscribe private void onGameTick(GameTick event) { if (itemInformationTitle != null && this.geStats @@ -184,6 +172,7 @@ public class ItemStatPlugin extends Plugin } + @Subscribe private void onVarbitChanged(VarbitChanged event) { if (client.getVar(VarPlayer.CURRENT_GE_ITEM) == -1 && this.geStats) @@ -192,6 +181,7 @@ public class ItemStatPlugin extends Plugin } } + @Subscribe private void onScriptCallbackEvent(ScriptCallbackEvent event) { if (event.getEventName().equals("geBuilt") && this.geStats) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/StatBoost.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/StatBoost.java index 5d55a70694..cab36f3003 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/StatBoost.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/StatBoost.java @@ -24,6 +24,7 @@ */ package net.runelite.client.plugins.itemstats; +import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; import net.runelite.api.Client; @@ -31,11 +32,11 @@ import net.runelite.client.plugins.itemstats.stats.Stat; public abstract class StatBoost extends SingleEffect { - @Getter - @Setter + @Getter(AccessLevel.PUBLIC) + @Setter(AccessLevel.PUBLIC) private Stat stat; - @Getter - @Setter + @Getter(AccessLevel.PUBLIC) + @Setter(AccessLevel.PUBLIC) private boolean boost; protected StatBoost(Stat stat, boolean boost) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/StatsChanges.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/StatsChanges.java index 55ebb7206e..87c454c30c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/StatsChanges.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/StatsChanges.java @@ -24,6 +24,7 @@ */ package net.runelite.client.plugins.itemstats; +import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; @@ -34,11 +35,11 @@ public class StatsChanges * * @see Positivity */ - @Getter - @Setter + @Getter(AccessLevel.PUBLIC) + @Setter(AccessLevel.PUBLIC) private Positivity positivity; - @Getter - @Setter + @Getter(AccessLevel.PUBLIC) + @Setter(AccessLevel.PUBLIC) private StatChange[] statChanges; public StatsChanges(int len) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/potions/GauntletPotion.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/potions/GauntletPotion.java index 9ecee451ce..e0be4bcfe7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/potions/GauntletPotion.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/potions/GauntletPotion.java @@ -47,7 +47,7 @@ public class GauntletPotion implements Effect { // Restores prayer similar to PrayerPotion but there aren't any possible boost so simplify the calculation final int restorePerc = (int) (client.getRealSkillLevel(Skill.PRAYER) * PRAYER_RESTORE_PERCENT); - final StatChange prayer = heal(Stats.PRAYER, restorePerc + PRAYER_RESTORE_DELTA).effect(client); + final StatChange prayer = heal(Stats.PRAYER, restorePerc + PRAYER_RESTORE_DELTA).effect(client); final StatChange runEnergy = heal(Stats.RUN_ENERGY, 40).effect(client); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/potions/SuperRestore.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/potions/SuperRestore.java index 3ddcf0b137..c3b69d8619 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/potions/SuperRestore.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/potions/SuperRestore.java @@ -34,27 +34,7 @@ import net.runelite.client.plugins.itemstats.SimpleStatBoost; import net.runelite.client.plugins.itemstats.StatChange; import net.runelite.client.plugins.itemstats.StatsChanges; import net.runelite.client.plugins.itemstats.stats.Stat; -import static net.runelite.client.plugins.itemstats.stats.Stats.AGILITY; -import static net.runelite.client.plugins.itemstats.stats.Stats.ATTACK; -import static net.runelite.client.plugins.itemstats.stats.Stats.CONSTRUCTION; -import static net.runelite.client.plugins.itemstats.stats.Stats.COOKING; -import static net.runelite.client.plugins.itemstats.stats.Stats.CRAFTING; -import static net.runelite.client.plugins.itemstats.stats.Stats.DEFENCE; -import static net.runelite.client.plugins.itemstats.stats.Stats.FARMING; -import static net.runelite.client.plugins.itemstats.stats.Stats.FIREMAKING; -import static net.runelite.client.plugins.itemstats.stats.Stats.FISHING; -import static net.runelite.client.plugins.itemstats.stats.Stats.FLETCHING; -import static net.runelite.client.plugins.itemstats.stats.Stats.HERBLORE; -import static net.runelite.client.plugins.itemstats.stats.Stats.HUNTER; -import static net.runelite.client.plugins.itemstats.stats.Stats.MAGIC; -import static net.runelite.client.plugins.itemstats.stats.Stats.MINING; -import static net.runelite.client.plugins.itemstats.stats.Stats.RANGED; -import static net.runelite.client.plugins.itemstats.stats.Stats.RUNECRAFT; -import static net.runelite.client.plugins.itemstats.stats.Stats.SLAYER; -import static net.runelite.client.plugins.itemstats.stats.Stats.SMITHING; -import static net.runelite.client.plugins.itemstats.stats.Stats.STRENGTH; -import static net.runelite.client.plugins.itemstats.stats.Stats.THIEVING; -import static net.runelite.client.plugins.itemstats.stats.Stats.WOODCUTTING; +import static net.runelite.client.plugins.itemstats.stats.Stats.*; @RequiredArgsConstructor public class SuperRestore implements Effect diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/keyremapping/KeyRemappingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/keyremapping/KeyRemappingPlugin.java index 43ae6b1e26..1a851a7aa8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/keyremapping/KeyRemappingPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/keyremapping/KeyRemappingPlugin.java @@ -34,7 +34,6 @@ import lombok.Getter; import lombok.Setter; import net.runelite.api.Client; import net.runelite.api.GameState; -import net.runelite.api.IconID; import net.runelite.api.VarClientInt; import net.runelite.api.VarClientStr; import net.runelite.api.Varbits; @@ -44,7 +43,7 @@ import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; import net.runelite.client.config.ModifierlessKeybind; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.input.KeyManager; import net.runelite.client.plugins.Plugin; @@ -80,9 +79,6 @@ public class KeyRemappingPlugin extends Plugin @Inject private KeyRemappingListener inputListener; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) @Setter(AccessLevel.PACKAGE) private boolean typing; @@ -128,10 +124,9 @@ public class KeyRemappingPlugin extends Plugin private ModifierlessKeybind esc; @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); typing = false; keyManager.registerKeyListener(inputListener); @@ -148,10 +143,8 @@ public class KeyRemappingPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - clientThread.invoke(() -> { if (client.getGameState() == GameState.LOGGED_IN) @@ -163,12 +156,6 @@ public class KeyRemappingPlugin extends Plugin keyManager.unregisterKeyListener(inputListener); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(ScriptCallbackEvent.class, this, this::onScriptCallbackEvent); - } - @Provides KeyRemappingConfig getConfig(ConfigManager configManager) { @@ -209,6 +196,7 @@ public class KeyRemappingPlugin extends Plugin return w == null || w.isSelfHidden(); } + @Subscribe private void onConfigChanged(ConfigChanged configChanged) { if (!configChanged.getGroup().equals("keyremapping")) @@ -223,12 +211,13 @@ public class KeyRemappingPlugin extends Plugin Widget chatboxInput = client.getWidget(WidgetInfo.CHATBOX_INPUT); if (chatboxInput != null && chatboxInput.getText().endsWith(PRESS_ENTER_TO_CHAT)) { - chatboxInput.setText(getWaitingText()); + setChatboxWidgetInput(chatboxInput, PRESS_ENTER_TO_CHAT); } } ); } + @Subscribe private void onScriptCallbackEvent(ScriptCallbackEvent scriptCallbackEvent) { switch (scriptCallbackEvent.getEventName()) @@ -237,7 +226,7 @@ public class KeyRemappingPlugin extends Plugin Widget chatboxInput = client.getWidget(WidgetInfo.CHATBOX_INPUT); if (chatboxInput != null && chatboxFocused() && !typing) { - chatboxInput.setText(getWaitingText()); + setChatboxWidgetInput(chatboxInput, PRESS_ENTER_TO_CHAT); } break; case SCRIPT_EVENT_BLOCK_CHAT_INPUT: @@ -256,7 +245,7 @@ public class KeyRemappingPlugin extends Plugin Widget chatboxInput = client.getWidget(WidgetInfo.CHATBOX_INPUT); if (chatboxInput != null) { - chatboxInput.setText(getWaitingText()); + setChatboxWidgetInput(chatboxInput, PRESS_ENTER_TO_CHAT); } } @@ -267,39 +256,24 @@ public class KeyRemappingPlugin extends Plugin { final boolean isChatboxTransparent = client.isResized() && client.getVar(Varbits.TRANSPARENT_CHATBOX) == 1; final Color textColor = isChatboxTransparent ? JagexColors.CHAT_TYPED_TEXT_TRANSPARENT_BACKGROUND : JagexColors.CHAT_TYPED_TEXT_OPAQUE_BACKGROUND; - chatboxInput.setText(getPlayerNameWithIcon() + ": " + ColorUtil.wrapWithColorTag(client.getVar(VarClientStr.CHATBOX_TYPED_TEXT) + "*", textColor)); + setChatboxWidgetInput(chatboxInput, ColorUtil.wrapWithColorTag(client.getVar(VarClientStr.CHATBOX_TYPED_TEXT) + "*", textColor)); } } - private String getPlayerNameWithIcon() - { - IconID icon; - switch (client.getAccountType()) - { - case IRONMAN: - icon = IconID.IRONMAN; - break; - case ULTIMATE_IRONMAN: - icon = IconID.ULTIMATE_IRONMAN; - break; - case HARDCORE_IRONMAN: - icon = IconID.HARDCORE_IRONMAN; - break; - default: - return client.getLocalPlayer().getName(); - } - return icon + client.getLocalPlayer().getName(); - } - - private String getWaitingText() + private void setChatboxWidgetInput(Widget widget, String input) { if (this.hideDisplayName) { - return PRESS_ENTER_TO_CHAT; + widget.setText(input); + return; } - else + + String text = widget.getText(); + int idx = text.indexOf(':'); + if (idx != -1) { - return getPlayerNameWithIcon() + ": " + PRESS_ENTER_TO_CHAT; + String newText = text.substring(0, idx) + ": " + input; + widget.setText(newText); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/kingdomofmiscellania/KingdomCounter.java b/runelite-client/src/main/java/net/runelite/client/plugins/kingdomofmiscellania/KingdomCounter.java index a89b8e84c4..37f5096b44 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/kingdomofmiscellania/KingdomCounter.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/kingdomofmiscellania/KingdomCounter.java @@ -50,12 +50,11 @@ class KingdomCounter extends Counter @Override public String getTooltip() { - return new StringBuilder("Favor: ") - .append(plugin.getFavor()) - .append("/127") - .append("
") - .append("Coffer: ") - .append(QuantityFormatter.quantityToStackSize(plugin.getCoffer())) - .toString(); + return "Favor: " + + plugin.getFavor() + + "/127" + + "
" + + "Coffer: " + + QuantityFormatter.quantityToStackSize(plugin.getCoffer()); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/kingdomofmiscellania/KingdomPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/kingdomofmiscellania/KingdomPlugin.java index 659b997bbf..5779567d48 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/kingdomofmiscellania/KingdomPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/kingdomofmiscellania/KingdomPlugin.java @@ -47,7 +47,7 @@ import net.runelite.client.chat.ChatMessageBuilder; import net.runelite.client.chat.ChatMessageManager; import net.runelite.client.chat.QueuedMessage; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; @@ -84,9 +84,6 @@ public class KingdomPlugin extends Plugin @Inject private ItemManager itemManager; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) private int favor = 0, coffer = 0; @@ -102,33 +99,25 @@ public class KingdomPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - removeKingdomInfobox(); } - private void addSubscriptions() - { - eventBus.subscribe(VarbitChanged.class, this, this::onVarbitChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - } - + @Subscribe private void onVarbitChanged(VarbitChanged event) { updateKingdomVarbits(); processInfobox(); } + @Subscribe public void onGameStateChanged(GameStateChanged event) { @@ -144,6 +133,7 @@ public class KingdomPlugin extends Plugin } } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("kingdomofmiscellania")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/Book.java b/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/Book.java index 8c64ac708e..56cd385f6f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/Book.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/Book.java @@ -30,8 +30,8 @@ import java.util.Map; import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.ItemID; -import net.runelite.client.util.AsyncBufferedImage; import net.runelite.client.game.ItemManager; +import net.runelite.client.util.AsyncBufferedImage; enum Book { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryPlugin.java index 0f6e8c0e10..87434af369 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryPlugin.java @@ -46,14 +46,14 @@ import net.runelite.api.Player; import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.AnimationChanged; import net.runelite.api.events.ChatMessage; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.ItemContainerChanged; import net.runelite.api.events.MenuOptionClicked; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -98,9 +98,6 @@ public class KourendLibraryPlugin extends Plugin @Inject private ItemManager itemManager; - @Inject - private EventBus eventBus; - private KourendLibraryPanel panel; private NavigationButton navButton; private boolean buttonAttached = false; @@ -119,9 +116,8 @@ public class KourendLibraryPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { - addSubscriptions(); hideButton = config.hideButton(); hideDuplicateBook = config.hideDuplicateBook(); @@ -153,8 +149,6 @@ public class KourendLibraryPlugin extends Plugin @Override protected void shutDown() { - eventBus.unregister(this); - overlay.setHidden(true); overlayManager.remove(overlay); clientToolbar.removeNavigation(navButton); @@ -164,16 +158,7 @@ public class KourendLibraryPlugin extends Plugin playerBooks = null; } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(MenuOptionClicked.class, this, this::onMenuOptionClicked); - eventBus.subscribe(AnimationChanged.class, this, this::onAnimationChanged); - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(ItemContainerChanged.class, this, this::onItemContainerChanged); - } - + @Subscribe private void onConfigChanged(ConfigChanged ev) { if (!KourendLibraryConfig.GROUP_KEY.equals(ev.getGroup())) @@ -206,6 +191,7 @@ public class KourendLibraryPlugin extends Plugin }); } + @Subscribe private void onMenuOptionClicked(MenuOptionClicked menuOpt) { if (MenuOpcode.GAME_OBJECT_FIRST_OPTION == menuOpt.getMenuOpcode() && menuOpt.getTarget().contains("Bookshelf")) @@ -215,6 +201,7 @@ public class KourendLibraryPlugin extends Plugin } } + @Subscribe private void onAnimationChanged(AnimationChanged anim) { if (anim.getActor() == client.getLocalPlayer() && anim.getActor().getAnimation() == AnimationID.LOOKING_INTO) @@ -223,6 +210,7 @@ public class KourendLibraryPlugin extends Plugin } } + @Subscribe private void onChatMessage(ChatMessage event) { if (lastBookcaseAnimatedOn != null && event.getType() == ChatMessageType.GAMEMESSAGE) @@ -236,6 +224,7 @@ public class KourendLibraryPlugin extends Plugin } } + @Subscribe private void onGameTick(GameTick tick) { boolean inRegion = client.getLocalPlayer().getWorldLocation().getRegionID() == REGION; @@ -307,6 +296,7 @@ public class KourendLibraryPlugin extends Plugin } } + @Subscribe private void onItemContainerChanged(ItemContainerChanged itemContainerChangedEvent) { updatePlayerBooks(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/Library.java b/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/Library.java index 42f2faf090..5fd23ac9b1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/Library.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/Library.java @@ -37,32 +37,7 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import net.runelite.api.coords.WorldPoint; -import static net.runelite.client.plugins.kourendlibrary.Book.BYRNES_CORONATION_SPEECH; -import static net.runelite.client.plugins.kourendlibrary.Book.DARK_MANUSCRIPT_13514; -import static net.runelite.client.plugins.kourendlibrary.Book.DARK_MANUSCRIPT_13515; -import static net.runelite.client.plugins.kourendlibrary.Book.DARK_MANUSCRIPT_13516; -import static net.runelite.client.plugins.kourendlibrary.Book.DARK_MANUSCRIPT_13517; -import static net.runelite.client.plugins.kourendlibrary.Book.DARK_MANUSCRIPT_13518; -import static net.runelite.client.plugins.kourendlibrary.Book.DARK_MANUSCRIPT_13519; -import static net.runelite.client.plugins.kourendlibrary.Book.DARK_MANUSCRIPT_13520; -import static net.runelite.client.plugins.kourendlibrary.Book.DARK_MANUSCRIPT_13521; -import static net.runelite.client.plugins.kourendlibrary.Book.DARK_MANUSCRIPT_13522; -import static net.runelite.client.plugins.kourendlibrary.Book.DARK_MANUSCRIPT_13523; -import static net.runelite.client.plugins.kourendlibrary.Book.EATHRAM_RADA_EXTRACT; -import static net.runelite.client.plugins.kourendlibrary.Book.HOSIDIUS_LETTER; -import static net.runelite.client.plugins.kourendlibrary.Book.IDEOLOGY_OF_DARKNESS; -import static net.runelite.client.plugins.kourendlibrary.Book.KILLING_OF_A_KING; -import static net.runelite.client.plugins.kourendlibrary.Book.RADAS_CENSUS; -import static net.runelite.client.plugins.kourendlibrary.Book.RADAS_JOURNEY; -import static net.runelite.client.plugins.kourendlibrary.Book.RICKTORS_DIARY_7; -import static net.runelite.client.plugins.kourendlibrary.Book.SOUL_JOURNEY; -import static net.runelite.client.plugins.kourendlibrary.Book.TRANSPORTATION_INCANTATIONS; -import static net.runelite.client.plugins.kourendlibrary.Book.TRANSVERGENCE_THEORY; -import static net.runelite.client.plugins.kourendlibrary.Book.TREACHERY_OF_ROYALTY; -import static net.runelite.client.plugins.kourendlibrary.Book.TRISTESSAS_TRAGEDY; -import static net.runelite.client.plugins.kourendlibrary.Book.TWILL_ACCORD; -import static net.runelite.client.plugins.kourendlibrary.Book.VARLAMORE_ENVOY; -import static net.runelite.client.plugins.kourendlibrary.Book.WINTERTODT_PARABLE; +import static net.runelite.client.plugins.kourendlibrary.Book.*; /** * Library represents a instance of the Kourend/Arceuus House library. diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/leaguechaticons/LeagueChatIconsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/leaguechaticons/LeagueChatIconsPlugin.java new file mode 100644 index 0000000000..d4bcfcba6a --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/leaguechaticons/LeagueChatIconsPlugin.java @@ -0,0 +1,349 @@ +/* + * Copyright (c) 2019, hsamoht + * Copyright (c) 2019, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.client.plugins.leaguechaticons; + +import java.awt.image.BufferedImage; +import java.util.Arrays; +import javax.inject.Inject; +import lombok.extern.slf4j.Slf4j; +import net.runelite.api.ChatPlayer; +import net.runelite.api.Client; +import net.runelite.api.GameState; +import net.runelite.api.IconID; +import net.runelite.api.IndexedSprite; +import net.runelite.api.MessageNode; +import net.runelite.api.Player; +import net.runelite.api.events.ChatMessage; +import net.runelite.api.events.GameStateChanged; +import net.runelite.api.events.ScriptCallbackEvent; +import net.runelite.api.util.Text; +import net.runelite.api.widgets.Widget; +import net.runelite.api.widgets.WidgetInfo; +import net.runelite.client.callback.ClientThread; +import net.runelite.client.chat.ChatMessageManager; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.game.WorldService; +import net.runelite.client.plugins.Plugin; +import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.util.ImageUtil; +import net.runelite.http.api.worlds.World; +import net.runelite.http.api.worlds.WorldResult; +import net.runelite.http.api.worlds.WorldType; + +@PluginDescriptor( + name = "League Chat Icons", + description = "Changes the chat icon for players on league worlds", + enabledByDefault = false +) +@Slf4j +public class LeagueChatIconsPlugin extends Plugin +{ + private static final String SCRIPT_EVENT_SET_CHATBOX_INPUT = "setChatboxInput"; + private static final String IRONMAN_PREFIX = ""; + + @Inject + private Client client; + + @Inject + private ChatMessageManager chatMessageManager; + + @Inject + private WorldService worldService; + + @Inject + private ClientThread clientThread; + + private int leagueIconOffset = -1; // offset for league icon + private boolean onLeagueWorld; + + @Override + protected void startUp() + { + onLeagueWorld = false; + + clientThread.invoke(() -> + { + if (client.getGameState() == GameState.LOGGED_IN) + { + loadLeagueIcon(); + onLeagueWorld = isLeagueWorld(client.getWorld()); + if (onLeagueWorld) + { + setChatboxName(getNameChatbox()); + } + } + }); + } + + @Override + protected void shutDown() + { + clientThread.invoke(() -> + { + if (client.getGameState() == GameState.LOGGED_IN && onLeagueWorld) + { + setChatboxName(getNameDefault()); + } + }); + } + + @Subscribe + private void onGameStateChanged(GameStateChanged gameStateChanged) + { + if (gameStateChanged.getGameState() == GameState.LOGGED_IN) + { + loadLeagueIcon(); + onLeagueWorld = isLeagueWorld(client.getWorld()); + } + } + + @Subscribe + private void onScriptCallbackEvent(ScriptCallbackEvent scriptCallbackEvent) + { + if (scriptCallbackEvent.getEventName().equals(SCRIPT_EVENT_SET_CHATBOX_INPUT) && onLeagueWorld) + { + setChatboxName(getNameChatbox()); + } + } + + @Subscribe + private void onChatMessage(ChatMessage chatMessage) + { + if (client.getGameState() != GameState.LOADING && client.getGameState() != GameState.LOGGED_IN) + { + return; + } + + switch (chatMessage.getType()) + { + case PRIVATECHAT: + case MODPRIVATECHAT: + // Note this is unable to change icon on PMs if they are not a friend or in clan chat + case FRIENDSCHAT: + String name = Text.removeTags(chatMessage.getName()); + if (isChatPlayerOnLeague(name)) + { + addLeagueIconToMessage(chatMessage); + } + break; + case PUBLICCHAT: + case MODCHAT: + if (onLeagueWorld) + { + addLeagueIconToMessage(chatMessage); + } + break; + } + } + + /** + * Adds the League Icon in front of player names chatting from a league world. + * + * @param chatMessage chat message to edit sender name on + */ + private void addLeagueIconToMessage(ChatMessage chatMessage) + { + String name = chatMessage.getName(); + if (!name.startsWith(IRONMAN_PREFIX)) + { + // don't replace non-ironman icons, like mods + return; + } + + name = Text.removeTags(name); + + final MessageNode messageNode = chatMessage.getMessageNode(); + messageNode.setName(getNameWithIcon(leagueIconOffset, name)); + + chatMessageManager.update(messageNode); + client.refreshChat(); + } + + /** + * Update the player name in the chatbox input + */ + private void setChatboxName(String name) + { + Widget chatboxInput = client.getWidget(WidgetInfo.CHATBOX_INPUT); + if (chatboxInput != null) + { + String text = chatboxInput.getText(); + int idx = text.indexOf(':'); + if (idx != -1) + { + String newText = name + text.substring(idx); + chatboxInput.setText(newText); + } + } + } + + /** + * Gets the league name, including possible icon, of the local player. + * + * @return String of icon + name + */ + private String getNameChatbox() + { + Player player = client.getLocalPlayer(); + if (player != null) + { + return getNameWithIcon(leagueIconOffset, player.getName()); + } + return null; + } + + /** + * Gets the default name, including possible icon, of the local player. + * + * @return String of icon + name + */ + private String getNameDefault() + { + Player player = client.getLocalPlayer(); + if (player == null) + { + return null; + } + + int iconIndex; + switch (client.getAccountType()) + { + case IRONMAN: + iconIndex = IconID.IRONMAN.getIndex(); + break; + case HARDCORE_IRONMAN: + iconIndex = IconID.HARDCORE_IRONMAN.getIndex(); + break; + case ULTIMATE_IRONMAN: + iconIndex = IconID.ULTIMATE_IRONMAN.getIndex(); + break; + default: + return player.getName(); + } + + return getNameWithIcon(iconIndex, player.getName()); + } + + /** + * Get a name formatted with icon + * + * @param iconIndex index of the icon + * @param name name of the player + * @return String of icon + name + */ + private static String getNameWithIcon(int iconIndex, String name) + { + String icon = ""; + return icon + name; + } + + /** + * Checks if a player name is a friend or clan member on a league world. + * + * @param name name of player to check. + * @return boolean true/false. + */ + private boolean isChatPlayerOnLeague(String name) + { + ChatPlayer player = getChatPlayerFromName(name); + + if (player == null) + { + return false; + } + + int world = player.getWorld(); + return isLeagueWorld(world); + } + + /** + * Checks if the world is a League world. + * + * @param worldNumber number of the world to check. + * @return boolean true/false if it is a league world or not. + */ + private boolean isLeagueWorld(int worldNumber) + { + WorldResult worlds = worldService.getWorlds(); + if (worlds == null) + { + return false; + } + + World world = worlds.findWorld(worldNumber); + return world != null && world.getTypes().contains(WorldType.LEAGUE); + } + + /** + * Loads the league icon into the client. + */ + private void loadLeagueIcon() + { + final IndexedSprite[] modIcons = client.getModIcons(); + + if (leagueIconOffset != -1 || modIcons == null) + { + return; + } + + BufferedImage image = ImageUtil.getResourceStreamFromClass(getClass(), "league_icon.png"); + IndexedSprite indexedSprite = ImageUtil.getImageIndexedSprite(image, client); + + leagueIconOffset = modIcons.length; + + final IndexedSprite[] newModIcons = Arrays.copyOf(modIcons, modIcons.length + 1); + newModIcons[newModIcons.length - 1] = indexedSprite; + + client.setModIcons(newModIcons); + } + + /** + * Gets a ChatPlayer object from a clean name by searching clan and friends list. + * + * @param name name of player to find. + * @return ChatPlayer if found, else null. + */ + private ChatPlayer getChatPlayerFromName(String name) + { + if (client.isClanMember(name)) + { + return Arrays.stream(client.getClanMembers()) + .filter(clanMember -> Text.removeTags(clanMember.getUsername()).equals(name)) + .findFirst() + .orElse(null); + } + + if (client.isFriended(name, true)) + { + return Arrays.stream(client.getFriends()) + .filter(friend -> Text.removeTags(friend.getName()).equals(name)) + .findFirst() + .orElse(null); + } + + return null; + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/learntoclick/LearnToClickPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/learntoclick/LearnToClickPlugin.java index 22b9309db6..41b1c520d9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/learntoclick/LearnToClickPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/learntoclick/LearnToClickPlugin.java @@ -23,7 +23,7 @@ import net.runelite.api.events.WidgetLoaded; import net.runelite.api.widgets.WidgetID; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -46,12 +46,11 @@ public class LearnToClickPlugin extends Plugin @Inject private LearnToClickConfig config; - private boolean forceRightClickFlag; + @Inject private Client client; - @Inject - private EventBus eventBus; + private boolean forceRightClickFlag; private boolean shouldBlockCompass; private boolean shouldRightClickMap; @@ -66,29 +65,19 @@ public class LearnToClickPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - forceRightClickFlag = false; hideOrbWidgets(false); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(WidgetLoaded.class, this, this::onWidgetLoaded); - eventBus.subscribe(MenuShouldLeftClick.class, this, this::onMenuShouldLeftClick); - eventBus.subscribe(MenuEntryAdded.class, this, this::onMenuEntryAdded); - } - + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("learntoclick")) @@ -109,6 +98,7 @@ public class LearnToClickPlugin extends Plugin } + @Subscribe private void onWidgetLoaded(WidgetLoaded event) { if (!this.hideOrbs) @@ -121,6 +111,7 @@ public class LearnToClickPlugin extends Plugin } } + @Subscribe private void onMenuShouldLeftClick(MenuShouldLeftClick event) { if (!forceRightClickFlag) @@ -131,10 +122,9 @@ public class LearnToClickPlugin extends Plugin MenuEntry[] menuEntries = client.getMenuEntries(); for (MenuEntry entry : menuEntries) { - if ((entry.getOption().equals("Floating") && this.shouldRightClickMap) || - (entry.getOption().equals("Hide") && this.shouldRightClickXp) || (entry.getOption().equals("Show") - && this.shouldRightClickXp) || (entry.getOption().equals("Auto retaliate") - && this.shouldRightClickRetaliate)) + if ((entry.getOption().equals("Floating World Map") && this.shouldRightClickMap) || + (entry.getTarget().equals("XP drops") && this.shouldRightClickXp) || + (entry.getOption().equals("Auto retaliate") && this.shouldRightClickRetaliate)) { event.setForceRightClick(true); return; @@ -142,10 +132,11 @@ public class LearnToClickPlugin extends Plugin } } + @Subscribe private void onMenuEntryAdded(MenuEntryAdded event) { - if ((event.getOption().equals("Floating") && this.shouldRightClickMap) || (event.getOption().equals("Hide") - && this.shouldRightClickXp) || (event.getOption().equals("Show") && this.shouldRightClickXp) || + if ((event.getOption().equals("Floating World Map") && this.shouldRightClickMap) || + (event.getTarget().equals("XP drops") && this.shouldRightClickXp) || (event.getOption().equals("Auto retaliate") && this.shouldRightClickRetaliate)) { forceRightClickFlag = true; @@ -167,6 +158,7 @@ public class LearnToClickPlugin extends Plugin /** * Toggles hiding the World map and special attack orb widgets + * * @param hidden - hides the Widgets if true, un-hides them if false */ private void hideOrbWidgets(boolean hidden) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/lizardmenshaman/LizardmenShamanPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/lizardmenshaman/LizardmenShamanPlugin.java index e34634e155..c88b214d81 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/lizardmenshaman/LizardmenShamanPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/lizardmenshaman/LizardmenShamanPlugin.java @@ -39,7 +39,7 @@ import net.runelite.api.events.AnimationChanged; import net.runelite.api.events.ChatMessage; import net.runelite.client.Notifier; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -75,9 +75,6 @@ public class LizardmenShamanPlugin extends Plugin @Inject private Notifier notifier; - @Inject - private EventBus eventBus; - private boolean showTimer; private boolean notifyOnSpawn; @@ -88,9 +85,8 @@ public class LizardmenShamanPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { - addSubscriptions(); this.showTimer = config.showTimer(); this.notifyOnSpawn = config.notifyOnSpawn(); @@ -99,21 +95,13 @@ public class LizardmenShamanPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(overlay); spawns.clear(); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - eventBus.subscribe(AnimationChanged.class, this, this::onAnimationChanged); - } - + @Subscribe private void onChatMessage(ChatMessage event) { if (this.notifyOnSpawn && /* event.getType() == ChatMessageType.GAMEMESSAGE && */event.getMessage().contains(MESSAGE)) @@ -123,6 +111,7 @@ public class LizardmenShamanPlugin extends Plugin } } + @Subscribe private void onAnimationChanged(AnimationChanged event) { Actor actor = event.getActor(); @@ -137,6 +126,7 @@ public class LizardmenShamanPlugin extends Plugin } } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("shaman")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/loginscreen/LoginScreenPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/loginscreen/LoginScreenPlugin.java index 7268b979c8..3324f69452 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/loginscreen/LoginScreenPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/loginscreen/LoginScreenPlugin.java @@ -38,7 +38,7 @@ import net.runelite.api.Client; import net.runelite.api.GameState; import net.runelite.api.events.GameStateChanged; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.events.SessionOpen; import net.runelite.client.input.KeyListener; @@ -67,9 +67,6 @@ public class LoginScreenPlugin extends Plugin implements KeyListener @Inject private KeyManager keyManager; - @Inject - private EventBus eventBus; - private String usernameCache; private boolean syncUsername; @@ -77,10 +74,9 @@ public class LoginScreenPlugin extends Plugin implements KeyListener private String username; @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); client.setHideDisconnect(config.hideDisconnected()); @@ -89,10 +85,8 @@ public class LoginScreenPlugin extends Plugin implements KeyListener } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - if (this.syncUsername) { client.getPreferences().setRememberedUsername(usernameCache); @@ -103,19 +97,13 @@ public class LoginScreenPlugin extends Plugin implements KeyListener keyManager.unregisterKeyListener(this); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(SessionOpen.class, this, this::onSessionOpen); - } - @Provides LoginScreenConfig getConfig(ConfigManager configManager) { return configManager.getConfig(LoginScreenConfig.class); } + @Subscribe private void onGameStateChanged(GameStateChanged event) { if (!this.syncUsername) @@ -147,6 +135,7 @@ public class LoginScreenPlugin extends Plugin implements KeyListener } } + @Subscribe private void onSessionOpen(SessionOpen event) { // configuation for the account is available now, so update the username @@ -240,6 +229,7 @@ public class LoginScreenPlugin extends Plugin implements KeyListener } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("loginscreen")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/lootassist/LootAssistPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/lootassist/LootAssistPlugin.java index 4e5215656a..7cc3426bd4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/lootassist/LootAssistPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/lootassist/LootAssistPlugin.java @@ -9,7 +9,7 @@ import net.runelite.api.Player; import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.AnimationChanged; import net.runelite.api.events.GameStateChanged; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.PluginType; @@ -31,39 +31,29 @@ public class LootAssistPlugin extends Plugin @Inject private LootAssistOverlay lootAssistOverlay; - @Inject - private EventBus eventBus; - static final ConcurrentHashMap lootPiles = new ConcurrentHashMap<>(); @Override - protected void startUp() throws Exception + protected void startUp() { - addSubscriptions(); overlayManager.add(lootAssistOverlay); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - lootPiles.clear(); overlayManager.remove(lootAssistOverlay); } - private void addSubscriptions() - { - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(AnimationChanged.class, this, this::onAnimationChanged); - } - + @Subscribe private void onGameStateChanged(GameStateChanged event) { lootPiles.clear(); } + @Subscribe private void onAnimationChanged(AnimationChanged event) { final Actor actor = event.getActor(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/lootingbagviewer/LootingBagViewerOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/lootingbagviewer/LootingBagViewerOverlay.java index c8353c0181..dc426083f3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/lootingbagviewer/LootingBagViewerOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/lootingbagviewer/LootingBagViewerOverlay.java @@ -97,6 +97,7 @@ public class LootingBagViewerOverlay extends Overlay if (!items[i].equals(tempItems[i])) { items = tempItems; + break; } } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/lootingbagviewer/LootingBagViewerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/lootingbagviewer/LootingBagViewerPlugin.java index 0ede751f08..97b9e2528c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/lootingbagviewer/LootingBagViewerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/lootingbagviewer/LootingBagViewerPlugin.java @@ -39,7 +39,7 @@ import net.runelite.api.events.WidgetHiddenChanged; import net.runelite.api.widgets.Widget; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -47,11 +47,11 @@ import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( - name = "PvP Looting Bag Viewer", - description = "Add an overlay showing the contents of your looting bag", - tags = {"alternate", "items", "overlay", "second"}, - type = PluginType.PVP, - enabledByDefault = false + name = "PvP Looting Bag Viewer", + description = "Add an overlay showing the contents of your looting bag", + tags = {"alternate", "items", "overlay", "second"}, + type = PluginType.PVP, + enabledByDefault = false ) /** * TODO: Remember current looting bag value when client restarts @@ -80,9 +80,6 @@ public class LootingBagViewerPlugin extends Plugin @Inject private LootingBagViewerConfig config; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) @Setter(AccessLevel.PACKAGE) private int valueToShow = -1; @@ -96,7 +93,6 @@ public class LootingBagViewerPlugin extends Plugin @Override public void startUp() { - addSubscriptions(); if (config.renderViewer()) { @@ -112,18 +108,11 @@ public class LootingBagViewerPlugin extends Plugin @Override public void shutDown() { - eventBus.unregister(this); - overlayManager.remove(overlay); overlayManager.remove(widgetOverlay); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(WidgetHiddenChanged.class, this, this::onWidgetHiddenChanged); - } - + @Subscribe private void onConfigChanged(ConfigChanged configChanged) { if (configChanged.getKey().equals("renderViewer")) @@ -154,6 +143,7 @@ public class LootingBagViewerPlugin extends Plugin /** * @param widgetHiddenChanged */ + @Subscribe private void onWidgetHiddenChanged(WidgetHiddenChanged widgetHiddenChanged) { Widget widget = widgetHiddenChanged.getWidget(); @@ -166,17 +156,17 @@ public class LootingBagViewerPlugin extends Plugin if (!Strings.isNullOrEmpty(value.getText())) { - if (value.getText().equals("Value: -")) + if (value.getText().equals("Value: -")) { setValueToShow(-1); - } - else + } + else { String str = value.getText(); str = str.replace("Bag value: ", "") - .replace("Value: ", "") - .replace(" coins", "") - .replace(",", ""); + .replace("Value: ", "") + .replace(" coins", "") + .replace(",", ""); int val = Integer.parseInt(str); setValueToShow(Math.round(val) / 1000); @@ -186,4 +176,4 @@ public class LootingBagViewerPlugin extends Plugin } } -} +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/lootingbagviewer/LootingBagViewerWidgetOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/lootingbagviewer/LootingBagViewerWidgetOverlay.java index d3356155c4..ebd7d4be8e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/lootingbagviewer/LootingBagViewerWidgetOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/lootingbagviewer/LootingBagViewerWidgetOverlay.java @@ -37,7 +37,7 @@ import net.runelite.client.ui.overlay.WidgetItemOverlay; @Singleton public class LootingBagViewerWidgetOverlay extends WidgetItemOverlay { - private LootingBagViewerPlugin plugin; + private final LootingBagViewerPlugin plugin; @Inject LootingBagViewerWidgetOverlay(final LootingBagViewerPlugin plugin) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootRecordDateFilter.java b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootRecordDateFilter.java index f9d5e7a0c0..47e25c686b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootRecordDateFilter.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootRecordDateFilter.java @@ -11,10 +11,10 @@ package net.runelite.client.plugins.loottracker; - import java.lang.management.ManagementFactory; import java.lang.management.RuntimeMXBean; import java.time.Duration; +import lombok.AccessLevel; import lombok.Getter; public enum LootRecordDateFilter @@ -29,7 +29,7 @@ public enum LootRecordDateFilter ALL("All", Duration.ZERO); private final String name; - @Getter + @Getter(AccessLevel.PACKAGE) private final Duration duration; static RuntimeMXBean mxBean = ManagementFactory.getRuntimeMXBean(); @@ -37,11 +37,11 @@ public enum LootRecordDateFilter /** * Constructor for a Loot Tracker filter that filters by date, more specifically Duration. * - * @param name - String the name that represents the date filter. This is what will be displayed in the GUI + * @param name - String the name that represents the date filter. This is what will be displayed in the GUI * @param duration - The duration the current time - the time of the loot record must be greater than to display if * a date filter other than all or Session is enabled */ - private LootRecordDateFilter(String name, Duration duration) + LootRecordDateFilter(String name, Duration duration) { this.name = name; this.duration = duration; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerBox.java b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerBox.java index 8a370ca3ed..bab4320e56 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerBox.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerBox.java @@ -30,6 +30,7 @@ import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; +import java.awt.Font; import java.awt.GridLayout; import java.awt.image.BufferedImage; import java.text.DateFormat; @@ -50,12 +51,12 @@ import javax.swing.SwingConstants; import javax.swing.border.EmptyBorder; import lombok.AccessLevel; import lombok.Getter; -import net.runelite.client.util.AsyncBufferedImage; +import net.runelite.api.util.Text; import net.runelite.client.game.ItemManager; import net.runelite.client.ui.ColorScheme; import net.runelite.client.ui.FontManager; +import net.runelite.client.util.AsyncBufferedImage; import net.runelite.client.util.ImageUtil; -import net.runelite.api.util.Text; import net.runelite.client.util.QuantityFormatter; class LootTrackerBox extends JPanel @@ -66,9 +67,7 @@ class LootTrackerBox extends JPanel private final JPanel itemContainer = new JPanel(); private final JLabel priceLabel = new JLabel(); private final JLabel subTitleLabel = new JLabel(); - private final JLabel dateLabel = new JLabel(); private final JPanel logTitle = new JPanel(); - private final JLabel titleLabel = new JLabel(); private final ItemManager itemManager; @Getter(AccessLevel.PACKAGE) private final String id; @@ -79,9 +78,8 @@ class LootTrackerBox extends JPanel private final List records = new ArrayList<>(); private long totalPrice; - private boolean hideIgnoredItems; - private BiConsumer onItemToggle; - private final long timeStamp; + private final boolean hideIgnoredItems; + private final BiConsumer onItemToggle; LootTrackerBox( final long timeStamp, @@ -94,7 +92,6 @@ class LootTrackerBox extends JPanel @Nullable final Boolean showDate, final BiConsumer onItemToggle) { - this.timeStamp = timeStamp; this.id = id; this.itemManager = itemManager; this.onItemToggle = onItemToggle; @@ -109,6 +106,7 @@ class LootTrackerBox extends JPanel logTitle.setBorder(new EmptyBorder(7, 7, 7, 7)); logTitle.setBackground(ColorScheme.DARKER_GRAY_COLOR.darker()); + JLabel titleLabel = new JLabel(); titleLabel.setText(Text.removeTags(id)); titleLabel.setFont(FontManager.getRunescapeSmallFont()); titleLabel.setForeground(Color.WHITE); @@ -119,7 +117,8 @@ class LootTrackerBox extends JPanel subTitleLabel.setFont(FontManager.getRunescapeSmallFont()); subTitleLabel.setForeground(ColorScheme.LIGHT_GRAY_COLOR); - dateLabel.setFont(FontManager.getRunescapeSmallFont().deriveFont(FontManager.getRunescapeSmallFont().getSize() - 2)); + JLabel dateLabel = new JLabel(); + dateLabel.setFont(FontManager.getRunescapeSmallFont().deriveFont(Font.PLAIN, FontManager.getRunescapeSmallFont().getSize() - 2)); dateLabel.setForeground(Color.LIGHT_GRAY); dateLabel.setText(DateFormat.getDateInstance().format(new Date(timeStamp))); @@ -157,7 +156,7 @@ class LootTrackerBox extends JPanel { return hideIgnoredItems ? records.stream().filter( - r -> !Arrays.stream(r.getItems()).allMatch(LootTrackerItem::isIgnored)).count() + r -> !Arrays.stream(r.getItems()).allMatch(LootTrackerItem::isIgnored)).count() : records.size(); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerConfig.java index 5577ed3ea2..ac1290381a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerConfig.java @@ -105,7 +105,7 @@ public interface LootTrackerConfig extends Config @ConfigItem( keyName = "syncPanel", name = "Synchronize panel contents", - description = "Synchronize you local loot tracker with your online (requires being logged in). This means" + + description = "Synchronize your local loot tracker with your online (requires being logged in). This means" + " that panel is filled with portion of your remote data on startup and deleting data in panel deletes them" + " also on server." ) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerItem.java b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerItem.java index 3a0e53d846..1b4d389560 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerItem.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerItem.java @@ -40,7 +40,7 @@ class LootTrackerItem private final int quantity; @Getter(AccessLevel.PACKAGE) private final long gePrice; - @Getter + @Getter(AccessLevel.PACKAGE) private final long haPrice; @Getter(AccessLevel.PACKAGE) @Setter(AccessLevel.PACKAGE) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPanel.java index 3d88ce95be..b01fef82f3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPanel.java @@ -50,6 +50,7 @@ import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.border.EmptyBorder; +import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; @@ -117,7 +118,6 @@ class LootTrackerPanel extends PluginPanel private final JLabel groupedLootBtn = new JLabel(); private final JLabel resetIcon = new JLabel(); private final JLabel collapseBtn = new JLabel(); - private JComboBox dateFilterComboBox = new JComboBox<>(new Vector<>(Arrays.asList(LootRecordDateFilter.values()))); // Log collection private final List records = new ArrayList<>(); @@ -170,8 +170,8 @@ class LootTrackerPanel extends PluginPanel EXPAND_ICON = new ImageIcon(expandedImg); } - @Getter - @Setter + @Getter(AccessLevel.PACKAGE) + @Setter(AccessLevel.PACKAGE) private LootRecordSortType lootRecordSortType = LootRecordSortType.TIMESTAMP; LootTrackerPanel(final LootTrackerPlugin plugin, final ItemManager itemManager, final LootTrackerConfig config) @@ -301,14 +301,14 @@ class LootTrackerPanel extends PluginPanel } }); + JComboBox dateFilterComboBox = new JComboBox<>(new Vector<>(Arrays.asList(LootRecordDateFilter.values()))); dateFilterComboBox.setSelectedItem(this.dateFilter); dateFilterComboBox.setToolTipText("Filter the displayed loot records by date"); dateFilterComboBox.setMaximumSize(new Dimension(15, 0)); dateFilterComboBox.setMaximumRowCount(3); dateFilterComboBox.addItemListener(e -> { - final LootRecordDateFilter dateFilterSelected = (LootRecordDateFilter) e.getItem(); - dateFilter = dateFilterSelected; + dateFilter = (LootRecordDateFilter) e.getItem(); rebuild(); } ); @@ -435,7 +435,7 @@ class LootTrackerPanel extends PluginPanel actionsContainer.setVisible(true); } - void updateCollapseText() + private void updateCollapseText() { if (isAllCollapsed()) { @@ -452,7 +452,7 @@ class LootTrackerPanel extends PluginPanel private boolean isAllCollapsed() { return boxes.stream() - .filter(i -> i.isCollapsed()) + .filter(LootTrackerBox::isCollapsed) .count() == boxes.size(); } @@ -613,7 +613,6 @@ class LootTrackerPanel extends PluginPanel if (records.get(i).getTimestamp().toEpochMilli() > dateFilter.getDuration().toMillis()) { buildBox(records.get(i)); - continue; } } else diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java index 5cb013712f..b004c56732 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java @@ -79,11 +79,10 @@ import net.runelite.api.Varbits; import net.runelite.api.WorldType; import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.ChatMessage; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.ItemContainerChanged; -import net.runelite.api.events.LocalPlayerDeath; import net.runelite.api.events.MenuOptionClicked; +import net.runelite.api.events.PlayerDeath; import net.runelite.api.events.PlayerSpawned; import net.runelite.api.events.WidgetLoaded; import net.runelite.api.util.Text; @@ -103,7 +102,8 @@ import static net.runelite.client.database.data.Tables.LOOTTRACKEREVENTS; import static net.runelite.client.database.data.Tables.LOOTTRACKERLINK; import static net.runelite.client.database.data.Tables.LOOTTRACKERLOOT; import static net.runelite.client.database.data.Tables.USER; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.events.NpcLootReceived; import net.runelite.client.events.PlayerLootReceived; import net.runelite.client.events.SessionClose; @@ -209,26 +209,34 @@ public class LootTrackerPlugin extends Plugin @Inject private ClientToolbar clientToolbar; + @Inject private ItemManager itemManager; + @Inject private ChatMessageManager chatMessageManager; + @Inject private SpriteManager spriteManager; + @Inject private LootTrackerConfig config; + @Inject private ClientThread clientThread; + @Inject private SessionManager sessionManager; + @Inject private ScheduledExecutorService executor; - @Inject - private EventBus eventBus; + @Inject private LootRecordWriter writer; + @Inject private DatabaseManager databaseManager; + private LootTrackerPanel panel; private NavigationButton navButton; private String eventType; @@ -241,9 +249,9 @@ public class LootTrackerPlugin extends Plugin private LootTrackerClient lootTrackerClient; private final List queuedLoots = new ArrayList<>(); - private Map killCountMap = new HashMap<>(); + private final Map killCountMap = new HashMap<>(); private boolean gotPet = false; - private Map userUuidMap = new HashMap<>(); + private final Map userUuidMap = new HashMap<>(); private static Collection stack(Collection items) { @@ -299,6 +307,7 @@ public class LootTrackerPlugin extends Plugin return configManager.getConfig(LootTrackerConfig.class); } + @Subscribe private void onSessionOpen(SessionOpen sessionOpen) { AccountSession accountSession = sessionManager.getAccountSession(); @@ -312,21 +321,24 @@ public class LootTrackerPlugin extends Plugin } } + @Subscribe private void onSessionClose(SessionClose sessionClose) { submitLoot(); lootTrackerClient = null; } - private void onLocalPlayerDeath(LocalPlayerDeath event) + @Subscribe + private void onPlayerDeath(PlayerDeath event) { - if (client.getVar(Varbits.IN_WILDERNESS) == 1 || WorldType.isPvpWorld(client.getWorldType())) + if ((client.getVar(Varbits.IN_WILDERNESS) == 1 || WorldType.isPvpWorld(client.getWorldType())) && event.getPlayer() == client.getLocalPlayer()) { deathInventorySnapshot(); pvpDeath = true; } } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("loottracker")) @@ -353,9 +365,8 @@ public class LootTrackerPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { - addSubscriptions(); ignoredItems = Text.fromCSV(config.getIgnoredItems()); ignoredNPCs = Text.fromCSV(config.getIgnoredNPCs()); @@ -483,7 +494,6 @@ public class LootTrackerPlugin extends Plugin @Override protected void shutDown() { - eventBus.unregister(this); submitLoot(); clientToolbar.removeNavigation(navButton); @@ -492,22 +502,7 @@ public class LootTrackerPlugin extends Plugin chestLooted = false; } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(SessionOpen.class, this, this::onSessionOpen); - eventBus.subscribe(SessionClose.class, this, this::onSessionClose); - eventBus.subscribe(LocalPlayerDeath.class, this, this::onLocalPlayerDeath); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(NpcLootReceived.class, this, this::onNpcLootReceived); - eventBus.subscribe(PlayerSpawned.class, this, this::onPlayerSpawned); - eventBus.subscribe(PlayerLootReceived.class, this, this::onPlayerLootReceived); - eventBus.subscribe(WidgetLoaded.class, this, this::onWidgetLoaded); - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - eventBus.subscribe(ItemContainerChanged.class, this, this::onItemContainerChanged); - eventBus.subscribe(MenuOptionClicked.class, this, this::onMenuOptionClicked); - } - + @Subscribe private void onGameStateChanged(final GameStateChanged event) { if (client.getLocalPlayer() == null) @@ -552,6 +547,7 @@ public class LootTrackerPlugin extends Plugin } } + @Subscribe private void onNpcLootReceived(final NpcLootReceived npcLootReceived) { if (client.getLocalPlayer() == null) @@ -620,6 +616,7 @@ public class LootTrackerPlugin extends Plugin writer.addLootTrackerRecord(record); } + @Subscribe private void onPlayerSpawned(PlayerSpawned event) { if (event.getPlayer().equals(client.getLocalPlayer())) @@ -628,6 +625,7 @@ public class LootTrackerPlugin extends Plugin } } + @Subscribe private void onPlayerLootReceived(final PlayerLootReceived playerLootReceived) { if (client.getLocalPlayer() == null) @@ -680,6 +678,7 @@ public class LootTrackerPlugin extends Plugin writer.addLootTrackerRecord(record); } + @Subscribe private void onWidgetLoaded(WidgetLoaded event) { if (client.getLocalPlayer() == null) @@ -804,6 +803,7 @@ public class LootTrackerPlugin extends Plugin writer.addLootTrackerRecord(record); } + @Subscribe private void onChatMessage(ChatMessage event) { if (client.getLocalPlayer() == null) @@ -950,6 +950,7 @@ public class LootTrackerPlugin extends Plugin } @SuppressWarnings("unchecked") + @Subscribe public void onItemContainerChanged(ItemContainerChanged event) { if (client.getLocalPlayer() == null) @@ -1022,6 +1023,7 @@ public class LootTrackerPlugin extends Plugin } } + @Subscribe private void onMenuOptionClicked(MenuOptionClicked event) { if (event.getParam1() != WidgetInfo.INVENTORY.getId()) @@ -1555,4 +1557,4 @@ public class LootTrackerPlugin extends Plugin userUuidMap.put(name, user.get(USER.UNIQUEID)); } } -} +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/Pet.java b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/Pet.java index c5de642cbd..2cd3809b1c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/Pet.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/Pet.java @@ -26,10 +26,11 @@ package net.runelite.client.plugins.loottracker; import java.util.HashMap; import java.util.Map; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.ItemID; -@Getter +@Getter(AccessLevel.PACKAGE) public enum Pet { // GWD Pets diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/localstorage/events/LTNameChange.java b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/localstorage/events/LTNameChange.java index 130c3ef440..04a7f348da 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/localstorage/events/LTNameChange.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/localstorage/events/LTNameChange.java @@ -26,6 +26,4 @@ package net.runelite.client.plugins.loottracker.localstorage.events; import net.runelite.api.events.Event; -public class LTNameChange implements Event -{ -} \ No newline at end of file +public class LTNameChange implements Event {} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/lowmemory/LowMemoryPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/lowmemory/LowMemoryPlugin.java index 9129c18ad1..a2051838aa 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/lowmemory/LowMemoryPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/lowmemory/LowMemoryPlugin.java @@ -30,6 +30,7 @@ import net.runelite.api.GameState; import net.runelite.api.events.GameStateChanged; import net.runelite.client.callback.ClientThread; import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -67,6 +68,7 @@ public class LowMemoryPlugin extends Plugin clientThread.invoke(() -> client.changeMemoryMode(false)); } + @Subscribe private void onGameStateChanged(GameStateChanged event) { // When the client starts it initializes the texture size based on the memory mode setting. diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/maxhit/MaxHitPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/maxhit/MaxHitPlugin.java index f048217c75..b8ba770460 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/maxhit/MaxHitPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/maxhit/MaxHitPlugin.java @@ -34,8 +34,7 @@ import net.runelite.api.events.ItemContainerChanged; import net.runelite.api.events.VarbitChanged; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; -import net.runelite.client.eventbus.EventBus; -import net.runelite.client.events.ConfigChanged; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.PluginType; @@ -56,38 +55,13 @@ public class MaxHitPlugin extends Plugin @Inject private Client client; - @Inject - private EventBus eventBus; - - @Override - protected void startUp() throws Exception - { - addSubscriptions(); - } - - @Override - protected void shutDown() throws Exception - { - eventBus.unregister(this); - } - - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(ItemContainerChanged.class, this, this::onItemContainerChanged); - eventBus.subscribe(VarbitChanged.class, this, this::onVarbitChanged); - } - + @Subscribe private void onItemContainerChanged(final ItemContainerChanged event) { this.updateMaxHitWidget(); } - private void onConfigChanged(final ConfigChanged event) - { - this.updateMaxHitWidget(); - } - + @Subscribe private void onVarbitChanged(VarbitChanged event) { this.updateMaxHitWidget(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/maxhit/attackstyle/WeaponType.java b/runelite-client/src/main/java/net/runelite/client/plugins/maxhit/attackstyle/WeaponType.java index dc9f59fb70..2858c6ee99 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/maxhit/attackstyle/WeaponType.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/maxhit/attackstyle/WeaponType.java @@ -26,16 +26,7 @@ package net.runelite.client.plugins.maxhit.attackstyle; import java.util.HashMap; import java.util.Map; -import static net.runelite.client.plugins.maxhit.attackstyle.AttackStyle.ACCURATE; -import static net.runelite.client.plugins.maxhit.attackstyle.AttackStyle.ACCURATERANGING; -import static net.runelite.client.plugins.maxhit.attackstyle.AttackStyle.AGGRESSIVE; -import static net.runelite.client.plugins.maxhit.attackstyle.AttackStyle.CASTING; -import static net.runelite.client.plugins.maxhit.attackstyle.AttackStyle.CONTROLLED; -import static net.runelite.client.plugins.maxhit.attackstyle.AttackStyle.DEFENSIVE; -import static net.runelite.client.plugins.maxhit.attackstyle.AttackStyle.DEFENSIVE_CASTING; -import static net.runelite.client.plugins.maxhit.attackstyle.AttackStyle.LONGRANGE; -import static net.runelite.client.plugins.maxhit.attackstyle.AttackStyle.OTHER; -import static net.runelite.client.plugins.maxhit.attackstyle.AttackStyle.RANGING; +import static net.runelite.client.plugins.maxhit.attackstyle.AttackStyle.*; public enum WeaponType { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java index 820e6e7b8c..46265bdcdb 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java @@ -1357,11 +1357,11 @@ public interface MenuEntrySwapperConfig extends Config } @ConfigItem( - keyName = "swapFairyTree", - name = "Fairy Tree", - description = "Swap options on PoH Fairy Tree", - position = 2, - section = "teleportationSection" + keyName = "swapFairyTree", + name = "Fairy Tree", + description = "Swap options on PoH Fairy Tree", + position = 2, + section = "teleportationSection" ) default boolean swapFairyTree() { @@ -1369,13 +1369,13 @@ public interface MenuEntrySwapperConfig extends Config } @ConfigItem( - keyName = "fairyTree", - name = "Mode", - description = "", - position = 3, - section = "teleportationSection", - hidden = true, - unhide = "swapFairyTree" + keyName = "fairyTree", + name = "Mode", + description = "", + position = 3, + section = "teleportationSection", + hidden = true, + unhide = "swapFairyTree" ) default FairyTreeMode swapFairyTreeMode() { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java index 77739bfe2f..5704501eb8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java @@ -34,14 +34,12 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; import com.google.inject.Provides; import java.util.ArrayList; -import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Set; -import java.util.stream.Collectors; import javax.inject.Inject; import javax.inject.Singleton; import lombok.AccessLevel; @@ -62,7 +60,6 @@ import static net.runelite.api.Varbits.WITHDRAW_X_AMOUNT; import net.runelite.api.WorldType; import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.ClientTick; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.FocusChanged; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.Menu; @@ -79,6 +76,8 @@ import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; import net.runelite.client.config.Keybind; import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.input.KeyManager; import net.runelite.client.menus.AbstractComparableEntry; import static net.runelite.client.menus.ComparableEntries.newBankComparableEntry; @@ -157,28 +156,31 @@ public class MenuEntrySwapperPlugin extends Plugin @Inject private Client client; + @Inject private ClientThread clientThread; + @Inject private MenuEntrySwapperConfig config; + @Inject private PluginManager pluginManager; + @Inject private MenuManager menuManager; + @Inject private KeyManager keyManager; + @Inject private EventBus eventBus; + @Inject private PvpToolsPlugin pvpTools; + @Inject private PvpToolsConfig pvpToolsConfig; - /** - * Migrates old custom swaps config - * This should be removed after a reasonable amount of time. - */ - @Inject - private ConfigManager configManager; + private boolean buildingMode; private boolean inTobRaid = false; private boolean inCoxRaid = false; @@ -315,9 +317,11 @@ public class MenuEntrySwapperPlugin extends Plugin { this.lastDes = JewelleryBoxDestination.withOption(config.lastDes()); - migrateConfig(); updateConfig(); - addSubscriptions(); + if (config.lastJewel()) + { + eventBus.subscribe(MenuOptionClicked.class, JEWEL_CLICKED, this::onMenuOptionClicked); + } addSwaps(); loadConstructionItems(); loadCustomSwaps(config.customSwaps(), customSwaps); @@ -341,8 +345,6 @@ public class MenuEntrySwapperPlugin extends Plugin @Override public void shutDown() { - eventBus.unregister(this); - loadCustomSwaps("", customSwaps); // Removes all custom swaps removeSwaps(); removeBuySellEntries(); @@ -358,21 +360,7 @@ public class MenuEntrySwapperPlugin extends Plugin } } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(VarbitChanged.class, this, this::onVarbitChanged); - eventBus.subscribe(MenuOpened.class, this, this::onMenuOpened); - eventBus.subscribe(MenuEntryAdded.class, this, this::onMenuEntryAdded); - eventBus.subscribe(FocusChanged.class, this, this::onFocusChanged); - - if (config.lastJewel()) - { - eventBus.subscribe(MenuOptionClicked.class, JEWEL_CLICKED, this::onMenuOptionClicked); - } - } - + @Subscribe private void onFocusChanged(FocusChanged event) { if (!event.isFocused()) @@ -382,6 +370,7 @@ public class MenuEntrySwapperPlugin extends Plugin } } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!"menuentryswapper".equals(event.getGroup())) @@ -452,6 +441,7 @@ public class MenuEntrySwapperPlugin extends Plugin } } + @Subscribe private void onGameStateChanged(GameStateChanged event) { if (event.getGameState() != GameState.LOGGED_IN) @@ -466,6 +456,7 @@ public class MenuEntrySwapperPlugin extends Plugin keyManager.registerKeyListener(hotkey); } + @Subscribe private void onVarbitChanged(VarbitChanged event) { buildingMode = client.getVar(BUILDING_MODE) == 1; @@ -474,6 +465,7 @@ public class MenuEntrySwapperPlugin extends Plugin setCastOptions(false); } + @Subscribe private void onMenuOpened(MenuOpened event) { Player localPlayer = client.getLocalPlayer(); @@ -581,6 +573,7 @@ public class MenuEntrySwapperPlugin extends Plugin event.setModified(); } + @Subscribe public void onMenuEntryAdded(MenuEntryAdded event) { if (client.getGameState() != GameState.LOGGED_IN) @@ -2044,90 +2037,6 @@ public class MenuEntrySwapperPlugin extends Plugin } } - /** - * Migrates old custom swaps config - * This should be removed after a reasonable amount of time. - */ - private static boolean oldParse(String value) - { - try - { - final StringBuilder sb = new StringBuilder(); - - for (String str : value.split("\n")) - { - if (!str.startsWith("//")) - { - sb.append(str).append("\n"); - } - } - - NEWLINE_SPLITTER.withKeyValueSeparator(':').split(sb); - return true; - } - catch (IllegalArgumentException ex) - { - return false; - } - } - - /** - * Migrates old custom swaps config - * This should be removed after a reasonable amount of time. - */ - private void migrateConfig() - { - final String customSwaps = config.customSwaps(); - - if (!CustomSwapParse.parse(customSwaps) && oldParse(customSwaps)) - { - final StringBuilder sb = new StringBuilder(); - - for (String str : customSwaps.split("\n")) - { - if (!str.startsWith("//")) - { - sb.append(str).append("\n"); - } - } - - final Map split = NEWLINE_SPLITTER.withKeyValueSeparator(':').split(sb); - - sb.setLength(0); - - for (Map.Entry entry : split.entrySet()) - { - String val = entry.getValue(); - if (!val.contains(",")) - { - continue; - } - - sb.append(entry.getValue()).append(":0\n"); - } - - configManager.setConfiguration("menuentryswapper", "customSwaps", sb.toString()); - } - - // Ugly band-aid i'm sorry - configManager.setConfiguration("menuentryswapper", "customSwaps", - Arrays.stream(config.customSwaps() - .split("\n")) - .distinct() - .filter(swap -> !"walk here" - .equals(swap. - split(":")[0] - .trim() - .toLowerCase())) - .filter(swap -> !"cancel" - .equals(swap - .split(":")[0] - .trim() - .toLowerCase())) - .collect(Collectors.joining("\n")) - ); - } - private final HotkeyListener hotkey = new HotkeyListener(() -> this.hotkeyMod) { @Override diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/comparables/GrimyHerbComparableEntry.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/comparables/GrimyHerbComparableEntry.java index 9b0c75a664..970a00c557 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/comparables/GrimyHerbComparableEntry.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/comparables/GrimyHerbComparableEntry.java @@ -13,7 +13,7 @@ import org.apache.commons.lang3.StringUtils; public class GrimyHerbComparableEntry extends AbstractComparableEntry { - private SwapGrimyHerbMode mode; + private final SwapGrimyHerbMode mode; private final GrimyHerbLookup lookup = new GrimyHerbLookup(); private final Client client; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/util/GrimyHerbLookup.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/util/GrimyHerbLookup.java index 97236ddc37..f7cf38599f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/util/GrimyHerbLookup.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/util/GrimyHerbLookup.java @@ -11,15 +11,13 @@ import java.util.stream.Collectors; public class GrimyHerbLookup { - private static Map mapping; + private static final Map mapping; static { final InputStream herbFile = GrimyHerbLookup.class.getResourceAsStream("/herbs.json"); Gson gson = new Gson(); - mapping = gson.fromJson(new InputStreamReader(herbFile), new TypeToken>() - { - }.getType()); + mapping = gson.fromJson(new InputStreamReader(herbFile), new TypeToken>() {}.getType()); } public int getCleanLevel(int itemId) @@ -49,7 +47,7 @@ public class GrimyHerbLookup return mapping.keySet().stream().mapToInt(Integer::valueOf).boxed().collect(Collectors.toList()); } - private class HerbInfo + private static class HerbInfo { @SerializedName("cleaned") private int cleanedId; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/util/HerbNotFoundException.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/util/HerbNotFoundException.java index c352d90d47..eb2d0da3a4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/util/HerbNotFoundException.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/util/HerbNotFoundException.java @@ -1,5 +1,3 @@ package net.runelite.client.plugins.menuentryswapper.util; -public class HerbNotFoundException extends RuntimeException -{ -} +public class HerbNotFoundException extends RuntimeException {} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/util/JewelleryBoxDestination.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/util/JewelleryBoxDestination.java index e971dade60..88cfde5496 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/util/JewelleryBoxDestination.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/util/JewelleryBoxDestination.java @@ -70,6 +70,7 @@ public enum JewelleryBoxDestination final int childIndex; private static final ImmutableMap map; + static { final ImmutableMap.Builder builder = ImmutableMap.builderWithExpectedSize(values().length); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/util/QuestCapeMode.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/util/QuestCapeMode.java index 813787bd10..c7974f0c72 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/util/QuestCapeMode.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/util/QuestCapeMode.java @@ -3,7 +3,7 @@ package net.runelite.client.plugins.menuentryswapper.util; public enum QuestCapeMode { TRIM("Trim"), - TELEPORT ("Teleport"); + TELEPORT("Teleport"); private final String name; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/metronome/MetronomePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/metronome/MetronomePlugin.java index b0eede90ad..1434c07294 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/metronome/MetronomePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/metronome/MetronomePlugin.java @@ -42,7 +42,7 @@ import net.runelite.api.SoundEffectID; import net.runelite.api.SoundEffectVolume; import net.runelite.api.events.GameTick; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -63,9 +63,6 @@ public class MetronomePlugin extends Plugin @Inject private MetronomePluginConfiguration config; - @Inject - private EventBus eventBus; - private int tickCounter = 0; private int tockCounter = 0; private Clip tickClip; @@ -114,7 +111,6 @@ public class MetronomePlugin extends Plugin protected void startUp() { updateConfig(); - addSubscriptions(); tickClip = GetAudioClip(this.tickPath); tockClip = GetAudioClip(this.tockPath); @@ -123,8 +119,6 @@ public class MetronomePlugin extends Plugin @Override protected void shutDown() { - eventBus.unregister(this); - if (tickClip != null) { tickClip.close(); @@ -135,12 +129,7 @@ public class MetronomePlugin extends Plugin } } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - } - + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("metronome")) @@ -177,6 +166,7 @@ public class MetronomePlugin extends Plugin } } + @Subscribe private void onGameTick(GameTick tick) { if (this.tickCount == 0) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/minimap/MinimapPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/minimap/MinimapPlugin.java index 7631304b51..1df45356d5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/minimap/MinimapPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/minimap/MinimapPlugin.java @@ -37,7 +37,7 @@ import net.runelite.api.events.WidgetHiddenChanged; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -58,9 +58,6 @@ public class MinimapPlugin extends Plugin @Inject private MinimapConfig config; - @Inject - private EventBus eventBus; - private Sprite[] originalDotSprites; private Color itemColor; @@ -78,10 +75,9 @@ public class MinimapPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); updateMinimapWidgetVisibility(this.hideMinimap); storeOriginalDots(); @@ -89,21 +85,13 @@ public class MinimapPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - updateMinimapWidgetVisibility(false); restoreOriginalDots(); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(WidgetHiddenChanged.class, this, this::onWidgetHiddenChanged); - } - + @Subscribe private void onGameStateChanged(GameStateChanged event) { if (event.getGameState() == GameState.LOGIN_SCREEN && originalDotSprites == null) @@ -113,6 +101,7 @@ public class MinimapPlugin extends Plugin } } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("minimap")) @@ -131,6 +120,7 @@ public class MinimapPlugin extends Plugin replaceMapDots(); } + @Subscribe private void onWidgetHiddenChanged(WidgetHiddenChanged event) { updateMinimapWidgetVisibility(this.hideMinimap); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/mining/MiningOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/mining/MiningOverlay.java index 5fb773ece8..ab800ee722 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/mining/MiningOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/mining/MiningOverlay.java @@ -76,7 +76,7 @@ class MiningOverlay extends Overlay } Instant now = Instant.now(); - for (Iterator it = respawns.iterator(); it.hasNext();) + for (Iterator it = respawns.iterator(); it.hasNext(); ) { Color pieFillColor = config.progressPieColor(); Color pieBorderColor; @@ -133,7 +133,7 @@ class MiningOverlay extends Overlay /** * Checks if the given point is "upstairs" in the mlm. * The upper floor is actually on z=0. - * + *

* This method assumes that the given point is already in the mlm * and is not meaningful when outside the mlm. * diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/mining/MiningPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/mining/MiningPlugin.java index d1ce991d0d..67a64cd674 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/mining/MiningPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/mining/MiningPlugin.java @@ -65,7 +65,7 @@ import net.runelite.api.events.MenuOptionClicked; import net.runelite.api.events.WallObjectSpawned; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -108,9 +108,6 @@ public class MiningPlugin extends Plugin @Inject private MiningConfig config; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) private final List respawns = new ArrayList<>(); private boolean recentlyLoggedIn; @@ -123,7 +120,6 @@ public class MiningPlugin extends Plugin @Override protected void startUp() { - addSubscriptions(); this.showCoalBagOverlay = config.showCoalBagOverlay(); this.amountOfCoalInCoalBag = config.amountOfCoalInCoalBag(); @@ -133,32 +129,20 @@ public class MiningPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(miningOverlay); overlayManager.remove(coalBagOverlay); respawns.clear(); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(GameObjectDespawned.class, this, this::onGameObjectDespawned); - eventBus.subscribe(WallObjectSpawned.class, this, this::onWallObjectSpawned); - eventBus.subscribe(MenuOptionClicked.class, this, this::onMenuOptionClicked); - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - } - @Provides MiningConfig provideConfig(ConfigManager configManager) { return configManager.getConfig(MiningConfig.class); } + @Subscribe private void onGameStateChanged(GameStateChanged event) { switch (event.getGameState()) @@ -176,11 +160,13 @@ public class MiningPlugin extends Plugin } } + @Subscribe private void onGameTick(GameTick gameTick) { recentlyLoggedIn = false; } + @Subscribe private void onGameObjectDespawned(GameObjectDespawned event) { if (client.getGameState() != GameState.LOGGED_IN || recentlyLoggedIn) @@ -199,6 +185,7 @@ public class MiningPlugin extends Plugin } } + @Subscribe private void onWallObjectSpawned(WallObjectSpawned event) { if (client.getGameState() != GameState.LOGGED_IN) @@ -241,6 +228,7 @@ public class MiningPlugin extends Plugin } } + @Subscribe private void onMenuOptionClicked(MenuOptionClicked event) { //TODO: should work hopefully @@ -271,6 +259,7 @@ public class MiningPlugin extends Plugin } } + @Subscribe private void onChatMessage(ChatMessage event) { if (event.getType() != ChatMessageType.GAMEMESSAGE) @@ -317,6 +306,7 @@ public class MiningPlugin extends Plugin return client.getLocalPlayer().getWorldLocation().getRegionID() == MINING_GUILD_REGION; } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("mining")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodeGemOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodeGemOverlay.java index 4a183e3ba1..86c3e06888 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodeGemOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodeGemOverlay.java @@ -39,6 +39,7 @@ import net.runelite.client.ui.overlay.components.PanelComponent; import net.runelite.client.ui.overlay.components.TitleComponent; import net.runelite.client.ui.overlay.components.table.TableAlignment; import net.runelite.client.ui.overlay.components.table.TableComponent; + @Singleton public class MotherlodeGemOverlay extends Overlay { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodeOreOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodeOreOverlay.java index 65888c0f74..2b28c7618c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodeOreOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodeOreOverlay.java @@ -34,6 +34,7 @@ import net.runelite.client.ui.overlay.components.PanelComponent; import net.runelite.client.ui.overlay.components.TitleComponent; import net.runelite.client.ui.overlay.components.table.TableAlignment; import net.runelite.client.ui.overlay.components.table.TableComponent; + @Singleton public class MotherlodeOreOverlay extends Overlay { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodePlugin.java index 8f88c14f25..a4c38eded1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodePlugin.java @@ -85,7 +85,7 @@ import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.Notifier; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.events.OverlayMenuClicked; import net.runelite.client.plugins.Plugin; @@ -151,9 +151,6 @@ public class MotherlodePlugin extends Plugin @Inject private Notifier notifier; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) private boolean inMlm; @@ -215,7 +212,6 @@ public class MotherlodePlugin extends Plugin protected void startUp() { updateConfig(); - addSubscriptions(); overlayManager.add(overlay); overlayManager.add(rocksOverlay); @@ -234,8 +230,6 @@ public class MotherlodePlugin extends Plugin @Override protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(overlay); overlayManager.remove(rocksOverlay); overlayManager.remove(motherlodeGemOverlay); @@ -255,27 +249,7 @@ public class MotherlodePlugin extends Plugin }); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(VarbitChanged.class, this, this::onVarbitChanged); - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - eventBus.subscribe(MenuOptionClicked.class, this, this::onMenuOptionClicked); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(AnimationChanged.class, this, this::onAnimationChanged); - eventBus.subscribe(WidgetLoaded.class, this, this::onWidgetLoaded); - eventBus.subscribe(WallObjectSpawned.class, this, this::onWallObjectSpawned); - eventBus.subscribe(WallObjectChanged.class, this, this::onWallObjectChanged); - eventBus.subscribe(WallObjectDespawned.class, this, this::onWallObjectDespawned); - eventBus.subscribe(GameObjectSpawned.class, this, this::onGameObjectSpawned); - eventBus.subscribe(GameObjectChanged.class, this, this::onGameObjectChanged); - eventBus.subscribe(GameObjectDespawned.class, this, this::onGameObjectDespawned); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(ItemContainerChanged.class, this, this::onItemContainerChanged); - eventBus.subscribe(OverheadTextChanged.class, this, this::onOverheadTextChanged); - eventBus.subscribe(OverlayMenuClicked.class, this, this::onOverlayMenuClicked); - } - + @Subscribe private void onOverlayMenuClicked(OverlayMenuClicked overlayMenuClicked) { OverlayMenuEntry overlayMenuEntry = overlayMenuClicked.getEntry(); @@ -287,6 +261,7 @@ public class MotherlodePlugin extends Plugin } } + @Subscribe void onVarbitChanged(VarbitChanged event) { if (inMlm) @@ -309,6 +284,7 @@ public class MotherlodePlugin extends Plugin } } + @Subscribe private void onChatMessage(ChatMessage event) { if (!inMlm || event.getType() != ChatMessageType.SPAM) @@ -372,6 +348,7 @@ public class MotherlodePlugin extends Plugin } } + @Subscribe private void onMenuOptionClicked(MenuOptionClicked menu) { if (!inMlm) @@ -379,7 +356,7 @@ public class MotherlodePlugin extends Plugin return; } - if (MINE_SPOTS.contains(menu.getIdentifier()) && menu.getMenuOpcode() == MenuOpcode.GAME_OBJECT_FIRST_OPTION) + if (MINE_SPOTS.contains(menu.getIdentifier()) && menu.getMenuOpcode() == MenuOpcode.GAME_OBJECT_FIRST_OPTION) { resetIdleChecks(); int veinX = menu.getParam0(); @@ -388,6 +365,7 @@ public class MotherlodePlugin extends Plugin } } + @Subscribe private void onGameTick(GameTick event) { if (!inMlm) @@ -420,7 +398,8 @@ public class MotherlodePlugin extends Plugin } } - private void onAnimationChanged (AnimationChanged event) + @Subscribe + private void onAnimationChanged(AnimationChanged event) { if (!inMlm) { @@ -489,6 +468,7 @@ public class MotherlodePlugin extends Plugin } } + @Subscribe private void onWidgetLoaded(WidgetLoaded event) { if (!inMlm || targetVeinLocation == null) @@ -525,6 +505,7 @@ public class MotherlodePlugin extends Plugin notifier.notify(client.getLocalPlayer().getName() + " has stopped mining!"); } + @Subscribe private void onWallObjectSpawned(WallObjectSpawned event) { if (!inMlm) @@ -546,6 +527,7 @@ public class MotherlodePlugin extends Plugin } } + @Subscribe private void onWallObjectChanged(WallObjectChanged event) { if (!inMlm) @@ -563,6 +545,7 @@ public class MotherlodePlugin extends Plugin } } + @Subscribe private void onWallObjectDespawned(WallObjectDespawned event) { if (!inMlm) @@ -574,6 +557,7 @@ public class MotherlodePlugin extends Plugin veins.remove(wallObject); } + @Subscribe private void onGameObjectSpawned(GameObjectSpawned event) { if (!inMlm) @@ -588,6 +572,7 @@ public class MotherlodePlugin extends Plugin } } + @Subscribe private void onGameObjectChanged(GameObjectChanged event) { if (!inMlm) @@ -606,6 +591,7 @@ public class MotherlodePlugin extends Plugin } + @Subscribe private void onGameObjectDespawned(GameObjectDespawned event) { if (!inMlm) @@ -617,6 +603,7 @@ public class MotherlodePlugin extends Plugin rocks.remove(gameObject); } + @Subscribe void onGameStateChanged(GameStateChanged event) { if (event.getGameState() == GameState.LOADING) @@ -634,6 +621,7 @@ public class MotherlodePlugin extends Plugin } } + @Subscribe void onItemContainerChanged(ItemContainerChanged event) { final ItemContainer container = event.getItemContainer(); @@ -743,6 +731,7 @@ public class MotherlodePlugin extends Plugin return Perspective.getTileHeight(client, localPoint, 0) < UPPER_FLOOR_HEIGHT; } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("motherlode")) @@ -769,6 +758,7 @@ public class MotherlodePlugin extends Plugin this.payDirtMsg = config.payDirtMsg(); } + @Subscribe private void onOverheadTextChanged(OverheadTextChanged event) { if (!payDirtMsg || Strings.isNullOrEmpty(event.getOverheadText()) || !(event.getActor() instanceof NPC)) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/mousehighlight/MouseHighlightOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/mousehighlight/MouseHighlightOverlay.java index 254be2a75b..62bd0d1a0f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/mousehighlight/MouseHighlightOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/mousehighlight/MouseHighlightOverlay.java @@ -146,7 +146,7 @@ class MouseHighlightOverlay extends Overlay private boolean shouldNotRenderMenuAction(int type) { return type == MenuOpcode.RUNELITE_OVERLAY.getId() - || (!plugin.isRightClickTooltipEnabled() && isMenuActionRightClickOnly(type)); + || (!plugin.isRightClickTooltipEnabled() && isMenuActionRightClickOnly(type)); } private boolean isMenuActionRightClickOnly(int type) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/mousehighlight/MouseHighlightPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/mousehighlight/MouseHighlightPlugin.java index 2de33a9727..eadb926055 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/mousehighlight/MouseHighlightPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/mousehighlight/MouseHighlightPlugin.java @@ -38,7 +38,7 @@ import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetID; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -54,6 +54,7 @@ public class MouseHighlightPlugin extends Plugin { @Inject MouseHighlightConfig config; + @Inject private Client client; @@ -63,9 +64,6 @@ public class MouseHighlightPlugin extends Plugin @Inject private MouseHighlightOverlay overlay; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) private boolean mainTooltip; @Getter(AccessLevel.PACKAGE) @@ -84,32 +82,22 @@ public class MouseHighlightPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); adjustTips(); overlayManager.add(overlay); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - resetTips(); overlayManager.remove(overlay); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(WidgetLoaded.class, this, this::onWidgetLoaded); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - } - + @Subscribe private void onGameStateChanged(GameStateChanged event) { if (event.getGameState() == GameState.LOGGED_IN) @@ -118,6 +106,7 @@ public class MouseHighlightPlugin extends Plugin } } + @Subscribe private void onWidgetLoaded(WidgetLoaded event) { if (event.getGroupId() == WidgetID.SPELLBOOK_GROUP_ID || event.getGroupId() == WidgetID.COMBAT_GROUP_ID) @@ -126,6 +115,7 @@ public class MouseHighlightPlugin extends Plugin } } + @Subscribe private void onGameTick(GameTick event) { adjustTips(); @@ -179,6 +169,7 @@ public class MouseHighlightPlugin extends Plugin widget.setHidden(hidden); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("motherlode")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTAPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTAPlugin.java index a5531dbcde..282a52c76c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTAPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTAPlugin.java @@ -52,17 +52,22 @@ public class MTAPlugin extends Plugin @Inject private AlchemyRoom alchemyRoom; + @Inject private GraveyardRoom graveyardRoom; + @Inject private TelekineticRoom telekineticRoom; + @Inject private EnchantmentRoom enchantmentRoom; @Inject private EventBus eventBus; + @Inject private MTASceneOverlay sceneOverlay; + @Inject private MTAInventoryOverlay inventoryOverlay; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/mta/alchemy/AlchemyItem.java b/runelite-client/src/main/java/net/runelite/client/plugins/mta/alchemy/AlchemyItem.java index c7f45bfc50..4d4da7c1cb 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/mta/alchemy/AlchemyItem.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/mta/alchemy/AlchemyItem.java @@ -24,6 +24,7 @@ */ package net.runelite.client.plugins.mta.alchemy; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.ItemID; @@ -38,9 +39,9 @@ public enum AlchemyItem POSSIBLY_EMPTY("", ItemID.CAKE_OF_GUIDANCE), UNKNOWN("Unknown", ItemID.CAKE_OF_GUIDANCE); - @Getter + @Getter(AccessLevel.PACKAGE) private final int id; - @Getter + @Getter(AccessLevel.PACKAGE) private final String name; AlchemyItem(final String name, final int id) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/mta/telekinetic/TelekineticRoom.java b/runelite-client/src/main/java/net/runelite/client/plugins/mta/telekinetic/TelekineticRoom.java index 01c6983d99..602a94af93 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/mta/telekinetic/TelekineticRoom.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/mta/telekinetic/TelekineticRoom.java @@ -81,7 +81,7 @@ public class TelekineticRoom extends MTARoom private Rectangle bounds; private NPC guardian; private Maze maze; - private EventBus eventBus; + private final EventBus eventBus; @Inject private TelekineticRoom(MTAConfig config, Client client, EventBus eventBus) @@ -114,7 +114,7 @@ public class TelekineticRoom extends MTARoom telekineticWalls.clear(); } - public void onWallObjectSpawned(WallObjectSpawned event) + private void onWallObjectSpawned(WallObjectSpawned event) { final WallObject wall = event.getWallObject(); if (wall.getId() != TELEKINETIC_WALL) @@ -125,7 +125,7 @@ public class TelekineticRoom extends MTARoom telekineticWalls.add(wall); } - public void onGameStateChanged(GameStateChanged event) + private void onGameStateChanged(GameStateChanged event) { if (event.getGameState() == GameState.LOADING) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/multiindicators/MapLocations.java b/runelite-client/src/main/java/net/runelite/client/plugins/multiindicators/MapLocations.java index ae21c93190..be4008b8eb 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/multiindicators/MapLocations.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/multiindicators/MapLocations.java @@ -30,6 +30,7 @@ import java.awt.Rectangle; import java.awt.Shape; import java.awt.geom.Area; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import net.runelite.api.Constants; @@ -127,10 +128,7 @@ public class MapLocations private static void initializeWithEmptyLists(List[] array) { - for (int i = 0; i < array.length; i++) - { - array[i] = new ArrayList<>(); - } + Arrays.fill(array, new ArrayList<>()); } static diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/multiindicators/MultiIndicatorsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/multiindicators/MultiIndicatorsOverlay.java index 129c63317f..5129025cac 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/multiindicators/MultiIndicatorsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/multiindicators/MultiIndicatorsOverlay.java @@ -33,11 +33,11 @@ import java.awt.Rectangle; import java.awt.geom.GeneralPath; import javax.inject.Inject; import javax.inject.Singleton; -import net.runelite.api.geometry.Geometry; import net.runelite.api.Client; import net.runelite.api.Perspective; import net.runelite.api.Point; import net.runelite.api.coords.LocalPoint; +import net.runelite.api.geometry.Geometry; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/multiindicators/MultiIndicatorsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/multiindicators/MultiIndicatorsPlugin.java index d4770dd3d7..85dcbbada9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/multiindicators/MultiIndicatorsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/multiindicators/MultiIndicatorsPlugin.java @@ -49,7 +49,7 @@ import net.runelite.api.events.GameStateChanged; import net.runelite.api.geometry.Geometry; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -84,9 +84,6 @@ public class MultiIndicatorsPlugin extends Plugin @Inject private OverlayManager overlayManager; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) private GeneralPath[] multicombatPathToDisplay; @@ -130,10 +127,9 @@ public class MultiIndicatorsPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); overlayManager.add(overlay); overlayManager.add(minimapOverlay); @@ -150,22 +146,14 @@ public class MultiIndicatorsPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(overlay); overlayManager.remove(minimapOverlay); uninitializePaths(); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - } - private void initializePaths() { multicombatPathToDisplay = new GeneralPath[Constants.MAX_Z]; @@ -279,7 +267,7 @@ public class MultiIndicatorsPlugin extends Plugin private void findLinesInScene() { inDeadman = client.getWorldType().stream().anyMatch(x -> - x == WorldType.DEADMAN || x == WorldType.SEASONAL_DEADMAN); + x == WorldType.DEADMAN); inPvp = client.getWorldType().stream().anyMatch(x -> x == WorldType.PVP || x == WorldType.HIGH_RISK); @@ -372,6 +360,7 @@ public class MultiIndicatorsPlugin extends Plugin return false; } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("multiindicators")) @@ -391,6 +380,7 @@ public class MultiIndicatorsPlugin extends Plugin } } + @Subscribe private void onGameStateChanged(GameStateChanged event) { if (event.getGameState() == GameState.LOGGED_IN) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/music/MusicConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/music/MusicConfig.java index 85381a0345..1839c1fca1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/music/MusicConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/music/MusicConfig.java @@ -31,6 +31,50 @@ import net.runelite.client.config.ConfigItem; @ConfigGroup("music") public interface MusicConfig extends Config { + @ConfigItem( + keyName = "muteOwnAreaSounds", + name = "Mute player area sounds", + description = "Mute area sounds caused by yourself", + position = 0 + ) + default boolean muteOwnAreaSounds() + { + return false; + } + + @ConfigItem( + keyName = "muteOtherAreaSounds", + name = "Mute other players' area sounds", + description = "Mute area sounds caused by other players", + position = 1 + ) + default boolean muteOtherAreaSounds() + { + return false; + } + + @ConfigItem( + keyName = "muteOtherAreaNPCSounds", + name = "Mute NPCs' area sounds", + description = "Mute area sounds caused by NPCs", + position = 2 + ) + default boolean muteNpcAreaSounds() + { + return false; + } + + @ConfigItem( + keyName = "muteOtherAreaEnvironmentSounds", + name = "Mute environment area sounds", + description = "Mute area sounds caused by neither NPCs nor players", + position = 3 + ) + default boolean muteEnvironmentAreaSounds() + { + return false; + } + @ConfigItem( keyName = "musicVolume", name = "", @@ -87,14 +131,4 @@ public interface MusicConfig extends Config hidden = true ) void setAreaSoundEffectVolume(int vol); - - @ConfigItem( - keyName = "muteOtherAreaSounds", - name = "Mute others' area sounds", - description = "Mute area sounds caused from other players" - ) - default boolean muteOtherAreaSounds() - { - return false; - } } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/music/MusicPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/music/MusicPlugin.java index 1429225247..7ee6ca418f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/music/MusicPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/music/MusicPlugin.java @@ -25,10 +25,12 @@ */ package net.runelite.client.plugins.music; +import com.google.common.collect.ImmutableSet; import com.google.inject.Provides; import java.util.Arrays; import java.util.Collection; import java.util.Comparator; +import java.util.Set; import java.util.function.BiConsumer; import java.util.function.ToIntFunction; import java.util.stream.Collectors; @@ -40,6 +42,7 @@ import lombok.Setter; import net.runelite.api.Actor; import net.runelite.api.Client; import net.runelite.api.GameState; +import net.runelite.api.NPC; import net.runelite.api.Player; import net.runelite.api.ScriptID; import net.runelite.api.SoundEffectID; @@ -47,7 +50,6 @@ import net.runelite.api.SpriteID; import net.runelite.api.VarClientInt; import net.runelite.api.VarPlayer; import net.runelite.api.events.AreaSoundEffectPlayed; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.ScriptCallbackEvent; import net.runelite.api.events.VarClientIntChanged; @@ -62,7 +64,8 @@ import net.runelite.api.widgets.WidgetPositionMode; import net.runelite.api.widgets.WidgetType; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.chatbox.ChatboxPanelManager; import net.runelite.client.game.chatbox.ChatboxTextInput; import net.runelite.client.plugins.Plugin; @@ -75,6 +78,10 @@ import net.runelite.client.plugins.PluginDescriptor; ) public class MusicPlugin extends Plugin { + private static final Set SOURCELESS_PLAYER_SOUNDS = ImmutableSet.of( + SoundEffectID.TELEPORT_VWOOP + ); + @Inject private Client client; @@ -87,9 +94,6 @@ public class MusicPlugin extends Plugin @Inject private ChatboxPanelManager chatboxPanelManager; - @Inject - private EventBus eventBus; - private ChatboxTextInput searchInput; private Widget musicSearchButton; @@ -102,7 +106,6 @@ public class MusicPlugin extends Plugin @Override protected void startUp() { - addSubscriptions(); clientThread.invoke(() -> { @@ -132,17 +135,7 @@ public class MusicPlugin extends Plugin return configManager.getConfig(MusicConfig.class); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(WidgetLoaded.class, this, this::onWidgetLoaded); - eventBus.subscribe(VarClientIntChanged.class, this, this::onVarClientIntChanged); - eventBus.subscribe(VolumeChanged.class, this, this::onVolumeChanged); - eventBus.subscribe(ScriptCallbackEvent.class, this, this::onScriptCallbackEvent); - eventBus.subscribe(AreaSoundEffectPlayed.class, this, this::onAreaSoundEffectPlayed); - } - + @Subscribe private void onGameStateChanged(GameStateChanged gameStateChanged) { if (gameStateChanged.getGameState() == GameState.LOGIN_SCREEN) @@ -153,6 +146,7 @@ public class MusicPlugin extends Plugin } } + @Subscribe private void onWidgetLoaded(WidgetLoaded widgetLoaded) { if (widgetLoaded.getGroupId() == WidgetID.MUSIC_GROUP_ID) @@ -208,6 +202,7 @@ public class MusicPlugin extends Plugin musicFilterButton.revalidate(); } + @Subscribe private void onVarClientIntChanged(VarClientIntChanged varClientIntChanged) { if (isChatboxOpen() && !isOnMusicTab()) @@ -217,11 +212,13 @@ public class MusicPlugin extends Plugin } + @Subscribe private void onVolumeChanged(VolumeChanged volumeChanged) { applyMusicVolumeConfig(); } + @Subscribe private void onConfigChanged(ConfigChanged configChanged) { if (configChanged.getGroup().equals("music")) @@ -554,24 +551,42 @@ public class MusicPlugin extends Plugin } } + @Subscribe private void onScriptCallbackEvent(ScriptCallbackEvent ev) { - switch (ev.getEventName()) + // We have to override this script because it gets invoked periodically from the server + if ("optionsAllSounds".equals(ev.getEventName())) { - case "optionsAllSounds": - // We have to override this script because it gets invoked periodically from the server - client.getIntStack()[client.getIntStackSize() - 1] = -1; + client.getIntStack()[client.getIntStackSize() - 1] = -1; } } + @Subscribe private void onAreaSoundEffectPlayed(AreaSoundEffectPlayed areaSoundEffectPlayed) { Actor source = areaSoundEffectPlayed.getSource(); - if (source != client.getLocalPlayer() - && source instanceof Player + int soundId = areaSoundEffectPlayed.getSoundId(); + if (source == client.getLocalPlayer() + && musicConfig.muteOwnAreaSounds()) + { + areaSoundEffectPlayed.consume(); + } + else if (source != client.getLocalPlayer() + && (source instanceof Player || (source == null && SOURCELESS_PLAYER_SOUNDS.contains(soundId))) && musicConfig.muteOtherAreaSounds()) { areaSoundEffectPlayed.consume(); } + else if (source instanceof NPC + && musicConfig.muteNpcAreaSounds()) + { + areaSoundEffectPlayed.consume(); + } + else if (source == null + && !SOURCELESS_PLAYER_SOUNDS.contains(soundId) + && musicConfig.muteEnvironmentAreaSounds()) + { + areaSoundEffectPlayed.consume(); + } } -} \ No newline at end of file +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/musicindicator/MusicIndicatorPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/musicindicator/MusicIndicatorPlugin.java index cac7bd30f0..fb33999c9e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/musicindicator/MusicIndicatorPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/musicindicator/MusicIndicatorPlugin.java @@ -45,7 +45,7 @@ import net.runelite.client.chat.ChatColorType; import net.runelite.client.chat.ChatMessageBuilder; import net.runelite.client.chat.ChatMessageManager; import net.runelite.client.chat.QueuedMessage; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.PluginType; @@ -79,9 +79,6 @@ public class MusicIndicatorPlugin extends Plugin @Inject private ChatMessageManager chatMessageManager; - @Inject - private EventBus eventBus; - // Mapping of relevant varps to their values, used to compare against new values private final Map musicTrackVarpValues = new HashMap<>(); @@ -90,24 +87,16 @@ public class MusicIndicatorPlugin extends Plugin @Override public void startUp() { - addSubscriptions(); loggingIn = true; } @Override public void shutDown() { - eventBus.unregister(this); musicTrackVarpValues.clear(); } - private void addSubscriptions() - { - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(VarbitChanged.class, this, this::onVarbitChanged); - } - + @Subscribe private void onGameStateChanged(GameStateChanged event) { switch (event.getGameState()) @@ -120,6 +109,7 @@ public class MusicIndicatorPlugin extends Plugin } } + @Subscribe private void onGameTick(GameTick event) { if (!loggingIn) @@ -136,6 +126,7 @@ public class MusicIndicatorPlugin extends Plugin } } + @Subscribe private void onVarbitChanged(VarbitChanged event) { int idx = event.getIndex(); @@ -182,6 +173,7 @@ public class MusicIndicatorPlugin extends Plugin /** * Get the id for a track identified by the given varp and a bit index + * * @param variableId * @param bit * @return diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/nightmarezone/NightmareZoneOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/nightmarezone/NightmareZoneOverlay.java index e01c7615cf..a59d36bdfa 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/nightmarezone/NightmareZoneOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/nightmarezone/NightmareZoneOverlay.java @@ -111,12 +111,12 @@ class NightmareZoneOverlay extends Overlay tableComponent.setColumnAlignments(TableAlignment.LEFT, TableAlignment.RIGHT); tableComponent.addRow("Points:", QuantityFormatter.formatNumber(currentPoints)); tableComponent.addRow("Points/Hour:", QuantityFormatter.formatNumber(plugin.getPointsPerHour())); - + if (plugin.isShowtotalpoints()) { tableComponent.addRow("Total:", QuantityFormatter.formatNumber(totalPoints)); } - + panelComponent.getChildren().add(tableComponent); return panelComponent.render(graphics); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/nightmarezone/NightmareZonePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/nightmarezone/NightmareZonePlugin.java index ba05d529fa..4eda504879 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/nightmarezone/NightmareZonePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/nightmarezone/NightmareZonePlugin.java @@ -25,30 +25,29 @@ package net.runelite.client.plugins.nightmarezone; import com.google.inject.Provides; - import java.awt.Color; +import java.time.Duration; +import java.time.Instant; import java.util.Arrays; import javax.inject.Inject; import javax.inject.Singleton; import lombok.AccessLevel; -import java.time.Duration; -import java.time.Instant; import lombok.Getter; import net.runelite.api.ChatMessageType; import net.runelite.api.Client; import net.runelite.api.Varbits; import net.runelite.api.events.ChatMessage; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.GameTick; +import net.runelite.api.util.Text; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.Notifier; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.overlay.OverlayManager; -import net.runelite.api.util.Text; @PluginDescriptor( name = "Nightmare Zone", @@ -76,12 +75,9 @@ public class NightmareZonePlugin extends Plugin @Inject private NightmareZoneOverlay overlay; - @Inject - private EventBus eventBus; - - @Getter + @Getter(AccessLevel.PACKAGE) private int pointsPerHour; - + private Instant nmzSessionStartTime; // This starts as true since you need to get @@ -106,20 +102,17 @@ public class NightmareZonePlugin extends Plugin private Color absorptionColorBelowThreshold; @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); overlayManager.add(overlay); overlay.removeAbsorptionCounter(); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(overlay); overlay.removeAbsorptionCounter(); @@ -133,13 +126,7 @@ public class NightmareZonePlugin extends Plugin resetPointsPerHour(); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - } - + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("nightmareZone")) @@ -157,6 +144,7 @@ public class NightmareZonePlugin extends Plugin return configManager.getConfig(NightmareZoneConfig.class); } + @Subscribe private void onGameTick(GameTick event) { if (isNotInNightmareZone()) @@ -185,6 +173,7 @@ public class NightmareZonePlugin extends Plugin } } + @Subscribe private void onChatMessage(ChatMessage event) { if (event.getType() != ChatMessageType.GAMEMESSAGE diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/notes/NoteTab.java b/runelite-client/src/main/java/net/runelite/client/plugins/notes/NoteTab.java index d66026ff24..5103cdffe7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/notes/NoteTab.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/notes/NoteTab.java @@ -47,7 +47,7 @@ class NoteTab extends JPanel private final JTextArea notesEditor = new JTextArea(); private final UndoManager undoRedo = new UndoManager(); - private int index; + private final int index; NoteTab(NotesManager mManager, int mIndex) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/notes/NotesManager.java b/runelite-client/src/main/java/net/runelite/client/plugins/notes/NotesManager.java index bb77880b71..30f7fc14e6 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/notes/NotesManager.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/notes/NotesManager.java @@ -31,6 +31,7 @@ import java.util.List; import javax.inject.Inject; import javax.inject.Singleton; import joptsimple.internal.Strings; +import lombok.AccessLevel; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import net.runelite.client.config.ConfigManager; @@ -40,7 +41,7 @@ import net.runelite.client.plugins.notes.events.PageDeleted; @Singleton @Slf4j -public class NotesManager +class NotesManager { @Inject private ConfigManager configManager; @@ -51,7 +52,7 @@ public class NotesManager @Inject private EventBus eventBus; - @Getter + @Getter(AccessLevel.PACKAGE) private List notes = new ArrayList<>(); void loadNotes() @@ -62,9 +63,7 @@ public class NotesManager if (!Strings.isNullOrEmpty(configJson)) { final Gson gson = new Gson(); - notes = gson.fromJson(configJson, new TypeToken>() - { - }.getType()); + notes = gson.fromJson(configJson, new TypeToken>() {}.getType()); } if (notes == null) @@ -93,7 +92,7 @@ public class NotesManager save(); } - void save() + private void save() { final Gson gson = new Gson(); final String json = gson.toJson(notes); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/notes/NotesPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/notes/NotesPlugin.java index 7f5a5f4162..13d30f2a94 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/notes/NotesPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/notes/NotesPlugin.java @@ -29,7 +29,7 @@ import java.awt.image.BufferedImage; import javax.inject.Inject; import javax.inject.Singleton; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.SessionOpen; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -55,9 +55,6 @@ public class NotesPlugin extends Plugin @Inject private NotesManager notesManager; - @Inject - private EventBus eventBus; - private NotesPanel panel; private NavigationButton navButton; @@ -68,9 +65,8 @@ public class NotesPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { - eventBus.subscribe(SessionOpen.class, this, this::onSessionOpen); panel = injector.getInstance(NotesPanel.class); panel.init(config); @@ -93,11 +89,10 @@ public class NotesPlugin extends Plugin @Override protected void shutDown() { - eventBus.unregister(this); - clientToolbar.removeNavigation(navButton); } + @Subscribe private void onSessionOpen(SessionOpen event) { notesManager.loadNotes(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/notes/events/PageAdded.java b/runelite-client/src/main/java/net/runelite/client/plugins/notes/events/PageAdded.java index 710d1b5fd4..dfeb339b74 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/notes/events/PageAdded.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/notes/events/PageAdded.java @@ -1,5 +1,6 @@ package net.runelite.client.plugins.notes.events; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; @@ -8,7 +9,7 @@ import net.runelite.api.events.Event; @AllArgsConstructor public class PageAdded implements Event { - @Getter - @Setter + @Getter(AccessLevel.PUBLIC) + @Setter(AccessLevel.PUBLIC) private int index; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/notes/events/PageDeleted.java b/runelite-client/src/main/java/net/runelite/client/plugins/notes/events/PageDeleted.java index 060c65cd45..bf2358920c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/notes/events/PageDeleted.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/notes/events/PageDeleted.java @@ -1,5 +1,6 @@ package net.runelite.client.plugins.notes.events; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; @@ -8,7 +9,7 @@ import net.runelite.api.events.Event; @AllArgsConstructor public class PageDeleted implements Event { - @Getter - @Setter + @Getter(AccessLevel.PUBLIC) + @Setter(AccessLevel.PUBLIC) private int index; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/MemorizedNpc.java b/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/MemorizedNpc.java index b7022c56e5..4e0ba4d5d0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/MemorizedNpc.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/MemorizedNpc.java @@ -34,6 +34,7 @@ import lombok.Setter; import net.runelite.api.NPC; import net.runelite.api.NPCDefinition; import net.runelite.api.coords.WorldPoint; + @Getter(AccessLevel.PACKAGE) class MemorizedNpc { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsInput.java b/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsInput.java index a744208264..82cf727fb1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsInput.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsInput.java @@ -28,7 +28,7 @@ import java.awt.event.KeyEvent; import javax.inject.Inject; import net.runelite.client.input.KeyListener; -public class NpcIndicatorsInput implements KeyListener +class NpcIndicatorsInput implements KeyListener { private static final int HOTKEY = KeyEvent.VK_SHIFT; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPlugin.java index 3d5fb0096c..1912a1c492 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPlugin.java @@ -52,7 +52,6 @@ import net.runelite.api.MenuOpcode; import static net.runelite.api.MenuOpcode.MENU_ACTION_DEPRIORITIZE_OFFSET; import net.runelite.api.NPC; import net.runelite.api.coords.WorldPoint; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.FocusChanged; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; @@ -65,7 +64,8 @@ import net.runelite.api.events.NpcSpawned; import net.runelite.api.util.Text; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.input.KeyManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -120,9 +120,6 @@ public class NpcIndicatorsPlugin extends Plugin @Inject private ClientThread clientThread; - @Inject - private EventBus eventbus; - @Setter(AccessLevel.PACKAGE) private boolean hotKeyPressed = false; @@ -215,10 +212,9 @@ public class NpcIndicatorsPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); overlayManager.add(npcSceneOverlay); overlayManager.add(npcMinimapOverlay); @@ -232,10 +228,8 @@ public class NpcIndicatorsPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventbus.unregister(this); - overlayManager.remove(npcSceneOverlay); overlayManager.remove(npcMinimapOverlay); deadNpcsToDisplay.clear(); @@ -248,20 +242,7 @@ public class NpcIndicatorsPlugin extends Plugin keyManager.unregisterKeyListener(inputListener); } - private void addSubscriptions() - { - eventbus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventbus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventbus.subscribe(FocusChanged.class, this, this::onFocusChanged); - eventbus.subscribe(MenuEntryAdded.class, this, this::onMenuEntryAdded); - eventbus.subscribe(MenuOptionClicked.class, this, this::onMenuOptionClicked); - eventbus.subscribe(NpcSpawned.class, this, this::onNpcSpawned); - eventbus.subscribe(NpcDefinitionChanged.class, this, this::onNpcDefinitionChanged); - eventbus.subscribe(NpcDespawned.class, this, this::onNpcDespawned); - eventbus.subscribe(GraphicsObjectCreated.class, this, this::onGraphicsObjectCreated); - eventbus.subscribe(GameTick.class, this, this::onGameTick); - } - + @Subscribe private void onGameStateChanged(GameStateChanged event) { if (event.getGameState() == GameState.LOGIN_SCREEN || @@ -275,6 +256,7 @@ public class NpcIndicatorsPlugin extends Plugin } } + @Subscribe private void onConfigChanged(ConfigChanged configChanged) { if (!configChanged.getGroup().equals("npcindicators")) @@ -288,6 +270,7 @@ public class NpcIndicatorsPlugin extends Plugin rebuildAllNpcs(); } + @Subscribe private void onFocusChanged(FocusChanged focusChanged) { if (!focusChanged.isFocused()) @@ -296,6 +279,7 @@ public class NpcIndicatorsPlugin extends Plugin } } + @Subscribe private void onMenuEntryAdded(MenuEntryAdded event) { int type = event.getOpcode(); @@ -328,6 +312,7 @@ public class NpcIndicatorsPlugin extends Plugin } } + @Subscribe private void onMenuOptionClicked(MenuOptionClicked click) { if (click.getMenuOpcode() != MenuOpcode.RUNELITE || @@ -364,6 +349,7 @@ public class NpcIndicatorsPlugin extends Plugin click.consume(); } + @Subscribe private void onNpcSpawned(NpcSpawned npcSpawned) { NPC npc = npcSpawned.getNpc(); @@ -375,6 +361,7 @@ public class NpcIndicatorsPlugin extends Plugin } } + @Subscribe private void onNpcDefinitionChanged(NpcDefinitionChanged event) { NPC npc = event.getNpc(); @@ -391,6 +378,7 @@ public class NpcIndicatorsPlugin extends Plugin } } + @Subscribe private void onNpcDespawned(NpcDespawned npcDespawned) { final NPC npc = npcDespawned.getNpc(); @@ -403,6 +391,7 @@ public class NpcIndicatorsPlugin extends Plugin highlightedNpcs.remove(npc); } + @Subscribe private void onGraphicsObjectCreated(GraphicsObjectCreated event) { final GraphicsObject go = event.getGraphicsObject(); @@ -413,6 +402,7 @@ public class NpcIndicatorsPlugin extends Plugin } } + @Subscribe private void onGameTick(GameTick event) { removeOldHighlightedRespawns(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcSceneOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcSceneOverlay.java index 2558a3b9cd..895d754a2a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcSceneOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcSceneOverlay.java @@ -220,9 +220,7 @@ public class NpcSceneOverlay extends Overlay final Color squareColor = color; getSquare(wp, size).forEach(square -> - { - drawTile(graphics, square, squareColor, 1, 255, 50); - }); + drawTile(graphics, square, squareColor, 1, 255, 50)); break; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/npcstatus/MemorizedNPC.java b/runelite-client/src/main/java/net/runelite/client/plugins/npcstatus/MemorizedNPC.java index 8ae35eb262..a95f30014a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/npcstatus/MemorizedNPC.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/npcstatus/MemorizedNPC.java @@ -29,11 +29,11 @@ import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; +import net.runelite.api.Actor; import net.runelite.api.NPC; import net.runelite.api.coords.WorldArea; -import net.runelite.api.Actor; -@Getter +@Getter(AccessLevel.PACKAGE) class MemorizedNPC { private NPC npc; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/npcstatus/NpcStatusPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/npcstatus/NpcStatusPlugin.java index 3ef4037d39..92066fc671 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/npcstatus/NpcStatusPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/npcstatus/NpcStatusPlugin.java @@ -46,7 +46,7 @@ import net.runelite.api.events.NpcDespawned; import net.runelite.api.events.NpcSpawned; import net.runelite.api.events.SpotAnimationChanged; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.NPCManager; import net.runelite.client.plugins.Plugin; @@ -80,9 +80,6 @@ public class NpcStatusPlugin extends Plugin @Inject private NpcStatusOverlay npcStatusOverlay; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) private final Set memorizedNPCs = new HashSet<>(); @@ -102,34 +99,21 @@ public class NpcStatusPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { - addSubscriptions(); this.getRange = config.getRange(); overlayManager.add(npcStatusOverlay); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(npcStatusOverlay); memorizedNPCs.clear(); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(NpcSpawned.class, this, this::onNpcSpawned); - eventBus.subscribe(NpcDespawned.class, this, this::onNpcDespawned); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(HitsplatApplied.class, this, this::onHitsplatApplied); - eventBus.subscribe(SpotAnimationChanged.class, this, this::onSpotAnimationChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - } - + @Subscribe private void onNpcSpawned(NpcSpawned npcSpawned) { final NPC npc = npcSpawned.getNpc(); @@ -147,12 +131,14 @@ public class NpcStatusPlugin extends Plugin memorizedNPCs.add(new MemorizedNPC(npc, AttackSpeed, npc.getWorldArea())); } + @Subscribe private void onNpcDespawned(NpcDespawned npcDespawned) { final NPC npc = npcDespawned.getNpc(); memorizedNPCs.removeIf(c -> c.getNpc() == npc); } + @Subscribe private void onGameStateChanged(GameStateChanged event) { if (event.getGameState() == GameState.LOGIN_SCREEN || @@ -162,6 +148,7 @@ public class NpcStatusPlugin extends Plugin } } + @Subscribe private void onHitsplatApplied(HitsplatApplied event) { if (event.getActor().getInteracting() != client.getLocalPlayer()) @@ -195,6 +182,7 @@ public class NpcStatusPlugin extends Plugin } + @Subscribe private void onSpotAnimationChanged(SpotAnimationChanged event) { if ((event.getActor().getSpotAnimation() == GraphicID.SPLASH) && event.getActor() instanceof NPC) @@ -285,12 +273,14 @@ public class NpcStatusPlugin extends Plugin } } + @Subscribe private void onGameTick(GameTick event) { checkStatus(); lastPlayerLocation = client.getLocalPlayer().getWorldArea(); } + @Subscribe private void onConfigChanged(ConfigChanged configChanged) { if (!configChanged.getGroup().equals("npcstatus")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/NpcAggroAreaOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/NpcAggroAreaOverlay.java index 916b74450a..3fb8cf2bf4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/NpcAggroAreaOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/NpcAggroAreaOverlay.java @@ -24,8 +24,6 @@ */ package net.runelite.client.plugins.npcunaggroarea; -import javax.inject.Singleton; -import net.runelite.api.geometry.Geometry; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Dimension; @@ -34,10 +32,12 @@ import java.awt.Rectangle; import java.awt.geom.GeneralPath; import java.time.Instant; import javax.inject.Inject; +import javax.inject.Singleton; import net.runelite.api.Client; import net.runelite.api.Perspective; import net.runelite.api.Point; import net.runelite.api.coords.LocalPoint; +import net.runelite.api.geometry.Geometry; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/NpcAggroAreaPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/NpcAggroAreaPlugin.java index 39df118ad4..29ebd0a5f5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/NpcAggroAreaPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/NpcAggroAreaPlugin.java @@ -51,14 +51,14 @@ import net.runelite.api.Player; import net.runelite.api.coords.LocalPoint; import net.runelite.api.coords.WorldArea; import net.runelite.api.coords.WorldPoint; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.NpcSpawned; import net.runelite.api.geometry.Geometry; import net.runelite.client.Notifier; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -119,9 +119,6 @@ public class NpcAggroAreaPlugin extends Plugin @Inject private Notifier notifier; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) private final WorldPoint[] safeCenters = new WorldPoint[2]; @@ -160,10 +157,9 @@ public class NpcAggroAreaPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); overlayManager.add(overlay); if (this.showNotWorkingOverlay) @@ -177,10 +173,8 @@ public class NpcAggroAreaPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - removeTimer(); overlayManager.remove(overlay); if (notWorkingOverlayShown) @@ -198,14 +192,6 @@ public class NpcAggroAreaPlugin extends Plugin Arrays.fill(linesToDisplay, null); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(NpcSpawned.class, this, this::onNpcSpawned); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - } - private Area generateSafeArea() { final Area area = new Area(); @@ -357,6 +343,7 @@ public class NpcAggroAreaPlugin extends Plugin checkAreaNpcs(client.getCachedNPCs()); } + @Subscribe private void onNpcSpawned(NpcSpawned event) { if (this.alwaysActive) @@ -367,6 +354,7 @@ public class NpcAggroAreaPlugin extends Plugin checkAreaNpcs(event.getNpc()); } + @Subscribe private void onGameTick(GameTick event) { WorldPoint newLocation = client.getLocalPlayer().getWorldLocation(); @@ -406,6 +394,7 @@ public class NpcAggroAreaPlugin extends Plugin lastPlayerLocation = newLocation; } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("npcUnaggroArea")) @@ -496,6 +485,7 @@ public class NpcAggroAreaPlugin extends Plugin } } + @Subscribe private void onGameStateChanged(GameStateChanged event) { switch (event.getGameState()) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectIndicatorsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectIndicatorsPlugin.java index c7690a5369..517e7f7349 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectIndicatorsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectIndicatorsPlugin.java @@ -45,7 +45,6 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; -import static net.runelite.api.Constants.REGION_SIZE; import net.runelite.api.DecorativeObject; import net.runelite.api.GameObject; import net.runelite.api.GameState; @@ -72,7 +71,7 @@ import net.runelite.api.events.WallObjectChanged; import net.runelite.api.events.WallObjectDespawned; import net.runelite.api.events.WallObjectSpawned; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.input.KeyListener; import net.runelite.client.input.KeyManager; @@ -118,9 +117,6 @@ public class ObjectIndicatorsPlugin extends Plugin implements KeyListener @Inject private KeyManager keyManager; - @Inject - private EventBus eventbus; - @Getter(AccessLevel.PACKAGE) private RenderStyle objectMarkerRenderStyle; @Getter(AccessLevel.PACKAGE) @@ -140,7 +136,6 @@ public class ObjectIndicatorsPlugin extends Plugin implements KeyListener protected void startUp() { updateConfig(); - addSubscriptions(); overlayManager.add(overlay); keyManager.registerKeyListener(this); @@ -149,8 +144,6 @@ public class ObjectIndicatorsPlugin extends Plugin implements KeyListener @Override protected void shutDown() { - eventbus.unregister(this); - overlayManager.remove(overlay); keyManager.unregisterKeyListener(this); points.clear(); @@ -158,24 +151,6 @@ public class ObjectIndicatorsPlugin extends Plugin implements KeyListener hotKeyPressed = false; } - private void addSubscriptions() - { - eventbus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventbus.subscribe(FocusChanged.class, this, this::onFocusChanged); - eventbus.subscribe(WallObjectSpawned.class, this, this::onWallObjectSpawned); - eventbus.subscribe(WallObjectChanged.class, this, this::onWallObjectChanged); - eventbus.subscribe(WallObjectDespawned.class, this, this::onWallObjectDespawned); - eventbus.subscribe(GameObjectSpawned.class, this, this::onGameObjectSpawned); - eventbus.subscribe(DecorativeObjectSpawned.class, this, this::onDecorativeObjectSpawned); - eventbus.subscribe(GameObjectDespawned.class, this, this::onGameObjectDespawned); - eventbus.subscribe(DecorativeObjectDespawned.class, this, this::onDecorativeObjectDespawned); - eventbus.subscribe(GroundObjectDespawned.class, this, this::onGroundObjectDespawned); - eventbus.subscribe(GroundObjectSpawned.class, this, this::onGroundObjectSpawned); - eventbus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventbus.subscribe(MenuOptionClicked.class, this, this::onMenuOptionClicked); - eventbus.subscribe(MenuEntryAdded.class, this, this::onMenuEntryAdded); - } - @Override public void keyTyped(KeyEvent e) { @@ -200,6 +175,7 @@ public class ObjectIndicatorsPlugin extends Plugin implements KeyListener } } + @Subscribe private void onFocusChanged(final FocusChanged event) { if (!event.isFocused()) @@ -208,11 +184,13 @@ public class ObjectIndicatorsPlugin extends Plugin implements KeyListener } } + @Subscribe private void onWallObjectSpawned(WallObjectSpawned event) { checkObjectPoints(event.getWallObject()); } + @Subscribe private void onWallObjectChanged(WallObjectChanged event) { WallObject previous = event.getPrevious(); @@ -222,45 +200,53 @@ public class ObjectIndicatorsPlugin extends Plugin implements KeyListener checkObjectPoints(wallObject); } + @Subscribe private void onWallObjectDespawned(WallObjectDespawned event) { objects.remove(event.getWallObject()); } + @Subscribe private void onGameObjectSpawned(GameObjectSpawned event) { final GameObject eventObject = event.getGameObject(); checkObjectPoints(eventObject); } + @Subscribe private void onDecorativeObjectSpawned(DecorativeObjectSpawned event) { final DecorativeObject eventObject = event.getDecorativeObject(); checkObjectPoints(eventObject); } + @Subscribe private void onGameObjectDespawned(GameObjectDespawned event) { objects.remove(event.getGameObject()); } + @Subscribe private void onDecorativeObjectDespawned(DecorativeObjectDespawned event) { objects.remove(event.getDecorativeObject()); } + @Subscribe private void onGroundObjectSpawned(GroundObjectSpawned groundObjectSpawned) { final GroundObject groundObject = groundObjectSpawned.getGroundObject(); checkObjectPoints(groundObject); } + @Subscribe private void onGroundObjectDespawned(GroundObjectDespawned groundObjectDespawned) { GroundObject groundObject = groundObjectDespawned.getGroundObject(); objects.remove(groundObject); } + @Subscribe private void onGameStateChanged(GameStateChanged gameStateChanged) { GameState gameState = gameStateChanged.getGameState(); @@ -286,6 +272,7 @@ public class ObjectIndicatorsPlugin extends Plugin implements KeyListener } } + @Subscribe private void onMenuEntryAdded(MenuEntryAdded event) { if (!hotKeyPressed || event.getOpcode() != MenuOpcode.EXAMINE_OBJECT.getId()) @@ -308,6 +295,7 @@ public class ObjectIndicatorsPlugin extends Plugin implements KeyListener client.setMenuEntries(menuEntries); } + @Subscribe private void onMenuOptionClicked(MenuOptionClicked event) { if (event.getMenuOpcode() != MenuOpcode.RUNELITE @@ -340,7 +328,7 @@ public class ObjectIndicatorsPlugin extends Plugin implements KeyListener return; } - markObject(name, object); + markObject(objectDefinition, name, object); } private void checkObjectPoints(TileObject object) @@ -361,11 +349,13 @@ public class ObjectIndicatorsPlugin extends Plugin implements KeyListener for (ObjectPoint objectPoint : objectPoints) { - if ((worldPoint.getX() & (REGION_SIZE - 1)) == objectPoint.getRegionX() - && (worldPoint.getY() & (REGION_SIZE - 1)) == objectPoint.getRegionY()) + if (worldPoint.getRegionX() == objectPoint.getRegionX() + && worldPoint.getRegionY() == objectPoint.getRegionY() + && object.getPlane() == objectPoint.getZ()) { // Transform object to get the name which matches against what we've stored - if (objectPoint.getName().equals(getObjectDefinition(object.getId()).getName())) + ObjectDefinition objectDefinition = getObjectDefinition(object.getId()); + if (objectDefinition != null && objectPoint.getName().equals(objectDefinition.getName())) { log.debug("Marking object {} due to matching {}", object, objectPoint); objects.add(object); @@ -443,13 +433,14 @@ public class ObjectIndicatorsPlugin extends Plugin implements KeyListener return false; } - private void markObject(String name, final TileObject object) + /** mark or unmark an object + * + * @param objectComposition transformed composition of object based on vars + * @param name name of objectComposition + * @param object tile object, for multilocs object.getId() is the base id + */ + private void markObject(ObjectDefinition objectComposition, String name, final TileObject object) { - if (object == null) - { - return; - } - final WorldPoint worldPoint = WorldPoint.fromLocalInstance(client, object.getLocalLocation()); if (worldPoint == null) { @@ -457,18 +448,29 @@ public class ObjectIndicatorsPlugin extends Plugin implements KeyListener } final int regionId = worldPoint.getRegionID(); final ObjectPoint point = new ObjectPoint( + object.getId(), name, regionId, - worldPoint.getX() & (REGION_SIZE - 1), - worldPoint.getY() & (REGION_SIZE - 1), + worldPoint.getRegionX(), + worldPoint.getRegionY(), client.getPlane()); Set objectPoints = points.computeIfAbsent(regionId, k -> new HashSet<>()); - if (objectPoints.contains(point)) + if (objects.remove(object)) { - objectPoints.remove(point); - objects.remove(object); + // Find the object point that caused this object to be marked, there are two cases: + // 1) object is a multiloc, the name may have changed since marking - match from base id + // 2) not a multiloc, but an object has spawned with an identical name and a different + // id as what was originally marked + if (!objectPoints.removeIf(op -> ((op.getId() == -1 || op.getId() == object.getId()) || op.getName().equals(objectComposition.getName())) + && op.getRegionX() == worldPoint.getRegionX() + && op.getRegionY() == worldPoint.getRegionY() + && op.getZ() == worldPoint.getPlane())) + { + log.warn("unable to find object point for unmarked object {}", object.getId()); + } + log.debug("Unmarking object: {}", point); } else @@ -515,6 +517,7 @@ public class ObjectIndicatorsPlugin extends Plugin implements KeyListener } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("objectindicators")) @@ -538,4 +541,4 @@ public class ObjectIndicatorsPlugin extends Plugin implements KeyListener ObjectDefinition objectComposition = client.getObjectDefinition(id); return objectComposition.getImpostorIds() == null ? objectComposition : objectComposition.getImpostor(); } -} \ No newline at end of file +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectPoint.java b/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectPoint.java index 576f0e7c72..ca8786faa3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectPoint.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectPoint.java @@ -25,11 +25,16 @@ package net.runelite.client.plugins.objectindicators; -import lombok.Value; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; -@Value +@Data +@NoArgsConstructor +@AllArgsConstructor class ObjectPoint { + private int id = -1; private String name; private int regionId; private int regionX; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/openosrs/OpenOSRSPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/openosrs/OpenOSRSPlugin.java index abd1a6cdab..676d4fb7f8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/openosrs/OpenOSRSPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/openosrs/OpenOSRSPlugin.java @@ -40,7 +40,7 @@ import static net.runelite.api.widgets.WidgetInfo.*; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.Keybind; import net.runelite.client.config.OpenOSRSConfig; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.input.KeyListener; import net.runelite.client.input.KeyManager; @@ -74,10 +74,7 @@ public class OpenOSRSPlugin extends Plugin @Inject private ClientThread clientThread; - @Inject - private EventBus eventbus; - - private HotkeyListener hotkeyListener = new HotkeyListener(() -> this.keybind) + private final HotkeyListener hotkeyListener = new HotkeyListener(() -> this.keybind) { @Override public void hotkeyPressed() @@ -94,9 +91,8 @@ public class OpenOSRSPlugin extends Plugin private Keybind keybind; @Override - protected void startUp() throws Exception + protected void startUp() { - addSubscriptions(); entered = -1; enterIdx = 0; @@ -106,10 +102,8 @@ public class OpenOSRSPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventbus.unregister(this); - entered = 0; enterIdx = 0; expectInput = false; @@ -117,6 +111,7 @@ public class OpenOSRSPlugin extends Plugin keyManager.unregisterKeyListener(hotkeyListener); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("openosrs")) @@ -145,12 +140,7 @@ public class OpenOSRSPlugin extends Plugin } } - private void addSubscriptions() - { - eventbus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventbus.subscribe(ScriptCallbackEvent.class, this, this::onScriptCallbackEvent); - } - + @Subscribe private void onScriptCallbackEvent(ScriptCallbackEvent e) { if (!config.keyboardPin()) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoOverlay.java index 8fb33c8164..fb9cc8f5ae 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoOverlay.java @@ -37,6 +37,7 @@ import net.runelite.api.Actor; import net.runelite.api.Client; import static net.runelite.api.MenuOpcode.RUNELITE_OVERLAY_CONFIG; import net.runelite.api.Varbits; +import net.runelite.api.util.Text; import net.runelite.client.ui.overlay.Overlay; import static net.runelite.client.ui.overlay.OverlayManager.OPTION_CONFIGURE; import net.runelite.client.ui.overlay.OverlayMenuEntry; @@ -46,7 +47,6 @@ import net.runelite.client.ui.overlay.components.ComponentConstants; import net.runelite.client.ui.overlay.components.PanelComponent; import net.runelite.client.ui.overlay.components.ProgressBarComponent; import net.runelite.client.ui.overlay.components.TitleComponent; -import net.runelite.api.util.Text; @Singleton class OpponentInfoOverlay extends Overlay diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoPlugin.java index 5db7532ebd..79c35128c0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoPlugin.java @@ -50,6 +50,7 @@ import net.runelite.api.events.MenuOpened; import net.runelite.api.util.Text; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.HiscoreManager; import net.runelite.client.game.NPCManager; @@ -128,7 +129,7 @@ public class OpponentInfoPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { this.attackingColTag = ColorUtil.colorTag(config.attackingColor()); this.showAttackers = config.showAttackersMenu(); @@ -136,16 +137,15 @@ public class OpponentInfoPlugin extends Plugin this.showHitpoints = config.showHitpointsMenu(); updateConfig(); - addSubscriptions(); + updateMenuSubs(); overlayManager.add(opponentInfoOverlay); overlayManager.add(playerComparisonOverlay); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); eventBus.unregister(MENU); lastOpponent = null; @@ -154,15 +154,6 @@ public class OpponentInfoPlugin extends Plugin overlayManager.remove(playerComparisonOverlay); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(InteractingChanged.class, this, this::onInteractingChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - updateMenuSubs(); - } - private void updateMenuSubs() { if (showAttackers || showAttacking || showHitpoints) @@ -176,6 +167,7 @@ public class OpponentInfoPlugin extends Plugin } } + @Subscribe private void onGameStateChanged(GameStateChanged gameStateChanged) { if (gameStateChanged.getGameState() != GameState.LOGGED_IN) @@ -184,24 +176,21 @@ public class OpponentInfoPlugin extends Plugin } final EnumSet worldType = client.getWorldType(); - if (worldType.contains(WorldType.DEADMAN_TOURNAMENT)) - { - hiscoreEndpoint = HiscoreEndpoint.DEADMAN_TOURNAMENT; - } - else if (worldType.contains(WorldType.SEASONAL_DEADMAN)) - { - hiscoreEndpoint = HiscoreEndpoint.SEASONAL_DEADMAN; - } - else if (worldType.contains(WorldType.DEADMAN)) + if (worldType.contains(WorldType.DEADMAN)) { hiscoreEndpoint = HiscoreEndpoint.DEADMAN; } + else if (worldType.contains(WorldType.LEAGUE)) + { + hiscoreEndpoint = HiscoreEndpoint.LEAGUE; + } else { hiscoreEndpoint = HiscoreEndpoint.NORMAL; } } + @Subscribe private void onInteractingChanged(InteractingChanged event) { if (event.getSource() != client.getLocalPlayer()) @@ -220,6 +209,7 @@ public class OpponentInfoPlugin extends Plugin lastOpponent = opponent; } + @Subscribe private void onGameTick(GameTick gameTick) { if (lastOpponent != null @@ -232,6 +222,7 @@ public class OpponentInfoPlugin extends Plugin } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("opponentinfo")) @@ -417,9 +408,9 @@ public class OpponentInfoPlugin extends Plugin final int start = hadAggro ? 1 + COLOR_TAG_LENGTH : COLOR_TAG_LENGTH; target = (hasAggro ? '*' : "") + - (isTarget ? attackingColTag : - player ? ColorUtil.colorStartTag(0xffffff) : ColorUtil.colorStartTag(0xffff00)) + - target.substring(start); + (isTarget ? attackingColTag : + player ? ColorUtil.colorStartTag(0xffffff) : ColorUtil.colorStartTag(0xffff00)) + + target.substring(start); } else if (aggroChanged) { @@ -478,7 +469,7 @@ public class OpponentInfoPlugin extends Plugin } else { - result = "(" + (100 * ratio) / health + "%)"; + result = "(" + (100 * ratio) / health + "%)"; } return withColorTag ? ColorUtil.colorStartTag(0xff0000) + result : result; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/PlayerComparisonOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/PlayerComparisonOverlay.java index 2b98855c9e..c3689f89e6 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/PlayerComparisonOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/PlayerComparisonOverlay.java @@ -35,6 +35,7 @@ import net.runelite.api.Client; import static net.runelite.api.MenuOpcode.RUNELITE_OVERLAY_CONFIG; import net.runelite.api.Player; import net.runelite.api.Skill; +import net.runelite.api.util.Text; import net.runelite.client.game.HiscoreManager; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; @@ -46,7 +47,6 @@ import net.runelite.client.ui.overlay.components.TitleComponent; import net.runelite.client.ui.overlay.components.table.TableAlignment; import net.runelite.client.ui.overlay.components.table.TableComponent; import net.runelite.client.util.ColorUtil; -import net.runelite.api.util.Text; import net.runelite.http.api.hiscore.HiscoreResult; import net.runelite.http.api.hiscore.HiscoreSkill; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/party/PartyPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/party/PartyPlugin.java index e71792494c..5fa8ea24d0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/party/PartyPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/party/PartyPlugin.java @@ -60,7 +60,7 @@ import net.runelite.client.chat.ChatMessageBuilder; import net.runelite.client.chat.ChatMessageManager; import net.runelite.client.chat.QueuedMessage; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.events.OverlayMenuClicked; import net.runelite.client.events.PartyChanged; @@ -126,9 +126,6 @@ public class PartyPlugin extends Plugin implements KeyListener @Inject private ChatMessageManager chatMessageManager; - @Inject - private EventBus eventBus; - @Inject @Named("developerMode") boolean developerMode; @@ -158,10 +155,9 @@ public class PartyPlugin extends Plugin implements KeyListener } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); overlayManager.add(partyStatsOverlay); overlayManager.add(partyPingOverlay); @@ -173,10 +169,8 @@ public class PartyPlugin extends Plugin implements KeyListener } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - partyDataMap.clear(); pendingTilePings.clear(); worldMapManager.removeIf(PartyWorldMapPoint.class::isInstance); @@ -191,29 +185,13 @@ public class PartyPlugin extends Plugin implements KeyListener sendAlert = false; } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(OverlayMenuClicked.class, this, this::onOverlayMenuClicked); - eventBus.subscribe(MenuOptionClicked.class, this, this::onMenuOptionClicked); - eventBus.subscribe(TilePing.class, this, this::onTilePing); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(SkillUpdate.class, this, this::onSkillUpdate); - eventBus.subscribe(LocationUpdate.class, this, this::onLocationUpdate); - eventBus.subscribe(UserJoin.class, this, this::onUserJoin); - eventBus.subscribe(UserSync.class, this, this::onUserSync); - eventBus.subscribe(UserPart.class, this, this::onUserPart); - eventBus.subscribe(PartyChanged.class, this, this::onPartyChanged); - eventBus.subscribe(CommandExecuted.class, this, this::onCommandExecuted); - eventBus.subscribe(FocusChanged.class, this, this::onFocusChanged); - } - @Provides public PartyConfig provideConfig(ConfigManager configManager) { return configManager.getConfig(PartyConfig.class); } + @Subscribe private void onOverlayMenuClicked(OverlayMenuClicked event) { if (event.getEntry().getMenuOpcode() == MenuOpcode.RUNELITE_OVERLAY && @@ -239,6 +217,7 @@ public class PartyPlugin extends Plugin implements KeyListener } } + @Subscribe private void onMenuOptionClicked(MenuOptionClicked event) { if (!hotkeyDown || client.isMenuOpen() || party.getMembers().isEmpty() || !this.pings) @@ -264,6 +243,7 @@ public class PartyPlugin extends Plugin implements KeyListener if ("walk here".equalsIgnoreCase(menuEntry.getOption())) { isOnCanvas = true; + break; } } @@ -278,6 +258,7 @@ public class PartyPlugin extends Plugin implements KeyListener wsClient.send(tilePing); } + @Subscribe private void onTilePing(TilePing event) { if (this.pings) @@ -323,6 +304,7 @@ public class PartyPlugin extends Plugin implements KeyListener wsClient.send(locationUpdate); } + @Subscribe private void onGameTick(final GameTick event) { if (sendAlert && client.getGameState() == GameState.LOGGED_IN) @@ -368,6 +350,7 @@ public class PartyPlugin extends Plugin implements KeyListener lastPray = currentPrayer; } + @Subscribe private void onSkillUpdate(final SkillUpdate event) { final PartyData partyData = getPartyData(event.getMemberId()); @@ -389,6 +372,7 @@ public class PartyPlugin extends Plugin implements KeyListener } } + @Subscribe private void onLocationUpdate(final LocationUpdate event) { final PartyData partyData = getPartyData(event.getMemberId()); @@ -401,6 +385,7 @@ public class PartyPlugin extends Plugin implements KeyListener partyData.getWorldMapPoint().setWorldPoint(event.getWorldPoint()); } + @Subscribe private void onUserJoin(final UserJoin event) { final PartyData partyData = getPartyData(event.getMemberId()); @@ -429,6 +414,7 @@ public class PartyPlugin extends Plugin implements KeyListener } } + @Subscribe private void onUserSync(final UserSync event) { final int currentHealth = client.getBoostedSkillLevel(Skill.HITPOINTS); @@ -449,6 +435,7 @@ public class PartyPlugin extends Plugin implements KeyListener } } + @Subscribe private void onUserPart(final UserPart event) { final PartyData removed = partyDataMap.remove(event.getMemberId()); @@ -473,6 +460,7 @@ public class PartyPlugin extends Plugin implements KeyListener } } + @Subscribe private void onPartyChanged(final PartyChanged event) { // Reset party @@ -481,6 +469,7 @@ public class PartyPlugin extends Plugin implements KeyListener worldMapManager.removeIf(PartyWorldMapPoint.class::isInstance); } + @Subscribe private void onCommandExecuted(CommandExecuted commandExecuted) { if (!developerMode || !commandExecuted.getCommand().equals("partyinfo")) @@ -527,6 +516,7 @@ public class PartyPlugin extends Plugin implements KeyListener }); } + @Subscribe private void onFocusChanged(FocusChanged event) { if (!event.isFocused()) @@ -572,6 +562,7 @@ public class PartyPlugin extends Plugin implements KeyListener .build()); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("party")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/party/data/PartyData.java b/runelite-client/src/main/java/net/runelite/client/plugins/party/data/PartyData.java index 2593c4fe8f..efd483b173 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/party/data/PartyData.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/party/data/PartyData.java @@ -26,14 +26,15 @@ package net.runelite.client.plugins.party.data; import java.awt.Color; import java.util.UUID; +import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.Setter; import net.runelite.client.ui.overlay.components.PanelComponent; import net.runelite.client.ui.overlay.worldmap.WorldMapPoint; -@Setter -@Getter +@Setter(AccessLevel.PUBLIC) +@Getter(AccessLevel.PUBLIC) @RequiredArgsConstructor public class PartyData { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/party/data/PartyTilePingData.java b/runelite-client/src/main/java/net/runelite/client/plugins/party/data/PartyTilePingData.java index 467e69dd2a..1629e4f660 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/party/data/PartyTilePingData.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/party/data/PartyTilePingData.java @@ -25,14 +25,15 @@ package net.runelite.client.plugins.party.data; import java.awt.Color; +import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.Setter; import net.runelite.api.coords.WorldPoint; @RequiredArgsConstructor -@Getter -@Setter +@Getter(AccessLevel.PUBLIC) +@Setter(AccessLevel.PUBLIC) public class PartyTilePingData { private final WorldPoint point; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/party/messages/SkillUpdate.java b/runelite-client/src/main/java/net/runelite/client/plugins/party/messages/SkillUpdate.java index fd7f8f12ed..4c5fd33b47 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/party/messages/SkillUpdate.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/party/messages/SkillUpdate.java @@ -24,6 +24,7 @@ */ package net.runelite.client.plugins.party.messages; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; import net.runelite.api.Skill; @@ -31,7 +32,7 @@ import net.runelite.api.events.Event; import net.runelite.http.api.ws.messages.party.PartyMemberMessage; @AllArgsConstructor -@Getter +@Getter(AccessLevel.PUBLIC) public class SkillUpdate extends PartyMemberMessage implements Event { private final Skill skill; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/performancestats/Performance.java b/runelite-client/src/main/java/net/runelite/client/plugins/performancestats/Performance.java index 25336dbb38..eecf8b95ea 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/performancestats/Performance.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/performancestats/Performance.java @@ -91,7 +91,7 @@ class Performance extends PartyMemberMessage double getDPS() { - return Math.round( (this.damageDealt / this.getSecondsSpent()) * 100) / 100.00; + return Math.round((this.damageDealt / this.getSecondsSpent()) * 100) / 100.00; } String getHumanReadableSecondsSpent() diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/performancestats/PerformanceStatsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/performancestats/PerformanceStatsOverlay.java index d5c484f8fc..445250b107 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/performancestats/PerformanceStatsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/performancestats/PerformanceStatsOverlay.java @@ -100,7 +100,7 @@ public class PerformanceStatsOverlay extends Overlay { continue; } - + final String[] eles = createRowElements(p); tableComponent.addRow(eles); } @@ -111,12 +111,12 @@ public class PerformanceStatsOverlay extends Overlay private String[] createRowElements(Performance performance) { return new String[] - { - performance.getUsername(), - (int) Math.round(performance.getDamageDealt()) + " | " + (int) Math.round(performance.getHighestHitDealt()), - (int) Math.round(performance.getDamageTaken()) + " | " + (int) Math.round(performance.getHighestHitTaken()), - String.valueOf(performance.getDPS()), - performance.getHumanReadableSecondsSpent() - }; + { + performance.getUsername(), + (int) Math.round(performance.getDamageDealt()) + " | " + (int) Math.round(performance.getHighestHitDealt()), + (int) Math.round(performance.getDamageTaken()) + " | " + (int) Math.round(performance.getHighestHitTaken()), + String.valueOf(performance.getDPS()), + performance.getHumanReadableSecondsSpent() + }; } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/performancestats/PerformanceStatsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/performancestats/PerformanceStatsPlugin.java index 5fede26720..b8b8175057 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/performancestats/PerformanceStatsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/performancestats/PerformanceStatsPlugin.java @@ -41,10 +41,10 @@ import net.runelite.api.Client; import net.runelite.api.NPC; import net.runelite.api.Skill; import net.runelite.api.WorldType; +import net.runelite.api.events.FakeXpDrop; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.HitsplatApplied; -import net.runelite.api.events.ScriptCallbackEvent; import net.runelite.api.events.StatChanged; import net.runelite.api.util.Text; import net.runelite.client.chat.ChatColorType; @@ -52,7 +52,7 @@ import net.runelite.client.chat.ChatMessageBuilder; import net.runelite.client.chat.ChatMessageManager; import net.runelite.client.chat.QueuedMessage; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.events.OverlayMenuClicked; import net.runelite.client.events.PartyChanged; @@ -109,9 +109,6 @@ public class PerformanceStatsPlugin extends Plugin @Inject private WSClient wsClient; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) private boolean enabled = false; @Getter(AccessLevel.PACKAGE) @@ -141,7 +138,6 @@ public class PerformanceStatsPlugin extends Plugin @Override protected void startUp() { - addSubscriptions(); this.submitTimeout = config.submitTimeout(); @@ -152,29 +148,13 @@ public class PerformanceStatsPlugin extends Plugin @Override protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(performanceTrackerOverlay); wsClient.unregisterMessage(Performance.class); disable(); reset(); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(HitsplatApplied.class, this, this::onHitsplatApplied); - eventBus.subscribe(StatChanged.class, this, this::onStatChanged); - eventBus.subscribe(ScriptCallbackEvent.class, this, this::onScriptCallbackEvent); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(OverlayMenuClicked.class, this, this::onOverlayMenuClicked); - eventBus.subscribe(Performance.class, this, this::onPerformance); - eventBus.subscribe(UserSync.class, this, this::onUserSync); - eventBus.subscribe(UserPart.class, this, this::onUserPart); - eventBus.subscribe(PartyChanged.class, this, this::onPartyChanged); - } - + @Subscribe private void onGameStateChanged(GameStateChanged event) { switch (event.getGameState()) @@ -188,6 +168,7 @@ public class PerformanceStatsPlugin extends Plugin } } + @Subscribe private void onHitsplatApplied(HitsplatApplied e) { if (isPaused()) @@ -207,6 +188,7 @@ public class PerformanceStatsPlugin extends Plugin } } + @Subscribe private void onStatChanged(StatChanged c) { if (isPaused() || hopping) @@ -242,25 +224,10 @@ public class PerformanceStatsPlugin extends Plugin } } - private void onScriptCallbackEvent(ScriptCallbackEvent e) + @Subscribe + private void onFakeXpDrop(FakeXpDrop fakeXpDrop) { - // Handles Fake XP drops (Ironman in PvP, DMM Cap, 200m xp, etc) - if (isPaused()) - { - return; - } - - if (!"fakeXpDrop".equals(e.getEventName())) - { - return; - } - - final int[] intStack = client.getIntStack(); - final int intStackSize = client.getIntStackSize(); - - final int skillId = intStack[intStackSize - 2]; - final Skill skill = Skill.values()[skillId]; - if (skill.equals(Skill.HITPOINTS)) + if (fakeXpDrop.getSkill().equals(Skill.HITPOINTS)) { // Auto enables when player would have received hp exp if (!isEnabled()) @@ -268,11 +235,12 @@ public class PerformanceStatsPlugin extends Plugin enable(); } - final int exp = intStack[intStackSize - 1]; + final int exp = fakeXpDrop.getXp(); performance.addDamageDealt(calculateDamageDealt(exp), client.getTickCount()); } } + @Subscribe private void onGameTick(GameTick t) { oldTarget = client.getLocalPlayer().getInteracting(); @@ -312,6 +280,7 @@ public class PerformanceStatsPlugin extends Plugin sendPerformance(); } + @Subscribe private void onOverlayMenuClicked(OverlayMenuClicked c) { if (!c.getOverlay().equals(performanceTrackerOverlay)) @@ -372,6 +341,7 @@ public class PerformanceStatsPlugin extends Plugin /** * Calculates damage dealt based on HP xp gained accounting for multipliers such as DMM mode + * * @param diff HP xp gained * @return damage dealt */ @@ -445,11 +415,13 @@ public class PerformanceStatsPlugin extends Plugin } } + @Subscribe private void onPerformance(final Performance performance) { partyDataMap.put(performance.getMemberId(), performance); } + @Subscribe private void onUserSync(final UserSync event) { if (isEnabled()) @@ -458,17 +430,20 @@ public class PerformanceStatsPlugin extends Plugin } } + @Subscribe private void onUserPart(final UserPart event) { partyDataMap.remove(event.getMemberId()); } + @Subscribe private void onPartyChanged(final PartyChanged event) { // Reset party partyDataMap.clear(); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("performancestats")) @@ -478,4 +453,4 @@ public class PerformanceStatsPlugin extends Plugin this.submitTimeout = config.submitTimeout(); } -} +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/pestcontrol/PestControlPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/pestcontrol/PestControlPlugin.java index badae4a764..d007cd4067 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/pestcontrol/PestControlPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/pestcontrol/PestControlPlugin.java @@ -58,7 +58,7 @@ import net.runelite.api.util.Text; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; @@ -132,9 +132,6 @@ public class PestControlPlugin extends Plugin @Inject private PortalWeaknessOverlay portalWeaknessOverlay; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) private Game game; @@ -185,35 +182,19 @@ public class PestControlPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); loadPlugin(); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); unloadPlugin(); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - eventBus.subscribe(WidgetLoaded.class, this, this::onWidgetLoaded); - eventBus.subscribe(GameObjectSpawned.class, this, this::onGameObjectSpawned); - eventBus.subscribe(GameObjectChanged.class, this, this::onGameObjectChanged); - eventBus.subscribe(GameObjectDespawned.class, this, this::onGameObjectDespawned); - eventBus.subscribe(GroundObjectSpawned.class, this, this::onGroundObjectSpawned); - eventBus.subscribe(GroundObjectChanged.class, this, this::onGroundObjectChanged); - eventBus.subscribe(GroundObjectDespawned.class, this, this::onGroundObjectDespawned); - } - + @Subscribe private void onConfigChanged(ConfigChanged configEvent) { if (configEvent.getGroup().equals("pestcontrol")) @@ -360,6 +341,7 @@ public class PestControlPlugin extends Plugin } } + @Subscribe public void onGameStateChanged(GameStateChanged event) { // LOGGED_IN also triggers when teleporting to the island @@ -504,6 +486,7 @@ public class PestControlPlugin extends Plugin handlePointsInfoboxCounter(); } + @Subscribe private void onGameTick(GameTick gameTickEvent) { // Check for widgets on main island @@ -568,6 +551,7 @@ public class PestControlPlugin extends Plugin game.onGameTick(gameTickEvent); } + @Subscribe private void onChatMessage(ChatMessage chatMessage) { if (game != null && chatMessage.getType() == ChatMessageType.GAMEMESSAGE) @@ -580,6 +564,7 @@ public class PestControlPlugin extends Plugin } } + @Subscribe private void onWidgetLoaded(WidgetLoaded event) { if (game != null) @@ -655,33 +640,39 @@ public class PestControlPlugin extends Plugin } } + @Subscribe private void onGameObjectSpawned(GameObjectSpawned event) { handleTileObject(event.getTile(), event.getGameObject()); } + @Subscribe private void onGameObjectChanged(GameObjectChanged event) { unlistTileObject(event.getPrevious()); handleTileObject(event.getTile(), event.getGameObject()); } + @Subscribe private void onGameObjectDespawned(GameObjectDespawned event) { unlistTileObject(event.getGameObject()); } + @Subscribe private void onGroundObjectSpawned(GroundObjectSpawned event) { handleTileObject(event.getTile(), event.getGroundObject()); } + @Subscribe private void onGroundObjectChanged(GroundObjectChanged event) { unlistTileObject(event.getPrevious()); handleTileObject(event.getTile(), event.getGroundObject()); } + @Subscribe private void onGroundObjectDespawned(GroundObjectDespawned event) { unlistTileObject(event.getGroundObject()); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/pileindicators/PileIndicatorsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/pileindicators/PileIndicatorsPlugin.java index 03a1139304..57331eed79 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/pileindicators/PileIndicatorsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/pileindicators/PileIndicatorsPlugin.java @@ -39,7 +39,7 @@ import net.runelite.api.NPC; import net.runelite.api.Player; import net.runelite.api.Varbits; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -71,9 +71,6 @@ public class PileIndicatorsPlugin extends Plugin @Inject private PileIndicatorsOverlay overlay; - @Inject - private EventBus eventBus; - private boolean enablePlayers; private boolean wildyOnlyPlayer; private Color playerPileColor; @@ -95,19 +92,16 @@ public class PileIndicatorsPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - overlayManager.add(overlay); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); overlayManager.remove(overlay); } @@ -203,6 +197,7 @@ public class PileIndicatorsPlugin extends Plugin return pileType; } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("pileindicators")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsOverlay.java index dffc76d65d..1e6e9c1388 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsOverlay.java @@ -61,8 +61,8 @@ public class PlayerIndicatorsOverlay extends Overlay "no-agility.png"); private final BufferedImage skullIcon = ImageUtil.getResourceStreamFromClass(PlayerIndicatorsPlugin.class, "skull.png"); - private PlayerIndicatorsPlugin plugin; - private PlayerIndicatorsService playerIndicatorsService; + private final PlayerIndicatorsPlugin plugin; + private final PlayerIndicatorsService playerIndicatorsService; @Inject private Client client; @Inject diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsPlugin.java index ffb42de2a1..0db196ad3f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsPlugin.java @@ -56,6 +56,7 @@ import net.runelite.api.events.PlayerSpawned; import net.runelite.api.util.Text; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ClanManager; import net.runelite.client.plugins.Plugin; @@ -86,27 +87,35 @@ public class PlayerIndicatorsPlugin extends Plugin @Getter(AccessLevel.PACKAGE) private final Map resultCache = new HashMap<>(); private final ExecutorService executorService = Executors.newFixedThreadPool(100); + @Inject @Getter(AccessLevel.NONE) private OverlayManager overlayManager; + @Inject @Getter(AccessLevel.NONE) private PlayerIndicatorsConfig config; + @Inject @Getter(AccessLevel.NONE) private PlayerIndicatorsOverlay playerIndicatorsOverlay; + @Inject @Getter(AccessLevel.NONE) private PlayerIndicatorsMinimapOverlay playerIndicatorsMinimapOverlay; + @Inject @Getter(AccessLevel.NONE) private Client client; + @Inject @Getter(AccessLevel.NONE) private ClanManager clanManager; + @Inject @Getter(AccessLevel.NONE) private EventBus eventBus; + private ClanMemberRank callerRank; private PlayerIndicatorsPlugin.AgilityFormats agilityFormat; private PlayerIndicatorsPlugin.MinimapSkullLocations skullLocation; @@ -136,10 +145,9 @@ public class PlayerIndicatorsPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); resultCache.clear(); overlayManager.add(playerIndicatorsOverlay); overlayManager.add(playerIndicatorsMinimapOverlay); @@ -147,24 +155,14 @@ public class PlayerIndicatorsPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); overlayManager.remove(playerIndicatorsOverlay); overlayManager.remove(playerIndicatorsMinimapOverlay); resultCache.clear(); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(ClanMemberJoined.class, this, this::onClanMemberJoined); - eventBus.subscribe(ClanMemberLeft.class, this, this::onClanMemberLeft); - eventBus.subscribe(MenuEntryAdded.class, this, this::onMenuEntryAdded); - eventBus.subscribe(InteractingChanged.class, this, this::onInteractingChanged); - eventBus.subscribe(PlayerSpawned.class, this, this::onPlayerSpawned); - } - + @Subscribe private void onInteractingChanged(InteractingChanged event) { if (!this.highlightCallerTargets || event.getSource() == null || callers.isEmpty() || !isCaller(event.getSource())) @@ -194,6 +192,7 @@ public class PlayerIndicatorsPlugin extends Plugin callerPiles.put(caller.getName(), event.getTarget()); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("playerindicators")) @@ -204,16 +203,19 @@ public class PlayerIndicatorsPlugin extends Plugin updateConfig(); } + @Subscribe private void onClanMemberJoined(ClanMemberJoined event) { getCallerList(); } + @Subscribe private void onClanMemberLeft(ClanMemberLeft event) { getCallerList(); } + @Subscribe private void onPlayerSpawned(PlayerSpawned event) { final Player player = event.getPlayer(); @@ -251,6 +253,7 @@ public class PlayerIndicatorsPlugin extends Plugin }); } + @Subscribe private void onMenuEntryAdded(MenuEntryAdded menuEntryAdded) { int type = menuEntryAdded.getOpcode(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsService.java b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsService.java index 4ffa83cfb0..3de622159c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsService.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsService.java @@ -62,7 +62,7 @@ public class PlayerIndicatorsService && client.isFriended(player.getName(), false) && plugin.getLocationHashMap().containsKey(PlayerRelation.FRIEND)); - clan = (player) -> (player.isClanMember() && !client.getLocalPlayer().equals(player) && !client.isFriended(player.getName(), false) + clan = (player) -> (player.isClanMember() && !client.getLocalPlayer().equals(player) && !client.isFriended(player.getName(), false) && plugin.getLocationHashMap().containsKey(PlayerRelation.CLAN)); team = (player) -> (Objects.requireNonNull(client.getLocalPlayer()).getTeam() != 0 && !player.isClanMember() @@ -100,7 +100,7 @@ public class PlayerIndicatorsService consumer.accept(p, PlayerRelation.CALLER); continue; } - if (callerTarget.test(p) ) + if (callerTarget.test(p)) { consumer.accept(p, PlayerRelation.CALLER_TARGET); continue; @@ -135,7 +135,7 @@ public class PlayerIndicatorsService consumer.accept(p, PlayerRelation.TARGET); } } -} + } private boolean highlight() { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/playerinfo/PlayerInfoPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/playerinfo/PlayerInfoPlugin.java index 1b99b22165..7eb37e25c1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/playerinfo/PlayerInfoPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/playerinfo/PlayerInfoPlugin.java @@ -92,7 +92,7 @@ public class PlayerInfoPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); @@ -120,7 +120,7 @@ public class PlayerInfoPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { infoBoxManager.removeIf(i -> i instanceof PlayerInfoCustomIndicator); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/playerscouter/PlayerScouter.java b/runelite-client/src/main/java/net/runelite/client/plugins/playerscouter/PlayerScouter.java index 3a1169eebc..501440123a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/playerscouter/PlayerScouter.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/playerscouter/PlayerScouter.java @@ -24,51 +24,34 @@ package net.runelite.client.plugins.playerscouter; import com.google.inject.Provides; -import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; +import java.util.Comparator; import java.util.Date; import java.util.HashMap; -import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.Objects; -import java.util.Set; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.stream.Collectors; import javax.inject.Inject; import lombok.extern.slf4j.Slf4j; -import net.runelite.api.Actor; import net.runelite.api.Client; import net.runelite.api.GameState; -import net.runelite.api.ItemDefinition; -import net.runelite.api.NPC; -import net.runelite.api.Player; import net.runelite.api.Varbits; import net.runelite.api.WorldType; -import net.runelite.api.coords.WorldArea; -import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; -import net.runelite.api.events.PlayerDespawned; -import net.runelite.api.events.PlayerSpawned; -import net.runelite.api.kit.KitType; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; -import net.runelite.client.game.ItemMapping; -import net.runelite.client.game.ItemReclaimCost; +import net.runelite.client.game.PlayerContainer; +import net.runelite.client.game.PlayerManager; import net.runelite.client.game.WorldLocation; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.PluginType; -import net.runelite.client.util.PvPUtil; import net.runelite.client.util.QuantityFormatter; import net.runelite.http.api.discord.DiscordClient; import net.runelite.http.api.discord.DiscordEmbed; @@ -77,8 +60,6 @@ import net.runelite.http.api.discord.embed.AuthorEmbed; import net.runelite.http.api.discord.embed.FieldEmbed; import net.runelite.http.api.discord.embed.FooterEmbed; import net.runelite.http.api.discord.embed.ThumbnailEmbed; -import net.runelite.http.api.hiscore.HiscoreClient; -import net.runelite.http.api.hiscore.HiscoreResult; import net.runelite.http.api.item.ItemStats; import okhttp3.HttpUrl; @@ -91,11 +72,10 @@ import okhttp3.HttpUrl; @Slf4j public class PlayerScouter extends Plugin { - private static final HiscoreClient HISCORE_CLIENT = new HiscoreClient(); private static final DiscordClient DISCORD_CLIENT = new DiscordClient(); - private static final Map WILD_LOCS = WorldLocation.getLOCATION_MAP(); private static final SimpleDateFormat SDF = new SimpleDateFormat("MMM dd h:mm a z"); private static final String ICON_URL = "https://www.osrsbox.com/osrsbox-db/items-icons/"; // Add item id + ".png" + @Inject private Client client; @Inject @@ -103,10 +83,8 @@ public class PlayerScouter extends Plugin @Inject private PlayerScouterConfig config; @Inject - private EventBus eventBus; - private final ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() * 2); - private final Set playerContainer = new HashSet<>(); - private final Map resultCache = new HashMap<>(); + private PlayerManager playerManager; + private final Map blacklist = new HashMap<>(); private HttpUrl webhook; private int minimumRisk; @@ -129,34 +107,16 @@ public class PlayerScouter extends Plugin protected void startUp() { blacklist.clear(); - addSubscriptions(); updateConfig(); - if (client.getGameState() == GameState.LOGGED_IN) - { - for (Player player : client.getPlayers()) - { - addPlayer(player); - } - } } @Override protected void shutDown() { - playerContainer.clear(); blacklist.clear(); - eventBus.unregister(this); - } - - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(PlayerDespawned.class, this, this::onPlayerDespawned); - eventBus.subscribe(PlayerSpawned.class, this, this::onPlayerSpawned); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("playerscouter")) @@ -167,6 +127,7 @@ public class PlayerScouter extends Plugin updateConfig(); } + @Subscribe private void onGameStateChanged(GameStateChanged event) { if (event.getGameState() == GameState.LOGGED_IN) @@ -177,48 +138,68 @@ public class PlayerScouter extends Plugin blacklist.clear(); } + @Subscribe private void onGameTick(GameTick event) { - resetBlacklist(); - if (!checkWildy() || playerContainer.isEmpty() || this.webhook == null) + if (!checkWildy() || this.webhook == null) { return; } - playerContainer.forEach(player -> + final List players = new ArrayList<>(); + + for (PlayerContainer player : playerManager.getPlayerContainers()) { - update(player); - if (player.getPlayer().getCombatLevel() < this.minimumCombat - || player.getPlayer().getCombatLevel() > this.maximumCombat) + if (player.isScouted()) { - return; + player.setScoutTimer(player.getScoutTimer() - 1); + if (player.getScoutTimer() <= 0) + { + player.setScouted(false); + player.setScoutTimer(500); + } + continue; } - if ((player.getPlayer().getCombatLevel() >= this.minimumCombat - && player.getPlayer().getCombatLevel() <= this.maximumCombat) && player.getRisk() > this.minimumRisk) + + if (player.getPlayer().getCombatLevel() < this.minimumCombat || player.getPlayer().getCombatLevel() > this.maximumCombat) { - scoutPlayer(player); + continue; } - }); + + if ((player.getPlayer().getCombatLevel() >= this.minimumCombat && + player.getPlayer().getCombatLevel() <= this.maximumCombat) && + player.getRisk() > this.minimumRisk) + { + if (player.getSkills() == null) + { + if (player.isHttpRetry()) + { + continue; + } + playerManager.updateStats(player.getPlayer()); + continue; + } + if (config.mini()) + { + players.add(player); + continue; + } + addPlayer(player); + } + } + + if (config.mini()) + { + players.sort(Comparator.comparingInt(PlayerContainer::getRisk).reversed()); + scoutMini(players); + } } - private void onPlayerDespawned(PlayerDespawned event) + private void addPlayer(PlayerContainer player) { - final Player player = event.getPlayer(); - - playerContainer.removeIf(p -> p.getPlayer() == player); - } - - private void onPlayerSpawned(PlayerSpawned event) - { - final Player player = event.getPlayer(); - addPlayer(player); - } - - private void addPlayer(Player player) - { - if (player == client.getLocalPlayer() + if (player.getPlayer() == client.getLocalPlayer() || (!blacklist.isEmpty() && blacklist.containsKey(player.getName())) || (!this.scoutFriends && client.isFriended(player.getName(), false) || (!this.scoutClan && client.isClanMember(player.getName())))) @@ -227,8 +208,8 @@ public class PlayerScouter extends Plugin return; } - playerContainer.add(new PlayerContainer(player)); blacklist.put(player.getName(), client.getTickCount() + this.timeout); + scoutPlayer(player); } private void resetBlacklist() @@ -273,203 +254,79 @@ public class PlayerScouter extends Plugin this.maximumCombat = config.maximumCombat(); } - private void update(PlayerContainer player) + private void scoutMini(List players) { - if (player.isScouted()) - { - player.setScoutTimer(player.getScoutTimer() - 1); - if (player.getScoutTimer() <= 0) - { - player.setScouted(false); - player.setScoutTimer(500); - } - return; - } - player.setRisk(0); - updatePlayerGear(player); - updateStats(player); - player.setLocation(location(player)); - player.setWildyLevel(PvPUtil.getWildernessLevelFrom(player.getPlayer().getWorldLocation())); - player.setTargetString(targetStringBuilder(player)); - log.debug(player.toString()); - } - - private void updateStats(PlayerContainer player) - { - if (player.isHttpRetry() || player.getSkills() != null) + if (client.getLocalPlayer() == null) { return; } - executorService.submit(() -> + final List fieldList = new ArrayList<>(); + final String location = WorldLocation.location(client.getLocalPlayer().getWorldLocation()); + final int cap = Math.min(players.size(), 25); + + int highestValue = 0; + int id = 0; + int risk = 0; + for (int i = 0; i < cap; i++) { - player.setHttpRetry(true); - HiscoreResult result; - if (resultCache.containsKey(player.getName())) + final PlayerContainer player = players.get(i); + final Map.Entry entry = getEntry(player.getGear()); + risk += player.getRisk(); + if (entry != null) { - result = resultCache.get(player.getName()); - } - else - { - try + final int mostValued = (int) entry.getValue(); + final int mostValuedId = (int) entry.getKey(); + + if (mostValued > highestValue) { - result = HISCORE_CLIENT.lookup(player.getName()); - } - catch (IOException ex) - { - log.warn("Error fetching Hiscore data " + ex.getMessage()); - player.setHttpRetry(false); - return; + highestValue = mostValued; + id = mostValuedId; } } - if (result == null) + + String name = "☠️ " + player.getName() + " ☠️"; + + if (player.getPlayer().getSkullIcon() == null) { - player.setHttpRetry(false); - return; + name = player.getName(); } - resultCache.put(player.getName(), result); - player.setSkills(result); - player.setPrayer(player.getSkills().getPrayer().getLevel()); - }); - } - private void updatePlayerGear(PlayerContainer player) - { - Map prices = new HashMap<>(); + fieldList.add(FieldEmbed.builder() + .name(name) + .value(QuantityFormatter.quantityToRSDecimalStack(player.getRisk())) + .inline(true) + .build()); - if (player.getPlayer().getPlayerAppearance() == null) - { - return; + player.setScouted(true); } - for (KitType kitType : KitType.values()) + String iconId = String.valueOf(id); + String icon = ICON_URL + iconId + ".png"; + + ThumbnailEmbed image = ThumbnailEmbed.builder() + .url(ICON_URL + iconId + ".png") + .build(); + + String color = "8388352"; + + if (risk < 1000000 && risk > 150000) { - if (kitType.equals(KitType.RING) || kitType.equals(KitType.AMMUNITION)) - { - continue; - } - - final int id = player.getPlayer().getPlayerAppearance().getEquipmentId(kitType); - - if (id == -1) - { - continue; - } - - if (kitType.equals(KitType.WEAPON)) - { - player.setWeapon(id); - } - - final ItemStats item = itemManager.getItemStats(id, false); - final ItemDefinition itemDefinition = itemManager.getItemDefinition(id); - - if (item == null) - { - log.debug("Item is null: {}", id); - continue; - } - - if (ItemReclaimCost.breaksOnDeath(id)) - { - prices.put(id, itemManager.getRepairValue(id)); - log.debug("Item has a broken value: Id {}, Value {}", id, itemManager.getRepairValue(id)); - continue; - } - - if (!itemDefinition.isTradeable() && !ItemMapping.isMapped(id)) - { - prices.put(id, itemDefinition.getPrice()); - } - else if (itemDefinition.isTradeable()) - { - prices.put(id, itemManager.getItemPrice(id, false)); - } + //blue + color = "32767"; } - updateGear(player, prices); - } - - private void updateGear(PlayerContainer player, Map prices) - { - player.setGear(prices.entrySet() - .stream() - .sorted(Collections.reverseOrder(Map.Entry.comparingByValue())) - .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, LinkedHashMap::new)) - ); - - player.setRiskedGear(prices.entrySet() - .stream() - .sorted(Collections.reverseOrder(Map.Entry.comparingByValue())) - .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, LinkedHashMap::new)) - ); - - if (player.getPlayer().getSkullIcon() == null) + else if (risk > 1000000) { - removeEntries(player.getRiskedGear(), player.getPrayer() <= 25 ? 3 : 4); - } - else - { - removeEntries(player.getRiskedGear(), player.getPrayer() <= 25 ? 0 : 1); + //orange + color = "16744448"; } - player.getRiskedGear().values().forEach(price -> player.setRisk(player.getRisk() + price)); - prices.clear(); - } - - private static void removeEntries(LinkedHashMap map, int quantity) - { - if (map.size() < quantity) - { - log.debug("Size is lower than removal quantity."); - } - for (int i = 0; i < quantity; i++) - { - if (!map.entrySet().iterator().hasNext()) - { - log.debug("Attempted to remove entries, but there was not enough to remove."); - return; - } - log.debug("Entry Removed: " + map.entrySet().iterator().next()); - map.entrySet().remove(map.entrySet().iterator().next()); - } - } - - private static Map.Entry getEntry(LinkedHashMap map) - { - if (!map.isEmpty()) - { - Iterator> entry = map.entrySet().iterator(); - - for (int i = 0; i < 1; i++) - { - entry.next(); - } - - return entry.next(); - } - return null; - } - - private String targetStringBuilder(PlayerContainer player) - { - if (player.getPlayer().getInteracting() != null) - { - Actor actor = player.getPlayer().getInteracting(); - if (actor instanceof Player) - { - return "(Player) " + actor.getName(); - } - else if (actor instanceof NPC) - { - return "(NPC) " + actor.getName(); - } - } - return "No Target Detected"; + message(location, icon, image, fieldList, color); } private void scoutPlayer(PlayerContainer player) { - if (player.isScouted() || player.getSkills() == null) + if (player.isScouted()) { return; } @@ -510,6 +367,7 @@ public class PlayerScouter extends Plugin .value(Integer.toString(player.getPlayer().getCombatLevel())) .inline(true) .build()); + if (client.getVar(Varbits.IN_WILDERNESS) == 1) { fieldList.add(FieldEmbed.builder() @@ -576,7 +434,10 @@ public class PlayerScouter extends Plugin } } - String icon = ICON_URL + Objects.requireNonNull(getEntry(player.getGear())).getKey() + ".png"; + + Map.Entry entry = getEntry(player.getGear()); + String iconId = entry == null ? String.valueOf(1) : String.valueOf(entry.getKey()); + String icon = ICON_URL + iconId + ".png"; String name = "☠️ " + player.getName() + " ☠️"; if (player.getPlayer().getSkullIcon() == null) @@ -595,7 +456,7 @@ public class PlayerScouter extends Plugin if (name.isEmpty() || fields.isEmpty()) { - log.error("Discord message will fail with a missing name/description/field"); + log.debug("Discord message will fail with a missing name/description/field"); return; } @@ -621,50 +482,12 @@ public class PlayerScouter extends Plugin DISCORD_CLIENT.message(this.webhook, discordMessage); } - private String location(PlayerContainer player) + private static Map.Entry getEntry(LinkedHashMap map) { - final WorldPoint wl = player.getPlayer().getWorldLocation(); - int dist = 10000; - String s = ""; - WorldArea closestArea = null; - for (Map.Entry entry : WILD_LOCS.entrySet()) + if (!map.isEmpty()) { - WorldArea worldArea = entry.getKey(); - - if (worldArea.toWorldPointList().contains(wl)) - { - s = entry.getValue(); - return s; - } - int distTo = worldArea.distanceTo(wl); - if (distTo < dist) - { - dist = distTo; - closestArea = worldArea; - } + return map.entrySet().iterator().next(); } - if (wl.getY() > (Objects.requireNonNull(closestArea).toWorldPoint().getY() + closestArea.getHeight())) - { - s = s + "N"; - } - if (wl.getY() < closestArea.toWorldPoint().getY()) - { - s = s + "S"; - } - if (wl.getX() < closestArea.toWorldPoint().getX()) - { - s = s + "W"; - } - if (wl.getX() > (closestArea.toWorldPoint().getX() + closestArea.getWidth())) - { - s = s + "E"; - } - s = s + " of "; - s = s + WILD_LOCS.get(closestArea); - if (s.startsWith(" of ")) - { - s = s.substring(3); - } - return s; + return null; } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/playerscouter/PlayerScouterConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/playerscouter/PlayerScouterConfig.java index f83976bfed..d60513e890 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/playerscouter/PlayerScouterConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/playerscouter/PlayerScouterConfig.java @@ -43,6 +43,18 @@ public interface PlayerScouterConfig extends Config return ""; } + @ConfigItem( + keyName = "mini", + name = "Minify Output", + description = "", + position = 0, + secret = true + ) + default boolean mini() + { + return true; + } + @ConfigItem( keyName = "onlyWildy", name = "Only Scout in Wildy", diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/pluginsorter/PluginSorterPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/pluginsorter/PluginSorterPlugin.java deleted file mode 100644 index e6b8ad44f1..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/pluginsorter/PluginSorterPlugin.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (c) 2018, https://openosrs.com - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package net.runelite.client.plugins.pluginsorter; - -import javax.inject.Inject; -import javax.inject.Singleton; -import net.runelite.client.config.ConfigManager; -import net.runelite.client.plugins.Plugin; -import net.runelite.client.plugins.PluginDescriptor; - -@PluginDescriptor( - name = "Plugin Organizer", - hidden = true -) -@Singleton -public class PluginSorterPlugin extends Plugin -{ - @Inject - private ConfigManager configManager; - - /** - * Migrates configs from plugin organizer to the OpenOSRS global plugin and deletes the old config values. - * This method should be removed after a reasonable amount of time. - */ - @Deprecated - private void migrateConfigs() - { - migrateConfig("pluginsorter", "pluginSortMode"); - migrateConfig("pluginsorter", "hidePlugins"); - migrateConfig("pluginsorter", "hideExternalPlugins"); - migrateConfig("pluginsorter", "hidePvmPlugins"); - migrateConfig("pluginsorter", "hideSkillingPlugins"); - migrateConfig("pluginsorter", "hidePvpPlugins"); - migrateConfig("pluginsorter", "hideUtilityPlugins"); - migrateConfig("pluginsorter", "externalColor"); - migrateConfig("pluginsorter", "pvmColor"); - migrateConfig("pluginsorter", "pvpColor"); - migrateConfig("pluginsorter", "skillingColor"); - migrateConfig("pluginsorter", "utilityColor"); - } - - /** - * Wrapper for migrating individual config options - * This method should be removed after a reasonable amount of time. - * - * @param group old group name - * @param key key name to migrate - */ - @Deprecated - private void migrateConfig(String group, String key) - { - String value = configManager.getConfiguration(group, key); - if (value != null) - { - configManager.setConfiguration("openosrs", key, value); - configManager.unsetConfiguration(group, key); - } - } - - @Override - protected void startUp() throws Exception - { - migrateConfigs(); - } -} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/poh/PohIcons.java b/runelite-client/src/main/java/net/runelite/client/plugins/poh/PohIcons.java index db671698fa..375b86da0e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/poh/PohIcons.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/poh/PohIcons.java @@ -27,176 +27,10 @@ package net.runelite.client.plugins.poh; import com.google.common.collect.ImmutableMap; import java.awt.image.BufferedImage; import java.util.Map; +import lombok.AccessLevel; import lombok.Getter; -import static net.runelite.api.NullObjectID.NULL_13615; -import static net.runelite.api.NullObjectID.NULL_13618; -import static net.runelite.api.NullObjectID.NULL_13620; -import static net.runelite.api.NullObjectID.NULL_13622; -import static net.runelite.api.NullObjectID.NULL_13625; -import static net.runelite.api.NullObjectID.NULL_13627; -import static net.runelite.api.NullObjectID.NULL_13629; -import static net.runelite.api.NullObjectID.NULL_13632; -import static net.runelite.api.NullObjectID.NULL_13634; -import static net.runelite.api.NullObjectID.NULL_29228; -import static net.runelite.api.NullObjectID.NULL_29229; -import static net.runelite.api.ObjectID.ALTAR_13179; -import static net.runelite.api.ObjectID.ALTAR_13180; -import static net.runelite.api.ObjectID.ALTAR_13181; -import static net.runelite.api.ObjectID.ALTAR_13182; -import static net.runelite.api.ObjectID.ALTAR_13183; -import static net.runelite.api.ObjectID.ALTAR_13184; -import static net.runelite.api.ObjectID.ALTAR_13185; -import static net.runelite.api.ObjectID.ALTAR_13186; -import static net.runelite.api.ObjectID.ALTAR_13187; -import static net.runelite.api.ObjectID.ALTAR_13188; -import static net.runelite.api.ObjectID.ALTAR_13189; -import static net.runelite.api.ObjectID.ALTAR_13190; -import static net.runelite.api.ObjectID.ALTAR_13191; -import static net.runelite.api.ObjectID.ALTAR_13192; -import static net.runelite.api.ObjectID.ALTAR_13193; -import static net.runelite.api.ObjectID.ALTAR_13194; -import static net.runelite.api.ObjectID.ALTAR_13196; -import static net.runelite.api.ObjectID.ALTAR_13197; -import static net.runelite.api.ObjectID.ALTAR_13198; -import static net.runelite.api.ObjectID.ALTAR_13199; -import static net.runelite.api.ObjectID.ALTAR_OF_THE_OCCULT; -import static net.runelite.api.ObjectID.AMULET_OF_GLORY; -import static net.runelite.api.ObjectID.ANCIENT_ALTAR; -import static net.runelite.api.ObjectID.ANNAKARL_PORTAL; -import static net.runelite.api.ObjectID.ANNAKARL_PORTAL_29349; -import static net.runelite.api.ObjectID.ANNAKARL_PORTAL_29357; -import static net.runelite.api.ObjectID.ARDOUGNE_PORTAL; -import static net.runelite.api.ObjectID.ARDOUGNE_PORTAL_13626; -import static net.runelite.api.ObjectID.ARDOUGNE_PORTAL_13633; -import static net.runelite.api.ObjectID.ARMOUR_REPAIR_STAND; -import static net.runelite.api.ObjectID.BASIC_JEWELLERY_BOX; -import static net.runelite.api.ObjectID.CARRALLANGAR_PORTAL; -import static net.runelite.api.ObjectID.CARRALLANGAR_PORTAL_33437; -import static net.runelite.api.ObjectID.CARRALLANGAR_PORTAL_33440; -import static net.runelite.api.ObjectID.CATHERBY_PORTAL; -import static net.runelite.api.ObjectID.CATHERBY_PORTAL_33435; -import static net.runelite.api.ObjectID.CATHERBY_PORTAL_33438; -import static net.runelite.api.ObjectID.DARK_ALTAR; -import static net.runelite.api.ObjectID.DIGSITE_PENDANT; -import static net.runelite.api.ObjectID.DIGSITE_PENDANT_33417; -import static net.runelite.api.ObjectID.DIGSITE_PENDANT_33418; -import static net.runelite.api.ObjectID.DIGSITE_PENDANT_33420; -import static net.runelite.api.ObjectID.FALADOR_PORTAL; -import static net.runelite.api.ObjectID.FALADOR_PORTAL_13624; -import static net.runelite.api.ObjectID.FALADOR_PORTAL_13631; -import static net.runelite.api.ObjectID.FANCY_JEWELLERY_BOX; -import static net.runelite.api.ObjectID.FANCY_REJUVENATION_POOL; -import static net.runelite.api.ObjectID.FISHING_GUILD_PORTAL; -import static net.runelite.api.ObjectID.FISHING_GUILD_PORTAL_29351; -import static net.runelite.api.ObjectID.FISHING_GUILD_PORTAL_29359; -import static net.runelite.api.ObjectID.GHORROCK_PORTAL; -import static net.runelite.api.ObjectID.GHORROCK_PORTAL_33436; -import static net.runelite.api.ObjectID.GHORROCK_PORTAL_33439; -import static net.runelite.api.ObjectID.KHARYRLL_PORTAL; -import static net.runelite.api.ObjectID.KHARYRLL_PORTAL_29346; -import static net.runelite.api.ObjectID.KHARYRLL_PORTAL_29354; -import static net.runelite.api.ObjectID.KOUREND_PORTAL; -import static net.runelite.api.ObjectID.KOUREND_PORTAL_29353; -import static net.runelite.api.ObjectID.KOUREND_PORTAL_29361; -import static net.runelite.api.ObjectID.LUMBRIDGE_PORTAL; -import static net.runelite.api.ObjectID.LUMBRIDGE_PORTAL_13623; -import static net.runelite.api.ObjectID.LUMBRIDGE_PORTAL_13630; -import static net.runelite.api.ObjectID.LUNAR_ALTAR; -import static net.runelite.api.ObjectID.LUNAR_ISLE_PORTAL; -import static net.runelite.api.ObjectID.LUNAR_ISLE_PORTAL_29347; -import static net.runelite.api.ObjectID.LUNAR_ISLE_PORTAL_29355; -import static net.runelite.api.ObjectID.MARIM_PORTAL; -import static net.runelite.api.ObjectID.MARIM_PORTAL_29352; -import static net.runelite.api.ObjectID.MARIM_PORTAL_29360; -import static net.runelite.api.ObjectID.OBELISK_31554; -import static net.runelite.api.ObjectID.ORNATE_JEWELLERY_BOX; -import static net.runelite.api.ObjectID.ORNATE_REJUVENATION_POOL; -import static net.runelite.api.ObjectID.POOL_OF_REJUVENATION; -import static net.runelite.api.ObjectID.POOL_OF_RESTORATION; -import static net.runelite.api.ObjectID.POOL_OF_REVITALISATION; -import static net.runelite.api.ObjectID.PORTAL_4525; -import static net.runelite.api.ObjectID.PORTAL_NEXUS; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33355; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33356; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33357; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33358; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33359; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33360; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33361; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33362; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33363; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33364; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33365; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33366; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33367; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33368; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33369; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33370; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33371; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33372; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33373; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33374; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33375; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33376; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33377; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33378; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33379; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33380; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33381; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33382; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33383; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33384; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33385; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33386; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33387; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33388; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33389; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33390; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33391; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33392; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33393; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33394; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33395; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33396; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33397; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33398; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33399; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33400; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33401; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33402; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33403; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33404; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33405; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33406; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33407; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33408; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33409; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33410; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33423; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33424; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33425; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33426; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33427; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33428; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33429; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33430; -import static net.runelite.api.ObjectID.PORTAL_NEXUS_33431; -import static net.runelite.api.ObjectID.SENNTISTEN_PORTAL; -import static net.runelite.api.ObjectID.SENNTISTEN_PORTAL_29348; -import static net.runelite.api.ObjectID.SENNTISTEN_PORTAL_29356; -import static net.runelite.api.ObjectID.SPIRIT_TREE_29227; -import static net.runelite.api.ObjectID.TROLL_STRONGHOLD_PORTAL; -import static net.runelite.api.ObjectID.TROLL_STRONGHOLD_PORTAL_33180; -import static net.runelite.api.ObjectID.TROLL_STRONGHOLD_PORTAL_33181; -import static net.runelite.api.ObjectID.WATERBIRTH_ISLAND_PORTAL; -import static net.runelite.api.ObjectID.WATERBIRTH_ISLAND_PORTAL_29350; -import static net.runelite.api.ObjectID.WATERBIRTH_ISLAND_PORTAL_29358; -import static net.runelite.api.ObjectID.XERICS_TALISMAN; -import static net.runelite.api.ObjectID.XERICS_TALISMAN_33412; -import static net.runelite.api.ObjectID.XERICS_TALISMAN_33413; -import static net.runelite.api.ObjectID.XERICS_TALISMAN_33414; -import static net.runelite.api.ObjectID.XERICS_TALISMAN_33415; -import static net.runelite.api.ObjectID.XERICS_TALISMAN_33419; +import static net.runelite.api.NullObjectID.*; +import static net.runelite.api.ObjectID.*; import net.runelite.client.util.ImageUtil; public enum PohIcons @@ -252,9 +86,9 @@ public enum PohIcons private static final Map minimapIcons; - @Getter + @Getter(AccessLevel.PACKAGE) private final String imageResource; - @Getter + @Getter(AccessLevel.PACKAGE) private final int[] Ids; private BufferedImage image; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/poh/PohPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/poh/PohPlugin.java index e5872c6b59..e9e92da487 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/poh/PohPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/poh/PohPlugin.java @@ -50,14 +50,14 @@ import net.runelite.api.Tile; import net.runelite.api.TileObject; import net.runelite.api.coords.LocalPoint; import net.runelite.api.events.AnimationChanged; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.DecorativeObjectDespawned; import net.runelite.api.events.DecorativeObjectSpawned; import net.runelite.api.events.GameObjectDespawned; import net.runelite.api.events.GameObjectSpawned; import net.runelite.api.events.GameStateChanged; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.HiscoreManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -105,9 +105,6 @@ public class PohPlugin extends Plugin @Inject private BurnerOverlay burnerOverlay; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) private boolean showPortals; @Getter(AccessLevel.PACKAGE) @@ -142,10 +139,9 @@ public class PohPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); overlayManager.add(overlay); overlayManager.add(burnerOverlay); @@ -153,27 +149,15 @@ public class PohPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(overlay); overlayManager.remove(burnerOverlay); pohObjects.clear(); incenseBurners.clear(); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameObjectSpawned.class, this, this::onGameObjectSpawned); - eventBus.subscribe(GameObjectDespawned.class, this, this::onGameObjectDespawned); - eventBus.subscribe(DecorativeObjectSpawned.class, this, this::onDecorativeObjectSpawned); - eventBus.subscribe(DecorativeObjectDespawned.class, this, this::onDecorativeObjectDespawned); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(AnimationChanged.class, this, this::onAnimationChanged); - } - + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("poh")) @@ -186,6 +170,7 @@ public class PohPlugin extends Plugin overlay.updateConfig(); } + @Subscribe private void onGameObjectSpawned(GameObjectSpawned event) { final GameObject gameObject = event.getGameObject(); @@ -205,12 +190,14 @@ public class PohPlugin extends Plugin incenseBurners.put(event.getTile(), new IncenseBurner(gameObject.getId(), countdownTimer, randomTimer, null)); } + @Subscribe private void onGameObjectDespawned(GameObjectDespawned event) { GameObject gameObject = event.getGameObject(); pohObjects.remove(gameObject); } + @Subscribe private void onDecorativeObjectSpawned(DecorativeObjectSpawned event) { DecorativeObject decorativeObject = event.getDecorativeObject(); @@ -220,12 +207,14 @@ public class PohPlugin extends Plugin } } + @Subscribe private void onDecorativeObjectDespawned(DecorativeObjectDespawned event) { DecorativeObject decorativeObject = event.getDecorativeObject(); pohObjects.remove(decorativeObject); } + @Subscribe private void onGameStateChanged(GameStateChanged event) { if (event.getGameState() == GameState.LOADING) @@ -235,6 +224,7 @@ public class PohPlugin extends Plugin } } + @Subscribe private void onAnimationChanged(AnimationChanged event) { final Actor actor = event.getActor(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/poison/ActorPoisonInfo.java b/runelite-client/src/main/java/net/runelite/client/plugins/poison/ActorPoisonInfo.java index dc9754be81..dcd54b3a60 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/poison/ActorPoisonInfo.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/poison/ActorPoisonInfo.java @@ -18,7 +18,7 @@ class ActorPoisonInfo /** * How many ticks after the tickcount is divisible by 30 the poison will hit. - * + *

* For instance, if something gets hit by poison on tick 607 this will be 7, as 607 % 30 == 7. * With this info you know all the times to expect a poison hit */ diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/poison/PoisonPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/poison/PoisonPlugin.java index 3581b03f3b..f94edc9b5b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/poison/PoisonPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/poison/PoisonPlugin.java @@ -55,7 +55,7 @@ import net.runelite.api.events.PlayerDespawned; import net.runelite.api.events.VarbitChanged; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.SpriteManager; import net.runelite.client.plugins.Plugin; @@ -115,9 +115,6 @@ public class PoisonPlugin extends Plugin @Inject private PoisonActorOverlay actorOverlay; - @Inject - private EventBus eventBus; - @Getter private int lastDamage; @@ -145,10 +142,9 @@ public class PoisonPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); actorOverlay.setFontSize(this.fontSize); overlayManager.add(poisonOverlay); @@ -165,10 +161,8 @@ public class PoisonPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(poisonOverlay); if (infobox != null) @@ -187,16 +181,7 @@ public class PoisonPlugin extends Plugin clientThread.invoke(this::resetHealthIcon); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(VarbitChanged.class, this, this::onVarbitChanged); - eventBus.subscribe(HitsplatApplied.class, this, this::onHitsplatApplied); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(NpcDespawned.class, this, this::onNpcDespawned); - eventBus.subscribe(PlayerDespawned.class, this, this::onPlayerDespawned); - } - + @Subscribe private void onVarbitChanged(VarbitChanged event) { final int poisonValue = client.getVar(VarPlayer.POISON); @@ -245,6 +230,7 @@ public class PoisonPlugin extends Plugin } } + @Subscribe private void onHitsplatApplied(HitsplatApplied event) { Hitsplat.HitsplatType type = event.getHitsplat().getHitsplatType(); @@ -309,6 +295,7 @@ public class PoisonPlugin extends Plugin info.setLastDamageTick(tickCount); } + @Subscribe private void onGameTick(GameTick event) { int tickCount = client.getTickCount(); @@ -317,16 +304,19 @@ public class PoisonPlugin extends Plugin poisonedActors.values().removeIf(info -> info.getLastDamageTick() + POISON_TICK_TICKS + 5 < tickCount); } + @Subscribe private void onNpcDespawned(NpcDespawned event) { poisonedActors.remove(event.getNpc()); } + @Subscribe private void onPlayerDespawned(PlayerDespawned event) { poisonedActors.remove(event.getPlayer()); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals(PoisonConfig.GROUP)) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/PrayAgainstPlayerConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/PrayAgainstPlayerConfig.java index 6317c62a07..58d99491fd 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/PrayAgainstPlayerConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/PrayAgainstPlayerConfig.java @@ -24,7 +24,6 @@ package net.runelite.client.plugins.prayagainstplayer; -import java.awt.Color; import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; @@ -32,63 +31,8 @@ import net.runelite.client.config.ConfigItem; @ConfigGroup("prayagainstplayer") public interface PrayAgainstPlayerConfig extends Config { - @ConfigItem( - position = 0, - keyName = "attackerPlayerColor", - name = "Attacker color", - description = "This is the color that will be used to highlight attackers." - ) - default Color attackerPlayerColor() - { - return new Color(0xFF0006); - } - @ConfigItem( position = 1, - keyName = "potentialPlayerColor", - name = "Potential Attacker color", - description = "This is the color that will be used to highlight potential attackers." - ) - default Color potentialPlayerColor() - { - return new Color(0xFFFF00); - } - - @ConfigItem( - position = 2, - keyName = "attackerTargetTimeout", - name = "Attacker Timeout", - description = "Seconds until attacker is no longer highlighted." - ) - default int attackerTargetTimeout() - { - return 10; - } - - @ConfigItem( - position = 3, - keyName = "potentialTargetTimeout", - name = "Potential Attacker Timeout", - description = "Seconds until potential attacker is no longer highlighted." - ) - default int potentialTargetTimeout() - { - return 10; - } - - @ConfigItem( - position = 4, - keyName = "newSpawnTimeout", - name = "New Player Timeout", - description = "Seconds until logged in/spawned player is no longer highlighted." - ) - default int newSpawnTimeout() - { - return 5; - } - - @ConfigItem( - position = 5, keyName = "ignoreFriends", name = "Ignore Friends", description = "This lets you decide whether you want friends to be highlighted by this plugin." @@ -99,7 +43,7 @@ public interface PrayAgainstPlayerConfig extends Config } @ConfigItem( - position = 6, + position = 2, keyName = "ignoreClanMates", name = "Ignore Clan Mates", description = "This lets you decide whether you want clan mates to be highlighted by this plugin." @@ -110,40 +54,7 @@ public interface PrayAgainstPlayerConfig extends Config } @ConfigItem( - position = 7, - keyName = "markNewPlayer", - name = "Mark new player as potential attacker", - description = "Marks someone that logged in or teleported as a potential attacker for your safety\nDO NOT RUN THIS IN WORLD 1-2 GRAND EXCHANGE!" - ) - default boolean markNewPlayer() - { - return false; - } - - @ConfigItem( - position = 8, - keyName = "drawTargetPrayAgainst", - name = "Draw what to pray on attacker", - description = "Tells you what to pray from what weapon the attacker is holding" - ) - default boolean drawTargetPrayAgainst() - { - return true; - } - - @ConfigItem( - position = 9, - keyName = "drawPotentialTargetPrayAgainst", - name = "Draw what to pray on potential attacker", - description = "Tells you what to pray from what weapon the potential attacker is holding" - ) - default boolean drawPotentialTargetPrayAgainst() - { - return true; - } - - @ConfigItem( - position = 10, + position = 3, keyName = "drawTargetPrayAgainstPrayerTab", name = "Draw what to pray from prayer tab", description = "Tells you what to pray from what weapon the attacker is holding from the prayer tab" @@ -152,81 +63,4 @@ public interface PrayAgainstPlayerConfig extends Config { return false; } - - @ConfigItem( - position = 11, - keyName = "drawTargetsName", - name = "Draw name on attacker", - description = "Configures whether or not the attacker\'s name should be shown" - ) - default boolean drawTargetsName() - { - return true; - } - - @ConfigItem( - position = 12, - keyName = "drawPotentialTargetsName", - name = "Draw name on potential attacker", - description = "Configures whether or not the potential attacker\'s name should be shown" - ) - default boolean drawPotentialTargetsName() - { - return true; - } - - @ConfigItem( - position = 13, - keyName = "drawTargetHighlight", - name = "Draw highlight around attacker", - description = "Configures whether or not the attacker should be highlighted" - ) - default boolean drawTargetHighlight() - { - return true; - } - - @ConfigItem( - position = 14, - keyName = "drawPotentialTargetHighlight", - name = "Draw highlight around potential attacker", - description = "Configures whether or not the potential attacker should be highlighted" - ) - default boolean drawPotentialTargetHighlight() - { - return true; - } - - @ConfigItem( - position = 15, - keyName = "drawTargetTile", - name = "Draw tile under attacker", - description = "Configures whether or not the attacker\'s tile be highlighted" - ) - default boolean drawTargetTile() - { - return false; - } - - @ConfigItem( - position = 16, - keyName = "drawPotentialTargetTile", - name = "Draw tile under potential attacker", - description = "Configures whether or not the potential attacker\'s tile be highlighted" - ) - default boolean drawPotentialTargetTile() - { - return false; - } - - @ConfigItem( - position = 17, - keyName = "drawUnknownWeapons", - name = "Draw unknown weapons", - description = "Configures whether or not the unknown weapons should be shown when a player equips one" - ) - default boolean drawUnknownWeapons() - { - return false; - } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/PrayAgainstPlayerOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/PrayAgainstPlayerOverlay.java index 97d8bfe4c6..9a5298af4e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/PrayAgainstPlayerOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/PrayAgainstPlayerOverlay.java @@ -24,204 +24,55 @@ package net.runelite.client.plugins.prayagainstplayer; -import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics2D; -import java.awt.Polygon; -import java.awt.image.BufferedImage; -import java.util.ConcurrentModificationException; import javax.inject.Inject; import javax.inject.Singleton; -import net.runelite.api.Client; -import net.runelite.api.ItemDefinition; -import net.runelite.api.Player; -import net.runelite.api.Point; -import net.runelite.api.kit.KitType; +import net.runelite.client.game.PlayerContainer; +import net.runelite.client.game.PlayerManager; +import net.runelite.client.graphics.ModelOutlineRenderer; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.OverlayPriority; -import net.runelite.client.ui.overlay.OverlayUtil; -import net.runelite.api.util.Text; @Singleton class PrayAgainstPlayerOverlay extends Overlay { - private final PrayAgainstPlayerPlugin plugin; - private final Client client; + private final PlayerManager playerManager; + private final ModelOutlineRenderer outlineRenderer; @Inject - private PrayAgainstPlayerOverlay(final PrayAgainstPlayerPlugin plugin, final Client client) + private PrayAgainstPlayerOverlay( + final PrayAgainstPlayerPlugin plugin, + final PlayerManager playerManager, + final ModelOutlineRenderer outlineRenderer + ) { - super(plugin); this.plugin = plugin; - this.client = client; - + this.playerManager = playerManager; + this.outlineRenderer = outlineRenderer; setLayer(OverlayLayer.ABOVE_SCENE); setPosition(OverlayPosition.DYNAMIC); setPriority(OverlayPriority.HIGH); } - @Override public Dimension render(Graphics2D graphics) { - renderPotentialPlayers(graphics); - renderAttackingPlayers(graphics); + for (PlayerContainer player : playerManager.getAllAttackers()) + { + if (player.getPlayer() == null + || (plugin.isIgnoreFriends() && player.isFriend() + || (plugin.isIgnoreClanMates() && player.isClan())) + ) + { + continue; + } + outlineRenderer.drawOutline(player.getPlayer(), 4, player.getAttackStyle().getColor()); + + } return null; } - - private void renderPotentialPlayers(Graphics2D graphics) - { - if (plugin.getPotentialPlayersAttackingMe() == null || !plugin.getPotentialPlayersAttackingMe().isEmpty()) - { - try - { - if (plugin.getPotentialPlayersAttackingMe() != null) - { - for (PlayerContainer container : plugin.getPotentialPlayersAttackingMe()) - { - if ((System.currentTimeMillis() > (container.getWhenTheyAttackedMe() + container.getMillisToExpireHighlight())) && (container.getPlayer().getInteracting() != client.getLocalPlayer())) - { - plugin.removePlayerFromPotentialContainer(container); - } - if (plugin.isDrawPotentialTargetsName()) - { - renderNameAboveHead(graphics, container.getPlayer(), plugin.getPotentialPlayerColor()); - } - if (plugin.isDrawPotentialTargetHighlight()) - { - renderHighlightedPlayer(graphics, container.getPlayer(), plugin.getPotentialPlayerColor()); - } - if (plugin.isDrawPotentialTargetTile()) - { - renderTileUnderPlayer(graphics, container.getPlayer(), plugin.getPotentialPlayerColor()); - } - if (plugin.isDrawPotentialTargetPrayAgainst()) - { - renderPrayAgainstOnPlayer(graphics, container.getPlayer(), plugin.getPotentialPlayerColor()); - } - } - } - } - catch (ConcurrentModificationException ignored) - { - } - } - } - - private void renderAttackingPlayers(Graphics2D graphics) - { - if (plugin.getPlayersAttackingMe() == null || !plugin.getPlayersAttackingMe().isEmpty()) - { - try - { - if (plugin.getPlayersAttackingMe() != null) - { - for (PlayerContainer container : plugin.getPlayersAttackingMe()) - { - if ((System.currentTimeMillis() > (container.getWhenTheyAttackedMe() + container.getMillisToExpireHighlight())) && (container.getPlayer().getInteracting() != client.getLocalPlayer())) - { - plugin.removePlayerFromAttackerContainer(container); - } - - if (plugin.isDrawTargetsName()) - { - renderNameAboveHead(graphics, container.getPlayer(), plugin.getAttackerPlayerColor()); - } - if (plugin.isDrawTargetHighlight()) - { - renderHighlightedPlayer(graphics, container.getPlayer(), plugin.getAttackerPlayerColor()); - } - if (plugin.isDrawTargetTile()) - { - renderTileUnderPlayer(graphics, container.getPlayer(), plugin.getAttackerPlayerColor()); - } - if (plugin.isDrawTargetPrayAgainst()) - { - renderPrayAgainstOnPlayer(graphics, container.getPlayer(), plugin.getAttackerPlayerColor()); - } - } - } - } - catch (ConcurrentModificationException ignored) - { - } - } - } - - private void renderNameAboveHead(Graphics2D graphics, Player player, Color color) - { - final String name = Text.sanitize(player.getName()); - final int offset = player.getLogicalHeight() + 40; - Point textLocation = player.getCanvasTextLocation(graphics, name, offset); - if (textLocation != null) - { - OverlayUtil.renderTextLocation(graphics, textLocation, name, color); - } - } - - private void renderHighlightedPlayer(Graphics2D graphics, Player player, Color color) - { - try - { - OverlayUtil.renderPolygon(graphics, player.getConvexHull(), color); - } - catch (NullPointerException ignored) - { - } - } - - private void renderTileUnderPlayer(Graphics2D graphics, Player player, Color color) - { - Polygon poly = player.getCanvasTilePoly(); - OverlayUtil.renderPolygon(graphics, poly, color); - } - - private void renderPrayAgainstOnPlayer(Graphics2D graphics, Player player, Color color) - { - final int offset = (player.getLogicalHeight() / 2) + 75; - BufferedImage icon; - - switch (WeaponType.checkWeaponOnPlayer(client, player)) - { - case WEAPON_MELEE: - icon = plugin.getProtectionIcon(WeaponType.WEAPON_MELEE); - break; - case WEAPON_MAGIC: - icon = plugin.getProtectionIcon(WeaponType.WEAPON_MAGIC); - break; - case WEAPON_RANGED: - icon = plugin.getProtectionIcon(WeaponType.WEAPON_RANGED); - break; - default: - icon = null; - break; - } - try - { - if (icon != null) - { - Point point = player.getCanvasImageLocation(icon, offset); - OverlayUtil.renderImageLocation(graphics, point, icon); - } - else - { - if (plugin.isDrawUnknownWeapons()) - { - int itemId = player.getPlayerAppearance().getEquipmentId(KitType.WEAPON); - ItemDefinition itemComposition = client.getItemDefinition(itemId); - - final String str = itemComposition.getName().toUpperCase(); - Point point = player.getCanvasTextLocation(graphics, str, offset); - OverlayUtil.renderTextLocation(graphics, point, str, color); - } - } - } - catch (Exception ignored) - { - } - } - } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/PrayAgainstPlayerOverlayPrayerTab.java b/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/PrayAgainstPlayerOverlayPrayerTab.java index c4380983f3..62317d12f6 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/PrayAgainstPlayerOverlayPrayerTab.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/PrayAgainstPlayerOverlayPrayerTab.java @@ -29,13 +29,15 @@ import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.Polygon; import java.awt.Rectangle; -import java.util.ConcurrentModificationException; import javax.inject.Inject; import javax.inject.Singleton; import net.runelite.api.Client; -import net.runelite.api.Player; +import net.runelite.api.VarClientInt; +import net.runelite.api.vars.InterfaceTab; import net.runelite.api.widgets.Widget; -import net.runelite.api.widgets.WidgetInfo; +import net.runelite.client.game.AttackStyle; +import net.runelite.client.game.PlayerContainer; +import net.runelite.client.game.PlayerManager; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; @@ -46,16 +48,17 @@ import net.runelite.client.ui.overlay.OverlayUtil; class PrayAgainstPlayerOverlayPrayerTab extends Overlay { - private final PrayAgainstPlayerPlugin plugin; + private final PlayerManager playerManager; private final Client client; @Inject - private PrayAgainstPlayerOverlayPrayerTab(final PrayAgainstPlayerPlugin plugin, final Client client) + private PrayAgainstPlayerOverlayPrayerTab( + final PlayerManager playerManager, + final Client client + ) { - super(plugin); - this.plugin = plugin; this.client = client; - + this.playerManager = playerManager; setPosition(OverlayPosition.DETACHED); setLayer(OverlayLayer.ALWAYS_ON_TOP); setPriority(OverlayPriority.MED); @@ -65,55 +68,30 @@ class PrayAgainstPlayerOverlayPrayerTab extends Overlay @Override public Dimension render(Graphics2D graphics) { - if (plugin.getPlayersAttackingMe() == null || !plugin.getPlayersAttackingMe().isEmpty()) + for (PlayerContainer player : playerManager.getAllAttackers()) { - try + if (player.getAttackStyle() == AttackStyle.UNKNOWN) { - if (plugin.getPlayersAttackingMe() != null) - { - for (PlayerContainer container : plugin.getPlayersAttackingMe()) - { - if (plugin.getPlayersAttackingMe() != null && plugin.getPlayersAttackingMe().size() == 1 && - plugin.isDrawTargetPrayAgainstPrayerTab()) - { - renderPrayerToClick(graphics, container.getPlayer()); - } - } - } + continue; } - catch (ConcurrentModificationException ignored) + + final Widget widget = client.getWidget(player.getAttackStyle().getPrayer().getWidgetInfo()); + + if (widget == null) { + continue; + } + + if (client.getVar(VarClientInt.INTERFACE_TAB) == InterfaceTab.PRAYER.getId() && + !client.isPrayerActive(player.getAttackStyle().getPrayer())) + { + OverlayUtil.renderPolygon(graphics, rectangleToPolygon(widget.getBounds()), Color.RED); + break; } } return null; } - private void renderPrayerToClick(Graphics2D graphics, Player player) - { - Widget PROTECT_FROM_MAGIC = client.getWidget(WidgetInfo.PRAYER_PROTECT_FROM_MAGIC); - Widget PROTECT_FROM_RANGED = client.getWidget(WidgetInfo.PRAYER_PROTECT_FROM_MISSILES); - Widget PROTECT_FROM_MELEE = client.getWidget(WidgetInfo.PRAYER_PROTECT_FROM_MELEE); - Color color = Color.RED; - if (PROTECT_FROM_MELEE.isHidden()) - { - return; - } - switch (WeaponType.checkWeaponOnPlayer(client, player)) - { - case WEAPON_MAGIC: - OverlayUtil.renderPolygon(graphics, rectangleToPolygon(PROTECT_FROM_MAGIC.getBounds()), color); - break; - case WEAPON_MELEE: - OverlayUtil.renderPolygon(graphics, rectangleToPolygon(PROTECT_FROM_MELEE.getBounds()), color); - break; - case WEAPON_RANGED: - OverlayUtil.renderPolygon(graphics, rectangleToPolygon(PROTECT_FROM_RANGED.getBounds()), color); - break; - default: - break; - } - } - private static Polygon rectangleToPolygon(Rectangle rect) { int[] xpoints = {rect.x, rect.x + rect.width, rect.x + rect.width, rect.x}; @@ -121,5 +99,4 @@ class PrayAgainstPlayerOverlayPrayerTab extends Overlay return new Polygon(xpoints, ypoints, 4); } - } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/PrayAgainstPlayerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/PrayAgainstPlayerPlugin.java index 58666f2bca..3a1bf874e5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/PrayAgainstPlayerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/PrayAgainstPlayerPlugin.java @@ -25,37 +25,19 @@ package net.runelite.client.plugins.prayagainstplayer; import com.google.inject.Provides; -import java.awt.Color; -import java.awt.Dimension; -import java.awt.image.BufferedImage; -import java.awt.image.ColorModel; -import java.awt.image.IndexColorModel; -import java.awt.image.WritableRaster; -import java.util.ArrayList; -import java.util.List; import javax.inject.Inject; import javax.inject.Singleton; import lombok.AccessLevel; import lombok.Getter; -import net.runelite.api.AnimationID; import net.runelite.api.Client; -import net.runelite.api.GameState; -import net.runelite.api.Player; -import net.runelite.api.SpriteID; -import net.runelite.api.events.AnimationChanged; -import net.runelite.api.events.GameStateChanged; -import net.runelite.api.events.InteractingChanged; -import net.runelite.api.events.PlayerDespawned; -import net.runelite.api.events.PlayerSpawned; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.SpriteManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; -import net.runelite.client.util.ImageUtil; @PluginDescriptor( name = "Pray Against Player", @@ -64,78 +46,26 @@ import net.runelite.client.util.ImageUtil; type = PluginType.PVP, enabledByDefault = false ) - -/** - * I am fully aware that there is plenty of overhead and is a MESS! - * If you'd like to contribute please do! - */ @Singleton +@Getter(AccessLevel.PACKAGE) public class PrayAgainstPlayerPlugin extends Plugin { - - private static final int[] PROTECTION_ICONS = { - SpriteID.PRAYER_PROTECT_FROM_MISSILES, - SpriteID.PRAYER_PROTECT_FROM_MELEE, - SpriteID.PRAYER_PROTECT_FROM_MAGIC - }; - private static final Dimension PROTECTION_ICON_DIMENSION = new Dimension(33, 33); - private static final Color PROTECTION_ICON_OUTLINE_COLOR = new Color(33, 33, 33); - private final BufferedImage[] ProtectionIcons = new BufferedImage[PROTECTION_ICONS.length]; - - private List potentialPlayersAttackingMe; - private List playersAttackingMe; - @Inject private Client client; - @Inject private SpriteManager spriteManager; - @Inject private OverlayManager overlayManager; - @Inject private PrayAgainstPlayerOverlay overlay; - @Inject private PrayAgainstPlayerOverlayPrayerTab overlayPrayerTab; - @Inject private PrayAgainstPlayerConfig config; - @Inject - private EventBus eventBus; - - @Getter(AccessLevel.PACKAGE) - private Color attackerPlayerColor; - @Getter(AccessLevel.PACKAGE) - private Color potentialPlayerColor; - private int attackerTargetTimeout; - private int potentialTargetTimeout; - private int newSpawnTimeout; private boolean ignoreFriends; private boolean ignoreClanMates; - private boolean markNewPlayer; - @Getter(AccessLevel.PACKAGE) - private boolean drawTargetPrayAgainst; - @Getter(AccessLevel.PACKAGE) - private boolean drawPotentialTargetPrayAgainst; - @Getter(AccessLevel.PACKAGE) private boolean drawTargetPrayAgainstPrayerTab; - @Getter(AccessLevel.PACKAGE) - private boolean drawTargetsName; - @Getter(AccessLevel.PACKAGE) - private boolean drawPotentialTargetsName; - @Getter(AccessLevel.PACKAGE) - private boolean drawTargetHighlight; - @Getter(AccessLevel.PACKAGE) - private boolean drawPotentialTargetHighlight; - @Getter(AccessLevel.PACKAGE) - private boolean drawTargetTile; - @Getter(AccessLevel.PACKAGE) - private boolean drawPotentialTargetTile; - @Getter(AccessLevel.PACKAGE) - private boolean drawUnknownWeapons; @Provides PrayAgainstPlayerConfig provideConfig(ConfigManager configManager) @@ -143,288 +73,22 @@ public class PrayAgainstPlayerPlugin extends Plugin return configManager.getConfig(PrayAgainstPlayerConfig.class); } - private void onGameStateChanged(GameStateChanged gameStateChanged) - { - if (gameStateChanged.getGameState() == GameState.LOGGED_IN) - { - loadProtectionIcons(); - } - } - @Override protected void startUp() { updateConfig(); - addSubscriptions(); - - potentialPlayersAttackingMe = new ArrayList<>(); - playersAttackingMe = new ArrayList<>(); overlayManager.add(overlay); overlayManager.add(overlayPrayerTab); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(overlay); overlayManager.remove(overlayPrayerTab); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(AnimationChanged.class, this, this::onAnimationChanged); - eventBus.subscribe(InteractingChanged.class, this, this::onInteractingChanged); - eventBus.subscribe(PlayerDespawned.class, this, this::onPlayerDespawned); - eventBus.subscribe(PlayerSpawned.class, this, this::onPlayerSpawned); - } - - private void onAnimationChanged(AnimationChanged animationChanged) - { - if ((animationChanged.getActor() instanceof Player) && (animationChanged.getActor().getInteracting() instanceof Player) && (animationChanged.getActor().getInteracting() == client.getLocalPlayer())) - { - Player sourcePlayer = (Player) animationChanged.getActor(); - - // is the client is a friend/clan and the config is set to ignore friends/clan dont add them to list - if (client.isFriended(sourcePlayer.getName(), true) && this.ignoreFriends) - { - return; - } - if (client.isClanMember(sourcePlayer.getName()) && this.ignoreClanMates) - { - return; - } - - if ((sourcePlayer.getAnimation() != -1) && (!isBlockAnimation(sourcePlayer.getAnimation()))) - { - // if attacker attacks again, reset his timer so overlay doesn't go away - if (findPlayerInAttackerList(sourcePlayer) != null) - { - resetPlayerFromAttackerContainerTimer(findPlayerInAttackerList(sourcePlayer)); - } - // if he attacks and he was in the potential attackers list, remove him - if (!potentialPlayersAttackingMe.isEmpty() && potentialPlayersAttackingMe.contains(findPlayerInPotentialList(sourcePlayer))) - { - removePlayerFromPotentialContainer(findPlayerInPotentialList(sourcePlayer)); - } - // if he's not in the attackers list, add him - if (findPlayerInAttackerList(sourcePlayer) == null) - { - PlayerContainer container = new PlayerContainer(sourcePlayer, System.currentTimeMillis(), (this.attackerTargetTimeout * 1000)); - playersAttackingMe.add(container); - } - } - } - } - - private void onInteractingChanged(InteractingChanged interactingChanged) - { - // if someone interacts with you, add them to the potential attackers list - if ((interactingChanged.getSource() instanceof Player) && (interactingChanged.getTarget() instanceof Player)) - { - Player sourcePlayer = (Player) interactingChanged.getSource(); - Player targetPlayer = (Player) interactingChanged.getTarget(); - if ((targetPlayer == client.getLocalPlayer()) && (findPlayerInPotentialList(sourcePlayer) == null)) - { //we're being interacted with - - // is the client is a friend/clan and the config is set to ignore friends/clan dont add them to list - if (client.isFriended(sourcePlayer.getName(), true) && this.ignoreFriends) - { - return; - } - if (client.isClanMember(sourcePlayer.getName()) && this.ignoreClanMates) - { - return; - } - - PlayerContainer container = new PlayerContainer(sourcePlayer, System.currentTimeMillis(), (this.potentialTargetTimeout * 1000)); - potentialPlayersAttackingMe.add(container); - } - } - } - - private void onPlayerDespawned(PlayerDespawned playerDespawned) - { - PlayerContainer container = findPlayerInAttackerList(playerDespawned.getPlayer()); - PlayerContainer container2 = findPlayerInPotentialList(playerDespawned.getPlayer()); - if (container != null) - { - playersAttackingMe.remove(container); - } - if (container2 != null) - { - potentialPlayersAttackingMe.remove(container2); - } - } - - private void onPlayerSpawned(PlayerSpawned playerSpawned) - { - if (this.markNewPlayer) - { - Player p = playerSpawned.getPlayer(); - - if (client.isFriended(p.getName(), true) && this.ignoreFriends) - { - return; - } - if (client.isClanMember(p.getName()) && this.ignoreClanMates) - { - return; - } - - PlayerContainer container = findPlayerInPotentialList(p); - if (container == null) - { - container = new PlayerContainer(p, System.currentTimeMillis(), (this.newSpawnTimeout * 1000)); - potentialPlayersAttackingMe.add(container); - } - } - } - - private PlayerContainer findPlayerInAttackerList(Player player) - { - if (playersAttackingMe.isEmpty()) - { - return null; - } - for (PlayerContainer container : playersAttackingMe) - { - if (container.getPlayer() == player) - { - return container; - } - } - return null; - } - - private PlayerContainer findPlayerInPotentialList(Player player) - { - if (potentialPlayersAttackingMe.isEmpty()) - { - return null; - } - for (PlayerContainer container : potentialPlayersAttackingMe) - { - if (container.getPlayer() == player) - { - return container; - } - } - return null; - } - - /** - * Resets player timer in case he attacks again, so his highlight doesn't go away so easily - * - * @param container - */ - private void resetPlayerFromAttackerContainerTimer(PlayerContainer container) - { - removePlayerFromAttackerContainer(container); - PlayerContainer newContainer = new PlayerContainer(container.getPlayer(), System.currentTimeMillis(), (this.attackerTargetTimeout * 1000)); - playersAttackingMe.add(newContainer); - } - - void removePlayerFromPotentialContainer(PlayerContainer container) - { - if ((potentialPlayersAttackingMe != null) && (!potentialPlayersAttackingMe.isEmpty())) - { - potentialPlayersAttackingMe.remove(container); - } - } - - void removePlayerFromAttackerContainer(PlayerContainer container) - { - if ((playersAttackingMe != null) && (!playersAttackingMe.isEmpty())) - { - playersAttackingMe.remove(container); - } - } - - private boolean isBlockAnimation(int anim) - { - switch (anim) - { - case AnimationID.BLOCK_DEFENDER: - case AnimationID.BLOCK_NO_SHIELD: - case AnimationID.BLOCK_SHIELD: - case AnimationID.BLOCK_SWORD: - case AnimationID.BLOCK_UNARMED: - return true; - default: - return false; - } - } - - List getPotentialPlayersAttackingMe() - { - return potentialPlayersAttackingMe; - } - - List getPlayersAttackingMe() - { - return playersAttackingMe; - } - - //All of the methods below are from the Zulrah plugin!!! Credits to it's respective owner - private void loadProtectionIcons() - { - for (int i = 0; i < PROTECTION_ICONS.length; i++) - { - final int resource = PROTECTION_ICONS[i]; - ProtectionIcons[i] = rgbaToIndexedBufferedImage(ProtectionIconFromSprite(spriteManager.getSprite(resource, 0))); - } - } - - private static BufferedImage rgbaToIndexedBufferedImage(final BufferedImage sourceBufferedImage) - { - final BufferedImage indexedImage = new BufferedImage( - sourceBufferedImage.getWidth(), - sourceBufferedImage.getHeight(), - BufferedImage.TYPE_BYTE_INDEXED); - - final ColorModel cm = indexedImage.getColorModel(); - final IndexColorModel icm = (IndexColorModel) cm; - - final int size = icm.getMapSize(); - final byte[] reds = new byte[size]; - final byte[] greens = new byte[size]; - final byte[] blues = new byte[size]; - icm.getReds(reds); - icm.getGreens(greens); - icm.getBlues(blues); - - final WritableRaster raster = indexedImage.getRaster(); - final int pixel = raster.getSample(0, 0, 0); - final IndexColorModel resultIcm = new IndexColorModel(8, size, reds, greens, blues, pixel); - final BufferedImage resultIndexedImage = new BufferedImage(resultIcm, raster, sourceBufferedImage.isAlphaPremultiplied(), null); - resultIndexedImage.getGraphics().drawImage(sourceBufferedImage, 0, 0, null); - return resultIndexedImage; - } - - private static BufferedImage ProtectionIconFromSprite(final BufferedImage freezeSprite) - { - final BufferedImage freezeCanvas = ImageUtil.resizeCanvas(freezeSprite, PROTECTION_ICON_DIMENSION.width, PROTECTION_ICON_DIMENSION.height); - return ImageUtil.outlineImage(freezeCanvas, PROTECTION_ICON_OUTLINE_COLOR); - } - - BufferedImage getProtectionIcon(WeaponType weaponType) - { - switch (weaponType) - { - case WEAPON_RANGED: - return ProtectionIcons[0]; - case WEAPON_MELEE: - return ProtectionIcons[1]; - case WEAPON_MAGIC: - return ProtectionIcons[2]; - } - return null; - } - + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("prayagainstplayer")) @@ -437,23 +101,17 @@ public class PrayAgainstPlayerPlugin extends Plugin private void updateConfig() { - this.attackerPlayerColor = config.attackerPlayerColor(); - this.potentialPlayerColor = config.potentialPlayerColor(); - this.attackerTargetTimeout = config.attackerTargetTimeout(); - this.potentialTargetTimeout = config.potentialTargetTimeout(); - this.newSpawnTimeout = config.newSpawnTimeout(); this.ignoreFriends = config.ignoreFriends(); this.ignoreClanMates = config.ignoreClanMates(); - this.markNewPlayer = config.markNewPlayer(); - this.drawTargetPrayAgainst = config.drawTargetPrayAgainst(); - this.drawPotentialTargetPrayAgainst = config.drawPotentialTargetPrayAgainst(); this.drawTargetPrayAgainstPrayerTab = config.drawTargetPrayAgainstPrayerTab(); - this.drawTargetsName = config.drawTargetsName(); - this.drawPotentialTargetsName = config.drawPotentialTargetsName(); - this.drawTargetHighlight = config.drawTargetHighlight(); - this.drawPotentialTargetHighlight = config.drawPotentialTargetHighlight(); - this.drawTargetTile = config.drawTargetTile(); - this.drawPotentialTargetTile = config.drawPotentialTargetTile(); - this.drawUnknownWeapons = config.drawUnknownWeapons(); + + if (this.drawTargetPrayAgainstPrayerTab) + { + overlayManager.add(overlayPrayerTab); + } + else + { + overlayManager.remove(overlayPrayerTab); + } } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/WeaponType.java b/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/WeaponType.java deleted file mode 100644 index d6078e556e..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/prayagainstplayer/WeaponType.java +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Copyright (c) 2019, gazivodag - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -package net.runelite.client.plugins.prayagainstplayer; - -import net.runelite.api.Client; -import net.runelite.api.ItemDefinition; -import net.runelite.api.Player; -import net.runelite.api.kit.KitType; - -enum WeaponType -{ - - WEAPON_MELEE, - WEAPON_RANGED, - WEAPON_MAGIC, - WEAPON_UNKNOWN; - - /** - * im fully aware this could of been done better!!! - * - * @param client - * @param attacker - * @return - */ - public static WeaponType checkWeaponOnPlayer(Client client, Player attacker) - { - int itemId = attacker.getPlayerAppearance().getEquipmentId(KitType.WEAPON); - ItemDefinition itemComposition = client.getItemDefinition(itemId); - String weaponNameGivenLowerCase = itemComposition.getName().toLowerCase(); - - if (itemId == -1) - { - return WEAPON_MELEE; - } - if (weaponNameGivenLowerCase.toLowerCase().contains("null")) - { - return WEAPON_MELEE; - } - - for (String meleeWeaponName : meleeWeaponNames) - { - if (weaponNameGivenLowerCase.contains(meleeWeaponName) && !weaponNameGivenLowerCase.contains("thrownaxe")) - { - return WEAPON_MELEE; - } - } - - for (String rangedWeaponName : rangedWeaponNames) - { - if (weaponNameGivenLowerCase.contains(rangedWeaponName)) - { - return WEAPON_RANGED; - } - } - - for (String magicWeaponName : magicWeaponNames) - { - if (weaponNameGivenLowerCase.contains(magicWeaponName)) - { - return WEAPON_MAGIC; - } - } - - return WEAPON_UNKNOWN; - - } - - private static final String[] meleeWeaponNames = { - "sword", - "scimitar", - "dagger", - "spear", - "mace", - "axe", - "whip", - "tentacle", - "-ket-", - "-xil-", - "warhammer", - "halberd", - "claws", - "hasta", - "scythe", - "maul", - "anchor", - "sabre", - "excalibur", - "machete", - "dragon hunter lance", - "event rpg", - "silverlight", - "darklight", - "arclight", - "flail", - "granite hammer", - "rapier", - "bulwark" - }; - - private static final String[] rangedWeaponNames = { - "bow", - "blowpipe", - "xil-ul", - "knife", - "dart", - "thrownaxe", - "chinchompa", - "ballista" - }; - - private static final String[] magicWeaponNames = { - "staff", - "trident", - "wand", - "dawnbringer" - }; - -} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerPlugin.java index 017976786c..5a03729055 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerPlugin.java @@ -38,11 +38,11 @@ import net.runelite.api.InventoryID; import net.runelite.api.Item; import net.runelite.api.ItemContainer; import net.runelite.api.Prayer; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.ItemContainerChanged; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.game.SpriteManager; import net.runelite.client.plugins.Plugin; @@ -90,9 +90,6 @@ public class PrayerPlugin extends Plugin @Inject private PrayerConfig config; - @Inject - private EventBus eventBus; - @Inject private ItemManager itemManager; @@ -123,7 +120,6 @@ public class PrayerPlugin extends Plugin protected void startUp() { updateConfig(); - addSubscriptions(); overlayManager.add(flickOverlay); overlayManager.add(doseOverlay); @@ -133,21 +129,13 @@ public class PrayerPlugin extends Plugin @Override protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(flickOverlay); overlayManager.remove(doseOverlay); overlayManager.remove(barOverlay); removeIndicators(); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(ItemContainerChanged.class, this, this::onItemContainerChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - } - + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("prayer")) @@ -164,6 +152,7 @@ public class PrayerPlugin extends Plugin } } + @Subscribe private void onItemContainerChanged(final ItemContainerChanged event) { final ItemContainer container = event.getItemContainer(); @@ -189,6 +178,7 @@ public class PrayerPlugin extends Plugin } } + @Subscribe private void onGameTick(GameTick tick) { prayersActive = isAnyPrayerActive(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/prayeralert/PrayerAlertOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/prayeralert/PrayerAlertOverlay.java index 705d1dc458..c768fd3749 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/prayeralert/PrayerAlertOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/prayeralert/PrayerAlertOverlay.java @@ -153,6 +153,7 @@ class PrayerAlertOverlay extends Overlay if (item.getId() == prayerPotionId) { hasPrayerPotion = true; + break; } } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/prayeralert/PrayerAlertPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/prayeralert/PrayerAlertPlugin.java index 629d9de7b1..d6739fbef8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/prayeralert/PrayerAlertPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/prayeralert/PrayerAlertPlugin.java @@ -22,7 +22,7 @@ import javax.inject.Singleton; import lombok.AccessLevel; import lombok.Getter; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -48,9 +48,6 @@ public class PrayerAlertPlugin extends Plugin @Inject private PrayerAlertConfig config; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) private boolean alwaysShowAlert; @Getter(AccessLevel.PACKAGE) @@ -63,24 +60,21 @@ public class PrayerAlertPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { this.alwaysShowAlert = config.alwaysShowAlert(); this.oldRenderMode = config.oldRenderMode(); - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - overlayManager.add(overlay); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(overlay); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("prayeralert")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/privateserver/PrivateServerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/privateserver/PrivateServerPlugin.java index 9cb53c288f..22bdf73d80 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/privateserver/PrivateServerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/privateserver/PrivateServerPlugin.java @@ -36,7 +36,7 @@ import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; import net.runelite.client.RuneLite; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -56,10 +56,9 @@ public class PrivateServerPlugin extends Plugin { @Inject private Client client; + @Inject private PrivateServerConfig config; - @Inject - private EventBus eventBus; @Provides PrivateServerConfig getConfig(ConfigManager configManager) @@ -68,7 +67,7 @@ public class PrivateServerPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { if (!RuneLite.allowPrivateServer) { @@ -79,22 +78,15 @@ public class PrivateServerPlugin extends Plugin { client.setModulus(new BigInteger(config.modulus(), 16)); } - - addSubscriptions(); } @Override - protected void shutDown() throws Exception + protected void shutDown() { client.setModulus(null); - eventBus.unregister(this); - } - - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("privateserver")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/profiles/ProfilesPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/profiles/ProfilesPanel.java index 2ee0d0e1a3..00ddbac501 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/profiles/ProfilesPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/profiles/ProfilesPanel.java @@ -436,7 +436,7 @@ class ProfilesPanel extends PluginPanel getProfileData() + data + "\n"); } - void removeProfile(String data) throws InvalidKeySpecException, NoSuchAlgorithmException, IllegalBlockSizeException, InvalidKeyException, BadPaddingException, NoSuchPaddingException + void removeProfile(String data) throws InvalidKeySpecException, NoSuchAlgorithmException, IllegalBlockSizeException, InvalidKeyException, BadPaddingException, NoSuchPaddingException { setProfileData( getProfileData().replaceAll(data + "\\n", "")); @@ -524,7 +524,7 @@ class ProfilesPanel extends PluginPanel return cipher.doFinal(text.getBytes()); } - private static String decryptText(byte[] enc, SecretKey aesKey) throws NoSuchAlgorithmException, IllegalBlockSizeException, InvalidKeyException, BadPaddingException, NoSuchPaddingException + private static String decryptText(byte[] enc, SecretKey aesKey) throws NoSuchAlgorithmException, IllegalBlockSizeException, InvalidKeyException, BadPaddingException, NoSuchPaddingException { Cipher cipher = Cipher.getInstance("AES"); SecretKeySpec newKey = new SecretKeySpec(aesKey.getEncoded(), "AES"); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/profiles/ProfilesPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/profiles/ProfilesPlugin.java index fcdfea0705..448354f896 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/profiles/ProfilesPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/profiles/ProfilesPlugin.java @@ -32,7 +32,7 @@ import javax.inject.Singleton; import net.runelite.api.GameState; import net.runelite.api.events.GameStateChanged; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -57,9 +57,6 @@ public class ProfilesPlugin extends Plugin @Inject private ProfilesConfig config; - @Inject - private EventBus eventBus; - @Inject private ScheduledExecutorService executorService; @@ -75,15 +72,9 @@ public class ProfilesPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - - if (this.switchToPanel) - { - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - } panel = injector.getInstance(ProfilesPanel.class); panel.init(); @@ -104,11 +95,10 @@ public class ProfilesPlugin extends Plugin @Override protected void shutDown() { - eventBus.unregister(this); - clientToolbar.removeNavigation(navButton); } + @Subscribe private void onGameStateChanged(GameStateChanged event) { if (!this.switchToPanel) @@ -124,6 +114,7 @@ public class ProfilesPlugin extends Plugin } } + @Subscribe private void onConfigChanged(ConfigChanged event) throws Exception { if (event.getGroup().equals("profiles") && event.getKey().equals("rememberPassword")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverPlugin.java index 8bb0bfad49..0b5a0abe3e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverPlugin.java @@ -51,7 +51,7 @@ import static net.runelite.api.widgets.WidgetInfo.LIGHT_BOX_BUTTON_G; import static net.runelite.api.widgets.WidgetInfo.LIGHT_BOX_BUTTON_H; import static net.runelite.api.widgets.WidgetInfo.TO_GROUP; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -86,9 +86,6 @@ public class PuzzleSolverPlugin extends Plugin @Inject private PuzzleSolverConfig config; - @Inject - private EventBus eventBus; - private LightboxState lightbox; private final LightboxState[] changes = new LightboxState[LightBox.COMBINATIONS_POWER]; private Combination lastClick; @@ -102,36 +99,26 @@ public class PuzzleSolverPlugin extends Plugin private boolean drawDots; @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); overlayManager.add(overlay); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(overlay); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(WidgetLoaded.class, this, this::onWidgetLoaded); - eventBus.subscribe(MenuOptionClicked.class, this, this::onMenuOptionClicked); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - } - @Provides PuzzleSolverConfig provideConfig(ConfigManager configManager) { return configManager.getConfig(PuzzleSolverConfig.class); } + @Subscribe private void onWidgetLoaded(WidgetLoaded widget) { if (widget.getGroupId() != WidgetID.VARROCK_MUSEUM_QUIZ_GROUP_ID) @@ -165,6 +152,7 @@ public class PuzzleSolverPlugin extends Plugin } } + @Subscribe private void onMenuOptionClicked(MenuOptionClicked menuOptionClicked) { int widgetId = menuOptionClicked.getParam1(); @@ -221,6 +209,7 @@ public class PuzzleSolverPlugin extends Plugin } } + @Subscribe public void onGameTick(GameTick event) { Widget lightboxWidget = client.getWidget(WidgetInfo.LIGHT_BOX_CONTENTS); @@ -309,6 +298,7 @@ public class PuzzleSolverPlugin extends Plugin } } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("puzzlesolver")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/solver/PuzzleSwapPattern.java b/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/solver/PuzzleSwapPattern.java index ee5789103a..4c248e711e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/solver/PuzzleSwapPattern.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/solver/PuzzleSwapPattern.java @@ -24,11 +24,12 @@ */ package net.runelite.client.plugins.puzzlesolver.solver; +import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; @RequiredArgsConstructor -@Getter +@Getter(AccessLevel.PUBLIC) public enum PuzzleSwapPattern { ROTATE_LEFT_UP(new int[]{1, -1, 0, -1, -1, -1, -1, 0}, 1, 1), //Reference point diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/solver/pathfinding/IDAStarMM.java b/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/solver/pathfinding/IDAStarMM.java index 86877c2327..c066d5f20b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/solver/pathfinding/IDAStarMM.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/solver/pathfinding/IDAStarMM.java @@ -32,20 +32,7 @@ import static net.runelite.client.plugins.puzzlesolver.solver.PuzzleSolver.BLANK import static net.runelite.client.plugins.puzzlesolver.solver.PuzzleSolver.DIMENSION; import net.runelite.client.plugins.puzzlesolver.solver.PuzzleState; import net.runelite.client.plugins.puzzlesolver.solver.PuzzleSwapPattern; -import static net.runelite.client.plugins.puzzlesolver.solver.PuzzleSwapPattern.LAST_PIECE_COLUMN; -import static net.runelite.client.plugins.puzzlesolver.solver.PuzzleSwapPattern.LAST_PIECE_ROW; -import static net.runelite.client.plugins.puzzlesolver.solver.PuzzleSwapPattern.ROTATE_DOWN_LEFT; -import static net.runelite.client.plugins.puzzlesolver.solver.PuzzleSwapPattern.ROTATE_DOWN_RIGHT; -import static net.runelite.client.plugins.puzzlesolver.solver.PuzzleSwapPattern.ROTATE_LEFT_DOWN; -import static net.runelite.client.plugins.puzzlesolver.solver.PuzzleSwapPattern.ROTATE_LEFT_UP; -import static net.runelite.client.plugins.puzzlesolver.solver.PuzzleSwapPattern.ROTATE_RIGHT_DOWN; -import static net.runelite.client.plugins.puzzlesolver.solver.PuzzleSwapPattern.ROTATE_RIGHT_UP; -import static net.runelite.client.plugins.puzzlesolver.solver.PuzzleSwapPattern.ROTATE_UP_LEFT; -import static net.runelite.client.plugins.puzzlesolver.solver.PuzzleSwapPattern.ROTATE_UP_RIGHT; -import static net.runelite.client.plugins.puzzlesolver.solver.PuzzleSwapPattern.SHUFFLE_UP_ABOVE; -import static net.runelite.client.plugins.puzzlesolver.solver.PuzzleSwapPattern.SHUFFLE_UP_BELOW; -import static net.runelite.client.plugins.puzzlesolver.solver.PuzzleSwapPattern.SHUFFLE_UP_LEFT; -import static net.runelite.client.plugins.puzzlesolver.solver.PuzzleSwapPattern.SHUFFLE_UP_RIGHT; +import static net.runelite.client.plugins.puzzlesolver.solver.PuzzleSwapPattern.*; import net.runelite.client.plugins.puzzlesolver.solver.heuristics.Heuristic; public class IDAStarMM extends IDAStar diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/pvptools/PvpToolsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/pvptools/PvpToolsPlugin.java index c50ba43ce1..dd2e4f82c9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/pvptools/PvpToolsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/pvptools/PvpToolsPlugin.java @@ -49,7 +49,7 @@ import net.runelite.api.util.Text; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; import net.runelite.client.config.Keybind; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.input.KeyManager; @@ -103,9 +103,6 @@ public class PvpToolsPlugin extends Plugin @Inject private ItemManager itemManager; - @Inject - private EventBus eventBus; - private final PvpToolsPlugin uhPvpToolsPlugin = this; /** @@ -231,10 +228,9 @@ public class PvpToolsPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); overlayManager.add(playerCountOverlay); keyManager.registerKeyListener(renderselfHotkeyListener); @@ -271,10 +267,8 @@ public class PvpToolsPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(playerCountOverlay); keyManager.unregisterKeyListener(renderselfHotkeyListener); clientToolbar.removeNavigation(navButton); @@ -287,15 +281,7 @@ public class PvpToolsPlugin extends Plugin loaded = false; } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(ItemContainerChanged.class, this, this::onItemContainerChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(PlayerSpawned.class, this, this::onPlayerSpawned); - eventBus.subscribe(PlayerDespawned.class, this, this::onPlayerDespawned); - } - + @Subscribe private void onConfigChanged(ConfigChanged configChanged) { if (!"pvptools".equals(configChanged.getGroup())) @@ -371,6 +357,7 @@ public class PvpToolsPlugin extends Plugin } } + @Subscribe private void onItemContainerChanged(ItemContainerChanged event) { if (event.getItemContainer().equals(client.getItemContainer(InventoryID.INVENTORY)) && @@ -380,6 +367,7 @@ public class PvpToolsPlugin extends Plugin } } + @Subscribe private void onGameStateChanged(GameStateChanged event) { if (event.getGameState().equals(GameState.LOGGED_IN)) @@ -399,6 +387,7 @@ public class PvpToolsPlugin extends Plugin } } + @Subscribe private void onPlayerSpawned(PlayerSpawned event) { if (this.countPlayers && PvPUtil.isAttackable(client, event.getPlayer())) @@ -411,6 +400,7 @@ public class PvpToolsPlugin extends Plugin } } + @Subscribe private void onPlayerDespawned(PlayerDespawned event) { if (this.countPlayers && PvPUtil.isAttackable(client, event.getPlayer())) @@ -593,7 +583,7 @@ public class PvpToolsPlugin extends Plugin * * @param mode The {@link AttackMode} specifying clanmates, friends, or both. */ - public void hideAttackOptions(AttackMode mode) + private void hideAttackOptions(AttackMode mode) { switch (mode) { @@ -617,7 +607,7 @@ public class PvpToolsPlugin extends Plugin * * @param mode The {@link AttackMode} specifying clanmates, friends, or both. */ - public void hideCastOptions(AttackMode mode) + private void hideCastOptions(AttackMode mode) { switch (mode) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/pyramidplunder/PyramidPlunderPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/pyramidplunder/PyramidPlunderPlugin.java index 4975ec9465..01d31f0986 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/pyramidplunder/PyramidPlunderPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/pyramidplunder/PyramidPlunderPlugin.java @@ -55,7 +55,7 @@ import net.runelite.api.events.WallObjectChanged; import net.runelite.api.events.WallObjectDespawned; import net.runelite.api.events.WallObjectSpawned; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; @@ -80,7 +80,7 @@ public class PyramidPlunderPlugin extends Plugin static final int CLOSED_DOOR = TOMB_DOOR_20948; static final int OPENED_DOOR = TOMB_DOOR_20949; -// // Next 2 are in here for anyone who wants to spend more time on this + // // Next 2 are in here for anyone who wants to spend more time on this // private static final Set LOOTABLE = ImmutableSet.of( // GRAND_GOLD_CHEST, // SARCOPHAGUS_21255, @@ -120,9 +120,6 @@ public class PyramidPlunderPlugin extends Plugin @Inject private PyramidPlunderOverlay pyramidPlunderOverlay; - @Inject - private EventBus eventBus; - @Getter private boolean isInGame; @@ -147,35 +144,20 @@ public class PyramidPlunderPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(pyramidPlunderOverlay); highlighted.clear(); reset(); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(VarbitChanged.class, this, this::onVarbitChanged); - eventBus.subscribe(GameObjectSpawned.class, this, this::onGameObjectSpawned); - eventBus.subscribe(GameObjectChanged.class, this, this::onGameObjectChanged); - eventBus.subscribe(GameObjectDespawned.class, this, this::onGameObjectDespawned); - eventBus.subscribe(WallObjectSpawned.class, this, this::onWallObjectSpawned); - eventBus.subscribe(WallObjectChanged.class, this, this::onWallObjectChanged); - eventBus.subscribe(WallObjectDespawned.class, this, this::onWallObjectDespawned); - } - + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!"pyramidplunder".equals(event.getGroup())) @@ -225,6 +207,7 @@ public class PyramidPlunderPlugin extends Plugin ); } + @Subscribe private void onGameStateChanged(GameStateChanged event) { switch (event.getGameState()) @@ -258,6 +241,7 @@ public class PyramidPlunderPlugin extends Plugin } + @Subscribe private void onVarbitChanged(VarbitChanged event) { int lastValue = pyramidTimer; @@ -292,31 +276,37 @@ public class PyramidPlunderPlugin extends Plugin removeTimer(); } + @Subscribe private void onGameObjectSpawned(GameObjectSpawned event) { onTileObject(event.getTile(), null, event.getGameObject()); } + @Subscribe private void onGameObjectChanged(GameObjectChanged event) { onTileObject(event.getTile(), event.getPrevious(), event.getGameObject()); } + @Subscribe private void onGameObjectDespawned(GameObjectDespawned event) { onTileObject(event.getTile(), event.getGameObject(), null); } + @Subscribe private void onWallObjectSpawned(WallObjectSpawned event) { onTileObject(event.getTile(), null, event.getWallObject()); } + @Subscribe private void onWallObjectChanged(WallObjectChanged event) { onTileObject(event.getTile(), event.getPrevious(), event.getWallObject()); } + @Subscribe private void onWallObjectDespawned(WallObjectDespawned event) { onTileObject(event.getTile(), event.getWallObject(), null); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/questlist/QuestListPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/questlist/QuestListPlugin.java index 018a9c502c..afcbecd694 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/questlist/QuestListPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/questlist/QuestListPlugin.java @@ -33,6 +33,7 @@ import java.util.List; import java.util.stream.Collectors; import javax.inject.Inject; import javax.inject.Singleton; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Data; import lombok.Getter; @@ -47,6 +48,7 @@ import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.ScriptCallbackEvent; import net.runelite.api.events.VarClientIntChanged; import net.runelite.api.events.VarbitChanged; +import net.runelite.api.util.Text; import net.runelite.api.vars.InterfaceTab; import net.runelite.api.widgets.JavaScriptCallback; import net.runelite.api.widgets.Widget; @@ -54,12 +56,11 @@ import net.runelite.api.widgets.WidgetInfo; import net.runelite.api.widgets.WidgetPositionMode; import net.runelite.api.widgets.WidgetType; import net.runelite.client.callback.ClientThread; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.game.chatbox.ChatboxPanelManager; import net.runelite.client.game.chatbox.ChatboxTextInput; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.api.util.Text; @PluginDescriptor( name = "Quest List", @@ -88,9 +89,6 @@ public class QuestListPlugin extends Plugin @Inject private ClientThread clientThread; - @Inject - private EventBus eventBus; - private ChatboxTextInput searchInput; private Widget questSearchButton; private Widget questHideButton; @@ -102,15 +100,12 @@ public class QuestListPlugin extends Plugin @Override protected void startUp() { - addSubscriptions(); clientThread.invoke(this::addQuestButtons); } @Override protected void shutDown() { - eventBus.unregister(this); - Widget header = client.getWidget(WidgetInfo.QUESTLIST_BOX); if (header != null) { @@ -118,14 +113,7 @@ public class QuestListPlugin extends Plugin } } - private void addSubscriptions() - { - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(ScriptCallbackEvent.class, this, this::onScriptCallbackEvent); - eventBus.subscribe(VarbitChanged.class, this, this::onVarbitChanged); - eventBus.subscribe(VarClientIntChanged.class, this, this::onVarClientIntChanged); - } - + @Subscribe private void onGameStateChanged(GameStateChanged e) { if (e.getGameState() == GameState.LOGGING_IN) @@ -134,6 +122,7 @@ public class QuestListPlugin extends Plugin } } + @Subscribe private void onScriptCallbackEvent(ScriptCallbackEvent event) { if (!event.getEventName().equals("questProgressUpdated")) @@ -183,6 +172,7 @@ public class QuestListPlugin extends Plugin } } + @Subscribe private void onVarbitChanged(VarbitChanged varbitChanged) { if (isChatboxOpen() && isNotOnQuestTab()) @@ -191,6 +181,7 @@ public class QuestListPlugin extends Plugin } } + @Subscribe private void onVarClientIntChanged(VarClientIntChanged varClientIntChanged) { if (varClientIntChanged.getIndex() == VarClientInt.INTERFACE_TAB.getIndex() && isChatboxOpen() && isNotOnQuestTab()) @@ -389,7 +380,7 @@ public class QuestListPlugin extends Plugin } @AllArgsConstructor - @Getter + @Getter(AccessLevel.PRIVATE) private enum QuestContainer { FREE_QUESTS(WidgetInfo.QUESTLIST_FREE_CONTAINER), @@ -400,7 +391,7 @@ public class QuestListPlugin extends Plugin } @AllArgsConstructor - @Getter + @Getter(AccessLevel.PRIVATE) private enum QuestState { NOT_STARTED(0xff0000, "Not started", SpriteID.MINIMAP_ORB_HITPOINTS), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/Raid.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/Raid.java index 3d52feb934..60003ba543 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/Raid.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/Raid.java @@ -33,7 +33,7 @@ import lombok.Getter; import net.runelite.client.plugins.raids.solver.Layout; import net.runelite.client.plugins.raids.solver.Room; -public class Raid +class Raid { @Getter(AccessLevel.PACKAGE) private final RaidRoom[] rooms = new RaidRoom[16]; @@ -61,8 +61,18 @@ public class Raid if (room == null) { - RoomType type = RoomType.fromCode(layout.getRoomAt(i).getSymbol()); - room = type.getUnsolvedRoom(); + RaidRoom.Type type = RaidRoom.Type.fromCode(layout.getRoomAt(i).getSymbol()); + room = new RaidRoom(null, type); + + if (type == RaidRoom.Type.COMBAT) + { + room.setBoss(RaidRoom.Boss.UNKNOWN); + } + + if (type == RaidRoom.Type.PUZZLE) + { + room.setPuzzle(RaidRoom.Puzzle.UNKNOWN); + } setRoom(room, i); } @@ -93,7 +103,7 @@ public class Raid continue; } - if (rooms[room.getPosition()].getType() == RoomType.COMBAT) + if (rooms[room.getPosition()].getType() == RaidRoom.Type.COMBAT) { combatRooms.add(rooms[room.getPosition()]); } @@ -102,6 +112,11 @@ public class Raid return combatRooms.toArray(new RaidRoom[0]); } + String getRotationString() + { + return Joiner.on(",").join(Arrays.stream(getCombatRooms()).map(r -> r.getBoss().getName()).toArray()); + } + private RaidRoom[] getAllRooms() { List getAllRooms = new ArrayList<>(); @@ -152,7 +167,7 @@ public class Raid final int position = r.getPosition(); final RaidRoom room = getRoom(position); - if (room == null) + if (room == null || !(room.getType() == RaidRoom.Type.COMBAT || room.getType() == RaidRoom.Type.PUZZLE)) { continue; } @@ -160,8 +175,26 @@ public class Raid switch (room.getType()) { case PUZZLE: + final RaidRoom.Puzzle puzzle = room.getPuzzle(); + sb.append(puzzle.getName()); + + if (puzzle == RaidRoom.Puzzle.UNKNOWN) + { + sb.append(" (puzzle)"); + } + + sb.append(", "); + break; case COMBAT: - sb.append(room.getName()).append(", "); + final RaidRoom.Boss boss = room.getBoss(); + sb.append(boss.getName()); + + if (boss == RaidRoom.Boss.UNKNOWN) + { + sb.append(" (combat)"); + } + + sb.append(", "); break; } } @@ -169,4 +202,4 @@ public class Raid final String roomsString = sb.toString(); return roomsString.substring(0, roomsString.length() - 2); } -} +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidRoom.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidRoom.java index c040a29b67..bf6407999d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidRoom.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidRoom.java @@ -24,37 +24,139 @@ */ package net.runelite.client.plugins.raids; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; import lombok.Getter; -import lombok.RequiredArgsConstructor; +import lombok.Setter; +import net.runelite.api.Tile; -@RequiredArgsConstructor -@Getter -enum RaidRoom +public class RaidRoom { - START("Start", RoomType.START), - END("End", RoomType.END), - SCAVENGERS("Scavengers", RoomType.SCAVENGERS), - FARMING("Farming", RoomType.FARMING), - EMPTY("Empty", RoomType.EMPTY), - - TEKTON("Tekton", RoomType.COMBAT), - MUTTADILES("Muttadiles", RoomType.COMBAT), - GUARDIANS("Guardians", RoomType.COMBAT), - VESPULA("Vespula", RoomType.COMBAT), - SHAMANS("Shamans", RoomType.COMBAT), - VASA("Vasa", RoomType.COMBAT), - VANGUARDS("Vanguards", RoomType.COMBAT), - MYSTICS("Mystics", RoomType.COMBAT), - UNKNOWN_COMBAT("Unknown (combat)", RoomType.COMBAT), - - CRABS("Crabs", RoomType.PUZZLE), - ICE_DEMON("Ice Demon", RoomType.PUZZLE), - TIGHTROPE("Tightrope", RoomType.PUZZLE), - THIEVING("Thieving", RoomType.PUZZLE), - UNKNOWN_PUZZLE("Unknown (puzzle)", RoomType.PUZZLE); - static final int ROOM_MAX_SIZE = 32; + @Getter(AccessLevel.PACKAGE) + private final Tile base; + @Getter(AccessLevel.PACKAGE) + @Setter(AccessLevel.PACKAGE) + private Type type; + @Getter(AccessLevel.PUBLIC) + @Setter(AccessLevel.PUBLIC) + private Boss boss; + @Getter(AccessLevel.PACKAGE) + @Setter(AccessLevel.PACKAGE) + private Puzzle puzzle; + @Getter(AccessLevel.PACKAGE) + @Setter(AccessLevel.PACKAGE) + private RaidRoom previousRoom; + @Getter(AccessLevel.PACKAGE) + @Setter(AccessLevel.PACKAGE) + private RaidRoom nextRoom; - private final String name; - private final RoomType type; + RaidRoom(final Tile base, final Type type) + { + this.base = base; + this.type = type; + } + + @Override + public String toString() + { + switch (type) + { + case COMBAT: + return " " + type.getName() + " - " + boss.getName(); + + case PUZZLE: + return " " + type.getName() + " - " + puzzle.getName(); + + default: + return " " + type.getName(); + } + } + + @AllArgsConstructor + public enum Type + { + START("Start", "#"), + END("End", "¤"), + SCAVENGERS("Scavengers", "S"), + FARMING("Farming", "F"), + COMBAT("Combat", "C"), + PUZZLE("Puzzle", "P"), + EMPTY("Empty", " "); + + @Getter + private final String name; + + @Getter + private final String code; + + public static Type fromCode(char code) + { + for (Type type : Type.values()) + { + if (type.getCode().equalsIgnoreCase(String.valueOf(code))) + { + return type; + } + } + + return Type.EMPTY; + } + } + + @AllArgsConstructor + public enum Boss + { + TEKTON("Tekton"), + MUTTADILES("Muttadiles"), + GUARDIANS("Guardians"), + VESPULA("Vespula"), + SHAMANS("Shamans"), + VASA("Vasa"), + VANGUARDS("Vanguards"), + MYSTICS("Mystics"), + UNKNOWN("Unknown"); + + @Getter + private final String name; + + public static Boss fromString(String name) + { + for (Boss boss : Boss.values()) + { + if (boss.getName().equalsIgnoreCase(name)) + { + return boss; + } + } + + return null; + } + } + + @AllArgsConstructor + public enum Puzzle + { + CRABS("Crabs"), + ICE_DEMON("Ice Demon"), + TIGHTROPE("Tightrope"), + THIEVING("Thieving"), + UNKNOWN("Unknown"); + + @Getter + private final String name; + + public static Puzzle fromString(String name) + { + for (Puzzle puzzle : Puzzle.values()) + { + if (puzzle.getName().equalsIgnoreCase(name)) + { + return puzzle; + } + } + + return null; + } + } } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsOverlay.java index 7715429b19..edd309e661 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsOverlay.java @@ -33,6 +33,7 @@ import java.awt.image.BufferedImage; import java.util.ArrayList; import java.util.HashSet; import java.util.List; +import java.util.Objects; import java.util.Set; import javax.inject.Inject; import javax.inject.Singleton; @@ -164,6 +165,7 @@ public class RaidsOverlay extends Overlay boolean vanguards = false; boolean unknownCombat = false; String puzzles = ""; + String roomName; for (Room layoutRoom : plugin.getRaid().getLayout().getRooms()) { int position = layoutRoom.getPosition(); @@ -178,20 +180,36 @@ public class RaidsOverlay extends Overlay { case COMBAT: combatCount++; - - vanguards = room == RaidRoom.VANGUARDS; - unknownCombat = room == RaidRoom.UNKNOWN_COMBAT; + roomName = room.getBoss().getName(); + switch (Objects.requireNonNull(RaidRoom.Boss.fromString(roomName))) + { + case VANGUARDS: + vanguards = true; + break; + case UNKNOWN: + unknownCombat = true; + break; + } break; case PUZZLE: - crabs = room == RaidRoom.CRABS; - iceDemon = room == RaidRoom.ICE_DEMON; - thieving = room == RaidRoom.THIEVING; - tightrope = room == RaidRoom.TIGHTROPE; - - if (iceDemon) + roomName = room.getPuzzle().getName(); + switch (Objects.requireNonNull(RaidRoom.Puzzle.fromString(roomName))) { - iceRooms.add(roomCount); + case CRABS: + crabs = true; + break; + case ICE_DEMON: + iceDemon = true; + iceRooms.add(roomCount); + break; + case THIEVING: + thieving = true; + break; + case TIGHTROPE: + tightrope = true; + break; } + break; case SCAVENGERS: scavRooms.add(roomCount); break; @@ -298,17 +316,17 @@ public class RaidsOverlay extends Overlay { case COMBAT: bossCount++; - if (plugin.getRoomWhitelist().contains(room.getName().toLowerCase())) + if (plugin.getRoomWhitelist().contains(room.getBoss().getName().toLowerCase())) { color = Color.GREEN; } - else if (plugin.getRoomBlacklist().contains(room.getName().toLowerCase()) + else if (plugin.getRoomBlacklist().contains(room.getBoss().getName().toLowerCase()) || plugin.isEnableRotationWhitelist() && bossCount > bossMatches) { color = Color.RED; } - String bossName = room.getName(); + String bossName = room.getBoss().getName(); String bossNameLC = bossName.toLowerCase(); if (plugin.isShowRecommendedItems() && plugin.getRecommendedItemsList().get(bossNameLC) != null) { @@ -320,7 +338,7 @@ public class RaidsOverlay extends Overlay break; case PUZZLE: - String puzzleName = room.getName(); + String puzzleName = room.getPuzzle().getName(); String puzzleNameLC = puzzleName.toLowerCase(); if (plugin.getRecommendedItemsList().get(puzzleNameLC) != null) { @@ -451,4 +469,4 @@ public class RaidsOverlay extends Overlay } return ImageUtil.resizeCanvas(bim, SMALL_ICON_SIZE, SMALL_ICON_SIZE); } -} +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java index 9c6ab0333d..864e1712bf 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java @@ -25,27 +25,22 @@ */ package net.runelite.client.plugins.raids; -import com.google.common.base.Joiner; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; import com.google.inject.Binder; import com.google.inject.Provides; import java.awt.Color; import java.awt.image.BufferedImage; -import java.io.IOException; import java.text.DecimalFormat; import java.time.Instant; import java.util.ArrayList; -import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.concurrent.ScheduledExecutorService; import java.util.regex.Matcher; import java.util.regex.Pattern; -import java.util.stream.Collectors; import javax.inject.Inject; import javax.inject.Singleton; import lombok.AccessLevel; @@ -57,7 +52,6 @@ import net.runelite.api.GameState; import net.runelite.api.InstanceTemplates; import net.runelite.api.ItemID; import net.runelite.api.MenuOpcode; -import net.runelite.api.MessageNode; import net.runelite.api.NullObjectID; import static net.runelite.api.Perspective.SCENE_SIZE; import net.runelite.api.Player; @@ -72,18 +66,16 @@ import net.runelite.api.events.ClientTick; import net.runelite.api.events.VarbitChanged; import net.runelite.api.events.WidgetHiddenChanged; import net.runelite.api.util.Text; -import static net.runelite.api.util.Text.sanitize; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.callback.ClientThread; import net.runelite.client.chat.ChatColorType; -import net.runelite.client.chat.ChatCommandManager; import net.runelite.client.chat.ChatMessageBuilder; import net.runelite.client.chat.ChatMessageManager; import net.runelite.client.chat.QueuedMessage; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.EventBus; -import net.runelite.client.events.ChatInput; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.events.OverlayMenuClicked; import net.runelite.client.game.ItemManager; @@ -93,6 +85,7 @@ import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.PluginType; import net.runelite.client.plugins.raids.solver.Layout; import net.runelite.client.plugins.raids.solver.LayoutSolver; +import net.runelite.client.plugins.raids.solver.RotationSolver; import net.runelite.client.ui.ClientToolbar; import net.runelite.client.ui.NavigationButton; import net.runelite.client.ui.overlay.OverlayManager; @@ -105,8 +98,6 @@ import net.runelite.client.util.ImageUtil; import net.runelite.client.ws.PartyMember; import net.runelite.client.ws.PartyService; import net.runelite.client.ws.WSClient; -import net.runelite.http.api.chat.ChatClient; -import net.runelite.http.api.chat.LayoutRoom; import net.runelite.http.api.ws.messages.party.PartyChatMessage; import org.apache.commons.lang3.StringUtils; import static org.apache.commons.lang3.StringUtils.containsIgnoreCase; @@ -130,7 +121,6 @@ public class RaidsPlugin extends Plugin private static final String RAID_COMPLETE_MESSAGE = "Congratulations - your raid is complete!"; private static final DecimalFormat DECIMAL_FORMAT = new DecimalFormat("###.##"); private static final Pattern ROTATION_REGEX = Pattern.compile("\\[(.*?)]"); - private static final String LAYOUT_COMMAND = "!layout"; private static final Pattern RAID_COMPLETE_REGEX = Pattern.compile("Congratulations - your raid is complete! Duration: ([0-9:]+)"); private static final ImmutableSet GOOD_CRABS_FIRST = ImmutableSet.of( "FSCCP.PCSCF - #WNWSWN#ESEENW", //both good crabs @@ -228,14 +218,7 @@ public class RaidsPlugin extends Plugin @Inject private EventBus eventBus; - @Inject - private ChatCommandManager chatCommandManager; - - @Inject - private ChatClient chatClient; - - @Inject - private ScheduledExecutorService scheduledExecutorService; + private boolean raidStarted; @Inject private PartyService party; @@ -307,7 +290,6 @@ public class RaidsPlugin extends Plugin private List startingPartyMembers = new ArrayList<>(); private Map> recommendedItemsList = new HashMap<>(); private Set missingPartyMembers = new HashSet<>(); - private boolean raidStarted; @Provides RaidsConfig provideConfig(ConfigManager configManager) @@ -322,10 +304,9 @@ public class RaidsPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); overlayManager.add(overlay); overlayManager.add(pointsOverlay); @@ -335,7 +316,6 @@ public class RaidsPlugin extends Plugin } updateLists(); clientThread.invokeLater(() -> checkRaidPresence(true)); - chatCommandManager.registerCommandAsync(LAYOUT_COMMAND, this::lookupRaid, this::submitRaid); widgetOverlay = overlayManager.getWidgetOverlay(WidgetInfo.RAIDS_POINTS_INFOBOX); RaidsPanel panel = injector.getInstance(RaidsPanel.class); panel.init(); @@ -350,11 +330,8 @@ public class RaidsPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - - chatCommandManager.unregisterCommand(LAYOUT_COMMAND); overlayManager.remove(overlay); overlayManager.remove(pointsOverlay); clientToolbar.removeNavigation(navButton); @@ -371,16 +348,7 @@ public class RaidsPlugin extends Plugin reset(); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(WidgetHiddenChanged.class, this, this::onWidgetHiddenChanged); - eventBus.subscribe(VarbitChanged.class, this, this::onVarbitChanged); - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - eventBus.subscribe(ClientTick.class, this, this::onClientTick); - eventBus.subscribe(OverlayMenuClicked.class, this, this::onOverlayMenuClicked); - } - + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("raids")) @@ -412,6 +380,7 @@ public class RaidsPlugin extends Plugin clientThread.invokeLater(() -> checkRaidPresence(true)); } + @Subscribe private void onWidgetHiddenChanged(WidgetHiddenChanged event) { if (!inRaidChambers || event.isHidden()) @@ -427,6 +396,7 @@ public class RaidsPlugin extends Plugin } } + @Subscribe private void onVarbitChanged(VarbitChanged event) { checkRaidPresence(false); @@ -436,6 +406,7 @@ public class RaidsPlugin extends Plugin } } + @Subscribe private void onChatMessage(ChatMessage event) { if (inRaidChambers && event.getType() == ChatMessageType.FRIENDSCHATNOTIFICATION) @@ -568,6 +539,7 @@ public class RaidsPlugin extends Plugin } } + @Subscribe private void onClientTick(ClientTick event) { if (!this.raidsTimer @@ -584,6 +556,7 @@ public class RaidsPlugin extends Plugin } } + @Subscribe private void onOverlayMenuClicked(OverlayMenuClicked event) { OverlayMenuEntry entry = event.getEntry(); @@ -759,11 +732,11 @@ public class RaidsPlugin extends Plugin final String rooms = getRaid().toRoomString(); final String raidData = "[" + layout + "]: " + rooms; layoutMessage = new ChatMessageBuilder() - .append(ChatColorType.HIGHLIGHT) - .append("Layout: ") - .append(ChatColorType.NORMAL) - .append(raidData) - .build(); + .append(ChatColorType.HIGHLIGHT) + .append("Layout: ") + .append(ChatColorType.NORMAL) + .append(raidData) + .build(); final PartyMember localMember = party.getLocalMember(); if (party.getMembers().isEmpty() || localMember == null) @@ -907,13 +880,39 @@ public class RaidsPlugin extends Plugin int getRotationMatches() { - RaidRoom[] combatRooms = raid.getCombatRooms(); - String rotation = Arrays.stream(combatRooms) - .map(RaidRoom::getName) - .map(String::toLowerCase) - .collect(Collectors.joining(",")); + String rotation = raid.getRotationString().toLowerCase(); + List bosses = Text.fromCSV(rotation); - return rotationWhitelist.contains(rotation) ? combatRooms.length : 0; + if (rotationWhitelist.contains(rotation)) + { + return bosses.size(); + } + + for (String whitelisted : rotationWhitelist) + { + int matches = 0; + List whitelistedBosses = Text.fromCSV(whitelisted); + + for (int i = 0; i < whitelistedBosses.size(); i++) + { + if (i < bosses.size() && whitelistedBosses.get(i).equals(bosses.get(i))) + { + matches++; + } + else + { + matches = 0; + break; + } + } + + if (matches >= 2) + { + return matches; + } + } + + return 0; } private Point findLobbyBase() @@ -1017,156 +1016,101 @@ public class RaidsPlugin extends Plugin private RaidRoom determineRoom(Tile base) { + RaidRoom room = new RaidRoom(base, RaidRoom.Type.EMPTY); int chunkData = client.getInstanceTemplateChunks()[base.getPlane()][(base.getSceneLocation().getX()) / 8][base.getSceneLocation().getY() / 8]; InstanceTemplates template = InstanceTemplates.findMatch(chunkData); if (template == null) { - return RaidRoom.EMPTY; + return room; } switch (template) { case RAIDS_LOBBY: case RAIDS_START: - return RaidRoom.START; + room.setType(RaidRoom.Type.START); + break; case RAIDS_END: - return RaidRoom.END; + room.setType(RaidRoom.Type.END); + break; case RAIDS_SCAVENGERS: case RAIDS_SCAVENGERS2: - return RaidRoom.SCAVENGERS; + room.setType(RaidRoom.Type.SCAVENGERS); + break; case RAIDS_SHAMANS: - return RaidRoom.SHAMANS; + room.setType(RaidRoom.Type.COMBAT); + room.setBoss(RaidRoom.Boss.SHAMANS); + break; case RAIDS_VASA: - return RaidRoom.VASA; + room.setType(RaidRoom.Type.COMBAT); + room.setBoss(RaidRoom.Boss.VASA); + break; case RAIDS_VANGUARDS: - return RaidRoom.VANGUARDS; + room.setType(RaidRoom.Type.COMBAT); + room.setBoss(RaidRoom.Boss.VANGUARDS); + break; case RAIDS_ICE_DEMON: - return RaidRoom.ICE_DEMON; + room.setType(RaidRoom.Type.PUZZLE); + room.setPuzzle(RaidRoom.Puzzle.ICE_DEMON); + break; case RAIDS_THIEVING: - return RaidRoom.THIEVING; + room.setType(RaidRoom.Type.PUZZLE); + room.setPuzzle(RaidRoom.Puzzle.THIEVING); + break; case RAIDS_FARMING: case RAIDS_FARMING2: - return RaidRoom.FARMING; + room.setType(RaidRoom.Type.FARMING); + break; case RAIDS_MUTTADILES: - return RaidRoom.MUTTADILES; + room.setType(RaidRoom.Type.COMBAT); + room.setBoss(RaidRoom.Boss.MUTTADILES); + break; case RAIDS_MYSTICS: - return RaidRoom.MYSTICS; + room.setType(RaidRoom.Type.COMBAT); + room.setBoss(RaidRoom.Boss.MYSTICS); + break; case RAIDS_TEKTON: - return RaidRoom.TEKTON; + room.setType(RaidRoom.Type.COMBAT); + room.setBoss(RaidRoom.Boss.TEKTON); + break; case RAIDS_TIGHTROPE: - return RaidRoom.TIGHTROPE; + room.setType(RaidRoom.Type.PUZZLE); + room.setPuzzle(RaidRoom.Puzzle.TIGHTROPE); + break; case RAIDS_GUARDIANS: - return RaidRoom.GUARDIANS; + room.setType(RaidRoom.Type.COMBAT); + room.setBoss(RaidRoom.Boss.GUARDIANS); + break; case RAIDS_CRABS: - return RaidRoom.CRABS; + room.setType(RaidRoom.Type.PUZZLE); + room.setPuzzle(RaidRoom.Puzzle.CRABS); + break; case RAIDS_VESPULA: - return RaidRoom.VESPULA; - - default: - return RaidRoom.EMPTY; + room.setType(RaidRoom.Type.COMBAT); + room.setBoss(RaidRoom.Boss.VESPULA); + break; } + + return room; } - private void lookupRaid(ChatMessage chatMessage, String s) - { - ChatMessageType type = chatMessage.getType(); - - final String player; - if (type.equals(ChatMessageType.PRIVATECHATOUT)) - { - player = client.getLocalPlayer().getName(); - } - else - { - player = sanitize(chatMessage.getName()); - } - - LayoutRoom[] layout; - try - { - layout = chatClient.getLayout(player); - } - catch (IOException ex) - { - log.debug("unable to lookup layout", ex); - return; - } - - if (layout == null || layout.length == 0) - { - return; - } - - String layoutMessage = Joiner.on(", ").join(Arrays.stream(layout) - .map(l -> RaidRoom.valueOf(l.name())) - .filter(room -> room.getType() == RoomType.COMBAT || room.getType() == RoomType.PUZZLE) - .map(RaidRoom::getName) - .toArray()); - - String response = new ChatMessageBuilder() - .append(ChatColorType.HIGHLIGHT) - .append("Layout: ") - .append(ChatColorType.NORMAL) - .append(layoutMessage) - .build(); - - log.debug("Setting response {}", response); - final MessageNode messageNode = chatMessage.getMessageNode(); - messageNode.setRuneLiteFormatMessage(response); - chatMessageManager.update(messageNode); - client.refreshChat(); - } - - private boolean submitRaid(ChatInput chatInput, String s) - { - if (raid == null) - { - return false; - } - - final String playerName = client.getLocalPlayer().getName(); - RaidRoom[] rooms = raid.getRooms(); - - LayoutRoom[] layoutRooms = Arrays.stream(rooms) - .map(room -> LayoutRoom.valueOf(room.name())) - .toArray(LayoutRoom[]::new); - - scheduledExecutorService.execute(() -> - { - try - { - chatClient.submitLayout(playerName, layoutRooms); - } - catch (Exception ex) - { - log.warn("unable to submit layout", ex); - } - finally - { - chatInput.resume(); - } - }); - - return true; - } - - public void reset() + private void reset() { raid = null; upperTime = -1; @@ -1313,9 +1257,7 @@ public class RaidsPlugin extends Plugin String recordRaid() { - RaidRoom[] combatRooms = raid.getCombatRooms(); - - if (combatRooms[0] == RaidRoom.VASA && combatRooms[2] == RaidRoom.TEKTON && combatRooms[3] == RaidRoom.VESPULA + if (raid.getRotationString().equalsIgnoreCase("vasa,tekton,vespula") && containsIgnoreCase(raid.getFullRotationString(), "crabs") && containsIgnoreCase(raid.getFullRotationString(), "tightrope") && goodCrabs != null) @@ -1365,4 +1307,4 @@ public class RaidsPlugin extends Plugin this.hideUnknownCombat = config.hideUnknownCombat(); this.partyDisplay = config.partyDisplay(); } -} +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/shortcuts/ShortcutPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/shortcuts/ShortcutPlugin.java index 8448937d91..fd18868a1c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/shortcuts/ShortcutPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/shortcuts/ShortcutPlugin.java @@ -15,7 +15,7 @@ import net.runelite.api.events.GameObjectDespawned; import net.runelite.api.events.GameObjectSpawned; import net.runelite.api.events.GameTick; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -41,8 +41,6 @@ public class ShortcutPlugin extends Plugin private ShortcutOverlay overlay; @Inject private ShortcutConfig config; - @Inject - private EventBus eventBus; @Getter(AccessLevel.PACKAGE) private boolean highlightShortcuts; @@ -61,7 +59,6 @@ public class ShortcutPlugin extends Plugin @Override protected void startUp() { - addSubscriptions(); this.highlightShortcuts = config.highlightShortcuts(); overlayManager.add(overlay); @@ -70,18 +67,10 @@ public class ShortcutPlugin extends Plugin @Override protected void shutDown() { - eventBus.unregister(this); overlayManager.remove(overlay); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameObjectSpawned.class, this, this::onGameObjectSpawned); - eventBus.subscribe(GameObjectDespawned.class, this, this::onGameObjectDespawned); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - } - + @Subscribe private void onGameObjectSpawned(GameObjectSpawned event) { WorldPoint worldPoint = WorldPoint.fromLocalInstance(client, event.getGameObject().getLocalLocation()); @@ -95,16 +84,19 @@ public class ShortcutPlugin extends Plugin } } + @Subscribe private void onGameObjectDespawned(GameObjectDespawned event) { shortcut.remove(event.getGameObject()); } + @Subscribe private void onGameTick(GameTick tick) { shortcut.removeIf(object -> object.getCanvasLocation() == null); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("shortcut")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RotationSolver.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/solver/RotationSolver.java similarity index 54% rename from runelite-client/src/main/java/net/runelite/client/plugins/raids/RotationSolver.java rename to runelite-client/src/main/java/net/runelite/client/plugins/raids/solver/RotationSolver.java index 2f6040bcd8..f6310a94bb 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RotationSolver.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/solver/RotationSolver.java @@ -22,45 +22,39 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package net.runelite.client.plugins.raids; +package net.runelite.client.plugins.raids.solver; +import java.util.ArrayList; import java.util.Arrays; -import java.util.List; -import static net.runelite.client.plugins.raids.RaidRoom.GUARDIANS; -import static net.runelite.client.plugins.raids.RaidRoom.MUTTADILES; -import static net.runelite.client.plugins.raids.RaidRoom.MYSTICS; -import static net.runelite.client.plugins.raids.RaidRoom.SHAMANS; -import static net.runelite.client.plugins.raids.RaidRoom.TEKTON; -import static net.runelite.client.plugins.raids.RaidRoom.UNKNOWN_COMBAT; -import static net.runelite.client.plugins.raids.RaidRoom.VANGUARDS; -import static net.runelite.client.plugins.raids.RaidRoom.VASA; -import static net.runelite.client.plugins.raids.RaidRoom.VESPULA; +import java.util.Collection; +import net.runelite.client.plugins.raids.RaidRoom; +import net.runelite.client.plugins.raids.RaidRoom.Boss; -class RotationSolver +public class RotationSolver { - private static final List[] ROTATIONS = + private static final Rotation[] ROTATIONS = { - Arrays.asList(TEKTON, VASA, GUARDIANS, MYSTICS, SHAMANS, MUTTADILES, VANGUARDS, VESPULA), - Arrays.asList(TEKTON, MUTTADILES, GUARDIANS, VESPULA, SHAMANS, VASA, VANGUARDS, MYSTICS), - Arrays.asList(VESPULA, VANGUARDS, MUTTADILES, SHAMANS, MYSTICS, GUARDIANS, VASA, TEKTON), - Arrays.asList(MYSTICS, VANGUARDS, VASA, SHAMANS, VESPULA, GUARDIANS, MUTTADILES, TEKTON) + new Rotation<>(Arrays.asList(Boss.TEKTON, Boss.VASA, Boss.GUARDIANS, Boss.MYSTICS, Boss.SHAMANS, Boss.MUTTADILES, Boss.VANGUARDS, Boss.VESPULA)), + new Rotation<>(Arrays.asList(Boss.TEKTON, Boss.MUTTADILES, Boss.GUARDIANS, Boss.VESPULA, Boss.SHAMANS, Boss.VASA, Boss.VANGUARDS, Boss.MYSTICS)), + new Rotation<>(Arrays.asList(Boss.VESPULA, Boss.VANGUARDS, Boss.MUTTADILES, Boss.SHAMANS, Boss.MYSTICS, Boss.GUARDIANS, Boss.VASA, Boss.TEKTON)), + new Rotation<>(Arrays.asList(Boss.MYSTICS, Boss.VANGUARDS, Boss.VASA, Boss.SHAMANS, Boss.VESPULA, Boss.GUARDIANS, Boss.MUTTADILES, Boss.TEKTON)) }; - static boolean solve(RaidRoom[] rooms) + public static void solve(RaidRoom[] rooms) { if (rooms == null) { - return false; + return; } - List match = null; + Rotation match = null; Integer start = null; Integer index = null; int known = 0; for (int i = 0; i < rooms.length; i++) { - if (rooms[i] == null || rooms[i].getType() != RoomType.COMBAT || rooms[i] == UNKNOWN_COMBAT) + if (rooms[i] == null || rooms[i].getBoss() == null || rooms[i].getBoss() == Boss.UNKNOWN) { continue; } @@ -75,37 +69,37 @@ class RotationSolver if (known < 2) { - return false; + return; } if (known == rooms.length) { - return true; + return; } - for (List rotation : ROTATIONS) + for (Rotation rotation : ROTATIONS) { COMPARE: for (int i = 0; i < rotation.size(); i++) { - if (rooms[start] == rotation.get(i)) + if (rooms[start].getBoss() == rotation.get(i)) { for (int j = start + 1; j < rooms.length; j++) { - if (rooms[j].getType() != RoomType.COMBAT || rooms[j] == UNKNOWN_COMBAT) + if (rooms[j].getBoss() == null || rooms[j].getBoss() == Boss.UNKNOWN) { continue; } - if (rooms[j] != rotation.get((i + j - start) % rotation.size())) + if (rooms[j].getBoss() != rotation.get(i + j - start)) { break COMPARE; } } - if (match != null && match != rotation) + if (match != null && match.equals(rotation)) { - return false; + return; } index = i - start; @@ -116,7 +110,7 @@ class RotationSolver if (match == null) { - return false; + return; } for (int i = 0; i < rooms.length; i++) @@ -126,12 +120,30 @@ class RotationSolver continue; } - if (rooms[i].getType() != RoomType.COMBAT || rooms[i] == UNKNOWN_COMBAT) + if (rooms[i].getBoss() == null || rooms[i].getBoss() == Boss.UNKNOWN) { - rooms[i] = match.get((index + i) % match.size()); + rooms[i].setBoss((Boss) match.get(index + i)); } } - return true; + } + + private static class Rotation extends ArrayList + { + Rotation(final Collection bosses) + { + super(bosses); + } + + @Override + public E get(int index) + { + if (index < 0) + { + index = index + size(); + } + + return super.get(index % size()); + } } } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raidsthieving/BatSolver/BatSolver.java b/runelite-client/src/main/java/net/runelite/client/plugins/raidsthieving/BatSolver/BatSolver.java index 2a5dfb4148..4d1b16f714 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raidsthieving/BatSolver/BatSolver.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raidsthieving/BatSolver/BatSolver.java @@ -24,14 +24,14 @@ */ package net.runelite.client.plugins.raidsthieving.BatSolver; -import java.util.Map; -import java.util.stream.Collectors; -import java.util.HashMap; -import java.util.TreeSet; -import java.util.List; -import java.util.HashSet; -import java.util.Set; import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeSet; +import java.util.stream.Collectors; public class BatSolver { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raidsthieving/BatSolver/SolutionSet.java b/runelite-client/src/main/java/net/runelite/client/plugins/raidsthieving/BatSolver/SolutionSet.java index 88a73cb23c..05560c1f14 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raidsthieving/BatSolver/SolutionSet.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raidsthieving/BatSolver/SolutionSet.java @@ -26,11 +26,11 @@ package net.runelite.client.plugins.raidsthieving.BatSolver; import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.Multimap; -import lombok.AccessLevel; -import lombok.Getter; import java.util.Arrays; import java.util.HashSet; import java.util.Set; +import lombok.AccessLevel; +import lombok.Getter; // Each Thieving room has 4 empty chests // User-reported data shows these 4 come in groups, diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raidsthieving/ChestOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/raidsthieving/ChestOverlay.java index da98262c6b..9688760b69 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raidsthieving/ChestOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raidsthieving/ChestOverlay.java @@ -24,7 +24,12 @@ */ package net.runelite.client.plugins.raidsthieving; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Graphics2D; +import java.util.Map; import java.util.Set; +import javax.inject.Inject; import javax.inject.Singleton; import net.runelite.api.Client; import net.runelite.api.Perspective; @@ -36,11 +41,6 @@ import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.components.ProgressPieComponent; -import javax.inject.Inject; -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Graphics2D; -import java.util.Map; /** * Represents the overlay that shows timers on traps that are placed by the diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raidsthieving/RaidsThievingConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/raidsthieving/RaidsThievingConfig.java index 51b30ccbe0..9b11b7fdc9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raidsthieving/RaidsThievingConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raidsthieving/RaidsThievingConfig.java @@ -24,10 +24,10 @@ */ package net.runelite.client.plugins.raidsthieving; +import java.awt.Color; import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -import java.awt.Color; @ConfigGroup("raidsthievingplugin") public interface RaidsThievingConfig extends Config diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raidsthieving/RaidsThievingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/raidsthieving/RaidsThievingPlugin.java index 014b476b9b..7810026c09 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raidsthieving/RaidsThievingPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raidsthieving/RaidsThievingPlugin.java @@ -47,7 +47,7 @@ import net.runelite.api.events.GraphicsObjectCreated; import net.runelite.api.events.VarbitChanged; import net.runelite.client.Notifier; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -71,16 +71,18 @@ public class RaidsThievingPlugin extends Plugin @Inject private Client client; + @Inject private OverlayManager overlayManager; + @Inject private ChestOverlay overlay; + @Inject private Notifier notifier; + @Inject private RaidsThievingConfig config; - @Inject - private EventBus eventBus; @Getter(AccessLevel.PACKAGE) private final Map chests = new HashMap<>(); @@ -110,29 +112,20 @@ public class RaidsThievingPlugin extends Plugin { reset(); updateConfig(); - addSubscriptions(); overlayManager.add(overlay); } @Override - protected void shutDown() throws Exception + protected void shutDown() { overlayManager.remove(overlay); lastActionTime = Instant.ofEpochMilli(0); chests.clear(); - eventBus.unregister(this); - } - - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameObjectSpawned.class, this, this::onGameObjectSpawned); - eventBus.subscribe(GraphicsObjectCreated.class, this, this::onGraphicsObjectCreated); - eventBus.subscribe(VarbitChanged.class, this, this::onVarbitChanged); } + @Subscribe private void onGameObjectSpawned(GameObjectSpawned event) { GameObject obj = event.getGameObject(); @@ -197,6 +190,7 @@ public class RaidsThievingPlugin extends Plugin } } + @Subscribe private void onGraphicsObjectCreated(GraphicsObjectCreated event) { GraphicsObject obj = event.getGraphicsObject(); @@ -213,6 +207,7 @@ public class RaidsThievingPlugin extends Plugin } } + @Subscribe private void onVarbitChanged(VarbitChanged event) { boolean setting = client.getVar(Varbits.IN_RAID) == 1; @@ -224,6 +219,7 @@ public class RaidsThievingPlugin extends Plugin } } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("raidsthievingplugin")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raidsthieving/ThievingChest.java b/runelite-client/src/main/java/net/runelite/client/plugins/raidsthieving/ThievingChest.java index 22949f9bab..41a357a08d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raidsthieving/ThievingChest.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raidsthieving/ThievingChest.java @@ -65,7 +65,7 @@ public class ThievingChest /** * Constructor for a ThievingChest object * - * @param worldPoint The world location of the gameobject that corresponds with this trap. + * @param worldPoint The world location of the gameobject that corresponds with this trap. * @param instancePoint The world location accounting for instances of the gameobject that corresponds with this trap. */ ThievingChest(final WorldPoint worldPoint, final Point instancePoint) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/randomevents/RandomEventPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/randomevents/RandomEventPlugin.java index 4f9c926a88..215ce4be83 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/randomevents/RandomEventPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/randomevents/RandomEventPlugin.java @@ -42,7 +42,7 @@ import net.runelite.api.events.MenuEntryAdded; import net.runelite.api.events.NpcDespawned; import net.runelite.client.Notifier; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -97,9 +97,6 @@ public class RandomEventPlugin extends Plugin @Inject private RandomEventConfig config; - @Inject - private EventBus eventBus; - private boolean notifyAllEvents; private boolean notifyDemon; private boolean notifyForester; @@ -118,28 +115,19 @@ public class RandomEventPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - lastNotificationTick = 0; currentRandomEvent = null; } - private void addSubscriptions() - { - eventBus.subscribe(InteractingChanged.class, this, this::onInteractingChanged); - eventBus.subscribe(MenuEntryAdded.class, this, this::onMenuEntryAdded); - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - } - + @Subscribe private void onInteractingChanged(InteractingChanged event) { Actor source = event.getSource(); @@ -172,6 +160,7 @@ public class RandomEventPlugin extends Plugin } } + @Subscribe private void onNpcDespawned(NpcDespawned npcDespawned) { NPC npc = npcDespawned.getNpc(); @@ -182,6 +171,7 @@ public class RandomEventPlugin extends Plugin } } + @Subscribe private void onMenuEntryAdded(MenuEntryAdded event) { if (event.getOpcode() >= MenuOpcode.NPC_FIRST_OPTION.getId() @@ -233,6 +223,7 @@ public class RandomEventPlugin extends Plugin } } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!"randomevents".equals(event.getGroup())) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/reminders/RemindersPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/reminders/RemindersPlugin.java index 04d292d17e..3e35f9be5c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/reminders/RemindersPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/reminders/RemindersPlugin.java @@ -33,7 +33,6 @@ import java.time.temporal.ChronoUnit; import javax.inject.Inject; import lombok.extern.slf4j.Slf4j; import net.runelite.api.ChatMessageType; -import net.runelite.api.Client; import net.runelite.api.GameState; import net.runelite.api.events.GameStateChanged; import net.runelite.client.chat.ChatColorType; @@ -41,7 +40,7 @@ import net.runelite.client.chat.ChatMessageBuilder; import net.runelite.client.chat.ChatMessageManager; import net.runelite.client.chat.QueuedMessage; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -60,12 +59,6 @@ import net.runelite.client.task.Schedule; public class RemindersPlugin extends Plugin { - @Inject - private Client client; - - @Inject - private EventBus eventBus; - @Inject private RemindersConfig config; @@ -93,7 +86,6 @@ public class RemindersPlugin extends Plugin private int personalReminderTime3; - @Provides RemindersConfig provideConfig(ConfigManager configManager) { @@ -103,23 +95,16 @@ public class RemindersPlugin extends Plugin @Override public void startUp() { - addSubscriptions(); updateConfig(); } @Override public void shutDown() { - eventBus.unregister(this); loginTime = null; } - private void addSubscriptions() - { - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - } - + @Subscribe public void onGameStateChanged(GameStateChanged event) { final GameState state = event.getGameState(); @@ -142,6 +127,7 @@ public class RemindersPlugin extends Plugin } } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("Reminders")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/reorderprayers/ReorderPrayersPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/reorderprayers/ReorderPrayersPlugin.java index 85638b9d22..b8cb501cbb 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/reorderprayers/ReorderPrayersPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/reorderprayers/ReorderPrayersPlugin.java @@ -47,7 +47,7 @@ import static net.runelite.api.widgets.WidgetConfig.DRAG_ON; import net.runelite.api.widgets.WidgetID; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.menus.MenuManager; import net.runelite.client.menus.WidgetMenuOption; @@ -181,9 +181,6 @@ public class ReorderPrayersPlugin extends Plugin @Inject private MenuManager menuManager; - @Inject - private EventBus eventBus; - private Prayer[] prayerOrder; static String prayerOrderToString(Prayer[] prayerOrder) @@ -222,9 +219,8 @@ public class ReorderPrayersPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { - addSubscriptions(); refreshPrayerTabOption(); prayerOrder = stringToPrayerOrder(config.prayerOrder()); @@ -232,24 +228,14 @@ public class ReorderPrayersPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - clearPrayerTabMenus(); prayerOrder = Prayer.values(); reorderPrayers(false); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(WidgetLoaded.class, this, this::onWidgetLoaded); - eventBus.subscribe(DraggingWidgetChanged.class, this, this::onDraggingWidgetChanged); - eventBus.subscribe(WidgetMenuOptionClicked.class, this, this::onWidgetMenuOptionClicked); - } - + @Subscribe private void onGameStateChanged(GameStateChanged event) { if (event.getGameState() == GameState.LOGGED_IN) @@ -258,6 +244,7 @@ public class ReorderPrayersPlugin extends Plugin } } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals(CONFIG_GROUP_KEY)) @@ -274,6 +261,7 @@ public class ReorderPrayersPlugin extends Plugin } } + @Subscribe private void onWidgetLoaded(WidgetLoaded event) { if (event.getGroupId() == WidgetID.PRAYER_GROUP_ID || event.getGroupId() == WidgetID.QUICK_PRAYERS_GROUP_ID) @@ -282,6 +270,7 @@ public class ReorderPrayersPlugin extends Plugin } } + @Subscribe private void onDraggingWidgetChanged(DraggingWidgetChanged event) { // is dragging widget and mouse button released @@ -313,6 +302,7 @@ public class ReorderPrayersPlugin extends Plugin } } + @Subscribe private void onWidgetMenuOptionClicked(WidgetMenuOptionClicked event) { if (event.getWidget() == WidgetInfo.FIXED_VIEWPORT_PRAYER_TAB diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/reportbutton/ReportButtonPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/reportbutton/ReportButtonPlugin.java index ca90e7b599..e828693114 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/reportbutton/ReportButtonPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/reportbutton/ReportButtonPlugin.java @@ -44,7 +44,7 @@ import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -76,9 +76,6 @@ public class ReportButtonPlugin extends Plugin @Inject private ReportButtonConfig config; - @Inject - private EventBus eventBus; - private TimeStyle timeStyle; @Provides @@ -90,7 +87,6 @@ public class ReportButtonPlugin extends Plugin @Override public void startUp() { - addSubscriptions(); this.timeStyle = config.time(); clientThread.invoke(this::updateReportButtonTime); @@ -99,8 +95,6 @@ public class ReportButtonPlugin extends Plugin @Override public void shutDown() { - eventBus.unregister(this); - clientThread.invoke(() -> { Widget reportButton = client.getWidget(WidgetInfo.CHATBOX_REPORT_TEXT); @@ -111,12 +105,7 @@ public class ReportButtonPlugin extends Plugin }); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - } - + @Subscribe private void onGameStateChanged(GameStateChanged event) { GameState state = event.getGameState(); @@ -217,6 +206,7 @@ public class ReportButtonPlugin extends Plugin return DATE_FORMAT.format(new Date()); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("reportButton")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/roguesden/Obstacles.java b/runelite-client/src/main/java/net/runelite/client/plugins/roguesden/Obstacles.java index 62fd01bcc0..c6329cdc7f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/roguesden/Obstacles.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/roguesden/Obstacles.java @@ -27,119 +27,127 @@ package net.runelite.client.plugins.roguesden; import java.awt.Color; import java.util.HashMap; import java.util.Map; +import lombok.AccessLevel; import lombok.Getter; +import static net.runelite.api.ObjectID.CONTORTION_BARS; +import static net.runelite.api.ObjectID.DOOR_7234; +import static net.runelite.api.ObjectID.DOOR_7246; +import static net.runelite.api.ObjectID.GRILL_7255; +import static net.runelite.api.ObjectID.LEDGE_7240; +import static net.runelite.api.ObjectID.PASSAGEWAY; +import static net.runelite.api.ObjectID.WALL_7249; +import static net.runelite.api.ObjectID.WALL_SAFE_7237; import net.runelite.api.coords.WorldPoint; -import static net.runelite.api.ObjectID.*; class Obstacles { static final Map TILE_MAP = new HashMap<>(); static final Obstacle[] OBSTACLES = - { - new Obstacle(3050, 4997, "Enter"), - new Obstacle(3049, 4997, CONTORTION_BARS), - new Obstacle(3039, 4999, "Stand"), - new Obstacle(3029, 5003, "Run"), - new Obstacle(3024, 5001, "Open", GRILL_7255), - new Obstacle(3011, 5005, "Run"), - new Obstacle(3004, 5003, "Run"), + { + new Obstacle(3050, 4997, "Enter"), + new Obstacle(3049, 4997, CONTORTION_BARS), + new Obstacle(3039, 4999, "Stand"), + new Obstacle(3029, 5003, "Run"), + new Obstacle(3024, 5001, "Open", GRILL_7255), + new Obstacle(3011, 5005, "Run"), + new Obstacle(3004, 5003, "Run"), - new Obstacle(2994, 5004, "Climb"), - new Obstacle(2993, 5004, LEDGE_7240), - new Obstacle(2994, 5005, "Climb"), - new Obstacle(2993, 5005, LEDGE_7240), + new Obstacle(2994, 5004, "Climb"), + new Obstacle(2993, 5004, LEDGE_7240), + new Obstacle(2994, 5005, "Climb"), + new Obstacle(2993, 5005, LEDGE_7240), - new Obstacle(2969, 5016, "Stand"), - new Obstacle(2969, 5017, "Stand"), - new Obstacle(2969, 5018, "Stand"), - new Obstacle(2969, 5019, "Stand"), + new Obstacle(2969, 5016, "Stand"), + new Obstacle(2969, 5017, "Stand"), + new Obstacle(2969, 5018, "Stand"), + new Obstacle(2969, 5019, "Stand"), - new Obstacle(2958, 5031, "Cross"), - new Obstacle(2962, 5050, "Stand"), - new Obstacle(2963, 5056, "Run"), + new Obstacle(2958, 5031, "Cross"), + new Obstacle(2962, 5050, "Stand"), + new Obstacle(2963, 5056, "Run"), - new Obstacle(2957, 5068, "Enter"), - new Obstacle(2957, 5069, PASSAGEWAY), + new Obstacle(2957, 5068, "Enter"), + new Obstacle(2957, 5069, PASSAGEWAY), - new Obstacle(2955, 5094, "Enter"), - new Obstacle(2955, 5095, PASSAGEWAY), + new Obstacle(2955, 5094, "Enter"), + new Obstacle(2955, 5095, PASSAGEWAY), - new Obstacle(2963, 5105, "Stand"), + new Obstacle(2963, 5105, "Stand"), - new Obstacle(2972, 5098, "Enter"), - new Obstacle(2972, 5097, PASSAGEWAY), + new Obstacle(2972, 5098, "Enter"), + new Obstacle(2972, 5097, PASSAGEWAY), - new Obstacle(2972, 5094, "Open"), - new Obstacle(2972, 5094, GRILL_7255), + new Obstacle(2972, 5094, "Open"), + new Obstacle(2972, 5094, GRILL_7255), - new Obstacle(2982, 5087, "Climb"), - new Obstacle(2983, 5087, LEDGE_7240), + new Obstacle(2982, 5087, "Climb"), + new Obstacle(2983, 5087, LEDGE_7240), - new Obstacle(2982, 5090, "Climb"), - new Obstacle(2983, 5090, LEDGE_7240), + new Obstacle(2982, 5090, "Climb"), + new Obstacle(2983, 5090, LEDGE_7240), - new Obstacle(2993, 5088, "Search"), - new Obstacle(2993, 5087, WALL_7249), - new Obstacle(2997, 5088, "Run"), + new Obstacle(2993, 5088, "Search"), + new Obstacle(2993, 5087, WALL_7249), + new Obstacle(2997, 5088, "Run"), - new Obstacle(2993, 5089, "Search"), - new Obstacle(2993, 5089, WALL_7249), - new Obstacle(2997, 5089, "Run"), + new Obstacle(2993, 5089, "Search"), + new Obstacle(2993, 5089, WALL_7249), + new Obstacle(2997, 5089, "Run"), - new Obstacle(3006, 5088, "Run"), - new Obstacle(3018, 5080, "Take"), - new Obstacle(3023, 5082, "Open", DOOR_7234), + new Obstacle(3006, 5088, "Run"), + new Obstacle(3018, 5080, "Take"), + new Obstacle(3023, 5082, "Open", DOOR_7234), - // Maze - new Obstacle(3030, 5079, GRILL_7255), - new Obstacle(3032, 5078, GRILL_7255), - new Obstacle(3036, 5076, GRILL_7255), - new Obstacle(3039, 5079, GRILL_7255), - new Obstacle(3042, 5076, GRILL_7255), - new Obstacle(3044, 5069, GRILL_7255), - new Obstacle(3041, 5068, GRILL_7255), - new Obstacle(3040, 5070, GRILL_7255), - new Obstacle(3038, 5069, GRILL_7255), + // Maze + new Obstacle(3030, 5079, GRILL_7255), + new Obstacle(3032, 5078, GRILL_7255), + new Obstacle(3036, 5076, GRILL_7255), + new Obstacle(3039, 5079, GRILL_7255), + new Obstacle(3042, 5076, GRILL_7255), + new Obstacle(3044, 5069, GRILL_7255), + new Obstacle(3041, 5068, GRILL_7255), + new Obstacle(3040, 5070, GRILL_7255), + new Obstacle(3038, 5069, GRILL_7255), - new Obstacle(3028, 5033, "Stand"), - new Obstacle(3024, 5033, "Run"), - new Obstacle(3028, 5034, "Stand"), - new Obstacle(3024, 5034, "Run"), + new Obstacle(3028, 5033, "Stand"), + new Obstacle(3024, 5033, "Run"), + new Obstacle(3028, 5034, "Stand"), + new Obstacle(3024, 5034, "Run"), - new Obstacle(3015, 5033, "Open", GRILL_7255), - new Obstacle(3010, 5033, "Run/Open", GRILL_7255), + new Obstacle(3015, 5033, "Open", GRILL_7255), + new Obstacle(3010, 5033, "Run/Open", GRILL_7255), - new Obstacle(3000, 5034, "Run"), + new Obstacle(3000, 5034, "Run"), - new Obstacle(2992, 5045, "Stand"), - new Obstacle(2992, 5053, "Run"), + new Obstacle(2992, 5045, "Stand"), + new Obstacle(2992, 5053, "Run"), - new Obstacle(2992, 5067, "Stand"), - new Obstacle(2992, 5075, "Run"), - new Obstacle(3009, 5063, "Take"), - new Obstacle(3028, 5056, "Run"), - new Obstacle(3028, 5047, "Walk"), + new Obstacle(2992, 5067, "Stand"), + new Obstacle(2992, 5075, "Run"), + new Obstacle(3009, 5063, "Take"), + new Obstacle(3028, 5056, "Run"), + new Obstacle(3028, 5047, "Walk"), - new Obstacle(3018, 5047, "Crack", WALL_SAFE_7237), + new Obstacle(3018, 5047, "Crack", WALL_SAFE_7237), - // Start of 80+ thieving shortcut - new Obstacle(2967, 5061, "80 Thieving", DOOR_7246), - new Obstacle(2967, 5066, "80 Thieving", DOOR_7246), - new Obstacle(2974, 5061, "Enter"), - new Obstacle(2974, 5060, CONTORTION_BARS), - new Obstacle(2989, 5057, "Open", GRILL_7255), - new Obstacle(2989, 5058, "Open", GRILL_7255), + // Start of 80+ thieving shortcut + new Obstacle(2967, 5061, "80 Thieving", DOOR_7246), + new Obstacle(2967, 5066, "80 Thieving", DOOR_7246), + new Obstacle(2974, 5061, "Enter"), + new Obstacle(2974, 5060, CONTORTION_BARS), + new Obstacle(2989, 5057, "Open", GRILL_7255), + new Obstacle(2989, 5058, "Open", GRILL_7255), - // The 3x3 square around the spinning blade in the middle of the maze - new AvoidObstacle(2977, 5090), new AvoidObstacle(2978, 5090), new AvoidObstacle(2979, 5090), - new AvoidObstacle(2977, 5089), new AvoidObstacle(2978, 5089), new AvoidObstacle(2979, 5089), - new AvoidObstacle(2977, 5088), new AvoidObstacle(2978, 5088), new AvoidObstacle(2979, 5088), + // The 3x3 square around the spinning blade in the middle of the maze + new AvoidObstacle(2977, 5090), new AvoidObstacle(2978, 5090), new AvoidObstacle(2979, 5090), + new AvoidObstacle(2977, 5089), new AvoidObstacle(2978, 5089), new AvoidObstacle(2979, 5089), + new AvoidObstacle(2977, 5088), new AvoidObstacle(2978, 5088), new AvoidObstacle(2979, 5088), - new TipObstacle(3014, 5063, "Stun NPC"), - new TipObstacle(2992, 5057, "Continue North"), // Hint for 80 thieving shortcut - }; + new TipObstacle(3014, 5063, "Stun NPC"), + new TipObstacle(2992, 5057, "Continue North"), // Hint for 80 thieving shortcut + }; - @Getter + @Getter(AccessLevel.PACKAGE) static class Obstacle { private WorldPoint tile; @@ -172,7 +180,7 @@ class Obstacles private static class AvoidObstacle extends Obstacle { - @Getter + @Getter(AccessLevel.PACKAGE) private final Color tileColor = Color.RED; private AvoidObstacle(int x, int y) @@ -183,7 +191,7 @@ class Obstacles private static class TipObstacle extends Obstacle { - @Getter + @Getter(AccessLevel.PACKAGE) private final Color tileColor = Color.ORANGE; private TipObstacle(int x, int y, String hint) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/roguesden/RoguesDenMinimapOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/roguesden/RoguesDenMinimapOverlay.java index 4dc0c11b9e..a2f31727e6 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/roguesden/RoguesDenMinimapOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/roguesden/RoguesDenMinimapOverlay.java @@ -39,8 +39,8 @@ import net.runelite.client.ui.overlay.OverlayUtil; class RoguesDenMinimapOverlay extends Overlay { - private Client client; - private RoguesDenPlugin plugin; + private final Client client; + private final RoguesDenPlugin plugin; @Inject public RoguesDenMinimapOverlay(Client client, RoguesDenPlugin plugin) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/roguesden/RoguesDenOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/roguesden/RoguesDenOverlay.java index dd9c5f6a33..8afa8a051a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/roguesden/RoguesDenOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/roguesden/RoguesDenOverlay.java @@ -36,7 +36,6 @@ import net.runelite.api.GameObject; import net.runelite.api.Perspective; import net.runelite.api.Point; import net.runelite.api.coords.LocalPoint; -import net.runelite.client.graphics.ModelOutlineRenderer; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; @@ -50,16 +49,14 @@ public class RoguesDenOverlay extends Overlay private final Client client; private final RoguesDenPlugin plugin; - private final ModelOutlineRenderer modelOutliner; @Inject - public RoguesDenOverlay(final Client client, final RoguesDenPlugin plugin, ModelOutlineRenderer modelOutliner) + public RoguesDenOverlay(final Client client, final RoguesDenPlugin plugin) { setPosition(OverlayPosition.DYNAMIC); setLayer(OverlayLayer.ABOVE_SCENE); this.client = client; this.plugin = plugin; - this.modelOutliner = modelOutliner; } @Override diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/roguesden/RoguesDenPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/roguesden/RoguesDenPlugin.java index e77b5e2019..c7012beb07 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/roguesden/RoguesDenPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/roguesden/RoguesDenPlugin.java @@ -49,7 +49,7 @@ import net.runelite.api.events.ItemContainerChanged; import net.runelite.api.events.WallObjectChanged; import net.runelite.api.events.WallObjectDespawned; import net.runelite.api.events.WallObjectSpawned; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.overlay.OverlayManager; @@ -83,23 +83,17 @@ public class RoguesDenPlugin extends Plugin @Inject private RoguesDenMinimapOverlay minimapOverlay; - @Inject - private EventBus eventBus; - @Override - protected void startUp() throws Exception + protected void startUp() { - addSubscriptions(); overlayManager.add(overlay); overlayManager.add(minimapOverlay); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(overlay); overlayManager.remove(minimapOverlay); obstaclesHull.clear(); @@ -107,24 +101,7 @@ public class RoguesDenPlugin extends Plugin hasGem = false; } - private void addSubscriptions() - { - eventBus.subscribe(ItemContainerChanged.class, this, this::onItemContainerChanged); - eventBus.subscribe(GameObjectSpawned.class, this, this::onGameObjectSpawned); - eventBus.subscribe(GameObjectChanged.class, this, this::onGameObjectChanged); - eventBus.subscribe(GameObjectDespawned.class, this, this::onGameObjectDespawned); - eventBus.subscribe(GroundObjectSpawned.class, this, this::onGroundObjectSpawned); - eventBus.subscribe(GroundObjectChanged.class, this, this::onGroundObjectChanged); - eventBus.subscribe(GroundObjectDespawned.class, this, this::onGroundObjectDespawned); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(WallObjectSpawned.class, this, this::onWallObjectSpawned); - eventBus.subscribe(WallObjectChanged.class, this, this::onWallObjectChanged); - eventBus.subscribe(WallObjectDespawned.class, this, this::onWallObjectDespawned); - eventBus.subscribe(DecorativeObjectSpawned.class, this, this::onDecorativeObjectSpawned); - eventBus.subscribe(DecorativeObjectChanged.class, this, this::onDecorativeObjectChanged); - eventBus.subscribe(DecorativeObjectDespawned.class, this, this::onDecorativeObjectDespawned); - } - + @Subscribe private void onItemContainerChanged(ItemContainerChanged event) { if (event.getItemContainer() != client.getItemContainer(InventoryID.INVENTORY)) @@ -135,6 +112,7 @@ public class RoguesDenPlugin extends Plugin hasGem = ItemUtil.containsItemId(event.getItemContainer().getItems(), MYSTIC_JEWEL); } + @Subscribe private void onGameStateChanged(GameStateChanged event) { if (event.getGameState() == GameState.LOADING) @@ -144,61 +122,73 @@ public class RoguesDenPlugin extends Plugin } } + @Subscribe private void onGameObjectSpawned(GameObjectSpawned event) { onTileObject(event.getTile(), null, event.getGameObject()); } + @Subscribe private void onGameObjectChanged(GameObjectChanged event) { onTileObject(event.getTile(), event.getPrevious(), event.getGameObject()); } + @Subscribe private void onGameObjectDespawned(GameObjectDespawned event) { onTileObject(event.getTile(), event.getGameObject(), null); } + @Subscribe private void onGroundObjectSpawned(GroundObjectSpawned event) { onTileObject(event.getTile(), null, event.getGroundObject()); } + @Subscribe private void onGroundObjectChanged(GroundObjectChanged event) { onTileObject(event.getTile(), event.getPrevious(), event.getGroundObject()); } + @Subscribe private void onGroundObjectDespawned(GroundObjectDespawned event) { onTileObject(event.getTile(), event.getGroundObject(), null); } + @Subscribe private void onWallObjectSpawned(WallObjectSpawned event) { onTileObject(event.getTile(), null, event.getWallObject()); } + @Subscribe private void onWallObjectChanged(WallObjectChanged event) { onTileObject(event.getTile(), event.getPrevious(), event.getWallObject()); } + @Subscribe private void onWallObjectDespawned(WallObjectDespawned event) { onTileObject(event.getTile(), event.getWallObject(), null); } + @Subscribe private void onDecorativeObjectSpawned(DecorativeObjectSpawned event) { onTileObject(event.getTile(), null, event.getDecorativeObject()); } + @Subscribe private void onDecorativeObjectChanged(DecorativeObjectChanged event) { onTileObject(event.getTile(), event.getPrevious(), event.getDecorativeObject()); } + @Subscribe private void onDecorativeObjectDespawned(DecorativeObjectDespawned event) { onTileObject(event.getTile(), event.getDecorativeObject(), null); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/AbyssMinimapOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/AbyssMinimapOverlay.java index a1952b3372..0bed866126 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/AbyssMinimapOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/AbyssMinimapOverlay.java @@ -25,6 +25,11 @@ package net.runelite.client.plugins.runecraft; import com.google.inject.Inject; +import java.awt.Dimension; +import java.awt.Graphics2D; +import java.awt.image.BufferedImage; +import java.util.HashMap; +import java.util.Map; import net.runelite.api.Client; import net.runelite.api.DecorativeObject; import net.runelite.api.Perspective; @@ -33,11 +38,6 @@ import net.runelite.client.game.ItemManager; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; -import java.awt.Dimension; -import java.awt.Graphics2D; -import java.awt.image.BufferedImage; -import java.util.HashMap; -import java.util.Map; class AbyssMinimapOverlay extends Overlay { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftPlugin.java index f8a057ed86..88f09eda54 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftPlugin.java @@ -45,7 +45,6 @@ import net.runelite.api.NPC; import net.runelite.api.NpcID; import net.runelite.api.VarPlayer; import net.runelite.api.events.ChatMessage; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.DecorativeObjectDespawned; import net.runelite.api.events.DecorativeObjectSpawned; import net.runelite.api.events.GameStateChanged; @@ -56,6 +55,8 @@ import net.runelite.api.events.NpcSpawned; import net.runelite.client.Notifier; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.menus.BaseComparableEntry; import static net.runelite.client.menus.ComparableEntries.newBaseComparableEntry; import net.runelite.client.menus.MenuManager; @@ -99,22 +100,31 @@ public class RunecraftPlugin extends Plugin @Inject private Client client; + @Inject private OverlayManager overlayManager; + @Inject private AbyssOverlay abyssOverlay; + @Inject private AbyssMinimapOverlay abyssMinimapOverlay; + @Inject private RunecraftOverlay runecraftOverlay; + @Inject private PouchOverlay pouchOverlay; + @Inject private RunecraftConfig config; + @Inject private Notifier notifier; + @Inject private MenuManager menuManager; + @Inject private EventBus eventBus; @@ -144,10 +154,9 @@ public class RunecraftPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); overlayManager.add(abyssOverlay); overlayManager.add(abyssMinimapOverlay); overlayManager.add(runecraftOverlay); @@ -155,9 +164,8 @@ public class RunecraftPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); abyssObjects.clear(); darkMage = null; degradedPouchInInventory = false; @@ -167,18 +175,6 @@ public class RunecraftPlugin extends Plugin removeSwaps(); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - eventBus.subscribe(DecorativeObjectSpawned.class, this, this::onDecorativeObjectSpawned); - eventBus.subscribe(DecorativeObjectDespawned.class, this, this::onDecorativeObjectDespawned); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(ItemContainerChanged.class, this, this::onItemContainerChanged); - eventBus.subscribe(NpcSpawned.class, this, this::onNpcSpawned); - eventBus.subscribe(NpcDespawned.class, this, this::onNpcDespawned); - } - private void onGameTick(GameTick event) { final int before = pouchVar; @@ -212,6 +208,7 @@ public class RunecraftPlugin extends Plugin } } + @Subscribe private void onItemContainerChanged(ItemContainerChanged event) { final ItemContainer container = event.getItemContainer(); @@ -259,6 +256,7 @@ public class RunecraftPlugin extends Plugin } } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("runecraft")) @@ -275,6 +273,7 @@ public class RunecraftPlugin extends Plugin } } + @Subscribe private void onChatMessage(ChatMessage event) { if (event.getType() != ChatMessageType.GAMEMESSAGE) @@ -288,6 +287,7 @@ public class RunecraftPlugin extends Plugin } } + @Subscribe private void onDecorativeObjectSpawned(DecorativeObjectSpawned event) { final DecorativeObject decorativeObject = event.getDecorativeObject(); @@ -297,12 +297,14 @@ public class RunecraftPlugin extends Plugin } } + @Subscribe private void onDecorativeObjectDespawned(DecorativeObjectDespawned event) { final DecorativeObject decorativeObject = event.getDecorativeObject(); abyssObjects.remove(decorativeObject); } + @Subscribe private void onGameStateChanged(GameStateChanged event) { final GameState gameState = event.getGameState(); @@ -324,6 +326,7 @@ public class RunecraftPlugin extends Plugin } } + @Subscribe private void onNpcSpawned(NpcSpawned event) { final NPC npc = event.getNpc(); @@ -334,6 +337,7 @@ public class RunecraftPlugin extends Plugin } } + @Subscribe private void onNpcDespawned(NpcDespawned event) { final NPC npc = event.getNpc(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/runedoku/RunedokuPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/runedoku/RunedokuPlugin.java index c1d9e953eb..8b90d7a785 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/runedoku/RunedokuPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/runedoku/RunedokuPlugin.java @@ -32,7 +32,7 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -60,9 +60,6 @@ public class RunedokuPlugin extends Plugin @Inject private RunedokuConfig config; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) private Color mindRuneColor; @Getter(AccessLevel.PACKAGE) @@ -91,23 +88,20 @@ public class RunedokuPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - overlayManager.add(runedokuOverlay); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(runedokuOverlay); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("runedoku")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RunepouchOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RunepouchOverlay.java index 968e983d74..093df0a42e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RunepouchOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RunepouchOverlay.java @@ -49,13 +49,13 @@ import net.runelite.client.util.ColorUtil; public class RunepouchOverlay extends WidgetItemOverlay { private static final Varbits[] AMOUNT_VARBITS = - { - Varbits.RUNE_POUCH_AMOUNT1, Varbits.RUNE_POUCH_AMOUNT2, Varbits.RUNE_POUCH_AMOUNT3 - }; + { + Varbits.RUNE_POUCH_AMOUNT1, Varbits.RUNE_POUCH_AMOUNT2, Varbits.RUNE_POUCH_AMOUNT3 + }; private static final Varbits[] RUNE_VARBITS = - { - Varbits.RUNE_POUCH_RUNE1, Varbits.RUNE_POUCH_RUNE2, Varbits.RUNE_POUCH_RUNE3 - }; + { + Varbits.RUNE_POUCH_RUNE1, Varbits.RUNE_POUCH_RUNE2, Varbits.RUNE_POUCH_RUNE3 + }; private static final Dimension IMAGE_SIZE = new Dimension(11, 11); private final Client client; @@ -78,7 +78,7 @@ public class RunepouchOverlay extends WidgetItemOverlay @Override public void renderItemOverlay(Graphics2D graphics, int itemId, WidgetItem itemWidget) { - if (itemId != ItemID.RUNE_POUCH) + if (itemId != ItemID.RUNE_POUCH && itemId != ItemID.RUNE_POUCH_L) { return; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RunepouchPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RunepouchPlugin.java index 4255248a2b..aa7c89c0de 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RunepouchPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RunepouchPlugin.java @@ -31,7 +31,7 @@ import javax.inject.Singleton; import lombok.AccessLevel; import lombok.Getter; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -55,9 +55,6 @@ public class RunepouchPlugin extends Plugin @Inject private RunepouchConfig config; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) private Color fontColor; @Getter(AccessLevel.PACKAGE) @@ -72,23 +69,21 @@ public class RunepouchPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); overlayManager.add(overlay); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(overlay); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("runepouch")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/Runes.java b/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/Runes.java index 3185ac2741..e51485e208 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/Runes.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/Runes.java @@ -24,34 +24,13 @@ */ package net.runelite.client.plugins.runepouch; - import com.google.common.collect.ImmutableMap; import java.awt.image.BufferedImage; import java.util.Map; import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; -import static net.runelite.api.ItemID.AIR_RUNE; -import static net.runelite.api.ItemID.ASTRAL_RUNE; -import static net.runelite.api.ItemID.BLOOD_RUNE; -import static net.runelite.api.ItemID.BODY_RUNE; -import static net.runelite.api.ItemID.CHAOS_RUNE; -import static net.runelite.api.ItemID.COSMIC_RUNE; -import static net.runelite.api.ItemID.DEATH_RUNE; -import static net.runelite.api.ItemID.DUST_RUNE; -import static net.runelite.api.ItemID.EARTH_RUNE; -import static net.runelite.api.ItemID.FIRE_RUNE; -import static net.runelite.api.ItemID.LAVA_RUNE; -import static net.runelite.api.ItemID.LAW_RUNE; -import static net.runelite.api.ItemID.MIND_RUNE; -import static net.runelite.api.ItemID.MIST_RUNE; -import static net.runelite.api.ItemID.MUD_RUNE; -import static net.runelite.api.ItemID.NATURE_RUNE; -import static net.runelite.api.ItemID.SMOKE_RUNE; -import static net.runelite.api.ItemID.SOUL_RUNE; -import static net.runelite.api.ItemID.STEAM_RUNE; -import static net.runelite.api.ItemID.WATER_RUNE; -import static net.runelite.api.ItemID.WRATH_RUNE; +import static net.runelite.api.ItemID.*; public enum Runes { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ScreenMarkerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ScreenMarkerPlugin.java index a12f659ede..df3ff29ff5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ScreenMarkerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ScreenMarkerPlugin.java @@ -42,9 +42,9 @@ import javax.inject.Inject; import javax.inject.Singleton; import lombok.AccessLevel; import lombok.Getter; -import net.runelite.client.events.ConfigChanged; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.input.MouseManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -70,7 +70,7 @@ public class ScreenMarkerPlugin extends Plugin private static final String DEFAULT_MARKER_NAME = "Marker"; private static final Dimension DEFAULT_SIZE = new Dimension(2, 2); - @Getter + @Getter(AccessLevel.PUBLIC) private final List screenMarkers = new ArrayList<>(); @Inject @@ -88,13 +88,10 @@ public class ScreenMarkerPlugin extends Plugin @Inject private ScreenMarkerCreationOverlay overlay; - @Getter + @Getter(AccessLevel.PUBLIC) @Inject private ColorPickerManager colorPickerManager; - @Inject - private EventBus eventBus; - private ScreenMarkerMouseListener mouseListener; private ScreenMarkerPluginPanel pluginPanel; private NavigationButton navigationButton; @@ -102,15 +99,13 @@ public class ScreenMarkerPlugin extends Plugin @Getter(AccessLevel.PACKAGE) private ScreenMarker currentMarker; - @Getter + @Getter(AccessLevel.PACKAGE) private boolean creatingScreenMarker = false; private Point startLocation = null; @Override - protected void startUp() throws Exception + protected void startUp() { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - overlayManager.add(overlay); loadConfig(configManager.getConfiguration(CONFIG_GROUP, CONFIG_KEY)).forEach(screenMarkers::add); screenMarkers.forEach(overlayManager::add); @@ -133,10 +128,8 @@ public class ScreenMarkerPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(overlay); overlayManager.removeIf(ScreenMarkerOverlay.class::isInstance); screenMarkers.clear(); @@ -150,6 +143,7 @@ public class ScreenMarkerPlugin extends Plugin navigationButton = null; } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (screenMarkers.isEmpty() && event.getGroup().equals(CONFIG_GROUP) && event.getKey().equals(CONFIG_KEY)) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ScreenMarkerRenderable.java b/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ScreenMarkerRenderable.java index 6182765aa4..af91bb7590 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ScreenMarkerRenderable.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ScreenMarkerRenderable.java @@ -56,7 +56,7 @@ public class ScreenMarkerRenderable implements LayoutableRenderableEntity @Setter(AccessLevel.PACKAGE) private Stroke stroke; - @Getter + @Getter(AccessLevel.PUBLIC) private final Rectangle bounds = new Rectangle(); @Override diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotConfig.java index 50ea82604a..1f03b2aa81 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotConfig.java @@ -154,15 +154,16 @@ public interface ScreenshotConfig extends Config } @ConfigItem( - keyName = "playerDeath", - name = "Screenshot Deaths", - description = "Configures whether or not screenshots are automatically taken when you die.", - position = 11 + keyName = "playerDeath", + name = "Screenshot Deaths", + description = "Configures whether or not screenshots are automatically taken when you die.", + position = 11 ) default boolean screenshotPlayerDeath() { return false; } + @ConfigItem( keyName = "duels", name = "Screenshot Duels", diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotPlugin.java index c4b8d9a109..c8a41586f4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotPlugin.java @@ -70,13 +70,13 @@ import net.runelite.api.WorldType; import net.runelite.api.events.ChatMessage; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; -import net.runelite.api.events.LocalPlayerDeath; import net.runelite.api.events.PlayerDeath; import net.runelite.api.events.WidgetLoaded; import net.runelite.api.util.Text; import net.runelite.api.widgets.Widget; import static net.runelite.api.widgets.WidgetID.BARROWS_REWARD_GROUP_ID; import static net.runelite.api.widgets.WidgetID.CHAMBERS_OF_XERIC_REWARD_GROUP_ID; +import static net.runelite.api.widgets.WidgetID.CHATBOX_GROUP_ID; import static net.runelite.api.widgets.WidgetID.CLUE_SCROLL_REWARD_GROUP_ID; import static net.runelite.api.widgets.WidgetID.DIALOG_SPRITE_GROUP_ID; import static net.runelite.api.widgets.WidgetID.KINGDOM_GROUP_ID; @@ -88,7 +88,7 @@ import net.runelite.client.Notifier; import static net.runelite.client.RuneLite.SCREENSHOT_DIR; import net.runelite.client.config.ConfigManager; import net.runelite.client.config.Keybind; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.events.PlayerLootReceived; import net.runelite.client.game.SpriteManager; @@ -112,6 +112,7 @@ import okhttp3.MediaType; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @PluginDescriptor( @@ -193,9 +194,6 @@ public class ScreenshotPlugin extends Plugin @Inject private SpriteManager spriteManager; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) private BufferedImage reportButton; @@ -239,10 +237,9 @@ public class ScreenshotPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); overlayManager.add(screenshotOverlay); SCREENSHOT_DIR.mkdirs(); @@ -277,27 +274,14 @@ public class ScreenshotPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(screenshotOverlay); clientToolbar.removeNavigation(titleBarButton); keyManager.unregisterKeyListener(hotkeyListener); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(LocalPlayerDeath.class, this, this::onLocalPlayerDeath); - eventBus.subscribe(PlayerDeath.class, this, this::onPlayerDeath); - eventBus.subscribe(PlayerLootReceived.class, this, this::onPlayerLootReceived); - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - eventBus.subscribe(WidgetLoaded.class, this, this::onWidgetLoaded); - } - + @Subscribe private void onGameStateChanged(GameStateChanged event) { if (event.getGameState() == GameState.LOGGED_IN @@ -307,6 +291,7 @@ public class ScreenshotPlugin extends Plugin } } + @Subscribe void onGameTick(GameTick event) { if (!shouldTakeScreenshot) @@ -319,11 +304,11 @@ public class ScreenshotPlugin extends Plugin String fileName = null; if (client.getWidget(WidgetInfo.LEVEL_UP_LEVEL) != null) { - fileName = parseLevelUpWidget(WidgetInfo.LEVEL_UP_LEVEL); + fileName = parseLevelUpWidget(client.getWidget(WidgetInfo.LEVEL_UP_LEVEL)); } else if (client.getWidget(WidgetInfo.DIALOG_SPRITE_TEXT) != null) { - fileName = parseLevelUpWidget(WidgetInfo.DIALOG_SPRITE_TEXT); + fileName = parseLevelUpWidget(client.getWidget(WidgetInfo.DIALOG_SPRITE_TEXT)); } else if (client.getWidget(WidgetInfo.QUEST_COMPLETED_NAME_TEXT) != null) { @@ -331,6 +316,10 @@ public class ScreenshotPlugin extends Plugin String text = client.getWidget(WidgetInfo.QUEST_COMPLETED_NAME_TEXT).getText(); fileName = "Quest(" + text.substring(19, text.length() - 1) + ")"; } + else if (client.getWidget(WidgetInfo.CHATBOX_CONTAINER).getChild(1) != null) + { + fileName = parseLevelUpWidget(client.getWidget(WidgetInfo.CHATBOX_CONTAINER).getChild(1)); + } if (fileName != null) { @@ -338,16 +327,14 @@ public class ScreenshotPlugin extends Plugin } } - private void onLocalPlayerDeath(LocalPlayerDeath event) + @Subscribe + private void onPlayerDeath(PlayerDeath event) { - if (this.screenshotPlayerDeath && client.getLocalPlayer().getName() != null) + if (event.getPlayer() == client.getLocalPlayer() && config.screenshotPlayerDeath()) { takeScreenshot(client.getLocalPlayer().getName() + " dead " + format(new Date()), "Deaths"); } - } - private void onPlayerDeath(PlayerDeath event) - { int tob = client.getVar(Varbits.THEATRE_OF_BLOOD); if (this.screenshotFriendDeath && event.getPlayer().getName() != null && (event.getPlayer().isFriend() || event.getPlayer().isClanMember() @@ -357,6 +344,7 @@ public class ScreenshotPlugin extends Plugin } } + @Subscribe private void onPlayerLootReceived(final PlayerLootReceived playerLootReceived) { if (this.screenshotKills) @@ -368,6 +356,7 @@ public class ScreenshotPlugin extends Plugin } } + @Subscribe void onChatMessage(ChatMessage event) { if (event.getType() != ChatMessageType.GAMEMESSAGE && event.getType() != ChatMessageType.SPAM && event.getType() != ChatMessageType.TRADE) @@ -434,7 +423,7 @@ public class ScreenshotPlugin extends Plugin takeScreenshot(fileName); } - if (this.screenshotBossKills ) + if (this.screenshotBossKills) { Matcher m = BOSSKILL_MESSAGE_PATTERN.matcher(chatMessage); if (m.matches()) @@ -481,6 +470,7 @@ public class ScreenshotPlugin extends Plugin } } + @Subscribe void onWidgetLoaded(WidgetLoaded event) { String fileName; @@ -500,6 +490,7 @@ public class ScreenshotPlugin extends Plugin break; case LEVEL_UP_GROUP_ID: case DIALOG_SPRITE_GROUP_ID: + case CHATBOX_GROUP_ID: if (!this.screenshotLevels) { return; @@ -564,6 +555,7 @@ public class ScreenshotPlugin extends Plugin case LEVEL_UP_GROUP_ID: case DIALOG_SPRITE_GROUP_ID: case QUEST_COMPLETED_GROUP_ID: + case CHATBOX_GROUP_ID: { // level up widget gets loaded prior to the text being set, so wait until the next tick shouldTakeScreenshot = true; @@ -589,22 +581,21 @@ public class ScreenshotPlugin extends Plugin } /** - * Receives a WidgetInfo pointing to the middle widget of the level-up dialog, + * Receives a Widget containing the level-up dialog, * and parses it into a shortened string for filename usage. * - * @param levelUpLevel WidgetInfo pointing to the required text widget, - * with the format "Your Skill (level is/are) now 99." + * @param levelUpWidget Widget containing the level-up text, + * with the format "Your Skill (level is/are) now 99." * @return Shortened string in the format "Skill(99)" */ - String parseLevelUpWidget(WidgetInfo levelUpLevel) + String parseLevelUpWidget(Widget levelUpWidget) { - Widget levelChild = client.getWidget(levelUpLevel); - if (levelChild == null) + if (levelUpWidget == null) { return null; } - Matcher m = LEVEL_UP_PATTERN.matcher(levelChild.getText()); + Matcher m = LEVEL_UP_PATTERN.matcher(levelUpWidget.getText()); if (!m.matches()) { return null; @@ -619,7 +610,7 @@ public class ScreenshotPlugin extends Plugin * Saves a screenshot of the client window to the screenshot folder as a PNG, * and optionally uploads it to an image-hosting service. * - * @param fileName Filename to use, without file extension. + * @param fileName Filename to use, without file extension. */ private void takeScreenshot(String fileName) { @@ -650,7 +641,7 @@ public class ScreenshotPlugin extends Plugin * Saves a screenshot of the client window to the screenshot folder as a PNG, * and optionally uploads it to an image-hosting service. * - * @param fileName Filename to use, without file extension. + * @param fileName Filename to use, without file extension. * @param subdirectory The subdirectory to save it in */ private void takeScreenshot(String fileName, String subdirectory) @@ -678,6 +669,7 @@ public class ScreenshotPlugin extends Plugin drawManager.requestNextFrameListener(imageCallback); } } + private void takeScreenshot(String fileName, Image image, @Nullable String subdirectory) { BufferedImage screenshot = this.includeFrame @@ -714,16 +706,16 @@ public class ScreenshotPlugin extends Plugin if (client.getLocalPlayer() != null && client.getLocalPlayer().getName() != null) { final EnumSet worldTypes = client.getWorldType(); - final boolean dmm = worldTypes.contains(WorldType.DEADMAN); - final boolean sdmm = worldTypes.contains(WorldType.SEASONAL_DEADMAN); - final boolean dmmt = worldTypes.contains(WorldType.DEADMAN_TOURNAMENT); - final boolean isDmmWorld = dmm || sdmm || dmmt; String playerDir = client.getLocalPlayer().getName(); - if (isDmmWorld) + if (worldTypes.contains(WorldType.DEADMAN)) { playerDir += "-Deadman"; } + else if (worldTypes.contains(WorldType.LEAGUE)) + { + playerDir += "-League"; + } playerFolder = new File(SCREENSHOT_DIR, playerDir); } else @@ -809,13 +801,13 @@ public class ScreenshotPlugin extends Plugin RuneLiteAPI.CLIENT.newCall(request).enqueue(new Callback() { @Override - public void onFailure(Call call, IOException ex) + public void onFailure(@NotNull Call call, @NotNull IOException ex) { log.warn("error uploading screenshot", ex); } @Override - public void onResponse(Call call, Response response) throws IOException + public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { try (InputStream in = response.body().byteStream()) { @@ -876,6 +868,7 @@ public class ScreenshotPlugin extends Plugin return theatreOfBloodNumber; } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("screenshot")) @@ -905,4 +898,4 @@ public class ScreenshotPlugin extends Plugin this.screenshotUntradeableDrop = config.screenshotUntradeableDrop(); this.hotkey = config.hotkey(); } -} +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/TransferableBufferedImage.java b/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/TransferableBufferedImage.java index 27b4ddd154..88499fd77b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/TransferableBufferedImage.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/TransferableBufferedImage.java @@ -32,6 +32,7 @@ import java.awt.datatransfer.UnsupportedFlavorException; import java.awt.image.BufferedImage; import lombok.AllArgsConstructor; import lombok.NonNull; +import org.jetbrains.annotations.NotNull; @AllArgsConstructor class TransferableBufferedImage implements Transferable @@ -39,6 +40,7 @@ class TransferableBufferedImage implements Transferable @NonNull private final BufferedImage image; + @NotNull @Override public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/shayzieninfirmary/ShayzienInfirmaryOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/shayzieninfirmary/ShayzienInfirmaryOverlay.java index 6e09eef0d4..bd975ef502 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/shayzieninfirmary/ShayzienInfirmaryOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/shayzieninfirmary/ShayzienInfirmaryOverlay.java @@ -46,7 +46,7 @@ public class ShayzienInfirmaryOverlay extends Overlay { private final ShayzienInfirmaryPlugin plugin; - private BufferedImage medPackImage; + private final BufferedImage medPackImage; @Inject public ShayzienInfirmaryOverlay(final ShayzienInfirmaryPlugin plugin, final ItemManager itemManager) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/shayzieninfirmary/ShayzienInfirmaryPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/shayzieninfirmary/ShayzienInfirmaryPlugin.java index 7280e59e8c..545020d524 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/shayzieninfirmary/ShayzienInfirmaryPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/shayzieninfirmary/ShayzienInfirmaryPlugin.java @@ -34,7 +34,7 @@ import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; import net.runelite.api.NPC; import net.runelite.api.events.GameTick; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.PluginType; @@ -60,25 +60,19 @@ public class ShayzienInfirmaryPlugin extends Plugin @Inject private Client client; - @Inject - private EventBus eventBus; - @Inject private ShayzienInfirmaryOverlay overlay; @Override - protected void startUp() throws Exception + protected void startUp() { - eventBus.subscribe(GameTick.class, this, this::onGameTick); loadPlugin(); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - unloadPlugin(); } @@ -92,6 +86,7 @@ public class ShayzienInfirmaryPlugin extends Plugin overlayManager.remove(overlay); } + @Subscribe private void onGameTick(GameTick event) { if (isNotAtInfirmary()) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/shiftwalker/ShiftWalkerConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/shiftwalker/ShiftWalkerConfig.java index a4e2b92543..7f5d9baca9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/shiftwalker/ShiftWalkerConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/shiftwalker/ShiftWalkerConfig.java @@ -40,7 +40,7 @@ public interface ShiftWalkerConfig extends Config { return false; } - + @ConfigItem( keyName = "shiftLoot", name = "Shift to Loot", diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/shiftwalker/ShiftWalkerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/shiftwalker/ShiftWalkerPlugin.java index 7b56520bf3..7e9858769c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/shiftwalker/ShiftWalkerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/shiftwalker/ShiftWalkerPlugin.java @@ -39,6 +39,7 @@ import net.runelite.api.events.GameStateChanged; import net.runelite.client.config.ConfigManager; import net.runelite.client.config.Keybind; import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.input.KeyManager; import net.runelite.client.menus.AbstractComparableEntry; @@ -175,8 +176,6 @@ public class ShiftWalkerPlugin extends Plugin { this.shiftWalk = config.shiftWalk(); this.shiftLoot = config.shiftLoot(); - - addSubscriptions(); if (client.getGameState() == GameState.LOGGED_IN) { keyManager.registerKeyListener(shift); @@ -186,17 +185,10 @@ public class ShiftWalkerPlugin extends Plugin @Override public void shutDown() { - eventBus.unregister(this); keyManager.unregisterKeyListener(shift); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(FocusChanged.class, this, this::onFocusChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - } - + @Subscribe private void onGameStateChanged(GameStateChanged event) { if (event.getGameState() != GameState.LOGGED_IN) @@ -207,6 +199,7 @@ public class ShiftWalkerPlugin extends Plugin keyManager.registerKeyListener(shift); } + @Subscribe private void onFocusChanged(FocusChanged event) { if (!event.isFocused()) @@ -215,6 +208,7 @@ public class ShiftWalkerPlugin extends Plugin } } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("shiftwalkhere")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/CalculatorType.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/CalculatorType.java index e102988f50..fef979bcfd 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/CalculatorType.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/CalculatorType.java @@ -24,12 +24,13 @@ */ package net.runelite.client.plugins.skillcalculator; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; import net.runelite.api.Skill; @AllArgsConstructor -@Getter +@Getter(AccessLevel.PACKAGE) enum CalculatorType { MINING(Skill.MINING, "skill_mining.json"), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculator.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculator.java index 6a73c5ed9b..eb167bf655 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculator.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculator.java @@ -2,16 +2,16 @@ * Copyright (c) 2018, Kruithne * Copyright (c) 2018, Psikoi * 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. + * 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 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 @@ -91,6 +91,7 @@ class SkillCalculator extends JPanel searchBar.setPreferredSize(new Dimension(PluginPanel.PANEL_WIDTH - 20, 30)); searchBar.setBackground(ColorScheme.DARKER_GRAY_COLOR); searchBar.setHoverBackgroundColor(ColorScheme.DARK_GRAY_HOVER_COLOR); + searchBar.addClearListener(e -> onSearch()); searchBar.addKeyListener(e -> onSearch()); setLayout(new DynamicGridLayout(0, 1, 0, 5)); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculatorPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculatorPlugin.java index e79886c2e4..7f3248dcd9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculatorPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculatorPlugin.java @@ -39,7 +39,7 @@ import net.runelite.api.ItemContainer; import net.runelite.api.events.ScriptCallbackEvent; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.game.SkillIconManager; @@ -81,9 +81,6 @@ public class SkillCalculatorPlugin extends Plugin @Inject private SkillCalculatorConfig skillCalculatorConfig; - @Inject - private EventBus eventBus; - private NavigationButton uiNavigationButton; private NavigationButton bankedUiNavigationButton; @@ -97,9 +94,8 @@ public class SkillCalculatorPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { - addSubscriptions(); final BufferedImage icon = ImageUtil.getResourceStreamFromClass(getClass(), "calc.png"); final SkillCalculatorPanel uiPanel = new SkillCalculatorPanel(skillIconManager, client, spriteManager, itemManager); @@ -117,9 +113,8 @@ public class SkillCalculatorPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); clientToolbar.removeNavigation(uiNavigationButton); if (bankedUiNavigationButton != null) { @@ -127,12 +122,7 @@ public class SkillCalculatorPlugin extends Plugin } } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(ScriptCallbackEvent.class, this, this::onScriptCallbackEvent); - } - + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("skillCalculator") && event.getKey().equals("enabledBankedXp")) @@ -141,6 +131,7 @@ public class SkillCalculatorPlugin extends Plugin } } + @Subscribe public void onScriptCallbackEvent(ScriptCallbackEvent event) { if (!event.getEventName().equals("setBankTitle") || !skillCalculatorConfig.showBankedXp()) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/UICalculatorInputArea.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/UICalculatorInputArea.java index 6584c85bf9..22c726deda 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/UICalculatorInputArea.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/UICalculatorInputArea.java @@ -32,12 +32,13 @@ import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.border.EmptyBorder; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.client.ui.ColorScheme; import net.runelite.client.ui.FontManager; import net.runelite.client.ui.components.FlatTextField; -@Getter +@Getter(AccessLevel.PUBLIC) public class UICalculatorInputArea extends JPanel { private final JTextField uiFieldCurrentLevel; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/BankedCalculator.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/BankedCalculator.java index 5ba8b0573a..e108c330c9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/BankedCalculator.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/BankedCalculator.java @@ -41,6 +41,7 @@ import javax.swing.JCheckBox; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingConstants; +import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; @@ -68,7 +69,7 @@ public class BankedCalculator extends JPanel public static final DecimalFormat XP_FORMAT_COMMA = new DecimalFormat("#,###.#"); private final Client client; - @Getter + @Getter(AccessLevel.PUBLIC) private final SkillCalculatorConfig config; private final UICalculatorInputArea uiInput; private final ItemManager itemManager; @@ -82,17 +83,17 @@ public class BankedCalculator extends JPanel private final ModifyPanel modifyPanel; private SelectionGrid itemGrid; - @Setter + @Setter(AccessLevel.PACKAGE) private Map bankMap = new HashMap<>(); - @Getter + @Getter(AccessLevel.PACKAGE) private Skill currentSkill; - @Getter + @Getter(AccessLevel.PUBLIC) private int skillLevel, skillExp, endLevel, endExp; private final Collection xpModifierButtons = new ArrayList<>(); - @Getter + @Getter(AccessLevel.PUBLIC) private float xpFactor = 1.0f; BankedCalculator(UICalculatorInputArea uiInput, Client client, SkillCalculatorConfig config, ItemManager itemManager) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/BankedCalculatorPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/BankedCalculatorPanel.java index f017040e2a..f536fb62e7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/BankedCalculatorPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/BankedCalculatorPanel.java @@ -75,6 +75,7 @@ public class BankedCalculatorPanel extends PluginPanel final ComboBoxListRenderer renderer = new ComboBoxListRenderer(); renderer.setDefaultText("Select a Skill..."); + //noinspection unchecked dropdown.setRenderer(renderer); for (final Skill skill : BANKABLE_SKILLS) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/beans/Activity.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/beans/Activity.java index ff53e7ce03..995fe8632a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/beans/Activity.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/beans/Activity.java @@ -30,13 +30,14 @@ import java.util.Collection; import java.util.List; import java.util.stream.Collectors; import javax.annotation.Nullable; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.ItemDefinition; import net.runelite.api.ItemID; import net.runelite.api.Skill; import net.runelite.client.game.ItemManager; -@Getter +@Getter(AccessLevel.PUBLIC) public enum Activity { /** diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/beans/BankedItem.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/beans/BankedItem.java index 5256d26351..483e6e0f8d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/beans/BankedItem.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/beans/BankedItem.java @@ -24,11 +24,12 @@ */ package net.runelite.client.plugins.skillcalculator.banked.beans; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; @AllArgsConstructor -@Getter +@Getter(AccessLevel.PUBLIC) public class BankedItem { private final CriticalItem item; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/beans/CriticalItem.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/beans/CriticalItem.java index dad745e77e..82af5899c2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/beans/CriticalItem.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/beans/CriticalItem.java @@ -30,6 +30,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Map; +import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; import net.runelite.api.ItemDefinition; @@ -37,7 +38,7 @@ import net.runelite.api.ItemID; import net.runelite.api.Skill; import net.runelite.client.game.ItemManager; -@Getter +@Getter(AccessLevel.PUBLIC) public enum CriticalItem { /** diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/beans/Secondaries.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/beans/Secondaries.java index cab6b7474f..98ab85cd23 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/beans/Secondaries.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/beans/Secondaries.java @@ -24,10 +24,11 @@ */ package net.runelite.client.plugins.skillcalculator.banked.beans; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.ItemID; -@Getter +@Getter(AccessLevel.PACKAGE) public enum Secondaries { /** diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/beans/XpModifiers.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/beans/XpModifiers.java index b9fcae99c6..06c850ceef 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/beans/XpModifiers.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/banked/beans/XpModifiers.java @@ -27,12 +27,13 @@ package net.runelite.client.plugins.skillcalculator.banked.beans; import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.Multimap; import java.util.Collection; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; import net.runelite.api.Skill; @AllArgsConstructor -@Getter +@Getter(AccessLevel.PUBLIC) public enum XpModifiers { LIT_GILDER_ALTAR(Skill.PRAYER, "Lit Gilded Altar (350%)", 3.5f), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/beans/SkillData.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/beans/SkillData.java index 4c2d36aa68..0d5b1cad40 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/beans/SkillData.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/beans/SkillData.java @@ -24,9 +24,10 @@ */ package net.runelite.client.plugins.skillcalculator.beans; +import lombok.AccessLevel; import lombok.Getter; -@Getter +@Getter(AccessLevel.PUBLIC) public class SkillData { private SkillDataEntry[] actions; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/beans/SkillDataBonus.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/beans/SkillDataBonus.java index 675fcb51db..6cce75a62e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/beans/SkillDataBonus.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/beans/SkillDataBonus.java @@ -24,9 +24,10 @@ */ package net.runelite.client.plugins.skillcalculator.beans; +import lombok.AccessLevel; import lombok.Getter; -@Getter +@Getter(AccessLevel.PUBLIC) public class SkillDataBonus { private String name; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/beans/SkillDataEntry.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/beans/SkillDataEntry.java index b21188d913..05ec9c878a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/beans/SkillDataEntry.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/beans/SkillDataEntry.java @@ -24,9 +24,10 @@ */ package net.runelite.client.plugins.skillcalculator.beans; +import lombok.AccessLevel; import lombok.Getter; -@Getter +@Getter(AccessLevel.PUBLIC) public class SkillDataEntry { private String name; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skybox/SkyboxPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/skybox/SkyboxPlugin.java index 7a0c11bf33..6a22b01d5c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skybox/SkyboxPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skybox/SkyboxPlugin.java @@ -33,7 +33,7 @@ import net.runelite.api.Player; import net.runelite.api.coords.LocalPoint; import net.runelite.api.events.BeforeRender; import net.runelite.api.events.GameStateChanged; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -49,15 +49,11 @@ public class SkyboxPlugin extends Plugin @Inject private Client client; - @Inject - private EventBus eventBus; - private Skybox skybox; @Override public void startUp() throws IOException { - addSubscriptions(); skybox = new Skybox(SkyboxPlugin.class.getResourceAsStream("skybox.txt"), "skybox.txt"); } @@ -65,18 +61,10 @@ public class SkyboxPlugin extends Plugin @Override public void shutDown() { - eventBus.unregister(this); - client.setSkyboxColor(0); skybox = null; } - private void addSubscriptions() - { - eventBus.subscribe(BeforeRender.class, this, this::onBeforeRender); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - } - private int mapChunk(int cx, int cy, int plane) { cx -= client.getBaseX() / 8; @@ -92,6 +80,7 @@ public class SkyboxPlugin extends Plugin return instanceTemplateChunks[cx][cy]; } + @Subscribe private void onBeforeRender(BeforeRender r) { if (skybox == null || client.getGameState() != GameState.LOGGED_IN) @@ -136,6 +125,7 @@ public class SkyboxPlugin extends Plugin )); } + @Subscribe private void onGameStateChanged(GameStateChanged gameStateChanged) { if (gameStateChanged.getGameState() == GameState.LOGIN_SCREEN) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerConfig.java index bbb246f495..1eb825f4ec 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerConfig.java @@ -167,10 +167,10 @@ public interface SlayerConfig extends Config } @ConfigItem( - position = 14, - keyName = "pointsCommand", - name = "Points Command", - description = "Configures whether the slayer points command is enabled
!points" + position = 14, + keyName = "pointsCommand", + name = "Points Command", + description = "Configures whether the slayer points command is enabled
!points" ) default boolean pointsCommand() { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java index cab9e0afcd..75edf8c6ac 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java @@ -65,7 +65,6 @@ import net.runelite.api.Varbits; import net.runelite.api.WorldType; import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.ChatMessage; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.InteractingChanged; @@ -85,8 +84,9 @@ import net.runelite.client.chat.ChatCommandManager; import net.runelite.client.chat.ChatMessageBuilder; import net.runelite.client.chat.ChatMessageManager; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ChatInput; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.game.SpriteManager; import net.runelite.client.plugins.Plugin; @@ -223,9 +223,6 @@ public class SlayerPlugin extends Plugin @Inject private ChatClient chatClient; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) private final Set highlightedTargets = new HashSet<>(); @@ -297,10 +294,9 @@ public class SlayerPlugin extends Plugin private boolean weaknessOverlayAttached; @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); weaknessOverlayAttached = false; @@ -340,10 +336,8 @@ public class SlayerPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(overlay); overlayManager.remove(targetClickboxOverlay); overlayManager.remove(targetWeaknessOverlay); @@ -358,26 +352,13 @@ public class SlayerPlugin extends Plugin cachedXp = -1; } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(NpcSpawned.class, this, this::onNpcSpawned); - eventBus.subscribe(NpcDefinitionChanged.class, this, this::onNpcDefinitionChanged); - eventBus.subscribe(NpcDespawned.class, this, this::onNpcDespawned); - eventBus.subscribe(VarbitChanged.class, this, this::onVarbitChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - eventBus.subscribe(StatChanged.class, this, this::onStatChanged); - eventBus.subscribe(InteractingChanged.class, this, this::onInteractingChanged); - } - @Provides SlayerConfig getConfig(ConfigManager configManager) { return configManager.getConfig(SlayerConfig.class); } + @Subscribe void onGameStateChanged(GameStateChanged event) { switch (event.getGameState()) @@ -420,6 +401,7 @@ public class SlayerPlugin extends Plugin config.streak(streak); } + @Subscribe private void onNpcSpawned(NpcSpawned npcSpawned) { NPC npc = npcSpawned.getNpc(); @@ -429,6 +411,7 @@ public class SlayerPlugin extends Plugin } } + @Subscribe private void onNpcDefinitionChanged(NpcDefinitionChanged event) { NPC npc = event.getNpc(); @@ -439,6 +422,7 @@ public class SlayerPlugin extends Plugin } } + @Subscribe private void onNpcDespawned(NpcDespawned npcDespawned) { NPC npc = npcDespawned.getNpc(); @@ -450,6 +434,7 @@ public class SlayerPlugin extends Plugin } } + @Subscribe public void onVarbitChanged(VarbitChanged event) { if (client.getVar(Varbits.SLAYER_REWARD_POINTS) == cachedPoints) @@ -564,6 +549,7 @@ public class SlayerPlugin extends Plugin private static final int FORCED_WAIT = 2; private int forcedWait = -1; + @Subscribe public void onGameTick(GameTick tick) { loginTick = false; @@ -645,6 +631,7 @@ public class SlayerPlugin extends Plugin } } + @Subscribe public void onChatMessage(ChatMessage event) { if (event.getType() != ChatMessageType.GAMEMESSAGE && event.getType() != ChatMessageType.SPAM) @@ -730,6 +717,7 @@ public class SlayerPlugin extends Plugin } } + @Subscribe public void onStatChanged(StatChanged statChanged) { if (statChanged.getSkill() != SLAYER) @@ -787,6 +775,7 @@ public class SlayerPlugin extends Plugin cachedXp = slayerExp; } + @Subscribe private void onInteractingChanged(InteractingChanged event) { if (client.getLocalPlayer() == null) @@ -818,6 +807,7 @@ public class SlayerPlugin extends Plugin return SUPERIOR_SLAYER_MONSTERS.contains(name.toLowerCase()); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("slayer")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerTaskPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerTaskPanel.java index 4d18038bf9..4512bd502e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerTaskPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerTaskPanel.java @@ -25,7 +25,7 @@ import net.runelite.client.util.ImageUtil; import net.runelite.client.util.QuantityFormatter; @Singleton -public class SlayerTaskPanel extends PluginPanel +class SlayerTaskPanel extends PluginPanel { private static final long MILLIS_PER_SECOND = 1000; private static final long SECONDS_PER_MINUTE = 60; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerXpDropLookup.java b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerXpDropLookup.java index 25dfef058c..0c7ec6e4d2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerXpDropLookup.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerXpDropLookup.java @@ -44,9 +44,7 @@ class SlayerXpDropLookup try (final InputStream xpFile = getClass().getResourceAsStream("/slayer_xp.json")) { Gson gson = new Gson(); - xpMap = gson.fromJson(new InputStreamReader(xpFile), new TypeToken>>() - { - }.getType()); + xpMap = gson.fromJson(new InputStreamReader(xpFile), new TypeToken>>() {}.getType()); } } @@ -91,6 +89,7 @@ class SlayerXpDropLookup if (xpCombatLevel.get(i) > 0) { givesSlayerXp = true; + break; } } if (!givesSlayerXp) @@ -104,6 +103,7 @@ class SlayerXpDropLookup && xpCombatLevel.get(i) > 0) { foundCombatLevel = true; + break; } } if (foundCombatLevel) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/TargetClickboxOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/TargetClickboxOverlay.java index f199816f21..5bf16d3edc 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/TargetClickboxOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/TargetClickboxOverlay.java @@ -165,9 +165,7 @@ public class TargetClickboxOverlay extends Overlay WorldPoint wp = actor.getWorldLocation(); getSquare(wp, size).forEach(square -> - { - drawTile(graphics, square, color, 1, 255, 50); - }); + drawTile(graphics, square, color, 1, 255, 50)); break; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/Task.java b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/Task.java index e8aa2b9946..00f5598fcf 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/Task.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/Task.java @@ -33,8 +33,8 @@ import static java.util.Arrays.asList; import java.util.Collections; import java.util.List; import java.util.Map; -import lombok.AccessLevel; import javax.annotation.Nullable; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.ItemID; import net.runelite.api.NpcID; @@ -55,20 +55,20 @@ enum Task ABERRANT_SPECTRES("Aberrant spectres", ItemID.ABERRANT_SPECTRE, asList("Abhorrent spectre", "Deviant spectre", "Repugnant spectre"), Collections.emptyList()), ABYSSAL_DEMONS("Abyssal demons", ItemID.ABYSSAL_DEMON, - asList("Abyssal Sire"), Collections.emptyList()), + Collections.singletonList("Abyssal Sire"), Collections.emptyList()), ABYSSAL_SIRE("Abyssal Sire", ItemID.ABYSSAL_ORPHAN), ADAMANT_DRAGONS("Adamant dragons", ItemID.ADAMANT_DRAGON_MASK), ALCHEMICAL_HYDRA("Alchemical Hydra", ItemID.IKKLE_HYDRA), ANKOU("Ankou", ItemID.ANKOU_MASK), AVIANSIES("Aviansies", ItemID.ENSOULED_AVIANSIE_HEAD, - asList("Kree'arra"), Collections.emptyList()), + Collections.singletonList("Kree'arra"), Collections.emptyList()), BANSHEES("Banshees", ItemID.BANSHEE), BARROWS_BROTHERS("Barrows Brothers", ItemID.KARILS_COIF, asList("Ahrim the blighted", "Dharok the wretched", "Guthan the infested", "Karil the tainted", "Torag the corrupted", "Verac the defiled"), Collections.emptyList()), BASILISKS("Basilisks", ItemID.BASILISK), BATS("Bats", ItemID.GIRAL_BAT_2), BEARS("Bears", ItemID.ENSOULED_BEAR_HEAD, - asList("Callisto"), Collections.emptyList()), + Collections.singletonList("Callisto"), Collections.emptyList()), ENTS("Ents", ItemID.ENTS_ROOTS), LAVA_DRAGONS("Lava Dragons", ItemID.LAVA_SCALE), BANDITS("Bandits", ItemID.BANDIT), @@ -80,28 +80,28 @@ enum Task Collections.emptyList(), asList(NpcID.BABY_DRAGON_1871, NpcID.BABY_DRAGON_1872, NpcID.BABY_DRAGON_7955)), BLOODVELD("Bloodveld", ItemID.BLOODVELD), BLUE_DRAGONS("Blue dragons", ItemID.BLUE_DRAGON_MASK, - asList("Vorkath"), asList(NpcID.BABY_DRAGON, NpcID.BABY_DRAGON_242, NpcID.BABY_DRAGON_243)), + Collections.singletonList("Vorkath"), asList(NpcID.BABY_DRAGON, NpcID.BABY_DRAGON_242, NpcID.BABY_DRAGON_243)), BRINE_RATS("Brine rats", ItemID.BRINE_RAT), BRONZE_DRAGONS("Bronze dragons", ItemID.BRONZE_DRAGON_MASK), CALLISTO("Callisto", ItemID.CALLISTO_CUB), CATABLEPON("Catablepon", ItemID.LEFT_SKULL_HALF), CAVE_BUGS("Cave bugs", ItemID.SWAMP_CAVE_BUG), CAVE_CRAWLERS("Cave crawlers", ItemID.CAVE_CRAWLER, - asList("Chasm crawler"), Collections.emptyList()), + Collections.singletonList("Chasm crawler"), Collections.emptyList()), CAVE_HORRORS("Cave horrors", ItemID.CAVE_HORROR, - asList("Cave abomination"), Collections.emptyList()), + Collections.singletonList("Cave abomination"), Collections.emptyList()), CAVE_KRAKEN("Cave kraken", ItemID.CAVE_KRAKEN, - asList("Kraken"), Collections.emptyList()), + Collections.singletonList("Kraken"), Collections.emptyList()), CAVE_SLIMES("Cave slimes", ItemID.SWAMP_CAVE_SLIME), CERBERUS("Cerberus", ItemID.HELLPUPPY), CHAOS_DRUIDS("Chaos druids", ItemID.ELDER_CHAOS_HOOD), CHAOS_ELEMENTAL("Chaos Elemental", ItemID.PET_CHAOS_ELEMENTAL), CHAOS_FANATIC("Chaos Fanatic", ItemID.ANCIENT_STAFF), COCKATRICE("Cockatrice", ItemID.COCKATRICE, - asList("Cockathrice"), Collections.emptyList()), + Collections.singletonList("Cockathrice"), Collections.emptyList()), COWS("Cows", ItemID.COW_MASK), CRAWLING_HANDS("Crawling hands", ItemID.CRAWLING_HAND, - asList("Crushing hand"), Collections.emptyList()), + Collections.singletonList("Crushing hand"), Collections.emptyList()), CRAZY_ARCHAEOLOGIST("Crazy Archaeologist", ItemID.FEDORA), CROCODILES("Crocodiles", ItemID.SWAMP_LIZARD), DAGANNOTH("Dagannoth", ItemID.DAGANNOTH, @@ -109,18 +109,18 @@ enum Task DAGANNOTH_KINGS("Dagannoth Kings", ItemID.PET_DAGANNOTH_PRIME, asList("Dagannoth Rex", "Dagannoth Prime", "Dagannoth Supreme"), Collections.emptyList()), DARK_BEASTS("Dark beasts", ItemID.DARK_BEAST, - asList("Night beast"), Collections.emptyList()), + Collections.singletonList("Night beast"), Collections.emptyList()), DARK_WARRIORS("Dark warriors", ItemID.BLACK_MED_HELM), DERANGED_ARCHAEOLOGIST("Deranged Archaeologist", ItemID.ARCHAEOLOGISTS_DIARY), - DOGS("Dogs", ItemID.GUARD_DOG, asList("Jackal"), Collections.emptyList()), + DOGS("Dogs", ItemID.GUARD_DOG, Collections.singletonList("Jackal"), Collections.emptyList()), DRAKES("Drakes", ItemID.DRAKE), DUST_DEVILS("Dust devils", ItemID.DUST_DEVIL, - asList("Choke devil"), Collections.emptyList()), + Collections.singletonList("Choke devil"), Collections.emptyList()), DWARVES("Dwarves", ItemID.DWARVEN_HELMET, asList("Dwarf", "Black guard"), Collections.emptyList()), EARTH_WARRIORS("Earth warriors", ItemID.BRONZE_FULL_HELM_T), ELVES("Elves", ItemID.ELF, - asList("Elf"), Collections.emptyList()), + Collections.singletonList("Elf"), Collections.emptyList()), FEVER_SPIDERS("Fever spiders", ItemID.FEVER_SPIDER), FIRE_GIANTS("Fire giants", ItemID.FIRE_BATTLESTAFF), REVENANTS("Revenants", ItemID.REVENANT_ETHER, @@ -132,7 +132,7 @@ enum Task asList("Dusk", "Dawn"), Collections.emptyList(), 9, ItemID.ROCK_HAMMER), GENERAL_GRAARDOR("General Graardor", ItemID.PET_GENERAL_GRAARDOR), GHOSTS("Ghosts", ItemID.GHOSTSPEAK_AMULET, - asList("Tortured soul"), Collections.emptyList()), + Collections.singletonList("Tortured soul"), Collections.emptyList()), GIANT_MOLE("Giant Mole", ItemID.BABY_MOLE), GHOULS("Ghouls", ItemID.ZOMBIE_HEAD), GOBLINS("Goblins", ItemID.ENSOULED_GOBLIN_HEAD), @@ -144,39 +144,39 @@ enum Task asList("Dusk", "Dawn"), Collections.emptyList(), 0, ItemID.ROCK_HAMMER), HARPIE_BUG_SWARMS("Harpie bug swarms", ItemID.SWARM), HELLHOUNDS("Hellhounds", ItemID.HELLHOUND, - asList("Cerberus"), Collections.emptyList()), + Collections.singletonList("Cerberus"), Collections.emptyList()), HILL_GIANTS("Hill giants", ItemID.ENSOULED_GIANT_HEAD, - asList("Cyclops"), Collections.emptyList()), + Collections.singletonList("Cyclops"), Collections.emptyList()), HOBGOBLINS("Hobgoblins", ItemID.HOBGOBLIN_GUARD), HYDRAS("Hydras", ItemID.HYDRA), ICEFIENDS("Icefiends", ItemID.ICE_DIAMOND), ICE_GIANTS("Ice giants", ItemID.ICE_DIAMOND), ICE_WARRIORS("Ice warriors", ItemID.MITHRIL_FULL_HELM_T), INFERNAL_MAGES("Infernal mages", ItemID.INFERNAL_MAGE, - asList("Malevolent mage"), Collections.emptyList()), + Collections.singletonList("Malevolent mage"), Collections.emptyList()), IRON_DRAGONS("Iron dragons", ItemID.IRON_DRAGON_MASK), JAD("TzTok-Jad", ItemID.TZREKJAD, 25250), JELLIES("Jellies", ItemID.JELLY, - asList("Jelly"), Collections.emptyList()), + Collections.singletonList("Jelly"), Collections.emptyList()), JUNGLE_HORROR("Jungle horrors", ItemID.ENSOULED_HORROR_HEAD), KALPHITE("Kalphite", ItemID.KALPHITE_SOLDIER), KALPHITE_QUEEN("Kalphite Queen", ItemID.KALPHITE_PRINCESS), KILLERWATTS("Killerwatts", ItemID.KILLERWATT), KING_BLACK_DRAGON("King Black Dragon", ItemID.PRINCE_BLACK_DRAGON), KRAKEN("Cave Kraken Boss", ItemID.PET_KRAKEN, - asList("Kraken"), Collections.emptyList()), + Collections.singletonList("Kraken"), Collections.emptyList()), KREEARRA("Kree'arra", ItemID.PET_KREEARRA), KRIL_TSUTSAROTH("K'ril Tsutsaroth", ItemID.PET_KRIL_TSUTSAROTH), KURASK("Kurask", ItemID.KURASK), - ROGUES("Rogues", ItemID.ROGUE_MASK, asList("Rogue"), Collections.emptyList()), + ROGUES("Rogues", ItemID.ROGUE_MASK, Collections.singletonList("Rogue"), Collections.emptyList()), LESSER_DEMONS("Lesser demons", ItemID.LESSER_DEMON_MASK), LIZARDMEN("Lizardmen", ItemID.LIZARDMAN_FANG, - asList("Lizardman"), Collections.emptyList()), + Collections.singletonList("Lizardman"), Collections.emptyList()), LIZARDS("Lizards", ItemID.DESERT_LIZARD, asList("Desert lizard", "Sulphur lizard", "Small lizard", "Lizard"), Collections.emptyList(), 4, ItemID.ICE_COOLER), MAGIC_AXES("Magic axes", ItemID.IRON_BATTLEAXE), MAMMOTHS("Mammoths", ItemID.ATTACKER_HORN, - asList("Mammoth"), Collections.emptyList()), + Collections.singletonList("Mammoth"), Collections.emptyList()), MINIONS_OF_SCABARAS("Minions of scabaras", ItemID.GOLDEN_SCARAB, asList("Scarab swarm", "Locust rider", "Scarab mage"), Collections.emptyList()), MINOTAURS("Minotaurs", ItemID.ENSOULED_MINOTAUR_HEAD), @@ -185,16 +185,16 @@ enum Task MOLANISKS("Molanisks", ItemID.MOLANISK), MONKEYS("Monkeys", ItemID.ENSOULED_MONKEY_HEAD), MOSS_GIANTS("Moss giants", ItemID.HILL_GIANT_CLUB, - asList("Bryophyta"), Collections.emptyList()), + Collections.singletonList("Bryophyta"), Collections.emptyList()), MUTATED_ZYGOMITES("Mutated zygomites", ItemID.MUTATED_ZYGOMITE, - asList("Zygomite"), Collections.emptyList(), 7, ItemID.FUNGICIDE_SPRAY_0), + Collections.singletonList("Zygomite"), Collections.emptyList(), 7, ItemID.FUNGICIDE_SPRAY_0), NECHRYAEL("Nechryael", ItemID.NECHRYAEL, - asList("Nechryarch"), Collections.emptyList()), + Collections.singletonList("Nechryarch"), Collections.emptyList()), OGRES("Ogres", ItemID.ENSOULED_OGRE_HEAD, - asList("Enclave guard"), Collections.emptyList()), + Collections.singletonList("Enclave guard"), Collections.emptyList()), OTHERWORLDLY_BEING("Otherworldly beings", ItemID.GHOSTLY_HOOD), PYREFIENDS("Pyrefiends", ItemID.PYREFIEND, - asList("Flaming pyrelord"), Collections.emptyList()), + Collections.singletonList("Flaming pyrelord"), Collections.emptyList()), RATS("Rats", ItemID.RATS_TAIL), RED_DRAGONS("Red dragons", ItemID.BABY_RED_DRAGON, Collections.emptyList(), asList(NpcID.BABY_DRAGON_244, NpcID.BABY_DRAGON_245, NpcID.BABY_DRAGON_246)), @@ -202,7 +202,7 @@ enum Task RUNE_DRAGONS("Rune dragons", ItemID.RUNE_DRAGON_MASK), SCORPIA("Scorpia", ItemID.SCORPIAS_OFFSPRING), SCORPIONS("Scorpions", ItemID.ENSOULED_SCORPION_HEAD, - asList("Scorpia"), Collections.emptyList()), + Collections.singletonList("Scorpia"), Collections.emptyList()), SARACHNIS("Sarachnis", ItemID.SRARACHA), SEA_SNAKES("Sea snakes", ItemID.SNAKE_CORPSE), SHADES("Shades", ItemID.SHADE_ROBE_TOP, @@ -212,7 +212,7 @@ enum Task SKELETONS("Skeletons", ItemID.SKELETON_GUARD), SMOKE_DEVILS("Smoke devils", ItemID.SMOKE_DEVIL), SPIDERS("Spiders", ItemID.HUGE_SPIDER, - asList("Venenatis"), Collections.emptyList()), + Collections.singletonList("Venenatis"), Collections.emptyList()), SPIRITUAL_CREATURES("Spiritual creatures", ItemID.DRAGON_BOOTS, asList("Spiritual ranger", "Spiritual mage", "Spiritual warrior"), Collections.emptyList()), STEEL_DRAGONS("Steel dragons", ItemID.STEEL_DRAGON), @@ -223,7 +223,7 @@ enum Task TROLLS("Trolls", ItemID.TROLL_GUARD), TUROTH("Turoth", ItemID.TUROTH), TZHAAR("Tzhaar", ItemID.ENSOULED_TZHAAR_HEAD, - asList("Tz-"), Collections.emptyList(), false), + Collections.singletonList("Tz-"), Collections.emptyList(), false), VAMPIRES("Vampires", ItemID.STAKE, asList("Vampyre", "Vyrewatch", "Vampire"), Collections.emptyList()), VENENATIS("Venenatis", ItemID.VENENATIS_SPIDERLING), @@ -232,13 +232,13 @@ enum Task WALL_BEASTS("Wall beasts", ItemID.SWAMP_WALLBEAST), WATERFIENDS("Waterfiends", ItemID.WATER_ORB), WEREWOLVES("Werewolves", ItemID.WOLFBANE, - asList("Werewolf"), Collections.emptyList()), + Collections.singletonList("Werewolf"), Collections.emptyList()), WOLVES("Wolves", ItemID.GREY_WOLF_FUR, - asList("Wolf"), Collections.emptyList()), + Collections.singletonList("Wolf"), Collections.emptyList()), WYRMS("Wyrms", ItemID.WYRM), ZILYANA("Zilyana", ItemID.PET_ZILYANA), ZOMBIES("Zombies", ItemID.ZOMBIE_HEAD, - asList("Undead"), Collections.emptyList()), + Collections.singletonList("Undead"), Collections.emptyList()), ZULRAH("Zulrah", ItemID.PET_SNAKELING), ZUK("TzKal-Zuk", ItemID.TZREKZUK, 101890); // diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/slayermusiq/SlayermusiqPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/slayermusiq/SlayermusiqPlugin.java index 68b82d00e5..038812ab06 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/slayermusiq/SlayermusiqPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/slayermusiq/SlayermusiqPlugin.java @@ -64,7 +64,7 @@ import net.runelite.api.events.MenuOptionClicked; import net.runelite.api.util.Text; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.chat.ChatMessageManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.PluginType; @@ -96,22 +96,7 @@ public class SlayermusiqPlugin extends Plugin @Inject private ChatMessageManager chatMessageManager; - @Inject - private EventBus eventBus; - - @Override - protected void startUp() throws Exception - { - eventBus.subscribe(MenuEntryAdded.class, this, this::onMenuEntryAdded); - eventBus.subscribe(MenuOptionClicked.class, this, this::onMenuOptionClicked); - } - - @Override - protected void shutDown() throws Exception - { - eventBus.unregister(this); - } - + @Subscribe private void onMenuEntryAdded(MenuEntryAdded event) { int widgetID = event.getParam1(); @@ -127,6 +112,7 @@ public class SlayermusiqPlugin extends Plugin } } + @Subscribe private void onMenuOptionClicked(MenuOptionClicked ev) { if (ev.getMenuOpcode() == MenuOpcode.RUNELITE && ev.getOption().equals(MENUOP_SLAYERMUSIQ)) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/smelting/SmeltingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/smelting/SmeltingPlugin.java index 5638a4ec2d..3513345728 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/smelting/SmeltingPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/smelting/SmeltingPlugin.java @@ -36,7 +36,7 @@ import net.runelite.api.MenuOpcode; import net.runelite.api.events.ChatMessage; import net.runelite.api.events.GameTick; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.events.OverlayMenuClicked; import net.runelite.client.plugins.Plugin; @@ -64,9 +64,6 @@ public class SmeltingPlugin extends Plugin @Inject private OverlayManager overlayManager; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) private SmeltingSession session; @@ -81,7 +78,6 @@ public class SmeltingPlugin extends Plugin @Override protected void startUp() { - addSubscriptions(); this.statTimeout = config.statTimeout(); session = null; @@ -91,20 +87,11 @@ public class SmeltingPlugin extends Plugin @Override protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(overlay); session = null; } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(OverlayMenuClicked.class, this, this::onOverlayMenuClicked); - } - + @Subscribe public void onOverlayMenuClicked(OverlayMenuClicked overlayMenuClicked) { OverlayMenuEntry overlayMenuEntry = overlayMenuClicked.getEntry(); @@ -116,6 +103,7 @@ public class SmeltingPlugin extends Plugin } } + @Subscribe void onChatMessage(ChatMessage event) { if (event.getType() != ChatMessageType.SPAM) @@ -141,6 +129,7 @@ public class SmeltingPlugin extends Plugin } } + @Subscribe private void onGameTick(GameTick event) { if (session != null) @@ -155,6 +144,7 @@ public class SmeltingPlugin extends Plugin } } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("smelting")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/spawntimer/SpawnTimerConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/spawntimer/SpawnTimerConfig.java index 9b14734ebd..52f8330b8c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/spawntimer/SpawnTimerConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/spawntimer/SpawnTimerConfig.java @@ -6,7 +6,7 @@ import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; @ConfigGroup("spawntimer") -public interface SpawnTimerConfig extends Config +public interface SpawnTimerConfig extends Config { @ConfigItem( position = 1, diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/spawntimer/SpawnTimerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/spawntimer/SpawnTimerPlugin.java index 7062b2038d..6f76c0cef9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/spawntimer/SpawnTimerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/spawntimer/SpawnTimerPlugin.java @@ -19,7 +19,7 @@ import net.runelite.api.events.NpcDespawned; import net.runelite.api.events.NpcSpawned; import net.runelite.api.util.Text; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -39,9 +39,6 @@ public class SpawnTimerPlugin extends Plugin @Inject private OverlayManager overlayManager; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) private final Set highlightedNpcs = new HashSet<>(); @@ -68,9 +65,8 @@ public class SpawnTimerPlugin extends Plugin private Color getHighlightColor; @Override - protected void startUp() throws Exception + protected void startUp() { - addSubscriptions(); this.getNpcToHighlight = config.getNpcToHighlight(); this.getHighlightColor = config.getHighlightColor(); @@ -81,29 +77,20 @@ public class SpawnTimerPlugin extends Plugin @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - ticks.clear(); highlightedNpcs.clear(); overlayManager.remove(SpawnTimerOverlay); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(NpcSpawned.class, this, this::onNpcSpawned); - eventBus.subscribe(NpcDespawned.class, this, this::onNpcDespawned); - } - + @Subscribe private void onGameTick(GameTick g) { currentTick++; } + @Subscribe private void onGameStateChanged(GameStateChanged event) { if (event.getGameState() == GameState.LOGIN_SCREEN || @@ -114,6 +101,7 @@ public class SpawnTimerPlugin extends Plugin } } + @Subscribe private void onNpcSpawned(NpcSpawned n) { if (n.getNpc() != null) @@ -127,6 +115,7 @@ public class SpawnTimerPlugin extends Plugin } } + @Subscribe private void onNpcDespawned(NpcDespawned n) { final NPC npc = n.getNpc(); @@ -151,6 +140,7 @@ public class SpawnTimerPlugin extends Plugin return Text.fromCSV(configNpcs); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("spawntimer")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/spawntimer/thing.java b/runelite-client/src/main/java/net/runelite/client/plugins/spawntimer/thing.java index f90e7b271e..ba549b479c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/spawntimer/thing.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/spawntimer/thing.java @@ -6,18 +6,22 @@ class thing { private NPC npc; private int tick; + public void setNpc(NPC n) { npc = n; } + NPC getNpc() { return npc; } + public void setTick(int n) { tick = n; } + int getTick() { return tick; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/specbar/SpecBarPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/specbar/SpecBarPlugin.java index ecb7d2832d..2e4009407e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/specbar/SpecBarPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/specbar/SpecBarPlugin.java @@ -28,7 +28,7 @@ import javax.inject.Inject; import javax.inject.Singleton; import net.runelite.api.Client; import net.runelite.api.events.ScriptCallbackEvent; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.PluginType; @@ -47,21 +47,7 @@ public class SpecBarPlugin extends Plugin @Inject private Client client; - @Inject - private EventBus eventBus; - - @Override - protected void startUp() throws Exception - { - eventBus.subscribe(ScriptCallbackEvent.class, this, this::onScriptCallbackEvent); - } - - @Override - protected void shutDown() throws Exception - { - eventBus.unregister(this); - } - + @Subscribe private void onScriptCallbackEvent(ScriptCallbackEvent event) { if (!"drawSpecbarAnyway".equals(event.getEventName())) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/specialcounter/SpecialCounter.java b/runelite-client/src/main/java/net/runelite/client/plugins/specialcounter/SpecialCounter.java index b752cea058..03e2b9329a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/specialcounter/SpecialCounter.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/specialcounter/SpecialCounter.java @@ -33,7 +33,7 @@ import net.runelite.client.ui.overlay.infobox.Counter; class SpecialCounter extends Counter { - private SpecialWeapon weapon; + private final SpecialWeapon weapon; @Getter(AccessLevel.PACKAGE) private final Map partySpecs = new HashMap<>(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/specialcounter/SpecialCounterPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/specialcounter/SpecialCounterPlugin.java index f3f3070f82..747e991b5e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/specialcounter/SpecialCounterPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/specialcounter/SpecialCounterPlugin.java @@ -42,14 +42,16 @@ import net.runelite.api.NPCDefinition; import net.runelite.api.Player; import net.runelite.api.Skill; import net.runelite.api.VarPlayer; +import net.runelite.api.events.FakeXpDrop; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.NpcDespawned; +import net.runelite.api.events.StatChanged; import net.runelite.api.events.VarbitChanged; import net.runelite.api.widgets.WidgetInfo; import net.runelite.api.widgets.Widget; import net.runelite.client.callback.ClientThread; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -72,6 +74,7 @@ public class SpecialCounterPlugin extends Plugin private int currentWorld = -1; private int specialPercentage = -1; private int specialHitpointsExperience = -1; + private int specialHitpointsGained = -1; private boolean specialUsed; private double modifier = 1d; @@ -97,13 +100,9 @@ public class SpecialCounterPlugin extends Plugin @Inject private ItemManager itemManager; - @Inject - private EventBus eventBus; - @Override protected void startUp() { - addSubscriptions(); wsClient.registerMessage(SpecialCounterUpdate.class); } @@ -111,21 +110,11 @@ public class SpecialCounterPlugin extends Plugin @Override protected void shutDown() { - eventBus.unregister(this); - removeCounters(); wsClient.unregisterMessage(SpecialCounterUpdate.class); } - private void addSubscriptions() - { - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(VarbitChanged.class, this, this::onVarbitChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(NpcDespawned.class, this, this::onNpcDespawned); - eventBus.subscribe(SpecialCounterUpdate.class, this, this::onSpecialCounterUpdate); - } - + @Subscribe private void onGameStateChanged(GameStateChanged event) { if (event.getGameState() == GameState.LOGGED_IN) @@ -142,6 +131,7 @@ public class SpecialCounterPlugin extends Plugin } } + @Subscribe private void onVarbitChanged(VarbitChanged event) { int specialPercentage = client.getVar(VarPlayer.SPECIAL_ATTACK_PERCENT); @@ -159,8 +149,28 @@ public class SpecialCounterPlugin extends Plugin specialUsed = true; specialHitpointsExperience = client.getSkillExperience(Skill.HITPOINTS); + specialHitpointsGained = -1; } + @Subscribe + private void onStatChanged(StatChanged statChanged) + { + if (specialUsed && statChanged.getSkill() == Skill.HITPOINTS) + { + specialHitpointsGained = statChanged.getXp() - specialHitpointsExperience; + } + } + + @Subscribe + private void onFakeXpDrop(FakeXpDrop fakeXpDrop) + { + if (specialUsed && fakeXpDrop.getSkill() == Skill.HITPOINTS) + { + specialHitpointsGained = fakeXpDrop.getXp(); + } + } + + @Subscribe private void onGameTick(GameTick tick) { if (client.getGameState() != GameState.LOGGED_IN) @@ -169,13 +179,11 @@ public class SpecialCounterPlugin extends Plugin } int interactingId = checkInteracting(); - - if (interactingId > -1 && specialHitpointsExperience != -1 && specialUsed) + if (interactingId > -1 && specialUsed) { + int deltaExperience = specialHitpointsGained; + specialUsed = false; - int hpXp = client.getSkillExperience(Skill.HITPOINTS); - int deltaExperience = hpXp - specialHitpointsExperience; - specialHitpointsExperience = -1; if (deltaExperience > 0 && specialWeapon != null) { @@ -292,6 +300,7 @@ public class SpecialCounterPlugin extends Plugin } } + @Subscribe private void onNpcDespawned(NpcDespawned npcDespawned) { NPC actor = npcDespawned.getNpc(); @@ -302,6 +311,7 @@ public class SpecialCounterPlugin extends Plugin } } + @Subscribe private void onSpecialCounterUpdate(SpecialCounterUpdate event) { if (party.getLocalMember().getMemberId().equals(event.getMemberId())) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/spellbook/SpellbookPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/spellbook/SpellbookPlugin.java index 96b4bec1aa..1efefeeffe 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/spellbook/SpellbookPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/spellbook/SpellbookPlugin.java @@ -36,12 +36,12 @@ import java.util.Map; import java.util.Set; import javax.inject.Inject; import javax.inject.Singleton; +import lombok.AccessLevel; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; import net.runelite.api.GameState; import net.runelite.api.Point; -import static net.runelite.api.ScriptID.MAGIC_SPELLBOOK_REDRAW; import net.runelite.api.VarClientInt; import net.runelite.api.Varbits; import net.runelite.api.events.GameStateChanged; @@ -52,16 +52,11 @@ import net.runelite.api.util.Text; import net.runelite.api.vars.InterfaceTab; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; +import static net.runelite.api.widgets.WidgetInfo.SPELLBOOK; import static net.runelite.api.widgets.WidgetInfo.SPELLBOOK_FILTERED_BOUNDS; -import static net.runelite.api.widgets.WidgetInfo.SPELLBOOK_FILTERED_SPELLS_PARENT; -import static net.runelite.api.widgets.WidgetInfo.SPELLBOOK_FILTER_BUTTON; -import static net.runelite.api.widgets.WidgetInfo.SPELLBOOK_FILTER_BUTTONS_PARENT; -import static net.runelite.api.widgets.WidgetInfo.SPELLBOOK_FILTER_BUTTON_PARENT; -import static net.runelite.api.widgets.WidgetInfo.SPELLBOOK_FILTER_SECTION_PARENT; -import static net.runelite.api.widgets.WidgetInfo.SPELL_TOOLTIP; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.input.MouseManager; import net.runelite.client.menus.MenuManager; @@ -123,16 +118,13 @@ public class SpellbookPlugin extends Plugin @Inject private SpellbookDragOverlay overlay; - @Inject - private EventBus eventBus; - - @Getter + @Getter(AccessLevel.PACKAGE) private boolean dragging; - @Getter + @Getter(AccessLevel.PACKAGE) private Widget draggingWidget; - @Getter + @Getter(AccessLevel.PACKAGE) private Point draggingLocation; private ImmutableSet notFilteredSpells; @@ -152,7 +144,6 @@ public class SpellbookPlugin extends Plugin @Override protected void startUp() { - addSubscriptions(); updateConfig(); refreshMagicTabOption(); } @@ -160,7 +151,6 @@ public class SpellbookPlugin extends Plugin @Override protected void shutDown() { - eventBus.unregister(this); clearMagicTabMenus(); saveSpells(); config.canDrag(false); @@ -168,15 +158,6 @@ public class SpellbookPlugin extends Plugin mouseManager.unregisterMouseWheelListener(mouseListener); } - private void addSubscriptions() - { - eventBus.subscribe(VarClientIntChanged.class, this, this::onVarCIntChanged); - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(WidgetMenuOptionClicked.class, this, this::onWidgetMenuOptionClicked); - eventBus.subscribe(ScriptCallbackEvent.class, this, this::onScriptCallbackEvent); - } - private void updateConfig() { loadFilter(); @@ -186,6 +167,7 @@ public class SpellbookPlugin extends Plugin this.size = config.size(); } + @Subscribe private void onConfigChanged(final ConfigChanged event) { if (!"spellbook".equals(event.getGroup())) @@ -225,6 +207,7 @@ public class SpellbookPlugin extends Plugin loadSpells(); } + @Subscribe private void onGameStateChanged(final GameStateChanged event) { if (event.getGameState() == GameState.LOGGED_IN) @@ -234,6 +217,7 @@ public class SpellbookPlugin extends Plugin } } + @Subscribe private void onVarCIntChanged(final VarClientIntChanged event) { if (event.getIndex() != VarClientInt.INTERFACE_TAB.getIndex()) @@ -264,6 +248,7 @@ public class SpellbookPlugin extends Plugin config.canDrag(false); } + @Subscribe private void onWidgetMenuOptionClicked(final WidgetMenuOptionClicked event) { if (event.getWidget() != WidgetInfo.FIXED_VIEWPORT_MAGIC_TAB @@ -335,6 +320,7 @@ public class SpellbookPlugin extends Plugin } } + @Subscribe private void onScriptCallbackEvent(final ScriptCallbackEvent event) { if (client.getVar(Varbits.FILTER_SPELLBOOK) != 0 @@ -485,12 +471,7 @@ public class SpellbookPlugin extends Plugin return; } - // CHECKSTYLE:OFF - final Collection gson = GSON.fromJson(cfg, new TypeToken>() - { - } - .getType()); - // CHECKSTYLE:ON + final Collection gson = GSON.fromJson(cfg, new TypeToken>() {}.getType()); for (final Spell s : gson) { @@ -519,23 +500,17 @@ public class SpellbookPlugin extends Plugin // The magic numbers probably are mobile specific widgetids // openosrs mobile when? clientThread.invoke(() -> - client.runScript( - MAGIC_SPELLBOOK_REDRAW, - SPELLBOOK_FILTERED_BOUNDS.getId(), - 0x00da00b3, - SPELL_TOOLTIP.getId(), - SPELLBOOK_FILTERED_SPELLS_PARENT.getId(), - SPELLBOOK_FILTER_BUTTON_PARENT.getId(), - 0x00da00ba, - SPELLBOOK_FILTER_BUTTON.getId(), - 0x00da0002, - SPELLBOOK_FILTER_SECTION_PARENT.getId(), - SPELLBOOK_FILTER_BUTTONS_PARENT.getId(), - "Info", - "Filters", - false - ) - ); + { + final Widget spellWidget = client.getWidget(SPELLBOOK); + if (spellWidget != null) + { + final Object[] args = spellWidget.getOnInvTransmit(); + if (args != null) + { + client.runScript(args); + } + } + }); } boolean isNotOnSpellWidget() diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/statusbars/StatusBarsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/statusbars/StatusBarsConfig.java index 9b3ec478df..b458140527 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/statusbars/StatusBarsConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/statusbars/StatusBarsConfig.java @@ -66,10 +66,10 @@ public interface StatusBarsConfig extends Config } @ConfigItem( - position = 4, - keyName = "leftBarMode", - name = "Left Status Bar", - description = "Configures the left status bar" + position = 4, + keyName = "leftBarMode", + name = "Left Status Bar", + description = "Configures the left status bar" ) default BarMode leftBarMode() { @@ -77,10 +77,10 @@ public interface StatusBarsConfig extends Config } @ConfigItem( - position = 5, - keyName = "rightBarMode", - name = "Right Status Bar", - description = "Configures the right status bar" + position = 5, + keyName = "rightBarMode", + name = "Right Status Bar", + description = "Configures the right status bar" ) default BarMode rightBarMode() { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/statusbars/StatusBarsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/statusbars/StatusBarsPlugin.java index 14df6900df..af35083571 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/statusbars/StatusBarsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/statusbars/StatusBarsPlugin.java @@ -41,7 +41,7 @@ import net.runelite.api.NPC; import net.runelite.api.NPCDefinition; import net.runelite.api.events.GameTick; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDependency; @@ -82,7 +82,7 @@ public class StatusBarsPlugin extends Plugin @Inject private SpecialAttackRenderer specialAttackRenderer; - @Getter + @Getter(AccessLevel.PACKAGE) private final Map barRenderers = Maps.newEnumMap(BarMode.class); @Inject @@ -91,9 +91,6 @@ public class StatusBarsPlugin extends Plugin @Inject private StatusBarsConfig config; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) private Instant lastCombatAction; @@ -111,10 +108,9 @@ public class StatusBarsPlugin extends Plugin private int hideStatusBarDelay; @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); overlayManager.add(overlay); barRenderers.put(BarMode.DISABLED, null); @@ -129,6 +125,7 @@ public class StatusBarsPlugin extends Plugin this.lastCombatAction = Instant.now(); } + @Subscribe private void onGameTick(GameTick gameTick) { if (!this.toggleRestorationBars) @@ -165,26 +162,19 @@ public class StatusBarsPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(overlay); barRenderers.clear(); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - } - @Provides StatusBarsConfig provideConfig(ConfigManager configManager) { return configManager.getConfig(StatusBarsConfig.class); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!"statusbars".equals(event.getGroup())) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/statusorbs/StatusOrbsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/statusorbs/StatusOrbsPlugin.java index af4d6617d6..976678f1ff 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/statusorbs/StatusOrbsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/statusorbs/StatusOrbsPlugin.java @@ -51,7 +51,7 @@ import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.Notifier; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -80,6 +80,7 @@ public class StatusOrbsPlugin extends Plugin private static final int SPEC_REGEN_TICKS = 50; private static final int NORMAL_HP_REGEN_TICKS = 100; + private static final int TWISTED_LEAGUE_ENDLESS_ENDURANCE_RELIC = 2; @Inject private Client client; @@ -99,22 +100,19 @@ public class StatusOrbsPlugin extends Plugin @Inject private Notifier notifier; - @Inject - private EventBus eventBus; - - @Getter + @Getter(AccessLevel.PACKAGE) private double hitpointsPercentage; - @Getter + @Getter(AccessLevel.PACKAGE) private double specialPercentage; - @Getter + @Getter(AccessLevel.PACKAGE) private double runPercentage; - @Getter + @Getter(AccessLevel.PACKAGE) private double hpPerMs; - @Getter + @Getter(AccessLevel.PACKAGE) private double specPerMs = (double) 1 / (SPEC_REGEN_TICKS * 600); // RegenMeter @@ -126,7 +124,6 @@ public class StatusOrbsPlugin extends Plugin // Run Energy private int lastEnergy = 0; private boolean localPlayerRunningToDestination; - private WorldPoint currPoint; private WorldPoint prevLocalPlayerLocation; private BufferedImage heart; @@ -150,10 +147,9 @@ public class StatusOrbsPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); overlayManager.add(overlay); if (this.dynamicHpHeart && client.getGameState().equals(GameState.LOGGED_IN)) @@ -163,10 +159,8 @@ public class StatusOrbsPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(overlay); localPlayerRunningToDestination = false; prevLocalPlayerLocation = null; @@ -177,14 +171,7 @@ public class StatusOrbsPlugin extends Plugin } } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(VarbitChanged.class, this, this::onVarbitChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - } - + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("statusorbs")) @@ -212,6 +199,7 @@ public class StatusOrbsPlugin extends Plugin } } + @Subscribe private void onVarbitChanged(VarbitChanged e) { if (this.dynamicHpHeart) @@ -227,6 +215,7 @@ public class StatusOrbsPlugin extends Plugin wasRapidHeal = isRapidHeal; } + @Subscribe private void onGameStateChanged(GameStateChanged ev) { if (ev.getGameState() == GameState.HOPPING || ev.getGameState() == GameState.LOGIN_SCREEN) @@ -237,6 +226,7 @@ public class StatusOrbsPlugin extends Plugin } } + @Subscribe private void onGameTick(GameTick event) { if (client.getVar(VarPlayer.SPECIAL_ATTACK_PERCENT) == 1000) @@ -258,6 +248,12 @@ public class StatusOrbsPlugin extends Plugin hpPerMs *= 2; } + if (client.getVar(Varbits.TWISTED_LEAGUE_RELIC_1) == TWISTED_LEAGUE_ENDLESS_ENDURANCE_RELIC) + { + ticksPerHPRegen /= 4; + hpPerMs *= 4; + } + ticksSinceHPRegen = (ticksSinceHPRegen + 1) % ticksPerHPRegen; hitpointsPercentage = ticksSinceHPRegen / (double) ticksPerHPRegen; @@ -297,7 +293,7 @@ public class StatusOrbsPlugin extends Plugin } int currEnergy = client.getEnergy(); - currPoint = client.getLocalPlayer().getWorldLocation(); + WorldPoint currPoint = client.getLocalPlayer().getWorldLocation(); if (currEnergy == 100 || (prevLocalPlayerLocation != null && currPoint.distanceTo(prevLocalPlayerLocation) > 1) || currEnergy < lastEnergy) { ticksSinceRunRegen = 0; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ItemSortTypes.java b/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ItemSortTypes.java index b9aae24d26..e57b69e66f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ItemSortTypes.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ItemSortTypes.java @@ -1,9 +1,10 @@ package net.runelite.client.plugins.stonedtracker; +import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; -@Getter +@Getter(AccessLevel.PACKAGE) @RequiredArgsConstructor public enum ItemSortTypes { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/StonedTrackerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/StonedTrackerPlugin.java index e32015a690..b5b17b9371 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/StonedTrackerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/StonedTrackerPlugin.java @@ -48,6 +48,7 @@ import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; @@ -123,6 +124,7 @@ public class StonedTrackerPlugin extends Plugin SwingUtilities.invokeLater(() -> panel.showSelectionView()); } + @Subscribe private void onConfigChanged(final ConfigChanged event) { if (event.getGroup().equals("stonedtracker")) @@ -134,7 +136,6 @@ public class StonedTrackerPlugin extends Plugin @Override protected void startUp() { - addSubscriptions(); panel = new LootTrackerPanel(itemManager, this); @@ -172,7 +173,6 @@ public class StonedTrackerPlugin extends Plugin @Override protected void shutDown() { - eventBus.unregister(this); clientToolbar.removeNavigation(navButton); } @@ -180,11 +180,11 @@ public class StonedTrackerPlugin extends Plugin { this.eventBus.subscribe(LTRecordStored.class, this, this::onLTRecordStored); this.eventBus.subscribe(LTNameChange.class, this, this::onLTNameChange); - this.eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); this.eventBus.subscribe(WidgetLoaded.class, this, this::onWidgetLoaded); this.eventBus.subscribe(GameTick.class, this, this::onGameTick); } + @Subscribe private void onWidgetLoaded(WidgetLoaded event) { if (event.getGroupId() != WidgetID.DIALOG_SPRITE_GROUP_ID) @@ -199,6 +199,7 @@ public class StonedTrackerPlugin extends Plugin } } + @Subscribe private void onGameTick(GameTick t) { if (unsiredReclaiming) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/data/BossTab.java b/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/data/BossTab.java index 12095d028e..5f8313ed16 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/data/BossTab.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/data/BossTab.java @@ -32,11 +32,12 @@ import java.util.Map; import java.util.Set; import java.util.TreeSet; import javax.annotation.Nullable; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; import net.runelite.api.ItemID; -@Getter +@Getter(AccessLevel.PUBLIC) @AllArgsConstructor public enum BossTab { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/data/UniqueItem.java b/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/data/UniqueItem.java index 0cd31a51e4..1857023ed1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/data/UniqueItem.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/data/UniqueItem.java @@ -26,6 +26,7 @@ package net.runelite.client.plugins.stonedtracker.data; import com.google.common.collect.ImmutableMultimap; import java.util.Collection; +import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.Setter; @@ -34,7 +35,7 @@ import net.runelite.api.ItemID; import net.runelite.client.game.ItemManager; @RequiredArgsConstructor -@Getter +@Getter(AccessLevel.PUBLIC) public enum UniqueItem { // "Uniques" which are actually dropped by multiple bosses diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/ItemPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/ItemPanel.java index 4dc15b42bf..11b3d6bb50 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/ItemPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/ItemPanel.java @@ -36,6 +36,7 @@ import javax.swing.JPanel; import javax.swing.SwingUtilities; import javax.swing.border.Border; import javax.swing.border.EmptyBorder; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.loottracker.localstorage.LTItemEntry; @@ -44,7 +45,7 @@ import net.runelite.client.ui.FontManager; import net.runelite.client.ui.components.shadowlabel.JShadowedLabel; import net.runelite.client.util.QuantityFormatter; -@Getter +@Getter(AccessLevel.PACKAGE) class ItemPanel extends JPanel { private static final GridBagLayout LAYOUT = new GridBagLayout(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/LootPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/LootPanel.java index a6adf1b402..9c1677eb97 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/LootPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/LootPanel.java @@ -201,12 +201,12 @@ class LootPanel extends JPanel currentText = "Chests opened:"; loggedText = "Chests logged:"; break; - case "Clue Scroll (Beginner)": - case "Clue Scroll (Easy)": - case "Clue Scroll (Medium)": - case "Clue Scroll (Hard)": - case "Clue Scroll (Elite)": - case "Clue Scroll (Master)": + case "Clue Scroll (Beginner)": + case "Clue Scroll (Easy)": + case "Clue Scroll (Medium)": + case "Clue Scroll (Hard)": + case "Clue Scroll (Elite)": + case "Clue Scroll (Master)": currentText = "Clues completed:"; loggedText = "Clues logged:"; break; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/TextPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/TextPanel.java index 7fff1ca124..4e953e37b0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/TextPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/TextPanel.java @@ -33,11 +33,12 @@ import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingConstants; import javax.swing.border.Border; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.client.ui.ColorScheme; import net.runelite.client.util.QuantityFormatter; -@Getter +@Getter(AccessLevel.PACKAGE) class TextPanel extends JPanel { private static final GridBagLayout LAYOUT = new GridBagLayout(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/UniqueItemPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/UniqueItemPanel.java index d0ddf89a8e..90974de6b8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/UniqueItemPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/stonedtracker/ui/UniqueItemPanel.java @@ -37,6 +37,7 @@ import javax.swing.JPanel; import javax.swing.SwingConstants; import javax.swing.border.Border; import javax.swing.border.EmptyBorder; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.stonedtracker.data.UniqueItem; @@ -45,7 +46,7 @@ import net.runelite.client.util.AsyncBufferedImage; import net.runelite.client.util.ImageUtil; import net.runelite.client.util.QuantityFormatter; -@Getter +@Getter(AccessLevel.PACKAGE) class UniqueItemPanel extends JPanel { private final static float alphaMissing = 0.35f; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/stretchedmode/StretchedModePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/stretchedmode/StretchedModePlugin.java index 29f2fb3f43..f1b9d1fc4f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/stretchedmode/StretchedModePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/stretchedmode/StretchedModePlugin.java @@ -29,10 +29,10 @@ import com.google.inject.Provides; import javax.inject.Inject; import javax.inject.Singleton; import net.runelite.api.Client; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.ResizeableChanged; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.input.MouseManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -61,9 +61,6 @@ public class StretchedModePlugin extends Plugin @Inject private TranslateMouseWheelListener mouseWheelListener; - @Inject - private EventBus eventBus; - @Provides StretchedModeConfig provideConfig(ConfigManager configManager) { @@ -73,8 +70,6 @@ public class StretchedModePlugin extends Plugin @Override protected void startUp() { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(ResizeableChanged.class, this, this::onResizeableChanged); mouseManager.registerMouseListener(0, mouseListener); mouseManager.registerMouseWheelListener(0, mouseWheelListener); @@ -84,10 +79,8 @@ public class StretchedModePlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - client.setStretchedEnabled(false); client.invalidateStretching(true); @@ -95,11 +88,13 @@ public class StretchedModePlugin extends Plugin mouseManager.unregisterMouseWheelListener(mouseWheelListener); } + @Subscribe private void onResizeableChanged(ResizeableChanged event) { client.invalidateStretching(true); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("stretchedmode")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/suppliestracker/SuppliesTrackerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/suppliestracker/SuppliesTrackerPlugin.java index 7cd9e33565..69768a681b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/suppliestracker/SuppliesTrackerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/suppliestracker/SuppliesTrackerPlugin.java @@ -28,7 +28,6 @@ */ package net.runelite.client.plugins.suppliestracker; - import com.google.inject.Provides; import java.awt.image.BufferedImage; import java.util.ArrayDeque; @@ -62,7 +61,7 @@ import net.runelite.api.events.ItemContainerChanged; import net.runelite.api.events.MenuOptionClicked; import net.runelite.api.events.VarbitChanged; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -150,13 +149,9 @@ public class SuppliesTrackerPlugin extends Plugin @Inject private Client client; - @Inject - private EventBus eventBus; - @Override - protected void startUp() throws Exception + protected void startUp() { - addSubscriptions(); panel = new SuppliesTrackerPanel(itemManager, this); final BufferedImage header = ImageUtil.getResourceStreamFromClass(getClass(), "panel_icon.png"); @@ -176,26 +171,16 @@ public class SuppliesTrackerPlugin extends Plugin @Override protected void shutDown() { - eventBus.unregister(this); clientToolbar.removeNavigation(navButton); } - private void addSubscriptions() - { - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(VarbitChanged.class, this, this::onVarbitChanged); - eventBus.subscribe(CannonballFired.class, this, this::onCannonballFired); - eventBus.subscribe(AnimationChanged.class, this, this::onAnimationChanged); - eventBus.subscribe(ItemContainerChanged.class, this, this::onItemContainerChanged); - eventBus.subscribe(MenuOptionClicked.class, this, this::onMenuOptionClicked); - } - @Provides SuppliesTrackerConfig provideConfig(ConfigManager configManager) { return configManager.getConfig(SuppliesTrackerConfig.class); } + @Subscribe private void onGameTick(GameTick tick) { Player player = client.getLocalPlayer(); @@ -253,6 +238,7 @@ public class SuppliesTrackerPlugin extends Plugin return percent; } + @Subscribe private void onVarbitChanged(VarbitChanged event) { if (attackStyleVarbit == -1 || attackStyleVarbit != client.getVar(VarPlayer.ATTACK_STYLE)) @@ -303,6 +289,7 @@ public class SuppliesTrackerPlugin extends Plugin if (oldItem.getId() == runeId) { isRune = true; + break; } } if (isRune && (newItem.getId() != oldItem.getId() || newItem.getQuantity() != oldItem.getQuantity())) @@ -327,11 +314,13 @@ public class SuppliesTrackerPlugin extends Plugin } } + @Subscribe private void onCannonballFired(CannonballFired cannonballFired) { buildEntries(CANNONBALL); } + @Subscribe private void onAnimationChanged(AnimationChanged animationChanged) { if (animationChanged.getActor() == client.getLocalPlayer()) @@ -385,6 +374,7 @@ public class SuppliesTrackerPlugin extends Plugin } } + @Subscribe private void onItemContainerChanged(ItemContainerChanged itemContainerChanged) { ItemContainer itemContainer = itemContainerChanged.getItemContainer(); @@ -515,6 +505,7 @@ public class SuppliesTrackerPlugin extends Plugin } } + @Subscribe private void onMenuOptionClicked(final MenuOptionClicked event) { // Fix for house pool diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/tarnslair/Obstacles.java b/runelite-client/src/main/java/net/runelite/client/plugins/tarnslair/Obstacles.java index 5ba66e2747..79bbec3122 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/tarnslair/Obstacles.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/tarnslair/Obstacles.java @@ -27,93 +27,7 @@ package net.runelite.client.plugins.tarnslair; import com.google.common.collect.Sets; import java.util.Set; import static net.runelite.api.NullObjectID.NULL_20575; -import static net.runelite.api.ObjectID.FLOOR_20583; -import static net.runelite.api.ObjectID.FLOOR_20584; -import static net.runelite.api.ObjectID.FLOOR_20628; -import static net.runelite.api.ObjectID.FLOOR_20634; -import static net.runelite.api.ObjectID.FLOOR_20636; -import static net.runelite.api.ObjectID.HANGING_LOG_20571; -import static net.runelite.api.ObjectID.HANGING_LOG_20572; -import static net.runelite.api.ObjectID.HANGING_LOG_20573; -import static net.runelite.api.ObjectID.HANGING_LOG_20574; -import static net.runelite.api.ObjectID.PASSAGEWAY_15770; -import static net.runelite.api.ObjectID.PASSAGEWAY_15771; -import static net.runelite.api.ObjectID.PASSAGEWAY_15772; -import static net.runelite.api.ObjectID.PASSAGEWAY_15773; -import static net.runelite.api.ObjectID.PASSAGEWAY_15774; -import static net.runelite.api.ObjectID.PASSAGEWAY_16129; -import static net.runelite.api.ObjectID.PASSAGEWAY_16130; -import static net.runelite.api.ObjectID.PASSAGEWAY_16131; -import static net.runelite.api.ObjectID.PASSAGEWAY_16132; -import static net.runelite.api.ObjectID.PASSAGEWAY_16133; -import static net.runelite.api.ObjectID.PASSAGEWAY_16134; -import static net.runelite.api.ObjectID.PASSAGEWAY_18307; -import static net.runelite.api.ObjectID.PASSAGEWAY_18308; -import static net.runelite.api.ObjectID.PASSAGEWAY_18309; -import static net.runelite.api.ObjectID.PASSAGEWAY_18310; -import static net.runelite.api.ObjectID.PASSAGEWAY_18311; -import static net.runelite.api.ObjectID.PASSAGEWAY_20488; -import static net.runelite.api.ObjectID.PASSAGEWAY_20489; -import static net.runelite.api.ObjectID.PASSAGEWAY_20490; -import static net.runelite.api.ObjectID.PASSAGEWAY_20491; -import static net.runelite.api.ObjectID.PASSAGEWAY_20492; -import static net.runelite.api.ObjectID.PASSAGEWAY_20493; -import static net.runelite.api.ObjectID.PASSAGEWAY_20495; -import static net.runelite.api.ObjectID.PASSAGEWAY_20497; -import static net.runelite.api.ObjectID.PASSAGEWAY_20498; -import static net.runelite.api.ObjectID.PASSAGEWAY_20499; -import static net.runelite.api.ObjectID.PASSAGEWAY_20500; -import static net.runelite.api.ObjectID.PASSAGEWAY_20501; -import static net.runelite.api.ObjectID.PASSAGEWAY_20502; -import static net.runelite.api.ObjectID.PASSAGEWAY_20503; -import static net.runelite.api.ObjectID.PASSAGEWAY_20504; -import static net.runelite.api.ObjectID.PASSAGEWAY_20505; -import static net.runelite.api.ObjectID.PASSAGEWAY_20506; -import static net.runelite.api.ObjectID.PASSAGEWAY_20507; -import static net.runelite.api.ObjectID.PASSAGEWAY_20509; -import static net.runelite.api.ObjectID.PASSAGEWAY_20510; -import static net.runelite.api.ObjectID.PASSAGEWAY_20511; -import static net.runelite.api.ObjectID.PASSAGEWAY_20512; -import static net.runelite.api.ObjectID.PASSAGEWAY_20513; -import static net.runelite.api.ObjectID.PASSAGEWAY_20514; -import static net.runelite.api.ObjectID.PASSAGEWAY_20515; -import static net.runelite.api.ObjectID.PASSAGEWAY_20516; -import static net.runelite.api.ObjectID.PASSAGEWAY_20517; -import static net.runelite.api.ObjectID.PASSAGEWAY_20518; -import static net.runelite.api.ObjectID.PASSAGEWAY_20519; -import static net.runelite.api.ObjectID.PASSAGEWAY_20520; -import static net.runelite.api.ObjectID.PASSAGEWAY_20521; -import static net.runelite.api.ObjectID.PASSAGEWAY_20522; -import static net.runelite.api.ObjectID.PASSAGEWAY_20523; -import static net.runelite.api.ObjectID.PASSAGEWAY_20524; -import static net.runelite.api.ObjectID.PASSAGEWAY_20525; -import static net.runelite.api.ObjectID.PASSAGEWAY_20526; -import static net.runelite.api.ObjectID.PASSAGEWAY_20527; -import static net.runelite.api.ObjectID.PASSAGEWAY_20528; -import static net.runelite.api.ObjectID.PASSAGEWAY_20529; -import static net.runelite.api.ObjectID.PASSAGEWAY_20530; -import static net.runelite.api.ObjectID.PASSAGEWAY_20531; -import static net.runelite.api.ObjectID.PASSAGEWAY_20532; -import static net.runelite.api.ObjectID.PASSAGEWAY_20533; -import static net.runelite.api.ObjectID.PASSAGEWAY_20534; -import static net.runelite.api.ObjectID.PASSAGEWAY_20535; -import static net.runelite.api.ObjectID.PASSAGEWAY_20536; -import static net.runelite.api.ObjectID.PASSAGEWAY_20537; -import static net.runelite.api.ObjectID.PASSAGEWAY_20538; -import static net.runelite.api.ObjectID.PASSAGEWAY_20539; -import static net.runelite.api.ObjectID.STAIRS_17098; -import static net.runelite.api.ObjectID.STAIRS_17099; -import static net.runelite.api.ObjectID.STAIRS_18973; -import static net.runelite.api.ObjectID.STAIRS_18974; -import static net.runelite.api.ObjectID.WALL_20588; -import static net.runelite.api.ObjectID.WALL_20590; -import static net.runelite.api.ObjectID.WALL_20592; -import static net.runelite.api.ObjectID.WALL_20594; -import static net.runelite.api.ObjectID.WALL_20596; -import static net.runelite.api.ObjectID.WALL_20613; -import static net.runelite.api.ObjectID.WALL_20615; -import static net.runelite.api.ObjectID.WALL_20616; -import static net.runelite.api.ObjectID.WALL_20618; +import static net.runelite.api.ObjectID.*; class Obstacles { @@ -129,11 +43,11 @@ class Obstacles PASSAGEWAY_16132, /*Wall staircase*/ PASSAGEWAY_16133, /*Wall staircase*/ PASSAGEWAY_16134, /*Wall staircase*/ - PASSAGEWAY_18307, /*Wall staircase*/ - PASSAGEWAY_18308, /*Wall staircase*/ - PASSAGEWAY_18309, /*Wall staircase*/ - PASSAGEWAY_18310, /*Wall staircase*/ - PASSAGEWAY_18311, /*Wall staircase*/ + PASSAGEWAY_18307, /*Wall staircase*/ + PASSAGEWAY_18308, /*Wall staircase*/ + PASSAGEWAY_18309, /*Wall staircase*/ + PASSAGEWAY_18310, /*Wall staircase*/ + PASSAGEWAY_18311, /*Wall staircase*/ PASSAGEWAY_20488, /*Wall staircase*/ PASSAGEWAY_20489, /*Wall staircase*/ PASSAGEWAY_20490, /*Wall staircase*/ @@ -187,31 +101,31 @@ class Obstacles STAIRS_17098, /*Floor staircase*/ STAIRS_17099, /*Floor staircase*/ STAIRS_18973, /*Floor staircase*/ - STAIRS_18974 /*Floor staircase*/ + STAIRS_18974 /*Floor staircase*/ ); static final Set WALL_TRAP_IDS = Sets.newHashSet( - WALL_20590, /*Wall spikes*/ - WALL_20592, /*Wall spikes*/ - WALL_20594, /*Wall spikes*/ - WALL_20596, /*Wall spikes*/ - WALL_20588, /*Wall spikes*/ - WALL_20613, /*Wall pusher*/ - WALL_20615, /*Wall pusher*/ - WALL_20616, /*Wall pusher*/ - WALL_20618, /*Wall pusher*/ - HANGING_LOG_20571, /*Hanging log*/ - HANGING_LOG_20572, /*Hanging log*/ - HANGING_LOG_20573, /*Hanging log*/ + WALL_20590, /*Wall spikes*/ + WALL_20592, /*Wall spikes*/ + WALL_20594, /*Wall spikes*/ + WALL_20596, /*Wall spikes*/ + WALL_20588, /*Wall spikes*/ + WALL_20613, /*Wall pusher*/ + WALL_20615, /*Wall pusher*/ + WALL_20616, /*Wall pusher*/ + WALL_20618, /*Wall pusher*/ + HANGING_LOG_20571, /*Hanging log*/ + HANGING_LOG_20572, /*Hanging log*/ + HANGING_LOG_20573, /*Hanging log*/ HANGING_LOG_20574 /*Hanging log*/ ); static final Set FLOOR_TRAP_IDS = Sets.newHashSet( - FLOOR_20583, /*Floor spikes*/ - FLOOR_20584, /*Floor spikes*/ - NULL_20575, /*Floor spikes (visible)*/ - FLOOR_20628, /*Trapdoor*/ - FLOOR_20634, /*Floor button*/ - FLOOR_20636 /*Floor button*/ + FLOOR_20583, /*Floor spikes*/ + FLOOR_20584, /*Floor spikes*/ + NULL_20575, /*Floor spikes (visible)*/ + FLOOR_20628, /*Trapdoor*/ + FLOOR_20634, /*Floor button*/ + FLOOR_20636 /*Floor button*/ ); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/tarnslair/TarnsLairPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/tarnslair/TarnsLairPlugin.java index 9bb03bf433..3d083a4855 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/tarnslair/TarnsLairPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/tarnslair/TarnsLairPlugin.java @@ -43,7 +43,7 @@ import net.runelite.api.events.GameTick; import net.runelite.api.events.GroundObjectChanged; import net.runelite.api.events.GroundObjectDespawned; import net.runelite.api.events.GroundObjectSpawned; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.PluginType; @@ -84,20 +84,15 @@ public class TarnsLairPlugin extends Plugin @Inject private TarnsLairOverlay overlay; - @Inject - private EventBus eventBus; - @Override - protected void startUp() throws Exception + protected void startUp() { overlayManager.add(overlay); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(overlay); staircases.clear(); wallTraps.clear(); @@ -105,54 +100,50 @@ public class TarnsLairPlugin extends Plugin inLair = false; } - private void addSubscriptions() - { - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(GameObjectSpawned.class, this, this::onGameObjectSpawned); - eventBus.subscribe(GameObjectChanged.class, this, this::onGameObjectChanged); - eventBus.subscribe(GameObjectDespawned.class, this, this::onGameObjectDespawned); - eventBus.subscribe(GroundObjectSpawned.class, this, this::onGroundObjectSpawned); - eventBus.subscribe(GroundObjectChanged.class, this, this::onGroundObjectChanged); - eventBus.subscribe(GroundObjectDespawned.class, this, this::onGroundObjectDespawned); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - } - + @Subscribe private void onGameTick(GameTick event) { int regionID = client.getLocalPlayer().getWorldLocation().getRegionID(); inLair = (regionID == TARNS_LAIR_NORTH_REGION || regionID == TARNS_LAIR_SOUTH_REGION); } + @Subscribe private void onGameObjectSpawned(GameObjectSpawned event) { onTileObject(event.getTile(), null, event.getGameObject()); } + @Subscribe private void onGameObjectChanged(GameObjectChanged event) { onTileObject(event.getTile(), event.getPrevious(), event.getGameObject()); } + @Subscribe private void onGameObjectDespawned(GameObjectDespawned event) { onTileObject(event.getTile(), event.getGameObject(), null); } + @Subscribe private void onGroundObjectSpawned(GroundObjectSpawned event) { onTileObject(event.getTile(), null, event.getGroundObject()); } + @Subscribe private void onGroundObjectChanged(GroundObjectChanged event) { onTileObject(event.getTile(), event.getPrevious(), event.getGroundObject()); } + @Subscribe private void onGroundObjectDespawned(GroundObjectDespawned event) { onTileObject(event.getTile(), event.getGroundObject(), null); } + @Subscribe private void onGameStateChanged(GameStateChanged event) { if (event.getGameState() == GameState.LOADING) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/teamcapes/TeamCapesPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/teamcapes/TeamCapesPlugin.java index f2a25b57ad..4740a15fea 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/teamcapes/TeamCapesPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/teamcapes/TeamCapesPlugin.java @@ -71,13 +71,13 @@ public class TeamCapesPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { overlayManager.add(overlay); } @Override - protected void shutDown() throws Exception + protected void shutDown() { overlayManager.remove(overlay); teams.clear(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/tearsofguthix/TearsOfGuthixExperienceOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/tearsofguthix/TearsOfGuthixExperienceOverlay.java index 9f5669f4db..36dee60e62 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/tearsofguthix/TearsOfGuthixExperienceOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/tearsofguthix/TearsOfGuthixExperienceOverlay.java @@ -25,15 +25,15 @@ package net.runelite.client.plugins.tearsofguthix; +import java.awt.Dimension; +import java.awt.Graphics2D; +import javax.inject.Inject; import javax.inject.Singleton; import net.runelite.api.Client; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.ui.overlay.components.PanelComponent; -import javax.inject.Inject; -import java.awt.Dimension; -import java.awt.Graphics2D; import net.runelite.client.ui.overlay.components.table.TableAlignment; import net.runelite.client.ui.overlay.components.table.TableComponent; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/tearsofguthix/TearsOfGuthixPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/tearsofguthix/TearsOfGuthixPlugin.java index 881f9a4945..83ed902dec 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/tearsofguthix/TearsOfGuthixPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/tearsofguthix/TearsOfGuthixPlugin.java @@ -39,7 +39,7 @@ import net.runelite.api.Skill; import net.runelite.api.events.DecorativeObjectDespawned; import net.runelite.api.events.DecorativeObjectSpawned; import net.runelite.api.events.GameStateChanged; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.overlay.OverlayManager; @@ -66,9 +66,6 @@ public class TearsOfGuthixPlugin extends Plugin @Inject private TearsOfGuthixExperienceOverlay experienceOverlay; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) private final Map streams = new HashMap<>(); @@ -78,7 +75,6 @@ public class TearsOfGuthixPlugin extends Plugin @Override protected void startUp() { - addSubscriptions(); overlayManager.add(overlay); overlayManager.add(experienceOverlay); @@ -87,21 +83,13 @@ public class TearsOfGuthixPlugin extends Plugin @Override protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(overlay); overlayManager.remove(experienceOverlay); streams.clear(); playerLowestSkill = null; } - private void addSubscriptions() - { - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(DecorativeObjectSpawned.class, this, this::onDecorativeObjectSpawned); - eventBus.subscribe(DecorativeObjectDespawned.class, this, this::onDecorativeObjectDespawned); - } - + @Subscribe private void onGameStateChanged(GameStateChanged event) { switch (event.getGameState()) @@ -133,6 +121,7 @@ public class TearsOfGuthixPlugin extends Plugin } } + @Subscribe private void onDecorativeObjectSpawned(DecorativeObjectSpawned event) { DecorativeObject object = event.getDecorativeObject(); @@ -145,6 +134,7 @@ public class TearsOfGuthixPlugin extends Plugin } } + @Subscribe private void onDecorativeObjectDespawned(DecorativeObjectDespawned event) { if (streams.isEmpty()) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/theatre/TheatrePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/theatre/TheatrePlugin.java index cc90977b22..54cd40a3f5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/theatre/TheatrePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/theatre/TheatrePlugin.java @@ -30,6 +30,7 @@ import net.runelite.api.events.SpotAnimationChanged; import net.runelite.api.events.VarbitChanged; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.graphics.ModelOutlineRenderer; @@ -54,25 +55,33 @@ import net.runelite.client.ui.overlay.OverlayManager; ) @Singleton @Slf4j -@Getter +@Getter(AccessLevel.PUBLIC) public class TheatrePlugin extends Plugin { @Inject private Client client; + @Inject private EventBus eventBus; + @Inject private OverlayManager overlayManager; + @Inject private TheatreOverlay overlay; + @Inject private TheatreConfig config; + @Inject private MenuManager menuManager; + @Inject private ItemManager itemManager; + @Inject private ModelOutlineRenderer modelOutline; + private BloatHandler bloatHandler; private MaidenHandler maidenHandler; private NyloHandler nyloHandler; @@ -119,7 +128,6 @@ public class TheatrePlugin extends Plugin protected void startUp() { updateConfig(); - addSubscriptions(); room = TheatreRoom.UNKNOWN; maidenHandler = new MaidenHandler(client, this, modelOutline); bloatHandler = new BloatHandler(client, this); @@ -133,7 +141,6 @@ public class TheatrePlugin extends Plugin @Override protected void shutDown() { - eventBus.unregister(this); maidenHandler.onStop(); maidenHandler = null; bloatHandler.onStop(); @@ -151,22 +158,7 @@ public class TheatrePlugin extends Plugin overlayManager.remove(overlay); } - private void addSubscriptions() - { - eventBus.subscribe(AnimationChanged.class, this, this::onAnimationChanged); - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(GroundObjectSpawned.class, this, this::onGroundObjectSpawned); - eventBus.subscribe(NpcDefinitionChanged.class, this, this::onNpcDefinitionChanged); - eventBus.subscribe(NpcDespawned.class, this, this::onNpcDespawned); - eventBus.subscribe(NpcSpawned.class, this, this::onNpcSpawned); - eventBus.subscribe(ProjectileMoved.class, this, this::onProjectileMoved); - eventBus.subscribe(ProjectileSpawned.class, this, this::onProjectileSpawned); - eventBus.subscribe(SpotAnimationChanged.class, this, this::onSpotAnimationChanged); - eventBus.subscribe(VarbitChanged.class, this, this::onVarbitChanged); - } - + @Subscribe private void onAnimationChanged(AnimationChanged event) { if (verzikHandler != null) @@ -175,6 +167,7 @@ public class TheatrePlugin extends Plugin } } + @Subscribe private void onChatMessage(ChatMessage event) { if (maidenHandler != null) @@ -183,6 +176,7 @@ public class TheatrePlugin extends Plugin } } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("Theatre")) @@ -196,6 +190,7 @@ public class TheatrePlugin extends Plugin } } + @Subscribe private void onGameTick(GameTick event) { if (maidenHandler != null) @@ -229,6 +224,7 @@ public class TheatrePlugin extends Plugin } } + @Subscribe private void onGroundObjectSpawned(GroundObjectSpawned event) { if (sotetsegHandler != null) @@ -242,6 +238,7 @@ public class TheatrePlugin extends Plugin } } + @Subscribe private void onNpcDefinitionChanged(NpcDefinitionChanged event) { if (maidenHandler != null) @@ -250,6 +247,7 @@ public class TheatrePlugin extends Plugin } } + @Subscribe private void onNpcDespawned(NpcDespawned event) { if (maidenHandler != null) @@ -279,6 +277,7 @@ public class TheatrePlugin extends Plugin } + @Subscribe private void onNpcSpawned(NpcSpawned event) { if (maidenHandler != null) @@ -313,6 +312,7 @@ public class TheatrePlugin extends Plugin } + @Subscribe private void onProjectileMoved(ProjectileMoved event) { if (verzikHandler != null) @@ -321,6 +321,7 @@ public class TheatrePlugin extends Plugin } } + @Subscribe private void onProjectileSpawned(ProjectileSpawned event) { if (sotetsegHandler != null) @@ -330,6 +331,7 @@ public class TheatrePlugin extends Plugin } } + @Subscribe private void onSpotAnimationChanged(SpotAnimationChanged event) { if (maidenHandler != null) @@ -338,6 +340,7 @@ public class TheatrePlugin extends Plugin } } + @Subscribe private void onVarbitChanged(VarbitChanged event) { if (bloatHandler != null) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/theatre/rooms/Nylos.java b/runelite-client/src/main/java/net/runelite/client/plugins/theatre/rooms/Nylos.java index 5429f016e7..abd7933d8d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/theatre/rooms/Nylos.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/theatre/rooms/Nylos.java @@ -23,7 +23,7 @@ class Nylos this.spawnLocation = spawnLocation; } - @Getter + @Getter(AccessLevel.PACKAGE) @AllArgsConstructor enum SpawnLocation { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/theatre/rooms/nylocas/NyloHandler.java b/runelite-client/src/main/java/net/runelite/client/plugins/theatre/rooms/nylocas/NyloHandler.java index fb4c37d4c0..e87e99e37a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/theatre/rooms/nylocas/NyloHandler.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/theatre/rooms/nylocas/NyloHandler.java @@ -238,7 +238,7 @@ public class NyloHandler extends RoomHandler toHighlight.add(npc); } - catch (Exception ex) + catch (Exception ignored) { } @@ -270,7 +270,7 @@ public class NyloHandler extends RoomHandler graphics.setColor(color); graphics.draw(objectClickbox); } - catch (Exception ex) + catch (Exception ignored) { } @@ -394,7 +394,7 @@ public class NyloHandler extends RoomHandler } } - public void onMenuOptionClicked(MenuOptionClicked event) + private void onMenuOptionClicked(MenuOptionClicked event) { final String option = event.getOption().toLowerCase(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/theatre/rooms/nylocas/NyloPredictor.java b/runelite-client/src/main/java/net/runelite/client/plugins/theatre/rooms/nylocas/NyloPredictor.java index 40226ac167..13447b917d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/theatre/rooms/nylocas/NyloPredictor.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/theatre/rooms/nylocas/NyloPredictor.java @@ -444,7 +444,7 @@ public class NyloPredictor EAST } - public static class Nylocas + static class Nylocas { private final NylocasType type; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/theatre/rooms/nylocas/Weapons.java b/runelite-client/src/main/java/net/runelite/client/plugins/theatre/rooms/nylocas/Weapons.java index 08f6951115..6883fe0840 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/theatre/rooms/nylocas/Weapons.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/theatre/rooms/nylocas/Weapons.java @@ -6,13 +6,14 @@ import java.util.HashSet; import java.util.Map; import java.util.Set; import javax.annotation.Nullable; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; import net.runelite.api.ItemID; import net.runelite.client.menus.AbstractComparableEntry; import net.runelite.client.menus.ComparableEntries; -@Getter +@Getter(AccessLevel.PACKAGE) @AllArgsConstructor public enum Weapons { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/thieving/Chest.java b/runelite-client/src/main/java/net/runelite/client/plugins/thieving/Chest.java index 9c0f9592f2..ec2b374990 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/thieving/Chest.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/thieving/Chest.java @@ -27,6 +27,7 @@ package net.runelite.client.plugins.thieving; import com.google.common.collect.ImmutableMap; import java.time.Duration; import java.util.Map; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.ObjectID; @@ -57,7 +58,7 @@ enum Chest CHESTS = builder.build(); } - @Getter + @Getter(AccessLevel.PACKAGE) private final Duration respawnTime; private final int[] ids; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/thieving/ThievingOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/thieving/ThievingOverlay.java index dece27f927..dd5f912b5b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/thieving/ThievingOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/thieving/ThievingOverlay.java @@ -111,6 +111,11 @@ public class ThievingOverlay extends Overlay private boolean isThieving() { + if (client.getLocalPlayer() == null) + { + return false; + } + switch (client.getLocalPlayer().getAnimation()) { case THIEVING_STALL: @@ -123,12 +128,11 @@ public class ThievingOverlay extends Overlay private boolean isStunned() { - switch (client.getLocalPlayer().getAnimation()) + if (client.getLocalPlayer() == null) { - case BLOCK_UNARMED: - return true; - default: - return false; + return false; } + + return client.getLocalPlayer().getAnimation() == BLOCK_UNARMED; } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/thieving/ThievingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/thieving/ThievingPlugin.java index fad58ec12f..e995d6a8b7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/thieving/ThievingPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/thieving/ThievingPlugin.java @@ -44,7 +44,7 @@ import net.runelite.api.events.GameObjectDespawned; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDependency; @@ -79,9 +79,6 @@ public class ThievingPlugin extends Plugin @Inject private OverlayManager overlayManager; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) private ThievingSession session; @@ -98,9 +95,8 @@ public class ThievingPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { - addSubscriptions(); this.statTimeout = config.statTimeout(); @@ -115,24 +111,14 @@ public class ThievingPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(overlay); overlayManager.remove(chestOverlay); session = null; } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - eventBus.subscribe(GameObjectDespawned.class, this, this::onGameObjectDespawned); - } - + @Subscribe private void onGameStateChanged(GameStateChanged event) { if (event.getGameState() == GameState.LOGGED_IN) @@ -141,6 +127,7 @@ public class ThievingPlugin extends Plugin } } + @Subscribe private void onGameTick(GameTick gameTick) { recentlyLoggedIn = false; @@ -159,6 +146,7 @@ public class ThievingPlugin extends Plugin } } + @Subscribe private void onChatMessage(ChatMessage event) { if (event.getType() != ChatMessageType.SPAM) @@ -190,6 +178,7 @@ public class ThievingPlugin extends Plugin } } + @Subscribe private void onGameObjectDespawned(GameObjectDespawned event) { if (client.getGameState() != GameState.LOGGED_IN || recentlyLoggedIn) @@ -207,6 +196,7 @@ public class ThievingPlugin extends Plugin } } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!"thieving".equals(event.getGroup())) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/ticktimers/TickTimersPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/ticktimers/TickTimersPlugin.java index dace016484..476dcf1bca 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/ticktimers/TickTimersPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/ticktimers/TickTimersPlugin.java @@ -41,7 +41,7 @@ import net.runelite.api.events.GameTick; import net.runelite.api.events.NpcDespawned; import net.runelite.api.events.NpcSpawned; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.NPCManager; import net.runelite.client.plugins.Plugin; @@ -68,16 +68,19 @@ public class TickTimersPlugin extends Plugin @Inject private Client client; + @Inject private OverlayManager overlayManager; + @Inject private TimersOverlay timersOverlay; + @Inject private TickTimersConfig config; + @Inject private NPCManager npcManager; - @Inject - private EventBus eventBus; + @Getter(AccessLevel.PACKAGE) private Set npcContainer = new HashSet<>(); private boolean validRegion; @@ -107,28 +110,18 @@ public class TickTimersPlugin extends Plugin public void startUp() { updateConfig(); - addSubscriptions(); npcContainer.clear(); } @Override public void shutDown() { - eventBus.unregister(this); npcContainer.clear(); overlayManager.remove(timersOverlay); validRegion = false; } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(NpcSpawned.class, this, this::onNpcSpawned); - eventBus.subscribe(NpcDespawned.class, this, this::onNpcDespawned); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - } - + @Subscribe private void onGameStateChanged(GameStateChanged gameStateChanged) { if (gameStateChanged.getGameState() != GameState.LOGGED_IN) @@ -149,6 +142,7 @@ public class TickTimersPlugin extends Plugin npcContainer.clear(); } + @Subscribe private void onNpcSpawned(NpcSpawned event) { if (!validRegion) @@ -192,6 +186,7 @@ public class TickTimersPlugin extends Plugin } } + @Subscribe private void onNpcDespawned(NpcDespawned event) { if (!validRegion) @@ -227,6 +222,7 @@ public class TickTimersPlugin extends Plugin } } + @Subscribe public void onGameTick(GameTick Event) { if (!validRegion) @@ -263,6 +259,7 @@ public class TickTimersPlugin extends Plugin ); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!"TickTimers".equals(event.getGroup())) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/tileindicators/TileIndicatorsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/tileindicators/TileIndicatorsPlugin.java index 40db3ebaaf..c6a583e84f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/tileindicators/TileIndicatorsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/tileindicators/TileIndicatorsPlugin.java @@ -31,7 +31,7 @@ import javax.inject.Singleton; import lombok.AccessLevel; import lombok.Getter; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -55,9 +55,6 @@ public class TileIndicatorsPlugin extends Plugin @Inject private TileIndicatorsConfig config; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) private Color highlightDestinationColor; @Getter(AccessLevel.PACKAGE) @@ -84,22 +81,19 @@ public class TileIndicatorsPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - overlayManager.add(overlay); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(overlay); } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!"tileindicators".equals(event.getGroup())) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timers/GameTimer.java b/runelite-client/src/main/java/net/runelite/client/plugins/timers/GameTimer.java index 47febc85ec..790b6776d1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timers/GameTimer.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timers/GameTimer.java @@ -71,12 +71,12 @@ enum GameTimer ANTIPOISON(ItemID.ANTIPOISON4, GameTimerImageType.ITEM, "Antipoison"), ANTIVENOM(ItemID.ANTIVENOM4, GameTimerImageType.ITEM, "Anti-venom"), DRAGON_FIRE_SHIELD(ItemID.DRAGONFIRE_SHIELD_11284, GameTimerImageType.ITEM, "Dragonfire Shield Special", 2, ChronoUnit.MINUTES), - DIVINE_SUPER_ATTACK(ItemID.DIVINE_SUPER_ATTACK_POTION4, GameTimerImageType.ITEM, "Divine Super Attack", 5, ChronoUnit.MINUTES, true), - DIVINE_SUPER_STRENGTH(ItemID.DIVINE_SUPER_STRENGTH_POTION4, GameTimerImageType.ITEM, "Divine Super Strength", 5, ChronoUnit.MINUTES, true), - DIVINE_SUPER_DEFENCE(ItemID.DIVINE_SUPER_DEFENCE_POTION4, GameTimerImageType.ITEM, "Divine Super Defence", 5, ChronoUnit.MINUTES, true), - DIVINE_SUPER_COMBAT(ItemID.DIVINE_SUPER_COMBAT_POTION4, GameTimerImageType.ITEM, "Divine Super Combat", 5, ChronoUnit.MINUTES, true), - DIVINE_RANGING(ItemID.DIVINE_RANGING_POTION4, GameTimerImageType.ITEM, "Divine Ranging", 5, ChronoUnit.MINUTES, true), - DIVINE_MAGIC(ItemID.DIVINE_MAGIC_POTION4, GameTimerImageType.ITEM, "Divine Magic", 5, ChronoUnit.MINUTES, true); + DIVINE_SUPER_ATTACK(ItemID.DIVINE_SUPER_ATTACK_POTION4, GameTimerImageType.ITEM, "Divine Super Attack", 5, ChronoUnit.MINUTES), + DIVINE_SUPER_STRENGTH(ItemID.DIVINE_SUPER_STRENGTH_POTION4, GameTimerImageType.ITEM, "Divine Super Strength", 5, ChronoUnit.MINUTES), + DIVINE_SUPER_DEFENCE(ItemID.DIVINE_SUPER_DEFENCE_POTION4, GameTimerImageType.ITEM, "Divine Super Defence", 5, ChronoUnit.MINUTES), + DIVINE_SUPER_COMBAT(ItemID.DIVINE_SUPER_COMBAT_POTION4, GameTimerImageType.ITEM, "Divine Super Combat", 5, ChronoUnit.MINUTES), + DIVINE_RANGING(ItemID.DIVINE_RANGING_POTION4, GameTimerImageType.ITEM, "Divine Ranging", 5, ChronoUnit.MINUTES), + DIVINE_MAGIC(ItemID.DIVINE_MAGIC_POTION4, GameTimerImageType.ITEM, "Divine Magic", 5, ChronoUnit.MINUTES); private final Duration duration; private final Integer graphicId; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timers/TeleportWidget.java b/runelite-client/src/main/java/net/runelite/client/plugins/timers/TeleportWidget.java index 3cb6a7ef3e..1c7beb0c8b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timers/TeleportWidget.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timers/TeleportWidget.java @@ -38,7 +38,8 @@ enum TeleportWidget WidgetInfo.SPELL_LUMBRIDGE_HOME_TELEPORT.getId(), WidgetInfo.SPELL_EDGEVILLE_HOME_TELEPORT.getId(), WidgetInfo.SPELL_LUNAR_HOME_TELEPORT.getId(), - WidgetInfo.SPELL_ARCEUUS_HOME_TELEPORT.getId() + WidgetInfo.SPELL_ARCEUUS_HOME_TELEPORT.getId(), + WidgetInfo.SPELL_KOUREND_HOME_TELEPORT.getId() ); private static final Collection MINIGAME_TELEPORT_IDS = ImmutableList.of( WidgetInfo.MINIGAME_TELEPORT_BUTTON.getId() diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersPlugin.java index 85a758a630..c7da8e40ff 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersPlugin.java @@ -55,13 +55,12 @@ import net.runelite.api.WorldType; import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.AnimationChanged; import net.runelite.api.events.ChatMessage; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.ItemContainerChanged; -import net.runelite.api.events.LocalPlayerDeath; import net.runelite.api.events.MenuOptionClicked; import net.runelite.api.events.NpcDespawned; +import net.runelite.api.events.PlayerDeath; import net.runelite.api.events.SpotAnimationChanged; import net.runelite.api.events.StatChanged; import net.runelite.api.events.VarbitChanged; @@ -71,7 +70,8 @@ import net.runelite.api.widgets.WidgetID; import net.runelite.api.widgets.WidgetInfo; import static net.runelite.api.widgets.WidgetInfo.PVP_WORLD_SAFE_ZONE; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.game.SpriteManager; import net.runelite.client.plugins.Plugin; @@ -113,7 +113,6 @@ public class TimersPlugin extends Plugin private static final String SUPER_ANTIFIRE_EXPIRED_MESSAGE = "Your super antifire potion has expired."; private static final int VENOM_VALUE_CUTOFF = -40; // Antivenom < -40 =< Antipoison < 0 private static final int POISON_TICK_LENGTH = 30; - private static final String SUPER_ANTIVENOM_DRINK_MESSAGE = "You drink some of your super antivenom potion"; private static final String KILLED_TELEBLOCK_OPPONENT_TEXT = "Your Tele Block has been removed because you killed "; private static final String PRAYER_ENHANCE_EXPIRED = "Your prayer enhance effect has worn off."; private static final Pattern DEADMAN_HALF_TELEBLOCK_PATTERN = Pattern.compile("A Tele Block spell has been cast on you by (.+)\\. It will expire in 1 minute, 15 seconds\\."); @@ -153,9 +152,6 @@ public class TimersPlugin extends Plugin @Inject private InfoBoxManager infoBoxManager; - @Inject - private EventBus eventBus; - private boolean showHomeMinigameTeleports; private boolean showAntiPoison; private boolean showAntiFire; @@ -184,17 +180,14 @@ public class TimersPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - infoBoxManager.removeIf(t -> t instanceof TimerTimer); lastRaidVarb = -1; lastPoint = null; @@ -207,23 +200,7 @@ public class TimersPlugin extends Plugin imbuedHeartClicked = false; } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(VarbitChanged.class, this, this::onVarbitChanged); - eventBus.subscribe(WidgetHiddenChanged.class, this, this::onWidgetHiddenChanged); - eventBus.subscribe(MenuOptionClicked.class, this, this::onMenuOptionClicked); - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(AnimationChanged.class, this, this::onAnimationChanged); - eventBus.subscribe(SpotAnimationChanged.class, this, this::onSpotAnimationChanged); - eventBus.subscribe(ItemContainerChanged.class, this, this::onItemContainerChanged); - eventBus.subscribe(NpcDespawned.class, this, this::onNpcDespawned); - eventBus.subscribe(LocalPlayerDeath.class, this, this::onLocalPlayerDeath); - eventBus.subscribe(StatChanged.class, this, this::onStatChanged); - } - + @Subscribe private void onVarbitChanged(VarbitChanged event) { int raidVarb = client.getVar(Varbits.IN_RAID); @@ -311,6 +288,7 @@ public class TimersPlugin extends Plugin } } + @Subscribe private void onWidgetHiddenChanged(WidgetHiddenChanged event) { Widget widget = event.getWidget(); @@ -321,6 +299,7 @@ public class TimersPlugin extends Plugin } } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("timers")) @@ -427,6 +406,7 @@ public class TimersPlugin extends Plugin } } + @Subscribe private void onMenuOptionClicked(MenuOptionClicked event) { if (this.showStamina @@ -497,6 +477,7 @@ public class TimersPlugin extends Plugin } } + @Subscribe void onChatMessage(ChatMessage event) { if (event.getType() != ChatMessageType.SPAM && event.getType() != ChatMessageType.GAMEMESSAGE) @@ -582,9 +563,7 @@ public class TimersPlugin extends Plugin } else if (HALF_TELEBLOCK_PATTERN.matcher(event.getMessage()).find()) { - if (client.getWorldType().contains(WorldType.DEADMAN) - && !client.getWorldType().contains(WorldType.SEASONAL_DEADMAN) - && !client.getWorldType().contains(WorldType.DEADMAN_TOURNAMENT)) + if (client.getWorldType().contains(WorldType.DEADMAN)) { createGameTimer(DMM_FULLTB); } @@ -695,6 +674,7 @@ public class TimersPlugin extends Plugin } } + @Subscribe private void onGameTick(GameTick event) { loggedInRace = false; @@ -750,6 +730,7 @@ public class TimersPlugin extends Plugin } } + @Subscribe private void onGameStateChanged(GameStateChanged gameStateChanged) { switch (gameStateChanged.getGameState()) @@ -764,6 +745,7 @@ public class TimersPlugin extends Plugin } } + @Subscribe private void onAnimationChanged(AnimationChanged event) { Actor actor = event.getActor(); @@ -824,6 +806,7 @@ public class TimersPlugin extends Plugin lastAnimation = player.getAnimation(); } + @Subscribe private void onSpotAnimationChanged(SpotAnimationChanged event) { Actor actor = event.getActor(); @@ -885,6 +868,7 @@ public class TimersPlugin extends Plugin * * @param itemContainerChanged */ + @Subscribe private void onItemContainerChanged(ItemContainerChanged itemContainerChanged) { ItemContainer container = itemContainerChanged.getItemContainer(); @@ -920,6 +904,7 @@ public class TimersPlugin extends Plugin } } + @Subscribe private void onNpcDespawned(NpcDespawned npcDespawned) { NPC npc = npcDespawned.getNpc(); @@ -937,11 +922,16 @@ public class TimersPlugin extends Plugin } } - private void onLocalPlayerDeath(LocalPlayerDeath event) + @Subscribe + private void onPlayerDeath(PlayerDeath playerDeath) { - infoBoxManager.removeIf(t -> t instanceof TimerTimer && ((TimerTimer) t).getTimer().isRemovedOnDeath()); + if (playerDeath.getPlayer() == client.getLocalPlayer()) + { + infoBoxManager.removeIf(t -> t instanceof TimerTimer && ((TimerTimer) t).getTimer().isRemovedOnDeath()); + } } + @Subscribe private void onStatChanged(StatChanged event) { Skill skill = event.getSkill(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timestamp/TimestampPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/timestamp/TimestampPlugin.java index 027769f892..660214932e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timestamp/TimestampPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timestamp/TimestampPlugin.java @@ -34,14 +34,15 @@ import java.time.ZonedDateTime; import java.util.Date; import javax.inject.Inject; import javax.inject.Singleton; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.Client; import net.runelite.api.MessageNode; import net.runelite.api.Varbits; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.ScriptCallbackEvent; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.util.ColorUtil; @@ -61,10 +62,7 @@ public class TimestampPlugin extends Plugin @Inject private TimestampConfig config; - @Inject - private EventBus eventBus; - - @Getter + @Getter(AccessLevel.PACKAGE) private SimpleDateFormat formatter; @Provides @@ -74,22 +72,19 @@ public class TimestampPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(ScriptCallbackEvent.class, this, this::onScriptCallbackEvent); updateFormatter(); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - formatter = null; } + @Subscribe void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("timestamp") && event.getKey().equals("format")) @@ -98,6 +93,7 @@ public class TimestampPlugin extends Plugin } } + @Subscribe private void onScriptCallbackEvent(ScriptCallbackEvent event) { if (!event.getEventName().equals("addTimestamp")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/Tab.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/Tab.java index dc9a44a0d1..87249940b4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/Tab.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/Tab.java @@ -24,12 +24,13 @@ */ package net.runelite.client.plugins.timetracking; +import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; import net.runelite.api.ItemID; @RequiredArgsConstructor -@Getter +@Getter(AccessLevel.PACKAGE) public enum Tab { OVERVIEW("Overview", ItemID.OLD_NOTES), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TabContentPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TabContentPanel.java index 2885be7fe8..799887ff4a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TabContentPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TabContentPanel.java @@ -24,7 +24,6 @@ */ package net.runelite.client.plugins.timetracking; -import java.awt.Dimension; import java.time.LocalDateTime; import java.time.format.TextStyle; import java.time.temporal.ChronoUnit; @@ -43,12 +42,6 @@ public abstract class TabContentPanel extends JPanel public abstract void update(); - @Override - public Dimension getPreferredSize() - { - return super.getPreferredSize(); - } - protected static String getFormattedEstimate(long remainingSeconds, boolean useRelativeTime) { if (useRelativeTime) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TimeTrackingPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TimeTrackingPanel.java index 5c33e6d51a..7c468ec8df 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TimeTrackingPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TimeTrackingPanel.java @@ -38,7 +38,6 @@ import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.SwingUtilities; import javax.swing.border.EmptyBorder; -import net.runelite.client.util.AsyncBufferedImage; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.timetracking.clocks.ClockManager; import net.runelite.client.plugins.timetracking.farming.FarmingTracker; @@ -47,6 +46,7 @@ import net.runelite.client.ui.ColorScheme; import net.runelite.client.ui.PluginPanel; import net.runelite.client.ui.components.materialtabs.MaterialTab; import net.runelite.client.ui.components.materialtabs.MaterialTabGroup; +import net.runelite.client.util.AsyncBufferedImage; class TimeTrackingPanel extends PluginPanel { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TimeTrackingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TimeTrackingPlugin.java index 64d0a80a14..19768a707c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TimeTrackingPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TimeTrackingPlugin.java @@ -36,13 +36,13 @@ import javax.inject.Inject; import net.runelite.api.Client; import net.runelite.api.GameState; import net.runelite.api.coords.WorldPoint; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.UsernameChanged; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -88,9 +88,6 @@ public class TimeTrackingPlugin extends Plugin @Inject private ScheduledExecutorService executorService; - @Inject - private EventBus eventBus; - private ScheduledFuture panelUpdateFuture; private TimeTrackingPanel panel; @@ -107,9 +104,8 @@ public class TimeTrackingPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { - addSubscriptions(); clockManager.loadTimers(); clockManager.loadStopwatches(); @@ -133,10 +129,8 @@ public class TimeTrackingPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - lastTickLocation = null; lastTickPostLogin = false; @@ -149,13 +143,7 @@ public class TimeTrackingPlugin extends Plugin clientToolbar.removeNavigation(navButton); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(UsernameChanged.class, this, this::onUsernameChanged); - } - + @Subscribe private void onConfigChanged(ConfigChanged e) { if (!e.getGroup().equals(CONFIG_GROUP)) @@ -173,6 +161,7 @@ public class TimeTrackingPlugin extends Plugin } } + @Subscribe private void onGameTick(GameTick t) { if (client.getGameState() != GameState.LOGGED_IN) @@ -212,6 +201,7 @@ public class TimeTrackingPlugin extends Plugin } } + @Subscribe private void onUsernameChanged(UsernameChanged e) { farmingTracker.loadCompletionTimes(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TimeablePanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TimeablePanel.java index c01f770063..ee078ceb69 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TimeablePanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TimeablePanel.java @@ -32,6 +32,7 @@ import java.awt.GridLayout; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.Constants; import net.runelite.client.ui.ColorScheme; @@ -39,7 +40,7 @@ import net.runelite.client.ui.FontManager; import net.runelite.client.ui.components.ThinProgressBar; import net.runelite.client.ui.components.shadowlabel.JShadowedLabel; -@Getter +@Getter(AccessLevel.PUBLIC) public class TimeablePanel extends JPanel { private final T timeable; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/Clock.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/Clock.java index 31300069c8..8a8d5be15e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/Clock.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/Clock.java @@ -25,13 +25,14 @@ package net.runelite.client.plugins.timetracking.clocks; import java.time.Instant; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -@Getter -@Setter +@Getter(AccessLevel.PACKAGE) +@Setter(AccessLevel.PACKAGE) @NoArgsConstructor @AllArgsConstructor abstract class Clock diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/ClockManager.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/ClockManager.java index 3be9dc053b..01531a9e5a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/ClockManager.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/ClockManager.java @@ -34,6 +34,7 @@ import java.util.concurrent.CopyOnWriteArrayList; import javax.inject.Inject; import javax.swing.SwingUtilities; import joptsimple.internal.Strings; +import lombok.AccessLevel; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import net.runelite.client.Notifier; @@ -53,13 +54,13 @@ public class ClockManager @Inject private Notifier notifier; - @Getter + @Getter(AccessLevel.PUBLIC) private final List timers = new CopyOnWriteArrayList<>(); - @Getter + @Getter(AccessLevel.PUBLIC) private final List stopwatches = new ArrayList<>(); - @Getter + @Getter(AccessLevel.PUBLIC) private ClockTabPanel clockTabPanel; ClockManager() @@ -153,9 +154,7 @@ public class ClockManager if (!Strings.isNullOrEmpty(timersJson)) { final Gson gson = new Gson(); - final List timers = gson.fromJson(timersJson, new TypeToken>() - { - }.getType()); + final List timers = gson.fromJson(timersJson, new TypeToken>() {}.getType()); this.timers.clear(); this.timers.addAll(timers); @@ -170,9 +169,7 @@ public class ClockManager if (!Strings.isNullOrEmpty(stopwatchesJson)) { final Gson gson = new Gson(); - final List stopwatches = gson.fromJson(stopwatchesJson, new TypeToken>() - { - }.getType()); + final List stopwatches = gson.fromJson(stopwatchesJson, new TypeToken>() {}.getType()); this.stopwatches.clear(); this.stopwatches.addAll(stopwatches); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/ClockPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/ClockPanel.java index 9b0e2c24cd..4af371926c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/ClockPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/ClockPanel.java @@ -40,6 +40,7 @@ import javax.swing.SwingConstants; import javax.swing.border.Border; import javax.swing.border.CompoundBorder; import javax.swing.border.EmptyBorder; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.client.ui.ColorScheme; import net.runelite.client.ui.components.FlatTextField; @@ -66,7 +67,7 @@ abstract class ClockPanel extends JPanel private final IconButton startPauseButton; private final FlatTextField displayInput; - @Getter + @Getter(AccessLevel.PACKAGE) private final Clock clock; private final String clockType; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/ClockTabPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/ClockTabPanel.java index fcc460fdf8..79578a3b79 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/ClockTabPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/ClockTabPanel.java @@ -40,7 +40,6 @@ import net.runelite.client.plugins.timetracking.TimeTrackingPlugin; import net.runelite.client.ui.ColorScheme; import net.runelite.client.ui.DynamicGridLayout; import net.runelite.client.ui.FontManager; -import net.runelite.client.ui.PluginPanel; import net.runelite.client.ui.components.IconButton; import net.runelite.client.ui.components.shadowlabel.JShadowedLabel; import net.runelite.client.util.ImageUtil; @@ -98,13 +97,6 @@ public class ClockTabPanel extends TabContentPanel rebuild(); } - // The max panel width is 225 but the + sign gets cut off at 225 so we set it at 223 - @Override - public Dimension getPreferredSize() - { - return new Dimension(PluginPanel.PANEL_WIDTH - 2, super.getPreferredSize().height); - } - /** * Clears and recreates the components of this panel. * This should be done whenever a clock is added or removed. diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/Stopwatch.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/Stopwatch.java index 5e12f58901..df4efd03d2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/Stopwatch.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/Stopwatch.java @@ -27,12 +27,13 @@ package net.runelite.client.plugins.timetracking.clocks; import java.time.Instant; import java.util.ArrayList; import java.util.List; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; -@Getter -@Setter +@Getter(AccessLevel.PACKAGE) +@Setter(AccessLevel.PACKAGE) @AllArgsConstructor class Stopwatch extends Clock { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/Timer.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/Timer.java index d4e0de6132..d8b5a67f86 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/Timer.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/Timer.java @@ -25,12 +25,13 @@ package net.runelite.client.plugins.timetracking.clocks; import java.time.Instant; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; -@Getter -@Setter +@Getter(AccessLevel.PACKAGE) +@Setter(AccessLevel.PACKAGE) @AllArgsConstructor class Timer extends Clock { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/CropState.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/CropState.java index 2d9ffced83..61dab85622 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/CropState.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/CropState.java @@ -25,12 +25,13 @@ package net.runelite.client.plugins.timetracking.farming; import java.awt.Color; +import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; import net.runelite.client.ui.ColorScheme; @RequiredArgsConstructor -@Getter +@Getter(AccessLevel.PACKAGE) public enum CropState { HARVESTABLE(ColorScheme.PROGRESS_COMPLETE_COLOR), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingPatch.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingPatch.java index 8c24588917..a7d13486ce 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingPatch.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingPatch.java @@ -33,7 +33,7 @@ import net.runelite.api.Varbits; @RequiredArgsConstructor( access = AccessLevel.PACKAGE ) -@Getter +@Getter(AccessLevel.PACKAGE) class FarmingPatch { @Setter(AccessLevel.PACKAGE) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingRegion.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingRegion.java index c768d30c14..041056c7d8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingRegion.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingRegion.java @@ -24,11 +24,12 @@ */ package net.runelite.client.plugins.timetracking.farming; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.Varbits; import net.runelite.api.coords.WorldPoint; -@Getter +@Getter(AccessLevel.PACKAGE) public class FarmingRegion { private final String name; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingTracker.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingTracker.java index 276e50a658..dff6f640fe 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingTracker.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingTracker.java @@ -24,7 +24,6 @@ */ package net.runelite.client.plugins.timetracking.farming; -import net.runelite.api.vars.Autoweed; import com.google.inject.Inject; import com.google.inject.Singleton; import java.time.Instant; @@ -35,6 +34,7 @@ import javax.annotation.Nullable; import net.runelite.api.Client; import net.runelite.api.Varbits; import net.runelite.api.coords.WorldPoint; +import net.runelite.api.vars.Autoweed; import net.runelite.client.config.ConfigManager; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.timetracking.SummaryState; @@ -173,7 +173,7 @@ public class FarmingTracker value = Integer.parseInt(parts[0]); unixTime = Long.parseLong(parts[1]); } - catch (NumberFormatException e) + catch (NumberFormatException ignored) { } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingWorld.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingWorld.java index 51592b5d8b..6360d50586 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingWorld.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingWorld.java @@ -34,6 +34,7 @@ import java.util.Map; import java.util.Set; import java.util.TreeMap; import java.util.TreeSet; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.Varbits; import net.runelite.api.coords.WorldPoint; @@ -42,10 +43,10 @@ import net.runelite.client.plugins.timetracking.Tab; @Singleton class FarmingWorld { - @Getter + @Getter(AccessLevel.PACKAGE) private final ImmutableMap regions; - @Getter + @Getter(AccessLevel.PACKAGE) private Map> tabs = new HashMap<>(); private final Comparator tabSorter = Comparator diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/PatchImplementation.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/PatchImplementation.java index 401269d34d..0da756e304 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/PatchImplementation.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/PatchImplementation.java @@ -25,12 +25,13 @@ package net.runelite.client.plugins.timetracking.farming; import javax.annotation.Nullable; +import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; import net.runelite.client.plugins.timetracking.Tab; @RequiredArgsConstructor -@Getter +@Getter(AccessLevel.PACKAGE) public enum PatchImplementation { BELLADONNA(Tab.SPECIAL, "") diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/Produce.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/Produce.java index bcb4e5ab0b..bf9374a5c8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/Produce.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/Produce.java @@ -25,13 +25,14 @@ */ package net.runelite.client.plugins.timetracking.farming; +import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; import net.runelite.api.ItemID; import net.runelite.api.NullItemID; @RequiredArgsConstructor -@Getter +@Getter(AccessLevel.PACKAGE) public enum Produce { WEEDS("Weeds", ItemID.WEEDS, 5, 4), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/hunter/BirdHouse.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/hunter/BirdHouse.java index 009a2bd7e6..d04944ba75 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/hunter/BirdHouse.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/hunter/BirdHouse.java @@ -25,12 +25,13 @@ package net.runelite.client.plugins.timetracking.hunter; import javax.annotation.Nullable; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; import net.runelite.api.ItemID; @AllArgsConstructor -@Getter +@Getter(AccessLevel.PACKAGE) enum BirdHouse { NORMAL("Bird House", ItemID.BIRD_HOUSE), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/hunter/BirdHouseSpace.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/hunter/BirdHouseSpace.java index 635ce2a4e3..f85a3d6a85 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/hunter/BirdHouseSpace.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/hunter/BirdHouseSpace.java @@ -24,12 +24,13 @@ */ package net.runelite.client.plugins.timetracking.hunter; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; import net.runelite.api.VarPlayer; @AllArgsConstructor -@Getter +@Getter(AccessLevel.PACKAGE) enum BirdHouseSpace { MEADOW_NORTH("Mushroom Meadow (North)", VarPlayer.BIRD_HOUSE_MEADOW_NORTH), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/hunter/BirdHouseState.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/hunter/BirdHouseState.java index 8e99d92541..492e30cc5b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/hunter/BirdHouseState.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/hunter/BirdHouseState.java @@ -25,12 +25,13 @@ package net.runelite.client.plugins.timetracking.hunter; import java.awt.Color; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; import net.runelite.client.ui.ColorScheme; @AllArgsConstructor -@Getter +@Getter(AccessLevel.PACKAGE) enum BirdHouseState { SEEDED(ColorScheme.PROGRESS_COMPLETE_COLOR), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/hunter/BirdHouseTracker.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/hunter/BirdHouseTracker.java index 1c30f2da58..ea4f542c8d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/hunter/BirdHouseTracker.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/hunter/BirdHouseTracker.java @@ -61,14 +61,14 @@ public class BirdHouseTracker @Getter(AccessLevel.PACKAGE) private final ConcurrentMap birdHouseData = new ConcurrentHashMap<>(); - @Getter + @Getter(AccessLevel.PUBLIC) private SummaryState summary = SummaryState.UNKNOWN; /** * The time at which all the bird houses will be ready to be dismantled, * or {@code -1} if we have no data about any of the bird house spaces. */ - @Getter + @Getter(AccessLevel.PUBLIC) private long completionTime = -1; @Inject diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/tithefarm/TitheFarmPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/tithefarm/TitheFarmPlugin.java index cca15f8b14..b3a5839c11 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/tithefarm/TitheFarmPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/tithefarm/TitheFarmPlugin.java @@ -35,11 +35,11 @@ import lombok.Getter; import lombok.extern.slf4j.Slf4j; import net.runelite.api.GameObject; import net.runelite.api.coords.WorldPoint; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.GameObjectSpawned; import net.runelite.api.events.GameTick; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.overlay.OverlayManager; @@ -62,9 +62,6 @@ public class TitheFarmPlugin extends Plugin @Inject private TitheFarmPluginConfig config; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) private final Set plants = new HashSet<>(); @@ -82,30 +79,21 @@ public class TitheFarmPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); overlayManager.add(titheFarmOverlay); titheFarmOverlay.updateConfig(); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(titheFarmOverlay); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(GameObjectSpawned.class, this, this::onGameObjectSpawned); - } - + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("tithefarmplugin")) @@ -116,11 +104,13 @@ public class TitheFarmPlugin extends Plugin } } + @Subscribe private void onGameTick(final GameTick event) { plants.removeIf(plant -> plant.getPlantTimeRelative() == 1); } + @Subscribe private void onGameObjectSpawned(GameObjectSpawned event) { GameObject gameObject = event.getGameObject(); @@ -141,16 +131,12 @@ public class TitheFarmPlugin extends Plugin log.debug("Added plant {}", newPlant); plants.add(newPlant); } - else if (oldPlant == null) - { - return; - } else if (newPlant.getType() == TitheFarmPlantType.EMPTY) { log.debug("Removed plant {}", oldPlant); plants.remove(oldPlant); } - else if (oldPlant.getGameObject().getId() != newPlant.getGameObject().getId()) + else if (oldPlant != null && oldPlant.getGameObject().getId() != newPlant.getGameObject().getId()) { if (oldPlant.getState() != TitheFarmPlantState.WATERED && newPlant.getState() == TitheFarmPlantState.WATERED) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/tmorph/TMorph.java b/runelite-client/src/main/java/net/runelite/client/plugins/tmorph/TMorph.java index ffcd191873..6398a84b30 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/tmorph/TMorph.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/tmorph/TMorph.java @@ -46,6 +46,7 @@ import net.runelite.api.kit.KitType; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -86,10 +87,13 @@ public class TMorph extends Plugin @Inject private Client client; + @Inject private TMorphConfig config; + @Inject private EventBus eventBus; + private Map set1; private Map set2; private Map set3; @@ -107,21 +111,20 @@ public class TMorph extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); addSubscriptions(); } @Override - protected void shutDown() throws Exception + protected void shutDown() { eventBus.unregister(this); } private void addSubscriptions() { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); eventBus.subscribe(AnimationChanged.class, this, this::onAnimationChanged); eventBus.subscribe(GameTick.class, this, this::onGameTick); eventBus.subscribe(SpotAnimationChanged.class, this, this::onSpotAnimationChanged); @@ -184,6 +187,7 @@ public class TMorph extends Plugin } } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("TMorph")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/tobdamagecount/DamageCounterPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/tobdamagecount/DamageCounterPlugin.java index 53ed573c96..311ac7fc5e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/tobdamagecount/DamageCounterPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/tobdamagecount/DamageCounterPlugin.java @@ -41,18 +41,17 @@ import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.HitsplatApplied; -import net.runelite.api.events.LocalPlayerDeath; import net.runelite.api.events.NpcDespawned; +import net.runelite.api.events.PlayerDeath; import net.runelite.client.chat.ChatColorType; import net.runelite.client.chat.ChatMessageBuilder; import net.runelite.client.chat.ChatMessageManager; import net.runelite.client.chat.QueuedMessage; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.PluginType; - @PluginDescriptor( name = "ToB Damage Counter", description = "Gives you an estimation damage on a boss and taken after the fight is done" + @@ -64,12 +63,6 @@ import net.runelite.client.plugins.PluginType; @Singleton public class DamageCounterPlugin extends Plugin { - private int currentWorld = -1; - private int DamageCount = 0; - private int currenthpxp = -1; // checking the current hp xp so be easier to find - private String BossName = null; //to ID the boss to calculate the damage - private int DamageTaken = 0; - private boolean status = true; //default boolean alive = true, dead = false //formatting the number for damage taken and dealt with to look beeter private static final DecimalFormat DAMAGEFORMAT = new DecimalFormat("#,###"); private static final double XP_RATIO = 1.3333; @@ -101,32 +94,21 @@ public class DamageCounterPlugin extends Plugin NpcID.SOTETSEG_8388, NpcID.XARPUS, NpcID.XARPUS_8339, NpcID.XARPUS_8340, NpcID.XARPUS_8341, NpcID.VERZIK_VITUR, NpcID.VERZIK_VITUR_8369, NpcID.VERZIK_VITUR_8370, NpcID.VERZIK_VITUR_8371, NpcID.VERZIK_VITUR_8372, NpcID.VERZIK_VITUR_8373, NpcID.VERZIK_VITUR_8374, NpcID.VERZIK_VITUR_8375}; + private int currentWorld = -1; + private int DamageCount = 0; + private int currenthpxp = -1; // checking the current hp xp so be easier to find + private String BossName = null; //to ID the boss to calculate the damage + private int DamageTaken = 0; + private boolean status = true; //default boolean alive = true, dead = false @Inject private Client client; + @Inject private ChatMessageManager chatMessangerManager; - @Inject - private EventBus eventBus; - - @Override - protected void startUp() throws Exception - { - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(HitsplatApplied.class, this, this::onHitsplatApplied); - eventBus.subscribe(NpcDespawned.class, this, this::onNpcDespawned); - eventBus.subscribe(LocalPlayerDeath.class, this, this::onLocalPlayerDeath); - } - - - @Override - protected void shutDown() throws Exception - { - eventBus.unregister(this); - } //every game tick it will go through methods + @Subscribe private void onGameTick(GameTick tick) { if (client.getGameState() != GameState.LOGGED_IN) @@ -154,12 +136,14 @@ public class DamageCounterPlugin extends Plugin if (aNPCARRAY == interactingId) { BossName = interactingName; + break; } } } } //if you hop it will reset the counter + @Subscribe private void onGameStateChanged(GameStateChanged event) { if (event.getGameState() == GameState.LOGGED_IN) @@ -223,6 +207,7 @@ public class DamageCounterPlugin extends Plugin //will add the damage that you have taken from the current boss fight + @Subscribe private void onHitsplatApplied(HitsplatApplied Hit) { if (Hit.getActor().equals(client.getLocalPlayer())) @@ -237,6 +222,7 @@ public class DamageCounterPlugin extends Plugin because every time she phases she "dies" so making sure the counter doesn't print out the damage for phase 1, 2, and 3. */ + @Subscribe private void onNpcDespawned(NpcDespawned npc) { NPC actor = npc.getNpc(); @@ -350,7 +336,7 @@ public class DamageCounterPlugin extends Plugin sendChatMessage(MessageTaken); } - public int getPlayers() + private int getPlayers() { List players = client.getPlayers(); @@ -359,9 +345,10 @@ public class DamageCounterPlugin extends Plugin //whenever you have died in tob you will get a death message with damage // made sure the message works at ToB area or else it will message every where - private void onLocalPlayerDeath(LocalPlayerDeath death) + @Subscribe + private void onPlayerDeath(PlayerDeath death) { - if (client.getLocalPlayer() == null) + if (client.getLocalPlayer() == null || death.getPlayer() != client.getLocalPlayer()) { return; } @@ -396,4 +383,4 @@ public class DamageCounterPlugin extends Plugin .runeLiteFormattedMessage(message) .build()); } -} +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/twitch/TwitchPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/twitch/TwitchPlugin.java index 7e8e95f067..871089c4a4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/twitch/TwitchPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/twitch/TwitchPlugin.java @@ -34,7 +34,6 @@ import lombok.extern.slf4j.Slf4j; import net.runelite.api.ChatMessageType; import net.runelite.api.Client; import net.runelite.api.GameState; -import net.runelite.client.events.ConfigChanged; import net.runelite.client.chat.ChatColorType; import net.runelite.client.chat.ChatMessageBuilder; import net.runelite.client.chat.ChatMessageManager; @@ -42,8 +41,9 @@ import net.runelite.client.chat.ChatboxInputListener; import net.runelite.client.chat.CommandManager; import net.runelite.client.chat.QueuedMessage; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ChatboxInput; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.events.PrivateMessageInput; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -72,16 +72,11 @@ public class TwitchPlugin extends Plugin implements TwitchListener, ChatboxInput @Inject private CommandManager commandManager; - @Inject - private EventBus eventBus; - private TwitchIRCClient twitchIRCClient; @Override protected void startUp() { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - connect(); commandManager.register(this); } @@ -89,8 +84,6 @@ public class TwitchPlugin extends Plugin implements TwitchListener, ChatboxInput @Override protected void shutDown() { - eventBus.unregister(this); - if (twitchIRCClient != null) { twitchIRCClient.close(); @@ -156,6 +149,7 @@ public class TwitchPlugin extends Plugin implements TwitchListener, ChatboxInput } } + @Subscribe private void onConfigChanged(ConfigChanged configChanged) { if (!configChanged.getGroup().equals("twitch")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/vetion/VetionPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/vetion/VetionPlugin.java index 3207e576bb..75b8d4ddeb 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/vetion/VetionPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/vetion/VetionPlugin.java @@ -29,11 +29,12 @@ import java.util.HashMap; import java.util.Map; import javax.inject.Inject; import javax.inject.Singleton; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.Actor; import net.runelite.api.AnimationID; import net.runelite.api.events.AnimationChanged; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.PluginType; @@ -56,16 +57,12 @@ public class VetionPlugin extends Plugin @Inject private VetionOverlay overlay; - @Inject - private EventBus eventBus; - - @Getter + @Getter(AccessLevel.PACKAGE) private Map vetions; @Override protected void startUp() { - eventBus.subscribe(AnimationChanged.class, this, this::onAnimationChanged); vetions = new HashMap<>(); overlayManager.add(overlay); @@ -78,6 +75,7 @@ public class VetionPlugin extends Plugin vetions = null; } + @Subscribe private void onAnimationChanged(AnimationChanged event) { if (event.getActor().getAnimation() == AnimationID.VETION_EARTHQUAKE) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/virtuallevels/SkillModel.java b/runelite-client/src/main/java/net/runelite/client/plugins/virtuallevels/SkillModel.java new file mode 100644 index 0000000000..dceeccde42 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/virtuallevels/SkillModel.java @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2018, Magic fTail + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.client.plugins.virtuallevels; + +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.ListMultimap; +import java.util.List; +import lombok.Getter; +import net.runelite.api.ModelID; +import net.runelite.api.Skill; + +@Getter +public enum SkillModel +{ + CONSTRUCTION1(Skill.CONSTRUCTION, ModelID.HAMMER, 10, 14, 669, 15, 0, 329), + CONSTRUCTION2(Skill.CONSTRUCTION, ModelID.SAW, 11, 14, 615, 111, 0, 451), + COOKING(Skill.COOKING, ModelID.COOKING_SKILL_MODEL, 31, 59, 169, 1593, 0, 963), + CRAFTING1(Skill.CRAFTING, ModelID.HAMMER, 30, 24, 418, 14, 0, 496), + CRAFTING2(Skill.CRAFTING, ModelID.CHISEL, 39, 45, 353, 18, 0, 400), + DEFENCE(Skill.DEFENCE, ModelID.STEEL_KITESHIELD, 34, 37, 337, 1074, 0, 598), + FARMING(Skill.FARMING, ModelID.WATERING_CAN, 31, 52, 118, 1278, 0, 451), + FIREMAKING(Skill.FIREMAKING, ModelID.FIREMAKING_SKILL_MODEL, 29, 55, 115, 1689, 0, 771), + FISHING(Skill.FISHING, ModelID.RAW_TUNA, 33, 30, 351, 1865, 0, 517), + FLETCHING1(Skill.FLETCHING, ModelID.STEEL_ARROW, 43, 19, 254, 1257, 0, 408), + FLETCHING2(Skill.FLETCHING, ModelID.STEEL_ARROW, 46, 44, 223, 177, 0, 444), + HERBLORE(Skill.HERBLORE, ModelID.CLEAN_HERB, 20, 35, 550, 2024, 0, 344), + HITPOINTS(Skill.HITPOINTS, ModelID.HEARTH, 35, 58, 538, 0, 0, 250), + MAGIC(Skill.MAGIC, ModelID.BLUE_WIZARD_HAT, 29, 50, 131, 1913, 0, 344), + MINING(Skill.MINING, ModelID.STEEL_PICKAXE, 38, 33, 292, 1166, 0, 413), + PRAYER(Skill.PRAYER, ModelID.PRAYER_SKILL_MODEL, 29, 27, 582, 504, 0, 505), + RANGED1(Skill.RANGED, ModelID.STEEL_ARROW, 28, 34, 206, 195, 0, 405), + RANGED2(Skill.RANGED, ModelID.SHORTBOW, 42, 17, 422, 1618, 0, 397), + RUNECRAFT(Skill.RUNECRAFT, ModelID.PURE_ESSENCE, 35, 38, 242, 1979, 0, 328), + SLAYER(Skill.SLAYER, ModelID.SLAYER_SKILL_MODEL, 34, 60, 221, 1944, 0, 649), + SMITHING(Skill.SMITHING, ModelID.ANVIL, 34, 53, 97, 1868, 0, 716), + STRENGTH(Skill.STRENGTH, ModelID.STRENGTH_SKILL_MODEL, 35, 23, 512, 14, 0, 631), + AGILITY(Skill.AGILITY, ModelID.AGILITY_SKILL_MODEL, 29, 29, 533, 2040, 0, 685), + THIEVING(Skill.THIEVING, ModelID.HIGHWAYMAN_MASK, 42, 31, 366, 55, 0, 155), + WOODCUTTING(Skill.WOODCUTTING, ModelID.WILLOW_TREE, 20, 69, 116, 1978, 0, 1800), + ATTACK1(Skill.ATTACK, ModelID.STEEL_SWORD, 65, 38, 234, 148, 0, 444), + ATTACK2(Skill.ATTACK, ModelID.STEEL_LONGSWORD, 27, 29, 198, 1419, 0, 330), + HUNTER(Skill.HUNTER, ModelID.FOOTPRINT, 45, 48, 512, 0, 0, 1000); + + private static final ListMultimap skillModels = ArrayListMultimap.create(); + + private final Skill skill; + private final int modelID; + private final int originalX; + private final int originalY; + private final int rotationX; + private final int rotationY; + private final int rotationZ; + private final int modelZoom; + + SkillModel(Skill skill, int modelID, int originalX, int originalY, int rotationX, int rotationY, int rotationZ, int modelZoom) + { + this.skill = skill; + this.modelID = modelID; + this.originalX = originalX; + this.originalY = originalY; + this.rotationX = rotationX; + this.rotationY = rotationY; + this.rotationZ = rotationZ; + this.modelZoom = modelZoom; + } + + static + { + for (SkillModel skillModel : values()) + { + skillModels.put(skillModel.skill, skillModel); + } + } + + public static List getSkillModels(Skill skill) + { + return skillModels.get(skill); + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/virtuallevels/VirtualLevelsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/virtuallevels/VirtualLevelsConfig.java index 83bacd8b8f..9028bc6fe7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/virtuallevels/VirtualLevelsConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/virtuallevels/VirtualLevelsConfig.java @@ -31,11 +31,22 @@ import net.runelite.client.config.ConfigItem; @ConfigGroup("virtuallevels") public interface VirtualLevelsConfig extends Config { + @ConfigItem( + keyName = "virtualMessage", + name = "Enable level up message for virtual levels", + description = "Configures whether or not to show level up messages for virtual levels", + position = 0 + ) + default boolean virtualMessage() + { + return true; + } + @ConfigItem( keyName = "virtualTotalLevel", name = "Virtual Total Level", description = "Count virtual levels towards total level", - position = 0 + position = 1 ) default boolean virtualTotalLevel() { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/virtuallevels/VirtualLevelsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/virtuallevels/VirtualLevelsPlugin.java index 902c695b67..f054a037a9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/virtuallevels/VirtualLevelsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/virtuallevels/VirtualLevelsPlugin.java @@ -1,6 +1,7 @@ /* * Copyright (c) 2018, Joshua Filby * Copyright (c) 2018, Jordan Atwood + * Copyright (c) 2018, Magic fTail * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -26,17 +27,40 @@ package net.runelite.client.plugins.virtuallevels; import com.google.inject.Provides; +import java.awt.event.KeyEvent; +import java.util.ArrayList; +import java.util.EnumMap; +import java.util.List; +import java.util.Map; import javax.inject.Inject; import javax.inject.Singleton; import net.runelite.api.Client; import net.runelite.api.Experience; +import net.runelite.api.FontID; +import net.runelite.api.GameState; +import net.runelite.api.ScriptID; import net.runelite.api.Skill; -import net.runelite.client.events.ConfigChanged; +import net.runelite.api.events.GameStateChanged; +import net.runelite.api.events.GameTick; import net.runelite.api.events.ScriptCallbackEvent; +import net.runelite.api.events.StatChanged; +import net.runelite.api.events.WidgetLoaded; +import net.runelite.api.widgets.JavaScriptCallback; +import net.runelite.api.widgets.Widget; +import net.runelite.api.widgets.WidgetID; +import net.runelite.api.widgets.WidgetInfo; +import net.runelite.api.widgets.WidgetPositionMode; +import net.runelite.api.widgets.WidgetSizeMode; +import net.runelite.api.widgets.WidgetTextAlignment; +import net.runelite.api.widgets.WidgetType; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.events.PluginChanged; +import net.runelite.client.input.KeyListener; +import net.runelite.client.input.KeyManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -47,9 +71,14 @@ import net.runelite.client.plugins.PluginDescriptor; enabledByDefault = false ) @Singleton -public class VirtualLevelsPlugin extends Plugin +public class VirtualLevelsPlugin extends Plugin implements KeyListener { private static final String TOTAL_LEVEL_TEXT_PREFIX = "Total level:
"; + private static final int X_OFFSET = 13; + private static final int Y_OFFSET = 16; + + private final Map previousXpMap = new EnumMap<>(Skill.class); + private final List skillsLeveledUp = new ArrayList<>(); @Inject private VirtualLevelsConfig config; @@ -63,6 +92,13 @@ public class VirtualLevelsPlugin extends Plugin @Inject private EventBus eventBus; + @Inject + private KeyManager keyManager; + + private boolean loginTick = false; + private boolean closeMessage; + private boolean messageOpen; + @Provides VirtualLevelsConfig provideConfig(ConfigManager configManager) { @@ -70,31 +106,25 @@ public class VirtualLevelsPlugin extends Plugin } - @Override - protected void startUp() throws Exception - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(PluginChanged.class, this, this::onPluginChanged); - eventBus.subscribe(ScriptCallbackEvent.class, this, this::onScriptCallbackEvent); - } - @Override protected void shutDown() { - eventBus.unregister(this); - clientThread.invoke(this::simulateSkillChange); + keyManager.unregisterKeyListener(this); } + @Subscribe private void onPluginChanged(PluginChanged pluginChanged) { // this is guaranteed to be called after the plugin has been registered by the eventbus. startUp is not. if (pluginChanged.getPlugin() == this) { + keyManager.registerKeyListener(this); clientThread.invoke(this::simulateSkillChange); } } + @Subscribe private void onConfigChanged(ConfigChanged configChanged) { if (!configChanged.getGroup().equals("virtuallevels")) @@ -105,6 +135,7 @@ public class VirtualLevelsPlugin extends Plugin clientThread.invoke(this::simulateSkillChange); } + @Subscribe private void onScriptCallbackEvent(ScriptCallbackEvent e) { final String eventName = e.getEventName(); @@ -161,4 +192,226 @@ public class VirtualLevelsPlugin extends Plugin } } } + + private void buildVirtualLevelUp(Skill skill) + { + Widget chatboxContainer = client.getWidget(WidgetInfo.CHATBOX_CONTAINER); + + if (chatboxContainer == null) + { + return; + } + + String skillName = skill.getName(); + int skillLevel = Experience.getLevelForXp(client.getSkillExperience(skill)); + List skillModels = SkillModel.getSkillModels(skill); + String prefix = (skill == Skill.AGILITY || skill == Skill.ATTACK) ? "an " : "a "; + + Widget levelUpLevel = chatboxContainer.createChild(-1, WidgetType.TEXT); + Widget levelUpText = chatboxContainer.createChild(-1, WidgetType.TEXT); + Widget levelUpContinue = chatboxContainer.createChild(-1, WidgetType.TEXT); + + levelUpLevel.setText("Congratulations, you just advanced " + prefix + skillName + " level."); + levelUpLevel.setTextColor(0x000080); + levelUpLevel.setFontId(FontID.QUILL_8); + levelUpLevel.setXPositionMode(WidgetPositionMode.ABSOLUTE_TOP); + levelUpLevel.setOriginalX(73 + X_OFFSET); + levelUpLevel.setYPositionMode(WidgetPositionMode.ABSOLUTE_TOP); + levelUpLevel.setOriginalY(15 + Y_OFFSET); + levelUpLevel.setOriginalWidth(390); + levelUpLevel.setOriginalHeight(30); + levelUpLevel.setXTextAlignment(WidgetTextAlignment.CENTER); + levelUpLevel.setYTextAlignment(WidgetTextAlignment.LEFT); + levelUpLevel.setWidthMode(WidgetSizeMode.ABSOLUTE); + levelUpLevel.revalidate(); + + levelUpText.setText((skill == Skill.HITPOINTS ? "Your Hitpoints are now " + skillLevel : + "Your " + skillName + " level is now " + skillLevel) + "."); + levelUpText.setFontId(FontID.QUILL_8); + levelUpText.setXPositionMode(WidgetPositionMode.ABSOLUTE_TOP); + levelUpText.setOriginalX(73 + X_OFFSET); + levelUpText.setYPositionMode(WidgetPositionMode.ABSOLUTE_TOP); + levelUpText.setOriginalY(44 + Y_OFFSET); + levelUpText.setOriginalWidth(390); + levelUpText.setOriginalHeight(30); + levelUpText.setXTextAlignment(WidgetTextAlignment.CENTER); + levelUpText.setYTextAlignment(WidgetTextAlignment.LEFT); + levelUpText.setWidthMode(WidgetSizeMode.ABSOLUTE); + levelUpText.revalidate(); + + levelUpContinue.setText("Click here to continue"); + levelUpContinue.setTextColor(0x0000ff); + levelUpContinue.setFontId(FontID.QUILL_8); + levelUpContinue.setXPositionMode(WidgetPositionMode.ABSOLUTE_TOP); + levelUpContinue.setOriginalX(73 + X_OFFSET); + levelUpContinue.setYPositionMode(WidgetPositionMode.ABSOLUTE_TOP); + levelUpContinue.setOriginalY(74 + Y_OFFSET); + levelUpContinue.setOriginalWidth(390); + levelUpContinue.setOriginalHeight(17); + levelUpContinue.setXTextAlignment(WidgetTextAlignment.CENTER); + levelUpContinue.setYTextAlignment(WidgetTextAlignment.LEFT); + levelUpContinue.setWidthMode(WidgetSizeMode.ABSOLUTE); + levelUpContinue.setAction(0, "Continue"); + levelUpContinue.setOnOpListener((JavaScriptCallback) ev -> closeNextTick()); + levelUpContinue.setOnMouseOverListener((JavaScriptCallback) ev -> levelUpContinue.setTextColor(0xFFFFFF)); + levelUpContinue.setOnMouseLeaveListener((JavaScriptCallback) ev -> levelUpContinue.setTextColor(0x0000ff)); + levelUpContinue.setHasListener(true); + levelUpContinue.revalidate(); + + for (SkillModel skillModel : skillModels) + { + buildWidgetModel(chatboxContainer, skillModel); + } + + messageOpen = true; + } + + private void buildWidgetModel(Widget chatboxContainer, SkillModel model) + { + int iconWidth = 32; + int iconHeight = 32; + + if (model.getSkill() == Skill.CONSTRUCTION) + { + iconWidth = 49; + iconHeight = 61; + } + + Widget levelUpModel = chatboxContainer.createChild(-1, WidgetType.MODEL); + + levelUpModel.setModelId(model.getModelID()); + levelUpModel.setXPositionMode(WidgetPositionMode.ABSOLUTE_TOP); + levelUpModel.setOriginalX(model.getOriginalX() + X_OFFSET); + levelUpModel.setYPositionMode(WidgetPositionMode.ABSOLUTE_TOP); + levelUpModel.setOriginalY(model.getOriginalY() + Y_OFFSET); + levelUpModel.setOriginalWidth(iconWidth); + levelUpModel.setOriginalHeight(iconHeight); + levelUpModel.setRotationX(model.getRotationX()); + levelUpModel.setRotationY(model.getRotationY()); + levelUpModel.setRotationZ(model.getRotationZ()); + levelUpModel.setModelZoom(model.getModelZoom()); + levelUpModel.revalidate(); + } + + private void closeNextTick() + { + if (!messageOpen) + { + return; + } + + Widget levelUpContinue = client.getWidget(WidgetInfo.CHATBOX_CONTAINER).getChild(2); + + levelUpContinue.setText("Please wait..."); + + messageOpen = false; + closeMessage = true; + } + + @Subscribe + public void onGameStateChanged(GameStateChanged event) + { + if (event.getGameState() == GameState.LOGIN_SCREEN) + { + loginTick = true; + return; + } + + if (event.getGameState() != GameState.LOGGED_IN) + { + return; + } + + for (Skill skill : Skill.values()) + { + previousXpMap.put(skill, client.getSkillExperience(skill)); + } + } + + @Subscribe + public void onStatChanged(StatChanged event) + { + Skill skill = event.getSkill(); + + int xpAfter = client.getSkillExperience(skill); + int levelAfter = Experience.getLevelForXp(xpAfter); + + int xpBefore = previousXpMap.get(skill); + int levelBefore = Experience.getLevelForXp(xpBefore); + + previousXpMap.put(skill, xpAfter); + + if (!config.virtualMessage() || levelAfter < 100 || levelBefore >= levelAfter) + { + return; + } + + if (!loginTick) + { + skillsLeveledUp.add(skill); + } + } + + @Subscribe + public void onGameTick(GameTick event) + { + loginTick = false; + + if (closeMessage) + { + clientThread.invoke(() -> client.runScript( + ScriptID.MESSAGE_LAYER_CLOSE, + 1, + 1 + )); + + closeMessage = false; + } + + if (skillsLeveledUp.isEmpty()) + { + return; + } + + Widget chatboxContainer = client.getWidget(WidgetInfo.CHATBOX_CONTAINER); + + if (chatboxContainer != null && !chatboxContainer.isHidden()) + { + return; + } + + Skill skill = skillsLeveledUp.get(0); + + skillsLeveledUp.remove(skill); + + clientThread.invoke(() -> client.runScript(ScriptID.MESSAGE_LAYER_OPEN)); + clientThread.invoke(() -> buildVirtualLevelUp(skill)); + WidgetLoaded widgetLoaded = new WidgetLoaded(); + widgetLoaded.setGroupId(WidgetID.CHATBOX_GROUP_ID); + eventBus.post(WidgetLoaded.class, widgetLoaded); + } + + @Override + public void keyTyped(KeyEvent e) + { + if (e.getKeyChar() != ' ') + { + return; + } + + if (messageOpen) + { + closeNextTick(); + } + } + + @Override + public void keyPressed(KeyEvent e) + { + } + + @Override + public void keyReleased(KeyEvent e) + { + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/vorkath/AcidPathOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/vorkath/AcidPathOverlay.java index f3827fe4b1..027d636c5b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/vorkath/AcidPathOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/vorkath/AcidPathOverlay.java @@ -70,7 +70,7 @@ public class AcidPathOverlay extends Overlay } if (plugin.isIndicateAcidPools() && plugin.getAcidSpots() != null - && !plugin.getAcidSpots().isEmpty()) + && !plugin.getAcidSpots().isEmpty()) { for (WorldPoint acidWorldPoint : plugin.getAcidSpots()) { @@ -80,12 +80,12 @@ public class AcidPathOverlay extends Overlay continue; } OverlayUtil.renderPolygon(graphics, Perspective.getCanvasTilePoly(client, - acidLocalPoint), ACID_SPOTS_COLOR); + acidLocalPoint), ACID_SPOTS_COLOR); } } if (plugin.isIndicateAcidFreePath() && plugin.getAcidFreePath() != null - && !plugin.getAcidFreePath().isEmpty()) + && !plugin.getAcidFreePath().isEmpty()) { for (WorldPoint acidFreeWorldPoint : plugin.getAcidFreePath()) { @@ -96,12 +96,12 @@ public class AcidPathOverlay extends Overlay } OverlayUtil.renderPolygon(graphics, Perspective.getCanvasTilePoly(client, - acidFreeLocalPoint), ACID_FREE_PATH_COLOR); + acidFreeLocalPoint), ACID_FREE_PATH_COLOR); } } if (plugin.isIndicateWooxWalkPath() && plugin.getWooxWalkPath()[0] != null - && plugin.getWooxWalkPath()[1] != null) + && plugin.getWooxWalkPath()[1] != null) { LocalPoint attackLocalPoint = LocalPoint.fromWorld(client, plugin.getWooxWalkPath()[0]); LocalPoint outOfReachLocalPoint = LocalPoint.fromWorld(client, plugin.getWooxWalkPath()[1]); @@ -117,22 +117,22 @@ public class AcidPathOverlay extends Overlay && plugin.getWooxWalkTimer() != -1) { int[] xpointsAttack = { - (int) (plugin.getWooxWalkBar().getX() + plugin.getWooxWalkBar().getWidth() / 2.0 + 1), - (int) (plugin.getWooxWalkBar().getX() + plugin.getWooxWalkBar().getWidth()), - (int) (plugin.getWooxWalkBar().getX() + plugin.getWooxWalkBar().getWidth()), - (int) (plugin.getWooxWalkBar().getX() + plugin.getWooxWalkBar().getWidth() / 2 + 1) + (int) (plugin.getWooxWalkBar().getX() + plugin.getWooxWalkBar().getWidth() / 2.0 + 1), + (int) (plugin.getWooxWalkBar().getX() + plugin.getWooxWalkBar().getWidth()), + (int) (plugin.getWooxWalkBar().getX() + plugin.getWooxWalkBar().getWidth()), + (int) (plugin.getWooxWalkBar().getX() + plugin.getWooxWalkBar().getWidth() / 2 + 1) }; int[] xpointsOutOfReach = { - (int) plugin.getWooxWalkBar().getX(), - (int) (plugin.getWooxWalkBar().getX() + plugin.getWooxWalkBar().getWidth() / 2.0), - (int) (plugin.getWooxWalkBar().getX() + plugin.getWooxWalkBar().getWidth() / 2.0), - (int) plugin.getWooxWalkBar().getX() + (int) plugin.getWooxWalkBar().getX(), + (int) (plugin.getWooxWalkBar().getX() + plugin.getWooxWalkBar().getWidth() / 2.0), + (int) (plugin.getWooxWalkBar().getX() + plugin.getWooxWalkBar().getWidth() / 2.0), + (int) plugin.getWooxWalkBar().getX() }; int[] ypointsBoth = { - (int) plugin.getWooxWalkBar().getY(), - (int) plugin.getWooxWalkBar().getY(), - (int) (plugin.getWooxWalkBar().getY() + plugin.getWooxWalkBar().getHeight()), - (int) (plugin.getWooxWalkBar().getY() + plugin.getWooxWalkBar().getHeight()) + (int) plugin.getWooxWalkBar().getY(), + (int) plugin.getWooxWalkBar().getY(), + (int) (plugin.getWooxWalkBar().getY() + plugin.getWooxWalkBar().getHeight()), + (int) (plugin.getWooxWalkBar().getY() + plugin.getWooxWalkBar().getHeight()) }; Polygon wooxWalkAttack = new Polygon(xpointsAttack, ypointsBoth, 4); Polygon wooxWalkOutOfReach = new Polygon(xpointsOutOfReach, ypointsBoth, 4); @@ -153,14 +153,14 @@ public class AcidPathOverlay extends Overlay int progress = (int) Math.round(plugin.getWooxWalkBar().getWidth() * timeScale); int[] xpointsIndicator = { - (int) (plugin.getWooxWalkBar().getX() - plugin.getWooxWalkBar().getHeight() / 2 + progress), - (int) (plugin.getWooxWalkBar().getX() + plugin.getWooxWalkBar().getHeight() / 2 + progress), - (int) plugin.getWooxWalkBar().getX() + progress + (int) (plugin.getWooxWalkBar().getX() - plugin.getWooxWalkBar().getHeight() / 2 + progress), + (int) (plugin.getWooxWalkBar().getX() + plugin.getWooxWalkBar().getHeight() / 2 + progress), + (int) plugin.getWooxWalkBar().getX() + progress }; int[] ypointsIndicator = { - (int) (plugin.getWooxWalkBar().getY() - plugin.getWooxWalkBar().getHeight() - BAR_INDICATOR_SPACER), - (int) (plugin.getWooxWalkBar().getY() - plugin.getWooxWalkBar().getHeight() - BAR_INDICATOR_SPACER), - (int) (plugin.getWooxWalkBar().getY() - BAR_INDICATOR_SPACER) + (int) (plugin.getWooxWalkBar().getY() - plugin.getWooxWalkBar().getHeight() - BAR_INDICATOR_SPACER), + (int) (plugin.getWooxWalkBar().getY() - plugin.getWooxWalkBar().getHeight() - BAR_INDICATOR_SPACER), + (int) (plugin.getWooxWalkBar().getY() - BAR_INDICATOR_SPACER) }; Polygon indicator = new Polygon(xpointsIndicator, ypointsIndicator, 3); OverlayUtil.renderPolygon(graphics, indicator, Color.WHITE); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/vorkath/VorkathPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/vorkath/VorkathPlugin.java index 8c0e589b10..d3a4a0943d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/vorkath/VorkathPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/vorkath/VorkathPlugin.java @@ -57,7 +57,7 @@ import net.runelite.api.events.ProjectileSpawned; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -80,31 +80,41 @@ public class VorkathPlugin extends Plugin @Inject private Client client; + @Inject private OverlayManager overlayManager; + @Inject private VorkathOverlay overlay; + @Inject private AcidPathOverlay acidPathOverlay; + @Inject private VorkathConfig config; - @Inject - private EventBus eventBus; + @Getter(AccessLevel.PACKAGE) private Vorkath vorkath; + @Getter(AccessLevel.PACKAGE) private NPC zombifiedSpawn; + @Getter(AccessLevel.PACKAGE) private List acidSpots = new ArrayList<>(); + @Getter(AccessLevel.PACKAGE) private List acidFreePath = new ArrayList<>(); + @Getter(AccessLevel.PACKAGE) private WorldPoint[] wooxWalkPath = new WorldPoint[2]; + @Getter(AccessLevel.PACKAGE) private long wooxWalkTimer = -1; + @Getter(AccessLevel.PACKAGE) private Rectangle wooxWalkBar; private int lastAcidSpotsSize = 0; + // Config values @Getter(AccessLevel.PACKAGE) private boolean indicateAcidPools; @@ -125,7 +135,6 @@ public class VorkathPlugin extends Plugin @Override protected void startUp() { - addSubscriptions(); updateConfig(); } @@ -135,20 +144,7 @@ public class VorkathPlugin extends Plugin reset(); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(NpcSpawned.class, this, this::onNpcSpawned); - eventBus.subscribe(NpcDespawned.class, this, this::onNpcDespawned); - eventBus.subscribe(ProjectileMoved.class, this, this::onProjectileMoved); - eventBus.subscribe(ProjectileSpawned.class, this, this::onProjectileSpawned); - eventBus.subscribe(AnimationChanged.class, this, this::onAnimationChanged); - eventBus.subscribe(GameObjectSpawned.class, this, this::onGameObjectSpawned); - eventBus.subscribe(GameObjectDespawned.class, this, this::onGameObjectDespawned); - eventBus.subscribe(ClientTick.class, this, this::onClientTick); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - } - + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("vorkath")) @@ -159,6 +155,7 @@ public class VorkathPlugin extends Plugin updateConfig(); } + @Subscribe private void onNpcSpawned(NpcSpawned event) { if (!isAtVorkath()) @@ -184,6 +181,7 @@ public class VorkathPlugin extends Plugin } } + @Subscribe private void onNpcDespawned(NpcDespawned event) { if (!isAtVorkath()) @@ -208,6 +206,7 @@ public class VorkathPlugin extends Plugin } } + @Subscribe private void onProjectileSpawned(ProjectileSpawned event) { if (!isAtVorkath() || vorkath == null) @@ -250,6 +249,7 @@ public class VorkathPlugin extends Plugin } } + @Subscribe private void onProjectileMoved(ProjectileMoved event) { if (!isAtVorkath()) @@ -266,6 +266,7 @@ public class VorkathPlugin extends Plugin } } + @Subscribe private void onGameObjectSpawned(GameObjectSpawned event) { if (!isAtVorkath()) @@ -281,6 +282,7 @@ public class VorkathPlugin extends Plugin } } + @Subscribe private void onGameObjectDespawned(GameObjectDespawned event) { if (!isAtVorkath()) @@ -296,6 +298,7 @@ public class VorkathPlugin extends Plugin } } + @Subscribe private void onAnimationChanged(AnimationChanged event) { if (!isAtVorkath()) @@ -321,6 +324,7 @@ public class VorkathPlugin extends Plugin } } + @Subscribe private void onGameTick(GameTick event) { if (!isAtVorkath()) @@ -362,6 +366,7 @@ public class VorkathPlugin extends Plugin } } + @Subscribe private void onClientTick(ClientTick event) { if (acidSpots.size() != lastAcidSpotsSize) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/warindicators/WarIndicatorPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/warindicators/WarIndicatorPlugin.java index fb3a98911e..0f8b980d70 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/warindicators/WarIndicatorPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/warindicators/WarIndicatorPlugin.java @@ -36,7 +36,7 @@ import static net.runelite.api.MenuOpcode.*; import net.runelite.api.Player; import net.runelite.api.events.MenuEntryAdded; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -69,9 +69,6 @@ public class WarIndicatorPlugin extends Plugin @Inject private Client client; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) private boolean highLightCallers; @Getter(AccessLevel.PACKAGE) @@ -100,29 +97,22 @@ public class WarIndicatorPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); overlayManager.add(warIndicatorOverlay); overlayManager.add(warIndicatorMiniMapOverlay); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); overlayManager.remove(warIndicatorOverlay); overlayManager.remove(warIndicatorMiniMapOverlay); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(MenuEntryAdded.class, this, this::onMenuEntryAdded); - } - + @Subscribe private void onMenuEntryAdded(MenuEntryAdded onMenuEntryAdded) { int type = onMenuEntryAdded.getOpcode(); @@ -194,6 +184,7 @@ public class WarIndicatorPlugin extends Plugin } } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (event.getGroup().equals("warIndicators")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/whalewatchers/WhaleWatchersConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/whalewatchers/WhaleWatchersConfig.java index 04051c049d..6e3ec4863c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/whalewatchers/WhaleWatchersConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/whalewatchers/WhaleWatchersConfig.java @@ -65,7 +65,7 @@ public interface WhaleWatchersConfig extends Config @ConfigItem( position = 5, - keyName = "pneckBreak", + keyName = "pneckBreak", name = "Phoenix Necklace Break Sound", description = "play a sound notification when your phoenix necklace breaks" ) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/whalewatchers/WhaleWatchersPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/whalewatchers/WhaleWatchersPlugin.java index 9d5769fee2..df4d62cb97 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/whalewatchers/WhaleWatchersPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/whalewatchers/WhaleWatchersPlugin.java @@ -38,7 +38,7 @@ import net.runelite.api.events.MenuOptionClicked; import net.runelite.api.events.VarbitChanged; import net.runelite.api.kit.KitType; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.events.OverlayMenuClicked; import net.runelite.client.game.Sound; @@ -60,29 +60,36 @@ import org.apache.commons.lang3.ObjectUtils; @Singleton public class WhaleWatchersPlugin extends Plugin { + private static final String BROKEN_PNECK_MESSAGE = "Your phoenix necklace heals you, but is destroyed in the process."; boolean protectItemOverlay = false; int damageDone = 0; int damageTaken = 0; boolean inCombat = false; - private static final String BROKEN_PNECK_MESSAGE = "Your phoenix necklace heals you, but is destroyed in the process."; + @Inject private Client client; + @Inject private WhaleWatchersConfig config; + @Inject private WhaleWatchersOverlay overlay; + @Inject private WhaleWatchersProtOverlay whaleWatchersProtOverlay; + @Inject private WhaleWatchersSmiteableOverlay whaleWatchersSmiteableOverlay; + @Inject private WhaleWatchersGloryOverlay whaleWatchersGloryOverlay; + @Inject private OverlayManager overlayManager; + @Inject private SoundManager soundManager; - @Inject - private EventBus eventBus; + private int tickCountdown = 0; @Getter(AccessLevel.PACKAGE) private boolean displaySmiteOverlay; @@ -104,6 +111,7 @@ public class WhaleWatchersPlugin extends Plugin return configManager.getConfig(WhaleWatchersConfig.class); } + @Subscribe private void onOverlayMenuClicked(OverlayMenuClicked event) { if (event.getOverlay().equals(overlay) && event.getEntry().getOption().equals("Reset")) @@ -113,10 +121,9 @@ public class WhaleWatchersPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); overlayManager.add(overlay); overlayManager.add(whaleWatchersProtOverlay); @@ -125,9 +132,8 @@ public class WhaleWatchersPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); overlayManager.remove(overlay); overlayManager.remove(whaleWatchersProtOverlay); overlayManager.remove(whaleWatchersSmiteableOverlay); @@ -135,18 +141,7 @@ public class WhaleWatchersPlugin extends Plugin resetDamageCounter(); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(OverlayMenuClicked.class, this, this::onOverlayMenuClicked); - eventBus.subscribe(HitsplatApplied.class, this, this::onHitsplatApplied); - eventBus.subscribe(ItemContainerChanged.class, this, this::onItemContainerChanged); - eventBus.subscribe(MenuOptionClicked.class, this, this::onMenuOptionClicked); - eventBus.subscribe(VarbitChanged.class, this, this::onVarbitChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - } - + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("WhaleWatchers")) @@ -170,6 +165,7 @@ public class WhaleWatchersPlugin extends Plugin } } + @Subscribe private void onChatMessage(ChatMessage event) { if (this.pneckBreak && event.getType() == ChatMessageType.GAMEMESSAGE && event.getMessage().equals(BROKEN_PNECK_MESSAGE)) @@ -178,6 +174,7 @@ public class WhaleWatchersPlugin extends Plugin } } + @Subscribe private void onHitsplatApplied(HitsplatApplied event) { if (this.showDamageCounter) @@ -202,6 +199,7 @@ public class WhaleWatchersPlugin extends Plugin } } + @Subscribe private void onItemContainerChanged(ItemContainerChanged event) { if (this.gloryWarning && event.getItemContainer() == client.getItemContainer(InventoryID.EQUIPMENT)) @@ -216,6 +214,7 @@ public class WhaleWatchersPlugin extends Plugin } } + @Subscribe private void onMenuOptionClicked(MenuOptionClicked event) { if (this.showDamageCounter && event.getMenuOpcode().equals(MenuOpcode.SPELL_CAST_ON_PLAYER)) @@ -224,12 +223,13 @@ public class WhaleWatchersPlugin extends Plugin } } + @Subscribe private void onVarbitChanged(VarbitChanged event) { if (this.showDamageCounter && client.getVar(VarPlayer.ATTACKING_PLAYER) == -1 && inCombat) - { - tickCountdown = 10; - } + { + tickCountdown = 10; + } if (this.protectItemWarning) { @@ -264,6 +264,7 @@ public class WhaleWatchersPlugin extends Plugin } } + @Subscribe private void onGameTick(GameTick event) { if (this.showDamageCounter && tickCountdown > 0 && tickCountdown < 11) @@ -315,7 +316,7 @@ public class WhaleWatchersPlugin extends Plugin damageTaken = 0; damageDone = 0; } - + private void updateConfig() { this.protectItemWarning = config.protectItemWarning(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/wiki/WikiPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/wiki/WikiPlugin.java index 1327059ec8..3395c130bf 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/wiki/WikiPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/wiki/WikiPlugin.java @@ -50,7 +50,7 @@ import net.runelite.api.widgets.WidgetInfo; import net.runelite.api.widgets.WidgetPositionMode; import net.runelite.api.widgets.WidgetType; import net.runelite.client.callback.ClientThread; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.game.ItemManager; import net.runelite.client.game.SpriteManager; import net.runelite.client.game.chatbox.ChatboxPanelManager; @@ -101,9 +101,6 @@ public class WikiPlugin extends Plugin @Inject private Provider wikiSearchChatboxTextInputProvider; - @Inject - private EventBus eventBus; - private Widget icon; private boolean wikiSelected = false; @@ -111,7 +108,6 @@ public class WikiPlugin extends Plugin @Override public void startUp() { - addSubscriptions(); spriteManager.addSpriteOverrides(WikiSprite.values()); clientThread.invokeLater(this::addWidgets); @@ -120,8 +116,6 @@ public class WikiPlugin extends Plugin @Override public void shutDown() { - eventBus.unregister(this); - spriteManager.removeSpriteOverrides(WikiSprite.values()); clientThread.invokeLater(() -> { @@ -142,13 +136,7 @@ public class WikiPlugin extends Plugin }); } - private void addSubscriptions() - { - eventBus.subscribe(WidgetLoaded.class, this, this::onWidgetLoaded); - eventBus.subscribe(MenuOptionClicked.class, this, this::onMenuOptionClicked); - eventBus.subscribe(MenuEntryAdded.class, this, this::onMenuEntryAdded); - } - + @Subscribe private void onWidgetLoaded(WidgetLoaded l) { if (l.getGroupId() == WidgetID.MINIMAP_GROUP_ID) @@ -208,6 +196,7 @@ public class WikiPlugin extends Plugin } } + @Subscribe private void onMenuOptionClicked(MenuOptionClicked ev) { optarget: @@ -346,6 +335,7 @@ public class WikiPlugin extends Plugin return w; } + @Subscribe private void onMenuEntryAdded(MenuEntryAdded event) { int widgetIndex = event.getParam0(); @@ -362,9 +352,7 @@ public class WikiPlugin extends Plugin // plugin might have added something on this same event, and we probably shouldn't remove that instead MenuEntry[] oldEntries = menuEntries; menuEntries = Arrays.copyOf(menuEntries, menuEntries.length - 1); - for (int ourEntry = oldEntries.length - 1; - ourEntry >= 2 && oldEntries[oldEntries.length - 1].getOpcode() != MenuOpcode.SPELL_CAST_ON_WIDGET.getId(); - ourEntry--) + for (int ourEntry = oldEntries.length - 1; ourEntry >= 2 && oldEntries[oldEntries.length - 1].getOpcode() != MenuOpcode.SPELL_CAST_ON_WIDGET.getId(); ourEntry--) { menuEntries[ourEntry - 1] = oldEntries[ourEntry]; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/wiki/WikiSearchChatboxTextInput.java b/runelite-client/src/main/java/net/runelite/client/plugins/wiki/WikiSearchChatboxTextInput.java index 9ca40b627b..78b6113e23 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/wiki/WikiSearchChatboxTextInput.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/wiki/WikiSearchChatboxTextInput.java @@ -55,6 +55,7 @@ import okhttp3.Callback; import okhttp3.HttpUrl; import okhttp3.Request; import okhttp3.Response; +import org.jetbrains.annotations.NotNull; @Slf4j public class WikiSearchChatboxTextInput extends ChatboxTextInput @@ -124,21 +125,19 @@ public class WikiSearchChatboxTextInput extends ChatboxTextInput RuneLiteAPI.CLIENT.newCall(req).enqueue(new Callback() { @Override - public void onFailure(Call call, IOException e) + public void onFailure(@NotNull Call call, @NotNull IOException e) { log.warn("error searching wiki", e); } @Override - public void onResponse(Call call, Response response) throws IOException + public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { String body = response.body().string(); try { JsonArray jar = new JsonParser().parse(body).getAsJsonArray(); - List apredictions = gson.fromJson(jar.get(1), new TypeToken>() - { - }.getType()); + List apredictions = gson.fromJson(jar.get(1), new TypeToken>() {}.getType()); if (apredictions.size() > MAX_NUM_PREDICTIONS) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/wildernesslocations/WildernessLocationsMapOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/wildernesslocations/WildernessLocationsMapOverlay.java index 294943347b..037e1903ee 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/wildernesslocations/WildernessLocationsMapOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/wildernesslocations/WildernessLocationsMapOverlay.java @@ -56,6 +56,7 @@ public class WildernessLocationsMapOverlay extends Overlay /** * Draws the names of the wilderness WorldLocations on the World Map + * * @param graphics - Overlay graphics */ private void drawWildLocations(Graphics2D graphics) @@ -126,7 +127,7 @@ public class WildernessLocationsMapOverlay extends Overlay * @param worldPoint WorldPoint to get screen coordinates of * @return Point of screen coordinates of the center of the world point */ - public Point mapWorldPointToGraphicsPoint(WorldPoint worldPoint) + private Point mapWorldPointToGraphicsPoint(WorldPoint worldPoint) { RenderOverview ro = client.getRenderOverview(); @@ -135,7 +136,7 @@ public class WildernessLocationsMapOverlay extends Overlay return null; } - Float pixelsPerTile = ro.getWorldMapZoom(); + float pixelsPerTile = ro.getWorldMapZoom(); Widget map = client.getWidget(WidgetInfo.WORLD_MAP_VIEW); if (map != null) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/wildernesslocations/WildernessLocationsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/wildernesslocations/WildernessLocationsPlugin.java index f599a41428..d62adba23a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/wildernesslocations/WildernessLocationsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/wildernesslocations/WildernessLocationsPlugin.java @@ -9,7 +9,6 @@ package net.runelite.client.plugins.wildernesslocations; - import com.google.inject.Provides; import java.awt.Color; import javax.inject.Inject; @@ -30,7 +29,7 @@ import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; import net.runelite.client.config.Keybind; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.WorldLocation; import net.runelite.client.input.KeyManager; @@ -51,7 +50,6 @@ import net.runelite.client.util.HotkeyListener; @Singleton public class WildernessLocationsPlugin extends Plugin { - @Inject private Client client; @@ -61,10 +59,10 @@ public class WildernessLocationsPlugin extends Plugin @Inject private WildernessLocationsOverlay overlay = new WildernessLocationsOverlay(this); - @Getter + @Getter(AccessLevel.PACKAGE) private boolean renderLocation; - @Getter + @Getter(AccessLevel.PACKAGE) private String locationString = ""; @Inject @@ -76,9 +74,6 @@ public class WildernessLocationsPlugin extends Plugin @Inject private KeyManager keyManager; - @Inject - private EventBus eventBus; - @Inject private WildernessLocationsMapOverlay wildernessLocationsMapOverlay; @@ -99,13 +94,13 @@ public class WildernessLocationsPlugin extends Plugin private boolean drawOverlay; private boolean pvpWorld; private Keybind keybind; - @Getter + @Getter(AccessLevel.PACKAGE) private boolean worldMapNames; - @Getter + @Getter(AccessLevel.PACKAGE) private Color mapOverlayColor; - @Getter + @Getter(AccessLevel.PACKAGE) private boolean outlineLocations; - @Getter + @Getter(AccessLevel.PACKAGE) private boolean worldMapOverlay; @@ -116,9 +111,8 @@ public class WildernessLocationsPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { - addSubscriptions(); updateConfig(); @@ -138,13 +132,7 @@ public class WildernessLocationsPlugin extends Plugin this.worldMapOverlay = this.worldMapNames || this.outlineLocations; } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(VarClientStrChanged.class, this, this::onVarClientStrChanged); - } - + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("wildernesslocations")) @@ -156,15 +144,14 @@ public class WildernessLocationsPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(overlay); overlayManager.remove(wildernessLocationsMapOverlay); keyManager.unregisterKeyListener(hotkeyListener); } + @Subscribe private void onGameTick(GameTick event) { if (currentCooldown != 0) @@ -190,6 +177,7 @@ public class WildernessLocationsPlugin extends Plugin } } + @Subscribe private void onVarClientStrChanged(VarClientStrChanged varClient) { String newChat = client.getVar(VarClientStr.CHATBOX_TYPED_TEXT); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/wintertodt/WintertodtPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/wintertodt/WintertodtPlugin.java index dfba3b554e..ee679b0087 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/wintertodt/WintertodtPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/wintertodt/WintertodtPlugin.java @@ -53,7 +53,7 @@ import net.runelite.api.events.VarbitChanged; import net.runelite.client.Notifier; import net.runelite.client.chat.ChatMessageManager; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -93,9 +93,6 @@ public class WintertodtPlugin extends Plugin @Inject private ChatMessageManager chatMessageManager; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) private WintertodtActivity currentActivity = WintertodtActivity.IDLE; @@ -121,13 +118,11 @@ public class WintertodtPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { this.notifyCondition = config.notifyCondition(); this.damageNotificationColor = config.damageNotificationColor(); - addSubscriptions(); - reset(); overlayManager.add(overlay); } @@ -141,16 +136,7 @@ public class WintertodtPlugin extends Plugin reset(); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(VarbitChanged.class, this, this::onVarbitChanged); - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - eventBus.subscribe(AnimationChanged.class, this, this::onAnimationChanged); - eventBus.subscribe(ItemContainerChanged.class, this, this::onItemContainerChanged); - } - + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("wintertodt")) @@ -180,6 +166,7 @@ public class WintertodtPlugin extends Plugin return false; } + @Subscribe private void onGameTick(GameTick gameTick) { if (!isInWintertodtRegion()) @@ -204,6 +191,7 @@ public class WintertodtPlugin extends Plugin checkActionTimeout(); } + @Subscribe void onVarbitChanged(VarbitChanged varbitChanged) { int timerValue = client.getVar(Varbits.WINTERTODT_TIMER); @@ -250,6 +238,7 @@ public class WintertodtPlugin extends Plugin } } + @Subscribe private void onChatMessage(ChatMessage chatMessage) { if (!isInWintertodt) @@ -393,6 +382,7 @@ public class WintertodtPlugin extends Plugin notifier.notify(notification); } + @Subscribe private void onAnimationChanged(final AnimationChanged event) { if (!isInWintertodt) @@ -442,6 +432,7 @@ public class WintertodtPlugin extends Plugin } } + @Subscribe private void onItemContainerChanged(ItemContainerChanged event) { final ItemContainer container = event.getItemContainer(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/Axe.java b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/Axe.java index dfdf86f6f4..fd75fdd546 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/Axe.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/Axe.java @@ -29,28 +29,8 @@ import java.util.Map; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; -import static net.runelite.api.AnimationID.WOODCUTTING_3A_AXE; -import static net.runelite.api.AnimationID.WOODCUTTING_ADAMANT; -import static net.runelite.api.AnimationID.WOODCUTTING_BLACK; -import static net.runelite.api.AnimationID.WOODCUTTING_BRONZE; -import static net.runelite.api.AnimationID.WOODCUTTING_CRYSTAL; -import static net.runelite.api.AnimationID.WOODCUTTING_DRAGON; -import static net.runelite.api.AnimationID.WOODCUTTING_INFERNAL; -import static net.runelite.api.AnimationID.WOODCUTTING_IRON; -import static net.runelite.api.AnimationID.WOODCUTTING_MITHRIL; -import static net.runelite.api.AnimationID.WOODCUTTING_RUNE; -import static net.runelite.api.AnimationID.WOODCUTTING_STEEL; -import static net.runelite.api.ItemID.ADAMANT_AXE; -import static net.runelite.api.ItemID.BLACK_AXE; -import static net.runelite.api.ItemID.BRONZE_AXE; -import static net.runelite.api.ItemID.CRYSTAL_AXE; -import static net.runelite.api.ItemID.DRAGON_AXE; -import static net.runelite.api.ItemID.INFERNAL_AXE; -import static net.runelite.api.ItemID.IRON_AXE; -import static net.runelite.api.ItemID.MITHRIL_AXE; -import static net.runelite.api.ItemID.RUNE_AXE; -import static net.runelite.api.ItemID.STEEL_AXE; -import static net.runelite.api.ItemID._3RD_AGE_AXE; +import static net.runelite.api.AnimationID.*; +import static net.runelite.api.ItemID.*; @AllArgsConstructor @Getter(AccessLevel.PACKAGE) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/Tree.java b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/Tree.java index dfb670ac5a..b20ee110f8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/Tree.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/Tree.java @@ -25,23 +25,27 @@ package net.runelite.client.plugins.woodcutting; import com.google.common.collect.ImmutableMap; +import java.time.Duration; import java.util.Map; -import lombok.AccessLevel; +import javax.annotation.Nullable; import lombok.Getter; -import static net.runelite.api.ObjectID.REDWOOD; -import static net.runelite.api.ObjectID.REDWOOD_29670; +import static net.runelite.api.NullObjectID.NULL_10823; +import static net.runelite.api.NullObjectID.NULL_10835; +import net.runelite.api.ObjectID; +import static net.runelite.api.ObjectID.*; -@Getter(AccessLevel.PACKAGE) +@Getter enum Tree { - REDWOOD_TREE_SPAWN(REDWOOD, REDWOOD_29670); - - private final int[] treeIds; - - Tree(final int... treeIds) - { - this.treeIds = treeIds; - } + REGULAR_TREE(null, TREE, TREE_1277, TREE_1278, TREE_1279, TREE_1280), + OAK_TREE(Duration.ofMillis(8500), ObjectID.OAK_TREE, OAK_TREE_4540, OAK_10820), + WILLOW_TREE(Duration.ofMillis(8500), WILLOW, WILLOW_10833, WILLOW_10831), + MAPLE_TREE(Duration.ofSeconds(35), ObjectID.MAPLE_TREE, MAPLE_TREE_10832, MAPLE_TREE_36681), + TEAK_TREE(Duration.ofMillis(8500), TEAK, TEAK_36686), + MAHOGANY_TREE(Duration.ofMillis(8500), MAHOGANY, MAHOGANY_36688), + YEW_TREE(Duration.ofMinutes(1), YEW, NULL_10823, YEW_36683), + MAGIC_TREE(Duration.ofMinutes(2), MAGIC_TREE_10834, NULL_10835), + REDWOOD(Duration.ofMinutes(2), ObjectID.REDWOOD, REDWOOD_29670); private static final Map TREES; @@ -60,6 +64,16 @@ enum Tree TREES = builder.build(); } + @Nullable + private final Duration respawnTime; + private final int[] treeIds; + + Tree(@org.jetbrains.annotations.Nullable Duration respawnTime, int... treeIds) + { + this.respawnTime = respawnTime; + this.treeIds = treeIds; + } + static Tree findTree(int objectId) { return TREES.get(objectId); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RoomType.java b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/TreeRespawn.java similarity index 63% rename from runelite-client/src/main/java/net/runelite/client/plugins/raids/RoomType.java rename to runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/TreeRespawn.java index 1af29ead1f..a3022ca8f3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RoomType.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/TreeRespawn.java @@ -1,6 +1,6 @@ /* - * Copyright (c) 2018, Kamiel * Copyright (c) 2019, Adam + * Copyright (c) 2019, David * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -23,58 +23,24 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package net.runelite.client.plugins.raids; +package net.runelite.client.plugins.woodcutting; +import java.time.Instant; import lombok.AllArgsConstructor; import lombok.Getter; +import net.runelite.api.coords.LocalPoint; @AllArgsConstructor @Getter -enum RoomType +class TreeRespawn { - START("Start", '#'), - END("End", '¤'), - SCAVENGERS("Scavengers", 'S'), - FARMING("Farming", 'F'), - EMPTY("Empty", ' '), - COMBAT("Combat", 'C'), - PUZZLE("Puzzle", 'P'); + private final Tree tree; + private final LocalPoint location; + private final Instant startTime; + private final int respawnTime; - private final String name; - private final char code; - - RaidRoom getUnsolvedRoom() + boolean isExpired() { - switch (this) - { - case START: - return RaidRoom.START; - case END: - return RaidRoom.END; - case SCAVENGERS: - return RaidRoom.SCAVENGERS; - case FARMING: - return RaidRoom.FARMING; - case COMBAT: - return RaidRoom.UNKNOWN_COMBAT; - case PUZZLE: - return RaidRoom.UNKNOWN_PUZZLE; - case EMPTY: - default: - return RaidRoom.EMPTY; - } + return Instant.now().isAfter(startTime.plusMillis(respawnTime)); } - - static RoomType fromCode(char code) - { - for (RoomType type : values()) - { - if (type.getCode() == code) - { - return type; - } - } - - return EMPTY; - } -} \ No newline at end of file +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingConfig.java index 4c58fe4369..74c1f50830 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingConfig.java @@ -85,4 +85,15 @@ public interface WoodcuttingConfig extends Config { return false; } + + @ConfigItem( + position = 6, + keyName = "showRespawnTimers", + name = "Show respawn timers", + description = "Configures whether to display the respawn timer overlay" + ) + default boolean showRespawnTimers() + { + return true; + } } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingOverlay.java index b5c14fec6f..d01629003f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingOverlay.java @@ -43,7 +43,6 @@ import net.runelite.client.ui.overlay.components.TitleComponent; import net.runelite.client.ui.overlay.components.table.TableAlignment; import net.runelite.client.ui.overlay.components.table.TableComponent; - @Singleton class WoodcuttingOverlay extends Overlay { @@ -51,17 +50,18 @@ class WoodcuttingOverlay extends Overlay private final Client client; private final WoodcuttingPlugin plugin; + private final WoodcuttingConfig config; private final XpTrackerService xpTrackerService; private final PanelComponent panelComponent = new PanelComponent(); - @Inject - private WoodcuttingOverlay(final Client client, final WoodcuttingPlugin plugin, final XpTrackerService xpTrackerService) + private WoodcuttingOverlay(Client client, WoodcuttingPlugin plugin, WoodcuttingConfig config, XpTrackerService xpTrackerService) { super(plugin); setPosition(OverlayPosition.TOP_LEFT); this.client = client; this.plugin = plugin; + this.config = config; this.xpTrackerService = xpTrackerService; getMenuEntries().add(new OverlayMenuEntry(RUNELITE_OVERLAY_CONFIG, OPTION_CONFIGURE, "Woodcutting overlay")); getMenuEntries().add(new OverlayMenuEntry(RUNELITE_OVERLAY, WOODCUTTING_RESET, "Woodcutting overlay")); @@ -70,7 +70,7 @@ class WoodcuttingOverlay extends Overlay @Override public Dimension render(Graphics2D graphics) { - if (!plugin.isShowWoodcuttingStats()) + if (!config.showWoodcuttingStats()) { return null; } @@ -107,7 +107,7 @@ class WoodcuttingOverlay extends Overlay { tableComponent.addRow("Logs cut:", Integer.toString(actions)); - if (plugin.isShowGPEarned()) + if (config.showGPEarned()) { tableComponent.addRow("GP earned:", Integer.toString((plugin.getGpEarned()))); } @@ -123,5 +123,4 @@ class WoodcuttingOverlay extends Overlay return panelComponent.render(graphics); } - } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingPlugin.java index a9c2520eea..1ae325f534 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingPlugin.java @@ -27,16 +27,18 @@ package net.runelite.client.plugins.woodcutting; import com.google.inject.Provides; import java.time.Duration; import java.time.Instant; +import java.util.ArrayList; import java.util.HashSet; +import java.util.List; import java.util.Set; +import java.util.regex.Pattern; import javax.inject.Inject; -import javax.inject.Singleton; import lombok.AccessLevel; import lombok.Getter; +import lombok.extern.slf4j.Slf4j; import net.runelite.api.ChatMessageType; import net.runelite.api.Client; import net.runelite.api.GameObject; -import net.runelite.api.GameState; import net.runelite.api.ItemID; import net.runelite.api.MenuOpcode; import net.runelite.api.Player; @@ -49,8 +51,7 @@ import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; import net.runelite.client.Notifier; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; -import net.runelite.client.events.ConfigChanged; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.OverlayMenuClicked; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; @@ -63,12 +64,21 @@ import net.runelite.client.ui.overlay.OverlayMenuEntry; @PluginDescriptor( name = "Woodcutting", description = "Show woodcutting statistics and/or bird nest notifications", - tags = {"birds", "nest", "notifications", "overlay", "skilling", "wc"} + tags = {"birds", "nest", "notifications", "overlay", "skilling", "wc"}, + enabledByDefault = false ) -@Singleton @PluginDependency(XpTrackerPlugin.class) +@Slf4j public class WoodcuttingPlugin extends Plugin { + private static final Pattern WOOD_CUT_PATTERN = Pattern.compile("You get (?:some|an)[\\w ]+(?:logs?|mushrooms)\\."); + + @Getter + private final Set treeObjects = new HashSet<>(); + + @Getter(AccessLevel.PACKAGE) + private final List respawns = new ArrayList<>(); + @Inject private Notifier notifier; @@ -90,27 +100,13 @@ public class WoodcuttingPlugin extends Plugin @Inject private ItemManager itemManager; - @Inject - private EventBus eventBus; - - @Getter(AccessLevel.PACKAGE) + @Getter private WoodcuttingSession session; - @Getter(AccessLevel.PACKAGE) + @Getter private Axe axe; - @Getter(AccessLevel.PACKAGE) - private final Set treeObjects = new HashSet<>(); - - private int statTimeout; - private boolean showNestNotification; - @Getter(AccessLevel.PACKAGE) - private boolean showWoodcuttingStats; - @Getter(AccessLevel.PACKAGE) - private boolean showRedwoodTrees; - @Getter(AccessLevel.PACKAGE) - private boolean showGPEarned; - + private boolean recentlyLoggedIn; private int treeTypeID; @Getter(AccessLevel.PACKAGE) private int gpEarned; @@ -124,9 +120,6 @@ public class WoodcuttingPlugin extends Plugin @Override protected void startUp() throws Exception { - updateConfig(); - addSubscriptions(); - overlayManager.add(overlay); overlayManager.add(treesOverlay); } @@ -134,28 +127,15 @@ public class WoodcuttingPlugin extends Plugin @Override protected void shutDown() throws Exception { - eventBus.unregister(this); - overlayManager.remove(overlay); overlayManager.remove(treesOverlay); + respawns.clear(); treeObjects.clear(); session = null; axe = null; } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - eventBus.subscribe(GameObjectSpawned.class, this, this::onGameObjectSpawned); - eventBus.subscribe(GameObjectDespawned.class, this, this::onGameObjectDespawned); - eventBus.subscribe(GameObjectChanged.class, this, this::onGameObjectChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(AnimationChanged.class, this, this::onAnimationChanged); - eventBus.subscribe(OverlayMenuClicked.class, this, this::onOverlayMenuClicked); - } - + @Subscribe private void onOverlayMenuClicked(OverlayMenuClicked overlayMenuClicked) { OverlayMenuEntry overlayMenuEntry = overlayMenuClicked.getEntry(); @@ -167,14 +147,19 @@ public class WoodcuttingPlugin extends Plugin } } + @Subscribe private void onGameTick(GameTick gameTick) { + recentlyLoggedIn = false; + + respawns.removeIf(TreeRespawn::isExpired); + if (session == null || session.getLastLogCut() == null) { return; } - Duration statTimeout = Duration.ofMinutes(this.statTimeout); + Duration statTimeout = Duration.ofMinutes(config.statTimeout()); Duration sinceCut = Duration.between(session.getLastLogCut(), Instant.now()); if (sinceCut.compareTo(statTimeout) >= 0) @@ -184,11 +169,12 @@ public class WoodcuttingPlugin extends Plugin } } - private void onChatMessage(ChatMessage event) + @Subscribe + void onChatMessage(ChatMessage event) { if (event.getType() == ChatMessageType.SPAM || event.getType() == ChatMessageType.GAMEMESSAGE) { - if (event.getMessage().startsWith("You get some") && (event.getMessage().endsWith("logs.") || event.getMessage().endsWith("mushrooms."))) + if (WOOD_CUT_PATTERN.matcher(event.getMessage()).matches()) { if (session == null) { @@ -202,13 +188,90 @@ public class WoodcuttingPlugin extends Plugin gpEarned += itemManager.getItemPrice(treeTypeID); } - if (event.getMessage().contains("A bird's nest falls out of the tree") && this.showNestNotification) + if (event.getMessage().contains("A bird's nest falls out of the tree") && config.showNestNotification()) { notifier.notify("A bird nest has spawned!"); } } } + @Subscribe + private void onGameObjectSpawned(final GameObjectSpawned event) + { + GameObject gameObject = event.getGameObject(); + Tree tree = Tree.findTree(gameObject.getId()); + + if (tree == Tree.REDWOOD) + { + treeObjects.add(gameObject); + } + } + + @Subscribe + private void onGameObjectDespawned(final GameObjectDespawned event) + { + final GameObject object = event.getGameObject(); + + Tree tree = Tree.findTree(object.getId()); + if (tree != null) + { + if (tree.getRespawnTime() != null && !recentlyLoggedIn) + { + log.debug("Adding respawn timer for {} tree at {}", tree, object.getLocalLocation()); + TreeRespawn treeRespawn = new TreeRespawn(tree, object.getLocalLocation(), Instant.now(), (int) tree.getRespawnTime().toMillis()); + respawns.add(treeRespawn); + } + + if (tree == Tree.REDWOOD) + { + treeObjects.remove(event.getGameObject()); + } + } + } + + @Subscribe + private void onGameObjectChanged(final GameObjectChanged event) + { + treeObjects.remove(event.getGameObject()); + } + + @Subscribe + private void onGameStateChanged(final GameStateChanged event) + { + switch (event.getGameState()) + { + case LOADING: + case HOPPING: + respawns.clear(); + treeObjects.clear(); + break; + case LOGGED_IN: + // After login trees that are depleted will be changed, + // wait for the next game tick before watching for + // trees to despawn + recentlyLoggedIn = true; + break; + } + } + + @Subscribe + private void onAnimationChanged(final AnimationChanged event) + { + Player local = client.getLocalPlayer(); + + if (event.getActor() != local) + { + return; + } + + int animId = local.getAnimation(); + Axe axe = Axe.findAxeByAnimId(animId); + if (axe != null) + { + this.axe = axe; + } + } + private void typeOfLogCut(String message) { if (message.contains("mushrooms.")) @@ -252,69 +315,4 @@ public class WoodcuttingPlugin extends Plugin treeTypeID = ItemID.LOGS; } } - - private void onGameObjectSpawned(final GameObjectSpawned event) - { - GameObject gameObject = event.getGameObject(); - Tree tree = Tree.findTree(gameObject.getId()); - - if (tree != null) - { - treeObjects.add(gameObject); - } - } - - private void onGameObjectDespawned(final GameObjectDespawned event) - { - treeObjects.remove(event.getGameObject()); - } - - private void onGameObjectChanged(final GameObjectChanged event) - { - treeObjects.remove(event.getGameObject()); - } - - private void onGameStateChanged(final GameStateChanged event) - { - if (event.getGameState() != GameState.LOGGED_IN) - { - treeObjects.clear(); - } - } - - private void onAnimationChanged(final AnimationChanged event) - { - Player local = client.getLocalPlayer(); - - if (event.getActor() != local) - { - return; - } - - int animId = local.getAnimation(); - Axe axe = Axe.findAxeByAnimId(animId); - if (axe != null) - { - this.axe = axe; - } - } - - private void onConfigChanged(ConfigChanged event) - { - if (!event.getGroup().equals("woodcutting")) - { - return; - } - - updateConfig(); - } - - private void updateConfig() - { - this.statTimeout = config.statTimeout(); - this.showNestNotification = config.showNestNotification(); - this.showWoodcuttingStats = config.showWoodcuttingStats(); - this.showRedwoodTrees = config.showRedwoodTrees(); - this.showGPEarned = config.showGPEarned(); - } } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingTreesOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingTreesOverlay.java index cf25150169..990e1bc6eb 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingTreesOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingTreesOverlay.java @@ -1,6 +1,7 @@ /* * Copyright (c) 2018, Tomas Slusny * Copyright (c) 2018, Adam + * Copyright (c) 2019, David * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -25,29 +26,36 @@ */ package net.runelite.client.plugins.woodcutting; +import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics2D; +import java.time.Instant; +import java.util.List; import javax.inject.Inject; -import javax.inject.Singleton; import net.runelite.api.Client; import net.runelite.api.GameObject; +import net.runelite.api.Perspective; +import net.runelite.api.Point; +import net.runelite.api.coords.LocalPoint; import net.runelite.client.game.ItemManager; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.OverlayUtil; +import net.runelite.client.ui.overlay.components.ProgressPieComponent; -@Singleton class WoodcuttingTreesOverlay extends Overlay { private final Client client; + private final WoodcuttingConfig config; private final ItemManager itemManager; private final WoodcuttingPlugin plugin; @Inject - private WoodcuttingTreesOverlay(final Client client, final ItemManager itemManager, final WoodcuttingPlugin plugin) + private WoodcuttingTreesOverlay(final Client client, final WoodcuttingConfig config, final ItemManager itemManager, final WoodcuttingPlugin plugin) { this.client = client; + this.config = config; this.itemManager = itemManager; this.plugin = plugin; setLayer(OverlayLayer.ABOVE_SCENE); @@ -57,15 +65,22 @@ class WoodcuttingTreesOverlay extends Overlay @Override public Dimension render(Graphics2D graphics) { - if (plugin.getSession() == null || !plugin.isShowRedwoodTrees()) + renderAxes(graphics); + renderTimers(graphics); + return null; + } + + private void renderAxes(Graphics2D graphics) + { + if (plugin.getSession() == null || !config.showRedwoodTrees()) { - return null; + return; } Axe axe = plugin.getAxe(); if (axe == null) { - return null; + return; } for (GameObject treeObject : plugin.getTreeObjects()) @@ -75,7 +90,34 @@ class WoodcuttingTreesOverlay extends Overlay OverlayUtil.renderImageLocation(client, graphics, treeObject.getLocalLocation(), itemManager.getImage(axe.getItemId()), 120); } } - - return null; } -} + + private void renderTimers(Graphics2D graphics) + { + List respawns = plugin.getRespawns(); + if (respawns.isEmpty() || !config.showRespawnTimers()) + { + return; + } + + Instant now = Instant.now(); + for (TreeRespawn treeRespawn : respawns) + { + LocalPoint loc = treeRespawn.getLocation(); + + float percent = (now.toEpochMilli() - treeRespawn.getStartTime().toEpochMilli()) / (float) treeRespawn.getRespawnTime(); + Point point = Perspective.localToCanvas(client, loc, client.getPlane()); + if (point == null || percent > 1.0f) + { + continue; + } + + ProgressPieComponent ppc = new ProgressPieComponent(); + ppc.setBorderColor(Color.ORANGE); + ppc.setFill(Color.YELLOW); + ppc.setPosition(point); + ppc.setProgress(percent); + ppc.render(graphics); + } + } +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java index 2841a9172f..da300820ac 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java @@ -30,11 +30,9 @@ import com.google.common.base.Stopwatch; import com.google.common.collect.ImmutableList; import com.google.common.collect.ObjectArrays; import com.google.inject.Provides; -import io.reactivex.schedulers.Schedulers; import java.awt.image.BufferedImage; import java.time.Duration; import java.time.Instant; -import java.util.Comparator; import java.util.EnumSet; import java.util.HashMap; import java.util.List; @@ -59,7 +57,6 @@ import net.runelite.api.MenuEntry; import net.runelite.api.MenuOpcode; import net.runelite.api.Varbits; import net.runelite.api.events.ChatMessage; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.MenuEntryAdded; @@ -74,7 +71,10 @@ import net.runelite.client.chat.ChatMessageManager; import net.runelite.client.chat.QueuedMessage; import net.runelite.client.config.ConfigManager; import net.runelite.client.config.Keybind; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; +import net.runelite.client.events.WorldsFetch; +import net.runelite.client.game.WorldService; import net.runelite.client.input.KeyManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -87,7 +87,6 @@ import net.runelite.client.util.ImageUtil; import net.runelite.client.util.WorldUtil; import net.runelite.client.util.ping.Ping; import net.runelite.http.api.worlds.World; -import net.runelite.http.api.worlds.WorldClient; import net.runelite.http.api.worlds.WorldResult; import net.runelite.http.api.worlds.WorldType; import org.apache.commons.lang3.ArrayUtils; @@ -126,15 +125,9 @@ public class WorldHopperPlugin extends Plugin @Inject private ChatMessageManager chatMessageManager; - @Inject - private ScheduledExecutorService executorService; - @Inject private WorldHopperConfig config; - @Inject - private EventBus eventBus; - @Inject private OverlayManager overlayManager; @@ -142,7 +135,7 @@ public class WorldHopperPlugin extends Plugin private WorldHopperPingOverlay worldHopperOverlay; @Inject - private WorldClient worldClient; + private WorldService worldService; private ScheduledExecutorService hopperExecutorService; @@ -152,16 +145,14 @@ public class WorldHopperPlugin extends Plugin private net.runelite.api.World quickHopTargetWorld; private int displaySwitcherAttempts = 0; - @Getter + @Getter(AccessLevel.PACKAGE) private int lastWorld; private int favoriteWorld1, favoriteWorld2; - private ScheduledFuture worldResultFuture, pingFuture, currPingFuture; - private WorldResult worldResult; + private ScheduledFuture pingFuture, currPingFuture; private int currentWorld; private Instant lastFetch; - private boolean firstRun; private Keybind previousKey; private Keybind nextKey; @@ -202,12 +193,10 @@ public class WorldHopperPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); - firstRun = true; currentPing = -1; keyManager.registerKeyListener(previousKeyListener); @@ -235,19 +224,20 @@ public class WorldHopperPlugin extends Plugin // The plugin has its own executor for pings, as it blocks for a long time hopperExecutorService = new ExecutorServiceExceptionLogger(Executors.newSingleThreadScheduledExecutor()); - // On first run this schedules an initial ping on hopperExecutorService - worldResultFuture = executorService.scheduleAtFixedRate(this::tick, 0, WORLD_FETCH_TIMER, TimeUnit.MINUTES); + // Run the first-run ping + hopperExecutorService.execute(this::pingInitialWorlds); // Give some initial delay - this won't run until after pingInitialWorlds finishes from tick() anyway pingFuture = hopperExecutorService.scheduleWithFixedDelay(this::pingNextWorld, 15, 3, TimeUnit.SECONDS); currPingFuture = hopperExecutorService.scheduleWithFixedDelay(this::pingCurrentWorld, 15, 1, TimeUnit.SECONDS); + + // populate initial world list + updateList(); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - pingFuture.cancel(true); pingFuture = null; @@ -259,29 +249,13 @@ public class WorldHopperPlugin extends Plugin keyManager.unregisterKeyListener(previousKeyListener); keyManager.unregisterKeyListener(nextKeyListener); - worldResultFuture.cancel(true); - worldResultFuture = null; - worldResult = null; - lastFetch = null; - clientToolbar.removeNavigation(navButton); hopperExecutorService.shutdown(); hopperExecutorService = null; } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(VarbitChanged.class, this, this::onVarbitChanged); - eventBus.subscribe(MenuEntryAdded.class, this, this::onMenuEntryAdded); - eventBus.subscribe(PlayerMenuOptionClicked.class, this, this::onPlayerMenuOptionClicked); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(WorldListLoad.class, this, this::onWorldListLoad); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - } - + @Subscribe private void onConfigChanged(final ConfigChanged event) { if (event.getGroup().equals(WorldHopperConfig.GROUP)) @@ -365,6 +339,7 @@ public class WorldHopperPlugin extends Plugin panel.updateFavoriteMenu(world.getId(), false); } + @Subscribe private void onVarbitChanged(VarbitChanged varbitChanged) { int old1 = favoriteWorld1; @@ -379,6 +354,7 @@ public class WorldHopperPlugin extends Plugin } } + @Subscribe private void onMenuEntryAdded(MenuEntryAdded event) { if (!this.menuOption) @@ -408,6 +384,7 @@ public class WorldHopperPlugin extends Plugin // Don't add entry if user is offline ChatPlayer player = getChatPlayerFromName(event.getTarget()); + WorldResult worldResult = worldService.getWorlds(); if (player == null || player.getWorld() == 0 || player.getWorld() == client.getWorld() || worldResult == null) @@ -449,6 +426,7 @@ public class WorldHopperPlugin extends Plugin client.setMenuEntries(newMenu); } + @Subscribe private void onPlayerMenuOptionClicked(PlayerMenuOptionClicked event) { if (!event.getMenuOption().equals(HOP_TO)) @@ -464,6 +442,7 @@ public class WorldHopperPlugin extends Plugin } } + @Subscribe private void onGameStateChanged(GameStateChanged gameStateChanged) { // If the player has disabled the side bar plugin panel, do not update the UI @@ -478,6 +457,7 @@ public class WorldHopperPlugin extends Plugin } } + @Subscribe private void onWorldListLoad(WorldListLoad worldListLoad) { if (!this.showSidebar) @@ -496,26 +476,6 @@ public class WorldHopperPlugin extends Plugin this.lastFetch = Instant.now(); // This counts as a fetch as it updates populations } - private void tick() - { - Instant now = Instant.now(); - if (lastFetch != null && now.toEpochMilli() - lastFetch.toEpochMilli() < TICK_THROTTLE) - { - log.debug("Throttling world refresh tick"); - return; - } - - fetchWorlds(); - - // Ping worlds once at startup - if (firstRun) - { - firstRun = false; - // On first run we ping all of the worlds at once to initialize the ping values - hopperExecutorService.execute(this::pingInitialWorlds); - } - } - void refresh() { Instant now = Instant.now(); @@ -525,29 +485,14 @@ public class WorldHopperPlugin extends Plugin return; } - fetchWorlds(); + lastFetch = now; + worldService.refresh(); } - private void fetchWorlds() + @Subscribe + public void onWorldsFetch(WorldsFetch worldsFetch) { - log.debug("Fetching worlds"); - - worldClient.lookupWorlds() - .subscribeOn(Schedulers.io()) - .take(1) - .subscribe( - (worldResult) -> - { - if (worldResult != null) - { - worldResult.getWorlds().sort(Comparator.comparingInt(World::getId)); - this.worldResult = worldResult; - this.lastFetch = Instant.now(); - updateList(); - } - }, - (ex) -> log.warn("Error looking up worlds", ex) - ); + updateList(); } /** @@ -555,11 +500,16 @@ public class WorldHopperPlugin extends Plugin */ private void updateList() { - SwingUtilities.invokeLater(() -> panel.populate(worldResult.getWorlds())); + WorldResult worldResult = worldService.getWorlds(); + if (worldResult != null) + { + SwingUtilities.invokeLater(() -> panel.populate(worldResult.getWorlds())); + } } private void hop(boolean previous) { + WorldResult worldResult = worldService.getWorlds(); if (worldResult == null || client.getGameState() != GameState.LOGGED_IN) { return; @@ -670,6 +620,7 @@ public class WorldHopperPlugin extends Plugin private void hop(int worldId) { + WorldResult worldResult = worldService.getWorlds(); // Don't try to hop if the world doesn't exist World world = worldResult.findWorld(worldId); if (world == null) @@ -714,6 +665,7 @@ public class WorldHopperPlugin extends Plugin displaySwitcherAttempts = 0; } + @Subscribe private void onGameTick(GameTick event) { if (quickHopTargetWorld == null) @@ -752,6 +704,7 @@ public class WorldHopperPlugin extends Plugin } } + @Subscribe private void onChatMessage(ChatMessage event) { if (event.getType() != ChatMessageType.GAMEMESSAGE) @@ -811,6 +764,7 @@ public class WorldHopperPlugin extends Plugin */ private void pingInitialWorlds() { + WorldResult worldResult = worldService.getWorlds(); if (worldResult == null || !this.showSidebar || !this.ping) { return; @@ -848,6 +802,7 @@ public class WorldHopperPlugin extends Plugin */ private void pingNextWorld() { + WorldResult worldResult = worldService.getWorlds(); if (worldResult == null || !this.showSidebar || !this.ping) { return; @@ -884,6 +839,7 @@ public class WorldHopperPlugin extends Plugin */ private void pingCurrentWorld() { + WorldResult worldResult = worldService.getWorlds(); // There is no reason to ping the current world if not logged in, as the overlay doesn't draw if (worldResult == null || !this.displayPing || client.getGameState() != GameState.LOGGED_IN) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldSwitcherPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldSwitcherPanel.java index f29ebabefb..ce7839226a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldSwitcherPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldSwitcherPanel.java @@ -63,8 +63,8 @@ class WorldSwitcherPanel extends PluginPanel private WorldOrder orderIndex = WorldOrder.WORLD; private boolean ascendingOrder = true; - private ArrayList rows = new ArrayList<>(); - private WorldHopperPlugin plugin; + private final ArrayList rows = new ArrayList<>(); + private final WorldHopperPlugin plugin; @Setter(AccessLevel.PACKAGE) private SubscriptionFilterMode filterMode; @@ -379,10 +379,7 @@ class WorldSwitcherPanel extends PluginPanel private WorldTableRow buildRow(World world, boolean stripe, boolean current, boolean favorite) { WorldTableRow row = new WorldTableRow(world, current, favorite, - world1 -> - { - plugin.hopTo(world1); - }, + plugin::hopTo, (world12, add) -> { if (add) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldTableHeader.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldTableHeader.java index 43e1aaa4b9..7861179407 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldTableHeader.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldTableHeader.java @@ -108,9 +108,7 @@ class WorldTableHeader extends JPanel final JMenuItem refresh = new JMenuItem("Refresh worlds"); refresh.addActionListener(e -> - { - onRefresh.run(); - }); + onRefresh.run()); final JPopupMenu popupMenu = new JPopupMenu(); popupMenu.setBorder(new EmptyBorder(5, 5, 5, 5)); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldTableRow.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldTableRow.java index cad6358120..f1e8dad612 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldTableRow.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldTableRow.java @@ -64,6 +64,7 @@ class WorldTableRow extends JPanel private static final Color TOURNAMENT_WORLD = new Color(79, 145, 255); private static final Color MEMBERS_WORLD = new Color(210, 193, 53); private static final Color FREE_WORLD = new Color(200, 200, 200); + private static final Color LEAGUE_WORLD = new Color(157, 237, 1); static { @@ -81,7 +82,7 @@ class WorldTableRow extends JPanel private JLabel pingField; private BiConsumer onFavorite; - @Getter + @Getter(AccessLevel.PACKAGE) private final World world; @Getter(AccessLevel.PACKAGE) @@ -90,11 +91,9 @@ class WorldTableRow extends JPanel private int ping; private Color lastBackground; - private boolean current; WorldTableRow(World world, boolean current, boolean favorite, Consumer onSelect, BiConsumer onFavorite) { - this.current = current; this.world = world; this.onFavorite = onFavorite; this.updatedPlayerCount = world.getPlayers(); @@ -202,9 +201,7 @@ class WorldTableRow extends JPanel } favoriteMenuOption.addActionListener(e -> - { - onFavorite.accept(world, !favorite); - }); + onFavorite.accept(world, !favorite)); } void updatePlayerCount(int playerCount) @@ -247,11 +244,14 @@ class WorldTableRow extends JPanel } else if (world.getTypes().contains(WorldType.PVP) || world.getTypes().contains(WorldType.HIGH_RISK) - || world.getTypes().contains(WorldType.DEADMAN) - || world.getTypes().contains(WorldType.SEASONAL_DEADMAN)) + || world.getTypes().contains(WorldType.DEADMAN)) { activityField.setForeground(DANGEROUS_WORLD); } + else if (world.getTypes().contains(WorldType.LEAGUE)) + { + activityField.setForeground(LEAGUE_WORLD); + } else if (world.getTypes().contains(WorldType.TOURNAMENT)) { activityField.setForeground(TOURNAMENT_WORLD); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/FairyRingLocation.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/FairyRingLocation.java index 25ee1addcd..c5fb7ac05c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/FairyRingLocation.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/FairyRingLocation.java @@ -25,10 +25,11 @@ */ package net.runelite.client.plugins.worldmap; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.coords.WorldPoint; -@Getter +@Getter(AccessLevel.PACKAGE) enum FairyRingLocation { AIR("AIR", new WorldPoint(2699, 3249, 0)), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/FarmingPatchLocation.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/FarmingPatchLocation.java index eaadd3a5be..6534fa1df7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/FarmingPatchLocation.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/FarmingPatchLocation.java @@ -25,10 +25,11 @@ */ package net.runelite.client.plugins.worldmap; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.coords.WorldPoint; -@Getter +@Getter(AccessLevel.PACKAGE) enum FarmingPatchLocation { ALLOTMENT("Allotment", diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/MinigameLocation.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/MinigameLocation.java index 4158308d1e..bce8b35aea 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/MinigameLocation.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/MinigameLocation.java @@ -25,10 +25,11 @@ */ package net.runelite.client.plugins.worldmap; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.coords.WorldPoint; -@Getter +@Getter(AccessLevel.PACKAGE) enum MinigameLocation { BARBARIAN_ASSAULT("Barbarian Assault", new WorldPoint(2531, 3569, 0)), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/QuestStartLocation.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/QuestStartLocation.java index 3014e0f0b5..b011533537 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/QuestStartLocation.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/QuestStartLocation.java @@ -25,9 +25,10 @@ */ package net.runelite.client.plugins.worldmap; +import lombok.AccessLevel; import lombok.Getter; -import net.runelite.api.coords.WorldPoint; import net.runelite.api.Quest; +import net.runelite.api.coords.WorldPoint; // Some quests are in the same spot, but they are done in order. If multiple // quests start in the same location, an array of quests is expected. @@ -167,10 +168,10 @@ enum QuestStartLocation WITCHS_HOUSE(Quest.WITCHS_HOUSE, new WorldPoint(2927, 3456, 0)), ZOGRE_FLESH_EATERS(Quest.ZOGRE_FLESH_EATERS, new WorldPoint(2442, 3051, 0)); - @Getter + @Getter(AccessLevel.PACKAGE) private final WorldPoint location; - @Getter + @Getter(AccessLevel.PACKAGE) private final Quest[] quests; QuestStartLocation(Quest[] quests, WorldPoint location) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/QuestStartPoint.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/QuestStartPoint.java index 4bd778188c..ca70fd4410 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/QuestStartPoint.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/QuestStartPoint.java @@ -25,8 +25,8 @@ */ package net.runelite.client.plugins.worldmap; -import net.runelite.api.coords.WorldPoint; import java.awt.image.BufferedImage; +import net.runelite.api.coords.WorldPoint; import net.runelite.client.ui.overlay.worldmap.WorldMapPoint; class QuestStartPoint extends WorldMapPoint diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/RareTreeLocation.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/RareTreeLocation.java index 452eef5bc7..4f34aa8cf8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/RareTreeLocation.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/RareTreeLocation.java @@ -25,10 +25,11 @@ */ package net.runelite.client.plugins.worldmap; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.coords.WorldPoint; -@Getter +@Getter(AccessLevel.PACKAGE) enum RareTreeLocation { WILLOW("Willow tree", 30, diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/RunecraftingAltarLocation.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/RunecraftingAltarLocation.java new file mode 100644 index 0000000000..49e1604800 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/RunecraftingAltarLocation.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2019, Dava96 + * 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 HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.client.plugins.worldmap; + +import lombok.AccessLevel; +import lombok.Getter; +import net.runelite.api.coords.WorldPoint; + +@Getter(AccessLevel.PACKAGE) +enum RunecraftingAltarLocation +{ + AIR_ALTAR("Air Altar", 1, new WorldPoint(2985, 3293, 0), "air_altar_icon.png"), + MIND_ALTAR("Mind Altar", 2, new WorldPoint(2982, 3514, 0), "mind_altar_icon.png"), + WATER_ALTAR("Water Altar", 5, new WorldPoint(3185, 3165, 0), "water_altar_icon.png"), + EARTH_ALTAR("Earth Altar", 9, new WorldPoint(3306, 3474, 0), "earth_altar_icon.png"), + FIRE_ALTAR("Fire Altar", 14, new WorldPoint(3313, 3255, 0), "fire_altar_icon.png"), + BODY_ALTAR("Body Altar", 20, new WorldPoint(3053, 3445, 0), "body_altar_icon.png"), + COSMIC_ALTAR("Cosmic Altar", 27, new WorldPoint(2408, 4377, 0), "cosmic_altar_icon.png"), + CHAOS_ALTAR("Chaos Altar", 35, new WorldPoint(3060, 3591, 0), "chaos_altar_icon.png"), + ASTRAL_ALTAR("Astral Altar", 40, new WorldPoint(2158, 3864, 0), "astral_altar_icon.png"), + NATURE_ALTAR("Nature Altar", 44, new WorldPoint(2869, 3019, 0), "nature_altar_icon.png"), + LAW_ALTAR("Law Altar", 54, new WorldPoint(2858, 3381, 0), "law_altar_icon.png"), + DEATH_ALTAR("Death Altar", 65, new WorldPoint(1860, 4639, 0), "death_altar_icon.png"), + BLOOD_ALTAR("Blood Altar", 77, new WorldPoint(1716, 3827, 0), "blood_altar_icon.png"), + SOUL_ALTAR("Soul Altar", 90, new WorldPoint(1814, 3856, 0), "soul_altar_icon.png"), + WRATH_ALTAR("Wrath Altar", 95, new WorldPoint(2446, 2825, 0), "wrath_altar_icon.png"); + + private final String tooltip; + private final WorldPoint location; + private final int levelReq; + private final String iconPath; + + RunecraftingAltarLocation(String description, int level, WorldPoint location, String iconPath) + { + this.tooltip = description + " - Level " + level; + this.location = location; + this.levelReq = level; + this.iconPath = iconPath; + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/RunecraftingAltarPoint.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/RunecraftingAltarPoint.java new file mode 100644 index 0000000000..11cdad457f --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/RunecraftingAltarPoint.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2019, Dava96 + * 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 HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.client.plugins.worldmap; + +import net.runelite.client.ui.overlay.worldmap.WorldMapPoint; +import net.runelite.client.util.ImageUtil; + +class RunecraftingAltarPoint extends WorldMapPoint +{ + RunecraftingAltarPoint(RunecraftingAltarLocation point) + { + super(point.getLocation(), WorldMapPlugin.BLANK_ICON); + setImage(ImageUtil.getResourceStreamFromClass(WorldMapPlugin.class, point.getIconPath())); + setTooltip(point.getTooltip()); + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TeleportLocationData.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TeleportLocationData.java index 698ae11a81..88cb4d2204 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TeleportLocationData.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TeleportLocationData.java @@ -26,11 +26,12 @@ package net.runelite.client.plugins.worldmap; import java.awt.image.BufferedImage; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.coords.WorldPoint; import net.runelite.client.util.ImageUtil; -@Getter +@Getter(AccessLevel.PACKAGE) enum TeleportLocationData { VARROCK(TeleportType.NORMAL_MAGIC, "Varrock", 25, new WorldPoint(3213, 3424, 0), "varrock_teleport_icon.png"), @@ -153,6 +154,7 @@ enum TeleportLocationData OBELISK_44(TeleportType.OTHER, "Obelisk", "44", new WorldPoint(2980, 3866, 0), "obelisk_icon.png"), OBELISK_50(TeleportType.OTHER, "Obelisk", "50", new WorldPoint(3307, 3916, 0), "obelisk_icon.png"), WILDERNESS_CRABS_TELEPORT(TeleportType.OTHER, "Wilderness crabs teleport", new WorldPoint(3348, 3783, 0), "wilderness_crabs_teleport_icon.png"), + CANOE_WILDERNESS(TeleportType.OTHER, "Canoe (No departure)", "35", new WorldPoint(3141, 3796, 0), "transportation_icon.png"), // Achievement Diary ARDOUGNE_CLOAK_MONASTERY(TeleportType.OTHER, "Ardougne Cloak", "Monastery", new WorldPoint(2606, 3222, 0), "ardougne_cloak_icon.png"), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TeleportType.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TeleportType.java index a51e8f9c6e..3a23b9d2eb 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TeleportType.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TeleportType.java @@ -25,9 +25,10 @@ */ package net.runelite.client.plugins.worldmap; +import lombok.AccessLevel; import lombok.Getter; -@Getter +@Getter(AccessLevel.PACKAGE) public enum TeleportType { NORMAL_MAGIC(""), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TransportationPointLocation.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TransportationPointLocation.java index b1ea7baf2a..e7851427df 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TransportationPointLocation.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TransportationPointLocation.java @@ -27,12 +27,13 @@ */ package net.runelite.client.plugins.worldmap; +import javax.annotation.Nullable; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; import net.runelite.api.coords.WorldPoint; -import javax.annotation.Nullable; -@Getter +@Getter(AccessLevel.PACKAGE) @AllArgsConstructor enum TransportationPointLocation { @@ -42,7 +43,7 @@ enum TransportationPointLocation BRIMHAVEN_TO_ARDOUGNE("Ship to Ardougne / Rimmington", new WorldPoint(2772, 3234, 0)), RIMMINGTON_TO_ARDOUGNE("Ship to Ardougne / Brimhaven", new WorldPoint(2915, 3224, 0)), CATHERBY_TO_KEEP_LE_FAYE("Ship to Keep Le Faye", new WorldPoint(2804, 3421, 0), new WorldPoint(2769, 3402, 0)), - CORSAIR_TO_RIMMINGTON("Ship to Rimmington", new WorldPoint(2577, 2839, 0), new WorldPoint(2909, 3227, 0 )), + CORSAIR_TO_RIMMINGTON("Ship to Rimmington", new WorldPoint(2577, 2839, 0), new WorldPoint(2909, 3227, 0)), DRAGONTOOTH_TO_PHASMATYS("Ship to Port Phasmatys", new WorldPoint(3791, 3561, 0), new WorldPoint(3703, 3487, 0)), DIGSITE_TO_FOSSIL("Ship to Fossil Island", new WorldPoint(3361, 3448, 0), new WorldPoint(3723, 3807, 0)), ENTRANA_TO_PORTSARIM("Ship to Port Sarim", new WorldPoint(2833, 3334, 0), new WorldPoint(3046, 3233, 0)), @@ -75,7 +76,7 @@ enum TransportationPointLocation RELLEKKA_TO_WATERBIRTH("Ship to Waterbirth", new WorldPoint(2618, 3685, 0), new WorldPoint(2549, 3758, 0)), RELLEKKA_TO_WEISS_ICEBERG("Ship to Weiss/Iceberg", new WorldPoint(2707, 3735, 0)), RELLEKKA_TO_UNGAEL("Ship to Ungael", new WorldPoint(2638, 3698, 0), new WorldPoint(2276, 4034, 0)), - RIMMINGTON_TO_CORSAIR_COVE("Ship to Corsair Cove", new WorldPoint(2909, 3227, 0 ), new WorldPoint(2577, 2839, 0)), + RIMMINGTON_TO_CORSAIR_COVE("Ship to Corsair Cove", new WorldPoint(2909, 3227, 0), new WorldPoint(2577, 2839, 0)), WATERBIRTH_TO_RELLEKKA("Ship to Rellekka", new WorldPoint(2549, 3758, 0), new WorldPoint(2618, 3685, 0)), WEISS_TO_RELLEKKA("Ship to Rellekka", new WorldPoint(2847, 3967, 0), new WorldPoint(2707, 3735, 0)), UNGAEL_TO_RELLEKKA("Ship to Rellekka", new WorldPoint(2276, 4034, 0), new WorldPoint(2638, 3698, 0)), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapConfig.java index 7ebe417ef2..4070a77b1a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapConfig.java @@ -218,4 +218,15 @@ public interface WorldMapConfig extends Config { return true; } + + @ConfigItem( + keyName = WorldMapPlugin.CONFIG_KEY_RUNECRAFTING_ALTAR_ICON, + name = "Show runecrafting altar locations", + description = "Show the icons of runecrafting altars", + position = 18 + ) + default boolean runecraftingAltarIcon() + { + return true; + } } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapPlugin.java index 2248a0ccc9..804dc13ed6 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapPlugin.java @@ -35,13 +35,13 @@ import net.runelite.api.GameState; import net.runelite.api.Quest; import net.runelite.api.QuestState; import net.runelite.api.Skill; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.StatChanged; import net.runelite.api.events.WidgetLoaded; import net.runelite.api.widgets.WidgetID; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.AgilityShortcut; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -80,6 +80,7 @@ public class WorldMapPlugin extends Plugin static final String CONFIG_KEY_RARE_TREE_TOOLTIPS = "rareTreeTooltips"; static final String CONFIG_KEY_RARE_TREE_LEVEL_ICON = "rareTreeIcon"; static final String CONFIG_KEY_TRANSPORATION_TELEPORT_TOOLTIPS = "transportationTooltips"; + static final String CONFIG_KEY_RUNECRAFTING_ALTAR_ICON = "runecraftingAltarIcon"; static { @@ -124,9 +125,6 @@ public class WorldMapPlugin extends Plugin @Inject private WorldMapPointManager worldMapPointManager; - @Inject - private EventBus eventBus; - @Inject private ScheduledExecutorService executor; @@ -158,10 +156,9 @@ public class WorldMapPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); agilityLevel = client.getRealSkillLevel(Skill.AGILITY); woodcuttingLevel = client.getRealSkillLevel(Skill.WOODCUTTING); @@ -169,10 +166,8 @@ public class WorldMapPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - worldMapPointManager.removeIf(FairyRingPoint.class::isInstance); worldMapPointManager.removeIf(AgilityShortcutPoint.class::isInstance); worldMapPointManager.removeIf(QuestStartPoint.class::isInstance); @@ -181,17 +176,12 @@ public class WorldMapPlugin extends Plugin worldMapPointManager.removeIf(MinigamePoint.class::isInstance); worldMapPointManager.removeIf(FarmingPatchPoint.class::isInstance); worldMapPointManager.removeIf(RareTreePoint.class::isInstance); + worldMapPointManager.removeIf(RunecraftingAltarPoint.class::isInstance); agilityLevel = 0; woodcuttingLevel = 0; } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(StatChanged.class, this, this::onStatChanged); - eventBus.subscribe(WidgetLoaded.class, this, this::onWidgetLoaded); - } - + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals(CONFIG_KEY)) @@ -203,6 +193,7 @@ public class WorldMapPlugin extends Plugin updateShownIcons(); } + @Subscribe private void onStatChanged(StatChanged statChanged) { switch (statChanged.getSkill()) @@ -230,6 +221,7 @@ public class WorldMapPlugin extends Plugin } } + @Subscribe private void onWidgetLoaded(WidgetLoaded widgetLoaded) { if (widgetLoaded.getGroupId() == WidgetID.WORLD_MAP_GROUP_ID) @@ -316,32 +308,38 @@ public class WorldMapPlugin extends Plugin worldMapPointManager.removeIf(TeleportPoint.class::isInstance); // This next part gets 142 icons from disk, and does so on the EDT (at first run) - executor.submit(() -> - Arrays.stream(TeleportLocationData.values()) - .filter(data -> + Arrays.stream(TeleportLocationData.values()) + .filter(data -> + { + switch (data.getType()) { - switch (data.getType()) - { - case NORMAL_MAGIC: - return this.normalTeleportIcon; - case ANCIENT_MAGICKS: - return this.ancientTeleportIcon; - case LUNAR_MAGIC: - return this.lunarTeleportIcon; - case ARCEUUS_MAGIC: - return this.arceuusTeleportIcon; - case JEWELLERY: - return this.jewelleryTeleportIcon; - case SCROLL: - return this.scrollTeleportIcon; - case OTHER: - return this.miscellaneousTeleportIcon; - default: - return false; - } - }).map(TeleportPoint::new) - .forEach(worldMapPointManager::add) - ); + case NORMAL_MAGIC: + return this.normalTeleportIcon; + case ANCIENT_MAGICKS: + return this.ancientTeleportIcon; + case LUNAR_MAGIC: + return this.lunarTeleportIcon; + case ARCEUUS_MAGIC: + return this.arceuusTeleportIcon; + case JEWELLERY: + return this.jewelleryTeleportIcon; + case SCROLL: + return this.scrollTeleportIcon; + case OTHER: + return this.miscellaneousTeleportIcon; + default: + return false; + } + }).map(TeleportPoint::new) + .forEach(worldMapPointManager::add); + + worldMapPointManager.removeIf(RunecraftingAltarPoint.class::isInstance); + if (config.runecraftingAltarIcon()) + { + Arrays.stream(RunecraftingAltarLocation.values()) + .map(RunecraftingAltarPoint::new) + .forEach(worldMapPointManager::add); + } } private void updateQuestStartPointIcons() @@ -432,4 +430,4 @@ public class WorldMapPlugin extends Plugin this.rareTreeLevelIcon = config.rareTreeLevelIcon(); this.transportationTeleportTooltips = config.transportationTeleportTooltips(); } -} +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesConfig.java index 5b364552ba..ba8eb1dfd8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesConfig.java @@ -43,7 +43,7 @@ public interface XpGlobesConfig extends Config { return true; } - + @ConfigItem( keyName = "showXpLeft", name = "Show XP Left", diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesOverlay.java index c64778799d..c8e2eb4fcb 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesOverlay.java @@ -266,9 +266,9 @@ public class XpGlobesOverlay extends Overlay int actionsLeft = xpTrackerService.getActionsLeft(mouseOverSkill.getSkill()); if (actionsLeft != Integer.MAX_VALUE) { - String actionsLeftString = decimalFormat.format(actionsLeft); + String actionsLeftString = decimalFormat.format(actionsLeft); - tableComponent.addRow(ColorUtil.prependColorTag(xpActionType.getLabel() + " left:", Color.ORANGE), actionsLeftString); + tableComponent.addRow(ColorUtil.prependColorTag(xpActionType.getLabel() + " left:", Color.ORANGE), actionsLeftString); } } @@ -276,7 +276,7 @@ public class XpGlobesOverlay extends Overlay { int xpLeft = goalXp - mouseOverSkill.getCurrentXp(); String skillXpToLvl = decimalFormat.format(xpLeft); - tableComponent.addRow(ColorUtil.prependColorTag("XP left:", Color.ORANGE), skillXpToLvl); + tableComponent.addRow(ColorUtil.prependColorTag("XP left:", Color.ORANGE), skillXpToLvl); } if (plugin.isShowXpHour()) @@ -285,10 +285,10 @@ public class XpGlobesOverlay extends Overlay if (xpHr != 0) { String xpHrString = decimalFormat.format(xpHr); - tableComponent.addRow(ColorUtil.prependColorTag("XP per hour:", Color.ORANGE), xpHrString); + tableComponent.addRow(ColorUtil.prependColorTag("XP per hour:", Color.ORANGE), xpHrString); } } - + if (plugin.isEnableTimeToLevel()) { String timeLeft = xpTrackerService.getTimeTillGoal(mouseOverSkill.getSkill()); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesPlugin.java index 6e0671dfc5..0c9b81f286 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesPlugin.java @@ -35,13 +35,12 @@ import javax.inject.Inject; import javax.inject.Singleton; import lombok.AccessLevel; import lombok.Getter; -import net.runelite.api.Client; import net.runelite.api.Experience; import net.runelite.api.Skill; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.StatChanged; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDependency; @@ -67,9 +66,6 @@ public class XpGlobesPlugin extends Plugin @Getter private final List xpGlobes = new ArrayList<>(); - @Inject - private Client client; - @Inject private XpGlobesConfig config; @@ -79,9 +75,6 @@ public class XpGlobesPlugin extends Plugin @Inject private XpGlobesOverlay overlay; - @Inject - private EventBus eventBus; - @Getter(AccessLevel.PACKAGE) private boolean enableTooltips; private boolean hideMaxed; @@ -114,29 +107,20 @@ public class XpGlobesPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); overlayManager.add(overlay); } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(overlay); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(StatChanged.class, this, this::onStatChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - } - + @Subscribe private void onStatChanged(StatChanged statChanged) { Skill skill = statChanged.getSkill(); @@ -216,6 +200,7 @@ public class XpGlobesPlugin extends Plugin globeCache = new XpGlobe[Skill.values().length - 1]; } + @Subscribe private void onGameStateChanged(GameStateChanged event) { switch (event.getGameState()) @@ -227,6 +212,7 @@ public class XpGlobesPlugin extends Plugin } } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("xpglobes")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpActionType.java b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpActionType.java index 50acc52c02..c73a9c6c12 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpActionType.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpActionType.java @@ -24,10 +24,11 @@ */ package net.runelite.client.plugins.xptracker; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; -@Getter +@Getter(AccessLevel.PUBLIC) @AllArgsConstructor public enum XpActionType { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBox.java b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBox.java index 1514bf9ff9..0df05e899c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBox.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBox.java @@ -238,7 +238,7 @@ class XpInfoBox extends JPanel add(container, BorderLayout.NORTH); } - void setStyle(Style style) + private void setStyle(Style style) { container.removeAll(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBoxOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBoxOverlay.java index 887709f54f..68fac3b3a2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBoxOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBoxOverlay.java @@ -139,15 +139,15 @@ class XpInfoBoxOverlay extends Overlay } final LineComponent xpLineBottom = LineComponent.builder() - .left(bottemLeftStr + ":") - .right(QuantityFormatter.quantityToRSDecimalStack(bottomRightNum, true)) - .build(); + .left(bottemLeftStr + ":") + .right(QuantityFormatter.quantityToRSDecimalStack(bottomRightNum, true)) + .build(); final SplitComponent xpSplit = SplitComponent.builder() - .first(xpLine) - .second(xpLineBottom) - .orientation(ComponentOrientation.VERTICAL) - .build(); + .first(xpLine) + .second(xpLineBottom) + .orientation(ComponentOrientation.VERTICAL) + .build(); final ImageComponent imageComponent = new ImageComponent(icon); final SplitComponent iconXpSplit = SplitComponent.builder() diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpPauseStateSingle.java b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpPauseStateSingle.java index 9e5cc55622..ce5750650e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpPauseStateSingle.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpPauseStateSingle.java @@ -26,6 +26,7 @@ package net.runelite.client.plugins.xptracker; import java.util.EnumSet; import java.util.Set; +import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; import net.runelite.api.Skill; @@ -33,12 +34,12 @@ import net.runelite.api.Skill; @RequiredArgsConstructor class XpPauseStateSingle { - @Getter + @Getter(AccessLevel.PACKAGE) private final Skill skill; private final Set pauseReasons = EnumSet.noneOf(XpPauseReason.class); - @Getter + @Getter(AccessLevel.PACKAGE) private long lastChangeMillis; - @Getter + @Getter(AccessLevel.PACKAGE) private long xp; boolean isPaused() diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpState.java b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpState.java index 2967c370f0..848724ef2f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpState.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpState.java @@ -24,6 +24,7 @@ */ package net.runelite.client.plugins.xptracker; +import java.util.Arrays; import java.util.EnumMap; import java.util.Map; import lombok.NonNull; @@ -149,10 +150,7 @@ class XpState else { // So we have a decent average off the bat, lets populate all values with what we see. - for (int i = 0; i < action.getActionExps().length; i++) - { - action.getActionExps()[i] = actionExp; - } + Arrays.fill(action.getActionExps(), actionExp); action.setActionsHistoryInitialized(true); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpStateSingle.java b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpStateSingle.java index 608accc239..dfdba537a6 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpStateSingle.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpStateSingle.java @@ -25,8 +25,10 @@ */ package net.runelite.client.plugins.xptracker; +import java.util.Arrays; import java.util.HashMap; import java.util.Map; +import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; @@ -39,11 +41,11 @@ class XpStateSingle private final Skill skill; private final Map actions = new HashMap<>(); - @Getter - @Setter + @Getter(AccessLevel.PACKAGE) + @Setter(AccessLevel.PACKAGE) private long startXp; - @Getter + @Getter(AccessLevel.PACKAGE) private int xpGained = 0; @Setter @@ -170,7 +172,7 @@ class XpStateSingle } - int getXpHr() + private int getXpHr() { return toHourly(xpGained); } @@ -203,10 +205,7 @@ class XpStateSingle { // populate all values in our action history array with this first value that we see // so the average value of our action history starts out as this first value we see - for (int i = 0; i < action.getActionExps().length; i++) - { - action.getActionExps()[i] = actionExp; - } + Arrays.fill(action.getActionExps(), actionExp); action.setActionsHistoryInitialized(true); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java index 6ccfac9dea..cd77056e04 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java @@ -62,7 +62,7 @@ import net.runelite.api.util.Text; import net.runelite.api.widgets.WidgetID; import static net.runelite.api.widgets.WidgetInfo.TO_GROUP; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.NPCManager; import net.runelite.client.game.SkillIconManager; @@ -92,7 +92,7 @@ public class XpTrackerPlugin extends Plugin private static final String MENUOP_ADD_CANVAS_TRACKER = "Add to canvas"; private static final String MENUOP_REMOVE_CANVAS_TRACKER = "Remove from canvas"; - static final List COMBAT = ImmutableList.of( + private static final List COMBAT = ImmutableList.of( Skill.ATTACK, Skill.STRENGTH, Skill.DEFENCE, @@ -118,9 +118,6 @@ public class XpTrackerPlugin extends Plugin @Inject private OverlayManager overlayManager; - @Inject - private EventBus eventBus; - private NavigationButton navButton; @Setter(AccessLevel.PACKAGE) @VisibleForTesting @@ -159,10 +156,9 @@ public class XpTrackerPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { updateConfig(); - addSubscriptions(); xpPanel = new XpPanel(this, client, skillIconManager); @@ -183,25 +179,14 @@ public class XpTrackerPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); overlayManager.removeIf(e -> e instanceof XpInfoBoxOverlay); xpState.reset(); clientToolbar.removeNavigation(navButton); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(StatChanged.class, this, this::onStatChanged); - eventBus.subscribe(NpcDespawned.class, this, this::onNpcDespawned); - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(MenuEntryAdded.class, this, this::onMenuEntryAdded); - eventBus.subscribe(MenuOptionClicked.class, this, this::onMenuOptionClicked); - } - + @Subscribe void onGameStateChanged(GameStateChanged event) { GameState state = event.getGameState(); @@ -371,6 +356,7 @@ public class XpTrackerPlugin extends Plugin } } + @Subscribe void onStatChanged(StatChanged statChanged) { final Skill skill = statChanged.getSkill(); @@ -410,6 +396,7 @@ public class XpTrackerPlugin extends Plugin xpPanel.updateTotal(xpState.getTotalSnapshot()); } + @Subscribe private void onNpcDespawned(NpcDespawned event) { final NPC npc = event.getNpc(); @@ -429,6 +416,7 @@ public class XpTrackerPlugin extends Plugin xpPanel.updateTotal(xpState.getTotalSnapshot()); } + @Subscribe void onGameTick(GameTick event) { if (initializeTracker) @@ -496,6 +484,7 @@ public class XpTrackerPlugin extends Plugin rebuildSkills(); } + @Subscribe private void onMenuEntryAdded(final MenuEntryAdded event) { int widgetID = event.getParam1(); @@ -524,6 +513,7 @@ public class XpTrackerPlugin extends Plugin client.setMenuEntries(menuEntries); } + @Subscribe private void onMenuOptionClicked(MenuOptionClicked event) { if (event.getMenuOpcode().getId() != MenuOpcode.RUNELITE.getId() @@ -746,6 +736,7 @@ public class XpTrackerPlugin extends Plugin } } + @Subscribe private void onConfigChanged(ConfigChanged event) { if (!event.getGroup().equals("xpTracker")) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpWorldType.java b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpWorldType.java index a907381347..b998a2f8b0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpWorldType.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpWorldType.java @@ -31,8 +31,7 @@ enum XpWorldType NORMAL, TOURNEY, DMM, - SDMM, - DMMT; + LEAGUE; static XpWorldType of(WorldType type) { @@ -42,10 +41,8 @@ enum XpWorldType return TOURNEY; case DEADMAN: return DMM; - case SEASONAL_DEADMAN: - return SDMM; - case DEADMAN_TOURNAMENT: - return DMMT; + case LEAGUE: + return LEAGUE; default: return NORMAL; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xtea/XteaPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/xtea/XteaPlugin.java index 18d553bee1..ed4fb9725d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xtea/XteaPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xtea/XteaPlugin.java @@ -31,7 +31,6 @@ import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; import net.runelite.api.GameState; import net.runelite.api.events.GameStateChanged; -import net.runelite.client.eventbus.EventBus; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.http.api.xtea.XteaClient; @@ -52,23 +51,8 @@ public class XteaPlugin extends Plugin @Inject private Client client; - @Inject - private EventBus eventBus; - - @Override - protected void startUp() throws Exception - { - //todo re-enable when we have our server back up. - /*eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged);*/ - } - - @Override - protected void shutDown() throws Exception - { - //todo re-enable when we have our server back up. - /*eventBus.unregister(this);*/ - } - + // todo re-enable when we have our server back up. + // @Subscribe private void onGameStateChanged(GameStateChanged gameStateChanged) { if (gameStateChanged.getGameState() != GameState.LOGGED_IN) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/zalcano/ZalcanoOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/zalcano/ZalcanoOverlay.java index 2bb2c14120..2a3478279b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/zalcano/ZalcanoOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/zalcano/ZalcanoOverlay.java @@ -32,6 +32,7 @@ import java.awt.Graphics2D; import java.awt.Polygon; import java.awt.Shape; import java.util.List; +import javax.inject.Inject; import lombok.extern.slf4j.Slf4j; import net.runelite.api.AnimationID; import net.runelite.api.Client; @@ -40,8 +41,6 @@ import net.runelite.api.GraphicsObject; import net.runelite.api.Perspective; import net.runelite.api.coords.LocalPoint; import net.runelite.api.coords.WorldPoint; - -import javax.inject.Inject; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; @@ -72,7 +71,6 @@ public class ZalcanoOverlay extends Overlay private final ZalcanoUtil util; private final Client client; - @Inject ZalcanoOverlay(final ZalcanoPlugin plugin, final ZalcanoConfig config, final ZalcanoUtil util, final Client client) { @@ -166,7 +164,7 @@ public class ZalcanoOverlay extends Overlay { final Color green = new Color(140, 255, 60); OverlayUtil.renderPolygon(graphics, poly, !util.projectileExists() ? green : Color.RED); - OverlayUtil.renderTextLocation(graphics, glowingRock.getCanvasLocation(), !util.projectileExists() ? util.mine : util.warning, !util.projectileExists() ? green : Color.RED); + OverlayUtil.renderTextLocation(graphics, glowingRock.getCanvasLocation(), !util.projectileExists() ? ZalcanoUtil.mine : ZalcanoUtil.warning, !util.projectileExists() ? green : Color.RED); } } } @@ -221,7 +219,7 @@ public class ZalcanoOverlay extends Overlay private void renderZalcanoMineable(Graphics2D graphics) { - renderZalcanoAOE(graphics, 4, util.mine, Color.GREEN); + renderZalcanoAOE(graphics, 4, ZalcanoUtil.mine, Color.GREEN); } private void renderZalcanoWakeup(Graphics2D graphics) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/zalcano/ZalcanoPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/zalcano/ZalcanoPlugin.java index a5d0be7736..fd8316f840 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/zalcano/ZalcanoPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/zalcano/ZalcanoPlugin.java @@ -23,7 +23,6 @@ * * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ - package net.runelite.client.plugins.zalcano; import com.google.inject.Binder; @@ -44,6 +43,7 @@ import net.runelite.api.events.NpcSpawned; import net.runelite.api.kit.KitType; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.PluginType; @@ -58,7 +58,6 @@ import net.runelite.client.ui.overlay.OverlayManager; @Slf4j public class ZalcanoPlugin extends Plugin { - @Inject private Client client; @@ -108,7 +107,6 @@ public class ZalcanoPlugin extends Plugin @Override protected void shutDown() { - eventBus.unregister(this); eventBus.unregister("regionchecker"); overlayManager.remove(overlay); overlayManager.remove(stepsOverlay); @@ -124,10 +122,6 @@ public class ZalcanoPlugin extends Plugin if (util.isInZalcanoRegion()) { log.debug("region check complete loading other events"); - eventBus.subscribe(NpcSpawned.class, this, this::onNpcSpawned); - eventBus.subscribe(NpcDespawned.class, this, this::onNpcDespawned); - eventBus.subscribe(GameTick.class, this, this::gameTickStepMachine); - eventBus.subscribe(GameTick.class, this, this::gameTickOreListener); util.manuallyFindZalcano(); //this is here because the new subscribed npcspawn doesn't catch a pre existing zalcano @@ -138,6 +132,7 @@ public class ZalcanoPlugin extends Plugin } } + @Subscribe private void onNpcSpawned(NpcSpawned npcSpawned) { switch (npcSpawned.getNpc().getId()) @@ -153,6 +148,7 @@ public class ZalcanoPlugin extends Plugin } } + @Subscribe private void onNpcDespawned(NpcDespawned npcDespawned) { switch (npcDespawned.getNpc().getId()) @@ -176,6 +172,7 @@ public class ZalcanoPlugin extends Plugin * * @param gameTick */ + @Subscribe private void gameTickStepMachine(GameTick gameTick) { if (!config.showSteps()) @@ -222,6 +219,7 @@ public class ZalcanoPlugin extends Plugin setStep(Step.IDLE); } + @Subscribe private void gameTickOreListener(GameTick gameTick) { if (!config.showSteps()) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/zalcano/ZalcanoUtil.java b/runelite-client/src/main/java/net/runelite/client/plugins/zalcano/ZalcanoUtil.java index ed6a96633f..06117a27ef 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/zalcano/ZalcanoUtil.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/zalcano/ZalcanoUtil.java @@ -56,7 +56,7 @@ public class ZalcanoUtil private final ZalcanoPlugin plugin; static final String mine = "MINE"; - protected static final String warning = "GET BACK"; + static final String warning = "GET BACK"; private static final int ZALCANO_REGION = 12126; @Inject diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/zoom/ZoomPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/zoom/ZoomPlugin.java deleted file mode 100644 index 4033e4e843..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/zoom/ZoomPlugin.java +++ /dev/null @@ -1,214 +0,0 @@ -/* - * Copyright (c) 2018 Abex - * 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 net.runelite.client.plugins.zoom; - -import com.google.inject.Inject; -import com.google.inject.Provides; -import java.awt.event.KeyEvent; -import net.runelite.api.Client; -import net.runelite.api.ScriptID; -import net.runelite.client.events.ConfigChanged; -import net.runelite.api.events.FocusChanged; -import net.runelite.api.events.ScriptCallbackEvent; -import net.runelite.client.callback.ClientThread; -import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; -import net.runelite.client.input.KeyListener; -import net.runelite.client.input.KeyManager; -import net.runelite.client.plugins.Plugin; -import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.util.MiscUtils; - -@PluginDescriptor( - name = "Camera Zoom", - description = "Expand zoom limit and/or enable vertical camera", - tags = {"limit", "vertical"}, - enabledByDefault = false -) -public class ZoomPlugin extends Plugin implements KeyListener -{ - /** - * The largest (most zoomed in) value that can be used without the client crashing. - * - * Larger values trigger an overflow in the engine's fov to scale code. - */ - private static final int INNER_ZOOM_LIMIT = 1004; - private static final int DEFAULT_ZOOM_INCREMENT = 25; - - private boolean controlDown; - - @Inject - private Client client; - - @Inject - private ClientThread clientThread; - - @Inject - private ZoomConfig zoomConfig; - - @Inject - private KeyManager keyManager; - - @Inject - private EventBus eventBus; - - @Provides - ZoomConfig getConfig(ConfigManager configManager) - { - return configManager.getConfig(ZoomConfig.class); - } - - private void onScriptCallbackEvent(ScriptCallbackEvent event) - { - if (client.getIndexScripts().isOverlayOutdated()) - { - // if any cache overlay fails to load then assume at least one of the zoom scripts is outdated - // and prevent zoom extending entirely. - return; - } - - int[] intStack = client.getIntStack(); - int intStackSize = client.getIntStackSize(); - - if (!controlDown && "scrollWheelZoom".equals(event.getEventName()) && zoomConfig.controlFunction() == ControlFunction.CONTROL_TO_ZOOM) - { - intStack[intStackSize - 1] = 1; - } - - if ("innerZoomLimit".equals(event.getEventName()) && zoomConfig.innerLimit()) - { - intStack[intStackSize - 1] = INNER_ZOOM_LIMIT; - return; - } - - if ("outerZoomLimit".equals(event.getEventName())) - { - int outerLimit = MiscUtils.clamp(zoomConfig.outerLimit(), ZoomConfig.OUTER_LIMIT_MIN, ZoomConfig.OUTER_LIMIT_MAX); - int outerZoomLimit = 128 - outerLimit; - intStack[intStackSize - 1] = outerZoomLimit; - return; - } - - if ("scrollWheelZoomIncrement".equals(event.getEventName()) && zoomConfig.zoomIncrement() != DEFAULT_ZOOM_INCREMENT) - { - intStack[intStackSize - 1] = zoomConfig.zoomIncrement(); - return; - } - - if (zoomConfig.innerLimit()) - { - // This lets the options panel's slider have an exponential rate - final double exponent = 2.d; - switch (event.getEventName()) - { - case "zoomLinToExp": - { - double range = intStack[intStackSize - 1]; - double value = intStack[intStackSize - 2]; - value = Math.pow(value / range, exponent) * range; - intStack[intStackSize - 2] = (int) value; - break; - } - case "zoomExpToLin": - { - double range = intStack[intStackSize - 1]; - double value = intStack[intStackSize - 2]; - value = Math.pow(value / range, 1.d / exponent) * range; - intStack[intStackSize - 2] = (int) value; - break; - } - } - } - } - - private void onFocusChanged(FocusChanged event) - { - if (!event.isFocused()) - { - controlDown = false; - } - } - - @Override - protected void startUp() - { - addSubscriptions(); - - client.setCameraPitchRelaxerEnabled(zoomConfig.relaxCameraPitch()); - keyManager.registerKeyListener(this); - } - - @Override - protected void shutDown() - { - eventBus.unregister(this); - - client.setCameraPitchRelaxerEnabled(false); - keyManager.unregisterKeyListener(this); - controlDown = false; - } - - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(ScriptCallbackEvent.class, this, this::onScriptCallbackEvent); - eventBus.subscribe(FocusChanged.class, this, this::onFocusChanged); - } - - private void onConfigChanged(ConfigChanged ev) - { - client.setCameraPitchRelaxerEnabled(zoomConfig.relaxCameraPitch()); - } - - @Override - public void keyTyped(KeyEvent e) - { - } - - @Override - public void keyPressed(KeyEvent e) - { - if (e.getKeyCode() == KeyEvent.VK_CONTROL) - { - controlDown = true; - } - } - - @Override - public void keyReleased(KeyEvent e) - { - if (e.getKeyCode() == KeyEvent.VK_CONTROL) - { - controlDown = false; - - if (zoomConfig.controlFunction() == ControlFunction.CONTROL_TO_RESET) - { - final int zoomValue = MiscUtils.clamp(zoomConfig.ctrlZoomValue(), zoomConfig.OUTER_LIMIT_MIN, INNER_ZOOM_LIMIT); - clientThread.invokeLater(() -> client.runScript(ScriptID.CAMERA_DO_ZOOM, zoomValue, zoomValue)); - } - } - } -} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/ZulrahPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/ZulrahPlugin.java index 3328d50d89..db50e8bc04 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/ZulrahPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/ZulrahPlugin.java @@ -44,7 +44,7 @@ import net.runelite.api.events.GameTick; import net.runelite.api.events.NpcDespawned; import net.runelite.api.events.NpcSpawned; import net.runelite.client.config.ConfigManager; -import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import net.runelite.client.game.Sound; import net.runelite.client.game.SoundManager; import net.runelite.client.plugins.Plugin; @@ -80,26 +80,34 @@ public class ZulrahPlugin extends Plugin new ZulrahPatternC(), new ZulrahPatternD() }; + @Getter(AccessLevel.PACKAGE) private NPC zulrah; + @Inject private Client client; + @Inject private ZulrahConfig config; + @Inject private OverlayManager overlayManager; + @Inject private SoundManager soundManager; + @Inject private ZulrahCurrentPhaseOverlay currentPhaseOverlay; + @Inject private ZulrahNextPhaseOverlay nextPhaseOverlay; + @Inject private ZulrahPrayerOverlay zulrahPrayerOverlay; + @Inject private ZulrahOverlay zulrahOverlay; - @Inject - private EventBus eventBus; + private ZulrahInstance instance; @Provides @@ -109,9 +117,8 @@ public class ZulrahPlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { - addSubscriptions(); overlayManager.add(currentPhaseOverlay); overlayManager.add(nextPhaseOverlay); @@ -120,10 +127,8 @@ public class ZulrahPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { - eventBus.unregister(this); - overlayManager.remove(currentPhaseOverlay); overlayManager.remove(nextPhaseOverlay); overlayManager.remove(zulrahPrayerOverlay); @@ -132,14 +137,7 @@ public class ZulrahPlugin extends Plugin instance = null; } - private void addSubscriptions() - { - eventBus.subscribe(GameTick.class, this, this::onGameTick); - eventBus.subscribe(AnimationChanged.class, this, this::onAnimationChanged); - eventBus.subscribe(NpcSpawned.class, this, this::onNpcSpawned); - eventBus.subscribe(NpcDespawned.class, this, this::onNpcDespawned); - } - + @Subscribe private void onGameTick(GameTick event) { if (client.getGameState() != GameState.LOGGED_IN) @@ -209,6 +207,7 @@ public class ZulrahPlugin extends Plugin } } + @Subscribe private void onAnimationChanged(AnimationChanged event) { if (instance == null) @@ -247,6 +246,7 @@ public class ZulrahPlugin extends Plugin } } + @Subscribe private void onNpcSpawned(NpcSpawned event) { NPC npc = event.getNpc(); @@ -257,6 +257,7 @@ public class ZulrahPlugin extends Plugin } } + @Subscribe private void onNpcDespawned(NpcDespawned event) { NPC npc = event.getNpc(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/phase/ZulrahPhase.java b/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/phase/ZulrahPhase.java index fdc9b2b4b3..db61a78fdc 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/phase/ZulrahPhase.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/phase/ZulrahPhase.java @@ -69,12 +69,12 @@ public class ZulrahPhase public String toString() { return "ZulrahPhase{" + - "zulrahLocation=" + zulrahLocation + - ", type=" + type + - ", jad=" + jad + - ", standLocation=" + standLocation + - ", prayer=" + prayer + - '}'; + "zulrahLocation=" + zulrahLocation + + ", type=" + type + + ", jad=" + jad + + ", standLocation=" + standLocation + + ", prayer=" + prayer + + '}'; } // world location diff --git a/runelite-client/src/main/java/net/runelite/client/rs/ClientConfigLoader.java b/runelite-client/src/main/java/net/runelite/client/rs/ClientConfigLoader.java index 56b1079678..391d2c4a81 100644 --- a/runelite-client/src/main/java/net/runelite/client/rs/ClientConfigLoader.java +++ b/runelite-client/src/main/java/net/runelite/client/rs/ClientConfigLoader.java @@ -25,12 +25,12 @@ */ package net.runelite.client.rs; -import io.reactivex.Single; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; -import net.runelite.http.api.RuneLiteAPI; +import java.util.concurrent.TimeUnit; import okhttp3.HttpUrl; +import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; @@ -38,79 +38,59 @@ class ClientConfigLoader { private ClientConfigLoader() { - throw new RuntimeException(); } - private static final String CONFIG_URL = "http://oldschool.runescape.com/jav_config.ws"; - private static final int MAX_ATTEMPTS = 16; - - static Single fetch() + static RSConfig fetch(HttpUrl url) throws IOException { - return Single.create(obs -> + final Request request = new Request.Builder() + .url(url) + .build(); + + final RSConfig config = new RSConfig(); + + OkHttpClient okHttpClient = new OkHttpClient.Builder() + .connectTimeout(2000, TimeUnit.MILLISECONDS) + .build(); + + try (final Response response = okHttpClient.newCall(request).execute()) { - int attempt = 0; - - HostSupplier supplier = null; - HttpUrl url = HttpUrl.parse(CONFIG_URL); - - final RSConfig config = new RSConfig(); - - while (attempt++ < MAX_ATTEMPTS) + if (!response.isSuccessful()) { - final Request request = new Request.Builder() - .url(url) - .build(); - - try (final Response response = RuneLiteAPI.CLIENT.newCall(request).execute()) - { - if (!response.isSuccessful()) - { - if (supplier == null) - { - supplier = new HostSupplier(); - } - - url = supplier.get(); - continue; - } - - String str; - final BufferedReader in = new BufferedReader(new InputStreamReader(response.body().byteStream())); - while ((str = in.readLine()) != null) - { - int idx = str.indexOf('='); - - if (idx == -1) - { - continue; - } - - String s = str.substring(0, idx); - - switch (s) - { - case "param": - str = str.substring(idx + 1); - idx = str.indexOf('='); - s = str.substring(0, idx); - - config.getAppletProperties().put(s, str.substring(idx + 1)); - break; - case "msg": - // ignore - break; - default: - config.getClassLoaderProperties().put(s, str.substring(idx + 1)); - break; - } - } - - obs.onSuccess(config); - return; - } + throw new IOException("Unsuccessful response: " + response.message()); } - obs.onError(new IOException("Too many attempts")); - }); + String str; + final BufferedReader in = new BufferedReader(new InputStreamReader(response.body().byteStream())); + while ((str = in.readLine()) != null) + { + int idx = str.indexOf('='); + + if (idx == -1) + { + continue; + } + + String s = str.substring(0, idx); + + switch (s) + { + case "param": + str = str.substring(idx + 1); + idx = str.indexOf('='); + s = str.substring(0, idx); + + config.getAppletProperties().put(s, str.substring(idx + 1)); + break; + case "msg": + // ignore + break; + default: + config.getClassLoaderProperties().put(s, str.substring(idx + 1)); + break; + } + } + } + + return config; } -} +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/rs/ClientLoader.java b/runelite-client/src/main/java/net/runelite/client/rs/ClientLoader.java index 4be5803fd0..78e540f859 100644 --- a/runelite-client/src/main/java/net/runelite/client/rs/ClientLoader.java +++ b/runelite-client/src/main/java/net/runelite/client/rs/ClientLoader.java @@ -26,6 +26,7 @@ */ package net.runelite.client.rs; +import com.google.common.base.Strings; import com.google.common.io.ByteStreams; import java.applet.Applet; import java.io.IOException; @@ -36,13 +37,21 @@ import java.util.function.Supplier; import lombok.extern.slf4j.Slf4j; import net.runelite.client.RuneLite; import net.runelite.client.ui.RuneLiteSplashScreen; +import okhttp3.HttpUrl; @Slf4j public class ClientLoader implements Supplier { - private ClientUpdateCheckMode updateCheckMode; + private static final String CONFIG_URL = "http://oldschool.runescape.com/jav_config.ws"; + private static final String BACKUP_CONFIG_URL = "https://raw.githubusercontent.com/open-osrs/hosting/master/jav_config.ws"; + + private static final int NUM_ATTEMPTS = 6; + private final ClientUpdateCheckMode updateCheckMode; private Object client = null; + private HostSupplier hostSupplier = new HostSupplier(); + private RSConfig config; + public ClientLoader(ClientUpdateCheckMode updateCheckMode) { this.updateCheckMode = updateCheckMode; @@ -67,9 +76,7 @@ public class ClientLoader implements Supplier { try { - RuneLiteSplashScreen.stage(.2, "Fetching applet viewer config"); - - final RSConfig config = ClientConfigLoader.fetch().blockingGet(); + downloadConfig(); switch (updateCheckMode) { @@ -101,8 +108,57 @@ public class ClientLoader implements Supplier } } + private void downloadConfig() throws IOException + { + HttpUrl url = HttpUrl.parse(CONFIG_URL); + IOException err = null; + for (int attempt = 0; attempt < NUM_ATTEMPTS; attempt++) + { + RuneLiteSplashScreen.stage(.0, "Connecting with gameserver (try " + (attempt + 1) + "/" + NUM_ATTEMPTS + ")"); + try + { + config = ClientConfigLoader.fetch(url); + + if (Strings.isNullOrEmpty(config.getCodeBase()) || Strings.isNullOrEmpty(config.getInitialJar()) || Strings.isNullOrEmpty(config.getInitialClass())) + { + throw new IOException("Invalid or missing jav_config"); + } + + return; + } + catch (IOException e) + { + log.info("Failed to get jav_config from host \"{}\" ({})", url.host(), e.getMessage()); + String host = hostSupplier.get(); + url = url.newBuilder().host(host).build(); + err = e; + } + } + + log.info("Falling back to backup client config"); + + try + { + RSConfig backupConfig = ClientConfigLoader.fetch(HttpUrl.parse(BACKUP_CONFIG_URL)); + + if (Strings.isNullOrEmpty(backupConfig.getCodeBase()) || Strings.isNullOrEmpty(backupConfig.getInitialJar()) || Strings.isNullOrEmpty(backupConfig.getInitialClass())) + { + throw new IOException("Invalid or missing jav_config"); + } + + // Randomize the codebase + String codebase = hostSupplier.get(); + backupConfig.setCodebase("http://" + codebase + "/"); + config = backupConfig; + } + catch (IOException ex) + { + throw err; // use error from Jagex's servers + } + } + private static Applet loadRLPlus(final RSConfig config) - throws ClassNotFoundException, InstantiationException, IllegalAccessException + throws ClassNotFoundException, InstantiationException, IllegalAccessException { RuneLiteSplashScreen.stage(.465, "Starting Open Old School RuneScape"); @@ -136,7 +192,7 @@ public class ClientLoader implements Supplier } private static Applet loadVanilla(final RSConfig config) - throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException + throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException { RuneLiteSplashScreen.stage(.465, "Starting Vanilla Old School RuneScape"); @@ -153,7 +209,7 @@ public class ClientLoader implements Supplier } private static Applet loadFromClass(final RSConfig config, final Class clientClass) - throws IllegalAccessException, InstantiationException + throws IllegalAccessException, InstantiationException { final Applet rs = (Applet) clientClass.newInstance(); rs.setStub(new RSAppletStub(config)); diff --git a/runelite-client/src/main/java/net/runelite/client/rs/HostSupplier.java b/runelite-client/src/main/java/net/runelite/client/rs/HostSupplier.java index 502e72c2c9..522173ae74 100644 --- a/runelite-client/src/main/java/net/runelite/client/rs/HostSupplier.java +++ b/runelite-client/src/main/java/net/runelite/client/rs/HostSupplier.java @@ -1,6 +1,5 @@ /* * Copyright (c) 2019 Abex - * Copyright (c) 2019, Lucas * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -25,8 +24,10 @@ */ package net.runelite.client.rs; +import java.io.IOException; import java.util.ArrayDeque; import java.util.Collections; +import java.util.EnumSet; import java.util.List; import java.util.Queue; import java.util.Random; @@ -36,41 +37,46 @@ import lombok.extern.slf4j.Slf4j; import net.runelite.http.api.RuneLiteAPI; import net.runelite.http.api.worlds.World; import net.runelite.http.api.worlds.WorldClient; -import net.runelite.http.api.worlds.WorldResult; -import okhttp3.HttpUrl; +import net.runelite.http.api.worlds.WorldType; @Slf4j -class HostSupplier implements Supplier +class HostSupplier implements Supplier { - private final Random random = new Random(); - private Queue hosts = new ArrayDeque<>(); + private final Random random = new Random(System.nanoTime()); + private Queue hosts = new ArrayDeque<>(); @Override - public HttpUrl get() + public String get() { if (!hosts.isEmpty()) { return hosts.poll(); } - List newHosts = new WorldClient(RuneLiteAPI.CLIENT) - .lookupWorlds() - .map(WorldResult::getWorlds) - .blockingSingle() - .stream() - .map(World::getAddress) - .map(HttpUrl::parse) - .collect(Collectors.toList()); + try + { + List newHosts = new WorldClient(RuneLiteAPI.CLIENT) + .lookupWorlds() + .getWorlds() + .stream() + .filter(w -> w.getTypes().isEmpty() || EnumSet.of(WorldType.MEMBERS).equals(w.getTypes())) + .map(World::getAddress) + .collect(Collectors.toList()); - Collections.shuffle(newHosts, random); + Collections.shuffle(newHosts, random); - hosts.addAll(newHosts.subList(0, 16)); + hosts.addAll(newHosts.subList(0, 16)); + } + catch (IOException e) + { + log.warn("Unable to retrieve world list", e); + } while (hosts.size() < 2) { - hosts.add(HttpUrl.parse("oldschool" + (random.nextInt(50) + 1) + ".runescape.COM")); + hosts.add("oldschool" + (random.nextInt(50) + 1) + ".runescape.COM"); } return hosts.poll(); } -} +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/rs/RSConfig.java b/runelite-client/src/main/java/net/runelite/client/rs/RSConfig.java index e0c5539323..df6de027ff 100644 --- a/runelite-client/src/main/java/net/runelite/client/rs/RSConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/rs/RSConfig.java @@ -40,6 +40,11 @@ class RSConfig return classLoaderProperties.get("codebase"); } + void setCodebase(String codebase) + { + classLoaderProperties.put("codebase", codebase); + } + String getInitialJar() { return classLoaderProperties.get("initial_jar"); diff --git a/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java b/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java index 10f95aa28e..2244ce5b62 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java @@ -71,7 +71,6 @@ import net.runelite.api.Constants; import net.runelite.api.GameState; import net.runelite.api.Player; import net.runelite.api.Point; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.GameStateChanged; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; @@ -84,6 +83,7 @@ import net.runelite.client.config.Keybind; import net.runelite.client.config.RuneLiteConfig; import net.runelite.client.config.WarningOnExit; import net.runelite.client.eventbus.EventBus; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.events.NavigationButtonAdded; import net.runelite.client.events.NavigationButtonRemoved; import net.runelite.client.input.KeyManager; @@ -312,6 +312,7 @@ public class ClientUI /** * Initialize UI. + * * @param runelite runelite instance that will be shut down on exit * @throws Exception exception that can occur during creation of the UI */ @@ -1023,9 +1024,9 @@ public class ClientUI setOpacityMethod.invoke(peerField.get(frame), opacity); } - catch (NoSuchFieldException | NoSuchMethodException | ClassNotFoundException | IllegalAccessException | InvocationTargetException e) + catch (NoSuchFieldException | NoSuchMethodException | ClassNotFoundException | IllegalAccessException | InvocationTargetException | NullPointerException e) { - e.printStackTrace(); + // e.printStackTrace(); } }); } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/ContainableFrame.java b/runelite-client/src/main/java/net/runelite/client/ui/ContainableFrame.java index 7d03d05ef3..b91e3deeaa 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/ContainableFrame.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/ContainableFrame.java @@ -36,7 +36,7 @@ public class ContainableFrame extends JFrame { ALWAYS, RESIZING, - NEVER; + NEVER } private static final int SCREEN_EDGE_CLOSE_DISTANCE = 40; diff --git a/runelite-client/src/main/java/net/runelite/client/ui/components/ComboBoxListRenderer.java b/runelite-client/src/main/java/net/runelite/client/ui/components/ComboBoxListRenderer.java index 5a457aeb10..2699fe0f20 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/components/ComboBoxListRenderer.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/components/ComboBoxListRenderer.java @@ -31,8 +31,8 @@ import javax.swing.JList; import javax.swing.ListCellRenderer; import javax.swing.border.EmptyBorder; import lombok.Setter; -import net.runelite.client.ui.ColorScheme; import net.runelite.api.util.Text; +import net.runelite.client.ui.ColorScheme; /** * A custom list renderer to avoid substance's weird coloring. diff --git a/runelite-client/src/main/java/net/runelite/client/ui/components/DimmableJPanel.java b/runelite-client/src/main/java/net/runelite/client/ui/components/DimmableJPanel.java index 1fa204ac9c..58a6fd7e95 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/components/DimmableJPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/components/DimmableJPanel.java @@ -73,7 +73,7 @@ public class DimmableJPanel extends JPanel * * @param dimmed */ - public void setDimmed(boolean dimmed) + void setDimmed(boolean dimmed) { this.dimmed = dimmed; diff --git a/runelite-client/src/main/java/net/runelite/client/ui/components/IconTextField.java b/runelite-client/src/main/java/net/runelite/client/ui/components/IconTextField.java index c02bab2c5a..0408837302 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/components/IconTextField.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/components/IconTextField.java @@ -29,6 +29,7 @@ package net.runelite.client.ui.components; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; +import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; @@ -222,6 +223,11 @@ public class IconTextField extends JPanel textField.addKeyListener(keyListener); } + public void addClearListener(Consumer actionEventConsumer) + { + clearButton.addActionListener(actionEventConsumer::accept); + } + public void addKeyListener(Consumer keyEventConsumer) { addKeyListener(new net.runelite.client.input.KeyListener() diff --git a/runelite-client/src/main/java/net/runelite/client/ui/components/InfoPanel.java b/runelite-client/src/main/java/net/runelite/client/ui/components/InfoPanel.java index 1de2c12093..177ab845da 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/components/InfoPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/components/InfoPanel.java @@ -65,10 +65,9 @@ public class InfoPanel extends JPanel private static final File RUNELITE_DIR = new File(System.getProperty("user.home"), ".runelite"); private static final File LOGS_DIR = new File(RUNELITE_DIR, "logs"); - private final Properties properties = new Properties(); - public InfoPanel() { + Properties properties = new Properties(); try (InputStream in = getClass().getResourceAsStream("/open.osrs.properties")) { properties.load(in); diff --git a/runelite-client/src/main/java/net/runelite/client/ui/components/MessagePanel.java b/runelite-client/src/main/java/net/runelite/client/ui/components/MessagePanel.java index 3789fa67b9..e1f9d4d56c 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/components/MessagePanel.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/components/MessagePanel.java @@ -52,7 +52,7 @@ public class MessagePanel extends JPanel private final JLabel titleLabel = new JLabel("Welcome to OpenOSRS"); private final JLabel messageArea; - private final JLabel barLabel = new JLabel("Doing something important"); + private final JLabel barLabel = new JLabel("Connecting with gameserver (try 1/6)"); private final JProgressBar bar = new JProgressBar(0, 100); @Getter(AccessLevel.NONE) diff --git a/runelite-client/src/main/java/net/runelite/client/ui/components/MinimumSizedPanel.java b/runelite-client/src/main/java/net/runelite/client/ui/components/MinimumSizedPanel.java index 87c24770c2..6ff6ba7705 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/components/MinimumSizedPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/components/MinimumSizedPanel.java @@ -24,8 +24,8 @@ */ package net.runelite.client.ui.components; -import javax.swing.JPanel; import java.awt.Dimension; +import javax.swing.JPanel; public class MinimumSizedPanel extends JPanel { diff --git a/runelite-client/src/main/java/net/runelite/client/ui/components/colorpicker/RecentColors.java b/runelite-client/src/main/java/net/runelite/client/ui/components/colorpicker/RecentColors.java index b1815703af..6a38e49da5 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/components/colorpicker/RecentColors.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/components/colorpicker/RecentColors.java @@ -35,10 +35,10 @@ import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.function.Consumer; import javax.swing.JPanel; +import net.runelite.api.util.Text; import net.runelite.client.config.ConfigManager; import static net.runelite.client.ui.components.colorpicker.RuneliteColorPicker.CONFIG_GROUP; import net.runelite.client.util.ColorUtil; -import net.runelite.api.util.Text; final class RecentColors { diff --git a/runelite-client/src/main/java/net/runelite/client/ui/components/colorpicker/RuneliteColorPicker.java b/runelite-client/src/main/java/net/runelite/client/ui/components/colorpicker/RuneliteColorPicker.java index aff803450e..9833d9dd39 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/components/colorpicker/RuneliteColorPicker.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/components/colorpicker/RuneliteColorPicker.java @@ -94,7 +94,7 @@ public class RuneliteColorPicker extends JDialog private Consumer onClose; RuneliteColorPicker(Window parent, Color previousColor, String title, boolean alphaHidden, - final ConfigManager configManager, final ColorPickerManager colorPickerManager) + final ConfigManager configManager, final ColorPickerManager colorPickerManager) { super(parent, "RuneLite Color Picker - " + title, ModalityType.MODELESS); diff --git a/runelite-client/src/main/java/net/runelite/client/ui/components/shadowlabel/JShadowedLabel.java b/runelite-client/src/main/java/net/runelite/client/ui/components/shadowlabel/JShadowedLabel.java index 79b7200f7b..8132cb3f7e 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/components/shadowlabel/JShadowedLabel.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/components/shadowlabel/JShadowedLabel.java @@ -71,10 +71,10 @@ public class JShadowedLabel extends JLabel { // Set font rendering properties like the OS's font rendering Toolkit tk = Toolkit.getDefaultToolkit(); - Map desktopHints = (Map)(tk.getDesktopProperty("awt.font.desktophints")); + Map desktopHints = (Map) (tk.getDesktopProperty("awt.font.desktophints")); if (desktopHints != null) { - ((Graphics2D)g).addRenderingHints(desktopHints); + ((Graphics2D) g).addRenderingHints(desktopHints); } super.paint(g); } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/Overlay.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/Overlay.java index 5791627445..f49f938485 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/Overlay.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/Overlay.java @@ -55,7 +55,7 @@ public abstract class Overlay implements LayoutableRenderableEntity plugin = null; } - protected Overlay(Plugin plugin) + protected Overlay(@Nullable Plugin plugin) { this.plugin = plugin; } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java index 44d0b9290c..10870f73b1 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java @@ -32,9 +32,9 @@ import java.awt.Graphics2D; import java.awt.Paint; import java.awt.Point; import java.awt.Rectangle; -import java.awt.Toolkit; import java.awt.RenderingHints; import java.awt.Stroke; +import java.awt.Toolkit; import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; import java.awt.geom.AffineTransform; @@ -46,8 +46,8 @@ import javax.swing.SwingUtilities; import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; import net.runelite.api.GameState; -import net.runelite.api.MenuOpcode; import net.runelite.api.MenuEntry; +import net.runelite.api.MenuOpcode; import net.runelite.api.events.BeforeRender; import net.runelite.api.events.ClientTick; import net.runelite.api.events.FocusChanged; @@ -178,7 +178,7 @@ public class OverlayRenderer extends MouseAdapter implements KeyListener // Set font rendering properties like the OS's font rendering Toolkit tk = Toolkit.getDefaultToolkit(); - Map desktopHints = (Map)(tk.getDesktopProperty("awt.font.desktophints")); + Map desktopHints = (Map) (tk.getDesktopProperty("awt.font.desktophints")); if (desktopHints != null) { graphics.addRenderingHints(desktopHints); diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayUtil.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayUtil.java index 895f394503..87a39ae465 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayUtil.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayUtil.java @@ -295,8 +295,6 @@ public class OverlayUtil break; case TOP_LEFT: case TOP_CENTER: - result.y += dimension.height + (dimension.height == 0 ? 0 : padding); - break; case CANVAS_TOP_RIGHT: case TOP_RIGHT: result.y += dimension.height + (dimension.height == 0 ? 0 : padding); diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetItemOverlay.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetItemOverlay.java index 5e707064b4..14df56db2c 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetItemOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetItemOverlay.java @@ -33,16 +33,7 @@ import java.util.Set; import lombok.AccessLevel; import lombok.Setter; import net.runelite.api.widgets.Widget; -import static net.runelite.api.widgets.WidgetID.BANK_GROUP_ID; -import static net.runelite.api.widgets.WidgetID.BANK_INVENTORY_GROUP_ID; -import static net.runelite.api.widgets.WidgetID.DEPOSIT_BOX_GROUP_ID; -import static net.runelite.api.widgets.WidgetID.EQUIPMENT_GROUP_ID; -import static net.runelite.api.widgets.WidgetID.EQUIPMENT_INVENTORY_GROUP_ID; -import static net.runelite.api.widgets.WidgetID.GRAND_EXCHANGE_INVENTORY_GROUP_ID; -import static net.runelite.api.widgets.WidgetID.GUIDE_PRICES_INVENTORY_GROUP_ID; -import static net.runelite.api.widgets.WidgetID.INVENTORY_GROUP_ID; -import static net.runelite.api.widgets.WidgetID.SEED_VAULT_INVENTORY_GROUP_ID; -import static net.runelite.api.widgets.WidgetID.SHOP_INVENTORY_GROUP_ID; +import static net.runelite.api.widgets.WidgetID.*; import static net.runelite.api.widgets.WidgetInfo.BANK_CONTENT_CONTAINER; import static net.runelite.api.widgets.WidgetInfo.BANK_TAB_CONTAINER; import static net.runelite.api.widgets.WidgetInfo.TO_GROUP; @@ -64,7 +55,7 @@ public abstract class WidgetItemOverlay extends Overlay super.setLayer(OverlayLayer.ABOVE_WIDGETS); } - public abstract void renderItemOverlay(Graphics2D graphics, int itemId, WidgetItem itemWidget); + protected abstract void renderItemOverlay(Graphics2D graphics, int itemId, WidgetItem itemWidget); @Override public Dimension render(Graphics2D graphics) diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetOverlay.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetOverlay.java index 269e113b6a..801608a8a5 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetOverlay.java @@ -46,6 +46,7 @@ public class WidgetOverlay extends Overlay .put(WidgetInfo.FOSSIL_ISLAND_OXYGENBAR, OverlayPosition.TOP_LEFT) .put(WidgetInfo.EXPERIENCE_TRACKER_WIDGET, OverlayPosition.TOP_RIGHT) .put(WidgetInfo.RAIDS_POINTS_INFOBOX, OverlayPosition.TOP_RIGHT) + .put(WidgetInfo.GWD_KC, OverlayPosition.TOP_RIGHT) .put(WidgetInfo.TITHE_FARM, OverlayPosition.TOP_RIGHT) .put(WidgetInfo.PEST_CONTROL_BOAT_INFO, OverlayPosition.TOP_LEFT) .put(WidgetInfo.PEST_CONTROL_INFO, OverlayPosition.TOP_LEFT) diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/table/TableComponent.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/table/TableComponent.java index 117b021eca..376876e3a5 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/table/TableComponent.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/table/TableComponent.java @@ -130,6 +130,7 @@ public class TableComponent implements LayoutableRenderableEntity /** * Returns the width that each column should take up * Based on https://stackoverflow.com/questions/22206825/algorithm-for-calculating-variable-column-widths-for-set-table-width + * * @param metrics * @return int[] of column width */ @@ -325,7 +326,8 @@ public class TableComponent implements LayoutableRenderableEntity /** * Returns the color for the specified table element. * Priority order: cell->row->column->default - * @param row TableRow element + * + * @param row TableRow element * @param colIndex column index */ private Color getCellColor(final TableRow row, final int colIndex) @@ -359,7 +361,8 @@ public class TableComponent implements LayoutableRenderableEntity /** * Returns the alignment for the specified table element. * Priority order: cell->row->column->default - * @param row TableRow element + * + * @param row TableRow element * @param colIndex column index */ private TableAlignment getCellAlignment(final TableRow row, final int colIndex) diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/InfoBoxManager.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/InfoBoxManager.java index 92e70c87d8..7b73093358 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/InfoBoxManager.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/InfoBoxManager.java @@ -36,11 +36,11 @@ import java.util.function.Predicate; import javax.inject.Inject; import javax.inject.Singleton; import lombok.extern.slf4j.Slf4j; -import net.runelite.client.events.ConfigChanged; import net.runelite.client.config.RuneLiteConfig; import net.runelite.client.eventbus.EventBus; -import net.runelite.client.util.AsyncBufferedImage; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.util.AsyncBufferedImage; @Singleton @Slf4j diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/worldmap/WorldMapOverlay.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/worldmap/WorldMapOverlay.java index 96c9a52f7d..4c45f032e3 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/worldmap/WorldMapOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/worldmap/WorldMapOverlay.java @@ -192,7 +192,7 @@ public class WorldMapOverlay extends Overlay return null; } - Float pixelsPerTile = ro.getWorldMapZoom(); + float pixelsPerTile = ro.getWorldMapZoom(); Widget map = client.getWidget(WidgetInfo.WORLD_MAP_VIEW); if (map != null) diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/worldmap/WorldMapPoint.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/worldmap/WorldMapPoint.java index 878b0125a0..94fc487db9 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/worldmap/WorldMapPoint.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/worldmap/WorldMapPoint.java @@ -27,10 +27,10 @@ package net.runelite.client.ui.overlay.worldmap; import java.awt.Rectangle; import java.awt.event.MouseEvent; import java.awt.image.BufferedImage; +import javax.annotation.Nullable; import lombok.Data; import net.runelite.api.Point; import net.runelite.api.coords.WorldPoint; -import javax.annotation.Nullable; @Data public class WorldMapPoint @@ -66,7 +66,7 @@ public class WorldMapPoint private String tooltip; - public WorldMapPoint(WorldPoint worldPoint, BufferedImage image) + protected WorldMapPoint(WorldPoint worldPoint, BufferedImage image) { this.worldPoint = worldPoint; this.image = image; diff --git a/runelite-client/src/main/java/net/runelite/client/util/Clipboard.java b/runelite-client/src/main/java/net/runelite/client/util/Clipboard.java index 58932ba5ed..37170d0fa6 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/Clipboard.java +++ b/runelite-client/src/main/java/net/runelite/client/util/Clipboard.java @@ -38,7 +38,7 @@ public class Clipboard { Transferable contents = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null); - if (contents == null || ! contents.isDataFlavorSupported(DataFlavor.stringFlavor)) + if (contents == null || !contents.isDataFlavorSupported(DataFlavor.stringFlavor)) { return null; } diff --git a/runelite-client/src/main/java/net/runelite/client/util/ColorUtil.java b/runelite-client/src/main/java/net/runelite/client/util/ColorUtil.java index 3f23c38f53..56cb75ca7d 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/ColorUtil.java +++ b/runelite-client/src/main/java/net/runelite/client/util/ColorUtil.java @@ -77,7 +77,7 @@ public class ColorUtil * Converts a given color to it's hexadecimal equivalent. * * @param color Color to get hexadecimal string from. - * @return Hexadecimal string representing the given color, in the form "#abcdef". + * @return Hexadecimal string representing the given color, in the form "#abcdef". */ public static String toHexColor(final Color color) { diff --git a/runelite-client/src/main/java/net/runelite/client/util/DeferredEventBus.java b/runelite-client/src/main/java/net/runelite/client/util/DeferredEventBus.java index 94eb2d4693..71827808ce 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/DeferredEventBus.java +++ b/runelite-client/src/main/java/net/runelite/client/util/DeferredEventBus.java @@ -47,7 +47,7 @@ public class DeferredEventBus extends EventBus } @Override - public void post(Class eventClass, @NonNull Event event) + public void post(Class eventClass, @NonNull T event) { pendingEvents.add(new ImmutablePair<>(eventClass, event)); } diff --git a/runelite-client/src/main/java/net/runelite/client/util/ExecutorServiceExceptionLogger.java b/runelite-client/src/main/java/net/runelite/client/util/ExecutorServiceExceptionLogger.java index fe8902d663..165425210d 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/ExecutorServiceExceptionLogger.java +++ b/runelite-client/src/main/java/net/runelite/client/util/ExecutorServiceExceptionLogger.java @@ -34,6 +34,7 @@ import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import lombok.RequiredArgsConstructor; +import org.jetbrains.annotations.NotNull; /** * Wrapper for ${@link ScheduledExecutorService} that will log all uncaught exceptions as warning to console @@ -53,26 +54,29 @@ public class ExecutorServiceExceptionLogger implements ScheduledExecutorService return CallableExceptionLogger.wrap(command); } + @NotNull @Override - public Future submit(Callable task) + public Future submit(@NotNull Callable task) { return service.submit(monitor(task)); } + @NotNull @Override - public Future submit(Runnable task, T result) + public Future submit(@NotNull Runnable task, T result) { return service.submit(monitor(task), result); } + @NotNull @Override - public Future submit(Runnable task) + public Future submit(@NotNull Runnable task) { return service.submit(monitor(task)); } @Override - public void execute(Runnable command) + public void execute(@NotNull Runnable command) { service.execute(monitor(command)); } @@ -85,6 +89,7 @@ public class ExecutorServiceExceptionLogger implements ScheduledExecutorService service.shutdown(); } + @NotNull @Override public List shutdownNow() { @@ -104,55 +109,62 @@ public class ExecutorServiceExceptionLogger implements ScheduledExecutorService } @Override - public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException + public boolean awaitTermination(long timeout, @NotNull TimeUnit unit) throws InterruptedException { return service.awaitTermination(timeout, unit); } + @NotNull @Override - public List> invokeAll(Collection> tasks) throws InterruptedException + public List> invokeAll(@NotNull Collection> tasks) throws InterruptedException { return service.invokeAll(tasks); } + @NotNull @Override - public List> invokeAll(Collection> tasks, long timeout, TimeUnit unit) throws InterruptedException + public List> invokeAll(@NotNull Collection> tasks, long timeout, @NotNull TimeUnit unit) throws InterruptedException { return service.invokeAll(tasks, timeout, unit); } + @NotNull @Override - public T invokeAny(Collection> tasks) throws InterruptedException, ExecutionException + public T invokeAny(@NotNull Collection> tasks) throws InterruptedException, ExecutionException { return service.invokeAny(tasks); } @Override - public T invokeAny(Collection> tasks, long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException + public T invokeAny(@NotNull Collection> tasks, long timeout, @NotNull TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException { return service.invokeAny(tasks, timeout, unit); } + @NotNull @Override - public ScheduledFuture schedule(Runnable command, long delay, TimeUnit unit) + public ScheduledFuture schedule(@NotNull Runnable command, long delay, @NotNull TimeUnit unit) { return service.schedule(command, delay, unit); } + @NotNull @Override - public ScheduledFuture schedule(Callable callable, long delay, TimeUnit unit) + public ScheduledFuture schedule(@NotNull Callable callable, long delay, @NotNull TimeUnit unit) { return service.schedule(callable, delay, unit); } + @NotNull @Override - public ScheduledFuture scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit) + public ScheduledFuture scheduleAtFixedRate(@NotNull Runnable command, long initialDelay, long period, @NotNull TimeUnit unit) { return service.scheduleAtFixedRate(command, initialDelay, period, unit); } + @NotNull @Override - public ScheduledFuture scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit) + public ScheduledFuture scheduleWithFixedDelay(@NotNull Runnable command, long initialDelay, long delay, @NotNull TimeUnit unit) { return service.scheduleWithFixedDelay(command, initialDelay, delay, unit); } diff --git a/runelite-client/src/main/java/net/runelite/client/util/GameEventManager.java b/runelite-client/src/main/java/net/runelite/client/util/GameEventManager.java index 19b48eaa4e..dd48a2f0f1 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/GameEventManager.java +++ b/runelite-client/src/main/java/net/runelite/client/util/GameEventManager.java @@ -33,7 +33,6 @@ import javax.inject.Singleton; import net.runelite.api.Client; import net.runelite.api.Constants; import net.runelite.api.GameState; -import net.runelite.api.TileItem; import net.runelite.api.InventoryID; import net.runelite.api.ItemContainer; import net.runelite.api.NPC; @@ -41,6 +40,7 @@ import net.runelite.api.Node; import net.runelite.api.Player; import net.runelite.api.Scene; import net.runelite.api.Tile; +import net.runelite.api.TileItem; import net.runelite.api.events.DecorativeObjectSpawned; import net.runelite.api.events.GameObjectSpawned; import net.runelite.api.events.GroundObjectSpawned; diff --git a/runelite-client/src/main/java/net/runelite/client/util/HotkeyListener.java b/runelite-client/src/main/java/net/runelite/client/util/HotkeyListener.java index 42688718e0..695a886455 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/HotkeyListener.java +++ b/runelite-client/src/main/java/net/runelite/client/util/HotkeyListener.java @@ -82,11 +82,11 @@ public abstract class HotkeyListener implements KeyListener } } - public void hotkeyPressed() + protected void hotkeyPressed() { } - public void hotkeyReleased() + protected void hotkeyReleased() { } } diff --git a/runelite-client/src/main/java/net/runelite/client/util/ImageUtil.java b/runelite-client/src/main/java/net/runelite/client/util/ImageUtil.java index 8c581b2301..ae59587920 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/ImageUtil.java +++ b/runelite-client/src/main/java/net/runelite/client/util/ImageUtil.java @@ -416,14 +416,14 @@ public class ImageUtil } /** - * Recolors pixels of the given image with the given color based on a given recolor condition - * predicate. + * Recolors pixels of the given image with the given color based on a given recolor condition + * predicate. * * @param image The image which should have its non-transparent pixels recolored. * @param color The color with which to recolor pixels. * @param recolorCondition The condition on which to recolor pixels with the given color. - * @return The given image with all pixels fulfilling the recolor condition predicate - * set to the given color. + * @return The given image with all pixels fulfilling the recolor condition predicate + * set to the given color. */ public static BufferedImage recolorImage(final BufferedImage image, final Color color, final Predicate recolorCondition) { @@ -672,7 +672,7 @@ public class ImageUtil pixelX += pixelW * tmp; canvasOffset += tmp; } - + client.scaleSprite(canvas, pixels, 0, pixelX, pixelY, canvasIdx, canvasOffset, newW, newH, pixelW, pixelH, oldW); return result; diff --git a/runelite-client/src/main/java/net/runelite/client/util/ItemUtil.java b/runelite-client/src/main/java/net/runelite/client/util/ItemUtil.java index c3cfeb599e..d279b6f087 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/ItemUtil.java +++ b/runelite-client/src/main/java/net/runelite/client/util/ItemUtil.java @@ -42,8 +42,9 @@ public class ItemUtil /** * Converts itemArray into a GameItem collection limited to the passed ids * Consolidates all matching Item's qty, by id + * * @param itemArray item array to work on - * @param ids item ids to include in result + * @param ids item ids to include in result * @return Map of GameItem by item id */ public static Map toGameItemMap(Item[] itemArray, @Nullable Set ids) @@ -69,6 +70,7 @@ public class ItemUtil /** * Converts itemArray into a GameItem collection * Consolidates all matching Item's qty, by id + * * @param itemArray item array to work on * @return Map of GameItem by item id */ @@ -79,8 +81,9 @@ public class ItemUtil /** * Checks that the itemArray contains the all of the requested ids + * * @param itemArray item array to work on - * @param ids item ids to check for + * @param ids item ids to check for * @return true if itemArray contains all requested item ids */ public static boolean containsAllItemIds(Item[] itemArray, Set ids) @@ -106,8 +109,9 @@ public class ItemUtil /** * Checks if itemArray contains any item id that also exists in ids + * * @param itemArray item array to work on - * @param ids item ids to check for + * @param ids item ids to check for * @return true if any item in itemArray contains any id from ids */ public static boolean containsAnyItemId(Item[] itemArray, Set ids) @@ -126,8 +130,9 @@ public class ItemUtil /** * Checks if any item id in itemArray matches itemID + * * @param itemArray item array to work on - * @param itemID item id to check for + * @param itemID item id to check for * @return true if any item in itemArray matches itemID */ public static boolean containsItemId(Item[] itemArray, int itemID) @@ -145,8 +150,9 @@ public class ItemUtil /** * Returns null if index is bigger than array otherwise array content. + * * @param itemArray item array to check - * @param index index to grab + * @param index index to grab * @return null if index is bigger than array otherwise array content */ public static Item safeGetItemAtIndex(Item[] itemArray, int index) @@ -161,8 +167,9 @@ public class ItemUtil /** * Returns -1 if index is bigger than array otherwise array contents `id` value + * * @param itemArray item array to check - * @param index index to grab + * @param index index to grab * @return -1 if index is bigger than array otherwise array contents `id` value */ public static Integer safeGetItemIdAtIndex(Item[] itemArray, int index) @@ -178,7 +185,8 @@ public class ItemUtil /** * Checks that the itemArray contains all requestedItems. Must contain >= the requested qty for each id * Uses GameItem to represent the requestedItems since we can't easily create Item instances - * @param itemArray item array to check against + * + * @param itemArray item array to check against * @param requestedItems Collection of GameItems which contain the item id & minimum qty * @return true if contains all requestedItems */ @@ -206,7 +214,8 @@ public class ItemUtil /** * Checks that the itemArray contains all requestedItems. Must contain >= the requested qty for each id * Uses GameItem to represent the requestedItems since we can't easily create Item instances - * @param itemArray item array to check against + * + * @param itemArray item array to check against * @param requestedItems GameItem(s) to request * @return true if contains all requestedItems */ diff --git a/runelite-client/src/main/java/net/runelite/client/util/LinkBrowser.java b/runelite-client/src/main/java/net/runelite/client/util/LinkBrowser.java index 4e27ba15d7..ce1ef1aeac 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/LinkBrowser.java +++ b/runelite-client/src/main/java/net/runelite/client/util/LinkBrowser.java @@ -132,6 +132,7 @@ public class LinkBrowser /** * Tries to open the specified {@code File} with the systems default text editor. If operation fails * an error message is displayed with the option to copy the absolute file path to clipboard. + * * @param file the File instance of the log file * @return did the file open successfully? */ diff --git a/runelite-client/src/main/java/net/runelite/client/util/MenuUtil.java b/runelite-client/src/main/java/net/runelite/client/util/MenuUtil.java index e2f7e548a8..e7b6984a5b 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/MenuUtil.java +++ b/runelite-client/src/main/java/net/runelite/client/util/MenuUtil.java @@ -38,7 +38,7 @@ import net.runelite.api.util.Text; @Slf4j public class MenuUtil { - public static void swap(Client client, MenuEntry entry1, MenuEntry entry2) + private static void swap(Client client, MenuEntry entry1, MenuEntry entry2) { List entries = Arrays.asList(client.getMenuEntries()); @@ -69,7 +69,7 @@ public class MenuUtil } } - public static void swap(Client client, String option1, String option2, String target1, String target2) + private static void swap(Client client, String option1, String option2, String target1, String target2) { MenuEntry entry1 = findOptionTarget(getMenuStream(client), Text.standardize(option1), Text.standardize(target1)); MenuEntry entry2 = findOptionTarget(getMenuStream(client), Text.standardize(option2), Text.standardize(target2)); diff --git a/runelite-client/src/main/java/net/runelite/client/util/QuantityFormatter.java b/runelite-client/src/main/java/net/runelite/client/util/QuantityFormatter.java index beca46c629..b63c739a88 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/QuantityFormatter.java +++ b/runelite-client/src/main/java/net/runelite/client/util/QuantityFormatter.java @@ -77,9 +77,8 @@ public class QuantityFormatter /** * Convert a quantity to a short, comma separated, SI-prefix style string - * + *

* example: {@code 9,450}, {@code 2.14B}, {@code 100K} - * * @param quantity The quantity to convert. * @return a 6 or less character string, possibly with a decimal point, commas or K/M/B suffix @@ -124,10 +123,10 @@ public class QuantityFormatter /** * Convert a quantity to a short SI-prefix style string, possibly with a decimal, * with K after 100,000 and M after 10,000,000 - * + *

* example: {@code 9,450}, {@code 2.1B}, {@code 100K} - * - * @see #quantityToRSDecimalStack(int, boolean) + * + * @see #quantityToRSDecimalStack(int, boolean) */ public static String quantityToRSDecimalStack(int quantity) { @@ -137,7 +136,7 @@ public class QuantityFormatter /** * Convert a quantity to a short SI-prefix style string, possibly with decimals, * with K after 100,000 and M after 10,000,000 - * + *

* example without {@code precise}: {@code 9,450}, {@code 2.1B}, {@code 8.4M} * example with {@code precise}: {@code 9,450}, {@code 2.147B}, {@code 8.32M} * @@ -178,7 +177,7 @@ public class QuantityFormatter /** * Formats a number to be comma delimited. No suffixes are given - * + *

* example: {@code 10,123,351}, {@code 5} */ public static synchronized String formatNumber(final long number) @@ -190,7 +189,7 @@ public class QuantityFormatter /** * Formats a number to be comma delimited. No suffixes are given. Has at * most 3 decimal places - * + *

* example: {@code 10,123,351}, {@code 5.612} */ public static synchronized String formatNumber(double number) diff --git a/runelite-client/src/main/java/net/runelite/client/util/ReflectUtil.java b/runelite-client/src/main/java/net/runelite/client/util/ReflectUtil.java new file mode 100644 index 0000000000..76530b6ab6 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/util/ReflectUtil.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2018, Tomas Slusny + * Copyright (c) 2018, Abex + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.client.util; + +import java.lang.invoke.MethodHandles; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +public class ReflectUtil +{ + private ReflectUtil() + { + } + + public static MethodHandles.Lookup privateLookupIn(Class clazz) + { + try + { + // Java 9+ has privateLookupIn method on MethodHandles, but since we are shipping and using Java 8 + // we need to access it via reflection. This is preferred way because it's Java 9+ public api and is + // likely to not change + final Method privateLookupIn = MethodHandles.class.getMethod("privateLookupIn", Class.class, MethodHandles.Lookup.class); + return (MethodHandles.Lookup) privateLookupIn.invoke(null, clazz, MethodHandles.lookup()); + } + catch (InvocationTargetException | IllegalAccessException e) + { + throw new RuntimeException(e); + } + catch (NoSuchMethodException e) + { + try + { + // In Java 8 we first do standard lookupIn class + final MethodHandles.Lookup lookupIn = MethodHandles.lookup().in(clazz); + + // and then we mark it as trusted for private lookup via reflection on private field + final Field modes = MethodHandles.Lookup.class.getDeclaredField("allowedModes"); + modes.setAccessible(true); + modes.setInt(lookupIn, -1); // -1 == TRUSTED + return lookupIn; + } + catch (ReflectiveOperationException ex) + { + throw new RuntimeException(ex); + } + } + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/ws/PartyService.java b/runelite-client/src/main/java/net/runelite/client/ws/PartyService.java index 43113327ff..4b7b016d97 100644 --- a/runelite-client/src/main/java/net/runelite/client/ws/PartyService.java +++ b/runelite-client/src/main/java/net/runelite/client/ws/PartyService.java @@ -34,13 +34,13 @@ import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; import net.runelite.api.ChatMessageType; +import static net.runelite.api.util.Text.JAGEX_PRINTABLE_CHAR_MATCHER; import net.runelite.client.account.AccountSession; import net.runelite.client.account.SessionManager; import net.runelite.client.chat.ChatMessageManager; import net.runelite.client.chat.QueuedMessage; import net.runelite.client.eventbus.EventBus; import net.runelite.client.events.PartyChanged; -import static net.runelite.api.util.Text.JAGEX_PRINTABLE_CHAR_MATCHER; import net.runelite.http.api.ws.messages.party.Join; import net.runelite.http.api.ws.messages.party.Part; import net.runelite.http.api.ws.messages.party.PartyChatMessage; @@ -188,7 +188,7 @@ public class PartyService return null; } - public PartyMember getMemberByName(final String name) + private PartyMember getMemberByName(final String name) { for (PartyMember member : members) { diff --git a/runelite-client/src/main/java/net/runelite/client/ws/WSClient.java b/runelite-client/src/main/java/net/runelite/client/ws/WSClient.java index 8006b5ee1e..f68e7c4173 100644 --- a/runelite-client/src/main/java/net/runelite/client/ws/WSClient.java +++ b/runelite-client/src/main/java/net/runelite/client/ws/WSClient.java @@ -44,6 +44,7 @@ import okhttp3.Request; import okhttp3.Response; import okhttp3.WebSocket; import okhttp3.WebSocketListener; +import org.jetbrains.annotations.NotNull; @Slf4j @Singleton @@ -147,13 +148,13 @@ public class WSClient extends WebSocketListener implements AutoCloseable } @Override - public void onOpen(WebSocket webSocket, Response response) + public void onOpen(@NotNull WebSocket webSocket, @NotNull Response response) { log.info("Websocket {} opened", webSocket); } @Override - public void onMessage(WebSocket webSocket, String text) + public void onMessage(@NotNull WebSocket webSocket, @NotNull String text) { final WebsocketMessage message; @@ -178,14 +179,14 @@ public class WSClient extends WebSocketListener implements AutoCloseable } @Override - public void onClosed(WebSocket webSocket, int code, String reason) + public void onClosed(@NotNull WebSocket webSocket, int code, @NotNull String reason) { log.info("Websocket {} closed: {}/{}", webSocket, code, reason); this.webSocket = null; } @Override - public void onFailure(WebSocket webSocket, Throwable t, Response response) + public void onFailure(@NotNull WebSocket webSocket, @NotNull Throwable t, Response response) { log.warn("Error in websocket {}:{}", response, t); this.webSocket = null; diff --git a/runelite-client/src/main/resources/item_variations.json b/runelite-client/src/main/resources/item_variations.json index 54df7d21cd..56cf2e90ce 100644 --- a/runelite-client/src/main/resources/item_variations.json +++ b/runelite-client/src/main/resources/item_variations.json @@ -2456,7 +2456,9 @@ 1965, 1967, 22519, - 22520 + 22520, + 24367, + 24426 ], "empty cup": [ 1980, @@ -7784,7 +7786,8 @@ 21888, 21890, 23073, - 23075 + 23075, + 24370 ], "slayer ring": [ 11866, @@ -8023,7 +8026,8 @@ ], "rune pouch": [ 12791, - 23650 + 23650, + 24416 ], "nest box": [ 12792, @@ -9638,5 +9642,33 @@ 24344, 24346, 24348 + ], + "scroll box": [ + 24361, + 24362, + 24363, + 24364, + 24365, + 24366 + ], + "twisted hat": [ + 24387, + 24397, + 24405 + ], + "twisted coat": [ + 24389, + 24399, + 24407 + ], + "twisted trousers": [ + 24391, + 24401, + 24409 + ], + "twisted boots": [ + 24393, + 24403, + 24411 ] } diff --git a/runelite-client/src/main/resources/logback.xml b/runelite-client/src/main/resources/logback.xml index d3a5ffbcad..3942b92ca5 100644 --- a/runelite-client/src/main/resources/logback.xml +++ b/runelite-client/src/main/resources/logback.xml @@ -24,35 +24,35 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --> - - - %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n - - + + + %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n + + - - ${user.home}/.runelite/logs/client.log + + ${user.home}/.runelite/logs/client.log - - - ${user.home}/.runelite/logs/client_%d{yyyy-MM-dd}.%i.log + + + ${user.home}/.runelite/logs/client_%d{yyyy-MM-dd}.%i.log - - - 10MB - + + + 10MB + - - 30 - + + 30 + - - %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n - - + + %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n + + - - - - + + + + \ No newline at end of file diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/alien.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/alien.png new file mode 100644 index 0000000000..12b5cbca06 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/alien.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/blush.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/blush.png index 7024942ef0..ed24b9dbd5 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/blush.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/blush.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/broken_heart.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/broken_heart.png index f990ce74b2..e2859dba83 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/broken_heart.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/broken_heart.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/cat.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/cat.png index 59cdc638de..e3e3538d6e 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/cat.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/cat.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/confused.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/confused.png index 0d3275a236..d959e8398c 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/confused.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/confused.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/cooking.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/cooking.png index 7c853a76db..e4a0e27005 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/cooking.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/cooking.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/cowboy.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/cowboy.png index 9c255c613b..ed6f1f0363 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/cowboy.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/cowboy.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/crab.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/crab.png index dceb67eb18..b4a48a1167 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/crab.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/crab.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/cry.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/cry.png index dda95de8f9..d13487b948 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/cry.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/cry.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/dancer.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/dancer.png index 4a307a4d4d..0b12afc22a 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/dancer.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/dancer.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/dog.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/dog.png index abdb0ecf48..03c0a78f01 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/dog.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/dog.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/eggplant.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/eggplant.png new file mode 100644 index 0000000000..f235821f5a Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/eggplant.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/expressionless.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/expressionless.png index 4d6904de06..1796dfd73e 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/expressionless.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/expressionless.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/eyes.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/eyes.png index 2ae57d4b96..21bb1e8efc 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/eyes.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/eyes.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/facepalm.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/facepalm.png new file mode 100644 index 0000000000..00c3ddb525 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/facepalm.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/fire.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/fire.png new file mode 100644 index 0000000000..6d11acee7a Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/fire.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/fish.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/fish.png index 3239750a0d..c836cb5ac6 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/fish.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/fish.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/flushed.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/flushed.png index 2ca84e2af0..9afe0d1488 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/flushed.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/flushed.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/fork_and_knife.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/fork_and_knife.png index 6f9d56d4f4..f82589d6c3 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/fork_and_knife.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/fork_and_knife.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/frowning2.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/frowning2.png index bbc46462e1..d0de7f47a4 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/frowning2.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/frowning2.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/grinning.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/grinning.png index b5ed41cd83..1c2d82ebd5 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/grinning.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/grinning.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/heart_eyes.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/heart_eyes.png new file mode 100644 index 0000000000..8e025d4ed0 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/heart_eyes.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/hearts.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/hearts.png index 4639733791..0582043360 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/hearts.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/hearts.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/hugging.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/hugging.png index 146af72906..4c3f94b269 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/hugging.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/hugging.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/hushed.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/hushed.png index d966a3ccbd..388f4f8721 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/hushed.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/hushed.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/innocent.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/innocent.png index 01ee7c2f75..a77d4f5ac2 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/innocent.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/innocent.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/joy.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/joy.png index 6bc95ee669..2d4ded730a 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/joy.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/joy.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/kissing.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/kissing.png index 5dc6f2ee44..c4040f250f 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/kissing.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/kissing.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/neutral_face.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/neutral_face.png index c1f8599802..6ba2512285 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/neutral_face.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/neutral_face.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/ok_hand.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/ok_hand.png index 677a3f045f..99c51e94b0 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/ok_hand.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/ok_hand.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/open_mouth.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/open_mouth.png index dc9163b0bb..b6f009127e 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/open_mouth.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/open_mouth.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/party_popper.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/party_popper.png index 319e3b884b..9bac2f0392 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/party_popper.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/party_popper.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/persevere.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/persevere.png index 743a6d40c6..afe426b889 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/persevere.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/persevere.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/pile_of_poo.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/pile_of_poo.png index 9626a3582c..e9e83eda20 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/pile_of_poo.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/pile_of_poo.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/rage.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/rage.png index 67af8f8a85..e3e64935d7 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/rage.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/rage.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/scream.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/scream.png index 9ee5a20df4..7c1fa0cb34 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/scream.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/scream.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/see_no_evil.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/see_no_evil.png index 8c24967ce8..8ee29a9fb3 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/see_no_evil.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/see_no_evil.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/slight_frown.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/slight_frown.png index 4ca50c44d5..1b0666d2c5 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/slight_frown.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/slight_frown.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/slight_smile.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/slight_smile.png index 7fe967d033..d39cf23163 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/slight_smile.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/slight_smile.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/smile.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/smile.png index 547d0c1af6..557bdb8f12 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/smile.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/smile.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/smiling_imp.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/smiling_imp.png index 988f863b67..63794794d3 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/smiling_imp.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/smiling_imp.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/sob.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/sob.png index 7b7b607702..1ddd81f279 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/sob.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/sob.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/stuck_out_tongue.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/stuck_out_tongue.png index 3e650a63e6..92843ef1e9 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/stuck_out_tongue.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/stuck_out_tongue.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/stuck_out_tongue_closed_eyes.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/stuck_out_tongue_closed_eyes.png index a92049bb60..380ab6b8e0 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/stuck_out_tongue_closed_eyes.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/stuck_out_tongue_closed_eyes.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/sunglasses.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/sunglasses.png index 27df566883..0c790e10e1 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/sunglasses.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/sunglasses.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/sweat.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/sweat.png index df5dea9f32..cf40fea206 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/sweat.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/sweat.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/thinking.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/thinking.png index 6be3b18d7f..309caf9c8b 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/thinking.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/thinking.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/thumbsdown.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/thumbsdown.png index 674b5dd659..570187cf73 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/thumbsdown.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/thumbsdown.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/thumbsup.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/thumbsup.png index e52f8364ff..610c3ee976 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/thumbsup.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/thumbsup.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/triumph.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/triumph.png index ee5c6b7ced..71f4927cbe 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/triumph.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/triumph.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/unamused.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/unamused.png index 342dd80e79..5dd59bcc01 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/unamused.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/unamused.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/wave.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/wave.png new file mode 100644 index 0000000000..1a747c8fc7 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/wave.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/wink.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/wink.png index def8b2775a..b56b3cd5e0 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/wink.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/wink.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/yum.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/yum.png index 29d1bf7761..21bdb0a00f 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/yum.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/yum.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/zipper_mouth.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/zipper_mouth.png index 37e137c0c9..ecad41ede6 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/zipper_mouth.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/zipper_mouth.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/zzz.png b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/zzz.png index 02fc33fe71..3072dfc9f1 100644 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/zzz.png and b/runelite-client/src/main/resources/net/runelite/client/plugins/emojis/zzz.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/deadman_tournament.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/deadman_tournament.png deleted file mode 100644 index e74b1d940b..0000000000 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/deadman_tournament.png and /dev/null differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/league.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/league.png new file mode 100644 index 0000000000..b9473db512 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/league.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/seasonal_deadman.png b/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/seasonal_deadman.png deleted file mode 100644 index d3632e62db..0000000000 Binary files a/runelite-client/src/main/resources/net/runelite/client/plugins/hiscore/seasonal_deadman.png and /dev/null differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/leaguechaticons/league_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/leaguechaticons/league_icon.png new file mode 100644 index 0000000000..41e4487120 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/leaguechaticons/league_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_crafting.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_crafting.json index 963c56f382..3df88b7ab5 100644 --- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_crafting.json +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_crafting.json @@ -48,6 +48,12 @@ "name": "Gold Ring", "xp": 15 }, + { + "level": 5, + "icon": 21512, + "name": "Bird House", + "xp": 15 + }, { "level": 6, "icon": 1654, @@ -120,6 +126,12 @@ "name": "Leather Body", "xp": 25 }, + { + "level": 15, + "icon": 21515, + "name": "Oak Bird House", + "xp": 20 + }, { "level": 16, "icon": 1613, @@ -144,7 +156,6 @@ "name": "Opal Necklace", "xp": 35 }, - { "level": 17, "icon": 1724, @@ -217,6 +228,12 @@ "name": "Jade Necklace", "xp": 54 }, + { + "level": 25, + "icon": 21518, + "name": "Willow Bird House", + "xp": 25 + }, { "level": 26, "icon": 6209, @@ -319,6 +336,12 @@ "name": "Broodoo shield", "xp": 100 }, + { + "level": 35, + "icon": 21521, + "name": "Teak Bird House", + "xp": 30 + }, { "level": 36, "icon": 5376, @@ -385,6 +408,12 @@ "name": "Snakeskin boots", "xp": 30 }, + { + "level": 45, + "icon": 22192, + "name": "Maple Bird House", + "xp": 35 + }, { "level": 46, "icon": 567, @@ -415,6 +444,12 @@ "name": "Ruby Amulet (U)", "xp": 85 }, + { + "level": 50, + "icon": 22195, + "name": "Mahogany Bird House", + "xp": 40 + }, { "level": 51, "icon": 6324, @@ -481,6 +516,12 @@ "name": "Green D'hide Chaps", "xp": 124 }, + { + "level": 60, + "icon": 22198, + "name": "Yew Bird House", + "xp": 45 + }, { "level": 62, "icon": 1393, @@ -571,6 +612,12 @@ "name": "Red D'hide Chaps", "xp": 156 }, + { + "level": 75, + "icon": 22201, + "name": "Magic Bird House", + "xp": 50 + }, { "level": 76, "icon": 22281, @@ -667,6 +714,12 @@ "name": "Onyx Amulet (U)", "xp": 165 }, + { + "level": 90, + "icon": 22204, + "name": "Redwood Bird House", + "xp": 55 + }, { "level": 92, "icon": 19535, @@ -686,4 +739,4 @@ "xp": 200 } ] -} +} \ No newline at end of file diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_magic.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_magic.json index 0c53391ba7..7350574862 100644 --- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_magic.json +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_magic.json @@ -637,7 +637,7 @@ "xp": 67 }, { - "level": 71, + "level": 71, "sprite": 586, "name": "Ourania Teleport", "xp": 69 diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_woodcutting.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_woodcutting.json index 29f1cf53c6..cae1bf7201 100644 --- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_woodcutting.json +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_woodcutting.json @@ -1,6 +1,9 @@ { "bonuses": [ - { "name": "Lumberjack Outfit (+2.5%)", "value": 0.025 } + { + "name": "Lumberjack Outfit (+2.5%)", + "value": 0.025 + } ], "actions": [ { diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/air_altar_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/air_altar_icon.png new file mode 100644 index 0000000000..ae281d896c Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/air_altar_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/astral_altar_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/astral_altar_icon.png new file mode 100644 index 0000000000..10b4aeccce Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/astral_altar_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/blood_altar_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/blood_altar_icon.png new file mode 100644 index 0000000000..356557e538 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/blood_altar_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/body_altar_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/body_altar_icon.png new file mode 100644 index 0000000000..d9c51114d4 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/body_altar_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/chaos_altar_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/chaos_altar_icon.png new file mode 100644 index 0000000000..91b046d5d4 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/chaos_altar_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/cosmic_altar_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/cosmic_altar_icon.png new file mode 100644 index 0000000000..3a37733f10 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/cosmic_altar_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/death_altar_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/death_altar_icon.png new file mode 100644 index 0000000000..19c94eb0e2 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/death_altar_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/earth_altar_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/earth_altar_icon.png new file mode 100644 index 0000000000..828dffbd1f Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/earth_altar_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/fire_altar_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/fire_altar_icon.png new file mode 100644 index 0000000000..f556a54ce9 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/fire_altar_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/law_altar_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/law_altar_icon.png new file mode 100644 index 0000000000..3a441635d4 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/law_altar_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/mind_altar_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/mind_altar_icon.png new file mode 100644 index 0000000000..b0aaeecf2a Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/mind_altar_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/nature_altar_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/nature_altar_icon.png new file mode 100644 index 0000000000..ee53dbd5a3 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/nature_altar_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/soul_altar_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/soul_altar_icon.png new file mode 100644 index 0000000000..08615a949e Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/soul_altar_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/transportation_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/transportation_icon.png new file mode 100644 index 0000000000..b5648c0ca1 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/transportation_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/water_altar_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/water_altar_icon.png new file mode 100644 index 0000000000..52200880ad Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/water_altar_icon.png differ diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/wrath_altar_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/wrath_altar_icon.png new file mode 100644 index 0000000000..87b77a7395 Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/wrath_altar_icon.png differ diff --git a/runelite-client/src/main/resources/npc_stats.json b/runelite-client/src/main/resources/npc_stats.json index d38c8b21aa..18f64a146c 100644 --- a/runelite-client/src/main/resources/npc_stats.json +++ b/runelite-client/src/main/resources/npc_stats.json @@ -1 +1 @@ -{"1":{"name":"Molanisk","hitpoints":52,"combatLevel":51,"slayerLevel":39,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":50,"rangeLevel":1,"stabDef":45,"slashDef":45,"crushDef":35,"rangeDef":55,"magicDef":30},"2":{"name":"Aberrant spectre","hitpoints":90,"combatLevel":96,"slayerLevel":60,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":90,"rangeLevel":1,"magicLevel":105,"stabDef":20,"slashDef":20,"crushDef":20,"rangeDef":15,"undead":true},"3":{"name":"Aberrant spectre","hitpoints":90,"combatLevel":96,"slayerLevel":60,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":90,"rangeLevel":1,"magicLevel":105,"stabDef":20,"slashDef":20,"crushDef":20,"rangeDef":15,"undead":true},"4":{"name":"Aberrant spectre","hitpoints":90,"combatLevel":96,"slayerLevel":60,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":90,"rangeLevel":1,"magicLevel":105,"stabDef":20,"slashDef":20,"crushDef":20,"rangeDef":15,"undead":true},"5":{"name":"Aberrant spectre","hitpoints":90,"combatLevel":96,"slayerLevel":60,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":90,"rangeLevel":1,"magicLevel":105,"stabDef":20,"slashDef":20,"crushDef":20,"rangeDef":15,"undead":true},"6":{"name":"Aberrant spectre","hitpoints":90,"combatLevel":96,"slayerLevel":60,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":90,"rangeLevel":1,"magicLevel":105,"stabDef":20,"slashDef":20,"crushDef":20,"rangeDef":15,"undead":true},"7":{"name":"Aberrant spectre","hitpoints":90,"combatLevel":96,"slayerLevel":60,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":90,"rangeLevel":1,"magicLevel":105,"stabDef":20,"slashDef":20,"crushDef":20,"rangeDef":15,"undead":true},"8":{"name":"Nechryael","hitpoints":105,"combatLevel":115,"slayerLevel":80,"attackSpeed":4,"attackLevel":97,"strengthLevel":97,"defenceLevel":105,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"crushDef":20,"rangeDef":20,"demon":true},"10":{"name":"Death spawn","hitpoints":60,"combatLevel":46,"attackSpeed":4,"attackLevel":67,"strengthLevel":7,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"crushDef":20,"rangeDef":20},"11":{"name":"Nechryael","hitpoints":105,"combatLevel":115,"slayerLevel":80,"attackSpeed":4,"attackLevel":97,"strengthLevel":97,"defenceLevel":105,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"crushDef":20,"rangeDef":20,"demon":true},"26":{"name":"Zombie","hitpoints":22,"combatLevel":13,"slayerLevel":1,"attackSpeed":4,"attackLevel":8,"strengthLevel":9,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"undead":true},"27":{"name":"Zombie","hitpoints":22,"combatLevel":13,"slayerLevel":1,"attackSpeed":4,"attackLevel":8,"strengthLevel":9,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"undead":true},"28":{"name":"Zombie","hitpoints":22,"combatLevel":13,"slayerLevel":1,"attackSpeed":4,"attackLevel":8,"strengthLevel":9,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"undead":true},"29":{"name":"Zombie","hitpoints":22,"combatLevel":13,"slayerLevel":1,"attackSpeed":4,"attackLevel":8,"strengthLevel":9,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"undead":true},"30":{"name":"Zombie","hitpoints":22,"combatLevel":13,"slayerLevel":1,"attackSpeed":4,"attackLevel":8,"strengthLevel":9,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"undead":true},"31":{"name":"Zombie","hitpoints":22,"combatLevel":13,"slayerLevel":1,"attackSpeed":4,"attackLevel":8,"strengthLevel":9,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"undead":true},"32":{"name":"Zombie","hitpoints":22,"combatLevel":13,"slayerLevel":1,"attackSpeed":4,"attackLevel":8,"strengthLevel":9,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"undead":true},"33":{"name":"Zombie","hitpoints":22,"combatLevel":13,"slayerLevel":1,"attackSpeed":4,"attackLevel":8,"strengthLevel":9,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"undead":true},"34":{"name":"Zombie","hitpoints":22,"combatLevel":13,"slayerLevel":1,"attackSpeed":4,"attackLevel":8,"strengthLevel":9,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"undead":true},"35":{"name":"Zombie","hitpoints":22,"combatLevel":13,"slayerLevel":1,"attackSpeed":4,"attackLevel":8,"strengthLevel":9,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"undead":true},"36":{"name":"Zombie","hitpoints":22,"combatLevel":13,"slayerLevel":1,"attackSpeed":4,"attackLevel":8,"strengthLevel":9,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"undead":true},"37":{"name":"Zombie","hitpoints":22,"combatLevel":13,"slayerLevel":1,"attackSpeed":4,"attackLevel":8,"strengthLevel":9,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"undead":true},"38":{"name":"Zombie","hitpoints":22,"combatLevel":13,"slayerLevel":1,"attackSpeed":4,"attackLevel":8,"strengthLevel":9,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"undead":true},"39":{"name":"Zombie","hitpoints":22,"combatLevel":13,"slayerLevel":1,"attackSpeed":4,"attackLevel":8,"strengthLevel":9,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"undead":true},"40":{"name":"Zombie","hitpoints":22,"combatLevel":13,"slayerLevel":1,"attackSpeed":4,"attackLevel":8,"strengthLevel":9,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"undead":true},"41":{"name":"Zombie","hitpoints":22,"combatLevel":13,"slayerLevel":1,"attackSpeed":4,"attackLevel":8,"strengthLevel":9,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"undead":true},"42":{"name":"Zombie","hitpoints":24,"combatLevel":18,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"undead":true},"43":{"name":"Zombie","hitpoints":24,"combatLevel":18,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"undead":true},"44":{"name":"Zombie","hitpoints":24,"combatLevel":18,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"undead":true},"45":{"name":"Zombie","hitpoints":24,"combatLevel":18,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"undead":true},"46":{"name":"Zombie","hitpoints":24,"combatLevel":18,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"undead":true},"47":{"name":"Zombie","hitpoints":24,"combatLevel":18,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"undead":true},"48":{"name":"Zombie","hitpoints":24,"combatLevel":18,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"undead":true},"49":{"name":"Zombie","hitpoints":30,"combatLevel":24,"slayerLevel":1,"attackSpeed":4,"attackLevel":19,"strengthLevel":21,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"50":{"name":"Zombie","hitpoints":30,"combatLevel":24,"slayerLevel":1,"attackSpeed":4,"attackLevel":19,"strengthLevel":21,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"51":{"name":"Zombie","hitpoints":30,"combatLevel":24,"slayerLevel":1,"attackSpeed":4,"attackLevel":19,"strengthLevel":21,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"52":{"name":"Zombie","hitpoints":30,"combatLevel":24,"slayerLevel":1,"attackSpeed":4,"attackLevel":19,"strengthLevel":21,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"53":{"name":"Zombie","hitpoints":30,"combatLevel":24,"slayerLevel":1,"attackSpeed":4,"attackLevel":19,"strengthLevel":21,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"54":{"name":"Zombie","hitpoints":30,"combatLevel":24,"slayerLevel":1,"attackSpeed":4,"attackLevel":19,"strengthLevel":21,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"55":{"name":"Zombie","hitpoints":30,"combatLevel":24,"slayerLevel":1,"attackSpeed":4,"attackLevel":19,"strengthLevel":21,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"56":{"name":"Zombie","hitpoints":30,"combatLevel":24,"slayerLevel":1,"attackSpeed":4,"attackLevel":19,"strengthLevel":21,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"57":{"name":"Zombie","hitpoints":30,"combatLevel":24,"slayerLevel":1,"attackSpeed":4,"attackLevel":19,"strengthLevel":21,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"58":{"name":"Zombie","hitpoints":30,"combatLevel":24,"slayerLevel":1,"attackSpeed":4,"attackLevel":19,"strengthLevel":21,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"59":{"name":"Zombie","hitpoints":30,"combatLevel":24,"slayerLevel":1,"attackSpeed":4,"attackLevel":19,"strengthLevel":21,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"60":{"name":"Zombie","hitpoints":30,"combatLevel":24,"slayerLevel":1,"attackSpeed":4,"attackLevel":19,"strengthLevel":21,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"61":{"name":"Zombie","hitpoints":30,"combatLevel":24,"slayerLevel":1,"attackSpeed":4,"attackLevel":19,"strengthLevel":21,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"62":{"name":"Zombie","hitpoints":30,"combatLevel":24,"slayerLevel":1,"attackSpeed":4,"attackLevel":19,"strengthLevel":21,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"63":{"name":"Zombie","hitpoints":30,"combatLevel":24,"slayerLevel":1,"attackSpeed":4,"attackLevel":19,"strengthLevel":21,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"64":{"name":"Zombie","hitpoints":30,"combatLevel":25,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":8,"crushDef":12,"rangeDef":11,"magicDef":10,"bonusAttack":5,"bonusStrength":7,"undead":true},"65":{"name":"Zombie","hitpoints":30,"combatLevel":25,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":8,"crushDef":12,"rangeDef":11,"magicDef":10,"bonusAttack":5,"bonusStrength":7,"undead":true},"66":{"name":"Zombie","hitpoints":30,"combatLevel":25,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":8,"crushDef":12,"rangeDef":11,"magicDef":10,"bonusAttack":5,"bonusStrength":7,"undead":true},"67":{"name":"Zombie","hitpoints":30,"combatLevel":25,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":8,"crushDef":12,"rangeDef":11,"magicDef":10,"bonusAttack":5,"bonusStrength":7,"undead":true},"68":{"name":"Zombie","hitpoints":30,"combatLevel":25,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":8,"crushDef":12,"rangeDef":11,"magicDef":10,"bonusAttack":5,"bonusStrength":7,"undead":true},"69":{"name":"Summoned Zombie","hitpoints":22,"combatLevel":13,"slayerLevel":1,"attackSpeed":4,"attackLevel":8,"strengthLevel":9,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"undead":true},"70":{"name":"Skeleton","hitpoints":29,"combatLevel":22,"slayerLevel":1,"attackSpeed":4,"attackLevel":15,"strengthLevel":18,"defenceLevel":17,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"rangeDef":5,"undead":true},"71":{"name":"Skeleton","hitpoints":29,"combatLevel":22,"slayerLevel":1,"attackSpeed":4,"attackLevel":15,"strengthLevel":18,"defenceLevel":17,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"rangeDef":5,"undead":true},"72":{"name":"Skeleton","hitpoints":29,"combatLevel":22,"slayerLevel":1,"attackSpeed":4,"attackLevel":15,"strengthLevel":18,"defenceLevel":17,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"rangeDef":5,"undead":true},"73":{"name":"Skeleton","hitpoints":29,"combatLevel":22,"slayerLevel":1,"attackSpeed":4,"attackLevel":15,"strengthLevel":18,"defenceLevel":17,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"rangeDef":5,"undead":true},"74":{"name":"Skeleton","hitpoints":24,"combatLevel":21,"slayerLevel":1,"attackSpeed":4,"attackLevel":17,"strengthLevel":17,"defenceLevel":17,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"rangeDef":5,"undead":true},"75":{"name":"Skeleton","hitpoints":24,"combatLevel":21,"slayerLevel":1,"attackSpeed":4,"attackLevel":17,"strengthLevel":17,"defenceLevel":17,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"rangeDef":5,"undead":true},"76":{"name":"Skeleton","hitpoints":24,"combatLevel":21,"slayerLevel":1,"attackSpeed":4,"attackLevel":17,"strengthLevel":17,"defenceLevel":17,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"rangeDef":5,"undead":true},"77":{"name":"Skeleton","hitpoints":17,"combatLevel":25,"slayerLevel":1,"attackSpeed":4,"attackLevel":24,"strengthLevel":24,"defenceLevel":24,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":11,"rangeDef":4,"magicDef":1,"bonusAttack":15,"bonusStrength":14,"undead":true},"78":{"name":"Skeleton","hitpoints":17,"combatLevel":25,"slayerLevel":1,"attackSpeed":4,"attackLevel":24,"strengthLevel":24,"defenceLevel":24,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":11,"rangeDef":4,"magicDef":1,"bonusAttack":15,"bonusStrength":14,"undead":true},"79":{"name":"Skeleton","hitpoints":17,"combatLevel":25,"slayerLevel":1,"attackSpeed":4,"attackLevel":24,"strengthLevel":24,"defenceLevel":24,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":11,"rangeDef":4,"magicDef":1,"bonusAttack":15,"bonusStrength":14,"undead":true},"80":{"name":"Skeleton","hitpoints":17,"combatLevel":25,"slayerLevel":1,"attackSpeed":4,"attackLevel":24,"strengthLevel":24,"defenceLevel":24,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":11,"rangeDef":4,"magicDef":1,"bonusAttack":15,"bonusStrength":14,"undead":true},"81":{"name":"Skeleton","hitpoints":17,"combatLevel":25,"slayerLevel":1,"attackSpeed":4,"attackLevel":24,"strengthLevel":24,"defenceLevel":24,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":11,"rangeDef":4,"magicDef":1,"bonusAttack":15,"bonusStrength":14,"undead":true},"82":{"name":"Skeleton","hitpoints":59,"combatLevel":45,"slayerLevel":1,"attackSpeed":4,"attackLevel":32,"strengthLevel":35,"defenceLevel":36,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":11,"rangeDef":4,"magicDef":1,"bonusAttack":15,"bonusStrength":14,"undead":true},"83":{"name":"Skeleton","hitpoints":59,"combatLevel":45,"slayerLevel":1,"attackSpeed":4,"attackLevel":32,"strengthLevel":35,"defenceLevel":36,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":11,"rangeDef":4,"magicDef":1,"bonusAttack":15,"bonusStrength":14,"undead":true},"84":{"name":"Skeleton Mage","hitpoints":17,"combatLevel":16,"slayerLevel":1,"attackSpeed":4,"attackLevel":14,"strengthLevel":14,"defenceLevel":14,"rangeLevel":1,"magicLevel":18,"undead":true},"85":{"name":"Ghost","hitpoints":25,"combatLevel":19,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"86":{"name":"Ghost","hitpoints":25,"combatLevel":19,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"87":{"name":"Ghost","hitpoints":25,"combatLevel":19,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"88":{"name":"Ghost","hitpoints":25,"combatLevel":19,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"89":{"name":"Ghost","hitpoints":25,"combatLevel":19,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"90":{"name":"Ghost","hitpoints":25,"combatLevel":19,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"91":{"name":"Ghost","hitpoints":25,"combatLevel":19,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"92":{"name":"Ghost","hitpoints":25,"combatLevel":19,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"93":{"name":"Ghost","hitpoints":25,"combatLevel":19,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"94":{"name":"Ghost","hitpoints":25,"combatLevel":19,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"95":{"name":"Ghost","hitpoints":25,"combatLevel":19,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"96":{"name":"Ghost","hitpoints":25,"combatLevel":19,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"97":{"name":"Ghost","hitpoints":25,"combatLevel":19,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"99":{"name":"Death wing","hitpoints":80,"combatLevel":83,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1},"100":{"name":"Rock Crab","hitpoints":50,"combatLevel":13,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"101":{"name":"Rocks","hitpoints":50,"combatLevel":13,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"102":{"name":"Rock Crab","hitpoints":50,"combatLevel":13,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"103":{"name":"Rocks","hitpoints":50,"combatLevel":13,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"104":{"name":"Hellhound","hitpoints":116,"combatLevel":122,"slayerLevel":1,"attackSpeed":4,"attackLevel":105,"strengthLevel":104,"defenceLevel":102,"rangeLevel":1,"magicLevel":1},"105":{"name":"Hellhound","hitpoints":116,"combatLevel":122,"slayerLevel":1,"attackSpeed":4,"attackLevel":105,"strengthLevel":104,"defenceLevel":102,"rangeLevel":1,"magicLevel":1},"106":{"name":"Wolf","hitpoints":69,"combatLevel":64,"slayerLevel":1,"attackSpeed":4,"attackLevel":50,"strengthLevel":55,"defenceLevel":52,"rangeLevel":1,"magicLevel":1},"107":{"name":"White wolf","hitpoints":34,"combatLevel":25,"slayerLevel":1,"attackSpeed":4,"attackLevel":20,"strengthLevel":16,"defenceLevel":22,"rangeLevel":1,"magicLevel":1},"108":{"name":"White wolf","hitpoints":44,"combatLevel":38,"slayerLevel":1,"attackSpeed":4,"attackLevel":30,"strengthLevel":31,"defenceLevel":32,"rangeLevel":1,"magicLevel":1},"109":{"name":"Big Wolf","hitpoints":74,"combatLevel":73,"slayerLevel":1,"attackSpeed":4,"attackLevel":60,"strengthLevel":61,"defenceLevel":62,"rangeLevel":1,"magicLevel":1},"110":{"name":"Wolf","hitpoints":34,"combatLevel":25,"slayerLevel":1,"attackSpeed":4,"attackLevel":20,"strengthLevel":16,"defenceLevel":22,"rangeLevel":1,"magicLevel":1},"112":{"name":"Wild dog","hitpoints":62,"combatLevel":63,"slayerLevel":1,"attackSpeed":4,"attackLevel":53,"strengthLevel":54,"defenceLevel":54,"rangeLevel":1,"magicLevel":1},"113":{"name":"Wild dog","hitpoints":62,"combatLevel":63,"slayerLevel":1,"attackSpeed":4,"attackLevel":53,"strengthLevel":54,"defenceLevel":54,"rangeLevel":1,"magicLevel":1},"114":{"name":"Guard dog","hitpoints":49,"combatLevel":44,"slayerLevel":1,"attackSpeed":4,"attackLevel":35,"strengthLevel":36,"defenceLevel":37,"rangeLevel":1,"magicLevel":1},"115":{"name":"Big Wolf","hitpoints":74,"combatLevel":73,"slayerLevel":1,"attackSpeed":4,"attackLevel":60,"strengthLevel":61,"defenceLevel":62,"rangeLevel":1,"magicLevel":1},"116":{"name":"Wolf","hitpoints":34,"combatLevel":25,"slayerLevel":1,"attackSpeed":4,"attackLevel":20,"strengthLevel":16,"defenceLevel":22,"rangeLevel":1,"magicLevel":1},"117":{"name":"Wolf","hitpoints":34,"combatLevel":25,"slayerLevel":1,"attackSpeed":4,"attackLevel":20,"strengthLevel":16,"defenceLevel":22,"rangeLevel":1,"magicLevel":1},"130":{"name":"Skeleton","hitpoints":29,"combatLevel":22,"attackSpeed":4,"attackLevel":15,"strengthLevel":18,"defenceLevel":17,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":11,"rangeDef":4,"magicDef":1},"131":{"name":"Guard dog","hitpoints":49,"combatLevel":44,"attackSpeed":4,"attackLevel":35,"strengthLevel":36,"defenceLevel":37,"rangeLevel":1,"magicLevel":1},"132":{"name":"Hobgoblin","hitpoints":62,"combatLevel":54,"attackSpeed":6,"attackLevel":45,"strengthLevel":43,"defenceLevel":43,"rangeLevel":1,"magicLevel":1,"stabDef":1,"slashDef":1,"bonusAttack":8,"bonusStrength":10},"133":{"name":"Troll","hitpoints":120,"combatLevel":91,"attackSpeed":4,"attackLevel":50,"strengthLevel":100,"defenceLevel":50,"stabDef":25,"slashDef":25,"crushDef":40,"rangeDef":200,"magicDef":200,"bonusAttack":40,"bonusStrength":70},"134":{"name":"Huge spider","hitpoints":90,"combatLevel":81,"attackSpeed":4,"attackLevel":59,"strengthLevel":70,"defenceLevel":69,"rangeLevel":1,"magicLevel":1},"135":{"name":"Hellhound","hitpoints":116,"combatLevel":122,"attackSpeed":4,"attackLevel":105,"strengthLevel":104,"defenceLevel":102,"rangeLevel":1,"magicLevel":1},"136":{"name":"Ogre","hitpoints":60,"combatLevel":53,"slayerLevel":1,"attackSpeed":6,"attackLevel":43,"strengthLevel":43,"defenceLevel":43,"rangeLevel":1,"magicLevel":1,"bonusAttack":22,"bonusStrength":20},"137":{"name":"Baby red dragon","hitpoints":65,"combatLevel":65,"attackSpeed":4,"attackLevel":55,"strengthLevel":55,"defenceLevel":55,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":50,"crushDef":50,"rangeDef":30,"magicDef":40},"138":{"name":"Kalphite Soldier","hitpoints":90,"combatLevel":85,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"stabDef":25,"slashDef":25,"crushDef":5,"rangeDef":50,"magicDef":50},"139":{"name":"Steel dragon","hitpoints":210,"combatLevel":246,"attackSpeed":4,"attackLevel":215,"strengthLevel":215,"defenceLevel":215,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":90,"magicDef":30},"140":{"name":"Dagannoth","hitpoints":142,"combatLevel":135,"attackSpeed":4,"attackLevel":114,"strengthLevel":117,"defenceLevel":98,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":50,"rangeDef":50,"magicDef":50,"bonusAttack":50,"bonusRangeStrength":50},"141":{"name":"Tok-Xil","hitpoints":60,"combatLevel":135,"attackSpeed":4,"attackLevel":120,"strengthLevel":180,"defenceLevel":90,"rangeLevel":180,"magicLevel":90},"142":{"name":"Demon","hitpoints":79,"combatLevel":82,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":71,"rangeLevel":1,"magicLevel":1},"143":{"name":"Rocnar","hitpoints":100,"combatLevel":97,"attackSpeed":6,"attackLevel":80,"strengthLevel":80,"defenceLevel":80,"bonusAttack":22,"bonusStrength":20},"231":{"name":"Wolf","hitpoints":34,"combatLevel":25,"slayerLevel":1,"attackSpeed":4,"attackLevel":20,"strengthLevel":16,"defenceLevel":22,"rangeLevel":1,"magicLevel":1},"232":{"name":"Jungle Wolf","hitpoints":69,"combatLevel":64,"slayerLevel":1,"attackSpeed":4,"attackLevel":50,"strengthLevel":55,"defenceLevel":52,"rangeLevel":1,"magicLevel":1},"239":{"name":"King Black Dragon","hitpoints":240,"combatLevel":276,"slayerLevel":1,"attackSpeed":3,"attackLevel":240,"strengthLevel":240,"defenceLevel":240,"rangeLevel":1,"magicLevel":240,"stabDef":70,"slashDef":90,"crushDef":90,"rangeDef":70,"magicDef":80,"dragon":true},"240":{"name":"Black demon","hitpoints":157,"combatLevel":172,"slayerLevel":1,"attackSpeed":4,"attackLevel":145,"strengthLevel":152,"defenceLevel":148,"rangeLevel":1,"magicLevel":1,"demon":true},"241":{"name":"Baby dragon","hitpoints":50,"combatLevel":48,"slayerLevel":1,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":50,"crushDef":50,"rangeDef":30,"magicDef":40,"dragon":true},"242":{"name":"Baby dragon","hitpoints":50,"combatLevel":48,"slayerLevel":1,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":50,"crushDef":50,"rangeDef":30,"magicDef":40,"dragon":true},"243":{"name":"Baby dragon","hitpoints":50,"combatLevel":48,"slayerLevel":1,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":50,"crushDef":50,"rangeDef":30,"magicDef":40,"dragon":true},"244":{"name":"Baby dragon","hitpoints":50,"combatLevel":48,"slayerLevel":1,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":50,"crushDef":50,"rangeDef":30,"magicDef":40,"dragon":true},"245":{"name":"Baby dragon","hitpoints":50,"combatLevel":48,"slayerLevel":1,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":50,"crushDef":50,"rangeDef":30,"magicDef":40,"dragon":true},"246":{"name":"Baby dragon","hitpoints":50,"combatLevel":48,"slayerLevel":1,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":50,"crushDef":50,"rangeDef":30,"magicDef":40,"dragon":true},"247":{"name":"Red dragon","hitpoints":140,"combatLevel":152,"slayerLevel":1,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":130,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"248":{"name":"Red dragon","hitpoints":140,"combatLevel":152,"slayerLevel":1,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":130,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"249":{"name":"Red dragon","hitpoints":140,"combatLevel":152,"slayerLevel":1,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":130,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"250":{"name":"Red dragon","hitpoints":140,"combatLevel":152,"slayerLevel":1,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":130,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"251":{"name":"Red dragon","hitpoints":140,"combatLevel":152,"slayerLevel":1,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":130,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"252":{"name":"Black dragon","hitpoints":190,"combatLevel":227,"slayerLevel":1,"attackSpeed":4,"attackLevel":200,"strengthLevel":200,"defenceLevel":200,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"253":{"name":"Black dragon","hitpoints":190,"combatLevel":227,"slayerLevel":1,"attackSpeed":4,"attackLevel":200,"strengthLevel":200,"defenceLevel":200,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"254":{"name":"Black dragon","hitpoints":190,"combatLevel":227,"slayerLevel":1,"attackSpeed":4,"attackLevel":200,"strengthLevel":200,"defenceLevel":200,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"255":{"name":"Black dragon","hitpoints":190,"combatLevel":227,"slayerLevel":1,"attackSpeed":4,"attackLevel":200,"strengthLevel":200,"defenceLevel":200,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"256":{"name":"Black dragon","hitpoints":190,"combatLevel":227,"slayerLevel":1,"attackSpeed":4,"attackLevel":200,"strengthLevel":200,"defenceLevel":200,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"257":{"name":"Black dragon","hitpoints":190,"combatLevel":227,"slayerLevel":1,"attackSpeed":4,"attackLevel":200,"strengthLevel":200,"defenceLevel":200,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"258":{"name":"Black dragon","hitpoints":190,"combatLevel":227,"slayerLevel":1,"attackSpeed":4,"attackLevel":200,"strengthLevel":200,"defenceLevel":200,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"259":{"name":"Black dragon","hitpoints":190,"combatLevel":227,"slayerLevel":1,"attackSpeed":4,"attackLevel":200,"strengthLevel":200,"defenceLevel":200,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"260":{"name":"Green dragon","hitpoints":75,"combatLevel":79,"slayerLevel":1,"attackSpeed":4,"attackLevel":68,"strengthLevel":68,"defenceLevel":68,"rangeLevel":1,"magicLevel":68,"stabDef":20,"slashDef":40,"crushDef":40,"rangeDef":20,"magicDef":30,"dragon":true},"261":{"name":"Green dragon","hitpoints":75,"combatLevel":79,"slayerLevel":1,"attackSpeed":4,"attackLevel":68,"strengthLevel":68,"defenceLevel":68,"rangeLevel":1,"magicLevel":68,"stabDef":20,"slashDef":40,"crushDef":40,"rangeDef":20,"magicDef":30,"dragon":true},"262":{"name":"Green dragon","hitpoints":75,"combatLevel":79,"slayerLevel":1,"attackSpeed":4,"attackLevel":68,"strengthLevel":68,"defenceLevel":68,"rangeLevel":1,"magicLevel":68,"stabDef":20,"slashDef":40,"crushDef":40,"rangeDef":20,"magicDef":30,"dragon":true},"263":{"name":"Green dragon","hitpoints":75,"combatLevel":79,"slayerLevel":1,"attackSpeed":4,"attackLevel":68,"strengthLevel":68,"defenceLevel":68,"rangeLevel":1,"magicLevel":68,"stabDef":20,"slashDef":40,"crushDef":40,"rangeDef":20,"magicDef":30,"dragon":true},"264":{"name":"Green dragon","hitpoints":75,"combatLevel":79,"slayerLevel":1,"attackSpeed":4,"attackLevel":68,"strengthLevel":68,"defenceLevel":68,"rangeLevel":1,"magicLevel":68,"stabDef":20,"slashDef":40,"crushDef":40,"rangeDef":20,"magicDef":30,"dragon":true},"265":{"name":"Blue dragon","hitpoints":105,"combatLevel":111,"slayerLevel":1,"attackSpeed":4,"attackLevel":95,"strengthLevel":95,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"266":{"name":"Blue dragon","hitpoints":105,"combatLevel":111,"slayerLevel":1,"attackSpeed":4,"attackLevel":95,"strengthLevel":95,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"267":{"name":"Blue dragon","hitpoints":105,"combatLevel":111,"slayerLevel":1,"attackSpeed":4,"attackLevel":95,"strengthLevel":95,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"268":{"name":"Blue dragon","hitpoints":105,"combatLevel":111,"slayerLevel":1,"attackSpeed":4,"attackLevel":95,"strengthLevel":95,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"269":{"name":"Blue dragon","hitpoints":105,"combatLevel":111,"slayerLevel":1,"attackSpeed":4,"attackLevel":95,"strengthLevel":95,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"270":{"name":"Bronze dragon","hitpoints":122,"combatLevel":131,"slayerLevel":1,"attackSpeed":4,"attackLevel":112,"strengthLevel":112,"defenceLevel":112,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":90,"magicDef":30,"dragon":true},"271":{"name":"Bronze dragon","hitpoints":122,"combatLevel":131,"slayerLevel":1,"attackSpeed":4,"attackLevel":112,"strengthLevel":112,"defenceLevel":112,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":90,"magicDef":30,"dragon":true},"272":{"name":"Iron dragon","hitpoints":165,"combatLevel":189,"slayerLevel":1,"attackSpeed":4,"attackLevel":165,"strengthLevel":165,"defenceLevel":165,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":90,"magicDef":30,"dragon":true},"273":{"name":"Iron dragon","hitpoints":165,"combatLevel":189,"slayerLevel":1,"attackSpeed":4,"attackLevel":165,"strengthLevel":165,"defenceLevel":165,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":90,"magicDef":30,"dragon":true},"274":{"name":"Steel dragon","hitpoints":210,"combatLevel":246,"slayerLevel":1,"attackSpeed":4,"attackLevel":215,"strengthLevel":215,"defenceLevel":215,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":90,"magicDef":30,"dragon":true},"275":{"name":"Steel dragon","hitpoints":210,"combatLevel":246,"slayerLevel":1,"attackSpeed":4,"attackLevel":215,"strengthLevel":215,"defenceLevel":215,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":90,"magicDef":30,"dragon":true},"289":{"name":"Ghoul","hitpoints":50,"combatLevel":42,"slayerLevel":1,"attackSpeed":6,"attackLevel":30,"strengthLevel":40,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"290":{"name":"Dwarf","hitpoints":16,"combatLevel":10,"slayerLevel":1,"attackSpeed":5,"attackLevel":8,"strengthLevel":8,"defenceLevel":6,"rangeLevel":1,"magicLevel":1,"stab":5,"magicDef":5,"bonusAttack":5,"bonusStrength":7},"291":{"name":"Chaos dwarf","hitpoints":61,"combatLevel":48,"slayerLevel":1,"attackSpeed":4,"attackLevel":38,"strengthLevel":42,"defenceLevel":28,"rangeLevel":1,"magicLevel":1,"stabDef":40,"slashDef":34,"crushDef":25,"rangeDef":35,"magicDef":10,"bonusAttack":13,"bonusStrength":9},"292":{"name":"Dwarf","hitpoints":16,"combatLevel":10,"slayerLevel":1,"attackSpeed":5},"293":{"name":"Adventurer Jon","hitpoints":16,"combatLevel":10,"slayerLevel":1,"attackSpeed":5},"294":{"name":"Dwarf","hitpoints":16,"combatLevel":10,"slayerLevel":1,"attackSpeed":5},"295":{"name":"Dwarf","hitpoints":16,"combatLevel":10,"slayerLevel":1,"attackSpeed":5},"296":{"name":"Dwarf","hitpoints":16,"combatLevel":10,"slayerLevel":1,"attackSpeed":5,"attackLevel":8,"strengthLevel":8,"defenceLevel":6,"rangeLevel":1,"magicLevel":1,"stab":5,"magicDef":5,"bonusAttack":5,"bonusStrength":7},"299":{"name":"Gunthor the brave","hitpoints":35,"combatLevel":29,"attackSpeed":6,"attackLevel":22,"strengthLevel":22,"defenceLevel":25,"rangeLevel":1,"magicLevel":1,"stabDef":12,"slashDef":14,"crushDef":10,"rangeDef":11,"bonusAttack":8,"bonusStrength":13},"300":{"name":"Jailer","hitpoints":47,"combatLevel":47,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":79,"slashDef":63,"crushDef":47},"301":{"name":"Black Heather","hitpoints":37,"combatLevel":34,"slayerLevel":1,"attackSpeed":4,"attackLevel":32,"strengthLevel":26,"defenceLevel":27,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":8,"crushDef":10,"bonusAttack":9,"bonusStrength":9},"302":{"name":"Donny the lad","hitpoints":37,"combatLevel":34,"slayerLevel":1,"attackSpeed":4,"attackLevel":32,"strengthLevel":26,"defenceLevel":27,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":8,"crushDef":10,"bonusAttack":9,"bonusStrength":9},"303":{"name":"Speedy Keith","hitpoints":37,"combatLevel":34,"slayerLevel":1,"attackSpeed":4,"attackLevel":32,"strengthLevel":26,"defenceLevel":27,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":8,"crushDef":10,"bonusAttack":9,"bonusStrength":9},"304":{"name":"Salarin the twisted","hitpoints":70,"combatLevel":70,"attackSpeed":4,"attackLevel":58,"strengthLevel":58,"defenceLevel":62,"rangeLevel":1,"magicLevel":1},"319":{"name":"Corporeal Beast","hitpoints":2000,"combatLevel":785,"attackSpeed":4,"attackLevel":320,"strengthLevel":320,"defenceLevel":310,"rangeLevel":150,"magicLevel":350,"stabDef":25,"slashDef":200,"crushDef":100,"rangeDef":230,"magicDef":150,"bonusAttack":50,"poisonImmune":true,"venomImmune":true},"320":{"name":"Dark energy core","hitpoints":25,"combatLevel":75,"attackSpeed":2,"attackLevel":1,"strengthLevel":1,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":10},"397":{"name":"Town Guard","hitpoints":22,"combatLevel":22,"attackSpeed":6,"attackLevel":15,"strengthLevel":15,"defenceLevel":16,"rangeLevel":26,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"bonusAttack":6,"bonusStrength":10},"398":{"name":"Town Guard","hitpoints":22,"combatLevel":22,"attackSpeed":6,"attackLevel":15,"strengthLevel":15,"defenceLevel":16,"rangeLevel":26,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"bonusAttack":6,"bonusStrength":10},"399":{"name":"Town Guard","hitpoints":22,"combatLevel":19,"attackSpeed":6,"attackLevel":15,"strengthLevel":15,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"bonusAttack":6,"bonusStrength":10},"400":{"name":"Town Guard","hitpoints":22,"combatLevel":19,"attackSpeed":6,"attackLevel":15,"strengthLevel":15,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"bonusAttack":6,"bonusStrength":10},"406":{"name":"Cave crawler","hitpoints":22,"combatLevel":23,"slayerLevel":10,"attackSpeed":4,"attackLevel":22,"strengthLevel":18,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"crushDef":5,"rangeDef":10,"magicDef":5},"407":{"name":"Cave crawler","hitpoints":22,"combatLevel":23,"slayerLevel":10,"attackSpeed":4,"attackLevel":22,"strengthLevel":18,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"crushDef":5,"rangeDef":10,"magicDef":5},"408":{"name":"Cave crawler","hitpoints":22,"combatLevel":23,"slayerLevel":10,"attackSpeed":4,"attackLevel":22,"strengthLevel":18,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"crushDef":5,"rangeDef":10,"magicDef":5},"409":{"name":"Cave crawler","hitpoints":22,"combatLevel":23,"slayerLevel":10,"attackSpeed":4,"attackLevel":22,"strengthLevel":18,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"crushDef":5,"rangeDef":10,"magicDef":5},"410":{"name":"Kurask","hitpoints":97,"combatLevel":106,"slayerLevel":70,"attackSpeed":4,"attackLevel":67,"strengthLevel":105,"defenceLevel":105,"rangeLevel":1,"magicLevel":1,"slashDef":20,"crushDef":20,"poisonImmune":true,"venomImmune":true},"411":{"name":"Kurask","hitpoints":97,"combatLevel":106,"slayerLevel":70,"attackSpeed":4,"attackLevel":67,"strengthLevel":105,"defenceLevel":105,"rangeLevel":1,"magicLevel":1,"slashDef":20,"crushDef":20,"poisonImmune":true,"venomImmune":true},"412":{"name":"Gargoyle","hitpoints":105,"combatLevel":111,"slayerLevel":75,"attackSpeed":4,"attackLevel":75,"strengthLevel":105,"defenceLevel":107,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":20,"magicDef":20},"413":{"name":"Gargoyle","hitpoints":105,"combatLevel":111,"slayerLevel":75,"attackSpeed":4,"attackLevel":75,"strengthLevel":105,"defenceLevel":107,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":20,"magicDef":20},"414":{"name":"Banshee","hitpoints":22,"combatLevel":23,"slayerLevel":15,"attackSpeed":4,"attackLevel":22,"strengthLevel":15,"defenceLevel":22,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"415":{"name":"Abyssal demon","hitpoints":150,"combatLevel":124,"slayerLevel":85,"attackSpeed":4,"attackLevel":97,"strengthLevel":67,"defenceLevel":135,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"crushDef":20,"rangeDef":20,"demon":true},"416":{"name":"Abyssal demon","hitpoints":150,"combatLevel":124,"slayerLevel":85,"attackSpeed":4,"attackLevel":97,"strengthLevel":67,"defenceLevel":135,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"crushDef":20,"rangeDef":20,"demon":true},"417":{"name":"Basilisk","hitpoints":75,"combatLevel":61,"slayerLevel":40,"attackSpeed":4,"attackLevel":30,"strengthLevel":45,"defenceLevel":75,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"magicDef":20},"418":{"name":"Basilisk","hitpoints":75,"combatLevel":61,"slayerLevel":40,"attackSpeed":4,"attackLevel":30,"strengthLevel":45,"defenceLevel":75,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"magicDef":20},"419":{"name":"Cockatrice","hitpoints":37,"combatLevel":37,"slayerLevel":25,"attackSpeed":4,"attackLevel":22,"strengthLevel":37,"defenceLevel":37,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"magicDef":10},"420":{"name":"Cockatrice","hitpoints":37,"combatLevel":37,"slayerLevel":25,"attackSpeed":4,"attackLevel":22,"strengthLevel":37,"defenceLevel":37,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"magicDef":10},"421":{"name":"Rockslug","hitpoints":27,"combatLevel":29,"slayerLevel":20,"attackSpeed":4,"attackLevel":22,"strengthLevel":27,"defenceLevel":27,"rangeLevel":1,"magicLevel":1},"422":{"name":"Rockslug","hitpoints":27,"combatLevel":29,"slayerLevel":20,"attackSpeed":4,"attackLevel":22,"strengthLevel":27,"defenceLevel":27,"rangeLevel":1,"magicLevel":1},"423":{"name":"Dust devil","hitpoints":105,"combatLevel":93,"slayerLevel":65,"attackSpeed":4,"attackLevel":105,"strengthLevel":70,"defenceLevel":40,"rangeLevel":1,"magicLevel":1},"427":{"name":"Turoth","hitpoints":81,"combatLevel":89,"slayerLevel":55,"attackSpeed":4,"attackLevel":58,"strengthLevel":88,"defenceLevel":88,"rangeLevel":1,"magicLevel":1,"slashDef":20,"crushDef":20},"428":{"name":"Turoth","hitpoints":79,"combatLevel":87,"slayerLevel":55,"attackSpeed":4,"attackLevel":56,"strengthLevel":86,"defenceLevel":86,"rangeLevel":1,"magicLevel":1,"slashDef":20,"crushDef":20},"429":{"name":"Turoth","hitpoints":77,"combatLevel":85,"slayerLevel":55,"attackSpeed":4,"attackLevel":54,"strengthLevel":84,"defenceLevel":84,"rangeLevel":1,"magicLevel":1,"slashDef":20,"crushDef":20},"430":{"name":"Turoth","hitpoints":76,"combatLevel":83,"slayerLevel":55,"attackSpeed":4,"attackLevel":53,"strengthLevel":83,"defenceLevel":83,"rangeLevel":1,"magicLevel":1,"slashDef":20,"crushDef":20},"433":{"name":"Pyrefiend","hitpoints":45,"combatLevel":43,"slayerLevel":30,"attackSpeed":4,"attackLevel":52,"strengthLevel":30,"defenceLevel":22,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":10},"434":{"name":"Pyrefiend","hitpoints":45,"combatLevel":43,"slayerLevel":30,"attackSpeed":4,"attackLevel":52,"strengthLevel":30,"defenceLevel":22,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":10},"435":{"name":"Pyrefiend","hitpoints":45,"combatLevel":43,"slayerLevel":30,"attackSpeed":4,"attackLevel":52,"strengthLevel":30,"defenceLevel":22,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":10},"436":{"name":"Pyrefiend","hitpoints":45,"combatLevel":43,"slayerLevel":30,"attackSpeed":4,"attackLevel":52,"strengthLevel":30,"defenceLevel":22,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":10},"437":{"name":"Jelly","hitpoints":75,"combatLevel":78,"slayerLevel":52,"attackSpeed":4,"attackLevel":45,"strengthLevel":45,"defenceLevel":120,"rangeLevel":1,"magicLevel":45},"438":{"name":"Jelly","hitpoints":75,"combatLevel":78,"slayerLevel":52,"attackSpeed":4,"attackLevel":45,"strengthLevel":45,"defenceLevel":120,"rangeLevel":1,"magicLevel":45},"439":{"name":"Jelly","hitpoints":75,"combatLevel":78,"slayerLevel":52,"attackSpeed":4,"attackLevel":45,"strengthLevel":45,"defenceLevel":120,"rangeLevel":1,"magicLevel":45},"440":{"name":"Jelly","hitpoints":75,"combatLevel":78,"slayerLevel":52,"attackSpeed":4,"attackLevel":45,"strengthLevel":45,"defenceLevel":120,"rangeLevel":1,"magicLevel":45},"441":{"name":"Jelly","hitpoints":75,"combatLevel":78,"slayerLevel":52,"attackSpeed":4,"attackLevel":45,"strengthLevel":45,"defenceLevel":120,"rangeLevel":1,"magicLevel":45},"442":{"name":"Jelly","hitpoints":75,"combatLevel":78,"slayerLevel":52,"attackSpeed":4,"attackLevel":45,"strengthLevel":45,"defenceLevel":120,"rangeLevel":1,"magicLevel":45},"443":{"name":"Infernal Mage","hitpoints":60,"combatLevel":66,"slayerLevel":45,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":60,"rangeLevel":1,"magicLevel":75,"magicDef":40},"444":{"name":"Infernal Mage","hitpoints":60,"combatLevel":66,"slayerLevel":45,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":60,"rangeLevel":1,"magicLevel":75,"magicDef":40},"445":{"name":"Infernal Mage","hitpoints":60,"combatLevel":66,"slayerLevel":45,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":60,"rangeLevel":1,"magicLevel":75,"magicDef":40},"446":{"name":"Infernal Mage","hitpoints":60,"combatLevel":66,"slayerLevel":45,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":60,"rangeLevel":1,"magicLevel":75,"magicDef":40},"447":{"name":"Infernal Mage","hitpoints":60,"combatLevel":66,"slayerLevel":45,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":60,"rangeLevel":1,"magicLevel":75,"magicDef":40},"448":{"name":"Crawling Hand","hitpoints":16,"combatLevel":8,"slayerLevel":5,"attackSpeed":4,"attackLevel":8,"strengthLevel":4,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"undead":true},"453":{"name":"Crawling Hand","hitpoints":19,"combatLevel":12,"slayerLevel":5,"attackSpeed":4,"attackLevel":11,"strengthLevel":7,"defenceLevel":7,"rangeLevel":1,"magicLevel":1,"undead":true},"454":{"name":"Crawling Hand","hitpoints":19,"combatLevel":12,"slayerLevel":5,"attackSpeed":4,"attackLevel":11,"strengthLevel":7,"defenceLevel":7,"rangeLevel":1,"magicLevel":1,"undead":true},"458":{"name":"Lizard","hitpoints":40,"combatLevel":42,"slayerLevel":22,"attackSpeed":4,"attackLevel":38,"strengthLevel":36,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"459":{"name":"Desert Lizard","hitpoints":25,"combatLevel":24,"slayerLevel":22,"attackSpeed":4,"attackLevel":20,"strengthLevel":22,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":15,"crushDef":15,"rangeDef":5},"460":{"name":"Desert Lizard","hitpoints":25,"combatLevel":24,"slayerLevel":22,"attackSpeed":4,"attackLevel":20,"strengthLevel":22,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":15,"crushDef":15,"rangeDef":5},"461":{"name":"Desert Lizard","hitpoints":25,"combatLevel":24,"slayerLevel":22,"attackSpeed":4,"attackLevel":20,"strengthLevel":22,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":15,"crushDef":15,"rangeDef":5},"462":{"name":"Small Lizard","hitpoints":15,"combatLevel":12,"slayerLevel":22,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"slashDef":5,"crushDef":5},"463":{"name":"Small Lizard","hitpoints":15,"combatLevel":12,"slayerLevel":22,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"slashDef":5,"crushDef":5},"464":{"name":"Harpie Bug Swarm","hitpoints":25,"combatLevel":46,"slayerLevel":33,"attackSpeed":4,"attackLevel":54,"strengthLevel":46,"defenceLevel":32,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":5,"crushDef":10,"rangeDef":10,"magicDef":5},"465":{"name":"Skeletal Wyvern","hitpoints":210,"combatLevel":140,"slayerLevel":72,"attackSpeed":6,"attackLevel":125,"strengthLevel":116,"defenceLevel":120,"rangeLevel":120,"magicLevel":125,"stabDef":140,"slashDef":90,"crushDef":90,"rangeDef":140,"magicDef":80,"dragon":true},"466":{"name":"Skeletal Wyvern","hitpoints":210,"combatLevel":140,"slayerLevel":72,"attackSpeed":6,"attackLevel":125,"strengthLevel":116,"defenceLevel":120,"rangeLevel":120,"magicLevel":125,"stabDef":140,"slashDef":90,"crushDef":90,"rangeDef":140,"magicDef":80,"dragon":true},"467":{"name":"Skeletal Wyvern","hitpoints":210,"combatLevel":140,"slayerLevel":72,"attackSpeed":6,"attackLevel":125,"strengthLevel":116,"defenceLevel":120,"rangeLevel":120,"magicLevel":125,"stabDef":140,"slashDef":90,"crushDef":90,"rangeDef":140,"magicDef":80,"dragon":true},"468":{"name":"Skeletal Wyvern","hitpoints":210,"combatLevel":140,"slayerLevel":72,"attackSpeed":6,"attackLevel":125,"strengthLevel":116,"defenceLevel":120,"rangeLevel":120,"magicLevel":125,"stabDef":140,"slashDef":90,"crushDef":90,"rangeDef":140,"magicDef":80,"dragon":true},"469":{"name":"Killerwatt","hitpoints":51,"combatLevel":55,"slayerLevel":37,"attackSpeed":2,"attackLevel":50,"strengthLevel":50,"defenceLevel":40,"rangeLevel":67,"magicLevel":67,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":20,"magicDef":20,"bonusAttack":30},"470":{"name":"Killerwatt","hitpoints":51,"combatLevel":55,"slayerLevel":37,"attackSpeed":2,"attackLevel":50,"strengthLevel":50,"defenceLevel":40,"rangeLevel":67,"magicLevel":67,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":20,"magicDef":20,"bonusAttack":30},"472":{"name":"Dark wizard","hitpoints":24,"combatLevel":20,"attackSpeed":4,"attackLevel":5,"strengthLevel":2,"defenceLevel":5,"rangeLevel":1,"magicLevel":6,"magicDef":3},"473":{"name":"Invrigar the Necromancer","hitpoints":24,"combatLevel":20,"attackSpeed":4,"attackLevel":17,"strengthLevel":17,"defenceLevel":14,"rangeLevel":1,"magicLevel":18,"magicDef":3},"474":{"name":"Dark wizard","hitpoints":12,"combatLevel":7,"attackSpeed":4,"attackLevel":5,"strengthLevel":2,"defenceLevel":5,"rangeLevel":1,"magicLevel":6,"magicDef":3},"475":{"name":"Hole in the wall","hitpoints":105,"combatLevel":49,"slayerLevel":35,"attackSpeed":4,"attackLevel":30,"strengthLevel":30,"defenceLevel":16,"rangeLevel":1,"magicLevel":1},"476":{"name":"Wall beast","hitpoints":105,"combatLevel":49,"slayerLevel":35,"attackSpeed":4,"attackLevel":30,"strengthLevel":30,"defenceLevel":16,"rangeLevel":1,"magicLevel":1},"477":{"name":"Giant frog","hitpoints":100,"combatLevel":99,"attackSpeed":4,"attackLevel":100,"strengthLevel":80,"defenceLevel":65,"rangeLevel":1,"magicLevel":1},"478":{"name":"Big frog","hitpoints":25,"combatLevel":24,"attackSpeed":4,"attackLevel":25,"strengthLevel":20,"defenceLevel":15,"rangeLevel":1,"magicLevel":1},"480":{"name":"Cave slime","hitpoints":25,"combatLevel":23,"slayerLevel":17,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":35,"rangeLevel":1,"magicLevel":13},"481":{"name":"Cave bug","hitpoints":5,"combatLevel":6,"slayerLevel":7,"attackSpeed":4,"attackLevel":6,"strengthLevel":5,"defenceLevel":6,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"crushDef":5,"rangeDef":10,"magicDef":5},"483":{"name":"Cave bug","hitpoints":93,"combatLevel":96,"slayerLevel":7,"attackSpeed":4,"attackLevel":82,"strengthLevel":80,"defenceLevel":84,"rangeLevel":1,"magicLevel":1,"stabDef":72,"slashDef":59,"crushDef":35,"rangeDef":95,"magicDef":25},"484":{"name":"Bloodveld","hitpoints":120,"combatLevel":76,"slayerLevel":50,"attackSpeed":4,"attackLevel":75,"strengthLevel":45,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"485":{"name":"Bloodveld","hitpoints":120,"combatLevel":76,"slayerLevel":50,"attackSpeed":4,"attackLevel":75,"strengthLevel":45,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"486":{"name":"Bloodveld","hitpoints":120,"combatLevel":76,"slayerLevel":50,"attackSpeed":4,"attackLevel":75,"strengthLevel":45,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"487":{"name":"Bloodveld","hitpoints":120,"combatLevel":76,"slayerLevel":50,"attackSpeed":4,"attackLevel":75,"strengthLevel":45,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"492":{"name":"Cave kraken","hitpoints":125,"combatLevel":127,"slayerLevel":87,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":150,"rangeLevel":1,"magicLevel":120,"rangeDef":100},"493":{"name":"Whirlpool","combatLevel":127,"slayerLevel":87,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"rangeDef":300,"magicDef":130},"494":{"name":"Kraken","hitpoints":255,"combatLevel":291,"slayerLevel":87,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"rangeDef":300,"magicDef":130},"496":{"name":"Whirlpool","combatLevel":127,"slayerLevel":87,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"rangeDef":300,"magicDef":130},"498":{"name":"Smoke devil","hitpoints":185,"combatLevel":160,"slayerLevel":93,"attackSpeed":4,"attackLevel":140,"strengthLevel":130,"defenceLevel":275,"rangeLevel":195,"magicLevel":1,"rangeDef":44,"magicDef":600,"poisonImmune":true,"venomImmune":true},"499":{"name":"Thermonuclear smoke devil","hitpoints":240,"combatLevel":301,"slayerLevel":93,"attackSpeed":2,"attackLevel":230,"strengthLevel":220,"defenceLevel":360,"rangeLevel":310,"magicLevel":1,"stabDef":11,"slashDef":4,"crushDef":9,"rangeDef":900,"magicDef":800,"poisonImmune":true,"venomImmune":true},"505":{"name":"Mugger","hitpoints":8,"combatLevel":6,"attackSpeed":4,"attackLevel":5,"strengthLevel":5,"defenceLevel":5,"rangeLevel":1,"magicLevel":1},"508":{"name":"Black Knight","hitpoints":42,"combatLevel":33,"attackSpeed":5,"attackLevel":25,"strengthLevel":25,"defenceLevel":25,"rangeLevel":1,"magicLevel":1,"stabDef":73,"slashDef":76,"crushDef":70,"rangeDef":72,"bonusAttack":18,"bonusStrength":16},"509":{"name":"Black Knight","hitpoints":42,"combatLevel":33,"attackSpeed":5,"attackLevel":25,"strengthLevel":25,"defenceLevel":25,"rangeLevel":1,"magicLevel":1,"stabDef":73,"slashDef":76,"crushDef":70,"rangeDef":72,"bonusAttack":18,"bonusStrength":16},"510":{"name":"Highwayman","hitpoints":13,"combatLevel":5,"attackSpeed":4,"attackLevel":2,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":6,"bonusStrength":7},"511":{"name":"Highwayman","hitpoints":13,"combatLevel":5,"attackSpeed":4,"attackLevel":2,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":6,"bonusStrength":7},"512":{"name":"Chaos druid","hitpoints":20,"combatLevel":13,"slayerLevel":1,"attackSpeed":4,"attackLevel":8,"strengthLevel":8,"defenceLevel":12,"rangeLevel":1,"magicLevel":10},"513":{"name":"Pirate","hitpoints":20,"combatLevel":23,"attackSpeed":5,"attackLevel":20,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"slashDef":1,"bonusAttack":9,"bonusStrength":10},"514":{"name":"Pirate","hitpoints":20,"combatLevel":23,"attackSpeed":5,"attackLevel":21,"strengthLevel":21,"defenceLevel":21,"rangeLevel":1,"magicLevel":1,"stabDef":3,"slashDef":2,"bonusAttack":8,"bonusStrength":10},"515":{"name":"Pirate","hitpoints":23,"combatLevel":26,"attackSpeed":5,"attackLevel":23,"strengthLevel":23,"defenceLevel":23,"rangeLevel":1,"magicLevel":1,"stabDef":3,"slashDef":2,"bonusAttack":8,"bonusStrength":10},"517":{"name":"Thug","hitpoints":18,"combatLevel":10,"attackSpeed":6,"attackLevel":7,"strengthLevel":5,"defenceLevel":9,"rangeLevel":1,"magicLevel":1,"stabDef":2,"slashDef":3,"crushDef":3,"bonusAttack":5,"bonusStrength":5},"518":{"name":"Rogue","hitpoints":17,"combatLevel":15,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":13,"rangeLevel":1,"magicLevel":1,"stabDef":6,"slashDef":9,"crushDef":11,"bonusAttack":5,"bonusStrength":5},"522":{"name":"Tribesman","hitpoints":39,"combatLevel":32,"attackSpeed":4,"attackLevel":23,"strengthLevel":27,"defenceLevel":26,"rangeLevel":1,"magicLevel":1,"stabDef":4,"slashDef":6,"crushDef":6,"bonusAttack":8,"bonusStrength":5},"523":{"name":"Dark warrior","hitpoints":17,"combatLevel":8,"slayerLevel":1,"attackSpeed":4,"attackLevel":5,"strengthLevel":5,"defenceLevel":5,"rangeLevel":1,"magicLevel":1,"stabDef":96,"slashDef":79,"crushDef":59,"bonusAttack":20,"bonusStrength":16},"524":{"name":"Chaos druid warrior","hitpoints":40,"combatLevel":37,"attackSpeed":5,"attackLevel":32,"strengthLevel":34,"defenceLevel":25,"rangeLevel":1,"magicLevel":1,"stabDef":13,"slashDef":17,"crushDef":14,"rangeDef":14,"bonusAttack":9,"bonusStrength":5},"525":{"name":"Necromancer","hitpoints":40,"combatLevel":26,"attackSpeed":4,"attackLevel":18,"strengthLevel":18,"defenceLevel":18,"rangeLevel":1,"magicLevel":18},"537":{"name":"Zygomite","hitpoints":65,"combatLevel":74,"slayerLevel":57,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"rangeLevel":65,"magicLevel":65,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":20,"magicDef":20,"bonusAttack":30},"561":{"name":"Sorebones","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":4,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"562":{"name":"Sorebones","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":4,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"563":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"564":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"565":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"566":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"567":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"568":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"569":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"570":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"571":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"572":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"573":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"574":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"575":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"576":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"577":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"578":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"579":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"580":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"581":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"582":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"583":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"584":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"585":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"586":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"587":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"588":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"589":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"590":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"591":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"592":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"593":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"594":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"595":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"596":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"597":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"598":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"599":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"600":{"name":"Barrelchest","hitpoints":134,"combatLevel":190,"attackSpeed":5,"attackLevel":170,"strengthLevel":145,"defenceLevel":140,"rangeLevel":1,"magicLevel":90,"bonusAttack":80,"bonusStrength":80},"613":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"614":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"615":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"616":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"617":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"618":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"slayerLevel":1,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"619":{"name":"Zombie swab","hitpoints":50,"combatLevel":55,"slayerLevel":1,"attackSpeed":4,"attackLevel":45,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"620":{"name":"Zombie swab","hitpoints":50,"combatLevel":55,"slayerLevel":1,"attackSpeed":4,"attackLevel":45,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"621":{"name":"Zombie swab","hitpoints":50,"combatLevel":55,"slayerLevel":1,"attackSpeed":4,"attackLevel":45,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"622":{"name":"Zombie swab","hitpoints":50,"combatLevel":55,"slayerLevel":1,"attackSpeed":4,"attackLevel":45,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"623":{"name":"Zombie swab","hitpoints":50,"combatLevel":55,"slayerLevel":1,"attackSpeed":4,"attackLevel":45,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"624":{"name":"Zombie swab","hitpoints":50,"combatLevel":55,"slayerLevel":1,"attackSpeed":4,"attackLevel":45,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"625":{"name":"Evil spirit","hitpoints":90,"combatLevel":150,"attackSpeed":4,"attackLevel":170,"strengthLevel":146,"defenceLevel":100,"rangeLevel":1,"magicLevel":1},"626":{"name":"Fever spider","hitpoints":40,"combatLevel":49,"slayerLevel":42,"attackSpeed":4,"attackLevel":60,"strengthLevel":30,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stab":1,"slash":1,"crush":1,"range":1,"magic":1,"stabDef":20,"slashDef":15,"crushDef":10,"rangeDef":15,"magicDef":15},"639":{"name":"Tyras guard","hitpoints":110,"combatLevel":110,"attackSpeed":5,"attackLevel":85,"strengthLevel":95,"defenceLevel":100,"magicLevel":1,"stabDef":87,"slashDef":84,"crushDef":76,"rangeDef":79,"bonusAttack":20,"bonusStrength":30},"642":{"name":"Arrg","hitpoints":140,"combatLevel":113,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":140,"defenceLevel":40,"rangeLevel":70,"stabDef":35,"slashDef":60,"crushDef":35,"rangeDef":200,"magicDef":200,"bonusAttack":60,"bonusStrength":100},"643":{"name":"Arrg","hitpoints":140,"combatLevel":113,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":140,"defenceLevel":40,"rangeLevel":70,"stabDef":35,"slashDef":60,"crushDef":35,"rangeDef":200,"magicDef":200,"bonusAttack":60,"bonusStrength":100},"645":{"name":"Ice wolf","hitpoints":70,"combatLevel":96,"slayerLevel":1,"attackSpeed":4,"attackLevel":100,"strengthLevel":90,"defenceLevel":70,"rangeLevel":1,"magicLevel":1},"646":{"name":"Ice wolf","hitpoints":70,"combatLevel":96,"slayerLevel":1,"attackSpeed":4,"attackLevel":100,"strengthLevel":90,"defenceLevel":70,"rangeLevel":1,"magicLevel":1},"647":{"name":"Ice wolf","hitpoints":70,"combatLevel":132,"slayerLevel":1,"attackSpeed":4,"attackLevel":150,"strengthLevel":150,"defenceLevel":70},"648":{"name":"Ice troll","hitpoints":80,"combatLevel":124,"slayerLevel":1,"attackSpeed":4,"attackLevel":140,"strengthLevel":120,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"649":{"name":"Ice troll","hitpoints":80,"combatLevel":123,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":120,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"650":{"name":"Ice troll","hitpoints":100,"combatLevel":120,"slayerLevel":1,"attackSpeed":4,"attackLevel":100,"strengthLevel":100,"defenceLevel":120,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"651":{"name":"Ice troll","hitpoints":80,"combatLevel":121,"slayerLevel":1,"attackSpeed":4,"attackLevel":100,"strengthLevel":120,"defenceLevel":120,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"652":{"name":"Ice troll","hitpoints":100,"combatLevel":120,"slayerLevel":1,"attackSpeed":4,"attackLevel":100,"strengthLevel":100,"defenceLevel":120,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"653":{"name":"Ice troll","hitpoints":100,"combatLevel":120,"slayerLevel":1,"attackSpeed":4,"attackLevel":100,"strengthLevel":100,"defenceLevel":120,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"654":{"name":"Ice troll","hitpoints":80,"combatLevel":121,"slayerLevel":1,"attackSpeed":4,"attackLevel":100,"strengthLevel":120,"defenceLevel":120,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"655":{"name":"Goblin","hitpoints":12,"combatLevel":5,"slayerLevel":1,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"656":{"name":"Goblin","hitpoints":12,"combatLevel":5,"slayerLevel":1,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"657":{"name":"Goblin","hitpoints":12,"combatLevel":5,"slayerLevel":1,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"658":{"name":"Goblin","hitpoints":12,"combatLevel":5,"slayerLevel":1,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"659":{"name":"Goblin","hitpoints":12,"combatLevel":5,"slayerLevel":1,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"660":{"name":"Goblin","hitpoints":12,"combatLevel":5,"slayerLevel":1,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"661":{"name":"Goblin","hitpoints":12,"combatLevel":5,"slayerLevel":1,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"662":{"name":"Goblin","hitpoints":12,"combatLevel":5,"slayerLevel":1,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"663":{"name":"Goblin","hitpoints":12,"combatLevel":5,"slayerLevel":1,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"664":{"name":"Goblin","hitpoints":12,"combatLevel":5,"slayerLevel":1,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"665":{"name":"Goblin","hitpoints":12,"combatLevel":5,"slayerLevel":1,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"666":{"name":"Goblin","hitpoints":12,"combatLevel":5,"slayerLevel":1,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"667":{"name":"Goblin","hitpoints":12,"combatLevel":5,"slayerLevel":1,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"668":{"name":"Goblin","hitpoints":12,"combatLevel":5,"slayerLevel":1,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"674":{"name":"Goblin","hitpoints":12,"combatLevel":5,"slayerLevel":1,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"677":{"name":"Goblin","hitpoints":12,"combatLevel":5,"slayerLevel":1,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"678":{"name":"Goblin","hitpoints":12,"combatLevel":5,"slayerLevel":1,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"680":{"name":"Giant skeleton","hitpoints":110,"combatLevel":100,"attackSpeed":6,"attackLevel":84,"strengthLevel":80,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":40,"rangeDef":40,"bonusStrength":15},"681":{"name":"Giant skeleton","hitpoints":110,"combatLevel":100,"attackSpeed":6,"attackLevel":84,"strengthLevel":80,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":40,"rangeDef":40,"bonusStrength":15},"682":{"name":"Damis","hitpoints":90,"combatLevel":103,"attackSpeed":4,"attackLevel":90,"strengthLevel":90,"defenceLevel":90,"rangeLevel":1,"magicLevel":1,"stabDef":60,"slashDef":60,"crushDef":60,"rangeDef":60,"magicDef":60,"bonusStrength":80},"683":{"name":"Damis","hitpoints":200,"combatLevel":174,"attackSpeed":4,"attackLevel":160,"strengthLevel":100,"defenceLevel":160,"rangeLevel":1,"magicLevel":1,"stabDef":100,"slashDef":100,"crushDef":100,"rangeDef":120,"magicDef":80,"bonusStrength":100},"685":{"name":"Stranger","hitpoints":80,"combatLevel":95,"attackSpeed":4,"attackLevel":90,"strengthLevel":80,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"magic":1,"stabDef":81,"slashDef":93,"crushDef":98,"rangeDef":82,"magicDef":1,"bonusStrength":40},"690":{"name":"Bandit","hitpoints":65,"combatLevel":74,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"rangeLevel":1,"magicLevel":1},"695":{"name":"Bandit","hitpoints":50,"combatLevel":57,"attackSpeed":4,"attackLevel":50,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1},"699":{"name":"Ice troll","hitpoints":80,"combatLevel":124,"slayerLevel":1,"attackSpeed":4,"attackLevel":140,"strengthLevel":120,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"700":{"name":"Ice troll","hitpoints":80,"combatLevel":123,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":120,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"701":{"name":"Ice troll","hitpoints":100,"combatLevel":120,"slayerLevel":1,"attackSpeed":4,"attackLevel":100,"strengthLevel":100,"defenceLevel":120,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"702":{"name":"Ice troll","hitpoints":80,"combatLevel":121,"slayerLevel":1,"attackSpeed":4,"attackLevel":100,"strengthLevel":120,"defenceLevel":120,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"703":{"name":"Ice troll","hitpoints":100,"combatLevel":120,"slayerLevel":1,"attackSpeed":4,"attackLevel":100,"strengthLevel":100,"defenceLevel":120,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"704":{"name":"Ice troll","hitpoints":100,"combatLevel":120,"slayerLevel":1,"attackSpeed":4,"attackLevel":100,"strengthLevel":100,"defenceLevel":120,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"705":{"name":"Ice troll","hitpoints":80,"combatLevel":121,"slayerLevel":1,"attackSpeed":4,"attackLevel":100,"strengthLevel":120,"defenceLevel":120,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"710":{"name":"Ice wolf","hitpoints":70,"combatLevel":132,"slayerLevel":1,"attackSpeed":4,"attackLevel":150,"strengthLevel":150,"defenceLevel":70},"711":{"name":"Ice wolf","hitpoints":70,"combatLevel":132,"slayerLevel":1,"attackSpeed":4,"attackLevel":150,"strengthLevel":150,"defenceLevel":70},"712":{"name":"Ice wolf","hitpoints":70,"combatLevel":132,"slayerLevel":1,"attackSpeed":4,"attackLevel":150,"strengthLevel":150,"defenceLevel":70},"713":{"name":"Ice wolf","hitpoints":70,"combatLevel":132,"slayerLevel":1,"attackSpeed":4,"attackLevel":150,"strengthLevel":150,"defenceLevel":70},"714":{"name":"Ice wolf","hitpoints":70,"combatLevel":132,"slayerLevel":1,"attackSpeed":4,"attackLevel":150,"strengthLevel":150,"defenceLevel":70},"715":{"name":"Ice wolf","hitpoints":70,"combatLevel":132,"slayerLevel":1,"attackSpeed":4,"attackLevel":150,"strengthLevel":150,"defenceLevel":70},"717":{"name":"Mummy","hitpoints":86,"attackSpeed":4,"undead":true},"720":{"name":"Mummy","hitpoints":91,"combatLevel":103,"attackSpeed":4,"undead":true},"721":{"name":"Mummy","hitpoints":91,"combatLevel":103,"attackSpeed":4,"undead":true},"722":{"name":"Mummy","hitpoints":91,"combatLevel":103,"attackSpeed":4,"undead":true},"723":{"name":"Mummy","hitpoints":91,"combatLevel":103,"attackSpeed":4,"undead":true},"724":{"name":"Mummy","hitpoints":86,"attackSpeed":4,"undead":true},"725":{"name":"Mummy","hitpoints":91,"combatLevel":103,"attackSpeed":4,"undead":true},"726":{"name":"Mummy","hitpoints":91,"combatLevel":103,"attackSpeed":4,"undead":true},"727":{"name":"Mummy","hitpoints":91,"combatLevel":103,"attackSpeed":4,"undead":true},"728":{"name":"Mummy","hitpoints":91,"combatLevel":103,"attackSpeed":4,"undead":true},"729":{"name":"Scarabs","hitpoints":25,"combatLevel":92,"attackSpeed":1,"attackLevel":255,"strengthLevel":2,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"stabDef":15,"slashDef":15,"crushDef":15,"rangeDef":15,"magicDef":15},"734":{"name":"Bandit","hitpoints":30,"combatLevel":56,"attackSpeed":4,"attackLevel":59,"strengthLevel":70,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"slashDef":9,"crushDef":8,"magicDef":10,"bonusAttack":9,"bonusStrength":9},"735":{"name":"Bandit","hitpoints":30,"combatLevel":56,"attackSpeed":4,"attackLevel":59,"strengthLevel":70,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"slashDef":9,"crushDef":8,"magicDef":10,"bonusAttack":9,"bonusStrength":9},"736":{"name":"Bandit","hitpoints":30,"combatLevel":41,"attackSpeed":4,"attackLevel":40,"strengthLevel":50,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"slashDef":9,"crushDef":8,"magicDef":10,"bonusAttack":9,"bonusStrength":9},"737":{"name":"Bandit","hitpoints":30,"combatLevel":41,"attackSpeed":4,"attackLevel":40,"strengthLevel":50,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"slashDef":9,"crushDef":8,"magicDef":10,"bonusAttack":9,"bonusStrength":9},"738":{"name":"Bandit champion","hitpoints":50,"combatLevel":70,"attackSpeed":4,"attackLevel":59,"strengthLevel":80,"defenceLevel":50,"stabDef":9,"slashDef":8,"crushDef":10,"bonusAttack":9,"bonusStrength":9},"762":{"name":"Baby Roc","hitpoints":50,"combatLevel":75,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":150},"763":{"name":"Giant Roc","hitpoints":250,"combatLevel":172,"attackSpeed":6,"attackLevel":130,"strengthLevel":130,"defenceLevel":100,"rangeLevel":130,"magicLevel":1,"magicDef":150},"764":{"name":"Shadow","hitpoints":15,"combatLevel":73,"attackSpeed":4,"attackLevel":90,"strengthLevel":120,"defenceLevel":5,"rangeLevel":1,"magicLevel":90,"stabDef":30,"slashDef":30,"crushDef":30,"rangeDef":30,"magicDef":30},"773":{"name":"Skraeling","hitpoints":1,"combatLevel":2,"attackSpeed":4,"attackLevel":3,"strengthLevel":3,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"774":{"name":"Skraeling","hitpoints":1,"combatLevel":2,"attackSpeed":4,"attackLevel":3,"strengthLevel":3,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"785":{"name":"Me","hitpoints":45,"combatLevel":79,"attackSpeed":4,"attackLevel":75,"strengthLevel":78,"defenceLevel":74,"rangeLevel":1,"magicLevel":1},"786":{"name":"Me","hitpoints":45,"combatLevel":79,"attackSpeed":4,"attackLevel":75,"strengthLevel":78,"defenceLevel":74,"rangeLevel":1,"magicLevel":1},"787":{"name":"Suqah","hitpoints":106,"combatLevel":111,"slayerLevel":1,"attackSpeed":6,"attackLevel":95,"strengthLevel":95,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":90},"788":{"name":"Suqah","hitpoints":106,"combatLevel":111,"slayerLevel":1,"attackSpeed":6,"attackLevel":95,"strengthLevel":95,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":90},"789":{"name":"Suqah","hitpoints":106,"combatLevel":111,"slayerLevel":1,"attackSpeed":6,"attackLevel":95,"strengthLevel":95,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":90},"790":{"name":"Suqah","hitpoints":106,"combatLevel":111,"slayerLevel":1,"attackSpeed":6,"attackLevel":95,"strengthLevel":95,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":90},"791":{"name":"Suqah","hitpoints":106,"combatLevel":111,"slayerLevel":1,"attackSpeed":6,"attackLevel":95,"strengthLevel":95,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":90},"792":{"name":"Suqah","hitpoints":106,"combatLevel":111,"slayerLevel":1,"attackSpeed":6,"attackLevel":95,"strengthLevel":95,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":90},"793":{"name":"Suqah","hitpoints":106,"combatLevel":111,"slayerLevel":1,"attackSpeed":6,"attackLevel":95,"strengthLevel":95,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":90},"794":{"name":"Scarab mage","hitpoints":50,"combatLevel":93,"slayerLevel":1,"attackSpeed":15,"attackLevel":90,"strengthLevel":90,"defenceLevel":90,"rangeLevel":1,"magicLevel":70,"magic":70,"stabDef":40,"slashDef":90,"crushDef":90,"magicDef":34},"795":{"name":"Locust rider","hitpoints":90,"combatLevel":106,"slayerLevel":1,"attackSpeed":6,"attackLevel":100,"strengthLevel":90,"defenceLevel":90,"rangeLevel":1,"magicLevel":1,"stabDef":90,"slashDef":90,"crushDef":40},"796":{"name":"Locust rider","hitpoints":90,"combatLevel":98,"slayerLevel":1,"attackSpeed":6,"attackLevel":105,"strengthLevel":90,"defenceLevel":50,"rangeLevel":90,"magicLevel":1,"range":80,"stabDef":50,"slashDef":90,"crushDef":50,"rangeDef":66,"magicDef":34,"bonusRangeStrength":80},"797":{"name":"Giant scarab","hitpoints":130,"combatLevel":191,"slayerLevel":1,"attackSpeed":4,"attackLevel":169,"strengthLevel":190,"defenceLevel":169,"rangeLevel":190,"magicLevel":1,"stabDef":70,"slashDef":99,"crushDef":99,"rangeDef":149,"magicDef":159},"798":{"name":"Giant scarab","hitpoints":130,"combatLevel":191,"slayerLevel":1,"attackSpeed":4,"attackLevel":169,"strengthLevel":190,"defenceLevel":169,"rangeLevel":190,"magicLevel":1,"stabDef":70,"slashDef":99,"crushDef":99,"rangeDef":149,"magicDef":159},"799":{"name":"Scarab mage","hitpoints":50,"combatLevel":66,"slayerLevel":1,"attackSpeed":15,"magic":70},"800":{"name":"Locust rider","hitpoints":90,"combatLevel":68,"slayerLevel":1,"attackSpeed":6,"attackLevel":100,"strengthLevel":90,"defenceLevel":90,"rangeLevel":1,"magicLevel":1,"stabDef":90,"slashDef":90,"crushDef":40},"801":{"name":"Locust rider","hitpoints":90,"combatLevel":68,"slayerLevel":1,"attackSpeed":6,"attackLevel":105,"strengthLevel":90,"defenceLevel":50,"rangeLevel":90,"magicLevel":1,"range":80,"stabDef":50,"slashDef":90,"crushDef":50,"rangeDef":66,"magicDef":34,"bonusRangeStrength":80},"817":{"name":"Elvarg","hitpoints":80,"combatLevel":83,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":70,"stabDef":20,"slashDef":40,"crushDef":40,"rangeDef":20,"magicDef":30},"820":{"name":"Wormbrain","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"823":{"name":"Melzar the Mad","hitpoints":44,"combatLevel":43,"attackSpeed":4,"attackLevel":37,"strengthLevel":37,"defenceLevel":34,"rangeLevel":1,"magicLevel":40,"poisonImmune":true,"venomImmune":true},"852":{"name":"Icelord","hitpoints":60,"combatLevel":51,"slayerLevel":1,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1},"853":{"name":"Icelord","hitpoints":60,"combatLevel":51,"slayerLevel":1,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1},"854":{"name":"Icelord","hitpoints":60,"combatLevel":51,"slayerLevel":1,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1},"855":{"name":"Icelord","hitpoints":60,"combatLevel":51,"slayerLevel":1,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1},"866":{"name":"Zogre","hitpoints":71,"combatLevel":44,"slayerLevel":1,"attackSpeed":6,"attackLevel":20,"strengthLevel":36,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"867":{"name":"Zogre","hitpoints":71,"combatLevel":44,"slayerLevel":1,"attackSpeed":6,"attackLevel":20,"strengthLevel":36,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"868":{"name":"Zogre","hitpoints":71,"combatLevel":44,"slayerLevel":1,"attackSpeed":6,"attackLevel":20,"strengthLevel":36,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"869":{"name":"Zogre","hitpoints":71,"combatLevel":44,"slayerLevel":1,"attackSpeed":6,"attackLevel":20,"strengthLevel":36,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"870":{"name":"Zogre","hitpoints":71,"combatLevel":44,"slayerLevel":1,"attackSpeed":6,"attackLevel":20,"strengthLevel":36,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"871":{"name":"Zogre","hitpoints":71,"combatLevel":44,"slayerLevel":1,"attackSpeed":6,"attackLevel":20,"strengthLevel":36,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"872":{"name":"Skogre","hitpoints":71,"combatLevel":44,"slayerLevel":1,"attackSpeed":6,"attackLevel":20,"strengthLevel":36,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"873":{"name":"Zogre","hitpoints":71,"combatLevel":44,"slayerLevel":1,"attackSpeed":6,"attackLevel":20,"strengthLevel":36,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"874":{"name":"Zogre","hitpoints":71,"combatLevel":44,"slayerLevel":1,"attackSpeed":6,"attackLevel":20,"strengthLevel":36,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"875":{"name":"Zogre","hitpoints":71,"combatLevel":44,"slayerLevel":1,"attackSpeed":6,"attackLevel":20,"strengthLevel":36,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"876":{"name":"Zogre","hitpoints":71,"combatLevel":44,"slayerLevel":1,"attackSpeed":6,"attackLevel":20,"strengthLevel":36,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"877":{"name":"Zogre","hitpoints":71,"combatLevel":44,"slayerLevel":1,"attackSpeed":6,"attackLevel":20,"strengthLevel":36,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"878":{"name":"Skogre","hitpoints":71,"combatLevel":44,"slayerLevel":1,"attackSpeed":6,"attackLevel":20,"strengthLevel":36,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"879":{"name":"Skogre","hitpoints":71,"combatLevel":44,"slayerLevel":1,"attackSpeed":6,"attackLevel":20,"strengthLevel":36,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"880":{"name":"Zombie","hitpoints":50,"combatLevel":39,"attackSpeed":6,"attackLevel":30,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"undead":true},"882":{"name":"Slash Bash","hitpoints":100,"combatLevel":111,"attackSpeed":6,"attackLevel":100,"strengthLevel":120,"defenceLevel":60,"rangeLevel":100,"magicLevel":1,"stabDef":30,"slashDef":30,"crushDef":30,"bonusAttack":22,"undead":true},"891":{"name":"Moss Guardian","hitpoints":120,"combatLevel":84,"attackSpeed":6,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stab":1,"slash":1,"crush":1,"range":1,"magic":1,"bonusAttack":66,"bonusStrength":62},"911":{"name":"Agrith Naar","hitpoints":100,"combatLevel":100,"attackSpeed":4,"attackLevel":83,"strengthLevel":90,"defenceLevel":82,"rangeLevel":100,"magicLevel":100,"demon":true},"924":{"name":"Skeleton","hitpoints":18,"combatLevel":13,"slayerLevel":1,"attackSpeed":4,"undead":true},"925":{"name":"Rock","hitpoints":140,"combatLevel":111,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":110,"defenceLevel":70,"stabDef":35,"slashDef":60,"crushDef":35,"rangeDef":200,"magicDef":200,"bonusAttack":60,"bonusStrength":100},"926":{"name":"Stick","hitpoints":135,"combatLevel":104,"slayerLevel":1,"attackSpeed":6,"attackLevel":60,"strengthLevel":110,"defenceLevel":60,"stabDef":30,"slashDef":30,"crushDef":50,"rangeDef":200,"magicDef":200,"bonusAttack":50,"bonusStrength":80},"927":{"name":"Pee Hat","hitpoints":120,"combatLevel":91,"slayerLevel":1,"attackSpeed":6,"attackLevel":50,"strengthLevel":100,"defenceLevel":50,"stabDef":25,"slashDef":25,"crushDef":40,"rangeDef":200,"magicDef":200,"bonusAttack":40,"bonusStrength":70},"928":{"name":"Kraka","hitpoints":120,"combatLevel":91,"slayerLevel":1,"attackSpeed":6,"attackLevel":50,"strengthLevel":100,"defenceLevel":50,"stabDef":25,"slashDef":25,"crushDef":40,"rangeDef":200,"magicDef":200,"bonusAttack":40,"bonusStrength":70},"931":{"name":"Thrower Troll","hitpoints":95,"combatLevel":67,"slayerLevel":1,"attackSpeed":7,"attackLevel":30,"strengthLevel":80,"defenceLevel":30,"rangeLevel":60,"rangeDef":200,"magicDef":200},"932":{"name":"Thrower Troll","hitpoints":95,"combatLevel":67,"slayerLevel":1,"attackSpeed":7,"attackLevel":30,"strengthLevel":80,"defenceLevel":30,"rangeLevel":60,"rangeDef":200,"magicDef":200},"933":{"name":"Thrower Troll","hitpoints":95,"combatLevel":67,"slayerLevel":1,"attackSpeed":7,"attackLevel":30,"strengthLevel":80,"defenceLevel":30,"rangeLevel":60,"rangeDef":200,"magicDef":200},"934":{"name":"Thrower Troll","hitpoints":95,"combatLevel":67,"slayerLevel":1,"attackSpeed":7,"attackLevel":30,"strengthLevel":80,"defenceLevel":30,"rangeLevel":60,"rangeDef":200,"magicDef":200},"935":{"name":"Thrower Troll","hitpoints":95,"combatLevel":67,"slayerLevel":1,"attackSpeed":7,"attackLevel":30,"strengthLevel":80,"defenceLevel":30,"rangeLevel":60,"rangeDef":200,"magicDef":200},"936":{"name":"Mountain troll","hitpoints":90,"combatLevel":69,"slayerLevel":1,"attackSpeed":6,"attackLevel":40,"strengthLevel":75,"defenceLevel":40,"crushDef":10,"rangeDef":200,"magicDef":200,"bonusAttack":20,"bonusStrength":20},"937":{"name":"Mountain troll","hitpoints":90,"combatLevel":69,"slayerLevel":1,"attackSpeed":6,"attackLevel":40,"strengthLevel":75,"defenceLevel":40,"crushDef":10,"rangeDef":200,"magicDef":200,"bonusAttack":20,"bonusStrength":20},"938":{"name":"Mountain troll","hitpoints":90,"combatLevel":69,"slayerLevel":1,"attackSpeed":6,"attackLevel":40,"strengthLevel":75,"defenceLevel":40,"crushDef":10,"rangeDef":200,"magicDef":200,"bonusAttack":20,"bonusStrength":20},"939":{"name":"Mountain troll","hitpoints":90,"combatLevel":69,"slayerLevel":1,"attackSpeed":6,"attackLevel":40,"strengthLevel":75,"defenceLevel":40,"crushDef":10,"rangeDef":200,"magicDef":200,"bonusAttack":20,"bonusStrength":20},"940":{"name":"Mountain troll","hitpoints":90,"combatLevel":69,"slayerLevel":1,"attackSpeed":6,"attackLevel":40,"strengthLevel":75,"defenceLevel":40,"crushDef":10,"rangeDef":200,"magicDef":200,"bonusAttack":20,"bonusStrength":20},"941":{"name":"Mountain troll","hitpoints":90,"combatLevel":69,"slayerLevel":1,"attackSpeed":6,"attackLevel":40,"strengthLevel":75,"defenceLevel":40,"crushDef":10,"rangeDef":200,"magicDef":200,"bonusAttack":20,"bonusStrength":20},"942":{"name":"Mountain troll","hitpoints":90,"combatLevel":69,"slayerLevel":1,"attackSpeed":6,"attackLevel":40,"strengthLevel":75,"defenceLevel":40,"crushDef":10,"rangeDef":200,"magicDef":200,"bonusAttack":20,"bonusStrength":20},"946":{"name":"Ghast","hitpoints":22,"combatLevel":30,"attackSpeed":4,"attackLevel":22,"strengthLevel":22,"defenceLevel":18,"rangeLevel":1,"magicLevel":1},"949":{"name":"Mummy","hitpoints":68,"combatLevel":84,"attackSpeed":4,"undead":true},"950":{"name":"Mummy","hitpoints":68,"combatLevel":84,"attackSpeed":4,"undead":true},"951":{"name":"Mummy","hitpoints":68,"combatLevel":84,"attackSpeed":4,"undead":true},"952":{"name":"Mummy","hitpoints":68,"combatLevel":84,"attackSpeed":4,"undead":true},"953":{"name":"Mummy","hitpoints":68,"combatLevel":84,"attackSpeed":4,"undead":true},"955":{"name":"Kalphite Worker","hitpoints":40,"combatLevel":28,"slayerLevel":1,"attackSpeed":4,"attackLevel":20,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":1,"rangeDef":10,"magicDef":10},"956":{"name":"Kalphite Worker","hitpoints":40,"combatLevel":28,"slayerLevel":1,"attackSpeed":4,"attackLevel":20,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":1,"rangeDef":10,"magicDef":10},"957":{"name":"Kalphite Soldier","hitpoints":90,"combatLevel":85,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"stabDef":25,"slashDef":25,"crushDef":5,"rangeDef":50,"magicDef":50},"958":{"name":"Kalphite Soldier","hitpoints":90,"combatLevel":85,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"stabDef":25,"slashDef":25,"crushDef":5,"rangeDef":50,"magicDef":50},"959":{"name":"Kalphite Guardian","hitpoints":171,"combatLevel":141,"slayerLevel":1,"attackSpeed":4,"attackLevel":110,"strengthLevel":110,"defenceLevel":110,"rangeLevel":1,"magicLevel":1,"stabDef":25,"slashDef":25,"crushDef":5,"rangeDef":50,"magicDef":50},"960":{"name":"Kalphite Guardian","hitpoints":171,"combatLevel":141,"slayerLevel":1,"attackSpeed":4,"attackLevel":110,"strengthLevel":110,"defenceLevel":110,"rangeLevel":1,"magicLevel":1,"stabDef":25,"slashDef":25,"crushDef":5,"rangeDef":50,"magicDef":50},"961":{"name":"Kalphite Worker","hitpoints":40,"combatLevel":28,"slayerLevel":1,"attackSpeed":4,"attackLevel":20,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":1,"rangeDef":10,"magicDef":10},"962":{"name":"Kalphite Guardian","hitpoints":171,"combatLevel":141,"slayerLevel":1,"attackSpeed":4,"attackLevel":110,"strengthLevel":110,"defenceLevel":110,"rangeLevel":1,"magicLevel":1,"stabDef":25,"slashDef":25,"crushDef":5,"rangeDef":50,"magicDef":50},"963":{"name":"Kalphite Queen","hitpoints":255,"combatLevel":333,"slayerLevel":1,"attackSpeed":4,"attackLevel":300,"strengthLevel":300,"defenceLevel":300,"rangeLevel":1,"magicLevel":150,"stabDef":50,"slashDef":50,"crushDef":10,"rangeDef":100,"magicDef":100},"965":{"name":"Kalphite Queen","hitpoints":255,"combatLevel":333,"slayerLevel":1,"attackSpeed":4,"attackLevel":300,"strengthLevel":300,"defenceLevel":300,"rangeLevel":1,"magicLevel":150,"stabDef":100,"slashDef":100,"crushDef":100,"rangeDef":10,"magicDef":10},"970":{"name":"Dagannoth","hitpoints":70,"combatLevel":74,"slayerLevel":1,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":50,"rangeLevel":1,"magicLevel":1},"971":{"name":"Dagannoth","hitpoints":70,"combatLevel":74,"slayerLevel":1,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":50,"rangeLevel":1,"magicLevel":1},"972":{"name":"Dagannoth","hitpoints":70,"combatLevel":74,"slayerLevel":1,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":50,"rangeLevel":1,"magicLevel":1},"973":{"name":"Dagannoth","hitpoints":120,"combatLevel":92,"slayerLevel":1,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":71,"rangeLevel":1,"magicLevel":1,"rangeDef":50,"magicDef":50},"974":{"name":"Dagannoth","hitpoints":120,"combatLevel":92,"slayerLevel":1,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":71,"rangeLevel":1,"magicLevel":1,"rangeDef":50,"magicDef":50},"975":{"name":"Dagannoth","hitpoints":120,"combatLevel":92,"slayerLevel":1,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":71,"rangeLevel":1,"magicLevel":1,"rangeDef":50,"magicDef":50},"976":{"name":"Dagannoth","hitpoints":160,"combatLevel":100},"977":{"name":"Dagannoth","hitpoints":160,"combatLevel":100},"978":{"name":"Dagannoth","hitpoints":160,"combatLevel":100},"979":{"name":"Dagannoth","hitpoints":160,"combatLevel":100},"980":{"name":"Dagannoth mother","hitpoints":120,"combatLevel":100,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"981":{"name":"Dagannoth mother","hitpoints":120,"combatLevel":100,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"982":{"name":"Dagannoth mother","hitpoints":120,"combatLevel":100,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"983":{"name":"Dagannoth mother","hitpoints":120,"combatLevel":100,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"984":{"name":"Dagannoth mother","hitpoints":120,"combatLevel":100,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"985":{"name":"Dagannoth mother","hitpoints":120,"combatLevel":100,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"986":{"name":"Dagannoth mother","hitpoints":120,"combatLevel":100,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"987":{"name":"Dagannoth mother","hitpoints":120,"combatLevel":100,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"988":{"name":"Dagannoth mother","hitpoints":120,"combatLevel":100,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"990":{"name":"Sigmund","hitpoints":60,"combatLevel":50,"attackSpeed":4,"attackLevel":45,"strengthLevel":45,"defenceLevel":24,"rangeLevel":1,"magicLevel":1,"magic":8,"venomImmune":true},"991":{"name":"Sigmund","hitpoints":60,"combatLevel":50,"attackSpeed":4,"attackLevel":45,"strengthLevel":45,"defenceLevel":24,"rangeLevel":1,"magicLevel":1,"magic":8,"venomImmune":true},"992":{"name":"Sigmund","hitpoints":60,"combatLevel":50,"attackSpeed":4,"attackLevel":45,"strengthLevel":45,"defenceLevel":24,"rangeLevel":1,"magicLevel":1,"magic":8,"venomImmune":true},"993":{"name":"Sigmund","hitpoints":60,"combatLevel":50,"attackSpeed":4,"attackLevel":45,"strengthLevel":45,"defenceLevel":24,"rangeLevel":1,"magicLevel":1,"magic":8,"venomImmune":true},"994":{"name":"Sigmund","hitpoints":60,"combatLevel":50,"attackSpeed":4,"attackLevel":45,"strengthLevel":45,"defenceLevel":24,"rangeLevel":1,"magicLevel":1,"magic":8,"venomImmune":true},"1024":{"name":"Zygomite","hitpoints":75,"combatLevel":86,"slayerLevel":57,"attackSpeed":4,"attackLevel":75,"strengthLevel":75,"defenceLevel":75,"rangeLevel":75,"magicLevel":75,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":20,"magicDef":20,"bonusAttack":30},"1037":{"name":"Snake","hitpoints":25,"combatLevel":35,"attackSpeed":3,"attackLevel":25,"strengthLevel":50,"defenceLevel":25,"rangeLevel":1,"magicLevel":1},"1039":{"name":"Albino bat","hitpoints":33,"combatLevel":52,"slayerLevel":1,"attackSpeed":4,"attackLevel":57,"strengthLevel":57,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"1041":{"name":"Giant mosquito","hitpoints":3,"combatLevel":13,"attackSpeed":12,"attackLevel":5,"strengthLevel":1,"defenceLevel":45,"rangeLevel":1,"magicLevel":1,"stabDef":2,"slashDef":2,"crushDef":5,"magicDef":2},"1042":{"name":"Jungle horror","hitpoints":45,"combatLevel":70,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":55,"rangeLevel":1,"magicLevel":1},"1043":{"name":"Jungle horror","hitpoints":45,"combatLevel":70,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":55,"rangeLevel":1,"magicLevel":1},"1044":{"name":"Jungle horror","hitpoints":45,"combatLevel":70,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":55,"rangeLevel":1,"magicLevel":1},"1045":{"name":"Jungle horror","hitpoints":45,"combatLevel":70,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":55,"rangeLevel":1,"magicLevel":1},"1046":{"name":"Jungle horror","hitpoints":45,"combatLevel":70,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":55,"rangeLevel":1,"magicLevel":1},"1047":{"name":"Cave horror","hitpoints":55,"combatLevel":80,"slayerLevel":58,"attackLevel":80,"strengthLevel":77,"defenceLevel":62,"rangeLevel":1,"magicLevel":80},"1048":{"name":"Cave horror","hitpoints":55,"combatLevel":80,"slayerLevel":58,"attackLevel":80,"strengthLevel":77,"defenceLevel":62,"rangeLevel":1,"magicLevel":80},"1049":{"name":"Cave horror","hitpoints":55,"combatLevel":80,"slayerLevel":58,"attackLevel":80,"strengthLevel":77,"defenceLevel":62,"rangeLevel":1,"magicLevel":80},"1050":{"name":"Cave horror","hitpoints":55,"combatLevel":80,"slayerLevel":58,"attackLevel":80,"strengthLevel":77,"defenceLevel":62,"rangeLevel":1,"magicLevel":80},"1051":{"name":"Cave horror","hitpoints":55,"combatLevel":80,"slayerLevel":58,"attackLevel":80,"strengthLevel":77,"defenceLevel":62,"rangeLevel":1,"magicLevel":80},"1060":{"name":"Angry bear","combatLevel":40},"1061":{"name":"Angry unicorn","hitpoints":50,"combatLevel":45},"1062":{"name":"Angry giant rat","hitpoints":50,"combatLevel":45},"1063":{"name":"Angry giant rat","hitpoints":50,"combatLevel":45},"1064":{"name":"Angry giant rat","hitpoints":50,"combatLevel":45},"1065":{"name":"Angry goblin","hitpoints":50,"combatLevel":45},"1066":{"name":"Fear reaper","hitpoints":25,"combatLevel":42,"attackSpeed":4,"attackLevel":39,"strengthLevel":41,"defenceLevel":40,"rangeLevel":1,"magicLevel":1},"1067":{"name":"Confusion beast","hitpoints":28,"combatLevel":43,"attackSpeed":4,"attackLevel":42,"strengthLevel":41,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"poisonImmune":true,"venomImmune":true},"1068":{"name":"Confusion beast","hitpoints":28,"combatLevel":43,"attackSpeed":4,"attackLevel":42,"strengthLevel":41,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"poisonImmune":true,"venomImmune":true},"1069":{"name":"Confusion beast","hitpoints":28,"combatLevel":43,"attackSpeed":4,"attackLevel":42,"strengthLevel":41,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"poisonImmune":true,"venomImmune":true},"1070":{"name":"Confusion beast","hitpoints":28,"combatLevel":43,"attackSpeed":4,"attackLevel":42,"strengthLevel":41,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"poisonImmune":true,"venomImmune":true},"1071":{"name":"Confusion beast","hitpoints":28,"combatLevel":43,"attackSpeed":4,"attackLevel":42,"strengthLevel":41,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"poisonImmune":true,"venomImmune":true},"1072":{"name":"Hopeless creature","hitpoints":25,"combatLevel":40,"attackSpeed":4,"attackLevel":38,"strengthLevel":36,"defenceLevel":39,"rangeLevel":1,"magicLevel":1},"1073":{"name":"Hopeless creature","hitpoints":25,"combatLevel":40,"attackSpeed":4,"attackLevel":38,"strengthLevel":36,"defenceLevel":39,"rangeLevel":1,"magicLevel":1},"1074":{"name":"Hopeless creature","hitpoints":25,"combatLevel":40,"attackSpeed":4,"attackLevel":38,"strengthLevel":36,"defenceLevel":39,"rangeLevel":1,"magicLevel":1},"1075":{"name":"Tolna","hitpoints":37,"combatLevel":46,"attackLevel":42,"strengthLevel":41,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"rangeDef":50,"magicDef":50},"1076":{"name":"Tolna","hitpoints":37,"combatLevel":46,"attackSpeed":5,"attackLevel":42,"strengthLevel":41,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"rangeDef":50,"magicDef":50},"1077":{"name":"Tolna","hitpoints":37,"combatLevel":46,"attackLevel":42,"strengthLevel":41,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"rangeDef":50,"magicDef":50},"1097":{"name":"Sea Snake Young","hitpoints":85,"combatLevel":90,"slayerLevel":40,"attackSpeed":4,"attackLevel":90,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1},"1098":{"name":"Sea Snake Hatchling","hitpoints":50,"combatLevel":62,"slayerLevel":40,"attackSpeed":4,"attackLevel":60,"strengthLevel":55,"defenceLevel":50,"magicLevel":1},"1101":{"name":"Giant Sea Snake","hitpoints":100,"combatLevel":149,"attackSpeed":4,"attackLevel":170,"strengthLevel":90,"defenceLevel":160,"rangeLevel":130,"magicLevel":1},"1118":{"name":"Man","hitpoints":7,"combatLevel":4,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"1119":{"name":"Woman","hitpoints":10,"combatLevel":3,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"1126":{"name":"Barrelchest (hard)","hitpoints":255,"combatLevel":380,"attackSpeed":5,"attackLevel":306,"strengthLevel":261,"defenceLevel":140,"rangeLevel":1,"magicLevel":162,"bonusAttack":80,"bonusStrength":80},"1127":{"name":"Giant scarab (hard)","hitpoints":255,"combatLevel":316,"slayerLevel":1,"attackSpeed":4,"attackLevel":305,"strengthLevel":342,"defenceLevel":169,"rangeLevel":342,"magicLevel":1,"stabDef":70,"slashDef":99,"crushDef":99,"rangeDef":149,"magicDef":159},"1128":{"name":"Dessous (hard)","hitpoints":255,"combatLevel":217,"slayerLevel":1,"attackSpeed":3,"attackLevel":198,"strengthLevel":198,"defenceLevel":99,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":150,"crushDef":150,"bonusAttack":50,"bonusStrength":50},"1129":{"name":"Kamil (hard)","hitpoints":255,"combatLevel":273,"slayerLevel":1,"attackSpeed":4,"attackLevel":380,"strengthLevel":160,"defenceLevel":135,"rangeLevel":1,"magicLevel":1,"stabDef":35,"slashDef":60,"crushDef":35,"bonusAttack":60,"bonusStrength":100},"1130":{"name":"Woman","hitpoints":13,"combatLevel":4,"attackSpeed":4,"attackLevel":2,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"stabDef":1,"slashDef":1,"crushDef":1},"1131":{"name":"Woman","hitpoints":10,"combatLevel":3,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"1134":{"name":"Damis (hard)","hitpoints":198,"combatLevel":200,"attackSpeed":4,"attackLevel":198,"strengthLevel":198,"defenceLevel":90,"rangeLevel":1,"magicLevel":1,"stabDef":60,"slashDef":60,"crushDef":60,"rangeDef":60,"magicDef":60,"bonusStrength":80},"1135":{"name":"Damis (hard)","hitpoints":255,"combatLevel":272,"attackSpeed":4,"attackLevel":320,"strengthLevel":200,"defenceLevel":160,"rangeLevel":1,"magicLevel":1,"stabDef":100,"slashDef":100,"crushDef":100,"rangeDef":120,"magicDef":80,"bonusStrength":100},"1139":{"name":"Woman","hitpoints":13,"combatLevel":4,"attackSpeed":4,"attackLevel":2,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"stabDef":1,"slashDef":1,"crushDef":1},"1140":{"name":"Woman","hitpoints":13,"combatLevel":12,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"1141":{"name":"Woman","hitpoints":10,"combatLevel":3,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"1142":{"name":"Woman","hitpoints":23,"combatLevel":14,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"1144":{"name":"Paladin","hitpoints":66,"combatLevel":62,"attackSpeed":5,"attackLevel":54,"strengthLevel":54,"defenceLevel":54,"rangeLevel":1,"magicLevel":1,"stabDef":87,"slashDef":84,"crushDef":76,"rangeDef":79,"bonusAttack":20,"bonusStrength":22},"1153":{"name":"Ogre","hitpoints":60,"combatLevel":63,"slayerLevel":1,"attackSpeed":6,"attackLevel":54,"strengthLevel":54,"defenceLevel":54,"rangeLevel":1,"magicLevel":1,"stabDef":19,"slashDef":23,"crushDef":24,"bonusAttack":8,"bonusStrength":6},"1163":{"name":"Tree spirit","hitpoints":85,"combatLevel":101,"slayerLevel":1,"attackSpeed":4,"attackLevel":90,"strengthLevel":95,"defenceLevel":80,"rangeLevel":1,"magicLevel":1},"1173":{"name":"Chicken","hitpoints":3,"combatLevel":1,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"1174":{"name":"Chicken","hitpoints":3,"combatLevel":1,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"1204":{"name":"Alomone","hitpoints":25,"combatLevel":13,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":6,"crushDef":8},"1206":{"name":"Clivet","hitpoints":25,"combatLevel":13,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":6,"crushDef":8},"1207":{"name":"Hazeel Cultist","hitpoints":25,"combatLevel":13,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":6,"crushDef":8},"1208":{"name":"Khazard Guard","hitpoints":25,"combatLevel":23,"attackSpeed":4,"attackLevel":20,"strengthLevel":18,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":35,"slashDef":29,"crushDef":21,"bonusAttack":10,"bonusStrength":14},"1210":{"name":"Khazard Guard","hitpoints":25,"combatLevel":23,"attackSpeed":4,"attackLevel":20,"strengthLevel":18,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":35,"slashDef":29,"crushDef":21,"bonusAttack":10,"bonusStrength":14},"1211":{"name":"Khazard Guard","hitpoints":25,"combatLevel":23,"attackSpeed":4,"attackLevel":20,"strengthLevel":18,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":35,"slashDef":29,"crushDef":21,"bonusAttack":10,"bonusStrength":14},"1213":{"name":"General Khazard","hitpoints":170,"combatLevel":112,"attackSpeed":4,"attackLevel":75,"strengthLevel":78,"defenceLevel":80,"rangeLevel":1,"magicLevel":1},"1224":{"name":"Bouncer","hitpoints":116,"combatLevel":137,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":120,"defenceLevel":120,"rangeLevel":1,"magicLevel":1},"1225":{"name":"Khazard Ogre","hitpoints":60,"combatLevel":63,"attackSpeed":6,"attackLevel":54,"strengthLevel":53,"defenceLevel":53,"rangeLevel":1,"magicLevel":1,"bonusAttack":22,"bonusStrength":20},"1226":{"name":"Khazard Scorpion","hitpoints":40,"combatLevel":44,"attackSpeed":4,"attackLevel":40,"strengthLevel":39,"defenceLevel":34,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":15,"crushDef":15,"rangeDef":5},"1227":{"name":"Arzinian Avatar of Strength","attackSpeed":4},"1228":{"name":"Arzinian Avatar of Strength","hitpoints":100,"combatLevel":125,"attackSpeed":4,"attackLevel":110,"strengthLevel":100,"defenceLevel":95,"stabDef":20,"slashDef":20,"crushDef":20,"rangeDef":80,"magicDef":15},"1229":{"name":"Arzinian Avatar of Strength","hitpoints":70,"combatLevel":75,"attackSpeed":4,"attackLevel":70,"strengthLevel":65,"defenceLevel":50,"stabDef":15,"slashDef":15,"crushDef":15,"rangeDef":40,"magicDef":10},"1230":{"name":"Arzinian Avatar of Ranging","attackSpeed":4},"1231":{"name":"Arzinian Avatar of Ranging","hitpoints":100,"combatLevel":125,"attackSpeed":4,"attackLevel":10,"strengthLevel":100,"defenceLevel":120,"rangeLevel":110,"stabDef":15,"slashDef":15,"crushDef":15,"rangeDef":20,"magicDef":80,"bonusRangeStrength":10},"1232":{"name":"Arzinian Avatar of Ranging","hitpoints":70,"combatLevel":75,"attackSpeed":4,"attackLevel":10,"strengthLevel":40,"defenceLevel":75,"rangeLevel":75,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":15,"magicDef":40,"bonusRangeStrength":5},"1233":{"name":"Arzinian Avatar of Magic","attackSpeed":4},"1234":{"name":"Arzinian Avatar of Magic","hitpoints":100,"combatLevel":125,"attackSpeed":4,"attackLevel":10,"strengthLevel":90,"defenceLevel":120,"magicLevel":120,"stabDef":80,"slashDef":80,"crushDef":80,"rangeDef":15,"magicDef":20},"1235":{"name":"Arzinian Avatar of Magic","hitpoints":70,"combatLevel":75,"attackSpeed":4,"attackLevel":10,"strengthLevel":50,"defenceLevel":75,"magicLevel":75,"stabDef":40,"slashDef":40,"crushDef":40,"rangeDef":10,"magicDef":15},"1261":{"name":"Ram","hitpoints":8,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"1262":{"name":"Ram","hitpoints":8,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"1263":{"name":"Ram","hitpoints":8,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"1264":{"name":"Ram","hitpoints":8,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"1265":{"name":"Ram","hitpoints":8,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"1267":{"name":"Vulture","hitpoints":10,"combatLevel":31,"slayerLevel":1,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"1268":{"name":"Vulture","hitpoints":10,"combatLevel":31,"slayerLevel":1,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"1273":{"name":"Experiment","hitpoints":40,"combatLevel":51,"attackSpeed":4,"attackLevel":40,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1},"1274":{"name":"Experiment","hitpoints":100,"combatLevel":25,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"1275":{"name":"Experiment","hitpoints":100,"combatLevel":25,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"1277":{"name":"Loar Shade","hitpoints":38,"combatLevel":40,"slayerLevel":1,"attackSpeed":4,"attackLevel":45,"strengthLevel":30,"defenceLevel":26,"undead":true},"1280":{"name":"Phrin Shade","hitpoints":56,"combatLevel":60,"slayerLevel":1,"attackSpeed":4,"attackLevel":64,"strengthLevel":47,"defenceLevel":42,"poisonImmune":true},"1282":{"name":"Riyl Shade","hitpoints":76,"combatLevel":80,"slayerLevel":1,"attackSpeed":4,"attackLevel":88,"strengthLevel":55,"defenceLevel":60},"1284":{"name":"Asyn Shade","hitpoints":90,"combatLevel":100,"slayerLevel":1,"attackSpeed":4,"attackLevel":102,"strengthLevel":84,"defenceLevel":70},"1286":{"name":"Fiyr Shade","hitpoints":110,"combatLevel":120,"slayerLevel":1,"attackSpeed":6,"attackLevel":120,"strengthLevel":100,"defenceLevel":85,"undead":true},"1293":{"name":"Afflicted","hitpoints":30,"combatLevel":37,"attackSpeed":4,"attackLevel":30,"strengthLevel":30,"defenceLevel":40,"rangeLevel":1,"magicLevel":1},"1294":{"name":"Afflicted","hitpoints":28,"combatLevel":34,"attackSpeed":4,"attackLevel":28,"strengthLevel":28,"defenceLevel":38,"rangeLevel":1,"magicLevel":1},"1297":{"name":"Afflicted","hitpoints":26,"combatLevel":32,"attackSpeed":4,"attackLevel":26,"strengthLevel":26,"defenceLevel":36,"rangeLevel":1,"magicLevel":1},"1298":{"name":"Afflicted","hitpoints":24,"combatLevel":30,"attackSpeed":4,"attackLevel":24,"strengthLevel":24,"defenceLevel":34,"rangeLevel":1,"magicLevel":1},"1338":{"name":"Seagull","hitpoints":6,"combatLevel":2,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"1339":{"name":"Seagull","hitpoints":10,"combatLevel":3,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"1354":{"name":"Dwarf gang member","hitpoints":40,"combatLevel":44,"slayerLevel":1,"attackSpeed":5,"attackLevel":40,"strengthLevel":40,"defenceLevel":35,"rangeLevel":1,"magicLevel":1,"stabDef":7,"slashDef":7,"rangeDef":7},"1355":{"name":"Dwarf gang member","hitpoints":25,"combatLevel":48,"slayerLevel":1,"attackSpeed":5,"attackLevel":80,"strengthLevel":30,"defenceLevel":25,"rangeLevel":1,"magicLevel":1,"stabDef":7,"slashDef":7,"rangeDef":7},"1356":{"name":"Dwarf gang member","hitpoints":25,"combatLevel":49,"slayerLevel":1,"attackSpeed":5,"attackLevel":30,"strengthLevel":60,"defenceLevel":57,"rangeLevel":1,"magicLevel":1,"stabDef":7,"slashDef":7,"rangeDef":7},"1362":{"name":"Slagilith","hitpoints":60,"combatLevel":92,"attackSpeed":4,"attackLevel":60,"strengthLevel":120,"defenceLevel":75,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":5,"rangeDef":50,"magicDef":5,"bonusAttack":10},"1364":{"name":"Slagilith","hitpoints":60,"combatLevel":92,"attackSpeed":4,"attackLevel":60,"strengthLevel":120,"defenceLevel":75,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":5,"rangeDef":50,"magicDef":5,"bonusAttack":10},"1365":{"name":"Fire elemental","hitpoints":30,"combatLevel":35,"attackSpeed":4,"attackLevel":35,"strengthLevel":35,"defenceLevel":20,"rangeLevel":20,"magicLevel":20},"1366":{"name":"Earth elemental","hitpoints":35,"combatLevel":35,"attackSpeed":6,"attackLevel":20,"strengthLevel":35,"defenceLevel":35,"rangeLevel":30,"magicLevel":10},"1367":{"name":"Earth elemental","hitpoints":35,"combatLevel":35,"attackSpeed":6,"attackLevel":20,"strengthLevel":35,"defenceLevel":35,"rangeLevel":30,"magicLevel":10,"poisonImmune":true,"venomImmune":true},"1369":{"name":"Air elemental","hitpoints":30,"combatLevel":34,"attackSpeed":4,"attackLevel":40,"strengthLevel":20,"defenceLevel":30,"rangeLevel":20,"magicLevel":40},"1370":{"name":"Water elemental","hitpoints":30,"combatLevel":34,"slayerLevel":1,"attackSpeed":4,"attackLevel":30,"strengthLevel":30,"defenceLevel":30,"rangeLevel":30,"magicLevel":30},"1377":{"name":"The Kendal","hitpoints":50,"combatLevel":70,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":60,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":20,"bonusAttack":5,"bonusStrength":10},"1378":{"name":"The Kendal","hitpoints":50,"combatLevel":70,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":60,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":20,"bonusAttack":5,"bonusStrength":10},"1379":{"name":"Camp dweller","hitpoints":30,"combatLevel":31,"attackSpeed":4,"attackLevel":25,"strengthLevel":30,"defenceLevel":25,"rangeLevel":1,"magicLevel":1},"1380":{"name":"Camp dweller","hitpoints":30,"combatLevel":31,"attackSpeed":4,"attackLevel":25,"strengthLevel":30,"defenceLevel":25,"rangeLevel":1,"magicLevel":1},"1381":{"name":"Camp dweller","hitpoints":30,"combatLevel":31,"attackSpeed":4,"attackLevel":25,"strengthLevel":30,"defenceLevel":25,"rangeLevel":1,"magicLevel":1},"1382":{"name":"Camp dweller","hitpoints":30,"combatLevel":31,"attackSpeed":4,"attackLevel":25,"strengthLevel":30,"defenceLevel":25,"rangeLevel":1,"magicLevel":1},"1383":{"name":"Camp dweller","hitpoints":25,"combatLevel":25,"attackSpeed":4,"attackLevel":20,"strengthLevel":25,"defenceLevel":20,"rangeLevel":1,"magicLevel":1},"1401":{"name":"Dwarf","hitpoints":16,"combatLevel":10,"slayerLevel":1,"attackSpeed":5},"1402":{"name":"Dwarf","hitpoints":16,"combatLevel":10,"slayerLevel":1,"attackSpeed":5},"1403":{"name":"Dwarf","hitpoints":16,"combatLevel":10,"slayerLevel":1,"attackSpeed":5},"1404":{"name":"Dwarf","hitpoints":16,"combatLevel":10,"slayerLevel":1,"attackSpeed":5},"1405":{"name":"Dwarf","hitpoints":16,"combatLevel":10,"slayerLevel":1,"attackSpeed":5,"attackLevel":8,"strengthLevel":8,"defenceLevel":6,"rangeLevel":1,"magicLevel":1,"stab":5,"magicDef":5,"bonusAttack":5,"bonusStrength":7},"1406":{"name":"Dwarf","hitpoints":16,"combatLevel":10,"slayerLevel":1,"attackSpeed":5},"1407":{"name":"Dwarf","hitpoints":16,"combatLevel":10,"slayerLevel":1,"attackSpeed":5},"1408":{"name":"Dwarf","hitpoints":16,"combatLevel":10,"slayerLevel":1,"attackSpeed":5},"1409":{"name":"Black Guard","hitpoints":30,"combatLevel":25,"slayerLevel":1,"attackSpeed":4,"attackLevel":20,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":3,"slashDef":4,"crushDef":4,"rangeDef":3,"magicDef":2,"bonusAttack":5,"bonusStrength":7},"1410":{"name":"Black Guard","hitpoints":30,"combatLevel":25,"slayerLevel":1,"attackSpeed":4,"attackLevel":20,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":3,"slashDef":4,"crushDef":4,"rangeDef":3,"magicDef":2,"bonusAttack":5,"bonusStrength":7},"1411":{"name":"Black Guard","hitpoints":30,"combatLevel":25,"slayerLevel":1,"attackSpeed":4,"attackLevel":20,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":3,"slashDef":4,"crushDef":4,"rangeDef":3,"magicDef":2,"bonusAttack":5,"bonusStrength":7},"1412":{"name":"Black Guard","hitpoints":30,"combatLevel":25,"slayerLevel":1,"attackSpeed":4,"attackLevel":20,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":3,"slashDef":4,"crushDef":4,"rangeDef":3,"magicDef":2,"bonusAttack":5,"bonusStrength":7},"1429":{"name":"Foreman","hitpoints":20,"combatLevel":23,"attackSpeed":4,"attackLevel":20,"strengthLevel":20,"defenceLevel":20,"slashDef":1,"crushDef":1},"1430":{"name":"Shipyard worker","hitpoints":10,"combatLevel":11,"attackSpeed":6,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"bonusAttack":6,"bonusStrength":6},"1432":{"name":"Black demon","hitpoints":157,"combatLevel":172,"slayerLevel":1,"attackSpeed":4,"attackLevel":145,"strengthLevel":152,"defenceLevel":148,"rangeLevel":1,"magicLevel":1,"demon":true},"1443":{"name":"Jungle Demon","hitpoints":170,"combatLevel":195,"attackSpeed":6,"attackLevel":170,"strengthLevel":170,"defenceLevel":170,"rangeLevel":1,"magicLevel":170,"slashDef":50,"magicDef":50,"bonusAttack":50,"bonusStrength":50,"demon":true},"1447":{"name":"Pirate","hitpoints":20,"combatLevel":23,"attackSpeed":4,"attackLevel":20,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"slashDef":1,"bonusAttack":9,"bonusStrength":10},"1448":{"name":"Thief","hitpoints":17,"combatLevel":16,"attackSpeed":4,"attackLevel":14,"strengthLevel":13,"defenceLevel":12,"rangeLevel":1,"magicLevel":1},"1461":{"name":"Mugger","hitpoints":8,"combatLevel":6,"attackSpeed":4,"attackLevel":5,"strengthLevel":5,"defenceLevel":5,"rangeLevel":1,"magicLevel":1},"1475":{"name":"Chompy bird","hitpoints":10,"combatLevel":6,"slayerLevel":1,"defenceLevel":5000},"1494":{"name":"Kebbit","hitpoints":50,"combatLevel":13,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"1537":{"name":"Skeleton hero","hitpoints":124,"combatLevel":149,"slayerLevel":1,"attackSpeed":4,"attackLevel":145,"strengthLevel":134,"defenceLevel":110,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15,"undead":true},"1538":{"name":"Skeleton brute","hitpoints":124,"combatLevel":132,"slayerLevel":1,"attackSpeed":4,"attackLevel":115,"strengthLevel":114,"defenceLevel":110,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15,"undead":true},"1539":{"name":"Skeleton warlord","hitpoints":124,"combatLevel":132,"slayerLevel":1,"attackSpeed":4,"attackLevel":115,"strengthLevel":114,"defenceLevel":110,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"1540":{"name":"Skeleton heavy","hitpoints":124,"combatLevel":132,"slayerLevel":1,"attackSpeed":4,"attackLevel":115,"strengthLevel":114,"defenceLevel":110,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"1541":{"name":"Skeleton thug","hitpoints":124,"combatLevel":132,"slayerLevel":1,"attackSpeed":4,"attackLevel":115,"strengthLevel":114,"defenceLevel":110,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15,"undead":true},"1543":{"name":"Gargoyle","hitpoints":105,"combatLevel":111,"slayerLevel":75,"attackSpeed":4,"attackLevel":75,"strengthLevel":105,"defenceLevel":107,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":20,"magicDef":20},"1545":{"name":"Black knight","hitpoints":42,"combatLevel":33,"attackSpeed":5,"attackLevel":25,"strengthLevel":25,"defenceLevel":25,"rangeLevel":1,"magicLevel":1,"stabDef":73,"slashDef":76,"crushDef":70,"rangeDef":72,"bonusAttack":18,"bonusStrength":16},"1546":{"name":"Guard","hitpoints":22,"combatLevel":21,"attackSpeed":4,"attackLevel":19,"strengthLevel":18,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"stab":4,"stabDef":18,"slashDef":25,"crushDef":19,"rangeDef":20,"bonusAttack":4,"bonusStrength":5},"1547":{"name":"Guard","hitpoints":22,"combatLevel":21,"attackSpeed":4,"attackLevel":19,"strengthLevel":18,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"stab":4,"stabDef":18,"slashDef":25,"crushDef":19,"rangeDef":20,"bonusAttack":4,"bonusStrength":5},"1548":{"name":"Guard","hitpoints":22,"combatLevel":21,"attackSpeed":4,"attackLevel":19,"strengthLevel":18,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"stab":4,"stabDef":18,"slashDef":25,"crushDef":19,"rangeDef":20,"bonusAttack":4,"bonusStrength":5},"1549":{"name":"Guard","hitpoints":22,"combatLevel":21,"attackSpeed":4,"attackLevel":19,"strengthLevel":18,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"stab":4,"stabDef":18,"slashDef":25,"crushDef":19,"rangeDef":20,"bonusAttack":4,"bonusStrength":5},"1550":{"name":"Guard","hitpoints":22,"combatLevel":21,"attackSpeed":4,"attackLevel":19,"strengthLevel":18,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"stab":4,"stabDef":18,"slashDef":25,"crushDef":19,"rangeDef":20,"bonusAttack":4,"bonusStrength":5},"1556":{"name":"Fire wizard","hitpoints":25,"combatLevel":13,"attackSpeed":4,"attackLevel":5,"strengthLevel":5,"defenceLevel":10,"magicLevel":10,"magicDef":15},"1557":{"name":"Water wizard","hitpoints":25,"combatLevel":13,"attackSpeed":4,"attackLevel":5,"strengthLevel":5,"defenceLevel":10,"magicLevel":10,"magicDef":15},"1558":{"name":"Earth wizard","hitpoints":25,"combatLevel":13,"attackSpeed":4,"attackLevel":5,"strengthLevel":5,"defenceLevel":10,"magicLevel":10,"magicDef":15},"1559":{"name":"Air wizard","hitpoints":25,"combatLevel":13,"attackSpeed":4,"attackLevel":5,"strengthLevel":5,"defenceLevel":10,"magicLevel":10,"magicDef":15},"1603":{"name":"Kolodion","hitpoints":3,"attackSpeed":7},"1604":{"name":"Kolodion","hitpoints":3,"attackSpeed":7},"1605":{"name":"Kolodion","hitpoints":3,"attackSpeed":7},"1606":{"name":"Kolodion","hitpoints":65,"attackSpeed":7},"1607":{"name":"Kolodion","hitpoints":65,"attackSpeed":7},"1608":{"name":"Kolodion","hitpoints":78,"attackSpeed":7},"1609":{"name":"Kolodion","hitpoints":107,"combatLevel":112,"slayerLevel":1,"attackSpeed":4,"attackLevel":85,"strengthLevel":98,"defenceLevel":105,"rangeLevel":1,"magicLevel":80},"1610":{"name":"Battle mage","hitpoints":120,"combatLevel":54,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":50},"1611":{"name":"Battle mage","hitpoints":120,"combatLevel":54,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":50},"1612":{"name":"Battle mage","hitpoints":120,"combatLevel":54,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":50},"1667":{"name":"Penance Fighter","hitpoints":28,"combatLevel":30,"attackSpeed":4},"1668":{"name":"Penance Ranger","hitpoints":20,"combatLevel":21,"attackSpeed":4},"1672":{"name":"Ahrim the Blighted","hitpoints":100,"combatLevel":98,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":100,"rangeLevel":1,"magicLevel":100,"stab":12,"crush":65,"magic":73,"stabDef":103,"slashDef":85,"crushDef":117,"magicDef":73,"bonusStrength":68},"1673":{"name":"Dharok the Wretched","hitpoints":100,"combatLevel":115,"slayerLevel":1,"attackSpeed":7,"attackLevel":100,"strengthLevel":100,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"slash":103,"crush":95,"stabDef":252,"slashDef":250,"crushDef":244,"rangeDef":249,"bonusStrength":105},"1674":{"name":"Guthan the Infested","hitpoints":100,"combatLevel":115,"slayerLevel":1,"attackSpeed":5,"attackLevel":100,"strengthLevel":100,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"stab":75,"slash":75,"crush":75,"stabDef":259,"slashDef":257,"crushDef":241,"rangeDef":250,"bonusStrength":75},"1675":{"name":"Karil the Tainted","hitpoints":100,"combatLevel":98,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":100,"rangeLevel":100,"magicLevel":1,"range":134,"stabDef":79,"slashDef":71,"crushDef":90,"rangeDef":100,"magicDef":106,"bonusRangeStrength":55},"1676":{"name":"Torag the Corrupted","hitpoints":100,"combatLevel":115,"slayerLevel":1,"attackSpeed":5,"attackLevel":100,"strengthLevel":100,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"stab":68,"crush":82,"stabDef":221,"slashDef":235,"crushDef":222,"rangeDef":221,"bonusStrength":72},"1677":{"name":"Verac the Defiled","hitpoints":100,"combatLevel":115,"slayerLevel":1,"attackSpeed":5,"attackLevel":100,"strengthLevel":100,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"stab":68,"crush":82,"stabDef":227,"slashDef":230,"crushDef":221,"rangeDef":225,"bonusStrength":72},"1678":{"name":"Bloodworm","hitpoints":45,"combatLevel":52,"attackSpeed":4,"attackLevel":80,"strengthLevel":20,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"1679":{"name":"Crypt rat","hitpoints":35,"combatLevel":43,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1},"1680":{"name":"Giant crypt rat","hitpoints":70,"combatLevel":76,"slayerLevel":1,"attackSpeed":4,"attackLevel":80,"strengthLevel":50,"defenceLevel":65,"rangeLevel":1,"magicLevel":1},"1681":{"name":"Giant crypt rat","hitpoints":70,"combatLevel":76,"slayerLevel":1,"attackSpeed":4,"attackLevel":80,"strengthLevel":50,"defenceLevel":65,"rangeLevel":1,"magicLevel":1},"1682":{"name":"Giant crypt rat","hitpoints":70,"combatLevel":76,"slayerLevel":1,"attackSpeed":4,"attackLevel":80,"strengthLevel":50,"defenceLevel":65,"rangeLevel":1,"magicLevel":1},"1683":{"name":"Crypt spider","hitpoints":45,"combatLevel":56,"slayerLevel":1,"attackSpeed":4,"attackLevel":45,"strengthLevel":47,"defenceLevel":45,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"crushDef":10,"rangeDef":20,"magicDef":17},"1684":{"name":"Giant crypt spider","hitpoints":80,"combatLevel":79,"slayerLevel":1,"attackSpeed":4,"attackLevel":65,"strengthLevel":67,"defenceLevel":65,"rangeLevel":1,"magicLevel":1},"1685":{"name":"Skeleton","hitpoints":51,"combatLevel":77,"slayerLevel":1,"attackSpeed":4,"attackLevel":72,"strengthLevel":72,"defenceLevel":72,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"rangeDef":5,"undead":true},"1686":{"name":"Skeleton","hitpoints":51,"combatLevel":77,"slayerLevel":1,"attackSpeed":4,"attackLevel":72,"strengthLevel":72,"defenceLevel":72,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"rangeDef":5,"undead":true},"1687":{"name":"Skeleton","hitpoints":51,"combatLevel":77,"slayerLevel":1,"attackSpeed":4,"attackLevel":72,"strengthLevel":72,"defenceLevel":72,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"rangeDef":5,"undead":true},"1688":{"name":"Skeleton","hitpoints":51,"combatLevel":77,"slayerLevel":1,"attackSpeed":4,"attackLevel":72,"strengthLevel":72,"defenceLevel":72,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"rangeDef":5,"undead":true},"1689":{"name":"Splatter","hitpoints":13,"combatLevel":22},"1690":{"name":"Splatter","hitpoints":23,"combatLevel":33},"1691":{"name":"Splatter","hitpoints":33,"combatLevel":44},"1692":{"name":"Splatter","hitpoints":43,"combatLevel":54},"1693":{"name":"Splatter","hitpoints":53,"combatLevel":65},"1694":{"name":"Shifter","hitpoints":23,"combatLevel":38,"attackSpeed":4},"1695":{"name":"Shifter","hitpoints":23,"combatLevel":38,"attackSpeed":4},"1696":{"name":"Shifter","hitpoints":38,"combatLevel":57,"attackSpeed":4},"1697":{"name":"Shifter","hitpoints":38,"combatLevel":57,"attackSpeed":4},"1698":{"name":"Shifter","hitpoints":53,"combatLevel":76,"attackSpeed":4},"1699":{"name":"Shifter","hitpoints":53,"combatLevel":76,"attackSpeed":4},"1700":{"name":"Shifter","hitpoints":68,"combatLevel":90,"attackSpeed":4},"1701":{"name":"Shifter","hitpoints":68,"combatLevel":90,"attackSpeed":4},"1702":{"name":"Shifter","hitpoints":83,"combatLevel":104,"attackSpeed":4},"1703":{"name":"Shifter","hitpoints":83,"combatLevel":104,"attackSpeed":4},"1704":{"name":"Ravager","hitpoints":23,"combatLevel":36,"attackSpeed":4},"1705":{"name":"Ravager","hitpoints":38,"combatLevel":53,"attackSpeed":4},"1706":{"name":"Ravager","hitpoints":53,"combatLevel":71,"attackSpeed":4},"1707":{"name":"Ravager","hitpoints":68,"combatLevel":89,"attackSpeed":4},"1708":{"name":"Ravager","hitpoints":83,"combatLevel":106,"attackSpeed":4},"1709":{"name":"Spinner","hitpoints":33,"combatLevel":36},"1710":{"name":"Spinner","hitpoints":53,"combatLevel":55},"1711":{"name":"Spinner","hitpoints":73,"combatLevel":74},"1712":{"name":"Spinner","hitpoints":101,"combatLevel":92},"1713":{"name":"Spinner","hitpoints":93,"combatLevel":88},"1714":{"name":"Torcher","hitpoints":18,"combatLevel":33,"attackSpeed":4},"1715":{"name":"Torcher","hitpoints":18,"combatLevel":33,"attackSpeed":4},"1716":{"name":"Torcher","hitpoints":30,"combatLevel":49,"attackSpeed":4},"1717":{"name":"Torcher","hitpoints":30,"combatLevel":49,"attackSpeed":4},"1718":{"name":"Torcher","hitpoints":45,"combatLevel":66,"attackSpeed":4},"1719":{"name":"Torcher","hitpoints":45,"combatLevel":66,"attackSpeed":4},"1720":{"name":"Torcher","hitpoints":57,"combatLevel":79,"attackSpeed":4},"1721":{"name":"Torcher","hitpoints":57,"combatLevel":79,"attackSpeed":4},"1722":{"name":"Torcher","hitpoints":71,"combatLevel":91,"attackSpeed":4},"1723":{"name":"Torcher","hitpoints":71,"combatLevel":92,"attackSpeed":4},"1724":{"name":"Defiler","hitpoints":27,"combatLevel":33,"attackSpeed":4},"1725":{"name":"Defiler","hitpoints":27,"combatLevel":33,"attackSpeed":4},"1726":{"name":"Defiler","hitpoints":45,"combatLevel":50,"attackSpeed":4},"1727":{"name":"Defiler","hitpoints":45,"combatLevel":50,"attackSpeed":4},"1728":{"name":"Defiler","hitpoints":62,"combatLevel":66,"attackSpeed":4},"1729":{"name":"Defiler","hitpoints":62,"combatLevel":67,"attackSpeed":4},"1730":{"name":"Defiler","hitpoints":78,"combatLevel":80,"attackSpeed":4},"1731":{"name":"Defiler","hitpoints":78,"combatLevel":80,"attackSpeed":4},"1732":{"name":"Defiler","hitpoints":97,"combatLevel":97,"attackSpeed":4},"1733":{"name":"Defiler","hitpoints":97,"combatLevel":97,"attackSpeed":4},"1734":{"name":"Brawler","hitpoints":53,"combatLevel":51,"attackSpeed":4},"1735":{"name":"Brawler","hitpoints":83,"combatLevel":76,"attackSpeed":4},"1736":{"name":"Brawler","hitpoints":97,"combatLevel":101,"attackSpeed":4},"1737":{"name":"Brawler","hitpoints":113,"combatLevel":129,"attackSpeed":4},"1738":{"name":"Brawler","hitpoints":143,"combatLevel":158,"attackSpeed":4},"1777":{"name":"Double agent","hitpoints":80,"combatLevel":65,"attackSpeed":4,"attackLevel":80,"strengthLevel":43,"defenceLevel":24,"rangeLevel":1,"magicLevel":24,"stabDef":3,"slashDef":3,"crushDef":3},"1778":{"name":"Double agent","hitpoints":120,"combatLevel":108,"attackSpeed":4,"attackLevel":100,"strengthLevel":80,"defenceLevel":80,"rangeLevel":1,"magicLevel":80,"stabDef":20,"slashDef":20,"crushDef":20,"bonusAttack":40,"bonusStrength":40},"1782":{"name":"Scarab swarm","hitpoints":25,"combatLevel":98,"slayerLevel":1,"attackSpeed":1,"attackLevel":255,"strengthLevel":5,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"stabDef":90,"slashDef":90,"crushDef":5,"rangeDef":90,"magicDef":90},"1792":{"name":"Goat","hitpoints":21,"combatLevel":23,"attackSpeed":4,"attackLevel":20,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"rangeDef":10,"bonusAttack":29,"bonusStrength":10},"1793":{"name":"Goat","hitpoints":21,"combatLevel":23,"attackSpeed":4,"attackLevel":20,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"rangeDef":10,"bonusAttack":29,"bonusStrength":10},"1794":{"name":"Billy Goat","hitpoints":28,"combatLevel":33,"attackSpeed":4,"attackLevel":31,"strengthLevel":29,"defenceLevel":29,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"rangeDef":10,"bonusAttack":29,"bonusStrength":10},"1795":{"name":"Goat","hitpoints":21,"combatLevel":23,"attackSpeed":4,"attackLevel":20,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"rangeDef":10,"bonusAttack":29,"bonusStrength":10},"1796":{"name":"Goat","hitpoints":21,"combatLevel":23,"attackSpeed":4,"attackLevel":20,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"rangeDef":10,"bonusAttack":29,"bonusStrength":10},"1797":{"name":"Billy Goat","hitpoints":28,"combatLevel":33,"attackSpeed":4,"attackLevel":31,"strengthLevel":29,"defenceLevel":29,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"rangeDef":10,"bonusAttack":29,"bonusStrength":10},"1798":{"name":"White Knight","hitpoints":52,"combatLevel":36,"attackSpeed":7,"attackLevel":27,"strengthLevel":29,"defenceLevel":21,"rangeLevel":1,"magicLevel":1,"stabDef":83,"slashDef":76,"crushDef":70,"rangeDef":74,"bonusAttack":30,"bonusStrength":31},"1799":{"name":"White Knight","hitpoints":52,"combatLevel":38,"attackSpeed":7,"attackLevel":30,"strengthLevel":29,"defenceLevel":25,"rangeLevel":1,"magicLevel":1,"stabDef":83,"slashDef":76,"crushDef":70,"rangeDef":74,"bonusAttack":30,"bonusStrength":31},"1800":{"name":"White Knight","hitpoints":52,"combatLevel":39,"attackSpeed":7,"attackLevel":32,"strengthLevel":29,"defenceLevel":27,"rangeLevel":1,"magicLevel":1,"stabDef":83,"slashDef":76,"crushDef":70,"rangeDef":74,"bonusAttack":30,"bonusStrength":31},"1829":{"name":"White Knight","hitpoints":55,"combatLevel":42,"attackSpeed":7,"attackLevel":32,"strengthLevel":35,"defenceLevel":27,"rangeLevel":1,"magicLevel":1,"stabDef":83,"slashDef":76,"crushDef":70,"rangeDef":74,"bonusAttack":30,"bonusStrength":31},"1834":{"name":"Gorak","hitpoints":112,"combatLevel":145,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":131,"rangeLevel":1,"magicLevel":1},"1838":{"name":"Duck","hitpoints":3,"combatLevel":1,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"1839":{"name":"Duck","hitpoints":3,"combatLevel":1,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"1845":{"name":"Stag","hitpoints":19,"combatLevel":15,"attackSpeed":4,"attackLevel":11,"strengthLevel":13,"defenceLevel":13,"rangeLevel":1,"magicLevel":1},"1852":{"name":"Rabbit","hitpoints":5,"combatLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"1853":{"name":"Rabbit","hitpoints":5,"combatLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"1861":{"name":"Tree spirit","hitpoints":50,"combatLevel":14,"attackSpeed":4,"attackLevel":17,"strengthLevel":17,"defenceLevel":17,"rangeLevel":1,"magicLevel":1},"1862":{"name":"Tree spirit","hitpoints":50,"combatLevel":29,"attackSpeed":4,"attackLevel":32,"strengthLevel":32,"defenceLevel":32,"rangeLevel":1,"magicLevel":1},"1863":{"name":"Tree spirit","hitpoints":60,"combatLevel":49,"attackSpeed":4,"attackLevel":48,"strengthLevel":48,"defenceLevel":48,"rangeLevel":1,"magicLevel":1},"1864":{"name":"Tree spirit","hitpoints":86,"combatLevel":79,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"rangeLevel":1,"magicLevel":1},"1865":{"name":"Tree spirit","hitpoints":120,"combatLevel":120,"attackSpeed":4,"attackLevel":100,"strengthLevel":100,"defenceLevel":100,"rangeLevel":1,"magicLevel":1},"1866":{"name":"Tree spirit","hitpoints":170,"combatLevel":159,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":130,"rangeLevel":1,"magicLevel":1},"1870":{"name":"Evil Chicken","hitpoints":120,"combatLevel":159,"attackSpeed":4,"defenceLevel":126,"magicLevel":200},"1871":{"name":"Baby dragon","hitpoints":80,"combatLevel":83,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":50,"crushDef":50,"rangeDef":30,"magicDef":40,"dragon":true},"1872":{"name":"Baby dragon","hitpoints":80,"combatLevel":83,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":50,"crushDef":50,"rangeDef":30,"magicDef":40,"dragon":true},"1874":{"name":"Ice troll runt","hitpoints":60,"combatLevel":74,"slayerLevel":1,"attackSpeed":4,"attackLevel":60,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"1875":{"name":"Ice troll male","hitpoints":80,"combatLevel":82,"slayerLevel":1,"attackSpeed":4,"attackLevel":80,"strengthLevel":80,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"1876":{"name":"Ice troll female","hitpoints":80,"combatLevel":82,"slayerLevel":1,"attackSpeed":4,"attackLevel":80,"strengthLevel":80,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"1877":{"name":"Ice troll grunt","hitpoints":80,"combatLevel":102,"slayerLevel":1,"attackSpeed":4,"attackLevel":100,"strengthLevel":100,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"2001":{"name":"Duckling","hitpoints":3,"combatLevel":1,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"2005":{"name":"Lesser demon","hitpoints":81,"combatLevel":82,"slayerLevel":1,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":71,"rangeLevel":1,"magicLevel":1,"demon":true},"2006":{"name":"Lesser demon","hitpoints":81,"combatLevel":82,"slayerLevel":1,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":71,"rangeLevel":1,"magicLevel":1,"demon":true},"2007":{"name":"Lesser demon","hitpoints":81,"combatLevel":82,"slayerLevel":1,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":71,"rangeLevel":1,"magicLevel":1,"demon":true},"2008":{"name":"Lesser demon","hitpoints":81,"combatLevel":82,"slayerLevel":1,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":71,"rangeLevel":1,"magicLevel":1,"demon":true},"2018":{"name":"Lesser demon","hitpoints":81,"combatLevel":82,"slayerLevel":1,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":71,"rangeLevel":1,"magicLevel":1,"demon":true},"2025":{"name":"Greater demon","hitpoints":89,"combatLevel":92,"slayerLevel":1,"attackSpeed":4,"attackLevel":76,"strengthLevel":78,"defenceLevel":81,"rangeLevel":1,"magicLevel":1,"demon":true},"2026":{"name":"Greater demon","hitpoints":89,"combatLevel":92,"slayerLevel":1,"attackSpeed":4,"attackLevel":76,"strengthLevel":78,"defenceLevel":81,"rangeLevel":1,"magicLevel":1,"demon":true},"2027":{"name":"Greater demon","hitpoints":89,"combatLevel":92,"slayerLevel":1,"attackSpeed":4,"attackLevel":76,"strengthLevel":78,"defenceLevel":81,"rangeLevel":1,"magicLevel":1,"demon":true},"2028":{"name":"Greater demon","hitpoints":89,"combatLevel":92,"slayerLevel":1,"attackSpeed":4,"attackLevel":76,"strengthLevel":78,"defenceLevel":81,"rangeLevel":1,"magicLevel":1,"demon":true},"2029":{"name":"Greater demon","hitpoints":89,"combatLevel":92,"slayerLevel":1,"attackSpeed":4,"attackLevel":76,"strengthLevel":78,"defenceLevel":81,"rangeLevel":1,"magicLevel":1,"demon":true},"2030":{"name":"Greater demon","hitpoints":89,"combatLevel":92,"slayerLevel":1,"attackSpeed":4,"attackLevel":76,"strengthLevel":78,"defenceLevel":81,"rangeLevel":1,"magicLevel":1,"demon":true},"2031":{"name":"Greater demon","hitpoints":89,"combatLevel":92,"slayerLevel":1,"attackSpeed":4,"attackLevel":76,"strengthLevel":78,"defenceLevel":81,"rangeLevel":1,"magicLevel":1,"demon":true},"2032":{"name":"Greater demon","hitpoints":89,"combatLevel":92,"slayerLevel":1,"attackSpeed":4,"attackLevel":76,"strengthLevel":78,"defenceLevel":81,"rangeLevel":1,"magicLevel":1,"demon":true},"2042":{"name":"Zulrah","hitpoints":500,"combatLevel":725,"slayerLevel":1,"attackSpeed":3,"attackLevel":1,"strengthLevel":1,"defenceLevel":300,"rangeLevel":300,"magicLevel":300,"range":50,"magic":50,"rangeDef":50,"bonusRangeStrength":20,"bonusMagicDamage":20},"2043":{"name":"Zulrah","hitpoints":500,"combatLevel":725,"slayerLevel":1,"attackSpeed":3,"attackLevel":1,"strengthLevel":1,"defenceLevel":300,"rangeLevel":300,"magicLevel":300,"range":50,"magic":50,"rangeDef":300,"bonusRangeStrength":20,"bonusMagicDamage":20},"2044":{"name":"Zulrah","hitpoints":500,"combatLevel":725,"slayerLevel":1,"attackSpeed":3,"attackLevel":1,"strengthLevel":1,"defenceLevel":300,"rangeLevel":300,"magicLevel":300,"range":50,"magic":50,"magicDef":300,"bonusRangeStrength":20,"bonusMagicDamage":20},"2045":{"name":"Snakeling","hitpoints":1,"combatLevel":90,"attackSpeed":3,"attackLevel":140,"strengthLevel":138,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"bonusAttack":120},"2046":{"name":"Snakeling","hitpoints":1,"combatLevel":90,"attackSpeed":3,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":185,"bonusAttack":120},"2048":{"name":"Black demon","hitpoints":157,"combatLevel":172,"slayerLevel":1,"attackSpeed":4,"attackLevel":145,"strengthLevel":152,"defenceLevel":148,"rangeLevel":1,"magicLevel":1,"demon":true},"2049":{"name":"Black demon","hitpoints":157,"combatLevel":172,"slayerLevel":1,"attackSpeed":4,"attackLevel":145,"strengthLevel":152,"defenceLevel":148,"rangeLevel":1,"magicLevel":1,"demon":true},"2050":{"name":"Black demon","hitpoints":157,"combatLevel":172,"slayerLevel":1,"attackSpeed":4,"attackLevel":145,"strengthLevel":152,"defenceLevel":148,"rangeLevel":1,"magicLevel":1,"demon":true},"2051":{"name":"Black demon","hitpoints":157,"combatLevel":172,"slayerLevel":1,"attackSpeed":4,"attackLevel":145,"strengthLevel":152,"defenceLevel":148,"rangeLevel":1,"magicLevel":1,"demon":true},"2052":{"name":"Black demon","hitpoints":157,"combatLevel":172,"slayerLevel":1,"attackSpeed":4,"attackLevel":145,"strengthLevel":152,"defenceLevel":148,"rangeLevel":1,"magicLevel":1,"demon":true},"2054":{"name":"Chaos Elemental","hitpoints":250,"combatLevel":305,"slayerLevel":1,"attackSpeed":5,"attackLevel":270,"strengthLevel":270,"defenceLevel":270,"rangeLevel":270,"magicLevel":270,"stabDef":70,"slashDef":70,"crushDef":70,"rangeDef":70,"magicDef":70},"2056":{"name":"Dark wizard","hitpoints":24,"combatLevel":23,"attackSpeed":4,"attackLevel":5,"strengthLevel":2,"defenceLevel":5,"rangeLevel":1,"magicLevel":6,"magicDef":3},"2057":{"name":"Dark wizard","hitpoints":24,"combatLevel":22,"attackSpeed":4,"attackLevel":5,"strengthLevel":2,"defenceLevel":5,"rangeLevel":1,"magicLevel":6,"magicDef":3},"2058":{"name":"Dark wizard","hitpoints":15,"combatLevel":11,"attackSpeed":4,"attackLevel":5,"strengthLevel":2,"defenceLevel":5,"rangeLevel":1,"magicLevel":6,"magicDef":3},"2059":{"name":"Dark wizard","hitpoints":15,"combatLevel":11,"attackSpeed":4,"attackLevel":5,"strengthLevel":2,"defenceLevel":5,"rangeLevel":1,"magicLevel":6,"magicDef":3},"2062":{"name":"Oomlie bird","hitpoints":40,"combatLevel":46,"slayerLevel":1,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1},"2063":{"name":"Penguin","hitpoints":4,"combatLevel":2,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":2,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"2064":{"name":"Terrorbird","hitpoints":34,"combatLevel":28,"slayerLevel":1,"attackSpeed":6,"attackLevel":23,"strengthLevel":23,"defenceLevel":19,"rangeLevel":1,"magicLevel":1},"2065":{"name":"Terrorbird","hitpoints":34,"combatLevel":28,"slayerLevel":1,"attackSpeed":6,"attackLevel":23,"strengthLevel":23,"defenceLevel":19,"rangeLevel":1,"magicLevel":1},"2066":{"name":"Terrorbird","hitpoints":34,"combatLevel":28,"slayerLevel":1,"attackSpeed":6,"attackLevel":23,"strengthLevel":23,"defenceLevel":19,"rangeLevel":1,"magicLevel":1},"2067":{"name":"Mounted terrorbird gnome","hitpoints":36,"combatLevel":31,"slayerLevel":1,"attackSpeed":4,"attackLevel":25,"strengthLevel":25,"defenceLevel":25,"stabDef":16,"slashDef":16,"crushDef":18,"rangeDef":10,"magicDef":15},"2068":{"name":"Mounted terrorbird gnome","hitpoints":55,"combatLevel":49,"slayerLevel":1,"attackSpeed":4,"attackLevel":25,"strengthLevel":25,"defenceLevel":25,"stabDef":16,"slashDef":16,"crushDef":18,"rangeDef":10,"magicDef":15},"2075":{"name":"Fire giant","hitpoints":111,"combatLevel":86,"slayerLevel":1,"attackSpeed":5,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"bonusAttack":29,"bonusStrength":31},"2076":{"name":"Fire giant","hitpoints":111,"combatLevel":86,"slayerLevel":1,"attackSpeed":5,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"bonusAttack":29,"bonusStrength":31},"2077":{"name":"Fire giant","hitpoints":111,"combatLevel":86,"slayerLevel":1,"attackSpeed":5,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"bonusAttack":29,"bonusStrength":31},"2078":{"name":"Fire giant","hitpoints":111,"combatLevel":86,"slayerLevel":1,"attackSpeed":5,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"bonusAttack":29,"bonusStrength":31},"2079":{"name":"Fire giant","hitpoints":111,"combatLevel":86,"slayerLevel":1,"attackSpeed":5,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"bonusAttack":29,"bonusStrength":31},"2080":{"name":"Fire giant","hitpoints":111,"combatLevel":86,"slayerLevel":1,"attackSpeed":5,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"bonusAttack":29,"bonusStrength":31},"2081":{"name":"Fire giant","hitpoints":111,"combatLevel":86,"slayerLevel":1,"attackSpeed":5,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"bonusAttack":29,"bonusStrength":31},"2082":{"name":"Fire giant","hitpoints":111,"combatLevel":86,"slayerLevel":1,"attackSpeed":5,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"bonusAttack":29,"bonusStrength":31},"2083":{"name":"Fire giant","hitpoints":111,"combatLevel":86,"slayerLevel":1,"attackSpeed":5,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"bonusAttack":29,"bonusStrength":31},"2084":{"name":"Fire giant","hitpoints":111,"combatLevel":86,"slayerLevel":1,"attackSpeed":5,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"bonusAttack":29,"bonusStrength":31},"2085":{"name":"Ice giant","hitpoints":70,"combatLevel":53,"slayerLevel":1,"attackSpeed":5,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"bonusAttack":29,"bonusStrength":31},"2086":{"name":"Ice giant","hitpoints":70,"combatLevel":53,"slayerLevel":1,"attackSpeed":5,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"bonusAttack":29,"bonusStrength":31},"2087":{"name":"Ice giant","hitpoints":70,"combatLevel":53,"slayerLevel":1,"attackSpeed":5,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"bonusAttack":29,"bonusStrength":31},"2088":{"name":"Ice giant","hitpoints":70,"combatLevel":53,"slayerLevel":1,"attackSpeed":5,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"bonusAttack":29,"bonusStrength":31},"2089":{"name":"Ice giant","hitpoints":70,"combatLevel":53,"slayerLevel":1,"attackSpeed":5,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"bonusAttack":29,"bonusStrength":31},"2090":{"name":"Moss giant","hitpoints":60,"combatLevel":42,"slayerLevel":1,"attackSpeed":6,"attackLevel":30,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"bonusAttack":33,"bonusStrength":31},"2091":{"name":"Moss giant","hitpoints":60,"combatLevel":42,"slayerLevel":1,"attackSpeed":6,"attackLevel":30,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"bonusAttack":33,"bonusStrength":31},"2092":{"name":"Moss giant","hitpoints":60,"combatLevel":42,"slayerLevel":1,"attackSpeed":6,"attackLevel":30,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"bonusAttack":33,"bonusStrength":31},"2093":{"name":"Moss giant","hitpoints":60,"combatLevel":42,"slayerLevel":1,"attackSpeed":6,"attackLevel":30,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"bonusAttack":33,"bonusStrength":31},"2094":{"name":"Jogre","hitpoints":60,"combatLevel":53,"attackSpeed":6,"attackLevel":43,"strengthLevel":43,"defenceLevel":43,"rangeLevel":1,"magicLevel":1,"crush":22,"bonusAttack":22,"bonusStrength":20},"2095":{"name":"Ogre","hitpoints":60,"combatLevel":53,"slayerLevel":1,"attackSpeed":6,"attackLevel":43,"strengthLevel":43,"defenceLevel":43,"rangeLevel":1,"magicLevel":1,"bonusAttack":22,"bonusStrength":20},"2096":{"name":"Ogre","hitpoints":60,"combatLevel":53,"slayerLevel":1,"attackSpeed":6,"attackLevel":43,"strengthLevel":43,"defenceLevel":43,"rangeLevel":1,"magicLevel":1,"bonusAttack":22,"bonusStrength":20},"2097":{"name":"Cyclops","hitpoints":75,"combatLevel":56,"slayerLevel":1,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"2098":{"name":"Hill Giant","hitpoints":35,"combatLevel":28,"slayerLevel":1,"attackSpeed":4,"attackLevel":18,"strengthLevel":22,"defenceLevel":26,"rangeLevel":1,"magicLevel":1,"bonusAttack":18,"bonusStrength":16},"2099":{"name":"Hill Giant","hitpoints":35,"combatLevel":28,"slayerLevel":1,"attackSpeed":4,"attackLevel":18,"strengthLevel":22,"defenceLevel":26,"rangeLevel":1,"magicLevel":1,"bonusAttack":18,"bonusStrength":16},"2100":{"name":"Hill Giant","hitpoints":35,"combatLevel":28,"slayerLevel":1,"attackSpeed":4,"attackLevel":18,"strengthLevel":22,"defenceLevel":26,"rangeLevel":1,"magicLevel":1,"bonusAttack":18,"bonusStrength":16},"2101":{"name":"Hill Giant","hitpoints":35,"combatLevel":28,"slayerLevel":1,"attackSpeed":4,"attackLevel":18,"strengthLevel":22,"defenceLevel":26,"rangeLevel":1,"magicLevel":1,"bonusAttack":18,"bonusStrength":16},"2102":{"name":"Hill Giant","hitpoints":35,"combatLevel":28,"slayerLevel":1,"attackSpeed":4,"attackLevel":18,"strengthLevel":22,"defenceLevel":26,"rangeLevel":1,"magicLevel":1,"bonusAttack":18,"bonusStrength":16},"2103":{"name":"Hill Giant","hitpoints":35,"combatLevel":28,"slayerLevel":1,"attackSpeed":4,"attackLevel":18,"strengthLevel":22,"defenceLevel":26,"rangeLevel":1,"magicLevel":1,"bonusAttack":18,"bonusStrength":16},"2115":{"name":"Thing under the bed","hitpoints":25,"attackSpeed":4},"2120":{"name":"Market Guard","hitpoints":22,"combatLevel":20,"attackSpeed":5,"attackLevel":17,"strengthLevel":18,"defenceLevel":13,"rangeLevel":1,"magicLevel":1,"stabDef":24,"slashDef":14,"crushDef":19,"rangeDef":16,"magicDef":4,"bonusAttack":9,"bonusStrength":7},"2137":{"name":"Cyclops","hitpoints":150,"combatLevel":106,"slayerLevel":1,"attackSpeed":4,"attackLevel":95,"strengthLevel":75,"defenceLevel":55,"rangeLevel":1,"magicLevel":1},"2138":{"name":"Cyclops","hitpoints":150,"combatLevel":106,"slayerLevel":1,"attackSpeed":4,"attackLevel":95,"strengthLevel":75,"defenceLevel":55,"rangeLevel":1,"magicLevel":1},"2139":{"name":"Cyclops","hitpoints":150,"combatLevel":106,"slayerLevel":1,"attackSpeed":4,"attackLevel":95,"strengthLevel":75,"defenceLevel":55,"rangeLevel":1,"magicLevel":1},"2140":{"name":"Cyclops","hitpoints":150,"combatLevel":106,"slayerLevel":1,"attackSpeed":4,"attackLevel":95,"strengthLevel":75,"defenceLevel":55,"rangeLevel":1,"magicLevel":1},"2141":{"name":"Cyclops","hitpoints":150,"combatLevel":106,"slayerLevel":1,"attackSpeed":4,"attackLevel":95,"strengthLevel":75,"defenceLevel":55,"rangeLevel":1,"magicLevel":1},"2142":{"name":"Cyclops","hitpoints":150,"combatLevel":106,"slayerLevel":1,"attackSpeed":4,"attackLevel":95,"strengthLevel":75,"defenceLevel":55,"rangeLevel":1,"magicLevel":1},"2143":{"name":"Sraracha","hitpoints":23,"combatLevel":13,"attackSpeed":4,"attackLevel":10,"strengthLevel":8,"defenceLevel":6,"rangeLevel":1,"magicLevel":1},"2145":{"name":"Undead Druid","hitpoints":140,"combatLevel":105,"slayerLevel":1,"attackSpeed":4,"attackLevel":60,"strengthLevel":50,"defenceLevel":60,"magicLevel":115,"magic":100,"stabDef":40,"slashDef":30,"crushDef":80,"rangeDef":40,"magicDef":140,"bonusAttack":50,"bonusStrength":50,"bonusMagicDamage":50,"undead":true},"2154":{"name":"TzHaar-Mej","hitpoints":100,"combatLevel":103,"slayerLevel":1,"attackSpeed":5,"attackLevel":80,"strengthLevel":80,"defenceLevel":80,"rangeLevel":1,"magicLevel":120},"2155":{"name":"TzHaar-Mej","hitpoints":100,"combatLevel":103,"slayerLevel":1,"attackSpeed":5,"attackLevel":80,"strengthLevel":80,"defenceLevel":80,"rangeLevel":1,"magicLevel":120},"2156":{"name":"TzHaar-Mej","hitpoints":100,"combatLevel":103,"slayerLevel":1,"attackSpeed":5,"attackLevel":80,"strengthLevel":80,"defenceLevel":80,"rangeLevel":1,"magicLevel":120},"2157":{"name":"TzHaar-Mej","hitpoints":100,"combatLevel":103,"slayerLevel":1,"attackSpeed":5,"attackLevel":80,"strengthLevel":80,"defenceLevel":80,"rangeLevel":1,"magicLevel":120},"2158":{"name":"TzHaar-Mej","hitpoints":100,"combatLevel":103,"slayerLevel":1,"attackSpeed":5,"attackLevel":80,"strengthLevel":80,"defenceLevel":80,"rangeLevel":1,"magicLevel":120},"2159":{"name":"TzHaar-Mej","hitpoints":100,"combatLevel":103,"slayerLevel":1,"attackSpeed":5,"attackLevel":80,"strengthLevel":80,"defenceLevel":80,"rangeLevel":1,"magicLevel":120},"2160":{"name":"TzHaar-Mej","hitpoints":100,"combatLevel":103,"slayerLevel":1,"attackSpeed":5,"attackLevel":80,"strengthLevel":80,"defenceLevel":80,"rangeLevel":1,"magicLevel":120},"2161":{"name":"TzHaar-Hur","hitpoints":80,"combatLevel":74,"slayerLevel":1,"attackSpeed":5,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":80},"2162":{"name":"TzHaar-Hur","hitpoints":80,"combatLevel":74,"slayerLevel":1,"attackSpeed":5,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":80},"2163":{"name":"TzHaar-Hur","hitpoints":80,"combatLevel":74,"slayerLevel":1,"attackSpeed":5,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":80},"2164":{"name":"TzHaar-Hur","hitpoints":80,"combatLevel":74,"slayerLevel":1,"attackSpeed":5,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":80},"2165":{"name":"TzHaar-Hur","hitpoints":80,"combatLevel":74,"slayerLevel":1,"attackSpeed":5,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":80},"2166":{"name":"TzHaar-Hur","hitpoints":80,"combatLevel":74,"slayerLevel":1,"attackSpeed":5,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":80},"2167":{"name":"TzHaar-Xil","hitpoints":120,"combatLevel":133,"slayerLevel":1,"attackSpeed":4,"attackLevel":140,"strengthLevel":100,"defenceLevel":100,"rangeLevel":120,"magicLevel":40},"2168":{"name":"TzHaar-Xil","hitpoints":120,"combatLevel":133,"slayerLevel":1,"attackSpeed":4,"attackLevel":140,"strengthLevel":100,"defenceLevel":100,"rangeLevel":120,"magicLevel":40},"2169":{"name":"TzHaar-Xil","hitpoints":120,"combatLevel":133,"slayerLevel":1,"attackSpeed":4,"attackLevel":140,"strengthLevel":100,"defenceLevel":100,"rangeLevel":120,"magicLevel":40},"2170":{"name":"TzHaar-Xil","hitpoints":120,"combatLevel":133,"slayerLevel":1,"attackSpeed":4,"attackLevel":140,"strengthLevel":100,"defenceLevel":100,"rangeLevel":120,"magicLevel":40},"2171":{"name":"TzHaar-Xil","hitpoints":120,"combatLevel":133,"slayerLevel":1,"attackSpeed":4,"attackLevel":140,"strengthLevel":100,"defenceLevel":100,"rangeLevel":120,"magicLevel":40},"2172":{"name":"TzHaar-Xil","hitpoints":120,"combatLevel":133,"slayerLevel":1,"attackSpeed":4,"attackLevel":140,"strengthLevel":100,"defenceLevel":100,"rangeLevel":120,"magicLevel":40},"2173":{"name":"TzHaar-Ket","hitpoints":140,"combatLevel":149,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":140,"defenceLevel":120,"rangeLevel":1,"magicLevel":40},"2174":{"name":"TzHaar-Ket","hitpoints":140,"combatLevel":149,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":140,"defenceLevel":120,"rangeLevel":1,"magicLevel":40},"2175":{"name":"TzHaar-Ket","hitpoints":140,"combatLevel":149,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":140,"defenceLevel":120,"rangeLevel":1,"magicLevel":40},"2176":{"name":"TzHaar-Ket","hitpoints":140,"combatLevel":149,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":140,"defenceLevel":120,"rangeLevel":1,"magicLevel":40},"2177":{"name":"TzHaar-Ket","hitpoints":140,"combatLevel":149,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":140,"defenceLevel":120,"rangeLevel":1,"magicLevel":40},"2178":{"name":"TzHaar-Ket","hitpoints":140,"combatLevel":149,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":140,"defenceLevel":120,"rangeLevel":1,"magicLevel":40},"2179":{"name":"TzHaar-Ket","hitpoints":140,"combatLevel":149,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":140,"defenceLevel":120,"rangeLevel":1,"magicLevel":40},"2189":{"name":"Tz-Kih","hitpoints":10,"combatLevel":22,"slayerLevel":1,"attackSpeed":4,"attackLevel":20,"strengthLevel":30,"defenceLevel":15,"rangeLevel":15,"magicLevel":30},"2190":{"name":"Tz-Kih","hitpoints":10,"combatLevel":22,"slayerLevel":1,"attackSpeed":4,"attackLevel":20,"strengthLevel":30,"defenceLevel":15,"rangeLevel":15,"magicLevel":30},"2191":{"name":"Tz-Kek","hitpoints":20,"combatLevel":45,"slayerLevel":1,"attackSpeed":4,"attackLevel":40,"strengthLevel":60,"defenceLevel":30,"rangeLevel":30,"magicLevel":60},"2192":{"name":"Tz-Kek","hitpoints":20,"combatLevel":45,"slayerLevel":1,"attackSpeed":4,"attackLevel":40,"strengthLevel":60,"defenceLevel":30,"rangeLevel":30,"magicLevel":60},"2193":{"name":"Tok-Xil","hitpoints":40,"combatLevel":90,"slayerLevel":1,"attackSpeed":4,"attackLevel":80,"strengthLevel":120,"defenceLevel":60,"rangeLevel":120,"magicLevel":60},"2194":{"name":"Tok-Xil","hitpoints":40,"combatLevel":90,"slayerLevel":1,"attackSpeed":4,"attackLevel":80,"strengthLevel":120,"defenceLevel":60,"rangeLevel":120,"magicLevel":60},"2205":{"name":"Commander Zilyana","hitpoints":255,"combatLevel":596,"slayerLevel":1,"attackSpeed":2,"attackLevel":280,"strengthLevel":196,"defenceLevel":300,"rangeLevel":250,"magicLevel":300,"magic":200,"stabDef":100,"slashDef":100,"crushDef":100,"rangeDef":100,"magicDef":100,"bonusAttack":195,"bonusStrength":20,"poisonImmune":true,"venomImmune":true},"2206":{"name":"Starlight","hitpoints":160,"combatLevel":149,"attackSpeed":5,"attackLevel":120,"strengthLevel":125,"defenceLevel":120,"rangeLevel":1,"magicLevel":125,"stabDef":12,"slashDef":14,"crushDef":13,"rangeDef":13,"magicDef":5,"bonusAttack":60,"bonusStrength":10},"2207":{"name":"Growler","hitpoints":146,"combatLevel":139,"attackSpeed":5,"attackLevel":100,"strengthLevel":101,"defenceLevel":120,"rangeLevel":1,"magicLevel":150,"stabDef":12,"slashDef":14,"crushDef":14,"rangeDef":5,"magicDef":18,"bonusAttack":10,"bonusStrength":7},"2208":{"name":"Bree","hitpoints":162,"combatLevel":146,"attackSpeed":5,"attackLevel":110,"strengthLevel":80,"defenceLevel":130,"rangeLevel":150,"magicLevel":80,"stabDef":12,"slashDef":14,"crushDef":14,"rangeDef":5,"magicDef":18,"bonusAttack":10,"bonusStrength":7},"2209":{"name":"Saradomin priest","hitpoints":89,"combatLevel":113,"attackSpeed":5,"attackLevel":120,"strengthLevel":46,"defenceLevel":120,"rangeLevel":1,"magicLevel":125,"stabDef":12,"slashDef":14,"crushDef":13,"rangeDef":13,"magicDef":5,"bonusAttack":9,"bonusStrength":5},"2210":{"name":"Spiritual warrior","hitpoints":110,"combatLevel":125,"slayerLevel":68,"attackSpeed":5,"attackLevel":110,"strengthLevel":106,"defenceLevel":110,"rangeLevel":1,"magicLevel":1,"stabDef":12,"slashDef":14,"crushDef":13,"rangeDef":13,"magicDef":5,"bonusAttack":9,"bonusStrength":6},"2211":{"name":"Spiritual ranger","hitpoints":106,"combatLevel":122,"slayerLevel":63,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":100,"rangeLevel":146,"magicLevel":1,"stabDef":3,"slashDef":5,"crushDef":13,"rangeDef":23,"magicDef":16},"2212":{"name":"Spiritual mage","hitpoints":85,"combatLevel":120,"slayerLevel":83,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":86,"rangeLevel":1,"magicLevel":160,"stabDef":8,"slashDef":7,"crushDef":3,"rangeDef":2,"magicDef":16},"2213":{"name":"Knight of Saradomin","hitpoints":135,"combatLevel":103,"attackSpeed":6,"attackLevel":70,"strengthLevel":85,"defenceLevel":70,"rangeLevel":1,"magicLevel":60,"stabDef":10,"slashDef":10,"crushDef":7,"rangeDef":13,"bonusAttack":8,"bonusStrength":8},"2214":{"name":"Knight of Saradomin","hitpoints":108,"combatLevel":101,"attackSpeed":6,"attackLevel":75,"strengthLevel":90,"defenceLevel":82,"rangeLevel":1,"magicLevel":60,"stabDef":12,"slashDef":14,"crushDef":13,"rangeDef":13,"bonusAttack":13,"bonusStrength":11},"2215":{"name":"General Graardor","hitpoints":255,"combatLevel":624,"slayerLevel":1,"attackSpeed":6,"attackLevel":280,"strengthLevel":350,"defenceLevel":250,"rangeLevel":350,"magicLevel":80,"range":100,"stabDef":90,"slashDef":90,"crushDef":90,"rangeDef":90,"magicDef":298,"bonusAttack":120,"bonusStrength":43,"bonusRangeStrength":40,"poisonImmune":true,"venomImmune":true},"2216":{"name":"Sergeant Strongstack","hitpoints":128,"combatLevel":141,"slayerLevel":1,"attackSpeed":5,"attackLevel":124,"strengthLevel":118,"defenceLevel":125,"rangeLevel":50,"magicLevel":50,"bonusStrength":14},"2217":{"name":"Sergeant Steelwill","hitpoints":127,"combatLevel":142,"slayerLevel":1,"attackSpeed":5,"attackLevel":80,"strengthLevel":50,"defenceLevel":150,"rangeLevel":1,"magicLevel":150,"bonusStrength":6},"2218":{"name":"Sergeant Grimspike","hitpoints":146,"combatLevel":142,"slayerLevel":1,"attackSpeed":5,"attackLevel":80,"strengthLevel":80,"defenceLevel":132,"rangeLevel":150,"magicLevel":50,"range":20,"bonusRangeStrength":20},"2232":{"name":"Black Guard Berserker","hitpoints":50,"combatLevel":66,"slayerLevel":1,"attackSpeed":3,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stabDef":60,"slashDef":60,"crushDef":60,"rangeDef":60,"bonusAttack":55,"bonusStrength":55},"2233":{"name":"Ogre","hitpoints":70,"combatLevel":58,"slayerLevel":1,"attackSpeed":6,"attackLevel":46,"strengthLevel":48,"defenceLevel":43,"rangeLevel":1,"magicLevel":1,"bonusAttack":22,"bonusStrength":21},"2234":{"name":"Jogre","hitpoints":70,"combatLevel":58,"attackSpeed":6,"attackLevel":46,"strengthLevel":48,"defenceLevel":43,"rangeLevel":1,"magicLevel":1,"bonusAttack":22,"bonusStrength":21},"2235":{"name":"Cyclops","hitpoints":110,"combatLevel":81,"slayerLevel":1,"attackSpeed":4,"attackLevel":60,"strengthLevel":70,"defenceLevel":48,"rangeLevel":1,"magicLevel":1,"bonusAttack":22},"2236":{"name":"Cyclops","hitpoints":110,"combatLevel":81,"slayerLevel":1,"attackSpeed":4,"attackLevel":60,"strengthLevel":70,"defenceLevel":48,"rangeLevel":1,"magicLevel":1,"bonusAttack":22},"2237":{"name":"Ork","hitpoints":110,"combatLevel":107,"attackSpeed":5,"attackLevel":100,"strengthLevel":100,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stabDef":12,"slashDef":14,"crushDef":13,"rangeDef":13,"magicDef":5,"bonusAttack":19,"bonusStrength":4},"2238":{"name":"Ork","hitpoints":110,"combatLevel":107,"attackSpeed":5,"attackLevel":100,"strengthLevel":100,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stabDef":12,"slashDef":14,"crushDef":13,"rangeDef":13,"magicDef":5,"bonusAttack":19,"bonusStrength":4},"2239":{"name":"Ork","hitpoints":110,"combatLevel":107,"attackSpeed":5,"attackLevel":100,"strengthLevel":100,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stabDef":12,"slashDef":14,"crushDef":13,"rangeDef":13,"magicDef":5,"bonusAttack":19,"bonusStrength":4},"2240":{"name":"Ork","hitpoints":110,"combatLevel":107,"attackSpeed":5,"attackLevel":100,"strengthLevel":100,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stabDef":12,"slashDef":14,"crushDef":13,"rangeDef":13,"magicDef":5,"bonusAttack":19,"bonusStrength":4},"2241":{"name":"Hobgoblin","hitpoints":52,"combatLevel":47,"slayerLevel":1,"attackSpeed":4,"attackLevel":39,"strengthLevel":39,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"2242":{"name":"Spiritual ranger","hitpoints":131,"combatLevel":115,"slayerLevel":63,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"stabDef":12,"slashDef":14,"crushDef":13,"rangeDef":13,"magicDef":5},"2243":{"name":"Spiritual warrior","hitpoints":131,"combatLevel":134,"slayerLevel":68,"attackSpeed":5,"attackLevel":116,"strengthLevel":120,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"stabDef":12,"slashDef":14,"crushDef":13,"rangeDef":13,"magicDef":5,"bonusAttack":29,"bonusStrength":13},"2244":{"name":"Spiritual mage","hitpoints":106,"combatLevel":121,"slayerLevel":83,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":103,"rangeLevel":1,"magicLevel":142,"stabDef":12,"slashDef":14,"crushDef":13,"rangeDef":13,"magicDef":35},"2245":{"name":"Goblin","hitpoints":18,"combatLevel":17,"slayerLevel":1,"attackSpeed":6,"attackLevel":14,"strengthLevel":16,"defenceLevel":14,"rangeLevel":1,"magicLevel":1},"2246":{"name":"Goblin","hitpoints":3,"combatLevel":12,"slayerLevel":1,"attackSpeed":6,"attackLevel":15,"strengthLevel":6,"defenceLevel":19,"rangeLevel":1,"magicLevel":1},"2247":{"name":"Goblin","hitpoints":15,"combatLevel":12,"slayerLevel":1,"attackSpeed":6,"attackLevel":12,"strengthLevel":6,"defenceLevel":13,"rangeLevel":1,"magicLevel":1},"2248":{"name":"Goblin","hitpoints":16,"combatLevel":15,"slayerLevel":1,"attackSpeed":6,"attackLevel":16,"strengthLevel":6,"defenceLevel":19,"magicLevel":1},"2249":{"name":"Goblin","hitpoints":13,"combatLevel":13,"slayerLevel":1,"attackSpeed":6,"attackLevel":11,"strengthLevel":6,"defenceLevel":20,"rangeLevel":1,"magicLevel":1},"2259":{"name":"Dagannoth","hitpoints":85,"combatLevel":88,"slayerLevel":1,"attackSpeed":3,"attackLevel":1,"strengthLevel":1,"defenceLevel":75,"rangeLevel":100,"magicLevel":1,"slashDef":10,"crushDef":90,"rangeDef":150,"magicDef":200},"2261":{"name":"Giant Rock Crab","hitpoints":180,"combatLevel":137,"attackSpeed":4,"attackLevel":50,"strengthLevel":80,"defenceLevel":200,"rangeLevel":1,"magicLevel":1,"stabDef":225,"slashDef":200,"crushDef":175,"rangeDef":250},"2264":{"name":"Dagannoth fledgeling","hitpoints":100,"combatLevel":70,"slayerLevel":1,"attackSpeed":4,"attackLevel":50,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1},"2265":{"name":"Dagannoth Supreme","hitpoints":255,"combatLevel":303,"slayerLevel":1,"attackSpeed":4,"attackLevel":255,"strengthLevel":255,"defenceLevel":128,"rangeLevel":255,"magicLevel":255,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":550,"magicDef":255},"2266":{"name":"Dagannoth Prime","hitpoints":255,"combatLevel":303,"slayerLevel":1,"attackSpeed":4,"attackLevel":255,"strengthLevel":255,"defenceLevel":255,"magicLevel":255,"stabDef":255,"slashDef":255,"crushDef":255,"rangeDef":10,"magicDef":255},"2267":{"name":"Dagannoth Rex","hitpoints":255,"combatLevel":303,"slayerLevel":1,"attackSpeed":4,"attackLevel":255,"strengthLevel":255,"defenceLevel":255,"rangeLevel":255,"stabDef":255,"slashDef":255,"crushDef":255,"rangeDef":255,"magicDef":10},"2316":{"name":"Guard","hitpoints":26,"combatLevel":26,"slayerLevel":1,"attackSpeed":6,"attackLevel":25,"strengthLevel":18,"defenceLevel":25,"rangeLevel":1,"magicLevel":1,"stab":11,"slash":11,"crush":11,"stabDef":1,"slashDef":16,"crushDef":19,"rangeDef":12},"2317":{"name":"Guard","hitpoints":26,"combatLevel":24,"slayerLevel":1,"attackSpeed":6,"attackLevel":22,"strengthLevel":16,"defenceLevel":22,"rangeLevel":1,"magicLevel":1,"crush":16,"slashDef":15,"crushDef":19,"rangeDef":12},"2423":{"name":"Chaos dwarf","hitpoints":61,"combatLevel":48,"slayerLevel":1,"attackSpeed":4,"attackLevel":38,"strengthLevel":42,"defenceLevel":28,"rangeLevel":1,"magicLevel":1,"stabDef":40,"slashDef":34,"crushDef":25,"rangeDef":35,"magicDef":10,"bonusAttack":13,"bonusStrength":9},"2450":{"name":"Animated Bronze Armour","hitpoints":10,"combatLevel":11,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":25,"crushDef":19,"rangeDef":400,"magicDef":400,"bonusAttack":4,"bonusStrength":5},"2451":{"name":"Animated Iron Armour","hitpoints":20,"combatLevel":23,"attackSpeed":4,"attackLevel":20,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":25,"crushDef":19,"rangeDef":400,"magicDef":400,"bonusAttack":4,"bonusStrength":5},"2452":{"name":"Animated Steel Armour","hitpoints":40,"combatLevel":46,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":25,"crushDef":19,"rangeDef":400,"magicDef":400,"bonusAttack":4,"bonusStrength":5},"2453":{"name":"Animated Black Armour","hitpoints":60,"combatLevel":69,"attackSpeed":4,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":25,"crushDef":19,"rangeDef":400,"magicDef":400,"bonusAttack":4,"bonusStrength":5},"2454":{"name":"Animated Mithril Armour","hitpoints":80,"combatLevel":92,"attackSpeed":4,"attackLevel":80,"strengthLevel":80,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":25,"crushDef":19,"rangeDef":400,"magicDef":400,"bonusAttack":4,"bonusStrength":5},"2455":{"name":"Animated Adamant Armour","hitpoints":99,"combatLevel":113,"attackSpeed":4,"attackLevel":99,"strengthLevel":99,"defenceLevel":99,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":25,"crushDef":19,"rangeDef":400,"magicDef":400,"bonusAttack":4,"bonusStrength":5},"2456":{"name":"Animated Rune Armour","hitpoints":120,"combatLevel":138,"attackSpeed":4,"attackLevel":120,"strengthLevel":120,"defenceLevel":120,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":25,"crushDef":19,"rangeDef":400,"magicDef":400,"bonusAttack":4,"bonusStrength":5},"2463":{"name":"Cyclops","hitpoints":75,"combatLevel":56,"slayerLevel":1,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"2464":{"name":"Cyclops","hitpoints":100,"combatLevel":76,"slayerLevel":1,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"2465":{"name":"Cyclops","hitpoints":75,"combatLevel":56,"slayerLevel":1,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"2466":{"name":"Cyclops","hitpoints":100,"combatLevel":76,"slayerLevel":1,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"2467":{"name":"Cyclops","hitpoints":75,"combatLevel":56,"slayerLevel":1,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"2468":{"name":"Cyclops","hitpoints":100,"combatLevel":76,"slayerLevel":1,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"2474":{"name":"Catablepon","hitpoints":40,"combatLevel":49,"slayerLevel":1,"attackSpeed":4,"attackLevel":45,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":60,"stabDef":40,"slashDef":30,"crushDef":20,"rangeDef":40,"magicDef":20},"2475":{"name":"Catablepon","hitpoints":70,"combatLevel":64,"slayerLevel":1,"attackSpeed":4,"attackLevel":55,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":45,"stabDef":50,"slashDef":40,"crushDef":30,"rangeDef":50,"magicDef":30},"2476":{"name":"Catablepon","hitpoints":50,"combatLevel":68,"slayerLevel":1,"attackSpeed":4,"attackLevel":65,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":60,"stabDef":50,"slashDef":40,"crushDef":30,"rangeDef":50,"magicDef":30},"2477":{"name":"Giant spider","hitpoints":50,"combatLevel":50,"slayerLevel":1,"attackSpeed":4,"attackLevel":41,"strengthLevel":51,"defenceLevel":31,"rangeLevel":1,"magicLevel":1},"2478":{"name":"Spider","hitpoints":22,"combatLevel":24,"slayerLevel":1,"attackSpeed":6,"attackLevel":21,"strengthLevel":21,"defenceLevel":21,"rangeLevel":1,"magicLevel":1,"stabDef":53,"slashDef":53,"crushDef":53,"rangeDef":53,"magicDef":53,"bonusAttack":35,"bonusStrength":58},"2479":{"name":"Scorpion","hitpoints":55,"combatLevel":59,"slayerLevel":1,"attackSpeed":6,"attackLevel":50,"strengthLevel":52,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":15,"crushDef":15,"rangeDef":55},"2480":{"name":"Scorpion","hitpoints":37,"combatLevel":37,"slayerLevel":1,"attackSpeed":6,"attackLevel":31,"strengthLevel":32,"defenceLevel":31,"rangeLevel":1,"magicLevel":1,"stabDef":35,"slashDef":15,"crushDef":15,"rangeDef":35,"magicDef":30},"2481":{"name":"Minotaur","hitpoints":10,"combatLevel":12,"slayerLevel":1,"attackSpeed":4,"attackLevel":12,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2483":{"name":"Minotaur","hitpoints":22,"combatLevel":27,"slayerLevel":1,"attackSpeed":4,"attackLevel":23,"strengthLevel":25,"defenceLevel":25,"rangeLevel":1,"magicLevel":1},"2484":{"name":"Goblin","hitpoints":12,"combatLevel":5,"slayerLevel":1,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"2485":{"name":"Goblin","hitpoints":16,"combatLevel":13,"slayerLevel":1,"attackSpeed":6,"attackLevel":12,"strengthLevel":13,"defenceLevel":7,"rangeLevel":1,"magicLevel":1,"stabDef":4,"slashDef":6,"crushDef":8,"rangeDef":4,"magicDef":4},"2486":{"name":"Goblin","hitpoints":7,"combatLevel":11,"slayerLevel":1,"attackSpeed":6,"attackLevel":10,"strengthLevel":3,"defenceLevel":7,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"2487":{"name":"Goblin","hitpoints":22,"combatLevel":16,"slayerLevel":1,"attackSpeed":6,"attackLevel":13,"strengthLevel":11,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"bonusAttack":22,"bonusStrength":22},"2488":{"name":"Goblin","hitpoints":26,"combatLevel":25,"slayerLevel":1,"attackSpeed":6,"attackLevel":22,"strengthLevel":23,"defenceLevel":17,"rangeLevel":1,"magicLevel":1,"stabDef":4,"slashDef":6,"crushDef":8,"rangeDef":4,"magicDef":4},"2489":{"name":"Goblin","hitpoints":22,"combatLevel":16,"slayerLevel":1,"attackSpeed":6,"attackLevel":13,"strengthLevel":11,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"bonusAttack":22,"bonusStrength":22},"2490":{"name":"Wolf","hitpoints":15,"combatLevel":14,"slayerLevel":1,"attackSpeed":4,"attackLevel":10,"strengthLevel":15,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2491":{"name":"Wolf","hitpoints":10,"combatLevel":11,"slayerLevel":1,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2492":{"name":"Rat","hitpoints":2,"combatLevel":1,"slayerLevel":1,"attackSpeed":4,"attackLevel":1},"2498":{"name":"Flesh Crawler","hitpoints":25,"combatLevel":28,"slayerLevel":1,"attackSpeed":3,"attackLevel":60,"strengthLevel":2,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"stabDef":15,"slashDef":15,"crushDef":15,"rangeDef":15,"magicDef":15},"2499":{"name":"Flesh Crawler","hitpoints":25,"combatLevel":35,"slayerLevel":1,"attackSpeed":3,"attackLevel":80,"strengthLevel":2,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"stabDef":15,"slashDef":15,"crushDef":15,"rangeDef":15,"magicDef":15},"2500":{"name":"Flesh Crawler","hitpoints":25,"combatLevel":41,"slayerLevel":1,"attackSpeed":3,"attackLevel":100,"strengthLevel":2,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"stabDef":15,"slashDef":15,"crushDef":15,"rangeDef":15,"magicDef":15},"2501":{"name":"Zombie","hitpoints":30,"combatLevel":30,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"2502":{"name":"Zombie","hitpoints":30,"combatLevel":30,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"2503":{"name":"Zombie","hitpoints":30,"combatLevel":30,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"2504":{"name":"Zombie","hitpoints":41,"combatLevel":44,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"2505":{"name":"Zombie","hitpoints":41,"combatLevel":44,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"2506":{"name":"Zombie","hitpoints":41,"combatLevel":44,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"2507":{"name":"Zombie","hitpoints":50,"combatLevel":53,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"2508":{"name":"Zombie","hitpoints":50,"combatLevel":53,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"2509":{"name":"Zombie","hitpoints":50,"combatLevel":53,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"2510":{"name":"Giant rat","hitpoints":25,"combatLevel":26,"slayerLevel":1,"attackSpeed":4,"attackLevel":22,"strengthLevel":23,"defenceLevel":22,"rangeLevel":1,"magicLevel":1},"2511":{"name":"Giant rat","hitpoints":25,"combatLevel":26,"slayerLevel":1,"attackSpeed":4,"attackLevel":22,"strengthLevel":23,"defenceLevel":22,"rangeLevel":1,"magicLevel":1},"2512":{"name":"Giant rat","hitpoints":25,"combatLevel":26,"slayerLevel":1,"attackSpeed":4,"attackLevel":22,"strengthLevel":23,"defenceLevel":22,"rangeLevel":1,"magicLevel":1},"2513":{"name":"Rat","hitpoints":2,"combatLevel":1,"slayerLevel":1,"attackSpeed":4,"attackLevel":1},"2514":{"name":"Ankou","hitpoints":60,"combatLevel":75,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"undead":true},"2515":{"name":"Ankou","hitpoints":65,"combatLevel":82,"slayerLevel":1,"attackSpeed":4,"attackLevel":80,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"undead":true},"2516":{"name":"Ankou","hitpoints":70,"combatLevel":86,"slayerLevel":1,"attackSpeed":4,"attackLevel":75,"strengthLevel":75,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"undead":true},"2517":{"name":"Ankou","hitpoints":60,"combatLevel":75,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"undead":true},"2518":{"name":"Ankou","hitpoints":65,"combatLevel":82,"slayerLevel":1,"attackSpeed":4,"attackLevel":80,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"undead":true},"2519":{"name":"Ankou","hitpoints":70,"combatLevel":86,"slayerLevel":1,"attackSpeed":4,"attackLevel":75,"strengthLevel":75,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"undead":true},"2520":{"name":"Skeleton","hitpoints":70,"combatLevel":68,"slayerLevel":1,"attackSpeed":4,"attackLevel":60,"strengthLevel":50,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stabDef":35,"slashDef":35,"rangeDef":35,"undead":true},"2521":{"name":"Skeleton","hitpoints":70,"combatLevel":60,"slayerLevel":1,"attackSpeed":4,"attackLevel":50,"strengthLevel":50,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":35,"slashDef":35,"rangeDef":35,"undead":true},"2522":{"name":"Skeleton","hitpoints":70,"combatLevel":60,"slayerLevel":1,"attackSpeed":4,"attackLevel":50,"strengthLevel":50,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":35,"slashDef":35,"rangeDef":35,"undead":true},"2523":{"name":"Skeleton","hitpoints":70,"combatLevel":60,"slayerLevel":1,"attackSpeed":4,"attackLevel":50,"strengthLevel":50,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":35,"slashDef":35,"rangeDef":35,"undead":true},"2524":{"name":"Skeleton","hitpoints":77,"combatLevel":85,"slayerLevel":1,"attackSpeed":4,"attackLevel":74,"strengthLevel":74,"defenceLevel":74,"rangeLevel":1,"magicLevel":1,"stabDef":79,"slashDef":31,"crushDef":20,"rangeDef":70,"magicDef":5,"bonusAttack":15,"bonusStrength":14,"undead":true},"2525":{"name":"Skeleton","hitpoints":77,"combatLevel":85,"slayerLevel":1,"attackSpeed":4,"attackLevel":74,"strengthLevel":74,"defenceLevel":74,"rangeLevel":1,"magicLevel":1,"stabDef":79,"slashDef":31,"crushDef":20,"rangeDef":70,"magicDef":5,"bonusAttack":15,"bonusStrength":14,"undead":true},"2526":{"name":"Skeleton","hitpoints":77,"combatLevel":85,"slayerLevel":1,"attackSpeed":4,"attackLevel":74,"strengthLevel":74,"defenceLevel":74,"rangeLevel":1,"magicLevel":1,"stabDef":79,"slashDef":31,"crushDef":20,"rangeDef":70,"magicDef":5,"bonusAttack":15,"bonusStrength":14,"undead":true},"2527":{"name":"Ghost","hitpoints":75,"combatLevel":76,"slayerLevel":1,"attackSpeed":4,"attackLevel":63,"strengthLevel":63,"defenceLevel":68,"rangeLevel":1,"magicLevel":1,"stabDef":45,"slashDef":45,"crushDef":5,"rangeDef":45,"undead":true},"2528":{"name":"Ghost","hitpoints":75,"combatLevel":76,"slayerLevel":1,"attackSpeed":4,"attackLevel":63,"strengthLevel":63,"defenceLevel":68,"rangeLevel":1,"magicLevel":1,"stabDef":45,"slashDef":45,"crushDef":5,"rangeDef":45,"undead":true},"2529":{"name":"Ghost","hitpoints":75,"combatLevel":76,"slayerLevel":1,"attackSpeed":4,"attackLevel":63,"strengthLevel":63,"defenceLevel":68,"rangeLevel":1,"magicLevel":1,"stabDef":45,"slashDef":45,"crushDef":5,"rangeDef":45,"undead":true},"2530":{"name":"Ghost","hitpoints":75,"combatLevel":76,"slayerLevel":1,"attackSpeed":4,"attackLevel":63,"strengthLevel":63,"defenceLevel":68,"rangeLevel":1,"magicLevel":1,"stabDef":45,"slashDef":45,"crushDef":5,"rangeDef":45,"undead":true},"2531":{"name":"Ghost","hitpoints":27,"slayerLevel":1,"attackSpeed":4,"undead":true},"2532":{"name":"Ghost","hitpoints":27,"slayerLevel":1,"attackSpeed":4,"undead":true},"2533":{"name":"Ghost","hitpoints":27,"slayerLevel":1,"attackSpeed":4,"undead":true},"2534":{"name":"Ghost","hitpoints":27,"slayerLevel":1,"attackSpeed":4,"undead":true},"2536":{"name":"H.A.M. Guard","hitpoints":15,"combatLevel":12,"attackSpeed":7,"attackLevel":8,"strengthLevel":12,"defenceLevel":8,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"rangeDef":5},"2537":{"name":"H.A.M. Guard","hitpoints":20,"combatLevel":18,"attackSpeed":6,"attackLevel":14,"strengthLevel":18,"defenceLevel":12,"rangeLevel":1,"magicLevel":1,"stabDef":6,"slashDef":6,"rangeDef":6},"2538":{"name":"H.A.M. Guard","hitpoints":30,"combatLevel":22,"attackSpeed":5,"attackLevel":16,"strengthLevel":20,"defenceLevel":12,"rangeLevel":1,"magicLevel":1,"stabDef":7,"slashDef":7,"rangeDef":7},"2579":{"name":"Monk","hitpoints":15,"combatLevel":5,"attackSpeed":4,"attackLevel":2,"strengthLevel":2,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"2584":{"name":"Abyssal leech","hitpoints":10,"combatLevel":41,"attackSpeed":2,"attackLevel":95,"strengthLevel":5,"defenceLevel":25,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":100,"rangeDef":10,"magicDef":50,"bonusAttack":100,"bonusStrength":10},"2585":{"name":"Abyssal guardian","hitpoints":55,"combatLevel":59,"attackSpeed":4,"attackLevel":30,"strengthLevel":90,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"stabDef":70,"slashDef":70,"crushDef":70,"rangeDef":70,"magicDef":150,"bonusAttack":15,"bonusStrength":5},"2586":{"name":"Abyssal walker","hitpoints":95,"combatLevel":81,"attackSpeed":5,"attackLevel":5,"strengthLevel":100,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":75,"slashDef":75,"crushDef":10,"rangeDef":75,"magicDef":75,"bonusAttack":5,"bonusStrength":10},"2592":{"name":"Mogre","hitpoints":48,"combatLevel":60,"slayerLevel":32,"attackSpeed":6,"attackLevel":58,"strengthLevel":55,"defenceLevel":48,"rangeLevel":1,"magicLevel":1,"bonusAttack":22,"bonusStrength":20,"poisonImmune":true,"venomImmune":true},"2593":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2594":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2595":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2596":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2597":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2598":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2599":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2600":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2601":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2602":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2603":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2604":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2605":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2606":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2607":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2608":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2609":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2610":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2611":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2612":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2613":{"name":"Boris","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2614":{"name":"Imre","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2615":{"name":"Yuri","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2616":{"name":"Joseph","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2617":{"name":"Nikolai","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2618":{"name":"Eduard","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2619":{"name":"Lev","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2620":{"name":"Georgy","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2621":{"name":"Svetlana","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2622":{"name":"Irina","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2623":{"name":"Alexis","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2624":{"name":"Milla","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2625":{"name":"Galina","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2626":{"name":"Sofiya","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2627":{"name":"Ksenia","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2628":{"name":"Yadviga","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2629":{"name":"Nikita","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2630":{"name":"Vera","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2631":{"name":"Zoja","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2632":{"name":"Liliya","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2634":{"name":"Myre Blamish Snail","hitpoints":8,"combatLevel":9,"attackSpeed":4,"defenceLevel":22,"rangeLevel":5,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":30,"rangeDef":50,"magicDef":5,"bonusAttack":10,"bonusStrength":10},"2645":{"name":"Blood Blamish Snail","hitpoints":13,"combatLevel":20,"attackSpeed":6,"defenceLevel":45,"rangeLevel":12,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":30,"rangeDef":50,"bonusAttack":10,"bonusStrength":10},"2646":{"name":"Ochre Blamish Snail","hitpoints":10,"combatLevel":10,"attackSpeed":6,"defenceLevel":18,"rangeLevel":7,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":30,"rangeDef":50,"magicDef":5,"bonusAttack":10,"bonusStrength":10},"2647":{"name":"Bruise Blamish Snail","hitpoints":12,"combatLevel":20,"attackSpeed":6,"defenceLevel":40,"rangeLevel":15,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":30,"rangeDef":50,"magicDef":5,"bonusAttack":10,"bonusStrength":10},"2648":{"name":"Bark Blamish Snail","hitpoints":22,"combatLevel":15,"attackSpeed":6,"defenceLevel":20,"rangeLevel":10,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":30,"rangeDef":30,"magicDef":5,"bonusAttack":10,"bonusStrength":10},"2649":{"name":"Myre Blamish Snail","hitpoints":13,"combatLevel":10,"attackSpeed":4,"defenceLevel":12,"rangeLevel":8,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":30,"rangeDef":50,"magicDef":5,"bonusAttack":10,"bonusStrength":10},"2650":{"name":"Blood Blamish Snail","hitpoints":10,"combatLevel":20,"attackSpeed":6,"defenceLevel":30,"rangeLevel":21,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":30,"rangeDef":50,"bonusAttack":10,"bonusStrength":10},"2651":{"name":"Ochre Blamish Snail","hitpoints":20,"combatLevel":15,"attackSpeed":6,"defenceLevel":25,"rangeLevel":8,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":30,"rangeDef":50,"magicDef":5,"bonusAttack":10,"bonusStrength":10},"2652":{"name":"Bruise Blamish Snail","hitpoints":15,"combatLevel":20,"attackSpeed":6,"defenceLevel":27,"rangeLevel":20,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":30,"rangeDef":50,"magicDef":5,"bonusAttack":10,"bonusStrength":10},"2694":{"name":"Sheep","hitpoints":7,"combatLevel":3,"slayerLevel":1,"attackSpeed":4,"attackLevel":2,"strengthLevel":2,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"2790":{"name":"Cow","hitpoints":8,"combatLevel":2,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"poisonImmune":true,"venomImmune":true},"2791":{"name":"Cow","hitpoints":8,"combatLevel":2,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"poisonImmune":true,"venomImmune":true},"2792":{"name":"Cow calf","hitpoints":6,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"2793":{"name":"Cow","hitpoints":8,"combatLevel":2,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"poisonImmune":true,"venomImmune":true},"2794":{"name":"Cow calf","hitpoints":6,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"2795":{"name":"Cow","hitpoints":8,"combatLevel":2,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"poisonImmune":true,"venomImmune":true},"2801":{"name":"Cow calf","hitpoints":6,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"2804":{"name":"Chicken","hitpoints":3,"combatLevel":1,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"2805":{"name":"Chicken","hitpoints":3,"combatLevel":1,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"2806":{"name":"Chicken","hitpoints":3,"combatLevel":1,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"2827":{"name":"Bat","hitpoints":8,"combatLevel":6,"slayerLevel":1,"attackSpeed":4,"attackLevel":5,"strengthLevel":5,"defenceLevel":5,"rangeLevel":1,"magicLevel":1,"stabDef":2,"slashDef":2,"crushDef":5,"magicDef":2},"2834":{"name":"Giant bat","hitpoints":32,"combatLevel":27,"slayerLevel":1,"attackSpeed":4,"attackLevel":22,"strengthLevel":22,"defenceLevel":22,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"crushDef":12,"rangeDef":8,"magicDef":10},"2837":{"name":"Unicorn","hitpoints":19,"combatLevel":15,"attackSpeed":4,"attackLevel":11,"strengthLevel":13,"defenceLevel":13,"rangeLevel":1,"magicLevel":1},"2838":{"name":"Grizzly bear","hitpoints":27,"combatLevel":21,"slayerLevel":1,"attackSpeed":4,"attackLevel":17,"strengthLevel":18,"defenceLevel":15,"rangeLevel":1,"magicLevel":1},"2839":{"name":"Black bear","hitpoints":25,"combatLevel":19,"slayerLevel":1,"attackSpeed":4,"attackLevel":15,"strengthLevel":16,"defenceLevel":13},"2840":{"name":"Earth warrior","hitpoints":54,"combatLevel":51,"slayerLevel":1,"attackSpeed":4,"attackLevel":42,"strengthLevel":42,"defenceLevel":42,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":40,"crushDef":20,"rangeDef":30,"magicDef":10},"2841":{"name":"Ice warrior","hitpoints":59,"combatLevel":57,"attackSpeed":4,"attackLevel":47,"strengthLevel":47,"defenceLevel":47,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":40,"crushDef":20,"rangeDef":30,"magicDef":10},"2842":{"name":"Ice warrior","hitpoints":59,"combatLevel":57,"attackSpeed":4,"attackLevel":47,"strengthLevel":47,"defenceLevel":47,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":40,"crushDef":20,"rangeDef":30,"magicDef":10},"2843":{"name":"Otherworldly being","hitpoints":66,"combatLevel":64,"slayerLevel":1,"attackSpeed":4,"attackLevel":56,"strengthLevel":56,"defenceLevel":46,"rangeLevel":1,"magicLevel":1,"stabDef":15,"slashDef":10,"crushDef":20,"rangeDef":15},"2844":{"name":"Magic axe","hitpoints":45,"combatLevel":42,"slayerLevel":1,"attackSpeed":6,"attackLevel":38,"strengthLevel":38,"defenceLevel":29,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":5,"crushDef":15,"rangeDef":10,"magicDef":5},"2845":{"name":"Snake","hitpoints":6,"combatLevel":5,"attackSpeed":4,"attackLevel":4,"strengthLevel":5,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"2848":{"name":"Monkey","hitpoints":6,"combatLevel":3,"slayerLevel":1,"attackSpeed":4,"attackLevel":2,"strengthLevel":3,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"2849":{"name":"Black unicorn","hitpoints":29,"combatLevel":27,"attackSpeed":4,"attackLevel":21,"strengthLevel":23,"defenceLevel":23,"rangeLevel":1,"magicLevel":1},"2851":{"name":"Ice warrior","hitpoints":59,"combatLevel":57,"attackSpeed":4,"attackLevel":47,"strengthLevel":47,"defenceLevel":47,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":40,"crushDef":20,"rangeDef":30,"magicDef":10},"2853":{"name":"Shadow warrior","hitpoints":67,"combatLevel":48,"slayerLevel":1,"attackSpeed":4,"attackLevel":36,"strengthLevel":36,"defenceLevel":33,"stabDef":43,"slashDef":31,"crushDef":19,"rangeDef":38,"magicDef":15,"bonusAttack":20,"bonusStrength":26},"2854":{"name":"Rat","hitpoints":2,"combatLevel":1,"slayerLevel":1,"attackSpeed":4,"attackLevel":1},"2855":{"name":"Rat","hitpoints":2,"combatLevel":1,"slayerLevel":1,"attackSpeed":4,"attackLevel":1},"2856":{"name":"Giant rat","hitpoints":5,"combatLevel":3,"slayerLevel":1,"attackSpeed":4,"attackLevel":2,"strengthLevel":3,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"2857":{"name":"Giant rat","hitpoints":5,"combatLevel":3,"slayerLevel":1,"attackSpeed":4,"attackLevel":2,"strengthLevel":3,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"2858":{"name":"Giant rat","hitpoints":5,"combatLevel":3,"slayerLevel":1,"attackSpeed":4,"attackLevel":2,"strengthLevel":3,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"2859":{"name":"Giant rat","hitpoints":5,"combatLevel":3,"slayerLevel":1,"attackSpeed":4,"attackLevel":2,"strengthLevel":3,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"2860":{"name":"Giant rat","hitpoints":5,"combatLevel":3,"slayerLevel":1,"attackSpeed":4,"attackLevel":2,"strengthLevel":3,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"2861":{"name":"Giant rat","hitpoints":5,"combatLevel":3,"slayerLevel":1,"attackSpeed":4,"attackLevel":2,"strengthLevel":3,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"2862":{"name":"Giant rat","hitpoints":10,"combatLevel":6,"slayerLevel":1,"attackSpeed":4,"attackLevel":6,"strengthLevel":5,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"2863":{"name":"Giant rat","hitpoints":10,"combatLevel":6,"slayerLevel":1,"attackSpeed":4,"attackLevel":6,"strengthLevel":5,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"2864":{"name":"Giant rat","hitpoints":10,"combatLevel":6,"slayerLevel":1,"attackSpeed":4,"attackLevel":6,"strengthLevel":5,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"2865":{"name":"Dungeon rat","hitpoints":12,"combatLevel":12,"slayerLevel":1,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2866":{"name":"Dungeon rat","hitpoints":12,"combatLevel":12,"slayerLevel":1,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2867":{"name":"Dungeon rat","hitpoints":12,"combatLevel":12,"slayerLevel":1,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2885":{"name":"Monk of Zamorak","hitpoints":20,"combatLevel":22,"attackSpeed":4,"attackLevel":18,"strengthLevel":18,"defenceLevel":22,"rangeLevel":1,"magicLevel":25},"2886":{"name":"Monk of Zamorak","hitpoints":10,"combatLevel":17,"attackSpeed":4,"attackLevel":8,"strengthLevel":8,"defenceLevel":12,"rangeLevel":1,"magicLevel":25},"2887":{"name":"Asyff","hitpoints":40,"combatLevel":45,"attackSpeed":4,"attackLevel":38,"strengthLevel":38,"defenceLevel":42,"rangeLevel":1,"magicLevel":40},"2892":{"name":"Brian","hitpoints":27,"combatLevel":22,"slayerLevel":1,"attackSpeed":4,"attackLevel":17,"strengthLevel":17,"defenceLevel":17,"rangeLevel":1,"magicLevel":1,"stab":11,"slashDef":3,"crushDef":2,"bonusStrength":12},"2916":{"name":"Waterfiend","hitpoints":130,"combatLevel":115,"slayerLevel":1,"attackSpeed":4,"defenceLevel":128,"rangeLevel":105,"magicLevel":105,"stabDef":100,"slashDef":100,"crushDef":10,"rangeDef":100,"magicDef":100,"poisonImmune":true,"venomImmune":true},"2917":{"name":"Waterfiend","hitpoints":130,"combatLevel":115,"slayerLevel":1,"attackSpeed":4,"defenceLevel":128,"rangeLevel":105,"magicLevel":105,"stabDef":100,"slashDef":100,"crushDef":10,"rangeDef":100,"magicDef":100,"poisonImmune":true,"venomImmune":true},"2918":{"name":"Brutal green dragon","hitpoints":175,"combatLevel":227,"slayerLevel":1,"attackSpeed":4,"attackLevel":268,"strengthLevel":168,"defenceLevel":168,"magicLevel":168,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"poisonImmune":true,"venomImmune":true,"dragon":true},"2919":{"name":"Mithril dragon","hitpoints":254,"combatLevel":304,"slayerLevel":1,"attackSpeed":4,"attackLevel":268,"strengthLevel":268,"defenceLevel":268,"rangeLevel":168,"magicLevel":168,"stabDef":50,"slashDef":100,"crushDef":70,"rangeDef":90,"magicDef":30,"venomImmune":true,"dragon":true},"2920":{"name":"Confused barbarian","hitpoints":124,"combatLevel":132,"attackSpeed":4,"attackLevel":115,"strengthLevel":114,"defenceLevel":110,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"2921":{"name":"Lost barbarian","hitpoints":124,"combatLevel":132,"attackSpeed":4,"attackLevel":115,"strengthLevel":114,"defenceLevel":110,"rangeLevel":1,"magicLevel":1},"2946":{"name":"Nail beast","hitpoints":55,"combatLevel":69,"attackSpeed":8,"attackLevel":150,"strengthLevel":6,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"2947":{"name":"Nail beast","hitpoints":65,"combatLevel":98,"attackSpeed":8,"attackLevel":215,"strengthLevel":16,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"2948":{"name":"Nail beast","hitpoints":75,"combatLevel":141,"attackSpeed":8,"attackLevel":320,"strengthLevel":26,"defenceLevel":40,"rangeLevel":1,"magicLevel":1},"2954":{"name":"Zamorak wizard","hitpoints":73,"combatLevel":65,"attackSpeed":4,"attackLevel":24,"strengthLevel":24,"defenceLevel":24,"rangeLevel":1,"magicLevel":80,"magicDef":3},"2955":{"name":"Saradomin wizard","hitpoints":120,"combatLevel":108,"attackSpeed":4,"attackLevel":100,"strengthLevel":80,"defenceLevel":80,"rangeLevel":1,"magicLevel":80,"magicDef":30,"bonusAttack":40,"bonusStrength":40},"2978":{"name":"Big Snake","hitpoints":120,"combatLevel":84,"attackSpeed":6,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"bonusAttack":66,"bonusStrength":62},"2992":{"name":"Undead cow","hitpoints":8,"combatLevel":2,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"undead":true},"2993":{"name":"Undead chicken","hitpoints":3,"combatLevel":1,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"undead":true},"2994":{"name":"Giant lobster","hitpoints":32,"combatLevel":32,"slayerLevel":1,"attackSpeed":4,"attackLevel":18,"strengthLevel":26,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":15,"crushDef":5,"rangeDef":5},"2999":{"name":"Tortured soul","hitpoints":51,"combatLevel":59,"slayerLevel":1,"attackSpeed":4,"attackLevel":52,"strengthLevel":62,"defenceLevel":38,"rangeLevel":1,"magicLevel":1,"undead":true},"3010":{"name":"Guard","hitpoints":22,"combatLevel":21,"attackSpeed":4,"attackLevel":19,"strengthLevel":18,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"stab":4,"stabDef":18,"slashDef":25,"crushDef":19,"rangeDef":20,"bonusAttack":4,"bonusStrength":5},"3011":{"name":"Guard","hitpoints":22,"combatLevel":21,"attackSpeed":4,"attackLevel":19,"strengthLevel":18,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"stab":4,"stabDef":18,"slashDef":25,"crushDef":19,"rangeDef":20,"bonusAttack":4,"bonusStrength":5},"3015":{"name":"Woman","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3016":{"name":"Shadow spider","hitpoints":55,"combatLevel":52,"slayerLevel":1,"attackSpeed":4,"attackLevel":44,"strengthLevel":42,"defenceLevel":44,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":15,"crushDef":10,"rangeDef":15,"magicDef":15},"3017":{"name":"Giant spider","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3018":{"name":"Giant spider","hitpoints":32,"combatLevel":27,"slayerLevel":1,"attackSpeed":4,"attackLevel":20,"strengthLevel":24,"defenceLevel":21,"rangeLevel":1,"magicLevel":1},"3019":{"name":"Spider","hitpoints":2,"combatLevel":1,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3020":{"name":"Jungle spider","hitpoints":50,"combatLevel":44,"slayerLevel":1,"attackSpeed":4,"attackLevel":35,"strengthLevel":37,"defenceLevel":35,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"crushDef":10,"rangeDef":20,"magicDef":17},"3021":{"name":"Deadly red spider","hitpoints":35,"combatLevel":34,"slayerLevel":1,"attackSpeed":6,"attackLevel":30,"strengthLevel":25,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"stabDef":15,"slashDef":16,"crushDef":7,"rangeDef":16,"magicDef":12},"3022":{"name":"Ice spider","hitpoints":65,"combatLevel":61,"slayerLevel":1,"attackSpeed":4,"attackLevel":50,"strengthLevel":55,"defenceLevel":43,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":17,"crushDef":12,"rangeDef":13,"magicDef":13},"3023":{"name":"Poison spider","hitpoints":64,"combatLevel":64,"slayerLevel":1,"attackSpeed":6,"attackLevel":50,"strengthLevel":52,"defenceLevel":58,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":17,"crushDef":10,"rangeDef":14,"magicDef":14},"3024":{"name":"Scorpion","hitpoints":17,"combatLevel":14,"slayerLevel":1,"attackSpeed":6,"attackLevel":11,"strengthLevel":12,"defenceLevel":11,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":15,"crushDef":15,"rangeDef":5},"3025":{"name":"Poison Scorpion","hitpoints":23,"combatLevel":20,"slayerLevel":1,"attackSpeed":4,"attackLevel":16,"strengthLevel":17,"defenceLevel":15,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":15,"crushDef":15,"rangeDef":5},"3026":{"name":"Pit Scorpion","hitpoints":32,"combatLevel":28,"slayerLevel":1,"attackSpeed":4,"attackLevel":23,"strengthLevel":23,"defenceLevel":23,"rangeLevel":1,"magicLevel":1,"slashDef":5,"crushDef":5},"3027":{"name":"King Scorpion","hitpoints":30,"combatLevel":32,"slayerLevel":1,"attackSpeed":4,"attackLevel":30,"strengthLevel":29,"defenceLevel":23,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":15,"crushDef":15,"rangeDef":5},"3028":{"name":"Goblin","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3029":{"name":"Goblin","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3030":{"name":"Goblin","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3031":{"name":"Goblin","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3032":{"name":"Goblin","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3033":{"name":"Goblin","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3034":{"name":"Goblin","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3035":{"name":"Goblin","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3036":{"name":"Goblin","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3037":{"name":"Goblin","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3038":{"name":"Goblin","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3039":{"name":"Goblin","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3040":{"name":"Goblin","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3041":{"name":"Goblin","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3042":{"name":"Goblin","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3043":{"name":"Goblin","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3044":{"name":"Goblin","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3045":{"name":"Goblin","hitpoints":12,"combatLevel":5,"slayerLevel":1,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"3046":{"name":"Goblin","hitpoints":16,"combatLevel":13,"slayerLevel":1,"attackSpeed":6,"attackLevel":12,"strengthLevel":13,"defenceLevel":7,"rangeLevel":1,"magicLevel":1,"stabDef":4,"slashDef":6,"crushDef":8,"rangeDef":4,"magicDef":4},"3047":{"name":"Goblin","hitpoints":12,"combatLevel":5,"slayerLevel":1,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"3048":{"name":"Goblin","hitpoints":12,"combatLevel":5,"slayerLevel":1,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"3049":{"name":"Hobgoblin","hitpoints":29,"combatLevel":28,"slayerLevel":1,"attackSpeed":4,"attackLevel":22,"strengthLevel":24,"defenceLevel":24,"rangeLevel":1,"magicLevel":1},"3050":{"name":"Hobgoblin","hitpoints":49,"combatLevel":42,"slayerLevel":1,"attackSpeed":4,"attackLevel":33,"strengthLevel":31,"defenceLevel":36,"rangeLevel":1,"magicLevel":1,"bonusAttack":8,"bonusStrength":10},"3051":{"name":"Goblin","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3052":{"name":"Goblin","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3053":{"name":"Goblin","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3054":{"name":"Goblin","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3055":{"name":"Barbarian","hitpoints":24,"combatLevel":17,"attackSpeed":4,"attackLevel":15,"strengthLevel":14,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"3056":{"name":"Barbarian","hitpoints":18,"combatLevel":10,"attackSpeed":4,"attackLevel":8,"strengthLevel":7,"defenceLevel":3,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"3057":{"name":"Barbarian","hitpoints":24,"combatLevel":17,"attackSpeed":4,"attackLevel":15,"strengthLevel":14,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"3058":{"name":"Barbarian","hitpoints":24,"combatLevel":17,"attackSpeed":4,"attackLevel":15,"strengthLevel":14,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"3059":{"name":"Barbarian","hitpoints":18,"combatLevel":10,"attackSpeed":4,"attackLevel":8,"strengthLevel":7,"defenceLevel":3,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"3060":{"name":"Barbarian","hitpoints":18,"combatLevel":10,"attackSpeed":4,"attackLevel":8,"strengthLevel":7,"defenceLevel":3,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"3061":{"name":"Barbarian","hitpoints":18,"combatLevel":10,"attackSpeed":4,"attackLevel":8,"strengthLevel":7,"defenceLevel":3,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"3062":{"name":"Barbarian","hitpoints":24,"combatLevel":17,"attackSpeed":4,"attackLevel":15,"strengthLevel":14,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"3064":{"name":"Barbarian","hitpoints":18,"combatLevel":10,"attackSpeed":4,"attackLevel":8,"strengthLevel":7,"defenceLevel":3,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"3065":{"name":"Barbarian","hitpoints":18,"combatLevel":10,"attackSpeed":4,"attackLevel":8,"strengthLevel":7,"defenceLevel":3,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"3066":{"name":"Barbarian","hitpoints":18,"combatLevel":10,"attackSpeed":4,"attackLevel":8,"strengthLevel":7,"defenceLevel":3,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"3067":{"name":"Barbarian","hitpoints":18,"combatLevel":10,"attackSpeed":4,"attackLevel":8,"strengthLevel":7,"defenceLevel":3,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"3068":{"name":"Barbarian","hitpoints":24,"combatLevel":15,"attackSpeed":4,"attackLevel":15,"strengthLevel":3,"defenceLevel":10,"rangeLevel":15,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"3069":{"name":"Barbarian","hitpoints":24,"combatLevel":17,"attackSpeed":4,"attackLevel":15,"strengthLevel":14,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"3070":{"name":"Barbarian","hitpoints":18,"combatLevel":10,"attackSpeed":4,"attackLevel":8,"strengthLevel":7,"defenceLevel":3,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"3071":{"name":"Barbarian","hitpoints":18,"combatLevel":10,"attackSpeed":4,"attackLevel":8,"strengthLevel":7,"defenceLevel":3,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"3072":{"name":"Barbarian","hitpoints":20,"combatLevel":9,"attackSpeed":4,"attackLevel":6,"strengthLevel":7,"defenceLevel":3,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":10,"crushDef":10,"rangeDef":5,"bonusAttack":9,"bonusStrength":16},"3073":{"name":"Goblin","hitpoints":12,"combatLevel":5,"slayerLevel":1,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"3074":{"name":"Goblin","hitpoints":12,"combatLevel":5,"slayerLevel":1,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"3075":{"name":"Goblin","hitpoints":12,"combatLevel":5,"slayerLevel":1,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"3076":{"name":"Goblin","hitpoints":12,"combatLevel":5,"slayerLevel":1,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"3078":{"name":"Man","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3079":{"name":"Man","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3080":{"name":"Man","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3081":{"name":"Man","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3082":{"name":"Man","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3083":{"name":"Woman","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3084":{"name":"Woman","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3085":{"name":"Woman","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3086":{"name":"Farmer","hitpoints":12,"combatLevel":7,"attackSpeed":4,"attackLevel":3,"strengthLevel":4,"defenceLevel":8,"rangeLevel":1,"magicLevel":1,"bonusAttack":5,"bonusStrength":6},"3087":{"name":"Farmer","hitpoints":12,"combatLevel":7,"attackSpeed":4,"attackLevel":3,"strengthLevel":4,"defenceLevel":8,"rangeLevel":1,"magicLevel":1,"bonusAttack":5,"bonusStrength":6},"3088":{"name":"Farmer","hitpoints":12,"combatLevel":7,"attackSpeed":4,"attackLevel":3,"strengthLevel":4,"defenceLevel":8,"rangeLevel":1,"magicLevel":1,"bonusAttack":5,"bonusStrength":6},"3092":{"name":"Thief","hitpoints":17,"combatLevel":16,"attackSpeed":4,"attackLevel":14,"strengthLevel":13,"defenceLevel":12,"rangeLevel":1,"magicLevel":1},"3093":{"name":"Thief","hitpoints":17,"combatLevel":16,"attackSpeed":4,"attackLevel":14,"strengthLevel":13,"defenceLevel":12,"rangeLevel":1,"magicLevel":1},"3094":{"name":"Guard","hitpoints":22,"combatLevel":21,"attackSpeed":4,"attackLevel":19,"strengthLevel":18,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"stab":4,"stabDef":18,"slashDef":25,"crushDef":19,"rangeDef":20,"bonusAttack":4,"bonusStrength":5},"3096":{"name":"Barbarian","combatLevel":7},"3097":{"name":"Wizard","hitpoints":14,"combatLevel":9,"attackSpeed":3,"attackLevel":8,"strengthLevel":8,"defenceLevel":5,"rangeLevel":1,"magicLevel":10,"magicDef":3},"3098":{"name":"Druid","hitpoints":30,"combatLevel":33,"attackSpeed":4,"attackLevel":28,"strengthLevel":28,"defenceLevel":32,"rangeLevel":1,"magicLevel":25},"3100":{"name":"Warrior woman","hitpoints":20,"combatLevel":24,"attackSpeed":4,"attackLevel":22,"strengthLevel":22,"defenceLevel":22,"rangeLevel":1,"magicLevel":1},"3101":{"name":"Man","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3102":{"name":"Barbarian","hitpoints":14,"combatLevel":8,"attackSpeed":6,"attackLevel":6,"strengthLevel":5,"defenceLevel":5,"rangeLevel":1,"magicLevel":1,"stabDef":1,"slashDef":1,"bonusAttack":8,"bonusStrength":10},"3103":{"name":"Al-Kharid warrior","hitpoints":19,"combatLevel":9,"attackSpeed":4,"attackLevel":7,"strengthLevel":5,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"stab":10,"slash":10,"crush":10,"range":10,"magic":10,"stabDef":12,"slashDef":15,"crushDef":10,"rangeDef":12,"bonusAttack":10,"bonusStrength":9},"3104":{"name":"Paladin","hitpoints":66,"combatLevel":62,"attackSpeed":5,"attackLevel":54,"strengthLevel":54,"defenceLevel":54,"rangeLevel":1,"magicLevel":1,"stabDef":87,"slashDef":84,"crushDef":76,"rangeDef":79,"bonusAttack":20,"bonusStrength":22},"3105":{"name":"Paladin","hitpoints":66,"combatLevel":62,"attackSpeed":5,"attackLevel":54,"strengthLevel":54,"defenceLevel":54,"rangeLevel":1,"magicLevel":1,"stabDef":87,"slashDef":84,"crushDef":76,"rangeDef":79,"bonusAttack":20,"bonusStrength":22},"3106":{"name":"Hero","hitpoints":82,"combatLevel":69,"attackSpeed":5,"attackLevel":54,"strengthLevel":55,"defenceLevel":54,"rangeLevel":1,"magicLevel":1,"stabDef":87,"slashDef":84,"crushDef":76,"rangeDef":79,"bonusAttack":20,"bonusStrength":22},"3108":{"name":"Knight of Ardougne","hitpoints":52,"combatLevel":46,"attackSpeed":5,"attackLevel":38,"strengthLevel":40,"defenceLevel":31,"rangeLevel":1,"magicLevel":1,"stabDef":39,"slashDef":40,"crushDef":36,"rangeDef":36,"bonusAttack":8,"bonusStrength":10},"3109":{"name":"Man","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3110":{"name":"Woman","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3111":{"name":"Knight of Ardougne","hitpoints":52,"combatLevel":46,"attackSpeed":5,"attackLevel":38,"strengthLevel":40,"defenceLevel":31,"rangeLevel":1,"magicLevel":1,"stabDef":39,"slashDef":40,"crushDef":36,"rangeDef":36,"bonusAttack":8,"bonusStrength":10},"3112":{"name":"Archer","hitpoints":50,"combatLevel":37,"attackSpeed":6,"attackLevel":20,"strengthLevel":20,"defenceLevel":20,"rangeLevel":40,"magicLevel":1,"range":19,"stabDef":18,"slashDef":23,"crushDef":27,"rangeDef":19,"magicDef":10,"bonusRangeStrength":8},"3116":{"name":"Tz-Kih","hitpoints":10,"combatLevel":22,"slayerLevel":1,"attackSpeed":4,"attackLevel":20,"strengthLevel":30,"defenceLevel":15,"rangeLevel":15,"magicLevel":30},"3117":{"name":"Tz-Kih","hitpoints":10,"combatLevel":22,"slayerLevel":1,"attackSpeed":4,"attackLevel":20,"strengthLevel":30,"defenceLevel":15,"rangeLevel":15,"magicLevel":30},"3118":{"name":"Tz-Kek","hitpoints":20,"combatLevel":45,"slayerLevel":1,"attackSpeed":4,"attackLevel":40,"strengthLevel":60,"defenceLevel":30,"rangeLevel":30,"magicLevel":60},"3119":{"name":"Tz-Kek","hitpoints":20,"combatLevel":45,"slayerLevel":1,"attackSpeed":4,"attackLevel":40,"strengthLevel":60,"defenceLevel":30,"rangeLevel":30,"magicLevel":60},"3120":{"name":"Tz-Kek","hitpoints":10,"combatLevel":22,"slayerLevel":1,"attackSpeed":4,"attackLevel":20,"strengthLevel":30,"defenceLevel":15,"rangeLevel":15,"magicLevel":30},"3121":{"name":"Tok-Xil","hitpoints":40,"combatLevel":90,"slayerLevel":1,"attackSpeed":4,"attackLevel":80,"strengthLevel":120,"defenceLevel":60,"rangeLevel":120,"magicLevel":60},"3122":{"name":"Tok-Xil","hitpoints":40,"combatLevel":90,"slayerLevel":1,"attackSpeed":4,"attackLevel":80,"strengthLevel":120,"defenceLevel":60,"rangeLevel":120,"magicLevel":60},"3123":{"name":"Yt-MejKot","hitpoints":80,"combatLevel":180,"slayerLevel":1,"attackSpeed":4,"attackLevel":160,"strengthLevel":240,"defenceLevel":120,"rangeLevel":240,"magicLevel":120},"3124":{"name":"Yt-MejKot","hitpoints":80,"combatLevel":180,"slayerLevel":1,"attackSpeed":4,"attackLevel":160,"strengthLevel":240,"defenceLevel":120,"rangeLevel":240,"magicLevel":120},"3125":{"name":"Ket-Zek","hitpoints":160,"combatLevel":360,"slayerLevel":1,"attackSpeed":4,"attackLevel":320,"strengthLevel":480,"defenceLevel":240,"rangeLevel":480,"magicLevel":240,"magic":60},"3126":{"name":"Ket-Zek","hitpoints":160,"combatLevel":360,"slayerLevel":1,"attackSpeed":4,"attackLevel":320,"strengthLevel":480,"defenceLevel":240,"rangeLevel":480,"magicLevel":240,"magic":60},"3127":{"name":"TzTok-Jad","hitpoints":250,"combatLevel":702,"slayerLevel":1,"attackSpeed":8,"attackLevel":640,"strengthLevel":960,"defenceLevel":480,"rangeLevel":960,"magicLevel":480,"magic":60},"3128":{"name":"Yt-HurKot","hitpoints":60,"combatLevel":108,"slayerLevel":1,"attackSpeed":4,"attackLevel":140,"strengthLevel":100,"defenceLevel":60,"rangeLevel":120,"magicLevel":120,"rangeDef":100,"magicDef":100},"3129":{"name":"K'ril Tsutsaroth","hitpoints":255,"combatLevel":650,"slayerLevel":1,"attackSpeed":6,"attackLevel":340,"strengthLevel":300,"defenceLevel":270,"rangeLevel":1,"magicLevel":200,"stabDef":80,"slashDef":80,"crushDef":80,"rangeDef":80,"magicDef":130,"bonusAttack":160,"bonusStrength":31,"demon":true},"3130":{"name":"Tstanon Karlak","hitpoints":142,"combatLevel":145,"slayerLevel":1,"attackSpeed":5,"attackLevel":124,"strengthLevel":118,"defenceLevel":125,"rangeLevel":50,"magicLevel":50,"bonusStrength":14,"demon":true},"3131":{"name":"Zakl'n Gritch","hitpoints":150,"combatLevel":142,"slayerLevel":1,"attackSpeed":5,"attackLevel":83,"strengthLevel":76,"defenceLevel":127,"rangeLevel":150,"magicLevel":50,"range":20,"bonusRangeStrength":20,"demon":true},"3132":{"name":"Balfrug Kreeyath","hitpoints":161,"combatLevel":151,"slayerLevel":1,"attackSpeed":5,"attackLevel":115,"strengthLevel":60,"defenceLevel":153,"rangeLevel":1,"magicLevel":150,"magicDef":10,"demon":true},"3133":{"name":"Hellhound","hitpoints":116,"combatLevel":127,"slayerLevel":1,"attackSpeed":4,"attackLevel":107,"strengthLevel":116,"defenceLevel":106,"rangeLevel":1,"magicLevel":1},"3134":{"name":"Imp","hitpoints":10,"combatLevel":7,"attackSpeed":4,"attackLevel":5,"strengthLevel":5,"defenceLevel":6,"rangeLevel":1,"magicLevel":1},"3135":{"name":"Werewolf","hitpoints":92,"combatLevel":93,"slayerLevel":1,"attackSpeed":4,"attackLevel":77,"strengthLevel":76,"defenceLevel":85,"rangeLevel":1,"magicLevel":1},"3136":{"name":"Werewolf","hitpoints":92,"combatLevel":93,"slayerLevel":1,"attackSpeed":4,"attackLevel":77,"strengthLevel":76,"defenceLevel":85,"rangeLevel":1,"magicLevel":1},"3137":{"name":"Feral Vampyre","hitpoints":60,"combatLevel":77,"slayerLevel":1,"attackSpeed":4,"attackLevel":65,"strengthLevel":66,"defenceLevel":81,"rangeLevel":1,"magicLevel":1},"3138":{"name":"Bloodveld","hitpoints":134,"combatLevel":81,"slayerLevel":50,"attackSpeed":4,"attackLevel":80,"strengthLevel":46,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"3139":{"name":"Pyrefiend","hitpoints":48,"combatLevel":48,"slayerLevel":30,"attackSpeed":4,"attackLevel":60,"strengthLevel":36,"defenceLevel":22,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":10},"3140":{"name":"Icefiend","hitpoints":20,"combatLevel":18,"slayerLevel":1,"attackSpeed":4,"attackLevel":12,"strengthLevel":16,"defenceLevel":19,"rangeLevel":1,"magicLevel":1},"3141":{"name":"Gorak","hitpoints":128,"combatLevel":149,"attackSpeed":4,"attackLevel":133,"strengthLevel":126,"defenceLevel":135,"rangeLevel":1,"magicLevel":1},"3159":{"name":"Spiritual warrior","hitpoints":100,"combatLevel":115,"slayerLevel":68,"attackSpeed":5,"attackLevel":100,"strengthLevel":100,"defenceLevel":100,"rangeLevel":1,"magicLevel":1},"3160":{"name":"Spiritual ranger","hitpoints":120,"combatLevel":118,"slayerLevel":63,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":80,"rangeLevel":140,"magicLevel":1},"3161":{"name":"Spiritual mage","hitpoints":75,"combatLevel":121,"slayerLevel":83,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":61,"rangeLevel":1,"magicLevel":180},"3162":{"name":"Kree'arra","hitpoints":255,"combatLevel":580,"slayerLevel":1,"attackSpeed":3,"attackLevel":300,"strengthLevel":200,"defenceLevel":260,"rangeLevel":380,"magicLevel":200,"range":120,"stabDef":180,"slashDef":180,"crushDef":180,"rangeDef":200,"magicDef":200,"bonusAttack":136,"bonusStrength":12,"bonusRangeStrength":50},"3163":{"name":"Wingman Skree","hitpoints":121,"combatLevel":143,"slayerLevel":1,"attackSpeed":5,"attackLevel":80,"strengthLevel":50,"defenceLevel":160,"rangeLevel":100,"magicLevel":150,"bonusAttack":45,"bonusStrength":25},"3164":{"name":"Flockleader Geerin","hitpoints":132,"combatLevel":149,"slayerLevel":1,"attackSpeed":5,"attackLevel":80,"strengthLevel":80,"defenceLevel":175,"rangeLevel":150,"magicLevel":50,"range":60,"bonusRangeStrength":35},"3165":{"name":"Flight Kilisa","hitpoints":133,"combatLevel":159,"slayerLevel":1,"attackSpeed":5,"attackLevel":124,"strengthLevel":118,"defenceLevel":175,"rangeLevel":169,"magicLevel":50,"bonusStrength":14},"3166":{"name":"Spiritual warrior","hitpoints":98,"combatLevel":123,"slayerLevel":68,"attackSpeed":5,"attackLevel":1,"strengthLevel":1,"defenceLevel":120,"rangeLevel":141,"magicLevel":1,"stabDef":23,"slashDef":25,"crushDef":13,"rangeDef":35,"magicDef":35},"3167":{"name":"Spiritual ranger","hitpoints":89,"combatLevel":127,"slayerLevel":63,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"stabDef":17,"slashDef":16,"crushDef":8,"rangeDef":41,"magicDef":35},"3168":{"name":"Spiritual mage","hitpoints":75,"combatLevel":123,"slayerLevel":83,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":111,"rangeLevel":1,"magicLevel":150,"stabDef":9,"slashDef":12,"crushDef":5,"rangeDef":28,"magicDef":45},"3169":{"name":"Aviansie","hitpoints":70,"combatLevel":69,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":70,"rangeLevel":71,"magicLevel":1},"3170":{"name":"Aviansie","hitpoints":83,"combatLevel":79,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":70,"rangeLevel":85,"magicLevel":1},"3171":{"name":"Aviansie","hitpoints":86,"combatLevel":84,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":70,"rangeLevel":93,"magicLevel":1},"3172":{"name":"Aviansie","hitpoints":86,"combatLevel":83,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":100,"rangeLevel":76,"magicLevel":1},"3173":{"name":"Aviansie","hitpoints":95,"combatLevel":92,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":100,"rangeLevel":90,"magicLevel":1},"3174":{"name":"Aviansie","hitpoints":98,"combatLevel":97,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":100,"rangeLevel":99,"magicLevel":1},"3175":{"name":"Aviansie","hitpoints":124,"combatLevel":137,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":160,"rangeLevel":136,"magicLevel":1},"3176":{"name":"Aviansie","hitpoints":139,"combatLevel":148,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":160,"rangeLevel":151,"magicLevel":1},"3177":{"name":"Aviansie","hitpoints":63,"combatLevel":71,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":55,"rangeLevel":86,"magicLevel":1},"3178":{"name":"Aviansie","hitpoints":67,"combatLevel":73,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":55,"rangeLevel":89,"magicLevel":1},"3179":{"name":"Aviansie","hitpoints":77,"combatLevel":79,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":55,"rangeLevel":96,"magicLevel":1},"3180":{"name":"Aviansie","hitpoints":69,"combatLevel":89,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":115,"rangeLevel":89,"magicLevel":1},"3181":{"name":"Aviansie","hitpoints":75,"combatLevel":94,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":115,"rangeLevel":96,"magicLevel":1},"3182":{"name":"Aviansie","hitpoints":79,"combatLevel":97,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":115,"rangeLevel":101,"magicLevel":1},"3183":{"name":"Aviansie","hitpoints":115,"combatLevel":131,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":175,"rangeLevel":143,"magicLevel":1},"3184":{"name":"Dagannoth spawn","hitpoints":35,"combatLevel":42,"slayerLevel":1,"attackSpeed":4,"attackLevel":50,"strengthLevel":35,"defenceLevel":25,"rangeLevel":1,"magicLevel":1},"3185":{"name":"Dagannoth","hitpoints":95,"combatLevel":90,"slayerLevel":1,"attackSpeed":4,"attackLevel":76,"strengthLevel":78,"defenceLevel":65,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":50,"rangeDef":50,"magicDef":50,"bonusAttack":50,"bonusStrength":50},"3200":{"name":"Arhein","hitpoints":6,"combatLevel":3,"slayerLevel":1,"attackSpeed":4,"attackLevel":2,"strengthLevel":3,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"3233":{"name":"Leech","hitpoints":45,"combatLevel":52,"attackSpeed":4,"attackLevel":80,"strengthLevel":20,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"3234":{"name":"Feral Vampyre","hitpoints":50,"combatLevel":72,"slayerLevel":1,"attackSpeed":4,"attackLevel":65,"strengthLevel":70,"defenceLevel":65,"rangeLevel":1,"magicLevel":50},"3237":{"name":"Feral Vampyre","hitpoints":40,"combatLevel":61,"slayerLevel":1,"attackSpeed":4,"attackLevel":55,"strengthLevel":60,"defenceLevel":55,"rangeLevel":1,"magicLevel":40},"3245":{"name":"Guard","hitpoints":22,"combatLevel":20,"attackSpeed":5,"attackLevel":19,"strengthLevel":18,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"stab":4,"stabDef":18,"slashDef":25,"crushDef":19,"rangeDef":20,"bonusAttack":4,"bonusStrength":5},"3251":{"name":"Watchman","hitpoints":22,"combatLevel":33,"attackSpeed":6,"attackLevel":31,"strengthLevel":31,"defenceLevel":31,"rangeLevel":1,"magicLevel":1,"stabDef":24,"slashDef":14,"crushDef":19,"rangeDef":16},"3252":{"name":"Soldier","hitpoints":22,"combatLevel":28,"attackSpeed":5,"attackLevel":26,"strengthLevel":25,"defenceLevel":26,"rangeLevel":1,"magicLevel":1,"stabDef":24,"slashDef":14,"crushDef":19,"rangeDef":16,"bonusAttack":8,"bonusStrength":10},"3255":{"name":"Shipyard worker","hitpoints":10,"combatLevel":11,"attackSpeed":6,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"bonusAttack":6,"bonusStrength":6},"3256":{"name":"Shipyard worker","hitpoints":10,"combatLevel":11,"attackSpeed":6,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"bonusAttack":6,"bonusStrength":6},"3259":{"name":"Market Guard","hitpoints":22,"combatLevel":20,"attackSpeed":5,"attackLevel":17,"strengthLevel":18,"defenceLevel":13,"rangeLevel":1,"magicLevel":1,"stabDef":24,"slashDef":14,"crushDef":19,"rangeDef":16,"magicDef":4,"bonusAttack":9,"bonusStrength":7},"3260":{"name":"Man","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3263":{"name":"Drunken man","hitpoints":7,"combatLevel":3,"attackSpeed":4,"attackLevel":1,"strengthLevel":3,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3264":{"name":"Man","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3265":{"name":"Man","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3266":{"name":"Man","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3267":{"name":"Woman","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3268":{"name":"Woman","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3269":{"name":"Guard","hitpoints":22,"combatLevel":21,"attackSpeed":4,"attackLevel":19,"strengthLevel":18,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"stab":4,"stabDef":18,"slashDef":25,"crushDef":19,"rangeDef":20,"bonusAttack":4,"bonusStrength":5},"3270":{"name":"Guard","hitpoints":22,"combatLevel":22,"attackSpeed":6,"attackLevel":19,"strengthLevel":18,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"stab":4,"stabDef":18,"slashDef":25,"crushDef":19,"rangeDef":20,"bonusAttack":4,"bonusStrength":5},"3271":{"name":"Guard","hitpoints":22,"combatLevel":19,"attackSpeed":6,"attackLevel":19,"strengthLevel":18,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"stab":4,"stabDef":18,"slashDef":25,"crushDef":19,"rangeDef":20,"bonusAttack":4,"bonusStrength":5},"3272":{"name":"Guard","hitpoints":22,"combatLevel":22,"attackSpeed":6,"attackLevel":19,"strengthLevel":18,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"stab":4,"stabDef":18,"slashDef":25,"crushDef":19,"rangeDef":20,"bonusAttack":4,"bonusStrength":5},"3273":{"name":"Guard","hitpoints":22,"combatLevel":22,"attackSpeed":6,"attackLevel":19,"strengthLevel":18,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"stab":4,"stabDef":18,"slashDef":25,"crushDef":19,"rangeDef":20,"bonusAttack":4,"bonusStrength":5},"3274":{"name":"Guard","hitpoints":22,"combatLevel":22,"attackSpeed":6,"attackLevel":19,"strengthLevel":18,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"stab":4,"stabDef":18,"slashDef":25,"crushDef":19,"rangeDef":20,"bonusAttack":4,"bonusStrength":5},"3275":{"name":"Gardener","hitpoints":7,"combatLevel":4,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":7,"rangeLevel":1,"magicLevel":1},"3276":{"name":"Gardener","hitpoints":7,"combatLevel":3,"attackSpeed":4,"attackLevel":2,"strengthLevel":1,"defenceLevel":5,"rangeLevel":1,"magicLevel":1},"3279":{"name":"Cuffs","hitpoints":7,"combatLevel":3,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"magicDef":5},"3280":{"name":"Narf","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3281":{"name":"Rusty","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3282":{"name":"Jeff","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3283":{"name":"Guard","hitpoints":22,"combatLevel":19,"attackSpeed":6,"attackLevel":19,"strengthLevel":18,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"stab":4,"stabDef":18,"slashDef":25,"crushDef":19,"rangeDef":20,"bonusAttack":4,"bonusStrength":5},"3284":{"name":"Hengel","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3285":{"name":"Anja","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3286":{"name":"Hobgoblin","hitpoints":29,"combatLevel":28,"slayerLevel":1,"attackSpeed":4,"attackLevel":22,"strengthLevel":24,"defenceLevel":24,"rangeLevel":1,"magicLevel":1},"3287":{"name":"Hobgoblin","hitpoints":29,"combatLevel":28,"slayerLevel":1,"attackSpeed":4,"attackLevel":22,"strengthLevel":24,"defenceLevel":24,"rangeLevel":1,"magicLevel":1},"3288":{"name":"Hobgoblin","hitpoints":29,"combatLevel":28,"slayerLevel":1,"attackSpeed":4,"attackLevel":22,"strengthLevel":24,"defenceLevel":24,"rangeLevel":1,"magicLevel":1},"3289":{"name":"Hobgoblin","hitpoints":29,"combatLevel":28,"slayerLevel":1,"attackSpeed":4,"attackLevel":22,"strengthLevel":24,"defenceLevel":24,"rangeLevel":1,"magicLevel":1},"3313":{"name":"Giant rat","hitpoints":5,"combatLevel":3,"slayerLevel":1,"attackSpeed":4,"attackLevel":2,"strengthLevel":3,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"3314":{"name":"Giant rat","hitpoints":5,"combatLevel":3,"slayerLevel":1,"attackSpeed":4,"attackLevel":2,"strengthLevel":3,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"3315":{"name":"Giant rat","hitpoints":5,"combatLevel":3,"slayerLevel":1,"attackSpeed":4,"attackLevel":2,"strengthLevel":3,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"3328":{"name":"Earth Warrior Champion","hitpoints":108,"combatLevel":102,"attackSpeed":4,"attackLevel":84,"strengthLevel":84,"defenceLevel":84,"rangeLevel":1,"magicLevel":1},"3329":{"name":"Giant Champion","hitpoints":70,"combatLevel":56,"attackSpeed":4,"attackLevel":36,"strengthLevel":44,"defenceLevel":52,"rangeLevel":1,"magicLevel":1},"3330":{"name":"Ghoul Champion","hitpoints":100,"combatLevel":85,"attackSpeed":4},"3353":{"name":"Goblin Champion","hitpoints":32,"combatLevel":24,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":14,"rangeLevel":1,"magicLevel":26},"3354":{"name":"Hobgoblin Champion","hitpoints":58,"combatLevel":56,"attackSpeed":4,"attackLevel":44,"strengthLevel":48,"defenceLevel":48,"rangeLevel":44,"magicLevel":1},"3355":{"name":"Imp Champion","hitpoints":40,"combatLevel":14,"attackSpeed":4,"attackLevel":5,"strengthLevel":5,"defenceLevel":5,"rangeLevel":5,"magicLevel":1},"3356":{"name":"Jogre Champion","hitpoints":120,"combatLevel":107,"attackSpeed":4,"attackLevel":86,"strengthLevel":86,"defenceLevel":86,"rangeLevel":1,"magicLevel":1},"3357":{"name":"Lesser Demon Champion","hitpoints":148,"combatLevel":162,"attackSpeed":4,"attackLevel":136,"strengthLevel":140,"defenceLevel":142,"rangeLevel":1,"magicLevel":136},"3358":{"name":"Skeleton Champion","hitpoints":58,"combatLevel":40,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":34,"rangeLevel":36,"magicLevel":1},"3359":{"name":"Zombies Champion","hitpoints":60,"combatLevel":51,"attackSpeed":4,"attackLevel":38,"strengthLevel":42,"defenceLevel":42,"rangeLevel":1,"magicLevel":1},"3360":{"name":"Leon d'Cour","hitpoints":123,"combatLevel":141,"attackSpeed":4},"3361":{"name":"Kourend guard","hitpoints":800,"combatLevel":1337,"attackSpeed":4,"attackLevel":800,"strengthLevel":400,"defenceLevel":300,"rangeLevel":1,"magicLevel":1,"stabDef":8,"slashDef":9,"crushDef":7,"rangeDef":8,"bonusAttack":60,"bonusStrength":7},"3400":{"name":"Culinaromancer","hitpoints":150,"combatLevel":75,"attackSpeed":4,"attackLevel":10,"strengthLevel":100,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"3420":{"name":"Rabbit","hitpoints":5,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3421":{"name":"Rabbit","hitpoints":5,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3422":{"name":"Rabbit","hitpoints":5,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3423":{"name":"Grizzly bear","hitpoints":35,"combatLevel":42,"slayerLevel":1,"attackSpeed":4,"attackLevel":40,"strengthLevel":36,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"3424":{"name":"Grizzly bear cub","hitpoints":35,"combatLevel":33,"slayerLevel":1,"attackSpeed":4,"attackLevel":30,"strengthLevel":26,"defenceLevel":25,"rangeLevel":1,"magicLevel":1},"3425":{"name":"Grizzly bear cub","hitpoints":35,"combatLevel":36,"slayerLevel":1,"attackSpeed":4,"attackLevel":32,"strengthLevel":32,"defenceLevel":28,"rangeLevel":1,"magicLevel":1},"3426":{"name":"Dire Wolf","hitpoints":85,"combatLevel":88,"slayerLevel":1,"attackSpeed":4,"attackLevel":75,"strengthLevel":75,"defenceLevel":75,"rangeLevel":1,"magicLevel":1},"3428":{"name":"Iorwerth Archer","hitpoints":105,"combatLevel":90,"slayerLevel":1,"attackSpeed":5,"attackLevel":10,"strengthLevel":10,"defenceLevel":80,"rangeLevel":90,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60},"3429":{"name":"Iorwerth Warrior","hitpoints":105,"combatLevel":108,"slayerLevel":1,"attackSpeed":4,"attackLevel":95,"strengthLevel":95,"defenceLevel":80,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60},"3433":{"name":"Tyras guard","hitpoints":110,"combatLevel":110,"attackSpeed":5,"attackLevel":85,"strengthLevel":95,"defenceLevel":100,"magicLevel":1,"stabDef":87,"slashDef":84,"crushDef":76,"rangeDef":79,"bonusAttack":20,"bonusStrength":30},"3434":{"name":"Tyras guard","hitpoints":110,"combatLevel":110,"attackSpeed":5,"attackLevel":85,"strengthLevel":95,"defenceLevel":100,"magicLevel":1,"stabDef":87,"slashDef":84,"crushDef":76,"rangeDef":79,"bonusAttack":20,"bonusStrength":30},"3443":{"name":"Lucien","hitpoints":17,"combatLevel":14,"attackSpeed":4,"attackLevel":12,"strengthLevel":11,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"stabDef":6,"slashDef":8,"crushDef":7,"rangeDef":4,"bonusAttack":5,"bonusStrength":4},"3444":{"name":"Lucien","hitpoints":17,"combatLevel":14,"attackSpeed":4,"attackLevel":12,"strengthLevel":11,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"stabDef":6,"slashDef":8,"crushDef":7,"rangeDef":4,"bonusAttack":5,"bonusStrength":4},"3445":{"name":"Guardian of Armadyl","hitpoints":50,"combatLevel":45,"attackSpeed":5,"attackLevel":37,"strengthLevel":37,"defenceLevel":37,"rangeLevel":1,"magicLevel":1,"stabDef":43,"slashDef":55,"crushDef":50,"rangeDef":51,"bonusAttack":14,"bonusStrength":16},"3446":{"name":"Guardian of Armadyl","hitpoints":40,"combatLevel":43,"attackSpeed":5,"attackLevel":37,"strengthLevel":37,"defenceLevel":37,"rangeLevel":1,"magicLevel":1,"stabDef":43,"slashDef":55,"crushDef":50,"rangeDef":51,"bonusAttack":14,"bonusStrength":16},"3448":{"name":"Fire Warrior of Lesarkus","hitpoints":59,"combatLevel":84,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":78,"rangeLevel":1,"magicLevel":62,"stabDef":34,"slashDef":37,"crushDef":35,"rangeDef":35},"3449":{"name":"Shadow Hound","hitpoints":62,"combatLevel":63,"slayerLevel":1,"attackSpeed":4,"attackLevel":53,"strengthLevel":54,"defenceLevel":54,"rangeLevel":1,"magicLevel":1},"3456":{"name":"Fareed","hitpoints":130,"combatLevel":167,"attackSpeed":4,"attackLevel":190,"strengthLevel":120,"defenceLevel":135,"rangeLevel":1,"magicLevel":1,"stabDef":100,"slashDef":100,"crushDef":100,"bonusStrength":120},"3458":{"name":"Kamil","hitpoints":130,"combatLevel":154,"slayerLevel":1,"attackSpeed":4,"attackLevel":190,"strengthLevel":80,"defenceLevel":135,"rangeLevel":1,"magicLevel":1,"stabDef":35,"slashDef":60,"crushDef":35,"bonusAttack":60,"bonusStrength":100},"3459":{"name":"Dessous","hitpoints":200,"combatLevel":139,"slayerLevel":1,"attackSpeed":3,"attackLevel":99,"strengthLevel":99,"defenceLevel":99,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":150,"crushDef":150,"bonusAttack":50,"bonusStrength":50},"3460":{"name":"Dessous","hitpoints":200,"combatLevel":139,"slayerLevel":1,"attackSpeed":3,"attackLevel":99,"strengthLevel":99,"defenceLevel":99,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":150,"crushDef":150,"bonusAttack":50,"bonusStrength":50},"3473":{"name":"The Inadequacy","hitpoints":180,"combatLevel":343,"attackSpeed":4,"attackLevel":564,"strengthLevel":170,"defenceLevel":240,"rangeLevel":170,"magicLevel":1},"3474":{"name":"The Everlasting","hitpoints":230,"combatLevel":223,"attackSpeed":6,"attackLevel":187,"strengthLevel":231,"defenceLevel":120,"rangeLevel":1,"magicLevel":1},"3475":{"name":"The Untouchable","hitpoints":90,"combatLevel":274,"attackSpeed":6,"attackLevel":187,"strengthLevel":255,"defenceLevel":434,"rangeLevel":1,"magicLevel":1},"3476":{"name":"The Illusive","hitpoints":140,"combatLevel":108,"attackSpeed":6},"3477":{"name":"A Doubt","hitpoints":50,"combatLevel":78,"attackSpeed":6},"3478":{"name":"The Illusive","hitpoints":140,"combatLevel":108,"attackSpeed":6},"3481":{"name":"Count Draynor","hitpoints":35,"combatLevel":34,"slayerLevel":1,"attackSpeed":4,"attackLevel":30,"strengthLevel":25,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"stabDef":2,"slashDef":1,"crushDef":3},"3482":{"name":"Count Draynor","hitpoints":35,"combatLevel":34,"slayerLevel":1,"attackSpeed":4,"attackLevel":30,"strengthLevel":25,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"stabDef":2,"slashDef":1,"crushDef":3},"3484":{"name":"Monk of Zamorak","hitpoints":20,"combatLevel":22,"attackSpeed":4,"attackLevel":18,"strengthLevel":18,"defenceLevel":22,"rangeLevel":1,"magicLevel":25},"3485":{"name":"Monk of Zamorak","hitpoints":10,"combatLevel":17,"attackSpeed":4,"attackLevel":8,"strengthLevel":8,"defenceLevel":12,"rangeLevel":1,"magicLevel":25},"3486":{"name":"Monk of Zamorak","hitpoints":25,"combatLevel":30,"attackSpeed":4,"attackLevel":25,"strengthLevel":25,"defenceLevel":25,"rangeLevel":1,"magicLevel":40},"3508":{"name":"Bouncer","hitpoints":120,"combatLevel":160,"attackSpeed":4,"attackLevel":145,"strengthLevel":145,"defenceLevel":145,"rangeLevel":1,"magicLevel":1},"3509":{"name":"Bouncer","hitpoints":120,"combatLevel":160,"attackSpeed":4,"attackLevel":145,"strengthLevel":145,"defenceLevel":145,"rangeLevel":1,"magicLevel":1},"3517":{"name":"Renegade Knight","hitpoints":48,"combatLevel":37,"attackSpeed":4,"attackLevel":28,"strengthLevel":28,"defenceLevel":28,"rangeLevel":1,"magicLevel":1,"stabDef":99,"slashDef":82,"crushDef":62,"bonusAttack":20,"bonusStrength":16},"3518":{"name":"Thrantax the Mighty","hitpoints":80,"combatLevel":92,"attackSpeed":4,"attackLevel":80,"strengthLevel":80,"defenceLevel":80,"rangeLevel":1,"magicLevel":1},"3527":{"name":"Sir Mordred","hitpoints":38,"combatLevel":39,"attackSpeed":4,"attackLevel":33,"strengthLevel":33,"defenceLevel":33,"rangeLevel":1,"magicLevel":1,"stabDef":99,"slashDef":82,"crushDef":45,"bonusAttack":20,"bonusStrength":16},"3544":{"name":"Desert snake","hitpoints":6,"combatLevel":5,"attackSpeed":4,"attackLevel":4,"strengthLevel":5,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"3549":{"name":"Menaphite Thug","hitpoints":60,"combatLevel":55,"attackSpeed":4,"attackLevel":60,"strengthLevel":50,"defenceLevel":20,"stabDef":9,"slashDef":8,"crushDef":10,"bonusAttack":4,"bonusStrength":9},"3550":{"name":"Menaphite Thug","hitpoints":60,"combatLevel":55,"attackSpeed":4,"attackLevel":60,"strengthLevel":50,"defenceLevel":20,"stabDef":9,"slashDef":8,"crushDef":10,"bonusAttack":4,"bonusStrength":9},"3551":{"name":"Tough Guy","hitpoints":75,"combatLevel":75,"attackSpeed":4,"attackLevel":85,"strengthLevel":50,"defenceLevel":50,"magicLevel":80,"stabDef":9,"slashDef":8,"crushDef":10,"bonusAttack":9,"bonusStrength":9,"poisonImmune":true},"3565":{"name":"Skeleton","combatLevel":22,"slayerLevel":1,"attackSpeed":4,"undead":true},"3600":{"name":"Frogeel","hitpoints":90,"combatLevel":103,"attackSpeed":4,"attackLevel":91,"strengthLevel":89,"defenceLevel":90,"rangeLevel":1,"magicLevel":1},"3601":{"name":"Unicow","hitpoints":24,"combatLevel":25,"attackSpeed":4,"attackLevel":18,"strengthLevel":26,"defenceLevel":22,"rangeLevel":1,"magicLevel":1},"3602":{"name":"Spidine","hitpoints":35,"combatLevel":42,"attackSpeed":4,"attackLevel":37,"strengthLevel":40,"defenceLevel":36,"rangeLevel":1,"magicLevel":1},"3603":{"name":"Swordchick","hitpoints":35,"combatLevel":46,"attackSpeed":4,"attackLevel":41,"strengthLevel":42,"defenceLevel":45,"rangeLevel":1,"magicLevel":1},"3604":{"name":"Jubster","hitpoints":60,"combatLevel":87,"attackSpeed":4,"attackLevel":82,"strengthLevel":78,"defenceLevel":81,"rangeLevel":1,"magicLevel":1},"3605":{"name":"Newtroost","hitpoints":18,"combatLevel":19,"attackSpeed":4,"attackLevel":18,"strengthLevel":16,"defenceLevel":17,"rangeLevel":1,"magicLevel":1},"3607":{"name":"Dungeon rat","hitpoints":12,"combatLevel":12,"slayerLevel":1,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"3608":{"name":"Dungeon rat","hitpoints":12,"combatLevel":12,"slayerLevel":1,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"3609":{"name":"Dungeon rat","hitpoints":12,"combatLevel":12,"slayerLevel":1,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"3612":{"name":"Possessed pickaxe","hitpoints":40,"combatLevel":50,"attackSpeed":4,"attackLevel":40,"strengthLevel":55,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":15,"slashDef":10,"crushDef":5,"rangeDef":10,"magicDef":5},"3615":{"name":"Skeletal miner","hitpoints":39,"combatLevel":42,"slayerLevel":1,"attackSpeed":4,"attackLevel":35,"strengthLevel":37,"defenceLevel":38,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":11,"rangeDef":4,"magicDef":1,"bonusAttack":15,"bonusStrength":14,"undead":true},"3616":{"name":"Treus Dayth","hitpoints":100,"combatLevel":95,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5},"3651":{"name":"Gardener","hitpoints":7,"combatLevel":4,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":7,"rangeLevel":1,"magicLevel":1},"3661":{"name":"Chicken","hitpoints":3,"combatLevel":1,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3662":{"name":"Chicken","hitpoints":3,"combatLevel":1,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3663":{"name":"Rooster","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3664":{"name":"Rabbit","hitpoints":5,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3665":{"name":"Rabbit","hitpoints":5,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3674":{"name":"Ragnar","hitpoints":1,"combatLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3675":{"name":"Einar","hitpoints":1,"combatLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3676":{"name":"Alrik","hitpoints":1,"combatLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3677":{"name":"Thorhild","hitpoints":1,"combatLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3678":{"name":"Halla","hitpoints":1,"combatLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3681":{"name":"Rannveig","hitpoints":1,"combatLevel":2,"attackSpeed":4,"attackLevel":3,"strengthLevel":3,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"3682":{"name":"Thora","hitpoints":1,"combatLevel":2,"attackSpeed":4,"attackLevel":3,"strengthLevel":3,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"3683":{"name":"Valgerd","hitpoints":1,"combatLevel":2,"attackSpeed":4,"attackLevel":3,"strengthLevel":3,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"3684":{"name":"Skraeling","hitpoints":1,"combatLevel":2,"attackSpeed":4,"attackLevel":3,"strengthLevel":3,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"3685":{"name":"Broddi","hitpoints":1,"combatLevel":2,"attackSpeed":4,"attackLevel":3,"strengthLevel":3,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"3686":{"name":"Skraeling","hitpoints":1,"combatLevel":2,"attackSpeed":4,"attackLevel":3,"strengthLevel":3,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"3687":{"name":"Ragnvald","hitpoints":1,"combatLevel":2,"attackSpeed":4,"attackLevel":3,"strengthLevel":3,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"3690":{"name":"Vampyre Juvinate","hitpoints":85,"combatLevel":54,"attackSpeed":4,"attackLevel":40,"strengthLevel":30,"defenceLevel":40,"rangeLevel":1,"magicLevel":1},"3691":{"name":"Vampyre Juvinate","hitpoints":85,"combatLevel":54,"attackSpeed":4,"attackLevel":40,"strengthLevel":30,"defenceLevel":40,"rangeLevel":1,"magicLevel":1},"3692":{"name":"Vampyre Juvenile","hitpoints":60,"combatLevel":45,"slayerLevel":1,"attackSpeed":4,"attackLevel":40,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"3693":{"name":"Vampyre Juvenile","hitpoints":60,"combatLevel":45,"slayerLevel":1,"attackSpeed":4,"attackLevel":40,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"3694":{"name":"Vampyre Juvinate","hitpoints":85,"combatLevel":54,"attackSpeed":4,"attackLevel":40,"strengthLevel":30,"defenceLevel":40,"rangeLevel":1,"magicLevel":1},"3695":{"name":"Vampyre Juvinate","hitpoints":85,"combatLevel":54,"attackSpeed":4,"attackLevel":40,"strengthLevel":30,"defenceLevel":40,"rangeLevel":1,"magicLevel":1},"3696":{"name":"Vampyre Juvenile","hitpoints":60,"combatLevel":45,"slayerLevel":1,"attackSpeed":4,"attackLevel":40,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"3697":{"name":"Vampyre Juvenile","hitpoints":60,"combatLevel":45,"slayerLevel":1,"attackSpeed":4,"attackLevel":40,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"3698":{"name":"Vampyre Juvinate","hitpoints":85,"combatLevel":54,"attackSpeed":4,"attackLevel":40,"strengthLevel":30,"defenceLevel":40,"rangeLevel":1,"magicLevel":1},"3699":{"name":"Vampyre Juvinate","hitpoints":85,"combatLevel":54,"attackSpeed":4,"attackLevel":40,"strengthLevel":30,"defenceLevel":40,"rangeLevel":1,"magicLevel":1},"3707":{"name":"Feral Vampyre","hitpoints":80,"combatLevel":64,"slayerLevel":1,"attackSpeed":4,"attackLevel":55,"strengthLevel":30,"defenceLevel":60,"rangeLevel":1,"magicLevel":1},"3708":{"name":"Feral Vampyre","hitpoints":80,"combatLevel":64,"slayerLevel":1,"attackSpeed":4,"attackLevel":55,"strengthLevel":30,"defenceLevel":60,"rangeLevel":1,"magicLevel":1},"3709":{"name":"Vyrewatch","hitpoints":90,"combatLevel":105,"slayerLevel":1,"attackSpeed":4,"attackLevel":105,"strengthLevel":86,"defenceLevel":85,"rangeLevel":105,"magicLevel":105},"3710":{"name":"Vyrewatch","hitpoints":90,"combatLevel":110,"slayerLevel":1,"attackSpeed":4,"attackLevel":110,"strengthLevel":96,"defenceLevel":85,"rangeLevel":110,"magicLevel":110},"3711":{"name":"Vyrewatch","hitpoints":105,"combatLevel":120,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":106,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3712":{"name":"Vyrewatch","hitpoints":110,"combatLevel":125,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":116,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3713":{"name":"Vyrewatch","hitpoints":90,"combatLevel":105,"slayerLevel":1,"attackSpeed":4,"attackLevel":105,"strengthLevel":86,"defenceLevel":85,"rangeLevel":105,"magicLevel":105},"3714":{"name":"Vyrewatch","hitpoints":90,"combatLevel":110,"slayerLevel":1,"attackSpeed":4,"attackLevel":110,"strengthLevel":96,"defenceLevel":85,"rangeLevel":110,"magicLevel":110},"3715":{"name":"Vyrewatch","hitpoints":105,"combatLevel":120,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":106,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3716":{"name":"Vyrewatch","hitpoints":110,"combatLevel":125,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":116,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3717":{"name":"Vyrewatch","hitpoints":90,"combatLevel":105,"slayerLevel":1,"attackSpeed":4,"attackLevel":105,"strengthLevel":86,"defenceLevel":85,"rangeLevel":105,"magicLevel":105},"3718":{"name":"Vyrewatch","hitpoints":90,"combatLevel":110,"slayerLevel":1,"attackSpeed":4,"attackLevel":110,"strengthLevel":96,"defenceLevel":85,"rangeLevel":110,"magicLevel":110},"3719":{"name":"Vyrewatch","hitpoints":105,"combatLevel":120,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":106,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3720":{"name":"Vyrewatch","hitpoints":110,"combatLevel":125,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":116,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3721":{"name":"Vyrewatch","hitpoints":90,"combatLevel":105,"slayerLevel":1,"attackSpeed":4,"attackLevel":105,"strengthLevel":86,"defenceLevel":85,"rangeLevel":105,"magicLevel":105},"3722":{"name":"Vyrewatch","hitpoints":90,"combatLevel":110,"slayerLevel":1,"attackSpeed":4,"attackLevel":110,"strengthLevel":96,"defenceLevel":85,"rangeLevel":110,"magicLevel":110},"3723":{"name":"Vyrewatch","hitpoints":105,"combatLevel":120,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":106,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3724":{"name":"Vyrewatch","hitpoints":110,"combatLevel":125,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":116,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3725":{"name":"Vyrewatch","hitpoints":90,"combatLevel":105,"slayerLevel":1,"attackSpeed":4,"attackLevel":105,"strengthLevel":86,"defenceLevel":85,"rangeLevel":105,"magicLevel":105},"3726":{"name":"Vyrewatch","hitpoints":90,"combatLevel":110,"slayerLevel":1,"attackSpeed":4,"attackLevel":110,"strengthLevel":96,"defenceLevel":85,"rangeLevel":110,"magicLevel":110},"3727":{"name":"Vyrewatch","hitpoints":105,"combatLevel":120,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":106,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3728":{"name":"Vyrewatch","hitpoints":110,"combatLevel":125,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":116,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3729":{"name":"Vyrewatch","hitpoints":90,"combatLevel":105,"slayerLevel":1,"attackSpeed":4,"attackLevel":105,"strengthLevel":86,"defenceLevel":85,"rangeLevel":105,"magicLevel":105},"3730":{"name":"Vyrewatch","hitpoints":90,"combatLevel":110,"slayerLevel":1,"attackSpeed":4,"attackLevel":110,"strengthLevel":96,"defenceLevel":85,"rangeLevel":110,"magicLevel":110},"3731":{"name":"Vyrewatch","hitpoints":105,"combatLevel":120,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":106,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3732":{"name":"Vyrewatch","hitpoints":110,"combatLevel":125,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":116,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3734":{"name":"Vanstrom Klause","hitpoints":155,"combatLevel":169,"attackSpeed":8,"attackLevel":150,"strengthLevel":136,"defenceLevel":150,"rangeLevel":150,"magicLevel":150,"poisonImmune":true,"venomImmune":true},"3735":{"name":"Vanstrom Klause","hitpoints":155,"combatLevel":169,"attackSpeed":8,"attackLevel":150,"strengthLevel":136,"defenceLevel":150,"rangeLevel":150,"magicLevel":150,"poisonImmune":true,"venomImmune":true},"3736":{"name":"Vanstrom Klause","hitpoints":155,"combatLevel":169,"attackSpeed":8,"attackLevel":150,"strengthLevel":136,"defenceLevel":150,"rangeLevel":150,"magicLevel":150,"poisonImmune":true,"venomImmune":true},"3737":{"name":"Vanstrom Klause","hitpoints":155,"combatLevel":169,"attackSpeed":8,"attackLevel":150,"strengthLevel":136,"defenceLevel":150,"rangeLevel":150,"magicLevel":150,"poisonImmune":true,"venomImmune":true},"3738":{"name":"Vanstrom Klause","hitpoints":155,"combatLevel":169,"attackSpeed":8,"attackLevel":150,"strengthLevel":136,"defenceLevel":150,"rangeLevel":150,"magicLevel":150,"poisonImmune":true,"venomImmune":true},"3739":{"name":"Vanstrom Klause","hitpoints":155,"combatLevel":169,"attackSpeed":8,"attackLevel":150,"strengthLevel":136,"defenceLevel":150,"rangeLevel":150,"magicLevel":150,"poisonImmune":true,"venomImmune":true},"3748":{"name":"Vyrewatch","hitpoints":90,"combatLevel":105,"slayerLevel":1,"attackSpeed":4,"attackLevel":105,"strengthLevel":86,"defenceLevel":85,"rangeLevel":105,"magicLevel":105},"3749":{"name":"Vyrewatch","hitpoints":90,"combatLevel":110,"slayerLevel":1,"attackSpeed":4,"attackLevel":110,"strengthLevel":96,"defenceLevel":85,"rangeLevel":110,"magicLevel":110},"3750":{"name":"Vyrewatch","hitpoints":105,"combatLevel":120,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":106,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3751":{"name":"Vyrewatch","hitpoints":110,"combatLevel":125,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":116,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3752":{"name":"Vyrewatch","hitpoints":90,"combatLevel":105,"slayerLevel":1,"attackSpeed":4,"attackLevel":105,"strengthLevel":86,"defenceLevel":85,"rangeLevel":105,"magicLevel":105},"3753":{"name":"Vyrewatch","hitpoints":90,"combatLevel":110,"slayerLevel":1,"attackSpeed":4,"attackLevel":110,"strengthLevel":96,"defenceLevel":85,"rangeLevel":110,"magicLevel":110},"3754":{"name":"Vyrewatch","hitpoints":105,"combatLevel":120,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":106,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3755":{"name":"Vyrewatch","hitpoints":110,"combatLevel":125,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":116,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3756":{"name":"Vyrewatch","hitpoints":90,"combatLevel":105,"slayerLevel":1,"attackSpeed":4,"attackLevel":105,"strengthLevel":86,"defenceLevel":85,"rangeLevel":105,"magicLevel":105},"3757":{"name":"Vyrewatch","hitpoints":90,"combatLevel":110,"slayerLevel":1,"attackSpeed":4,"attackLevel":110,"strengthLevel":96,"defenceLevel":85,"rangeLevel":110,"magicLevel":110},"3758":{"name":"Vyrewatch","hitpoints":105,"combatLevel":120,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":106,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3759":{"name":"Vyrewatch","hitpoints":110,"combatLevel":125,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":116,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3760":{"name":"Vyrewatch","hitpoints":90,"combatLevel":105,"slayerLevel":1,"attackSpeed":4,"attackLevel":105,"strengthLevel":86,"defenceLevel":85,"rangeLevel":105,"magicLevel":105},"3761":{"name":"Vyrewatch","hitpoints":90,"combatLevel":110,"slayerLevel":1,"attackSpeed":4,"attackLevel":110,"strengthLevel":96,"defenceLevel":85,"rangeLevel":110,"magicLevel":110},"3762":{"name":"Vyrewatch","hitpoints":105,"combatLevel":120,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":106,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3763":{"name":"Vyrewatch","hitpoints":110,"combatLevel":125,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":116,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3851":{"name":"Moss giant","hitpoints":85,"combatLevel":48,"slayerLevel":1,"attackSpeed":6,"attackLevel":30,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"bonusAttack":33,"bonusStrength":31},"3852":{"name":"Moss giant","hitpoints":85,"combatLevel":48,"slayerLevel":1,"attackSpeed":6,"attackLevel":30,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"bonusAttack":33,"bonusStrength":31},"3863":{"name":"Jake","hitpoints":50,"combatLevel":37,"attackSpeed":4,"attackLevel":27,"strengthLevel":31,"defenceLevel":25,"rangeLevel":1,"magicLevel":1},"3865":{"name":"Wilson","hitpoints":50,"combatLevel":37,"attackSpeed":4,"attackLevel":27,"strengthLevel":31,"defenceLevel":25,"rangeLevel":1,"magicLevel":1},"3869":{"name":"Palmer","hitpoints":50,"combatLevel":37,"attackSpeed":4,"attackLevel":27,"strengthLevel":31,"defenceLevel":25,"rangeLevel":1,"magicLevel":1},"3901":{"name":"Fox","hitpoints":30,"combatLevel":19,"attackSpeed":4,"attackLevel":1,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":30,"crushDef":30,"rangeDef":30,"magicDef":30,"bonusAttack":30,"bonusStrength":30},"3902":{"name":"Bunny","hitpoints":5,"combatLevel":2},"3903":{"name":"Bunny","hitpoints":5,"combatLevel":2},"3908":{"name":"Bear Cub","hitpoints":20,"combatLevel":15,"slayerLevel":1,"attackSpeed":4,"attackLevel":10,"strengthLevel":15,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"3909":{"name":"Bear Cub","hitpoints":20,"combatLevel":15,"slayerLevel":1,"attackSpeed":4,"attackLevel":10,"strengthLevel":15,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"3910":{"name":"Unicorn Foal","hitpoints":15,"combatLevel":12,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"3911":{"name":"Black unicorn Foal","hitpoints":25,"combatLevel":22,"attackSpeed":4,"attackLevel":18,"strengthLevel":18,"defenceLevel":18,"rangeLevel":1,"magicLevel":1},"3912":{"name":"Wolf","hitpoints":69,"combatLevel":64,"slayerLevel":1,"attackSpeed":4,"attackLevel":50,"strengthLevel":55,"defenceLevel":52,"rangeLevel":1,"magicLevel":1},"3922":{"name":"The Draugen","hitpoints":60,"combatLevel":69,"attackSpeed":4,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stabDef":100,"slashDef":100,"crushDef":100,"rangeDef":500,"magicDef":500,"poisonImmune":true,"venomImmune":true,"undead":true},"3938":{"name":"Freidir","hitpoints":50,"combatLevel":48,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"bonusStrength":20},"3939":{"name":"Borrokar","hitpoints":50,"combatLevel":48,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"bonusStrength":20},"3940":{"name":"Lanzig","hitpoints":50,"combatLevel":48,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"bonusStrength":20},"3943":{"name":"Lensa","hitpoints":50,"combatLevel":48,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"bonusStrength":20},"3944":{"name":"Jennella","hitpoints":50,"combatLevel":48,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"bonusStrength":20},"3949":{"name":"Market Guard","hitpoints":50,"combatLevel":48,"attackSpeed":3,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":50,"rangeDef":50,"magicDef":50,"bonusAttack":40,"bonusStrength":40},"3950":{"name":"Warrior","hitpoints":50,"combatLevel":48,"attackSpeed":3,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":50,"rangeDef":50,"magicDef":50,"bonusAttack":40,"bonusStrength":40},"3957":{"name":"Ungadulu","hitpoints":65,"combatLevel":70,"attackSpeed":4,"attackLevel":57,"strengthLevel":65,"defenceLevel":61,"magicLevel":65,"bonusStrength":3,"bonusRangeStrength":7},"3958":{"name":"Ungadulu","hitpoints":150,"combatLevel":169,"attackSpeed":4,"attackLevel":147,"strengthLevel":147,"defenceLevel":147,"bonusStrength":3,"bonusRangeStrength":7},"3959":{"name":"Jungle savage","hitpoints":90,"combatLevel":90,"attackSpeed":4,"attackLevel":76,"strengthLevel":76,"defenceLevel":76,"bonusAttack":8,"bonusStrength":10},"3962":{"name":"Nezikchened","hitpoints":150,"combatLevel":187,"attackSpeed":5,"attackLevel":165,"strengthLevel":168,"defenceLevel":167,"rangeLevel":160,"magicLevel":160,"demon":true},"3963":{"name":"Viyeldi","hitpoints":80,"combatLevel":79,"attackSpeed":4,"attackLevel":62,"strengthLevel":66,"defenceLevel":70,"bonusAttack":7,"bonusStrength":3},"3964":{"name":"San Tojalon","hitpoints":120,"combatLevel":106,"attackSpeed":4,"attackLevel":86,"strengthLevel":84,"defenceLevel":86,"stabDef":18,"slashDef":22,"crushDef":20,"rangeDef":20,"bonusAttack":16,"bonusStrength":17},"3965":{"name":"Irvig Senay","hitpoints":125,"combatLevel":100,"attackSpeed":4,"attackLevel":76,"strengthLevel":74,"defenceLevel":81,"stabDef":27,"slashDef":31,"crushDef":29,"rangeDef":29,"bonusAttack":29,"bonusStrength":31},"3966":{"name":"Ranalph Devere","hitpoints":130,"combatLevel":92,"attackSpeed":4,"attackLevel":66,"strengthLevel":67,"defenceLevel":66,"stabDef":38,"slashDef":40,"crushDef":36,"rangeDef":38,"bonusAttack":45,"bonusStrength":44},"3969":{"name":"Zombie rat","hitpoints":5,"combatLevel":3,"slayerLevel":1,"attackSpeed":4,"attackLevel":2,"strengthLevel":3,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"3970":{"name":"Zombie rat","hitpoints":5,"combatLevel":3,"slayerLevel":1,"attackSpeed":4,"attackLevel":2,"strengthLevel":3,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"3971":{"name":"Zombie rat","hitpoints":5,"combatLevel":3,"slayerLevel":1,"attackSpeed":4,"attackLevel":2,"strengthLevel":3,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"3972":{"name":"Skeleton","hitpoints":29,"combatLevel":22,"slayerLevel":1,"attackSpeed":4,"attackLevel":15,"strengthLevel":18,"defenceLevel":17,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":11,"rangeDef":4,"magicDef":1,"bonusAttack":15,"bonusStrength":14,"undead":true},"3973":{"name":"Skeleton","hitpoints":29,"combatLevel":22,"slayerLevel":1,"attackSpeed":4,"attackLevel":15,"strengthLevel":18,"defenceLevel":17,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":11,"rangeDef":4,"magicDef":1,"bonusAttack":15,"bonusStrength":14,"undead":true},"3974":{"name":"Skeleton","hitpoints":29,"combatLevel":22,"slayerLevel":1,"attackSpeed":4,"attackLevel":15,"strengthLevel":18,"defenceLevel":17,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":11,"rangeDef":4,"magicDef":1,"bonusAttack":15,"bonusStrength":14,"undead":true},"3975":{"name":"Ghost","hitpoints":25,"combatLevel":19,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"3976":{"name":"Ghost","hitpoints":25,"combatLevel":19,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"3977":{"name":"Ghost","hitpoints":25,"combatLevel":19,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"3978":{"name":"Ghost","hitpoints":25,"combatLevel":19,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"3979":{"name":"Ghost","hitpoints":25,"combatLevel":19,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"3980":{"name":"Zombie","hitpoints":30,"combatLevel":24,"slayerLevel":1,"attackSpeed":5,"attackLevel":19,"strengthLevel":21,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":8,"crushDef":12,"rangeDef":11,"magicDef":10,"bonusAttack":5,"bonusStrength":7,"undead":true},"3981":{"name":"Zombie","hitpoints":30,"combatLevel":24,"slayerLevel":1,"attackSpeed":5,"attackLevel":19,"strengthLevel":21,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":8,"crushDef":12,"rangeDef":11,"magicDef":10,"bonusAttack":5,"bonusStrength":7,"undead":true},"3982":{"name":"Lesser demon","hitpoints":81,"combatLevel":82,"slayerLevel":1,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":71,"rangeLevel":1,"magicLevel":1,"demon":true},"3996":{"name":"Witch's experiment","hitpoints":21,"combatLevel":19,"attackSpeed":4,"attackLevel":18,"strengthLevel":10,"defenceLevel":19,"rangeLevel":1,"magicLevel":1},"3997":{"name":"Witch's experiment (second form)","hitpoints":31,"combatLevel":30,"attackSpeed":4,"attackLevel":28,"strengthLevel":20,"defenceLevel":29,"rangeLevel":1,"magicLevel":1},"3998":{"name":"Witch's experiment (third form)","hitpoints":41,"combatLevel":42,"attackSpeed":4,"attackLevel":38,"strengthLevel":30,"defenceLevel":39,"rangeLevel":1,"magicLevel":1},"3999":{"name":"Witch's experiment (fourth form)","hitpoints":51,"combatLevel":53,"attackSpeed":4,"attackLevel":48,"strengthLevel":40,"defenceLevel":49,"rangeLevel":1,"magicLevel":1},"4004":{"name":"Shadow","hitpoints":15,"combatLevel":73,"attackSpeed":4,"attackLevel":90,"strengthLevel":120,"defenceLevel":5,"rangeLevel":1,"magicLevel":90,"stabDef":30,"slashDef":30,"crushDef":30,"rangeDef":30,"magicDef":30},"4005":{"name":"Dark beast","hitpoints":220,"combatLevel":182,"slayerLevel":90,"attackSpeed":4,"attackLevel":140,"strengthLevel":160,"defenceLevel":120,"rangeLevel":1,"magicLevel":160,"stabDef":30,"slashDef":40,"crushDef":100,"rangeDef":100,"magicDef":90},"4043":{"name":"Pirate","hitpoints":20},"4044":{"name":"Pirate","hitpoints":20},"4045":{"name":"Pirate","hitpoints":20},"4046":{"name":"Pirate","hitpoints":20},"4047":{"name":"Pirate","hitpoints":20},"4048":{"name":"Pirate","hitpoints":20},"4049":{"name":"Pirate","hitpoints":20},"4050":{"name":"Pirate","hitpoints":20},"4051":{"name":"Pirate","hitpoints":20},"4052":{"name":"Pirate","hitpoints":20},"4067":{"name":"Black Knight Titan","hitpoints":142,"combatLevel":120,"attackSpeed":7,"attackLevel":91,"strengthLevel":100,"defenceLevel":91,"rangeLevel":1,"magicLevel":1,"stabDef":18,"slashDef":27,"crushDef":18,"rangeDef":1000,"magicDef":1000,"bonusAttack":27,"bonusStrength":22},"4088":{"name":"Soldier","hitpoints":50,"combatLevel":48,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"magicLevel":1,"stabDef":15,"slashDef":23,"crushDef":21,"rangeDef":14,"magicDef":6,"bonusAttack":11,"bonusStrength":12},"4095":{"name":"Eadburg","hitpoints":10,"combatLevel":4,"attackSpeed":4},"4096":{"name":"Archer","hitpoints":50,"combatLevel":42,"attackSpeed":6,"defenceLevel":40,"rangeLevel":40,"magicLevel":1,"stabDef":39,"slashDef":50,"crushDef":49,"rangeDef":45,"magicDef":18,"bonusAttack":34},"4097":{"name":"Archer","hitpoints":50,"combatLevel":42,"attackSpeed":6,"defenceLevel":40,"rangeLevel":40,"magicLevel":1,"stabDef":39,"slashDef":50,"crushDef":49,"rangeDef":45,"magicDef":18,"bonusAttack":34},"4098":{"name":"Archer","hitpoints":50,"combatLevel":42,"attackSpeed":6,"defenceLevel":40,"rangeLevel":40,"magicLevel":1,"stabDef":39,"slashDef":50,"crushDef":49,"rangeDef":45,"magicDef":18,"bonusAttack":34},"4099":{"name":"Guard","hitpoints":40,"combatLevel":37,"attackSpeed":6,"attackLevel":30,"strengthLevel":30,"defenceLevel":30,"magicLevel":1,"stabDef":36,"slashDef":48,"crushDef":50,"rangeDef":38,"bonusAttack":18,"bonusStrength":16},"4100":{"name":"Guard","hitpoints":40,"combatLevel":37,"attackSpeed":6,"attackLevel":30,"strengthLevel":30,"defenceLevel":30,"magicLevel":1,"stabDef":36,"slashDef":48,"crushDef":50,"rangeDef":38,"bonusAttack":18,"bonusStrength":16},"4107":{"name":"Breoca","hitpoints":10,"combatLevel":5,"attackSpeed":4,"attackLevel":3,"strengthLevel":3,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"4108":{"name":"Ocga","hitpoints":10,"combatLevel":5,"attackSpeed":4,"attackLevel":3,"strengthLevel":3,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"4109":{"name":"Penda","hitpoints":10,"combatLevel":5,"attackSpeed":4,"attackLevel":3,"strengthLevel":3,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"4110":{"name":"Hygd","hitpoints":10,"combatLevel":4,"attackSpeed":4,"attackLevel":3,"strengthLevel":2,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"4111":{"name":"Ceolburg","hitpoints":10,"combatLevel":4,"attackSpeed":4,"attackLevel":3,"strengthLevel":2,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"4114":{"name":"White Knight","hitpoints":55,"combatLevel":42,"attackSpeed":7,"attackLevel":32,"strengthLevel":35,"defenceLevel":27,"rangeLevel":1,"magicLevel":1,"stabDef":83,"slashDef":76,"crushDef":70,"rangeDef":74,"bonusAttack":30,"bonusStrength":31},"4115":{"name":"Fareed (hard)","hitpoints":255,"combatLevel":299,"attackSpeed":4,"attackLevel":380,"strengthLevel":240,"defenceLevel":135,"rangeLevel":1,"magicLevel":1,"stabDef":100,"slashDef":100,"crushDef":100,"bonusStrength":120},"4120":{"name":"Troll general","hitpoints":140,"combatLevel":113,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":140,"defenceLevel":40,"stabDef":35,"slashDef":60,"crushDef":35,"rangeDef":200,"magicDef":200,"bonusAttack":60,"bonusStrength":100},"4121":{"name":"Troll general","hitpoints":140,"combatLevel":113,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":140,"defenceLevel":40,"stabDef":35,"slashDef":60,"crushDef":35,"rangeDef":200,"magicDef":200,"bonusAttack":60,"bonusStrength":100},"4122":{"name":"Troll general","hitpoints":140,"combatLevel":113,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":140,"defenceLevel":40,"stabDef":35,"slashDef":60,"crushDef":35,"rangeDef":200,"magicDef":200,"bonusAttack":60,"bonusStrength":100},"4123":{"name":"Troll spectator","hitpoints":90,"combatLevel":71,"slayerLevel":1,"attackSpeed":6,"attackLevel":40,"strengthLevel":90,"defenceLevel":25,"crushDef":10,"rangeDef":200,"magicDef":200,"bonusAttack":20,"bonusStrength":20},"4124":{"name":"Troll spectator","hitpoints":90,"combatLevel":71,"slayerLevel":1,"attackSpeed":6,"attackLevel":40,"strengthLevel":90,"defenceLevel":25,"crushDef":10,"rangeDef":200,"magicDef":200,"bonusAttack":20,"bonusStrength":20},"4125":{"name":"Troll spectator","hitpoints":90,"combatLevel":71,"slayerLevel":1,"attackSpeed":6,"attackLevel":40,"strengthLevel":90,"defenceLevel":25,"crushDef":10,"rangeDef":200,"magicDef":200,"bonusAttack":20,"bonusStrength":20},"4126":{"name":"Troll spectator","hitpoints":90,"combatLevel":71,"slayerLevel":1,"attackSpeed":6,"attackLevel":40,"strengthLevel":90,"defenceLevel":25,"crushDef":10,"rangeDef":200,"magicDef":200,"bonusAttack":20,"bonusStrength":20},"4127":{"name":"Troll spectator","hitpoints":90,"combatLevel":71,"slayerLevel":1,"attackSpeed":6,"attackLevel":40,"strengthLevel":90,"defenceLevel":25,"crushDef":10,"rangeDef":200,"magicDef":200,"bonusAttack":20,"bonusStrength":20},"4128":{"name":"Troll spectator","hitpoints":90,"combatLevel":71,"slayerLevel":1,"attackSpeed":6,"attackLevel":40,"strengthLevel":90,"defenceLevel":25,"crushDef":10,"rangeDef":200,"magicDef":200,"bonusAttack":20,"bonusStrength":20},"4129":{"name":"Troll spectator","hitpoints":90,"combatLevel":71,"slayerLevel":1,"attackSpeed":6,"attackLevel":40,"strengthLevel":90,"defenceLevel":25,"crushDef":10,"rangeDef":200,"magicDef":200,"bonusAttack":20,"bonusStrength":20},"4130":{"name":"Dad","hitpoints":120,"combatLevel":101,"slayerLevel":1,"attackSpeed":8,"attackLevel":60,"strengthLevel":120,"defenceLevel":50,"stabDef":25,"slashDef":25,"crushDef":40,"rangeDef":200,"magicDef":200,"bonusAttack":40,"bonusStrength":70},"4131":{"name":"Twig","hitpoints":90,"combatLevel":71,"attackSpeed":6,"attackLevel":40,"strengthLevel":90,"defenceLevel":25,"crushDef":10,"rangeDef":200,"magicDef":200,"bonusAttack":20,"bonusStrength":20},"4132":{"name":"Berry","hitpoints":90,"combatLevel":71,"slayerLevel":1,"attackSpeed":6,"attackLevel":40,"strengthLevel":90,"defenceLevel":25,"crushDef":10,"rangeDef":200,"magicDef":200,"bonusAttack":20,"bonusStrength":20},"4133":{"name":"Twig","hitpoints":90,"combatLevel":71,"attackSpeed":6,"attackLevel":40,"strengthLevel":90,"defenceLevel":25,"crushDef":10,"rangeDef":200,"magicDef":200,"bonusAttack":20,"bonusStrength":20},"4134":{"name":"Berry","hitpoints":90,"combatLevel":71,"slayerLevel":1,"attackSpeed":6,"attackLevel":40,"strengthLevel":90,"defenceLevel":25,"crushDef":10,"rangeDef":200,"magicDef":200,"bonusAttack":20,"bonusStrength":20},"4135":{"name":"Thrower troll","hitpoints":95,"combatLevel":68,"slayerLevel":1,"attackSpeed":7,"attackLevel":30,"strengthLevel":95,"defenceLevel":15,"rangeLevel":60,"rangeDef":200,"magicDef":200},"4136":{"name":"Thrower troll","hitpoints":95,"combatLevel":68,"slayerLevel":1,"attackSpeed":7,"attackLevel":30,"strengthLevel":95,"defenceLevel":15,"rangeLevel":60,"rangeDef":200,"magicDef":200},"4137":{"name":"Thrower troll","hitpoints":95,"combatLevel":68,"slayerLevel":1,"attackSpeed":7,"attackLevel":30,"strengthLevel":95,"defenceLevel":15,"rangeLevel":60,"rangeDef":200,"magicDef":200},"4138":{"name":"Thrower troll","hitpoints":95,"combatLevel":68,"slayerLevel":1,"attackSpeed":7,"attackLevel":30,"strengthLevel":95,"defenceLevel":15,"rangeLevel":60,"rangeDef":200,"magicDef":200},"4139":{"name":"Thrower troll","hitpoints":95,"combatLevel":68,"slayerLevel":1,"attackSpeed":7,"attackLevel":30,"strengthLevel":95,"defenceLevel":15,"rangeLevel":60,"rangeDef":200,"magicDef":200},"4143":{"name":"Mountain troll","hitpoints":90,"combatLevel":71,"slayerLevel":1,"attackSpeed":6,"attackLevel":40,"strengthLevel":90,"defenceLevel":25,"crushDef":10,"rangeDef":200,"magicDef":200,"bonusAttack":20,"bonusStrength":20},"4163":{"name":"King Roald","hitpoints":75,"combatLevel":47,"attackSpeed":4,"attackLevel":35,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4167":{"name":"Outlaw","hitpoints":20,"combatLevel":32,"attackSpeed":6,"attackLevel":35,"strengthLevel":25,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4168":{"name":"Outlaw","hitpoints":20,"combatLevel":32,"attackSpeed":6,"attackLevel":35,"strengthLevel":25,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4169":{"name":"Outlaw","hitpoints":20,"combatLevel":32,"attackSpeed":6,"attackLevel":35,"strengthLevel":25,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4170":{"name":"Outlaw","hitpoints":20,"combatLevel":32,"attackSpeed":6,"attackLevel":35,"strengthLevel":25,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4171":{"name":"Outlaw","hitpoints":20,"combatLevel":32,"attackSpeed":6,"attackLevel":35,"strengthLevel":25,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4172":{"name":"Outlaw","hitpoints":20,"combatLevel":32,"attackSpeed":6,"attackLevel":35,"strengthLevel":25,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4173":{"name":"Outlaw","hitpoints":20,"combatLevel":32,"attackSpeed":6,"attackLevel":35,"strengthLevel":25,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4174":{"name":"Outlaw","hitpoints":20,"combatLevel":32,"attackSpeed":6,"attackLevel":35,"strengthLevel":25,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4175":{"name":"Outlaw","hitpoints":20,"combatLevel":32,"attackSpeed":6,"attackLevel":35,"strengthLevel":25,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4176":{"name":"Outlaw","hitpoints":20,"combatLevel":32,"attackSpeed":6,"attackLevel":35,"strengthLevel":25,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4184":{"name":"Crocodile","hitpoints":62,"combatLevel":63,"slayerLevel":1,"attackSpeed":4,"attackLevel":53,"strengthLevel":54,"defenceLevel":54,"rangeLevel":1,"magicLevel":1},"4185":{"name":"Jackal","hitpoints":27,"combatLevel":21,"slayerLevel":1,"attackSpeed":4,"attackLevel":17,"strengthLevel":18,"defenceLevel":15,"rangeLevel":1,"magicLevel":1},"4186":{"name":"Locust","hitpoints":27,"combatLevel":18,"attackSpeed":4,"attackLevel":17,"strengthLevel":18,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"4188":{"name":"Plague frog","hitpoints":10,"combatLevel":11,"attackSpeed":4,"attackLevel":18,"strengthLevel":10,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"4192":{"name":"Scarab swarm","hitpoints":25,"combatLevel":98,"slayerLevel":1,"attackSpeed":1,"attackLevel":255,"strengthLevel":5,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"stabDef":90,"slashDef":90,"crushDef":5,"rangeDef":90,"magicDef":90},"4195":{"name":"Het","combatLevel":81,"attackSpeed":4},"4196":{"name":"Apmeken","hitpoints":70,"combatLevel":75,"attackSpeed":4,"attackLevel":30,"strengthLevel":40,"defenceLevel":60,"rangeLevel":1,"magicLevel":85,"stabDef":65,"slashDef":65,"crushDef":65,"magicDef":50},"4197":{"name":"Scabaras","combatLevel":75,"attackSpeed":4},"4198":{"name":"Crondis","hitpoints":60,"combatLevel":75,"attackSpeed":4,"attackLevel":80,"strengthLevel":70,"defenceLevel":35,"rangeLevel":1,"magicLevel":40,"stabDef":15,"slashDef":15,"crushDef":15,"rangeDef":40,"magicDef":70},"4210":{"name":"Possessed Priest","hitpoints":90,"combatLevel":91,"attackSpeed":4,"attackLevel":90,"strengthLevel":90,"defenceLevel":40,"rangeLevel":1,"magicLevel":60,"stabDef":90,"crushDef":90,"bonusStrength":90},"4246":{"name":"Monk","hitpoints":5,"combatLevel":3,"attackSpeed":4,"attackLevel":2,"strengthLevel":2,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"4247":{"name":"Thief","hitpoints":17,"combatLevel":14,"attackSpeed":4,"attackLevel":14,"strengthLevel":13,"defenceLevel":12,"rangeLevel":1,"magicLevel":1},"4248":{"name":"Head Thief","hitpoints":37,"combatLevel":26,"attackSpeed":5,"attackLevel":24,"strengthLevel":18,"defenceLevel":16,"rangeLevel":2,"stabDef":8,"slashDef":14,"crushDef":15,"rangeDef":9,"magicDef":4,"bonusStrength":10},"4276":{"name":"Jail guard","hitpoints":32,"combatLevel":26,"attackSpeed":5,"attackLevel":19,"strengthLevel":23,"defenceLevel":21,"rangeLevel":1,"magicLevel":1,"stabDef":8,"slashDef":9,"crushDef":10,"rangeDef":9,"magicDef":4,"bonusAttack":9,"bonusStrength":5},"4277":{"name":"Jail guard","hitpoints":32,"combatLevel":26,"attackSpeed":5,"attackLevel":19,"strengthLevel":23,"defenceLevel":21,"rangeLevel":1,"magicLevel":1,"stabDef":8,"slashDef":9,"crushDef":10,"rangeDef":9,"magicDef":4,"bonusAttack":9,"bonusStrength":5},"4278":{"name":"Jail guard","hitpoints":32,"combatLevel":26,"attackSpeed":5,"attackLevel":19,"strengthLevel":23,"defenceLevel":21,"rangeLevel":1,"magicLevel":1,"stabDef":8,"slashDef":9,"crushDef":10,"rangeDef":9,"magicDef":4,"bonusAttack":9,"bonusStrength":5},"4279":{"name":"Jail guard","hitpoints":32,"combatLevel":26,"attackSpeed":5,"attackLevel":19,"strengthLevel":23,"defenceLevel":21,"rangeLevel":1,"magicLevel":1,"stabDef":8,"slashDef":9,"crushDef":10,"rangeDef":9,"magicDef":4,"bonusAttack":9,"bonusStrength":5},"4303":{"name":"Kalphite Queen","hitpoints":255,"combatLevel":333,"slayerLevel":1,"attackSpeed":4,"attackLevel":300,"strengthLevel":300,"defenceLevel":300,"rangeLevel":1,"magicLevel":150,"stabDef":50,"slashDef":50,"crushDef":10,"rangeDef":100,"magicDef":100},"4304":{"name":"Kalphite Queen","hitpoints":255,"combatLevel":333,"slayerLevel":1,"attackSpeed":4,"attackLevel":300,"strengthLevel":300,"defenceLevel":300,"rangeLevel":1,"magicLevel":150,"stabDef":100,"slashDef":100,"crushDef":100,"rangeDef":10,"magicDef":10},"4308":{"name":"Sea troll","hitpoints":100,"combatLevel":79,"attackSpeed":4,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":1},"4309":{"name":"Sea troll","hitpoints":80,"combatLevel":65,"attackSpeed":4,"attackLevel":50,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1},"4310":{"name":"Sea troll","hitpoints":80,"combatLevel":87,"attackSpeed":4,"attackLevel":75,"strengthLevel":75,"defenceLevel":75,"rangeLevel":1,"magicLevel":1},"4311":{"name":"Sea troll","hitpoints":80,"combatLevel":101,"attackSpeed":4,"attackLevel":90,"strengthLevel":90,"defenceLevel":90,"rangeLevel":1,"magicLevel":1},"4315":{"name":"Sea Troll Queen","hitpoints":200,"combatLevel":170,"attackSpeed":4,"attackLevel":100,"strengthLevel":70,"defenceLevel":100,"rangeLevel":1,"magicLevel":150,"stabDef":20,"slashDef":40,"crushDef":40,"magicDef":40,"bonusAttack":100,"bonusStrength":40},"4319":{"name":"Skeleton Mage","hitpoints":80,"combatLevel":83,"slayerLevel":1,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":60,"rangeLevel":1,"magicLevel":100,"magicDef":15,"undead":true},"4321":{"name":"Renegade Knight","hitpoints":48,"combatLevel":37,"attackSpeed":4,"attackLevel":28,"strengthLevel":28,"defenceLevel":28,"rangeLevel":1,"magicLevel":1,"stabDef":99,"slashDef":82,"crushDef":62,"bonusAttack":20,"bonusStrength":16},"4328":{"name":"Sigmund","hitpoints":60,"combatLevel":50,"attackSpeed":4,"attackLevel":45,"strengthLevel":45,"defenceLevel":24,"rangeLevel":1,"magicLevel":1,"magic":8,"venomImmune":true},"4331":{"name":"Black Knight","hitpoints":42,"combatLevel":33,"attackSpeed":5,"attackLevel":25,"strengthLevel":25,"defenceLevel":25,"rangeLevel":1,"magicLevel":1,"stabDef":73,"slashDef":76,"crushDef":70,"rangeDef":72,"bonusAttack":18,"bonusStrength":16},"4342":{"name":"Sir Lucan","hitpoints":105,"combatLevel":120,"attackSpeed":5,"attackLevel":105,"strengthLevel":110,"defenceLevel":99,"rangeLevel":1,"magicLevel":1,"stabDef":275,"slashDef":65,"crushDef":45,"bonusAttack":40,"bonusStrength":40},"4343":{"name":"Sir Palomedes","hitpoints":100,"combatLevel":118,"attackSpeed":5,"attackLevel":105,"strengthLevel":105,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"stabDef":250,"slashDef":250,"crushDef":50,"bonusAttack":35,"bonusStrength":35},"4344":{"name":"Sir Lancelot","hitpoints":115,"combatLevel":127,"attackSpeed":4,"attackLevel":110,"strengthLevel":110,"defenceLevel":110,"rangeLevel":1,"magicLevel":1,"stabDef":300,"slashDef":85,"crushDef":300,"bonusAttack":60,"bonusStrength":60},"4345":{"name":"Sir Bedivere","hitpoints":90,"combatLevel":110,"attackSpeed":5,"attackLevel":99,"strengthLevel":95,"defenceLevel":99,"rangeLevel":1,"magicLevel":1,"stabDef":15,"crushDef":190,"bonusAttack":20,"bonusStrength":20},"4346":{"name":"Sir Tristram","hitpoints":105,"combatLevel":115,"attackSpeed":5,"attackLevel":99,"strengthLevel":99,"defenceLevel":99,"rangeLevel":1,"magicLevel":1,"crushDef":225,"bonusAttack":25,"bonusStrength":25},"4347":{"name":"Sir Pelleas","hitpoints":99,"combatLevel":112,"attackSpeed":5,"attackLevel":95,"strengthLevel":99,"defenceLevel":98,"rangeLevel":1,"magicLevel":1,"stabDef":200,"crushDef":5,"bonusAttack":22,"bonusStrength":22},"4348":{"name":"Sir Gawain","hitpoints":110,"combatLevel":122,"attackSpeed":5,"attackLevel":110,"strengthLevel":105,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"stabDef":65,"slashDef":90,"crushDef":300,"bonusAttack":40,"bonusStrength":45},"4349":{"name":"Sir Kay","hitpoints":110,"combatLevel":124,"attackSpeed":5,"attackLevel":110,"strengthLevel":110,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"stabDef":45,"slashDef":300,"crushDef":65,"bonusAttack":55,"bonusStrength":55},"4354":{"name":"Sir Lancelot","hitpoints":115,"combatLevel":127,"attackSpeed":4,"attackLevel":110,"strengthLevel":110,"defenceLevel":110,"rangeLevel":1,"magicLevel":1,"stabDef":300,"slashDef":85,"crushDef":300,"bonusAttack":60,"bonusStrength":60},"4355":{"name":"Sir Kay","hitpoints":110,"combatLevel":124,"attackSpeed":5,"attackLevel":110,"strengthLevel":110,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"stabDef":45,"slashDef":300,"crushDef":65,"bonusAttack":55,"bonusStrength":55},"4356":{"name":"Sir Gawain","hitpoints":110,"combatLevel":122,"attackSpeed":5,"attackLevel":110,"strengthLevel":105,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"stabDef":65,"slashDef":90,"crushDef":300,"bonusAttack":40,"bonusStrength":45},"4357":{"name":"Sir Lucan","hitpoints":105,"combatLevel":120,"attackSpeed":5,"attackLevel":105,"strengthLevel":110,"defenceLevel":99,"rangeLevel":1,"magicLevel":1,"stabDef":275,"slashDef":65,"crushDef":45,"bonusAttack":40,"bonusStrength":40},"4358":{"name":"Sir Palomedes","hitpoints":100,"combatLevel":118,"attackSpeed":5,"attackLevel":105,"strengthLevel":105,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"stabDef":250,"slashDef":250,"crushDef":50,"bonusAttack":35,"bonusStrength":35},"4359":{"name":"Sir Tristram","hitpoints":105,"combatLevel":115,"attackSpeed":5,"attackLevel":99,"strengthLevel":99,"defenceLevel":99,"rangeLevel":1,"magicLevel":1,"crushDef":225,"bonusAttack":25,"bonusStrength":25},"4360":{"name":"Sir Pelleas","hitpoints":99,"combatLevel":112,"attackSpeed":5,"attackLevel":95,"strengthLevel":99,"defenceLevel":98,"rangeLevel":1,"magicLevel":1,"stabDef":200,"crushDef":5,"bonusAttack":22,"bonusStrength":22},"4361":{"name":"Sir Bedivere","hitpoints":90,"combatLevel":110,"attackSpeed":5,"attackLevel":99,"strengthLevel":95,"defenceLevel":99,"rangeLevel":1,"magicLevel":1,"stabDef":15,"crushDef":190,"bonusAttack":20,"bonusStrength":20},"4362":{"name":"Ogre chieftain","hitpoints":60,"combatLevel":81,"slayerLevel":1,"attackSpeed":4,"attackLevel":75,"strengthLevel":71,"defenceLevel":75,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":21,"crushDef":16,"bonusAttack":5,"bonusStrength":7},"4363":{"name":"Ogre chieftain","hitpoints":60,"combatLevel":81,"slayerLevel":1,"attackSpeed":4,"attackLevel":75,"strengthLevel":71,"defenceLevel":75,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":21,"crushDef":16,"bonusAttack":5,"bonusStrength":7},"4367":{"name":"Gorad","hitpoints":80,"combatLevel":68,"slayerLevel":1,"attackSpeed":4,"attackLevel":54,"strengthLevel":54,"defenceLevel":54,"rangeLevel":1,"magicLevel":1,"stabDef":15,"slashDef":27,"crushDef":21,"bonusAttack":8,"bonusStrength":8},"4373":{"name":"City guard","hitpoints":80,"combatLevel":83,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"stabDef":13,"slashDef":24,"crushDef":19,"bonusAttack":9,"bonusStrength":13},"4381":{"name":"Enclave guard","hitpoints":80,"combatLevel":83,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"stabDef":13,"slashDef":24,"crushDef":19,"bonusAttack":9,"bonusStrength":13},"4382":{"name":"Ogre shaman","hitpoints":1,"combatLevel":113,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"4383":{"name":"Ogre shaman","hitpoints":1,"combatLevel":113,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"4384":{"name":"Ogre shaman","hitpoints":1,"combatLevel":113,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"4385":{"name":"Blue dragon","hitpoints":105,"combatLevel":111,"slayerLevel":1,"attackSpeed":4,"attackLevel":95,"strengthLevel":95,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"4387":{"name":"Ogre shaman","hitpoints":1,"combatLevel":113,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"4389":{"name":"Ogre shaman","hitpoints":1,"combatLevel":113,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"4391":{"name":"Ogre shaman","hitpoints":1,"combatLevel":113,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"4393":{"name":"Ogre shaman","hitpoints":1,"combatLevel":113,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"4395":{"name":"Ogre shaman","hitpoints":1,"combatLevel":113,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"4405":{"name":"Tower guard","hitpoints":22,"combatLevel":28,"attackSpeed":4,"attackLevel":26,"strengthLevel":26,"defenceLevel":26,"rangeLevel":1,"magicLevel":1,"stabDef":23,"slashDef":35,"crushDef":28,"bonusAttack":8,"bonusStrength":8},"4406":{"name":"Colonel Radick","hitpoints":65,"combatLevel":38,"attackSpeed":4,"attackLevel":25,"strengthLevel":25,"defenceLevel":25,"rangeLevel":1,"magicLevel":1,"stabDef":39,"slashDef":31,"crushDef":34,"bonusAttack":9,"bonusStrength":13},"4421":{"name":"Undead cow","hitpoints":8,"combatLevel":2,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"undead":true},"4427":{"name":"Vampyre Juvinate","hitpoints":65,"combatLevel":54,"attackSpeed":4,"attackLevel":55,"strengthLevel":40,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4428":{"name":"Vampyre Juvinate","hitpoints":65,"combatLevel":54,"attackSpeed":4,"attackLevel":55,"strengthLevel":40,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4429":{"name":"Vampyre Juvinate","hitpoints":65,"combatLevel":54,"attackSpeed":4,"attackLevel":55,"strengthLevel":40,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4430":{"name":"Vampyre Juvinate","hitpoints":65,"combatLevel":54,"attackSpeed":4,"attackLevel":55,"strengthLevel":40,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4431":{"name":"Feral Vampyre","hitpoints":80,"combatLevel":64,"slayerLevel":1,"attackSpeed":4,"attackLevel":55,"strengthLevel":30,"defenceLevel":60,"rangeLevel":1,"magicLevel":1},"4432":{"name":"Vampyre Juvinate","hitpoints":65,"combatLevel":54,"attackSpeed":4,"attackLevel":55,"strengthLevel":40,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4436":{"name":"Vampyre Juvenile","hitpoints":60,"combatLevel":45,"slayerLevel":1,"attackSpeed":4,"attackLevel":40,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4437":{"name":"Vampyre Juvenile","hitpoints":60,"combatLevel":45,"slayerLevel":1,"attackSpeed":4,"attackLevel":40,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4438":{"name":"Vampyre Juvenile","hitpoints":60,"combatLevel":45,"slayerLevel":1,"attackSpeed":4,"attackLevel":40,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4439":{"name":"Vampyre Juvenile","hitpoints":60,"combatLevel":45,"slayerLevel":1,"attackSpeed":4,"attackLevel":40,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4442":{"name":"Vampyre Juvinate","hitpoints":110,"combatLevel":75,"attackSpeed":4,"attackLevel":70,"strengthLevel":50,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"4443":{"name":"Vampyre Juvinate","hitpoints":60,"combatLevel":50,"attackSpeed":4,"attackLevel":50,"strengthLevel":37,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4483":{"name":"Gadderanks","hitpoints":20,"combatLevel":35,"attackSpeed":4,"attackLevel":20,"strengthLevel":20,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":10,"magicDef":10,"poisonImmune":true,"venomImmune":true},"4484":{"name":"Gadderanks","hitpoints":20,"combatLevel":35,"attackSpeed":4,"attackLevel":20,"strengthLevel":20,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":10,"magicDef":10,"poisonImmune":true,"venomImmune":true},"4485":{"name":"Gadderanks","hitpoints":20,"combatLevel":35,"attackSpeed":4,"attackLevel":20,"strengthLevel":20,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":10,"magicDef":10,"poisonImmune":true,"venomImmune":true},"4486":{"name":"Vampyre Juvinate","hitpoints":60,"combatLevel":50,"attackSpeed":4,"attackLevel":50,"strengthLevel":37,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4487":{"name":"Vampyre Juvinate","hitpoints":65,"combatLevel":54,"attackSpeed":4,"attackLevel":55,"strengthLevel":40,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4491":{"name":"Skeleton fremennik","hitpoints":25,"combatLevel":40,"slayerLevel":1,"attackSpeed":6,"attackLevel":53,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"stabDef":14,"slashDef":18,"crushDef":15,"rangeDef":15,"bonusAttack":8,"bonusStrength":13},"4492":{"name":"Skeleton fremennik","hitpoints":25,"combatLevel":40,"slayerLevel":1,"attackSpeed":6,"attackLevel":53,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"stabDef":14,"slashDef":18,"crushDef":15,"rangeDef":15,"bonusAttack":8,"bonusStrength":13},"4493":{"name":"Skeleton fremennik","hitpoints":25,"combatLevel":40,"slayerLevel":1,"attackSpeed":6,"attackLevel":53,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"stabDef":14,"slashDef":18,"crushDef":15,"rangeDef":15,"bonusAttack":8,"bonusStrength":13},"4494":{"name":"Skeleton fremennik","hitpoints":35,"combatLevel":50,"slayerLevel":1,"attackSpeed":6,"attackLevel":60,"strengthLevel":43,"defenceLevel":35,"rangeLevel":1,"magicLevel":1,"stabDef":14,"slashDef":18,"crushDef":15,"rangeDef":15,"bonusAttack":8,"bonusStrength":13},"4495":{"name":"Skeleton fremennik","hitpoints":35,"combatLevel":50,"slayerLevel":1,"attackSpeed":6,"attackLevel":60,"strengthLevel":43,"defenceLevel":35,"rangeLevel":1,"magicLevel":1,"stabDef":14,"slashDef":18,"crushDef":15,"rangeDef":15,"bonusAttack":8,"bonusStrength":13},"4496":{"name":"Skeleton fremennik","hitpoints":35,"combatLevel":50,"slayerLevel":1,"attackSpeed":6,"attackLevel":60,"strengthLevel":43,"defenceLevel":35,"rangeLevel":1,"magicLevel":1,"stabDef":14,"slashDef":18,"crushDef":15,"rangeDef":15,"bonusAttack":8,"bonusStrength":13},"4497":{"name":"Skeleton fremennik","hitpoints":40,"combatLevel":60,"slayerLevel":1,"attackSpeed":6,"attackLevel":72,"strengthLevel":54,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":14,"slashDef":18,"crushDef":15,"rangeDef":15,"bonusAttack":8,"bonusStrength":13},"4498":{"name":"Skeleton fremennik","hitpoints":40,"combatLevel":60,"slayerLevel":1,"attackSpeed":6,"attackLevel":72,"strengthLevel":54,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":14,"slashDef":18,"crushDef":15,"rangeDef":15,"bonusAttack":8,"bonusStrength":13},"4499":{"name":"Skeleton fremennik","hitpoints":40,"combatLevel":60,"slayerLevel":1,"attackSpeed":6,"attackLevel":72,"strengthLevel":54,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":14,"slashDef":18,"crushDef":15,"rangeDef":15,"bonusAttack":8,"bonusStrength":13},"4500":{"name":"Ulfric","hitpoints":60,"combatLevel":100,"attackSpeed":6,"attackLevel":100,"strengthLevel":82,"defenceLevel":100,"rangeLevel":1,"magicLevel":1},"4501":{"name":"Brine rat","hitpoints":50,"combatLevel":70,"slayerLevel":47,"attackSpeed":4,"attackLevel":70,"strengthLevel":79,"defenceLevel":40,"rangeLevel":1,"magicLevel":1},"4504":{"name":"Giant bat","hitpoints":32,"combatLevel":27,"slayerLevel":1,"attackSpeed":4,"attackLevel":22,"strengthLevel":22,"defenceLevel":22,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"crushDef":12,"rangeDef":8,"magicDef":10},"4505":{"name":"Ulfric","hitpoints":60,"combatLevel":100,"attackSpeed":6,"attackLevel":100,"strengthLevel":82,"defenceLevel":100,"rangeLevel":1,"magicLevel":1},"4522":{"name":"Guard","hitpoints":30,"combatLevel":22,"attackSpeed":5,"attackLevel":16,"strengthLevel":20,"defenceLevel":12,"rangeLevel":1,"magicLevel":1,"stabDef":7,"slashDef":7,"rangeDef":7},"4523":{"name":"Guard","hitpoints":30,"combatLevel":22,"attackSpeed":5,"attackLevel":16,"strengthLevel":20,"defenceLevel":12,"rangeLevel":1,"magicLevel":1,"stabDef":7,"slashDef":7,"rangeDef":7},"4524":{"name":"Guard","hitpoints":30,"combatLevel":22,"attackSpeed":5,"attackLevel":16,"strengthLevel":20,"defenceLevel":12,"rangeLevel":1,"magicLevel":1,"stabDef":7,"slashDef":7,"rangeDef":7},"4525":{"name":"Guard","hitpoints":30,"combatLevel":22,"attackSpeed":5,"attackLevel":16,"strengthLevel":20,"defenceLevel":12,"rangeLevel":1,"magicLevel":1,"stabDef":7,"slashDef":7,"rangeDef":7},"4526":{"name":"Guard","hitpoints":30,"combatLevel":22,"attackSpeed":5,"attackLevel":16,"strengthLevel":20,"defenceLevel":12,"rangeLevel":1,"magicLevel":1,"stabDef":7,"slashDef":7,"rangeDef":7},"4533":{"name":"Blessed spider","hitpoints":32,"combatLevel":39,"slayerLevel":1,"attackSpeed":4,"attackLevel":35,"strengthLevel":35,"defenceLevel":35,"rangeLevel":1,"magicLevel":1,"stabDef":15,"slashDef":16,"crushDef":7,"rangeDef":16,"magicDef":12},"4534":{"name":"Blessed giant rat","hitpoints":30,"combatLevel":9,"slayerLevel":1,"attackSpeed":4,"attackLevel":5,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"4535":{"name":"Blessed giant rat","hitpoints":30,"combatLevel":9,"slayerLevel":1,"attackSpeed":4,"attackLevel":5,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"4561":{"name":"Spider","hitpoints":2,"combatLevel":1,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"4634":{"name":"Rowdy slave","hitpoints":16,"combatLevel":10,"attackSpeed":4,"attackLevel":7,"strengthLevel":7,"defenceLevel":7},"4635":{"name":"Mercenary Captain","hitpoints":80,"combatLevel":47,"attackSpeed":4,"attackLevel":32,"strengthLevel":29,"defenceLevel":32,"stabDef":17,"slashDef":15,"crushDef":19,"rangeDef":19,"bonusAttack":9,"bonusStrength":14},"4643":{"name":"Shantay Guard","hitpoints":32,"combatLevel":22,"attackSpeed":4,"attackLevel":17,"strengthLevel":16,"defenceLevel":16,"stabDef":12,"slashDef":15,"crushDef":18,"rangeDef":15,"magicDef":6,"bonusAttack":11,"bonusStrength":12},"4648":{"name":"Shantay Guard","hitpoints":32,"combatLevel":22,"attackSpeed":4,"attackLevel":17,"strengthLevel":16,"defenceLevel":16,"stabDef":12,"slashDef":15,"crushDef":18,"rangeDef":15,"magicDef":6,"bonusAttack":11,"bonusStrength":12},"4649":{"name":"Desert Wolf","hitpoints":34,"combatLevel":27,"slayerLevel":1,"attackSpeed":4,"attackLevel":20,"strengthLevel":21,"defenceLevel":22},"4650":{"name":"Desert Wolf","hitpoints":34,"combatLevel":27,"slayerLevel":1,"attackSpeed":4,"attackLevel":20,"strengthLevel":21,"defenceLevel":22},"4651":{"name":"Desert Wolf","hitpoints":34,"combatLevel":27,"slayerLevel":1,"attackSpeed":4,"attackLevel":20,"strengthLevel":21,"defenceLevel":22},"4652":{"name":"Ugthanki","hitpoints":45,"combatLevel":42,"attackSpeed":4,"attackLevel":35,"strengthLevel":35,"defenceLevel":35},"4655":{"name":"Bedabin Nomad Fighter","hitpoints":50,"combatLevel":56,"attackSpeed":4,"attackLevel":40,"strengthLevel":50,"defenceLevel":60,"bonusAttack":9,"bonusStrength":14},"4656":{"name":"Mercenary","hitpoints":60,"combatLevel":45,"attackSpeed":4,"attackLevel":32,"strengthLevel":32,"defenceLevel":39,"stabDef":17,"slashDef":15,"crushDef":19,"rangeDef":19,"bonusAttack":9,"bonusStrength":14},"4657":{"name":"Mercenary","hitpoints":60,"combatLevel":45,"attackSpeed":4,"attackLevel":32,"strengthLevel":32,"defenceLevel":39,"stabDef":17,"slashDef":15,"crushDef":19,"rangeDef":19,"bonusAttack":9,"bonusStrength":14},"4658":{"name":"Mercenary","hitpoints":60,"combatLevel":45,"attackSpeed":4,"attackLevel":32,"strengthLevel":32,"defenceLevel":39,"stabDef":17,"slashDef":15,"crushDef":19,"rangeDef":19,"bonusAttack":9,"bonusStrength":14},"4659":{"name":"Mercenary","hitpoints":60,"combatLevel":45,"attackSpeed":4,"attackLevel":32,"strengthLevel":32,"defenceLevel":39,"stabDef":17,"slashDef":15,"crushDef":19,"rangeDef":19,"bonusAttack":9,"bonusStrength":14},"4660":{"name":"Guard","hitpoints":60,"combatLevel":45,"attackSpeed":4,"attackLevel":32,"strengthLevel":32,"defenceLevel":39,"stabDef":17,"slashDef":15,"crushDef":19,"rangeDef":19,"bonusAttack":9,"bonusStrength":14},"4661":{"name":"Guard","hitpoints":60,"combatLevel":45,"attackSpeed":4,"attackLevel":32,"strengthLevel":32,"defenceLevel":39,"stabDef":17,"slashDef":15,"crushDef":19,"rangeDef":19,"bonusAttack":9,"bonusStrength":14},"4662":{"name":"Guard","hitpoints":60,"combatLevel":45,"attackSpeed":4,"attackLevel":32,"strengthLevel":32,"defenceLevel":39,"stabDef":17,"slashDef":15,"crushDef":19,"rangeDef":19,"bonusAttack":9,"bonusStrength":14},"4663":{"name":"Guard","hitpoints":60,"combatLevel":45,"attackSpeed":4,"attackLevel":32,"strengthLevel":32,"defenceLevel":39,"stabDef":17,"slashDef":15,"crushDef":19,"rangeDef":19,"bonusAttack":9,"bonusStrength":14},"4664":{"name":"Guard","hitpoints":60,"combatLevel":45,"attackSpeed":4,"attackLevel":32,"strengthLevel":32,"defenceLevel":39,"stabDef":17,"slashDef":15,"crushDef":19,"rangeDef":19,"bonusAttack":9,"bonusStrength":14},"4665":{"name":"Guard","hitpoints":60,"combatLevel":45,"attackSpeed":4,"attackLevel":32,"strengthLevel":32,"defenceLevel":39,"stabDef":17,"slashDef":15,"crushDef":19,"rangeDef":19,"bonusAttack":9,"bonusStrength":14},"4666":{"name":"Guard","hitpoints":60,"combatLevel":45,"attackSpeed":4,"attackLevel":32,"strengthLevel":32,"defenceLevel":39,"stabDef":17,"slashDef":15,"crushDef":19,"rangeDef":19,"bonusAttack":9,"bonusStrength":14},"4667":{"name":"Guard","hitpoints":60,"combatLevel":45,"attackSpeed":4,"attackLevel":32,"strengthLevel":32,"defenceLevel":39,"stabDef":17,"slashDef":15,"crushDef":19,"rangeDef":19,"bonusAttack":9,"bonusStrength":14},"4668":{"name":"Guard","hitpoints":60,"combatLevel":45,"attackSpeed":4,"attackLevel":32,"strengthLevel":32,"defenceLevel":39,"stabDef":17,"slashDef":15,"crushDef":19,"rangeDef":19,"bonusAttack":9,"bonusStrength":14},"4669":{"name":"Guard","hitpoints":60,"combatLevel":45,"attackSpeed":4,"attackLevel":32,"strengthLevel":32,"defenceLevel":39,"stabDef":17,"slashDef":15,"crushDef":19,"rangeDef":19,"bonusAttack":9,"bonusStrength":14},"4682":{"name":"Sir Leye","hitpoints":20,"combatLevel":20,"attackSpeed":5},"4688":{"name":"Angry unicorn","hitpoints":50,"combatLevel":47,"attackSpeed":4,"attackLevel":38,"strengthLevel":41,"defenceLevel":38,"rangeLevel":1,"magicLevel":1},"4689":{"name":"Angry giant rat","hitpoints":50,"combatLevel":47,"attackSpeed":4,"attackLevel":38,"strengthLevel":41,"defenceLevel":38,"rangeLevel":1,"magicLevel":1},"4690":{"name":"Angry giant rat","hitpoints":50,"combatLevel":47,"attackSpeed":4,"attackLevel":38,"strengthLevel":41,"defenceLevel":38,"rangeLevel":1,"magicLevel":1},"4691":{"name":"Angry goblin","hitpoints":50,"combatLevel":47,"attackSpeed":4,"attackLevel":38,"strengthLevel":41,"defenceLevel":38,"rangeLevel":1,"magicLevel":1},"4692":{"name":"Angry bear","hitpoints":50,"combatLevel":47,"attackSpeed":4,"attackLevel":38,"strengthLevel":41,"defenceLevel":38,"rangeLevel":1,"magicLevel":1},"4693":{"name":"Fear reaper","hitpoints":57,"combatLevel":55,"attackSpeed":4,"attackLevel":45,"strengthLevel":48,"defenceLevel":45,"rangeLevel":1,"magicLevel":1},"4694":{"name":"Confusion beast","hitpoints":64,"combatLevel":63,"attackSpeed":4,"attackLevel":52,"strengthLevel":55,"defenceLevel":52,"rangeLevel":1,"magicLevel":1},"4695":{"name":"Hopeless creature","hitpoints":71,"combatLevel":71,"attackSpeed":4,"attackLevel":59,"strengthLevel":62,"defenceLevel":59,"rangeLevel":1,"magicLevel":1},"4708":{"name":"The Shaikahan","hitpoints":100,"combatLevel":83,"attackSpeed":4,"attackLevel":80,"strengthLevel":80,"defenceLevel":25,"rangeLevel":1,"magicLevel":1,"rangeDef":10000,"magicDef":10000},"4709":{"name":"The Shaikahan","hitpoints":100,"combatLevel":83,"attackSpeed":4,"attackLevel":80,"strengthLevel":80,"defenceLevel":25,"rangeLevel":1,"magicLevel":1,"rangeDef":10000,"magicDef":10000},"4742":{"name":"Black golem","hitpoints":80,"combatLevel":75,"attackSpeed":4,"attackLevel":80,"strengthLevel":30,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"stabDef":300,"slashDef":300,"crushDef":1,"rangeDef":300,"magicDef":300},"4743":{"name":"White golem","hitpoints":80,"combatLevel":75,"attackSpeed":4,"attackLevel":80,"strengthLevel":30,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"stabDef":1,"slashDef":300,"crushDef":300,"rangeDef":300,"magicDef":300},"4744":{"name":"Grey golem","hitpoints":80,"combatLevel":75,"attackSpeed":4,"attackLevel":80,"strengthLevel":30,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"stabDef":300,"slashDef":1,"crushDef":300,"rangeDef":300,"magicDef":300},"4758":{"name":"Poltenip","hitpoints":22,"combatLevel":21,"attackSpeed":4,"attackLevel":19,"strengthLevel":18,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"stabDef":18,"slashDef":25,"crushDef":19,"rangeDef":20,"bonusAttack":4,"bonusStrength":5},"4759":{"name":"Radat","hitpoints":22,"combatLevel":21,"attackSpeed":4,"attackLevel":19,"strengthLevel":18,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"stabDef":18,"slashDef":25,"crushDef":19,"rangeDef":20,"bonusAttack":4,"bonusStrength":5},"4772":{"name":"Fortress Guard","hitpoints":22,"combatLevel":20,"attackSpeed":6,"attackLevel":18,"strengthLevel":18,"defenceLevel":15,"rangeLevel":1,"magicLevel":1,"stabDef":14,"slashDef":18,"crushDef":14,"rangeDef":15,"bonusAttack":5,"bonusStrength":6},"4773":{"name":"Fortress Guard","hitpoints":22,"combatLevel":20,"attackSpeed":6,"attackLevel":18,"strengthLevel":18,"defenceLevel":15,"rangeLevel":1,"magicLevel":1,"stabDef":14,"slashDef":18,"crushDef":14,"rangeDef":15,"bonusAttack":5,"bonusStrength":6},"4774":{"name":"Fortress Guard","hitpoints":22,"combatLevel":20,"attackSpeed":6,"attackLevel":18,"strengthLevel":18,"defenceLevel":15,"rangeLevel":1,"magicLevel":1,"stabDef":14,"slashDef":18,"crushDef":14,"rangeDef":15,"bonusAttack":5,"bonusStrength":6},"4775":{"name":"Fortress Guard","hitpoints":22,"combatLevel":20,"attackSpeed":6,"attackLevel":18,"strengthLevel":18,"defenceLevel":15,"rangeLevel":1,"magicLevel":1,"stabDef":14,"slashDef":18,"crushDef":14,"rangeDef":15,"bonusAttack":5,"bonusStrength":6},"4776":{"name":"Fortress Guard","hitpoints":22,"combatLevel":20,"attackSpeed":6,"attackLevel":18,"strengthLevel":18,"defenceLevel":15,"rangeLevel":1,"magicLevel":1,"stabDef":14,"slashDef":18,"crushDef":14,"rangeDef":15,"bonusAttack":5,"bonusStrength":6},"4797":{"name":"Slug Prince","hitpoints":70,"combatLevel":62,"attackSpeed":4,"attackLevel":50,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":30,"crushDef":30,"rangeDef":99,"magicDef":99},"4798":{"name":"Slug Prince","hitpoints":70,"combatLevel":62,"attackSpeed":4,"attackLevel":50,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":30,"crushDef":30,"rangeDef":99,"magicDef":99},"4799":{"name":"Giant lobster","hitpoints":50,"combatLevel":45,"slayerLevel":1,"attackSpeed":4,"attackLevel":40,"strengthLevel":30,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":30,"crushDef":15,"rangeDef":70,"magicDef":99},"4800":{"name":"Giant lobster","hitpoints":50,"combatLevel":45,"slayerLevel":1,"attackSpeed":4,"attackLevel":40,"strengthLevel":30,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":30,"crushDef":15,"rangeDef":70,"magicDef":99},"4805":{"name":"Hobgoblin","hitpoints":29,"combatLevel":28,"slayerLevel":1,"attackSpeed":4,"attackLevel":22,"strengthLevel":24,"defenceLevel":24,"rangeLevel":1,"magicLevel":1},"4813":{"name":"Icefiend","hitpoints":15,"combatLevel":13,"slayerLevel":1,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":12,"rangeLevel":1,"magicLevel":1},"4819":{"name":"Crab","hitpoints":19,"combatLevel":23,"attackSpeed":4,"attackLevel":19,"strengthLevel":20,"defenceLevel":26,"rangeLevel":1,"magicLevel":1},"4820":{"name":"Mudskipper","hitpoints":20,"combatLevel":30,"attackSpeed":4,"attackLevel":29,"strengthLevel":29,"defenceLevel":26,"rangeLevel":1,"magicLevel":1},"4821":{"name":"Mudskipper","hitpoints":20,"combatLevel":31,"attackSpeed":4,"attackLevel":30,"strengthLevel":30,"defenceLevel":29,"rangeLevel":1,"magicLevel":1},"4822":{"name":"Crab","hitpoints":18,"combatLevel":21,"attackSpeed":4,"attackLevel":17,"strengthLevel":17,"defenceLevel":22,"rangeLevel":1,"magicLevel":1},"4849":{"name":"Culinaromancer","hitpoints":150,"combatLevel":75,"attackSpeed":4,"attackLevel":10,"strengthLevel":100,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"4863":{"name":"Jubbly bird","hitpoints":21,"combatLevel":9,"slayerLevel":1},"4864":{"name":"Jubbly bird","hitpoints":21,"combatLevel":9,"slayerLevel":1},"4872":{"name":"Culinaromancer","hitpoints":150,"combatLevel":75,"attackSpeed":4,"attackLevel":10,"strengthLevel":100,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"4873":{"name":"Culinaromancer","hitpoints":150,"combatLevel":75,"attackSpeed":4,"attackLevel":10,"strengthLevel":100,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"4874":{"name":"Culinaromancer","hitpoints":150,"combatLevel":75,"attackSpeed":4,"attackLevel":10,"strengthLevel":100,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"4875":{"name":"Culinaromancer","hitpoints":150,"combatLevel":75,"attackSpeed":4,"attackLevel":10,"strengthLevel":100,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"4876":{"name":"Culinaromancer","hitpoints":150,"combatLevel":75,"attackSpeed":4,"attackLevel":10,"strengthLevel":100,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"4877":{"name":"Culinaromancer","hitpoints":150,"combatLevel":75,"attackSpeed":4,"attackLevel":10,"strengthLevel":100,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"4878":{"name":"Culinaromancer","hitpoints":150,"combatLevel":75,"attackSpeed":4,"attackLevel":10,"strengthLevel":100,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"4879":{"name":"Culinaromancer","hitpoints":150,"combatLevel":75,"attackSpeed":4,"attackLevel":10,"strengthLevel":100,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"4880":{"name":"Agrith-Na-Na","hitpoints":200,"combatLevel":146,"attackSpeed":4,"attackLevel":83,"strengthLevel":150,"defenceLevel":82,"rangeLevel":100,"magicLevel":100,"stabDef":100,"slashDef":100,"crushDef":100,"rangeDef":100,"magicDef":100,"bonusAttack":100},"4881":{"name":"Flambeed","hitpoints":210,"combatLevel":149,"attackSpeed":4,"attackLevel":120,"strengthLevel":120,"defenceLevel":75,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":5,"rangeDef":50,"magicDef":5,"bonusAttack":100},"4882":{"name":"Karamel","hitpoints":250,"combatLevel":136,"attackSpeed":3,"attackLevel":1,"strengthLevel":1,"defenceLevel":100,"rangeLevel":100,"magicLevel":1,"stab":50,"slash":50,"crush":50,"range":134,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":150,"magicDef":150,"bonusRangeStrength":55},"4883":{"name":"Dessourt","hitpoints":130,"combatLevel":121,"attackSpeed":3,"attackLevel":99,"strengthLevel":99,"defenceLevel":99,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":150,"crushDef":150,"bonusAttack":50,"bonusStrength":50},"4884":{"name":"Gelatinnoth Mother","hitpoints":240,"combatLevel":130,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"4885":{"name":"Gelatinnoth Mother","hitpoints":240,"combatLevel":130,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"4886":{"name":"Gelatinnoth Mother","hitpoints":240,"combatLevel":130,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"4887":{"name":"Gelatinnoth Mother","hitpoints":240,"combatLevel":130,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"4888":{"name":"Gelatinnoth Mother","hitpoints":240,"combatLevel":130,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"4889":{"name":"Gelatinnoth Mother","hitpoints":240,"combatLevel":130,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"4919":{"name":"Grip","hitpoints":25,"combatLevel":22,"attackSpeed":4,"attackLevel":18,"strengthLevel":17,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":16,"slashDef":27,"crushDef":22,"bonusAttack":5,"bonusStrength":7},"4922":{"name":"Ice Queen","hitpoints":105,"combatLevel":111,"attackSpeed":4,"attackLevel":95,"strengthLevel":94,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":40,"crushDef":20,"rangeDef":30,"magicDef":10},"4926":{"name":"Pirate Guard","hitpoints":25,"combatLevel":19,"attackSpeed":4,"attackLevel":18,"strengthLevel":16,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":39,"crushDef":30,"bonusAttack":20,"bonusStrength":16},"4927":{"name":"Entrana firebird","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"4930":{"name":"Solus Dellagar","hitpoints":40,"attackSpeed":3},"4933":{"name":"Solus Dellagar","hitpoints":40,"attackSpeed":3},"4934":{"name":"Black Knight","hitpoints":42,"combatLevel":32,"attackSpeed":5},"4958":{"name":"Woman","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"4959":{"name":"Black Knight","hitpoints":42,"combatLevel":32,"attackSpeed":5},"4960":{"name":"Black Knight","hitpoints":42,"combatLevel":32,"attackSpeed":5},"4962":{"name":"Solus Dellagar","hitpoints":40,"attackSpeed":3},"4969":{"name":"Khazard trooper","hitpoints":22,"combatLevel":19,"attackSpeed":5,"attackLevel":17,"strengthLevel":16,"defenceLevel":13,"rangeLevel":1,"magicLevel":1,"stabDef":25,"slashDef":25,"crushDef":22,"bonusAttack":9,"bonusStrength":5},"4970":{"name":"Khazard trooper","hitpoints":22,"combatLevel":19,"attackSpeed":5,"attackLevel":17,"strengthLevel":16,"defenceLevel":13,"rangeLevel":1,"magicLevel":1,"stabDef":25,"slashDef":25,"crushDef":22,"bonusAttack":9,"bonusStrength":5},"4972":{"name":"Khazard commander","hitpoints":22,"combatLevel":48,"attackSpeed":4,"attackLevel":50,"strengthLevel":45,"defenceLevel":50,"rangeLevel":1,"magicLevel":1},"4973":{"name":"Gnome troop","hitpoints":3,"combatLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":5,"magicLevel":1,"stabDef":3,"slashDef":4,"crushDef":5,"rangeDef":4,"magicDef":2,"bonusAttack":2,"bonusStrength":3,"bonusRangeStrength":2},"4974":{"name":"Gnome troop","hitpoints":3,"combatLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":5,"magicLevel":1,"stabDef":3,"slashDef":4,"crushDef":5,"rangeDef":4,"magicDef":2,"bonusAttack":2,"bonusStrength":3,"bonusRangeStrength":2},"4987":{"name":"Chronozon","hitpoints":60,"combatLevel":170,"attackSpeed":4,"attackLevel":173,"strengthLevel":172,"defenceLevel":173,"rangeLevel":1,"magicLevel":1,"demon":true},"5007":{"name":"Imp","hitpoints":8,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5043":{"name":"Suit of armour","hitpoints":29,"combatLevel":19,"attackSpeed":5,"attackLevel":16,"strengthLevel":14,"defenceLevel":9,"rangeLevel":1,"magicLevel":1,"stabDef":46,"slashDef":50,"crushDef":45,"rangeDef":45,"bonusAttack":8,"bonusStrength":10},"5054":{"name":"Skeleton Hellhound","hitpoints":55,"combatLevel":97,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":110,"defenceLevel":100,"rangeLevel":1,"magicLevel":1},"5079":{"name":"Delrith","hitpoints":7,"combatLevel":27,"demon":true},"5086":{"name":"Dark wizard","hitpoints":12,"combatLevel":7,"attackSpeed":4,"attackLevel":5,"strengthLevel":2,"defenceLevel":5,"rangeLevel":1,"magicLevel":6,"magicDef":3},"5087":{"name":"Dark wizard","hitpoints":12,"combatLevel":7,"attackSpeed":4,"attackLevel":5,"strengthLevel":2,"defenceLevel":5,"rangeLevel":1,"magicLevel":6,"magicDef":3},"5088":{"name":"Dark wizard","hitpoints":24,"combatLevel":20,"attackSpeed":4,"attackLevel":5,"strengthLevel":2,"defenceLevel":5,"rangeLevel":1,"magicLevel":6,"magicDef":3},"5089":{"name":"Dark wizard","hitpoints":24,"combatLevel":20,"attackSpeed":4,"attackLevel":5,"strengthLevel":2,"defenceLevel":5,"rangeLevel":1,"magicLevel":6,"magicDef":3},"5126":{"name":"Experiment No.2","hitpoints":95,"combatLevel":109,"attackSpeed":4,"attackLevel":104,"strengthLevel":92,"defenceLevel":90,"rangeLevel":100,"magicLevel":1,"stabDef":45,"slashDef":70,"crushDef":60,"rangeDef":55,"magicDef":60},"5129":{"name":"Glod","hitpoints":160,"combatLevel":138,"attackSpeed":4,"attackLevel":115,"strengthLevel":120,"defenceLevel":110,"rangeLevel":1,"magicLevel":1,"stabDef":105,"slashDef":110,"crushDef":130,"rangeDef":100,"magicDef":125},"5139":{"name":"Sigmund","hitpoints":70,"combatLevel":64,"attackSpeed":4,"attackLevel":55,"strengthLevel":55,"defenceLevel":44,"rangeLevel":1,"magicLevel":1,"magic":8,"poisonImmune":true,"venomImmune":true},"5142":{"name":"Sigmund","hitpoints":70,"combatLevel":64,"attackSpeed":4,"attackLevel":55,"strengthLevel":55,"defenceLevel":44,"rangeLevel":1,"magicLevel":1,"magic":8,"poisonImmune":true,"venomImmune":true},"5143":{"name":"Sigmund","hitpoints":70,"combatLevel":64,"attackSpeed":4,"attackLevel":55,"strengthLevel":55,"defenceLevel":44,"rangeLevel":1,"magicLevel":1,"magic":8,"poisonImmune":true,"venomImmune":true},"5144":{"name":"Sigmund","hitpoints":70,"combatLevel":64,"attackSpeed":4,"attackLevel":55,"strengthLevel":55,"defenceLevel":44,"rangeLevel":1,"magicLevel":1,"magic":8,"poisonImmune":true,"venomImmune":true},"5145":{"name":"Sigmund","hitpoints":70,"combatLevel":64,"attackSpeed":4,"attackLevel":55,"strengthLevel":55,"defenceLevel":44,"rangeLevel":1,"magicLevel":1,"magic":8,"poisonImmune":true,"venomImmune":true},"5146":{"name":"Sigmund","hitpoints":70,"combatLevel":64,"attackSpeed":4,"attackLevel":55,"strengthLevel":55,"defenceLevel":44,"rangeLevel":1,"magicLevel":1,"magic":8,"poisonImmune":true,"venomImmune":true},"5157":{"name":"H.A.M. Archer","hitpoints":35,"combatLevel":30,"attackSpeed":10,"defenceLevel":30,"rangeLevel":30,"stabDef":5,"slashDef":5,"rangeDef":5},"5158":{"name":"H.A.M. Mage","hitpoints":35,"combatLevel":30,"attackSpeed":6,"defenceLevel":30,"rangeLevel":1,"magicLevel":30,"magic":8,"stabDef":5,"slashDef":5,"rangeDef":5},"5185":{"name":"Guard","hitpoints":16,"combatLevel":10,"slayerLevel":1,"attackSpeed":4,"attackLevel":8,"strengthLevel":6,"defenceLevel":9,"rangeLevel":1,"magicLevel":1,"stabDef":3,"slashDef":4,"crushDef":4,"rangeDef":3,"magicDef":2,"bonusAttack":5,"bonusStrength":7},"5186":{"name":"Guard","hitpoints":16,"combatLevel":10,"slayerLevel":1,"attackSpeed":4,"attackLevel":8,"strengthLevel":6,"defenceLevel":9,"rangeLevel":1,"magicLevel":1,"stabDef":3,"slashDef":4,"crushDef":4,"rangeDef":3,"magicDef":2,"bonusAttack":5,"bonusStrength":7},"5187":{"name":"Guard","hitpoints":16,"combatLevel":10,"slayerLevel":1,"attackSpeed":4,"attackLevel":8,"strengthLevel":6,"defenceLevel":9,"rangeLevel":1,"magicLevel":1,"stabDef":3,"slashDef":4,"crushDef":4,"rangeDef":3,"magicDef":2,"bonusAttack":5,"bonusStrength":7},"5188":{"name":"Guard","hitpoints":16,"combatLevel":10,"slayerLevel":1,"attackSpeed":4,"attackLevel":8,"strengthLevel":6,"defenceLevel":9,"rangeLevel":1,"magicLevel":1,"stabDef":3,"slashDef":4,"crushDef":4,"rangeDef":3,"magicDef":2,"bonusAttack":5,"bonusStrength":7},"5189":{"name":"Guard","hitpoints":16,"combatLevel":10,"slayerLevel":1,"attackSpeed":4,"attackLevel":8,"strengthLevel":6,"defenceLevel":9,"rangeLevel":1,"magicLevel":1,"stabDef":3,"slashDef":4,"crushDef":4,"rangeDef":3,"magicDef":2,"bonusAttack":5,"bonusStrength":7},"5192":{"name":"Goblin","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5193":{"name":"Goblin","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5194":{"name":"Baby dragon","hitpoints":50,"combatLevel":48,"slayerLevel":1,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":50,"crushDef":50,"rangeDef":30,"magicDef":40,"dragon":true},"5195":{"name":"Goblin","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5196":{"name":"Goblin","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5197":{"name":"Goblin","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5198":{"name":"Goblin","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5199":{"name":"Goblin","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5200":{"name":"Goblin","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5201":{"name":"Goblin","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5202":{"name":"Goblin","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5203":{"name":"Goblin","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5204":{"name":"Goblin","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5205":{"name":"Goblin","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5206":{"name":"Goblin","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5207":{"name":"Goblin","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5208":{"name":"Goblin","hitpoints":5,"combatLevel":2,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5211":{"name":"Weaponsmaster","hitpoints":20,"combatLevel":23,"attackSpeed":5,"attackLevel":21,"strengthLevel":21,"defenceLevel":21,"rangeLevel":1,"magicLevel":1,"stabDef":21,"slashDef":23,"crushDef":21,"rangeDef":20,"bonusAttack":8,"bonusStrength":10},"5213":{"name":"Jonny the beard","hitpoints":8,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5217":{"name":"Thief","hitpoints":17,"combatLevel":16,"attackSpeed":4,"attackLevel":14,"strengthLevel":13,"defenceLevel":12,"rangeLevel":1,"magicLevel":1},"5218":{"name":"Thief","hitpoints":17,"combatLevel":16,"attackSpeed":4,"attackLevel":14,"strengthLevel":13,"defenceLevel":12,"rangeLevel":1,"magicLevel":1},"5219":{"name":"Thief","hitpoints":17,"combatLevel":16,"attackSpeed":4,"attackLevel":14,"strengthLevel":13,"defenceLevel":12,"rangeLevel":1,"magicLevel":1},"5220":{"name":"Thief","hitpoints":17,"combatLevel":16,"attackSpeed":4,"attackLevel":14,"strengthLevel":13,"defenceLevel":12,"rangeLevel":1,"magicLevel":1},"5223":{"name":"Sigmund","hitpoints":70,"combatLevel":64,"attackSpeed":4,"attackLevel":55,"strengthLevel":55,"defenceLevel":44,"rangeLevel":1,"magicLevel":1,"magic":8,"poisonImmune":true,"venomImmune":true},"5237":{"name":"Skeleton","hitpoints":110,"combatLevel":142,"slayerLevel":1,"attackSpeed":4,"attackLevel":180,"strengthLevel":90,"defenceLevel":110,"rangeLevel":1,"magicLevel":110,"bonusAttack":50,"undead":true},"5238":{"name":"Spider","hitpoints":2,"combatLevel":1,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"slashDef":1,"magicDef":1,"bonusAttack":1,"bonusStrength":1},"5239":{"name":"Spider","hitpoints":2,"combatLevel":1,"slayerLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"slashDef":1,"magicDef":1,"bonusAttack":1,"bonusStrength":1},"5240":{"name":"Bird","hitpoints":10,"combatLevel":11,"slayerLevel":1,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":10},"5241":{"name":"Bird","hitpoints":5,"combatLevel":5,"slayerLevel":1,"attackSpeed":4,"attackLevel":5,"strengthLevel":5,"defenceLevel":5,"rangeLevel":1,"magicLevel":5},"5242":{"name":"Scorpion","hitpoints":15,"combatLevel":38,"slayerLevel":1,"attackSpeed":6},"5243":{"name":"Jungle spider","hitpoints":35,"combatLevel":37,"slayerLevel":1,"attackSpeed":4,"attackLevel":50,"strengthLevel":30,"defenceLevel":10,"rangeLevel":1,"magicLevel":10,"bonusAttack":100,"bonusStrength":100},"5244":{"name":"Snake","hitpoints":36,"combatLevel":24,"attackSpeed":4,"attackLevel":15,"strengthLevel":25,"defenceLevel":10,"rangeLevel":1,"magicLevel":10,"bonusAttack":100,"bonusStrength":100},"5263":{"name":"Padulah","hitpoints":130,"combatLevel":149,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":130,"rangeLevel":1,"magicLevel":130,"bonusAttack":50},"5271":{"name":"Monkey Guard","hitpoints":130,"combatLevel":149,"slayerLevel":1,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":130,"rangeLevel":1,"magicLevel":130},"5272":{"name":"Monkey Archer","hitpoints":50,"combatLevel":86,"slayerLevel":1,"attackSpeed":4,"attackLevel":80,"strengthLevel":80,"defenceLevel":80,"rangeLevel":110,"magicLevel":1},"5273":{"name":"Monkey Archer","hitpoints":50,"combatLevel":86,"slayerLevel":1,"attackSpeed":4,"attackLevel":80,"strengthLevel":80,"defenceLevel":80,"rangeLevel":110,"magicLevel":1},"5274":{"name":"Monkey Archer","hitpoints":50,"combatLevel":86,"slayerLevel":1,"attackSpeed":4,"attackLevel":80,"strengthLevel":80,"defenceLevel":80,"rangeLevel":110,"magicLevel":1},"5275":{"name":"Monkey Guard","hitpoints":130,"combatLevel":167,"slayerLevel":1,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":200,"rangeLevel":1,"magicLevel":130,"bonusAttack":50},"5276":{"name":"Monkey Guard","hitpoints":130,"combatLevel":167,"slayerLevel":1,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":200,"rangeLevel":1,"magicLevel":130,"bonusAttack":50},"5281":{"name":"Monkey Zombie","hitpoints":60,"combatLevel":98,"slayerLevel":1,"attackSpeed":4,"attackLevel":150,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":60,"bonusAttack":35,"undead":true},"5282":{"name":"Monkey Zombie","hitpoints":90,"combatLevel":129,"slayerLevel":1,"attackSpeed":4,"attackLevel":150,"strengthLevel":110,"defenceLevel":90,"rangeLevel":1,"magicLevel":90,"bonusAttack":35,"undead":true},"5283":{"name":"Monkey Zombie","hitpoints":60,"combatLevel":82,"slayerLevel":1,"attackSpeed":4,"attackLevel":100,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":60,"bonusAttack":15,"undead":true},"5293":{"name":"Elf Warrior","hitpoints":105,"combatLevel":108,"slayerLevel":1,"attackSpeed":4,"attackLevel":95,"strengthLevel":95,"defenceLevel":80,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60},"5294":{"name":"Elf Warrior","hitpoints":105,"combatLevel":108,"slayerLevel":1,"attackSpeed":4,"attackLevel":95,"strengthLevel":95,"defenceLevel":80,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60},"5295":{"name":"Elf Archer","hitpoints":105,"combatLevel":90,"slayerLevel":1,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":80,"rangeLevel":90,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60},"5296":{"name":"Elf Archer","hitpoints":105,"combatLevel":90,"slayerLevel":1,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":80,"rangeLevel":90,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60},"5329":{"name":"Sigmund","hitpoints":70,"combatLevel":64,"attackSpeed":4,"attackLevel":55,"strengthLevel":55,"defenceLevel":44,"rangeLevel":1,"magicLevel":1,"magic":8,"poisonImmune":true,"venomImmune":true},"5330":{"name":"Cave goblin miner","hitpoints":10,"combatLevel":11,"slayerLevel":1,"attackSpeed":4,"attackLevel":10,"strengthLevel":12,"defenceLevel":7,"rangeLevel":1,"magicLevel":1},"5331":{"name":"Cave goblin miner","hitpoints":10,"combatLevel":11,"slayerLevel":1,"attackSpeed":4,"attackLevel":10,"strengthLevel":12,"defenceLevel":7,"rangeLevel":1,"magicLevel":1},"5332":{"name":"Cave goblin miner","hitpoints":10,"combatLevel":11,"slayerLevel":1,"attackSpeed":4,"attackLevel":10,"strengthLevel":12,"defenceLevel":7,"rangeLevel":1,"magicLevel":1},"5333":{"name":"Cave goblin miner","hitpoints":10,"combatLevel":11,"slayerLevel":1,"attackSpeed":4,"attackLevel":10,"strengthLevel":12,"defenceLevel":7,"rangeLevel":1,"magicLevel":1},"5334":{"name":"Cave goblin guard","hitpoints":26,"combatLevel":26,"slayerLevel":1,"attackSpeed":6,"attackLevel":22,"strengthLevel":16,"defenceLevel":22,"rangeLevel":1,"magicLevel":1,"slashDef":15,"crushDef":19,"rangeDef":12},"5335":{"name":"Cave goblin guard","hitpoints":26,"combatLevel":24,"slayerLevel":1,"attackSpeed":6,"attackLevel":22,"strengthLevel":16,"defenceLevel":22,"rangeLevel":1,"magicLevel":1,"slashDef":15,"crushDef":19,"rangeDef":12},"5336":{"name":"Cave goblin miner","hitpoints":10,"combatLevel":11,"slayerLevel":1,"attackSpeed":4,"attackLevel":10,"strengthLevel":12,"defenceLevel":7,"rangeLevel":1,"magicLevel":1},"5337":{"name":"Cave goblin miner","hitpoints":10,"combatLevel":11,"slayerLevel":1,"attackSpeed":4,"attackLevel":10,"strengthLevel":12,"defenceLevel":7,"rangeLevel":1,"magicLevel":1},"5338":{"name":"Cave goblin miner","hitpoints":10,"combatLevel":11,"slayerLevel":1,"attackSpeed":4,"attackLevel":10,"strengthLevel":12,"defenceLevel":7,"rangeLevel":1,"magicLevel":1},"5339":{"name":"Cave goblin miner","hitpoints":10,"combatLevel":11,"slayerLevel":1,"attackSpeed":4,"attackLevel":10,"strengthLevel":12,"defenceLevel":7,"rangeLevel":1,"magicLevel":1},"5342":{"name":"Undead one","hitpoints":47,"combatLevel":68,"slayerLevel":1,"attackSpeed":4,"attackLevel":63,"strengthLevel":63,"defenceLevel":63,"undead":true},"5343":{"name":"Undead one","hitpoints":47,"combatLevel":68,"slayerLevel":1,"attackSpeed":4,"attackLevel":63,"strengthLevel":63,"defenceLevel":63,"undead":true},"5344":{"name":"Undead one","hitpoints":47,"combatLevel":61,"slayerLevel":1,"attackSpeed":4,"attackLevel":55,"strengthLevel":55,"defenceLevel":55,"stabDef":5,"slashDef":5,"crushDef":4,"rangeDef":4,"magicDef":1,"bonusAttack":7,"bonusStrength":5,"undead":true},"5345":{"name":"Undead one","hitpoints":47,"combatLevel":61,"slayerLevel":1,"attackSpeed":4,"attackLevel":55,"strengthLevel":55,"defenceLevel":55,"stabDef":5,"slashDef":5,"crushDef":4,"rangeDef":4,"magicDef":1,"bonusAttack":7,"bonusStrength":5,"undead":true},"5346":{"name":"Undead one","hitpoints":47,"combatLevel":68,"slayerLevel":1,"attackSpeed":4,"attackLevel":63,"strengthLevel":63,"defenceLevel":63,"undead":true},"5347":{"name":"Undead one","hitpoints":47,"combatLevel":68,"slayerLevel":1,"attackSpeed":4,"attackLevel":63,"strengthLevel":63,"defenceLevel":63,"undead":true},"5348":{"name":"Undead one","hitpoints":47,"combatLevel":68,"slayerLevel":1,"attackSpeed":4,"attackLevel":63,"strengthLevel":63,"defenceLevel":63,"undead":true},"5349":{"name":"Undead one","hitpoints":59,"combatLevel":73,"slayerLevel":1,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"bonusAttack":4,"bonusStrength":5,"undead":true},"5350":{"name":"Undead one","hitpoints":59,"combatLevel":73,"slayerLevel":1,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"bonusAttack":4,"bonusStrength":5,"undead":true},"5351":{"name":"Undead one","hitpoints":59,"combatLevel":73,"slayerLevel":1,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"bonusAttack":4,"bonusStrength":5,"undead":true},"5353":{"name":"Nazastarool","hitpoints":70,"combatLevel":91,"slayerLevel":1,"attackSpeed":4,"attackLevel":85,"strengthLevel":80,"defenceLevel":80},"5354":{"name":"Nazastarool","hitpoints":70,"combatLevel":68,"slayerLevel":1,"attackSpeed":4,"attackLevel":58,"strengthLevel":54,"defenceLevel":58,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"magicDef":5,"bonusAttack":15,"bonusStrength":15},"5355":{"name":"Nazastarool","hitpoints":80,"combatLevel":93,"slayerLevel":1,"attackSpeed":4,"attackLevel":85,"strengthLevel":80,"defenceLevel":80},"5369":{"name":"Goblin guard","hitpoints":43,"combatLevel":42,"slayerLevel":1,"attackSpeed":4,"attackLevel":32,"strengthLevel":37,"defenceLevel":37,"rangeLevel":1,"magicLevel":1,"stabDef":4,"slashDef":6,"crushDef":6,"bonusAttack":8,"bonusStrength":5},"5370":{"name":"Ghost","hitpoints":20,"combatLevel":24,"slayerLevel":1,"attackSpeed":4,"attackLevel":23,"strengthLevel":23,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"undead":true},"5372":{"name":"Grave scorpion","hitpoints":7,"combatLevel":12,"slayerLevel":1,"attackSpeed":4,"attackLevel":11,"strengthLevel":12,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":3},"5373":{"name":"Poison spider","hitpoints":64,"combatLevel":31,"slayerLevel":1,"attackSpeed":6},"5512":{"name":"Gardener","hitpoints":7,"combatLevel":4,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":7,"rangeLevel":1,"magicLevel":1},"5534":{"name":"Whirlpool","combatLevel":127,"slayerLevel":87,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"rangeDef":300,"magicDef":130},"5535":{"name":"Enormous Tentacle","hitpoints":120,"combatLevel":112,"slayerLevel":87,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":150,"magicLevel":1,"rangeDef":270,"poisonImmune":true,"venomImmune":true},"5563":{"name":"Angry barbarian spirit","hitpoints":190,"combatLevel":166,"attackSpeed":4,"attackLevel":150,"strengthLevel":140,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"5564":{"name":"Enraged barbarian spirit","hitpoints":190,"combatLevel":166,"attackSpeed":4,"attackLevel":150,"strengthLevel":140,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"5565":{"name":"Berserk barbarian spirit","hitpoints":190,"combatLevel":166,"attackSpeed":4,"attackLevel":150,"strengthLevel":140,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"5566":{"name":"Ferocious barbarian spirit","hitpoints":190,"combatLevel":166,"attackSpeed":4,"attackLevel":150,"strengthLevel":140,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"slashDef":73,"crushDef":72,"rangeDef":72,"bonusAttack":9,"bonusStrength":15},"5615":{"name":"Swamp snake","hitpoints":120,"combatLevel":80,"attackSpeed":4,"attackLevel":50,"strengthLevel":50,"defenceLevel":70,"rangeLevel":30,"magicLevel":30},"5616":{"name":"Swamp snake","hitpoints":125,"combatLevel":109,"attackSpeed":4,"attackLevel":70,"strengthLevel":110,"defenceLevel":80,"rangeLevel":30,"magicLevel":30},"5617":{"name":"Swamp snake","hitpoints":130,"combatLevel":139,"attackSpeed":4,"attackLevel":90,"strengthLevel":170,"defenceLevel":90,"rangeLevel":30,"magicLevel":30},"5625":{"name":"Ghast","hitpoints":115,"combatLevel":79,"attackSpeed":8,"attackLevel":80,"strengthLevel":30,"defenceLevel":60,"rangeLevel":30,"magicLevel":30,"undead":true},"5626":{"name":"Ghast","hitpoints":135,"combatLevel":109,"attackSpeed":8,"attackLevel":110,"strengthLevel":70,"defenceLevel":70,"rangeLevel":30,"magicLevel":30,"undead":true},"5627":{"name":"Ghast","hitpoints":160,"combatLevel":139,"attackSpeed":8,"attackLevel":135,"strengthLevel":110,"defenceLevel":80,"rangeLevel":30,"magicLevel":30,"undead":true},"5628":{"name":"Giant snail","hitpoints":125,"combatLevel":80,"attackSpeed":4,"attackLevel":30,"strengthLevel":30,"defenceLevel":60,"rangeLevel":70,"magicLevel":30},"5629":{"name":"Giant snail","hitpoints":150,"combatLevel":109,"attackSpeed":4,"attackLevel":30,"strengthLevel":30,"defenceLevel":75,"rangeLevel":110,"magicLevel":30},"5630":{"name":"Giant snail","hitpoints":160,"combatLevel":139,"attackSpeed":4,"attackLevel":30,"strengthLevel":30,"defenceLevel":86,"rangeLevel":160,"magicLevel":30},"5633":{"name":"Shade","hitpoints":115,"combatLevel":140,"slayerLevel":1,"attackSpeed":6,"attackLevel":130,"strengthLevel":136,"defenceLevel":100,"rangeLevel":50,"magicLevel":50,"undead":true},"5634":{"name":"Vampyre Juvinate","hitpoints":50,"combatLevel":59,"attackSpeed":4,"attackLevel":95,"strengthLevel":16,"defenceLevel":45,"rangeLevel":50,"magicLevel":50},"5635":{"name":"Vampyre Juvinate","hitpoints":100,"combatLevel":90,"attackSpeed":4,"attackLevel":113,"strengthLevel":46,"defenceLevel":55,"rangeLevel":50,"magicLevel":50},"5636":{"name":"Vampyre Juvinate","hitpoints":150,"combatLevel":119,"attackSpeed":4,"attackLevel":127,"strengthLevel":76,"defenceLevel":65,"rangeLevel":50,"magicLevel":50},"5637":{"name":"Vampyre Juvinate","hitpoints":50,"combatLevel":59,"attackSpeed":4,"attackLevel":95,"strengthLevel":16,"defenceLevel":45,"rangeLevel":50,"magicLevel":50},"5638":{"name":"Vampyre Juvinate","hitpoints":100,"combatLevel":90,"attackSpeed":4,"attackLevel":113,"strengthLevel":46,"defenceLevel":55,"rangeLevel":50,"magicLevel":50},"5639":{"name":"Vampyre Juvinate","hitpoints":150,"combatLevel":119,"attackSpeed":4,"attackLevel":127,"strengthLevel":76,"defenceLevel":65,"rangeLevel":50,"magicLevel":50},"5640":{"name":"Feral Vampyre","hitpoints":75,"combatLevel":70,"slayerLevel":1,"attackSpeed":4,"attackLevel":90,"strengthLevel":46,"defenceLevel":30},"5641":{"name":"Feral Vampyre","hitpoints":135,"combatLevel":100,"slayerLevel":1,"attackSpeed":4,"attackLevel":105,"strengthLevel":76,"defenceLevel":30},"5642":{"name":"Feral Vampyre","hitpoints":185,"combatLevel":130,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":116,"defenceLevel":30},"5643":{"name":"Tentacle","hitpoints":75,"combatLevel":99,"attackSpeed":6,"attackLevel":115,"strengthLevel":76,"defenceLevel":75,"rangeLevel":115,"magicLevel":50},"5644":{"name":"Head","hitpoints":150,"combatLevel":140,"attackSpeed":10,"attackLevel":73,"strengthLevel":186,"defenceLevel":75,"rangeLevel":50,"magicLevel":50},"5645":{"name":"Head","hitpoints":150,"combatLevel":140,"attackSpeed":10,"attackLevel":73,"strengthLevel":186,"defenceLevel":75,"rangeLevel":50,"magicLevel":50},"5646":{"name":"Tentacle","hitpoints":75,"combatLevel":99,"attackSpeed":6,"attackLevel":115,"strengthLevel":76,"defenceLevel":75,"rangeLevel":115,"magicLevel":50},"5647":{"name":"Zombie","hitpoints":20,"combatLevel":23,"slayerLevel":1,"attackLevel":20,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"undead":true},"5648":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":30,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5649":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":30,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5650":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":30,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5651":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":30,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5652":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":30,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5653":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":30,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5654":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":30,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5655":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":30,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5656":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":35,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5657":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":35,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5658":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":35,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5659":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":35,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5660":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":35,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5661":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":35,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5662":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":35,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5663":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":35,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5665":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":40,"slayerLevel":1,"attackSpeed":4,"attackLevel":101,"strengthLevel":6,"defenceLevel":12,"rangeLevel":1,"magicLevel":1,"undead":true},"5666":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":40,"slayerLevel":1,"attackSpeed":4,"attackLevel":101,"strengthLevel":6,"defenceLevel":12,"rangeLevel":1,"magicLevel":1,"undead":true},"5667":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":40,"slayerLevel":1,"attackSpeed":4,"attackLevel":101,"strengthLevel":6,"defenceLevel":12,"rangeLevel":1,"magicLevel":1,"undead":true},"5668":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":40,"slayerLevel":1,"attackSpeed":4,"attackLevel":101,"strengthLevel":6,"defenceLevel":12,"rangeLevel":1,"magicLevel":1,"undead":true},"5669":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":40,"slayerLevel":1,"attackSpeed":4,"attackLevel":101,"strengthLevel":6,"defenceLevel":12,"rangeLevel":1,"magicLevel":1,"undead":true},"5670":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":40,"slayerLevel":1,"attackSpeed":4,"attackLevel":101,"strengthLevel":6,"defenceLevel":12,"rangeLevel":1,"magicLevel":1,"undead":true},"5671":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":40,"slayerLevel":1,"attackSpeed":4,"attackLevel":101,"strengthLevel":6,"defenceLevel":12,"rangeLevel":1,"magicLevel":1,"undead":true},"5672":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":40,"slayerLevel":1,"attackSpeed":4,"attackLevel":101,"strengthLevel":6,"defenceLevel":12,"rangeLevel":1,"magicLevel":1,"undead":true},"5673":{"name":"Undead Lumberjack","hitpoints":13,"combatLevel":45,"slayerLevel":1,"attackSpeed":4,"attackLevel":105,"strengthLevel":16,"defenceLevel":13,"rangeLevel":1,"magicLevel":1,"undead":true},"5674":{"name":"Undead Lumberjack","hitpoints":13,"combatLevel":45,"slayerLevel":1,"attackSpeed":4,"attackLevel":105,"strengthLevel":16,"defenceLevel":13,"rangeLevel":1,"magicLevel":1,"undead":true},"5675":{"name":"Undead Lumberjack","hitpoints":13,"combatLevel":45,"slayerLevel":1,"attackSpeed":4,"attackLevel":105,"strengthLevel":16,"defenceLevel":13,"rangeLevel":1,"magicLevel":1,"undead":true},"5676":{"name":"Undead Lumberjack","hitpoints":13,"combatLevel":45,"slayerLevel":1,"attackSpeed":4,"attackLevel":105,"strengthLevel":16,"defenceLevel":13,"rangeLevel":1,"magicLevel":1,"undead":true},"5677":{"name":"Undead Lumberjack","hitpoints":13,"combatLevel":45,"slayerLevel":1,"attackSpeed":4,"attackLevel":105,"strengthLevel":16,"defenceLevel":13,"rangeLevel":1,"magicLevel":1,"undead":true},"5678":{"name":"Undead Lumberjack","hitpoints":13,"combatLevel":45,"slayerLevel":1,"attackSpeed":4,"attackLevel":105,"strengthLevel":16,"defenceLevel":13,"rangeLevel":1,"magicLevel":1,"undead":true},"5679":{"name":"Undead Lumberjack","hitpoints":13,"combatLevel":45,"slayerLevel":1,"attackSpeed":4,"attackLevel":105,"strengthLevel":16,"defenceLevel":13,"rangeLevel":1,"magicLevel":1,"undead":true},"5680":{"name":"Undead Lumberjack","hitpoints":13,"combatLevel":45,"slayerLevel":1,"attackSpeed":4,"attackLevel":105,"strengthLevel":16,"defenceLevel":13,"rangeLevel":1,"magicLevel":1,"undead":true},"5681":{"name":"Undead Lumberjack","hitpoints":14,"combatLevel":50,"slayerLevel":1,"attackSpeed":4,"attackLevel":117,"strengthLevel":16,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"undead":true},"5682":{"name":"Undead Lumberjack","hitpoints":14,"combatLevel":50,"slayerLevel":1,"attackSpeed":4,"attackLevel":117,"strengthLevel":16,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"undead":true},"5683":{"name":"Undead Lumberjack","hitpoints":14,"combatLevel":50,"slayerLevel":1,"attackSpeed":4,"attackLevel":117,"strengthLevel":16,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"undead":true},"5684":{"name":"Undead Lumberjack","hitpoints":14,"combatLevel":50,"slayerLevel":1,"attackSpeed":4,"attackLevel":117,"strengthLevel":16,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"undead":true},"5685":{"name":"Undead Lumberjack","hitpoints":14,"combatLevel":50,"slayerLevel":1,"attackSpeed":4,"attackLevel":117,"strengthLevel":16,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"undead":true},"5686":{"name":"Undead Lumberjack","hitpoints":14,"combatLevel":50,"slayerLevel":1,"attackSpeed":4,"attackLevel":117,"strengthLevel":16,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"undead":true},"5687":{"name":"Undead Lumberjack","hitpoints":14,"combatLevel":50,"slayerLevel":1,"attackSpeed":4,"attackLevel":117,"strengthLevel":16,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"undead":true},"5688":{"name":"Undead Lumberjack","hitpoints":14,"combatLevel":50,"slayerLevel":1,"attackSpeed":4,"attackLevel":117,"strengthLevel":16,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"undead":true},"5689":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":55,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5690":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":55,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5691":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":55,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5692":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":55,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5693":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":55,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5694":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":55,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5695":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":55,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5696":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":55,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5697":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":60,"slayerLevel":1,"attackSpeed":4,"attackLevel":137,"strengthLevel":26,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"5698":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":60,"slayerLevel":1,"attackSpeed":4,"attackLevel":137,"strengthLevel":26,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"5699":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":60,"slayerLevel":1,"attackSpeed":4,"attackLevel":137,"strengthLevel":26,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"5700":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":60,"slayerLevel":1,"attackSpeed":4,"attackLevel":137,"strengthLevel":26,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"5701":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":60,"slayerLevel":1,"attackSpeed":4,"attackLevel":137,"strengthLevel":26,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"5702":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":60,"slayerLevel":1,"attackSpeed":4,"attackLevel":137,"strengthLevel":26,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"5703":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":60,"slayerLevel":1,"attackSpeed":4,"attackLevel":137,"strengthLevel":26,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"5704":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":60,"slayerLevel":1,"attackSpeed":4,"attackLevel":137,"strengthLevel":26,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"5705":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":64,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5706":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":64,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5707":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":64,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5708":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":64,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5709":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":64,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5710":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":64,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5711":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":64,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5712":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":64,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5713":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":70,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5714":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":70,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5715":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":70,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5716":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":70,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5717":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":70,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5718":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":70,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5719":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":70,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5720":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":70,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5739":{"name":"Penance Fighter","hitpoints":28,"combatLevel":30,"attackSpeed":4},"5740":{"name":"Penance Fighter","hitpoints":29,"combatLevel":32,"attackSpeed":4},"5741":{"name":"Penance Fighter","hitpoints":32,"combatLevel":37,"attackSpeed":4},"5742":{"name":"Penance Fighter","hitpoints":37,"combatLevel":42,"attackSpeed":4},"5743":{"name":"Penance Fighter","hitpoints":38,"combatLevel":47,"attackSpeed":4},"5744":{"name":"Penance Fighter","hitpoints":49,"combatLevel":56,"attackSpeed":4},"5745":{"name":"Penance Fighter","hitpoints":50,"combatLevel":61,"attackSpeed":4},"5746":{"name":"Penance Fighter","hitpoints":55,"combatLevel":68,"attackSpeed":4},"5747":{"name":"Penance Fighter","hitpoints":56,"combatLevel":77,"attackSpeed":4},"5757":{"name":"Penance Ranger","hitpoints":20,"combatLevel":21,"attackSpeed":4},"5758":{"name":"Penance Ranger","hitpoints":29,"combatLevel":25,"attackSpeed":4},"5759":{"name":"Penance Ranger","hitpoints":32,"combatLevel":32,"attackSpeed":4},"5760":{"name":"Penance Ranger","hitpoints":34,"combatLevel":38,"attackSpeed":4},"5761":{"name":"Penance Ranger","hitpoints":41,"combatLevel":43,"attackSpeed":4},"5762":{"name":"Penance Ranger","hitpoints":50,"combatLevel":51,"attackSpeed":4},"5763":{"name":"Penance Ranger","hitpoints":50,"combatLevel":57,"attackSpeed":4},"5764":{"name":"Penance Ranger","hitpoints":55,"combatLevel":64,"attackSpeed":4},"5765":{"name":"Penance Ranger","hitpoints":58,"combatLevel":72,"attackSpeed":4},"5775":{"name":"Penance Queen","hitpoints":250,"combatLevel":209,"attackSpeed":4,"attackLevel":260,"strengthLevel":92,"defenceLevel":132,"rangeLevel":116,"magicLevel":1},"5776":{"name":"Queen spawn","hitpoints":45,"combatLevel":63,"attackSpeed":4,"attackLevel":60,"strengthLevel":62,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"venomImmune":true},"5779":{"name":"Giant Mole","hitpoints":200,"combatLevel":230,"slayerLevel":1,"attackSpeed":4,"attackLevel":200,"strengthLevel":200,"defenceLevel":200,"rangeLevel":1,"magicLevel":200,"stabDef":60,"slashDef":80,"crushDef":100,"rangeDef":60,"magicDef":80},"5816":{"name":"Yak","hitpoints":50,"combatLevel":22,"attackSpeed":4,"attackLevel":20,"strengthLevel":10,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"poisonImmune":true},"5822":{"name":"Ice Troll King","hitpoints":150,"combatLevel":122,"slayerLevel":1,"attackSpeed":4,"attackLevel":100,"strengthLevel":100,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"stabDef":45,"slashDef":45,"crushDef":45,"rangeDef":2000,"magicDef":2000,"bonusAttack":60,"bonusStrength":60},"5823":{"name":"Ice troll runt","hitpoints":60,"combatLevel":74,"slayerLevel":1,"attackSpeed":4,"attackLevel":60,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"5824":{"name":"Ice troll male","hitpoints":80,"combatLevel":82,"slayerLevel":1,"attackSpeed":4,"attackLevel":80,"strengthLevel":80,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"5825":{"name":"Ice troll female","hitpoints":80,"combatLevel":82,"slayerLevel":1,"attackSpeed":4,"attackLevel":80,"strengthLevel":80,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"5828":{"name":"Ice troll runt","hitpoints":60,"combatLevel":74,"slayerLevel":1,"attackSpeed":4,"attackLevel":60,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"5829":{"name":"Ice troll male","hitpoints":80,"combatLevel":82,"slayerLevel":1,"attackSpeed":4,"attackLevel":80,"strengthLevel":80,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"5830":{"name":"Ice troll female","hitpoints":80,"combatLevel":82,"slayerLevel":1,"attackSpeed":4,"attackLevel":80,"strengthLevel":80,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"5831":{"name":"Ice troll grunt","hitpoints":80,"combatLevel":102,"slayerLevel":1,"attackSpeed":4,"attackLevel":100,"strengthLevel":100,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"5842":{"name":"Cow","hitpoints":8,"combatLevel":2,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"poisonImmune":true,"venomImmune":true},"5848":{"name":"Tanglefoot","hitpoints":102,"combatLevel":111,"attackSpeed":4,"attackLevel":97,"strengthLevel":97,"defenceLevel":91,"rangeLevel":1,"magicLevel":1},"5853":{"name":"Baby tanglefoot","hitpoints":40,"combatLevel":45,"attackSpeed":4,"attackLevel":40,"strengthLevel":38,"defenceLevel":40,"rangeLevel":1,"magicLevel":1},"5854":{"name":"Baby tanglefoot","hitpoints":40,"combatLevel":45,"attackSpeed":4,"attackLevel":40,"strengthLevel":38,"defenceLevel":40,"rangeLevel":1,"magicLevel":1},"5862":{"name":"Cerberus","hitpoints":600,"combatLevel":318,"slayerLevel":91,"attackSpeed":6,"attackLevel":220,"strengthLevel":220,"defenceLevel":100,"rangeLevel":220,"magicLevel":220,"slash":50,"range":50,"magic":50,"stabDef":50,"slashDef":100,"crushDef":25,"rangeDef":100,"magicDef":100,"bonusAttack":50,"poisonImmune":true,"venomImmune":true},"5863":{"name":"Cerberus","hitpoints":600,"combatLevel":318,"slayerLevel":91,"attackSpeed":6,"attackLevel":220,"strengthLevel":220,"defenceLevel":100,"rangeLevel":220,"magicLevel":220,"slash":50,"range":50,"magic":50,"stabDef":50,"slashDef":100,"crushDef":25,"rangeDef":100,"magicDef":100,"bonusAttack":50,"poisonImmune":true,"venomImmune":true},"5866":{"name":"Cerberus","hitpoints":600,"combatLevel":318,"slayerLevel":91,"attackSpeed":6,"attackLevel":220,"strengthLevel":220,"defenceLevel":100,"rangeLevel":220,"magicLevel":220,"slash":50,"range":50,"magic":50,"stabDef":50,"slashDef":100,"crushDef":25,"rangeDef":100,"magicDef":100,"bonusAttack":50,"poisonImmune":true,"venomImmune":true},"5872":{"name":"Baby dragon","hitpoints":50,"combatLevel":48,"slayerLevel":1,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":50,"crushDef":50,"rangeDef":30,"magicDef":40,"dragon":true},"5873":{"name":"Baby dragon","hitpoints":50,"combatLevel":48,"slayerLevel":1,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":50,"crushDef":50,"rangeDef":30,"magicDef":40,"dragon":true},"5874":{"name":"Black demon","hitpoints":157,"combatLevel":172,"slayerLevel":1,"attackSpeed":4,"attackLevel":145,"strengthLevel":152,"defenceLevel":148,"rangeLevel":1,"magicLevel":1,"demon":true},"5875":{"name":"Black demon","hitpoints":157,"combatLevel":172,"slayerLevel":1,"attackSpeed":4,"attackLevel":145,"strengthLevel":152,"defenceLevel":148,"rangeLevel":1,"magicLevel":1,"demon":true},"5876":{"name":"Black demon","hitpoints":157,"combatLevel":172,"slayerLevel":1,"attackSpeed":4,"attackLevel":145,"strengthLevel":152,"defenceLevel":148,"rangeLevel":1,"magicLevel":1,"demon":true},"5877":{"name":"Black demon","hitpoints":157,"combatLevel":172,"slayerLevel":1,"attackSpeed":4,"attackLevel":145,"strengthLevel":152,"defenceLevel":148,"rangeLevel":1,"magicLevel":1,"demon":true},"5878":{"name":"Blue dragon","hitpoints":105,"combatLevel":111,"slayerLevel":1,"attackSpeed":4,"attackLevel":95,"strengthLevel":95,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"5879":{"name":"Blue dragon","hitpoints":105,"combatLevel":111,"slayerLevel":1,"attackSpeed":4,"attackLevel":95,"strengthLevel":95,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"5880":{"name":"Blue dragon","hitpoints":105,"combatLevel":111,"slayerLevel":1,"attackSpeed":4,"attackLevel":95,"strengthLevel":95,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"5881":{"name":"Blue dragon","hitpoints":105,"combatLevel":111,"slayerLevel":1,"attackSpeed":4,"attackLevel":95,"strengthLevel":95,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"5882":{"name":"Blue dragon","hitpoints":105,"combatLevel":111,"slayerLevel":1,"attackSpeed":4,"attackLevel":95,"strengthLevel":95,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"5886":{"name":"Abyssal Sire","hitpoints":400,"combatLevel":350,"slayerLevel":85,"attackSpeed":7,"attackLevel":180,"strengthLevel":136,"defenceLevel":250,"rangeLevel":1,"magicLevel":200,"stabDef":40,"slashDef":60,"crushDef":50,"rangeDef":60,"magicDef":20,"bonusAttack":65,"demon":true},"5887":{"name":"Abyssal Sire","hitpoints":400,"combatLevel":350,"slayerLevel":85,"attackSpeed":7,"attackLevel":180,"strengthLevel":136,"defenceLevel":250,"rangeLevel":1,"magicLevel":200,"stabDef":40,"slashDef":60,"crushDef":50,"rangeDef":60,"magicDef":20,"bonusAttack":65,"demon":true},"5888":{"name":"Abyssal Sire","hitpoints":400,"combatLevel":350,"slayerLevel":85,"attackSpeed":7,"attackLevel":180,"strengthLevel":136,"defenceLevel":250,"rangeLevel":1,"magicLevel":200,"stabDef":40,"slashDef":60,"crushDef":50,"rangeDef":60,"magicDef":20,"bonusAttack":65,"demon":true},"5889":{"name":"Abyssal Sire","hitpoints":400,"combatLevel":350,"slayerLevel":85,"attackSpeed":7,"attackLevel":180,"strengthLevel":136,"defenceLevel":250,"rangeLevel":1,"magicLevel":200,"stabDef":40,"slashDef":60,"crushDef":50,"rangeDef":60,"magicDef":20,"bonusAttack":65,"demon":true},"5890":{"name":"Abyssal Sire","hitpoints":400,"combatLevel":350,"slayerLevel":85,"attackSpeed":7,"attackLevel":180,"strengthLevel":136,"defenceLevel":250,"rangeLevel":1,"magicLevel":200,"stabDef":40,"slashDef":60,"crushDef":50,"rangeDef":60,"magicDef":20,"bonusAttack":65,"demon":true},"5891":{"name":"Abyssal Sire","hitpoints":400,"combatLevel":350,"slayerLevel":85,"attackSpeed":7,"attackLevel":180,"strengthLevel":136,"defenceLevel":250,"rangeLevel":1,"magicLevel":200,"stabDef":40,"slashDef":60,"crushDef":50,"rangeDef":60,"magicDef":20,"bonusAttack":65,"demon":true},"5908":{"name":"Abyssal Sire","hitpoints":400,"combatLevel":350,"slayerLevel":85,"attackSpeed":7,"attackLevel":180,"strengthLevel":136,"defenceLevel":250,"rangeLevel":1,"magicLevel":200,"stabDef":40,"slashDef":60,"crushDef":50,"rangeDef":60,"magicDef":20,"bonusAttack":65,"demon":true},"5916":{"name":"Spawn","hitpoints":15,"combatLevel":60,"attackSpeed":4,"attackLevel":120,"strengthLevel":30,"defenceLevel":30,"rangeLevel":50,"magicLevel":1,"poisonImmune":true,"venomImmune":true},"5917":{"name":"Spawn","hitpoints":15,"combatLevel":60,"attackSpeed":4,"attackLevel":120,"strengthLevel":30,"defenceLevel":30,"rangeLevel":50,"magicLevel":1,"poisonImmune":true,"venomImmune":true},"5918":{"name":"Scion","hitpoints":50,"combatLevel":100,"attackSpeed":4,"attackLevel":120,"strengthLevel":90,"defenceLevel":80,"rangeLevel":100,"magicLevel":1,"range":30,"bonusAttack":30,"bonusRangeStrength":30,"poisonImmune":true,"venomImmune":true},"5935":{"name":"Sand Crab","hitpoints":60,"combatLevel":15,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5936":{"name":"Sandy rocks","hitpoints":60,"combatLevel":15,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5938":{"name":"Wallasalki","hitpoints":120,"combatLevel":98,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":80,"rangeLevel":1,"magicLevel":100,"stabDef":100,"slashDef":150,"crushDef":175,"magicDef":250},"5939":{"name":"Wallasalki","hitpoints":120,"combatLevel":98,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":80,"rangeLevel":1,"magicLevel":100,"stabDef":100,"slashDef":150,"crushDef":175,"magicDef":250},"5940":{"name":"Giant Rock Crab","hitpoints":180,"combatLevel":137,"attackSpeed":4,"attackLevel":50,"strengthLevel":80,"defenceLevel":200,"rangeLevel":1,"magicLevel":1,"stabDef":225,"slashDef":200,"crushDef":175,"rangeDef":250},"5942":{"name":"Dagannoth","hitpoints":85,"combatLevel":88,"slayerLevel":1,"attackSpeed":3,"attackLevel":1,"strengthLevel":1,"defenceLevel":75,"rangeLevel":100,"magicLevel":1,"slashDef":10,"crushDef":90,"rangeDef":150,"magicDef":200},"5943":{"name":"Dagannoth","hitpoints":95,"combatLevel":90,"slayerLevel":1,"attackSpeed":4,"attackLevel":76,"strengthLevel":78,"defenceLevel":65,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":50,"rangeDef":50,"magicDef":50,"bonusAttack":50,"bonusStrength":50},"5944":{"name":"Rock lobster","hitpoints":150,"combatLevel":127,"attackSpeed":2,"attackLevel":100,"strengthLevel":100,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"stabDef":100,"slashDef":100,"crushDef":50,"rangeDef":150,"magicDef":50},"5946":{"name":"Suspicious water","hitpoints":100,"combatLevel":34},"5947":{"name":"Spinolyp","hitpoints":100,"combatLevel":76,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":100,"magicLevel":1,"stabDef":100,"slashDef":100,"crushDef":100,"rangeDef":50,"magicDef":50},"5948":{"name":"Suspicious water","hitpoints":100,"combatLevel":34},"5961":{"name":"Spinolyp","hitpoints":100,"combatLevel":76,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":100,"magicLevel":1,"stabDef":100,"slashDef":100,"crushDef":100,"rangeDef":50,"magicDef":50},"5962":{"name":"Suspicious water","hitpoints":100,"combatLevel":34},"5963":{"name":"Spinolyp","hitpoints":100,"combatLevel":76,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":100,"magicLevel":1,"stabDef":100,"slashDef":100,"crushDef":100,"rangeDef":50,"magicDef":50},"5964":{"name":"Khazard trooper","hitpoints":22,"combatLevel":19,"attackSpeed":5,"attackLevel":17,"strengthLevel":16,"defenceLevel":13,"rangeLevel":1,"magicLevel":1,"stabDef":25,"slashDef":25,"crushDef":22,"bonusAttack":9,"bonusStrength":5},"5965":{"name":"Khazard trooper","hitpoints":22,"combatLevel":19,"attackSpeed":5,"attackLevel":17,"strengthLevel":16,"defenceLevel":13,"rangeLevel":1,"magicLevel":1,"stabDef":25,"slashDef":25,"crushDef":22,"bonusAttack":9,"bonusStrength":5},"5968":{"name":"Gnome","hitpoints":3,"combatLevel":3,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":5,"magicLevel":1,"bonusRangeStrength":2},"5969":{"name":"Gnome","hitpoints":3,"combatLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"bonusRangeStrength":2},"5970":{"name":"Gnome","hitpoints":3,"combatLevel":3,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":5,"magicLevel":1,"bonusRangeStrength":2},"5971":{"name":"Mounted terrorbird gnome","hitpoints":55,"combatLevel":49,"slayerLevel":1,"attackSpeed":4,"attackLevel":25,"strengthLevel":25,"defenceLevel":25,"stabDef":16,"slashDef":16,"crushDef":18,"rangeDef":10,"magicDef":15},"5972":{"name":"Mounted terrorbird gnome","hitpoints":55,"combatLevel":49,"slayerLevel":1,"attackSpeed":4,"attackLevel":25,"strengthLevel":25,"defenceLevel":25,"stabDef":16,"slashDef":16,"crushDef":18,"rangeDef":10,"magicDef":15},"5973":{"name":"Mounted terrorbird gnome","hitpoints":55,"combatLevel":49,"slayerLevel":1,"attackSpeed":4,"attackLevel":25,"strengthLevel":25,"defenceLevel":25,"stabDef":16,"slashDef":16,"crushDef":18,"rangeDef":10,"magicDef":15},"5977":{"name":"Justiciar Zachariah","hitpoints":320,"combatLevel":348,"attackSpeed":6,"attackLevel":500,"strengthLevel":250,"defenceLevel":100,"rangeLevel":1,"magicLevel":180,"magic":80,"stabDef":200,"slashDef":200,"crushDef":200,"rangeDef":200,"bonusAttack":200,"bonusMagicDamage":80,"poisonImmune":true,"venomImmune":true},"6046":{"name":"Black Guard","hitpoints":40,"combatLevel":48,"slayerLevel":1,"attackSpeed":3,"attackLevel":40,"strengthLevel":45,"defenceLevel":45,"rangeLevel":1,"magicLevel":1,"stabDef":40,"slashDef":40,"crushDef":40,"rangeDef":40,"bonusAttack":30,"bonusStrength":30},"6047":{"name":"Black Guard","hitpoints":40,"combatLevel":48,"slayerLevel":1,"attackSpeed":3,"attackLevel":40,"strengthLevel":45,"defenceLevel":45,"rangeLevel":1,"magicLevel":1,"stabDef":40,"slashDef":40,"crushDef":40,"rangeDef":40,"bonusAttack":30,"bonusStrength":30},"6048":{"name":"Black Guard","hitpoints":40,"combatLevel":48,"slayerLevel":1,"attackSpeed":3,"attackLevel":40,"strengthLevel":45,"defenceLevel":45,"rangeLevel":1,"magicLevel":1,"stabDef":40,"slashDef":40,"crushDef":40,"rangeDef":40,"bonusAttack":30,"bonusStrength":30},"6049":{"name":"Black Guard","hitpoints":40,"combatLevel":48,"slayerLevel":1,"attackSpeed":3,"attackLevel":40,"strengthLevel":45,"defenceLevel":45,"rangeLevel":1,"magicLevel":1,"stabDef":40,"slashDef":40,"crushDef":40,"rangeDef":40,"bonusAttack":30,"bonusStrength":30},"6050":{"name":"Black Guard Berserker","hitpoints":50,"combatLevel":66,"slayerLevel":1,"attackSpeed":3,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stabDef":60,"slashDef":60,"crushDef":60,"rangeDef":60,"bonusAttack":55,"bonusStrength":55},"6051":{"name":"Black Guard Berserker","hitpoints":50,"combatLevel":66,"slayerLevel":1,"attackSpeed":3,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stabDef":60,"slashDef":60,"crushDef":60,"rangeDef":60,"bonusAttack":55,"bonusStrength":55},"6052":{"name":"Black Guard Berserker","hitpoints":50,"combatLevel":66,"slayerLevel":1,"attackSpeed":3,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stabDef":60,"slashDef":60,"crushDef":60,"rangeDef":60,"bonusAttack":55,"bonusStrength":55},"6056":{"name":"Guard","hitpoints":50,"combatLevel":37,"attackSpeed":6,"attackLevel":20,"strengthLevel":20,"defenceLevel":20,"rangeLevel":40,"magicLevel":1,"stabDef":18,"slashDef":23,"crushDef":27,"rangeDef":19,"magicDef":10,"bonusAttack":19,"bonusStrength":8,"bonusRangeStrength":8},"6065":{"name":"Tower Archer","hitpoints":30,"combatLevel":19,"attackSpeed":6,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":20,"magicLevel":1,"rangeDef":12,"magicDef":6,"bonusRangeStrength":16},"6066":{"name":"Tower Archer","hitpoints":50,"combatLevel":34,"attackSpeed":6,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":40,"magicLevel":1,"rangeDef":40,"magicDef":24,"bonusRangeStrength":22},"6067":{"name":"Tower Archer","hitpoints":70,"combatLevel":49,"attackSpeed":6,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":60,"magicLevel":1,"rangeDef":45,"magicDef":20,"bonusRangeStrength":31},"6068":{"name":"Tower Archer","hitpoints":90,"combatLevel":64,"attackSpeed":6,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":80,"magicLevel":1,"rangeDef":66,"magicDef":34,"bonusRangeStrength":49},"6075":{"name":"Tortoise","hitpoints":100,"combatLevel":79,"attackSpeed":4,"attackLevel":15,"strengthLevel":90,"defenceLevel":80,"rangeLevel":1,"magicLevel":1},"6076":{"name":"Tortoise","hitpoints":120,"combatLevel":92,"attackSpeed":4,"attackLevel":30,"strengthLevel":100,"defenceLevel":80,"rangeLevel":50,"magicLevel":50},"6077":{"name":"Gnome child","hitpoints":2,"combatLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"6078":{"name":"Gnome child","hitpoints":2,"combatLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"6079":{"name":"Gnome child","hitpoints":2,"combatLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"6081":{"name":"Gnome guard","hitpoints":31,"combatLevel":23,"attackSpeed":4,"attackLevel":17,"strengthLevel":17,"defenceLevel":17,"rangeLevel":1,"magicLevel":1,"bonusAttack":8,"bonusStrength":13},"6082":{"name":"Gnome guard","hitpoints":31,"combatLevel":23,"attackSpeed":4,"attackLevel":17,"strengthLevel":17,"defenceLevel":17,"rangeLevel":1,"magicLevel":1,"bonusAttack":8,"bonusStrength":13},"6086":{"name":"Gnome woman","hitpoints":2,"combatLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"6087":{"name":"Gnome woman","hitpoints":2,"combatLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"6094":{"name":"Gnome","hitpoints":3,"combatLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"bonusRangeStrength":2},"6095":{"name":"Gnome","hitpoints":3,"combatLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"bonusRangeStrength":2},"6096":{"name":"Gnome","hitpoints":3,"combatLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"bonusRangeStrength":2},"6097":{"name":"Gnome Archer","hitpoints":10,"combatLevel":5,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":6,"magicLevel":1},"6098":{"name":"Gnome Driver","hitpoints":10,"combatLevel":5,"attackSpeed":6,"attackLevel":3,"strengthLevel":5,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"6099":{"name":"Gnome Mage","hitpoints":10,"combatLevel":5,"attackSpeed":6,"attackLevel":3,"strengthLevel":1,"defenceLevel":1,"rangeLevel":5,"magicLevel":1},"6102":{"name":"Bush snake","hitpoints":25,"combatLevel":35,"attackSpeed":3,"attackLevel":25,"strengthLevel":25,"defenceLevel":50,"rangeLevel":1,"magicLevel":1},"6103":{"name":"Bush snake","hitpoints":25,"combatLevel":35,"attackSpeed":3,"attackLevel":25,"strengthLevel":25,"defenceLevel":50,"rangeLevel":1,"magicLevel":1},"6118":{"name":"Elvarg (hard)","hitpoints":240,"combatLevel":214,"slayerLevel":1,"attackSpeed":4,"attackLevel":210,"strengthLevel":210,"defenceLevel":70,"rangeLevel":1,"magicLevel":210,"stabDef":20,"slashDef":40,"crushDef":40,"rangeDef":20,"magicDef":30},"6119":{"name":"The Inadequacy (hard)","hitpoints":255,"combatLevel":600,"attackSpeed":4,"attackLevel":1128,"strengthLevel":340,"defenceLevel":240,"rangeLevel":340,"magicLevel":1},"6120":{"name":"The Everlasting (hard)","hitpoints":255,"combatLevel":365,"attackSpeed":6,"attackLevel":374,"strengthLevel":462,"defenceLevel":120,"rangeLevel":1,"magicLevel":1},"6121":{"name":"The Untouchable (hard)","hitpoints":180,"combatLevel":440,"attackSpeed":6,"attackLevel":374,"strengthLevel":510,"defenceLevel":434,"rangeLevel":1,"magicLevel":1},"6177":{"name":"Scion","hitpoints":50,"combatLevel":100,"attackSpeed":4,"attackLevel":120,"strengthLevel":90,"defenceLevel":80,"rangeLevel":100,"magicLevel":1,"range":30,"bonusAttack":30,"bonusRangeStrength":30,"poisonImmune":true,"venomImmune":true},"6267":{"name":"Jungle spider","hitpoints":50,"combatLevel":44,"slayerLevel":1,"attackSpeed":4,"attackLevel":35,"strengthLevel":37,"defenceLevel":35,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"crushDef":10,"rangeDef":20,"magicDef":17},"6271":{"name":"Jungle spider","hitpoints":50,"combatLevel":44,"slayerLevel":1,"attackSpeed":4,"attackLevel":35,"strengthLevel":37,"defenceLevel":35,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"crushDef":10,"rangeDef":20,"magicDef":17},"6272":{"name":"Large mosquito","hitpoints":3,"combatLevel":13,"attackSpeed":4,"attackLevel":5,"strengthLevel":1,"defenceLevel":45,"rangeLevel":1,"magicLevel":1,"stabDef":2,"slashDef":2,"crushDef":5,"magicDef":2},"6273":{"name":"Mosquito swarm","hitpoints":9,"combatLevel":17,"attackSpeed":3,"attackLevel":10,"strengthLevel":1,"defenceLevel":45,"rangeLevel":1,"magicLevel":1,"stabDef":2,"slashDef":2,"crushDef":5,"magicDef":2},"6291":{"name":"Tanglefoot (hard)","hitpoints":204,"combatLevel":199,"attackSpeed":4,"attackLevel":194,"strengthLevel":194,"defenceLevel":91,"rangeLevel":1,"magicLevel":1},"6292":{"name":"Chronozon (hard)","hitpoints":120,"combatLevel":297,"attackSpeed":4,"attackLevel":346,"strengthLevel":344,"defenceLevel":173,"rangeLevel":1,"magicLevel":1,"demon":true},"6293":{"name":"Bouncer (hard)","hitpoints":232,"combatLevel":244,"attackSpeed":4,"attackLevel":240,"strengthLevel":240,"defenceLevel":120,"rangeLevel":1,"magicLevel":1},"6294":{"name":"Ice Troll King (hard)","hitpoints":255,"combatLevel":213,"slayerLevel":1,"attackSpeed":4,"attackLevel":200,"strengthLevel":200,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"stabDef":45,"slashDef":45,"crushDef":45,"rangeDef":2000,"magicDef":2000,"bonusAttack":60,"bonusStrength":60},"6295":{"name":"Black demon (hard)","hitpoints":157,"combatLevel":292,"slayerLevel":1,"attackSpeed":4,"attackLevel":290,"strengthLevel":296,"defenceLevel":152,"rangeLevel":1,"magicLevel":1,"demon":true},"6297":{"name":"Glod (hard)","hitpoints":255,"combatLevel":276,"attackSpeed":4,"attackLevel":230,"strengthLevel":240,"defenceLevel":110,"rangeLevel":1,"magicLevel":1,"stabDef":105,"slashDef":110,"crushDef":130,"rangeDef":100,"magicDef":125},"6298":{"name":"Treus Dayth (hard)","hitpoints":240,"combatLevel":194,"attackSpeed":4,"attackLevel":168,"strengthLevel":168,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5},"6299":{"name":"Black Knight Titan (hard)","hitpoints":255,"combatLevel":210,"attackSpeed":7,"attackLevel":182,"strengthLevel":200,"defenceLevel":91,"rangeLevel":1,"magicLevel":1,"stabDef":18,"slashDef":27,"crushDef":18,"rangeDef":1000,"magicDef":1000,"bonusAttack":27,"bonusStrength":22},"6300":{"name":"Dagannoth mother (hard)","hitpoints":240,"combatLevel":201,"attackSpeed":4,"attackLevel":186,"strengthLevel":186,"defenceLevel":81,"rangeLevel":120,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6301":{"name":"Dagannoth mother (hard)","hitpoints":240,"combatLevel":201,"attackSpeed":4,"attackLevel":186,"strengthLevel":186,"defenceLevel":81,"rangeLevel":120,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6302":{"name":"Dagannoth mother (hard)","hitpoints":240,"combatLevel":201,"attackSpeed":4,"attackLevel":186,"strengthLevel":186,"defenceLevel":81,"rangeLevel":120,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6303":{"name":"Dagannoth mother (hard)","hitpoints":240,"combatLevel":201,"attackSpeed":4,"attackLevel":186,"strengthLevel":186,"defenceLevel":81,"rangeLevel":120,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6304":{"name":"Dagannoth mother (hard)","hitpoints":240,"combatLevel":201,"attackSpeed":4,"attackLevel":186,"strengthLevel":186,"defenceLevel":81,"rangeLevel":120,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6305":{"name":"Dagannoth mother (hard)","hitpoints":240,"combatLevel":201,"attackSpeed":4,"attackLevel":186,"strengthLevel":186,"defenceLevel":81,"rangeLevel":120,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6307":{"name":"Culinaromancer (hard)","hitpoints":255,"combatLevel":209,"attackSpeed":4,"attackLevel":10,"strengthLevel":400,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"6308":{"name":"Agrith-Na-Na (hard)","hitpoints":255,"combatLevel":235,"attackSpeed":4,"attackLevel":166,"strengthLevel":300,"defenceLevel":82,"rangeLevel":200,"magicLevel":200,"stabDef":100,"slashDef":100,"crushDef":100,"rangeDef":100,"magicDef":100,"bonusAttack":100},"6309":{"name":"Flambeed (hard)","hitpoints":255,"combatLevel":238,"attackSpeed":4,"attackLevel":240,"strengthLevel":240,"defenceLevel":75,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":5,"rangeDef":50,"magicDef":5,"bonusAttack":100},"6310":{"name":"Karamel (hard)","hitpoints":255,"combatLevel":186,"attackSpeed":3,"attackLevel":1,"strengthLevel":1,"defenceLevel":100,"rangeLevel":200,"magicLevel":1,"stab":100,"slash":100,"crush":100,"range":268,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":150,"magicDef":150,"bonusRangeStrength":110},"6311":{"name":"Dessourt (hard)","hitpoints":255,"combatLevel":217,"attackSpeed":3,"attackLevel":198,"strengthLevel":198,"defenceLevel":198,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":150,"crushDef":150,"bonusAttack":50,"bonusStrength":50},"6312":{"name":"Gelatinnoth Mother (hard)","hitpoints":240,"combatLevel":201,"attackSpeed":4,"attackLevel":186,"strengthLevel":186,"defenceLevel":81,"rangeLevel":120,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6313":{"name":"Gelatinnoth Mother (hard)","hitpoints":240,"combatLevel":201,"attackSpeed":4,"attackLevel":186,"strengthLevel":186,"defenceLevel":81,"rangeLevel":120,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6314":{"name":"Gelatinnoth Mother (hard)","hitpoints":240,"combatLevel":201,"attackSpeed":4,"attackLevel":186,"strengthLevel":186,"defenceLevel":81,"rangeLevel":120,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6315":{"name":"Gelatinnoth Mother (hard)","hitpoints":240,"combatLevel":201,"attackSpeed":4,"attackLevel":186,"strengthLevel":186,"defenceLevel":81,"rangeLevel":120,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6316":{"name":"Gelatinnoth Mother (hard)","hitpoints":240,"combatLevel":201,"attackSpeed":4,"attackLevel":186,"strengthLevel":186,"defenceLevel":81,"rangeLevel":120,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6317":{"name":"Gelatinnoth Mother (hard)","hitpoints":240,"combatLevel":201,"attackSpeed":4,"attackLevel":186,"strengthLevel":186,"defenceLevel":81,"rangeLevel":120,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6318":{"name":"Nezikchened (hard)","hitpoints":150,"combatLevel":295,"attackSpeed":5,"attackLevel":330,"strengthLevel":336,"defenceLevel":167,"rangeLevel":320,"magicLevel":320,"demon":true},"6319":{"name":"Tree spirit (hard)","hitpoints":187,"combatLevel":199,"slayerLevel":1,"attackSpeed":4,"attackLevel":200,"strengthLevel":209,"defenceLevel":80,"rangeLevel":1,"magicLevel":1},"6320":{"name":"Me (hard)","hitpoints":135,"combatLevel":201,"attackSpeed":4,"attackLevel":225,"strengthLevel":234,"defenceLevel":74,"rangeLevel":1,"magicLevel":1},"6321":{"name":"Jungle Demon (hard)","hitpoints":255,"combatLevel":327,"attackSpeed":6,"attackLevel":340,"strengthLevel":340,"defenceLevel":170,"rangeLevel":1,"magicLevel":340,"slashDef":50,"magicDef":50,"bonusAttack":50,"bonusStrength":50,"demon":true},"6322":{"name":"The Kendal (hard)","hitpoints":150,"combatLevel":210,"attackSpeed":4,"attackLevel":195,"strengthLevel":195,"defenceLevel":60,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":20,"bonusAttack":5,"bonusStrength":10},"6323":{"name":"Giant Roc (hard)","hitpoints":255,"combatLevel":257,"attackSpeed":6,"attackLevel":260,"strengthLevel":260,"defenceLevel":100,"rangeLevel":130,"magicLevel":1,"magicDef":150},"6324":{"name":"Slagilith (hard)","hitpoints":150,"combatLevel":202,"attackSpeed":4,"attackLevel":150,"strengthLevel":300,"defenceLevel":75,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":5,"rangeDef":50,"magicDef":5,"bonusAttack":10},"6325":{"name":"Moss Guardian (hard)","hitpoints":240,"combatLevel":182,"attackSpeed":6,"attackLevel":165,"strengthLevel":165,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stab":1,"slash":1,"crush":1,"range":1,"magic":1,"bonusAttack":66,"bonusStrength":62},"6326":{"name":"Skeleton Hellhound (hard)","hitpoints":132,"combatLevel":198,"attackSpeed":4,"attackLevel":168,"strengthLevel":264,"defenceLevel":100,"rangeLevel":1,"magicLevel":1},"6327":{"name":"Agrith Naar (hard)","hitpoints":209,"combatLevel":196,"attackSpeed":4,"attackLevel":182,"strengthLevel":198,"defenceLevel":82,"rangeLevel":220,"magicLevel":220,"demon":true},"6328":{"name":"King Roald (hard)","hitpoints":150,"combatLevel":188,"attackSpeed":4,"attackLevel":140,"strengthLevel":120,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"6329":{"name":"Khazard warlord (hard)","hitpoints":255,"combatLevel":192,"attackSpeed":4,"attackLevel":165,"strengthLevel":170,"defenceLevel":80,"rangeLevel":1,"magicLevel":1},"6330":{"name":"Dad (hard)","hitpoints":240,"combatLevel":201,"slayerLevel":1,"attackSpeed":8,"attackLevel":132,"strengthLevel":264,"defenceLevel":50,"stabDef":25,"slashDef":25,"crushDef":40,"rangeDef":200,"magicDef":200,"bonusAttack":40,"bonusStrength":70},"6331":{"name":"Arrg (hard)","hitpoints":255,"combatLevel":210,"slayerLevel":1,"attackSpeed":4,"attackLevel":140,"strengthLevel":280,"defenceLevel":40,"rangeLevel":140,"stabDef":35,"slashDef":60,"crushDef":35,"rangeDef":200,"magicDef":200,"bonusAttack":60,"bonusStrength":100},"6332":{"name":"Count Draynor (hard)","hitpoints":210,"combatLevel":177,"slayerLevel":1,"attackSpeed":4,"attackLevel":198,"strengthLevel":165,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"stabDef":2,"slashDef":1,"crushDef":3},"6333":{"name":"Witch's experiment (hard)","hitpoints":63,"combatLevel":47,"attackSpeed":4,"attackLevel":54,"strengthLevel":30,"defenceLevel":19,"rangeLevel":1,"magicLevel":1},"6334":{"name":"Witch's experiment (second form) (hard)","hitpoints":93,"combatLevel":77,"attackSpeed":4,"attackLevel":84,"strengthLevel":60,"defenceLevel":29,"rangeLevel":1,"magicLevel":1},"6335":{"name":"Witch's experiment (third form) (hard)","hitpoints":103,"combatLevel":90,"attackSpeed":4,"attackLevel":95,"strengthLevel":75,"defenceLevel":39,"rangeLevel":1,"magicLevel":1},"6336":{"name":"Witch's experiment (fourth form) (hard)","hitpoints":113,"combatLevel":103,"attackSpeed":4,"attackLevel":105,"strengthLevel":88,"defenceLevel":49,"rangeLevel":1,"magicLevel":1},"6337":{"name":"Nazastarool (hard)","hitpoints":154,"combatLevel":176,"slayerLevel":1,"attackSpeed":4,"attackLevel":187,"strengthLevel":176,"defenceLevel":80},"6338":{"name":"Nazastarool (hard)","hitpoints":180,"combatLevel":153,"slayerLevel":1,"attackSpeed":4,"attackLevel":150,"strengthLevel":140,"defenceLevel":58,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"magicDef":5,"bonusAttack":15,"bonusStrength":15},"6339":{"name":"Nazastarool (hard)","hitpoints":176,"combatLevel":181,"slayerLevel":1,"attackSpeed":4,"attackLevel":187,"strengthLevel":176,"defenceLevel":80},"6340":{"name":"Cow (hard)","hitpoints":160,"combatLevel":170,"slayerLevel":1,"attackSpeed":4,"attackLevel":200,"strengthLevel":200,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"6342":{"name":"Barrelchest","hitpoints":134,"combatLevel":190,"attackSpeed":5,"attackLevel":170,"strengthLevel":145,"defenceLevel":140,"rangeLevel":1,"magicLevel":90,"bonusAttack":80,"bonusStrength":80},"6343":{"name":"Giant scarab","hitpoints":130,"combatLevel":191,"slayerLevel":1,"attackSpeed":4,"attackLevel":169,"strengthLevel":190,"defenceLevel":169,"rangeLevel":190,"magicLevel":1,"stabDef":70,"slashDef":99,"crushDef":99,"rangeDef":149,"magicDef":159},"6344":{"name":"Dessous","hitpoints":200,"combatLevel":139,"slayerLevel":1,"attackSpeed":3,"attackLevel":99,"strengthLevel":99,"defenceLevel":99,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":150,"crushDef":150,"bonusAttack":50,"bonusStrength":50},"6345":{"name":"Kamil","hitpoints":130,"combatLevel":154,"slayerLevel":1,"attackSpeed":4,"attackLevel":190,"strengthLevel":80,"defenceLevel":135,"rangeLevel":1,"magicLevel":1,"stabDef":35,"slashDef":60,"crushDef":35,"bonusAttack":60,"bonusStrength":100},"6346":{"name":"Damis","hitpoints":90,"combatLevel":103,"attackSpeed":4,"attackLevel":90,"strengthLevel":90,"defenceLevel":90,"rangeLevel":1,"magicLevel":1,"stabDef":60,"slashDef":60,"crushDef":60,"rangeDef":60,"magicDef":60,"bonusStrength":80},"6347":{"name":"Damis","hitpoints":200,"combatLevel":174,"attackSpeed":4,"attackLevel":160,"strengthLevel":100,"defenceLevel":160,"rangeLevel":1,"magicLevel":1,"stabDef":100,"slashDef":100,"crushDef":100,"rangeDef":120,"magicDef":80,"bonusStrength":100},"6348":{"name":"Fareed","hitpoints":130,"combatLevel":167,"attackSpeed":4,"attackLevel":190,"strengthLevel":120,"defenceLevel":135,"rangeLevel":1,"magicLevel":1,"stabDef":100,"slashDef":100,"crushDef":100,"bonusStrength":120},"6349":{"name":"Elvarg","hitpoints":80,"combatLevel":83,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":70,"stabDef":20,"slashDef":40,"crushDef":40,"rangeDef":20,"magicDef":30},"6350":{"name":"The Inadequacy","hitpoints":180,"combatLevel":343,"attackSpeed":4,"attackLevel":564,"strengthLevel":170,"defenceLevel":240,"rangeLevel":170,"magicLevel":1},"6351":{"name":"The Everlasting","hitpoints":230,"combatLevel":223,"attackSpeed":6,"attackLevel":187,"strengthLevel":231,"defenceLevel":120,"rangeLevel":1,"magicLevel":1},"6352":{"name":"The Untouchable","hitpoints":90,"combatLevel":274,"attackSpeed":6,"attackLevel":187,"strengthLevel":255,"defenceLevel":434,"rangeLevel":1,"magicLevel":1},"6353":{"name":"Tanglefoot","hitpoints":102,"combatLevel":111,"attackSpeed":4,"attackLevel":97,"strengthLevel":97,"defenceLevel":91,"rangeLevel":1,"magicLevel":1},"6354":{"name":"Chronozon","hitpoints":60,"combatLevel":170,"attackSpeed":4,"attackLevel":173,"strengthLevel":172,"defenceLevel":173,"rangeLevel":1,"magicLevel":1,"demon":true},"6355":{"name":"Bouncer","hitpoints":116,"combatLevel":137,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":120,"defenceLevel":120,"rangeLevel":1,"magicLevel":1},"6356":{"name":"Ice Troll King","hitpoints":150,"combatLevel":122,"slayerLevel":1,"attackSpeed":4,"attackLevel":100,"strengthLevel":100,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"stabDef":45,"slashDef":45,"crushDef":45,"rangeDef":2000,"magicDef":2000,"bonusAttack":60,"bonusStrength":60},"6357":{"name":"Black demon","hitpoints":157,"combatLevel":172,"slayerLevel":1,"attackSpeed":4,"attackLevel":145,"strengthLevel":152,"defenceLevel":148,"rangeLevel":1,"magicLevel":1,"demon":true},"6358":{"name":"Glod","hitpoints":160,"combatLevel":138,"attackSpeed":4,"attackLevel":115,"strengthLevel":120,"defenceLevel":110,"rangeLevel":1,"magicLevel":1,"stabDef":105,"slashDef":110,"crushDef":130,"rangeDef":100,"magicDef":125},"6359":{"name":"Treus Dayth","hitpoints":100,"combatLevel":95,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5},"6360":{"name":"Black Knight Titan","hitpoints":142,"combatLevel":120,"attackSpeed":7,"attackLevel":91,"strengthLevel":100,"defenceLevel":91,"rangeLevel":1,"magicLevel":1,"stabDef":18,"slashDef":27,"crushDef":18,"rangeDef":1000,"magicDef":1000,"bonusAttack":27,"bonusStrength":22},"6361":{"name":"Dagannoth mother","hitpoints":120,"combatLevel":100,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6362":{"name":"Dagannoth mother","hitpoints":120,"combatLevel":100,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6363":{"name":"Dagannoth mother","hitpoints":120,"combatLevel":100,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6364":{"name":"Dagannoth mother","hitpoints":120,"combatLevel":100,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6365":{"name":"Dagannoth mother","hitpoints":120,"combatLevel":100,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6366":{"name":"Dagannoth mother","hitpoints":120,"combatLevel":100,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6367":{"name":"Evil Chicken","hitpoints":120,"combatLevel":159,"attackSpeed":4,"defenceLevel":126,"magicLevel":200},"6368":{"name":"Culinaromancer","hitpoints":150,"combatLevel":75,"attackSpeed":4,"attackLevel":10,"strengthLevel":100,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"6369":{"name":"Agrith-Na-Na","hitpoints":200,"combatLevel":146,"attackSpeed":4,"attackLevel":83,"strengthLevel":150,"defenceLevel":82,"rangeLevel":100,"magicLevel":100,"stabDef":100,"slashDef":100,"crushDef":100,"rangeDef":100,"magicDef":100,"bonusAttack":100},"6370":{"name":"Flambeed","hitpoints":210,"combatLevel":149,"attackSpeed":4,"attackLevel":120,"strengthLevel":120,"defenceLevel":75,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":5,"rangeDef":50,"magicDef":5,"bonusAttack":100},"6371":{"name":"Karamel","hitpoints":250,"combatLevel":136,"attackSpeed":3,"attackLevel":1,"strengthLevel":1,"defenceLevel":100,"rangeLevel":100,"magicLevel":1,"stab":50,"slash":50,"crush":50,"range":134,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":150,"magicDef":150,"bonusRangeStrength":55},"6372":{"name":"Dessourt","hitpoints":130,"combatLevel":121,"attackSpeed":3,"attackLevel":99,"strengthLevel":99,"defenceLevel":99,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":150,"crushDef":150,"bonusAttack":50,"bonusStrength":50},"6373":{"name":"Gelatinnoth Mother","hitpoints":240,"combatLevel":130,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6374":{"name":"Gelatinnoth Mother","hitpoints":240,"combatLevel":130,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6375":{"name":"Gelatinnoth Mother","hitpoints":240,"combatLevel":130,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6376":{"name":"Gelatinnoth Mother","hitpoints":240,"combatLevel":130,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6377":{"name":"Gelatinnoth Mother","hitpoints":240,"combatLevel":130,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6378":{"name":"Gelatinnoth Mother","hitpoints":240,"combatLevel":130,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6379":{"name":"Nezikchened","hitpoints":150,"combatLevel":187,"attackSpeed":5,"attackLevel":165,"strengthLevel":168,"defenceLevel":167,"rangeLevel":160,"magicLevel":160,"demon":true},"6380":{"name":"Tree spirit","hitpoints":85,"combatLevel":101,"slayerLevel":1,"attackSpeed":4,"attackLevel":90,"strengthLevel":95,"defenceLevel":80,"rangeLevel":1,"magicLevel":1},"6381":{"name":"Me","hitpoints":45,"combatLevel":79,"attackSpeed":4,"attackLevel":75,"strengthLevel":78,"defenceLevel":74,"rangeLevel":1,"magicLevel":1},"6382":{"name":"Jungle Demon","hitpoints":170,"combatLevel":195,"attackSpeed":6,"attackLevel":170,"strengthLevel":170,"defenceLevel":170,"rangeLevel":1,"magicLevel":170,"slashDef":50,"magicDef":50,"bonusAttack":50,"bonusStrength":50,"demon":true},"6383":{"name":"The Kendal","hitpoints":50,"combatLevel":70,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":60,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":20,"bonusAttack":5,"bonusStrength":10},"6384":{"name":"Giant Roc","hitpoints":250,"combatLevel":172,"attackSpeed":6,"attackLevel":130,"strengthLevel":130,"defenceLevel":100,"rangeLevel":130,"magicLevel":1,"magicDef":150},"6385":{"name":"Slagilith","hitpoints":60,"combatLevel":92,"attackSpeed":4,"attackLevel":60,"strengthLevel":120,"defenceLevel":75,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":5,"rangeDef":50,"magicDef":5,"bonusAttack":10},"6386":{"name":"Moss Guardian","hitpoints":120,"combatLevel":84,"attackSpeed":6,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stab":1,"slash":1,"crush":1,"range":1,"magic":1,"bonusAttack":66,"bonusStrength":62},"6387":{"name":"Skeleton Hellhound","hitpoints":55,"combatLevel":97,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":110,"defenceLevel":100,"rangeLevel":1,"magicLevel":1},"6388":{"name":"Agrith Naar","hitpoints":100,"combatLevel":100,"attackSpeed":4,"attackLevel":83,"strengthLevel":90,"defenceLevel":82,"rangeLevel":100,"magicLevel":100,"demon":true},"6389":{"name":"King Roald","hitpoints":75,"combatLevel":47,"attackSpeed":4,"attackLevel":35,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"6390":{"name":"Khazard warlord","hitpoints":170,"combatLevel":112,"attackSpeed":4,"attackLevel":75,"strengthLevel":78,"defenceLevel":80,"rangeLevel":1,"magicLevel":1},"6391":{"name":"Dad","hitpoints":120,"combatLevel":101,"slayerLevel":1,"attackSpeed":8,"attackLevel":60,"strengthLevel":120,"defenceLevel":50,"stabDef":25,"slashDef":25,"crushDef":40,"rangeDef":200,"magicDef":200,"bonusAttack":40,"bonusStrength":70},"6392":{"name":"Arrg","hitpoints":140,"combatLevel":113,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":140,"defenceLevel":40,"rangeLevel":70,"stabDef":35,"slashDef":60,"crushDef":35,"rangeDef":200,"magicDef":200,"bonusAttack":60,"bonusStrength":100},"6393":{"name":"Count Draynor","hitpoints":35,"combatLevel":34,"slayerLevel":1,"attackSpeed":4,"attackLevel":30,"strengthLevel":25,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"stabDef":2,"slashDef":1,"crushDef":3},"6394":{"name":"Witch's experiment","hitpoints":21,"combatLevel":19,"attackSpeed":4,"attackLevel":18,"strengthLevel":10,"defenceLevel":19,"rangeLevel":1,"magicLevel":1},"6395":{"name":"Witch's experiment (second form)","hitpoints":31,"combatLevel":30,"attackSpeed":4,"attackLevel":28,"strengthLevel":20,"defenceLevel":29,"rangeLevel":1,"magicLevel":1},"6396":{"name":"Witch's experiment (third form)","hitpoints":41,"combatLevel":42,"attackSpeed":4,"attackLevel":38,"strengthLevel":30,"defenceLevel":39,"rangeLevel":1,"magicLevel":1},"6397":{"name":"Witch's experiment (fourth form)","hitpoints":51,"combatLevel":53,"attackSpeed":4,"attackLevel":48,"strengthLevel":40,"defenceLevel":49,"rangeLevel":1,"magicLevel":1},"6398":{"name":"Nazastarool","hitpoints":70,"combatLevel":91,"slayerLevel":1,"attackSpeed":4,"attackLevel":85,"strengthLevel":80,"defenceLevel":80},"6399":{"name":"Nazastarool","hitpoints":70,"combatLevel":68,"slayerLevel":1,"attackSpeed":4,"attackLevel":58,"strengthLevel":54,"defenceLevel":58,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"magicDef":5,"bonusAttack":15,"bonusStrength":15},"6400":{"name":"Nazastarool","hitpoints":80,"combatLevel":93,"slayerLevel":1,"attackSpeed":4,"attackLevel":85,"strengthLevel":80,"defenceLevel":80},"6401":{"name":"Cow","hitpoints":8,"combatLevel":2,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"poisonImmune":true,"venomImmune":true},"6402":{"name":"Mosquito swarm","hitpoints":15,"combatLevel":20,"attackSpeed":3,"attackLevel":15,"strengthLevel":1,"defenceLevel":45,"rangeLevel":1,"magicLevel":1,"stabDef":2,"slashDef":2,"crushDef":5,"magicDef":2},"6406":{"name":"Tribesman","hitpoints":39,"combatLevel":32,"attackSpeed":4,"attackLevel":23,"strengthLevel":27,"defenceLevel":26,"rangeLevel":1,"magicLevel":1,"stabDef":4,"slashDef":6,"crushDef":6,"bonusAttack":8,"bonusStrength":5},"6407":{"name":"Tribesman","hitpoints":39,"combatLevel":32,"attackSpeed":4,"attackLevel":23,"strengthLevel":27,"defenceLevel":26,"rangeLevel":1,"magicLevel":1,"stabDef":4,"slashDef":6,"crushDef":6,"bonusAttack":8,"bonusStrength":5},"6408":{"name":"Broodoo victim","hitpoints":100,"combatLevel":60,"attackSpeed":6,"defenceLevel":26,"rangeLevel":1,"magicLevel":60,"magic":25,"stabDef":20,"slashDef":20,"crushDef":20},"6409":{"name":"Broodoo victim","hitpoints":100,"combatLevel":60,"attackSpeed":6,"defenceLevel":26,"rangeLevel":1,"magicLevel":60,"magic":25,"stabDef":20,"slashDef":20,"crushDef":20},"6410":{"name":"Broodoo victim","hitpoints":100,"combatLevel":60,"attackSpeed":6,"defenceLevel":26,"rangeLevel":1,"magicLevel":60,"magic":25,"stabDef":20,"slashDef":20,"crushDef":20},"6411":{"name":"Broodoo victim","hitpoints":100,"combatLevel":60,"attackSpeed":6,"defenceLevel":26,"rangeLevel":1,"magicLevel":60,"magic":25,"stabDef":20,"slashDef":20,"crushDef":20},"6412":{"name":"Broodoo victim","hitpoints":100,"combatLevel":60,"attackSpeed":6,"defenceLevel":26,"rangeLevel":1,"magicLevel":60,"magic":25,"stabDef":20,"slashDef":20,"crushDef":20},"6413":{"name":"Broodoo victim","hitpoints":100,"combatLevel":60,"attackSpeed":6,"defenceLevel":26,"rangeLevel":1,"magicLevel":60,"magic":25,"stabDef":20,"slashDef":20,"crushDef":20},"6434":{"name":"Cave goblin","hitpoints":10,"combatLevel":3,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"6435":{"name":"Cave goblin","hitpoints":10,"combatLevel":3,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"6436":{"name":"Cave goblin","hitpoints":10,"combatLevel":3,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"6437":{"name":"Cave goblin","hitpoints":10,"combatLevel":3,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"6438":{"name":"Animated steel armour","hitpoints":50,"combatLevel":53,"attackSpeed":4,"attackLevel":50,"strengthLevel":50,"defenceLevel":2,"rangeLevel":2,"magicLevel":2,"stabDef":50,"slashDef":25,"crushDef":25,"rangeDef":400,"magicDef":400,"bonusAttack":4,"bonusStrength":5,"poisonImmune":true,"venomImmune":true},"6440":{"name":"Giant skeleton","hitpoints":70,"combatLevel":80,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"undead":true},"6441":{"name":"Skeleton","hitpoints":85,"combatLevel":94,"slayerLevel":1,"attackSpeed":6,"attackLevel":70,"strengthLevel":80,"defenceLevel":60,"rangeLevel":1,"magicLevel":110,"stabDef":50,"slashDef":40,"rangeDef":40,"bonusStrength":5,"undead":true},"6442":{"name":"Skeleton","hitpoints":80,"combatLevel":77,"slayerLevel":1,"attackLevel":72,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":40,"rangeDef":40,"bonusStrength":5,"undead":true},"6443":{"name":"Skeleton","hitpoints":71,"combatLevel":81,"slayerLevel":1,"attackLevel":72,"strengthLevel":64,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"rangeDef":40,"undead":true},"6444":{"name":"Skeleton","hitpoints":40,"combatLevel":42,"slayerLevel":1,"attackLevel":40,"strengthLevel":30,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":40,"rangeDef":40,"undead":true},"6445":{"name":"Skeleton","hitpoints":53,"combatLevel":59,"slayerLevel":1,"attackLevel":50,"strengthLevel":46,"defenceLevel":62,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":40,"rangeDef":40,"undead":true},"6446":{"name":"Skeleton","hitpoints":42,"combatLevel":42,"slayerLevel":1,"attackLevel":36,"strengthLevel":38,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":40,"rangeDef":40,"undead":true},"6447":{"name":"Skeleton","hitpoints":58,"combatLevel":63,"slayerLevel":1,"attackLevel":56,"strengthLevel":61,"defenceLevel":45,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":40,"rangeDef":40,"undead":true},"6448":{"name":"Skeleton","hitpoints":26,"combatLevel":40,"slayerLevel":1,"attackSpeed":4,"attackLevel":33,"strengthLevel":31,"defenceLevel":52,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":40,"rangeDef":40,"undead":true},"6449":{"name":"Zombie","hitpoints":38,"combatLevel":40,"slayerLevel":1,"attackSpeed":4,"attackLevel":36,"strengthLevel":35,"defenceLevel":33,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"6450":{"name":"Zombie","hitpoints":40,"combatLevel":42,"slayerLevel":1,"attackSpeed":4,"attackLevel":39,"strengthLevel":35,"defenceLevel":35,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"6451":{"name":"Zombie","hitpoints":42,"combatLevel":47,"slayerLevel":1,"attackSpeed":4,"attackLevel":42,"strengthLevel":39,"defenceLevel":42,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"6452":{"name":"Zombie","hitpoints":48,"combatLevel":50,"slayerLevel":1,"attackSpeed":4,"attackLevel":44,"strengthLevel":42,"defenceLevel":44,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"6453":{"name":"Zombie","hitpoints":50,"combatLevel":56,"slayerLevel":1,"attackSpeed":4,"attackLevel":50,"strengthLevel":50,"defenceLevel":47,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"6454":{"name":"Zombie","hitpoints":57,"combatLevel":61,"slayerLevel":1,"attackSpeed":4,"attackLevel":53,"strengthLevel":55,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"6455":{"name":"Zombie","hitpoints":63,"combatLevel":67,"slayerLevel":1,"attackSpeed":4,"attackLevel":56,"strengthLevel":58,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"6456":{"name":"Zombie","hitpoints":65,"combatLevel":70,"slayerLevel":1,"attackSpeed":4,"attackLevel":61,"strengthLevel":60,"defenceLevel":61,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"6457":{"name":"Zombie","hitpoints":68,"combatLevel":72,"slayerLevel":1,"attackSpeed":4,"attackLevel":61,"strengthLevel":63,"defenceLevel":62,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"6458":{"name":"Zombie","hitpoints":71,"combatLevel":76,"slayerLevel":1,"attackSpeed":4,"attackLevel":69,"strengthLevel":65,"defenceLevel":62,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"6459":{"name":"Zombie","hitpoints":73,"combatLevel":80,"slayerLevel":1,"attackSpeed":4,"attackLevel":72,"strengthLevel":73,"defenceLevel":62,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"6460":{"name":"Zombie","hitpoints":75,"combatLevel":85,"slayerLevel":1,"attackSpeed":4,"attackLevel":71,"strengthLevel":81,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"6461":{"name":"Zombie","hitpoints":76,"combatLevel":86,"slayerLevel":1,"attackSpeed":4,"attackLevel":74,"strengthLevel":80,"defenceLevel":71,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"6462":{"name":"Zombie","hitpoints":81,"combatLevel":90,"slayerLevel":1,"attackSpeed":4,"attackLevel":82,"strengthLevel":80,"defenceLevel":72,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"6463":{"name":"Zombie","hitpoints":92,"combatLevel":95,"slayerLevel":1,"attackSpeed":4,"attackLevel":85,"strengthLevel":80,"defenceLevel":75,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"6464":{"name":"Zombie","hitpoints":96,"combatLevel":98,"slayerLevel":1,"attackSpeed":4,"attackLevel":85,"strengthLevel":83,"defenceLevel":81,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"6465":{"name":"Zombie","hitpoints":102,"combatLevel":100,"slayerLevel":1,"attackSpeed":4,"attackLevel":86,"strengthLevel":83,"defenceLevel":81,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"6466":{"name":"Zombie","hitpoints":76,"combatLevel":81,"slayerLevel":1,"attackSpeed":4,"attackLevel":69,"strengthLevel":70,"defenceLevel":71,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"6467":{"name":"Skeleton","hitpoints":69,"combatLevel":72,"slayerLevel":1,"attackLevel":75,"strengthLevel":61,"defenceLevel":45,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":40,"rangeDef":40,"bonusStrength":15,"undead":true},"6468":{"name":"Skeleton","hitpoints":92,"combatLevel":87,"slayerLevel":1,"attackLevel":75,"strengthLevel":80,"defenceLevel":55,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":40,"rangeDef":40,"bonusStrength":15,"undead":true},"6469":{"name":"Possessed pickaxe","hitpoints":40,"combatLevel":50,"attackSpeed":4,"attackLevel":40,"strengthLevel":55,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":15,"slashDef":10,"crushDef":5,"rangeDef":10,"magicDef":5},"6470":{"name":"Animated spade","hitpoints":40,"combatLevel":50,"attackSpeed":4,"attackLevel":40,"strengthLevel":55,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":15,"slashDef":10,"crushDef":5,"rangeDef":10,"magicDef":5},"6473":{"name":"Terror dog","hitpoints":87,"combatLevel":110,"slayerLevel":40,"attackSpeed":4,"attackLevel":110,"strengthLevel":104,"defenceLevel":78,"rangeLevel":1,"magicLevel":1,"bonusStrength":20},"6474":{"name":"Terror dog","hitpoints":82,"combatLevel":100,"slayerLevel":40,"attackSpeed":4,"attackLevel":100,"strengthLevel":90,"defenceLevel":74,"rangeLevel":1,"magicLevel":1,"bonusStrength":10},"6476":{"name":"Tarn","hitpoints":80,"combatLevel":69,"slayerLevel":40,"attackSpeed":4,"attackLevel":40,"strengthLevel":80,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":50,"rangeDef":50,"magicDef":50},"6477":{"name":"Mutant tarn","hitpoints":80,"combatLevel":69,"slayerLevel":40,"attackSpeed":4,"attackLevel":40,"strengthLevel":80,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":50,"rangeDef":50,"magicDef":50},"6492":{"name":"Kree'arra","hitpoints":255,"combatLevel":580,"slayerLevel":1,"attackSpeed":3,"attackLevel":300,"strengthLevel":200,"defenceLevel":260,"rangeLevel":380,"magicLevel":200,"range":120,"stabDef":180,"slashDef":180,"crushDef":180,"rangeDef":200,"magicDef":200,"bonusAttack":136,"bonusStrength":12,"bonusRangeStrength":50},"6493":{"name":"Commander Zilyana","hitpoints":255,"combatLevel":596,"slayerLevel":1,"attackSpeed":2,"attackLevel":280,"strengthLevel":196,"defenceLevel":300,"rangeLevel":250,"magicLevel":300,"magic":200,"stabDef":100,"slashDef":100,"crushDef":100,"rangeDef":100,"magicDef":100,"bonusAttack":195,"bonusStrength":20,"poisonImmune":true,"venomImmune":true},"6494":{"name":"General Graardor","hitpoints":255,"combatLevel":624,"slayerLevel":1,"attackSpeed":6,"attackLevel":280,"strengthLevel":350,"defenceLevel":250,"rangeLevel":350,"magicLevel":80,"range":100,"stabDef":90,"slashDef":90,"crushDef":90,"rangeDef":90,"magicDef":298,"bonusAttack":120,"bonusStrength":43,"bonusRangeStrength":40,"poisonImmune":true,"venomImmune":true},"6495":{"name":"K'ril Tsutsaroth","hitpoints":255,"combatLevel":650,"slayerLevel":1,"attackSpeed":6,"attackLevel":340,"strengthLevel":300,"defenceLevel":270,"rangeLevel":1,"magicLevel":200,"stabDef":80,"slashDef":80,"crushDef":80,"rangeDef":80,"magicDef":130,"bonusAttack":160,"bonusStrength":31,"demon":true},"6496":{"name":"Dagannoth Supreme","hitpoints":255,"combatLevel":303,"slayerLevel":1,"attackSpeed":4,"attackLevel":255,"strengthLevel":255,"defenceLevel":128,"rangeLevel":255,"magicLevel":255,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":550,"magicDef":255},"6497":{"name":"Dagannoth Prime","hitpoints":255,"combatLevel":303,"slayerLevel":1,"attackSpeed":4,"attackLevel":255,"strengthLevel":255,"defenceLevel":255,"magicLevel":255,"stabDef":255,"slashDef":255,"crushDef":255,"rangeDef":10,"magicDef":255},"6498":{"name":"Dagannoth Rex","hitpoints":255,"combatLevel":303,"slayerLevel":1,"attackSpeed":4,"attackLevel":255,"strengthLevel":255,"defenceLevel":255,"rangeLevel":255,"stabDef":255,"slashDef":255,"crushDef":255,"rangeDef":255,"magicDef":10},"6499":{"name":"Giant Mole","hitpoints":200,"combatLevel":230,"slayerLevel":1,"attackSpeed":4,"attackLevel":200,"strengthLevel":200,"defenceLevel":200,"rangeLevel":1,"magicLevel":200,"stabDef":60,"slashDef":80,"crushDef":100,"rangeDef":60,"magicDef":80},"6500":{"name":"Kalphite Queen","hitpoints":255,"combatLevel":333,"slayerLevel":1,"attackSpeed":4,"attackLevel":300,"strengthLevel":300,"defenceLevel":300,"rangeLevel":1,"magicLevel":150,"stabDef":50,"slashDef":50,"crushDef":10,"rangeDef":100,"magicDef":100},"6501":{"name":"Kalphite Queen","hitpoints":255,"combatLevel":333,"slayerLevel":1,"attackSpeed":4,"attackLevel":300,"strengthLevel":300,"defenceLevel":300,"rangeLevel":1,"magicLevel":150,"stabDef":100,"slashDef":100,"crushDef":100,"rangeDef":10,"magicDef":10},"6503":{"name":"Callisto","hitpoints":255,"combatLevel":470,"slayerLevel":1,"attackSpeed":4,"attackLevel":350,"strengthLevel":370,"defenceLevel":440,"rangeLevel":1,"magicLevel":1,"stabDef":135,"slashDef":104,"crushDef":175,"rangeDef":230,"magicDef":900,"poisonImmune":true,"venomImmune":true},"6504":{"name":"Venenatis","hitpoints":255,"combatLevel":464,"slayerLevel":1,"attackLevel":470,"strengthLevel":490,"defenceLevel":490,"rangeLevel":1,"magicLevel":150,"stabDef":260,"slashDef":260,"crushDef":260,"rangeDef":100,"magicDef":850,"poisonImmune":true,"venomImmune":true},"6505":{"name":"Chaos Elemental","hitpoints":250,"combatLevel":305,"slayerLevel":1,"attackSpeed":5,"attackLevel":270,"strengthLevel":270,"defenceLevel":270,"rangeLevel":270,"magicLevel":270,"stabDef":70,"slashDef":70,"crushDef":70,"rangeDef":70,"magicDef":70},"6506":{"name":"TzTok-Jad","hitpoints":250,"combatLevel":702,"slayerLevel":1,"attackSpeed":8,"attackLevel":640,"strengthLevel":960,"defenceLevel":480,"rangeLevel":960,"magicLevel":480,"magic":60},"6574":{"name":"Gnome guard","hitpoints":800,"combatLevel":1337,"attackSpeed":4,"attackLevel":800,"strengthLevel":400,"defenceLevel":300,"rangeLevel":1,"magicLevel":1,"stabDef":8,"slashDef":9,"crushDef":7,"rangeDef":8,"bonusAttack":60,"bonusStrength":7},"6575":{"name":"Guard","hitpoints":800,"combatLevel":1337,"attackSpeed":4,"attackLevel":800,"strengthLevel":400,"defenceLevel":300,"rangeLevel":1,"magicLevel":1,"stabDef":8,"slashDef":9,"crushDef":7,"rangeDef":8,"bonusAttack":60,"bonusStrength":7},"6576":{"name":"Guard","hitpoints":800,"combatLevel":1337,"attackSpeed":4,"attackLevel":800,"strengthLevel":400,"defenceLevel":300,"rangeLevel":1,"magicLevel":1,"stabDef":8,"slashDef":9,"crushDef":7,"rangeDef":8,"bonusAttack":60,"bonusStrength":7},"6579":{"name":"Guard","hitpoints":800,"combatLevel":1337,"attackSpeed":4,"attackLevel":800,"strengthLevel":400,"defenceLevel":300,"rangeLevel":1,"magicLevel":1,"stabDef":8,"slashDef":9,"crushDef":7,"rangeDef":8,"bonusAttack":60,"bonusStrength":7},"6580":{"name":"Guard","hitpoints":800,"combatLevel":1337,"attackSpeed":4,"attackLevel":800,"strengthLevel":400,"defenceLevel":300,"rangeLevel":1,"magicLevel":1,"stabDef":8,"slashDef":9,"crushDef":7,"rangeDef":8,"bonusAttack":60,"bonusStrength":7},"6581":{"name":"Guard","hitpoints":800,"combatLevel":1337,"attackSpeed":4,"attackLevel":800,"strengthLevel":400,"defenceLevel":300,"rangeLevel":1,"magicLevel":1,"stabDef":8,"slashDef":9,"crushDef":7,"rangeDef":8,"bonusAttack":60,"bonusStrength":7},"6582":{"name":"Guard","hitpoints":800,"combatLevel":1337,"attackSpeed":4,"attackLevel":800,"strengthLevel":400,"defenceLevel":300,"rangeLevel":1,"magicLevel":1,"stabDef":8,"slashDef":9,"crushDef":7,"rangeDef":8,"bonusAttack":60,"bonusStrength":7},"6583":{"name":"Guard","hitpoints":800,"combatLevel":1337,"attackSpeed":4,"attackLevel":800,"strengthLevel":400,"defenceLevel":300,"rangeLevel":1,"magicLevel":1,"stabDef":8,"slashDef":9,"crushDef":7,"rangeDef":8,"bonusAttack":60,"bonusStrength":7},"6587":{"name":"Armadylian guard","hitpoints":132,"combatLevel":97,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":82,"rangeLevel":90,"magicLevel":80,"magicDef":3},"6588":{"name":"Bandosian guard","hitpoints":130,"combatLevel":125,"attackSpeed":5,"attackLevel":110,"strengthLevel":115,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"stabDef":12,"slashDef":14,"crushDef":13,"rangeDef":13,"magicDef":5,"bonusAttack":19,"bonusStrength":4},"6593":{"name":"Lava dragon","hitpoints":230,"combatLevel":252,"slayerLevel":1,"attackSpeed":4,"attackLevel":240,"strengthLevel":220,"defenceLevel":220,"rangeLevel":1,"magicLevel":1,"stabDef":70,"slashDef":90,"crushDef":90,"rangeDef":70,"magicDef":80,"dragon":true},"6594":{"name":"Ent","hitpoints":105,"combatLevel":101,"slayerLevel":1,"attackSpeed":4,"attackLevel":80,"strengthLevel":95,"defenceLevel":75,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":30,"magicDef":40},"6596":{"name":"Zombie","hitpoints":24,"combatLevel":18,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"undead":true},"6597":{"name":"Zombie","hitpoints":24,"combatLevel":18,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"undead":true},"6598":{"name":"Zombie","hitpoints":24,"combatLevel":18,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"undead":true},"6600":{"name":"Runite Golem","hitpoints":170,"combatLevel":178,"attackSpeed":4,"attackLevel":140,"strengthLevel":150,"defenceLevel":165,"rangeLevel":1,"magicLevel":1},"6603":{"name":"Rogue","hitpoints":125,"combatLevel":135,"slayerLevel":1,"attackSpeed":4,"attackLevel":140,"strengthLevel":140,"defenceLevel":150,"rangeLevel":1,"magicLevel":1},"6604":{"name":"Mammoth","hitpoints":130,"combatLevel":80,"slayerLevel":1,"attackSpeed":4,"attackLevel":55,"strengthLevel":60,"defenceLevel":50,"rangeLevel":1,"magicLevel":1},"6605":{"name":"Bandit","hitpoints":155,"combatLevel":130,"slayerLevel":1,"attackSpeed":4,"attackLevel":57,"strengthLevel":57,"defenceLevel":57,"rangeLevel":1,"magicLevel":1,"stab":57,"slashDef":23,"crushDef":22,"bonusStrength":52},"6606":{"name":"Dark warrior","hitpoints":165,"combatLevel":145,"slayerLevel":1,"attackSpeed":4,"attackLevel":75,"strengthLevel":75,"defenceLevel":55,"rangeLevel":1,"magicLevel":1,"stabDef":106,"slashDef":109,"crushDef":139,"bonusAttack":80,"bonusStrength":76},"6607":{"name":"Elder Chaos druid","hitpoints":150,"combatLevel":129,"slayerLevel":1,"attackSpeed":4,"attackLevel":98,"strengthLevel":65,"defenceLevel":98,"rangeLevel":1,"magicLevel":110},"6608":{"name":"Ankou","hitpoints":70,"combatLevel":86,"slayerLevel":1,"attackSpeed":4,"attackLevel":75,"strengthLevel":75,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"undead":true},"6609":{"name":"Callisto","hitpoints":255,"combatLevel":470,"slayerLevel":1,"attackSpeed":4,"attackLevel":350,"strengthLevel":370,"defenceLevel":440,"rangeLevel":1,"magicLevel":1,"stabDef":135,"slashDef":104,"crushDef":175,"rangeDef":230,"magicDef":900,"poisonImmune":true,"venomImmune":true},"6610":{"name":"Venenatis","hitpoints":255,"combatLevel":464,"slayerLevel":1,"attackLevel":470,"strengthLevel":490,"defenceLevel":490,"rangeLevel":1,"magicLevel":150,"stabDef":260,"slashDef":260,"crushDef":260,"rangeDef":100,"magicDef":850,"poisonImmune":true,"venomImmune":true},"6611":{"name":"Vet'ion","hitpoints":255,"combatLevel":454,"slayerLevel":1,"attackSpeed":4,"attackLevel":430,"strengthLevel":430,"defenceLevel":395,"rangeLevel":1,"magicLevel":300,"stabDef":201,"slashDef":200,"rangeDef":270,"magicDef":250,"undead":true},"6612":{"name":"Vet'ion Reborn","hitpoints":255,"combatLevel":454,"slayerLevel":1,"attackSpeed":4,"attackLevel":430,"strengthLevel":430,"defenceLevel":395,"rangeLevel":1,"magicLevel":300,"stabDef":201,"slashDef":200,"rangeDef":270,"magicDef":250,"undead":true},"6613":{"name":"Skeleton Hellhound","hitpoints":110,"combatLevel":214,"slayerLevel":1,"attackSpeed":4,"attackLevel":210,"strengthLevel":250,"defenceLevel":150,"rangeLevel":1,"magicLevel":1,"stabDef":101,"slashDef":103,"crushDef":10,"rangeDef":266,"magicDef":180,"undead":true},"6614":{"name":"Greater Skeleton Hellhound","hitpoints":190,"combatLevel":281,"slayerLevel":1,"attackSpeed":4,"attackLevel":240,"strengthLevel":310,"defenceLevel":220,"rangeLevel":1,"magicLevel":1,"stabDef":150,"slashDef":163,"crushDef":20,"rangeDef":275,"magicDef":210,"undead":true},"6615":{"name":"Scorpia","hitpoints":200,"combatLevel":225,"slayerLevel":1,"attackSpeed":4,"attackLevel":250,"strengthLevel":150,"defenceLevel":180,"rangeLevel":1,"magicLevel":1,"stabDef":246,"slashDef":284,"crushDef":284,"rangeDef":284,"magicDef":44,"bonusAttack":60},"6616":{"name":"Scorpia's offspring","hitpoints":2,"combatLevel":15,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":30,"magicLevel":1,"range":900},"6617":{"name":"Scorpia's guardian","hitpoints":70,"combatLevel":47,"slayerLevel":1,"attackLevel":1,"strengthLevel":1,"defenceLevel":60,"rangeLevel":30,"magicLevel":30},"6618":{"name":"Crazy archaeologist","hitpoints":225,"combatLevel":204,"slayerLevel":1,"attackSpeed":3,"attackLevel":160,"strengthLevel":90,"defenceLevel":240,"rangeLevel":180,"magicLevel":1,"range":75,"stabDef":5,"slashDef":5,"crushDef":30,"rangeDef":250,"magicDef":250,"bonusAttack":250,"bonusStrength":25},"6619":{"name":"Chaos Fanatic","hitpoints":225,"combatLevel":202,"slayerLevel":1,"attackSpeed":2,"attackLevel":1,"strengthLevel":1,"defenceLevel":220,"rangeLevel":1,"magicLevel":200,"range":75,"stabDef":260,"slashDef":260,"crushDef":250,"rangeDef":80,"magicDef":280},"6624":{"name":"Energy sprite","hitpoints":62},"6698":{"name":"Ghost guard","hitpoints":800,"combatLevel":1337,"attackSpeed":4,"attackLevel":800,"strengthLevel":400,"defenceLevel":300,"rangeLevel":1,"magicLevel":1,"stabDef":8,"slashDef":9,"crushDef":7,"rangeDef":8,"bonusAttack":60,"bonusStrength":7},"6699":{"name":"Guard","hitpoints":800,"combatLevel":1337,"attackSpeed":4,"attackLevel":800,"strengthLevel":400,"defenceLevel":300,"rangeLevel":1,"magicLevel":1,"stabDef":8,"slashDef":9,"crushDef":7,"rangeDef":8,"bonusAttack":60,"bonusStrength":7},"6700":{"name":"Guard","hitpoints":800,"combatLevel":1337,"attackSpeed":4,"attackLevel":800,"strengthLevel":400,"defenceLevel":300,"rangeLevel":1,"magicLevel":1,"stabDef":8,"slashDef":9,"crushDef":7,"rangeDef":8,"bonusAttack":60,"bonusStrength":7},"6701":{"name":"Guard","hitpoints":800,"combatLevel":1337,"attackSpeed":4,"attackLevel":800,"strengthLevel":400,"defenceLevel":300,"rangeLevel":1,"magicLevel":1,"stabDef":8,"slashDef":9,"crushDef":7,"rangeDef":8,"bonusAttack":60,"bonusStrength":7},"6702":{"name":"Guard","hitpoints":800,"combatLevel":1337,"attackSpeed":4,"attackLevel":800,"strengthLevel":400,"defenceLevel":300,"rangeLevel":1,"magicLevel":1,"stabDef":8,"slashDef":9,"crushDef":7,"rangeDef":8,"bonusAttack":60,"bonusStrength":7},"6716":{"name":"Chaotic death spawn","hitpoints":50,"combatLevel":215,"attackSpeed":3,"attackLevel":380,"strengthLevel":1,"defenceLevel":70,"rangeLevel":380,"magicLevel":380,"demon":true},"6723":{"name":"Chaotic death spawn","hitpoints":50,"combatLevel":215,"attackSpeed":3,"attackLevel":380,"strengthLevel":1,"defenceLevel":70,"rangeLevel":380,"magicLevel":380,"demon":true},"6725":{"name":"Rock Golem","combatLevel":14,"attackSpeed":4},"6726":{"name":"Rock Golem","combatLevel":29,"attackSpeed":4},"6727":{"name":"Rock Golem","combatLevel":49,"attackSpeed":4},"6728":{"name":"Rock Golem","hitpoints":86,"combatLevel":79,"attackSpeed":4},"6729":{"name":"Rock Golem","hitpoints":120,"combatLevel":120,"attackSpeed":4,"attackLevel":100,"strengthLevel":100,"defenceLevel":100,"rangeLevel":75,"magicLevel":1},"6730":{"name":"Rock Golem","hitpoints":170,"combatLevel":159,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":130,"rangeLevel":80,"magicLevel":1},"6732":{"name":"River troll","combatLevel":14,"slayerLevel":1,"attackSpeed":4,"attackLevel":17,"strengthLevel":17,"defenceLevel":17,"rangeLevel":1,"magicLevel":1},"6733":{"name":"River troll","combatLevel":29,"slayerLevel":1,"attackSpeed":4,"attackLevel":32,"strengthLevel":32,"defenceLevel":32,"rangeLevel":1,"magicLevel":1},"6734":{"name":"River troll","combatLevel":49,"slayerLevel":1,"attackSpeed":4,"attackLevel":48,"strengthLevel":48,"defenceLevel":48,"rangeLevel":1,"magicLevel":1},"6735":{"name":"River troll","hitpoints":85,"combatLevel":79,"slayerLevel":1,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"rangeLevel":1,"magicLevel":1},"6736":{"name":"River troll","hitpoints":120,"combatLevel":120,"slayerLevel":1,"attackSpeed":4,"attackLevel":100,"strengthLevel":100,"defenceLevel":100,"rangeLevel":1,"magicLevel":1},"6737":{"name":"River troll","hitpoints":170,"combatLevel":159,"slayerLevel":1,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":130,"rangeLevel":1,"magicLevel":1},"6739":{"name":"Evil Chicken","hitpoints":120,"combatLevel":159,"attackSpeed":4,"defenceLevel":126,"magicLevel":200},"6740":{"name":"Shade","hitpoints":170,"combatLevel":159,"slayerLevel":1,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":130,"rangeLevel":1,"magicLevel":1,"undead":true},"6741":{"name":"Zombie","hitpoints":170,"combatLevel":159,"slayerLevel":1,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":130,"rangeLevel":1,"magicLevel":1,"undead":true},"6766":{"name":"Lizardman shaman","hitpoints":150,"combatLevel":150,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":120,"defenceLevel":140,"rangeLevel":120,"magicLevel":130,"range":45,"slashDef":40,"crushDef":30,"magicDef":50,"bonusAttack":45,"bonusStrength":38,"bonusRangeStrength":38},"6767":{"name":"Lizardman shaman","hitpoints":150,"combatLevel":150,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":120,"defenceLevel":140,"rangeLevel":120,"magicLevel":130,"range":45,"slashDef":40,"crushDef":30,"magicDef":50,"bonusAttack":45,"bonusStrength":38,"bonusRangeStrength":38},"6794":{"name":"Monkey Archer","hitpoints":50,"combatLevel":86,"slayerLevel":1,"attackSpeed":4,"attackLevel":80,"strengthLevel":80,"defenceLevel":80,"rangeLevel":110,"magicLevel":1},"6805":{"name":"Kruk","hitpoints":210,"combatLevel":149,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":150,"rangeLevel":170,"magicLevel":130,"range":150,"stabDef":100,"slashDef":100,"crushDef":100,"rangeDef":100,"magicDef":250,"bonusAttack":160,"bonusStrength":90,"bonusRangeStrength":70},"6813":{"name":"Monkey Archer","hitpoints":50,"combatLevel":86,"slayerLevel":1,"attackSpeed":4,"attackLevel":80,"strengthLevel":80,"defenceLevel":80,"rangeLevel":110,"magicLevel":1},"6815":{"name":"Ghost","hitpoints":25,"combatLevel":19,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"6816":{"name":"Ghost","hitpoints":25,"combatLevel":19,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"6817":{"name":"Ghost","hitpoints":25,"combatLevel":19,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"6818":{"name":"Ghost","hitpoints":25,"combatLevel":19,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"6819":{"name":"Ghost","hitpoints":25,"combatLevel":19,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"6820":{"name":"Ghost","hitpoints":25,"combatLevel":19,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"6821":{"name":"Ghost","hitpoints":25,"combatLevel":19,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"6822":{"name":"Ghost","hitpoints":25,"combatLevel":19,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"6824":{"name":"Giant bat","hitpoints":32,"combatLevel":27,"slayerLevel":1,"attackSpeed":4,"attackLevel":22,"strengthLevel":22,"defenceLevel":22,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"crushDef":12,"rangeDef":8,"magicDef":10},"6896":{"name":"Gangster","hitpoints":40,"combatLevel":45,"attackSpeed":4,"attackLevel":40,"strengthLevel":30,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"crushDef":10,"bonusAttack":20,"bonusStrength":30},"6897":{"name":"Gangster","hitpoints":40,"combatLevel":45,"attackSpeed":4,"attackLevel":40,"strengthLevel":30,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"crushDef":10,"bonusAttack":20,"bonusStrength":30},"6898":{"name":"Gangster","hitpoints":50,"combatLevel":50,"attackSpeed":5,"attackLevel":50,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"crushDef":10,"bonusAttack":35,"bonusStrength":15},"6899":{"name":"Gangster","hitpoints":50,"combatLevel":50,"attackSpeed":5,"attackLevel":50,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"crushDef":10,"bonusAttack":35,"bonusStrength":15},"6900":{"name":"Gang boss","hitpoints":80,"combatLevel":83,"attackSpeed":3,"attackLevel":1,"strengthLevel":1,"defenceLevel":70,"rangeLevel":80,"magicLevel":1,"range":50,"crushDef":10},"6901":{"name":"Gang boss","hitpoints":80,"combatLevel":83,"attackSpeed":3,"attackLevel":1,"strengthLevel":1,"defenceLevel":70,"rangeLevel":80,"magicLevel":1,"range":50,"crushDef":10},"6902":{"name":"Gang boss","hitpoints":80,"combatLevel":76,"attackSpeed":3,"attackLevel":1,"strengthLevel":1,"defenceLevel":70,"rangeLevel":80,"magicLevel":1,"range":50,"crushDef":10},"6903":{"name":"Gang boss","hitpoints":80,"combatLevel":76,"attackSpeed":3,"attackLevel":1,"strengthLevel":1,"defenceLevel":70,"rangeLevel":80,"magicLevel":1,"range":50,"crushDef":10},"6904":{"name":"Soldier (tier 1)","hitpoints":50,"combatLevel":39,"attackSpeed":6,"attackLevel":30,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":11,"poisonImmune":true,"venomImmune":true},"6905":{"name":"Soldier (tier 1)","hitpoints":50,"combatLevel":39,"attackSpeed":6,"attackLevel":30,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":11,"poisonImmune":true,"venomImmune":true},"6906":{"name":"Soldier (tier 2)","hitpoints":50,"combatLevel":48,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"bonusAttack":25,"bonusStrength":30,"poisonImmune":true,"venomImmune":true},"6907":{"name":"Soldier (tier 2)","hitpoints":50,"combatLevel":48,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"bonusAttack":25,"bonusStrength":30,"poisonImmune":true,"venomImmune":true},"6908":{"name":"Soldier (tier 3)","hitpoints":55,"combatLevel":58,"attackSpeed":5,"attackLevel":50,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"bonusAttack":20,"bonusStrength":8,"poisonImmune":true,"venomImmune":true},"6909":{"name":"Soldier (tier 3)","hitpoints":55,"combatLevel":58,"attackSpeed":5,"attackLevel":50,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"bonusAttack":20,"bonusStrength":8,"poisonImmune":true,"venomImmune":true},"6910":{"name":"Soldier (tier 4)","hitpoints":65,"combatLevel":70,"attackSpeed":5,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stabDef":1,"slashDef":1,"bonusAttack":10,"bonusStrength":8,"poisonImmune":true,"venomImmune":true},"6911":{"name":"Soldier (tier 4)","hitpoints":65,"combatLevel":70,"attackSpeed":5,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stabDef":1,"slashDef":1,"bonusAttack":10,"bonusStrength":8,"poisonImmune":true,"venomImmune":true},"6912":{"name":"Soldier (tier 5)","hitpoints":90,"combatLevel":99,"attackSpeed":4,"attackLevel":85,"strengthLevel":85,"defenceLevel":86,"rangeLevel":1,"magicLevel":1,"bonusAttack":5,"bonusStrength":5,"poisonImmune":true,"venomImmune":true},"6913":{"name":"Soldier (tier 5)","hitpoints":90,"combatLevel":99,"attackSpeed":4,"attackLevel":85,"strengthLevel":85,"defenceLevel":86,"rangeLevel":1,"magicLevel":1,"bonusAttack":5,"bonusStrength":5,"poisonImmune":true,"venomImmune":true},"6914":{"name":"Lizardman","hitpoints":60,"combatLevel":53,"slayerLevel":1,"attackSpeed":4,"attackLevel":43,"strengthLevel":43,"defenceLevel":43,"rangeLevel":43,"magicLevel":1,"range":22,"slashDef":25,"bonusAttack":22,"bonusStrength":20,"bonusRangeStrength":20},"6915":{"name":"Lizardman","hitpoints":60,"combatLevel":53,"slayerLevel":1,"attackSpeed":4,"attackLevel":43,"strengthLevel":43,"defenceLevel":43,"rangeLevel":43,"magicLevel":1,"range":22,"slashDef":25,"bonusAttack":22,"bonusStrength":20,"bonusRangeStrength":20},"6916":{"name":"Lizardman","hitpoints":60,"combatLevel":62,"slayerLevel":1,"attackSpeed":4,"attackLevel":53,"strengthLevel":53,"defenceLevel":52,"rangeLevel":1,"magicLevel":1,"range":28,"slashDef":20,"crushDef":5,"bonusAttack":28,"bonusStrength":25,"bonusRangeStrength":25},"6917":{"name":"Lizardman","hitpoints":60,"combatLevel":62,"slayerLevel":1,"attackSpeed":4,"attackLevel":53,"strengthLevel":53,"defenceLevel":52,"rangeLevel":1,"magicLevel":1,"range":28,"slashDef":20,"crushDef":5,"bonusAttack":28,"bonusStrength":25,"bonusRangeStrength":25},"6918":{"name":"Lizardman brute","hitpoints":60,"combatLevel":73,"slayerLevel":1,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"rangeLevel":1,"magicLevel":1,"range":34,"slashDef":30,"crushDef":10,"bonusAttack":34,"bonusStrength":30,"bonusRangeStrength":30},"6919":{"name":"Lizardman brute","hitpoints":60,"combatLevel":73,"slayerLevel":1,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"rangeLevel":1,"magicLevel":1,"range":34,"slashDef":30,"crushDef":10,"bonusAttack":34,"bonusStrength":30,"bonusRangeStrength":30},"6956":{"name":"Monk","hitpoints":5,"combatLevel":3,"attackSpeed":4,"attackLevel":2,"strengthLevel":2,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"6987":{"name":"Man","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"6988":{"name":"Man","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"6989":{"name":"Man","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"6990":{"name":"Woman","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"6991":{"name":"Woman","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"6992":{"name":"Woman","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"6996":{"name":"Mugger","hitpoints":8,"combatLevel":6,"attackSpeed":4,"attackLevel":5,"strengthLevel":5,"defenceLevel":5,"rangeLevel":1,"magicLevel":1},"7016":{"name":"Kourend guard","hitpoints":22,"combatLevel":21,"attackSpeed":4,"attackLevel":19,"strengthLevel":18,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"stab":4},"7017":{"name":"Kourend head guard","hitpoints":86,"combatLevel":84,"attackSpeed":4,"attackLevel":75,"strengthLevel":73,"defenceLevel":61,"rangeLevel":1,"magicLevel":1,"stabDef":16,"slashDef":16,"crushDef":18,"rangeDef":27,"bonusAttack":17,"bonusStrength":15},"7018":{"name":"Reanimated goblin","hitpoints":5,"attackSpeed":4},"7019":{"name":"Reanimated monkey","hitpoints":5,"attackSpeed":4},"7020":{"name":"Reanimated imp","hitpoints":5,"attackSpeed":4},"7021":{"name":"Reanimated minotaur","hitpoints":10,"attackSpeed":4},"7022":{"name":"Reanimated scorpion","hitpoints":15,"attackSpeed":4},"7023":{"name":"Reanimated bear","hitpoints":15,"attackSpeed":4},"7024":{"name":"Reanimated unicorn","hitpoints":15,"attackSpeed":4},"7025":{"name":"Reanimated dog","hitpoints":35,"attackSpeed":4},"7026":{"name":"Reanimated chaos druid","hitpoints":35,"attackSpeed":4},"7027":{"name":"Reanimated giant","hitpoints":35,"slayerLevel":1,"attackSpeed":4},"7028":{"name":"Reanimated ogre","hitpoints":35,"attackSpeed":5},"7029":{"name":"Reanimated elf","hitpoints":35,"slayerLevel":1,"attackSpeed":4},"7030":{"name":"Reanimated troll","hitpoints":35,"slayerLevel":1,"attackSpeed":4},"7031":{"name":"Reanimated horror","hitpoints":35,"slayerLevel":58,"attackSpeed":4},"7032":{"name":"Reanimated kalphite","hitpoints":35,"slayerLevel":1,"attackSpeed":4},"7033":{"name":"Reanimated dagannoth","hitpoints":35,"slayerLevel":1,"attackSpeed":4},"7034":{"name":"Reanimated bloodveld","hitpoints":35,"slayerLevel":50,"attackSpeed":4},"7035":{"name":"Reanimated TzHaar","hitpoints":35,"attackSpeed":5},"7036":{"name":"Reanimated demon","hitpoints":35,"attackSpeed":4},"7037":{"name":"Reanimated aviansie","hitpoints":35,"slayerLevel":1,"attackSpeed":4},"7038":{"name":"Reanimated abyssal","hitpoints":35,"slayerLevel":85,"attackSpeed":4},"7039":{"name":"Reanimated dragon","hitpoints":35,"attackSpeed":4,"dragon":true},"7095":{"name":"Tortured gorilla","hitpoints":110,"combatLevel":142,"slayerLevel":1,"attackSpeed":4,"attackLevel":180,"strengthLevel":90,"defenceLevel":110,"rangeLevel":1,"magicLevel":110,"bonusAttack":90,"bonusStrength":123},"7096":{"name":"Tortured gorilla","hitpoints":110,"combatLevel":142,"slayerLevel":1,"attackSpeed":4,"attackLevel":180,"strengthLevel":90,"defenceLevel":110,"rangeLevel":1,"magicLevel":110,"bonusAttack":90,"bonusStrength":123},"7097":{"name":"Tortured gorilla","hitpoints":110,"combatLevel":142,"slayerLevel":1,"attackSpeed":4,"attackLevel":180,"strengthLevel":90,"defenceLevel":110,"rangeLevel":1,"magicLevel":110,"bonusAttack":90,"bonusStrength":123},"7101":{"name":"Glough","hitpoints":575,"combatLevel":378,"attackSpeed":6,"attackLevel":260,"strengthLevel":270,"defenceLevel":248,"rangeLevel":262,"magicLevel":250,"range":100,"magic":80,"bonusAttack":122,"bonusStrength":75,"bonusRangeStrength":40,"bonusMagicDamage":40},"7102":{"name":"Glough","hitpoints":575,"combatLevel":378,"attackSpeed":6,"attackLevel":260,"strengthLevel":270,"defenceLevel":248,"rangeLevel":262,"magicLevel":250,"range":100,"magic":80,"bonusAttack":122,"bonusStrength":75,"bonusRangeStrength":40,"bonusMagicDamage":40},"7103":{"name":"Glough","hitpoints":575,"combatLevel":378,"attackSpeed":6,"attackLevel":260,"strengthLevel":270,"defenceLevel":248,"rangeLevel":262,"magicLevel":250,"range":100,"magic":80,"bonusAttack":122,"bonusStrength":75,"bonusRangeStrength":40,"bonusMagicDamage":40},"7104":{"name":"Keef","hitpoints":180,"combatLevel":178,"attackSpeed":5,"attackLevel":165,"strengthLevel":120,"defenceLevel":165,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":50,"bonusAttack":190,"bonusStrength":170},"7105":{"name":"Keef","hitpoints":180,"combatLevel":178,"attackSpeed":5,"attackLevel":165,"strengthLevel":120,"defenceLevel":165,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":50,"bonusAttack":190,"bonusStrength":170},"7106":{"name":"Kob","hitpoints":200,"combatLevel":185,"attackSpeed":5,"attackLevel":180,"strengthLevel":175,"defenceLevel":80,"stabDef":85,"slashDef":85,"crushDef":90,"rangeDef":200,"magicDef":200,"bonusAttack":200,"bonusStrength":135,"poisonImmune":true,"venomImmune":true},"7107":{"name":"Kob","hitpoints":200,"combatLevel":185,"attackSpeed":5,"attackLevel":180,"strengthLevel":175,"defenceLevel":80,"stabDef":85,"slashDef":85,"crushDef":90,"rangeDef":200,"magicDef":200,"bonusAttack":200,"bonusStrength":135,"poisonImmune":true,"venomImmune":true},"7118":{"name":"Maniacal monkey","hitpoints":65,"combatLevel":140,"attackSpeed":4,"attackLevel":200,"strengthLevel":175,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"7119":{"name":"Maniacal Monkey Archer","hitpoints":60,"combatLevel":132,"attackSpeed":4,"attackLevel":120,"strengthLevel":80,"defenceLevel":80,"rangeLevel":200,"magicLevel":1},"7144":{"name":"Demonic gorilla","hitpoints":380,"combatLevel":275,"slayerLevel":1,"attackSpeed":5,"attackLevel":205,"strengthLevel":195,"defenceLevel":200,"rangeLevel":195,"magicLevel":195,"range":43,"magic":40,"magicDef":50,"bonusAttack":43,"bonusStrength":29,"bonusRangeStrength":29,"demon":true},"7145":{"name":"Demonic gorilla","hitpoints":380,"combatLevel":275,"slayerLevel":1,"attackSpeed":5,"attackLevel":205,"strengthLevel":195,"defenceLevel":200,"rangeLevel":195,"magicLevel":195,"range":43,"magic":40,"magicDef":50,"bonusAttack":43,"bonusStrength":29,"bonusRangeStrength":29,"demon":true},"7146":{"name":"Demonic gorilla","hitpoints":380,"combatLevel":275,"slayerLevel":1,"attackSpeed":5,"attackLevel":205,"strengthLevel":195,"defenceLevel":200,"rangeLevel":195,"magicLevel":195,"range":43,"magic":40,"magicDef":50,"bonusAttack":43,"bonusStrength":29,"bonusRangeStrength":29,"demon":true},"7147":{"name":"Demonic gorilla","hitpoints":380,"combatLevel":275,"slayerLevel":1,"attackSpeed":5,"attackLevel":205,"strengthLevel":195,"defenceLevel":200,"rangeLevel":195,"magicLevel":195,"range":43,"magic":40,"magicDef":50,"bonusAttack":43,"bonusStrength":29,"bonusRangeStrength":29,"demon":true},"7148":{"name":"Demonic gorilla","hitpoints":380,"combatLevel":275,"slayerLevel":1,"attackSpeed":5,"attackLevel":205,"strengthLevel":195,"defenceLevel":200,"rangeLevel":195,"magicLevel":195,"range":43,"magic":40,"magicDef":50,"bonusAttack":43,"bonusStrength":29,"bonusRangeStrength":29,"demon":true},"7149":{"name":"Demonic gorilla","hitpoints":380,"combatLevel":275,"slayerLevel":1,"attackSpeed":5,"attackLevel":205,"strengthLevel":195,"defenceLevel":200,"rangeLevel":195,"magicLevel":195,"range":43,"magic":40,"magicDef":50,"bonusAttack":43,"bonusStrength":29,"bonusRangeStrength":29,"demon":true},"7150":{"name":"Tortured gorilla","hitpoints":210,"combatLevel":141,"slayerLevel":1,"attackSpeed":5,"attackLevel":105,"strengthLevel":95,"defenceLevel":95,"rangeLevel":95,"magicLevel":95,"range":22,"magic":20,"magicDef":25,"bonusAttack":22,"bonusStrength":16,"bonusRangeStrength":16,"bonusMagicDamage":16},"7151":{"name":"Tortured gorilla","hitpoints":210,"combatLevel":141,"slayerLevel":1,"attackSpeed":5,"attackLevel":105,"strengthLevel":95,"defenceLevel":95,"rangeLevel":95,"magicLevel":95,"range":22,"magic":20,"magicDef":25,"bonusAttack":22,"bonusStrength":16,"bonusRangeStrength":16,"bonusMagicDamage":16},"7152":{"name":"Demonic gorilla","hitpoints":380,"combatLevel":275,"slayerLevel":1,"attackSpeed":5,"attackLevel":205,"strengthLevel":195,"defenceLevel":200,"rangeLevel":195,"magicLevel":195,"range":43,"magic":40,"magicDef":50,"bonusAttack":43,"bonusStrength":29,"bonusRangeStrength":29,"demon":true},"7153":{"name":"Tortured gorilla","hitpoints":210,"combatLevel":141,"slayerLevel":1,"attackSpeed":5,"attackLevel":105,"strengthLevel":95,"defenceLevel":95,"rangeLevel":95,"magicLevel":95,"range":22,"magic":20,"magicDef":25,"bonusAttack":22,"bonusStrength":16,"bonusRangeStrength":16,"bonusMagicDamage":16},"7206":{"name":"Sand Crab","hitpoints":60,"combatLevel":15,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"7207":{"name":"Sandy rocks","hitpoints":60,"combatLevel":15,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"7209":{"name":"Guard dog","hitpoints":49,"combatLevel":44,"slayerLevel":1,"attackSpeed":4,"attackLevel":35,"strengthLevel":36,"defenceLevel":37,"rangeLevel":1,"magicLevel":1},"7234":{"name":"Ent","hitpoints":75,"combatLevel":86,"attackSpeed":4,"attackLevel":75,"strengthLevel":75,"defenceLevel":75,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":30,"magicDef":40,"bonusAttack":35,"bonusStrength":65},"7238":{"name":"Forester","hitpoints":17,"combatLevel":15,"attackSpeed":4,"attackLevel":14,"strengthLevel":13,"defenceLevel":8,"rangeLevel":1,"magicLevel":1,"stabDef":4,"slashDef":3,"crushDef":5},"7241":{"name":"Abyssal demon","hitpoints":150,"combatLevel":124,"slayerLevel":85,"attackSpeed":4,"attackLevel":97,"strengthLevel":67,"defenceLevel":135,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"crushDef":20,"rangeDef":20,"demon":true},"7242":{"name":"Black demon","hitpoints":170,"combatLevel":184,"slayerLevel":1,"attackSpeed":4,"attackLevel":155,"strengthLevel":158,"defenceLevel":162,"rangeLevel":1,"magicLevel":1,"demon":true},"7243":{"name":"Black demon","hitpoints":160,"combatLevel":178,"slayerLevel":1,"attackSpeed":4,"attackLevel":145,"strengthLevel":148,"defenceLevel":175,"rangeLevel":1,"magicLevel":1,"demon":true},"7244":{"name":"Greater demon","hitpoints":120,"combatLevel":101,"slayerLevel":1,"attackSpeed":4,"attackLevel":90,"strengthLevel":90,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"demon":true},"7245":{"name":"Greater demon","hitpoints":115,"combatLevel":100,"slayerLevel":1,"attackSpeed":4,"attackLevel":90,"strengthLevel":70,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"demon":true},"7246":{"name":"Greater demon","hitpoints":130,"combatLevel":113,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":90,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"demon":true},"7247":{"name":"Lesser demon","hitpoints":87,"combatLevel":87,"slayerLevel":1,"attackSpeed":4,"attackLevel":80,"strengthLevel":70,"defenceLevel":71,"rangeLevel":1,"magicLevel":1,"demon":true},"7248":{"name":"Lesser demon","hitpoints":98,"combatLevel":94,"slayerLevel":1,"attackSpeed":4,"attackLevel":80,"strengthLevel":70,"defenceLevel":85,"rangeLevel":1,"magicLevel":1,"demon":true},"7249":{"name":"Dust devil","hitpoints":130,"combatLevel":110,"slayerLevel":65,"attackSpeed":4,"attackLevel":120,"strengthLevel":90,"defenceLevel":40,"rangeLevel":1,"magicLevel":1},"7250":{"name":"Dark beast","hitpoints":220,"combatLevel":182,"slayerLevel":90,"attackSpeed":4,"attackLevel":140,"strengthLevel":160,"defenceLevel":120,"rangeLevel":1,"magicLevel":160,"stabDef":30,"slashDef":40,"crushDef":100,"rangeDef":100,"magicDef":90},"7251":{"name":"Fire giant","hitpoints":150,"combatLevel":109,"slayerLevel":1,"attackSpeed":5,"attackLevel":90,"strengthLevel":80,"defenceLevel":65,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"bonusAttack":29,"bonusStrength":31},"7252":{"name":"Fire giant","hitpoints":130,"combatLevel":104,"slayerLevel":1,"attackSpeed":5,"attackLevel":65,"strengthLevel":65,"defenceLevel":120,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":10,"crushDef":10,"magicDef":50,"bonusAttack":50,"bonusStrength":20},"7253":{"name":"Bronze dragon","hitpoints":122,"combatLevel":143,"slayerLevel":1,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":112,"rangeLevel":1,"magicLevel":130,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":90,"magicDef":30,"dragon":true},"7254":{"name":"Iron dragon","hitpoints":195,"combatLevel":215,"slayerLevel":1,"attackSpeed":4,"attackLevel":185,"strengthLevel":185,"defenceLevel":185,"rangeLevel":1,"magicLevel":120,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":90,"magicDef":30,"dragon":true},"7255":{"name":"Steel dragon","hitpoints":250,"combatLevel":274,"slayerLevel":1,"attackSpeed":4,"attackLevel":235,"strengthLevel":235,"defenceLevel":235,"rangeLevel":1,"magicLevel":130,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":90,"magicDef":30,"dragon":true},"7256":{"name":"Hellhound","hitpoints":116,"combatLevel":122,"slayerLevel":1,"attackSpeed":4,"attackLevel":105,"strengthLevel":104,"defenceLevel":102,"rangeLevel":1,"magicLevel":1},"7257":{"name":"Ankou","hitpoints":60,"combatLevel":95,"slayerLevel":1,"attackSpeed":4,"attackLevel":100,"strengthLevel":70,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"undead":true},"7258":{"name":"Shade","hitpoints":115,"combatLevel":140,"slayerLevel":1,"attackSpeed":6,"attackLevel":130,"strengthLevel":136,"defenceLevel":100,"rangeLevel":50,"magicLevel":50,"undead":true},"7259":{"name":"Dagannoth","hitpoints":70,"combatLevel":74,"slayerLevel":1,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":50,"rangeLevel":1,"magicLevel":1},"7260":{"name":"Dagannoth","hitpoints":120,"combatLevel":92,"slayerLevel":1,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":71,"rangeLevel":1,"magicLevel":1},"7261":{"name":"Hill Giant","hitpoints":35,"combatLevel":28,"slayerLevel":1,"attackSpeed":4,"attackLevel":18,"strengthLevel":22,"defenceLevel":26,"rangeLevel":1,"magicLevel":1,"bonusAttack":18,"bonusStrength":16},"7262":{"name":"Moss giant","hitpoints":60,"combatLevel":42,"slayerLevel":1,"attackSpeed":6,"attackLevel":30,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"bonusAttack":33,"bonusStrength":31},"7263":{"name":"Ghost","hitpoints":25,"combatLevel":19,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"7264":{"name":"Ghost","hitpoints":25,"combatLevel":19,"slayerLevel":1,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"7265":{"name":"Skeleton","hitpoints":29,"combatLevel":22,"slayerLevel":1,"attackSpeed":4,"attackLevel":15,"strengthLevel":18,"defenceLevel":17,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"rangeDef":5,"undead":true},"7266":{"name":"King Sand Crab","hitpoints":200,"combatLevel":107,"attackSpeed":6,"attackLevel":50,"strengthLevel":50,"defenceLevel":100,"rangeLevel":1,"magicLevel":1},"7267":{"name":"Sandy Boulder","hitpoints":200,"combatLevel":107,"attackSpeed":6,"attackLevel":50,"strengthLevel":50,"defenceLevel":100,"rangeLevel":1,"magicLevel":1},"7268":{"name":"Possessed pickaxe","hitpoints":40,"combatLevel":50,"attackSpeed":4,"attackLevel":40,"strengthLevel":55,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":15,"slashDef":10,"crushDef":5,"rangeDef":10,"magicDef":5},"7269":{"name":"Magic axe","hitpoints":45,"combatLevel":42,"slayerLevel":1,"attackSpeed":6,"attackLevel":38,"strengthLevel":38,"defenceLevel":29,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":5,"crushDef":15,"rangeDef":10,"magicDef":5},"7270":{"name":"Cyclops","hitpoints":100,"combatLevel":76,"slayerLevel":1,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"7271":{"name":"Cyclops","hitpoints":75,"combatLevel":56,"slayerLevel":1,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"7272":{"name":"Twisted Banshee","hitpoints":109,"combatLevel":89,"slayerLevel":15,"attackSpeed":4,"attackLevel":75,"strengthLevel":85,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"stabDef":15,"slashDef":15,"crushDef":15,"rangeDef":15,"undead":true},"7273":{"name":"Brutal blue dragon","hitpoints":245,"combatLevel":271,"slayerLevel":1,"attackSpeed":4,"attackLevel":298,"strengthLevel":198,"defenceLevel":198,"magicLevel":198,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"poisonImmune":true,"venomImmune":true,"dragon":true},"7274":{"name":"Brutal red dragon","hitpoints":285,"combatLevel":289,"slayerLevel":1,"attackSpeed":4,"attackLevel":310,"strengthLevel":210,"defenceLevel":198,"magicLevel":250,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"poisonImmune":true,"venomImmune":true,"dragon":true},"7275":{"name":"Brutal black dragon","hitpoints":315,"combatLevel":318,"slayerLevel":77,"attackSpeed":4,"attackLevel":330,"strengthLevel":210,"defenceLevel":258,"magicLevel":250,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"bonusStrength":20,"poisonImmune":true,"venomImmune":true,"dragon":true},"7276":{"name":"Mutated Bloodveld","hitpoints":170,"combatLevel":123,"slayerLevel":50,"attackSpeed":4,"attackLevel":110,"strengthLevel":115,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"7277":{"name":"Warped Jelly","hitpoints":140,"combatLevel":112,"slayerLevel":52,"attackSpeed":4,"attackLevel":95,"strengthLevel":90,"defenceLevel":70,"rangeLevel":1,"magicLevel":95},"7278":{"name":"Greater Nechryael","hitpoints":205,"combatLevel":200,"slayerLevel":80,"attackSpeed":4,"attackLevel":197,"strengthLevel":197,"defenceLevel":85,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":50,"rangeDef":50,"demon":true},"7279":{"name":"Deviant spectre","hitpoints":190,"combatLevel":169,"slayerLevel":60,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":90,"rangeLevel":1,"magicLevel":205,"stabDef":80,"slashDef":80,"crushDef":80,"rangeDef":85,"undead":true},"7286":{"name":"Skotizo","hitpoints":450,"combatLevel":321,"slayerLevel":1,"attackSpeed":6,"attackLevel":240,"strengthLevel":250,"defenceLevel":200,"rangeLevel":1,"magicLevel":280,"stabDef":80,"slashDef":80,"crushDef":80,"rangeDef":130,"magicDef":130,"bonusAttack":160,"bonusStrength":31,"poisonImmune":true,"venomImmune":true,"demon":true},"7287":{"name":"Reanimated demon spawn","hitpoints":85,"combatLevel":87,"slayerLevel":1,"attackSpeed":4,"attackLevel":80,"strengthLevel":70,"defenceLevel":71,"rangeLevel":1,"magicLevel":1,"demon":true},"7288":{"name":"Awakened Altar","hitpoints":100,"demon":true},"7290":{"name":"Awakened Altar","hitpoints":100,"demon":true},"7292":{"name":"Awakened Altar","hitpoints":100,"demon":true},"7294":{"name":"Awakened Altar","hitpoints":100,"demon":true},"7296":{"name":"Dark Ankou","hitpoints":60,"combatLevel":95,"slayerLevel":1,"attackSpeed":4,"attackLevel":100,"strengthLevel":70,"defenceLevel":100,"rangeLevel":1,"magicLevel":1},"7307":{"name":"Ancient Wizard","hitpoints":80,"combatLevel":98,"attackSpeed":4,"attackLevel":50,"strengthLevel":30,"defenceLevel":20,"rangeLevel":1,"magicLevel":150},"7308":{"name":"Ancient Wizard","hitpoints":80,"combatLevel":98,"attackSpeed":4,"attackLevel":50,"strengthLevel":30,"defenceLevel":20,"rangeLevel":150,"magicLevel":80,"bonusRangeStrength":30},"7309":{"name":"Ancient Wizard","hitpoints":80,"combatLevel":112,"attackSpeed":4,"attackLevel":120,"strengthLevel":150,"defenceLevel":20,"rangeLevel":1,"magicLevel":80,"bonusAttack":80,"bonusStrength":80},"7310":{"name":"Brassican Mage","hitpoints":150,"combatLevel":140,"attackSpeed":3,"attackLevel":80,"strengthLevel":70,"defenceLevel":80,"rangeLevel":140,"magicLevel":170},"7312":{"name":"Double agent","hitpoints":160,"combatLevel":141,"attackSpeed":4,"attackLevel":130,"strengthLevel":105,"defenceLevel":100,"rangeLevel":1,"magicLevel":95,"stabDef":20,"slashDef":20,"crushDef":20,"bonusAttack":40,"bonusStrength":40},"7322":{"name":"Wild dog","hitpoints":62,"combatLevel":63,"slayerLevel":1,"attackSpeed":4,"attackLevel":53,"strengthLevel":54,"defenceLevel":54,"rangeLevel":1,"magicLevel":1},"7388":{"name":"Crushing hand","hitpoints":55,"combatLevel":45,"slayerLevel":5,"attackSpeed":4,"attackLevel":45,"strengthLevel":42,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"poisonImmune":true,"undead":true},"7389":{"name":"Chasm Crawler","hitpoints":64,"combatLevel":68,"slayerLevel":10,"attackSpeed":4,"attackLevel":22,"strengthLevel":18,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"crushDef":5,"rangeDef":10,"magicDef":5},"7390":{"name":"Screaming banshee","hitpoints":61,"combatLevel":70,"slayerLevel":15,"attackSpeed":4,"attackLevel":65,"strengthLevel":61,"defenceLevel":56,"rangeLevel":1,"magicLevel":1,"stabDef":13,"slashDef":13,"crushDef":13,"rangeDef":13,"poisonImmune":true,"venomImmune":true,"undead":true},"7391":{"name":"Screaming twisted banshee","hitpoints":220,"combatLevel":144,"slayerLevel":15,"attackSpeed":4,"attackLevel":103,"strengthLevel":110,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"stabDef":25,"slashDef":25,"crushDef":25,"rangeDef":25,"poisonImmune":true,"venomImmune":true,"undead":true},"7392":{"name":"Giant rockslug","hitpoints":77,"combatLevel":86,"slayerLevel":20,"attackSpeed":6,"attackLevel":72,"strengthLevel":77,"defenceLevel":77,"rangeLevel":1,"magicLevel":1},"7393":{"name":"Cockathrice","hitpoints":95,"combatLevel":89,"slayerLevel":25,"attackSpeed":4,"attackLevel":63,"strengthLevel":78,"defenceLevel":78,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"magicDef":20,"poisonImmune":true,"venomImmune":true},"7394":{"name":"Flaming pyrelord","hitpoints":126,"combatLevel":97,"slayerLevel":30,"attackSpeed":4,"attackLevel":98,"strengthLevel":65,"defenceLevel":52,"rangeLevel":1,"magicLevel":1,"stabDef":18,"slashDef":18,"crushDef":18,"rangeDef":18,"poisonImmune":true,"venomImmune":true},"7395":{"name":"Monstrous basilisk","hitpoints":170,"combatLevel":135,"slayerLevel":40,"attackSpeed":4,"attackLevel":88,"strengthLevel":98,"defenceLevel":130,"rangeLevel":1,"magicLevel":1,"stabDef":35,"slashDef":35,"magicDef":35,"poisonImmune":true,"venomImmune":true},"7396":{"name":"Malevolent Mage","hitpoints":175,"combatLevel":162,"slayerLevel":45,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":135,"rangeLevel":1,"magicLevel":175,"poisonImmune":true,"venomImmune":true},"7397":{"name":"Insatiable Bloodveld","hitpoints":380,"combatLevel":202,"slayerLevel":50,"attackSpeed":4,"attackLevel":190,"strengthLevel":145,"defenceLevel":85,"rangeLevel":1,"magicLevel":1,"venomImmune":true},"7398":{"name":"Insatiable mutated Bloodveld","hitpoints":410,"combatLevel":278,"slayerLevel":50,"attackSpeed":4,"attackLevel":250,"strengthLevel":190,"defenceLevel":130,"rangeLevel":1,"magicLevel":1,"venomImmune":true},"7399":{"name":"Vitreous Jelly","hitpoints":190,"combatLevel":206,"slayerLevel":52,"attackSpeed":4,"attackLevel":170,"strengthLevel":150,"defenceLevel":220,"rangeLevel":1,"magicLevel":150},"7400":{"name":"Vitreous warped Jelly","hitpoints":220,"combatLevel":241,"slayerLevel":52,"attackSpeed":4,"attackLevel":200,"strengthLevel":180,"defenceLevel":250,"rangeLevel":1,"magicLevel":180},"7401":{"name":"Cave abomination","hitpoints":130,"combatLevel":206,"slayerLevel":58,"attackLevel":230,"strengthLevel":195,"defenceLevel":142,"rangeLevel":1,"magicLevel":230},"7402":{"name":"Abhorrent spectre","hitpoints":250,"combatLevel":253,"slayerLevel":60,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":180,"rangeLevel":1,"magicLevel":300,"stabDef":40,"slashDef":40,"crushDef":40,"rangeDef":30,"venomImmune":true,"undead":true},"7403":{"name":"Repugnant spectre","hitpoints":390,"combatLevel":335,"slayerLevel":60,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":220,"rangeLevel":1,"magicLevel":380,"stabDef":120,"slashDef":120,"crushDef":120,"rangeDef":115,"venomImmune":true,"undead":true},"7404":{"name":"Choke devil","hitpoints":300,"combatLevel":264,"slayerLevel":65,"attackSpeed":4,"attackLevel":260,"strengthLevel":230,"defenceLevel":120,"rangeLevel":1,"magicLevel":1},"7405":{"name":"King kurask","hitpoints":420,"combatLevel":295,"slayerLevel":70,"attackSpeed":4,"attackLevel":190,"strengthLevel":320,"defenceLevel":250,"rangeLevel":1,"magicLevel":1,"slashDef":50,"crushDef":50,"poisonImmune":true,"venomImmune":true},"7406":{"name":"Nuclear smoke devil","hitpoints":240,"combatLevel":280,"slayerLevel":93,"attackSpeed":4,"attackLevel":240,"strengthLevel":230,"defenceLevel":390,"rangeLevel":280,"magicLevel":1,"rangeDef":80,"magicDef":850,"poisonImmune":true,"venomImmune":true},"7407":{"name":"Marble gargoyle","hitpoints":270,"combatLevel":349,"slayerLevel":75,"attackSpeed":4,"attackLevel":230,"strengthLevel":250,"defenceLevel":190,"rangeLevel":220,"magicLevel":1,"stabDef":50,"slashDef":50,"rangeDef":50,"magicDef":50,"bonusRangeStrength":20,"venomImmune":true},"7408":{"name":"Marble gargoyle","hitpoints":270,"combatLevel":349,"slayerLevel":75,"attackSpeed":4,"attackLevel":230,"strengthLevel":250,"defenceLevel":190,"rangeLevel":220,"magicLevel":1,"stabDef":50,"slashDef":50,"rangeDef":50,"magicDef":50,"bonusRangeStrength":20,"venomImmune":true},"7409":{"name":"Night beast","hitpoints":550,"combatLevel":374,"slayerLevel":90,"attackSpeed":4,"attackLevel":270,"strengthLevel":290,"defenceLevel":220,"rangeLevel":1,"magicLevel":300,"stabDef":75,"slashDef":80,"crushDef":200,"rangeDef":200,"magicDef":190,"venomImmune":true},"7410":{"name":"Greater abyssal demon","hitpoints":400,"combatLevel":342,"slayerLevel":85,"attackSpeed":4,"attackLevel":300,"strengthLevel":260,"defenceLevel":240,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":50,"rangeDef":50,"venomImmune":true,"demon":true},"7411":{"name":"Nechryarch","hitpoints":320,"combatLevel":300,"slayerLevel":80,"attackSpeed":4,"attackLevel":310,"strengthLevel":260,"defenceLevel":140,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":30,"crushDef":30,"rangeDef":30,"demon":true},"7416":{"name":"Obor","hitpoints":120,"combatLevel":106,"slayerLevel":1,"attackSpeed":6,"attackLevel":90,"strengthLevel":100,"defenceLevel":60,"rangeLevel":120,"magicLevel":1,"range":100,"stabDef":35,"slashDef":40,"crushDef":45,"rangeDef":20,"magicDef":20,"bonusAttack":100,"bonusStrength":68,"bonusRangeStrength":65},"7418":{"name":"Zamorak warrior","hitpoints":50,"combatLevel":84,"attackSpeed":4,"attackLevel":85,"strengthLevel":70,"defenceLevel":90,"rangeLevel":1,"magicLevel":1},"7419":{"name":"Zamorak warrior","hitpoints":50,"combatLevel":85,"attackSpeed":4,"attackLevel":90,"strengthLevel":70,"defenceLevel":90,"rangeLevel":1,"magicLevel":1},"7420":{"name":"Zamorak ranger","hitpoints":50,"combatLevel":81,"attackSpeed":4,"attackLevel":75,"strengthLevel":75,"defenceLevel":80,"rangeLevel":80,"magicLevel":1},"7421":{"name":"Zamorak ranger","hitpoints":50,"combatLevel":82,"attackSpeed":4,"attackLevel":75,"strengthLevel":80,"defenceLevel":80,"rangeLevel":80,"magicLevel":1},"7422":{"name":"Zamorak mage","hitpoints":50,"combatLevel":84,"attackSpeed":4,"attackLevel":78,"strengthLevel":81,"defenceLevel":82,"rangeLevel":1,"magicLevel":85},"7423":{"name":"Zamorak mage","hitpoints":50,"combatLevel":82,"attackSpeed":4,"attackLevel":75,"strengthLevel":80,"defenceLevel":80,"rangeLevel":1,"magicLevel":85},"7424":{"name":"Cave lizard","hitpoints":20,"combatLevel":37,"attackSpeed":4,"attackLevel":38,"strengthLevel":36,"defenceLevel":35,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":15,"crushDef":15,"rangeDef":5},"7426":{"name":"Zamorak crafter","hitpoints":25,"combatLevel":19,"attackSpeed":4,"attackLevel":15,"strengthLevel":15,"defenceLevel":12,"rangeLevel":1,"magicLevel":20},"7427":{"name":"Zamorak crafter","hitpoints":25,"combatLevel":19,"attackSpeed":4,"attackLevel":15,"strengthLevel":15,"defenceLevel":12,"rangeLevel":1,"magicLevel":20},"7485":{"name":"Zombie","hitpoints":65,"combatLevel":70,"slayerLevel":1,"attackSpeed":4,"attackLevel":61,"strengthLevel":60,"defenceLevel":61,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"7486":{"name":"Zombie","hitpoints":50,"combatLevel":56,"slayerLevel":1,"attackSpeed":4,"attackLevel":50,"strengthLevel":50,"defenceLevel":47,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"7487":{"name":"Zombie","hitpoints":71,"combatLevel":76,"slayerLevel":1,"attackSpeed":4,"attackLevel":69,"strengthLevel":65,"defenceLevel":62,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"7488":{"name":"Zombie","hitpoints":68,"combatLevel":72,"slayerLevel":1,"attackSpeed":4,"attackLevel":61,"strengthLevel":63,"defenceLevel":62,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"7513":{"name":"Derwen","hitpoints":320,"combatLevel":235,"attackSpeed":6,"attackLevel":250,"strengthLevel":150,"defenceLevel":100,"rangeLevel":1,"magicLevel":80,"magic":180,"stabDef":200,"slashDef":200,"crushDef":200,"rangeDef":200,"bonusMagicDamage":80,"poisonImmune":true,"venomImmune":true},"7515":{"name":"Porazdir","hitpoints":320,"combatLevel":235,"slayerLevel":1,"attackSpeed":6,"attackLevel":250,"strengthLevel":150,"defenceLevel":100,"rangeLevel":1,"magicLevel":180,"magic":80,"stabDef":200,"slashDef":200,"crushDef":200,"rangeDef":200,"bonusMagicDamage":80,"poisonImmune":true,"venomImmune":true},"7527":{"name":"Vanguard","hitpoints":225,"attackSpeed":4,"attackLevel":225,"strengthLevel":225,"defenceLevel":315,"rangeLevel":225,"magicLevel":225,"stabDef":65,"slashDef":80,"crushDef":100,"rangeDef":400,"magicDef":80,"bonusAttack":20,"bonusStrength":10},"7528":{"name":"Vanguard","hitpoints":225,"attackSpeed":4,"attackLevel":225,"strengthLevel":225,"defenceLevel":315,"rangeLevel":225,"magicLevel":225,"range":40,"stabDef":55,"slashDef":60,"crushDef":100,"rangeDef":300,"magicDef":400,"bonusRangeStrength":25},"7529":{"name":"Vanguard","hitpoints":225,"attackSpeed":4,"attackLevel":225,"strengthLevel":225,"defenceLevel":315,"rangeLevel":225,"magicLevel":225,"magic":40,"stabDef":315,"slashDef":340,"crushDef":400,"rangeDef":50,"magicDef":110,"bonusMagicDamage":25},"7530":{"name":"Vespula","hitpoints":200,"attackSpeed":3,"rangeDef":60,"magicDef":70},"7531":{"name":"Vespula","hitpoints":200,"attackSpeed":3,"rangeDef":60,"magicDef":70},"7532":{"name":"Vespula","hitpoints":200,"attackSpeed":3,"rangeDef":60,"magicDef":70},"7533":{"name":"Abyssal portal","hitpoints":250,"attackSpeed":2,"attackLevel":1,"strengthLevel":1,"rangeLevel":1,"rangeDef":140,"magicDef":60},"7538":{"name":"Vespine soldier","hitpoints":100,"attackSpeed":4,"rangeLevel":1,"magicDef":30},"7539":{"name":"Vespine soldier","hitpoints":100,"attackSpeed":4,"rangeLevel":1,"magicDef":30},"7540":{"name":"Tekton","hitpoints":300,"attackSpeed":3,"attackLevel":390,"strengthLevel":390,"defenceLevel":205,"rangeLevel":1,"magicLevel":205,"stabDef":155,"slashDef":165,"crushDef":105,"bonusAttack":64,"bonusStrength":20},"7541":{"name":"Tekton","hitpoints":300,"attackSpeed":3,"attackLevel":390,"strengthLevel":390,"defenceLevel":205,"rangeLevel":1,"magicLevel":205,"stabDef":155,"slashDef":165,"crushDef":105,"bonusAttack":64,"bonusStrength":20},"7542":{"name":"Tekton","hitpoints":300,"attackSpeed":3,"attackLevel":390,"strengthLevel":390,"defenceLevel":205,"rangeLevel":1,"magicLevel":205,"stabDef":155,"slashDef":165,"crushDef":105,"bonusAttack":64,"bonusStrength":20},"7543":{"name":"Tekton (enraged)","hitpoints":300,"attackSpeed":3,"attackLevel":390,"strengthLevel":390,"defenceLevel":205,"rangeLevel":1,"magicLevel":205,"stabDef":280,"slashDef":290,"crushDef":180,"bonusAttack":64,"bonusStrength":30},"7544":{"name":"Tekton (enraged)","hitpoints":300,"attackSpeed":3,"attackLevel":390,"strengthLevel":390,"defenceLevel":205,"rangeLevel":1,"magicLevel":205,"stabDef":280,"slashDef":290,"crushDef":180,"bonusAttack":64,"bonusStrength":30},"7545":{"name":"Tekton","hitpoints":300,"attackSpeed":3,"attackLevel":390,"strengthLevel":390,"defenceLevel":205,"rangeLevel":1,"magicLevel":205,"stabDef":155,"slashDef":165,"crushDef":105,"bonusAttack":64,"bonusStrength":20},"7548":{"name":"Scavenger beast","hitpoints":30,"attackSpeed":4,"attackLevel":120,"strengthLevel":120,"defenceLevel":45,"rangeLevel":1,"magicLevel":1},"7549":{"name":"Scavenger beast","hitpoints":45,"attackSpeed":4,"attackLevel":180,"strengthLevel":180,"defenceLevel":67,"rangeLevel":1,"magicLevel":1},"7550":{"name":"Great Olm (Right claw)","hitpoints":600,"combatLevel":549,"attackSpeed":4,"attackLevel":250,"strengthLevel":250,"defenceLevel":175,"rangeLevel":250,"magicLevel":87,"range":60,"magic":60,"stabDef":200,"slashDef":200,"crushDef":200,"rangeDef":200,"magicDef":50},"7551":{"name":"Great Olm","hitpoints":800,"combatLevel":1043,"attackSpeed":4,"attackLevel":250,"strengthLevel":250,"defenceLevel":150,"rangeLevel":250,"magicLevel":250,"range":60,"magic":60,"stabDef":200,"slashDef":200,"crushDef":200,"rangeDef":50,"magicDef":200},"7552":{"name":"Great Olm (Left claw)","hitpoints":600,"combatLevel":750,"attackSpeed":4,"attackLevel":250,"strengthLevel":250,"defenceLevel":175,"rangeLevel":250,"magicLevel":175,"range":60,"magic":60,"stabDef":50,"slashDef":50,"crushDef":50,"rangeDef":50,"magicDef":50},"7553":{"name":"Great Olm (Right claw)","hitpoints":600,"combatLevel":549,"attackSpeed":4,"attackLevel":250,"strengthLevel":250,"defenceLevel":175,"rangeLevel":250,"magicLevel":87,"range":60,"magic":60,"stabDef":200,"slashDef":200,"crushDef":200,"rangeDef":200,"magicDef":50},"7554":{"name":"Great Olm","hitpoints":800,"combatLevel":1043,"attackSpeed":4,"attackLevel":250,"strengthLevel":250,"defenceLevel":150,"rangeLevel":250,"magicLevel":250,"range":60,"magic":60,"stabDef":200,"slashDef":200,"crushDef":200,"rangeDef":50,"magicDef":200},"7555":{"name":"Great Olm (Left claw)","hitpoints":600,"combatLevel":750,"attackSpeed":4,"attackLevel":250,"strengthLevel":250,"defenceLevel":175,"rangeLevel":250,"magicLevel":175,"range":60,"magic":60,"stabDef":50,"slashDef":50,"crushDef":50,"rangeDef":50,"magicDef":50},"7559":{"name":"Deathly ranger","hitpoints":120,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"range":120,"bonusRangeStrength":70},"7560":{"name":"Deathly mage","hitpoints":120,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"rangeLevel":1,"magic":120},"7561":{"name":"Muttadile","hitpoints":250,"attackSpeed":4},"7562":{"name":"Muttadile","hitpoints":250,"attackSpeed":4},"7563":{"name":"Muttadile","hitpoints":250,"attackSpeed":4},"7566":{"name":"Vasa Nistirio","hitpoints":300,"attackSpeed":3,"attackLevel":1,"strengthLevel":1,"range":100,"stabDef":170,"slashDef":190,"crushDef":50,"rangeDef":60,"magicDef":400},"7567":{"name":"Vasa Nistirio","hitpoints":300,"attackSpeed":3,"attackLevel":1,"strengthLevel":1,"range":100,"stabDef":170,"slashDef":190,"crushDef":50,"rangeDef":60,"magicDef":400},"7568":{"name":"Glowing crystal","hitpoints":120,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"rangeLevel":1,"slashDef":180,"crushDef":180},"7573":{"name":"Lizardman shaman","hitpoints":190,"slayerLevel":1,"attackSpeed":4,"range":56,"stabDef":102,"slashDef":160,"crushDef":150,"magicDef":160,"bonusAttack":58,"bonusStrength":52,"bonusRangeStrength":49},"7574":{"name":"Lizardman shaman","hitpoints":190,"slayerLevel":1,"attackSpeed":4,"range":56,"stabDef":102,"slashDef":160,"crushDef":150,"magicDef":160,"bonusAttack":58,"bonusStrength":52,"bonusRangeStrength":49},"7584":{"name":"Ice demon","hitpoints":140,"attackSpeed":3,"attackLevel":1,"strengthLevel":1,"defenceLevel":160,"rangeLevel":390,"magicLevel":390,"stabDef":70,"slashDef":70,"crushDef":110,"rangeDef":140,"magicDef":60,"demon":true},"7585":{"name":"Ice demon","hitpoints":210,"attackSpeed":3,"attackLevel":1,"strengthLevel":1,"defenceLevel":240,"rangeLevel":585,"magicLevel":585,"stabDef":70,"slashDef":70,"crushDef":110,"rangeDef":140,"magicDef":60,"demon":true},"7604":{"name":"Skeletal Mystic","hitpoints":160,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magic":40,"stabDef":155,"slashDef":155,"crushDef":115,"rangeDef":115,"magicDef":140,"bonusAttack":85,"bonusStrength":50,"bonusMagicDamage":38},"7605":{"name":"Skeletal Mystic","hitpoints":160,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magic":40,"stabDef":155,"slashDef":155,"crushDef":115,"rangeDef":115,"magicDef":140,"bonusAttack":85,"bonusStrength":50,"bonusMagicDamage":38},"7606":{"name":"Skeletal Mystic","hitpoints":160,"slayerLevel":1,"attackSpeed":4,"rangeLevel":1,"magic":40,"stabDef":155,"slashDef":155,"crushDef":115,"rangeDef":115,"magicDef":140,"bonusAttack":85,"bonusStrength":50,"bonusMagicDamage":38},"7620":{"name":"Temple guardian","hitpoints":45,"combatLevel":30,"slayerLevel":1,"attackSpeed":6,"attackLevel":20,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1},"7621":{"name":"Khazard warlord","hitpoints":170,"combatLevel":112,"attackSpeed":4,"attackLevel":75,"strengthLevel":78,"defenceLevel":80,"rangeLevel":1,"magicLevel":1},"7622":{"name":"Khazard warlord","hitpoints":170,"combatLevel":112,"attackSpeed":4,"attackLevel":75,"strengthLevel":78,"defenceLevel":80,"rangeLevel":1,"magicLevel":1},"7649":{"name":"Chaotic death spawn","hitpoints":50,"combatLevel":215,"attackSpeed":3,"attackLevel":380,"strengthLevel":1,"defenceLevel":70,"rangeLevel":380,"magicLevel":380,"demon":true},"7656":{"name":"Lesser demon","hitpoints":81,"combatLevel":82,"slayerLevel":1,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":71,"rangeLevel":1,"magicLevel":1,"demon":true},"7657":{"name":"Lesser demon","hitpoints":81,"combatLevel":82,"slayerLevel":1,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":71,"rangeLevel":1,"magicLevel":1,"demon":true},"7658":{"name":"Mummy","hitpoints":68,"combatLevel":84,"attackSpeed":4,"undead":true},"7659":{"name":"Mummy","hitpoints":68,"combatLevel":84,"attackSpeed":4,"undead":true},"7660":{"name":"Mummy","hitpoints":68,"combatLevel":84,"attackSpeed":4,"undead":true},"7661":{"name":"Mummy","hitpoints":68,"combatLevel":84,"attackSpeed":4,"undead":true},"7662":{"name":"Mummy","hitpoints":68,"combatLevel":84,"attackSpeed":4,"undead":true},"7664":{"name":"Lesser demon","hitpoints":81,"combatLevel":82,"slayerLevel":1,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":71,"rangeLevel":1,"magicLevel":1,"demon":true},"7679":{"name":"TzHaar-Ket","hitpoints":200,"combatLevel":221,"slayerLevel":1,"attackSpeed":4,"attackLevel":200,"strengthLevel":180,"defenceLevel":190,"rangeLevel":1,"magicLevel":40},"7682":{"name":"TzHaar-Hur","hitpoints":80,"combatLevel":74,"slayerLevel":1,"attackSpeed":5,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":80},"7683":{"name":"TzHaar-Hur","hitpoints":80,"combatLevel":74,"slayerLevel":1,"attackSpeed":5,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":80},"7684":{"name":"TzHaar-Hur","hitpoints":80,"combatLevel":74,"slayerLevel":1,"attackSpeed":5,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":80},"7685":{"name":"TzHaar-Hur","hitpoints":80,"combatLevel":74,"slayerLevel":1,"attackSpeed":5,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":80},"7686":{"name":"TzHaar-Hur","hitpoints":80,"combatLevel":74,"slayerLevel":1,"attackSpeed":5,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":80},"7687":{"name":"TzHaar-Hur","hitpoints":80,"combatLevel":74,"slayerLevel":1,"attackSpeed":5,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":80},"7691":{"name":"Jal-Nib","hitpoints":10,"combatLevel":32,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":15,"rangeLevel":1,"magicLevel":15},"7692":{"name":"Jal-MejRah","hitpoints":25,"combatLevel":85,"slayerLevel":1,"attackSpeed":3,"defenceLevel":55,"rangeLevel":120,"magicLevel":120,"range":30,"stabDef":30,"slashDef":30,"crushDef":30,"rangeDef":45,"bonusRangeStrength":30},"7693":{"name":"Jal-Ak","hitpoints":40,"combatLevel":165,"slayerLevel":1,"attackSpeed":6,"attackLevel":160,"strengthLevel":160,"defenceLevel":95,"rangeLevel":160,"magicLevel":160,"stab":45,"slash":45,"crush":45,"range":45,"magic":45,"stabDef":25,"slashDef":25,"crushDef":25,"rangeDef":25,"magicDef":25,"bonusStrength":45,"bonusRangeStrength":45},"7694":{"name":"Jal-AkRek-Mej","hitpoints":15,"combatLevel":70,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":95,"rangeLevel":1,"magicLevel":120,"magic":25,"magicDef":25},"7695":{"name":"Jal-AkRek-Xil","hitpoints":15,"combatLevel":70,"slayerLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":95,"rangeLevel":120,"magicLevel":1,"range":25,"rangeDef":25,"bonusRangeStrength":25},"7696":{"name":"Jal-AkRek-Ket","hitpoints":15,"combatLevel":70,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":120,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stab":25,"slash":25,"crush":25,"stabDef":25,"slashDef":25,"crushDef":25,"bonusStrength":25},"7697":{"name":"Jal-ImKot","hitpoints":75,"combatLevel":240,"slayerLevel":1,"attackSpeed":4,"attackLevel":210,"strengthLevel":290,"defenceLevel":120,"rangeLevel":220,"magicLevel":120,"stab":40,"slash":40,"crush":40,"stabDef":65,"slashDef":65,"crushDef":65,"rangeDef":50,"magicDef":30,"bonusStrength":40},"7698":{"name":"Jal-Xil","hitpoints":130,"combatLevel":370,"slayerLevel":1,"attackSpeed":4,"attackLevel":140,"strengthLevel":180,"defenceLevel":60,"rangeLevel":250,"magicLevel":90,"range":40,"bonusRangeStrength":50},"7699":{"name":"Jal-Zek","hitpoints":220,"combatLevel":490,"slayerLevel":1,"attackSpeed":4,"attackLevel":370,"strengthLevel":510,"defenceLevel":260,"rangeLevel":510,"magicLevel":300,"magic":80},"7700":{"name":"JalTok-Jad","hitpoints":350,"combatLevel":900,"slayerLevel":1,"attackSpeed":8,"attackLevel":750,"strengthLevel":1020,"defenceLevel":480,"rangeLevel":1020,"magicLevel":510,"stab":80,"slash":80,"crush":80,"range":80,"magic":100,"bonusMagicDamage":75},"7701":{"name":"Yt-HurKot","hitpoints":90,"combatLevel":141,"slayerLevel":1,"attackSpeed":4,"attackLevel":165,"strengthLevel":125,"defenceLevel":100,"rangeLevel":150,"magicLevel":150,"range":80,"magic":100,"rangeDef":130,"magicDef":130},"7702":{"name":"Jal-Xil","hitpoints":130,"combatLevel":370,"slayerLevel":1,"attackSpeed":4,"attackLevel":140,"strengthLevel":180,"defenceLevel":60,"rangeLevel":250,"magicLevel":90,"range":40,"bonusRangeStrength":50},"7703":{"name":"Jal-Zek","hitpoints":220,"combatLevel":490,"slayerLevel":1,"attackSpeed":4,"attackLevel":370,"strengthLevel":510,"defenceLevel":260,"rangeLevel":510,"magicLevel":300,"magic":80},"7704":{"name":"JalTok-Jad","hitpoints":350,"combatLevel":900,"slayerLevel":1,"attackSpeed":8,"attackLevel":750,"strengthLevel":1020,"defenceLevel":480,"rangeLevel":1020,"magicLevel":510,"stab":80,"slash":80,"crush":80,"range":80,"magic":100,"bonusMagicDamage":75},"7705":{"name":"Yt-HurKot","hitpoints":90,"combatLevel":141,"slayerLevel":1,"attackSpeed":4,"attackLevel":165,"strengthLevel":125,"defenceLevel":100,"rangeLevel":150,"magicLevel":150,"range":80,"magic":100,"rangeDef":130,"magicDef":130},"7706":{"name":"TzKal-Zuk","hitpoints":1200,"combatLevel":1400,"slayerLevel":1,"attackSpeed":4,"attackLevel":350,"strengthLevel":600,"defenceLevel":260,"rangeLevel":400,"magicLevel":150,"crush":300,"range":550,"magic":550,"rangeDef":100,"magicDef":350,"bonusStrength":200,"bonusRangeStrength":200},"7708":{"name":"Jal-MejJak","hitpoints":80,"combatLevel":250,"slayerLevel":1,"attackSpeed":3,"attackLevel":1,"strengthLevel":1,"defenceLevel":100,"rangeLevel":1,"magicLevel":1},"7744":{"name":"Lizardman shaman","hitpoints":150,"combatLevel":150,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":120,"defenceLevel":140,"rangeLevel":120,"magicLevel":130,"range":45,"slashDef":40,"crushDef":30,"magicDef":50,"bonusAttack":45,"bonusStrength":38,"bonusRangeStrength":38},"7745":{"name":"Lizardman shaman","hitpoints":150,"combatLevel":150,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":120,"defenceLevel":140,"rangeLevel":120,"magicLevel":130,"range":45,"slashDef":40,"crushDef":30,"magicDef":50,"bonusAttack":45,"bonusStrength":38,"bonusRangeStrength":38},"7792":{"name":"Long-tailed Wyvern","hitpoints":200,"combatLevel":152,"slayerLevel":66,"attackSpeed":6,"attackLevel":125,"strengthLevel":120,"defenceLevel":90,"rangeLevel":90,"magicLevel":90,"stabDef":70,"slashDef":70,"crushDef":70,"rangeDef":120,"magicDef":140,"dragon":true},"7793":{"name":"Taloned Wyvern","hitpoints":200,"combatLevel":147,"slayerLevel":66,"attackSpeed":6,"attackLevel":120,"strengthLevel":110,"defenceLevel":90,"rangeLevel":90,"magicLevel":90,"stabDef":70,"slashDef":70,"crushDef":70,"rangeDef":120,"magicDef":140,"dragon":true},"7794":{"name":"Spitting Wyvern","hitpoints":200,"combatLevel":139,"slayerLevel":66,"attackSpeed":6,"attackLevel":125,"strengthLevel":80,"defenceLevel":90,"rangeLevel":125,"magicLevel":125,"stabDef":70,"slashDef":70,"crushDef":70,"rangeDef":120,"magicDef":140,"dragon":true},"7795":{"name":"Ancient Wyvern","hitpoints":300,"combatLevel":210,"slayerLevel":82,"attackSpeed":5,"attackLevel":150,"strengthLevel":150,"defenceLevel":150,"rangeLevel":90,"magicLevel":90,"stabDef":70,"slashDef":70,"crushDef":70,"rangeDef":120,"magicDef":170,"dragon":true},"7796":{"name":"Lobstrosity","hitpoints":50,"combatLevel":68,"slayerLevel":1,"attackSpeed":4,"attackLevel":60,"strengthLevel":80,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":50,"crushDef":15,"rangeDef":70,"magicDef":99},"7797":{"name":"Ancient Zygomite","hitpoints":150,"combatLevel":109,"slayerLevel":57,"attackSpeed":4,"attackLevel":80,"strengthLevel":80,"defenceLevel":80,"rangeLevel":80,"magicLevel":80,"stab":50,"stabDef":20,"slashDef":20,"crushDef":20,"rangeDef":30,"magicDef":30,"bonusAttack":30},"7799":{"name":"Ammonite Crab","hitpoints":100,"combatLevel":25,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"7802":{"name":"Hoop Snake","hitpoints":25,"combatLevel":19,"attackSpeed":4,"attackLevel":15,"strengthLevel":10,"defenceLevel":20,"rangeLevel":1,"magicLevel":1},"7804":{"name":"Tar Monster","hitpoints":200,"combatLevel":132,"attackSpeed":4,"attackLevel":120,"strengthLevel":80,"defenceLevel":70,"rangeLevel":100,"magicLevel":1},"7806":{"name":"Deranged archaeologist","hitpoints":200,"combatLevel":276,"slayerLevel":1,"attackSpeed":3,"attackLevel":280,"strengthLevel":160,"defenceLevel":280,"rangeLevel":320,"magicLevel":1,"range":90,"stabDef":20,"slashDef":20,"crushDef":50,"rangeDef":300,"magicDef":300,"bonusAttack":280,"bonusStrength":30,"bonusRangeStrength":90},"7817":{"name":"Lava beast","hitpoints":65,"attackSpeed":4},"7851":{"name":"Dusk","hitpoints":450,"combatLevel":248,"slayerLevel":75,"attackSpeed":6,"attackLevel":200,"strengthLevel":140,"defenceLevel":100,"rangeLevel":140,"magicLevel":140},"7852":{"name":"Dawn","hitpoints":450,"combatLevel":228,"slayerLevel":75,"attackSpeed":6,"attackLevel":140,"strengthLevel":140,"defenceLevel":100,"rangeLevel":140,"magicLevel":100,"magicDef":80,"poisonImmune":true,"venomImmune":true},"7853":{"name":"Dawn","hitpoints":450,"combatLevel":228,"slayerLevel":75,"attackSpeed":6,"attackLevel":140,"strengthLevel":140,"defenceLevel":100,"rangeLevel":140,"magicLevel":100,"magicDef":80,"poisonImmune":true,"venomImmune":true},"7854":{"name":"Dusk","hitpoints":450,"combatLevel":248,"slayerLevel":75,"attackSpeed":6,"attackLevel":200,"strengthLevel":140,"defenceLevel":100,"rangeLevel":140,"magicLevel":140},"7855":{"name":"Dusk","hitpoints":450,"combatLevel":248,"slayerLevel":75,"attackSpeed":6,"attackLevel":200,"strengthLevel":140,"defenceLevel":100,"rangeLevel":140,"magicLevel":140},"7858":{"name":"Justiciar Zachariah","hitpoints":320,"combatLevel":348,"attackSpeed":6,"attackLevel":500,"strengthLevel":250,"defenceLevel":100,"rangeLevel":1,"magicLevel":180,"magic":80,"stabDef":200,"slashDef":200,"crushDef":200,"rangeDef":200,"bonusAttack":200,"bonusMagicDamage":80,"poisonImmune":true,"venomImmune":true},"7859":{"name":"Derwen","hitpoints":320,"combatLevel":235,"attackSpeed":6,"attackLevel":250,"strengthLevel":150,"defenceLevel":100,"rangeLevel":1,"magicLevel":80,"magic":180,"stabDef":200,"slashDef":200,"crushDef":200,"rangeDef":200,"bonusMagicDamage":80,"poisonImmune":true,"venomImmune":true},"7860":{"name":"Porazdir","hitpoints":320,"combatLevel":235,"slayerLevel":1,"attackSpeed":6,"attackLevel":250,"strengthLevel":150,"defenceLevel":100,"rangeLevel":1,"magicLevel":180,"magic":80,"stabDef":200,"slashDef":200,"crushDef":200,"rangeDef":200,"bonusMagicDamage":80,"poisonImmune":true,"venomImmune":true},"7861":{"name":"Black dragon","hitpoints":250,"combatLevel":247,"slayerLevel":1,"attackSpeed":4,"attackLevel":200,"strengthLevel":215,"defenceLevel":200,"rangeLevel":1,"magicLevel":150,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"7862":{"name":"Black dragon","hitpoints":250,"combatLevel":247,"slayerLevel":1,"attackSpeed":4,"attackLevel":200,"strengthLevel":215,"defenceLevel":200,"rangeLevel":1,"magicLevel":150,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"7863":{"name":"Black dragon","hitpoints":250,"combatLevel":247,"slayerLevel":1,"attackSpeed":4,"attackLevel":200,"strengthLevel":215,"defenceLevel":200,"rangeLevel":1,"magicLevel":150,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"7864":{"name":"Ankou","hitpoints":100,"combatLevel":98,"slayerLevel":1,"attackSpeed":4,"attackLevel":75,"strengthLevel":90,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"undead":true},"7865":{"name":"Lesser demon","hitpoints":110,"combatLevel":94,"slayerLevel":1,"attackSpeed":4,"attackLevel":68,"strengthLevel":85,"defenceLevel":71,"rangeLevel":1,"magicLevel":1,"demon":true},"7866":{"name":"Lesser demon","hitpoints":110,"combatLevel":94,"slayerLevel":1,"attackSpeed":4,"attackLevel":68,"strengthLevel":85,"defenceLevel":71,"rangeLevel":1,"magicLevel":1,"demon":true},"7867":{"name":"Lesser demon","hitpoints":110,"combatLevel":94,"slayerLevel":1,"attackSpeed":4,"attackLevel":68,"strengthLevel":85,"defenceLevel":71,"rangeLevel":1,"magicLevel":1,"demon":true},"7868":{"name":"Green dragon","hitpoints":100,"combatLevel":88,"slayerLevel":1,"attackSpeed":4,"attackLevel":68,"strengthLevel":75,"defenceLevel":68,"rangeLevel":1,"magicLevel":75,"stabDef":20,"slashDef":40,"crushDef":40,"rangeDef":20,"magicDef":30,"dragon":true},"7869":{"name":"Green dragon","hitpoints":100,"combatLevel":88,"slayerLevel":1,"attackSpeed":4,"attackLevel":68,"strengthLevel":75,"defenceLevel":68,"rangeLevel":1,"magicLevel":75,"stabDef":20,"slashDef":40,"crushDef":40,"rangeDef":20,"magicDef":30,"dragon":true},"7870":{"name":"Green dragon","hitpoints":100,"combatLevel":88,"slayerLevel":1,"attackSpeed":4,"attackLevel":68,"strengthLevel":75,"defenceLevel":68,"rangeLevel":1,"magicLevel":75,"stabDef":20,"slashDef":40,"crushDef":40,"rangeDef":20,"magicDef":30,"dragon":true},"7871":{"name":"Greater demon","hitpoints":120,"combatLevel":104,"slayerLevel":1,"attackSpeed":4,"attackLevel":76,"strengthLevel":90,"defenceLevel":81,"rangeLevel":1,"magicLevel":1,"demon":true},"7872":{"name":"Greater demon","hitpoints":120,"combatLevel":104,"slayerLevel":1,"attackSpeed":4,"attackLevel":76,"strengthLevel":90,"defenceLevel":81,"rangeLevel":1,"magicLevel":1,"demon":true},"7873":{"name":"Greater demon","hitpoints":120,"combatLevel":104,"slayerLevel":1,"attackSpeed":4,"attackLevel":76,"strengthLevel":90,"defenceLevel":81,"rangeLevel":1,"magicLevel":1,"demon":true},"7874":{"name":"Black demon","hitpoints":200,"combatLevel":188,"slayerLevel":1,"attackSpeed":4,"attackLevel":145,"strengthLevel":165,"defenceLevel":152,"rangeLevel":1,"magicLevel":1,"demon":true},"7875":{"name":"Black demon","hitpoints":200,"combatLevel":188,"slayerLevel":1,"attackSpeed":4,"attackLevel":145,"strengthLevel":165,"defenceLevel":152,"rangeLevel":1,"magicLevel":1,"demon":true},"7876":{"name":"Black demon","hitpoints":200,"combatLevel":188,"slayerLevel":1,"attackSpeed":4,"attackLevel":145,"strengthLevel":165,"defenceLevel":152,"rangeLevel":1,"magicLevel":1,"demon":true},"7877":{"name":"Hellhound","hitpoints":150,"combatLevel":136,"slayerLevel":1,"attackSpeed":4,"attackLevel":105,"strengthLevel":120,"defenceLevel":102,"rangeLevel":1,"magicLevel":1},"7878":{"name":"Ice giant","hitpoints":100,"combatLevel":67,"slayerLevel":1,"attackSpeed":5,"attackLevel":40,"strengthLevel":60,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"bonusAttack":29,"bonusStrength":31},"7879":{"name":"Ice giant","hitpoints":100,"combatLevel":67,"slayerLevel":1,"attackSpeed":5,"attackLevel":40,"strengthLevel":60,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"bonusAttack":29,"bonusStrength":31},"7880":{"name":"Ice giant","hitpoints":100,"combatLevel":67,"slayerLevel":1,"attackSpeed":5,"attackLevel":40,"strengthLevel":60,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"bonusAttack":29,"bonusStrength":31},"7881":{"name":"Revenant imp","hitpoints":10,"combatLevel":7,"slayerLevel":1,"attackSpeed":5,"attackLevel":5,"strengthLevel":5,"defenceLevel":4,"rangeLevel":5,"magicLevel":9,"magic":5,"magicDef":5,"undead":true},"7882":{"name":"Dusk","hitpoints":450,"combatLevel":248,"slayerLevel":75,"attackSpeed":6,"attackLevel":200,"strengthLevel":140,"defenceLevel":100,"rangeLevel":140,"magicLevel":140},"7883":{"name":"Dusk","hitpoints":450,"combatLevel":248,"slayerLevel":75,"attackSpeed":6,"attackLevel":200,"strengthLevel":140,"defenceLevel":100,"rangeLevel":140,"magicLevel":140},"7884":{"name":"Dawn","hitpoints":450,"combatLevel":228,"slayerLevel":75,"attackSpeed":6,"attackLevel":140,"strengthLevel":140,"defenceLevel":100,"rangeLevel":140,"magicLevel":100,"magicDef":80,"poisonImmune":true,"venomImmune":true},"7885":{"name":"Dawn","hitpoints":450,"combatLevel":228,"slayerLevel":75,"attackSpeed":6,"attackLevel":140,"strengthLevel":140,"defenceLevel":100,"rangeLevel":140,"magicLevel":100,"magicDef":80,"poisonImmune":true,"venomImmune":true},"7886":{"name":"Dusk","hitpoints":450,"combatLevel":248,"slayerLevel":75,"attackSpeed":6,"attackLevel":200,"strengthLevel":140,"defenceLevel":100,"rangeLevel":140,"magicLevel":140},"7887":{"name":"Dusk","hitpoints":450,"combatLevel":328,"slayerLevel":75,"attackSpeed":6,"attackLevel":300,"strengthLevel":250,"defenceLevel":150,"rangeLevel":250,"magicLevel":250},"7888":{"name":"Dusk","hitpoints":450,"combatLevel":328,"slayerLevel":75,"attackSpeed":6,"attackLevel":300,"strengthLevel":250,"defenceLevel":150,"rangeLevel":250,"magicLevel":250},"7889":{"name":"Dusk","hitpoints":450,"combatLevel":328,"slayerLevel":75,"attackSpeed":6,"attackLevel":300,"strengthLevel":250,"defenceLevel":150,"rangeLevel":250,"magicLevel":250},"7894":{"name":"Sand Snake (hard)","hitpoints":180,"combatLevel":154,"attackSpeed":4,"attackLevel":180,"strengthLevel":140,"defenceLevel":20,"rangeLevel":1,"magicLevel":1},"7895":{"name":"Sand Snake","hitpoints":60,"combatLevel":36,"attackSpeed":4,"attackLevel":30,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1},"7903":{"name":"Sand Snake","hitpoints":60,"combatLevel":36,"attackSpeed":4,"attackLevel":30,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1},"7916":{"name":"Thief","hitpoints":22,"combatLevel":21,"attackSpeed":4,"attackLevel":14,"strengthLevel":13,"defenceLevel":12,"rangeLevel":1,"magicLevel":1},"7921":{"name":"Woman","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"7922":{"name":"Woman","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"7931":{"name":"Revenant goblin","hitpoints":14,"combatLevel":15,"slayerLevel":1,"attackSpeed":5,"attackLevel":13,"strengthLevel":14,"defenceLevel":14,"rangeLevel":15,"magicLevel":12,"range":21,"magic":37,"stabDef":25,"slashDef":28,"crushDef":31,"rangeDef":31,"magicDef":1,"bonusAttack":6,"bonusStrength":8,"bonusRangeStrength":12,"bonusMagicDamage":12,"undead":true},"7932":{"name":"Revenant pyrefiend","hitpoints":48,"combatLevel":52,"slayerLevel":1,"attackSpeed":5,"attackLevel":60,"strengthLevel":40,"defenceLevel":33,"rangeLevel":40,"magicLevel":67,"stabDef":45,"slashDef":40,"crushDef":50,"rangeDef":10,"magicDef":15,"undead":true},"7933":{"name":"Revenant hobgoblin","hitpoints":72,"combatLevel":60,"slayerLevel":1,"attackSpeed":4,"attackLevel":50,"strengthLevel":50,"defenceLevel":41,"rangeLevel":60,"magicLevel":55,"range":25,"magic":5,"stabDef":65,"slashDef":60,"crushDef":68,"rangeDef":50,"magicDef":30,"bonusAttack":20,"bonusStrength":24,"undead":true},"7934":{"name":"Revenant cyclops","hitpoints":110,"combatLevel":82,"slayerLevel":1,"attackSpeed":6,"attackLevel":60,"strengthLevel":73,"defenceLevel":49,"rangeLevel":70,"magicLevel":65,"stabDef":140,"slashDef":130,"crushDef":135,"rangeDef":135,"magicDef":10,"bonusAttack":53,"bonusStrength":64,"undead":true},"7935":{"name":"Revenant hellhound","hitpoints":80,"combatLevel":90,"slayerLevel":1,"attackSpeed":5,"attackLevel":76,"strengthLevel":80,"defenceLevel":80,"rangeLevel":80,"magicLevel":104,"magic":30,"stabDef":138,"slashDef":140,"crushDef":142,"rangeDef":140,"magicDef":62,"bonusAttack":38,"bonusStrength":40,"undead":true},"7936":{"name":"Revenant demon","hitpoints":80,"combatLevel":98,"slayerLevel":1,"attackSpeed":5,"attackLevel":83,"strengthLevel":76,"defenceLevel":80,"rangeLevel":80,"magicLevel":120,"range":40,"magic":50,"stabDef":124,"slashDef":118,"crushDef":130,"rangeDef":90,"magicDef":85,"bonusAttack":30,"bonusStrength":50,"bonusRangeStrength":30,"bonusMagicDamage":24,"undead":true},"7937":{"name":"Revenant ork","hitpoints":105,"combatLevel":105,"slayerLevel":1,"attackSpeed":5,"attackLevel":99,"strengthLevel":100,"defenceLevel":60,"rangeLevel":130,"magicLevel":110,"range":50,"stabDef":148,"slashDef":150,"crushDef":146,"rangeDef":148,"magicDef":50,"bonusAttack":60,"bonusStrength":55,"undead":true},"7938":{"name":"Revenant dark beast","hitpoints":140,"combatLevel":120,"slayerLevel":1,"attackSpeed":5,"attackLevel":93,"strengthLevel":110,"defenceLevel":80,"rangeLevel":135,"magicLevel":130,"range":45,"stabDef":153,"slashDef":152,"crushDef":155,"rangeDef":158,"magicDef":70,"bonusAttack":65,"bonusStrength":60,"undead":true},"7939":{"name":"Revenant knight","hitpoints":143,"combatLevel":126,"slayerLevel":1,"attackSpeed":5,"attackLevel":100,"strengthLevel":119,"defenceLevel":80,"rangeLevel":146,"magicLevel":146,"range":55,"magic":55,"stabDef":195,"slashDef":200,"crushDef":180,"rangeDef":190,"magicDef":95,"bonusAttack":69,"bonusStrength":71,"bonusRangeStrength":45,"bonusMagicDamage":50,"undead":true},"7940":{"name":"Revenant dragon","hitpoints":155,"combatLevel":135,"slayerLevel":1,"attackSpeed":5,"attackLevel":106,"strengthLevel":126,"defenceLevel":87,"rangeLevel":151,"magicLevel":150,"range":60,"magic":61,"stabDef":201,"slashDef":206,"crushDef":188,"rangeDef":197,"magicDef":101,"bonusAttack":72,"bonusStrength":78,"bonusRangeStrength":51,"bonusMagicDamage":35,"undead":true},"7948":{"name":"Corsair Traitor (hard)","hitpoints":160,"combatLevel":103,"attackSpeed":3,"attackLevel":1,"strengthLevel":1,"defenceLevel":80,"rangeLevel":1,"magicLevel":90},"7949":{"name":"Corsair Traitor","hitpoints":55,"combatLevel":35,"attackSpeed":5,"attackLevel":1,"strengthLevel":1,"defenceLevel":30,"rangeLevel":1,"magicLevel":30},"7955":{"name":"Baby dragon","hitpoints":80,"combatLevel":83,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":50,"crushDef":50,"rangeDef":30,"magicDef":40,"dragon":true},"7964":{"name":"Ithoi the Navigator","hitpoints":55,"combatLevel":35,"attackSpeed":5,"attackLevel":1,"strengthLevel":1,"defenceLevel":30,"rangeLevel":1,"magicLevel":30},"7989":{"name":"Ogress Warrior","hitpoints":82,"combatLevel":82,"slayerLevel":1,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":82,"rangeLevel":1,"magicLevel":60,"stabDef":10,"slashDef":12,"crushDef":12,"rangeDef":16,"magicDef":14},"7990":{"name":"Ogress Warrior","hitpoints":82,"combatLevel":82,"slayerLevel":1,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":82,"rangeLevel":1,"magicLevel":60,"stabDef":10,"slashDef":12,"crushDef":12,"rangeDef":16,"magicDef":14},"7991":{"name":"Ogress Shaman","hitpoints":82,"combatLevel":82,"slayerLevel":1,"attackSpeed":4,"attackLevel":68,"strengthLevel":20,"defenceLevel":82,"rangeLevel":1,"magicLevel":68,"stabDef":12,"slashDef":14,"crushDef":14,"rangeDef":8,"magicDef":16},"7992":{"name":"Ogress Shaman","hitpoints":82,"combatLevel":82,"slayerLevel":1,"attackSpeed":4,"attackLevel":68,"strengthLevel":20,"defenceLevel":82,"rangeLevel":1,"magicLevel":68,"stabDef":12,"slashDef":14,"crushDef":14,"rangeDef":8,"magicDef":16},"7996":{"name":"Corrupt Lizardman (hard)","hitpoints":150,"combatLevel":152,"slayerLevel":1,"attackSpeed":4,"attackLevel":162,"strengthLevel":162,"defenceLevel":38,"rangeLevel":162,"magicLevel":1,"range":22,"slashDef":25,"bonusAttack":22,"bonusStrength":20,"bonusRangeStrength":20},"7997":{"name":"Corrupt Lizardman","hitpoints":50,"combatLevel":46,"slayerLevel":1,"attackSpeed":4,"attackLevel":38,"strengthLevel":38,"defenceLevel":38,"rangeLevel":38,"magicLevel":1,"range":20,"slashDef":25,"bonusAttack":22,"bonusStrength":20,"bonusRangeStrength":20},"8000":{"name":"Corrupt Lizardman","hitpoints":50,"combatLevel":46,"slayerLevel":1,"attackSpeed":4,"attackLevel":38,"strengthLevel":38,"defenceLevel":38,"rangeLevel":38,"magicLevel":1,"range":20,"slashDef":25,"bonusAttack":22,"bonusStrength":20,"bonusRangeStrength":20},"8027":{"name":"Rune dragon","hitpoints":330,"combatLevel":380,"attackSpeed":4,"attackLevel":284,"strengthLevel":284,"defenceLevel":276,"rangeLevel":246,"magicLevel":196,"stabDef":30,"slashDef":115,"crushDef":90,"rangeDef":95,"magicDef":30,"bonusRangeStrength":14,"poisonImmune":true,"venomImmune":true},"8030":{"name":"Adamant dragon","hitpoints":295,"combatLevel":338,"slayerLevel":1,"attackSpeed":4,"attackLevel":280,"strengthLevel":280,"defenceLevel":272,"rangeLevel":186,"magicLevel":186,"stabDef":30,"slashDef":110,"crushDef":85,"rangeDef":95,"magicDef":30,"dragon":true},"8031":{"name":"Rune dragon","hitpoints":330,"combatLevel":380,"slayerLevel":1,"attackSpeed":4,"attackLevel":284,"strengthLevel":284,"defenceLevel":276,"rangeLevel":246,"magicLevel":196,"stabDef":30,"slashDef":115,"crushDef":90,"rangeDef":95,"magicDef":30,"bonusRangeStrength":14,"dragon":true},"8033":{"name":"Elvarg","hitpoints":80,"combatLevel":83,"slayerLevel":1,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":70,"stabDef":20,"slashDef":40,"crushDef":40,"rangeDef":20,"magicDef":30},"8056":{"name":"Spawn","hitpoints":80,"combatLevel":100,"attackSpeed":4,"attackLevel":100,"strengthLevel":100,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stab":1,"slash":1,"crush":1,"range":1,"magic":1,"stabDef":5,"slashDef":15,"crushDef":15,"rangeDef":5},"8057":{"name":"Robert the Strong","hitpoints":280,"combatLevel":194,"attackSpeed":4,"defenceLevel":140,"rangeLevel":328,"magicLevel":128,"range":126,"stabDef":140,"slashDef":180,"crushDef":60,"rangeDef":860,"magicDef":940,"poisonImmune":true,"venomImmune":true},"8058":{"name":"Vorkath","hitpoints":460,"combatLevel":392,"slayerLevel":1,"attackSpeed":5,"attackLevel":560,"strengthLevel":268,"defenceLevel":164,"rangeLevel":268,"magicLevel":148,"range":96,"magic":148,"stabDef":66,"slashDef":126,"crushDef":126,"rangeDef":80,"magicDef":204,"bonusAttack":14,"dragon":true,"undead":true},"8059":{"name":"Vorkath","hitpoints":750,"combatLevel":732,"slayerLevel":1,"attackSpeed":5,"attackLevel":560,"strengthLevel":308,"defenceLevel":214,"rangeLevel":308,"magicLevel":150,"range":78,"magic":150,"stabDef":26,"slashDef":108,"crushDef":108,"rangeDef":26,"magicDef":240,"bonusAttack":16,"dragon":true,"undead":true},"8060":{"name":"Vorkath","hitpoints":460,"combatLevel":392,"slayerLevel":1,"attackSpeed":5,"attackLevel":560,"strengthLevel":268,"defenceLevel":164,"rangeLevel":268,"magicLevel":148,"range":96,"magic":148,"stabDef":66,"slashDef":126,"crushDef":126,"rangeDef":80,"magicDef":204,"bonusAttack":14,"dragon":true,"undead":true},"8061":{"name":"Vorkath","hitpoints":750,"combatLevel":732,"slayerLevel":1,"attackSpeed":5,"attackLevel":560,"strengthLevel":308,"defenceLevel":214,"rangeLevel":308,"magicLevel":150,"range":78,"magic":150,"stabDef":26,"slashDef":108,"crushDef":108,"rangeDef":26,"magicDef":240,"bonusAttack":16,"dragon":true,"undead":true},"8062":{"name":"Zombified Spawn","hitpoints":8,"combatLevel":55,"attackLevel":80,"strengthLevel":80,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"stab":1,"slash":1,"crush":1,"range":1,"magic":1,"stabDef":3,"slashDef":3,"crushDef":3,"rangeDef":3,"undead":true},"8063":{"name":"Zombified Spawn","hitpoints":38,"combatLevel":64,"attackLevel":82,"strengthLevel":82,"defenceLevel":6,"rangeLevel":1,"magicLevel":1,"stab":1,"slash":1,"crush":1,"range":1,"magic":1,"stabDef":3,"slashDef":3,"crushDef":3,"rangeDef":3,"undead":true},"8064":{"name":"Stone Guardian","hitpoints":62,"combatLevel":124,"attackSpeed":5,"attackLevel":150,"strengthLevel":148,"defenceLevel":138,"rangeLevel":1,"magicLevel":118},"8065":{"name":"Stone Guardian","hitpoints":62,"combatLevel":124,"attackSpeed":5,"attackLevel":1,"strengthLevel":1,"defenceLevel":138,"rangeLevel":128,"magicLevel":118},"8066":{"name":"Stone Guardian","hitpoints":62,"combatLevel":124,"attackSpeed":5,"attackLevel":1,"strengthLevel":1,"defenceLevel":138,"rangeLevel":1,"magicLevel":128},"8067":{"name":"Zombie","hitpoints":54,"combatLevel":132,"slayerLevel":1,"attackSpeed":5,"attackLevel":160,"strengthLevel":180,"defenceLevel":62,"rangeLevel":1,"magicLevel":1,"stabDef":25,"slashDef":20,"crushDef":25,"rangeDef":30,"magicDef":10,"bonusAttack":30,"undead":true},"8068":{"name":"Zombie","hitpoints":54,"combatLevel":132,"slayerLevel":1,"attackSpeed":5,"attackLevel":160,"strengthLevel":1,"defenceLevel":62,"rangeLevel":180,"magicLevel":1,"range":20,"stabDef":15,"slashDef":10,"crushDef":15,"rangeDef":20,"magicDef":30,"undead":true},"8069":{"name":"Zombie","hitpoints":54,"combatLevel":132,"slayerLevel":1,"attackSpeed":5,"attackLevel":160,"strengthLevel":1,"defenceLevel":62,"rangeLevel":1,"magicLevel":180,"magic":20,"stabDef":35,"slashDef":30,"crushDef":35,"rangeDef":10,"magicDef":20,"undead":true},"8070":{"name":"Skeleton","hitpoints":54,"combatLevel":132,"slayerLevel":1,"attackSpeed":5,"attackLevel":160,"strengthLevel":180,"defenceLevel":62,"rangeLevel":1,"magicLevel":1,"stabDef":25,"slashDef":20,"crushDef":25,"rangeDef":30,"magicDef":10,"bonusAttack":30,"undead":true},"8071":{"name":"Skeleton","hitpoints":54,"combatLevel":132,"slayerLevel":1,"attackSpeed":5,"attackLevel":160,"strengthLevel":1,"defenceLevel":62,"rangeLevel":180,"magicLevel":1,"range":20,"stabDef":15,"slashDef":10,"crushDef":15,"rangeDef":20,"magicDef":30,"undead":true},"8072":{"name":"Skeleton","hitpoints":54,"combatLevel":132,"slayerLevel":1,"attackSpeed":5,"attackLevel":160,"strengthLevel":1,"defenceLevel":62,"rangeLevel":1,"magicLevel":180,"magic":20,"stabDef":35,"slashDef":30,"crushDef":35,"rangeDef":10,"magicDef":20,"undead":true},"8073":{"name":"Green dragon","hitpoints":75,"combatLevel":79,"slayerLevel":1,"attackSpeed":4,"attackLevel":68,"strengthLevel":68,"defenceLevel":68,"rangeLevel":1,"magicLevel":68,"stabDef":20,"slashDef":40,"crushDef":40,"rangeDef":20,"magicDef":30,"dragon":true},"8075":{"name":"Red dragon","hitpoints":140,"combatLevel":152,"slayerLevel":1,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":130,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"8076":{"name":"Green dragon","hitpoints":75,"combatLevel":79,"slayerLevel":1,"attackSpeed":4,"attackLevel":68,"strengthLevel":68,"defenceLevel":68,"rangeLevel":1,"magicLevel":68,"stabDef":20,"slashDef":40,"crushDef":40,"rangeDef":20,"magicDef":30,"dragon":true},"8078":{"name":"Red dragon","hitpoints":140,"combatLevel":152,"slayerLevel":1,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":130,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"8079":{"name":"Red dragon","hitpoints":140,"combatLevel":152,"slayerLevel":1,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":130,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"8080":{"name":"Iron dragon","hitpoints":165,"combatLevel":189,"slayerLevel":1,"attackSpeed":4,"attackLevel":165,"strengthLevel":165,"defenceLevel":165,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":90,"magicDef":30,"dragon":true},"8081":{"name":"Brutal green dragon","hitpoints":175,"combatLevel":227,"slayerLevel":1,"attackSpeed":4,"attackLevel":268,"strengthLevel":168,"defenceLevel":168,"magicLevel":168,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"poisonImmune":true,"venomImmune":true,"dragon":true},"8082":{"name":"Green dragon","hitpoints":75,"combatLevel":79,"slayerLevel":1,"attackSpeed":4,"attackLevel":68,"strengthLevel":68,"defenceLevel":68,"rangeLevel":1,"magicLevel":68,"stabDef":20,"slashDef":40,"crushDef":40,"rangeDef":20,"magicDef":30,"dragon":true},"8083":{"name":"Blue dragon","hitpoints":105,"combatLevel":111,"slayerLevel":1,"attackSpeed":4,"attackLevel":95,"strengthLevel":95,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"8084":{"name":"Black dragon","hitpoints":190,"combatLevel":227,"slayerLevel":1,"attackSpeed":4,"attackLevel":200,"strengthLevel":200,"defenceLevel":200,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"8085":{"name":"Black dragon","hitpoints":190,"combatLevel":227,"slayerLevel":1,"attackSpeed":4,"attackLevel":200,"strengthLevel":200,"defenceLevel":200,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"8086":{"name":"Steel dragon","hitpoints":210,"combatLevel":246,"slayerLevel":1,"attackSpeed":4,"attackLevel":215,"strengthLevel":215,"defenceLevel":215,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":90,"magicDef":30,"dragon":true},"8087":{"name":"Brutal red dragon","hitpoints":285,"combatLevel":289,"slayerLevel":1,"attackSpeed":4,"attackLevel":310,"strengthLevel":210,"defenceLevel":198,"magicLevel":250,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"poisonImmune":true,"venomImmune":true,"dragon":true},"8088":{"name":"Mithril dragon","hitpoints":254,"combatLevel":304,"slayerLevel":1,"attackSpeed":4,"attackLevel":268,"strengthLevel":268,"defenceLevel":268,"rangeLevel":168,"magicLevel":168,"stabDef":50,"slashDef":100,"crushDef":70,"rangeDef":90,"magicDef":30,"venomImmune":true,"dragon":true},"8089":{"name":"Mithril dragon","hitpoints":254,"combatLevel":304,"slayerLevel":1,"attackSpeed":4,"attackLevel":268,"strengthLevel":268,"defenceLevel":268,"rangeLevel":168,"magicLevel":168,"stabDef":50,"slashDef":100,"crushDef":70,"rangeDef":90,"magicDef":30,"venomImmune":true,"dragon":true},"8090":{"name":"Adamant dragon","hitpoints":295,"combatLevel":338,"slayerLevel":1,"attackSpeed":4,"attackLevel":280,"strengthLevel":280,"defenceLevel":272,"rangeLevel":186,"magicLevel":186,"stabDef":30,"slashDef":110,"crushDef":85,"rangeDef":95,"magicDef":30,"dragon":true},"8091":{"name":"Rune dragon","hitpoints":330,"combatLevel":380,"slayerLevel":1,"attackSpeed":4,"attackLevel":284,"strengthLevel":284,"defenceLevel":276,"rangeLevel":246,"magicLevel":196,"stabDef":30,"slashDef":115,"crushDef":90,"rangeDef":95,"magicDef":30,"bonusRangeStrength":14,"dragon":true},"8092":{"name":"Brutal black dragon","hitpoints":315,"combatLevel":318,"slayerLevel":77,"attackSpeed":4,"attackLevel":330,"strengthLevel":210,"defenceLevel":258,"magicLevel":250,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"bonusStrength":20,"poisonImmune":true,"venomImmune":true,"dragon":true},"8093":{"name":"Brutal black dragon","hitpoints":315,"combatLevel":318,"slayerLevel":77,"attackSpeed":4,"attackLevel":330,"strengthLevel":210,"defenceLevel":258,"magicLevel":250,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"bonusStrength":20,"poisonImmune":true,"venomImmune":true,"dragon":true},"8094":{"name":"Galvek","hitpoints":1200,"combatLevel":608,"attackSpeed":6,"attackLevel":632,"strengthLevel":268,"defenceLevel":188,"rangeLevel":246,"magicLevel":160,"range":180,"magic":160,"stabDef":80,"slashDef":140,"crushDef":140,"rangeDef":86,"magicDef":280,"bonusAttack":34,"bonusRangeStrength":6,"bonusMagicDamage":42,"poisonImmune":true,"venomImmune":true,"dragon":true},"8095":{"name":"Galvek","hitpoints":1200,"combatLevel":608,"attackSpeed":6,"attackLevel":632,"strengthLevel":268,"defenceLevel":188,"rangeLevel":246,"magicLevel":160,"range":180,"magic":160,"stabDef":80,"slashDef":140,"crushDef":140,"rangeDef":86,"magicDef":280,"bonusAttack":34,"bonusRangeStrength":6,"bonusMagicDamage":42,"poisonImmune":true,"venomImmune":true,"dragon":true},"8096":{"name":"Galvek","hitpoints":1200,"combatLevel":608,"attackSpeed":6,"attackLevel":632,"strengthLevel":268,"defenceLevel":188,"rangeLevel":246,"magicLevel":160,"range":180,"magic":160,"stabDef":80,"slashDef":140,"crushDef":140,"rangeDef":86,"magicDef":280,"bonusAttack":34,"bonusRangeStrength":6,"bonusMagicDamage":42,"poisonImmune":true,"venomImmune":true,"dragon":true},"8097":{"name":"Galvek","hitpoints":1200,"combatLevel":608,"attackSpeed":6,"attackLevel":632,"strengthLevel":268,"defenceLevel":188,"rangeLevel":246,"magicLevel":160,"range":180,"magic":160,"stabDef":80,"slashDef":140,"crushDef":140,"rangeDef":86,"magicDef":280,"bonusAttack":34,"bonusRangeStrength":6,"bonusMagicDamage":42,"poisonImmune":true,"venomImmune":true,"dragon":true},"8098":{"name":"Galvek","hitpoints":1200,"combatLevel":608,"attackSpeed":6,"attackLevel":632,"strengthLevel":268,"defenceLevel":188,"rangeLevel":246,"magicLevel":160,"range":180,"magic":160,"stabDef":80,"slashDef":140,"crushDef":140,"rangeDef":86,"magicDef":280,"bonusAttack":34,"bonusRangeStrength":6,"bonusMagicDamage":42,"poisonImmune":true,"venomImmune":true,"dragon":true},"8137":{"name":"Spider","hitpoints":4,"combatLevel":35,"slayerLevel":1,"attackSpeed":4,"attackLevel":45,"strengthLevel":47,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stab":1,"slash":1,"crush":1,"range":1,"magic":1,"stabDef":20,"slashDef":20,"crushDef":10,"rangeDef":20,"magicDef":17},"8138":{"name":"Spider","hitpoints":4,"combatLevel":35,"slayerLevel":1,"attackSpeed":4,"attackLevel":45,"strengthLevel":47,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stab":1,"slash":1,"crush":1,"range":1,"magic":1,"stabDef":20,"slashDef":20,"crushDef":10,"rangeDef":20,"magicDef":17},"8149":{"name":"White Knight","hitpoints":52,"combatLevel":36,"attackSpeed":7,"attackLevel":27,"strengthLevel":29,"defenceLevel":21,"rangeLevel":1,"magicLevel":1,"stabDef":83,"slashDef":76,"crushDef":70,"rangeDef":74,"bonusAttack":30,"bonusStrength":31},"8150":{"name":"Paladin","hitpoints":66,"combatLevel":62,"attackSpeed":5,"attackLevel":54,"strengthLevel":54,"defenceLevel":54,"rangeLevel":1,"magicLevel":1,"stabDef":87,"slashDef":84,"crushDef":76,"rangeDef":79,"bonusAttack":20,"bonusStrength":22},"8177":{"name":"Galvek","hitpoints":1200,"combatLevel":608,"attackSpeed":6,"attackLevel":632,"strengthLevel":268,"defenceLevel":188,"rangeLevel":246,"magicLevel":160,"range":180,"magic":160,"stabDef":80,"slashDef":140,"crushDef":140,"rangeDef":86,"magicDef":280,"bonusAttack":34,"bonusRangeStrength":6,"bonusMagicDamage":42,"poisonImmune":true,"venomImmune":true,"dragon":true},"8178":{"name":"Galvek","hitpoints":1200,"combatLevel":608,"attackSpeed":6,"attackLevel":632,"strengthLevel":268,"defenceLevel":188,"rangeLevel":246,"magicLevel":160,"range":180,"magic":160,"stabDef":80,"slashDef":140,"crushDef":140,"rangeDef":86,"magicDef":280,"bonusAttack":34,"bonusRangeStrength":6,"bonusMagicDamage":42,"poisonImmune":true,"venomImmune":true,"dragon":true},"8179":{"name":"Galvek","hitpoints":1200,"combatLevel":608,"attackSpeed":6,"attackLevel":632,"strengthLevel":268,"defenceLevel":188,"rangeLevel":246,"magicLevel":160,"range":180,"magic":160,"stabDef":80,"slashDef":140,"crushDef":140,"rangeDef":86,"magicDef":280,"bonusAttack":34,"bonusRangeStrength":6,"bonusMagicDamage":42,"poisonImmune":true,"venomImmune":true,"dragon":true},"8194":{"name":"Growthling","hitpoints":10,"combatLevel":37,"attackSpeed":4,"attackLevel":40,"strengthLevel":38,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"poisonImmune":true,"venomImmune":true},"8195":{"name":"Bryophyta","hitpoints":115,"combatLevel":128,"slayerLevel":1,"attackSpeed":6,"attackLevel":130,"strengthLevel":100,"defenceLevel":100,"rangeLevel":1,"magicLevel":90,"bonusAttack":33,"bonusStrength":31},"8239":{"name":"Vanstrom Klause","hitpoints":155,"combatLevel":169,"attackSpeed":8,"attackLevel":150,"strengthLevel":136,"defenceLevel":150,"rangeLevel":150,"magicLevel":150,"poisonImmune":true,"venomImmune":true},"8240":{"name":"Vanstrom Klause","hitpoints":155,"combatLevel":169,"attackSpeed":8,"attackLevel":150,"strengthLevel":136,"defenceLevel":150,"rangeLevel":150,"magicLevel":150,"poisonImmune":true,"venomImmune":true},"8242":{"name":"Ranis Drakan","hitpoints":400,"combatLevel":233,"slayerLevel":1,"attackSpeed":5,"attackLevel":120,"strengthLevel":120,"defenceLevel":120,"rangeLevel":1,"magicLevel":120,"stabDef":60,"slashDef":60,"crushDef":60,"rangeDef":60,"magicDef":60,"bonusStrength":34,"bonusMagicDamage":34,"poisonImmune":true,"venomImmune":true},"8243":{"name":"Ranis Drakan","hitpoints":400,"combatLevel":233,"slayerLevel":1,"attackSpeed":5,"attackLevel":120,"strengthLevel":120,"defenceLevel":120,"rangeLevel":1,"magicLevel":120,"stabDef":60,"slashDef":60,"crushDef":60,"rangeDef":60,"magicDef":60,"bonusStrength":34,"bonusMagicDamage":34,"poisonImmune":true,"venomImmune":true},"8244":{"name":"Ranis Drakan","hitpoints":400,"combatLevel":233,"slayerLevel":1,"attackSpeed":5,"attackLevel":120,"strengthLevel":120,"defenceLevel":120,"rangeLevel":1,"magicLevel":120,"stabDef":60,"slashDef":60,"crushDef":60,"rangeDef":60,"magicDef":60,"bonusStrength":34,"bonusMagicDamage":34,"poisonImmune":true,"venomImmune":true},"8245":{"name":"Ranis Drakan","hitpoints":400,"combatLevel":233,"slayerLevel":1,"attackSpeed":5,"attackLevel":120,"strengthLevel":120,"defenceLevel":120,"rangeLevel":1,"magicLevel":120,"stabDef":60,"slashDef":60,"crushDef":60,"rangeDef":60,"magicDef":60,"bonusStrength":34,"bonusMagicDamage":34,"poisonImmune":true,"venomImmune":true},"8246":{"name":"Ranis Drakan","hitpoints":400,"combatLevel":233,"slayerLevel":1,"attackSpeed":5,"attackLevel":120,"strengthLevel":120,"defenceLevel":120,"rangeLevel":1,"magicLevel":120,"stabDef":60,"slashDef":60,"crushDef":60,"rangeDef":60,"magicDef":60,"bonusStrength":34,"bonusMagicDamage":34,"poisonImmune":true,"venomImmune":true},"8247":{"name":"Ranis Drakan","hitpoints":400,"combatLevel":233,"slayerLevel":1,"attackSpeed":5,"attackLevel":120,"strengthLevel":120,"defenceLevel":120,"rangeLevel":1,"magicLevel":120,"stabDef":60,"slashDef":60,"crushDef":60,"rangeDef":60,"magicDef":60,"bonusStrength":34,"bonusMagicDamage":34,"poisonImmune":true,"venomImmune":true},"8248":{"name":"Ranis Drakan","hitpoints":400,"combatLevel":233,"slayerLevel":1,"attackSpeed":2,"attackLevel":120,"strengthLevel":120,"defenceLevel":120,"rangeLevel":1,"magicLevel":120,"stabDef":60,"slashDef":60,"crushDef":60,"rangeDef":60,"magicDef":60,"bonusAttack":160,"bonusMagicDamage":34,"poisonImmune":true,"venomImmune":true},"8251":{"name":"Vyrewatch","hitpoints":75,"combatLevel":87,"slayerLevel":1,"attackSpeed":4,"attackLevel":80,"strengthLevel":75,"defenceLevel":75,"rangeLevel":1,"magicLevel":75},"8252":{"name":"Vyrewatch","hitpoints":75,"combatLevel":87,"slayerLevel":1,"attackSpeed":4,"attackLevel":80,"strengthLevel":75,"defenceLevel":75,"rangeLevel":1,"magicLevel":75},"8253":{"name":"Vyrewatch","hitpoints":75,"combatLevel":87,"slayerLevel":1,"attackSpeed":4,"attackLevel":80,"strengthLevel":75,"defenceLevel":75,"rangeLevel":1,"magicLevel":75},"8254":{"name":"Vyrewatch","hitpoints":75,"combatLevel":87,"slayerLevel":1,"attackSpeed":4,"attackLevel":80,"strengthLevel":75,"defenceLevel":75,"rangeLevel":1,"magicLevel":75},"8255":{"name":"Vyrewatch","hitpoints":75,"combatLevel":87,"slayerLevel":1,"attackSpeed":4,"attackLevel":80,"strengthLevel":75,"defenceLevel":75,"rangeLevel":1,"magicLevel":75},"8256":{"name":"Vyrewatch","hitpoints":75,"combatLevel":87,"slayerLevel":1,"attackSpeed":4,"attackLevel":80,"strengthLevel":75,"defenceLevel":75,"rangeLevel":1,"magicLevel":75},"8257":{"name":"Vyrewatch","hitpoints":75,"combatLevel":87,"slayerLevel":1,"attackSpeed":4,"attackLevel":80,"strengthLevel":75,"defenceLevel":75,"rangeLevel":1,"magicLevel":75},"8258":{"name":"Vyrewatch","hitpoints":75,"combatLevel":87,"slayerLevel":1,"attackSpeed":4,"attackLevel":80,"strengthLevel":75,"defenceLevel":75,"rangeLevel":1,"magicLevel":75},"8259":{"name":"Vyrewatch","hitpoints":75,"combatLevel":87,"slayerLevel":1,"attackSpeed":4,"attackLevel":80,"strengthLevel":75,"defenceLevel":75,"rangeLevel":1,"magicLevel":75},"8260":{"name":"Abomination","hitpoints":200,"combatLevel":149,"attackSpeed":5,"attackLevel":110,"strengthLevel":110,"defenceLevel":110,"rangeLevel":110,"magicLevel":110,"stabDef":80,"slashDef":80,"crushDef":80,"rangeDef":180,"magicDef":20},"8261":{"name":"Abomination","hitpoints":200,"combatLevel":149,"attackSpeed":5,"attackLevel":110,"strengthLevel":110,"defenceLevel":110,"rangeLevel":110,"magicLevel":110,"stabDef":80,"slashDef":80,"crushDef":80,"rangeDef":180,"magicDef":20},"8262":{"name":"Abomination","hitpoints":200,"combatLevel":149,"attackSpeed":5,"attackLevel":110,"strengthLevel":110,"defenceLevel":110,"rangeLevel":110,"magicLevel":110,"stabDef":80,"slashDef":80,"crushDef":80,"rangeDef":180,"magicDef":20},"8297":{"name":"Swamp Crab","hitpoints":75,"combatLevel":55,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":50,"rangeLevel":1,"magicLevel":50,"stabDef":100,"slashDef":100,"crushDef":100,"magicDef":100},"8298":{"name":"Swamp Crab","hitpoints":75,"combatLevel":55,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":50,"rangeLevel":1,"magicLevel":50,"stabDef":100,"slashDef":100,"crushDef":100,"magicDef":100},"8299":{"name":"Swampy log","hitpoints":75,"combatLevel":55,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":50,"rangeLevel":1,"magicLevel":50,"stabDef":100,"slashDef":100,"crushDef":100,"magicDef":100},"8300":{"name":"Vyrewatch","hitpoints":90,"combatLevel":105,"slayerLevel":1,"attackSpeed":4,"attackLevel":105,"strengthLevel":86,"defenceLevel":85,"rangeLevel":105,"magicLevel":105},"8301":{"name":"Vyrewatch","hitpoints":90,"combatLevel":105,"slayerLevel":1,"attackSpeed":4,"attackLevel":105,"strengthLevel":86,"defenceLevel":85,"rangeLevel":105,"magicLevel":105},"8302":{"name":"Vyrewatch","hitpoints":90,"combatLevel":105,"slayerLevel":1,"attackSpeed":4,"attackLevel":105,"strengthLevel":86,"defenceLevel":85,"rangeLevel":105,"magicLevel":105},"8303":{"name":"Vyrewatch","hitpoints":90,"combatLevel":105,"slayerLevel":1,"attackSpeed":4,"attackLevel":105,"strengthLevel":86,"defenceLevel":85,"rangeLevel":105,"magicLevel":105},"8304":{"name":"Vyrewatch","hitpoints":90,"combatLevel":105,"slayerLevel":1,"attackSpeed":4,"attackLevel":105,"strengthLevel":86,"defenceLevel":85,"rangeLevel":105,"magicLevel":105},"8305":{"name":"Vyrewatch","hitpoints":90,"combatLevel":105,"slayerLevel":1,"attackSpeed":4,"attackLevel":105,"strengthLevel":86,"defenceLevel":85,"rangeLevel":105,"magicLevel":105},"8306":{"name":"Vyrewatch","hitpoints":90,"combatLevel":105,"slayerLevel":1,"attackSpeed":4,"attackLevel":105,"strengthLevel":86,"defenceLevel":85,"rangeLevel":105,"magicLevel":105},"8307":{"name":"Vyrewatch","hitpoints":90,"combatLevel":105,"slayerLevel":1,"attackSpeed":4,"attackLevel":105,"strengthLevel":86,"defenceLevel":85,"rangeLevel":105,"magicLevel":105},"8340":{"name":"Xarpus","hitpoints":5080,"combatLevel":960,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":250,"rangeLevel":1,"magicLevel":220,"rangeDef":160},"8341":{"name":"Xarpus","hitpoints":5080,"combatLevel":960,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":250,"rangeLevel":1,"magicLevel":220,"rangeDef":160},"8342":{"name":"Nylocas Ischyros","hitpoints":11,"combatLevel":162,"attackSpeed":3,"attackLevel":200,"strengthLevel":160,"defenceLevel":1,"rangeLevel":200,"magicLevel":1,"magic":1073,"bonusMagicDamage":928},"8343":{"name":"Nylocas Toxobolos","hitpoints":11,"combatLevel":162,"attackSpeed":3,"attackLevel":200,"strengthLevel":160,"defenceLevel":1,"rangeLevel":200,"magicLevel":1,"magic":1073,"bonusMagicDamage":928},"8344":{"name":"Nylocas Hagios","hitpoints":11,"combatLevel":162,"attackSpeed":3,"attackLevel":200,"strengthLevel":160,"defenceLevel":1,"rangeLevel":200,"magicLevel":1,"magic":1073,"bonusMagicDamage":928},"8345":{"name":"Nylocas Ischyros","hitpoints":22,"combatLevel":260,"attackSpeed":3,"attackLevel":250,"strengthLevel":230,"defenceLevel":20,"rangeLevel":250,"magicLevel":20,"magic":500,"bonusMagicDamage":500},"8346":{"name":"Nylocas Toxobolos","hitpoints":22,"combatLevel":260,"attackSpeed":3,"attackLevel":250,"strengthLevel":230,"defenceLevel":20,"rangeLevel":250,"magicLevel":20,"magic":500,"bonusMagicDamage":500},"8347":{"name":"Nylocas Hagios","hitpoints":22,"combatLevel":260,"attackSpeed":3,"attackLevel":250,"strengthLevel":230,"defenceLevel":20,"rangeLevel":250,"magicLevel":20,"magic":500,"bonusMagicDamage":500},"8348":{"name":"Nylocas Ischyros","hitpoints":11,"combatLevel":162,"attackSpeed":3,"attackLevel":200,"strengthLevel":160,"defenceLevel":1,"rangeLevel":200,"magicLevel":1,"magic":1073,"bonusMagicDamage":928},"8349":{"name":"Nylocas Toxobolos","hitpoints":11,"combatLevel":162,"attackSpeed":3,"attackLevel":200,"strengthLevel":160,"defenceLevel":1,"rangeLevel":200,"magicLevel":1,"magic":1073,"bonusMagicDamage":928},"8350":{"name":"Nylocas Hagios","hitpoints":11,"combatLevel":162,"attackSpeed":3,"attackLevel":200,"strengthLevel":160,"defenceLevel":1,"rangeLevel":200,"magicLevel":1,"magic":1073,"bonusMagicDamage":928},"8351":{"name":"Nylocas Ischyros","hitpoints":22,"combatLevel":260,"attackSpeed":3,"attackLevel":250,"strengthLevel":230,"defenceLevel":20,"rangeLevel":250,"magicLevel":20,"magic":500,"bonusMagicDamage":500},"8352":{"name":"Nylocas Toxobolos","hitpoints":22,"combatLevel":260,"attackSpeed":3,"attackLevel":250,"strengthLevel":230,"defenceLevel":20,"rangeLevel":250,"magicLevel":20,"magic":500,"bonusMagicDamage":500},"8353":{"name":"Nylocas Hagios","hitpoints":22,"combatLevel":260,"attackSpeed":3,"attackLevel":250,"strengthLevel":230,"defenceLevel":20,"rangeLevel":250,"magicLevel":20,"magic":500,"bonusMagicDamage":500},"8355":{"name":"Nylocas Vasilias","hitpoints":2500,"combatLevel":800,"attackSpeed":4,"attackLevel":400,"strengthLevel":350,"defenceLevel":50,"rangeLevel":350,"magicLevel":50,"magic":600,"bonusStrength":60,"bonusRangeStrength":60,"bonusMagicDamage":600},"8356":{"name":"Nylocas Vasilias","hitpoints":2500,"combatLevel":800,"attackSpeed":4,"attackLevel":400,"strengthLevel":350,"defenceLevel":50,"rangeLevel":350,"magicLevel":50,"magic":600,"bonusStrength":60,"bonusRangeStrength":60,"bonusMagicDamage":600},"8357":{"name":"Nylocas Vasilias","hitpoints":2500,"combatLevel":800,"attackSpeed":4,"attackLevel":400,"strengthLevel":350,"defenceLevel":50,"rangeLevel":350,"magicLevel":50,"magic":600,"bonusStrength":60,"bonusRangeStrength":60,"bonusMagicDamage":600},"8359":{"name":"Pestilent Bloat","hitpoints":2000,"combatLevel":870,"attackSpeed":1,"attackLevel":250,"strengthLevel":340,"defenceLevel":100,"rangeLevel":180,"magicLevel":150,"range":180,"stabDef":40,"slashDef":20,"crushDef":40,"rangeDef":800,"magicDef":600,"bonusAttack":150,"bonusStrength":82,"bonusRangeStrength":4,"undead":true},"8360":{"name":"The Maiden of Sugadinti","hitpoints":3500,"combatLevel":940,"attackSpeed":10,"attackLevel":350,"strengthLevel":350,"defenceLevel":200,"rangeLevel":350,"magicLevel":350,"magic":300},"8361":{"name":"The Maiden of Sugadinti","hitpoints":3500,"combatLevel":940,"attackSpeed":10,"attackLevel":350,"strengthLevel":350,"defenceLevel":200,"rangeLevel":350,"magicLevel":350,"magic":300},"8362":{"name":"The Maiden of Sugadinti","hitpoints":3500,"combatLevel":940,"attackSpeed":10,"attackLevel":350,"strengthLevel":350,"defenceLevel":200,"rangeLevel":350,"magicLevel":350,"magic":300},"8363":{"name":"The Maiden of Sugadinti","hitpoints":3500,"combatLevel":940,"attackSpeed":10,"attackLevel":350,"strengthLevel":350,"defenceLevel":200,"rangeLevel":350,"magicLevel":350,"magic":300},"8366":{"name":"Nylocas Matomenos","hitpoints":200,"combatLevel":115,"attackLevel":100,"strengthLevel":100,"defenceLevel":100,"rangeLevel":100,"magicLevel":100},"8367":{"name":"Blood spawn","hitpoints":120,"combatLevel":55,"attackLevel":1,"strengthLevel":1,"rangeLevel":1},"8369":{"name":"Verzik Vitur","hitpoints":2000,"combatLevel":1040,"attackSpeed":4,"attackLevel":400,"strengthLevel":400,"defenceLevel":20,"rangeLevel":400,"magicLevel":400,"range":80,"magic":80,"stabDef":20,"slashDef":20,"crushDef":20,"rangeDef":20,"magicDef":20,"bonusRangeStrength":80,"bonusMagicDamage":150},"8370":{"name":"Verzik Vitur","hitpoints":2000,"combatLevel":1040,"attackSpeed":4,"attackLevel":400,"strengthLevel":400,"defenceLevel":20,"rangeLevel":400,"magicLevel":400,"range":80,"magic":80,"stabDef":20,"slashDef":20,"crushDef":20,"rangeDef":20,"magicDef":20,"bonusRangeStrength":80,"bonusMagicDamage":150},"8371":{"name":"Verzik Vitur","hitpoints":2000,"combatLevel":1040,"attackSpeed":4,"attackLevel":400,"strengthLevel":400,"defenceLevel":20,"rangeLevel":400,"magicLevel":400,"range":80,"magic":80,"stabDef":20,"slashDef":20,"crushDef":20,"rangeDef":20,"magicDef":20,"bonusRangeStrength":80,"bonusMagicDamage":150},"8372":{"name":"Verzik Vitur","hitpoints":3250,"combatLevel":1265,"attackSpeed":4,"attackLevel":400,"strengthLevel":400,"defenceLevel":200,"rangeLevel":400,"magicLevel":400,"range":80,"magic":80,"stabDef":100,"slashDef":60,"crushDef":100,"rangeDef":250,"magicDef":70,"bonusRangeStrength":80,"bonusMagicDamage":80},"8373":{"name":"Verzik Vitur","hitpoints":3250,"combatLevel":1265,"attackSpeed":4,"attackLevel":400,"strengthLevel":400,"defenceLevel":200,"rangeLevel":400,"magicLevel":400,"range":80,"magic":80,"stabDef":100,"slashDef":60,"crushDef":100,"rangeDef":250,"magicDef":70,"bonusRangeStrength":80,"bonusMagicDamage":80},"8374":{"name":"Verzik Vitur","hitpoints":3250,"combatLevel":1520,"attackSpeed":7,"attackLevel":400,"strengthLevel":400,"defenceLevel":150,"rangeLevel":300,"magicLevel":300,"range":80,"magic":80,"stabDef":70,"slashDef":30,"crushDef":70,"rangeDef":230,"magicDef":100,"bonusAttack":80,"bonusStrength":30,"bonusRangeStrength":5,"bonusMagicDamage":5},"8375":{"name":"Verzik Vitur","hitpoints":3250,"combatLevel":1520,"attackSpeed":7,"attackLevel":400,"strengthLevel":400,"defenceLevel":150,"rangeLevel":300,"magicLevel":300,"range":80,"magic":80,"stabDef":70,"slashDef":30,"crushDef":70,"rangeDef":230,"magicDef":100,"bonusAttack":80,"bonusStrength":30,"bonusRangeStrength":5,"bonusMagicDamage":5},"8381":{"name":"Nylocas Ischyros","hitpoints":11,"combatLevel":162,"attackSpeed":3,"attackLevel":200,"strengthLevel":160,"defenceLevel":1,"rangeLevel":200,"magicLevel":1,"magic":1073,"bonusMagicDamage":928},"8382":{"name":"Nylocas Toxobolos","hitpoints":11,"combatLevel":162,"attackSpeed":3,"attackLevel":200,"strengthLevel":160,"defenceLevel":1,"rangeLevel":200,"magicLevel":1,"magic":1073,"bonusMagicDamage":928},"8383":{"name":"Nylocas Hagios","hitpoints":11,"combatLevel":162,"attackSpeed":3,"attackLevel":200,"strengthLevel":160,"defenceLevel":1,"rangeLevel":200,"magicLevel":1,"magic":1073,"bonusMagicDamage":928},"8384":{"name":"Nylocas Athanatos","hitpoints":180,"combatLevel":350,"attackLevel":1,"strengthLevel":1,"defenceLevel":50,"rangeLevel":1,"magicLevel":50},"8385":{"name":"Nylocas Matomenos","hitpoints":200,"combatLevel":115,"attackLevel":100,"strengthLevel":100,"defenceLevel":100,"rangeLevel":100,"magicLevel":100},"8387":{"name":"Sotetseg","hitpoints":4000,"combatLevel":995,"attackSpeed":5,"attackLevel":250,"strengthLevel":250,"defenceLevel":200,"magicLevel":250,"stabDef":70,"slashDef":70,"crushDef":70,"rangeDef":150,"magicDef":30,"bonusStrength":49,"poisonImmune":true,"venomImmune":true},"8388":{"name":"Sotetseg","hitpoints":4000,"combatLevel":995,"attackSpeed":5,"attackLevel":250,"strengthLevel":250,"defenceLevel":200,"magicLevel":250,"stabDef":70,"slashDef":70,"crushDef":70,"rangeDef":150,"magicDef":30,"bonusStrength":49,"poisonImmune":true,"venomImmune":true},"8400":{"name":"Monk of Zamorak","hitpoints":20,"combatLevel":22,"attackSpeed":4,"attackLevel":18,"strengthLevel":18,"defenceLevel":22,"rangeLevel":1,"magicLevel":25},"8401":{"name":"Monk of Zamorak","hitpoints":10,"combatLevel":17,"attackSpeed":4,"attackLevel":8,"strengthLevel":8,"defenceLevel":12,"rangeLevel":1,"magicLevel":25},"8428":{"name":"Mother","hitpoints":235,"combatLevel":198,"attackSpeed":4,"attackLevel":150,"strengthLevel":150,"defenceLevel":170,"rangeLevel":105,"magicLevel":60,"magicDef":200,"bonusAttack":60,"bonusStrength":50},"8429":{"name":"Mother","hitpoints":235,"combatLevel":198,"attackSpeed":4,"attackLevel":150,"strengthLevel":150,"defenceLevel":170,"rangeLevel":105,"magicLevel":60,"magicDef":200,"bonusAttack":60,"bonusStrength":50},"8430":{"name":"Mother","hitpoints":235,"combatLevel":198,"attackSpeed":4,"attackLevel":150,"strengthLevel":150,"defenceLevel":170,"rangeLevel":105,"magicLevel":60,"magicDef":200,"bonusAttack":60,"bonusStrength":50},"8439":{"name":"Don't Know What","hitpoints":220,"combatLevel":163,"attackSpeed":3,"attackLevel":120,"strengthLevel":90,"defenceLevel":160,"rangeLevel":115,"magicLevel":60,"magicDef":200,"bonusRangeStrength":40},"8474":{"name":"Black Guard","hitpoints":40,"combatLevel":48,"slayerLevel":1,"attackSpeed":3,"attackLevel":40,"strengthLevel":45,"defenceLevel":45,"rangeLevel":1,"magicLevel":1,"stabDef":40,"slashDef":40,"crushDef":40,"rangeDef":40,"bonusAttack":30,"bonusStrength":30},"8475":{"name":"Black Guard","hitpoints":40,"combatLevel":48,"slayerLevel":1,"attackSpeed":3,"attackLevel":40,"strengthLevel":45,"defenceLevel":45,"rangeLevel":1,"magicLevel":1,"stabDef":40,"slashDef":40,"crushDef":40,"rangeDef":40,"bonusAttack":30,"bonusStrength":30},"8476":{"name":"Black Guard","hitpoints":40,"combatLevel":48,"slayerLevel":1,"attackSpeed":3,"attackLevel":40,"strengthLevel":45,"defenceLevel":45,"rangeLevel":1,"magicLevel":1,"stabDef":40,"slashDef":40,"crushDef":40,"rangeDef":40,"bonusAttack":30,"bonusStrength":30},"8496":{"name":"Dwarf","hitpoints":16,"combatLevel":10,"slayerLevel":1,"attackSpeed":5},"8512":{"name":"Tormented Soul","hitpoints":20,"combatLevel":16,"attackSpeed":4,"attackLevel":16,"strengthLevel":12,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"8513":{"name":"Tormented Soul","hitpoints":20,"combatLevel":16,"attackSpeed":4,"attackLevel":16,"strengthLevel":12,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"8514":{"name":"Trapped Soul","hitpoints":30,"combatLevel":30,"attackSpeed":4,"attackLevel":25,"strengthLevel":29,"defenceLevel":20,"rangeLevel":1,"magicLevel":1},"8528":{"name":"Trapped Soul","hitpoints":30,"combatLevel":30,"attackSpeed":4,"attackLevel":25,"strengthLevel":29,"defenceLevel":20,"rangeLevel":1,"magicLevel":1},"8529":{"name":"Trapped Soul (hard)","hitpoints":100,"combatLevel":101,"attackSpeed":4,"attackLevel":100,"strengthLevel":120,"defenceLevel":20,"rangeLevel":1,"magicLevel":1},"8563":{"name":"Lizardman","hitpoints":60,"combatLevel":62,"slayerLevel":1,"attackSpeed":4,"attackLevel":53,"strengthLevel":53,"defenceLevel":52,"rangeLevel":1,"magicLevel":1,"range":28,"slashDef":20,"crushDef":5,"bonusAttack":28,"bonusStrength":25,"bonusRangeStrength":25},"8564":{"name":"Lizardman brute","hitpoints":60,"combatLevel":73,"slayerLevel":1,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"rangeLevel":1,"magicLevel":1,"range":34,"slashDef":30,"crushDef":10,"bonusAttack":34,"bonusStrength":30,"bonusRangeStrength":30},"8565":{"name":"Lizardman shaman","hitpoints":150,"combatLevel":150,"slayerLevel":1,"attackSpeed":4,"attackLevel":120,"strengthLevel":120,"defenceLevel":140,"rangeLevel":120,"magicLevel":130,"range":45,"slashDef":40,"crushDef":30,"magicDef":50,"bonusAttack":45,"bonusStrength":38,"bonusRangeStrength":38},"8578":{"name":"Swamp frog","hitpoints":25,"combatLevel":24,"attackSpeed":4,"attackLevel":25,"strengthLevel":20,"defenceLevel":15,"rangeLevel":1,"magicLevel":1},"8583":{"name":"Hespori","hitpoints":300,"combatLevel":284,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":120,"rangeLevel":150,"magicLevel":126,"range":150,"magic":150,"stabDef":60,"slashDef":20,"crushDef":60,"rangeDef":80,"magicDef":80},"8584":{"name":"Flower","hitpoints":10},"8609":{"name":"Hydra","hitpoints":300,"combatLevel":194,"slayerLevel":95,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":100,"rangeLevel":210,"magicLevel":210,"stabDef":160,"slashDef":160,"crushDef":160,"magicDef":160,"dragon":true},"8610":{"name":"Wyrm","hitpoints":130,"combatLevel":99,"slayerLevel":62,"attackSpeed":4,"attackLevel":85,"strengthLevel":60,"defenceLevel":80,"rangeLevel":80,"magicLevel":80,"stabDef":20,"slashDef":50,"crushDef":50,"rangeDef":20,"magicDef":50,"bonusStrength":30,"bonusMagicDamage":30,"dragon":true},"8611":{"name":"Wyrm","hitpoints":130,"combatLevel":99,"slayerLevel":62,"attackSpeed":4,"attackLevel":85,"strengthLevel":60,"defenceLevel":80,"rangeLevel":80,"magicLevel":80,"stabDef":20,"slashDef":50,"crushDef":50,"rangeDef":20,"magicDef":50,"bonusStrength":30,"bonusMagicDamage":30,"dragon":true},"8612":{"name":"Drake","hitpoints":250,"combatLevel":192,"slayerLevel":84,"attackSpeed":4,"attackLevel":140,"strengthLevel":118,"defenceLevel":120,"rangeLevel":140,"magicLevel":112,"range":40,"stabDef":60,"slashDef":60,"crushDef":60,"rangeDef":100,"magicDef":20,"bonusAttack":40,"bonusStrength":12,"bonusRangeStrength":40,"dragon":true},"8613":{"name":"Drake","hitpoints":250,"combatLevel":192,"slayerLevel":84,"attackSpeed":4,"attackLevel":140,"strengthLevel":118,"defenceLevel":120,"rangeLevel":140,"magicLevel":112,"range":40,"stabDef":60,"slashDef":60,"crushDef":60,"rangeDef":100,"magicDef":20,"bonusAttack":40,"bonusStrength":12,"bonusRangeStrength":40,"dragon":true},"8614":{"name":"Sulphur Lizard","hitpoints":50,"combatLevel":50,"slayerLevel":44,"attackSpeed":4,"attackLevel":50,"strengthLevel":45,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"stabDef":15,"slashDef":25,"crushDef":25,"rangeDef":15},"8615":{"name":"Alchemical Hydra","hitpoints":1100,"combatLevel":426,"slayerLevel":95,"attackSpeed":6,"attackLevel":100,"strengthLevel":100,"defenceLevel":100,"rangeLevel":260,"magicLevel":260,"range":45,"magic":45,"stabDef":75,"slashDef":150,"crushDef":150,"rangeDef":45,"magicDef":150,"bonusRangeStrength":20,"bonusMagicDamage":20,"dragon":true},"8616":{"name":"Alchemical Hydra","hitpoints":1100,"combatLevel":426,"slayerLevel":95,"attackSpeed":6,"attackLevel":100,"strengthLevel":100,"defenceLevel":100,"rangeLevel":260,"magicLevel":260,"range":45,"magic":45,"stabDef":75,"slashDef":150,"crushDef":150,"rangeDef":45,"magicDef":150,"bonusRangeStrength":20,"bonusMagicDamage":20,"dragon":true},"8617":{"name":"Alchemical Hydra","hitpoints":1100,"combatLevel":426,"slayerLevel":95,"attackSpeed":6,"attackLevel":100,"strengthLevel":100,"defenceLevel":100,"rangeLevel":260,"magicLevel":260,"range":45,"magic":45,"stabDef":75,"slashDef":150,"crushDef":150,"rangeDef":45,"magicDef":150,"bonusRangeStrength":20,"bonusMagicDamage":20,"dragon":true},"8618":{"name":"Alchemical Hydra","hitpoints":1100,"combatLevel":426,"slayerLevel":95,"attackSpeed":6,"attackLevel":100,"strengthLevel":100,"defenceLevel":100,"rangeLevel":260,"magicLevel":260,"range":45,"magic":45,"stabDef":75,"slashDef":150,"crushDef":150,"rangeDef":45,"magicDef":150,"bonusRangeStrength":20,"bonusMagicDamage":20,"dragon":true},"8619":{"name":"Alchemical Hydra","hitpoints":1100,"combatLevel":426,"slayerLevel":95,"attackSpeed":6,"attackLevel":100,"strengthLevel":100,"defenceLevel":100,"rangeLevel":260,"magicLevel":260,"range":45,"magic":45,"stabDef":75,"slashDef":150,"crushDef":150,"rangeDef":45,"magicDef":150,"bonusRangeStrength":20,"bonusMagicDamage":20,"dragon":true},"8620":{"name":"Alchemical Hydra","hitpoints":1100,"combatLevel":426,"slayerLevel":95,"attackSpeed":6,"attackLevel":100,"strengthLevel":100,"defenceLevel":100,"rangeLevel":260,"magicLevel":260,"range":45,"magic":45,"stabDef":75,"slashDef":150,"crushDef":150,"rangeDef":45,"magicDef":150,"bonusRangeStrength":20,"bonusMagicDamage":20,"dragon":true},"8621":{"name":"Alchemical Hydra","hitpoints":1100,"combatLevel":426,"slayerLevel":95,"attackSpeed":4,"attackLevel":100,"strengthLevel":100,"defenceLevel":100,"rangeLevel":260,"magicLevel":260,"range":45,"magic":45,"stabDef":75,"slashDef":150,"crushDef":150,"rangeDef":45,"magicDef":150,"bonusRangeStrength":20,"bonusMagicDamage":20,"dragon":true},"8622":{"name":"Alchemical Hydra","hitpoints":1100,"combatLevel":426,"slayerLevel":95,"attackSpeed":4,"attackLevel":100,"strengthLevel":100,"defenceLevel":100,"rangeLevel":260,"magicLevel":260,"range":45,"magic":45,"stabDef":75,"slashDef":150,"crushDef":150,"rangeDef":45,"magicDef":150,"bonusRangeStrength":20,"bonusMagicDamage":20,"dragon":true},"8633":{"name":"The Mimic","hitpoints":230,"combatLevel":186,"attackSpeed":3,"attackLevel":185,"strengthLevel":120,"defenceLevel":120,"rangeLevel":1,"magicLevel":60,"magic":180,"stabDef":160,"slashDef":165,"crushDef":150,"rangeDef":145,"magicDef":30,"bonusAttack":135,"bonusStrength":48},"8635":{"name":"Third Age Warrior","hitpoints":40,"combatLevel":83,"attackSpeed":5,"attackLevel":90,"strengthLevel":75,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"stabDef":96,"slashDef":108,"crushDef":113,"rangeDef":97,"bonusAttack":105,"bonusStrength":75},"8636":{"name":"Third Age Ranger","hitpoints":40,"combatLevel":76,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":80,"rangeLevel":95,"magicLevel":1,"range":140,"stabDef":55,"slashDef":47,"crushDef":60,"rangeDef":55,"magicDef":60,"bonusRangeStrength":7},"8637":{"name":"Third Age Mage","hitpoints":40,"combatLevel":83,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":80,"rangeLevel":1,"magicLevel":110,"magic":145,"stabDef":5,"slashDef":6,"crushDef":5,"magicDef":65,"bonusMagicDamage":24},"8678":{"name":"Feral Vampyre","hitpoints":50,"combatLevel":72,"slayerLevel":1,"attackSpeed":4,"attackLevel":65,"strengthLevel":70,"defenceLevel":65,"rangeLevel":1,"magicLevel":50},"8698":{"name":"Monk of Zamorak","hitpoints":16,"combatLevel":23,"attackSpeed":4,"attackLevel":15,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":30},"8701":{"name":"Big frog","hitpoints":18,"combatLevel":10,"attackSpeed":4,"attackLevel":8,"strengthLevel":6,"defenceLevel":4,"rangeLevel":1,"magicLevel":1},"8702":{"name":"Frog","hitpoints":8,"combatLevel":5,"attackSpeed":4,"attackLevel":5,"strengthLevel":4,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"8703":{"name":"Temple Spider","hitpoints":70,"combatLevel":75,"attackSpeed":4,"attackLevel":120,"strengthLevel":50,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":30,"crushDef":10,"rangeDef":20,"magicDef":25},"8709":{"name":"Shaeded Beast","hitpoints":210,"combatLevel":186,"attackSpeed":4,"attackLevel":50,"strengthLevel":80,"defenceLevel":50,"rangeLevel":1,"magicLevel":250,"stabDef":50,"slashDef":30,"crushDef":100,"rangeDef":50,"magicDef":150,"bonusMagicDamage":10},"8713":{"name":"Sarachnis","hitpoints":400,"combatLevel":318,"slayerLevel":1,"attackSpeed":4,"attackLevel":200,"strengthLevel":240,"defenceLevel":150,"rangeLevel":300,"magicLevel":150,"range":15,"stabDef":60,"slashDef":40,"crushDef":10,"rangeDef":300,"magicDef":150,"bonusAttack":30,"bonusRangeStrength":15},"8714":{"name":"Spawn of Sarachnis","hitpoints":30,"combatLevel":107,"attackSpeed":3,"attackLevel":150,"strengthLevel":120,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":20,"rangeDef":150,"bonusAttack":50},"8715":{"name":"Spawn of Sarachnis","hitpoints":30,"combatLevel":68,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":50,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":50,"crushDef":50,"magicDef":150},"8736":{"name":"Moss Giant","hitpoints":120,"combatLevel":84,"slayerLevel":1,"attackSpeed":6,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"bonusAttack":66,"bonusStrength":62},"8759":{"name":"Iorwerth Warrior","hitpoints":105,"combatLevel":108,"slayerLevel":1,"attackSpeed":4,"attackLevel":95,"strengthLevel":95,"defenceLevel":80,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60},"8760":{"name":"Iorwerth Archer","hitpoints":105,"combatLevel":90,"slayerLevel":1,"attackSpeed":5,"attackLevel":10,"strengthLevel":10,"defenceLevel":80,"rangeLevel":90,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60},"8847":{"name":"Essyllt","hitpoints":320,"combatLevel":236,"attackSpeed":4,"attackLevel":268,"strengthLevel":268,"defenceLevel":104,"rangeLevel":342,"magicLevel":104,"stabDef":40,"slashDef":40,"crushDef":20,"rangeDef":120,"magicDef":30,"bonusStrength":28,"bonusRangeStrength":28},"8871":{"name":"Essyllt","hitpoints":320,"combatLevel":236,"attackSpeed":4,"attackLevel":268,"strengthLevel":268,"defenceLevel":104,"rangeLevel":342,"magicLevel":104,"stabDef":40,"slashDef":40,"crushDef":20,"rangeDef":120,"magicDef":30,"bonusStrength":28,"bonusRangeStrength":28},"8872":{"name":"Essyllt","hitpoints":320,"combatLevel":236,"attackSpeed":4,"attackLevel":268,"strengthLevel":268,"defenceLevel":104,"rangeLevel":342,"magicLevel":104,"stabDef":40,"slashDef":40,"crushDef":20,"rangeDef":120,"magicDef":30,"bonusStrength":28,"bonusRangeStrength":28},"8917":{"name":"Fragment of Seren","hitpoints":1000,"combatLevel":494,"attackSpeed":7,"attackLevel":242,"strengthLevel":288,"defenceLevel":102,"rangeLevel":235,"magicLevel":102,"stab":236,"slash":236,"crush":236,"range":224,"stabDef":320,"slashDef":220,"crushDef":320,"rangeDef":480,"magicDef":10},"8918":{"name":"Fragment of Seren","hitpoints":1000,"combatLevel":494,"attackSpeed":7,"attackLevel":242,"strengthLevel":288,"defenceLevel":102,"rangeLevel":235,"magicLevel":102,"stab":236,"slash":236,"crush":236,"range":224,"stabDef":320,"slashDef":220,"crushDef":320,"rangeDef":480,"magicDef":10},"8919":{"name":"Fragment of Seren","hitpoints":1000,"combatLevel":494,"attackSpeed":7,"attackLevel":242,"strengthLevel":288,"defenceLevel":102,"rangeLevel":235,"magicLevel":102,"stab":236,"slash":236,"crush":236,"range":224,"stabDef":320,"slashDef":220,"crushDef":320,"rangeDef":480,"magicDef":10},"8920":{"name":"Fragment of Seren","hitpoints":1000,"combatLevel":494,"attackSpeed":7,"attackLevel":242,"strengthLevel":288,"defenceLevel":102,"rangeLevel":235,"magicLevel":102,"stab":236,"slash":236,"crush":236,"range":224,"stabDef":320,"slashDef":220,"crushDef":320,"rangeDef":480,"magicDef":10},"8950":{"name":"Essyllt","hitpoints":320,"combatLevel":236,"attackSpeed":4,"attackLevel":268,"strengthLevel":268,"defenceLevel":104,"rangeLevel":342,"magicLevel":104,"stabDef":40,"slashDef":40,"crushDef":20,"rangeDef":120,"magicDef":30,"bonusStrength":28,"bonusRangeStrength":28},"9016":{"name":"Essyllt","hitpoints":320,"combatLevel":236,"attackSpeed":4,"attackLevel":268,"strengthLevel":268,"defenceLevel":104,"rangeLevel":342,"magicLevel":104,"stabDef":40,"slashDef":40,"crushDef":20,"rangeDef":120,"magicDef":30,"bonusStrength":28,"bonusRangeStrength":28},"9021":{"name":"Crystalline Hunllef","hitpoints":600,"combatLevel":674,"attackSpeed":5},"9022":{"name":"Crystalline Hunllef","hitpoints":600,"combatLevel":674,"attackSpeed":5},"9023":{"name":"Crystalline Hunllef","hitpoints":600,"combatLevel":674,"attackSpeed":5},"9024":{"name":"Crystalline Hunllef","hitpoints":600,"combatLevel":674,"attackSpeed":5},"9026":{"name":"Crystalline Rat","combatLevel":24,"attackSpeed":4},"9028":{"name":"Crystalline Bat","combatLevel":33,"attackSpeed":4},"9029":{"name":"Crystalline Unicorn","combatLevel":48,"attackSpeed":4},"9030":{"name":"Crystalline Scorpion","combatLevel":64,"attackSpeed":4},"9031":{"name":"Crystalline Wolf","combatLevel":74,"attackSpeed":4},"9032":{"name":"Crystalline Bear","combatLevel":172,"attackSpeed":4},"9033":{"name":"Crystalline Dragon","combatLevel":172,"attackSpeed":4},"9035":{"name":"Corrupted Hunllef","hitpoints":1000,"combatLevel":894,"attackSpeed":5},"9036":{"name":"Corrupted Hunllef","hitpoints":1000,"combatLevel":894,"attackSpeed":5},"9037":{"name":"Corrupted Hunllef","hitpoints":1000,"combatLevel":894,"attackSpeed":5},"9038":{"name":"Corrupted Hunllef","hitpoints":1000,"combatLevel":894,"attackSpeed":5},"9040":{"name":"Corrupted Rat","combatLevel":34,"attackSpeed":4},"9041":{"name":"Corrupted Spider","hitpoints":12,"combatLevel":32,"attackSpeed":4},"9042":{"name":"Corrupted Bat","combatLevel":48,"attackSpeed":4},"9043":{"name":"Corrupted Unicorn","combatLevel":64,"attackSpeed":4},"9044":{"name":"Corrupted Scorpion","combatLevel":89,"attackSpeed":4},"9045":{"name":"Corrupted Wolf","combatLevel":102,"attackSpeed":4},"9046":{"name":"Corrupted Bear","hitpoints":100,"combatLevel":258,"attackSpeed":4},"9047":{"name":"Corrupted Dragon","combatLevel":258,"attackSpeed":4},"9048":{"name":"Corrupted Dark Beast","hitpoints":100,"combatLevel":258,"attackSpeed":4},"9049":{"name":"Zalcano","hitpoints":1000,"combatLevel":336,"attackSpeed":5},"9051":{"name":"Golem","hitpoints":14,"combatLevel":64},"9181":{"name":"Dire Wolf","hitpoints":74,"combatLevel":72,"slayerLevel":1,"attackSpeed":4,"attackLevel":60,"strengthLevel":61,"defenceLevel":62,"rangeLevel":1,"magicLevel":1},"9182":{"name":"Guard","hitpoints":105,"combatLevel":108,"slayerLevel":1,"attackSpeed":4,"attackLevel":95,"strengthLevel":80,"defenceLevel":95,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60},"9183":{"name":"Guard","hitpoints":105,"combatLevel":108,"slayerLevel":1,"attackSpeed":4,"attackLevel":95,"strengthLevel":80,"defenceLevel":95,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60},"9184":{"name":"Guard","hitpoints":105,"combatLevel":108,"slayerLevel":1,"attackSpeed":4,"attackLevel":95,"strengthLevel":80,"defenceLevel":95,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60},"9185":{"name":"Guard","hitpoints":105,"combatLevel":108,"slayerLevel":1,"attackSpeed":4,"attackLevel":95,"strengthLevel":80,"defenceLevel":95,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60},"9186":{"name":"Guard","hitpoints":105,"combatLevel":108,"slayerLevel":1,"attackSpeed":4,"attackLevel":95,"strengthLevel":80,"defenceLevel":95,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60},"9187":{"name":"Guard","hitpoints":105,"combatLevel":108,"slayerLevel":1,"attackSpeed":4,"attackLevel":95,"strengthLevel":80,"defenceLevel":95,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60},"9188":{"name":"Guard","hitpoints":105,"combatLevel":108,"slayerLevel":1,"attackSpeed":4,"attackLevel":95,"strengthLevel":80,"defenceLevel":95,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60},"9189":{"name":"Guard","hitpoints":105,"combatLevel":108,"slayerLevel":1,"attackSpeed":4,"attackLevel":95,"strengthLevel":80,"defenceLevel":95,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60},"9190":{"name":"Guard","hitpoints":105,"combatLevel":108,"slayerLevel":1,"attackSpeed":4,"attackLevel":95,"strengthLevel":80,"defenceLevel":95,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60},"9191":{"name":"Guard","hitpoints":105,"combatLevel":108,"slayerLevel":1,"attackSpeed":4,"attackLevel":95,"strengthLevel":80,"defenceLevel":95,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60},"9246":{"name":"Arianwyn (hard)","hitpoints":300,"combatLevel":368,"attackSpeed":5,"defenceLevel":102,"rangeLevel":552,"magicLevel":153,"range":126,"stabDef":80,"slashDef":80,"crushDef":80,"rangeDef":180,"magicDef":260},"9247":{"name":"Essyllt (hard)","hitpoints":320,"combatLevel":395,"attackSpeed":4,"attackLevel":408,"strengthLevel":408,"defenceLevel":104,"rangeLevel":512,"magicLevel":104,"range":168,"stabDef":40,"slashDef":40,"crushDef":20,"rangeDef":120,"magicDef":30,"bonusAttack":14,"bonusStrength":28,"bonusRangeStrength":28},"9249":{"name":"Essyllt (hard)","hitpoints":320,"combatLevel":395,"attackSpeed":4,"attackLevel":408,"strengthLevel":408,"defenceLevel":104,"rangeLevel":512,"magicLevel":104,"range":168,"stabDef":40,"slashDef":40,"crushDef":20,"rangeDef":120,"magicDef":30,"bonusAttack":14,"bonusStrength":28,"bonusRangeStrength":28},"9258":{"name":"Basilisk Sentinel","hitpoints":520,"combatLevel":358,"slayerLevel":60,"attackSpeed":4,"attackLevel":274,"strengthLevel":274,"defenceLevel":274,"rangeLevel":1,"magicLevel":274,"stabDef":50,"slashDef":50,"crushDef":10,"rangeDef":10,"magicDef":50,"bonusAttack":12,"bonusMagicDamage":12},"9282":{"name":"Basilisk Youngling","hitpoints":60,"combatLevel":57,"slayerLevel":40,"attackSpeed":4,"attackLevel":25,"strengthLevel":40,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"magicDef":20},"9287":{"name":"Monstrous Basilisk","hitpoints":170,"combatLevel":135,"attackSpeed":4,"attackLevel":88,"strengthLevel":98,"defenceLevel":130,"rangeLevel":1,"magicLevel":1,"stabDef":35,"slashDef":35,"magicDef":35,"poisonImmune":true,"venomImmune":true},"9288":{"name":"Monstrous Basilisk","hitpoints":170,"combatLevel":135,"attackSpeed":4,"attackLevel":88,"strengthLevel":98,"defenceLevel":130,"rangeLevel":1,"magicLevel":1,"stabDef":35,"slashDef":35,"magicDef":35,"poisonImmune":true,"venomImmune":true},"9289":{"name":"The Jormungand","hitpoints":600,"combatLevel":363,"slayerLevel":40,"attackSpeed":5,"attackLevel":180,"strengthLevel":180,"defenceLevel":180,"rangeLevel":180,"magicLevel":180,"stabDef":50,"slashDef":50,"crushDef":10,"rangeDef":50,"magicDef":50,"bonusStrength":12,"bonusRangeStrength":12,"bonusMagicDamage":12},"9290":{"name":"The Jormungand","hitpoints":600,"combatLevel":363,"slayerLevel":40,"attackSpeed":5,"attackLevel":180,"strengthLevel":180,"defenceLevel":180,"rangeLevel":180,"magicLevel":180,"stabDef":50,"slashDef":50,"crushDef":10,"rangeDef":50,"magicDef":50,"bonusStrength":12,"bonusRangeStrength":12,"bonusMagicDamage":12},"9291":{"name":"The Jormungand","hitpoints":600,"combatLevel":363,"slayerLevel":40,"attackSpeed":5,"attackLevel":180,"strengthLevel":180,"defenceLevel":180,"rangeLevel":180,"magicLevel":180,"stabDef":50,"slashDef":50,"crushDef":10,"rangeDef":50,"magicDef":50,"bonusStrength":12,"bonusRangeStrength":12,"bonusMagicDamage":12},"9292":{"name":"The Jormungand","hitpoints":600,"combatLevel":363,"slayerLevel":40,"attackSpeed":5,"attackLevel":180,"strengthLevel":180,"defenceLevel":180,"rangeLevel":180,"magicLevel":180,"stabDef":50,"slashDef":50,"crushDef":10,"rangeDef":50,"magicDef":50,"bonusStrength":12,"bonusRangeStrength":12,"bonusMagicDamage":12},"9293":{"name":"Basilisk Knight","hitpoints":300,"combatLevel":204,"slayerLevel":60,"attackSpeed":4,"attackLevel":186,"strengthLevel":186,"defenceLevel":186,"rangeLevel":1,"magicLevel":186,"stabDef":30,"slashDef":30,"magicDef":30},"9295":{"name":"Typhor","hitpoints":280,"combatLevel":194,"slayerLevel":40,"attackSpeed":4,"attackLevel":150,"strengthLevel":150,"defenceLevel":150,"rangeLevel":1,"magicLevel":150,"stabDef":25,"slashDef":25,"magicDef":25,"poisonImmune":true,"venomImmune":true},"9296":{"name":"Typhor","hitpoints":280,"combatLevel":194,"slayerLevel":40,"attackSpeed":4,"attackLevel":150,"strengthLevel":150,"defenceLevel":150,"rangeLevel":1,"magicLevel":150,"stabDef":25,"slashDef":25,"magicDef":25,"poisonImmune":true,"venomImmune":true}} \ No newline at end of file +{"1":{"name":"Molanisk","hitpoints":52,"combatLevel":51,"slayerLevel":39,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":50,"rangeLevel":1,"stabDef":45,"slashDef":45,"crushDef":35,"rangeDef":55,"magicDef":30},"2":{"name":"Aberrant spectre","hitpoints":90,"combatLevel":96,"slayerLevel":60,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":90,"rangeLevel":1,"magicLevel":105,"stabDef":20,"slashDef":20,"crushDef":20,"rangeDef":15,"undead":true},"3":{"name":"Aberrant spectre","hitpoints":90,"combatLevel":96,"slayerLevel":60,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":90,"rangeLevel":1,"magicLevel":105,"stabDef":20,"slashDef":20,"crushDef":20,"rangeDef":15,"undead":true},"4":{"name":"Aberrant spectre","hitpoints":90,"combatLevel":96,"slayerLevel":60,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":90,"rangeLevel":1,"magicLevel":105,"stabDef":20,"slashDef":20,"crushDef":20,"rangeDef":15,"undead":true},"5":{"name":"Aberrant spectre","hitpoints":90,"combatLevel":96,"slayerLevel":60,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":90,"rangeLevel":1,"magicLevel":105,"stabDef":20,"slashDef":20,"crushDef":20,"rangeDef":15,"undead":true},"6":{"name":"Aberrant spectre","hitpoints":90,"combatLevel":96,"slayerLevel":60,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":90,"rangeLevel":1,"magicLevel":105,"stabDef":20,"slashDef":20,"crushDef":20,"rangeDef":15,"undead":true},"7":{"name":"Aberrant spectre","hitpoints":90,"combatLevel":96,"slayerLevel":60,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":90,"rangeLevel":1,"magicLevel":105,"stabDef":20,"slashDef":20,"crushDef":20,"rangeDef":15,"undead":true},"8":{"name":"Nechryael","hitpoints":105,"combatLevel":115,"slayerLevel":80,"attackSpeed":4,"attackLevel":97,"strengthLevel":97,"defenceLevel":105,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"crushDef":20,"rangeDef":20,"demon":true},"10":{"name":"Death spawn","hitpoints":60,"combatLevel":46,"attackSpeed":4,"attackLevel":67,"strengthLevel":7,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"crushDef":20,"rangeDef":20},"11":{"name":"Nechryael","hitpoints":105,"combatLevel":115,"slayerLevel":80,"attackSpeed":4,"attackLevel":97,"strengthLevel":97,"defenceLevel":105,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"crushDef":20,"rangeDef":20,"demon":true},"26":{"name":"Zombie","hitpoints":22,"combatLevel":13,"attackSpeed":4,"attackLevel":8,"strengthLevel":9,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"undead":true},"27":{"name":"Zombie","hitpoints":22,"combatLevel":13,"attackSpeed":4,"attackLevel":8,"strengthLevel":9,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"undead":true},"28":{"name":"Zombie","hitpoints":22,"combatLevel":13,"attackSpeed":4,"attackLevel":8,"strengthLevel":9,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"undead":true},"29":{"name":"Zombie","hitpoints":22,"combatLevel":13,"attackSpeed":4,"attackLevel":8,"strengthLevel":9,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"undead":true},"30":{"name":"Zombie","hitpoints":22,"combatLevel":13,"attackSpeed":4,"attackLevel":8,"strengthLevel":9,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"undead":true},"31":{"name":"Zombie","hitpoints":22,"combatLevel":13,"attackSpeed":4,"attackLevel":8,"strengthLevel":9,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"undead":true},"32":{"name":"Zombie","hitpoints":22,"combatLevel":13,"attackSpeed":4,"attackLevel":8,"strengthLevel":9,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"undead":true},"33":{"name":"Zombie","hitpoints":22,"combatLevel":13,"attackSpeed":4,"attackLevel":8,"strengthLevel":9,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"undead":true},"34":{"name":"Zombie","hitpoints":22,"combatLevel":13,"attackSpeed":4,"attackLevel":8,"strengthLevel":9,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"undead":true},"35":{"name":"Zombie","hitpoints":22,"combatLevel":13,"attackSpeed":4,"attackLevel":8,"strengthLevel":9,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"undead":true},"36":{"name":"Zombie","hitpoints":22,"combatLevel":13,"attackSpeed":4,"attackLevel":8,"strengthLevel":9,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"undead":true},"37":{"name":"Zombie","hitpoints":22,"combatLevel":13,"attackSpeed":4,"attackLevel":8,"strengthLevel":9,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"undead":true},"38":{"name":"Zombie","hitpoints":22,"combatLevel":13,"attackSpeed":4,"attackLevel":8,"strengthLevel":9,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"undead":true},"39":{"name":"Zombie","hitpoints":22,"combatLevel":13,"attackSpeed":4,"attackLevel":8,"strengthLevel":9,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"undead":true},"40":{"name":"Zombie","hitpoints":22,"combatLevel":13,"attackSpeed":4,"attackLevel":8,"strengthLevel":9,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"undead":true},"41":{"name":"Zombie","hitpoints":22,"combatLevel":13,"attackSpeed":4,"attackLevel":8,"strengthLevel":9,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"undead":true},"42":{"name":"Zombie","hitpoints":24,"combatLevel":18,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"undead":true},"43":{"name":"Zombie","hitpoints":24,"combatLevel":18,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"undead":true},"44":{"name":"Zombie","hitpoints":24,"combatLevel":18,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"undead":true},"45":{"name":"Zombie","hitpoints":24,"combatLevel":18,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"undead":true},"46":{"name":"Zombie","hitpoints":24,"combatLevel":18,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"undead":true},"47":{"name":"Zombie","hitpoints":24,"combatLevel":18,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"undead":true},"48":{"name":"Zombie","hitpoints":24,"combatLevel":18,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"undead":true},"49":{"name":"Zombie","hitpoints":30,"combatLevel":24,"attackSpeed":4,"attackLevel":19,"strengthLevel":21,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"50":{"name":"Zombie","hitpoints":30,"combatLevel":24,"attackSpeed":4,"attackLevel":19,"strengthLevel":21,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"51":{"name":"Zombie","hitpoints":30,"combatLevel":24,"attackSpeed":4,"attackLevel":19,"strengthLevel":21,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"52":{"name":"Zombie","hitpoints":30,"combatLevel":24,"attackSpeed":4,"attackLevel":19,"strengthLevel":21,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"53":{"name":"Zombie","hitpoints":30,"combatLevel":24,"attackSpeed":4,"attackLevel":19,"strengthLevel":21,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"54":{"name":"Zombie","hitpoints":30,"combatLevel":24,"attackSpeed":4,"attackLevel":19,"strengthLevel":21,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"55":{"name":"Zombie","hitpoints":30,"combatLevel":24,"attackSpeed":4,"attackLevel":19,"strengthLevel":21,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"56":{"name":"Zombie","hitpoints":30,"combatLevel":24,"attackSpeed":4,"attackLevel":19,"strengthLevel":21,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"57":{"name":"Zombie","hitpoints":30,"combatLevel":24,"attackSpeed":4,"attackLevel":19,"strengthLevel":21,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"58":{"name":"Zombie","hitpoints":30,"combatLevel":24,"attackSpeed":4,"attackLevel":19,"strengthLevel":21,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"59":{"name":"Zombie","hitpoints":30,"combatLevel":24,"attackSpeed":4,"attackLevel":19,"strengthLevel":21,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"60":{"name":"Zombie","hitpoints":30,"combatLevel":24,"attackSpeed":4,"attackLevel":19,"strengthLevel":21,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"61":{"name":"Zombie","hitpoints":30,"combatLevel":24,"attackSpeed":4,"attackLevel":19,"strengthLevel":21,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"62":{"name":"Zombie","hitpoints":30,"combatLevel":24,"attackSpeed":4,"attackLevel":19,"strengthLevel":21,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"63":{"name":"Zombie","hitpoints":30,"combatLevel":24,"attackSpeed":4,"attackLevel":19,"strengthLevel":21,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"64":{"name":"Zombie","hitpoints":30,"combatLevel":25,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":8,"crushDef":12,"rangeDef":11,"magicDef":10,"bonusAttack":5,"bonusStrength":7,"undead":true},"65":{"name":"Zombie","hitpoints":30,"combatLevel":25,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":8,"crushDef":12,"rangeDef":11,"magicDef":10,"bonusAttack":5,"bonusStrength":7,"undead":true},"66":{"name":"Zombie","hitpoints":30,"combatLevel":25,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":8,"crushDef":12,"rangeDef":11,"magicDef":10,"bonusAttack":5,"bonusStrength":7,"undead":true},"67":{"name":"Zombie","hitpoints":30,"combatLevel":25,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":8,"crushDef":12,"rangeDef":11,"magicDef":10,"bonusAttack":5,"bonusStrength":7,"undead":true},"68":{"name":"Zombie","hitpoints":30,"combatLevel":25,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":8,"crushDef":12,"rangeDef":11,"magicDef":10,"bonusAttack":5,"bonusStrength":7,"undead":true},"69":{"name":"Summoned Zombie","hitpoints":22,"combatLevel":13,"attackSpeed":4,"attackLevel":8,"strengthLevel":9,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"undead":true},"70":{"name":"Skeleton","hitpoints":29,"combatLevel":22,"attackSpeed":4,"attackLevel":15,"strengthLevel":18,"defenceLevel":17,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"rangeDef":5,"undead":true},"71":{"name":"Skeleton","hitpoints":29,"combatLevel":22,"attackSpeed":4,"attackLevel":15,"strengthLevel":18,"defenceLevel":17,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"rangeDef":5,"undead":true},"72":{"name":"Skeleton","hitpoints":29,"combatLevel":22,"attackSpeed":4,"attackLevel":15,"strengthLevel":18,"defenceLevel":17,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"rangeDef":5,"undead":true},"73":{"name":"Skeleton","hitpoints":29,"combatLevel":22,"attackSpeed":4,"attackLevel":15,"strengthLevel":18,"defenceLevel":17,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"rangeDef":5,"undead":true},"74":{"name":"Skeleton","hitpoints":24,"combatLevel":21,"attackSpeed":4,"attackLevel":17,"strengthLevel":17,"defenceLevel":17,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"rangeDef":5,"undead":true},"75":{"name":"Skeleton","hitpoints":24,"combatLevel":21,"attackSpeed":4,"attackLevel":17,"strengthLevel":17,"defenceLevel":17,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"rangeDef":5,"undead":true},"76":{"name":"Skeleton","hitpoints":24,"combatLevel":21,"attackSpeed":4,"attackLevel":17,"strengthLevel":17,"defenceLevel":17,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"rangeDef":5,"undead":true},"77":{"name":"Skeleton","hitpoints":17,"combatLevel":25,"attackSpeed":4,"attackLevel":24,"strengthLevel":24,"defenceLevel":24,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":11,"rangeDef":4,"magicDef":1,"bonusAttack":15,"bonusStrength":14,"undead":true},"78":{"name":"Skeleton","hitpoints":17,"combatLevel":25,"attackSpeed":4,"attackLevel":24,"strengthLevel":24,"defenceLevel":24,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":11,"rangeDef":4,"magicDef":1,"bonusAttack":15,"bonusStrength":14,"undead":true},"79":{"name":"Skeleton","hitpoints":17,"combatLevel":25,"attackSpeed":4,"attackLevel":24,"strengthLevel":24,"defenceLevel":24,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":11,"rangeDef":4,"magicDef":1,"bonusAttack":15,"bonusStrength":14,"undead":true},"80":{"name":"Skeleton","hitpoints":17,"combatLevel":25,"attackSpeed":4,"attackLevel":24,"strengthLevel":24,"defenceLevel":24,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":11,"rangeDef":4,"magicDef":1,"bonusAttack":15,"bonusStrength":14,"undead":true},"81":{"name":"Skeleton","hitpoints":17,"combatLevel":25,"attackSpeed":4,"attackLevel":24,"strengthLevel":24,"defenceLevel":24,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":11,"rangeDef":4,"magicDef":1,"bonusAttack":15,"bonusStrength":14,"undead":true},"82":{"name":"Skeleton","hitpoints":59,"combatLevel":45,"attackSpeed":4,"attackLevel":32,"strengthLevel":35,"defenceLevel":36,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":11,"rangeDef":4,"magicDef":1,"bonusAttack":15,"bonusStrength":14,"undead":true},"83":{"name":"Skeleton","hitpoints":59,"combatLevel":45,"attackSpeed":4,"attackLevel":32,"strengthLevel":35,"defenceLevel":36,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":11,"rangeDef":4,"magicDef":1,"bonusAttack":15,"bonusStrength":14,"undead":true},"84":{"name":"Skeleton Mage","hitpoints":17,"combatLevel":16,"attackSpeed":4,"attackLevel":14,"strengthLevel":14,"defenceLevel":14,"rangeLevel":1,"magicLevel":18,"undead":true},"85":{"name":"Ghost","hitpoints":25,"combatLevel":19,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"86":{"name":"Ghost","hitpoints":25,"combatLevel":19,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"87":{"name":"Ghost","hitpoints":25,"combatLevel":19,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"88":{"name":"Ghost","hitpoints":25,"combatLevel":19,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"89":{"name":"Ghost","hitpoints":25,"combatLevel":19,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"90":{"name":"Ghost","hitpoints":25,"combatLevel":19,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"91":{"name":"Ghost","hitpoints":25,"combatLevel":19,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"92":{"name":"Ghost","hitpoints":25,"combatLevel":19,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"93":{"name":"Ghost","hitpoints":25,"combatLevel":19,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"94":{"name":"Ghost","hitpoints":25,"combatLevel":19,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"95":{"name":"Ghost","hitpoints":25,"combatLevel":19,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"96":{"name":"Ghost","hitpoints":25,"combatLevel":19,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"97":{"name":"Ghost","hitpoints":25,"combatLevel":19,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"99":{"name":"Death wing","hitpoints":80,"combatLevel":83,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1},"100":{"name":"Rock Crab","hitpoints":50,"combatLevel":13,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"101":{"name":"Rocks","hitpoints":50,"combatLevel":13,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"102":{"name":"Rock Crab","hitpoints":50,"combatLevel":13,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"103":{"name":"Rocks","hitpoints":50,"combatLevel":13,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"104":{"name":"Hellhound","hitpoints":116,"combatLevel":122,"attackSpeed":4,"attackLevel":105,"strengthLevel":104,"defenceLevel":102,"rangeLevel":1,"magicLevel":1},"105":{"name":"Hellhound","hitpoints":116,"combatLevel":122,"attackSpeed":4,"attackLevel":105,"strengthLevel":104,"defenceLevel":102,"rangeLevel":1,"magicLevel":1},"106":{"name":"Wolf","hitpoints":69,"combatLevel":64,"attackSpeed":4,"attackLevel":50,"strengthLevel":55,"defenceLevel":52,"rangeLevel":1,"magicLevel":1},"107":{"name":"White wolf","hitpoints":34,"combatLevel":25,"attackSpeed":4,"attackLevel":20,"strengthLevel":16,"defenceLevel":22,"rangeLevel":1,"magicLevel":1},"108":{"name":"White wolf","hitpoints":44,"combatLevel":38,"attackSpeed":4,"attackLevel":30,"strengthLevel":31,"defenceLevel":32,"rangeLevel":1,"magicLevel":1},"109":{"name":"Big Wolf","hitpoints":74,"combatLevel":73,"attackSpeed":4,"attackLevel":60,"strengthLevel":61,"defenceLevel":62,"rangeLevel":1,"magicLevel":1},"110":{"name":"Wolf","hitpoints":34,"combatLevel":25,"attackSpeed":4,"attackLevel":20,"strengthLevel":16,"defenceLevel":22,"rangeLevel":1,"magicLevel":1},"112":{"name":"Wild dog","hitpoints":62,"combatLevel":63,"attackSpeed":4,"attackLevel":53,"strengthLevel":54,"defenceLevel":54,"rangeLevel":1,"magicLevel":1},"113":{"name":"Wild dog","hitpoints":62,"combatLevel":63,"attackSpeed":4,"attackLevel":53,"strengthLevel":54,"defenceLevel":54,"rangeLevel":1,"magicLevel":1},"114":{"name":"Guard dog","hitpoints":49,"combatLevel":44,"attackSpeed":4,"attackLevel":35,"strengthLevel":36,"defenceLevel":37,"rangeLevel":1,"magicLevel":1},"115":{"name":"Big Wolf","hitpoints":74,"combatLevel":73,"attackSpeed":4,"attackLevel":60,"strengthLevel":61,"defenceLevel":62,"rangeLevel":1,"magicLevel":1},"116":{"name":"Wolf","hitpoints":34,"combatLevel":25,"attackSpeed":4,"attackLevel":20,"strengthLevel":16,"defenceLevel":22,"rangeLevel":1,"magicLevel":1},"117":{"name":"Wolf","hitpoints":34,"combatLevel":25,"attackSpeed":4,"attackLevel":20,"strengthLevel":16,"defenceLevel":22,"rangeLevel":1,"magicLevel":1},"130":{"name":"Skeleton","hitpoints":29,"combatLevel":22,"attackSpeed":4,"attackLevel":15,"strengthLevel":18,"defenceLevel":17,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":11,"rangeDef":4,"magicDef":1},"131":{"name":"Guard dog","hitpoints":49,"combatLevel":44,"attackSpeed":4,"attackLevel":35,"strengthLevel":36,"defenceLevel":37,"rangeLevel":1,"magicLevel":1},"132":{"name":"Hobgoblin","hitpoints":62,"combatLevel":54,"attackSpeed":6,"attackLevel":45,"strengthLevel":43,"defenceLevel":43,"rangeLevel":1,"magicLevel":1,"stabDef":1,"slashDef":1,"bonusAttack":8,"bonusStrength":10},"133":{"name":"Troll","hitpoints":120,"combatLevel":91,"attackSpeed":4,"attackLevel":50,"strengthLevel":100,"defenceLevel":50,"stabDef":25,"slashDef":25,"crushDef":40,"rangeDef":200,"magicDef":200,"bonusAttack":40,"bonusStrength":70},"134":{"name":"Huge spider","hitpoints":90,"combatLevel":81,"attackSpeed":4,"attackLevel":59,"strengthLevel":70,"defenceLevel":69,"rangeLevel":1,"magicLevel":1},"135":{"name":"Hellhound","hitpoints":116,"combatLevel":122,"attackSpeed":4,"attackLevel":105,"strengthLevel":104,"defenceLevel":102,"rangeLevel":1,"magicLevel":1},"136":{"name":"Ogre","hitpoints":60,"combatLevel":53,"attackSpeed":6,"attackLevel":43,"strengthLevel":43,"defenceLevel":43,"rangeLevel":1,"magicLevel":1,"bonusAttack":22,"bonusStrength":20},"137":{"name":"Baby red dragon","hitpoints":65,"combatLevel":65,"attackSpeed":4,"attackLevel":55,"strengthLevel":55,"defenceLevel":55,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":50,"crushDef":50,"rangeDef":30,"magicDef":40},"138":{"name":"Kalphite Soldier","hitpoints":90,"combatLevel":85,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"stabDef":25,"slashDef":25,"crushDef":5,"rangeDef":50,"magicDef":50},"139":{"name":"Steel dragon","hitpoints":210,"combatLevel":246,"attackSpeed":4,"attackLevel":215,"strengthLevel":215,"defenceLevel":215,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":90,"magicDef":30},"140":{"name":"Dagannoth","hitpoints":142,"combatLevel":135,"attackSpeed":4,"attackLevel":114,"strengthLevel":117,"defenceLevel":98,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":50,"rangeDef":50,"magicDef":50,"bonusAttack":50,"bonusRangeStrength":50},"141":{"name":"Tok-Xil","hitpoints":60,"combatLevel":135,"attackSpeed":4,"attackLevel":120,"strengthLevel":180,"defenceLevel":90,"rangeLevel":180,"magicLevel":90},"142":{"name":"Demon","hitpoints":79,"combatLevel":82,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":71,"rangeLevel":1,"magicLevel":1},"143":{"name":"Rocnar","hitpoints":100,"combatLevel":97,"attackSpeed":6,"attackLevel":80,"strengthLevel":80,"defenceLevel":80,"bonusAttack":22,"bonusStrength":20},"231":{"name":"Wolf","hitpoints":34,"combatLevel":25,"attackSpeed":4,"attackLevel":20,"strengthLevel":16,"defenceLevel":22,"rangeLevel":1,"magicLevel":1},"232":{"name":"Jungle Wolf","hitpoints":69,"combatLevel":64,"attackSpeed":4,"attackLevel":50,"strengthLevel":55,"defenceLevel":52,"rangeLevel":1,"magicLevel":1},"239":{"name":"King Black Dragon","hitpoints":240,"combatLevel":276,"attackSpeed":3,"attackLevel":240,"strengthLevel":240,"defenceLevel":240,"rangeLevel":1,"magicLevel":240,"stabDef":70,"slashDef":90,"crushDef":90,"rangeDef":70,"magicDef":80,"dragon":true},"240":{"name":"Black demon","hitpoints":157,"combatLevel":172,"attackSpeed":4,"attackLevel":145,"strengthLevel":152,"defenceLevel":148,"rangeLevel":1,"magicLevel":1,"demon":true},"241":{"name":"Baby dragon","hitpoints":50,"combatLevel":48,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":50,"crushDef":50,"rangeDef":30,"magicDef":40,"dragon":true},"242":{"name":"Baby dragon","hitpoints":50,"combatLevel":48,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":50,"crushDef":50,"rangeDef":30,"magicDef":40,"dragon":true},"243":{"name":"Baby dragon","hitpoints":50,"combatLevel":48,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":50,"crushDef":50,"rangeDef":30,"magicDef":40,"dragon":true},"244":{"name":"Baby dragon","hitpoints":50,"combatLevel":48,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":50,"crushDef":50,"rangeDef":30,"magicDef":40,"dragon":true},"245":{"name":"Baby dragon","hitpoints":50,"combatLevel":48,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":50,"crushDef":50,"rangeDef":30,"magicDef":40,"dragon":true},"246":{"name":"Baby dragon","hitpoints":50,"combatLevel":48,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":50,"crushDef":50,"rangeDef":30,"magicDef":40,"dragon":true},"247":{"name":"Red dragon","hitpoints":140,"combatLevel":152,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":130,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"248":{"name":"Red dragon","hitpoints":140,"combatLevel":152,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":130,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"249":{"name":"Red dragon","hitpoints":140,"combatLevel":152,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":130,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"250":{"name":"Red dragon","hitpoints":140,"combatLevel":152,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":130,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"251":{"name":"Red dragon","hitpoints":140,"combatLevel":152,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":130,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"252":{"name":"Black dragon","hitpoints":190,"combatLevel":227,"attackSpeed":4,"attackLevel":200,"strengthLevel":200,"defenceLevel":200,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"253":{"name":"Black dragon","hitpoints":190,"combatLevel":227,"attackSpeed":4,"attackLevel":200,"strengthLevel":200,"defenceLevel":200,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"254":{"name":"Black dragon","hitpoints":190,"combatLevel":227,"attackSpeed":4,"attackLevel":200,"strengthLevel":200,"defenceLevel":200,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"255":{"name":"Black dragon","hitpoints":190,"combatLevel":227,"attackSpeed":4,"attackLevel":200,"strengthLevel":200,"defenceLevel":200,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"256":{"name":"Black dragon","hitpoints":190,"combatLevel":227,"attackSpeed":4,"attackLevel":200,"strengthLevel":200,"defenceLevel":200,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"257":{"name":"Black dragon","hitpoints":190,"combatLevel":227,"attackSpeed":4,"attackLevel":200,"strengthLevel":200,"defenceLevel":200,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"258":{"name":"Black dragon","hitpoints":190,"combatLevel":227,"attackSpeed":4,"attackLevel":200,"strengthLevel":200,"defenceLevel":200,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"259":{"name":"Black dragon","hitpoints":190,"combatLevel":227,"attackSpeed":4,"attackLevel":200,"strengthLevel":200,"defenceLevel":200,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"260":{"name":"Green dragon","hitpoints":75,"combatLevel":79,"attackSpeed":4,"attackLevel":68,"strengthLevel":68,"defenceLevel":68,"rangeLevel":1,"magicLevel":68,"stabDef":20,"slashDef":40,"crushDef":40,"rangeDef":20,"magicDef":30,"dragon":true},"261":{"name":"Green dragon","hitpoints":75,"combatLevel":79,"attackSpeed":4,"attackLevel":68,"strengthLevel":68,"defenceLevel":68,"rangeLevel":1,"magicLevel":68,"stabDef":20,"slashDef":40,"crushDef":40,"rangeDef":20,"magicDef":30,"dragon":true},"262":{"name":"Green dragon","hitpoints":75,"combatLevel":79,"attackSpeed":4,"attackLevel":68,"strengthLevel":68,"defenceLevel":68,"rangeLevel":1,"magicLevel":68,"stabDef":20,"slashDef":40,"crushDef":40,"rangeDef":20,"magicDef":30,"dragon":true},"263":{"name":"Green dragon","hitpoints":75,"combatLevel":79,"attackSpeed":4,"attackLevel":68,"strengthLevel":68,"defenceLevel":68,"rangeLevel":1,"magicLevel":68,"stabDef":20,"slashDef":40,"crushDef":40,"rangeDef":20,"magicDef":30,"dragon":true},"264":{"name":"Green dragon","hitpoints":75,"combatLevel":79,"attackSpeed":4,"attackLevel":68,"strengthLevel":68,"defenceLevel":68,"rangeLevel":1,"magicLevel":68,"stabDef":20,"slashDef":40,"crushDef":40,"rangeDef":20,"magicDef":30,"dragon":true},"265":{"name":"Blue dragon","hitpoints":105,"combatLevel":111,"attackSpeed":4,"attackLevel":95,"strengthLevel":95,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"266":{"name":"Blue dragon","hitpoints":105,"combatLevel":111,"attackSpeed":4,"attackLevel":95,"strengthLevel":95,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"267":{"name":"Blue dragon","hitpoints":105,"combatLevel":111,"attackSpeed":4,"attackLevel":95,"strengthLevel":95,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"268":{"name":"Blue dragon","hitpoints":105,"combatLevel":111,"attackSpeed":4,"attackLevel":95,"strengthLevel":95,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"269":{"name":"Blue dragon","hitpoints":105,"combatLevel":111,"attackSpeed":4,"attackLevel":95,"strengthLevel":95,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"270":{"name":"Bronze dragon","hitpoints":122,"combatLevel":131,"attackSpeed":4,"attackLevel":112,"strengthLevel":112,"defenceLevel":112,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":90,"magicDef":30,"dragon":true},"271":{"name":"Bronze dragon","hitpoints":122,"combatLevel":131,"attackSpeed":4,"attackLevel":112,"strengthLevel":112,"defenceLevel":112,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":90,"magicDef":30,"dragon":true},"272":{"name":"Iron dragon","hitpoints":165,"combatLevel":189,"attackSpeed":4,"attackLevel":165,"strengthLevel":165,"defenceLevel":165,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":90,"magicDef":30,"dragon":true},"273":{"name":"Iron dragon","hitpoints":165,"combatLevel":189,"attackSpeed":4,"attackLevel":165,"strengthLevel":165,"defenceLevel":165,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":90,"magicDef":30,"dragon":true},"274":{"name":"Steel dragon","hitpoints":210,"combatLevel":246,"attackSpeed":4,"attackLevel":215,"strengthLevel":215,"defenceLevel":215,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":90,"magicDef":30,"dragon":true},"275":{"name":"Steel dragon","hitpoints":210,"combatLevel":246,"attackSpeed":4,"attackLevel":215,"strengthLevel":215,"defenceLevel":215,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":90,"magicDef":30,"dragon":true},"289":{"name":"Ghoul","hitpoints":50,"combatLevel":42,"attackSpeed":6,"attackLevel":30,"strengthLevel":40,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"290":{"name":"Dwarf","hitpoints":16,"combatLevel":10,"attackSpeed":5,"attackLevel":8,"strengthLevel":8,"defenceLevel":6,"rangeLevel":1,"magicLevel":1,"stab":5,"magicDef":5,"bonusAttack":5,"bonusStrength":7},"291":{"name":"Chaos dwarf","hitpoints":61,"combatLevel":48,"attackSpeed":4,"attackLevel":38,"strengthLevel":42,"defenceLevel":28,"rangeLevel":1,"magicLevel":1,"stabDef":40,"slashDef":34,"crushDef":25,"rangeDef":35,"magicDef":10,"bonusAttack":13,"bonusStrength":9},"292":{"name":"Dwarf","hitpoints":16,"combatLevel":10,"attackSpeed":5},"293":{"name":"Adventurer Jon","hitpoints":16,"combatLevel":10,"attackSpeed":5},"294":{"name":"Dwarf","hitpoints":16,"combatLevel":10,"attackSpeed":5},"295":{"name":"Dwarf","hitpoints":16,"combatLevel":10,"attackSpeed":5},"296":{"name":"Dwarf","hitpoints":16,"combatLevel":10,"attackSpeed":5,"attackLevel":8,"strengthLevel":8,"defenceLevel":6,"rangeLevel":1,"magicLevel":1,"stab":5,"magicDef":5,"bonusAttack":5,"bonusStrength":7},"299":{"name":"Gunthor the brave","hitpoints":35,"combatLevel":29,"attackSpeed":6,"attackLevel":22,"strengthLevel":22,"defenceLevel":25,"rangeLevel":1,"magicLevel":1,"stabDef":12,"slashDef":14,"crushDef":10,"rangeDef":11,"bonusAttack":8,"bonusStrength":13},"300":{"name":"Jailer","hitpoints":47,"combatLevel":47,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":79,"slashDef":63,"crushDef":47},"301":{"name":"Black Heather","hitpoints":37,"combatLevel":34,"attackSpeed":4,"attackLevel":32,"strengthLevel":26,"defenceLevel":27,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":8,"crushDef":10,"bonusAttack":9,"bonusStrength":9},"302":{"name":"Donny the lad","hitpoints":37,"combatLevel":34,"attackSpeed":4,"attackLevel":32,"strengthLevel":26,"defenceLevel":27,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":8,"crushDef":10,"bonusAttack":9,"bonusStrength":9},"303":{"name":"Speedy Keith","hitpoints":37,"combatLevel":34,"attackSpeed":4,"attackLevel":32,"strengthLevel":26,"defenceLevel":27,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":8,"crushDef":10,"bonusAttack":9,"bonusStrength":9},"304":{"name":"Salarin the twisted","hitpoints":70,"combatLevel":70,"attackSpeed":4,"attackLevel":58,"strengthLevel":58,"defenceLevel":62,"rangeLevel":1,"magicLevel":1},"319":{"name":"Corporeal Beast","hitpoints":2000,"combatLevel":785,"attackSpeed":4,"attackLevel":320,"strengthLevel":320,"defenceLevel":310,"rangeLevel":150,"magicLevel":350,"stabDef":25,"slashDef":200,"crushDef":100,"rangeDef":230,"magicDef":150,"bonusAttack":50,"poisonImmune":true,"venomImmune":true},"320":{"name":"Dark energy core","hitpoints":25,"combatLevel":75,"attackSpeed":2,"attackLevel":1,"strengthLevel":1,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":10},"397":{"name":"Town Guard","hitpoints":22,"combatLevel":22,"attackSpeed":6,"attackLevel":15,"strengthLevel":15,"defenceLevel":16,"rangeLevel":26,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"bonusAttack":6,"bonusStrength":10},"398":{"name":"Town Guard","hitpoints":22,"combatLevel":22,"attackSpeed":6,"attackLevel":15,"strengthLevel":15,"defenceLevel":16,"rangeLevel":26,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"bonusAttack":6,"bonusStrength":10},"399":{"name":"Town Guard","hitpoints":22,"combatLevel":19,"attackSpeed":6,"attackLevel":15,"strengthLevel":15,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"bonusAttack":6,"bonusStrength":10},"400":{"name":"Town Guard","hitpoints":22,"combatLevel":19,"attackSpeed":6,"attackLevel":15,"strengthLevel":15,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"bonusAttack":6,"bonusStrength":10},"406":{"name":"Cave crawler","hitpoints":22,"combatLevel":23,"slayerLevel":10,"attackSpeed":4,"attackLevel":22,"strengthLevel":18,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"crushDef":5,"rangeDef":10,"magicDef":5},"407":{"name":"Cave crawler","hitpoints":22,"combatLevel":23,"slayerLevel":10,"attackSpeed":4,"attackLevel":22,"strengthLevel":18,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"crushDef":5,"rangeDef":10,"magicDef":5},"408":{"name":"Cave crawler","hitpoints":22,"combatLevel":23,"slayerLevel":10,"attackSpeed":4,"attackLevel":22,"strengthLevel":18,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"crushDef":5,"rangeDef":10,"magicDef":5},"409":{"name":"Cave crawler","hitpoints":22,"combatLevel":23,"slayerLevel":10,"attackSpeed":4,"attackLevel":22,"strengthLevel":18,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"crushDef":5,"rangeDef":10,"magicDef":5},"410":{"name":"Kurask","hitpoints":97,"combatLevel":106,"slayerLevel":70,"attackSpeed":4,"attackLevel":67,"strengthLevel":105,"defenceLevel":105,"rangeLevel":1,"magicLevel":1,"slashDef":20,"crushDef":20,"poisonImmune":true,"venomImmune":true},"411":{"name":"Kurask","hitpoints":97,"combatLevel":106,"slayerLevel":70,"attackSpeed":4,"attackLevel":67,"strengthLevel":105,"defenceLevel":105,"rangeLevel":1,"magicLevel":1,"slashDef":20,"crushDef":20,"poisonImmune":true,"venomImmune":true},"412":{"name":"Gargoyle","hitpoints":105,"combatLevel":111,"slayerLevel":75,"attackSpeed":4,"attackLevel":75,"strengthLevel":105,"defenceLevel":107,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":20,"magicDef":20},"413":{"name":"Gargoyle","hitpoints":105,"combatLevel":111,"slayerLevel":75,"attackSpeed":4,"attackLevel":75,"strengthLevel":105,"defenceLevel":107,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":20,"magicDef":20},"414":{"name":"Banshee","hitpoints":22,"combatLevel":23,"slayerLevel":15,"attackSpeed":4,"attackLevel":22,"strengthLevel":15,"defenceLevel":22,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"415":{"name":"Abyssal demon","hitpoints":150,"combatLevel":124,"slayerLevel":85,"attackSpeed":4,"attackLevel":97,"strengthLevel":67,"defenceLevel":135,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"crushDef":20,"rangeDef":20,"demon":true},"416":{"name":"Abyssal demon","hitpoints":150,"combatLevel":124,"slayerLevel":85,"attackSpeed":4,"attackLevel":97,"strengthLevel":67,"defenceLevel":135,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"crushDef":20,"rangeDef":20,"demon":true},"417":{"name":"Basilisk","hitpoints":75,"combatLevel":61,"slayerLevel":40,"attackSpeed":4,"attackLevel":30,"strengthLevel":45,"defenceLevel":75,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"magicDef":20},"418":{"name":"Basilisk","hitpoints":75,"combatLevel":61,"slayerLevel":40,"attackSpeed":4,"attackLevel":30,"strengthLevel":45,"defenceLevel":75,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"magicDef":20},"419":{"name":"Cockatrice","hitpoints":37,"combatLevel":37,"slayerLevel":25,"attackSpeed":4,"attackLevel":22,"strengthLevel":37,"defenceLevel":37,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"magicDef":10},"420":{"name":"Cockatrice","hitpoints":37,"combatLevel":37,"slayerLevel":25,"attackSpeed":4,"attackLevel":22,"strengthLevel":37,"defenceLevel":37,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"magicDef":10},"421":{"name":"Rockslug","hitpoints":27,"combatLevel":29,"slayerLevel":20,"attackSpeed":4,"attackLevel":22,"strengthLevel":27,"defenceLevel":27,"rangeLevel":1,"magicLevel":1},"422":{"name":"Rockslug","hitpoints":27,"combatLevel":29,"slayerLevel":20,"attackSpeed":4,"attackLevel":22,"strengthLevel":27,"defenceLevel":27,"rangeLevel":1,"magicLevel":1},"423":{"name":"Dust devil","hitpoints":105,"combatLevel":93,"slayerLevel":65,"attackSpeed":4,"attackLevel":105,"strengthLevel":70,"defenceLevel":40,"rangeLevel":1,"magicLevel":1},"427":{"name":"Turoth","hitpoints":81,"combatLevel":89,"slayerLevel":55,"attackSpeed":4,"attackLevel":58,"strengthLevel":88,"defenceLevel":88,"rangeLevel":1,"magicLevel":1,"slashDef":20,"crushDef":20},"428":{"name":"Turoth","hitpoints":79,"combatLevel":87,"slayerLevel":55,"attackSpeed":4,"attackLevel":56,"strengthLevel":86,"defenceLevel":86,"rangeLevel":1,"magicLevel":1,"slashDef":20,"crushDef":20},"429":{"name":"Turoth","hitpoints":77,"combatLevel":85,"slayerLevel":55,"attackSpeed":4,"attackLevel":54,"strengthLevel":84,"defenceLevel":84,"rangeLevel":1,"magicLevel":1,"slashDef":20,"crushDef":20},"430":{"name":"Turoth","hitpoints":76,"combatLevel":83,"slayerLevel":55,"attackSpeed":4,"attackLevel":53,"strengthLevel":83,"defenceLevel":83,"rangeLevel":1,"magicLevel":1,"slashDef":20,"crushDef":20},"433":{"name":"Pyrefiend","hitpoints":45,"combatLevel":43,"slayerLevel":30,"attackSpeed":4,"attackLevel":52,"strengthLevel":30,"defenceLevel":22,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":10},"434":{"name":"Pyrefiend","hitpoints":45,"combatLevel":43,"slayerLevel":30,"attackSpeed":4,"attackLevel":52,"strengthLevel":30,"defenceLevel":22,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":10},"435":{"name":"Pyrefiend","hitpoints":45,"combatLevel":43,"slayerLevel":30,"attackSpeed":4,"attackLevel":52,"strengthLevel":30,"defenceLevel":22,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":10},"436":{"name":"Pyrefiend","hitpoints":45,"combatLevel":43,"slayerLevel":30,"attackSpeed":4,"attackLevel":52,"strengthLevel":30,"defenceLevel":22,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":10},"437":{"name":"Jelly","hitpoints":75,"combatLevel":78,"slayerLevel":52,"attackSpeed":4,"attackLevel":45,"strengthLevel":45,"defenceLevel":120,"rangeLevel":1,"magicLevel":45},"438":{"name":"Jelly","hitpoints":75,"combatLevel":78,"slayerLevel":52,"attackSpeed":4,"attackLevel":45,"strengthLevel":45,"defenceLevel":120,"rangeLevel":1,"magicLevel":45},"439":{"name":"Jelly","hitpoints":75,"combatLevel":78,"slayerLevel":52,"attackSpeed":4,"attackLevel":45,"strengthLevel":45,"defenceLevel":120,"rangeLevel":1,"magicLevel":45},"440":{"name":"Jelly","hitpoints":75,"combatLevel":78,"slayerLevel":52,"attackSpeed":4,"attackLevel":45,"strengthLevel":45,"defenceLevel":120,"rangeLevel":1,"magicLevel":45},"441":{"name":"Jelly","hitpoints":75,"combatLevel":78,"slayerLevel":52,"attackSpeed":4,"attackLevel":45,"strengthLevel":45,"defenceLevel":120,"rangeLevel":1,"magicLevel":45},"442":{"name":"Jelly","hitpoints":75,"combatLevel":78,"slayerLevel":52,"attackSpeed":4,"attackLevel":45,"strengthLevel":45,"defenceLevel":120,"rangeLevel":1,"magicLevel":45},"443":{"name":"Infernal Mage","hitpoints":60,"combatLevel":66,"slayerLevel":45,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":60,"rangeLevel":1,"magicLevel":75,"magicDef":40},"444":{"name":"Infernal Mage","hitpoints":60,"combatLevel":66,"slayerLevel":45,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":60,"rangeLevel":1,"magicLevel":75,"magicDef":40},"445":{"name":"Infernal Mage","hitpoints":60,"combatLevel":66,"slayerLevel":45,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":60,"rangeLevel":1,"magicLevel":75,"magicDef":40},"446":{"name":"Infernal Mage","hitpoints":60,"combatLevel":66,"slayerLevel":45,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":60,"rangeLevel":1,"magicLevel":75,"magicDef":40},"447":{"name":"Infernal Mage","hitpoints":60,"combatLevel":66,"slayerLevel":45,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":60,"rangeLevel":1,"magicLevel":75,"magicDef":40},"448":{"name":"Crawling Hand","hitpoints":16,"combatLevel":8,"slayerLevel":5,"attackSpeed":4,"attackLevel":8,"strengthLevel":4,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"undead":true},"453":{"name":"Crawling Hand","hitpoints":19,"combatLevel":12,"slayerLevel":5,"attackSpeed":4,"attackLevel":11,"strengthLevel":7,"defenceLevel":7,"rangeLevel":1,"magicLevel":1,"undead":true},"454":{"name":"Crawling Hand","hitpoints":19,"combatLevel":12,"slayerLevel":5,"attackSpeed":4,"attackLevel":11,"strengthLevel":7,"defenceLevel":7,"rangeLevel":1,"magicLevel":1,"undead":true},"458":{"name":"Lizard","hitpoints":40,"combatLevel":42,"slayerLevel":22,"attackSpeed":4,"attackLevel":38,"strengthLevel":36,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"459":{"name":"Desert Lizard","hitpoints":25,"combatLevel":24,"slayerLevel":22,"attackSpeed":4,"attackLevel":20,"strengthLevel":22,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":15,"crushDef":15,"rangeDef":5},"460":{"name":"Desert Lizard","hitpoints":25,"combatLevel":24,"slayerLevel":22,"attackSpeed":4,"attackLevel":20,"strengthLevel":22,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":15,"crushDef":15,"rangeDef":5},"461":{"name":"Desert Lizard","hitpoints":25,"combatLevel":24,"slayerLevel":22,"attackSpeed":4,"attackLevel":20,"strengthLevel":22,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":15,"crushDef":15,"rangeDef":5},"462":{"name":"Small Lizard","hitpoints":15,"combatLevel":12,"slayerLevel":22,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"slashDef":5,"crushDef":5},"463":{"name":"Small Lizard","hitpoints":15,"combatLevel":12,"slayerLevel":22,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"slashDef":5,"crushDef":5},"464":{"name":"Harpie Bug Swarm","hitpoints":25,"combatLevel":46,"slayerLevel":33,"attackSpeed":4,"attackLevel":54,"strengthLevel":46,"defenceLevel":32,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":5,"crushDef":10,"rangeDef":10,"magicDef":5},"465":{"name":"Skeletal Wyvern","hitpoints":210,"combatLevel":140,"slayerLevel":72,"attackSpeed":6,"attackLevel":125,"strengthLevel":116,"defenceLevel":120,"rangeLevel":120,"magicLevel":125,"stabDef":140,"slashDef":90,"crushDef":90,"rangeDef":140,"magicDef":80,"dragon":true},"466":{"name":"Skeletal Wyvern","hitpoints":210,"combatLevel":140,"slayerLevel":72,"attackSpeed":6,"attackLevel":125,"strengthLevel":116,"defenceLevel":120,"rangeLevel":120,"magicLevel":125,"stabDef":140,"slashDef":90,"crushDef":90,"rangeDef":140,"magicDef":80,"dragon":true},"467":{"name":"Skeletal Wyvern","hitpoints":210,"combatLevel":140,"slayerLevel":72,"attackSpeed":6,"attackLevel":125,"strengthLevel":116,"defenceLevel":120,"rangeLevel":120,"magicLevel":125,"stabDef":140,"slashDef":90,"crushDef":90,"rangeDef":140,"magicDef":80,"dragon":true},"468":{"name":"Skeletal Wyvern","hitpoints":210,"combatLevel":140,"slayerLevel":72,"attackSpeed":6,"attackLevel":125,"strengthLevel":116,"defenceLevel":120,"rangeLevel":120,"magicLevel":125,"stabDef":140,"slashDef":90,"crushDef":90,"rangeDef":140,"magicDef":80,"dragon":true},"469":{"name":"Killerwatt","hitpoints":51,"combatLevel":55,"slayerLevel":37,"attackSpeed":2,"attackLevel":50,"strengthLevel":50,"defenceLevel":40,"rangeLevel":67,"magicLevel":67,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":20,"magicDef":20,"bonusAttack":30},"470":{"name":"Killerwatt","hitpoints":51,"combatLevel":55,"slayerLevel":37,"attackSpeed":2,"attackLevel":50,"strengthLevel":50,"defenceLevel":40,"rangeLevel":67,"magicLevel":67,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":20,"magicDef":20,"bonusAttack":30},"472":{"name":"Dark wizard","hitpoints":24,"combatLevel":20,"attackSpeed":4,"attackLevel":5,"strengthLevel":2,"defenceLevel":5,"rangeLevel":1,"magicLevel":6,"magicDef":3},"473":{"name":"Invrigar the Necromancer","hitpoints":24,"combatLevel":20,"attackSpeed":4,"attackLevel":17,"strengthLevel":17,"defenceLevel":14,"rangeLevel":1,"magicLevel":18,"magicDef":3},"474":{"name":"Dark wizard","hitpoints":12,"combatLevel":7,"attackSpeed":4,"attackLevel":5,"strengthLevel":2,"defenceLevel":5,"rangeLevel":1,"magicLevel":6,"magicDef":3},"475":{"name":"Hole in the wall","hitpoints":105,"combatLevel":49,"slayerLevel":35,"attackSpeed":4,"attackLevel":30,"strengthLevel":30,"defenceLevel":16,"rangeLevel":1,"magicLevel":1},"476":{"name":"Wall beast","hitpoints":105,"combatLevel":49,"slayerLevel":35,"attackSpeed":4,"attackLevel":30,"strengthLevel":30,"defenceLevel":16,"rangeLevel":1,"magicLevel":1},"477":{"name":"Giant frog","hitpoints":100,"combatLevel":99,"attackSpeed":4,"attackLevel":100,"strengthLevel":80,"defenceLevel":65,"rangeLevel":1,"magicLevel":1},"478":{"name":"Big frog","hitpoints":25,"combatLevel":24,"attackSpeed":4,"attackLevel":25,"strengthLevel":20,"defenceLevel":15,"rangeLevel":1,"magicLevel":1},"480":{"name":"Cave slime","hitpoints":25,"combatLevel":23,"slayerLevel":17,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":35,"rangeLevel":1,"magicLevel":13},"481":{"name":"Cave bug","hitpoints":5,"combatLevel":6,"slayerLevel":7,"attackSpeed":4,"attackLevel":6,"strengthLevel":5,"defenceLevel":6,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"crushDef":5,"rangeDef":10,"magicDef":5},"483":{"name":"Cave bug","hitpoints":93,"combatLevel":96,"slayerLevel":7,"attackSpeed":4,"attackLevel":82,"strengthLevel":80,"defenceLevel":84,"rangeLevel":1,"magicLevel":1,"stabDef":72,"slashDef":59,"crushDef":35,"rangeDef":95,"magicDef":25},"484":{"name":"Bloodveld","hitpoints":120,"combatLevel":76,"slayerLevel":50,"attackSpeed":4,"attackLevel":75,"strengthLevel":45,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"485":{"name":"Bloodveld","hitpoints":120,"combatLevel":76,"slayerLevel":50,"attackSpeed":4,"attackLevel":75,"strengthLevel":45,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"486":{"name":"Bloodveld","hitpoints":120,"combatLevel":76,"slayerLevel":50,"attackSpeed":4,"attackLevel":75,"strengthLevel":45,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"487":{"name":"Bloodveld","hitpoints":120,"combatLevel":76,"slayerLevel":50,"attackSpeed":4,"attackLevel":75,"strengthLevel":45,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"492":{"name":"Cave kraken","hitpoints":125,"combatLevel":127,"slayerLevel":87,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":150,"rangeLevel":1,"magicLevel":120,"rangeDef":100},"493":{"name":"Whirlpool","combatLevel":127,"slayerLevel":87,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"rangeDef":300,"magicDef":130},"494":{"name":"Kraken","hitpoints":255,"combatLevel":291,"slayerLevel":87,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"rangeDef":300,"magicDef":130},"496":{"name":"Whirlpool","combatLevel":127,"slayerLevel":87,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"rangeDef":300,"magicDef":130},"498":{"name":"Smoke devil","hitpoints":185,"combatLevel":160,"slayerLevel":93,"attackSpeed":4,"attackLevel":140,"strengthLevel":130,"defenceLevel":275,"rangeLevel":195,"magicLevel":1,"rangeDef":44,"magicDef":600,"poisonImmune":true,"venomImmune":true},"499":{"name":"Thermonuclear smoke devil","hitpoints":240,"combatLevel":301,"slayerLevel":93,"attackSpeed":2,"attackLevel":230,"strengthLevel":220,"defenceLevel":360,"rangeLevel":310,"magicLevel":1,"stabDef":11,"slashDef":4,"crushDef":9,"rangeDef":900,"magicDef":800,"poisonImmune":true,"venomImmune":true},"505":{"name":"Mugger","hitpoints":8,"combatLevel":6,"attackSpeed":4,"attackLevel":5,"strengthLevel":5,"defenceLevel":5,"rangeLevel":1,"magicLevel":1},"508":{"name":"Black Knight","hitpoints":42,"combatLevel":33,"attackSpeed":5,"attackLevel":25,"strengthLevel":25,"defenceLevel":25,"rangeLevel":1,"magicLevel":1,"stabDef":73,"slashDef":76,"crushDef":70,"rangeDef":72,"bonusAttack":18,"bonusStrength":16},"509":{"name":"Black Knight","hitpoints":42,"combatLevel":33,"attackSpeed":5,"attackLevel":25,"strengthLevel":25,"defenceLevel":25,"rangeLevel":1,"magicLevel":1,"stabDef":73,"slashDef":76,"crushDef":70,"rangeDef":72,"bonusAttack":18,"bonusStrength":16},"510":{"name":"Highwayman","hitpoints":13,"combatLevel":5,"attackSpeed":4,"attackLevel":2,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":6,"bonusStrength":7},"511":{"name":"Highwayman","hitpoints":13,"combatLevel":5,"attackSpeed":4,"attackLevel":2,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":6,"bonusStrength":7},"512":{"name":"Chaos druid","hitpoints":20,"combatLevel":13,"attackSpeed":4,"attackLevel":8,"strengthLevel":8,"defenceLevel":12,"rangeLevel":1,"magicLevel":10},"513":{"name":"Pirate","hitpoints":20,"combatLevel":23,"attackSpeed":5,"attackLevel":20,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"slashDef":1,"bonusAttack":9,"bonusStrength":10},"514":{"name":"Pirate","hitpoints":20,"combatLevel":23,"attackSpeed":5,"attackLevel":21,"strengthLevel":21,"defenceLevel":21,"rangeLevel":1,"magicLevel":1,"stabDef":3,"slashDef":2,"bonusAttack":8,"bonusStrength":10},"515":{"name":"Pirate","hitpoints":23,"combatLevel":26,"attackSpeed":5,"attackLevel":23,"strengthLevel":23,"defenceLevel":23,"rangeLevel":1,"magicLevel":1,"stabDef":3,"slashDef":2,"bonusAttack":8,"bonusStrength":10},"518":{"name":"Rogue","hitpoints":17,"combatLevel":15,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":13,"rangeLevel":1,"magicLevel":1,"stabDef":6,"slashDef":9,"crushDef":11,"bonusAttack":5,"bonusStrength":5},"522":{"name":"Tribesman","hitpoints":39,"combatLevel":32,"attackSpeed":4,"attackLevel":23,"strengthLevel":27,"defenceLevel":26,"rangeLevel":1,"magicLevel":1,"stabDef":4,"slashDef":6,"crushDef":6,"bonusAttack":8,"bonusStrength":5},"523":{"name":"Dark warrior","hitpoints":17,"combatLevel":8,"attackSpeed":4,"attackLevel":5,"strengthLevel":5,"defenceLevel":5,"rangeLevel":1,"magicLevel":1,"stabDef":96,"slashDef":79,"crushDef":59,"bonusAttack":20,"bonusStrength":16},"524":{"name":"Chaos druid warrior","hitpoints":40,"combatLevel":37,"attackSpeed":5,"attackLevel":32,"strengthLevel":34,"defenceLevel":25,"rangeLevel":1,"magicLevel":1,"stabDef":13,"slashDef":17,"crushDef":14,"rangeDef":14,"bonusAttack":9,"bonusStrength":5},"525":{"name":"Necromancer","hitpoints":40,"combatLevel":26,"attackSpeed":4,"attackLevel":18,"strengthLevel":18,"defenceLevel":18,"rangeLevel":1,"magicLevel":18},"537":{"name":"Zygomite","hitpoints":65,"combatLevel":74,"slayerLevel":57,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"rangeLevel":65,"magicLevel":65,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":20,"magicDef":20,"bonusAttack":30},"561":{"name":"Sorebones","hitpoints":52,"combatLevel":57,"attackSpeed":4,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"562":{"name":"Sorebones","hitpoints":52,"combatLevel":57,"attackSpeed":4,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"563":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"564":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"565":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"566":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"567":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"568":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"569":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"570":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"571":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"572":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"573":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"574":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"575":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"576":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"577":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"578":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"579":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"580":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"581":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"582":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"583":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"584":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"585":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"586":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"587":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"588":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"589":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"590":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"591":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"592":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"593":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"594":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"595":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"596":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"597":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"598":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"599":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"600":{"name":"Barrelchest","hitpoints":134,"combatLevel":190,"attackSpeed":5,"attackLevel":170,"strengthLevel":145,"defenceLevel":140,"rangeLevel":1,"magicLevel":90,"bonusAttack":80,"bonusStrength":80},"613":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"614":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"615":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"616":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"617":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"618":{"name":"Zombie pirate","hitpoints":52,"combatLevel":57,"attackSpeed":3,"attackLevel":49,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"619":{"name":"Zombie swab","hitpoints":50,"combatLevel":55,"attackSpeed":4,"attackLevel":45,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"620":{"name":"Zombie swab","hitpoints":50,"combatLevel":55,"attackSpeed":4,"attackLevel":45,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"621":{"name":"Zombie swab","hitpoints":50,"combatLevel":55,"attackSpeed":4,"attackLevel":45,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"622":{"name":"Zombie swab","hitpoints":50,"combatLevel":55,"attackSpeed":4,"attackLevel":45,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"623":{"name":"Zombie swab","hitpoints":50,"combatLevel":55,"attackSpeed":4,"attackLevel":45,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"624":{"name":"Zombie swab","hitpoints":50,"combatLevel":55,"attackSpeed":4,"attackLevel":45,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"undead":true},"625":{"name":"Evil spirit","hitpoints":90,"combatLevel":150,"attackSpeed":4,"attackLevel":170,"strengthLevel":146,"defenceLevel":100,"rangeLevel":1,"magicLevel":1},"626":{"name":"Fever spider","hitpoints":40,"combatLevel":49,"slayerLevel":42,"attackSpeed":4,"attackLevel":60,"strengthLevel":30,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stab":1,"slash":1,"crush":1,"range":1,"magic":1,"stabDef":20,"slashDef":15,"crushDef":10,"rangeDef":15,"magicDef":15},"639":{"name":"Tyras guard","hitpoints":110,"combatLevel":110,"attackSpeed":5,"attackLevel":85,"strengthLevel":95,"defenceLevel":100,"magicLevel":1,"stabDef":87,"slashDef":84,"crushDef":76,"rangeDef":79,"bonusAttack":20,"bonusStrength":30},"642":{"name":"Arrg","hitpoints":140,"combatLevel":113,"attackSpeed":4,"attackLevel":70,"strengthLevel":140,"defenceLevel":40,"rangeLevel":70,"stabDef":35,"slashDef":60,"crushDef":35,"rangeDef":200,"magicDef":200,"bonusAttack":60,"bonusStrength":100},"643":{"name":"Arrg","hitpoints":140,"combatLevel":113,"attackSpeed":4,"attackLevel":70,"strengthLevel":140,"defenceLevel":40,"rangeLevel":70,"stabDef":35,"slashDef":60,"crushDef":35,"rangeDef":200,"magicDef":200,"bonusAttack":60,"bonusStrength":100},"645":{"name":"Ice wolf","hitpoints":70,"combatLevel":96,"attackSpeed":4,"attackLevel":100,"strengthLevel":90,"defenceLevel":70,"rangeLevel":1,"magicLevel":1},"646":{"name":"Ice wolf","hitpoints":70,"combatLevel":96,"attackSpeed":4,"attackLevel":100,"strengthLevel":90,"defenceLevel":70,"rangeLevel":1,"magicLevel":1},"647":{"name":"Ice wolf","hitpoints":70,"combatLevel":132,"attackSpeed":4,"attackLevel":150,"strengthLevel":150,"defenceLevel":70},"648":{"name":"Ice troll","hitpoints":80,"combatLevel":124,"attackSpeed":4,"attackLevel":140,"strengthLevel":120,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"649":{"name":"Ice troll","hitpoints":80,"combatLevel":123,"attackSpeed":4,"attackLevel":120,"strengthLevel":120,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"650":{"name":"Ice troll","hitpoints":100,"combatLevel":120,"attackSpeed":4,"attackLevel":100,"strengthLevel":100,"defenceLevel":120,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"651":{"name":"Ice troll","hitpoints":80,"combatLevel":121,"attackSpeed":4,"attackLevel":100,"strengthLevel":120,"defenceLevel":120,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"652":{"name":"Ice troll","hitpoints":100,"combatLevel":120,"attackSpeed":4,"attackLevel":100,"strengthLevel":100,"defenceLevel":120,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"653":{"name":"Ice troll","hitpoints":100,"combatLevel":120,"attackSpeed":4,"attackLevel":100,"strengthLevel":100,"defenceLevel":120,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"654":{"name":"Ice troll","hitpoints":80,"combatLevel":121,"attackSpeed":4,"attackLevel":100,"strengthLevel":120,"defenceLevel":120,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"655":{"name":"Goblin","hitpoints":12,"combatLevel":5,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"656":{"name":"Goblin","hitpoints":12,"combatLevel":5,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"657":{"name":"Goblin","hitpoints":12,"combatLevel":5,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"658":{"name":"Goblin","hitpoints":12,"combatLevel":5,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"659":{"name":"Goblin","hitpoints":12,"combatLevel":5,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"660":{"name":"Goblin","hitpoints":12,"combatLevel":5,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"661":{"name":"Goblin","hitpoints":12,"combatLevel":5,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"662":{"name":"Goblin","hitpoints":12,"combatLevel":5,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"663":{"name":"Goblin","hitpoints":12,"combatLevel":5,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"664":{"name":"Goblin","hitpoints":12,"combatLevel":5,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"665":{"name":"Goblin","hitpoints":12,"combatLevel":5,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"666":{"name":"Goblin","hitpoints":12,"combatLevel":5,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"667":{"name":"Goblin","hitpoints":12,"combatLevel":5,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"668":{"name":"Goblin","hitpoints":12,"combatLevel":5,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"674":{"name":"Goblin","hitpoints":12,"combatLevel":5,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"677":{"name":"Goblin","hitpoints":12,"combatLevel":5,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"678":{"name":"Goblin","hitpoints":12,"combatLevel":5,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"680":{"name":"Giant skeleton","hitpoints":110,"combatLevel":100,"attackSpeed":6,"attackLevel":84,"strengthLevel":80,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":40,"rangeDef":40,"bonusStrength":15},"681":{"name":"Giant skeleton","hitpoints":110,"combatLevel":100,"attackSpeed":6,"attackLevel":84,"strengthLevel":80,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":40,"rangeDef":40,"bonusStrength":15},"682":{"name":"Damis","hitpoints":90,"combatLevel":103,"attackSpeed":4,"attackLevel":90,"strengthLevel":90,"defenceLevel":90,"rangeLevel":1,"magicLevel":1,"stabDef":60,"slashDef":60,"crushDef":60,"rangeDef":60,"magicDef":60,"bonusStrength":80},"683":{"name":"Damis","hitpoints":200,"combatLevel":174,"attackSpeed":4,"attackLevel":160,"strengthLevel":100,"defenceLevel":160,"rangeLevel":1,"magicLevel":1,"stabDef":100,"slashDef":100,"crushDef":100,"rangeDef":120,"magicDef":80,"bonusStrength":100},"685":{"name":"Stranger","hitpoints":80,"combatLevel":95,"attackSpeed":4,"attackLevel":90,"strengthLevel":80,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"magic":1,"stabDef":81,"slashDef":93,"crushDef":98,"rangeDef":82,"magicDef":1,"bonusStrength":40},"690":{"name":"Bandit","hitpoints":65,"combatLevel":74,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"rangeLevel":1,"magicLevel":1},"695":{"name":"Bandit","hitpoints":50,"combatLevel":57,"attackSpeed":4,"attackLevel":50,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1},"699":{"name":"Ice troll","hitpoints":80,"combatLevel":124,"attackSpeed":4,"attackLevel":140,"strengthLevel":120,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"700":{"name":"Ice troll","hitpoints":80,"combatLevel":123,"attackSpeed":4,"attackLevel":120,"strengthLevel":120,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"701":{"name":"Ice troll","hitpoints":100,"combatLevel":120,"attackSpeed":4,"attackLevel":100,"strengthLevel":100,"defenceLevel":120,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"702":{"name":"Ice troll","hitpoints":80,"combatLevel":121,"attackSpeed":4,"attackLevel":100,"strengthLevel":120,"defenceLevel":120,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"703":{"name":"Ice troll","hitpoints":100,"combatLevel":120,"attackSpeed":4,"attackLevel":100,"strengthLevel":100,"defenceLevel":120,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"704":{"name":"Ice troll","hitpoints":100,"combatLevel":120,"attackSpeed":4,"attackLevel":100,"strengthLevel":100,"defenceLevel":120,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"705":{"name":"Ice troll","hitpoints":80,"combatLevel":121,"attackSpeed":4,"attackLevel":100,"strengthLevel":120,"defenceLevel":120,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"710":{"name":"Ice wolf","hitpoints":70,"combatLevel":132,"attackSpeed":4,"attackLevel":150,"strengthLevel":150,"defenceLevel":70},"711":{"name":"Ice wolf","hitpoints":70,"combatLevel":132,"attackSpeed":4,"attackLevel":150,"strengthLevel":150,"defenceLevel":70},"712":{"name":"Ice wolf","hitpoints":70,"combatLevel":132,"attackSpeed":4,"attackLevel":150,"strengthLevel":150,"defenceLevel":70},"713":{"name":"Ice wolf","hitpoints":70,"combatLevel":132,"attackSpeed":4,"attackLevel":150,"strengthLevel":150,"defenceLevel":70},"714":{"name":"Ice wolf","hitpoints":70,"combatLevel":132,"attackSpeed":4,"attackLevel":150,"strengthLevel":150,"defenceLevel":70},"715":{"name":"Ice wolf","hitpoints":70,"combatLevel":132,"attackSpeed":4,"attackLevel":150,"strengthLevel":150,"defenceLevel":70},"717":{"name":"Mummy","hitpoints":86,"attackSpeed":4,"undead":true},"720":{"name":"Mummy","hitpoints":91,"combatLevel":103,"attackSpeed":4,"undead":true},"721":{"name":"Mummy","hitpoints":91,"combatLevel":103,"attackSpeed":4,"undead":true},"722":{"name":"Mummy","hitpoints":91,"combatLevel":103,"attackSpeed":4,"undead":true},"723":{"name":"Mummy","hitpoints":91,"combatLevel":103,"attackSpeed":4,"undead":true},"724":{"name":"Mummy","hitpoints":86,"attackSpeed":4,"undead":true},"725":{"name":"Mummy","hitpoints":91,"combatLevel":103,"attackSpeed":4,"undead":true},"726":{"name":"Mummy","hitpoints":91,"combatLevel":103,"attackSpeed":4,"undead":true},"727":{"name":"Mummy","hitpoints":91,"combatLevel":103,"attackSpeed":4,"undead":true},"728":{"name":"Mummy","hitpoints":91,"combatLevel":103,"attackSpeed":4,"undead":true},"729":{"name":"Scarabs","hitpoints":25,"combatLevel":92,"attackSpeed":1,"attackLevel":255,"strengthLevel":2,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"stabDef":15,"slashDef":15,"crushDef":15,"rangeDef":15,"magicDef":15},"734":{"name":"Bandit","hitpoints":30,"combatLevel":56,"attackSpeed":4,"attackLevel":59,"strengthLevel":70,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"slashDef":9,"crushDef":8,"magicDef":10,"bonusAttack":9,"bonusStrength":9},"735":{"name":"Bandit","hitpoints":30,"combatLevel":56,"attackSpeed":4,"attackLevel":59,"strengthLevel":70,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"slashDef":9,"crushDef":8,"magicDef":10,"bonusAttack":9,"bonusStrength":9},"736":{"name":"Bandit","hitpoints":30,"combatLevel":41,"attackSpeed":4,"attackLevel":40,"strengthLevel":50,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"slashDef":9,"crushDef":8,"magicDef":10,"bonusAttack":9,"bonusStrength":9},"737":{"name":"Bandit","hitpoints":30,"combatLevel":41,"attackSpeed":4,"attackLevel":40,"strengthLevel":50,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"slashDef":9,"crushDef":8,"magicDef":10,"bonusAttack":9,"bonusStrength":9},"738":{"name":"Bandit champion","hitpoints":50,"combatLevel":70,"attackSpeed":4,"attackLevel":59,"strengthLevel":80,"defenceLevel":50,"stabDef":9,"slashDef":8,"crushDef":10,"bonusAttack":9,"bonusStrength":9},"762":{"name":"Baby Roc","hitpoints":50,"combatLevel":75,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":150},"763":{"name":"Giant Roc","hitpoints":250,"combatLevel":172,"attackSpeed":6,"attackLevel":130,"strengthLevel":130,"defenceLevel":100,"rangeLevel":130,"magicLevel":1,"magicDef":150},"764":{"name":"Shadow","hitpoints":15,"combatLevel":73,"attackSpeed":4,"attackLevel":90,"strengthLevel":120,"defenceLevel":5,"rangeLevel":1,"magicLevel":90,"stabDef":30,"slashDef":30,"crushDef":30,"rangeDef":30,"magicDef":30},"773":{"name":"Skraeling","hitpoints":1,"combatLevel":2,"attackSpeed":4,"attackLevel":3,"strengthLevel":3,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"774":{"name":"Skraeling","hitpoints":1,"combatLevel":2,"attackSpeed":4,"attackLevel":3,"strengthLevel":3,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"785":{"name":"Me","hitpoints":45,"combatLevel":79,"attackSpeed":4,"attackLevel":75,"strengthLevel":78,"defenceLevel":74,"rangeLevel":1,"magicLevel":1},"786":{"name":"Me","hitpoints":45,"combatLevel":79,"attackSpeed":4,"attackLevel":75,"strengthLevel":78,"defenceLevel":74,"rangeLevel":1,"magicLevel":1},"787":{"name":"Suqah","hitpoints":106,"combatLevel":111,"attackSpeed":6,"attackLevel":95,"strengthLevel":95,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":90},"788":{"name":"Suqah","hitpoints":106,"combatLevel":111,"attackSpeed":6,"attackLevel":95,"strengthLevel":95,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":90},"789":{"name":"Suqah","hitpoints":106,"combatLevel":111,"attackSpeed":6,"attackLevel":95,"strengthLevel":95,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":90},"790":{"name":"Suqah","hitpoints":106,"combatLevel":111,"attackSpeed":6,"attackLevel":95,"strengthLevel":95,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":90},"791":{"name":"Suqah","hitpoints":106,"combatLevel":111,"attackSpeed":6,"attackLevel":95,"strengthLevel":95,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":90},"792":{"name":"Suqah","hitpoints":106,"combatLevel":111,"attackSpeed":6,"attackLevel":95,"strengthLevel":95,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":90},"793":{"name":"Suqah","hitpoints":106,"combatLevel":111,"attackSpeed":6,"attackLevel":95,"strengthLevel":95,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":90},"794":{"name":"Scarab mage","hitpoints":50,"combatLevel":93,"attackSpeed":15,"attackLevel":90,"strengthLevel":90,"defenceLevel":90,"rangeLevel":1,"magicLevel":70,"magic":70,"stabDef":40,"slashDef":90,"crushDef":90,"magicDef":34},"795":{"name":"Locust rider","hitpoints":90,"combatLevel":106,"attackSpeed":6,"attackLevel":100,"strengthLevel":90,"defenceLevel":90,"rangeLevel":1,"magicLevel":1,"stabDef":90,"slashDef":90,"crushDef":40},"796":{"name":"Locust rider","hitpoints":90,"combatLevel":98,"attackSpeed":6,"attackLevel":105,"strengthLevel":90,"defenceLevel":50,"rangeLevel":90,"magicLevel":1,"range":80,"stabDef":50,"slashDef":90,"crushDef":50,"rangeDef":66,"magicDef":34,"bonusRangeStrength":80},"797":{"name":"Giant scarab","hitpoints":130,"combatLevel":191,"attackSpeed":4,"attackLevel":169,"strengthLevel":190,"defenceLevel":169,"rangeLevel":190,"magicLevel":1,"stabDef":70,"slashDef":99,"crushDef":99,"rangeDef":149,"magicDef":159},"798":{"name":"Giant scarab","hitpoints":130,"combatLevel":191,"attackSpeed":4,"attackLevel":169,"strengthLevel":190,"defenceLevel":169,"rangeLevel":190,"magicLevel":1,"stabDef":70,"slashDef":99,"crushDef":99,"rangeDef":149,"magicDef":159},"799":{"name":"Scarab mage","hitpoints":50,"combatLevel":66,"attackSpeed":15,"magic":70},"800":{"name":"Locust rider","hitpoints":90,"combatLevel":68,"attackSpeed":6,"attackLevel":100,"strengthLevel":90,"defenceLevel":90,"rangeLevel":1,"magicLevel":1,"stabDef":90,"slashDef":90,"crushDef":40},"801":{"name":"Locust rider","hitpoints":90,"combatLevel":68,"attackSpeed":6,"attackLevel":105,"strengthLevel":90,"defenceLevel":50,"rangeLevel":90,"magicLevel":1,"range":80,"stabDef":50,"slashDef":90,"crushDef":50,"rangeDef":66,"magicDef":34,"bonusRangeStrength":80},"817":{"name":"Elvarg","hitpoints":80,"combatLevel":83,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":70,"stabDef":20,"slashDef":40,"crushDef":40,"rangeDef":20,"magicDef":30},"820":{"name":"Wormbrain","hitpoints":5,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"823":{"name":"Melzar the Mad","hitpoints":44,"combatLevel":43,"attackSpeed":4,"attackLevel":37,"strengthLevel":37,"defenceLevel":34,"rangeLevel":1,"magicLevel":40,"poisonImmune":true,"venomImmune":true},"852":{"name":"Icelord","hitpoints":60,"combatLevel":51,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1},"853":{"name":"Icelord","hitpoints":60,"combatLevel":51,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1},"854":{"name":"Icelord","hitpoints":60,"combatLevel":51,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1},"855":{"name":"Icelord","hitpoints":60,"combatLevel":51,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1},"866":{"name":"Zogre","hitpoints":71,"combatLevel":44,"attackSpeed":6,"attackLevel":20,"strengthLevel":36,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"867":{"name":"Zogre","hitpoints":71,"combatLevel":44,"attackSpeed":6,"attackLevel":20,"strengthLevel":36,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"868":{"name":"Zogre","hitpoints":71,"combatLevel":44,"attackSpeed":6,"attackLevel":20,"strengthLevel":36,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"869":{"name":"Zogre","hitpoints":71,"combatLevel":44,"attackSpeed":6,"attackLevel":20,"strengthLevel":36,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"870":{"name":"Zogre","hitpoints":71,"combatLevel":44,"attackSpeed":6,"attackLevel":20,"strengthLevel":36,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"871":{"name":"Zogre","hitpoints":71,"combatLevel":44,"attackSpeed":6,"attackLevel":20,"strengthLevel":36,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"872":{"name":"Skogre","hitpoints":71,"combatLevel":44,"attackSpeed":6,"attackLevel":20,"strengthLevel":36,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"873":{"name":"Zogre","hitpoints":71,"combatLevel":44,"attackSpeed":6,"attackLevel":20,"strengthLevel":36,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"874":{"name":"Zogre","hitpoints":71,"combatLevel":44,"attackSpeed":6,"attackLevel":20,"strengthLevel":36,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"875":{"name":"Zogre","hitpoints":71,"combatLevel":44,"attackSpeed":6,"attackLevel":20,"strengthLevel":36,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"876":{"name":"Zogre","hitpoints":71,"combatLevel":44,"attackSpeed":6,"attackLevel":20,"strengthLevel":36,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"877":{"name":"Zogre","hitpoints":71,"combatLevel":44,"attackSpeed":6,"attackLevel":20,"strengthLevel":36,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"878":{"name":"Skogre","hitpoints":71,"combatLevel":44,"attackSpeed":6,"attackLevel":20,"strengthLevel":36,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"879":{"name":"Skogre","hitpoints":71,"combatLevel":44,"attackSpeed":6,"attackLevel":20,"strengthLevel":36,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"880":{"name":"Zombie","hitpoints":50,"combatLevel":39,"attackSpeed":6,"attackLevel":30,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"undead":true},"882":{"name":"Slash Bash","hitpoints":100,"combatLevel":111,"attackSpeed":6,"attackLevel":100,"strengthLevel":120,"defenceLevel":60,"rangeLevel":100,"magicLevel":1,"stabDef":30,"slashDef":30,"crushDef":30,"bonusAttack":22,"undead":true},"891":{"name":"Moss Guardian","hitpoints":120,"combatLevel":84,"attackSpeed":6,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stab":1,"slash":1,"crush":1,"range":1,"magic":1,"bonusAttack":66,"bonusStrength":62},"911":{"name":"Agrith Naar","hitpoints":100,"combatLevel":100,"attackSpeed":4,"attackLevel":83,"strengthLevel":90,"defenceLevel":82,"rangeLevel":100,"magicLevel":100,"demon":true},"924":{"name":"Skeleton","hitpoints":18,"combatLevel":13,"attackSpeed":4,"undead":true},"925":{"name":"Rock","hitpoints":140,"combatLevel":111,"attackSpeed":4,"attackLevel":70,"strengthLevel":110,"defenceLevel":70,"stabDef":35,"slashDef":60,"crushDef":35,"rangeDef":200,"magicDef":200,"bonusAttack":60,"bonusStrength":100},"926":{"name":"Stick","hitpoints":135,"combatLevel":104,"attackSpeed":6,"attackLevel":60,"strengthLevel":110,"defenceLevel":60,"stabDef":30,"slashDef":30,"crushDef":50,"rangeDef":200,"magicDef":200,"bonusAttack":50,"bonusStrength":80},"927":{"name":"Pee Hat","hitpoints":120,"combatLevel":91,"attackSpeed":6,"attackLevel":50,"strengthLevel":100,"defenceLevel":50,"stabDef":25,"slashDef":25,"crushDef":40,"rangeDef":200,"magicDef":200,"bonusAttack":40,"bonusStrength":70},"928":{"name":"Kraka","hitpoints":120,"combatLevel":91,"attackSpeed":6,"attackLevel":50,"strengthLevel":100,"defenceLevel":50,"stabDef":25,"slashDef":25,"crushDef":40,"rangeDef":200,"magicDef":200,"bonusAttack":40,"bonusStrength":70},"931":{"name":"Thrower Troll","hitpoints":95,"combatLevel":67,"attackSpeed":7,"attackLevel":30,"strengthLevel":80,"defenceLevel":30,"rangeLevel":60,"rangeDef":200,"magicDef":200},"932":{"name":"Thrower Troll","hitpoints":95,"combatLevel":67,"attackSpeed":7,"attackLevel":30,"strengthLevel":80,"defenceLevel":30,"rangeLevel":60,"rangeDef":200,"magicDef":200},"933":{"name":"Thrower Troll","hitpoints":95,"combatLevel":67,"attackSpeed":7,"attackLevel":30,"strengthLevel":80,"defenceLevel":30,"rangeLevel":60,"rangeDef":200,"magicDef":200},"934":{"name":"Thrower Troll","hitpoints":95,"combatLevel":67,"attackSpeed":7,"attackLevel":30,"strengthLevel":80,"defenceLevel":30,"rangeLevel":60,"rangeDef":200,"magicDef":200},"935":{"name":"Thrower Troll","hitpoints":95,"combatLevel":67,"attackSpeed":7,"attackLevel":30,"strengthLevel":80,"defenceLevel":30,"rangeLevel":60,"rangeDef":200,"magicDef":200},"936":{"name":"Mountain troll","hitpoints":90,"combatLevel":69,"attackSpeed":6,"attackLevel":40,"strengthLevel":75,"defenceLevel":40,"crushDef":10,"rangeDef":200,"magicDef":200,"bonusAttack":20,"bonusStrength":20},"937":{"name":"Mountain troll","hitpoints":90,"combatLevel":69,"attackSpeed":6,"attackLevel":40,"strengthLevel":75,"defenceLevel":40,"crushDef":10,"rangeDef":200,"magicDef":200,"bonusAttack":20,"bonusStrength":20},"938":{"name":"Mountain troll","hitpoints":90,"combatLevel":69,"attackSpeed":6,"attackLevel":40,"strengthLevel":75,"defenceLevel":40,"crushDef":10,"rangeDef":200,"magicDef":200,"bonusAttack":20,"bonusStrength":20},"939":{"name":"Mountain troll","hitpoints":90,"combatLevel":69,"attackSpeed":6,"attackLevel":40,"strengthLevel":75,"defenceLevel":40,"crushDef":10,"rangeDef":200,"magicDef":200,"bonusAttack":20,"bonusStrength":20},"940":{"name":"Mountain troll","hitpoints":90,"combatLevel":69,"attackSpeed":6,"attackLevel":40,"strengthLevel":75,"defenceLevel":40,"crushDef":10,"rangeDef":200,"magicDef":200,"bonusAttack":20,"bonusStrength":20},"941":{"name":"Mountain troll","hitpoints":90,"combatLevel":69,"attackSpeed":6,"attackLevel":40,"strengthLevel":75,"defenceLevel":40,"crushDef":10,"rangeDef":200,"magicDef":200,"bonusAttack":20,"bonusStrength":20},"942":{"name":"Mountain troll","hitpoints":90,"combatLevel":69,"attackSpeed":6,"attackLevel":40,"strengthLevel":75,"defenceLevel":40,"crushDef":10,"rangeDef":200,"magicDef":200,"bonusAttack":20,"bonusStrength":20},"946":{"name":"Ghast","hitpoints":22,"combatLevel":30,"attackSpeed":4,"attackLevel":22,"strengthLevel":22,"defenceLevel":18,"rangeLevel":1,"magicLevel":1},"949":{"name":"Mummy","hitpoints":68,"combatLevel":84,"attackSpeed":4,"undead":true},"950":{"name":"Mummy","hitpoints":68,"combatLevel":84,"attackSpeed":4,"undead":true},"951":{"name":"Mummy","hitpoints":68,"combatLevel":84,"attackSpeed":4,"undead":true},"952":{"name":"Mummy","hitpoints":68,"combatLevel":84,"attackSpeed":4,"undead":true},"953":{"name":"Mummy","hitpoints":68,"combatLevel":84,"attackSpeed":4,"undead":true},"955":{"name":"Kalphite Worker","hitpoints":40,"combatLevel":28,"attackSpeed":4,"attackLevel":20,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":1,"rangeDef":10,"magicDef":10},"956":{"name":"Kalphite Worker","hitpoints":40,"combatLevel":28,"attackSpeed":4,"attackLevel":20,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":1,"rangeDef":10,"magicDef":10},"957":{"name":"Kalphite Soldier","hitpoints":90,"combatLevel":85,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"stabDef":25,"slashDef":25,"crushDef":5,"rangeDef":50,"magicDef":50},"958":{"name":"Kalphite Soldier","hitpoints":90,"combatLevel":85,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"stabDef":25,"slashDef":25,"crushDef":5,"rangeDef":50,"magicDef":50},"959":{"name":"Kalphite Guardian","hitpoints":171,"combatLevel":141,"attackSpeed":4,"attackLevel":110,"strengthLevel":110,"defenceLevel":110,"rangeLevel":1,"magicLevel":1,"stabDef":25,"slashDef":25,"crushDef":5,"rangeDef":50,"magicDef":50},"960":{"name":"Kalphite Guardian","hitpoints":171,"combatLevel":141,"attackSpeed":4,"attackLevel":110,"strengthLevel":110,"defenceLevel":110,"rangeLevel":1,"magicLevel":1,"stabDef":25,"slashDef":25,"crushDef":5,"rangeDef":50,"magicDef":50},"961":{"name":"Kalphite Worker","hitpoints":40,"combatLevel":28,"attackSpeed":4,"attackLevel":20,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":1,"rangeDef":10,"magicDef":10},"962":{"name":"Kalphite Guardian","hitpoints":171,"combatLevel":141,"attackSpeed":4,"attackLevel":110,"strengthLevel":110,"defenceLevel":110,"rangeLevel":1,"magicLevel":1,"stabDef":25,"slashDef":25,"crushDef":5,"rangeDef":50,"magicDef":50},"963":{"name":"Kalphite Queen","hitpoints":255,"combatLevel":333,"attackSpeed":4,"attackLevel":300,"strengthLevel":300,"defenceLevel":300,"rangeLevel":1,"magicLevel":150,"stabDef":50,"slashDef":50,"crushDef":10,"rangeDef":100,"magicDef":100},"965":{"name":"Kalphite Queen","hitpoints":255,"combatLevel":333,"attackSpeed":4,"attackLevel":300,"strengthLevel":300,"defenceLevel":300,"rangeLevel":1,"magicLevel":150,"stabDef":100,"slashDef":100,"crushDef":100,"rangeDef":10,"magicDef":10},"970":{"name":"Dagannoth","hitpoints":70,"combatLevel":74,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":50,"rangeLevel":1,"magicLevel":1},"971":{"name":"Dagannoth","hitpoints":70,"combatLevel":74,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":50,"rangeLevel":1,"magicLevel":1},"972":{"name":"Dagannoth","hitpoints":70,"combatLevel":74,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":50,"rangeLevel":1,"magicLevel":1},"973":{"name":"Dagannoth","hitpoints":120,"combatLevel":92,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":71,"rangeLevel":1,"magicLevel":1,"rangeDef":50,"magicDef":50},"974":{"name":"Dagannoth","hitpoints":120,"combatLevel":92,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":71,"rangeLevel":1,"magicLevel":1,"rangeDef":50,"magicDef":50},"975":{"name":"Dagannoth","hitpoints":120,"combatLevel":92,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":71,"rangeLevel":1,"magicLevel":1,"rangeDef":50,"magicDef":50},"976":{"name":"Dagannoth","hitpoints":160,"combatLevel":100},"977":{"name":"Dagannoth","hitpoints":160,"combatLevel":100},"978":{"name":"Dagannoth","hitpoints":160,"combatLevel":100},"979":{"name":"Dagannoth","hitpoints":160,"combatLevel":100},"980":{"name":"Dagannoth mother","hitpoints":120,"combatLevel":100,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"981":{"name":"Dagannoth mother","hitpoints":120,"combatLevel":100,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"982":{"name":"Dagannoth mother","hitpoints":120,"combatLevel":100,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"983":{"name":"Dagannoth mother","hitpoints":120,"combatLevel":100,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"984":{"name":"Dagannoth mother","hitpoints":120,"combatLevel":100,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"985":{"name":"Dagannoth mother","hitpoints":120,"combatLevel":100,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"986":{"name":"Dagannoth mother","hitpoints":120,"combatLevel":100,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"987":{"name":"Dagannoth mother","hitpoints":120,"combatLevel":100,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"988":{"name":"Dagannoth mother","hitpoints":120,"combatLevel":100,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"990":{"name":"Sigmund","hitpoints":60,"combatLevel":50,"attackSpeed":4,"attackLevel":45,"strengthLevel":45,"defenceLevel":24,"rangeLevel":1,"magicLevel":1,"magic":8,"venomImmune":true},"991":{"name":"Sigmund","hitpoints":60,"combatLevel":50,"attackSpeed":4,"attackLevel":45,"strengthLevel":45,"defenceLevel":24,"rangeLevel":1,"magicLevel":1,"magic":8,"venomImmune":true},"992":{"name":"Sigmund","hitpoints":60,"combatLevel":50,"attackSpeed":4,"attackLevel":45,"strengthLevel":45,"defenceLevel":24,"rangeLevel":1,"magicLevel":1,"magic":8,"venomImmune":true},"993":{"name":"Sigmund","hitpoints":60,"combatLevel":50,"attackSpeed":4,"attackLevel":45,"strengthLevel":45,"defenceLevel":24,"rangeLevel":1,"magicLevel":1,"magic":8,"venomImmune":true},"994":{"name":"Sigmund","hitpoints":60,"combatLevel":50,"attackSpeed":4,"attackLevel":45,"strengthLevel":45,"defenceLevel":24,"rangeLevel":1,"magicLevel":1,"magic":8,"venomImmune":true},"1024":{"name":"Zygomite","hitpoints":75,"combatLevel":86,"slayerLevel":57,"attackSpeed":4,"attackLevel":75,"strengthLevel":75,"defenceLevel":75,"rangeLevel":75,"magicLevel":75,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":20,"magicDef":20,"bonusAttack":30},"1037":{"name":"Snake","hitpoints":25,"combatLevel":35,"attackSpeed":3,"attackLevel":25,"strengthLevel":50,"defenceLevel":25,"rangeLevel":1,"magicLevel":1},"1039":{"name":"Albino bat","hitpoints":33,"combatLevel":52,"attackSpeed":4,"attackLevel":57,"strengthLevel":57,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"1041":{"name":"Giant mosquito","hitpoints":3,"combatLevel":13,"attackSpeed":12,"attackLevel":5,"strengthLevel":1,"defenceLevel":45,"rangeLevel":1,"magicLevel":1,"stabDef":2,"slashDef":2,"crushDef":5,"magicDef":2},"1042":{"name":"Jungle horror","hitpoints":45,"combatLevel":70,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":55,"rangeLevel":1,"magicLevel":1},"1043":{"name":"Jungle horror","hitpoints":45,"combatLevel":70,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":55,"rangeLevel":1,"magicLevel":1},"1044":{"name":"Jungle horror","hitpoints":45,"combatLevel":70,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":55,"rangeLevel":1,"magicLevel":1},"1045":{"name":"Jungle horror","hitpoints":45,"combatLevel":70,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":55,"rangeLevel":1,"magicLevel":1},"1046":{"name":"Jungle horror","hitpoints":45,"combatLevel":70,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":55,"rangeLevel":1,"magicLevel":1},"1047":{"name":"Cave horror","hitpoints":55,"combatLevel":80,"slayerLevel":58,"attackLevel":80,"strengthLevel":77,"defenceLevel":62,"rangeLevel":1,"magicLevel":80},"1048":{"name":"Cave horror","hitpoints":55,"combatLevel":80,"slayerLevel":58,"attackLevel":80,"strengthLevel":77,"defenceLevel":62,"rangeLevel":1,"magicLevel":80},"1049":{"name":"Cave horror","hitpoints":55,"combatLevel":80,"slayerLevel":58,"attackLevel":80,"strengthLevel":77,"defenceLevel":62,"rangeLevel":1,"magicLevel":80},"1050":{"name":"Cave horror","hitpoints":55,"combatLevel":80,"slayerLevel":58,"attackLevel":80,"strengthLevel":77,"defenceLevel":62,"rangeLevel":1,"magicLevel":80},"1051":{"name":"Cave horror","hitpoints":55,"combatLevel":80,"slayerLevel":58,"attackLevel":80,"strengthLevel":77,"defenceLevel":62,"rangeLevel":1,"magicLevel":80},"1060":{"name":"Angry bear","combatLevel":40},"1061":{"name":"Angry unicorn","hitpoints":50,"combatLevel":45},"1062":{"name":"Angry giant rat","hitpoints":50,"combatLevel":45},"1063":{"name":"Angry giant rat","hitpoints":50,"combatLevel":45},"1064":{"name":"Angry giant rat","hitpoints":50,"combatLevel":45},"1065":{"name":"Angry goblin","hitpoints":50,"combatLevel":45},"1066":{"name":"Fear reaper","hitpoints":25,"combatLevel":42,"attackSpeed":4,"attackLevel":39,"strengthLevel":41,"defenceLevel":40,"rangeLevel":1,"magicLevel":1},"1067":{"name":"Confusion beast","hitpoints":28,"combatLevel":43,"attackSpeed":4,"attackLevel":42,"strengthLevel":41,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"poisonImmune":true,"venomImmune":true},"1068":{"name":"Confusion beast","hitpoints":28,"combatLevel":43,"attackSpeed":4,"attackLevel":42,"strengthLevel":41,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"poisonImmune":true,"venomImmune":true},"1069":{"name":"Confusion beast","hitpoints":28,"combatLevel":43,"attackSpeed":4,"attackLevel":42,"strengthLevel":41,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"poisonImmune":true,"venomImmune":true},"1070":{"name":"Confusion beast","hitpoints":28,"combatLevel":43,"attackSpeed":4,"attackLevel":42,"strengthLevel":41,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"poisonImmune":true,"venomImmune":true},"1071":{"name":"Confusion beast","hitpoints":28,"combatLevel":43,"attackSpeed":4,"attackLevel":42,"strengthLevel":41,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"poisonImmune":true,"venomImmune":true},"1072":{"name":"Hopeless creature","hitpoints":25,"combatLevel":40,"attackSpeed":4,"attackLevel":38,"strengthLevel":36,"defenceLevel":39,"rangeLevel":1,"magicLevel":1},"1073":{"name":"Hopeless creature","hitpoints":25,"combatLevel":40,"attackSpeed":4,"attackLevel":38,"strengthLevel":36,"defenceLevel":39,"rangeLevel":1,"magicLevel":1},"1074":{"name":"Hopeless creature","hitpoints":25,"combatLevel":40,"attackSpeed":4,"attackLevel":38,"strengthLevel":36,"defenceLevel":39,"rangeLevel":1,"magicLevel":1},"1075":{"name":"Tolna","hitpoints":37,"combatLevel":46,"attackLevel":42,"strengthLevel":41,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"rangeDef":50,"magicDef":50},"1076":{"name":"Tolna","hitpoints":37,"combatLevel":46,"attackSpeed":5,"attackLevel":42,"strengthLevel":41,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"rangeDef":50,"magicDef":50},"1077":{"name":"Tolna","hitpoints":37,"combatLevel":46,"attackLevel":42,"strengthLevel":41,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"rangeDef":50,"magicDef":50},"1097":{"name":"Sea Snake Young","hitpoints":85,"combatLevel":90,"slayerLevel":40,"attackSpeed":4,"attackLevel":90,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1},"1098":{"name":"Sea Snake Hatchling","hitpoints":50,"combatLevel":62,"slayerLevel":40,"attackSpeed":4,"attackLevel":60,"strengthLevel":55,"defenceLevel":50,"magicLevel":1},"1101":{"name":"Giant Sea Snake","hitpoints":100,"combatLevel":149,"attackSpeed":4,"attackLevel":170,"strengthLevel":90,"defenceLevel":160,"rangeLevel":130,"magicLevel":1},"1118":{"name":"Man","hitpoints":7,"combatLevel":4,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"1119":{"name":"Woman","hitpoints":10,"combatLevel":3,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"1126":{"name":"Barrelchest (hard)","hitpoints":255,"combatLevel":380,"attackSpeed":5,"attackLevel":306,"strengthLevel":261,"defenceLevel":140,"rangeLevel":1,"magicLevel":162,"bonusAttack":80,"bonusStrength":80},"1127":{"name":"Giant scarab (hard)","hitpoints":255,"combatLevel":316,"attackSpeed":4,"attackLevel":305,"strengthLevel":342,"defenceLevel":169,"rangeLevel":342,"magicLevel":1,"stabDef":70,"slashDef":99,"crushDef":99,"rangeDef":149,"magicDef":159},"1128":{"name":"Dessous (hard)","hitpoints":255,"combatLevel":217,"attackSpeed":3,"attackLevel":198,"strengthLevel":198,"defenceLevel":99,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":150,"crushDef":150,"bonusAttack":50,"bonusStrength":50},"1129":{"name":"Kamil (hard)","hitpoints":255,"combatLevel":273,"attackSpeed":4,"attackLevel":380,"strengthLevel":160,"defenceLevel":135,"rangeLevel":1,"magicLevel":1,"stabDef":35,"slashDef":60,"crushDef":35,"bonusAttack":60,"bonusStrength":100},"1130":{"name":"Woman","hitpoints":13,"combatLevel":4,"attackSpeed":4,"attackLevel":2,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"stabDef":1,"slashDef":1,"crushDef":1},"1131":{"name":"Woman","hitpoints":10,"combatLevel":3,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"1134":{"name":"Damis (hard)","hitpoints":198,"combatLevel":200,"attackSpeed":4,"attackLevel":198,"strengthLevel":198,"defenceLevel":90,"rangeLevel":1,"magicLevel":1,"stabDef":60,"slashDef":60,"crushDef":60,"rangeDef":60,"magicDef":60,"bonusStrength":80},"1135":{"name":"Damis (hard)","hitpoints":255,"combatLevel":272,"attackSpeed":4,"attackLevel":320,"strengthLevel":200,"defenceLevel":160,"rangeLevel":1,"magicLevel":1,"stabDef":100,"slashDef":100,"crushDef":100,"rangeDef":120,"magicDef":80,"bonusStrength":100},"1139":{"name":"Woman","hitpoints":13,"combatLevel":4,"attackSpeed":4,"attackLevel":2,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"stabDef":1,"slashDef":1,"crushDef":1},"1140":{"name":"Woman","hitpoints":13,"combatLevel":12,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"1141":{"name":"Woman","hitpoints":10,"combatLevel":3,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"1142":{"name":"Woman","hitpoints":23,"combatLevel":14,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"1144":{"name":"Paladin","hitpoints":66,"combatLevel":62,"attackSpeed":5,"attackLevel":54,"strengthLevel":54,"defenceLevel":54,"rangeLevel":1,"magicLevel":1,"stabDef":87,"slashDef":84,"crushDef":76,"rangeDef":79,"bonusAttack":20,"bonusStrength":22},"1153":{"name":"Ogre","hitpoints":60,"combatLevel":63,"attackSpeed":6,"attackLevel":54,"strengthLevel":54,"defenceLevel":54,"rangeLevel":1,"magicLevel":1,"stabDef":19,"slashDef":23,"crushDef":24,"bonusAttack":8,"bonusStrength":6},"1163":{"name":"Tree spirit","hitpoints":85,"combatLevel":101,"attackSpeed":4,"attackLevel":90,"strengthLevel":95,"defenceLevel":80,"rangeLevel":1,"magicLevel":1},"1173":{"name":"Chicken","hitpoints":3,"combatLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"1174":{"name":"Chicken","hitpoints":3,"combatLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"1204":{"name":"Alomone","hitpoints":25,"combatLevel":13,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":6,"crushDef":8},"1206":{"name":"Clivet","hitpoints":25,"combatLevel":13,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":6,"crushDef":8},"1207":{"name":"Hazeel Cultist","hitpoints":25,"combatLevel":13,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":6,"crushDef":8},"1208":{"name":"Khazard Guard","hitpoints":25,"combatLevel":23,"attackSpeed":4,"attackLevel":20,"strengthLevel":18,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":35,"slashDef":29,"crushDef":21,"bonusAttack":10,"bonusStrength":14},"1210":{"name":"Khazard Guard","hitpoints":25,"combatLevel":23,"attackSpeed":4,"attackLevel":20,"strengthLevel":18,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":35,"slashDef":29,"crushDef":21,"bonusAttack":10,"bonusStrength":14},"1211":{"name":"Khazard Guard","hitpoints":25,"combatLevel":23,"attackSpeed":4,"attackLevel":20,"strengthLevel":18,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":35,"slashDef":29,"crushDef":21,"bonusAttack":10,"bonusStrength":14},"1213":{"name":"General Khazard","hitpoints":170,"combatLevel":112,"attackSpeed":4,"attackLevel":75,"strengthLevel":78,"defenceLevel":80,"rangeLevel":1,"magicLevel":1},"1224":{"name":"Bouncer","hitpoints":116,"combatLevel":137,"attackSpeed":4,"attackLevel":120,"strengthLevel":120,"defenceLevel":120,"rangeLevel":1,"magicLevel":1},"1225":{"name":"Khazard Ogre","hitpoints":60,"combatLevel":63,"attackSpeed":6,"attackLevel":54,"strengthLevel":53,"defenceLevel":53,"rangeLevel":1,"magicLevel":1,"bonusAttack":22,"bonusStrength":20},"1226":{"name":"Khazard Scorpion","hitpoints":40,"combatLevel":44,"attackSpeed":4,"attackLevel":40,"strengthLevel":39,"defenceLevel":34,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":15,"crushDef":15,"rangeDef":5},"1227":{"name":"Arzinian Avatar of Strength","attackSpeed":4},"1228":{"name":"Arzinian Avatar of Strength","hitpoints":100,"combatLevel":125,"attackSpeed":4,"attackLevel":110,"strengthLevel":100,"defenceLevel":95,"stabDef":20,"slashDef":20,"crushDef":20,"rangeDef":80,"magicDef":15},"1229":{"name":"Arzinian Avatar of Strength","hitpoints":70,"combatLevel":75,"attackSpeed":4,"attackLevel":70,"strengthLevel":65,"defenceLevel":50,"stabDef":15,"slashDef":15,"crushDef":15,"rangeDef":40,"magicDef":10},"1230":{"name":"Arzinian Avatar of Ranging","attackSpeed":4},"1231":{"name":"Arzinian Avatar of Ranging","hitpoints":100,"combatLevel":125,"attackSpeed":4,"attackLevel":10,"strengthLevel":100,"defenceLevel":120,"rangeLevel":110,"stabDef":15,"slashDef":15,"crushDef":15,"rangeDef":20,"magicDef":80,"bonusRangeStrength":10},"1232":{"name":"Arzinian Avatar of Ranging","hitpoints":70,"combatLevel":75,"attackSpeed":4,"attackLevel":10,"strengthLevel":40,"defenceLevel":75,"rangeLevel":75,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":15,"magicDef":40,"bonusRangeStrength":5},"1233":{"name":"Arzinian Avatar of Magic","attackSpeed":4},"1234":{"name":"Arzinian Avatar of Magic","hitpoints":100,"combatLevel":125,"attackSpeed":4,"attackLevel":10,"strengthLevel":90,"defenceLevel":120,"magicLevel":120,"stabDef":80,"slashDef":80,"crushDef":80,"rangeDef":15,"magicDef":20},"1235":{"name":"Arzinian Avatar of Magic","hitpoints":70,"combatLevel":75,"attackSpeed":4,"attackLevel":10,"strengthLevel":50,"defenceLevel":75,"magicLevel":75,"stabDef":40,"slashDef":40,"crushDef":40,"rangeDef":10,"magicDef":15},"1261":{"name":"Ram","hitpoints":8,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"1262":{"name":"Ram","hitpoints":8,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"1263":{"name":"Ram","hitpoints":8,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"1264":{"name":"Ram","hitpoints":8,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"1265":{"name":"Ram","hitpoints":8,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"1267":{"name":"Vulture","hitpoints":10,"combatLevel":31,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"1268":{"name":"Vulture","hitpoints":10,"combatLevel":31,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"1273":{"name":"Experiment","hitpoints":40,"combatLevel":51,"attackSpeed":4,"attackLevel":40,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1},"1274":{"name":"Experiment","hitpoints":100,"combatLevel":25,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"1275":{"name":"Experiment","hitpoints":100,"combatLevel":25,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"1276":{"name":"Loar Shadow","hitpoints":38,"combatLevel":40,"attackSpeed":4,"attackLevel":45,"strengthLevel":30,"defenceLevel":26,"undead":true},"1277":{"name":"Loar Shade","hitpoints":38,"combatLevel":40,"attackSpeed":4,"attackLevel":45,"strengthLevel":30,"defenceLevel":26,"undead":true},"1279":{"name":"Phrin Shadow","hitpoints":56,"combatLevel":60,"attackSpeed":4,"attackLevel":64,"strengthLevel":47,"defenceLevel":42,"undead":true},"1280":{"name":"Phrin Shade","hitpoints":56,"combatLevel":60,"attackSpeed":4,"attackLevel":64,"strengthLevel":47,"defenceLevel":42,"undead":true},"1281":{"name":"Riyl Shadow","hitpoints":76,"combatLevel":80,"attackSpeed":4,"attackLevel":88,"strengthLevel":55,"defenceLevel":60,"undead":true},"1282":{"name":"Riyl Shade","hitpoints":76,"combatLevel":80,"attackSpeed":4,"attackLevel":88,"strengthLevel":55,"defenceLevel":60,"undead":true},"1283":{"name":"Asyn Shadow","hitpoints":90,"combatLevel":100,"attackSpeed":4,"attackLevel":102,"strengthLevel":84,"defenceLevel":70,"undead":true},"1284":{"name":"Asyn Shade","hitpoints":90,"combatLevel":100,"attackSpeed":4,"attackLevel":102,"strengthLevel":84,"defenceLevel":70,"undead":true},"1285":{"name":"Fiyr Shadow","hitpoints":110,"combatLevel":140,"attackSpeed":6,"attackLevel":120,"strengthLevel":100,"defenceLevel":85,"undead":true},"1286":{"name":"Fiyr Shade","hitpoints":110,"combatLevel":120,"attackSpeed":6,"attackLevel":120,"strengthLevel":100,"defenceLevel":85,"undead":true},"1293":{"name":"Afflicted","hitpoints":30,"combatLevel":37,"attackSpeed":4,"attackLevel":30,"strengthLevel":30,"defenceLevel":40,"rangeLevel":1,"magicLevel":1},"1294":{"name":"Afflicted","hitpoints":28,"combatLevel":34,"attackSpeed":4,"attackLevel":28,"strengthLevel":28,"defenceLevel":38,"rangeLevel":1,"magicLevel":1},"1297":{"name":"Afflicted","hitpoints":26,"combatLevel":32,"attackSpeed":4,"attackLevel":26,"strengthLevel":26,"defenceLevel":36,"rangeLevel":1,"magicLevel":1},"1298":{"name":"Afflicted","hitpoints":24,"combatLevel":30,"attackSpeed":4,"attackLevel":24,"strengthLevel":24,"defenceLevel":34,"rangeLevel":1,"magicLevel":1},"1338":{"name":"Seagull","hitpoints":6,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"1339":{"name":"Seagull","hitpoints":10,"combatLevel":3,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"1354":{"name":"Dwarf gang member","hitpoints":40,"combatLevel":44,"attackSpeed":5,"attackLevel":40,"strengthLevel":40,"defenceLevel":35,"rangeLevel":1,"magicLevel":1,"stabDef":7,"slashDef":7,"rangeDef":7},"1355":{"name":"Dwarf gang member","hitpoints":25,"combatLevel":48,"attackSpeed":5,"attackLevel":80,"strengthLevel":30,"defenceLevel":25,"rangeLevel":1,"magicLevel":1,"stabDef":7,"slashDef":7,"rangeDef":7},"1356":{"name":"Dwarf gang member","hitpoints":25,"combatLevel":49,"attackSpeed":5,"attackLevel":30,"strengthLevel":60,"defenceLevel":57,"rangeLevel":1,"magicLevel":1,"stabDef":7,"slashDef":7,"rangeDef":7},"1362":{"name":"Slagilith","hitpoints":60,"combatLevel":92,"attackSpeed":4,"attackLevel":60,"strengthLevel":120,"defenceLevel":75,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":5,"rangeDef":50,"magicDef":5,"bonusAttack":10},"1364":{"name":"Slagilith","hitpoints":60,"combatLevel":92,"attackSpeed":4,"attackLevel":60,"strengthLevel":120,"defenceLevel":75,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":5,"rangeDef":50,"magicDef":5,"bonusAttack":10},"1365":{"name":"Fire elemental","hitpoints":30,"combatLevel":35,"attackSpeed":4,"attackLevel":35,"strengthLevel":35,"defenceLevel":20,"rangeLevel":20,"magicLevel":20},"1366":{"name":"Earth elemental","hitpoints":35,"combatLevel":35,"attackSpeed":6,"attackLevel":20,"strengthLevel":35,"defenceLevel":35,"rangeLevel":30,"magicLevel":10},"1367":{"name":"Earth elemental","hitpoints":35,"combatLevel":35,"attackSpeed":6,"attackLevel":20,"strengthLevel":35,"defenceLevel":35,"rangeLevel":30,"magicLevel":10,"poisonImmune":true,"venomImmune":true},"1369":{"name":"Air elemental","hitpoints":30,"combatLevel":34,"attackSpeed":4,"attackLevel":40,"strengthLevel":20,"defenceLevel":30,"rangeLevel":20,"magicLevel":40},"1370":{"name":"Water elemental","hitpoints":30,"combatLevel":34,"attackSpeed":4,"attackLevel":30,"strengthLevel":30,"defenceLevel":30,"rangeLevel":30,"magicLevel":30},"1377":{"name":"The Kendal","hitpoints":50,"combatLevel":70,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":60,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":20,"bonusAttack":5,"bonusStrength":10},"1378":{"name":"The Kendal","hitpoints":50,"combatLevel":70,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":60,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":20,"bonusAttack":5,"bonusStrength":10},"1379":{"name":"Camp dweller","hitpoints":30,"combatLevel":31,"attackSpeed":4,"attackLevel":25,"strengthLevel":30,"defenceLevel":25,"rangeLevel":1,"magicLevel":1},"1380":{"name":"Camp dweller","hitpoints":30,"combatLevel":31,"attackSpeed":4,"attackLevel":25,"strengthLevel":30,"defenceLevel":25,"rangeLevel":1,"magicLevel":1},"1381":{"name":"Camp dweller","hitpoints":30,"combatLevel":31,"attackSpeed":4,"attackLevel":25,"strengthLevel":30,"defenceLevel":25,"rangeLevel":1,"magicLevel":1},"1382":{"name":"Camp dweller","hitpoints":30,"combatLevel":31,"attackSpeed":4,"attackLevel":25,"strengthLevel":30,"defenceLevel":25,"rangeLevel":1,"magicLevel":1},"1383":{"name":"Camp dweller","hitpoints":25,"combatLevel":25,"attackSpeed":4,"attackLevel":20,"strengthLevel":25,"defenceLevel":20,"rangeLevel":1,"magicLevel":1},"1401":{"name":"Dwarf","hitpoints":16,"combatLevel":10,"attackSpeed":5},"1402":{"name":"Dwarf","hitpoints":16,"combatLevel":10,"attackSpeed":5},"1403":{"name":"Dwarf","hitpoints":16,"combatLevel":10,"attackSpeed":5},"1404":{"name":"Dwarf","hitpoints":16,"combatLevel":10,"attackSpeed":5},"1405":{"name":"Dwarf","hitpoints":16,"combatLevel":10,"attackSpeed":5,"attackLevel":8,"strengthLevel":8,"defenceLevel":6,"rangeLevel":1,"magicLevel":1,"stab":5,"magicDef":5,"bonusAttack":5,"bonusStrength":7},"1406":{"name":"Dwarf","hitpoints":16,"combatLevel":10,"attackSpeed":5},"1407":{"name":"Dwarf","hitpoints":16,"combatLevel":10,"attackSpeed":5},"1408":{"name":"Dwarf","hitpoints":16,"combatLevel":10,"attackSpeed":5},"1409":{"name":"Black Guard","hitpoints":30,"combatLevel":25,"attackSpeed":4,"attackLevel":20,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":3,"slashDef":4,"crushDef":4,"rangeDef":3,"magicDef":2,"bonusAttack":5,"bonusStrength":7},"1410":{"name":"Black Guard","hitpoints":30,"combatLevel":25,"attackSpeed":4,"attackLevel":20,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":3,"slashDef":4,"crushDef":4,"rangeDef":3,"magicDef":2,"bonusAttack":5,"bonusStrength":7},"1411":{"name":"Black Guard","hitpoints":30,"combatLevel":25,"attackSpeed":4,"attackLevel":20,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":3,"slashDef":4,"crushDef":4,"rangeDef":3,"magicDef":2,"bonusAttack":5,"bonusStrength":7},"1412":{"name":"Black Guard","hitpoints":30,"combatLevel":25,"attackSpeed":4,"attackLevel":20,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":3,"slashDef":4,"crushDef":4,"rangeDef":3,"magicDef":2,"bonusAttack":5,"bonusStrength":7},"1429":{"name":"Foreman","hitpoints":20,"combatLevel":23,"attackSpeed":4,"attackLevel":20,"strengthLevel":20,"defenceLevel":20,"slashDef":1,"crushDef":1},"1430":{"name":"Shipyard worker","hitpoints":10,"combatLevel":11,"attackSpeed":6,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"bonusAttack":6,"bonusStrength":6},"1432":{"name":"Black demon","hitpoints":157,"combatLevel":172,"attackSpeed":4,"attackLevel":145,"strengthLevel":152,"defenceLevel":148,"rangeLevel":1,"magicLevel":1,"demon":true},"1443":{"name":"Jungle Demon","hitpoints":170,"combatLevel":195,"attackSpeed":6,"attackLevel":170,"strengthLevel":170,"defenceLevel":170,"rangeLevel":1,"magicLevel":170,"slashDef":50,"magicDef":50,"bonusAttack":50,"bonusStrength":50,"demon":true},"1447":{"name":"Pirate","hitpoints":20,"combatLevel":23,"attackSpeed":4,"attackLevel":20,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"slashDef":1,"bonusAttack":9,"bonusStrength":10},"1448":{"name":"Thief","hitpoints":17,"combatLevel":16,"attackSpeed":4,"attackLevel":14,"strengthLevel":13,"defenceLevel":12,"rangeLevel":1,"magicLevel":1},"1461":{"name":"Mugger","hitpoints":8,"combatLevel":6,"attackSpeed":4,"attackLevel":5,"strengthLevel":5,"defenceLevel":5,"rangeLevel":1,"magicLevel":1},"1475":{"name":"Chompy bird","hitpoints":10,"combatLevel":6,"defenceLevel":5000},"1494":{"name":"Kebbit","hitpoints":50,"combatLevel":13,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"1537":{"name":"Skeleton hero","hitpoints":124,"combatLevel":149,"attackSpeed":4,"attackLevel":145,"strengthLevel":134,"defenceLevel":110,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15,"undead":true},"1538":{"name":"Skeleton brute","hitpoints":124,"combatLevel":132,"attackSpeed":4,"attackLevel":115,"strengthLevel":114,"defenceLevel":110,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15,"undead":true},"1539":{"name":"Skeleton warlord","hitpoints":124,"combatLevel":132,"attackSpeed":4,"attackLevel":115,"strengthLevel":114,"defenceLevel":110,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"1540":{"name":"Skeleton heavy","hitpoints":124,"combatLevel":132,"attackSpeed":4,"attackLevel":115,"strengthLevel":114,"defenceLevel":110,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"1541":{"name":"Skeleton thug","hitpoints":124,"combatLevel":132,"attackSpeed":4,"attackLevel":115,"strengthLevel":114,"defenceLevel":110,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15,"undead":true},"1543":{"name":"Gargoyle","hitpoints":105,"combatLevel":111,"slayerLevel":75,"attackSpeed":4,"attackLevel":75,"strengthLevel":105,"defenceLevel":107,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":20,"magicDef":20},"1545":{"name":"Black knight","hitpoints":42,"combatLevel":33,"attackSpeed":5,"attackLevel":25,"strengthLevel":25,"defenceLevel":25,"rangeLevel":1,"magicLevel":1,"stabDef":73,"slashDef":76,"crushDef":70,"rangeDef":72,"bonusAttack":18,"bonusStrength":16},"1546":{"name":"Guard","hitpoints":22,"combatLevel":21,"attackSpeed":4,"attackLevel":19,"strengthLevel":18,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"stab":4,"stabDef":18,"slashDef":25,"crushDef":19,"rangeDef":20,"bonusAttack":4,"bonusStrength":5},"1547":{"name":"Guard","hitpoints":22,"combatLevel":21,"attackSpeed":4,"attackLevel":19,"strengthLevel":18,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"stab":4,"stabDef":18,"slashDef":25,"crushDef":19,"rangeDef":20,"bonusAttack":4,"bonusStrength":5},"1548":{"name":"Guard","hitpoints":22,"combatLevel":21,"attackSpeed":4,"attackLevel":19,"strengthLevel":18,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"stab":4,"stabDef":18,"slashDef":25,"crushDef":19,"rangeDef":20,"bonusAttack":4,"bonusStrength":5},"1549":{"name":"Guard","hitpoints":22,"combatLevel":21,"attackSpeed":4,"attackLevel":19,"strengthLevel":18,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"stab":4,"stabDef":18,"slashDef":25,"crushDef":19,"rangeDef":20,"bonusAttack":4,"bonusStrength":5},"1550":{"name":"Guard","hitpoints":22,"combatLevel":21,"attackSpeed":4,"attackLevel":19,"strengthLevel":18,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"stab":4,"stabDef":18,"slashDef":25,"crushDef":19,"rangeDef":20,"bonusAttack":4,"bonusStrength":5},"1556":{"name":"Fire wizard","hitpoints":25,"combatLevel":13,"attackSpeed":4,"attackLevel":5,"strengthLevel":5,"defenceLevel":10,"magicLevel":10,"magicDef":15},"1557":{"name":"Water wizard","hitpoints":25,"combatLevel":13,"attackSpeed":4,"attackLevel":5,"strengthLevel":5,"defenceLevel":10,"magicLevel":10,"magicDef":15},"1558":{"name":"Earth wizard","hitpoints":25,"combatLevel":13,"attackSpeed":4,"attackLevel":5,"strengthLevel":5,"defenceLevel":10,"magicLevel":10,"magicDef":15},"1559":{"name":"Air wizard","hitpoints":25,"combatLevel":13,"attackSpeed":4,"attackLevel":5,"strengthLevel":5,"defenceLevel":10,"magicLevel":10,"magicDef":15},"1603":{"name":"Kolodion","hitpoints":3,"attackSpeed":7},"1604":{"name":"Kolodion","hitpoints":3,"attackSpeed":7},"1605":{"name":"Kolodion","hitpoints":3,"attackSpeed":7},"1606":{"name":"Kolodion","hitpoints":65,"attackSpeed":7},"1607":{"name":"Kolodion","hitpoints":65,"attackSpeed":7},"1608":{"name":"Kolodion","hitpoints":78,"attackSpeed":7},"1609":{"name":"Kolodion","hitpoints":107,"combatLevel":112,"attackSpeed":4,"attackLevel":85,"strengthLevel":98,"defenceLevel":105,"rangeLevel":1,"magicLevel":80},"1610":{"name":"Battle mage","hitpoints":120,"combatLevel":54,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":50},"1611":{"name":"Battle mage","hitpoints":120,"combatLevel":54,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":50},"1612":{"name":"Battle mage","hitpoints":120,"combatLevel":54,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":50},"1667":{"name":"Penance Fighter","hitpoints":28,"combatLevel":30,"attackSpeed":4},"1668":{"name":"Penance Ranger","hitpoints":20,"combatLevel":21,"attackSpeed":4},"1672":{"name":"Ahrim the Blighted","hitpoints":100,"combatLevel":98,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":100,"rangeLevel":1,"magicLevel":100,"stab":12,"crush":65,"magic":73,"stabDef":103,"slashDef":85,"crushDef":117,"magicDef":73,"bonusStrength":68},"1673":{"name":"Dharok the Wretched","hitpoints":100,"combatLevel":115,"attackSpeed":7,"attackLevel":100,"strengthLevel":100,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"slash":103,"crush":95,"stabDef":252,"slashDef":250,"crushDef":244,"rangeDef":249,"bonusStrength":105},"1674":{"name":"Guthan the Infested","hitpoints":100,"combatLevel":115,"attackSpeed":5,"attackLevel":100,"strengthLevel":100,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"stab":75,"slash":75,"crush":75,"stabDef":259,"slashDef":257,"crushDef":241,"rangeDef":250,"bonusStrength":75},"1675":{"name":"Karil the Tainted","hitpoints":100,"combatLevel":98,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":100,"rangeLevel":100,"magicLevel":1,"range":134,"stabDef":79,"slashDef":71,"crushDef":90,"rangeDef":100,"magicDef":106,"bonusRangeStrength":55},"1676":{"name":"Torag the Corrupted","hitpoints":100,"combatLevel":115,"attackSpeed":5,"attackLevel":100,"strengthLevel":100,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"stab":68,"crush":82,"stabDef":221,"slashDef":235,"crushDef":222,"rangeDef":221,"bonusStrength":72},"1677":{"name":"Verac the Defiled","hitpoints":100,"combatLevel":115,"attackSpeed":5,"attackLevel":100,"strengthLevel":100,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"stab":68,"crush":82,"stabDef":227,"slashDef":230,"crushDef":221,"rangeDef":225,"bonusStrength":72},"1678":{"name":"Bloodworm","hitpoints":45,"combatLevel":52,"attackSpeed":4,"attackLevel":80,"strengthLevel":20,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"1679":{"name":"Crypt rat","hitpoints":35,"combatLevel":43,"attackSpeed":4,"attackLevel":70,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1},"1680":{"name":"Giant crypt rat","hitpoints":70,"combatLevel":76,"attackSpeed":4,"attackLevel":80,"strengthLevel":50,"defenceLevel":65,"rangeLevel":1,"magicLevel":1},"1681":{"name":"Giant crypt rat","hitpoints":70,"combatLevel":76,"attackSpeed":4,"attackLevel":80,"strengthLevel":50,"defenceLevel":65,"rangeLevel":1,"magicLevel":1},"1682":{"name":"Giant crypt rat","hitpoints":70,"combatLevel":76,"attackSpeed":4,"attackLevel":80,"strengthLevel":50,"defenceLevel":65,"rangeLevel":1,"magicLevel":1},"1683":{"name":"Crypt spider","hitpoints":45,"combatLevel":56,"attackSpeed":4,"attackLevel":45,"strengthLevel":47,"defenceLevel":45,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"crushDef":10,"rangeDef":20,"magicDef":17},"1684":{"name":"Giant crypt spider","hitpoints":80,"combatLevel":79,"attackSpeed":4,"attackLevel":65,"strengthLevel":67,"defenceLevel":65,"rangeLevel":1,"magicLevel":1},"1685":{"name":"Skeleton","hitpoints":51,"combatLevel":77,"attackSpeed":4,"attackLevel":72,"strengthLevel":72,"defenceLevel":72,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"rangeDef":5,"undead":true},"1686":{"name":"Skeleton","hitpoints":51,"combatLevel":77,"attackSpeed":4,"attackLevel":72,"strengthLevel":72,"defenceLevel":72,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"rangeDef":5,"undead":true},"1687":{"name":"Skeleton","hitpoints":51,"combatLevel":77,"attackSpeed":4,"attackLevel":72,"strengthLevel":72,"defenceLevel":72,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"rangeDef":5,"undead":true},"1688":{"name":"Skeleton","hitpoints":51,"combatLevel":77,"attackSpeed":4,"attackLevel":72,"strengthLevel":72,"defenceLevel":72,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"rangeDef":5,"undead":true},"1689":{"name":"Splatter","hitpoints":13,"combatLevel":22},"1690":{"name":"Splatter","hitpoints":23,"combatLevel":33},"1691":{"name":"Splatter","hitpoints":33,"combatLevel":44},"1692":{"name":"Splatter","hitpoints":43,"combatLevel":54},"1693":{"name":"Splatter","hitpoints":53,"combatLevel":65},"1694":{"name":"Shifter","hitpoints":23,"combatLevel":38,"attackSpeed":4},"1695":{"name":"Shifter","hitpoints":23,"combatLevel":38,"attackSpeed":4},"1696":{"name":"Shifter","hitpoints":38,"combatLevel":57,"attackSpeed":4},"1697":{"name":"Shifter","hitpoints":38,"combatLevel":57,"attackSpeed":4},"1698":{"name":"Shifter","hitpoints":53,"combatLevel":76,"attackSpeed":4},"1699":{"name":"Shifter","hitpoints":53,"combatLevel":76,"attackSpeed":4},"1700":{"name":"Shifter","hitpoints":68,"combatLevel":90,"attackSpeed":4},"1701":{"name":"Shifter","hitpoints":68,"combatLevel":90,"attackSpeed":4},"1702":{"name":"Shifter","hitpoints":83,"combatLevel":104,"attackSpeed":4},"1703":{"name":"Shifter","hitpoints":83,"combatLevel":104,"attackSpeed":4},"1704":{"name":"Ravager","hitpoints":23,"combatLevel":36,"attackSpeed":4},"1705":{"name":"Ravager","hitpoints":38,"combatLevel":53,"attackSpeed":4},"1706":{"name":"Ravager","hitpoints":53,"combatLevel":71,"attackSpeed":4},"1707":{"name":"Ravager","hitpoints":68,"combatLevel":89,"attackSpeed":4},"1708":{"name":"Ravager","hitpoints":83,"combatLevel":106,"attackSpeed":4},"1709":{"name":"Spinner","hitpoints":33,"combatLevel":36},"1710":{"name":"Spinner","hitpoints":53,"combatLevel":55},"1711":{"name":"Spinner","hitpoints":73,"combatLevel":74},"1712":{"name":"Spinner","hitpoints":101,"combatLevel":92},"1713":{"name":"Spinner","hitpoints":93,"combatLevel":88},"1714":{"name":"Torcher","hitpoints":18,"combatLevel":33,"attackSpeed":4},"1715":{"name":"Torcher","hitpoints":18,"combatLevel":33,"attackSpeed":4},"1716":{"name":"Torcher","hitpoints":30,"combatLevel":49,"attackSpeed":4},"1717":{"name":"Torcher","hitpoints":30,"combatLevel":49,"attackSpeed":4},"1718":{"name":"Torcher","hitpoints":45,"combatLevel":66,"attackSpeed":4},"1719":{"name":"Torcher","hitpoints":45,"combatLevel":66,"attackSpeed":4},"1720":{"name":"Torcher","hitpoints":57,"combatLevel":79,"attackSpeed":4},"1721":{"name":"Torcher","hitpoints":57,"combatLevel":79,"attackSpeed":4},"1722":{"name":"Torcher","hitpoints":71,"combatLevel":91,"attackSpeed":4},"1723":{"name":"Torcher","hitpoints":71,"combatLevel":92,"attackSpeed":4},"1724":{"name":"Defiler","hitpoints":27,"combatLevel":33,"attackSpeed":4},"1725":{"name":"Defiler","hitpoints":27,"combatLevel":33,"attackSpeed":4},"1726":{"name":"Defiler","hitpoints":45,"combatLevel":50,"attackSpeed":4},"1727":{"name":"Defiler","hitpoints":45,"combatLevel":50,"attackSpeed":4},"1728":{"name":"Defiler","hitpoints":62,"combatLevel":66,"attackSpeed":4},"1729":{"name":"Defiler","hitpoints":62,"combatLevel":67,"attackSpeed":4},"1730":{"name":"Defiler","hitpoints":78,"combatLevel":80,"attackSpeed":4},"1731":{"name":"Defiler","hitpoints":78,"combatLevel":80,"attackSpeed":4},"1732":{"name":"Defiler","hitpoints":97,"combatLevel":97,"attackSpeed":4},"1733":{"name":"Defiler","hitpoints":97,"combatLevel":97,"attackSpeed":4},"1734":{"name":"Brawler","hitpoints":53,"combatLevel":51,"attackSpeed":4},"1735":{"name":"Brawler","hitpoints":83,"combatLevel":76,"attackSpeed":4},"1736":{"name":"Brawler","hitpoints":97,"combatLevel":101,"attackSpeed":4},"1737":{"name":"Brawler","hitpoints":113,"combatLevel":129,"attackSpeed":4},"1738":{"name":"Brawler","hitpoints":143,"combatLevel":158,"attackSpeed":4},"1739":{"name":"Portal","defenceLevel":85,"rangeDef":70,"magicDef":70},"1740":{"name":"Portal","defenceLevel":85,"rangeDef":70,"magicDef":70},"1741":{"name":"Portal","defenceLevel":85,"rangeDef":70,"magicDef":70},"1742":{"name":"Portal","defenceLevel":85,"rangeDef":70,"magicDef":70},"1743":{"name":"Portal","defenceLevel":85,"rangeDef":70,"magicDef":70},"1744":{"name":"Portal","defenceLevel":85,"rangeDef":70,"magicDef":70},"1745":{"name":"Portal","defenceLevel":85,"rangeDef":70,"magicDef":70},"1746":{"name":"Portal","defenceLevel":85,"rangeDef":70,"magicDef":70},"1747":{"name":"Portal","defenceLevel":85,"rangeDef":70,"magicDef":70},"1748":{"name":"Portal","defenceLevel":85,"rangeDef":70,"magicDef":70},"1749":{"name":"Portal","defenceLevel":85,"rangeDef":70,"magicDef":70},"1750":{"name":"Portal","defenceLevel":85,"rangeDef":70,"magicDef":70},"1751":{"name":"Portal","defenceLevel":85,"rangeDef":70,"magicDef":70},"1752":{"name":"Portal","defenceLevel":85,"rangeDef":70,"magicDef":70},"1753":{"name":"Portal","defenceLevel":85,"rangeDef":70,"magicDef":70},"1754":{"name":"Portal","defenceLevel":85,"rangeDef":70,"magicDef":70},"1777":{"name":"Double agent","hitpoints":80,"combatLevel":65,"attackSpeed":4,"attackLevel":80,"strengthLevel":43,"defenceLevel":24,"rangeLevel":1,"magicLevel":24,"stabDef":3,"slashDef":3,"crushDef":3},"1778":{"name":"Double agent","hitpoints":120,"combatLevel":108,"attackSpeed":4,"attackLevel":100,"strengthLevel":80,"defenceLevel":80,"rangeLevel":1,"magicLevel":80,"stabDef":20,"slashDef":20,"crushDef":20,"bonusAttack":40,"bonusStrength":40},"1782":{"name":"Scarab swarm","hitpoints":25,"combatLevel":98,"attackSpeed":1,"attackLevel":255,"strengthLevel":5,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"stabDef":90,"slashDef":90,"crushDef":5,"rangeDef":90,"magicDef":90},"1792":{"name":"Goat","hitpoints":21,"combatLevel":23,"attackSpeed":4,"attackLevel":20,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"rangeDef":10,"bonusAttack":29,"bonusStrength":10},"1793":{"name":"Goat","hitpoints":21,"combatLevel":23,"attackSpeed":4,"attackLevel":20,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"rangeDef":10,"bonusAttack":29,"bonusStrength":10},"1794":{"name":"Billy Goat","hitpoints":28,"combatLevel":33,"attackSpeed":4,"attackLevel":31,"strengthLevel":29,"defenceLevel":29,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"rangeDef":10,"bonusAttack":29,"bonusStrength":10},"1795":{"name":"Goat","hitpoints":21,"combatLevel":23,"attackSpeed":4,"attackLevel":20,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"rangeDef":10,"bonusAttack":29,"bonusStrength":10},"1796":{"name":"Goat","hitpoints":21,"combatLevel":23,"attackSpeed":4,"attackLevel":20,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"rangeDef":10,"bonusAttack":29,"bonusStrength":10},"1797":{"name":"Billy Goat","hitpoints":28,"combatLevel":33,"attackSpeed":4,"attackLevel":31,"strengthLevel":29,"defenceLevel":29,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"rangeDef":10,"bonusAttack":29,"bonusStrength":10},"1798":{"name":"White Knight","hitpoints":52,"combatLevel":36,"attackSpeed":7,"attackLevel":27,"strengthLevel":29,"defenceLevel":21,"rangeLevel":1,"magicLevel":1,"stabDef":83,"slashDef":76,"crushDef":70,"rangeDef":74,"bonusAttack":30,"bonusStrength":31},"1799":{"name":"White Knight","hitpoints":52,"combatLevel":38,"attackSpeed":7,"attackLevel":30,"strengthLevel":29,"defenceLevel":25,"rangeLevel":1,"magicLevel":1,"stabDef":83,"slashDef":76,"crushDef":70,"rangeDef":74,"bonusAttack":30,"bonusStrength":31},"1800":{"name":"White Knight","hitpoints":52,"combatLevel":39,"attackSpeed":7,"attackLevel":32,"strengthLevel":29,"defenceLevel":27,"rangeLevel":1,"magicLevel":1,"stabDef":83,"slashDef":76,"crushDef":70,"rangeDef":74,"bonusAttack":30,"bonusStrength":31},"1829":{"name":"White Knight","hitpoints":55,"combatLevel":42,"attackSpeed":7,"attackLevel":32,"strengthLevel":35,"defenceLevel":27,"rangeLevel":1,"magicLevel":1,"stabDef":83,"slashDef":76,"crushDef":70,"rangeDef":74,"bonusAttack":30,"bonusStrength":31},"1834":{"name":"Gorak","hitpoints":112,"combatLevel":145,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":131,"rangeLevel":1,"magicLevel":1},"1838":{"name":"Duck","hitpoints":3,"combatLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"1839":{"name":"Duck","hitpoints":3,"combatLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"1845":{"name":"Stag","hitpoints":19,"combatLevel":15,"attackSpeed":4,"attackLevel":11,"strengthLevel":13,"defenceLevel":13,"rangeLevel":1,"magicLevel":1},"1852":{"name":"Rabbit","hitpoints":5,"combatLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"1853":{"name":"Rabbit","hitpoints":5,"combatLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"1861":{"name":"Tree spirit","hitpoints":50,"combatLevel":14,"attackSpeed":4,"attackLevel":17,"strengthLevel":17,"defenceLevel":17,"rangeLevel":1,"magicLevel":1},"1862":{"name":"Tree spirit","hitpoints":50,"combatLevel":29,"attackSpeed":4,"attackLevel":32,"strengthLevel":32,"defenceLevel":32,"rangeLevel":1,"magicLevel":1},"1863":{"name":"Tree spirit","hitpoints":60,"combatLevel":49,"attackSpeed":4,"attackLevel":48,"strengthLevel":48,"defenceLevel":48,"rangeLevel":1,"magicLevel":1},"1864":{"name":"Tree spirit","hitpoints":86,"combatLevel":79,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"rangeLevel":1,"magicLevel":1},"1865":{"name":"Tree spirit","hitpoints":120,"combatLevel":120,"attackSpeed":4,"attackLevel":100,"strengthLevel":100,"defenceLevel":100,"rangeLevel":1,"magicLevel":1},"1866":{"name":"Tree spirit","hitpoints":170,"combatLevel":159,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":130,"rangeLevel":1,"magicLevel":1},"1870":{"name":"Evil Chicken","hitpoints":120,"combatLevel":159,"attackSpeed":4,"defenceLevel":126,"magicLevel":200},"1871":{"name":"Baby dragon","hitpoints":80,"combatLevel":83,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":50,"crushDef":50,"rangeDef":30,"magicDef":40,"dragon":true},"1872":{"name":"Baby dragon","hitpoints":80,"combatLevel":83,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":50,"crushDef":50,"rangeDef":30,"magicDef":40,"dragon":true},"1874":{"name":"Ice troll runt","hitpoints":60,"combatLevel":74,"attackSpeed":4,"attackLevel":60,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"1875":{"name":"Ice troll male","hitpoints":80,"combatLevel":82,"attackSpeed":4,"attackLevel":80,"strengthLevel":80,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"1876":{"name":"Ice troll female","hitpoints":80,"combatLevel":82,"attackSpeed":4,"attackLevel":80,"strengthLevel":80,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"1877":{"name":"Ice troll grunt","hitpoints":80,"combatLevel":102,"attackSpeed":4,"attackLevel":100,"strengthLevel":100,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"2001":{"name":"Duckling","hitpoints":3,"combatLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"2005":{"name":"Lesser demon","hitpoints":81,"combatLevel":82,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":71,"rangeLevel":1,"magicLevel":1,"demon":true},"2006":{"name":"Lesser demon","hitpoints":81,"combatLevel":82,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":71,"rangeLevel":1,"magicLevel":1,"demon":true},"2007":{"name":"Lesser demon","hitpoints":81,"combatLevel":82,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":71,"rangeLevel":1,"magicLevel":1,"demon":true},"2008":{"name":"Lesser demon","hitpoints":81,"combatLevel":82,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":71,"rangeLevel":1,"magicLevel":1,"demon":true},"2018":{"name":"Lesser demon","hitpoints":81,"combatLevel":82,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":71,"rangeLevel":1,"magicLevel":1,"demon":true},"2025":{"name":"Greater demon","hitpoints":89,"combatLevel":92,"attackSpeed":4,"attackLevel":76,"strengthLevel":78,"defenceLevel":81,"rangeLevel":1,"magicLevel":1,"demon":true},"2026":{"name":"Greater demon","hitpoints":89,"combatLevel":92,"attackSpeed":4,"attackLevel":76,"strengthLevel":78,"defenceLevel":81,"rangeLevel":1,"magicLevel":1,"demon":true},"2027":{"name":"Greater demon","hitpoints":89,"combatLevel":92,"attackSpeed":4,"attackLevel":76,"strengthLevel":78,"defenceLevel":81,"rangeLevel":1,"magicLevel":1,"demon":true},"2028":{"name":"Greater demon","hitpoints":89,"combatLevel":92,"attackSpeed":4,"attackLevel":76,"strengthLevel":78,"defenceLevel":81,"rangeLevel":1,"magicLevel":1,"demon":true},"2029":{"name":"Greater demon","hitpoints":89,"combatLevel":92,"attackSpeed":4,"attackLevel":76,"strengthLevel":78,"defenceLevel":81,"rangeLevel":1,"magicLevel":1,"demon":true},"2030":{"name":"Greater demon","hitpoints":89,"combatLevel":92,"attackSpeed":4,"attackLevel":76,"strengthLevel":78,"defenceLevel":81,"rangeLevel":1,"magicLevel":1,"demon":true},"2031":{"name":"Greater demon","hitpoints":89,"combatLevel":92,"attackSpeed":4,"attackLevel":76,"strengthLevel":78,"defenceLevel":81,"rangeLevel":1,"magicLevel":1,"demon":true},"2032":{"name":"Greater demon","hitpoints":89,"combatLevel":92,"attackSpeed":4,"attackLevel":76,"strengthLevel":78,"defenceLevel":81,"rangeLevel":1,"magicLevel":1,"demon":true},"2042":{"name":"Zulrah","hitpoints":500,"combatLevel":725,"attackSpeed":3,"attackLevel":1,"strengthLevel":1,"defenceLevel":300,"rangeLevel":300,"magicLevel":300,"range":50,"magic":50,"rangeDef":50,"bonusRangeStrength":20,"bonusMagicDamage":20},"2043":{"name":"Zulrah","hitpoints":500,"combatLevel":725,"attackSpeed":3,"attackLevel":1,"strengthLevel":1,"defenceLevel":300,"rangeLevel":300,"magicLevel":300,"range":50,"magic":50,"rangeDef":300,"bonusRangeStrength":20,"bonusMagicDamage":20},"2044":{"name":"Zulrah","hitpoints":500,"combatLevel":725,"attackSpeed":3,"attackLevel":1,"strengthLevel":1,"defenceLevel":300,"rangeLevel":300,"magicLevel":300,"range":50,"magic":50,"magicDef":300,"bonusRangeStrength":20,"bonusMagicDamage":20},"2045":{"name":"Snakeling","hitpoints":1,"combatLevel":90,"attackSpeed":3,"attackLevel":140,"strengthLevel":138,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"bonusAttack":120},"2046":{"name":"Snakeling","hitpoints":1,"combatLevel":90,"attackSpeed":3,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":185,"bonusAttack":120},"2048":{"name":"Black demon","hitpoints":157,"combatLevel":172,"attackSpeed":4,"attackLevel":145,"strengthLevel":152,"defenceLevel":148,"rangeLevel":1,"magicLevel":1,"demon":true},"2049":{"name":"Black demon","hitpoints":157,"combatLevel":172,"attackSpeed":4,"attackLevel":145,"strengthLevel":152,"defenceLevel":148,"rangeLevel":1,"magicLevel":1,"demon":true},"2050":{"name":"Black demon","hitpoints":157,"combatLevel":172,"attackSpeed":4,"attackLevel":145,"strengthLevel":152,"defenceLevel":148,"rangeLevel":1,"magicLevel":1,"demon":true},"2051":{"name":"Black demon","hitpoints":157,"combatLevel":172,"attackSpeed":4,"attackLevel":145,"strengthLevel":152,"defenceLevel":148,"rangeLevel":1,"magicLevel":1,"demon":true},"2052":{"name":"Black demon","hitpoints":157,"combatLevel":172,"attackSpeed":4,"attackLevel":145,"strengthLevel":152,"defenceLevel":148,"rangeLevel":1,"magicLevel":1,"demon":true},"2054":{"name":"Chaos Elemental","hitpoints":250,"combatLevel":305,"attackSpeed":5,"attackLevel":270,"strengthLevel":270,"defenceLevel":270,"rangeLevel":270,"magicLevel":270,"stabDef":70,"slashDef":70,"crushDef":70,"rangeDef":70,"magicDef":70},"2056":{"name":"Dark wizard","hitpoints":24,"combatLevel":23,"attackSpeed":4,"attackLevel":5,"strengthLevel":2,"defenceLevel":5,"rangeLevel":1,"magicLevel":6,"magicDef":3},"2057":{"name":"Dark wizard","hitpoints":24,"combatLevel":22,"attackSpeed":4,"attackLevel":5,"strengthLevel":2,"defenceLevel":5,"rangeLevel":1,"magicLevel":6,"magicDef":3},"2058":{"name":"Dark wizard","hitpoints":15,"combatLevel":11,"attackSpeed":4,"attackLevel":5,"strengthLevel":2,"defenceLevel":5,"rangeLevel":1,"magicLevel":6,"magicDef":3},"2059":{"name":"Dark wizard","hitpoints":15,"combatLevel":11,"attackSpeed":4,"attackLevel":5,"strengthLevel":2,"defenceLevel":5,"rangeLevel":1,"magicLevel":6,"magicDef":3},"2062":{"name":"Oomlie bird","hitpoints":40,"combatLevel":46,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1},"2063":{"name":"Penguin","hitpoints":4,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":2,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"2064":{"name":"Terrorbird","hitpoints":34,"combatLevel":28,"attackSpeed":6,"attackLevel":23,"strengthLevel":23,"defenceLevel":19,"rangeLevel":1,"magicLevel":1},"2065":{"name":"Terrorbird","hitpoints":34,"combatLevel":28,"attackSpeed":6,"attackLevel":23,"strengthLevel":23,"defenceLevel":19,"rangeLevel":1,"magicLevel":1},"2066":{"name":"Terrorbird","hitpoints":34,"combatLevel":28,"attackSpeed":6,"attackLevel":23,"strengthLevel":23,"defenceLevel":19,"rangeLevel":1,"magicLevel":1},"2067":{"name":"Mounted terrorbird gnome","hitpoints":36,"combatLevel":31,"attackSpeed":4,"attackLevel":25,"strengthLevel":25,"defenceLevel":25,"stabDef":16,"slashDef":16,"crushDef":18,"rangeDef":10,"magicDef":15},"2068":{"name":"Mounted terrorbird gnome","hitpoints":55,"combatLevel":49,"attackSpeed":4,"attackLevel":25,"strengthLevel":25,"defenceLevel":25,"stabDef":16,"slashDef":16,"crushDef":18,"rangeDef":10,"magicDef":15},"2075":{"name":"Fire giant","hitpoints":111,"combatLevel":86,"attackSpeed":5,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"bonusAttack":29,"bonusStrength":31},"2076":{"name":"Fire giant","hitpoints":111,"combatLevel":86,"attackSpeed":5,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"bonusAttack":29,"bonusStrength":31},"2077":{"name":"Fire giant","hitpoints":111,"combatLevel":86,"attackSpeed":5,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"bonusAttack":29,"bonusStrength":31},"2078":{"name":"Fire giant","hitpoints":111,"combatLevel":86,"attackSpeed":5,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"bonusAttack":29,"bonusStrength":31},"2079":{"name":"Fire giant","hitpoints":111,"combatLevel":86,"attackSpeed":5,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"bonusAttack":29,"bonusStrength":31},"2080":{"name":"Fire giant","hitpoints":111,"combatLevel":86,"attackSpeed":5,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"bonusAttack":29,"bonusStrength":31},"2081":{"name":"Fire giant","hitpoints":111,"combatLevel":86,"attackSpeed":5,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"bonusAttack":29,"bonusStrength":31},"2082":{"name":"Fire giant","hitpoints":111,"combatLevel":86,"attackSpeed":5,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"bonusAttack":29,"bonusStrength":31},"2083":{"name":"Fire giant","hitpoints":111,"combatLevel":86,"attackSpeed":5,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"bonusAttack":29,"bonusStrength":31},"2084":{"name":"Fire giant","hitpoints":111,"combatLevel":86,"attackSpeed":5,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"bonusAttack":29,"bonusStrength":31},"2085":{"name":"Ice giant","hitpoints":70,"combatLevel":53,"attackSpeed":5,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"bonusAttack":29,"bonusStrength":31},"2086":{"name":"Ice giant","hitpoints":70,"combatLevel":53,"attackSpeed":5,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"bonusAttack":29,"bonusStrength":31},"2087":{"name":"Ice giant","hitpoints":70,"combatLevel":53,"attackSpeed":5,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"bonusAttack":29,"bonusStrength":31},"2088":{"name":"Ice giant","hitpoints":70,"combatLevel":53,"attackSpeed":5,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"bonusAttack":29,"bonusStrength":31},"2089":{"name":"Ice giant","hitpoints":70,"combatLevel":53,"attackSpeed":5,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"bonusAttack":29,"bonusStrength":31},"2090":{"name":"Moss giant","hitpoints":60,"combatLevel":42,"attackSpeed":6,"attackLevel":30,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"bonusAttack":33,"bonusStrength":31},"2091":{"name":"Moss giant","hitpoints":60,"combatLevel":42,"attackSpeed":6,"attackLevel":30,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"bonusAttack":33,"bonusStrength":31},"2092":{"name":"Moss giant","hitpoints":60,"combatLevel":42,"attackSpeed":6,"attackLevel":30,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"bonusAttack":33,"bonusStrength":31},"2093":{"name":"Moss giant","hitpoints":60,"combatLevel":42,"attackSpeed":6,"attackLevel":30,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"bonusAttack":33,"bonusStrength":31},"2094":{"name":"Jogre","hitpoints":60,"combatLevel":53,"attackSpeed":6,"attackLevel":43,"strengthLevel":43,"defenceLevel":43,"rangeLevel":1,"magicLevel":1,"crush":22,"bonusAttack":22,"bonusStrength":20},"2095":{"name":"Ogre","hitpoints":60,"combatLevel":53,"attackSpeed":6,"attackLevel":43,"strengthLevel":43,"defenceLevel":43,"rangeLevel":1,"magicLevel":1,"bonusAttack":22,"bonusStrength":20},"2096":{"name":"Ogre","hitpoints":60,"combatLevel":53,"attackSpeed":6,"attackLevel":43,"strengthLevel":43,"defenceLevel":43,"rangeLevel":1,"magicLevel":1,"bonusAttack":22,"bonusStrength":20},"2097":{"name":"Cyclops","hitpoints":75,"combatLevel":56,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"2098":{"name":"Hill Giant","hitpoints":35,"combatLevel":28,"attackSpeed":4,"attackLevel":18,"strengthLevel":22,"defenceLevel":26,"rangeLevel":1,"magicLevel":1,"bonusAttack":18,"bonusStrength":16},"2099":{"name":"Hill Giant","hitpoints":35,"combatLevel":28,"attackSpeed":4,"attackLevel":18,"strengthLevel":22,"defenceLevel":26,"rangeLevel":1,"magicLevel":1,"bonusAttack":18,"bonusStrength":16},"2100":{"name":"Hill Giant","hitpoints":35,"combatLevel":28,"attackSpeed":4,"attackLevel":18,"strengthLevel":22,"defenceLevel":26,"rangeLevel":1,"magicLevel":1,"bonusAttack":18,"bonusStrength":16},"2101":{"name":"Hill Giant","hitpoints":35,"combatLevel":28,"attackSpeed":4,"attackLevel":18,"strengthLevel":22,"defenceLevel":26,"rangeLevel":1,"magicLevel":1,"bonusAttack":18,"bonusStrength":16},"2102":{"name":"Hill Giant","hitpoints":35,"combatLevel":28,"attackSpeed":4,"attackLevel":18,"strengthLevel":22,"defenceLevel":26,"rangeLevel":1,"magicLevel":1,"bonusAttack":18,"bonusStrength":16},"2103":{"name":"Hill Giant","hitpoints":35,"combatLevel":28,"attackSpeed":4,"attackLevel":18,"strengthLevel":22,"defenceLevel":26,"rangeLevel":1,"magicLevel":1,"bonusAttack":18,"bonusStrength":16},"2115":{"name":"Thing under the bed","hitpoints":25,"attackSpeed":4},"2120":{"name":"Market Guard","hitpoints":22,"combatLevel":20,"attackSpeed":5,"attackLevel":17,"strengthLevel":18,"defenceLevel":13,"rangeLevel":1,"magicLevel":1,"stabDef":24,"slashDef":14,"crushDef":19,"rangeDef":16,"magicDef":4,"bonusAttack":9,"bonusStrength":7},"2137":{"name":"Cyclops","hitpoints":150,"combatLevel":106,"attackSpeed":4,"attackLevel":95,"strengthLevel":75,"defenceLevel":55,"rangeLevel":1,"magicLevel":1},"2138":{"name":"Cyclops","hitpoints":150,"combatLevel":106,"attackSpeed":4,"attackLevel":95,"strengthLevel":75,"defenceLevel":55,"rangeLevel":1,"magicLevel":1},"2139":{"name":"Cyclops","hitpoints":150,"combatLevel":106,"attackSpeed":4,"attackLevel":95,"strengthLevel":75,"defenceLevel":55,"rangeLevel":1,"magicLevel":1},"2140":{"name":"Cyclops","hitpoints":150,"combatLevel":106,"attackSpeed":4,"attackLevel":95,"strengthLevel":75,"defenceLevel":55,"rangeLevel":1,"magicLevel":1},"2141":{"name":"Cyclops","hitpoints":150,"combatLevel":106,"attackSpeed":4,"attackLevel":95,"strengthLevel":75,"defenceLevel":55,"rangeLevel":1,"magicLevel":1},"2142":{"name":"Cyclops","hitpoints":150,"combatLevel":106,"attackSpeed":4,"attackLevel":95,"strengthLevel":75,"defenceLevel":55,"rangeLevel":1,"magicLevel":1},"2143":{"name":"Sraracha","hitpoints":23,"combatLevel":13,"attackSpeed":4,"attackLevel":10,"strengthLevel":8,"defenceLevel":6,"rangeLevel":1,"magicLevel":1},"2145":{"name":"Undead Druid","hitpoints":140,"combatLevel":105,"attackSpeed":4,"attackLevel":60,"strengthLevel":50,"defenceLevel":60,"magicLevel":115,"magic":100,"stabDef":40,"slashDef":30,"crushDef":80,"rangeDef":40,"magicDef":140,"bonusAttack":50,"bonusStrength":50,"bonusMagicDamage":50,"undead":true},"2154":{"name":"TzHaar-Mej","hitpoints":100,"combatLevel":103,"attackSpeed":5,"attackLevel":80,"strengthLevel":80,"defenceLevel":80,"rangeLevel":1,"magicLevel":120},"2155":{"name":"TzHaar-Mej","hitpoints":100,"combatLevel":103,"attackSpeed":5,"attackLevel":80,"strengthLevel":80,"defenceLevel":80,"rangeLevel":1,"magicLevel":120},"2156":{"name":"TzHaar-Mej","hitpoints":100,"combatLevel":103,"attackSpeed":5,"attackLevel":80,"strengthLevel":80,"defenceLevel":80,"rangeLevel":1,"magicLevel":120},"2157":{"name":"TzHaar-Mej","hitpoints":100,"combatLevel":103,"attackSpeed":5,"attackLevel":80,"strengthLevel":80,"defenceLevel":80,"rangeLevel":1,"magicLevel":120},"2158":{"name":"TzHaar-Mej","hitpoints":100,"combatLevel":103,"attackSpeed":5,"attackLevel":80,"strengthLevel":80,"defenceLevel":80,"rangeLevel":1,"magicLevel":120},"2159":{"name":"TzHaar-Mej","hitpoints":100,"combatLevel":103,"attackSpeed":5,"attackLevel":80,"strengthLevel":80,"defenceLevel":80,"rangeLevel":1,"magicLevel":120},"2160":{"name":"TzHaar-Mej","hitpoints":100,"combatLevel":103,"attackSpeed":5,"attackLevel":80,"strengthLevel":80,"defenceLevel":80,"rangeLevel":1,"magicLevel":120},"2161":{"name":"TzHaar-Hur","hitpoints":80,"combatLevel":74,"attackSpeed":5,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":80},"2162":{"name":"TzHaar-Hur","hitpoints":80,"combatLevel":74,"attackSpeed":5,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":80},"2163":{"name":"TzHaar-Hur","hitpoints":80,"combatLevel":74,"attackSpeed":5,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":80},"2164":{"name":"TzHaar-Hur","hitpoints":80,"combatLevel":74,"attackSpeed":5,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":80},"2165":{"name":"TzHaar-Hur","hitpoints":80,"combatLevel":74,"attackSpeed":5,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":80},"2166":{"name":"TzHaar-Hur","hitpoints":80,"combatLevel":74,"attackSpeed":5,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":80},"2167":{"name":"TzHaar-Xil","hitpoints":120,"combatLevel":133,"attackSpeed":4,"attackLevel":140,"strengthLevel":100,"defenceLevel":100,"rangeLevel":120,"magicLevel":40},"2168":{"name":"TzHaar-Xil","hitpoints":120,"combatLevel":133,"attackSpeed":4,"attackLevel":140,"strengthLevel":100,"defenceLevel":100,"rangeLevel":120,"magicLevel":40},"2169":{"name":"TzHaar-Xil","hitpoints":120,"combatLevel":133,"attackSpeed":4,"attackLevel":140,"strengthLevel":100,"defenceLevel":100,"rangeLevel":120,"magicLevel":40},"2170":{"name":"TzHaar-Xil","hitpoints":120,"combatLevel":133,"attackSpeed":4,"attackLevel":140,"strengthLevel":100,"defenceLevel":100,"rangeLevel":120,"magicLevel":40},"2171":{"name":"TzHaar-Xil","hitpoints":120,"combatLevel":133,"attackSpeed":4,"attackLevel":140,"strengthLevel":100,"defenceLevel":100,"rangeLevel":120,"magicLevel":40},"2172":{"name":"TzHaar-Xil","hitpoints":120,"combatLevel":133,"attackSpeed":4,"attackLevel":140,"strengthLevel":100,"defenceLevel":100,"rangeLevel":120,"magicLevel":40},"2173":{"name":"TzHaar-Ket","hitpoints":140,"combatLevel":149,"attackSpeed":4,"attackLevel":120,"strengthLevel":140,"defenceLevel":120,"rangeLevel":1,"magicLevel":40},"2174":{"name":"TzHaar-Ket","hitpoints":140,"combatLevel":149,"attackSpeed":4,"attackLevel":120,"strengthLevel":140,"defenceLevel":120,"rangeLevel":1,"magicLevel":40},"2175":{"name":"TzHaar-Ket","hitpoints":140,"combatLevel":149,"attackSpeed":4,"attackLevel":120,"strengthLevel":140,"defenceLevel":120,"rangeLevel":1,"magicLevel":40},"2176":{"name":"TzHaar-Ket","hitpoints":140,"combatLevel":149,"attackSpeed":4,"attackLevel":120,"strengthLevel":140,"defenceLevel":120,"rangeLevel":1,"magicLevel":40},"2177":{"name":"TzHaar-Ket","hitpoints":140,"combatLevel":149,"attackSpeed":4,"attackLevel":120,"strengthLevel":140,"defenceLevel":120,"rangeLevel":1,"magicLevel":40},"2178":{"name":"TzHaar-Ket","hitpoints":140,"combatLevel":149,"attackSpeed":4,"attackLevel":120,"strengthLevel":140,"defenceLevel":120,"rangeLevel":1,"magicLevel":40},"2179":{"name":"TzHaar-Ket","hitpoints":140,"combatLevel":149,"attackSpeed":4,"attackLevel":120,"strengthLevel":140,"defenceLevel":120,"rangeLevel":1,"magicLevel":40},"2189":{"name":"Tz-Kih","hitpoints":10,"combatLevel":22,"attackSpeed":4,"attackLevel":20,"strengthLevel":30,"defenceLevel":15,"rangeLevel":15,"magicLevel":30},"2190":{"name":"Tz-Kih","hitpoints":10,"combatLevel":22,"attackSpeed":4,"attackLevel":20,"strengthLevel":30,"defenceLevel":15,"rangeLevel":15,"magicLevel":30},"2191":{"name":"Tz-Kek","hitpoints":20,"combatLevel":45,"attackSpeed":4,"attackLevel":40,"strengthLevel":60,"defenceLevel":30,"rangeLevel":30,"magicLevel":60},"2192":{"name":"Tz-Kek","hitpoints":20,"combatLevel":45,"attackSpeed":4,"attackLevel":40,"strengthLevel":60,"defenceLevel":30,"rangeLevel":30,"magicLevel":60},"2193":{"name":"Tok-Xil","hitpoints":40,"combatLevel":90,"attackSpeed":4,"attackLevel":80,"strengthLevel":120,"defenceLevel":60,"rangeLevel":120,"magicLevel":60},"2194":{"name":"Tok-Xil","hitpoints":40,"combatLevel":90,"attackSpeed":4,"attackLevel":80,"strengthLevel":120,"defenceLevel":60,"rangeLevel":120,"magicLevel":60},"2205":{"name":"Commander Zilyana","hitpoints":255,"combatLevel":596,"attackSpeed":2,"attackLevel":280,"strengthLevel":196,"defenceLevel":300,"rangeLevel":250,"magicLevel":300,"magic":200,"stabDef":100,"slashDef":100,"crushDef":100,"rangeDef":100,"magicDef":100,"bonusAttack":195,"bonusStrength":20,"poisonImmune":true,"venomImmune":true},"2206":{"name":"Starlight","hitpoints":160,"combatLevel":149,"attackSpeed":5,"attackLevel":120,"strengthLevel":125,"defenceLevel":120,"rangeLevel":1,"magicLevel":125,"stabDef":12,"slashDef":14,"crushDef":13,"rangeDef":13,"magicDef":5,"bonusAttack":60,"bonusStrength":10},"2207":{"name":"Growler","hitpoints":146,"combatLevel":139,"attackSpeed":5,"attackLevel":100,"strengthLevel":101,"defenceLevel":120,"rangeLevel":1,"magicLevel":150,"stabDef":12,"slashDef":14,"crushDef":14,"rangeDef":5,"magicDef":18,"bonusAttack":10,"bonusStrength":7},"2208":{"name":"Bree","hitpoints":162,"combatLevel":146,"attackSpeed":5,"attackLevel":110,"strengthLevel":80,"defenceLevel":130,"rangeLevel":150,"magicLevel":80,"stabDef":12,"slashDef":14,"crushDef":14,"rangeDef":5,"magicDef":18,"bonusAttack":10,"bonusStrength":7},"2209":{"name":"Saradomin priest","hitpoints":89,"combatLevel":113,"attackSpeed":5,"attackLevel":120,"strengthLevel":46,"defenceLevel":120,"rangeLevel":1,"magicLevel":125,"stabDef":12,"slashDef":14,"crushDef":13,"rangeDef":13,"magicDef":5,"bonusAttack":9,"bonusStrength":5},"2210":{"name":"Spiritual warrior","hitpoints":110,"combatLevel":125,"slayerLevel":68,"attackSpeed":5,"attackLevel":110,"strengthLevel":106,"defenceLevel":110,"rangeLevel":1,"magicLevel":1,"stabDef":12,"slashDef":14,"crushDef":13,"rangeDef":13,"magicDef":5,"bonusAttack":9,"bonusStrength":6},"2211":{"name":"Spiritual ranger","hitpoints":106,"combatLevel":122,"slayerLevel":63,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":100,"rangeLevel":146,"magicLevel":1,"stabDef":3,"slashDef":5,"crushDef":13,"rangeDef":23,"magicDef":16},"2212":{"name":"Spiritual mage","hitpoints":85,"combatLevel":120,"slayerLevel":83,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":86,"rangeLevel":1,"magicLevel":160,"stabDef":8,"slashDef":7,"crushDef":3,"rangeDef":2,"magicDef":16},"2213":{"name":"Knight of Saradomin","hitpoints":135,"combatLevel":103,"attackSpeed":6,"attackLevel":70,"strengthLevel":85,"defenceLevel":70,"rangeLevel":1,"magicLevel":60,"stabDef":10,"slashDef":10,"crushDef":7,"rangeDef":13,"bonusAttack":8,"bonusStrength":8},"2214":{"name":"Knight of Saradomin","hitpoints":108,"combatLevel":101,"attackSpeed":6,"attackLevel":75,"strengthLevel":90,"defenceLevel":82,"rangeLevel":1,"magicLevel":60,"stabDef":12,"slashDef":14,"crushDef":13,"rangeDef":13,"bonusAttack":13,"bonusStrength":11},"2215":{"name":"General Graardor","hitpoints":255,"combatLevel":624,"attackSpeed":6,"attackLevel":280,"strengthLevel":350,"defenceLevel":250,"rangeLevel":350,"magicLevel":80,"range":100,"stabDef":90,"slashDef":90,"crushDef":90,"rangeDef":90,"magicDef":298,"bonusAttack":120,"bonusStrength":43,"bonusRangeStrength":40,"poisonImmune":true,"venomImmune":true},"2216":{"name":"Sergeant Strongstack","hitpoints":128,"combatLevel":141,"attackSpeed":5,"attackLevel":124,"strengthLevel":118,"defenceLevel":125,"rangeLevel":50,"magicLevel":50,"bonusStrength":14},"2217":{"name":"Sergeant Steelwill","hitpoints":127,"combatLevel":142,"attackSpeed":5,"attackLevel":80,"strengthLevel":50,"defenceLevel":150,"rangeLevel":1,"magicLevel":150,"bonusStrength":6},"2218":{"name":"Sergeant Grimspike","hitpoints":146,"combatLevel":142,"attackSpeed":5,"attackLevel":80,"strengthLevel":80,"defenceLevel":132,"rangeLevel":150,"magicLevel":50,"range":20,"bonusRangeStrength":20},"2232":{"name":"Black Guard Berserker","hitpoints":50,"combatLevel":66,"attackSpeed":3,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stabDef":60,"slashDef":60,"crushDef":60,"rangeDef":60,"bonusAttack":55,"bonusStrength":55},"2233":{"name":"Ogre","hitpoints":70,"combatLevel":58,"attackSpeed":6,"attackLevel":46,"strengthLevel":48,"defenceLevel":43,"rangeLevel":1,"magicLevel":1,"bonusAttack":22,"bonusStrength":21},"2234":{"name":"Jogre","hitpoints":70,"combatLevel":58,"attackSpeed":6,"attackLevel":46,"strengthLevel":48,"defenceLevel":43,"rangeLevel":1,"magicLevel":1,"bonusAttack":22,"bonusStrength":21},"2235":{"name":"Cyclops","hitpoints":110,"combatLevel":81,"attackSpeed":4,"attackLevel":60,"strengthLevel":70,"defenceLevel":48,"rangeLevel":1,"magicLevel":1,"bonusAttack":22},"2236":{"name":"Cyclops","hitpoints":110,"combatLevel":81,"attackSpeed":4,"attackLevel":60,"strengthLevel":70,"defenceLevel":48,"rangeLevel":1,"magicLevel":1,"bonusAttack":22},"2237":{"name":"Ork","hitpoints":110,"combatLevel":107,"attackSpeed":5,"attackLevel":100,"strengthLevel":100,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stabDef":12,"slashDef":14,"crushDef":13,"rangeDef":13,"magicDef":5,"bonusAttack":19,"bonusStrength":4},"2238":{"name":"Ork","hitpoints":110,"combatLevel":107,"attackSpeed":5,"attackLevel":100,"strengthLevel":100,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stabDef":12,"slashDef":14,"crushDef":13,"rangeDef":13,"magicDef":5,"bonusAttack":19,"bonusStrength":4},"2239":{"name":"Ork","hitpoints":110,"combatLevel":107,"attackSpeed":5,"attackLevel":100,"strengthLevel":100,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stabDef":12,"slashDef":14,"crushDef":13,"rangeDef":13,"magicDef":5,"bonusAttack":19,"bonusStrength":4},"2240":{"name":"Ork","hitpoints":110,"combatLevel":107,"attackSpeed":5,"attackLevel":100,"strengthLevel":100,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stabDef":12,"slashDef":14,"crushDef":13,"rangeDef":13,"magicDef":5,"bonusAttack":19,"bonusStrength":4},"2241":{"name":"Hobgoblin","hitpoints":52,"combatLevel":47,"attackSpeed":4,"attackLevel":39,"strengthLevel":39,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"2242":{"name":"Spiritual ranger","hitpoints":131,"combatLevel":115,"slayerLevel":63,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"stabDef":12,"slashDef":14,"crushDef":13,"rangeDef":13,"magicDef":5},"2243":{"name":"Spiritual warrior","hitpoints":131,"combatLevel":134,"slayerLevel":68,"attackSpeed":5,"attackLevel":116,"strengthLevel":120,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"stabDef":12,"slashDef":14,"crushDef":13,"rangeDef":13,"magicDef":5,"bonusAttack":29,"bonusStrength":13},"2244":{"name":"Spiritual mage","hitpoints":106,"combatLevel":121,"slayerLevel":83,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":103,"rangeLevel":1,"magicLevel":142,"stabDef":12,"slashDef":14,"crushDef":13,"rangeDef":13,"magicDef":35},"2245":{"name":"Goblin","hitpoints":18,"combatLevel":17,"attackSpeed":6,"attackLevel":14,"strengthLevel":16,"defenceLevel":14,"rangeLevel":1,"magicLevel":1},"2246":{"name":"Goblin","hitpoints":3,"combatLevel":12,"attackSpeed":6,"attackLevel":15,"strengthLevel":6,"defenceLevel":19,"rangeLevel":1,"magicLevel":1},"2247":{"name":"Goblin","hitpoints":15,"combatLevel":12,"attackSpeed":6,"attackLevel":12,"strengthLevel":6,"defenceLevel":13,"rangeLevel":1,"magicLevel":1},"2248":{"name":"Goblin","hitpoints":16,"combatLevel":15,"attackSpeed":6,"attackLevel":16,"strengthLevel":6,"defenceLevel":19,"magicLevel":1},"2249":{"name":"Goblin","hitpoints":13,"combatLevel":13,"attackSpeed":6,"attackLevel":11,"strengthLevel":6,"defenceLevel":20,"rangeLevel":1,"magicLevel":1},"2259":{"name":"Dagannoth","hitpoints":85,"combatLevel":88,"attackSpeed":3,"attackLevel":1,"strengthLevel":1,"defenceLevel":75,"rangeLevel":100,"magicLevel":1,"slashDef":10,"crushDef":90,"rangeDef":150,"magicDef":200},"2261":{"name":"Giant Rock Crab","hitpoints":180,"combatLevel":137,"attackSpeed":4,"attackLevel":50,"strengthLevel":80,"defenceLevel":200,"rangeLevel":1,"magicLevel":1,"stabDef":225,"slashDef":200,"crushDef":175,"rangeDef":250},"2264":{"name":"Dagannoth fledgeling","hitpoints":100,"combatLevel":70,"attackSpeed":4,"attackLevel":50,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1},"2265":{"name":"Dagannoth Supreme","hitpoints":255,"combatLevel":303,"attackSpeed":4,"attackLevel":255,"strengthLevel":255,"defenceLevel":128,"rangeLevel":255,"magicLevel":255,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":550,"magicDef":255},"2266":{"name":"Dagannoth Prime","hitpoints":255,"combatLevel":303,"attackSpeed":4,"attackLevel":255,"strengthLevel":255,"defenceLevel":255,"magicLevel":255,"stabDef":255,"slashDef":255,"crushDef":255,"rangeDef":10,"magicDef":255},"2267":{"name":"Dagannoth Rex","hitpoints":255,"combatLevel":303,"attackSpeed":4,"attackLevel":255,"strengthLevel":255,"defenceLevel":255,"rangeLevel":255,"stabDef":255,"slashDef":255,"crushDef":255,"rangeDef":255,"magicDef":10},"2316":{"name":"Guard","hitpoints":26,"combatLevel":26,"attackSpeed":6,"attackLevel":25,"strengthLevel":18,"defenceLevel":25,"rangeLevel":1,"magicLevel":1,"stab":11,"slash":11,"crush":11,"stabDef":1,"slashDef":16,"crushDef":19,"rangeDef":12},"2317":{"name":"Guard","hitpoints":26,"combatLevel":24,"attackSpeed":6,"attackLevel":22,"strengthLevel":16,"defenceLevel":22,"rangeLevel":1,"magicLevel":1,"crush":16,"slashDef":15,"crushDef":19,"rangeDef":12},"2423":{"name":"Chaos dwarf","hitpoints":61,"combatLevel":48,"attackSpeed":4,"attackLevel":38,"strengthLevel":42,"defenceLevel":28,"rangeLevel":1,"magicLevel":1,"stabDef":40,"slashDef":34,"crushDef":25,"rangeDef":35,"magicDef":10,"bonusAttack":13,"bonusStrength":9},"2450":{"name":"Animated Bronze Armour","hitpoints":10,"combatLevel":11,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":25,"crushDef":19,"rangeDef":400,"magicDef":400,"bonusAttack":4,"bonusStrength":5},"2451":{"name":"Animated Iron Armour","hitpoints":20,"combatLevel":23,"attackSpeed":4,"attackLevel":20,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":25,"crushDef":19,"rangeDef":400,"magicDef":400,"bonusAttack":4,"bonusStrength":5},"2452":{"name":"Animated Steel Armour","hitpoints":40,"combatLevel":46,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":25,"crushDef":19,"rangeDef":400,"magicDef":400,"bonusAttack":4,"bonusStrength":5},"2453":{"name":"Animated Black Armour","hitpoints":60,"combatLevel":69,"attackSpeed":4,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":25,"crushDef":19,"rangeDef":400,"magicDef":400,"bonusAttack":4,"bonusStrength":5},"2454":{"name":"Animated Mithril Armour","hitpoints":80,"combatLevel":92,"attackSpeed":4,"attackLevel":80,"strengthLevel":80,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":25,"crushDef":19,"rangeDef":400,"magicDef":400,"bonusAttack":4,"bonusStrength":5},"2455":{"name":"Animated Adamant Armour","hitpoints":99,"combatLevel":113,"attackSpeed":4,"attackLevel":99,"strengthLevel":99,"defenceLevel":99,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":25,"crushDef":19,"rangeDef":400,"magicDef":400,"bonusAttack":4,"bonusStrength":5},"2456":{"name":"Animated Rune Armour","hitpoints":120,"combatLevel":138,"attackSpeed":4,"attackLevel":120,"strengthLevel":120,"defenceLevel":120,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":25,"crushDef":19,"rangeDef":400,"magicDef":400,"bonusAttack":4,"bonusStrength":5},"2463":{"name":"Cyclops","hitpoints":75,"combatLevel":56,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"2464":{"name":"Cyclops","hitpoints":100,"combatLevel":76,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"2465":{"name":"Cyclops","hitpoints":75,"combatLevel":56,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"2466":{"name":"Cyclops","hitpoints":100,"combatLevel":76,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"2467":{"name":"Cyclops","hitpoints":75,"combatLevel":56,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"2468":{"name":"Cyclops","hitpoints":100,"combatLevel":76,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"2474":{"name":"Catablepon","hitpoints":40,"combatLevel":49,"attackSpeed":4,"attackLevel":45,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":60,"stabDef":40,"slashDef":30,"crushDef":20,"rangeDef":40,"magicDef":20},"2475":{"name":"Catablepon","hitpoints":70,"combatLevel":64,"attackSpeed":4,"attackLevel":55,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":45,"stabDef":50,"slashDef":40,"crushDef":30,"rangeDef":50,"magicDef":30},"2476":{"name":"Catablepon","hitpoints":50,"combatLevel":68,"attackSpeed":4,"attackLevel":65,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":60,"stabDef":50,"slashDef":40,"crushDef":30,"rangeDef":50,"magicDef":30},"2477":{"name":"Giant spider","hitpoints":50,"combatLevel":50,"attackSpeed":4,"attackLevel":41,"strengthLevel":51,"defenceLevel":31,"rangeLevel":1,"magicLevel":1},"2478":{"name":"Spider","hitpoints":22,"combatLevel":24,"attackSpeed":6,"attackLevel":21,"strengthLevel":21,"defenceLevel":21,"rangeLevel":1,"magicLevel":1,"stabDef":53,"slashDef":53,"crushDef":53,"rangeDef":53,"magicDef":53,"bonusAttack":35,"bonusStrength":58},"2479":{"name":"Scorpion","hitpoints":55,"combatLevel":59,"attackSpeed":6,"attackLevel":50,"strengthLevel":52,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":15,"crushDef":15,"rangeDef":55},"2480":{"name":"Scorpion","hitpoints":37,"combatLevel":37,"attackSpeed":6,"attackLevel":31,"strengthLevel":32,"defenceLevel":31,"rangeLevel":1,"magicLevel":1,"stabDef":35,"slashDef":15,"crushDef":15,"rangeDef":35,"magicDef":30},"2481":{"name":"Minotaur","hitpoints":10,"combatLevel":12,"attackSpeed":4,"attackLevel":12,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2483":{"name":"Minotaur","hitpoints":22,"combatLevel":27,"attackSpeed":4,"attackLevel":23,"strengthLevel":25,"defenceLevel":25,"rangeLevel":1,"magicLevel":1},"2484":{"name":"Goblin","hitpoints":12,"combatLevel":5,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"2485":{"name":"Goblin","hitpoints":16,"combatLevel":13,"attackSpeed":6,"attackLevel":12,"strengthLevel":13,"defenceLevel":7,"rangeLevel":1,"magicLevel":1,"stabDef":4,"slashDef":6,"crushDef":8,"rangeDef":4,"magicDef":4},"2486":{"name":"Goblin","hitpoints":7,"combatLevel":11,"attackSpeed":6,"attackLevel":10,"strengthLevel":3,"defenceLevel":7,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"2487":{"name":"Goblin","hitpoints":22,"combatLevel":16,"attackSpeed":6,"attackLevel":13,"strengthLevel":11,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"bonusAttack":22,"bonusStrength":22},"2488":{"name":"Goblin","hitpoints":26,"combatLevel":25,"attackSpeed":6,"attackLevel":22,"strengthLevel":23,"defenceLevel":17,"rangeLevel":1,"magicLevel":1,"stabDef":4,"slashDef":6,"crushDef":8,"rangeDef":4,"magicDef":4},"2489":{"name":"Goblin","hitpoints":22,"combatLevel":16,"attackSpeed":6,"attackLevel":13,"strengthLevel":11,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"bonusAttack":22,"bonusStrength":22},"2490":{"name":"Wolf","hitpoints":15,"combatLevel":14,"attackSpeed":4,"attackLevel":10,"strengthLevel":15,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2491":{"name":"Wolf","hitpoints":10,"combatLevel":11,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2492":{"name":"Rat","hitpoints":2,"combatLevel":1,"attackSpeed":4,"attackLevel":1},"2498":{"name":"Flesh Crawler","hitpoints":25,"combatLevel":28,"attackSpeed":3,"attackLevel":60,"strengthLevel":2,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"stabDef":15,"slashDef":15,"crushDef":15,"rangeDef":15,"magicDef":15},"2499":{"name":"Flesh Crawler","hitpoints":25,"combatLevel":35,"attackSpeed":3,"attackLevel":80,"strengthLevel":2,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"stabDef":15,"slashDef":15,"crushDef":15,"rangeDef":15,"magicDef":15},"2500":{"name":"Flesh Crawler","hitpoints":25,"combatLevel":41,"attackSpeed":3,"attackLevel":100,"strengthLevel":2,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"stabDef":15,"slashDef":15,"crushDef":15,"rangeDef":15,"magicDef":15},"2501":{"name":"Zombie","hitpoints":30,"combatLevel":30,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"2502":{"name":"Zombie","hitpoints":30,"combatLevel":30,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"2503":{"name":"Zombie","hitpoints":30,"combatLevel":30,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"2504":{"name":"Zombie","hitpoints":41,"combatLevel":44,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"2505":{"name":"Zombie","hitpoints":41,"combatLevel":44,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"2506":{"name":"Zombie","hitpoints":41,"combatLevel":44,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"2507":{"name":"Zombie","hitpoints":50,"combatLevel":53,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"2508":{"name":"Zombie","hitpoints":50,"combatLevel":53,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"2509":{"name":"Zombie","hitpoints":50,"combatLevel":53,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"2510":{"name":"Giant rat","hitpoints":25,"combatLevel":26,"attackSpeed":4,"attackLevel":22,"strengthLevel":23,"defenceLevel":22,"rangeLevel":1,"magicLevel":1},"2511":{"name":"Giant rat","hitpoints":25,"combatLevel":26,"attackSpeed":4,"attackLevel":22,"strengthLevel":23,"defenceLevel":22,"rangeLevel":1,"magicLevel":1},"2512":{"name":"Giant rat","hitpoints":25,"combatLevel":26,"attackSpeed":4,"attackLevel":22,"strengthLevel":23,"defenceLevel":22,"rangeLevel":1,"magicLevel":1},"2513":{"name":"Rat","hitpoints":2,"combatLevel":1,"attackSpeed":4,"attackLevel":1},"2514":{"name":"Ankou","hitpoints":60,"combatLevel":75,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"undead":true},"2515":{"name":"Ankou","hitpoints":65,"combatLevel":82,"attackSpeed":4,"attackLevel":80,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"undead":true},"2516":{"name":"Ankou","hitpoints":70,"combatLevel":86,"attackSpeed":4,"attackLevel":75,"strengthLevel":75,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"undead":true},"2517":{"name":"Ankou","hitpoints":60,"combatLevel":75,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"undead":true},"2518":{"name":"Ankou","hitpoints":65,"combatLevel":82,"attackSpeed":4,"attackLevel":80,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"undead":true},"2519":{"name":"Ankou","hitpoints":70,"combatLevel":86,"attackSpeed":4,"attackLevel":75,"strengthLevel":75,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"undead":true},"2520":{"name":"Skeleton","hitpoints":70,"combatLevel":68,"attackSpeed":4,"attackLevel":60,"strengthLevel":50,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stabDef":35,"slashDef":35,"rangeDef":35,"undead":true},"2521":{"name":"Skeleton","hitpoints":70,"combatLevel":60,"attackSpeed":4,"attackLevel":50,"strengthLevel":50,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":35,"slashDef":35,"rangeDef":35,"undead":true},"2522":{"name":"Skeleton","hitpoints":70,"combatLevel":60,"attackSpeed":4,"attackLevel":50,"strengthLevel":50,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":35,"slashDef":35,"rangeDef":35,"undead":true},"2523":{"name":"Skeleton","hitpoints":70,"combatLevel":60,"attackSpeed":4,"attackLevel":50,"strengthLevel":50,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":35,"slashDef":35,"rangeDef":35,"undead":true},"2524":{"name":"Skeleton","hitpoints":77,"combatLevel":85,"attackSpeed":4,"attackLevel":74,"strengthLevel":74,"defenceLevel":74,"rangeLevel":1,"magicLevel":1,"stabDef":79,"slashDef":31,"crushDef":20,"rangeDef":70,"magicDef":5,"bonusAttack":15,"bonusStrength":14,"undead":true},"2525":{"name":"Skeleton","hitpoints":77,"combatLevel":85,"attackSpeed":4,"attackLevel":74,"strengthLevel":74,"defenceLevel":74,"rangeLevel":1,"magicLevel":1,"stabDef":79,"slashDef":31,"crushDef":20,"rangeDef":70,"magicDef":5,"bonusAttack":15,"bonusStrength":14,"undead":true},"2526":{"name":"Skeleton","hitpoints":77,"combatLevel":85,"attackSpeed":4,"attackLevel":74,"strengthLevel":74,"defenceLevel":74,"rangeLevel":1,"magicLevel":1,"stabDef":79,"slashDef":31,"crushDef":20,"rangeDef":70,"magicDef":5,"bonusAttack":15,"bonusStrength":14,"undead":true},"2527":{"name":"Ghost","hitpoints":75,"combatLevel":76,"attackSpeed":4,"attackLevel":63,"strengthLevel":63,"defenceLevel":68,"rangeLevel":1,"magicLevel":1,"stabDef":45,"slashDef":45,"crushDef":5,"rangeDef":45,"undead":true},"2528":{"name":"Ghost","hitpoints":75,"combatLevel":76,"attackSpeed":4,"attackLevel":63,"strengthLevel":63,"defenceLevel":68,"rangeLevel":1,"magicLevel":1,"stabDef":45,"slashDef":45,"crushDef":5,"rangeDef":45,"undead":true},"2529":{"name":"Ghost","hitpoints":75,"combatLevel":76,"attackSpeed":4,"attackLevel":63,"strengthLevel":63,"defenceLevel":68,"rangeLevel":1,"magicLevel":1,"stabDef":45,"slashDef":45,"crushDef":5,"rangeDef":45,"undead":true},"2530":{"name":"Ghost","hitpoints":75,"combatLevel":76,"attackSpeed":4,"attackLevel":63,"strengthLevel":63,"defenceLevel":68,"rangeLevel":1,"magicLevel":1,"stabDef":45,"slashDef":45,"crushDef":5,"rangeDef":45,"undead":true},"2531":{"name":"Ghost","hitpoints":27,"attackSpeed":4,"undead":true},"2532":{"name":"Ghost","hitpoints":27,"attackSpeed":4,"undead":true},"2533":{"name":"Ghost","hitpoints":27,"attackSpeed":4,"undead":true},"2534":{"name":"Ghost","hitpoints":27,"attackSpeed":4,"undead":true},"2536":{"name":"H.A.M. Guard","hitpoints":15,"combatLevel":12,"attackSpeed":7,"attackLevel":8,"strengthLevel":12,"defenceLevel":8,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"rangeDef":5},"2537":{"name":"H.A.M. Guard","hitpoints":20,"combatLevel":18,"attackSpeed":6,"attackLevel":14,"strengthLevel":18,"defenceLevel":12,"rangeLevel":1,"magicLevel":1,"stabDef":6,"slashDef":6,"rangeDef":6},"2538":{"name":"H.A.M. Guard","hitpoints":30,"combatLevel":22,"attackSpeed":5,"attackLevel":16,"strengthLevel":20,"defenceLevel":12,"rangeLevel":1,"magicLevel":1,"stabDef":7,"slashDef":7,"rangeDef":7},"2579":{"name":"Monk","hitpoints":15,"combatLevel":5,"attackSpeed":4,"attackLevel":2,"strengthLevel":2,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"2584":{"name":"Abyssal leech","hitpoints":10,"combatLevel":41,"attackSpeed":2,"attackLevel":95,"strengthLevel":5,"defenceLevel":25,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":100,"rangeDef":10,"magicDef":50,"bonusAttack":100,"bonusStrength":10},"2585":{"name":"Abyssal guardian","hitpoints":55,"combatLevel":59,"attackSpeed":4,"attackLevel":30,"strengthLevel":90,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"stabDef":70,"slashDef":70,"crushDef":70,"rangeDef":70,"magicDef":150,"bonusAttack":15,"bonusStrength":5},"2586":{"name":"Abyssal walker","hitpoints":95,"combatLevel":81,"attackSpeed":5,"attackLevel":5,"strengthLevel":100,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":75,"slashDef":75,"crushDef":10,"rangeDef":75,"magicDef":75,"bonusAttack":5,"bonusStrength":10},"2592":{"name":"Mogre","hitpoints":48,"combatLevel":60,"slayerLevel":32,"attackSpeed":6,"attackLevel":58,"strengthLevel":55,"defenceLevel":48,"rangeLevel":1,"magicLevel":1,"bonusAttack":22,"bonusStrength":20,"poisonImmune":true,"venomImmune":true},"2593":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2594":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2595":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2596":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2597":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2598":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2599":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2600":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2601":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2602":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2603":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2604":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2605":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2606":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2607":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2608":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2609":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2610":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2611":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2612":{"name":"Werewolf","hitpoints":100,"combatLevel":88,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"magicDef":60},"2613":{"name":"Boris","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2614":{"name":"Imre","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2615":{"name":"Yuri","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2616":{"name":"Joseph","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2617":{"name":"Nikolai","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2618":{"name":"Eduard","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2619":{"name":"Lev","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2620":{"name":"Georgy","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2621":{"name":"Svetlana","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2622":{"name":"Irina","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2623":{"name":"Alexis","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2624":{"name":"Milla","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2625":{"name":"Galina","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2626":{"name":"Sofiya","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2627":{"name":"Ksenia","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2628":{"name":"Yadviga","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2629":{"name":"Nikita","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2630":{"name":"Vera","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2631":{"name":"Zoja","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2632":{"name":"Liliya","hitpoints":60,"combatLevel":24,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2634":{"name":"Myre Blamish Snail","hitpoints":8,"combatLevel":9,"attackSpeed":4,"defenceLevel":22,"rangeLevel":5,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":30,"rangeDef":50,"magicDef":5,"bonusAttack":10,"bonusStrength":10},"2645":{"name":"Blood Blamish Snail","hitpoints":13,"combatLevel":20,"attackSpeed":6,"defenceLevel":45,"rangeLevel":12,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":30,"rangeDef":50,"bonusAttack":10,"bonusStrength":10},"2646":{"name":"Ochre Blamish Snail","hitpoints":10,"combatLevel":10,"attackSpeed":6,"defenceLevel":18,"rangeLevel":7,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":30,"rangeDef":50,"magicDef":5,"bonusAttack":10,"bonusStrength":10},"2647":{"name":"Bruise Blamish Snail","hitpoints":12,"combatLevel":20,"attackSpeed":6,"defenceLevel":40,"rangeLevel":15,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":30,"rangeDef":50,"magicDef":5,"bonusAttack":10,"bonusStrength":10},"2648":{"name":"Bark Blamish Snail","hitpoints":22,"combatLevel":15,"attackSpeed":6,"defenceLevel":20,"rangeLevel":10,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":30,"rangeDef":30,"magicDef":5,"bonusAttack":10,"bonusStrength":10},"2649":{"name":"Myre Blamish Snail","hitpoints":13,"combatLevel":10,"attackSpeed":4,"defenceLevel":12,"rangeLevel":8,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":30,"rangeDef":50,"magicDef":5,"bonusAttack":10,"bonusStrength":10},"2650":{"name":"Blood Blamish Snail","hitpoints":10,"combatLevel":20,"attackSpeed":6,"defenceLevel":30,"rangeLevel":21,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":30,"rangeDef":50,"bonusAttack":10,"bonusStrength":10},"2651":{"name":"Ochre Blamish Snail","hitpoints":20,"combatLevel":15,"attackSpeed":6,"defenceLevel":25,"rangeLevel":8,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":30,"rangeDef":50,"magicDef":5,"bonusAttack":10,"bonusStrength":10},"2652":{"name":"Bruise Blamish Snail","hitpoints":15,"combatLevel":20,"attackSpeed":6,"defenceLevel":27,"rangeLevel":20,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":30,"rangeDef":50,"magicDef":5,"bonusAttack":10,"bonusStrength":10},"2694":{"name":"Sheep","hitpoints":7,"combatLevel":3,"attackSpeed":4,"attackLevel":2,"strengthLevel":2,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"2790":{"name":"Cow","hitpoints":8,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"poisonImmune":true,"venomImmune":true},"2791":{"name":"Cow","hitpoints":8,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"poisonImmune":true,"venomImmune":true},"2792":{"name":"Cow calf","hitpoints":6,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"2793":{"name":"Cow","hitpoints":8,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"poisonImmune":true,"venomImmune":true},"2794":{"name":"Cow calf","hitpoints":6,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"2795":{"name":"Cow","hitpoints":8,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"poisonImmune":true,"venomImmune":true},"2801":{"name":"Cow calf","hitpoints":6,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"2804":{"name":"Chicken","hitpoints":3,"combatLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"2805":{"name":"Chicken","hitpoints":3,"combatLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"2806":{"name":"Chicken","hitpoints":3,"combatLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"2827":{"name":"Bat","hitpoints":8,"combatLevel":6,"attackSpeed":4,"attackLevel":5,"strengthLevel":5,"defenceLevel":5,"rangeLevel":1,"magicLevel":1,"stabDef":2,"slashDef":2,"crushDef":5,"magicDef":2},"2834":{"name":"Giant bat","hitpoints":32,"combatLevel":27,"attackSpeed":4,"attackLevel":22,"strengthLevel":22,"defenceLevel":22,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"crushDef":12,"rangeDef":8,"magicDef":10},"2837":{"name":"Unicorn","hitpoints":19,"combatLevel":15,"attackSpeed":4,"attackLevel":11,"strengthLevel":13,"defenceLevel":13,"rangeLevel":1,"magicLevel":1},"2838":{"name":"Grizzly bear","hitpoints":27,"combatLevel":21,"attackSpeed":4,"attackLevel":17,"strengthLevel":18,"defenceLevel":15,"rangeLevel":1,"magicLevel":1},"2839":{"name":"Black bear","hitpoints":25,"combatLevel":19,"attackSpeed":4,"attackLevel":15,"strengthLevel":16,"defenceLevel":13},"2840":{"name":"Earth warrior","hitpoints":54,"combatLevel":51,"attackSpeed":4,"attackLevel":42,"strengthLevel":42,"defenceLevel":42,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":40,"crushDef":20,"rangeDef":30,"magicDef":10},"2841":{"name":"Ice warrior","hitpoints":59,"combatLevel":57,"attackSpeed":4,"attackLevel":47,"strengthLevel":47,"defenceLevel":47,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":40,"crushDef":20,"rangeDef":30,"magicDef":10},"2842":{"name":"Ice warrior","hitpoints":59,"combatLevel":57,"attackSpeed":4,"attackLevel":47,"strengthLevel":47,"defenceLevel":47,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":40,"crushDef":20,"rangeDef":30,"magicDef":10},"2843":{"name":"Otherworldly being","hitpoints":66,"combatLevel":64,"attackSpeed":4,"attackLevel":56,"strengthLevel":56,"defenceLevel":46,"rangeLevel":1,"magicLevel":1,"stabDef":15,"slashDef":10,"crushDef":20,"rangeDef":15},"2844":{"name":"Magic axe","hitpoints":45,"combatLevel":42,"attackSpeed":6,"attackLevel":38,"strengthLevel":38,"defenceLevel":29,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":5,"crushDef":15,"rangeDef":10,"magicDef":5},"2845":{"name":"Snake","hitpoints":6,"combatLevel":5,"attackSpeed":4,"attackLevel":4,"strengthLevel":5,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"2848":{"name":"Monkey","hitpoints":6,"combatLevel":3,"attackSpeed":4,"attackLevel":2,"strengthLevel":3,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"2849":{"name":"Black unicorn","hitpoints":29,"combatLevel":27,"attackSpeed":4,"attackLevel":21,"strengthLevel":23,"defenceLevel":23,"rangeLevel":1,"magicLevel":1},"2851":{"name":"Ice warrior","hitpoints":59,"combatLevel":57,"attackSpeed":4,"attackLevel":47,"strengthLevel":47,"defenceLevel":47,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":40,"crushDef":20,"rangeDef":30,"magicDef":10},"2853":{"name":"Shadow warrior","hitpoints":67,"combatLevel":48,"attackSpeed":4,"attackLevel":36,"strengthLevel":36,"defenceLevel":33,"stabDef":43,"slashDef":31,"crushDef":19,"rangeDef":38,"magicDef":15,"bonusAttack":20,"bonusStrength":26},"2854":{"name":"Rat","hitpoints":2,"combatLevel":1,"attackSpeed":4,"attackLevel":1},"2855":{"name":"Rat","hitpoints":2,"combatLevel":1,"attackSpeed":4,"attackLevel":1},"2856":{"name":"Giant rat","hitpoints":5,"combatLevel":3,"attackSpeed":4,"attackLevel":2,"strengthLevel":3,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"2857":{"name":"Giant rat","hitpoints":5,"combatLevel":3,"attackSpeed":4,"attackLevel":2,"strengthLevel":3,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"2858":{"name":"Giant rat","hitpoints":5,"combatLevel":3,"attackSpeed":4,"attackLevel":2,"strengthLevel":3,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"2859":{"name":"Giant rat","hitpoints":5,"combatLevel":3,"attackSpeed":4,"attackLevel":2,"strengthLevel":3,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"2860":{"name":"Giant rat","hitpoints":5,"combatLevel":3,"attackSpeed":4,"attackLevel":2,"strengthLevel":3,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"2861":{"name":"Giant rat","hitpoints":5,"combatLevel":3,"attackSpeed":4,"attackLevel":2,"strengthLevel":3,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"2862":{"name":"Giant rat","hitpoints":10,"combatLevel":6,"attackSpeed":4,"attackLevel":6,"strengthLevel":5,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"2863":{"name":"Giant rat","hitpoints":10,"combatLevel":6,"attackSpeed":4,"attackLevel":6,"strengthLevel":5,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"2864":{"name":"Giant rat","hitpoints":10,"combatLevel":6,"attackSpeed":4,"attackLevel":6,"strengthLevel":5,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"2865":{"name":"Dungeon rat","hitpoints":12,"combatLevel":12,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2866":{"name":"Dungeon rat","hitpoints":12,"combatLevel":12,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2867":{"name":"Dungeon rat","hitpoints":12,"combatLevel":12,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"2885":{"name":"Monk of Zamorak","hitpoints":20,"combatLevel":22,"attackSpeed":4,"attackLevel":18,"strengthLevel":18,"defenceLevel":22,"rangeLevel":1,"magicLevel":25},"2886":{"name":"Monk of Zamorak","hitpoints":10,"combatLevel":17,"attackSpeed":4,"attackLevel":8,"strengthLevel":8,"defenceLevel":12,"rangeLevel":1,"magicLevel":25},"2887":{"name":"Asyff","hitpoints":40,"combatLevel":45,"attackSpeed":4,"attackLevel":38,"strengthLevel":38,"defenceLevel":42,"rangeLevel":1,"magicLevel":40},"2892":{"name":"Brian","hitpoints":27,"combatLevel":22,"attackSpeed":4,"attackLevel":17,"strengthLevel":17,"defenceLevel":17,"rangeLevel":1,"magicLevel":1,"stab":11,"slashDef":3,"crushDef":2,"bonusStrength":12},"2916":{"name":"Waterfiend","hitpoints":130,"combatLevel":115,"attackSpeed":4,"defenceLevel":128,"rangeLevel":105,"magicLevel":105,"stabDef":100,"slashDef":100,"crushDef":10,"rangeDef":100,"magicDef":100,"poisonImmune":true,"venomImmune":true},"2917":{"name":"Waterfiend","hitpoints":130,"combatLevel":115,"attackSpeed":4,"defenceLevel":128,"rangeLevel":105,"magicLevel":105,"stabDef":100,"slashDef":100,"crushDef":10,"rangeDef":100,"magicDef":100,"poisonImmune":true,"venomImmune":true},"2918":{"name":"Brutal green dragon","hitpoints":175,"combatLevel":227,"attackSpeed":4,"attackLevel":268,"strengthLevel":168,"defenceLevel":168,"magicLevel":168,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"poisonImmune":true,"venomImmune":true,"dragon":true},"2919":{"name":"Mithril dragon","hitpoints":254,"combatLevel":304,"attackSpeed":4,"attackLevel":268,"strengthLevel":268,"defenceLevel":268,"rangeLevel":168,"magicLevel":168,"stabDef":50,"slashDef":100,"crushDef":70,"rangeDef":90,"magicDef":30,"venomImmune":true,"dragon":true},"2920":{"name":"Confused barbarian","hitpoints":124,"combatLevel":132,"attackSpeed":4,"attackLevel":115,"strengthLevel":114,"defenceLevel":110,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"2921":{"name":"Lost barbarian","hitpoints":124,"combatLevel":132,"attackSpeed":4,"attackLevel":115,"strengthLevel":114,"defenceLevel":110,"rangeLevel":1,"magicLevel":1},"2946":{"name":"Nail beast","hitpoints":55,"combatLevel":69,"attackSpeed":8,"attackLevel":150,"strengthLevel":6,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"2947":{"name":"Nail beast","hitpoints":65,"combatLevel":98,"attackSpeed":8,"attackLevel":215,"strengthLevel":16,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"2948":{"name":"Nail beast","hitpoints":75,"combatLevel":141,"attackSpeed":8,"attackLevel":320,"strengthLevel":26,"defenceLevel":40,"rangeLevel":1,"magicLevel":1},"2954":{"name":"Zamorak wizard","hitpoints":73,"combatLevel":65,"attackSpeed":4,"attackLevel":24,"strengthLevel":24,"defenceLevel":24,"rangeLevel":1,"magicLevel":80,"magicDef":3},"2955":{"name":"Saradomin wizard","hitpoints":120,"combatLevel":108,"attackSpeed":4,"attackLevel":100,"strengthLevel":80,"defenceLevel":80,"rangeLevel":1,"magicLevel":80,"magicDef":30,"bonusAttack":40,"bonusStrength":40},"2978":{"name":"Big Snake","hitpoints":120,"combatLevel":84,"attackSpeed":6,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"bonusAttack":66,"bonusStrength":62},"2992":{"name":"Undead cow","hitpoints":8,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"undead":true},"2993":{"name":"Undead chicken","hitpoints":3,"combatLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"undead":true},"2994":{"name":"Giant lobster","hitpoints":32,"combatLevel":32,"attackSpeed":4,"attackLevel":18,"strengthLevel":26,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":15,"crushDef":5,"rangeDef":5},"2999":{"name":"Tortured soul","hitpoints":51,"combatLevel":59,"attackSpeed":4,"attackLevel":52,"strengthLevel":62,"defenceLevel":38,"rangeLevel":1,"magicLevel":1,"undead":true},"3010":{"name":"Guard","hitpoints":22,"combatLevel":21,"attackSpeed":4,"attackLevel":19,"strengthLevel":18,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"stab":4,"stabDef":18,"slashDef":25,"crushDef":19,"rangeDef":20,"bonusAttack":4,"bonusStrength":5},"3011":{"name":"Guard","hitpoints":22,"combatLevel":21,"attackSpeed":4,"attackLevel":19,"strengthLevel":18,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"stab":4,"stabDef":18,"slashDef":25,"crushDef":19,"rangeDef":20,"bonusAttack":4,"bonusStrength":5},"3015":{"name":"Woman","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3016":{"name":"Shadow spider","hitpoints":55,"combatLevel":52,"attackSpeed":4,"attackLevel":44,"strengthLevel":42,"defenceLevel":44,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":15,"crushDef":10,"rangeDef":15,"magicDef":15},"3017":{"name":"Giant spider","hitpoints":5,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3018":{"name":"Giant spider","hitpoints":32,"combatLevel":27,"attackSpeed":4,"attackLevel":20,"strengthLevel":24,"defenceLevel":21,"rangeLevel":1,"magicLevel":1},"3019":{"name":"Spider","hitpoints":2,"combatLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3020":{"name":"Jungle spider","hitpoints":50,"combatLevel":44,"attackSpeed":4,"attackLevel":35,"strengthLevel":37,"defenceLevel":35,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"crushDef":10,"rangeDef":20,"magicDef":17},"3021":{"name":"Deadly red spider","hitpoints":35,"combatLevel":34,"attackSpeed":6,"attackLevel":30,"strengthLevel":25,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"stabDef":15,"slashDef":16,"crushDef":7,"rangeDef":16,"magicDef":12},"3022":{"name":"Ice spider","hitpoints":65,"combatLevel":61,"attackSpeed":4,"attackLevel":50,"strengthLevel":55,"defenceLevel":43,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":17,"crushDef":12,"rangeDef":13,"magicDef":13},"3023":{"name":"Poison spider","hitpoints":64,"combatLevel":64,"attackSpeed":6,"attackLevel":50,"strengthLevel":52,"defenceLevel":58,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":17,"crushDef":10,"rangeDef":14,"magicDef":14},"3024":{"name":"Scorpion","hitpoints":17,"combatLevel":14,"attackSpeed":6,"attackLevel":11,"strengthLevel":12,"defenceLevel":11,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":15,"crushDef":15,"rangeDef":5},"3025":{"name":"Poison Scorpion","hitpoints":23,"combatLevel":20,"attackSpeed":4,"attackLevel":16,"strengthLevel":17,"defenceLevel":15,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":15,"crushDef":15,"rangeDef":5},"3026":{"name":"Pit Scorpion","hitpoints":32,"combatLevel":28,"attackSpeed":4,"attackLevel":23,"strengthLevel":23,"defenceLevel":23,"rangeLevel":1,"magicLevel":1,"slashDef":5,"crushDef":5},"3027":{"name":"King Scorpion","hitpoints":30,"combatLevel":32,"attackSpeed":4,"attackLevel":30,"strengthLevel":29,"defenceLevel":23,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":15,"crushDef":15,"rangeDef":5},"3028":{"name":"Goblin","hitpoints":5,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3029":{"name":"Goblin","hitpoints":5,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3030":{"name":"Goblin","hitpoints":5,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3031":{"name":"Goblin","hitpoints":5,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3032":{"name":"Goblin","hitpoints":5,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3033":{"name":"Goblin","hitpoints":5,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3034":{"name":"Goblin","hitpoints":5,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3035":{"name":"Goblin","hitpoints":5,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3036":{"name":"Goblin","hitpoints":5,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3037":{"name":"Goblin","hitpoints":5,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3038":{"name":"Goblin","hitpoints":5,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3039":{"name":"Goblin","hitpoints":5,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3040":{"name":"Goblin","hitpoints":5,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3041":{"name":"Goblin","hitpoints":5,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3042":{"name":"Goblin","hitpoints":5,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3043":{"name":"Goblin","hitpoints":5,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3044":{"name":"Goblin","hitpoints":5,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3045":{"name":"Goblin","hitpoints":12,"combatLevel":5,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"3046":{"name":"Goblin","hitpoints":16,"combatLevel":13,"attackSpeed":6,"attackLevel":12,"strengthLevel":13,"defenceLevel":7,"rangeLevel":1,"magicLevel":1,"stabDef":4,"slashDef":6,"crushDef":8,"rangeDef":4,"magicDef":4},"3047":{"name":"Goblin","hitpoints":12,"combatLevel":5,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"3048":{"name":"Goblin","hitpoints":12,"combatLevel":5,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"3049":{"name":"Hobgoblin","hitpoints":29,"combatLevel":28,"attackSpeed":4,"attackLevel":22,"strengthLevel":24,"defenceLevel":24,"rangeLevel":1,"magicLevel":1},"3050":{"name":"Hobgoblin","hitpoints":49,"combatLevel":42,"attackSpeed":4,"attackLevel":33,"strengthLevel":31,"defenceLevel":36,"rangeLevel":1,"magicLevel":1,"bonusAttack":8,"bonusStrength":10},"3051":{"name":"Goblin","hitpoints":5,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3052":{"name":"Goblin","hitpoints":5,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3053":{"name":"Goblin","hitpoints":5,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3054":{"name":"Goblin","hitpoints":5,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3055":{"name":"Barbarian","hitpoints":24,"combatLevel":17,"attackSpeed":4,"attackLevel":15,"strengthLevel":14,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"3056":{"name":"Barbarian","hitpoints":18,"combatLevel":10,"attackSpeed":4,"attackLevel":8,"strengthLevel":7,"defenceLevel":3,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"3057":{"name":"Barbarian","hitpoints":24,"combatLevel":17,"attackSpeed":4,"attackLevel":15,"strengthLevel":14,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"3058":{"name":"Barbarian","hitpoints":24,"combatLevel":17,"attackSpeed":4,"attackLevel":15,"strengthLevel":14,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"3059":{"name":"Barbarian","hitpoints":18,"combatLevel":10,"attackSpeed":4,"attackLevel":8,"strengthLevel":7,"defenceLevel":3,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"3060":{"name":"Barbarian","hitpoints":18,"combatLevel":10,"attackSpeed":4,"attackLevel":8,"strengthLevel":7,"defenceLevel":3,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"3061":{"name":"Barbarian","hitpoints":18,"combatLevel":10,"attackSpeed":4,"attackLevel":8,"strengthLevel":7,"defenceLevel":3,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"3062":{"name":"Barbarian","hitpoints":24,"combatLevel":17,"attackSpeed":4,"attackLevel":15,"strengthLevel":14,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"3064":{"name":"Barbarian","hitpoints":18,"combatLevel":10,"attackSpeed":4,"attackLevel":8,"strengthLevel":7,"defenceLevel":3,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"3065":{"name":"Barbarian","hitpoints":18,"combatLevel":10,"attackSpeed":4,"attackLevel":8,"strengthLevel":7,"defenceLevel":3,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"3066":{"name":"Barbarian","hitpoints":18,"combatLevel":10,"attackSpeed":4,"attackLevel":8,"strengthLevel":7,"defenceLevel":3,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"3067":{"name":"Barbarian","hitpoints":18,"combatLevel":10,"attackSpeed":4,"attackLevel":8,"strengthLevel":7,"defenceLevel":3,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"3068":{"name":"Barbarian","hitpoints":24,"combatLevel":15,"attackSpeed":4,"attackLevel":15,"strengthLevel":3,"defenceLevel":10,"rangeLevel":15,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"3069":{"name":"Barbarian","hitpoints":24,"combatLevel":17,"attackSpeed":4,"attackLevel":15,"strengthLevel":14,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"3070":{"name":"Barbarian","hitpoints":18,"combatLevel":10,"attackSpeed":4,"attackLevel":8,"strengthLevel":7,"defenceLevel":3,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"3071":{"name":"Barbarian","hitpoints":18,"combatLevel":10,"attackSpeed":4,"attackLevel":8,"strengthLevel":7,"defenceLevel":3,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"3072":{"name":"Barbarian","hitpoints":20,"combatLevel":9,"attackSpeed":4,"attackLevel":6,"strengthLevel":7,"defenceLevel":3,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":10,"crushDef":10,"rangeDef":5,"bonusAttack":9,"bonusStrength":16},"3073":{"name":"Goblin","hitpoints":12,"combatLevel":5,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"3074":{"name":"Goblin","hitpoints":12,"combatLevel":5,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"3075":{"name":"Goblin","hitpoints":12,"combatLevel":5,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"3076":{"name":"Goblin","hitpoints":12,"combatLevel":5,"attackSpeed":6,"attackLevel":7,"strengthLevel":2,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":12},"3078":{"name":"Man","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3079":{"name":"Man","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3080":{"name":"Man","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3081":{"name":"Man","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3082":{"name":"Man","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3083":{"name":"Woman","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3084":{"name":"Woman","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3085":{"name":"Woman","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3086":{"name":"Farmer","hitpoints":12,"combatLevel":7,"attackSpeed":4,"attackLevel":3,"strengthLevel":4,"defenceLevel":8,"rangeLevel":1,"magicLevel":1,"bonusAttack":5,"bonusStrength":6},"3087":{"name":"Farmer","hitpoints":12,"combatLevel":7,"attackSpeed":4,"attackLevel":3,"strengthLevel":4,"defenceLevel":8,"rangeLevel":1,"magicLevel":1,"bonusAttack":5,"bonusStrength":6},"3088":{"name":"Farmer","hitpoints":12,"combatLevel":7,"attackSpeed":4,"attackLevel":3,"strengthLevel":4,"defenceLevel":8,"rangeLevel":1,"magicLevel":1,"bonusAttack":5,"bonusStrength":6},"3092":{"name":"Thief","hitpoints":17,"combatLevel":16,"attackSpeed":4,"attackLevel":14,"strengthLevel":13,"defenceLevel":12,"rangeLevel":1,"magicLevel":1},"3093":{"name":"Thief","hitpoints":17,"combatLevel":16,"attackSpeed":4,"attackLevel":14,"strengthLevel":13,"defenceLevel":12,"rangeLevel":1,"magicLevel":1},"3094":{"name":"Guard","hitpoints":22,"combatLevel":21,"attackSpeed":4,"attackLevel":19,"strengthLevel":18,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"stab":4,"stabDef":18,"slashDef":25,"crushDef":19,"rangeDef":20,"bonusAttack":4,"bonusStrength":5},"3096":{"name":"Barbarian","combatLevel":7},"3097":{"name":"Wizard","hitpoints":14,"combatLevel":9,"attackSpeed":3,"attackLevel":8,"strengthLevel":8,"defenceLevel":5,"rangeLevel":1,"magicLevel":10,"magicDef":3},"3098":{"name":"Druid","hitpoints":30,"combatLevel":33,"attackSpeed":4,"attackLevel":28,"strengthLevel":28,"defenceLevel":32,"rangeLevel":1,"magicLevel":25},"3100":{"name":"Warrior woman","hitpoints":20,"combatLevel":24,"attackSpeed":4,"attackLevel":22,"strengthLevel":22,"defenceLevel":22,"rangeLevel":1,"magicLevel":1},"3101":{"name":"Man","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3102":{"name":"Barbarian","hitpoints":14,"combatLevel":8,"attackSpeed":6,"attackLevel":6,"strengthLevel":5,"defenceLevel":5,"rangeLevel":1,"magicLevel":1,"stabDef":1,"slashDef":1,"bonusAttack":8,"bonusStrength":10},"3103":{"name":"Al-Kharid warrior","hitpoints":19,"combatLevel":9,"attackSpeed":4,"attackLevel":7,"strengthLevel":5,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"stab":10,"slash":10,"crush":10,"range":10,"magic":10,"stabDef":12,"slashDef":15,"crushDef":10,"rangeDef":12,"bonusAttack":10,"bonusStrength":9},"3104":{"name":"Paladin","hitpoints":66,"combatLevel":62,"attackSpeed":5,"attackLevel":54,"strengthLevel":54,"defenceLevel":54,"rangeLevel":1,"magicLevel":1,"stabDef":87,"slashDef":84,"crushDef":76,"rangeDef":79,"bonusAttack":20,"bonusStrength":22},"3105":{"name":"Paladin","hitpoints":66,"combatLevel":62,"attackSpeed":5,"attackLevel":54,"strengthLevel":54,"defenceLevel":54,"rangeLevel":1,"magicLevel":1,"stabDef":87,"slashDef":84,"crushDef":76,"rangeDef":79,"bonusAttack":20,"bonusStrength":22},"3106":{"name":"Hero","hitpoints":82,"combatLevel":69,"attackSpeed":5,"attackLevel":54,"strengthLevel":55,"defenceLevel":54,"rangeLevel":1,"magicLevel":1,"stabDef":87,"slashDef":84,"crushDef":76,"rangeDef":79,"bonusAttack":20,"bonusStrength":22},"3108":{"name":"Knight of Ardougne","hitpoints":52,"combatLevel":46,"attackSpeed":5,"attackLevel":38,"strengthLevel":40,"defenceLevel":31,"rangeLevel":1,"magicLevel":1,"stabDef":39,"slashDef":40,"crushDef":36,"rangeDef":36,"bonusAttack":8,"bonusStrength":10},"3109":{"name":"Man","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3110":{"name":"Woman","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3111":{"name":"Knight of Ardougne","hitpoints":52,"combatLevel":46,"attackSpeed":5,"attackLevel":38,"strengthLevel":40,"defenceLevel":31,"rangeLevel":1,"magicLevel":1,"stabDef":39,"slashDef":40,"crushDef":36,"rangeDef":36,"bonusAttack":8,"bonusStrength":10},"3112":{"name":"Archer","hitpoints":50,"combatLevel":37,"attackSpeed":6,"attackLevel":20,"strengthLevel":20,"defenceLevel":20,"rangeLevel":40,"magicLevel":1,"range":19,"stabDef":18,"slashDef":23,"crushDef":27,"rangeDef":19,"magicDef":10,"bonusRangeStrength":8},"3116":{"name":"Tz-Kih","hitpoints":10,"combatLevel":22,"attackSpeed":4,"attackLevel":20,"strengthLevel":30,"defenceLevel":15,"rangeLevel":15,"magicLevel":30},"3117":{"name":"Tz-Kih","hitpoints":10,"combatLevel":22,"attackSpeed":4,"attackLevel":20,"strengthLevel":30,"defenceLevel":15,"rangeLevel":15,"magicLevel":30},"3118":{"name":"Tz-Kek","hitpoints":20,"combatLevel":45,"attackSpeed":4,"attackLevel":40,"strengthLevel":60,"defenceLevel":30,"rangeLevel":30,"magicLevel":60},"3119":{"name":"Tz-Kek","hitpoints":20,"combatLevel":45,"attackSpeed":4,"attackLevel":40,"strengthLevel":60,"defenceLevel":30,"rangeLevel":30,"magicLevel":60},"3120":{"name":"Tz-Kek","hitpoints":10,"combatLevel":22,"attackSpeed":4,"attackLevel":20,"strengthLevel":30,"defenceLevel":15,"rangeLevel":15,"magicLevel":30},"3121":{"name":"Tok-Xil","hitpoints":40,"combatLevel":90,"attackSpeed":4,"attackLevel":80,"strengthLevel":120,"defenceLevel":60,"rangeLevel":120,"magicLevel":60},"3122":{"name":"Tok-Xil","hitpoints":40,"combatLevel":90,"attackSpeed":4,"attackLevel":80,"strengthLevel":120,"defenceLevel":60,"rangeLevel":120,"magicLevel":60},"3123":{"name":"Yt-MejKot","hitpoints":80,"combatLevel":180,"attackSpeed":4,"attackLevel":160,"strengthLevel":240,"defenceLevel":120,"rangeLevel":240,"magicLevel":120},"3124":{"name":"Yt-MejKot","hitpoints":80,"combatLevel":180,"attackSpeed":4,"attackLevel":160,"strengthLevel":240,"defenceLevel":120,"rangeLevel":240,"magicLevel":120},"3125":{"name":"Ket-Zek","hitpoints":160,"combatLevel":360,"attackSpeed":4,"attackLevel":320,"strengthLevel":480,"defenceLevel":240,"rangeLevel":480,"magicLevel":240,"magic":60},"3126":{"name":"Ket-Zek","hitpoints":160,"combatLevel":360,"attackSpeed":4,"attackLevel":320,"strengthLevel":480,"defenceLevel":240,"rangeLevel":480,"magicLevel":240,"magic":60},"3127":{"name":"TzTok-Jad","hitpoints":250,"combatLevel":702,"attackSpeed":8,"attackLevel":640,"strengthLevel":960,"defenceLevel":480,"rangeLevel":960,"magicLevel":480,"magic":60},"3128":{"name":"Yt-HurKot","hitpoints":60,"combatLevel":108,"attackSpeed":4,"attackLevel":140,"strengthLevel":100,"defenceLevel":60,"rangeLevel":120,"magicLevel":120,"rangeDef":100,"magicDef":100},"3129":{"name":"K'ril Tsutsaroth","hitpoints":255,"combatLevel":650,"attackSpeed":6,"attackLevel":340,"strengthLevel":300,"defenceLevel":270,"rangeLevel":1,"magicLevel":200,"stabDef":80,"slashDef":80,"crushDef":80,"rangeDef":80,"magicDef":130,"bonusAttack":160,"bonusStrength":31,"demon":true},"3130":{"name":"Tstanon Karlak","hitpoints":142,"combatLevel":145,"attackSpeed":5,"attackLevel":124,"strengthLevel":118,"defenceLevel":125,"rangeLevel":50,"magicLevel":50,"bonusStrength":14,"demon":true},"3131":{"name":"Zakl'n Gritch","hitpoints":150,"combatLevel":142,"attackSpeed":5,"attackLevel":83,"strengthLevel":76,"defenceLevel":127,"rangeLevel":150,"magicLevel":50,"range":20,"bonusRangeStrength":20,"demon":true},"3132":{"name":"Balfrug Kreeyath","hitpoints":161,"combatLevel":151,"attackSpeed":5,"attackLevel":115,"strengthLevel":60,"defenceLevel":153,"rangeLevel":1,"magicLevel":150,"magicDef":10,"demon":true},"3133":{"name":"Hellhound","hitpoints":116,"combatLevel":127,"attackSpeed":4,"attackLevel":107,"strengthLevel":116,"defenceLevel":106,"rangeLevel":1,"magicLevel":1},"3134":{"name":"Imp","hitpoints":10,"combatLevel":7,"attackSpeed":4,"attackLevel":5,"strengthLevel":5,"defenceLevel":6,"rangeLevel":1,"magicLevel":1},"3135":{"name":"Werewolf","hitpoints":92,"combatLevel":93,"attackSpeed":4,"attackLevel":77,"strengthLevel":76,"defenceLevel":85,"rangeLevel":1,"magicLevel":1},"3136":{"name":"Werewolf","hitpoints":92,"combatLevel":93,"attackSpeed":4,"attackLevel":77,"strengthLevel":76,"defenceLevel":85,"rangeLevel":1,"magicLevel":1},"3137":{"name":"Feral Vampyre","hitpoints":60,"combatLevel":77,"attackSpeed":4,"attackLevel":65,"strengthLevel":66,"defenceLevel":81,"rangeLevel":1,"magicLevel":1},"3138":{"name":"Bloodveld","hitpoints":134,"combatLevel":81,"slayerLevel":50,"attackSpeed":4,"attackLevel":80,"strengthLevel":46,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"3139":{"name":"Pyrefiend","hitpoints":48,"combatLevel":48,"slayerLevel":30,"attackSpeed":4,"attackLevel":60,"strengthLevel":36,"defenceLevel":22,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":10},"3140":{"name":"Icefiend","hitpoints":20,"combatLevel":18,"attackSpeed":4,"attackLevel":12,"strengthLevel":16,"defenceLevel":19,"rangeLevel":1,"magicLevel":1},"3141":{"name":"Gorak","hitpoints":128,"combatLevel":149,"attackSpeed":4,"attackLevel":133,"strengthLevel":126,"defenceLevel":135,"rangeLevel":1,"magicLevel":1},"3159":{"name":"Spiritual warrior","hitpoints":100,"combatLevel":115,"slayerLevel":68,"attackSpeed":5,"attackLevel":100,"strengthLevel":100,"defenceLevel":100,"rangeLevel":1,"magicLevel":1},"3160":{"name":"Spiritual ranger","hitpoints":120,"combatLevel":118,"slayerLevel":63,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":80,"rangeLevel":140,"magicLevel":1},"3161":{"name":"Spiritual mage","hitpoints":75,"combatLevel":121,"slayerLevel":83,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":61,"rangeLevel":1,"magicLevel":180},"3162":{"name":"Kree'arra","hitpoints":255,"combatLevel":580,"attackSpeed":3,"attackLevel":300,"strengthLevel":200,"defenceLevel":260,"rangeLevel":380,"magicLevel":200,"range":120,"stabDef":180,"slashDef":180,"crushDef":180,"rangeDef":200,"magicDef":200,"bonusAttack":136,"bonusStrength":12,"bonusRangeStrength":50},"3163":{"name":"Wingman Skree","hitpoints":121,"combatLevel":143,"attackSpeed":5,"attackLevel":80,"strengthLevel":50,"defenceLevel":160,"rangeLevel":100,"magicLevel":150,"bonusAttack":45,"bonusStrength":25},"3164":{"name":"Flockleader Geerin","hitpoints":132,"combatLevel":149,"attackSpeed":5,"attackLevel":80,"strengthLevel":80,"defenceLevel":175,"rangeLevel":150,"magicLevel":50,"range":60,"bonusRangeStrength":35},"3165":{"name":"Flight Kilisa","hitpoints":133,"combatLevel":159,"attackSpeed":5,"attackLevel":124,"strengthLevel":118,"defenceLevel":175,"rangeLevel":169,"magicLevel":50,"bonusStrength":14},"3166":{"name":"Spiritual warrior","hitpoints":98,"combatLevel":123,"slayerLevel":68,"attackSpeed":5,"attackLevel":1,"strengthLevel":1,"defenceLevel":120,"rangeLevel":141,"magicLevel":1,"stabDef":23,"slashDef":25,"crushDef":13,"rangeDef":35,"magicDef":35},"3167":{"name":"Spiritual ranger","hitpoints":89,"combatLevel":127,"slayerLevel":63,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"stabDef":17,"slashDef":16,"crushDef":8,"rangeDef":41,"magicDef":35},"3168":{"name":"Spiritual mage","hitpoints":75,"combatLevel":123,"slayerLevel":83,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":111,"rangeLevel":1,"magicLevel":150,"stabDef":9,"slashDef":12,"crushDef":5,"rangeDef":28,"magicDef":45},"3169":{"name":"Aviansie","hitpoints":70,"combatLevel":69,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":70,"rangeLevel":71,"magicLevel":1},"3170":{"name":"Aviansie","hitpoints":83,"combatLevel":79,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":70,"rangeLevel":85,"magicLevel":1},"3171":{"name":"Aviansie","hitpoints":86,"combatLevel":84,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":70,"rangeLevel":93,"magicLevel":1},"3172":{"name":"Aviansie","hitpoints":86,"combatLevel":83,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":100,"rangeLevel":76,"magicLevel":1},"3173":{"name":"Aviansie","hitpoints":95,"combatLevel":92,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":100,"rangeLevel":90,"magicLevel":1},"3174":{"name":"Aviansie","hitpoints":98,"combatLevel":97,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":100,"rangeLevel":99,"magicLevel":1},"3175":{"name":"Aviansie","hitpoints":124,"combatLevel":137,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":160,"rangeLevel":136,"magicLevel":1},"3176":{"name":"Aviansie","hitpoints":139,"combatLevel":148,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":160,"rangeLevel":151,"magicLevel":1},"3177":{"name":"Aviansie","hitpoints":63,"combatLevel":71,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":55,"rangeLevel":86,"magicLevel":1},"3178":{"name":"Aviansie","hitpoints":67,"combatLevel":73,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":55,"rangeLevel":89,"magicLevel":1},"3179":{"name":"Aviansie","hitpoints":77,"combatLevel":79,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":55,"rangeLevel":96,"magicLevel":1},"3180":{"name":"Aviansie","hitpoints":69,"combatLevel":89,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":115,"rangeLevel":89,"magicLevel":1},"3181":{"name":"Aviansie","hitpoints":75,"combatLevel":94,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":115,"rangeLevel":96,"magicLevel":1},"3182":{"name":"Aviansie","hitpoints":79,"combatLevel":97,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":115,"rangeLevel":101,"magicLevel":1},"3183":{"name":"Aviansie","hitpoints":115,"combatLevel":131,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":175,"rangeLevel":143,"magicLevel":1},"3184":{"name":"Dagannoth spawn","hitpoints":35,"combatLevel":42,"attackSpeed":4,"attackLevel":50,"strengthLevel":35,"defenceLevel":25,"rangeLevel":1,"magicLevel":1},"3185":{"name":"Dagannoth","hitpoints":95,"combatLevel":90,"attackSpeed":4,"attackLevel":76,"strengthLevel":78,"defenceLevel":65,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":50,"rangeDef":50,"magicDef":50,"bonusAttack":50,"bonusStrength":50},"3200":{"name":"Arhein","hitpoints":6,"combatLevel":3,"attackSpeed":4,"attackLevel":2,"strengthLevel":3,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"3233":{"name":"Leech","hitpoints":45,"combatLevel":52,"attackSpeed":4,"attackLevel":80,"strengthLevel":20,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"3234":{"name":"Feral Vampyre","hitpoints":50,"combatLevel":72,"attackSpeed":4,"attackLevel":65,"strengthLevel":70,"defenceLevel":65,"rangeLevel":1,"magicLevel":50},"3237":{"name":"Feral Vampyre","hitpoints":40,"combatLevel":61,"attackSpeed":4,"attackLevel":55,"strengthLevel":60,"defenceLevel":55,"rangeLevel":1,"magicLevel":40},"3245":{"name":"Guard","hitpoints":22,"combatLevel":20,"attackSpeed":5,"attackLevel":19,"strengthLevel":18,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"stab":4,"stabDef":18,"slashDef":25,"crushDef":19,"rangeDef":20,"bonusAttack":4,"bonusStrength":5},"3251":{"name":"Watchman","hitpoints":22,"combatLevel":33,"attackSpeed":6,"attackLevel":31,"strengthLevel":31,"defenceLevel":31,"rangeLevel":1,"magicLevel":1,"stabDef":24,"slashDef":14,"crushDef":19,"rangeDef":16},"3252":{"name":"Soldier","hitpoints":22,"combatLevel":28,"attackSpeed":5,"attackLevel":26,"strengthLevel":25,"defenceLevel":26,"rangeLevel":1,"magicLevel":1,"stabDef":24,"slashDef":14,"crushDef":19,"rangeDef":16,"bonusAttack":8,"bonusStrength":10},"3255":{"name":"Shipyard worker","hitpoints":10,"combatLevel":11,"attackSpeed":6,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"bonusAttack":6,"bonusStrength":6},"3256":{"name":"Shipyard worker","hitpoints":10,"combatLevel":11,"attackSpeed":6,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"bonusAttack":6,"bonusStrength":6},"3259":{"name":"Market Guard","hitpoints":22,"combatLevel":20,"attackSpeed":5,"attackLevel":17,"strengthLevel":18,"defenceLevel":13,"rangeLevel":1,"magicLevel":1,"stabDef":24,"slashDef":14,"crushDef":19,"rangeDef":16,"magicDef":4,"bonusAttack":9,"bonusStrength":7},"3260":{"name":"Man","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3263":{"name":"Drunken man","hitpoints":7,"combatLevel":3,"attackSpeed":4,"attackLevel":1,"strengthLevel":3,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3264":{"name":"Man","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3265":{"name":"Man","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3266":{"name":"Man","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3267":{"name":"Woman","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3268":{"name":"Woman","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3269":{"name":"Guard","hitpoints":22,"combatLevel":21,"attackSpeed":4,"attackLevel":19,"strengthLevel":18,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"stab":4,"stabDef":18,"slashDef":25,"crushDef":19,"rangeDef":20,"bonusAttack":4,"bonusStrength":5},"3270":{"name":"Guard","hitpoints":22,"combatLevel":22,"attackSpeed":6,"attackLevel":19,"strengthLevel":18,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"stab":4,"stabDef":18,"slashDef":25,"crushDef":19,"rangeDef":20,"bonusAttack":4,"bonusStrength":5},"3271":{"name":"Guard","hitpoints":22,"combatLevel":19,"attackSpeed":6,"attackLevel":19,"strengthLevel":18,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"stab":4,"stabDef":18,"slashDef":25,"crushDef":19,"rangeDef":20,"bonusAttack":4,"bonusStrength":5},"3272":{"name":"Guard","hitpoints":22,"combatLevel":22,"attackSpeed":6,"attackLevel":19,"strengthLevel":18,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"stab":4,"stabDef":18,"slashDef":25,"crushDef":19,"rangeDef":20,"bonusAttack":4,"bonusStrength":5},"3273":{"name":"Guard","hitpoints":22,"combatLevel":22,"attackSpeed":6,"attackLevel":19,"strengthLevel":18,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"stab":4,"stabDef":18,"slashDef":25,"crushDef":19,"rangeDef":20,"bonusAttack":4,"bonusStrength":5},"3274":{"name":"Guard","hitpoints":22,"combatLevel":22,"attackSpeed":6,"attackLevel":19,"strengthLevel":18,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"stab":4,"stabDef":18,"slashDef":25,"crushDef":19,"rangeDef":20,"bonusAttack":4,"bonusStrength":5},"3275":{"name":"Gardener","hitpoints":7,"combatLevel":4,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":7,"rangeLevel":1,"magicLevel":1},"3276":{"name":"Gardener","hitpoints":7,"combatLevel":3,"attackSpeed":4,"attackLevel":2,"strengthLevel":1,"defenceLevel":5,"rangeLevel":1,"magicLevel":1},"3279":{"name":"Cuffs","hitpoints":7,"combatLevel":3,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"magicDef":5},"3280":{"name":"Narf","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3281":{"name":"Rusty","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3282":{"name":"Jeff","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3283":{"name":"Guard","hitpoints":22,"combatLevel":19,"attackSpeed":6,"attackLevel":19,"strengthLevel":18,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"stab":4,"stabDef":18,"slashDef":25,"crushDef":19,"rangeDef":20,"bonusAttack":4,"bonusStrength":5},"3284":{"name":"Hengel","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3285":{"name":"Anja","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3286":{"name":"Hobgoblin","hitpoints":29,"combatLevel":28,"attackSpeed":4,"attackLevel":22,"strengthLevel":24,"defenceLevel":24,"rangeLevel":1,"magicLevel":1},"3287":{"name":"Hobgoblin","hitpoints":29,"combatLevel":28,"attackSpeed":4,"attackLevel":22,"strengthLevel":24,"defenceLevel":24,"rangeLevel":1,"magicLevel":1},"3288":{"name":"Hobgoblin","hitpoints":29,"combatLevel":28,"attackSpeed":4,"attackLevel":22,"strengthLevel":24,"defenceLevel":24,"rangeLevel":1,"magicLevel":1},"3289":{"name":"Hobgoblin","hitpoints":29,"combatLevel":28,"attackSpeed":4,"attackLevel":22,"strengthLevel":24,"defenceLevel":24,"rangeLevel":1,"magicLevel":1},"3313":{"name":"Giant rat","hitpoints":5,"combatLevel":3,"attackSpeed":4,"attackLevel":2,"strengthLevel":3,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"3314":{"name":"Giant rat","hitpoints":5,"combatLevel":3,"attackSpeed":4,"attackLevel":2,"strengthLevel":3,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"3315":{"name":"Giant rat","hitpoints":5,"combatLevel":3,"attackSpeed":4,"attackLevel":2,"strengthLevel":3,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"3328":{"name":"Earth Warrior Champion","hitpoints":108,"combatLevel":102,"attackSpeed":4,"attackLevel":84,"strengthLevel":84,"defenceLevel":84,"rangeLevel":1,"magicLevel":1},"3329":{"name":"Giant Champion","hitpoints":70,"combatLevel":56,"attackSpeed":4,"attackLevel":36,"strengthLevel":44,"defenceLevel":52,"rangeLevel":1,"magicLevel":1},"3330":{"name":"Ghoul Champion","hitpoints":100,"combatLevel":85,"attackSpeed":4},"3353":{"name":"Goblin Champion","hitpoints":32,"combatLevel":24,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":14,"rangeLevel":1,"magicLevel":26},"3354":{"name":"Hobgoblin Champion","hitpoints":58,"combatLevel":56,"attackSpeed":4,"attackLevel":44,"strengthLevel":48,"defenceLevel":48,"rangeLevel":44,"magicLevel":1},"3355":{"name":"Imp Champion","hitpoints":40,"combatLevel":14,"attackSpeed":4,"attackLevel":5,"strengthLevel":5,"defenceLevel":5,"rangeLevel":5,"magicLevel":1},"3356":{"name":"Jogre Champion","hitpoints":120,"combatLevel":107,"attackSpeed":4,"attackLevel":86,"strengthLevel":86,"defenceLevel":86,"rangeLevel":1,"magicLevel":1},"3357":{"name":"Lesser Demon Champion","hitpoints":148,"combatLevel":162,"attackSpeed":4,"attackLevel":136,"strengthLevel":140,"defenceLevel":142,"rangeLevel":1,"magicLevel":136},"3358":{"name":"Skeleton Champion","hitpoints":58,"combatLevel":40,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":34,"rangeLevel":36,"magicLevel":1},"3359":{"name":"Zombies Champion","hitpoints":60,"combatLevel":51,"attackSpeed":4,"attackLevel":38,"strengthLevel":42,"defenceLevel":42,"rangeLevel":1,"magicLevel":1},"3360":{"name":"Leon d'Cour","hitpoints":123,"combatLevel":141,"attackSpeed":4},"3361":{"name":"Kourend guard","hitpoints":800,"combatLevel":1337,"attackSpeed":4,"attackLevel":800,"strengthLevel":400,"defenceLevel":300,"rangeLevel":1,"magicLevel":1,"stabDef":8,"slashDef":9,"crushDef":7,"rangeDef":8,"bonusAttack":60,"bonusStrength":7},"3400":{"name":"Culinaromancer","hitpoints":150,"combatLevel":75,"attackSpeed":4,"attackLevel":10,"strengthLevel":100,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"3420":{"name":"Rabbit","hitpoints":5,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3421":{"name":"Rabbit","hitpoints":5,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3422":{"name":"Rabbit","hitpoints":5,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3423":{"name":"Grizzly bear","hitpoints":35,"combatLevel":42,"attackSpeed":4,"attackLevel":40,"strengthLevel":36,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"3424":{"name":"Grizzly bear cub","hitpoints":35,"combatLevel":33,"attackSpeed":4,"attackLevel":30,"strengthLevel":26,"defenceLevel":25,"rangeLevel":1,"magicLevel":1},"3425":{"name":"Grizzly bear cub","hitpoints":35,"combatLevel":36,"attackSpeed":4,"attackLevel":32,"strengthLevel":32,"defenceLevel":28,"rangeLevel":1,"magicLevel":1},"3426":{"name":"Dire Wolf","hitpoints":85,"combatLevel":88,"attackSpeed":4,"attackLevel":75,"strengthLevel":75,"defenceLevel":75,"rangeLevel":1,"magicLevel":1},"3428":{"name":"Iorwerth Archer","hitpoints":105,"combatLevel":90,"attackSpeed":5,"attackLevel":10,"strengthLevel":10,"defenceLevel":80,"rangeLevel":90,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60},"3429":{"name":"Iorwerth Warrior","hitpoints":105,"combatLevel":108,"attackSpeed":4,"attackLevel":95,"strengthLevel":95,"defenceLevel":80,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60},"3433":{"name":"Tyras guard","hitpoints":110,"combatLevel":110,"attackSpeed":5,"attackLevel":85,"strengthLevel":95,"defenceLevel":100,"magicLevel":1,"stabDef":87,"slashDef":84,"crushDef":76,"rangeDef":79,"bonusAttack":20,"bonusStrength":30},"3434":{"name":"Tyras guard","hitpoints":110,"combatLevel":110,"attackSpeed":5,"attackLevel":85,"strengthLevel":95,"defenceLevel":100,"magicLevel":1,"stabDef":87,"slashDef":84,"crushDef":76,"rangeDef":79,"bonusAttack":20,"bonusStrength":30},"3443":{"name":"Lucien","hitpoints":17,"combatLevel":14,"attackSpeed":4,"attackLevel":12,"strengthLevel":11,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"stabDef":6,"slashDef":8,"crushDef":7,"rangeDef":4,"bonusAttack":5,"bonusStrength":4},"3444":{"name":"Lucien","hitpoints":17,"combatLevel":14,"attackSpeed":4,"attackLevel":12,"strengthLevel":11,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"stabDef":6,"slashDef":8,"crushDef":7,"rangeDef":4,"bonusAttack":5,"bonusStrength":4},"3445":{"name":"Guardian of Armadyl","hitpoints":50,"combatLevel":45,"attackSpeed":5,"attackLevel":37,"strengthLevel":37,"defenceLevel":37,"rangeLevel":1,"magicLevel":1,"stabDef":43,"slashDef":55,"crushDef":50,"rangeDef":51,"bonusAttack":14,"bonusStrength":16},"3446":{"name":"Guardian of Armadyl","hitpoints":40,"combatLevel":43,"attackSpeed":5,"attackLevel":37,"strengthLevel":37,"defenceLevel":37,"rangeLevel":1,"magicLevel":1,"stabDef":43,"slashDef":55,"crushDef":50,"rangeDef":51,"bonusAttack":14,"bonusStrength":16},"3448":{"name":"Fire Warrior of Lesarkus","hitpoints":59,"combatLevel":84,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":78,"rangeLevel":1,"magicLevel":62,"stabDef":34,"slashDef":37,"crushDef":35,"rangeDef":35},"3449":{"name":"Shadow Hound","hitpoints":62,"combatLevel":63,"attackSpeed":4,"attackLevel":53,"strengthLevel":54,"defenceLevel":54,"rangeLevel":1,"magicLevel":1},"3456":{"name":"Fareed","hitpoints":130,"combatLevel":167,"attackSpeed":4,"attackLevel":190,"strengthLevel":120,"defenceLevel":135,"rangeLevel":1,"magicLevel":1,"stabDef":100,"slashDef":100,"crushDef":100,"bonusStrength":120},"3458":{"name":"Kamil","hitpoints":130,"combatLevel":154,"attackSpeed":4,"attackLevel":190,"strengthLevel":80,"defenceLevel":135,"rangeLevel":1,"magicLevel":1,"stabDef":35,"slashDef":60,"crushDef":35,"bonusAttack":60,"bonusStrength":100},"3459":{"name":"Dessous","hitpoints":200,"combatLevel":139,"attackSpeed":3,"attackLevel":99,"strengthLevel":99,"defenceLevel":99,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":150,"crushDef":150,"bonusAttack":50,"bonusStrength":50},"3460":{"name":"Dessous","hitpoints":200,"combatLevel":139,"attackSpeed":3,"attackLevel":99,"strengthLevel":99,"defenceLevel":99,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":150,"crushDef":150,"bonusAttack":50,"bonusStrength":50},"3473":{"name":"The Inadequacy","hitpoints":180,"combatLevel":343,"attackSpeed":4,"attackLevel":564,"strengthLevel":170,"defenceLevel":240,"rangeLevel":170,"magicLevel":1},"3474":{"name":"The Everlasting","hitpoints":230,"combatLevel":223,"attackSpeed":6,"attackLevel":187,"strengthLevel":231,"defenceLevel":120,"rangeLevel":1,"magicLevel":1},"3475":{"name":"The Untouchable","hitpoints":90,"combatLevel":274,"attackSpeed":6,"attackLevel":187,"strengthLevel":255,"defenceLevel":434,"rangeLevel":1,"magicLevel":1},"3476":{"name":"The Illusive","hitpoints":140,"combatLevel":108,"attackSpeed":6},"3477":{"name":"A Doubt","hitpoints":50,"combatLevel":78,"attackSpeed":6},"3478":{"name":"The Illusive","hitpoints":140,"combatLevel":108,"attackSpeed":6},"3481":{"name":"Count Draynor","hitpoints":35,"combatLevel":34,"attackSpeed":4,"attackLevel":30,"strengthLevel":25,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"stabDef":2,"slashDef":1,"crushDef":3},"3482":{"name":"Count Draynor","hitpoints":35,"combatLevel":34,"attackSpeed":4,"attackLevel":30,"strengthLevel":25,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"stabDef":2,"slashDef":1,"crushDef":3},"3484":{"name":"Monk of Zamorak","hitpoints":20,"combatLevel":22,"attackSpeed":4,"attackLevel":18,"strengthLevel":18,"defenceLevel":22,"rangeLevel":1,"magicLevel":25},"3485":{"name":"Monk of Zamorak","hitpoints":10,"combatLevel":17,"attackSpeed":4,"attackLevel":8,"strengthLevel":8,"defenceLevel":12,"rangeLevel":1,"magicLevel":25},"3486":{"name":"Monk of Zamorak","hitpoints":25,"combatLevel":30,"attackSpeed":4,"attackLevel":25,"strengthLevel":25,"defenceLevel":25,"rangeLevel":1,"magicLevel":40},"3508":{"name":"Bouncer","hitpoints":120,"combatLevel":160,"attackSpeed":4,"attackLevel":145,"strengthLevel":145,"defenceLevel":145,"rangeLevel":1,"magicLevel":1},"3509":{"name":"Bouncer","hitpoints":120,"combatLevel":160,"attackSpeed":4,"attackLevel":145,"strengthLevel":145,"defenceLevel":145,"rangeLevel":1,"magicLevel":1},"3517":{"name":"Renegade Knight","hitpoints":48,"combatLevel":37,"attackSpeed":4,"attackLevel":28,"strengthLevel":28,"defenceLevel":28,"rangeLevel":1,"magicLevel":1,"stabDef":99,"slashDef":82,"crushDef":62,"bonusAttack":20,"bonusStrength":16},"3518":{"name":"Thrantax the Mighty","hitpoints":80,"combatLevel":92,"attackSpeed":4,"attackLevel":80,"strengthLevel":80,"defenceLevel":80,"rangeLevel":1,"magicLevel":1},"3527":{"name":"Sir Mordred","hitpoints":38,"combatLevel":39,"attackSpeed":4,"attackLevel":33,"strengthLevel":33,"defenceLevel":33,"rangeLevel":1,"magicLevel":1,"stabDef":99,"slashDef":82,"crushDef":45,"bonusAttack":20,"bonusStrength":16},"3544":{"name":"Desert snake","hitpoints":6,"combatLevel":5,"attackSpeed":4,"attackLevel":4,"strengthLevel":5,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"3549":{"name":"Menaphite Thug","hitpoints":60,"combatLevel":55,"attackSpeed":4,"attackLevel":60,"strengthLevel":50,"defenceLevel":20,"stabDef":9,"slashDef":8,"crushDef":10,"bonusAttack":4,"bonusStrength":9},"3550":{"name":"Menaphite Thug","hitpoints":60,"combatLevel":55,"attackSpeed":4,"attackLevel":60,"strengthLevel":50,"defenceLevel":20,"stabDef":9,"slashDef":8,"crushDef":10,"bonusAttack":4,"bonusStrength":9},"3551":{"name":"Tough Guy","hitpoints":75,"combatLevel":75,"attackSpeed":4,"attackLevel":85,"strengthLevel":50,"defenceLevel":50,"magicLevel":80,"stabDef":9,"slashDef":8,"crushDef":10,"bonusAttack":9,"bonusStrength":9,"poisonImmune":true},"3565":{"name":"Skeleton","combatLevel":22,"attackSpeed":4,"undead":true},"3600":{"name":"Frogeel","hitpoints":90,"combatLevel":103,"attackSpeed":4,"attackLevel":91,"strengthLevel":89,"defenceLevel":90,"rangeLevel":1,"magicLevel":1},"3601":{"name":"Unicow","hitpoints":24,"combatLevel":25,"attackSpeed":4,"attackLevel":18,"strengthLevel":26,"defenceLevel":22,"rangeLevel":1,"magicLevel":1},"3602":{"name":"Spidine","hitpoints":35,"combatLevel":42,"attackSpeed":4,"attackLevel":37,"strengthLevel":40,"defenceLevel":36,"rangeLevel":1,"magicLevel":1},"3603":{"name":"Swordchick","hitpoints":35,"combatLevel":46,"attackSpeed":4,"attackLevel":41,"strengthLevel":42,"defenceLevel":45,"rangeLevel":1,"magicLevel":1},"3604":{"name":"Jubster","hitpoints":60,"combatLevel":87,"attackSpeed":4,"attackLevel":82,"strengthLevel":78,"defenceLevel":81,"rangeLevel":1,"magicLevel":1},"3605":{"name":"Newtroost","hitpoints":18,"combatLevel":19,"attackSpeed":4,"attackLevel":18,"strengthLevel":16,"defenceLevel":17,"rangeLevel":1,"magicLevel":1},"3607":{"name":"Dungeon rat","hitpoints":12,"combatLevel":12,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"3608":{"name":"Dungeon rat","hitpoints":12,"combatLevel":12,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"3609":{"name":"Dungeon rat","hitpoints":12,"combatLevel":12,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"3612":{"name":"Possessed pickaxe","hitpoints":40,"combatLevel":50,"attackSpeed":4,"attackLevel":40,"strengthLevel":55,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":15,"slashDef":10,"crushDef":5,"rangeDef":10,"magicDef":5},"3615":{"name":"Skeletal miner","hitpoints":39,"combatLevel":42,"attackSpeed":4,"attackLevel":35,"strengthLevel":37,"defenceLevel":38,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":11,"rangeDef":4,"magicDef":1,"bonusAttack":15,"bonusStrength":14,"undead":true},"3616":{"name":"Treus Dayth","hitpoints":100,"combatLevel":95,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5},"3651":{"name":"Gardener","hitpoints":7,"combatLevel":4,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":7,"rangeLevel":1,"magicLevel":1},"3661":{"name":"Chicken","hitpoints":3,"combatLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3662":{"name":"Chicken","hitpoints":3,"combatLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3663":{"name":"Rooster","hitpoints":5,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3664":{"name":"Rabbit","hitpoints":5,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3665":{"name":"Rabbit","hitpoints":5,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3674":{"name":"Ragnar","hitpoints":1,"combatLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3675":{"name":"Einar","hitpoints":1,"combatLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3676":{"name":"Alrik","hitpoints":1,"combatLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3677":{"name":"Thorhild","hitpoints":1,"combatLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3678":{"name":"Halla","hitpoints":1,"combatLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"3681":{"name":"Rannveig","hitpoints":1,"combatLevel":2,"attackSpeed":4,"attackLevel":3,"strengthLevel":3,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"3682":{"name":"Thora","hitpoints":1,"combatLevel":2,"attackSpeed":4,"attackLevel":3,"strengthLevel":3,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"3683":{"name":"Valgerd","hitpoints":1,"combatLevel":2,"attackSpeed":4,"attackLevel":3,"strengthLevel":3,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"3684":{"name":"Skraeling","hitpoints":1,"combatLevel":2,"attackSpeed":4,"attackLevel":3,"strengthLevel":3,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"3685":{"name":"Broddi","hitpoints":1,"combatLevel":2,"attackSpeed":4,"attackLevel":3,"strengthLevel":3,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"3686":{"name":"Skraeling","hitpoints":1,"combatLevel":2,"attackSpeed":4,"attackLevel":3,"strengthLevel":3,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"3687":{"name":"Ragnvald","hitpoints":1,"combatLevel":2,"attackSpeed":4,"attackLevel":3,"strengthLevel":3,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"3690":{"name":"Vampyre Juvinate","hitpoints":85,"combatLevel":54,"attackSpeed":4,"attackLevel":40,"strengthLevel":30,"defenceLevel":40,"rangeLevel":1,"magicLevel":1},"3691":{"name":"Vampyre Juvinate","hitpoints":85,"combatLevel":54,"attackSpeed":4,"attackLevel":40,"strengthLevel":30,"defenceLevel":40,"rangeLevel":1,"magicLevel":1},"3692":{"name":"Vampyre Juvenile","hitpoints":60,"combatLevel":45,"attackSpeed":4,"attackLevel":40,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"3693":{"name":"Vampyre Juvenile","hitpoints":60,"combatLevel":45,"attackSpeed":4,"attackLevel":40,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"3694":{"name":"Vampyre Juvinate","hitpoints":85,"combatLevel":54,"attackSpeed":4,"attackLevel":40,"strengthLevel":30,"defenceLevel":40,"rangeLevel":1,"magicLevel":1},"3695":{"name":"Vampyre Juvinate","hitpoints":85,"combatLevel":54,"attackSpeed":4,"attackLevel":40,"strengthLevel":30,"defenceLevel":40,"rangeLevel":1,"magicLevel":1},"3696":{"name":"Vampyre Juvenile","hitpoints":60,"combatLevel":45,"attackSpeed":4,"attackLevel":40,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"3697":{"name":"Vampyre Juvenile","hitpoints":60,"combatLevel":45,"attackSpeed":4,"attackLevel":40,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"3698":{"name":"Vampyre Juvinate","hitpoints":85,"combatLevel":54,"attackSpeed":4,"attackLevel":40,"strengthLevel":30,"defenceLevel":40,"rangeLevel":1,"magicLevel":1},"3699":{"name":"Vampyre Juvinate","hitpoints":85,"combatLevel":54,"attackSpeed":4,"attackLevel":40,"strengthLevel":30,"defenceLevel":40,"rangeLevel":1,"magicLevel":1},"3707":{"name":"Feral Vampyre","hitpoints":80,"combatLevel":64,"attackSpeed":4,"attackLevel":55,"strengthLevel":30,"defenceLevel":60,"rangeLevel":1,"magicLevel":1},"3708":{"name":"Feral Vampyre","hitpoints":80,"combatLevel":64,"attackSpeed":4,"attackLevel":55,"strengthLevel":30,"defenceLevel":60,"rangeLevel":1,"magicLevel":1},"3709":{"name":"Vyrewatch","hitpoints":90,"combatLevel":105,"attackSpeed":4,"attackLevel":105,"strengthLevel":86,"defenceLevel":85,"rangeLevel":105,"magicLevel":105},"3710":{"name":"Vyrewatch","hitpoints":90,"combatLevel":110,"attackSpeed":4,"attackLevel":110,"strengthLevel":96,"defenceLevel":85,"rangeLevel":110,"magicLevel":110},"3711":{"name":"Vyrewatch","hitpoints":105,"combatLevel":120,"attackSpeed":4,"attackLevel":120,"strengthLevel":106,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3712":{"name":"Vyrewatch","hitpoints":110,"combatLevel":125,"attackSpeed":4,"attackLevel":120,"strengthLevel":116,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3713":{"name":"Vyrewatch","hitpoints":90,"combatLevel":105,"attackSpeed":4,"attackLevel":105,"strengthLevel":86,"defenceLevel":85,"rangeLevel":105,"magicLevel":105},"3714":{"name":"Vyrewatch","hitpoints":90,"combatLevel":110,"attackSpeed":4,"attackLevel":110,"strengthLevel":96,"defenceLevel":85,"rangeLevel":110,"magicLevel":110},"3715":{"name":"Vyrewatch","hitpoints":105,"combatLevel":120,"attackSpeed":4,"attackLevel":120,"strengthLevel":106,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3716":{"name":"Vyrewatch","hitpoints":110,"combatLevel":125,"attackSpeed":4,"attackLevel":120,"strengthLevel":116,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3717":{"name":"Vyrewatch","hitpoints":90,"combatLevel":105,"attackSpeed":4,"attackLevel":105,"strengthLevel":86,"defenceLevel":85,"rangeLevel":105,"magicLevel":105},"3718":{"name":"Vyrewatch","hitpoints":90,"combatLevel":110,"attackSpeed":4,"attackLevel":110,"strengthLevel":96,"defenceLevel":85,"rangeLevel":110,"magicLevel":110},"3719":{"name":"Vyrewatch","hitpoints":105,"combatLevel":120,"attackSpeed":4,"attackLevel":120,"strengthLevel":106,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3720":{"name":"Vyrewatch","hitpoints":110,"combatLevel":125,"attackSpeed":4,"attackLevel":120,"strengthLevel":116,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3721":{"name":"Vyrewatch","hitpoints":90,"combatLevel":105,"attackSpeed":4,"attackLevel":105,"strengthLevel":86,"defenceLevel":85,"rangeLevel":105,"magicLevel":105},"3722":{"name":"Vyrewatch","hitpoints":90,"combatLevel":110,"attackSpeed":4,"attackLevel":110,"strengthLevel":96,"defenceLevel":85,"rangeLevel":110,"magicLevel":110},"3723":{"name":"Vyrewatch","hitpoints":105,"combatLevel":120,"attackSpeed":4,"attackLevel":120,"strengthLevel":106,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3724":{"name":"Vyrewatch","hitpoints":110,"combatLevel":125,"attackSpeed":4,"attackLevel":120,"strengthLevel":116,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3725":{"name":"Vyrewatch","hitpoints":90,"combatLevel":105,"attackSpeed":4,"attackLevel":105,"strengthLevel":86,"defenceLevel":85,"rangeLevel":105,"magicLevel":105},"3726":{"name":"Vyrewatch","hitpoints":90,"combatLevel":110,"attackSpeed":4,"attackLevel":110,"strengthLevel":96,"defenceLevel":85,"rangeLevel":110,"magicLevel":110},"3727":{"name":"Vyrewatch","hitpoints":105,"combatLevel":120,"attackSpeed":4,"attackLevel":120,"strengthLevel":106,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3728":{"name":"Vyrewatch","hitpoints":110,"combatLevel":125,"attackSpeed":4,"attackLevel":120,"strengthLevel":116,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3729":{"name":"Vyrewatch","hitpoints":90,"combatLevel":105,"attackSpeed":4,"attackLevel":105,"strengthLevel":86,"defenceLevel":85,"rangeLevel":105,"magicLevel":105},"3730":{"name":"Vyrewatch","hitpoints":90,"combatLevel":110,"attackSpeed":4,"attackLevel":110,"strengthLevel":96,"defenceLevel":85,"rangeLevel":110,"magicLevel":110},"3731":{"name":"Vyrewatch","hitpoints":105,"combatLevel":120,"attackSpeed":4,"attackLevel":120,"strengthLevel":106,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3732":{"name":"Vyrewatch","hitpoints":110,"combatLevel":125,"attackSpeed":4,"attackLevel":120,"strengthLevel":116,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3734":{"name":"Vanstrom Klause","hitpoints":155,"combatLevel":169,"attackSpeed":8,"attackLevel":150,"strengthLevel":136,"defenceLevel":150,"rangeLevel":150,"magicLevel":150,"poisonImmune":true,"venomImmune":true},"3735":{"name":"Vanstrom Klause","hitpoints":155,"combatLevel":169,"attackSpeed":8,"attackLevel":150,"strengthLevel":136,"defenceLevel":150,"rangeLevel":150,"magicLevel":150,"poisonImmune":true,"venomImmune":true},"3736":{"name":"Vanstrom Klause","hitpoints":155,"combatLevel":169,"attackSpeed":8,"attackLevel":150,"strengthLevel":136,"defenceLevel":150,"rangeLevel":150,"magicLevel":150,"poisonImmune":true,"venomImmune":true},"3737":{"name":"Vanstrom Klause","hitpoints":155,"combatLevel":169,"attackSpeed":8,"attackLevel":150,"strengthLevel":136,"defenceLevel":150,"rangeLevel":150,"magicLevel":150,"poisonImmune":true,"venomImmune":true},"3738":{"name":"Vanstrom Klause","hitpoints":155,"combatLevel":169,"attackSpeed":8,"attackLevel":150,"strengthLevel":136,"defenceLevel":150,"rangeLevel":150,"magicLevel":150,"poisonImmune":true,"venomImmune":true},"3739":{"name":"Vanstrom Klause","hitpoints":155,"combatLevel":169,"attackSpeed":8,"attackLevel":150,"strengthLevel":136,"defenceLevel":150,"rangeLevel":150,"magicLevel":150,"poisonImmune":true,"venomImmune":true},"3748":{"name":"Vyrewatch","hitpoints":90,"combatLevel":105,"attackSpeed":4,"attackLevel":105,"strengthLevel":86,"defenceLevel":85,"rangeLevel":105,"magicLevel":105},"3749":{"name":"Vyrewatch","hitpoints":90,"combatLevel":110,"attackSpeed":4,"attackLevel":110,"strengthLevel":96,"defenceLevel":85,"rangeLevel":110,"magicLevel":110},"3750":{"name":"Vyrewatch","hitpoints":105,"combatLevel":120,"attackSpeed":4,"attackLevel":120,"strengthLevel":106,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3751":{"name":"Vyrewatch","hitpoints":110,"combatLevel":125,"attackSpeed":4,"attackLevel":120,"strengthLevel":116,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3752":{"name":"Vyrewatch","hitpoints":90,"combatLevel":105,"attackSpeed":4,"attackLevel":105,"strengthLevel":86,"defenceLevel":85,"rangeLevel":105,"magicLevel":105},"3753":{"name":"Vyrewatch","hitpoints":90,"combatLevel":110,"attackSpeed":4,"attackLevel":110,"strengthLevel":96,"defenceLevel":85,"rangeLevel":110,"magicLevel":110},"3754":{"name":"Vyrewatch","hitpoints":105,"combatLevel":120,"attackSpeed":4,"attackLevel":120,"strengthLevel":106,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3755":{"name":"Vyrewatch","hitpoints":110,"combatLevel":125,"attackSpeed":4,"attackLevel":120,"strengthLevel":116,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3756":{"name":"Vyrewatch","hitpoints":90,"combatLevel":105,"attackSpeed":4,"attackLevel":105,"strengthLevel":86,"defenceLevel":85,"rangeLevel":105,"magicLevel":105},"3757":{"name":"Vyrewatch","hitpoints":90,"combatLevel":110,"attackSpeed":4,"attackLevel":110,"strengthLevel":96,"defenceLevel":85,"rangeLevel":110,"magicLevel":110},"3758":{"name":"Vyrewatch","hitpoints":105,"combatLevel":120,"attackSpeed":4,"attackLevel":120,"strengthLevel":106,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3759":{"name":"Vyrewatch","hitpoints":110,"combatLevel":125,"attackSpeed":4,"attackLevel":120,"strengthLevel":116,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3760":{"name":"Vyrewatch","hitpoints":90,"combatLevel":105,"attackSpeed":4,"attackLevel":105,"strengthLevel":86,"defenceLevel":85,"rangeLevel":105,"magicLevel":105},"3761":{"name":"Vyrewatch","hitpoints":90,"combatLevel":110,"attackSpeed":4,"attackLevel":110,"strengthLevel":96,"defenceLevel":85,"rangeLevel":110,"magicLevel":110},"3762":{"name":"Vyrewatch","hitpoints":105,"combatLevel":120,"attackSpeed":4,"attackLevel":120,"strengthLevel":106,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3763":{"name":"Vyrewatch","hitpoints":110,"combatLevel":125,"attackSpeed":4,"attackLevel":120,"strengthLevel":116,"defenceLevel":85,"rangeLevel":120,"magicLevel":120},"3851":{"name":"Moss giant","hitpoints":85,"combatLevel":48,"attackSpeed":6,"attackLevel":30,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"bonusAttack":33,"bonusStrength":31},"3852":{"name":"Moss giant","hitpoints":85,"combatLevel":48,"attackSpeed":6,"attackLevel":30,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"bonusAttack":33,"bonusStrength":31},"3863":{"name":"Jake","hitpoints":50,"combatLevel":37,"attackSpeed":4,"attackLevel":27,"strengthLevel":31,"defenceLevel":25,"rangeLevel":1,"magicLevel":1},"3865":{"name":"Wilson","hitpoints":50,"combatLevel":37,"attackSpeed":4,"attackLevel":27,"strengthLevel":31,"defenceLevel":25,"rangeLevel":1,"magicLevel":1},"3869":{"name":"Palmer","hitpoints":50,"combatLevel":37,"attackSpeed":4,"attackLevel":27,"strengthLevel":31,"defenceLevel":25,"rangeLevel":1,"magicLevel":1},"3901":{"name":"Fox","hitpoints":30,"combatLevel":19,"attackSpeed":4,"attackLevel":1,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":30,"crushDef":30,"rangeDef":30,"magicDef":30,"bonusAttack":30,"bonusStrength":30},"3902":{"name":"Bunny","hitpoints":5,"combatLevel":2},"3903":{"name":"Bunny","hitpoints":5,"combatLevel":2},"3908":{"name":"Bear Cub","hitpoints":20,"combatLevel":15,"attackSpeed":4,"attackLevel":10,"strengthLevel":15,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"3909":{"name":"Bear Cub","hitpoints":20,"combatLevel":15,"attackSpeed":4,"attackLevel":10,"strengthLevel":15,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"3910":{"name":"Unicorn Foal","hitpoints":15,"combatLevel":12,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"3911":{"name":"Black unicorn Foal","hitpoints":25,"combatLevel":22,"attackSpeed":4,"attackLevel":18,"strengthLevel":18,"defenceLevel":18,"rangeLevel":1,"magicLevel":1},"3912":{"name":"Wolf","hitpoints":69,"combatLevel":64,"attackSpeed":4,"attackLevel":50,"strengthLevel":55,"defenceLevel":52,"rangeLevel":1,"magicLevel":1},"3922":{"name":"The Draugen","hitpoints":60,"combatLevel":69,"attackSpeed":4,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stabDef":100,"slashDef":100,"crushDef":100,"rangeDef":500,"magicDef":500,"poisonImmune":true,"venomImmune":true,"undead":true},"3938":{"name":"Freidir","hitpoints":50,"combatLevel":48,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"bonusStrength":20},"3939":{"name":"Borrokar","hitpoints":50,"combatLevel":48,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"bonusStrength":20},"3940":{"name":"Lanzig","hitpoints":50,"combatLevel":48,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"bonusStrength":20},"3943":{"name":"Lensa","hitpoints":50,"combatLevel":48,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"bonusStrength":20},"3944":{"name":"Jennella","hitpoints":50,"combatLevel":48,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"bonusStrength":20},"3949":{"name":"Market Guard","hitpoints":50,"combatLevel":48,"attackSpeed":3,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":50,"rangeDef":50,"magicDef":50,"bonusAttack":40,"bonusStrength":40},"3950":{"name":"Warrior","hitpoints":50,"combatLevel":48,"attackSpeed":3,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":50,"rangeDef":50,"magicDef":50,"bonusAttack":40,"bonusStrength":40},"3957":{"name":"Ungadulu","hitpoints":65,"combatLevel":70,"attackSpeed":4,"attackLevel":57,"strengthLevel":65,"defenceLevel":61,"magicLevel":65,"bonusStrength":3,"bonusRangeStrength":7},"3958":{"name":"Ungadulu","hitpoints":150,"combatLevel":169,"attackSpeed":4,"attackLevel":147,"strengthLevel":147,"defenceLevel":147,"bonusStrength":3,"bonusRangeStrength":7},"3959":{"name":"Jungle savage","hitpoints":90,"combatLevel":90,"attackSpeed":4,"attackLevel":76,"strengthLevel":76,"defenceLevel":76,"bonusAttack":8,"bonusStrength":10},"3962":{"name":"Nezikchened","hitpoints":150,"combatLevel":187,"attackSpeed":5,"attackLevel":165,"strengthLevel":168,"defenceLevel":167,"rangeLevel":160,"magicLevel":160,"demon":true},"3963":{"name":"Viyeldi","hitpoints":80,"combatLevel":79,"attackSpeed":4,"attackLevel":62,"strengthLevel":66,"defenceLevel":70,"bonusAttack":7,"bonusStrength":3},"3964":{"name":"San Tojalon","hitpoints":120,"combatLevel":106,"attackSpeed":4,"attackLevel":86,"strengthLevel":84,"defenceLevel":86,"stabDef":18,"slashDef":22,"crushDef":20,"rangeDef":20,"bonusAttack":16,"bonusStrength":17},"3965":{"name":"Irvig Senay","hitpoints":125,"combatLevel":100,"attackSpeed":4,"attackLevel":76,"strengthLevel":74,"defenceLevel":81,"stabDef":27,"slashDef":31,"crushDef":29,"rangeDef":29,"bonusAttack":29,"bonusStrength":31},"3966":{"name":"Ranalph Devere","hitpoints":130,"combatLevel":92,"attackSpeed":4,"attackLevel":66,"strengthLevel":67,"defenceLevel":66,"stabDef":38,"slashDef":40,"crushDef":36,"rangeDef":38,"bonusAttack":45,"bonusStrength":44},"3969":{"name":"Zombie rat","hitpoints":5,"combatLevel":3,"attackSpeed":4,"attackLevel":2,"strengthLevel":3,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"3970":{"name":"Zombie rat","hitpoints":5,"combatLevel":3,"attackSpeed":4,"attackLevel":2,"strengthLevel":3,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"3971":{"name":"Zombie rat","hitpoints":5,"combatLevel":3,"attackSpeed":4,"attackLevel":2,"strengthLevel":3,"defenceLevel":2,"rangeLevel":1,"magicLevel":1},"3972":{"name":"Skeleton","hitpoints":29,"combatLevel":22,"attackSpeed":4,"attackLevel":15,"strengthLevel":18,"defenceLevel":17,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":11,"rangeDef":4,"magicDef":1,"bonusAttack":15,"bonusStrength":14,"undead":true},"3973":{"name":"Skeleton","hitpoints":29,"combatLevel":22,"attackSpeed":4,"attackLevel":15,"strengthLevel":18,"defenceLevel":17,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":11,"rangeDef":4,"magicDef":1,"bonusAttack":15,"bonusStrength":14,"undead":true},"3974":{"name":"Skeleton","hitpoints":29,"combatLevel":22,"attackSpeed":4,"attackLevel":15,"strengthLevel":18,"defenceLevel":17,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":11,"rangeDef":4,"magicDef":1,"bonusAttack":15,"bonusStrength":14,"undead":true},"3975":{"name":"Ghost","hitpoints":25,"combatLevel":19,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"3976":{"name":"Ghost","hitpoints":25,"combatLevel":19,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"3977":{"name":"Ghost","hitpoints":25,"combatLevel":19,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"3978":{"name":"Ghost","hitpoints":25,"combatLevel":19,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"3979":{"name":"Ghost","hitpoints":25,"combatLevel":19,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"3980":{"name":"Zombie","hitpoints":30,"combatLevel":24,"attackSpeed":5,"attackLevel":19,"strengthLevel":21,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":8,"crushDef":12,"rangeDef":11,"magicDef":10,"bonusAttack":5,"bonusStrength":7,"undead":true},"3981":{"name":"Zombie","hitpoints":30,"combatLevel":24,"attackSpeed":5,"attackLevel":19,"strengthLevel":21,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"stabDef":9,"slashDef":8,"crushDef":12,"rangeDef":11,"magicDef":10,"bonusAttack":5,"bonusStrength":7,"undead":true},"3982":{"name":"Lesser demon","hitpoints":81,"combatLevel":82,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":71,"rangeLevel":1,"magicLevel":1,"demon":true},"3996":{"name":"Witch's experiment","hitpoints":21,"combatLevel":19,"attackSpeed":4,"attackLevel":18,"strengthLevel":10,"defenceLevel":19,"rangeLevel":1,"magicLevel":1},"3997":{"name":"Witch's experiment (second form)","hitpoints":31,"combatLevel":30,"attackSpeed":4,"attackLevel":28,"strengthLevel":20,"defenceLevel":29,"rangeLevel":1,"magicLevel":1},"3998":{"name":"Witch's experiment (third form)","hitpoints":41,"combatLevel":42,"attackSpeed":4,"attackLevel":38,"strengthLevel":30,"defenceLevel":39,"rangeLevel":1,"magicLevel":1},"3999":{"name":"Witch's experiment (fourth form)","hitpoints":51,"combatLevel":53,"attackSpeed":4,"attackLevel":48,"strengthLevel":40,"defenceLevel":49,"rangeLevel":1,"magicLevel":1},"4004":{"name":"Shadow","hitpoints":15,"combatLevel":73,"attackSpeed":4,"attackLevel":90,"strengthLevel":120,"defenceLevel":5,"rangeLevel":1,"magicLevel":90,"stabDef":30,"slashDef":30,"crushDef":30,"rangeDef":30,"magicDef":30},"4005":{"name":"Dark beast","hitpoints":220,"combatLevel":182,"slayerLevel":90,"attackSpeed":4,"attackLevel":140,"strengthLevel":160,"defenceLevel":120,"rangeLevel":1,"magicLevel":160,"stabDef":30,"slashDef":40,"crushDef":100,"rangeDef":100,"magicDef":90},"4043":{"name":"Pirate","hitpoints":20},"4044":{"name":"Pirate","hitpoints":20},"4045":{"name":"Pirate","hitpoints":20},"4046":{"name":"Pirate","hitpoints":20},"4047":{"name":"Pirate","hitpoints":20},"4048":{"name":"Pirate","hitpoints":20},"4049":{"name":"Pirate","hitpoints":20},"4050":{"name":"Pirate","hitpoints":20},"4051":{"name":"Pirate","hitpoints":20},"4052":{"name":"Pirate","hitpoints":20},"4067":{"name":"Black Knight Titan","hitpoints":142,"combatLevel":120,"attackSpeed":7,"attackLevel":91,"strengthLevel":100,"defenceLevel":91,"rangeLevel":1,"magicLevel":1,"stabDef":18,"slashDef":27,"crushDef":18,"rangeDef":1000,"magicDef":1000,"bonusAttack":27,"bonusStrength":22},"4088":{"name":"Soldier","hitpoints":50,"combatLevel":48,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"magicLevel":1,"stabDef":15,"slashDef":23,"crushDef":21,"rangeDef":14,"magicDef":6,"bonusAttack":11,"bonusStrength":12},"4095":{"name":"Eadburg","hitpoints":10,"combatLevel":4,"attackSpeed":4},"4096":{"name":"Archer","hitpoints":50,"combatLevel":42,"attackSpeed":6,"defenceLevel":40,"rangeLevel":40,"magicLevel":1,"stabDef":39,"slashDef":50,"crushDef":49,"rangeDef":45,"magicDef":18,"bonusAttack":34},"4097":{"name":"Archer","hitpoints":50,"combatLevel":42,"attackSpeed":6,"defenceLevel":40,"rangeLevel":40,"magicLevel":1,"stabDef":39,"slashDef":50,"crushDef":49,"rangeDef":45,"magicDef":18,"bonusAttack":34},"4098":{"name":"Archer","hitpoints":50,"combatLevel":42,"attackSpeed":6,"defenceLevel":40,"rangeLevel":40,"magicLevel":1,"stabDef":39,"slashDef":50,"crushDef":49,"rangeDef":45,"magicDef":18,"bonusAttack":34},"4099":{"name":"Guard","hitpoints":40,"combatLevel":37,"attackSpeed":6,"attackLevel":30,"strengthLevel":30,"defenceLevel":30,"magicLevel":1,"stabDef":36,"slashDef":48,"crushDef":50,"rangeDef":38,"bonusAttack":18,"bonusStrength":16},"4100":{"name":"Guard","hitpoints":40,"combatLevel":37,"attackSpeed":6,"attackLevel":30,"strengthLevel":30,"defenceLevel":30,"magicLevel":1,"stabDef":36,"slashDef":48,"crushDef":50,"rangeDef":38,"bonusAttack":18,"bonusStrength":16},"4107":{"name":"Breoca","hitpoints":10,"combatLevel":5,"attackSpeed":4,"attackLevel":3,"strengthLevel":3,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"4108":{"name":"Ocga","hitpoints":10,"combatLevel":5,"attackSpeed":4,"attackLevel":3,"strengthLevel":3,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"4109":{"name":"Penda","hitpoints":10,"combatLevel":5,"attackSpeed":4,"attackLevel":3,"strengthLevel":3,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"4110":{"name":"Hygd","hitpoints":10,"combatLevel":4,"attackSpeed":4,"attackLevel":3,"strengthLevel":2,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"4111":{"name":"Ceolburg","hitpoints":10,"combatLevel":4,"attackSpeed":4,"attackLevel":3,"strengthLevel":2,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"4114":{"name":"White Knight","hitpoints":55,"combatLevel":42,"attackSpeed":7,"attackLevel":32,"strengthLevel":35,"defenceLevel":27,"rangeLevel":1,"magicLevel":1,"stabDef":83,"slashDef":76,"crushDef":70,"rangeDef":74,"bonusAttack":30,"bonusStrength":31},"4115":{"name":"Fareed (hard)","hitpoints":255,"combatLevel":299,"attackSpeed":4,"attackLevel":380,"strengthLevel":240,"defenceLevel":135,"rangeLevel":1,"magicLevel":1,"stabDef":100,"slashDef":100,"crushDef":100,"bonusStrength":120},"4120":{"name":"Troll general","hitpoints":140,"combatLevel":113,"attackSpeed":4,"attackLevel":70,"strengthLevel":140,"defenceLevel":40,"stabDef":35,"slashDef":60,"crushDef":35,"rangeDef":200,"magicDef":200,"bonusAttack":60,"bonusStrength":100},"4121":{"name":"Troll general","hitpoints":140,"combatLevel":113,"attackSpeed":4,"attackLevel":70,"strengthLevel":140,"defenceLevel":40,"stabDef":35,"slashDef":60,"crushDef":35,"rangeDef":200,"magicDef":200,"bonusAttack":60,"bonusStrength":100},"4122":{"name":"Troll general","hitpoints":140,"combatLevel":113,"attackSpeed":4,"attackLevel":70,"strengthLevel":140,"defenceLevel":40,"stabDef":35,"slashDef":60,"crushDef":35,"rangeDef":200,"magicDef":200,"bonusAttack":60,"bonusStrength":100},"4123":{"name":"Troll spectator","hitpoints":90,"combatLevel":71,"attackSpeed":6,"attackLevel":40,"strengthLevel":90,"defenceLevel":25,"crushDef":10,"rangeDef":200,"magicDef":200,"bonusAttack":20,"bonusStrength":20},"4124":{"name":"Troll spectator","hitpoints":90,"combatLevel":71,"attackSpeed":6,"attackLevel":40,"strengthLevel":90,"defenceLevel":25,"crushDef":10,"rangeDef":200,"magicDef":200,"bonusAttack":20,"bonusStrength":20},"4125":{"name":"Troll spectator","hitpoints":90,"combatLevel":71,"attackSpeed":6,"attackLevel":40,"strengthLevel":90,"defenceLevel":25,"crushDef":10,"rangeDef":200,"magicDef":200,"bonusAttack":20,"bonusStrength":20},"4126":{"name":"Troll spectator","hitpoints":90,"combatLevel":71,"attackSpeed":6,"attackLevel":40,"strengthLevel":90,"defenceLevel":25,"crushDef":10,"rangeDef":200,"magicDef":200,"bonusAttack":20,"bonusStrength":20},"4127":{"name":"Troll spectator","hitpoints":90,"combatLevel":71,"attackSpeed":6,"attackLevel":40,"strengthLevel":90,"defenceLevel":25,"crushDef":10,"rangeDef":200,"magicDef":200,"bonusAttack":20,"bonusStrength":20},"4128":{"name":"Troll spectator","hitpoints":90,"combatLevel":71,"attackSpeed":6,"attackLevel":40,"strengthLevel":90,"defenceLevel":25,"crushDef":10,"rangeDef":200,"magicDef":200,"bonusAttack":20,"bonusStrength":20},"4129":{"name":"Troll spectator","hitpoints":90,"combatLevel":71,"attackSpeed":6,"attackLevel":40,"strengthLevel":90,"defenceLevel":25,"crushDef":10,"rangeDef":200,"magicDef":200,"bonusAttack":20,"bonusStrength":20},"4130":{"name":"Dad","hitpoints":120,"combatLevel":101,"attackSpeed":8,"attackLevel":60,"strengthLevel":120,"defenceLevel":50,"stabDef":25,"slashDef":25,"crushDef":40,"rangeDef":200,"magicDef":200,"bonusAttack":40,"bonusStrength":70},"4131":{"name":"Twig","hitpoints":90,"combatLevel":71,"attackSpeed":6,"attackLevel":40,"strengthLevel":90,"defenceLevel":25,"crushDef":10,"rangeDef":200,"magicDef":200,"bonusAttack":20,"bonusStrength":20},"4132":{"name":"Berry","hitpoints":90,"combatLevel":71,"attackSpeed":6,"attackLevel":40,"strengthLevel":90,"defenceLevel":25,"crushDef":10,"rangeDef":200,"magicDef":200,"bonusAttack":20,"bonusStrength":20},"4133":{"name":"Twig","hitpoints":90,"combatLevel":71,"attackSpeed":6,"attackLevel":40,"strengthLevel":90,"defenceLevel":25,"crushDef":10,"rangeDef":200,"magicDef":200,"bonusAttack":20,"bonusStrength":20},"4134":{"name":"Berry","hitpoints":90,"combatLevel":71,"attackSpeed":6,"attackLevel":40,"strengthLevel":90,"defenceLevel":25,"crushDef":10,"rangeDef":200,"magicDef":200,"bonusAttack":20,"bonusStrength":20},"4135":{"name":"Thrower troll","hitpoints":95,"combatLevel":68,"attackSpeed":7,"attackLevel":30,"strengthLevel":95,"defenceLevel":15,"rangeLevel":60,"rangeDef":200,"magicDef":200},"4136":{"name":"Thrower troll","hitpoints":95,"combatLevel":68,"attackSpeed":7,"attackLevel":30,"strengthLevel":95,"defenceLevel":15,"rangeLevel":60,"rangeDef":200,"magicDef":200},"4137":{"name":"Thrower troll","hitpoints":95,"combatLevel":68,"attackSpeed":7,"attackLevel":30,"strengthLevel":95,"defenceLevel":15,"rangeLevel":60,"rangeDef":200,"magicDef":200},"4138":{"name":"Thrower troll","hitpoints":95,"combatLevel":68,"attackSpeed":7,"attackLevel":30,"strengthLevel":95,"defenceLevel":15,"rangeLevel":60,"rangeDef":200,"magicDef":200},"4139":{"name":"Thrower troll","hitpoints":95,"combatLevel":68,"attackSpeed":7,"attackLevel":30,"strengthLevel":95,"defenceLevel":15,"rangeLevel":60,"rangeDef":200,"magicDef":200},"4143":{"name":"Mountain troll","hitpoints":90,"combatLevel":71,"attackSpeed":6,"attackLevel":40,"strengthLevel":90,"defenceLevel":25,"crushDef":10,"rangeDef":200,"magicDef":200,"bonusAttack":20,"bonusStrength":20},"4163":{"name":"King Roald","hitpoints":75,"combatLevel":47,"attackSpeed":4,"attackLevel":35,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4167":{"name":"Outlaw","hitpoints":20,"combatLevel":32,"attackSpeed":6,"attackLevel":35,"strengthLevel":25,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4168":{"name":"Outlaw","hitpoints":20,"combatLevel":32,"attackSpeed":6,"attackLevel":35,"strengthLevel":25,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4169":{"name":"Outlaw","hitpoints":20,"combatLevel":32,"attackSpeed":6,"attackLevel":35,"strengthLevel":25,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4170":{"name":"Outlaw","hitpoints":20,"combatLevel":32,"attackSpeed":6,"attackLevel":35,"strengthLevel":25,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4171":{"name":"Outlaw","hitpoints":20,"combatLevel":32,"attackSpeed":6,"attackLevel":35,"strengthLevel":25,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4172":{"name":"Outlaw","hitpoints":20,"combatLevel":32,"attackSpeed":6,"attackLevel":35,"strengthLevel":25,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4173":{"name":"Outlaw","hitpoints":20,"combatLevel":32,"attackSpeed":6,"attackLevel":35,"strengthLevel":25,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4174":{"name":"Outlaw","hitpoints":20,"combatLevel":32,"attackSpeed":6,"attackLevel":35,"strengthLevel":25,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4175":{"name":"Outlaw","hitpoints":20,"combatLevel":32,"attackSpeed":6,"attackLevel":35,"strengthLevel":25,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4176":{"name":"Outlaw","hitpoints":20,"combatLevel":32,"attackSpeed":6,"attackLevel":35,"strengthLevel":25,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4184":{"name":"Crocodile","hitpoints":62,"combatLevel":63,"attackSpeed":4,"attackLevel":53,"strengthLevel":54,"defenceLevel":54,"rangeLevel":1,"magicLevel":1},"4185":{"name":"Jackal","hitpoints":27,"combatLevel":21,"attackSpeed":4,"attackLevel":17,"strengthLevel":18,"defenceLevel":15,"rangeLevel":1,"magicLevel":1},"4186":{"name":"Locust","hitpoints":27,"combatLevel":18,"attackSpeed":4,"attackLevel":17,"strengthLevel":18,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"4188":{"name":"Plague frog","hitpoints":10,"combatLevel":11,"attackSpeed":4,"attackLevel":18,"strengthLevel":10,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"4192":{"name":"Scarab swarm","hitpoints":25,"combatLevel":98,"attackSpeed":1,"attackLevel":255,"strengthLevel":5,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"stabDef":90,"slashDef":90,"crushDef":5,"rangeDef":90,"magicDef":90},"4195":{"name":"Het","combatLevel":81,"attackSpeed":4},"4196":{"name":"Apmeken","hitpoints":70,"combatLevel":75,"attackSpeed":4,"attackLevel":30,"strengthLevel":40,"defenceLevel":60,"rangeLevel":1,"magicLevel":85,"stabDef":65,"slashDef":65,"crushDef":65,"magicDef":50},"4197":{"name":"Scabaras","combatLevel":75,"attackSpeed":4},"4198":{"name":"Crondis","hitpoints":60,"combatLevel":75,"attackSpeed":4,"attackLevel":80,"strengthLevel":70,"defenceLevel":35,"rangeLevel":1,"magicLevel":40,"stabDef":15,"slashDef":15,"crushDef":15,"rangeDef":40,"magicDef":70},"4210":{"name":"Possessed Priest","hitpoints":90,"combatLevel":91,"attackSpeed":4,"attackLevel":90,"strengthLevel":90,"defenceLevel":40,"rangeLevel":1,"magicLevel":60,"stabDef":90,"crushDef":90,"bonusStrength":90},"4246":{"name":"Monk","hitpoints":5,"combatLevel":3,"attackSpeed":4,"attackLevel":2,"strengthLevel":2,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"4247":{"name":"Thief","hitpoints":17,"combatLevel":14,"attackSpeed":4,"attackLevel":14,"strengthLevel":13,"defenceLevel":12,"rangeLevel":1,"magicLevel":1},"4248":{"name":"Head Thief","hitpoints":37,"combatLevel":26,"attackSpeed":5,"attackLevel":24,"strengthLevel":18,"defenceLevel":16,"rangeLevel":2,"stabDef":8,"slashDef":14,"crushDef":15,"rangeDef":9,"magicDef":4,"bonusStrength":10},"4276":{"name":"Jail guard","hitpoints":32,"combatLevel":26,"attackSpeed":5,"attackLevel":19,"strengthLevel":23,"defenceLevel":21,"rangeLevel":1,"magicLevel":1,"stabDef":8,"slashDef":9,"crushDef":10,"rangeDef":9,"magicDef":4,"bonusAttack":9,"bonusStrength":5},"4277":{"name":"Jail guard","hitpoints":32,"combatLevel":26,"attackSpeed":5,"attackLevel":19,"strengthLevel":23,"defenceLevel":21,"rangeLevel":1,"magicLevel":1,"stabDef":8,"slashDef":9,"crushDef":10,"rangeDef":9,"magicDef":4,"bonusAttack":9,"bonusStrength":5},"4278":{"name":"Jail guard","hitpoints":32,"combatLevel":26,"attackSpeed":5,"attackLevel":19,"strengthLevel":23,"defenceLevel":21,"rangeLevel":1,"magicLevel":1,"stabDef":8,"slashDef":9,"crushDef":10,"rangeDef":9,"magicDef":4,"bonusAttack":9,"bonusStrength":5},"4279":{"name":"Jail guard","hitpoints":32,"combatLevel":26,"attackSpeed":5,"attackLevel":19,"strengthLevel":23,"defenceLevel":21,"rangeLevel":1,"magicLevel":1,"stabDef":8,"slashDef":9,"crushDef":10,"rangeDef":9,"magicDef":4,"bonusAttack":9,"bonusStrength":5},"4303":{"name":"Kalphite Queen","hitpoints":255,"combatLevel":333,"attackSpeed":4,"attackLevel":300,"strengthLevel":300,"defenceLevel":300,"rangeLevel":1,"magicLevel":150,"stabDef":50,"slashDef":50,"crushDef":10,"rangeDef":100,"magicDef":100},"4304":{"name":"Kalphite Queen","hitpoints":255,"combatLevel":333,"attackSpeed":4,"attackLevel":300,"strengthLevel":300,"defenceLevel":300,"rangeLevel":1,"magicLevel":150,"stabDef":100,"slashDef":100,"crushDef":100,"rangeDef":10,"magicDef":10},"4308":{"name":"Sea troll","hitpoints":100,"combatLevel":79,"attackSpeed":4,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":1},"4309":{"name":"Sea troll","hitpoints":80,"combatLevel":65,"attackSpeed":4,"attackLevel":50,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1},"4310":{"name":"Sea troll","hitpoints":80,"combatLevel":87,"attackSpeed":4,"attackLevel":75,"strengthLevel":75,"defenceLevel":75,"rangeLevel":1,"magicLevel":1},"4311":{"name":"Sea troll","hitpoints":80,"combatLevel":101,"attackSpeed":4,"attackLevel":90,"strengthLevel":90,"defenceLevel":90,"rangeLevel":1,"magicLevel":1},"4315":{"name":"Sea Troll Queen","hitpoints":200,"combatLevel":170,"attackSpeed":4,"attackLevel":100,"strengthLevel":70,"defenceLevel":100,"rangeLevel":1,"magicLevel":150,"stabDef":20,"slashDef":40,"crushDef":40,"magicDef":40,"bonusAttack":100,"bonusStrength":40},"4319":{"name":"Skeleton Mage","hitpoints":80,"combatLevel":83,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":60,"rangeLevel":1,"magicLevel":100,"magicDef":15,"undead":true},"4321":{"name":"Renegade Knight","hitpoints":48,"combatLevel":37,"attackSpeed":4,"attackLevel":28,"strengthLevel":28,"defenceLevel":28,"rangeLevel":1,"magicLevel":1,"stabDef":99,"slashDef":82,"crushDef":62,"bonusAttack":20,"bonusStrength":16},"4328":{"name":"Sigmund","hitpoints":60,"combatLevel":50,"attackSpeed":4,"attackLevel":45,"strengthLevel":45,"defenceLevel":24,"rangeLevel":1,"magicLevel":1,"magic":8,"venomImmune":true},"4331":{"name":"Black Knight","hitpoints":42,"combatLevel":33,"attackSpeed":5,"attackLevel":25,"strengthLevel":25,"defenceLevel":25,"rangeLevel":1,"magicLevel":1,"stabDef":73,"slashDef":76,"crushDef":70,"rangeDef":72,"bonusAttack":18,"bonusStrength":16},"4342":{"name":"Sir Lucan","hitpoints":105,"combatLevel":120,"attackSpeed":5,"attackLevel":105,"strengthLevel":110,"defenceLevel":99,"rangeLevel":1,"magicLevel":1,"stabDef":275,"slashDef":65,"crushDef":45,"bonusAttack":40,"bonusStrength":40},"4343":{"name":"Sir Palomedes","hitpoints":100,"combatLevel":118,"attackSpeed":5,"attackLevel":105,"strengthLevel":105,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"stabDef":250,"slashDef":250,"crushDef":50,"bonusAttack":35,"bonusStrength":35},"4344":{"name":"Sir Lancelot","hitpoints":115,"combatLevel":127,"attackSpeed":4,"attackLevel":110,"strengthLevel":110,"defenceLevel":110,"rangeLevel":1,"magicLevel":1,"stabDef":300,"slashDef":85,"crushDef":300,"bonusAttack":60,"bonusStrength":60},"4345":{"name":"Sir Bedivere","hitpoints":90,"combatLevel":110,"attackSpeed":5,"attackLevel":99,"strengthLevel":95,"defenceLevel":99,"rangeLevel":1,"magicLevel":1,"stabDef":15,"crushDef":190,"bonusAttack":20,"bonusStrength":20},"4346":{"name":"Sir Tristram","hitpoints":105,"combatLevel":115,"attackSpeed":5,"attackLevel":99,"strengthLevel":99,"defenceLevel":99,"rangeLevel":1,"magicLevel":1,"crushDef":225,"bonusAttack":25,"bonusStrength":25},"4347":{"name":"Sir Pelleas","hitpoints":99,"combatLevel":112,"attackSpeed":5,"attackLevel":95,"strengthLevel":99,"defenceLevel":98,"rangeLevel":1,"magicLevel":1,"stabDef":200,"crushDef":5,"bonusAttack":22,"bonusStrength":22},"4348":{"name":"Sir Gawain","hitpoints":110,"combatLevel":122,"attackSpeed":5,"attackLevel":110,"strengthLevel":105,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"stabDef":65,"slashDef":90,"crushDef":300,"bonusAttack":40,"bonusStrength":45},"4349":{"name":"Sir Kay","hitpoints":110,"combatLevel":124,"attackSpeed":5,"attackLevel":110,"strengthLevel":110,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"stabDef":45,"slashDef":300,"crushDef":65,"bonusAttack":55,"bonusStrength":55},"4354":{"name":"Sir Lancelot","hitpoints":115,"combatLevel":127,"attackSpeed":4,"attackLevel":110,"strengthLevel":110,"defenceLevel":110,"rangeLevel":1,"magicLevel":1,"stabDef":300,"slashDef":85,"crushDef":300,"bonusAttack":60,"bonusStrength":60},"4355":{"name":"Sir Kay","hitpoints":110,"combatLevel":124,"attackSpeed":5,"attackLevel":110,"strengthLevel":110,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"stabDef":45,"slashDef":300,"crushDef":65,"bonusAttack":55,"bonusStrength":55},"4356":{"name":"Sir Gawain","hitpoints":110,"combatLevel":122,"attackSpeed":5,"attackLevel":110,"strengthLevel":105,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"stabDef":65,"slashDef":90,"crushDef":300,"bonusAttack":40,"bonusStrength":45},"4357":{"name":"Sir Lucan","hitpoints":105,"combatLevel":120,"attackSpeed":5,"attackLevel":105,"strengthLevel":110,"defenceLevel":99,"rangeLevel":1,"magicLevel":1,"stabDef":275,"slashDef":65,"crushDef":45,"bonusAttack":40,"bonusStrength":40},"4358":{"name":"Sir Palomedes","hitpoints":100,"combatLevel":118,"attackSpeed":5,"attackLevel":105,"strengthLevel":105,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"stabDef":250,"slashDef":250,"crushDef":50,"bonusAttack":35,"bonusStrength":35},"4359":{"name":"Sir Tristram","hitpoints":105,"combatLevel":115,"attackSpeed":5,"attackLevel":99,"strengthLevel":99,"defenceLevel":99,"rangeLevel":1,"magicLevel":1,"crushDef":225,"bonusAttack":25,"bonusStrength":25},"4360":{"name":"Sir Pelleas","hitpoints":99,"combatLevel":112,"attackSpeed":5,"attackLevel":95,"strengthLevel":99,"defenceLevel":98,"rangeLevel":1,"magicLevel":1,"stabDef":200,"crushDef":5,"bonusAttack":22,"bonusStrength":22},"4361":{"name":"Sir Bedivere","hitpoints":90,"combatLevel":110,"attackSpeed":5,"attackLevel":99,"strengthLevel":95,"defenceLevel":99,"rangeLevel":1,"magicLevel":1,"stabDef":15,"crushDef":190,"bonusAttack":20,"bonusStrength":20},"4362":{"name":"Ogre chieftain","hitpoints":60,"combatLevel":81,"attackSpeed":4,"attackLevel":75,"strengthLevel":71,"defenceLevel":75,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":21,"crushDef":16,"bonusAttack":5,"bonusStrength":7},"4363":{"name":"Ogre chieftain","hitpoints":60,"combatLevel":81,"attackSpeed":4,"attackLevel":75,"strengthLevel":71,"defenceLevel":75,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":21,"crushDef":16,"bonusAttack":5,"bonusStrength":7},"4367":{"name":"Gorad","hitpoints":80,"combatLevel":68,"attackSpeed":4,"attackLevel":54,"strengthLevel":54,"defenceLevel":54,"rangeLevel":1,"magicLevel":1,"stabDef":15,"slashDef":27,"crushDef":21,"bonusAttack":8,"bonusStrength":8},"4373":{"name":"City guard","hitpoints":80,"combatLevel":83,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"stabDef":13,"slashDef":24,"crushDef":19,"bonusAttack":9,"bonusStrength":13},"4381":{"name":"Enclave guard","hitpoints":80,"combatLevel":83,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"stabDef":13,"slashDef":24,"crushDef":19,"bonusAttack":9,"bonusStrength":13},"4382":{"name":"Ogre shaman","hitpoints":1,"combatLevel":113,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"4383":{"name":"Ogre shaman","hitpoints":1,"combatLevel":113,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"4384":{"name":"Ogre shaman","hitpoints":1,"combatLevel":113,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"4385":{"name":"Blue dragon","hitpoints":105,"combatLevel":111,"attackSpeed":4,"attackLevel":95,"strengthLevel":95,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"4387":{"name":"Ogre shaman","hitpoints":1,"combatLevel":113,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"4389":{"name":"Ogre shaman","hitpoints":1,"combatLevel":113,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"4391":{"name":"Ogre shaman","hitpoints":1,"combatLevel":113,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"4393":{"name":"Ogre shaman","hitpoints":1,"combatLevel":113,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"4395":{"name":"Ogre shaman","hitpoints":1,"combatLevel":113,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"4405":{"name":"Tower guard","hitpoints":22,"combatLevel":28,"attackSpeed":4,"attackLevel":26,"strengthLevel":26,"defenceLevel":26,"rangeLevel":1,"magicLevel":1,"stabDef":23,"slashDef":35,"crushDef":28,"bonusAttack":8,"bonusStrength":8},"4406":{"name":"Colonel Radick","hitpoints":65,"combatLevel":38,"attackSpeed":4,"attackLevel":25,"strengthLevel":25,"defenceLevel":25,"rangeLevel":1,"magicLevel":1,"stabDef":39,"slashDef":31,"crushDef":34,"bonusAttack":9,"bonusStrength":13},"4421":{"name":"Undead cow","hitpoints":8,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"undead":true},"4427":{"name":"Vampyre Juvinate","hitpoints":65,"combatLevel":54,"attackSpeed":4,"attackLevel":55,"strengthLevel":40,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4428":{"name":"Vampyre Juvinate","hitpoints":65,"combatLevel":54,"attackSpeed":4,"attackLevel":55,"strengthLevel":40,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4429":{"name":"Vampyre Juvinate","hitpoints":65,"combatLevel":54,"attackSpeed":4,"attackLevel":55,"strengthLevel":40,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4430":{"name":"Vampyre Juvinate","hitpoints":65,"combatLevel":54,"attackSpeed":4,"attackLevel":55,"strengthLevel":40,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4431":{"name":"Feral Vampyre","hitpoints":80,"combatLevel":64,"attackSpeed":4,"attackLevel":55,"strengthLevel":30,"defenceLevel":60,"rangeLevel":1,"magicLevel":1},"4432":{"name":"Vampyre Juvinate","hitpoints":65,"combatLevel":54,"attackSpeed":4,"attackLevel":55,"strengthLevel":40,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4436":{"name":"Vampyre Juvenile","hitpoints":60,"combatLevel":45,"attackSpeed":4,"attackLevel":40,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4437":{"name":"Vampyre Juvenile","hitpoints":60,"combatLevel":45,"attackSpeed":4,"attackLevel":40,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4438":{"name":"Vampyre Juvenile","hitpoints":60,"combatLevel":45,"attackSpeed":4,"attackLevel":40,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4439":{"name":"Vampyre Juvenile","hitpoints":60,"combatLevel":45,"attackSpeed":4,"attackLevel":40,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4442":{"name":"Vampyre Juvinate","hitpoints":110,"combatLevel":75,"attackSpeed":4,"attackLevel":70,"strengthLevel":50,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"4443":{"name":"Vampyre Juvinate","hitpoints":60,"combatLevel":50,"attackSpeed":4,"attackLevel":50,"strengthLevel":37,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4483":{"name":"Gadderanks","hitpoints":20,"combatLevel":35,"attackSpeed":4,"attackLevel":20,"strengthLevel":20,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":10,"magicDef":10,"poisonImmune":true,"venomImmune":true},"4484":{"name":"Gadderanks","hitpoints":20,"combatLevel":35,"attackSpeed":4,"attackLevel":20,"strengthLevel":20,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":10,"magicDef":10,"poisonImmune":true,"venomImmune":true},"4485":{"name":"Gadderanks","hitpoints":20,"combatLevel":35,"attackSpeed":4,"attackLevel":20,"strengthLevel":20,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":10,"magicDef":10,"poisonImmune":true,"venomImmune":true},"4486":{"name":"Vampyre Juvinate","hitpoints":60,"combatLevel":50,"attackSpeed":4,"attackLevel":50,"strengthLevel":37,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4487":{"name":"Vampyre Juvinate","hitpoints":65,"combatLevel":54,"attackSpeed":4,"attackLevel":55,"strengthLevel":40,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"4491":{"name":"Skeleton fremennik","hitpoints":25,"combatLevel":40,"attackSpeed":6,"attackLevel":53,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"stabDef":14,"slashDef":18,"crushDef":15,"rangeDef":15,"bonusAttack":8,"bonusStrength":13},"4492":{"name":"Skeleton fremennik","hitpoints":25,"combatLevel":40,"attackSpeed":6,"attackLevel":53,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"stabDef":14,"slashDef":18,"crushDef":15,"rangeDef":15,"bonusAttack":8,"bonusStrength":13},"4493":{"name":"Skeleton fremennik","hitpoints":25,"combatLevel":40,"attackSpeed":6,"attackLevel":53,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"stabDef":14,"slashDef":18,"crushDef":15,"rangeDef":15,"bonusAttack":8,"bonusStrength":13},"4494":{"name":"Skeleton fremennik","hitpoints":35,"combatLevel":50,"attackSpeed":6,"attackLevel":60,"strengthLevel":43,"defenceLevel":35,"rangeLevel":1,"magicLevel":1,"stabDef":14,"slashDef":18,"crushDef":15,"rangeDef":15,"bonusAttack":8,"bonusStrength":13},"4495":{"name":"Skeleton fremennik","hitpoints":35,"combatLevel":50,"attackSpeed":6,"attackLevel":60,"strengthLevel":43,"defenceLevel":35,"rangeLevel":1,"magicLevel":1,"stabDef":14,"slashDef":18,"crushDef":15,"rangeDef":15,"bonusAttack":8,"bonusStrength":13},"4496":{"name":"Skeleton fremennik","hitpoints":35,"combatLevel":50,"attackSpeed":6,"attackLevel":60,"strengthLevel":43,"defenceLevel":35,"rangeLevel":1,"magicLevel":1,"stabDef":14,"slashDef":18,"crushDef":15,"rangeDef":15,"bonusAttack":8,"bonusStrength":13},"4497":{"name":"Skeleton fremennik","hitpoints":40,"combatLevel":60,"attackSpeed":6,"attackLevel":72,"strengthLevel":54,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":14,"slashDef":18,"crushDef":15,"rangeDef":15,"bonusAttack":8,"bonusStrength":13},"4498":{"name":"Skeleton fremennik","hitpoints":40,"combatLevel":60,"attackSpeed":6,"attackLevel":72,"strengthLevel":54,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":14,"slashDef":18,"crushDef":15,"rangeDef":15,"bonusAttack":8,"bonusStrength":13},"4499":{"name":"Skeleton fremennik","hitpoints":40,"combatLevel":60,"attackSpeed":6,"attackLevel":72,"strengthLevel":54,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":14,"slashDef":18,"crushDef":15,"rangeDef":15,"bonusAttack":8,"bonusStrength":13},"4500":{"name":"Ulfric","hitpoints":60,"combatLevel":100,"attackSpeed":6,"attackLevel":100,"strengthLevel":82,"defenceLevel":100,"rangeLevel":1,"magicLevel":1},"4501":{"name":"Brine rat","hitpoints":50,"combatLevel":70,"slayerLevel":47,"attackSpeed":4,"attackLevel":70,"strengthLevel":79,"defenceLevel":40,"rangeLevel":1,"magicLevel":1},"4504":{"name":"Giant bat","hitpoints":32,"combatLevel":27,"attackSpeed":4,"attackLevel":22,"strengthLevel":22,"defenceLevel":22,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"crushDef":12,"rangeDef":8,"magicDef":10},"4505":{"name":"Ulfric","hitpoints":60,"combatLevel":100,"attackSpeed":6,"attackLevel":100,"strengthLevel":82,"defenceLevel":100,"rangeLevel":1,"magicLevel":1},"4522":{"name":"Guard","hitpoints":30,"combatLevel":22,"attackSpeed":5,"attackLevel":16,"strengthLevel":20,"defenceLevel":12,"rangeLevel":1,"magicLevel":1,"stabDef":7,"slashDef":7,"rangeDef":7},"4523":{"name":"Guard","hitpoints":30,"combatLevel":22,"attackSpeed":5,"attackLevel":16,"strengthLevel":20,"defenceLevel":12,"rangeLevel":1,"magicLevel":1,"stabDef":7,"slashDef":7,"rangeDef":7},"4524":{"name":"Guard","hitpoints":30,"combatLevel":22,"attackSpeed":5,"attackLevel":16,"strengthLevel":20,"defenceLevel":12,"rangeLevel":1,"magicLevel":1,"stabDef":7,"slashDef":7,"rangeDef":7},"4525":{"name":"Guard","hitpoints":30,"combatLevel":22,"attackSpeed":5,"attackLevel":16,"strengthLevel":20,"defenceLevel":12,"rangeLevel":1,"magicLevel":1,"stabDef":7,"slashDef":7,"rangeDef":7},"4526":{"name":"Guard","hitpoints":30,"combatLevel":22,"attackSpeed":5,"attackLevel":16,"strengthLevel":20,"defenceLevel":12,"rangeLevel":1,"magicLevel":1,"stabDef":7,"slashDef":7,"rangeDef":7},"4533":{"name":"Blessed spider","hitpoints":32,"combatLevel":39,"attackSpeed":4,"attackLevel":35,"strengthLevel":35,"defenceLevel":35,"rangeLevel":1,"magicLevel":1,"stabDef":15,"slashDef":16,"crushDef":7,"rangeDef":16,"magicDef":12},"4534":{"name":"Blessed giant rat","hitpoints":30,"combatLevel":9,"attackSpeed":4,"attackLevel":5,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"4535":{"name":"Blessed giant rat","hitpoints":30,"combatLevel":9,"attackSpeed":4,"attackLevel":5,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"4561":{"name":"Spider","hitpoints":2,"combatLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"4634":{"name":"Rowdy slave","hitpoints":16,"combatLevel":10,"attackSpeed":4,"attackLevel":7,"strengthLevel":7,"defenceLevel":7},"4635":{"name":"Mercenary Captain","hitpoints":80,"combatLevel":47,"attackSpeed":4,"attackLevel":32,"strengthLevel":29,"defenceLevel":32,"stabDef":17,"slashDef":15,"crushDef":19,"rangeDef":19,"bonusAttack":9,"bonusStrength":14},"4643":{"name":"Shantay Guard","hitpoints":32,"combatLevel":22,"attackSpeed":4,"attackLevel":17,"strengthLevel":16,"defenceLevel":16,"stabDef":12,"slashDef":15,"crushDef":18,"rangeDef":15,"magicDef":6,"bonusAttack":11,"bonusStrength":12},"4648":{"name":"Shantay Guard","hitpoints":32,"combatLevel":22,"attackSpeed":4,"attackLevel":17,"strengthLevel":16,"defenceLevel":16,"stabDef":12,"slashDef":15,"crushDef":18,"rangeDef":15,"magicDef":6,"bonusAttack":11,"bonusStrength":12},"4649":{"name":"Desert Wolf","hitpoints":34,"combatLevel":27,"attackSpeed":4,"attackLevel":20,"strengthLevel":21,"defenceLevel":22},"4650":{"name":"Desert Wolf","hitpoints":34,"combatLevel":27,"attackSpeed":4,"attackLevel":20,"strengthLevel":21,"defenceLevel":22},"4651":{"name":"Desert Wolf","hitpoints":34,"combatLevel":27,"attackSpeed":4,"attackLevel":20,"strengthLevel":21,"defenceLevel":22},"4652":{"name":"Ugthanki","hitpoints":45,"combatLevel":42,"attackSpeed":4,"attackLevel":35,"strengthLevel":35,"defenceLevel":35},"4655":{"name":"Bedabin Nomad Fighter","hitpoints":50,"combatLevel":56,"attackSpeed":4,"attackLevel":40,"strengthLevel":50,"defenceLevel":60,"bonusAttack":9,"bonusStrength":14},"4656":{"name":"Mercenary","hitpoints":60,"combatLevel":45,"attackSpeed":4,"attackLevel":32,"strengthLevel":32,"defenceLevel":39,"stabDef":17,"slashDef":15,"crushDef":19,"rangeDef":19,"bonusAttack":9,"bonusStrength":14},"4657":{"name":"Mercenary","hitpoints":60,"combatLevel":45,"attackSpeed":4,"attackLevel":32,"strengthLevel":32,"defenceLevel":39,"stabDef":17,"slashDef":15,"crushDef":19,"rangeDef":19,"bonusAttack":9,"bonusStrength":14},"4658":{"name":"Mercenary","hitpoints":60,"combatLevel":45,"attackSpeed":4,"attackLevel":32,"strengthLevel":32,"defenceLevel":39,"stabDef":17,"slashDef":15,"crushDef":19,"rangeDef":19,"bonusAttack":9,"bonusStrength":14},"4659":{"name":"Mercenary","hitpoints":60,"combatLevel":45,"attackSpeed":4,"attackLevel":32,"strengthLevel":32,"defenceLevel":39,"stabDef":17,"slashDef":15,"crushDef":19,"rangeDef":19,"bonusAttack":9,"bonusStrength":14},"4660":{"name":"Guard","hitpoints":60,"combatLevel":45,"attackSpeed":4,"attackLevel":32,"strengthLevel":32,"defenceLevel":39,"stabDef":17,"slashDef":15,"crushDef":19,"rangeDef":19,"bonusAttack":9,"bonusStrength":14},"4661":{"name":"Guard","hitpoints":60,"combatLevel":45,"attackSpeed":4,"attackLevel":32,"strengthLevel":32,"defenceLevel":39,"stabDef":17,"slashDef":15,"crushDef":19,"rangeDef":19,"bonusAttack":9,"bonusStrength":14},"4662":{"name":"Guard","hitpoints":60,"combatLevel":45,"attackSpeed":4,"attackLevel":32,"strengthLevel":32,"defenceLevel":39,"stabDef":17,"slashDef":15,"crushDef":19,"rangeDef":19,"bonusAttack":9,"bonusStrength":14},"4663":{"name":"Guard","hitpoints":60,"combatLevel":45,"attackSpeed":4,"attackLevel":32,"strengthLevel":32,"defenceLevel":39,"stabDef":17,"slashDef":15,"crushDef":19,"rangeDef":19,"bonusAttack":9,"bonusStrength":14},"4664":{"name":"Guard","hitpoints":60,"combatLevel":45,"attackSpeed":4,"attackLevel":32,"strengthLevel":32,"defenceLevel":39,"stabDef":17,"slashDef":15,"crushDef":19,"rangeDef":19,"bonusAttack":9,"bonusStrength":14},"4665":{"name":"Guard","hitpoints":60,"combatLevel":45,"attackSpeed":4,"attackLevel":32,"strengthLevel":32,"defenceLevel":39,"stabDef":17,"slashDef":15,"crushDef":19,"rangeDef":19,"bonusAttack":9,"bonusStrength":14},"4666":{"name":"Guard","hitpoints":60,"combatLevel":45,"attackSpeed":4,"attackLevel":32,"strengthLevel":32,"defenceLevel":39,"stabDef":17,"slashDef":15,"crushDef":19,"rangeDef":19,"bonusAttack":9,"bonusStrength":14},"4667":{"name":"Guard","hitpoints":60,"combatLevel":45,"attackSpeed":4,"attackLevel":32,"strengthLevel":32,"defenceLevel":39,"stabDef":17,"slashDef":15,"crushDef":19,"rangeDef":19,"bonusAttack":9,"bonusStrength":14},"4668":{"name":"Guard","hitpoints":60,"combatLevel":45,"attackSpeed":4,"attackLevel":32,"strengthLevel":32,"defenceLevel":39,"stabDef":17,"slashDef":15,"crushDef":19,"rangeDef":19,"bonusAttack":9,"bonusStrength":14},"4669":{"name":"Guard","hitpoints":60,"combatLevel":45,"attackSpeed":4,"attackLevel":32,"strengthLevel":32,"defenceLevel":39,"stabDef":17,"slashDef":15,"crushDef":19,"rangeDef":19,"bonusAttack":9,"bonusStrength":14},"4682":{"name":"Sir Leye","hitpoints":20,"combatLevel":20,"attackSpeed":5},"4688":{"name":"Angry unicorn","hitpoints":50,"combatLevel":47,"attackSpeed":4,"attackLevel":38,"strengthLevel":41,"defenceLevel":38,"rangeLevel":1,"magicLevel":1},"4689":{"name":"Angry giant rat","hitpoints":50,"combatLevel":47,"attackSpeed":4,"attackLevel":38,"strengthLevel":41,"defenceLevel":38,"rangeLevel":1,"magicLevel":1},"4690":{"name":"Angry giant rat","hitpoints":50,"combatLevel":47,"attackSpeed":4,"attackLevel":38,"strengthLevel":41,"defenceLevel":38,"rangeLevel":1,"magicLevel":1},"4691":{"name":"Angry goblin","hitpoints":50,"combatLevel":47,"attackSpeed":4,"attackLevel":38,"strengthLevel":41,"defenceLevel":38,"rangeLevel":1,"magicLevel":1},"4692":{"name":"Angry bear","hitpoints":50,"combatLevel":47,"attackSpeed":4,"attackLevel":38,"strengthLevel":41,"defenceLevel":38,"rangeLevel":1,"magicLevel":1},"4693":{"name":"Fear reaper","hitpoints":57,"combatLevel":55,"attackSpeed":4,"attackLevel":45,"strengthLevel":48,"defenceLevel":45,"rangeLevel":1,"magicLevel":1},"4694":{"name":"Confusion beast","hitpoints":64,"combatLevel":63,"attackSpeed":4,"attackLevel":52,"strengthLevel":55,"defenceLevel":52,"rangeLevel":1,"magicLevel":1},"4695":{"name":"Hopeless creature","hitpoints":71,"combatLevel":71,"attackSpeed":4,"attackLevel":59,"strengthLevel":62,"defenceLevel":59,"rangeLevel":1,"magicLevel":1},"4708":{"name":"The Shaikahan","hitpoints":100,"combatLevel":83,"attackSpeed":4,"attackLevel":80,"strengthLevel":80,"defenceLevel":25,"rangeLevel":1,"magicLevel":1,"rangeDef":10000,"magicDef":10000},"4709":{"name":"The Shaikahan","hitpoints":100,"combatLevel":83,"attackSpeed":4,"attackLevel":80,"strengthLevel":80,"defenceLevel":25,"rangeLevel":1,"magicLevel":1,"rangeDef":10000,"magicDef":10000},"4742":{"name":"Black golem","hitpoints":80,"combatLevel":75,"attackSpeed":4,"attackLevel":80,"strengthLevel":30,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"stabDef":300,"slashDef":300,"crushDef":1,"rangeDef":300,"magicDef":300},"4743":{"name":"White golem","hitpoints":80,"combatLevel":75,"attackSpeed":4,"attackLevel":80,"strengthLevel":30,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"stabDef":1,"slashDef":300,"crushDef":300,"rangeDef":300,"magicDef":300},"4744":{"name":"Grey golem","hitpoints":80,"combatLevel":75,"attackSpeed":4,"attackLevel":80,"strengthLevel":30,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"stabDef":300,"slashDef":1,"crushDef":300,"rangeDef":300,"magicDef":300},"4758":{"name":"Poltenip","hitpoints":22,"combatLevel":21,"attackSpeed":4,"attackLevel":19,"strengthLevel":18,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"stabDef":18,"slashDef":25,"crushDef":19,"rangeDef":20,"bonusAttack":4,"bonusStrength":5},"4759":{"name":"Radat","hitpoints":22,"combatLevel":21,"attackSpeed":4,"attackLevel":19,"strengthLevel":18,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"stabDef":18,"slashDef":25,"crushDef":19,"rangeDef":20,"bonusAttack":4,"bonusStrength":5},"4772":{"name":"Fortress Guard","hitpoints":22,"combatLevel":20,"attackSpeed":6,"attackLevel":18,"strengthLevel":18,"defenceLevel":15,"rangeLevel":1,"magicLevel":1,"stabDef":14,"slashDef":18,"crushDef":14,"rangeDef":15,"bonusAttack":5,"bonusStrength":6},"4773":{"name":"Fortress Guard","hitpoints":22,"combatLevel":20,"attackSpeed":6,"attackLevel":18,"strengthLevel":18,"defenceLevel":15,"rangeLevel":1,"magicLevel":1,"stabDef":14,"slashDef":18,"crushDef":14,"rangeDef":15,"bonusAttack":5,"bonusStrength":6},"4774":{"name":"Fortress Guard","hitpoints":22,"combatLevel":20,"attackSpeed":6,"attackLevel":18,"strengthLevel":18,"defenceLevel":15,"rangeLevel":1,"magicLevel":1,"stabDef":14,"slashDef":18,"crushDef":14,"rangeDef":15,"bonusAttack":5,"bonusStrength":6},"4775":{"name":"Fortress Guard","hitpoints":22,"combatLevel":20,"attackSpeed":6,"attackLevel":18,"strengthLevel":18,"defenceLevel":15,"rangeLevel":1,"magicLevel":1,"stabDef":14,"slashDef":18,"crushDef":14,"rangeDef":15,"bonusAttack":5,"bonusStrength":6},"4776":{"name":"Fortress Guard","hitpoints":22,"combatLevel":20,"attackSpeed":6,"attackLevel":18,"strengthLevel":18,"defenceLevel":15,"rangeLevel":1,"magicLevel":1,"stabDef":14,"slashDef":18,"crushDef":14,"rangeDef":15,"bonusAttack":5,"bonusStrength":6},"4797":{"name":"Slug Prince","hitpoints":70,"combatLevel":62,"attackSpeed":4,"attackLevel":50,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":30,"crushDef":30,"rangeDef":99,"magicDef":99},"4798":{"name":"Slug Prince","hitpoints":70,"combatLevel":62,"attackSpeed":4,"attackLevel":50,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":30,"crushDef":30,"rangeDef":99,"magicDef":99},"4799":{"name":"Giant lobster","hitpoints":50,"combatLevel":45,"attackSpeed":4,"attackLevel":40,"strengthLevel":30,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":30,"crushDef":15,"rangeDef":70,"magicDef":99},"4800":{"name":"Giant lobster","hitpoints":50,"combatLevel":45,"attackSpeed":4,"attackLevel":40,"strengthLevel":30,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":30,"crushDef":15,"rangeDef":70,"magicDef":99},"4805":{"name":"Hobgoblin","hitpoints":29,"combatLevel":28,"attackSpeed":4,"attackLevel":22,"strengthLevel":24,"defenceLevel":24,"rangeLevel":1,"magicLevel":1},"4813":{"name":"Icefiend","hitpoints":15,"combatLevel":13,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":12,"rangeLevel":1,"magicLevel":1},"4819":{"name":"Crab","hitpoints":19,"combatLevel":23,"attackSpeed":4,"attackLevel":19,"strengthLevel":20,"defenceLevel":26,"rangeLevel":1,"magicLevel":1},"4820":{"name":"Mudskipper","hitpoints":20,"combatLevel":30,"attackSpeed":4,"attackLevel":29,"strengthLevel":29,"defenceLevel":26,"rangeLevel":1,"magicLevel":1},"4821":{"name":"Mudskipper","hitpoints":20,"combatLevel":31,"attackSpeed":4,"attackLevel":30,"strengthLevel":30,"defenceLevel":29,"rangeLevel":1,"magicLevel":1},"4822":{"name":"Crab","hitpoints":18,"combatLevel":21,"attackSpeed":4,"attackLevel":17,"strengthLevel":17,"defenceLevel":22,"rangeLevel":1,"magicLevel":1},"4849":{"name":"Culinaromancer","hitpoints":150,"combatLevel":75,"attackSpeed":4,"attackLevel":10,"strengthLevel":100,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"4863":{"name":"Jubbly bird","hitpoints":21,"combatLevel":9},"4864":{"name":"Jubbly bird","hitpoints":21,"combatLevel":9},"4872":{"name":"Culinaromancer","hitpoints":150,"combatLevel":75,"attackSpeed":4,"attackLevel":10,"strengthLevel":100,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"4873":{"name":"Culinaromancer","hitpoints":150,"combatLevel":75,"attackSpeed":4,"attackLevel":10,"strengthLevel":100,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"4874":{"name":"Culinaromancer","hitpoints":150,"combatLevel":75,"attackSpeed":4,"attackLevel":10,"strengthLevel":100,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"4875":{"name":"Culinaromancer","hitpoints":150,"combatLevel":75,"attackSpeed":4,"attackLevel":10,"strengthLevel":100,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"4876":{"name":"Culinaromancer","hitpoints":150,"combatLevel":75,"attackSpeed":4,"attackLevel":10,"strengthLevel":100,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"4877":{"name":"Culinaromancer","hitpoints":150,"combatLevel":75,"attackSpeed":4,"attackLevel":10,"strengthLevel":100,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"4878":{"name":"Culinaromancer","hitpoints":150,"combatLevel":75,"attackSpeed":4,"attackLevel":10,"strengthLevel":100,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"4879":{"name":"Culinaromancer","hitpoints":150,"combatLevel":75,"attackSpeed":4,"attackLevel":10,"strengthLevel":100,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"4880":{"name":"Agrith-Na-Na","hitpoints":200,"combatLevel":146,"attackSpeed":4,"attackLevel":83,"strengthLevel":150,"defenceLevel":82,"rangeLevel":100,"magicLevel":100,"stabDef":100,"slashDef":100,"crushDef":100,"rangeDef":100,"magicDef":100,"bonusAttack":100},"4881":{"name":"Flambeed","hitpoints":210,"combatLevel":149,"attackSpeed":4,"attackLevel":120,"strengthLevel":120,"defenceLevel":75,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":5,"rangeDef":50,"magicDef":5,"bonusAttack":100},"4882":{"name":"Karamel","hitpoints":250,"combatLevel":136,"attackSpeed":3,"attackLevel":1,"strengthLevel":1,"defenceLevel":100,"rangeLevel":100,"magicLevel":1,"stab":50,"slash":50,"crush":50,"range":134,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":150,"magicDef":150,"bonusRangeStrength":55},"4883":{"name":"Dessourt","hitpoints":130,"combatLevel":121,"attackSpeed":3,"attackLevel":99,"strengthLevel":99,"defenceLevel":99,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":150,"crushDef":150,"bonusAttack":50,"bonusStrength":50},"4884":{"name":"Gelatinnoth Mother","hitpoints":240,"combatLevel":130,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"4885":{"name":"Gelatinnoth Mother","hitpoints":240,"combatLevel":130,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"4886":{"name":"Gelatinnoth Mother","hitpoints":240,"combatLevel":130,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"4887":{"name":"Gelatinnoth Mother","hitpoints":240,"combatLevel":130,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"4888":{"name":"Gelatinnoth Mother","hitpoints":240,"combatLevel":130,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"4889":{"name":"Gelatinnoth Mother","hitpoints":240,"combatLevel":130,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"4919":{"name":"Grip","hitpoints":25,"combatLevel":22,"attackSpeed":4,"attackLevel":18,"strengthLevel":17,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":16,"slashDef":27,"crushDef":22,"bonusAttack":5,"bonusStrength":7},"4922":{"name":"Ice Queen","hitpoints":105,"combatLevel":111,"attackSpeed":4,"attackLevel":95,"strengthLevel":94,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":40,"crushDef":20,"rangeDef":30,"magicDef":10},"4926":{"name":"Pirate Guard","hitpoints":25,"combatLevel":19,"attackSpeed":4,"attackLevel":18,"strengthLevel":16,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":39,"crushDef":30,"bonusAttack":20,"bonusStrength":16},"4927":{"name":"Entrana firebird","hitpoints":5,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"4930":{"name":"Solus Dellagar","hitpoints":40,"attackSpeed":3},"4933":{"name":"Solus Dellagar","hitpoints":40,"attackSpeed":3},"4934":{"name":"Black Knight","hitpoints":42,"combatLevel":32,"attackSpeed":5},"4958":{"name":"Woman","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"4959":{"name":"Black Knight","hitpoints":42,"combatLevel":32,"attackSpeed":5},"4960":{"name":"Black Knight","hitpoints":42,"combatLevel":32,"attackSpeed":5},"4962":{"name":"Solus Dellagar","hitpoints":40,"attackSpeed":3},"4969":{"name":"Khazard trooper","hitpoints":22,"combatLevel":19,"attackSpeed":5,"attackLevel":17,"strengthLevel":16,"defenceLevel":13,"rangeLevel":1,"magicLevel":1,"stabDef":25,"slashDef":25,"crushDef":22,"bonusAttack":9,"bonusStrength":5},"4970":{"name":"Khazard trooper","hitpoints":22,"combatLevel":19,"attackSpeed":5,"attackLevel":17,"strengthLevel":16,"defenceLevel":13,"rangeLevel":1,"magicLevel":1,"stabDef":25,"slashDef":25,"crushDef":22,"bonusAttack":9,"bonusStrength":5},"4972":{"name":"Khazard commander","hitpoints":22,"combatLevel":48,"attackSpeed":4,"attackLevel":50,"strengthLevel":45,"defenceLevel":50,"rangeLevel":1,"magicLevel":1},"4973":{"name":"Gnome troop","hitpoints":3,"combatLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":5,"magicLevel":1,"stabDef":3,"slashDef":4,"crushDef":5,"rangeDef":4,"magicDef":2,"bonusAttack":2,"bonusStrength":3,"bonusRangeStrength":2},"4974":{"name":"Gnome troop","hitpoints":3,"combatLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":5,"magicLevel":1,"stabDef":3,"slashDef":4,"crushDef":5,"rangeDef":4,"magicDef":2,"bonusAttack":2,"bonusStrength":3,"bonusRangeStrength":2},"4987":{"name":"Chronozon","hitpoints":60,"combatLevel":170,"attackSpeed":4,"attackLevel":173,"strengthLevel":172,"defenceLevel":173,"rangeLevel":1,"magicLevel":1,"demon":true},"5007":{"name":"Imp","hitpoints":8,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5043":{"name":"Suit of armour","hitpoints":29,"combatLevel":19,"attackSpeed":5,"attackLevel":16,"strengthLevel":14,"defenceLevel":9,"rangeLevel":1,"magicLevel":1,"stabDef":46,"slashDef":50,"crushDef":45,"rangeDef":45,"bonusAttack":8,"bonusStrength":10},"5054":{"name":"Skeleton Hellhound","hitpoints":55,"combatLevel":97,"attackSpeed":4,"attackLevel":70,"strengthLevel":110,"defenceLevel":100,"rangeLevel":1,"magicLevel":1},"5079":{"name":"Delrith","hitpoints":7,"combatLevel":27,"demon":true},"5086":{"name":"Dark wizard","hitpoints":12,"combatLevel":7,"attackSpeed":4,"attackLevel":5,"strengthLevel":2,"defenceLevel":5,"rangeLevel":1,"magicLevel":6,"magicDef":3},"5087":{"name":"Dark wizard","hitpoints":12,"combatLevel":7,"attackSpeed":4,"attackLevel":5,"strengthLevel":2,"defenceLevel":5,"rangeLevel":1,"magicLevel":6,"magicDef":3},"5088":{"name":"Dark wizard","hitpoints":24,"combatLevel":20,"attackSpeed":4,"attackLevel":5,"strengthLevel":2,"defenceLevel":5,"rangeLevel":1,"magicLevel":6,"magicDef":3},"5089":{"name":"Dark wizard","hitpoints":24,"combatLevel":20,"attackSpeed":4,"attackLevel":5,"strengthLevel":2,"defenceLevel":5,"rangeLevel":1,"magicLevel":6,"magicDef":3},"5126":{"name":"Experiment No.2","hitpoints":95,"combatLevel":109,"attackSpeed":4,"attackLevel":104,"strengthLevel":92,"defenceLevel":90,"rangeLevel":100,"magicLevel":1,"stabDef":45,"slashDef":70,"crushDef":60,"rangeDef":55,"magicDef":60},"5129":{"name":"Glod","hitpoints":160,"combatLevel":138,"attackSpeed":4,"attackLevel":115,"strengthLevel":120,"defenceLevel":110,"rangeLevel":1,"magicLevel":1,"stabDef":105,"slashDef":110,"crushDef":130,"rangeDef":100,"magicDef":125},"5139":{"name":"Sigmund","hitpoints":70,"combatLevel":64,"attackSpeed":4,"attackLevel":55,"strengthLevel":55,"defenceLevel":44,"rangeLevel":1,"magicLevel":1,"magic":8,"poisonImmune":true,"venomImmune":true},"5142":{"name":"Sigmund","hitpoints":70,"combatLevel":64,"attackSpeed":4,"attackLevel":55,"strengthLevel":55,"defenceLevel":44,"rangeLevel":1,"magicLevel":1,"magic":8,"poisonImmune":true,"venomImmune":true},"5143":{"name":"Sigmund","hitpoints":70,"combatLevel":64,"attackSpeed":4,"attackLevel":55,"strengthLevel":55,"defenceLevel":44,"rangeLevel":1,"magicLevel":1,"magic":8,"poisonImmune":true,"venomImmune":true},"5144":{"name":"Sigmund","hitpoints":70,"combatLevel":64,"attackSpeed":4,"attackLevel":55,"strengthLevel":55,"defenceLevel":44,"rangeLevel":1,"magicLevel":1,"magic":8,"poisonImmune":true,"venomImmune":true},"5145":{"name":"Sigmund","hitpoints":70,"combatLevel":64,"attackSpeed":4,"attackLevel":55,"strengthLevel":55,"defenceLevel":44,"rangeLevel":1,"magicLevel":1,"magic":8,"poisonImmune":true,"venomImmune":true},"5146":{"name":"Sigmund","hitpoints":70,"combatLevel":64,"attackSpeed":4,"attackLevel":55,"strengthLevel":55,"defenceLevel":44,"rangeLevel":1,"magicLevel":1,"magic":8,"poisonImmune":true,"venomImmune":true},"5157":{"name":"H.A.M. Archer","hitpoints":35,"combatLevel":30,"attackSpeed":10,"defenceLevel":30,"rangeLevel":30,"stabDef":5,"slashDef":5,"rangeDef":5},"5158":{"name":"H.A.M. Mage","hitpoints":35,"combatLevel":30,"attackSpeed":6,"defenceLevel":30,"rangeLevel":1,"magicLevel":30,"magic":8,"stabDef":5,"slashDef":5,"rangeDef":5},"5185":{"name":"Guard","hitpoints":16,"combatLevel":10,"attackSpeed":4,"attackLevel":8,"strengthLevel":6,"defenceLevel":9,"rangeLevel":1,"magicLevel":1,"stabDef":3,"slashDef":4,"crushDef":4,"rangeDef":3,"magicDef":2,"bonusAttack":5,"bonusStrength":7},"5186":{"name":"Guard","hitpoints":16,"combatLevel":10,"attackSpeed":4,"attackLevel":8,"strengthLevel":6,"defenceLevel":9,"rangeLevel":1,"magicLevel":1,"stabDef":3,"slashDef":4,"crushDef":4,"rangeDef":3,"magicDef":2,"bonusAttack":5,"bonusStrength":7},"5187":{"name":"Guard","hitpoints":16,"combatLevel":10,"attackSpeed":4,"attackLevel":8,"strengthLevel":6,"defenceLevel":9,"rangeLevel":1,"magicLevel":1,"stabDef":3,"slashDef":4,"crushDef":4,"rangeDef":3,"magicDef":2,"bonusAttack":5,"bonusStrength":7},"5188":{"name":"Guard","hitpoints":16,"combatLevel":10,"attackSpeed":4,"attackLevel":8,"strengthLevel":6,"defenceLevel":9,"rangeLevel":1,"magicLevel":1,"stabDef":3,"slashDef":4,"crushDef":4,"rangeDef":3,"magicDef":2,"bonusAttack":5,"bonusStrength":7},"5189":{"name":"Guard","hitpoints":16,"combatLevel":10,"attackSpeed":4,"attackLevel":8,"strengthLevel":6,"defenceLevel":9,"rangeLevel":1,"magicLevel":1,"stabDef":3,"slashDef":4,"crushDef":4,"rangeDef":3,"magicDef":2,"bonusAttack":5,"bonusStrength":7},"5192":{"name":"Goblin","hitpoints":5,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5193":{"name":"Goblin","hitpoints":5,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5194":{"name":"Baby dragon","hitpoints":50,"combatLevel":48,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":50,"crushDef":50,"rangeDef":30,"magicDef":40,"dragon":true},"5195":{"name":"Goblin","hitpoints":5,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5196":{"name":"Goblin","hitpoints":5,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5197":{"name":"Goblin","hitpoints":5,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5198":{"name":"Goblin","hitpoints":5,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5199":{"name":"Goblin","hitpoints":5,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5200":{"name":"Goblin","hitpoints":5,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5201":{"name":"Goblin","hitpoints":5,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5202":{"name":"Goblin","hitpoints":5,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5203":{"name":"Goblin","hitpoints":5,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5204":{"name":"Goblin","hitpoints":5,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5205":{"name":"Goblin","hitpoints":5,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5206":{"name":"Goblin","hitpoints":5,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5207":{"name":"Goblin","hitpoints":5,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5208":{"name":"Goblin","hitpoints":5,"combatLevel":2,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5211":{"name":"Weaponsmaster","hitpoints":20,"combatLevel":23,"attackSpeed":5,"attackLevel":21,"strengthLevel":21,"defenceLevel":21,"rangeLevel":1,"magicLevel":1,"stabDef":21,"slashDef":23,"crushDef":21,"rangeDef":20,"bonusAttack":8,"bonusStrength":10},"5213":{"name":"Jonny the beard","hitpoints":8,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5217":{"name":"Thief","hitpoints":17,"combatLevel":16,"attackSpeed":4,"attackLevel":14,"strengthLevel":13,"defenceLevel":12,"rangeLevel":1,"magicLevel":1},"5218":{"name":"Thief","hitpoints":17,"combatLevel":16,"attackSpeed":4,"attackLevel":14,"strengthLevel":13,"defenceLevel":12,"rangeLevel":1,"magicLevel":1},"5219":{"name":"Thief","hitpoints":17,"combatLevel":16,"attackSpeed":4,"attackLevel":14,"strengthLevel":13,"defenceLevel":12,"rangeLevel":1,"magicLevel":1},"5220":{"name":"Thief","hitpoints":17,"combatLevel":16,"attackSpeed":4,"attackLevel":14,"strengthLevel":13,"defenceLevel":12,"rangeLevel":1,"magicLevel":1},"5223":{"name":"Sigmund","hitpoints":70,"combatLevel":64,"attackSpeed":4,"attackLevel":55,"strengthLevel":55,"defenceLevel":44,"rangeLevel":1,"magicLevel":1,"magic":8,"poisonImmune":true,"venomImmune":true},"5237":{"name":"Skeleton","hitpoints":110,"combatLevel":142,"attackSpeed":4,"attackLevel":180,"strengthLevel":90,"defenceLevel":110,"rangeLevel":1,"magicLevel":110,"bonusAttack":50,"undead":true},"5238":{"name":"Spider","hitpoints":2,"combatLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"slashDef":1,"magicDef":1,"bonusAttack":1,"bonusStrength":1},"5239":{"name":"Spider","hitpoints":2,"combatLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"slashDef":1,"magicDef":1,"bonusAttack":1,"bonusStrength":1},"5240":{"name":"Bird","hitpoints":10,"combatLevel":11,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":1,"magicLevel":10},"5241":{"name":"Bird","hitpoints":5,"combatLevel":5,"attackSpeed":4,"attackLevel":5,"strengthLevel":5,"defenceLevel":5,"rangeLevel":1,"magicLevel":5},"5242":{"name":"Scorpion","hitpoints":15,"combatLevel":38,"attackSpeed":6},"5243":{"name":"Jungle spider","hitpoints":35,"combatLevel":37,"attackSpeed":4,"attackLevel":50,"strengthLevel":30,"defenceLevel":10,"rangeLevel":1,"magicLevel":10,"bonusAttack":100,"bonusStrength":100},"5244":{"name":"Snake","hitpoints":36,"combatLevel":24,"attackSpeed":4,"attackLevel":15,"strengthLevel":25,"defenceLevel":10,"rangeLevel":1,"magicLevel":10,"bonusAttack":100,"bonusStrength":100},"5259":{"name":"Oipuis","combatLevel":149},"5260":{"name":"Uyoro","combatLevel":149},"5261":{"name":"Ouhai","combatLevel":149},"5262":{"name":"Uodai","combatLevel":149},"5263":{"name":"Padulah","hitpoints":130,"combatLevel":149,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":130,"rangeLevel":1,"magicLevel":130,"bonusAttack":50},"5271":{"name":"Monkey Guard","hitpoints":130,"combatLevel":149,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":130,"rangeLevel":1,"magicLevel":130},"5272":{"name":"Monkey Archer","hitpoints":50,"combatLevel":86,"attackSpeed":4,"attackLevel":80,"strengthLevel":80,"defenceLevel":80,"rangeLevel":110,"magicLevel":1},"5273":{"name":"Monkey Archer","hitpoints":50,"combatLevel":86,"attackSpeed":4,"attackLevel":80,"strengthLevel":80,"defenceLevel":80,"rangeLevel":110,"magicLevel":1},"5274":{"name":"Monkey Archer","hitpoints":50,"combatLevel":86,"attackSpeed":4,"attackLevel":80,"strengthLevel":80,"defenceLevel":80,"rangeLevel":110,"magicLevel":1},"5275":{"name":"Monkey Guard","hitpoints":130,"combatLevel":167,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":200,"rangeLevel":1,"magicLevel":130,"bonusAttack":50},"5276":{"name":"Monkey Guard","hitpoints":130,"combatLevel":167,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":200,"rangeLevel":1,"magicLevel":130,"bonusAttack":50},"5281":{"name":"Monkey Zombie","hitpoints":60,"combatLevel":98,"attackSpeed":4,"attackLevel":150,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":60,"bonusAttack":35,"undead":true},"5282":{"name":"Monkey Zombie","hitpoints":90,"combatLevel":129,"attackSpeed":4,"attackLevel":150,"strengthLevel":110,"defenceLevel":90,"rangeLevel":1,"magicLevel":90,"bonusAttack":35,"undead":true},"5283":{"name":"Monkey Zombie","hitpoints":60,"combatLevel":82,"attackSpeed":4,"attackLevel":100,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":60,"bonusAttack":15,"undead":true},"5293":{"name":"Elf Warrior","hitpoints":105,"combatLevel":108,"attackSpeed":4,"attackLevel":95,"strengthLevel":95,"defenceLevel":80,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60},"5294":{"name":"Elf Warrior","hitpoints":105,"combatLevel":108,"attackSpeed":4,"attackLevel":95,"strengthLevel":95,"defenceLevel":80,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60},"5295":{"name":"Elf Archer","hitpoints":105,"combatLevel":90,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":80,"rangeLevel":90,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60},"5296":{"name":"Elf Archer","hitpoints":105,"combatLevel":90,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":80,"rangeLevel":90,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60},"5329":{"name":"Sigmund","hitpoints":70,"combatLevel":64,"attackSpeed":4,"attackLevel":55,"strengthLevel":55,"defenceLevel":44,"rangeLevel":1,"magicLevel":1,"magic":8,"poisonImmune":true,"venomImmune":true},"5330":{"name":"Cave goblin miner","hitpoints":10,"combatLevel":11,"attackSpeed":4,"attackLevel":10,"strengthLevel":12,"defenceLevel":7,"rangeLevel":1,"magicLevel":1},"5331":{"name":"Cave goblin miner","hitpoints":10,"combatLevel":11,"attackSpeed":4,"attackLevel":10,"strengthLevel":12,"defenceLevel":7,"rangeLevel":1,"magicLevel":1},"5332":{"name":"Cave goblin miner","hitpoints":10,"combatLevel":11,"attackSpeed":4,"attackLevel":10,"strengthLevel":12,"defenceLevel":7,"rangeLevel":1,"magicLevel":1},"5333":{"name":"Cave goblin miner","hitpoints":10,"combatLevel":11,"attackSpeed":4,"attackLevel":10,"strengthLevel":12,"defenceLevel":7,"rangeLevel":1,"magicLevel":1},"5334":{"name":"Cave goblin guard","hitpoints":26,"combatLevel":26,"attackSpeed":6,"attackLevel":22,"strengthLevel":16,"defenceLevel":22,"rangeLevel":1,"magicLevel":1,"slashDef":15,"crushDef":19,"rangeDef":12},"5335":{"name":"Cave goblin guard","hitpoints":26,"combatLevel":24,"attackSpeed":6,"attackLevel":22,"strengthLevel":16,"defenceLevel":22,"rangeLevel":1,"magicLevel":1,"slashDef":15,"crushDef":19,"rangeDef":12},"5336":{"name":"Cave goblin miner","hitpoints":10,"combatLevel":11,"attackSpeed":4,"attackLevel":10,"strengthLevel":12,"defenceLevel":7,"rangeLevel":1,"magicLevel":1},"5337":{"name":"Cave goblin miner","hitpoints":10,"combatLevel":11,"attackSpeed":4,"attackLevel":10,"strengthLevel":12,"defenceLevel":7,"rangeLevel":1,"magicLevel":1},"5338":{"name":"Cave goblin miner","hitpoints":10,"combatLevel":11,"attackSpeed":4,"attackLevel":10,"strengthLevel":12,"defenceLevel":7,"rangeLevel":1,"magicLevel":1},"5339":{"name":"Cave goblin miner","hitpoints":10,"combatLevel":11,"attackSpeed":4,"attackLevel":10,"strengthLevel":12,"defenceLevel":7,"rangeLevel":1,"magicLevel":1},"5342":{"name":"Undead one","hitpoints":47,"combatLevel":68,"attackSpeed":4,"attackLevel":63,"strengthLevel":63,"defenceLevel":63,"undead":true},"5343":{"name":"Undead one","hitpoints":47,"combatLevel":68,"attackSpeed":4,"attackLevel":63,"strengthLevel":63,"defenceLevel":63,"undead":true},"5344":{"name":"Undead one","hitpoints":47,"combatLevel":61,"attackSpeed":4,"attackLevel":55,"strengthLevel":55,"defenceLevel":55,"stabDef":5,"slashDef":5,"crushDef":4,"rangeDef":4,"magicDef":1,"bonusAttack":7,"bonusStrength":5,"undead":true},"5345":{"name":"Undead one","hitpoints":47,"combatLevel":61,"attackSpeed":4,"attackLevel":55,"strengthLevel":55,"defenceLevel":55,"stabDef":5,"slashDef":5,"crushDef":4,"rangeDef":4,"magicDef":1,"bonusAttack":7,"bonusStrength":5,"undead":true},"5346":{"name":"Undead one","hitpoints":47,"combatLevel":68,"attackSpeed":4,"attackLevel":63,"strengthLevel":63,"defenceLevel":63,"undead":true},"5347":{"name":"Undead one","hitpoints":47,"combatLevel":68,"attackSpeed":4,"attackLevel":63,"strengthLevel":63,"defenceLevel":63,"undead":true},"5348":{"name":"Undead one","hitpoints":47,"combatLevel":68,"attackSpeed":4,"attackLevel":63,"strengthLevel":63,"defenceLevel":63,"undead":true},"5349":{"name":"Undead one","hitpoints":59,"combatLevel":73,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"bonusAttack":4,"bonusStrength":5,"undead":true},"5350":{"name":"Undead one","hitpoints":59,"combatLevel":73,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"bonusAttack":4,"bonusStrength":5,"undead":true},"5351":{"name":"Undead one","hitpoints":59,"combatLevel":73,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"bonusAttack":4,"bonusStrength":5,"undead":true},"5353":{"name":"Nazastarool","hitpoints":70,"combatLevel":91,"attackSpeed":4,"attackLevel":85,"strengthLevel":80,"defenceLevel":80},"5354":{"name":"Nazastarool","hitpoints":70,"combatLevel":68,"attackSpeed":4,"attackLevel":58,"strengthLevel":54,"defenceLevel":58,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"magicDef":5,"bonusAttack":15,"bonusStrength":15},"5355":{"name":"Nazastarool","hitpoints":80,"combatLevel":93,"attackSpeed":4,"attackLevel":85,"strengthLevel":80,"defenceLevel":80},"5369":{"name":"Goblin guard","hitpoints":43,"combatLevel":42,"attackSpeed":4,"attackLevel":32,"strengthLevel":37,"defenceLevel":37,"rangeLevel":1,"magicLevel":1,"stabDef":4,"slashDef":6,"crushDef":6,"bonusAttack":8,"bonusStrength":5},"5370":{"name":"Ghost","hitpoints":20,"combatLevel":24,"attackSpeed":4,"attackLevel":23,"strengthLevel":23,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"undead":true},"5372":{"name":"Grave scorpion","hitpoints":7,"combatLevel":12,"attackSpeed":4,"attackLevel":11,"strengthLevel":12,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":3},"5373":{"name":"Poison spider","hitpoints":64,"combatLevel":31,"attackSpeed":6},"5512":{"name":"Gardener","hitpoints":7,"combatLevel":4,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":7,"rangeLevel":1,"magicLevel":1},"5534":{"name":"Whirlpool","combatLevel":127,"slayerLevel":87,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"rangeDef":300,"magicDef":130},"5535":{"name":"Enormous Tentacle","hitpoints":120,"combatLevel":112,"slayerLevel":87,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":150,"magicLevel":1,"rangeDef":270,"poisonImmune":true,"venomImmune":true},"5563":{"name":"Angry barbarian spirit","hitpoints":190,"combatLevel":166,"attackSpeed":4,"attackLevel":150,"strengthLevel":140,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"5564":{"name":"Enraged barbarian spirit","hitpoints":190,"combatLevel":166,"attackSpeed":4,"attackLevel":150,"strengthLevel":140,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"5565":{"name":"Berserk barbarian spirit","hitpoints":190,"combatLevel":166,"attackSpeed":4,"attackLevel":150,"strengthLevel":140,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"rangeDef":2,"bonusAttack":9,"bonusStrength":15},"5566":{"name":"Ferocious barbarian spirit","hitpoints":190,"combatLevel":166,"attackSpeed":4,"attackLevel":150,"strengthLevel":140,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"slashDef":73,"crushDef":72,"rangeDef":72,"bonusAttack":9,"bonusStrength":15},"5615":{"name":"Swamp snake","hitpoints":120,"combatLevel":80,"attackSpeed":4,"attackLevel":50,"strengthLevel":50,"defenceLevel":70,"rangeLevel":30,"magicLevel":30},"5616":{"name":"Swamp snake","hitpoints":125,"combatLevel":109,"attackSpeed":4,"attackLevel":70,"strengthLevel":110,"defenceLevel":80,"rangeLevel":30,"magicLevel":30},"5617":{"name":"Swamp snake","hitpoints":130,"combatLevel":139,"attackSpeed":4,"attackLevel":90,"strengthLevel":170,"defenceLevel":90,"rangeLevel":30,"magicLevel":30},"5625":{"name":"Ghast","hitpoints":115,"combatLevel":79,"attackSpeed":8,"attackLevel":80,"strengthLevel":30,"defenceLevel":60,"rangeLevel":30,"magicLevel":30,"undead":true},"5626":{"name":"Ghast","hitpoints":135,"combatLevel":109,"attackSpeed":8,"attackLevel":110,"strengthLevel":70,"defenceLevel":70,"rangeLevel":30,"magicLevel":30,"undead":true},"5627":{"name":"Ghast","hitpoints":160,"combatLevel":139,"attackSpeed":8,"attackLevel":135,"strengthLevel":110,"defenceLevel":80,"rangeLevel":30,"magicLevel":30,"undead":true},"5628":{"name":"Giant snail","hitpoints":125,"combatLevel":80,"attackSpeed":4,"attackLevel":30,"strengthLevel":30,"defenceLevel":60,"rangeLevel":70,"magicLevel":30},"5629":{"name":"Giant snail","hitpoints":150,"combatLevel":109,"attackSpeed":4,"attackLevel":30,"strengthLevel":30,"defenceLevel":75,"rangeLevel":110,"magicLevel":30},"5630":{"name":"Giant snail","hitpoints":160,"combatLevel":139,"attackSpeed":4,"attackLevel":30,"strengthLevel":30,"defenceLevel":86,"rangeLevel":160,"magicLevel":30},"5631":{"name":"Riyl shadow","hitpoints":76,"combatLevel":80,"attackSpeed":4,"attackLevel":87,"strengthLevel":56,"defenceLevel":60,"rangeLevel":50,"magicLevel":50,"undead":true},"5632":{"name":"Asyn shadow","hitpoints":94,"combatLevel":110,"attackSpeed":4,"attackLevel":110,"strengthLevel":96,"defenceLevel":80,"rangeLevel":50,"magicLevel":50,"undead":true},"5633":{"name":"Shade","hitpoints":115,"combatLevel":140,"attackSpeed":4,"attackLevel":130,"strengthLevel":136,"defenceLevel":100,"rangeLevel":50,"magicLevel":50,"undead":true},"5634":{"name":"Vampyre Juvinate","hitpoints":50,"combatLevel":59,"attackSpeed":4,"attackLevel":95,"strengthLevel":16,"defenceLevel":45,"rangeLevel":50,"magicLevel":50},"5635":{"name":"Vampyre Juvinate","hitpoints":100,"combatLevel":90,"attackSpeed":4,"attackLevel":113,"strengthLevel":46,"defenceLevel":55,"rangeLevel":50,"magicLevel":50},"5636":{"name":"Vampyre Juvinate","hitpoints":150,"combatLevel":119,"attackSpeed":4,"attackLevel":127,"strengthLevel":76,"defenceLevel":65,"rangeLevel":50,"magicLevel":50},"5637":{"name":"Vampyre Juvinate","hitpoints":50,"combatLevel":59,"attackSpeed":4,"attackLevel":95,"strengthLevel":16,"defenceLevel":45,"rangeLevel":50,"magicLevel":50},"5638":{"name":"Vampyre Juvinate","hitpoints":100,"combatLevel":90,"attackSpeed":4,"attackLevel":113,"strengthLevel":46,"defenceLevel":55,"rangeLevel":50,"magicLevel":50},"5639":{"name":"Vampyre Juvinate","hitpoints":150,"combatLevel":119,"attackSpeed":4,"attackLevel":127,"strengthLevel":76,"defenceLevel":65,"rangeLevel":50,"magicLevel":50},"5640":{"name":"Feral Vampyre","hitpoints":75,"combatLevel":70,"attackSpeed":4,"attackLevel":90,"strengthLevel":46,"defenceLevel":30},"5641":{"name":"Feral Vampyre","hitpoints":135,"combatLevel":100,"attackSpeed":4,"attackLevel":105,"strengthLevel":76,"defenceLevel":30},"5642":{"name":"Feral Vampyre","hitpoints":185,"combatLevel":130,"attackSpeed":4,"attackLevel":120,"strengthLevel":116,"defenceLevel":30},"5643":{"name":"Tentacle","hitpoints":75,"combatLevel":99,"attackSpeed":6,"attackLevel":115,"strengthLevel":76,"defenceLevel":75,"rangeLevel":115,"magicLevel":50},"5644":{"name":"Head","hitpoints":150,"combatLevel":140,"attackSpeed":10,"attackLevel":73,"strengthLevel":186,"defenceLevel":75,"rangeLevel":50,"magicLevel":50},"5645":{"name":"Head","hitpoints":150,"combatLevel":140,"attackSpeed":10,"attackLevel":73,"strengthLevel":186,"defenceLevel":75,"rangeLevel":50,"magicLevel":50},"5646":{"name":"Tentacle","hitpoints":75,"combatLevel":99,"attackSpeed":6,"attackLevel":115,"strengthLevel":76,"defenceLevel":75,"rangeLevel":115,"magicLevel":50},"5647":{"name":"Zombie","hitpoints":20,"combatLevel":23,"attackLevel":20,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"undead":true},"5648":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":30,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5649":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":30,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5650":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":30,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5651":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":30,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5652":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":30,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5653":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":30,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5654":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":30,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5655":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":30,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5656":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":35,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5657":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":35,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5658":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":35,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5659":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":35,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5660":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":35,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5661":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":35,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5662":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":35,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5663":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":35,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5665":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":40,"attackSpeed":4,"attackLevel":101,"strengthLevel":6,"defenceLevel":12,"rangeLevel":1,"magicLevel":1,"undead":true},"5666":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":40,"attackSpeed":4,"attackLevel":101,"strengthLevel":6,"defenceLevel":12,"rangeLevel":1,"magicLevel":1,"undead":true},"5667":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":40,"attackSpeed":4,"attackLevel":101,"strengthLevel":6,"defenceLevel":12,"rangeLevel":1,"magicLevel":1,"undead":true},"5668":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":40,"attackSpeed":4,"attackLevel":101,"strengthLevel":6,"defenceLevel":12,"rangeLevel":1,"magicLevel":1,"undead":true},"5669":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":40,"attackSpeed":4,"attackLevel":101,"strengthLevel":6,"defenceLevel":12,"rangeLevel":1,"magicLevel":1,"undead":true},"5670":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":40,"attackSpeed":4,"attackLevel":101,"strengthLevel":6,"defenceLevel":12,"rangeLevel":1,"magicLevel":1,"undead":true},"5671":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":40,"attackSpeed":4,"attackLevel":101,"strengthLevel":6,"defenceLevel":12,"rangeLevel":1,"magicLevel":1,"undead":true},"5672":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":40,"attackSpeed":4,"attackLevel":101,"strengthLevel":6,"defenceLevel":12,"rangeLevel":1,"magicLevel":1,"undead":true},"5673":{"name":"Undead Lumberjack","hitpoints":13,"combatLevel":45,"attackSpeed":4,"attackLevel":105,"strengthLevel":16,"defenceLevel":13,"rangeLevel":1,"magicLevel":1,"undead":true},"5674":{"name":"Undead Lumberjack","hitpoints":13,"combatLevel":45,"attackSpeed":4,"attackLevel":105,"strengthLevel":16,"defenceLevel":13,"rangeLevel":1,"magicLevel":1,"undead":true},"5675":{"name":"Undead Lumberjack","hitpoints":13,"combatLevel":45,"attackSpeed":4,"attackLevel":105,"strengthLevel":16,"defenceLevel":13,"rangeLevel":1,"magicLevel":1,"undead":true},"5676":{"name":"Undead Lumberjack","hitpoints":13,"combatLevel":45,"attackSpeed":4,"attackLevel":105,"strengthLevel":16,"defenceLevel":13,"rangeLevel":1,"magicLevel":1,"undead":true},"5677":{"name":"Undead Lumberjack","hitpoints":13,"combatLevel":45,"attackSpeed":4,"attackLevel":105,"strengthLevel":16,"defenceLevel":13,"rangeLevel":1,"magicLevel":1,"undead":true},"5678":{"name":"Undead Lumberjack","hitpoints":13,"combatLevel":45,"attackSpeed":4,"attackLevel":105,"strengthLevel":16,"defenceLevel":13,"rangeLevel":1,"magicLevel":1,"undead":true},"5679":{"name":"Undead Lumberjack","hitpoints":13,"combatLevel":45,"attackSpeed":4,"attackLevel":105,"strengthLevel":16,"defenceLevel":13,"rangeLevel":1,"magicLevel":1,"undead":true},"5680":{"name":"Undead Lumberjack","hitpoints":13,"combatLevel":45,"attackSpeed":4,"attackLevel":105,"strengthLevel":16,"defenceLevel":13,"rangeLevel":1,"magicLevel":1,"undead":true},"5681":{"name":"Undead Lumberjack","hitpoints":14,"combatLevel":50,"attackSpeed":4,"attackLevel":117,"strengthLevel":16,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"undead":true},"5682":{"name":"Undead Lumberjack","hitpoints":14,"combatLevel":50,"attackSpeed":4,"attackLevel":117,"strengthLevel":16,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"undead":true},"5683":{"name":"Undead Lumberjack","hitpoints":14,"combatLevel":50,"attackSpeed":4,"attackLevel":117,"strengthLevel":16,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"undead":true},"5684":{"name":"Undead Lumberjack","hitpoints":14,"combatLevel":50,"attackSpeed":4,"attackLevel":117,"strengthLevel":16,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"undead":true},"5685":{"name":"Undead Lumberjack","hitpoints":14,"combatLevel":50,"attackSpeed":4,"attackLevel":117,"strengthLevel":16,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"undead":true},"5686":{"name":"Undead Lumberjack","hitpoints":14,"combatLevel":50,"attackSpeed":4,"attackLevel":117,"strengthLevel":16,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"undead":true},"5687":{"name":"Undead Lumberjack","hitpoints":14,"combatLevel":50,"attackSpeed":4,"attackLevel":117,"strengthLevel":16,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"undead":true},"5688":{"name":"Undead Lumberjack","hitpoints":14,"combatLevel":50,"attackSpeed":4,"attackLevel":117,"strengthLevel":16,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"undead":true},"5689":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":55,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5690":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":55,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5691":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":55,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5692":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":55,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5693":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":55,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5694":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":55,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5695":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":55,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5696":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":55,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5697":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":60,"attackSpeed":4,"attackLevel":137,"strengthLevel":26,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"5698":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":60,"attackSpeed":4,"attackLevel":137,"strengthLevel":26,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"5699":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":60,"attackSpeed":4,"attackLevel":137,"strengthLevel":26,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"5700":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":60,"attackSpeed":4,"attackLevel":137,"strengthLevel":26,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"5701":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":60,"attackSpeed":4,"attackLevel":137,"strengthLevel":26,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"5702":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":60,"attackSpeed":4,"attackLevel":137,"strengthLevel":26,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"5703":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":60,"attackSpeed":4,"attackLevel":137,"strengthLevel":26,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"5704":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":60,"attackSpeed":4,"attackLevel":137,"strengthLevel":26,"defenceLevel":16,"rangeLevel":1,"magicLevel":1,"undead":true},"5705":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":64,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5706":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":64,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5707":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":64,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5708":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":64,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5709":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":64,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5710":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":64,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5711":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":64,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5712":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":64,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5713":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":70,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5714":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":70,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5715":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":70,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5716":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":70,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5717":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":70,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5718":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":70,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5719":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":70,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5720":{"name":"Undead Lumberjack","hitpoints":12,"combatLevel":70,"attackSpeed":4,"rangeLevel":1,"magicLevel":1,"undead":true},"5739":{"name":"Penance Fighter","hitpoints":28,"combatLevel":30,"attackSpeed":4},"5740":{"name":"Penance Fighter","hitpoints":29,"combatLevel":32,"attackSpeed":4},"5741":{"name":"Penance Fighter","hitpoints":32,"combatLevel":37,"attackSpeed":4},"5742":{"name":"Penance Fighter","hitpoints":37,"combatLevel":42,"attackSpeed":4},"5743":{"name":"Penance Fighter","hitpoints":38,"combatLevel":47,"attackSpeed":4},"5744":{"name":"Penance Fighter","hitpoints":49,"combatLevel":56,"attackSpeed":4},"5745":{"name":"Penance Fighter","hitpoints":50,"combatLevel":61,"attackSpeed":4},"5746":{"name":"Penance Fighter","hitpoints":55,"combatLevel":68,"attackSpeed":4},"5747":{"name":"Penance Fighter","hitpoints":56,"combatLevel":77,"attackSpeed":4},"5757":{"name":"Penance Ranger","hitpoints":20,"combatLevel":21,"attackSpeed":4},"5758":{"name":"Penance Ranger","hitpoints":29,"combatLevel":25,"attackSpeed":4},"5759":{"name":"Penance Ranger","hitpoints":32,"combatLevel":32,"attackSpeed":4},"5760":{"name":"Penance Ranger","hitpoints":34,"combatLevel":38,"attackSpeed":4},"5761":{"name":"Penance Ranger","hitpoints":41,"combatLevel":43,"attackSpeed":4},"5762":{"name":"Penance Ranger","hitpoints":50,"combatLevel":51,"attackSpeed":4},"5763":{"name":"Penance Ranger","hitpoints":50,"combatLevel":57,"attackSpeed":4},"5764":{"name":"Penance Ranger","hitpoints":55,"combatLevel":64,"attackSpeed":4},"5765":{"name":"Penance Ranger","hitpoints":58,"combatLevel":72,"attackSpeed":4},"5775":{"name":"Penance Queen","hitpoints":250,"combatLevel":209,"attackSpeed":4,"attackLevel":260,"strengthLevel":92,"defenceLevel":132,"rangeLevel":116,"magicLevel":1},"5776":{"name":"Queen spawn","hitpoints":45,"combatLevel":63,"attackSpeed":4,"attackLevel":60,"strengthLevel":62,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"venomImmune":true},"5779":{"name":"Giant Mole","hitpoints":200,"combatLevel":230,"attackSpeed":4,"attackLevel":200,"strengthLevel":200,"defenceLevel":200,"rangeLevel":1,"magicLevel":200,"stabDef":60,"slashDef":80,"crushDef":100,"rangeDef":60,"magicDef":80},"5816":{"name":"Yak","hitpoints":50,"combatLevel":22,"attackSpeed":4,"attackLevel":20,"strengthLevel":10,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"poisonImmune":true},"5822":{"name":"Ice Troll King","hitpoints":150,"combatLevel":122,"attackSpeed":4,"attackLevel":100,"strengthLevel":100,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"stabDef":45,"slashDef":45,"crushDef":45,"rangeDef":2000,"magicDef":2000,"bonusAttack":60,"bonusStrength":60},"5823":{"name":"Ice troll runt","hitpoints":60,"combatLevel":74,"attackSpeed":4,"attackLevel":60,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"5824":{"name":"Ice troll male","hitpoints":80,"combatLevel":82,"attackSpeed":4,"attackLevel":80,"strengthLevel":80,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"5825":{"name":"Ice troll female","hitpoints":80,"combatLevel":82,"attackSpeed":4,"attackLevel":80,"strengthLevel":80,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"5828":{"name":"Ice troll runt","hitpoints":60,"combatLevel":74,"attackSpeed":4,"attackLevel":60,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"5829":{"name":"Ice troll male","hitpoints":80,"combatLevel":82,"attackSpeed":4,"attackLevel":80,"strengthLevel":80,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"5830":{"name":"Ice troll female","hitpoints":80,"combatLevel":82,"attackSpeed":4,"attackLevel":80,"strengthLevel":80,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"5831":{"name":"Ice troll grunt","hitpoints":80,"combatLevel":102,"attackSpeed":4,"attackLevel":100,"strengthLevel":100,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":60,"crushDef":30,"bonusAttack":60,"bonusStrength":60},"5842":{"name":"Cow","hitpoints":8,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"poisonImmune":true,"venomImmune":true},"5848":{"name":"Tanglefoot","hitpoints":102,"combatLevel":111,"attackSpeed":4,"attackLevel":97,"strengthLevel":97,"defenceLevel":91,"rangeLevel":1,"magicLevel":1},"5853":{"name":"Baby tanglefoot","hitpoints":40,"combatLevel":45,"attackSpeed":4,"attackLevel":40,"strengthLevel":38,"defenceLevel":40,"rangeLevel":1,"magicLevel":1},"5854":{"name":"Baby tanglefoot","hitpoints":40,"combatLevel":45,"attackSpeed":4,"attackLevel":40,"strengthLevel":38,"defenceLevel":40,"rangeLevel":1,"magicLevel":1},"5862":{"name":"Cerberus","hitpoints":600,"combatLevel":318,"slayerLevel":91,"attackSpeed":6,"attackLevel":220,"strengthLevel":220,"defenceLevel":100,"rangeLevel":220,"magicLevel":220,"slash":50,"range":50,"magic":50,"stabDef":50,"slashDef":100,"crushDef":25,"rangeDef":100,"magicDef":100,"bonusAttack":50,"poisonImmune":true,"venomImmune":true},"5863":{"name":"Cerberus","hitpoints":600,"combatLevel":318,"slayerLevel":91,"attackSpeed":6,"attackLevel":220,"strengthLevel":220,"defenceLevel":100,"rangeLevel":220,"magicLevel":220,"slash":50,"range":50,"magic":50,"stabDef":50,"slashDef":100,"crushDef":25,"rangeDef":100,"magicDef":100,"bonusAttack":50,"poisonImmune":true,"venomImmune":true},"5866":{"name":"Cerberus","hitpoints":600,"combatLevel":318,"slayerLevel":91,"attackSpeed":6,"attackLevel":220,"strengthLevel":220,"defenceLevel":100,"rangeLevel":220,"magicLevel":220,"slash":50,"range":50,"magic":50,"stabDef":50,"slashDef":100,"crushDef":25,"rangeDef":100,"magicDef":100,"bonusAttack":50,"poisonImmune":true,"venomImmune":true},"5872":{"name":"Baby dragon","hitpoints":50,"combatLevel":48,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":50,"crushDef":50,"rangeDef":30,"magicDef":40,"dragon":true},"5873":{"name":"Baby dragon","hitpoints":50,"combatLevel":48,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":50,"crushDef":50,"rangeDef":30,"magicDef":40,"dragon":true},"5874":{"name":"Black demon","hitpoints":157,"combatLevel":172,"attackSpeed":4,"attackLevel":145,"strengthLevel":152,"defenceLevel":148,"rangeLevel":1,"magicLevel":1,"demon":true},"5875":{"name":"Black demon","hitpoints":157,"combatLevel":172,"attackSpeed":4,"attackLevel":145,"strengthLevel":152,"defenceLevel":148,"rangeLevel":1,"magicLevel":1,"demon":true},"5876":{"name":"Black demon","hitpoints":157,"combatLevel":172,"attackSpeed":4,"attackLevel":145,"strengthLevel":152,"defenceLevel":148,"rangeLevel":1,"magicLevel":1,"demon":true},"5877":{"name":"Black demon","hitpoints":157,"combatLevel":172,"attackSpeed":4,"attackLevel":145,"strengthLevel":152,"defenceLevel":148,"rangeLevel":1,"magicLevel":1,"demon":true},"5878":{"name":"Blue dragon","hitpoints":105,"combatLevel":111,"attackSpeed":4,"attackLevel":95,"strengthLevel":95,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"5879":{"name":"Blue dragon","hitpoints":105,"combatLevel":111,"attackSpeed":4,"attackLevel":95,"strengthLevel":95,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"5880":{"name":"Blue dragon","hitpoints":105,"combatLevel":111,"attackSpeed":4,"attackLevel":95,"strengthLevel":95,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"5881":{"name":"Blue dragon","hitpoints":105,"combatLevel":111,"attackSpeed":4,"attackLevel":95,"strengthLevel":95,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"5882":{"name":"Blue dragon","hitpoints":105,"combatLevel":111,"attackSpeed":4,"attackLevel":95,"strengthLevel":95,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"5886":{"name":"Abyssal Sire","hitpoints":400,"combatLevel":350,"slayerLevel":85,"attackSpeed":7,"attackLevel":180,"strengthLevel":136,"defenceLevel":250,"rangeLevel":1,"magicLevel":200,"stabDef":40,"slashDef":60,"crushDef":50,"rangeDef":60,"magicDef":20,"bonusAttack":65,"demon":true},"5887":{"name":"Abyssal Sire","hitpoints":400,"combatLevel":350,"slayerLevel":85,"attackSpeed":7,"attackLevel":180,"strengthLevel":136,"defenceLevel":250,"rangeLevel":1,"magicLevel":200,"stabDef":40,"slashDef":60,"crushDef":50,"rangeDef":60,"magicDef":20,"bonusAttack":65,"demon":true},"5888":{"name":"Abyssal Sire","hitpoints":400,"combatLevel":350,"slayerLevel":85,"attackSpeed":7,"attackLevel":180,"strengthLevel":136,"defenceLevel":250,"rangeLevel":1,"magicLevel":200,"stabDef":40,"slashDef":60,"crushDef":50,"rangeDef":60,"magicDef":20,"bonusAttack":65,"demon":true},"5889":{"name":"Abyssal Sire","hitpoints":400,"combatLevel":350,"slayerLevel":85,"attackSpeed":7,"attackLevel":180,"strengthLevel":136,"defenceLevel":250,"rangeLevel":1,"magicLevel":200,"stabDef":40,"slashDef":60,"crushDef":50,"rangeDef":60,"magicDef":20,"bonusAttack":65,"demon":true},"5890":{"name":"Abyssal Sire","hitpoints":400,"combatLevel":350,"slayerLevel":85,"attackSpeed":7,"attackLevel":180,"strengthLevel":136,"defenceLevel":250,"rangeLevel":1,"magicLevel":200,"stabDef":40,"slashDef":60,"crushDef":50,"rangeDef":60,"magicDef":20,"bonusAttack":65,"demon":true},"5891":{"name":"Abyssal Sire","hitpoints":400,"combatLevel":350,"slayerLevel":85,"attackSpeed":7,"attackLevel":180,"strengthLevel":136,"defenceLevel":250,"rangeLevel":1,"magicLevel":200,"stabDef":40,"slashDef":60,"crushDef":50,"rangeDef":60,"magicDef":20,"bonusAttack":65,"demon":true},"5908":{"name":"Abyssal Sire","hitpoints":400,"combatLevel":350,"slayerLevel":85,"attackSpeed":7,"attackLevel":180,"strengthLevel":136,"defenceLevel":250,"rangeLevel":1,"magicLevel":200,"stabDef":40,"slashDef":60,"crushDef":50,"rangeDef":60,"magicDef":20,"bonusAttack":65,"demon":true},"5916":{"name":"Spawn","hitpoints":15,"combatLevel":60,"attackSpeed":4,"attackLevel":120,"strengthLevel":30,"defenceLevel":30,"rangeLevel":50,"magicLevel":1,"poisonImmune":true,"venomImmune":true},"5917":{"name":"Spawn","hitpoints":15,"combatLevel":60,"attackSpeed":4,"attackLevel":120,"strengthLevel":30,"defenceLevel":30,"rangeLevel":50,"magicLevel":1,"poisonImmune":true,"venomImmune":true},"5918":{"name":"Scion","hitpoints":50,"combatLevel":100,"attackSpeed":4,"attackLevel":120,"strengthLevel":90,"defenceLevel":80,"rangeLevel":100,"magicLevel":1,"range":30,"bonusAttack":30,"bonusRangeStrength":30,"poisonImmune":true,"venomImmune":true},"5935":{"name":"Sand Crab","hitpoints":60,"combatLevel":15,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5936":{"name":"Sandy rocks","hitpoints":60,"combatLevel":15,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"5938":{"name":"Wallasalki","hitpoints":120,"combatLevel":98,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":80,"rangeLevel":1,"magicLevel":100,"stabDef":100,"slashDef":150,"crushDef":175,"magicDef":250},"5939":{"name":"Wallasalki","hitpoints":120,"combatLevel":98,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":80,"rangeLevel":1,"magicLevel":100,"stabDef":100,"slashDef":150,"crushDef":175,"magicDef":250},"5940":{"name":"Giant Rock Crab","hitpoints":180,"combatLevel":137,"attackSpeed":4,"attackLevel":50,"strengthLevel":80,"defenceLevel":200,"rangeLevel":1,"magicLevel":1,"stabDef":225,"slashDef":200,"crushDef":175,"rangeDef":250},"5942":{"name":"Dagannoth","hitpoints":85,"combatLevel":88,"attackSpeed":3,"attackLevel":1,"strengthLevel":1,"defenceLevel":75,"rangeLevel":100,"magicLevel":1,"slashDef":10,"crushDef":90,"rangeDef":150,"magicDef":200},"5943":{"name":"Dagannoth","hitpoints":95,"combatLevel":90,"attackSpeed":4,"attackLevel":76,"strengthLevel":78,"defenceLevel":65,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":50,"rangeDef":50,"magicDef":50,"bonusAttack":50,"bonusStrength":50},"5944":{"name":"Rock lobster","hitpoints":150,"combatLevel":127,"attackSpeed":2,"attackLevel":100,"strengthLevel":100,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"stabDef":100,"slashDef":100,"crushDef":50,"rangeDef":150,"magicDef":50},"5946":{"name":"Suspicious water","hitpoints":100,"combatLevel":34},"5947":{"name":"Spinolyp","hitpoints":100,"combatLevel":76,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":100,"magicLevel":1,"stabDef":100,"slashDef":100,"crushDef":100,"rangeDef":50,"magicDef":50},"5948":{"name":"Suspicious water","hitpoints":100,"combatLevel":34},"5961":{"name":"Spinolyp","hitpoints":100,"combatLevel":76,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":100,"magicLevel":1,"stabDef":100,"slashDef":100,"crushDef":100,"rangeDef":50,"magicDef":50},"5962":{"name":"Suspicious water","hitpoints":100,"combatLevel":34},"5963":{"name":"Spinolyp","hitpoints":100,"combatLevel":76,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":100,"magicLevel":1,"stabDef":100,"slashDef":100,"crushDef":100,"rangeDef":50,"magicDef":50},"5964":{"name":"Khazard trooper","hitpoints":22,"combatLevel":19,"attackSpeed":5,"attackLevel":17,"strengthLevel":16,"defenceLevel":13,"rangeLevel":1,"magicLevel":1,"stabDef":25,"slashDef":25,"crushDef":22,"bonusAttack":9,"bonusStrength":5},"5965":{"name":"Khazard trooper","hitpoints":22,"combatLevel":19,"attackSpeed":5,"attackLevel":17,"strengthLevel":16,"defenceLevel":13,"rangeLevel":1,"magicLevel":1,"stabDef":25,"slashDef":25,"crushDef":22,"bonusAttack":9,"bonusStrength":5},"5968":{"name":"Gnome","hitpoints":3,"combatLevel":3,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":5,"magicLevel":1,"bonusRangeStrength":2},"5969":{"name":"Gnome","hitpoints":3,"combatLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"bonusRangeStrength":2},"5970":{"name":"Gnome","hitpoints":3,"combatLevel":3,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":5,"magicLevel":1,"bonusRangeStrength":2},"5971":{"name":"Mounted terrorbird gnome","hitpoints":55,"combatLevel":49,"attackSpeed":4,"attackLevel":25,"strengthLevel":25,"defenceLevel":25,"stabDef":16,"slashDef":16,"crushDef":18,"rangeDef":10,"magicDef":15},"5972":{"name":"Mounted terrorbird gnome","hitpoints":55,"combatLevel":49,"attackSpeed":4,"attackLevel":25,"strengthLevel":25,"defenceLevel":25,"stabDef":16,"slashDef":16,"crushDef":18,"rangeDef":10,"magicDef":15},"5973":{"name":"Mounted terrorbird gnome","hitpoints":55,"combatLevel":49,"attackSpeed":4,"attackLevel":25,"strengthLevel":25,"defenceLevel":25,"stabDef":16,"slashDef":16,"crushDef":18,"rangeDef":10,"magicDef":15},"5977":{"name":"Justiciar Zachariah","hitpoints":320,"combatLevel":348,"attackSpeed":6,"attackLevel":500,"strengthLevel":250,"defenceLevel":100,"rangeLevel":1,"magicLevel":180,"magic":80,"stabDef":200,"slashDef":200,"crushDef":200,"rangeDef":200,"bonusAttack":200,"bonusMagicDamage":80,"poisonImmune":true,"venomImmune":true},"6046":{"name":"Black Guard","hitpoints":40,"combatLevel":48,"attackSpeed":3,"attackLevel":40,"strengthLevel":45,"defenceLevel":45,"rangeLevel":1,"magicLevel":1,"stabDef":40,"slashDef":40,"crushDef":40,"rangeDef":40,"bonusAttack":30,"bonusStrength":30},"6047":{"name":"Black Guard","hitpoints":40,"combatLevel":48,"attackSpeed":3,"attackLevel":40,"strengthLevel":45,"defenceLevel":45,"rangeLevel":1,"magicLevel":1,"stabDef":40,"slashDef":40,"crushDef":40,"rangeDef":40,"bonusAttack":30,"bonusStrength":30},"6048":{"name":"Black Guard","hitpoints":40,"combatLevel":48,"attackSpeed":3,"attackLevel":40,"strengthLevel":45,"defenceLevel":45,"rangeLevel":1,"magicLevel":1,"stabDef":40,"slashDef":40,"crushDef":40,"rangeDef":40,"bonusAttack":30,"bonusStrength":30},"6049":{"name":"Black Guard","hitpoints":40,"combatLevel":48,"attackSpeed":3,"attackLevel":40,"strengthLevel":45,"defenceLevel":45,"rangeLevel":1,"magicLevel":1,"stabDef":40,"slashDef":40,"crushDef":40,"rangeDef":40,"bonusAttack":30,"bonusStrength":30},"6050":{"name":"Black Guard Berserker","hitpoints":50,"combatLevel":66,"attackSpeed":3,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stabDef":60,"slashDef":60,"crushDef":60,"rangeDef":60,"bonusAttack":55,"bonusStrength":55},"6051":{"name":"Black Guard Berserker","hitpoints":50,"combatLevel":66,"attackSpeed":3,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stabDef":60,"slashDef":60,"crushDef":60,"rangeDef":60,"bonusAttack":55,"bonusStrength":55},"6052":{"name":"Black Guard Berserker","hitpoints":50,"combatLevel":66,"attackSpeed":3,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stabDef":60,"slashDef":60,"crushDef":60,"rangeDef":60,"bonusAttack":55,"bonusStrength":55},"6056":{"name":"Guard","hitpoints":50,"combatLevel":37,"attackSpeed":6,"attackLevel":20,"strengthLevel":20,"defenceLevel":20,"rangeLevel":40,"magicLevel":1,"stabDef":18,"slashDef":23,"crushDef":27,"rangeDef":19,"magicDef":10,"bonusAttack":19,"bonusStrength":8,"bonusRangeStrength":8},"6065":{"name":"Tower Archer","hitpoints":30,"combatLevel":19,"attackSpeed":6,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":20,"magicLevel":1,"rangeDef":12,"magicDef":6,"bonusRangeStrength":16},"6066":{"name":"Tower Archer","hitpoints":50,"combatLevel":34,"attackSpeed":6,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":40,"magicLevel":1,"rangeDef":40,"magicDef":24,"bonusRangeStrength":22},"6067":{"name":"Tower Archer","hitpoints":70,"combatLevel":49,"attackSpeed":6,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":60,"magicLevel":1,"rangeDef":45,"magicDef":20,"bonusRangeStrength":31},"6068":{"name":"Tower Archer","hitpoints":90,"combatLevel":64,"attackSpeed":6,"attackLevel":10,"strengthLevel":10,"defenceLevel":10,"rangeLevel":80,"magicLevel":1,"rangeDef":66,"magicDef":34,"bonusRangeStrength":49},"6075":{"name":"Tortoise","hitpoints":100,"combatLevel":79,"attackSpeed":4,"attackLevel":15,"strengthLevel":90,"defenceLevel":80,"rangeLevel":1,"magicLevel":1},"6076":{"name":"Tortoise","hitpoints":120,"combatLevel":92,"attackSpeed":4,"attackLevel":30,"strengthLevel":100,"defenceLevel":80,"rangeLevel":50,"magicLevel":50},"6077":{"name":"Gnome child","hitpoints":2,"combatLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"6078":{"name":"Gnome child","hitpoints":2,"combatLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"6079":{"name":"Gnome child","hitpoints":2,"combatLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"6081":{"name":"Gnome guard","hitpoints":31,"combatLevel":23,"attackSpeed":4,"attackLevel":17,"strengthLevel":17,"defenceLevel":17,"rangeLevel":1,"magicLevel":1,"bonusAttack":8,"bonusStrength":13},"6082":{"name":"Gnome guard","hitpoints":31,"combatLevel":23,"attackSpeed":4,"attackLevel":17,"strengthLevel":17,"defenceLevel":17,"rangeLevel":1,"magicLevel":1,"bonusAttack":8,"bonusStrength":13},"6086":{"name":"Gnome woman","hitpoints":2,"combatLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"6087":{"name":"Gnome woman","hitpoints":2,"combatLevel":1,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"6094":{"name":"Gnome","hitpoints":3,"combatLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"bonusRangeStrength":2},"6095":{"name":"Gnome","hitpoints":3,"combatLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"bonusRangeStrength":2},"6096":{"name":"Gnome","hitpoints":3,"combatLevel":1,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"bonusRangeStrength":2},"6097":{"name":"Gnome Archer","hitpoints":10,"combatLevel":5,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":6,"magicLevel":1},"6098":{"name":"Gnome Driver","hitpoints":10,"combatLevel":5,"attackSpeed":6,"attackLevel":3,"strengthLevel":5,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"6099":{"name":"Gnome Mage","hitpoints":10,"combatLevel":5,"attackSpeed":6,"attackLevel":3,"strengthLevel":1,"defenceLevel":1,"rangeLevel":5,"magicLevel":1},"6102":{"name":"Bush snake","hitpoints":25,"combatLevel":35,"attackSpeed":3,"attackLevel":25,"strengthLevel":25,"defenceLevel":50,"rangeLevel":1,"magicLevel":1},"6103":{"name":"Bush snake","hitpoints":25,"combatLevel":35,"attackSpeed":3,"attackLevel":25,"strengthLevel":25,"defenceLevel":50,"rangeLevel":1,"magicLevel":1},"6118":{"name":"Elvarg (hard)","hitpoints":240,"combatLevel":214,"attackSpeed":4,"attackLevel":210,"strengthLevel":210,"defenceLevel":70,"rangeLevel":1,"magicLevel":210,"stabDef":20,"slashDef":40,"crushDef":40,"rangeDef":20,"magicDef":30},"6119":{"name":"The Inadequacy (hard)","hitpoints":255,"combatLevel":600,"attackSpeed":4,"attackLevel":1128,"strengthLevel":340,"defenceLevel":240,"rangeLevel":340,"magicLevel":1},"6120":{"name":"The Everlasting (hard)","hitpoints":255,"combatLevel":365,"attackSpeed":6,"attackLevel":374,"strengthLevel":462,"defenceLevel":120,"rangeLevel":1,"magicLevel":1},"6121":{"name":"The Untouchable (hard)","hitpoints":180,"combatLevel":440,"attackSpeed":6,"attackLevel":374,"strengthLevel":510,"defenceLevel":434,"rangeLevel":1,"magicLevel":1},"6177":{"name":"Scion","hitpoints":50,"combatLevel":100,"attackSpeed":4,"attackLevel":120,"strengthLevel":90,"defenceLevel":80,"rangeLevel":100,"magicLevel":1,"range":30,"bonusAttack":30,"bonusRangeStrength":30,"poisonImmune":true,"venomImmune":true},"6267":{"name":"Jungle spider","hitpoints":50,"combatLevel":44,"attackSpeed":4,"attackLevel":35,"strengthLevel":37,"defenceLevel":35,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"crushDef":10,"rangeDef":20,"magicDef":17},"6271":{"name":"Jungle spider","hitpoints":50,"combatLevel":44,"attackSpeed":4,"attackLevel":35,"strengthLevel":37,"defenceLevel":35,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"crushDef":10,"rangeDef":20,"magicDef":17},"6272":{"name":"Large mosquito","hitpoints":3,"combatLevel":13,"attackSpeed":4,"attackLevel":5,"strengthLevel":1,"defenceLevel":45,"rangeLevel":1,"magicLevel":1,"stabDef":2,"slashDef":2,"crushDef":5,"magicDef":2},"6273":{"name":"Mosquito swarm","hitpoints":9,"combatLevel":17,"attackSpeed":3,"attackLevel":10,"strengthLevel":1,"defenceLevel":45,"rangeLevel":1,"magicLevel":1,"stabDef":2,"slashDef":2,"crushDef":5,"magicDef":2},"6291":{"name":"Tanglefoot (hard)","hitpoints":204,"combatLevel":199,"attackSpeed":4,"attackLevel":194,"strengthLevel":194,"defenceLevel":91,"rangeLevel":1,"magicLevel":1},"6292":{"name":"Chronozon (hard)","hitpoints":120,"combatLevel":297,"attackSpeed":4,"attackLevel":346,"strengthLevel":344,"defenceLevel":173,"rangeLevel":1,"magicLevel":1,"demon":true},"6293":{"name":"Bouncer (hard)","hitpoints":232,"combatLevel":244,"attackSpeed":4,"attackLevel":240,"strengthLevel":240,"defenceLevel":120,"rangeLevel":1,"magicLevel":1},"6294":{"name":"Ice Troll King (hard)","hitpoints":255,"combatLevel":213,"attackSpeed":4,"attackLevel":200,"strengthLevel":200,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"stabDef":45,"slashDef":45,"crushDef":45,"rangeDef":2000,"magicDef":2000,"bonusAttack":60,"bonusStrength":60},"6295":{"name":"Black demon (hard)","hitpoints":157,"combatLevel":292,"attackSpeed":4,"attackLevel":290,"strengthLevel":296,"defenceLevel":152,"rangeLevel":1,"magicLevel":1,"demon":true},"6297":{"name":"Glod (hard)","hitpoints":255,"combatLevel":276,"attackSpeed":4,"attackLevel":230,"strengthLevel":240,"defenceLevel":110,"rangeLevel":1,"magicLevel":1,"stabDef":105,"slashDef":110,"crushDef":130,"rangeDef":100,"magicDef":125},"6298":{"name":"Treus Dayth (hard)","hitpoints":240,"combatLevel":194,"attackSpeed":4,"attackLevel":168,"strengthLevel":168,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5},"6299":{"name":"Black Knight Titan (hard)","hitpoints":255,"combatLevel":210,"attackSpeed":7,"attackLevel":182,"strengthLevel":200,"defenceLevel":91,"rangeLevel":1,"magicLevel":1,"stabDef":18,"slashDef":27,"crushDef":18,"rangeDef":1000,"magicDef":1000,"bonusAttack":27,"bonusStrength":22},"6300":{"name":"Dagannoth mother (hard)","hitpoints":240,"combatLevel":201,"attackSpeed":4,"attackLevel":186,"strengthLevel":186,"defenceLevel":81,"rangeLevel":120,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6301":{"name":"Dagannoth mother (hard)","hitpoints":240,"combatLevel":201,"attackSpeed":4,"attackLevel":186,"strengthLevel":186,"defenceLevel":81,"rangeLevel":120,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6302":{"name":"Dagannoth mother (hard)","hitpoints":240,"combatLevel":201,"attackSpeed":4,"attackLevel":186,"strengthLevel":186,"defenceLevel":81,"rangeLevel":120,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6303":{"name":"Dagannoth mother (hard)","hitpoints":240,"combatLevel":201,"attackSpeed":4,"attackLevel":186,"strengthLevel":186,"defenceLevel":81,"rangeLevel":120,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6304":{"name":"Dagannoth mother (hard)","hitpoints":240,"combatLevel":201,"attackSpeed":4,"attackLevel":186,"strengthLevel":186,"defenceLevel":81,"rangeLevel":120,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6305":{"name":"Dagannoth mother (hard)","hitpoints":240,"combatLevel":201,"attackSpeed":4,"attackLevel":186,"strengthLevel":186,"defenceLevel":81,"rangeLevel":120,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6307":{"name":"Culinaromancer (hard)","hitpoints":255,"combatLevel":209,"attackSpeed":4,"attackLevel":10,"strengthLevel":400,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"6308":{"name":"Agrith-Na-Na (hard)","hitpoints":255,"combatLevel":235,"attackSpeed":4,"attackLevel":166,"strengthLevel":300,"defenceLevel":82,"rangeLevel":200,"magicLevel":200,"stabDef":100,"slashDef":100,"crushDef":100,"rangeDef":100,"magicDef":100,"bonusAttack":100},"6309":{"name":"Flambeed (hard)","hitpoints":255,"combatLevel":238,"attackSpeed":4,"attackLevel":240,"strengthLevel":240,"defenceLevel":75,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":5,"rangeDef":50,"magicDef":5,"bonusAttack":100},"6310":{"name":"Karamel (hard)","hitpoints":255,"combatLevel":186,"attackSpeed":3,"attackLevel":1,"strengthLevel":1,"defenceLevel":100,"rangeLevel":200,"magicLevel":1,"stab":100,"slash":100,"crush":100,"range":268,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":150,"magicDef":150,"bonusRangeStrength":110},"6311":{"name":"Dessourt (hard)","hitpoints":255,"combatLevel":217,"attackSpeed":3,"attackLevel":198,"strengthLevel":198,"defenceLevel":198,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":150,"crushDef":150,"bonusAttack":50,"bonusStrength":50},"6312":{"name":"Gelatinnoth Mother (hard)","hitpoints":240,"combatLevel":201,"attackSpeed":4,"attackLevel":186,"strengthLevel":186,"defenceLevel":81,"rangeLevel":120,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6313":{"name":"Gelatinnoth Mother (hard)","hitpoints":240,"combatLevel":201,"attackSpeed":4,"attackLevel":186,"strengthLevel":186,"defenceLevel":81,"rangeLevel":120,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6314":{"name":"Gelatinnoth Mother (hard)","hitpoints":240,"combatLevel":201,"attackSpeed":4,"attackLevel":186,"strengthLevel":186,"defenceLevel":81,"rangeLevel":120,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6315":{"name":"Gelatinnoth Mother (hard)","hitpoints":240,"combatLevel":201,"attackSpeed":4,"attackLevel":186,"strengthLevel":186,"defenceLevel":81,"rangeLevel":120,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6316":{"name":"Gelatinnoth Mother (hard)","hitpoints":240,"combatLevel":201,"attackSpeed":4,"attackLevel":186,"strengthLevel":186,"defenceLevel":81,"rangeLevel":120,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6317":{"name":"Gelatinnoth Mother (hard)","hitpoints":240,"combatLevel":201,"attackSpeed":4,"attackLevel":186,"strengthLevel":186,"defenceLevel":81,"rangeLevel":120,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6318":{"name":"Nezikchened (hard)","hitpoints":150,"combatLevel":295,"attackSpeed":5,"attackLevel":330,"strengthLevel":336,"defenceLevel":167,"rangeLevel":320,"magicLevel":320,"demon":true},"6319":{"name":"Tree spirit (hard)","hitpoints":187,"combatLevel":199,"attackSpeed":4,"attackLevel":200,"strengthLevel":209,"defenceLevel":80,"rangeLevel":1,"magicLevel":1},"6320":{"name":"Me (hard)","hitpoints":135,"combatLevel":201,"attackSpeed":4,"attackLevel":225,"strengthLevel":234,"defenceLevel":74,"rangeLevel":1,"magicLevel":1},"6321":{"name":"Jungle Demon (hard)","hitpoints":255,"combatLevel":327,"attackSpeed":6,"attackLevel":340,"strengthLevel":340,"defenceLevel":170,"rangeLevel":1,"magicLevel":340,"slashDef":50,"magicDef":50,"bonusAttack":50,"bonusStrength":50,"demon":true},"6322":{"name":"The Kendal (hard)","hitpoints":150,"combatLevel":210,"attackSpeed":4,"attackLevel":195,"strengthLevel":195,"defenceLevel":60,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":20,"bonusAttack":5,"bonusStrength":10},"6323":{"name":"Giant Roc (hard)","hitpoints":255,"combatLevel":257,"attackSpeed":6,"attackLevel":260,"strengthLevel":260,"defenceLevel":100,"rangeLevel":130,"magicLevel":1,"magicDef":150},"6324":{"name":"Slagilith (hard)","hitpoints":150,"combatLevel":202,"attackSpeed":4,"attackLevel":150,"strengthLevel":300,"defenceLevel":75,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":5,"rangeDef":50,"magicDef":5,"bonusAttack":10},"6325":{"name":"Moss Guardian (hard)","hitpoints":240,"combatLevel":182,"attackSpeed":6,"attackLevel":165,"strengthLevel":165,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stab":1,"slash":1,"crush":1,"range":1,"magic":1,"bonusAttack":66,"bonusStrength":62},"6326":{"name":"Skeleton Hellhound (hard)","hitpoints":132,"combatLevel":198,"attackSpeed":4,"attackLevel":168,"strengthLevel":264,"defenceLevel":100,"rangeLevel":1,"magicLevel":1},"6327":{"name":"Agrith Naar (hard)","hitpoints":209,"combatLevel":196,"attackSpeed":4,"attackLevel":182,"strengthLevel":198,"defenceLevel":82,"rangeLevel":220,"magicLevel":220,"demon":true},"6328":{"name":"King Roald (hard)","hitpoints":150,"combatLevel":188,"attackSpeed":4,"attackLevel":140,"strengthLevel":120,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"6329":{"name":"Khazard warlord (hard)","hitpoints":255,"combatLevel":192,"attackSpeed":4,"attackLevel":165,"strengthLevel":170,"defenceLevel":80,"rangeLevel":1,"magicLevel":1},"6330":{"name":"Dad (hard)","hitpoints":240,"combatLevel":201,"attackSpeed":8,"attackLevel":132,"strengthLevel":264,"defenceLevel":50,"stabDef":25,"slashDef":25,"crushDef":40,"rangeDef":200,"magicDef":200,"bonusAttack":40,"bonusStrength":70},"6331":{"name":"Arrg (hard)","hitpoints":255,"combatLevel":210,"attackSpeed":4,"attackLevel":140,"strengthLevel":280,"defenceLevel":40,"rangeLevel":140,"stabDef":35,"slashDef":60,"crushDef":35,"rangeDef":200,"magicDef":200,"bonusAttack":60,"bonusStrength":100},"6332":{"name":"Count Draynor (hard)","hitpoints":210,"combatLevel":177,"attackSpeed":4,"attackLevel":198,"strengthLevel":165,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"stabDef":2,"slashDef":1,"crushDef":3},"6333":{"name":"Witch's experiment (hard)","hitpoints":63,"combatLevel":47,"attackSpeed":4,"attackLevel":54,"strengthLevel":30,"defenceLevel":19,"rangeLevel":1,"magicLevel":1},"6334":{"name":"Witch's experiment (second form) (hard)","hitpoints":93,"combatLevel":77,"attackSpeed":4,"attackLevel":84,"strengthLevel":60,"defenceLevel":29,"rangeLevel":1,"magicLevel":1},"6335":{"name":"Witch's experiment (third form) (hard)","hitpoints":103,"combatLevel":90,"attackSpeed":4,"attackLevel":95,"strengthLevel":75,"defenceLevel":39,"rangeLevel":1,"magicLevel":1},"6336":{"name":"Witch's experiment (fourth form) (hard)","hitpoints":113,"combatLevel":103,"attackSpeed":4,"attackLevel":105,"strengthLevel":88,"defenceLevel":49,"rangeLevel":1,"magicLevel":1},"6337":{"name":"Nazastarool (hard)","hitpoints":154,"combatLevel":176,"attackSpeed":4,"attackLevel":187,"strengthLevel":176,"defenceLevel":80},"6338":{"name":"Nazastarool (hard)","hitpoints":180,"combatLevel":153,"attackSpeed":4,"attackLevel":150,"strengthLevel":140,"defenceLevel":58,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"magicDef":5,"bonusAttack":15,"bonusStrength":15},"6339":{"name":"Nazastarool (hard)","hitpoints":176,"combatLevel":181,"attackSpeed":4,"attackLevel":187,"strengthLevel":176,"defenceLevel":80},"6340":{"name":"Cow (hard)","hitpoints":160,"combatLevel":170,"attackSpeed":4,"attackLevel":200,"strengthLevel":200,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"6342":{"name":"Barrelchest","hitpoints":134,"combatLevel":190,"attackSpeed":5,"attackLevel":170,"strengthLevel":145,"defenceLevel":140,"rangeLevel":1,"magicLevel":90,"bonusAttack":80,"bonusStrength":80},"6343":{"name":"Giant scarab","hitpoints":130,"combatLevel":191,"attackSpeed":4,"attackLevel":169,"strengthLevel":190,"defenceLevel":169,"rangeLevel":190,"magicLevel":1,"stabDef":70,"slashDef":99,"crushDef":99,"rangeDef":149,"magicDef":159},"6344":{"name":"Dessous","hitpoints":200,"combatLevel":139,"attackSpeed":3,"attackLevel":99,"strengthLevel":99,"defenceLevel":99,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":150,"crushDef":150,"bonusAttack":50,"bonusStrength":50},"6345":{"name":"Kamil","hitpoints":130,"combatLevel":154,"attackSpeed":4,"attackLevel":190,"strengthLevel":80,"defenceLevel":135,"rangeLevel":1,"magicLevel":1,"stabDef":35,"slashDef":60,"crushDef":35,"bonusAttack":60,"bonusStrength":100},"6346":{"name":"Damis","hitpoints":90,"combatLevel":103,"attackSpeed":4,"attackLevel":90,"strengthLevel":90,"defenceLevel":90,"rangeLevel":1,"magicLevel":1,"stabDef":60,"slashDef":60,"crushDef":60,"rangeDef":60,"magicDef":60,"bonusStrength":80},"6347":{"name":"Damis","hitpoints":200,"combatLevel":174,"attackSpeed":4,"attackLevel":160,"strengthLevel":100,"defenceLevel":160,"rangeLevel":1,"magicLevel":1,"stabDef":100,"slashDef":100,"crushDef":100,"rangeDef":120,"magicDef":80,"bonusStrength":100},"6348":{"name":"Fareed","hitpoints":130,"combatLevel":167,"attackSpeed":4,"attackLevel":190,"strengthLevel":120,"defenceLevel":135,"rangeLevel":1,"magicLevel":1,"stabDef":100,"slashDef":100,"crushDef":100,"bonusStrength":120},"6349":{"name":"Elvarg","hitpoints":80,"combatLevel":83,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":70,"stabDef":20,"slashDef":40,"crushDef":40,"rangeDef":20,"magicDef":30},"6350":{"name":"The Inadequacy","hitpoints":180,"combatLevel":343,"attackSpeed":4,"attackLevel":564,"strengthLevel":170,"defenceLevel":240,"rangeLevel":170,"magicLevel":1},"6351":{"name":"The Everlasting","hitpoints":230,"combatLevel":223,"attackSpeed":6,"attackLevel":187,"strengthLevel":231,"defenceLevel":120,"rangeLevel":1,"magicLevel":1},"6352":{"name":"The Untouchable","hitpoints":90,"combatLevel":274,"attackSpeed":6,"attackLevel":187,"strengthLevel":255,"defenceLevel":434,"rangeLevel":1,"magicLevel":1},"6353":{"name":"Tanglefoot","hitpoints":102,"combatLevel":111,"attackSpeed":4,"attackLevel":97,"strengthLevel":97,"defenceLevel":91,"rangeLevel":1,"magicLevel":1},"6354":{"name":"Chronozon","hitpoints":60,"combatLevel":170,"attackSpeed":4,"attackLevel":173,"strengthLevel":172,"defenceLevel":173,"rangeLevel":1,"magicLevel":1,"demon":true},"6355":{"name":"Bouncer","hitpoints":116,"combatLevel":137,"attackSpeed":4,"attackLevel":120,"strengthLevel":120,"defenceLevel":120,"rangeLevel":1,"magicLevel":1},"6356":{"name":"Ice Troll King","hitpoints":150,"combatLevel":122,"attackSpeed":4,"attackLevel":100,"strengthLevel":100,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"stabDef":45,"slashDef":45,"crushDef":45,"rangeDef":2000,"magicDef":2000,"bonusAttack":60,"bonusStrength":60},"6357":{"name":"Black demon","hitpoints":157,"combatLevel":172,"attackSpeed":4,"attackLevel":145,"strengthLevel":152,"defenceLevel":148,"rangeLevel":1,"magicLevel":1,"demon":true},"6358":{"name":"Glod","hitpoints":160,"combatLevel":138,"attackSpeed":4,"attackLevel":115,"strengthLevel":120,"defenceLevel":110,"rangeLevel":1,"magicLevel":1,"stabDef":105,"slashDef":110,"crushDef":130,"rangeDef":100,"magicDef":125},"6359":{"name":"Treus Dayth","hitpoints":100,"combatLevel":95,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5},"6360":{"name":"Black Knight Titan","hitpoints":142,"combatLevel":120,"attackSpeed":7,"attackLevel":91,"strengthLevel":100,"defenceLevel":91,"rangeLevel":1,"magicLevel":1,"stabDef":18,"slashDef":27,"crushDef":18,"rangeDef":1000,"magicDef":1000,"bonusAttack":27,"bonusStrength":22},"6361":{"name":"Dagannoth mother","hitpoints":120,"combatLevel":100,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6362":{"name":"Dagannoth mother","hitpoints":120,"combatLevel":100,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6363":{"name":"Dagannoth mother","hitpoints":120,"combatLevel":100,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6364":{"name":"Dagannoth mother","hitpoints":120,"combatLevel":100,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6365":{"name":"Dagannoth mother","hitpoints":120,"combatLevel":100,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6366":{"name":"Dagannoth mother","hitpoints":120,"combatLevel":100,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6367":{"name":"Evil Chicken","hitpoints":120,"combatLevel":159,"attackSpeed":4,"defenceLevel":126,"magicLevel":200},"6368":{"name":"Culinaromancer","hitpoints":150,"combatLevel":75,"attackSpeed":4,"attackLevel":10,"strengthLevel":100,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"6369":{"name":"Agrith-Na-Na","hitpoints":200,"combatLevel":146,"attackSpeed":4,"attackLevel":83,"strengthLevel":150,"defenceLevel":82,"rangeLevel":100,"magicLevel":100,"stabDef":100,"slashDef":100,"crushDef":100,"rangeDef":100,"magicDef":100,"bonusAttack":100},"6370":{"name":"Flambeed","hitpoints":210,"combatLevel":149,"attackSpeed":4,"attackLevel":120,"strengthLevel":120,"defenceLevel":75,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":5,"rangeDef":50,"magicDef":5,"bonusAttack":100},"6371":{"name":"Karamel","hitpoints":250,"combatLevel":136,"attackSpeed":3,"attackLevel":1,"strengthLevel":1,"defenceLevel":100,"rangeLevel":100,"magicLevel":1,"stab":50,"slash":50,"crush":50,"range":134,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":150,"magicDef":150,"bonusRangeStrength":55},"6372":{"name":"Dessourt","hitpoints":130,"combatLevel":121,"attackSpeed":3,"attackLevel":99,"strengthLevel":99,"defenceLevel":99,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":150,"crushDef":150,"bonusAttack":50,"bonusStrength":50},"6373":{"name":"Gelatinnoth Mother","hitpoints":240,"combatLevel":130,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6374":{"name":"Gelatinnoth Mother","hitpoints":240,"combatLevel":130,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6375":{"name":"Gelatinnoth Mother","hitpoints":240,"combatLevel":130,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6376":{"name":"Gelatinnoth Mother","hitpoints":240,"combatLevel":130,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6377":{"name":"Gelatinnoth Mother","hitpoints":240,"combatLevel":130,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6378":{"name":"Gelatinnoth Mother","hitpoints":240,"combatLevel":130,"attackSpeed":4,"attackLevel":78,"strengthLevel":78,"defenceLevel":81,"rangeLevel":50,"magicLevel":1,"stabDef":150,"slashDef":150,"crushDef":150,"rangeDef":50,"magicDef":50},"6379":{"name":"Nezikchened","hitpoints":150,"combatLevel":187,"attackSpeed":5,"attackLevel":165,"strengthLevel":168,"defenceLevel":167,"rangeLevel":160,"magicLevel":160,"demon":true},"6380":{"name":"Tree spirit","hitpoints":85,"combatLevel":101,"attackSpeed":4,"attackLevel":90,"strengthLevel":95,"defenceLevel":80,"rangeLevel":1,"magicLevel":1},"6381":{"name":"Me","hitpoints":45,"combatLevel":79,"attackSpeed":4,"attackLevel":75,"strengthLevel":78,"defenceLevel":74,"rangeLevel":1,"magicLevel":1},"6382":{"name":"Jungle Demon","hitpoints":170,"combatLevel":195,"attackSpeed":6,"attackLevel":170,"strengthLevel":170,"defenceLevel":170,"rangeLevel":1,"magicLevel":170,"slashDef":50,"magicDef":50,"bonusAttack":50,"bonusStrength":50,"demon":true},"6383":{"name":"The Kendal","hitpoints":50,"combatLevel":70,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":60,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":20,"bonusAttack":5,"bonusStrength":10},"6384":{"name":"Giant Roc","hitpoints":250,"combatLevel":172,"attackSpeed":6,"attackLevel":130,"strengthLevel":130,"defenceLevel":100,"rangeLevel":130,"magicLevel":1,"magicDef":150},"6385":{"name":"Slagilith","hitpoints":60,"combatLevel":92,"attackSpeed":4,"attackLevel":60,"strengthLevel":120,"defenceLevel":75,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":5,"rangeDef":50,"magicDef":5,"bonusAttack":10},"6386":{"name":"Moss Guardian","hitpoints":120,"combatLevel":84,"attackSpeed":6,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stab":1,"slash":1,"crush":1,"range":1,"magic":1,"bonusAttack":66,"bonusStrength":62},"6387":{"name":"Skeleton Hellhound","hitpoints":55,"combatLevel":97,"attackSpeed":4,"attackLevel":70,"strengthLevel":110,"defenceLevel":100,"rangeLevel":1,"magicLevel":1},"6388":{"name":"Agrith Naar","hitpoints":100,"combatLevel":100,"attackSpeed":4,"attackLevel":83,"strengthLevel":90,"defenceLevel":82,"rangeLevel":100,"magicLevel":100,"demon":true},"6389":{"name":"King Roald","hitpoints":75,"combatLevel":47,"attackSpeed":4,"attackLevel":35,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"6390":{"name":"Khazard warlord","hitpoints":170,"combatLevel":112,"attackSpeed":4,"attackLevel":75,"strengthLevel":78,"defenceLevel":80,"rangeLevel":1,"magicLevel":1},"6391":{"name":"Dad","hitpoints":120,"combatLevel":101,"attackSpeed":8,"attackLevel":60,"strengthLevel":120,"defenceLevel":50,"stabDef":25,"slashDef":25,"crushDef":40,"rangeDef":200,"magicDef":200,"bonusAttack":40,"bonusStrength":70},"6392":{"name":"Arrg","hitpoints":140,"combatLevel":113,"attackSpeed":4,"attackLevel":70,"strengthLevel":140,"defenceLevel":40,"rangeLevel":70,"stabDef":35,"slashDef":60,"crushDef":35,"rangeDef":200,"magicDef":200,"bonusAttack":60,"bonusStrength":100},"6393":{"name":"Count Draynor","hitpoints":35,"combatLevel":34,"attackSpeed":4,"attackLevel":30,"strengthLevel":25,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"stabDef":2,"slashDef":1,"crushDef":3},"6394":{"name":"Witch's experiment","hitpoints":21,"combatLevel":19,"attackSpeed":4,"attackLevel":18,"strengthLevel":10,"defenceLevel":19,"rangeLevel":1,"magicLevel":1},"6395":{"name":"Witch's experiment (second form)","hitpoints":31,"combatLevel":30,"attackSpeed":4,"attackLevel":28,"strengthLevel":20,"defenceLevel":29,"rangeLevel":1,"magicLevel":1},"6396":{"name":"Witch's experiment (third form)","hitpoints":41,"combatLevel":42,"attackSpeed":4,"attackLevel":38,"strengthLevel":30,"defenceLevel":39,"rangeLevel":1,"magicLevel":1},"6397":{"name":"Witch's experiment (fourth form)","hitpoints":51,"combatLevel":53,"attackSpeed":4,"attackLevel":48,"strengthLevel":40,"defenceLevel":49,"rangeLevel":1,"magicLevel":1},"6398":{"name":"Nazastarool","hitpoints":70,"combatLevel":91,"attackSpeed":4,"attackLevel":85,"strengthLevel":80,"defenceLevel":80},"6399":{"name":"Nazastarool","hitpoints":70,"combatLevel":68,"attackSpeed":4,"attackLevel":58,"strengthLevel":54,"defenceLevel":58,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"magicDef":5,"bonusAttack":15,"bonusStrength":15},"6400":{"name":"Nazastarool","hitpoints":80,"combatLevel":93,"attackSpeed":4,"attackLevel":85,"strengthLevel":80,"defenceLevel":80},"6401":{"name":"Cow","hitpoints":8,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1,"poisonImmune":true,"venomImmune":true},"6402":{"name":"Mosquito swarm","hitpoints":15,"combatLevel":20,"attackSpeed":3,"attackLevel":15,"strengthLevel":1,"defenceLevel":45,"rangeLevel":1,"magicLevel":1,"stabDef":2,"slashDef":2,"crushDef":5,"magicDef":2},"6406":{"name":"Tribesman","hitpoints":39,"combatLevel":32,"attackSpeed":4,"attackLevel":23,"strengthLevel":27,"defenceLevel":26,"rangeLevel":1,"magicLevel":1,"stabDef":4,"slashDef":6,"crushDef":6,"bonusAttack":8,"bonusStrength":5},"6407":{"name":"Tribesman","hitpoints":39,"combatLevel":32,"attackSpeed":4,"attackLevel":23,"strengthLevel":27,"defenceLevel":26,"rangeLevel":1,"magicLevel":1,"stabDef":4,"slashDef":6,"crushDef":6,"bonusAttack":8,"bonusStrength":5},"6408":{"name":"Broodoo victim","hitpoints":100,"combatLevel":60,"attackSpeed":6,"defenceLevel":26,"rangeLevel":1,"magicLevel":60,"magic":25,"stabDef":20,"slashDef":20,"crushDef":20},"6409":{"name":"Broodoo victim","hitpoints":100,"combatLevel":60,"attackSpeed":6,"defenceLevel":26,"rangeLevel":1,"magicLevel":60,"magic":25,"stabDef":20,"slashDef":20,"crushDef":20},"6410":{"name":"Broodoo victim","hitpoints":100,"combatLevel":60,"attackSpeed":6,"defenceLevel":26,"rangeLevel":1,"magicLevel":60,"magic":25,"stabDef":20,"slashDef":20,"crushDef":20},"6411":{"name":"Broodoo victim","hitpoints":100,"combatLevel":60,"attackSpeed":6,"defenceLevel":26,"rangeLevel":1,"magicLevel":60,"magic":25,"stabDef":20,"slashDef":20,"crushDef":20},"6412":{"name":"Broodoo victim","hitpoints":100,"combatLevel":60,"attackSpeed":6,"defenceLevel":26,"rangeLevel":1,"magicLevel":60,"magic":25,"stabDef":20,"slashDef":20,"crushDef":20},"6413":{"name":"Broodoo victim","hitpoints":100,"combatLevel":60,"attackSpeed":6,"defenceLevel":26,"rangeLevel":1,"magicLevel":60,"magic":25,"stabDef":20,"slashDef":20,"crushDef":20},"6434":{"name":"Cave goblin","hitpoints":10,"combatLevel":3,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"6435":{"name":"Cave goblin","hitpoints":10,"combatLevel":3,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"6436":{"name":"Cave goblin","hitpoints":10,"combatLevel":3,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"6437":{"name":"Cave goblin","hitpoints":10,"combatLevel":3,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"6438":{"name":"Animated steel armour","hitpoints":50,"combatLevel":53,"attackSpeed":4,"attackLevel":50,"strengthLevel":50,"defenceLevel":2,"rangeLevel":2,"magicLevel":2,"stabDef":50,"slashDef":25,"crushDef":25,"rangeDef":400,"magicDef":400,"bonusAttack":4,"bonusStrength":5,"poisonImmune":true,"venomImmune":true},"6440":{"name":"Giant skeleton","hitpoints":70,"combatLevel":80,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"undead":true},"6441":{"name":"Skeleton","hitpoints":85,"combatLevel":94,"attackSpeed":6,"attackLevel":70,"strengthLevel":80,"defenceLevel":60,"rangeLevel":1,"magicLevel":110,"stabDef":50,"slashDef":40,"rangeDef":40,"bonusStrength":5,"undead":true},"6442":{"name":"Skeleton","hitpoints":80,"combatLevel":77,"attackLevel":72,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":40,"rangeDef":40,"bonusStrength":5,"undead":true},"6443":{"name":"Skeleton","hitpoints":71,"combatLevel":81,"attackLevel":72,"strengthLevel":64,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"rangeDef":40,"undead":true},"6444":{"name":"Skeleton","hitpoints":40,"combatLevel":42,"attackLevel":40,"strengthLevel":30,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":40,"rangeDef":40,"undead":true},"6445":{"name":"Skeleton","hitpoints":53,"combatLevel":59,"attackLevel":50,"strengthLevel":46,"defenceLevel":62,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":40,"rangeDef":40,"undead":true},"6446":{"name":"Skeleton","hitpoints":42,"combatLevel":42,"attackLevel":36,"strengthLevel":38,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":40,"rangeDef":40,"undead":true},"6447":{"name":"Skeleton","hitpoints":58,"combatLevel":63,"attackLevel":56,"strengthLevel":61,"defenceLevel":45,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":40,"rangeDef":40,"undead":true},"6448":{"name":"Skeleton","hitpoints":26,"combatLevel":40,"attackSpeed":4,"attackLevel":33,"strengthLevel":31,"defenceLevel":52,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":40,"rangeDef":40,"undead":true},"6449":{"name":"Zombie","hitpoints":38,"combatLevel":40,"attackSpeed":4,"attackLevel":36,"strengthLevel":35,"defenceLevel":33,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"6450":{"name":"Zombie","hitpoints":40,"combatLevel":42,"attackSpeed":4,"attackLevel":39,"strengthLevel":35,"defenceLevel":35,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"6451":{"name":"Zombie","hitpoints":42,"combatLevel":47,"attackSpeed":4,"attackLevel":42,"strengthLevel":39,"defenceLevel":42,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"6452":{"name":"Zombie","hitpoints":48,"combatLevel":50,"attackSpeed":4,"attackLevel":44,"strengthLevel":42,"defenceLevel":44,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"6453":{"name":"Zombie","hitpoints":50,"combatLevel":56,"attackSpeed":4,"attackLevel":50,"strengthLevel":50,"defenceLevel":47,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"6454":{"name":"Zombie","hitpoints":57,"combatLevel":61,"attackSpeed":4,"attackLevel":53,"strengthLevel":55,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"6455":{"name":"Zombie","hitpoints":63,"combatLevel":67,"attackSpeed":4,"attackLevel":56,"strengthLevel":58,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"6456":{"name":"Zombie","hitpoints":65,"combatLevel":70,"attackSpeed":4,"attackLevel":61,"strengthLevel":60,"defenceLevel":61,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"6457":{"name":"Zombie","hitpoints":68,"combatLevel":72,"attackSpeed":4,"attackLevel":61,"strengthLevel":63,"defenceLevel":62,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"6458":{"name":"Zombie","hitpoints":71,"combatLevel":76,"attackSpeed":4,"attackLevel":69,"strengthLevel":65,"defenceLevel":62,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"6459":{"name":"Zombie","hitpoints":73,"combatLevel":80,"attackSpeed":4,"attackLevel":72,"strengthLevel":73,"defenceLevel":62,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"6460":{"name":"Zombie","hitpoints":75,"combatLevel":85,"attackSpeed":4,"attackLevel":71,"strengthLevel":81,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"6461":{"name":"Zombie","hitpoints":76,"combatLevel":86,"attackSpeed":4,"attackLevel":74,"strengthLevel":80,"defenceLevel":71,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"6462":{"name":"Zombie","hitpoints":81,"combatLevel":90,"attackSpeed":4,"attackLevel":82,"strengthLevel":80,"defenceLevel":72,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"6463":{"name":"Zombie","hitpoints":92,"combatLevel":95,"attackSpeed":4,"attackLevel":85,"strengthLevel":80,"defenceLevel":75,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"6464":{"name":"Zombie","hitpoints":96,"combatLevel":98,"attackSpeed":4,"attackLevel":85,"strengthLevel":83,"defenceLevel":81,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"6465":{"name":"Zombie","hitpoints":102,"combatLevel":100,"attackSpeed":4,"attackLevel":86,"strengthLevel":83,"defenceLevel":81,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"6466":{"name":"Zombie","hitpoints":76,"combatLevel":81,"attackSpeed":4,"attackLevel":69,"strengthLevel":70,"defenceLevel":71,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"6467":{"name":"Skeleton","hitpoints":69,"combatLevel":72,"attackLevel":75,"strengthLevel":61,"defenceLevel":45,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":40,"rangeDef":40,"bonusStrength":15,"undead":true},"6468":{"name":"Skeleton","hitpoints":92,"combatLevel":87,"attackLevel":75,"strengthLevel":80,"defenceLevel":55,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":40,"rangeDef":40,"bonusStrength":15,"undead":true},"6469":{"name":"Possessed pickaxe","hitpoints":40,"combatLevel":50,"attackSpeed":4,"attackLevel":40,"strengthLevel":55,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":15,"slashDef":10,"crushDef":5,"rangeDef":10,"magicDef":5},"6470":{"name":"Animated spade","hitpoints":40,"combatLevel":50,"attackSpeed":4,"attackLevel":40,"strengthLevel":55,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":15,"slashDef":10,"crushDef":5,"rangeDef":10,"magicDef":5},"6473":{"name":"Terror dog","hitpoints":87,"combatLevel":110,"slayerLevel":40,"attackSpeed":4,"attackLevel":110,"strengthLevel":104,"defenceLevel":78,"rangeLevel":1,"magicLevel":1,"bonusStrength":20},"6474":{"name":"Terror dog","hitpoints":82,"combatLevel":100,"slayerLevel":40,"attackSpeed":4,"attackLevel":100,"strengthLevel":90,"defenceLevel":74,"rangeLevel":1,"magicLevel":1,"bonusStrength":10},"6476":{"name":"Tarn","hitpoints":80,"combatLevel":69,"slayerLevel":40,"attackSpeed":4,"attackLevel":40,"strengthLevel":80,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":50,"rangeDef":50,"magicDef":50},"6477":{"name":"Mutant tarn","hitpoints":80,"combatLevel":69,"slayerLevel":40,"attackSpeed":4,"attackLevel":40,"strengthLevel":80,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":50,"rangeDef":50,"magicDef":50},"6492":{"name":"Kree'arra","hitpoints":255,"combatLevel":580,"attackSpeed":3,"attackLevel":300,"strengthLevel":200,"defenceLevel":260,"rangeLevel":380,"magicLevel":200,"range":120,"stabDef":180,"slashDef":180,"crushDef":180,"rangeDef":200,"magicDef":200,"bonusAttack":136,"bonusStrength":12,"bonusRangeStrength":50},"6493":{"name":"Commander Zilyana","hitpoints":255,"combatLevel":596,"attackSpeed":2,"attackLevel":280,"strengthLevel":196,"defenceLevel":300,"rangeLevel":250,"magicLevel":300,"magic":200,"stabDef":100,"slashDef":100,"crushDef":100,"rangeDef":100,"magicDef":100,"bonusAttack":195,"bonusStrength":20,"poisonImmune":true,"venomImmune":true},"6494":{"name":"General Graardor","hitpoints":255,"combatLevel":624,"attackSpeed":6,"attackLevel":280,"strengthLevel":350,"defenceLevel":250,"rangeLevel":350,"magicLevel":80,"range":100,"stabDef":90,"slashDef":90,"crushDef":90,"rangeDef":90,"magicDef":298,"bonusAttack":120,"bonusStrength":43,"bonusRangeStrength":40,"poisonImmune":true,"venomImmune":true},"6495":{"name":"K'ril Tsutsaroth","hitpoints":255,"combatLevel":650,"attackSpeed":6,"attackLevel":340,"strengthLevel":300,"defenceLevel":270,"rangeLevel":1,"magicLevel":200,"stabDef":80,"slashDef":80,"crushDef":80,"rangeDef":80,"magicDef":130,"bonusAttack":160,"bonusStrength":31,"demon":true},"6496":{"name":"Dagannoth Supreme","hitpoints":255,"combatLevel":303,"attackSpeed":4,"attackLevel":255,"strengthLevel":255,"defenceLevel":128,"rangeLevel":255,"magicLevel":255,"stabDef":10,"slashDef":10,"crushDef":10,"rangeDef":550,"magicDef":255},"6497":{"name":"Dagannoth Prime","hitpoints":255,"combatLevel":303,"attackSpeed":4,"attackLevel":255,"strengthLevel":255,"defenceLevel":255,"magicLevel":255,"stabDef":255,"slashDef":255,"crushDef":255,"rangeDef":10,"magicDef":255},"6498":{"name":"Dagannoth Rex","hitpoints":255,"combatLevel":303,"attackSpeed":4,"attackLevel":255,"strengthLevel":255,"defenceLevel":255,"rangeLevel":255,"stabDef":255,"slashDef":255,"crushDef":255,"rangeDef":255,"magicDef":10},"6499":{"name":"Giant Mole","hitpoints":200,"combatLevel":230,"attackSpeed":4,"attackLevel":200,"strengthLevel":200,"defenceLevel":200,"rangeLevel":1,"magicLevel":200,"stabDef":60,"slashDef":80,"crushDef":100,"rangeDef":60,"magicDef":80},"6500":{"name":"Kalphite Queen","hitpoints":255,"combatLevel":333,"attackSpeed":4,"attackLevel":300,"strengthLevel":300,"defenceLevel":300,"rangeLevel":1,"magicLevel":150,"stabDef":50,"slashDef":50,"crushDef":10,"rangeDef":100,"magicDef":100},"6501":{"name":"Kalphite Queen","hitpoints":255,"combatLevel":333,"attackSpeed":4,"attackLevel":300,"strengthLevel":300,"defenceLevel":300,"rangeLevel":1,"magicLevel":150,"stabDef":100,"slashDef":100,"crushDef":100,"rangeDef":10,"magicDef":10},"6503":{"name":"Callisto","hitpoints":255,"combatLevel":470,"attackSpeed":4,"attackLevel":350,"strengthLevel":370,"defenceLevel":440,"rangeLevel":1,"magicLevel":1,"stabDef":135,"slashDef":104,"crushDef":175,"rangeDef":230,"magicDef":900,"poisonImmune":true,"venomImmune":true},"6504":{"name":"Venenatis","hitpoints":255,"combatLevel":464,"attackLevel":470,"strengthLevel":490,"defenceLevel":490,"rangeLevel":1,"magicLevel":150,"stabDef":260,"slashDef":260,"crushDef":260,"rangeDef":100,"magicDef":850,"poisonImmune":true,"venomImmune":true},"6505":{"name":"Chaos Elemental","hitpoints":250,"combatLevel":305,"attackSpeed":5,"attackLevel":270,"strengthLevel":270,"defenceLevel":270,"rangeLevel":270,"magicLevel":270,"stabDef":70,"slashDef":70,"crushDef":70,"rangeDef":70,"magicDef":70},"6506":{"name":"TzTok-Jad","hitpoints":250,"combatLevel":702,"attackSpeed":8,"attackLevel":640,"strengthLevel":960,"defenceLevel":480,"rangeLevel":960,"magicLevel":480,"magic":60},"6574":{"name":"Gnome guard","hitpoints":800,"combatLevel":1337,"attackSpeed":4,"attackLevel":800,"strengthLevel":400,"defenceLevel":300,"rangeLevel":1,"magicLevel":1,"stabDef":8,"slashDef":9,"crushDef":7,"rangeDef":8,"bonusAttack":60,"bonusStrength":7},"6575":{"name":"Guard","hitpoints":800,"combatLevel":1337,"attackSpeed":4,"attackLevel":800,"strengthLevel":400,"defenceLevel":300,"rangeLevel":1,"magicLevel":1,"stabDef":8,"slashDef":9,"crushDef":7,"rangeDef":8,"bonusAttack":60,"bonusStrength":7},"6576":{"name":"Guard","hitpoints":800,"combatLevel":1337,"attackSpeed":4,"attackLevel":800,"strengthLevel":400,"defenceLevel":300,"rangeLevel":1,"magicLevel":1,"stabDef":8,"slashDef":9,"crushDef":7,"rangeDef":8,"bonusAttack":60,"bonusStrength":7},"6579":{"name":"Guard","hitpoints":800,"combatLevel":1337,"attackSpeed":4,"attackLevel":800,"strengthLevel":400,"defenceLevel":300,"rangeLevel":1,"magicLevel":1,"stabDef":8,"slashDef":9,"crushDef":7,"rangeDef":8,"bonusAttack":60,"bonusStrength":7},"6580":{"name":"Guard","hitpoints":800,"combatLevel":1337,"attackSpeed":4,"attackLevel":800,"strengthLevel":400,"defenceLevel":300,"rangeLevel":1,"magicLevel":1,"stabDef":8,"slashDef":9,"crushDef":7,"rangeDef":8,"bonusAttack":60,"bonusStrength":7},"6581":{"name":"Guard","hitpoints":800,"combatLevel":1337,"attackSpeed":4,"attackLevel":800,"strengthLevel":400,"defenceLevel":300,"rangeLevel":1,"magicLevel":1,"stabDef":8,"slashDef":9,"crushDef":7,"rangeDef":8,"bonusAttack":60,"bonusStrength":7},"6582":{"name":"Guard","hitpoints":800,"combatLevel":1337,"attackSpeed":4,"attackLevel":800,"strengthLevel":400,"defenceLevel":300,"rangeLevel":1,"magicLevel":1,"stabDef":8,"slashDef":9,"crushDef":7,"rangeDef":8,"bonusAttack":60,"bonusStrength":7},"6583":{"name":"Guard","hitpoints":800,"combatLevel":1337,"attackSpeed":4,"attackLevel":800,"strengthLevel":400,"defenceLevel":300,"rangeLevel":1,"magicLevel":1,"stabDef":8,"slashDef":9,"crushDef":7,"rangeDef":8,"bonusAttack":60,"bonusStrength":7},"6587":{"name":"Armadylian guard","hitpoints":132,"combatLevel":97,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":82,"rangeLevel":90,"magicLevel":80,"magicDef":3},"6588":{"name":"Bandosian guard","hitpoints":130,"combatLevel":125,"attackSpeed":5,"attackLevel":110,"strengthLevel":115,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"stabDef":12,"slashDef":14,"crushDef":13,"rangeDef":13,"magicDef":5,"bonusAttack":19,"bonusStrength":4},"6593":{"name":"Lava dragon","hitpoints":230,"combatLevel":252,"attackSpeed":4,"attackLevel":240,"strengthLevel":220,"defenceLevel":220,"rangeLevel":1,"magicLevel":1,"stabDef":70,"slashDef":90,"crushDef":90,"rangeDef":70,"magicDef":80,"dragon":true},"6594":{"name":"Ent","hitpoints":105,"combatLevel":101,"attackSpeed":4,"attackLevel":80,"strengthLevel":95,"defenceLevel":75,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":30,"magicDef":40},"6596":{"name":"Zombie","hitpoints":24,"combatLevel":18,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"undead":true},"6597":{"name":"Zombie","hitpoints":24,"combatLevel":18,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"undead":true},"6598":{"name":"Zombie","hitpoints":24,"combatLevel":18,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"undead":true},"6600":{"name":"Runite Golem","hitpoints":170,"combatLevel":178,"attackSpeed":4,"attackLevel":140,"strengthLevel":150,"defenceLevel":165,"rangeLevel":1,"magicLevel":1},"6603":{"name":"Rogue","hitpoints":125,"combatLevel":135,"attackSpeed":4,"attackLevel":140,"strengthLevel":140,"defenceLevel":150,"rangeLevel":1,"magicLevel":1},"6604":{"name":"Mammoth","hitpoints":130,"combatLevel":80,"attackSpeed":4,"attackLevel":55,"strengthLevel":60,"defenceLevel":50,"rangeLevel":1,"magicLevel":1},"6605":{"name":"Bandit","hitpoints":155,"combatLevel":130,"attackSpeed":4,"attackLevel":57,"strengthLevel":57,"defenceLevel":57,"rangeLevel":1,"magicLevel":1,"stab":57,"slashDef":23,"crushDef":22,"bonusStrength":52},"6606":{"name":"Dark warrior","hitpoints":165,"combatLevel":145,"attackSpeed":4,"attackLevel":75,"strengthLevel":75,"defenceLevel":55,"rangeLevel":1,"magicLevel":1,"stabDef":106,"slashDef":109,"crushDef":139,"bonusAttack":80,"bonusStrength":76},"6607":{"name":"Elder Chaos druid","hitpoints":150,"combatLevel":129,"attackSpeed":4,"attackLevel":98,"strengthLevel":65,"defenceLevel":98,"rangeLevel":1,"magicLevel":110},"6608":{"name":"Ankou","hitpoints":70,"combatLevel":86,"attackSpeed":4,"attackLevel":75,"strengthLevel":75,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"undead":true},"6609":{"name":"Callisto","hitpoints":255,"combatLevel":470,"attackSpeed":4,"attackLevel":350,"strengthLevel":370,"defenceLevel":440,"rangeLevel":1,"magicLevel":1,"stabDef":135,"slashDef":104,"crushDef":175,"rangeDef":230,"magicDef":900,"poisonImmune":true,"venomImmune":true},"6610":{"name":"Venenatis","hitpoints":255,"combatLevel":464,"attackLevel":470,"strengthLevel":490,"defenceLevel":490,"rangeLevel":1,"magicLevel":150,"stabDef":260,"slashDef":260,"crushDef":260,"rangeDef":100,"magicDef":850,"poisonImmune":true,"venomImmune":true},"6611":{"name":"Vet'ion","hitpoints":255,"combatLevel":454,"attackSpeed":4,"attackLevel":430,"strengthLevel":430,"defenceLevel":395,"rangeLevel":1,"magicLevel":300,"stabDef":201,"slashDef":200,"rangeDef":270,"magicDef":250,"undead":true},"6612":{"name":"Vet'ion Reborn","hitpoints":255,"combatLevel":454,"attackSpeed":4,"attackLevel":430,"strengthLevel":430,"defenceLevel":395,"rangeLevel":1,"magicLevel":300,"stabDef":201,"slashDef":200,"rangeDef":270,"magicDef":250,"undead":true},"6613":{"name":"Skeleton Hellhound","hitpoints":110,"combatLevel":214,"attackSpeed":4,"attackLevel":210,"strengthLevel":250,"defenceLevel":150,"rangeLevel":1,"magicLevel":1,"stabDef":101,"slashDef":103,"crushDef":10,"rangeDef":266,"magicDef":180,"undead":true},"6614":{"name":"Greater Skeleton Hellhound","hitpoints":190,"combatLevel":281,"attackSpeed":4,"attackLevel":240,"strengthLevel":310,"defenceLevel":220,"rangeLevel":1,"magicLevel":1,"stabDef":150,"slashDef":163,"crushDef":20,"rangeDef":275,"magicDef":210,"undead":true},"6615":{"name":"Scorpia","hitpoints":200,"combatLevel":225,"attackSpeed":4,"attackLevel":250,"strengthLevel":150,"defenceLevel":180,"rangeLevel":1,"magicLevel":1,"stabDef":246,"slashDef":284,"crushDef":284,"rangeDef":284,"magicDef":44,"bonusAttack":60},"6616":{"name":"Scorpia's offspring","hitpoints":2,"combatLevel":15,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":30,"magicLevel":1,"range":900},"6617":{"name":"Scorpia's guardian","hitpoints":70,"combatLevel":47,"attackLevel":1,"strengthLevel":1,"defenceLevel":60,"rangeLevel":30,"magicLevel":30},"6618":{"name":"Crazy archaeologist","hitpoints":225,"combatLevel":204,"attackSpeed":3,"attackLevel":160,"strengthLevel":90,"defenceLevel":240,"rangeLevel":180,"magicLevel":1,"range":75,"stabDef":5,"slashDef":5,"crushDef":30,"rangeDef":250,"magicDef":250,"bonusAttack":250,"bonusStrength":25},"6619":{"name":"Chaos Fanatic","hitpoints":225,"combatLevel":202,"attackSpeed":2,"attackLevel":1,"strengthLevel":1,"defenceLevel":220,"rangeLevel":1,"magicLevel":200,"range":75,"stabDef":260,"slashDef":260,"crushDef":250,"rangeDef":80,"magicDef":280},"6624":{"name":"Energy sprite","hitpoints":62},"6698":{"name":"Ghost guard","hitpoints":800,"combatLevel":1337,"attackSpeed":4,"attackLevel":800,"strengthLevel":400,"defenceLevel":300,"rangeLevel":1,"magicLevel":1,"stabDef":8,"slashDef":9,"crushDef":7,"rangeDef":8,"bonusAttack":60,"bonusStrength":7},"6699":{"name":"Guard","hitpoints":800,"combatLevel":1337,"attackSpeed":4,"attackLevel":800,"strengthLevel":400,"defenceLevel":300,"rangeLevel":1,"magicLevel":1,"stabDef":8,"slashDef":9,"crushDef":7,"rangeDef":8,"bonusAttack":60,"bonusStrength":7},"6700":{"name":"Guard","hitpoints":800,"combatLevel":1337,"attackSpeed":4,"attackLevel":800,"strengthLevel":400,"defenceLevel":300,"rangeLevel":1,"magicLevel":1,"stabDef":8,"slashDef":9,"crushDef":7,"rangeDef":8,"bonusAttack":60,"bonusStrength":7},"6701":{"name":"Guard","hitpoints":800,"combatLevel":1337,"attackSpeed":4,"attackLevel":800,"strengthLevel":400,"defenceLevel":300,"rangeLevel":1,"magicLevel":1,"stabDef":8,"slashDef":9,"crushDef":7,"rangeDef":8,"bonusAttack":60,"bonusStrength":7},"6702":{"name":"Guard","hitpoints":800,"combatLevel":1337,"attackSpeed":4,"attackLevel":800,"strengthLevel":400,"defenceLevel":300,"rangeLevel":1,"magicLevel":1,"stabDef":8,"slashDef":9,"crushDef":7,"rangeDef":8,"bonusAttack":60,"bonusStrength":7},"6716":{"name":"Chaotic death spawn","hitpoints":50,"combatLevel":215,"attackSpeed":3,"attackLevel":380,"strengthLevel":1,"defenceLevel":70,"rangeLevel":380,"magicLevel":380,"demon":true},"6723":{"name":"Chaotic death spawn","hitpoints":50,"combatLevel":215,"attackSpeed":3,"attackLevel":380,"strengthLevel":1,"defenceLevel":70,"rangeLevel":380,"magicLevel":380,"demon":true},"6725":{"name":"Rock Golem","combatLevel":14,"attackSpeed":4},"6726":{"name":"Rock Golem","combatLevel":29,"attackSpeed":4},"6727":{"name":"Rock Golem","combatLevel":49,"attackSpeed":4},"6728":{"name":"Rock Golem","hitpoints":86,"combatLevel":79,"attackSpeed":4},"6729":{"name":"Rock Golem","hitpoints":120,"combatLevel":120,"attackSpeed":4,"attackLevel":100,"strengthLevel":100,"defenceLevel":100,"rangeLevel":75,"magicLevel":1},"6730":{"name":"Rock Golem","hitpoints":170,"combatLevel":159,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":130,"rangeLevel":80,"magicLevel":1},"6732":{"name":"River troll","combatLevel":14,"attackSpeed":4,"attackLevel":17,"strengthLevel":17,"defenceLevel":17,"rangeLevel":1,"magicLevel":1},"6733":{"name":"River troll","combatLevel":29,"attackSpeed":4,"attackLevel":32,"strengthLevel":32,"defenceLevel":32,"rangeLevel":1,"magicLevel":1},"6734":{"name":"River troll","combatLevel":49,"attackSpeed":4,"attackLevel":48,"strengthLevel":48,"defenceLevel":48,"rangeLevel":1,"magicLevel":1},"6735":{"name":"River troll","hitpoints":85,"combatLevel":79,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"rangeLevel":1,"magicLevel":1},"6736":{"name":"River troll","hitpoints":120,"combatLevel":120,"attackSpeed":4,"attackLevel":100,"strengthLevel":100,"defenceLevel":100,"rangeLevel":1,"magicLevel":1},"6737":{"name":"River troll","hitpoints":170,"combatLevel":159,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":130,"rangeLevel":1,"magicLevel":1},"6739":{"name":"Evil Chicken","hitpoints":120,"combatLevel":159,"attackSpeed":4,"defenceLevel":126,"magicLevel":200},"6740":{"name":"Shade","hitpoints":170,"combatLevel":159,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":130,"rangeLevel":1,"magicLevel":1,"undead":true},"6741":{"name":"Zombie","hitpoints":170,"combatLevel":159,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":130,"rangeLevel":1,"magicLevel":1,"undead":true},"6766":{"name":"Lizardman shaman","hitpoints":150,"combatLevel":150,"attackSpeed":4,"attackLevel":120,"strengthLevel":120,"defenceLevel":140,"rangeLevel":120,"magicLevel":130,"range":45,"slashDef":40,"crushDef":30,"magicDef":50,"bonusAttack":45,"bonusStrength":38,"bonusRangeStrength":38},"6767":{"name":"Lizardman shaman","hitpoints":150,"combatLevel":150,"attackSpeed":4,"attackLevel":120,"strengthLevel":120,"defenceLevel":140,"rangeLevel":120,"magicLevel":130,"range":45,"slashDef":40,"crushDef":30,"magicDef":50,"bonusAttack":45,"bonusStrength":38,"bonusRangeStrength":38},"6794":{"name":"Monkey Archer","hitpoints":50,"combatLevel":86,"attackSpeed":4,"attackLevel":80,"strengthLevel":80,"defenceLevel":80,"rangeLevel":110,"magicLevel":1},"6805":{"name":"Kruk","hitpoints":210,"combatLevel":149,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":150,"rangeLevel":170,"magicLevel":130,"range":150,"stabDef":100,"slashDef":100,"crushDef":100,"rangeDef":100,"magicDef":250,"bonusAttack":160,"bonusStrength":90,"bonusRangeStrength":70},"6813":{"name":"Monkey Archer","hitpoints":50,"combatLevel":86,"attackSpeed":4,"attackLevel":80,"strengthLevel":80,"defenceLevel":80,"rangeLevel":110,"magicLevel":1},"6815":{"name":"Ghost","hitpoints":25,"combatLevel":19,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"6816":{"name":"Ghost","hitpoints":25,"combatLevel":19,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"6817":{"name":"Ghost","hitpoints":25,"combatLevel":19,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"6818":{"name":"Ghost","hitpoints":25,"combatLevel":19,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"6819":{"name":"Ghost","hitpoints":25,"combatLevel":19,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"6820":{"name":"Ghost","hitpoints":25,"combatLevel":19,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"6821":{"name":"Ghost","hitpoints":25,"combatLevel":19,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"6822":{"name":"Ghost","hitpoints":25,"combatLevel":19,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"6824":{"name":"Giant bat","hitpoints":32,"combatLevel":27,"attackSpeed":4,"attackLevel":22,"strengthLevel":22,"defenceLevel":22,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"crushDef":12,"rangeDef":8,"magicDef":10},"6896":{"name":"Gangster","hitpoints":40,"combatLevel":45,"attackSpeed":4,"attackLevel":40,"strengthLevel":30,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"crushDef":10,"bonusAttack":20,"bonusStrength":30},"6897":{"name":"Gangster","hitpoints":40,"combatLevel":45,"attackSpeed":4,"attackLevel":40,"strengthLevel":30,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"crushDef":10,"bonusAttack":20,"bonusStrength":30},"6898":{"name":"Gangster","hitpoints":50,"combatLevel":50,"attackSpeed":5,"attackLevel":50,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"crushDef":10,"bonusAttack":35,"bonusStrength":15},"6899":{"name":"Gangster","hitpoints":50,"combatLevel":50,"attackSpeed":5,"attackLevel":50,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"crushDef":10,"bonusAttack":35,"bonusStrength":15},"6900":{"name":"Gang boss","hitpoints":80,"combatLevel":83,"attackSpeed":3,"attackLevel":1,"strengthLevel":1,"defenceLevel":70,"rangeLevel":80,"magicLevel":1,"range":50,"crushDef":10},"6901":{"name":"Gang boss","hitpoints":80,"combatLevel":83,"attackSpeed":3,"attackLevel":1,"strengthLevel":1,"defenceLevel":70,"rangeLevel":80,"magicLevel":1,"range":50,"crushDef":10},"6902":{"name":"Gang boss","hitpoints":80,"combatLevel":76,"attackSpeed":3,"attackLevel":1,"strengthLevel":1,"defenceLevel":70,"rangeLevel":80,"magicLevel":1,"range":50,"crushDef":10},"6903":{"name":"Gang boss","hitpoints":80,"combatLevel":76,"attackSpeed":3,"attackLevel":1,"strengthLevel":1,"defenceLevel":70,"rangeLevel":80,"magicLevel":1,"range":50,"crushDef":10},"6904":{"name":"Soldier (tier 1)","hitpoints":50,"combatLevel":39,"attackSpeed":6,"attackLevel":30,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":11,"poisonImmune":true,"venomImmune":true},"6905":{"name":"Soldier (tier 1)","hitpoints":50,"combatLevel":39,"attackSpeed":6,"attackLevel":30,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"bonusAttack":12,"bonusStrength":11,"poisonImmune":true,"venomImmune":true},"6906":{"name":"Soldier (tier 2)","hitpoints":50,"combatLevel":48,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"bonusAttack":25,"bonusStrength":30,"poisonImmune":true,"venomImmune":true},"6907":{"name":"Soldier (tier 2)","hitpoints":50,"combatLevel":48,"attackSpeed":4,"attackLevel":40,"strengthLevel":40,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"bonusAttack":25,"bonusStrength":30,"poisonImmune":true,"venomImmune":true},"6908":{"name":"Soldier (tier 3)","hitpoints":55,"combatLevel":58,"attackSpeed":5,"attackLevel":50,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"bonusAttack":20,"bonusStrength":8,"poisonImmune":true,"venomImmune":true},"6909":{"name":"Soldier (tier 3)","hitpoints":55,"combatLevel":58,"attackSpeed":5,"attackLevel":50,"strengthLevel":50,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"bonusAttack":20,"bonusStrength":8,"poisonImmune":true,"venomImmune":true},"6910":{"name":"Soldier (tier 4)","hitpoints":65,"combatLevel":70,"attackSpeed":5,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stabDef":1,"slashDef":1,"bonusAttack":10,"bonusStrength":8,"poisonImmune":true,"venomImmune":true},"6911":{"name":"Soldier (tier 4)","hitpoints":65,"combatLevel":70,"attackSpeed":5,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stabDef":1,"slashDef":1,"bonusAttack":10,"bonusStrength":8,"poisonImmune":true,"venomImmune":true},"6912":{"name":"Soldier (tier 5)","hitpoints":90,"combatLevel":99,"attackSpeed":4,"attackLevel":85,"strengthLevel":85,"defenceLevel":86,"rangeLevel":1,"magicLevel":1,"bonusAttack":5,"bonusStrength":5,"poisonImmune":true,"venomImmune":true},"6913":{"name":"Soldier (tier 5)","hitpoints":90,"combatLevel":99,"attackSpeed":4,"attackLevel":85,"strengthLevel":85,"defenceLevel":86,"rangeLevel":1,"magicLevel":1,"bonusAttack":5,"bonusStrength":5,"poisonImmune":true,"venomImmune":true},"6914":{"name":"Lizardman","hitpoints":60,"combatLevel":53,"attackSpeed":4,"attackLevel":43,"strengthLevel":43,"defenceLevel":43,"rangeLevel":43,"magicLevel":1,"range":22,"slashDef":25,"bonusAttack":22,"bonusStrength":20,"bonusRangeStrength":20},"6915":{"name":"Lizardman","hitpoints":60,"combatLevel":53,"attackSpeed":4,"attackLevel":43,"strengthLevel":43,"defenceLevel":43,"rangeLevel":43,"magicLevel":1,"range":22,"slashDef":25,"bonusAttack":22,"bonusStrength":20,"bonusRangeStrength":20},"6916":{"name":"Lizardman","hitpoints":60,"combatLevel":62,"attackSpeed":4,"attackLevel":53,"strengthLevel":53,"defenceLevel":52,"rangeLevel":1,"magicLevel":1,"range":28,"slashDef":20,"crushDef":5,"bonusAttack":28,"bonusStrength":25,"bonusRangeStrength":25},"6917":{"name":"Lizardman","hitpoints":60,"combatLevel":62,"attackSpeed":4,"attackLevel":53,"strengthLevel":53,"defenceLevel":52,"rangeLevel":1,"magicLevel":1,"range":28,"slashDef":20,"crushDef":5,"bonusAttack":28,"bonusStrength":25,"bonusRangeStrength":25},"6918":{"name":"Lizardman brute","hitpoints":60,"combatLevel":73,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"rangeLevel":1,"magicLevel":1,"range":34,"slashDef":30,"crushDef":10,"bonusAttack":34,"bonusStrength":30,"bonusRangeStrength":30},"6919":{"name":"Lizardman brute","hitpoints":60,"combatLevel":73,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"rangeLevel":1,"magicLevel":1,"range":34,"slashDef":30,"crushDef":10,"bonusAttack":34,"bonusStrength":30,"bonusRangeStrength":30},"6956":{"name":"Monk","hitpoints":5,"combatLevel":3,"attackSpeed":4,"attackLevel":2,"strengthLevel":2,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"6987":{"name":"Man","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"6988":{"name":"Man","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"6989":{"name":"Man","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"6990":{"name":"Woman","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"6991":{"name":"Woman","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"6992":{"name":"Woman","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"6996":{"name":"Mugger","hitpoints":8,"combatLevel":6,"attackSpeed":4,"attackLevel":5,"strengthLevel":5,"defenceLevel":5,"rangeLevel":1,"magicLevel":1},"7016":{"name":"Kourend guard","hitpoints":22,"combatLevel":21,"attackSpeed":4,"attackLevel":19,"strengthLevel":18,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"stab":4},"7017":{"name":"Kourend head guard","hitpoints":86,"combatLevel":84,"attackSpeed":4,"attackLevel":75,"strengthLevel":73,"defenceLevel":61,"rangeLevel":1,"magicLevel":1,"stabDef":16,"slashDef":16,"crushDef":18,"rangeDef":27,"bonusAttack":17,"bonusStrength":15},"7018":{"name":"Reanimated goblin","hitpoints":5,"attackSpeed":4},"7019":{"name":"Reanimated monkey","hitpoints":5,"attackSpeed":4},"7020":{"name":"Reanimated imp","hitpoints":5,"attackSpeed":4},"7021":{"name":"Reanimated minotaur","hitpoints":10,"attackSpeed":4},"7022":{"name":"Reanimated scorpion","hitpoints":15,"attackSpeed":4},"7023":{"name":"Reanimated bear","hitpoints":15,"attackSpeed":4},"7024":{"name":"Reanimated unicorn","hitpoints":15,"attackSpeed":4},"7025":{"name":"Reanimated dog","hitpoints":35,"attackSpeed":4},"7026":{"name":"Reanimated chaos druid","hitpoints":35,"attackSpeed":4},"7027":{"name":"Reanimated giant","hitpoints":35,"attackSpeed":4},"7028":{"name":"Reanimated ogre","hitpoints":35,"attackSpeed":5},"7029":{"name":"Reanimated elf","hitpoints":35,"attackSpeed":4},"7030":{"name":"Reanimated troll","hitpoints":35,"attackSpeed":4},"7031":{"name":"Reanimated horror","hitpoints":35,"slayerLevel":58,"attackSpeed":4},"7032":{"name":"Reanimated kalphite","hitpoints":35,"attackSpeed":4},"7033":{"name":"Reanimated dagannoth","hitpoints":35,"attackSpeed":4},"7034":{"name":"Reanimated bloodveld","hitpoints":35,"slayerLevel":50,"attackSpeed":4},"7035":{"name":"Reanimated TzHaar","hitpoints":35,"attackSpeed":5},"7036":{"name":"Reanimated demon","hitpoints":35,"attackSpeed":4},"7037":{"name":"Reanimated aviansie","hitpoints":35,"attackSpeed":4},"7038":{"name":"Reanimated abyssal","hitpoints":35,"slayerLevel":85,"attackSpeed":4},"7039":{"name":"Reanimated dragon","hitpoints":35,"attackSpeed":4,"dragon":true},"7095":{"name":"Tortured gorilla","hitpoints":110,"combatLevel":142,"attackSpeed":4,"attackLevel":180,"strengthLevel":90,"defenceLevel":110,"rangeLevel":1,"magicLevel":110,"bonusAttack":90,"bonusStrength":123},"7096":{"name":"Tortured gorilla","hitpoints":110,"combatLevel":142,"attackSpeed":4,"attackLevel":180,"strengthLevel":90,"defenceLevel":110,"rangeLevel":1,"magicLevel":110,"bonusAttack":90,"bonusStrength":123},"7097":{"name":"Tortured gorilla","hitpoints":110,"combatLevel":142,"attackSpeed":4,"attackLevel":180,"strengthLevel":90,"defenceLevel":110,"rangeLevel":1,"magicLevel":110,"bonusAttack":90,"bonusStrength":123},"7101":{"name":"Glough","hitpoints":575,"combatLevel":378,"attackSpeed":6,"attackLevel":260,"strengthLevel":270,"defenceLevel":248,"rangeLevel":262,"magicLevel":250,"range":100,"magic":80,"bonusAttack":122,"bonusStrength":75,"bonusRangeStrength":40,"bonusMagicDamage":40},"7102":{"name":"Glough","hitpoints":575,"combatLevel":378,"attackSpeed":6,"attackLevel":260,"strengthLevel":270,"defenceLevel":248,"rangeLevel":262,"magicLevel":250,"range":100,"magic":80,"bonusAttack":122,"bonusStrength":75,"bonusRangeStrength":40,"bonusMagicDamage":40},"7103":{"name":"Glough","hitpoints":575,"combatLevel":378,"attackSpeed":6,"attackLevel":260,"strengthLevel":270,"defenceLevel":248,"rangeLevel":262,"magicLevel":250,"range":100,"magic":80,"bonusAttack":122,"bonusStrength":75,"bonusRangeStrength":40,"bonusMagicDamage":40},"7104":{"name":"Keef","hitpoints":180,"combatLevel":178,"attackSpeed":5,"attackLevel":165,"strengthLevel":120,"defenceLevel":165,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":50,"bonusAttack":190,"bonusStrength":170},"7105":{"name":"Keef","hitpoints":180,"combatLevel":178,"attackSpeed":5,"attackLevel":165,"strengthLevel":120,"defenceLevel":165,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":50,"bonusAttack":190,"bonusStrength":170},"7106":{"name":"Kob","hitpoints":200,"combatLevel":185,"attackSpeed":5,"attackLevel":180,"strengthLevel":175,"defenceLevel":80,"stabDef":85,"slashDef":85,"crushDef":90,"rangeDef":200,"magicDef":200,"bonusAttack":200,"bonusStrength":135,"poisonImmune":true,"venomImmune":true},"7107":{"name":"Kob","hitpoints":200,"combatLevel":185,"attackSpeed":5,"attackLevel":180,"strengthLevel":175,"defenceLevel":80,"stabDef":85,"slashDef":85,"crushDef":90,"rangeDef":200,"magicDef":200,"bonusAttack":200,"bonusStrength":135,"poisonImmune":true,"venomImmune":true},"7118":{"name":"Maniacal monkey","hitpoints":65,"combatLevel":140,"attackSpeed":4,"attackLevel":200,"strengthLevel":175,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"7119":{"name":"Maniacal Monkey Archer","hitpoints":60,"combatLevel":132,"attackSpeed":4,"attackLevel":120,"strengthLevel":80,"defenceLevel":80,"rangeLevel":200,"magicLevel":1},"7144":{"name":"Demonic gorilla","hitpoints":380,"combatLevel":275,"attackSpeed":5,"attackLevel":205,"strengthLevel":195,"defenceLevel":200,"rangeLevel":195,"magicLevel":195,"range":43,"magic":40,"magicDef":50,"bonusAttack":43,"bonusStrength":29,"bonusRangeStrength":29,"demon":true},"7145":{"name":"Demonic gorilla","hitpoints":380,"combatLevel":275,"attackSpeed":5,"attackLevel":205,"strengthLevel":195,"defenceLevel":200,"rangeLevel":195,"magicLevel":195,"range":43,"magic":40,"magicDef":50,"bonusAttack":43,"bonusStrength":29,"bonusRangeStrength":29,"demon":true},"7146":{"name":"Demonic gorilla","hitpoints":380,"combatLevel":275,"attackSpeed":5,"attackLevel":205,"strengthLevel":195,"defenceLevel":200,"rangeLevel":195,"magicLevel":195,"range":43,"magic":40,"magicDef":50,"bonusAttack":43,"bonusStrength":29,"bonusRangeStrength":29,"demon":true},"7147":{"name":"Demonic gorilla","hitpoints":380,"combatLevel":275,"attackSpeed":5,"attackLevel":205,"strengthLevel":195,"defenceLevel":200,"rangeLevel":195,"magicLevel":195,"range":43,"magic":40,"magicDef":50,"bonusAttack":43,"bonusStrength":29,"bonusRangeStrength":29,"demon":true},"7148":{"name":"Demonic gorilla","hitpoints":380,"combatLevel":275,"attackSpeed":5,"attackLevel":205,"strengthLevel":195,"defenceLevel":200,"rangeLevel":195,"magicLevel":195,"range":43,"magic":40,"magicDef":50,"bonusAttack":43,"bonusStrength":29,"bonusRangeStrength":29,"demon":true},"7149":{"name":"Demonic gorilla","hitpoints":380,"combatLevel":275,"attackSpeed":5,"attackLevel":205,"strengthLevel":195,"defenceLevel":200,"rangeLevel":195,"magicLevel":195,"range":43,"magic":40,"magicDef":50,"bonusAttack":43,"bonusStrength":29,"bonusRangeStrength":29,"demon":true},"7150":{"name":"Tortured gorilla","hitpoints":210,"combatLevel":141,"attackSpeed":5,"attackLevel":105,"strengthLevel":95,"defenceLevel":95,"rangeLevel":95,"magicLevel":95,"range":22,"magic":20,"magicDef":25,"bonusAttack":22,"bonusStrength":16,"bonusRangeStrength":16,"bonusMagicDamage":16},"7151":{"name":"Tortured gorilla","hitpoints":210,"combatLevel":141,"attackSpeed":5,"attackLevel":105,"strengthLevel":95,"defenceLevel":95,"rangeLevel":95,"magicLevel":95,"range":22,"magic":20,"magicDef":25,"bonusAttack":22,"bonusStrength":16,"bonusRangeStrength":16,"bonusMagicDamage":16},"7152":{"name":"Demonic gorilla","hitpoints":380,"combatLevel":275,"attackSpeed":5,"attackLevel":205,"strengthLevel":195,"defenceLevel":200,"rangeLevel":195,"magicLevel":195,"range":43,"magic":40,"magicDef":50,"bonusAttack":43,"bonusStrength":29,"bonusRangeStrength":29,"demon":true},"7153":{"name":"Tortured gorilla","hitpoints":210,"combatLevel":141,"attackSpeed":5,"attackLevel":105,"strengthLevel":95,"defenceLevel":95,"rangeLevel":95,"magicLevel":95,"range":22,"magic":20,"magicDef":25,"bonusAttack":22,"bonusStrength":16,"bonusRangeStrength":16,"bonusMagicDamage":16},"7206":{"name":"Sand Crab","hitpoints":60,"combatLevel":15,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"7207":{"name":"Sandy rocks","hitpoints":60,"combatLevel":15,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"7209":{"name":"Guard dog","hitpoints":49,"combatLevel":44,"attackSpeed":4,"attackLevel":35,"strengthLevel":36,"defenceLevel":37,"rangeLevel":1,"magicLevel":1},"7234":{"name":"Ent","hitpoints":75,"combatLevel":86,"attackSpeed":4,"attackLevel":75,"strengthLevel":75,"defenceLevel":75,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":30,"magicDef":40,"bonusAttack":35,"bonusStrength":65},"7238":{"name":"Forester","hitpoints":17,"combatLevel":15,"attackSpeed":4,"attackLevel":14,"strengthLevel":13,"defenceLevel":8,"rangeLevel":1,"magicLevel":1,"stabDef":4,"slashDef":3,"crushDef":5},"7241":{"name":"Abyssal demon","hitpoints":150,"combatLevel":124,"slayerLevel":85,"attackSpeed":4,"attackLevel":97,"strengthLevel":67,"defenceLevel":135,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"crushDef":20,"rangeDef":20,"demon":true},"7242":{"name":"Black demon","hitpoints":170,"combatLevel":184,"attackSpeed":4,"attackLevel":155,"strengthLevel":158,"defenceLevel":162,"rangeLevel":1,"magicLevel":1,"demon":true},"7243":{"name":"Black demon","hitpoints":160,"combatLevel":178,"attackSpeed":4,"attackLevel":145,"strengthLevel":148,"defenceLevel":175,"rangeLevel":1,"magicLevel":1,"demon":true},"7244":{"name":"Greater demon","hitpoints":120,"combatLevel":101,"attackSpeed":4,"attackLevel":90,"strengthLevel":90,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"demon":true},"7245":{"name":"Greater demon","hitpoints":115,"combatLevel":100,"attackSpeed":4,"attackLevel":90,"strengthLevel":70,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"demon":true},"7246":{"name":"Greater demon","hitpoints":130,"combatLevel":113,"attackSpeed":4,"attackLevel":120,"strengthLevel":90,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"demon":true},"7247":{"name":"Lesser demon","hitpoints":87,"combatLevel":87,"attackSpeed":4,"attackLevel":80,"strengthLevel":70,"defenceLevel":71,"rangeLevel":1,"magicLevel":1,"demon":true},"7248":{"name":"Lesser demon","hitpoints":98,"combatLevel":94,"attackSpeed":4,"attackLevel":80,"strengthLevel":70,"defenceLevel":85,"rangeLevel":1,"magicLevel":1,"demon":true},"7249":{"name":"Dust devil","hitpoints":130,"combatLevel":110,"slayerLevel":65,"attackSpeed":4,"attackLevel":120,"strengthLevel":90,"defenceLevel":40,"rangeLevel":1,"magicLevel":1},"7250":{"name":"Dark beast","hitpoints":220,"combatLevel":182,"slayerLevel":90,"attackSpeed":4,"attackLevel":140,"strengthLevel":160,"defenceLevel":120,"rangeLevel":1,"magicLevel":160,"stabDef":30,"slashDef":40,"crushDef":100,"rangeDef":100,"magicDef":90},"7251":{"name":"Fire giant","hitpoints":150,"combatLevel":109,"attackSpeed":5,"attackLevel":90,"strengthLevel":80,"defenceLevel":65,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"bonusAttack":29,"bonusStrength":31},"7252":{"name":"Fire giant","hitpoints":130,"combatLevel":104,"attackSpeed":5,"attackLevel":65,"strengthLevel":65,"defenceLevel":120,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":10,"crushDef":10,"magicDef":50,"bonusAttack":50,"bonusStrength":20},"7253":{"name":"Bronze dragon","hitpoints":122,"combatLevel":143,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":112,"rangeLevel":1,"magicLevel":130,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":90,"magicDef":30,"dragon":true},"7254":{"name":"Iron dragon","hitpoints":195,"combatLevel":215,"attackSpeed":4,"attackLevel":185,"strengthLevel":185,"defenceLevel":185,"rangeLevel":1,"magicLevel":120,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":90,"magicDef":30,"dragon":true},"7255":{"name":"Steel dragon","hitpoints":250,"combatLevel":274,"attackSpeed":4,"attackLevel":235,"strengthLevel":235,"defenceLevel":235,"rangeLevel":1,"magicLevel":130,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":90,"magicDef":30,"dragon":true},"7256":{"name":"Hellhound","hitpoints":116,"combatLevel":122,"attackSpeed":4,"attackLevel":105,"strengthLevel":104,"defenceLevel":102,"rangeLevel":1,"magicLevel":1},"7257":{"name":"Ankou","hitpoints":60,"combatLevel":95,"attackSpeed":4,"attackLevel":100,"strengthLevel":70,"defenceLevel":100,"rangeLevel":1,"magicLevel":1,"undead":true},"7258":{"name":"Shade","hitpoints":115,"combatLevel":140,"attackSpeed":6,"attackLevel":130,"strengthLevel":136,"defenceLevel":100,"rangeLevel":50,"magicLevel":50,"undead":true},"7259":{"name":"Dagannoth","hitpoints":70,"combatLevel":74,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":50,"rangeLevel":1,"magicLevel":1},"7260":{"name":"Dagannoth","hitpoints":120,"combatLevel":92,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":71,"rangeLevel":1,"magicLevel":1},"7261":{"name":"Hill Giant","hitpoints":35,"combatLevel":28,"attackSpeed":4,"attackLevel":18,"strengthLevel":22,"defenceLevel":26,"rangeLevel":1,"magicLevel":1,"bonusAttack":18,"bonusStrength":16},"7262":{"name":"Moss giant","hitpoints":60,"combatLevel":42,"attackSpeed":6,"attackLevel":30,"strengthLevel":30,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"bonusAttack":33,"bonusStrength":31},"7263":{"name":"Ghost","hitpoints":25,"combatLevel":19,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"7264":{"name":"Ghost","hitpoints":25,"combatLevel":19,"attackSpeed":4,"attackLevel":13,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"crushDef":5,"rangeDef":5,"undead":true},"7265":{"name":"Skeleton","hitpoints":29,"combatLevel":22,"attackSpeed":4,"attackLevel":15,"strengthLevel":18,"defenceLevel":17,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":5,"rangeDef":5,"undead":true},"7266":{"name":"King Sand Crab","hitpoints":200,"combatLevel":107,"attackSpeed":6,"attackLevel":50,"strengthLevel":50,"defenceLevel":100,"rangeLevel":1,"magicLevel":1},"7267":{"name":"Sandy Boulder","hitpoints":200,"combatLevel":107,"attackSpeed":6,"attackLevel":50,"strengthLevel":50,"defenceLevel":100,"rangeLevel":1,"magicLevel":1},"7268":{"name":"Possessed pickaxe","hitpoints":40,"combatLevel":50,"attackSpeed":4,"attackLevel":40,"strengthLevel":55,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":15,"slashDef":10,"crushDef":5,"rangeDef":10,"magicDef":5},"7269":{"name":"Magic axe","hitpoints":45,"combatLevel":42,"attackSpeed":6,"attackLevel":38,"strengthLevel":38,"defenceLevel":29,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":5,"crushDef":15,"rangeDef":10,"magicDef":5},"7270":{"name":"Cyclops","hitpoints":100,"combatLevel":76,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"7271":{"name":"Cyclops","hitpoints":75,"combatLevel":56,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":35,"rangeLevel":1,"magicLevel":1},"7272":{"name":"Twisted Banshee","hitpoints":109,"combatLevel":89,"slayerLevel":15,"attackSpeed":4,"attackLevel":75,"strengthLevel":85,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"stabDef":15,"slashDef":15,"crushDef":15,"rangeDef":15,"undead":true},"7273":{"name":"Brutal blue dragon","hitpoints":245,"combatLevel":271,"attackSpeed":4,"attackLevel":298,"strengthLevel":198,"defenceLevel":198,"magicLevel":198,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"poisonImmune":true,"venomImmune":true,"dragon":true},"7274":{"name":"Brutal red dragon","hitpoints":285,"combatLevel":289,"attackSpeed":4,"attackLevel":310,"strengthLevel":210,"defenceLevel":198,"magicLevel":250,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"poisonImmune":true,"venomImmune":true,"dragon":true},"7275":{"name":"Brutal black dragon","hitpoints":315,"combatLevel":318,"slayerLevel":77,"attackSpeed":4,"attackLevel":330,"strengthLevel":210,"defenceLevel":258,"magicLevel":250,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"bonusStrength":20,"poisonImmune":true,"venomImmune":true,"dragon":true},"7276":{"name":"Mutated Bloodveld","hitpoints":170,"combatLevel":123,"slayerLevel":50,"attackSpeed":4,"attackLevel":110,"strengthLevel":115,"defenceLevel":30,"rangeLevel":1,"magicLevel":1},"7277":{"name":"Warped Jelly","hitpoints":140,"combatLevel":112,"slayerLevel":52,"attackSpeed":4,"attackLevel":95,"strengthLevel":90,"defenceLevel":70,"rangeLevel":1,"magicLevel":95},"7278":{"name":"Greater Nechryael","hitpoints":205,"combatLevel":200,"slayerLevel":80,"attackSpeed":4,"attackLevel":197,"strengthLevel":197,"defenceLevel":85,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":50,"rangeDef":50,"demon":true},"7279":{"name":"Deviant spectre","hitpoints":190,"combatLevel":169,"slayerLevel":60,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":90,"rangeLevel":1,"magicLevel":205,"stabDef":80,"slashDef":80,"crushDef":80,"rangeDef":85,"undead":true},"7286":{"name":"Skotizo","hitpoints":450,"combatLevel":321,"attackSpeed":6,"attackLevel":240,"strengthLevel":250,"defenceLevel":200,"rangeLevel":1,"magicLevel":280,"stabDef":80,"slashDef":80,"crushDef":80,"rangeDef":130,"magicDef":130,"bonusAttack":160,"bonusStrength":31,"poisonImmune":true,"venomImmune":true,"demon":true},"7287":{"name":"Reanimated demon spawn","hitpoints":85,"combatLevel":87,"attackSpeed":4,"attackLevel":80,"strengthLevel":70,"defenceLevel":71,"rangeLevel":1,"magicLevel":1,"demon":true},"7288":{"name":"Awakened Altar","hitpoints":100,"demon":true},"7290":{"name":"Awakened Altar","hitpoints":100,"demon":true},"7292":{"name":"Awakened Altar","hitpoints":100,"demon":true},"7294":{"name":"Awakened Altar","hitpoints":100,"demon":true},"7296":{"name":"Dark Ankou","hitpoints":60,"combatLevel":95,"attackSpeed":4,"attackLevel":100,"strengthLevel":70,"defenceLevel":100,"rangeLevel":1,"magicLevel":1},"7307":{"name":"Ancient Wizard","hitpoints":80,"combatLevel":98,"attackSpeed":4,"attackLevel":50,"strengthLevel":30,"defenceLevel":20,"rangeLevel":1,"magicLevel":150},"7308":{"name":"Ancient Wizard","hitpoints":80,"combatLevel":98,"attackSpeed":4,"attackLevel":50,"strengthLevel":30,"defenceLevel":20,"rangeLevel":150,"magicLevel":80,"bonusRangeStrength":30},"7309":{"name":"Ancient Wizard","hitpoints":80,"combatLevel":112,"attackSpeed":4,"attackLevel":120,"strengthLevel":150,"defenceLevel":20,"rangeLevel":1,"magicLevel":80,"bonusAttack":80,"bonusStrength":80},"7310":{"name":"Brassican Mage","hitpoints":150,"combatLevel":140,"attackSpeed":3,"attackLevel":80,"strengthLevel":70,"defenceLevel":80,"rangeLevel":140,"magicLevel":170},"7312":{"name":"Double agent","hitpoints":160,"combatLevel":141,"attackSpeed":4,"attackLevel":130,"strengthLevel":105,"defenceLevel":100,"rangeLevel":1,"magicLevel":95,"stabDef":20,"slashDef":20,"crushDef":20,"bonusAttack":40,"bonusStrength":40},"7322":{"name":"Wild dog","hitpoints":62,"combatLevel":63,"attackSpeed":4,"attackLevel":53,"strengthLevel":54,"defenceLevel":54,"rangeLevel":1,"magicLevel":1},"7388":{"name":"Crushing hand","hitpoints":55,"combatLevel":45,"slayerLevel":5,"attackSpeed":4,"attackLevel":45,"strengthLevel":42,"defenceLevel":14,"rangeLevel":1,"magicLevel":1,"poisonImmune":true,"undead":true},"7389":{"name":"Chasm Crawler","hitpoints":64,"combatLevel":68,"slayerLevel":10,"attackSpeed":4,"attackLevel":22,"strengthLevel":18,"defenceLevel":18,"rangeLevel":1,"magicLevel":1,"stabDef":10,"slashDef":10,"crushDef":5,"rangeDef":10,"magicDef":5},"7390":{"name":"Screaming banshee","hitpoints":61,"combatLevel":70,"slayerLevel":15,"attackSpeed":4,"attackLevel":65,"strengthLevel":61,"defenceLevel":56,"rangeLevel":1,"magicLevel":1,"stabDef":13,"slashDef":13,"crushDef":13,"rangeDef":13,"poisonImmune":true,"venomImmune":true,"undead":true},"7391":{"name":"Screaming twisted banshee","hitpoints":220,"combatLevel":144,"slayerLevel":15,"attackSpeed":4,"attackLevel":103,"strengthLevel":110,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"stabDef":25,"slashDef":25,"crushDef":25,"rangeDef":25,"poisonImmune":true,"venomImmune":true,"undead":true},"7392":{"name":"Giant rockslug","hitpoints":77,"combatLevel":86,"slayerLevel":20,"attackSpeed":6,"attackLevel":72,"strengthLevel":77,"defenceLevel":77,"rangeLevel":1,"magicLevel":1},"7393":{"name":"Cockathrice","hitpoints":95,"combatLevel":89,"slayerLevel":25,"attackSpeed":4,"attackLevel":63,"strengthLevel":78,"defenceLevel":78,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"magicDef":20,"poisonImmune":true,"venomImmune":true},"7394":{"name":"Flaming pyrelord","hitpoints":126,"combatLevel":97,"slayerLevel":30,"attackSpeed":4,"attackLevel":98,"strengthLevel":65,"defenceLevel":52,"rangeLevel":1,"magicLevel":1,"stabDef":18,"slashDef":18,"crushDef":18,"rangeDef":18,"poisonImmune":true,"venomImmune":true},"7395":{"name":"Monstrous basilisk","hitpoints":170,"combatLevel":135,"slayerLevel":40,"attackSpeed":4,"attackLevel":88,"strengthLevel":98,"defenceLevel":130,"rangeLevel":1,"magicLevel":1,"stabDef":35,"slashDef":35,"magicDef":35,"poisonImmune":true,"venomImmune":true},"7396":{"name":"Malevolent Mage","hitpoints":175,"combatLevel":162,"slayerLevel":45,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":135,"rangeLevel":1,"magicLevel":175,"poisonImmune":true,"venomImmune":true},"7397":{"name":"Insatiable Bloodveld","hitpoints":380,"combatLevel":202,"slayerLevel":50,"attackSpeed":4,"attackLevel":190,"strengthLevel":145,"defenceLevel":85,"rangeLevel":1,"magicLevel":1,"venomImmune":true},"7398":{"name":"Insatiable mutated Bloodveld","hitpoints":410,"combatLevel":278,"slayerLevel":50,"attackSpeed":4,"attackLevel":250,"strengthLevel":190,"defenceLevel":130,"rangeLevel":1,"magicLevel":1,"venomImmune":true},"7399":{"name":"Vitreous Jelly","hitpoints":190,"combatLevel":206,"slayerLevel":52,"attackSpeed":4,"attackLevel":170,"strengthLevel":150,"defenceLevel":220,"rangeLevel":1,"magicLevel":150},"7400":{"name":"Vitreous warped Jelly","hitpoints":220,"combatLevel":241,"slayerLevel":52,"attackSpeed":4,"attackLevel":200,"strengthLevel":180,"defenceLevel":250,"rangeLevel":1,"magicLevel":180},"7401":{"name":"Cave abomination","hitpoints":130,"combatLevel":206,"slayerLevel":58,"attackLevel":230,"strengthLevel":195,"defenceLevel":142,"rangeLevel":1,"magicLevel":230},"7402":{"name":"Abhorrent spectre","hitpoints":250,"combatLevel":253,"slayerLevel":60,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":180,"rangeLevel":1,"magicLevel":300,"stabDef":40,"slashDef":40,"crushDef":40,"rangeDef":30,"venomImmune":true,"undead":true},"7403":{"name":"Repugnant spectre","hitpoints":390,"combatLevel":335,"slayerLevel":60,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":220,"rangeLevel":1,"magicLevel":380,"stabDef":120,"slashDef":120,"crushDef":120,"rangeDef":115,"venomImmune":true,"undead":true},"7404":{"name":"Choke devil","hitpoints":300,"combatLevel":264,"slayerLevel":65,"attackSpeed":4,"attackLevel":260,"strengthLevel":230,"defenceLevel":120,"rangeLevel":1,"magicLevel":1},"7405":{"name":"King kurask","hitpoints":420,"combatLevel":295,"slayerLevel":70,"attackSpeed":4,"attackLevel":190,"strengthLevel":320,"defenceLevel":250,"rangeLevel":1,"magicLevel":1,"slashDef":50,"crushDef":50,"poisonImmune":true,"venomImmune":true},"7406":{"name":"Nuclear smoke devil","hitpoints":240,"combatLevel":280,"slayerLevel":93,"attackSpeed":4,"attackLevel":240,"strengthLevel":230,"defenceLevel":390,"rangeLevel":280,"magicLevel":1,"rangeDef":80,"magicDef":850,"poisonImmune":true,"venomImmune":true},"7407":{"name":"Marble gargoyle","hitpoints":270,"combatLevel":349,"slayerLevel":75,"attackSpeed":4,"attackLevel":230,"strengthLevel":250,"defenceLevel":190,"rangeLevel":220,"magicLevel":1,"stabDef":50,"slashDef":50,"rangeDef":50,"magicDef":50,"bonusRangeStrength":20,"venomImmune":true},"7408":{"name":"Marble gargoyle","hitpoints":270,"combatLevel":349,"slayerLevel":75,"attackSpeed":4,"attackLevel":230,"strengthLevel":250,"defenceLevel":190,"rangeLevel":220,"magicLevel":1,"stabDef":50,"slashDef":50,"rangeDef":50,"magicDef":50,"bonusRangeStrength":20,"venomImmune":true},"7409":{"name":"Night beast","hitpoints":550,"combatLevel":374,"slayerLevel":90,"attackSpeed":4,"attackLevel":270,"strengthLevel":290,"defenceLevel":220,"rangeLevel":1,"magicLevel":300,"stabDef":75,"slashDef":80,"crushDef":200,"rangeDef":200,"magicDef":190,"venomImmune":true},"7410":{"name":"Greater abyssal demon","hitpoints":400,"combatLevel":342,"slayerLevel":85,"attackSpeed":4,"attackLevel":300,"strengthLevel":260,"defenceLevel":240,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":50,"rangeDef":50,"venomImmune":true,"demon":true},"7411":{"name":"Nechryarch","hitpoints":320,"combatLevel":300,"slayerLevel":80,"attackSpeed":4,"attackLevel":310,"strengthLevel":260,"defenceLevel":140,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":30,"crushDef":30,"rangeDef":30,"demon":true},"7416":{"name":"Obor","hitpoints":120,"combatLevel":106,"attackSpeed":6,"attackLevel":90,"strengthLevel":100,"defenceLevel":60,"rangeLevel":120,"magicLevel":1,"range":100,"stabDef":35,"slashDef":40,"crushDef":45,"rangeDef":20,"magicDef":20,"bonusAttack":100,"bonusStrength":68,"bonusRangeStrength":65},"7418":{"name":"Zamorak warrior","hitpoints":50,"combatLevel":84,"attackSpeed":4,"attackLevel":85,"strengthLevel":70,"defenceLevel":90,"rangeLevel":1,"magicLevel":1},"7419":{"name":"Zamorak warrior","hitpoints":50,"combatLevel":85,"attackSpeed":4,"attackLevel":90,"strengthLevel":70,"defenceLevel":90,"rangeLevel":1,"magicLevel":1},"7420":{"name":"Zamorak ranger","hitpoints":50,"combatLevel":81,"attackSpeed":4,"attackLevel":75,"strengthLevel":75,"defenceLevel":80,"rangeLevel":80,"magicLevel":1},"7421":{"name":"Zamorak ranger","hitpoints":50,"combatLevel":82,"attackSpeed":4,"attackLevel":75,"strengthLevel":80,"defenceLevel":80,"rangeLevel":80,"magicLevel":1},"7422":{"name":"Zamorak mage","hitpoints":50,"combatLevel":84,"attackSpeed":4,"attackLevel":78,"strengthLevel":81,"defenceLevel":82,"rangeLevel":1,"magicLevel":85},"7423":{"name":"Zamorak mage","hitpoints":50,"combatLevel":82,"attackSpeed":4,"attackLevel":75,"strengthLevel":80,"defenceLevel":80,"rangeLevel":1,"magicLevel":85},"7424":{"name":"Cave lizard","hitpoints":20,"combatLevel":37,"attackSpeed":4,"attackLevel":38,"strengthLevel":36,"defenceLevel":35,"rangeLevel":1,"magicLevel":1,"stabDef":5,"slashDef":15,"crushDef":15,"rangeDef":5},"7426":{"name":"Zamorak crafter","hitpoints":25,"combatLevel":19,"attackSpeed":4,"attackLevel":15,"strengthLevel":15,"defenceLevel":12,"rangeLevel":1,"magicLevel":20},"7427":{"name":"Zamorak crafter","hitpoints":25,"combatLevel":19,"attackSpeed":4,"attackLevel":15,"strengthLevel":15,"defenceLevel":12,"rangeLevel":1,"magicLevel":20},"7485":{"name":"Zombie","hitpoints":65,"combatLevel":70,"attackSpeed":4,"attackLevel":61,"strengthLevel":60,"defenceLevel":61,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"7486":{"name":"Zombie","hitpoints":50,"combatLevel":56,"attackSpeed":4,"attackLevel":50,"strengthLevel":50,"defenceLevel":47,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"7487":{"name":"Zombie","hitpoints":71,"combatLevel":76,"attackSpeed":4,"attackLevel":69,"strengthLevel":65,"defenceLevel":62,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"7488":{"name":"Zombie","hitpoints":68,"combatLevel":72,"attackSpeed":4,"attackLevel":61,"strengthLevel":63,"defenceLevel":62,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"rangeDef":10,"bonusStrength":10,"undead":true},"7513":{"name":"Derwen","hitpoints":320,"combatLevel":235,"attackSpeed":6,"attackLevel":250,"strengthLevel":150,"defenceLevel":100,"rangeLevel":1,"magicLevel":80,"magic":180,"stabDef":200,"slashDef":200,"crushDef":200,"rangeDef":200,"bonusMagicDamage":80,"poisonImmune":true,"venomImmune":true},"7515":{"name":"Porazdir","hitpoints":320,"combatLevel":235,"attackSpeed":6,"attackLevel":250,"strengthLevel":150,"defenceLevel":100,"rangeLevel":1,"magicLevel":180,"magic":80,"stabDef":200,"slashDef":200,"crushDef":200,"rangeDef":200,"bonusMagicDamage":80,"poisonImmune":true,"venomImmune":true},"7527":{"name":"Vanguard","hitpoints":225,"attackSpeed":4,"attackLevel":225,"strengthLevel":225,"defenceLevel":315,"rangeLevel":225,"magicLevel":225,"stabDef":65,"slashDef":80,"crushDef":100,"rangeDef":400,"magicDef":80,"bonusAttack":20,"bonusStrength":10},"7528":{"name":"Vanguard","hitpoints":225,"attackSpeed":4,"attackLevel":225,"strengthLevel":225,"defenceLevel":315,"rangeLevel":225,"magicLevel":225,"range":40,"stabDef":55,"slashDef":60,"crushDef":100,"rangeDef":300,"magicDef":400,"bonusRangeStrength":25},"7529":{"name":"Vanguard","hitpoints":225,"attackSpeed":4,"attackLevel":225,"strengthLevel":225,"defenceLevel":315,"rangeLevel":225,"magicLevel":225,"magic":40,"stabDef":315,"slashDef":340,"crushDef":400,"rangeDef":50,"magicDef":110,"bonusMagicDamage":25},"7530":{"name":"Vespula","hitpoints":200,"attackSpeed":3,"rangeDef":60,"magicDef":70},"7531":{"name":"Vespula","hitpoints":200,"attackSpeed":3,"rangeDef":60,"magicDef":70},"7532":{"name":"Vespula","hitpoints":200,"attackSpeed":3,"rangeDef":60,"magicDef":70},"7533":{"name":"Abyssal portal","hitpoints":250,"attackSpeed":2,"attackLevel":1,"strengthLevel":1,"rangeLevel":1,"rangeDef":140,"magicDef":60},"7538":{"name":"Vespine soldier","hitpoints":100,"attackSpeed":4,"rangeLevel":1,"magicDef":30},"7539":{"name":"Vespine soldier","hitpoints":100,"attackSpeed":4,"rangeLevel":1,"magicDef":30},"7540":{"name":"Tekton","hitpoints":300,"attackSpeed":3,"attackLevel":390,"strengthLevel":390,"defenceLevel":205,"rangeLevel":1,"magicLevel":205,"stabDef":155,"slashDef":165,"crushDef":105,"bonusAttack":64,"bonusStrength":20},"7541":{"name":"Tekton","hitpoints":300,"attackSpeed":3,"attackLevel":390,"strengthLevel":390,"defenceLevel":205,"rangeLevel":1,"magicLevel":205,"stabDef":155,"slashDef":165,"crushDef":105,"bonusAttack":64,"bonusStrength":20},"7542":{"name":"Tekton","hitpoints":300,"attackSpeed":3,"attackLevel":390,"strengthLevel":390,"defenceLevel":205,"rangeLevel":1,"magicLevel":205,"stabDef":155,"slashDef":165,"crushDef":105,"bonusAttack":64,"bonusStrength":20},"7543":{"name":"Tekton (enraged)","hitpoints":300,"attackSpeed":3,"attackLevel":390,"strengthLevel":390,"defenceLevel":205,"rangeLevel":1,"magicLevel":205,"stabDef":280,"slashDef":290,"crushDef":180,"bonusAttack":64,"bonusStrength":30},"7544":{"name":"Tekton (enraged)","hitpoints":300,"attackSpeed":3,"attackLevel":390,"strengthLevel":390,"defenceLevel":205,"rangeLevel":1,"magicLevel":205,"stabDef":280,"slashDef":290,"crushDef":180,"bonusAttack":64,"bonusStrength":30},"7545":{"name":"Tekton","hitpoints":300,"attackSpeed":3,"attackLevel":390,"strengthLevel":390,"defenceLevel":205,"rangeLevel":1,"magicLevel":205,"stabDef":155,"slashDef":165,"crushDef":105,"bonusAttack":64,"bonusStrength":20},"7548":{"name":"Scavenger beast","hitpoints":30,"attackSpeed":4,"attackLevel":120,"strengthLevel":120,"defenceLevel":45,"rangeLevel":1,"magicLevel":1},"7549":{"name":"Scavenger beast","hitpoints":45,"attackSpeed":4,"attackLevel":180,"strengthLevel":180,"defenceLevel":67,"rangeLevel":1,"magicLevel":1},"7550":{"name":"Great Olm (Right claw)","hitpoints":600,"combatLevel":549,"attackSpeed":4,"attackLevel":250,"strengthLevel":250,"defenceLevel":175,"rangeLevel":250,"magicLevel":87,"range":60,"magic":60,"stabDef":200,"slashDef":200,"crushDef":200,"rangeDef":200,"magicDef":50},"7551":{"name":"Great Olm","hitpoints":800,"combatLevel":1043,"attackSpeed":4,"attackLevel":250,"strengthLevel":250,"defenceLevel":150,"rangeLevel":250,"magicLevel":250,"range":60,"magic":60,"stabDef":200,"slashDef":200,"crushDef":200,"rangeDef":50,"magicDef":200},"7552":{"name":"Great Olm (Left claw)","hitpoints":600,"combatLevel":750,"attackSpeed":4,"attackLevel":250,"strengthLevel":250,"defenceLevel":175,"rangeLevel":250,"magicLevel":175,"range":60,"magic":60,"stabDef":50,"slashDef":50,"crushDef":50,"rangeDef":50,"magicDef":50},"7553":{"name":"Great Olm (Right claw)","hitpoints":600,"combatLevel":549,"attackSpeed":4,"attackLevel":250,"strengthLevel":250,"defenceLevel":175,"rangeLevel":250,"magicLevel":87,"range":60,"magic":60,"stabDef":200,"slashDef":200,"crushDef":200,"rangeDef":200,"magicDef":50},"7554":{"name":"Great Olm","hitpoints":800,"combatLevel":1043,"attackSpeed":4,"attackLevel":250,"strengthLevel":250,"defenceLevel":150,"rangeLevel":250,"magicLevel":250,"range":60,"magic":60,"stabDef":200,"slashDef":200,"crushDef":200,"rangeDef":50,"magicDef":200},"7555":{"name":"Great Olm (Left claw)","hitpoints":600,"combatLevel":750,"attackSpeed":4,"attackLevel":250,"strengthLevel":250,"defenceLevel":175,"rangeLevel":250,"magicLevel":175,"range":60,"magic":60,"stabDef":50,"slashDef":50,"crushDef":50,"rangeDef":50,"magicDef":50},"7559":{"name":"Deathly ranger","hitpoints":120,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"range":120,"bonusRangeStrength":70},"7560":{"name":"Deathly mage","hitpoints":120,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"rangeLevel":1,"magic":120},"7561":{"name":"Muttadile","hitpoints":250,"attackSpeed":4},"7562":{"name":"Muttadile","hitpoints":250,"attackSpeed":4},"7563":{"name":"Muttadile","hitpoints":250,"attackSpeed":4},"7566":{"name":"Vasa Nistirio","hitpoints":300,"attackSpeed":3,"attackLevel":1,"strengthLevel":1,"range":100,"stabDef":170,"slashDef":190,"crushDef":50,"rangeDef":60,"magicDef":400},"7567":{"name":"Vasa Nistirio","hitpoints":300,"attackSpeed":3,"attackLevel":1,"strengthLevel":1,"range":100,"stabDef":170,"slashDef":190,"crushDef":50,"rangeDef":60,"magicDef":400},"7568":{"name":"Glowing crystal","hitpoints":120,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"rangeLevel":1,"slashDef":180,"crushDef":180},"7573":{"name":"Lizardman shaman","hitpoints":190,"attackSpeed":4,"range":56,"stabDef":102,"slashDef":160,"crushDef":150,"magicDef":160,"bonusAttack":58,"bonusStrength":52,"bonusRangeStrength":49},"7574":{"name":"Lizardman shaman","hitpoints":190,"attackSpeed":4,"range":56,"stabDef":102,"slashDef":160,"crushDef":150,"magicDef":160,"bonusAttack":58,"bonusStrength":52,"bonusRangeStrength":49},"7584":{"name":"Ice demon","hitpoints":140,"attackSpeed":3,"attackLevel":1,"strengthLevel":1,"defenceLevel":160,"rangeLevel":390,"magicLevel":390,"stabDef":70,"slashDef":70,"crushDef":110,"rangeDef":140,"magicDef":60,"demon":true},"7585":{"name":"Ice demon","hitpoints":210,"attackSpeed":3,"attackLevel":1,"strengthLevel":1,"defenceLevel":240,"rangeLevel":585,"magicLevel":585,"stabDef":70,"slashDef":70,"crushDef":110,"rangeDef":140,"magicDef":60,"demon":true},"7604":{"name":"Skeletal Mystic","hitpoints":160,"attackSpeed":4,"rangeLevel":1,"magic":40,"stabDef":155,"slashDef":155,"crushDef":115,"rangeDef":115,"magicDef":140,"bonusAttack":85,"bonusStrength":50,"bonusMagicDamage":38},"7605":{"name":"Skeletal Mystic","hitpoints":160,"attackSpeed":4,"rangeLevel":1,"magic":40,"stabDef":155,"slashDef":155,"crushDef":115,"rangeDef":115,"magicDef":140,"bonusAttack":85,"bonusStrength":50,"bonusMagicDamage":38},"7606":{"name":"Skeletal Mystic","hitpoints":160,"attackSpeed":4,"rangeLevel":1,"magic":40,"stabDef":155,"slashDef":155,"crushDef":115,"rangeDef":115,"magicDef":140,"bonusAttack":85,"bonusStrength":50,"bonusMagicDamage":38},"7620":{"name":"Temple guardian","hitpoints":45,"combatLevel":30,"attackSpeed":6,"attackLevel":20,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1},"7621":{"name":"Khazard warlord","hitpoints":170,"combatLevel":112,"attackSpeed":4,"attackLevel":75,"strengthLevel":78,"defenceLevel":80,"rangeLevel":1,"magicLevel":1},"7622":{"name":"Khazard warlord","hitpoints":170,"combatLevel":112,"attackSpeed":4,"attackLevel":75,"strengthLevel":78,"defenceLevel":80,"rangeLevel":1,"magicLevel":1},"7649":{"name":"Chaotic death spawn","hitpoints":50,"combatLevel":215,"attackSpeed":3,"attackLevel":380,"strengthLevel":1,"defenceLevel":70,"rangeLevel":380,"magicLevel":380,"demon":true},"7656":{"name":"Lesser demon","hitpoints":81,"combatLevel":82,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":71,"rangeLevel":1,"magicLevel":1,"demon":true},"7657":{"name":"Lesser demon","hitpoints":81,"combatLevel":82,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":71,"rangeLevel":1,"magicLevel":1,"demon":true},"7658":{"name":"Mummy","hitpoints":68,"combatLevel":84,"attackSpeed":4,"undead":true},"7659":{"name":"Mummy","hitpoints":68,"combatLevel":84,"attackSpeed":4,"undead":true},"7660":{"name":"Mummy","hitpoints":68,"combatLevel":84,"attackSpeed":4,"undead":true},"7661":{"name":"Mummy","hitpoints":68,"combatLevel":84,"attackSpeed":4,"undead":true},"7662":{"name":"Mummy","hitpoints":68,"combatLevel":84,"attackSpeed":4,"undead":true},"7664":{"name":"Lesser demon","hitpoints":81,"combatLevel":82,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":71,"rangeLevel":1,"magicLevel":1,"demon":true},"7679":{"name":"TzHaar-Ket","hitpoints":200,"combatLevel":221,"attackSpeed":4,"attackLevel":200,"strengthLevel":180,"defenceLevel":190,"rangeLevel":1,"magicLevel":40},"7682":{"name":"TzHaar-Hur","hitpoints":80,"combatLevel":74,"attackSpeed":5,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":80},"7683":{"name":"TzHaar-Hur","hitpoints":80,"combatLevel":74,"attackSpeed":5,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":80},"7684":{"name":"TzHaar-Hur","hitpoints":80,"combatLevel":74,"attackSpeed":5,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":80},"7685":{"name":"TzHaar-Hur","hitpoints":80,"combatLevel":74,"attackSpeed":5,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":80},"7686":{"name":"TzHaar-Hur","hitpoints":80,"combatLevel":74,"attackSpeed":5,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":80},"7687":{"name":"TzHaar-Hur","hitpoints":80,"combatLevel":74,"attackSpeed":5,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":80},"7691":{"name":"Jal-Nib","hitpoints":10,"combatLevel":32,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":15,"rangeLevel":1,"magicLevel":15},"7692":{"name":"Jal-MejRah","hitpoints":25,"combatLevel":85,"attackSpeed":3,"defenceLevel":55,"rangeLevel":120,"magicLevel":120,"range":30,"stabDef":30,"slashDef":30,"crushDef":30,"rangeDef":45,"bonusRangeStrength":30},"7693":{"name":"Jal-Ak","hitpoints":40,"combatLevel":165,"attackSpeed":6,"attackLevel":160,"strengthLevel":160,"defenceLevel":95,"rangeLevel":160,"magicLevel":160,"stab":45,"slash":45,"crush":45,"range":45,"magic":45,"stabDef":25,"slashDef":25,"crushDef":25,"rangeDef":25,"magicDef":25,"bonusStrength":45,"bonusRangeStrength":45},"7694":{"name":"Jal-AkRek-Mej","hitpoints":15,"combatLevel":70,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":95,"rangeLevel":1,"magicLevel":120,"magic":25,"magicDef":25},"7695":{"name":"Jal-AkRek-Xil","hitpoints":15,"combatLevel":70,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":95,"rangeLevel":120,"magicLevel":1,"range":25,"rangeDef":25,"bonusRangeStrength":25},"7696":{"name":"Jal-AkRek-Ket","hitpoints":15,"combatLevel":70,"attackSpeed":4,"attackLevel":120,"strengthLevel":120,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stab":25,"slash":25,"crush":25,"stabDef":25,"slashDef":25,"crushDef":25,"bonusStrength":25},"7697":{"name":"Jal-ImKot","hitpoints":75,"combatLevel":240,"attackSpeed":4,"attackLevel":210,"strengthLevel":290,"defenceLevel":120,"rangeLevel":220,"magicLevel":120,"stab":40,"slash":40,"crush":40,"stabDef":65,"slashDef":65,"crushDef":65,"rangeDef":50,"magicDef":30,"bonusStrength":40},"7698":{"name":"Jal-Xil","hitpoints":130,"combatLevel":370,"attackSpeed":4,"attackLevel":140,"strengthLevel":180,"defenceLevel":60,"rangeLevel":250,"magicLevel":90,"range":40,"bonusRangeStrength":50},"7699":{"name":"Jal-Zek","hitpoints":220,"combatLevel":490,"attackSpeed":4,"attackLevel":370,"strengthLevel":510,"defenceLevel":260,"rangeLevel":510,"magicLevel":300,"magic":80},"7700":{"name":"JalTok-Jad","hitpoints":350,"combatLevel":900,"attackSpeed":8,"attackLevel":750,"strengthLevel":1020,"defenceLevel":480,"rangeLevel":1020,"magicLevel":510,"stab":80,"slash":80,"crush":80,"range":80,"magic":100,"bonusMagicDamage":75},"7701":{"name":"Yt-HurKot","hitpoints":90,"combatLevel":141,"attackSpeed":4,"attackLevel":165,"strengthLevel":125,"defenceLevel":100,"rangeLevel":150,"magicLevel":150,"range":80,"magic":100,"rangeDef":130,"magicDef":130},"7702":{"name":"Jal-Xil","hitpoints":130,"combatLevel":370,"attackSpeed":4,"attackLevel":140,"strengthLevel":180,"defenceLevel":60,"rangeLevel":250,"magicLevel":90,"range":40,"bonusRangeStrength":50},"7703":{"name":"Jal-Zek","hitpoints":220,"combatLevel":490,"attackSpeed":4,"attackLevel":370,"strengthLevel":510,"defenceLevel":260,"rangeLevel":510,"magicLevel":300,"magic":80},"7704":{"name":"JalTok-Jad","hitpoints":350,"combatLevel":900,"attackSpeed":8,"attackLevel":750,"strengthLevel":1020,"defenceLevel":480,"rangeLevel":1020,"magicLevel":510,"stab":80,"slash":80,"crush":80,"range":80,"magic":100,"bonusMagicDamage":75},"7705":{"name":"Yt-HurKot","hitpoints":90,"combatLevel":141,"attackSpeed":4,"attackLevel":165,"strengthLevel":125,"defenceLevel":100,"rangeLevel":150,"magicLevel":150,"range":80,"magic":100,"rangeDef":130,"magicDef":130},"7706":{"name":"TzKal-Zuk","hitpoints":1200,"combatLevel":1400,"attackLevel":350,"strengthLevel":600,"defenceLevel":260,"rangeLevel":400,"magicLevel":150,"crush":300,"range":550,"magic":550,"rangeDef":100,"magicDef":350,"bonusStrength":200,"bonusRangeStrength":200},"7708":{"name":"Jal-MejJak","hitpoints":80,"combatLevel":250,"attackSpeed":3,"attackLevel":1,"strengthLevel":1,"defenceLevel":100,"rangeLevel":1,"magicLevel":1},"7744":{"name":"Lizardman shaman","hitpoints":150,"combatLevel":150,"attackSpeed":4,"attackLevel":120,"strengthLevel":120,"defenceLevel":140,"rangeLevel":120,"magicLevel":130,"range":45,"slashDef":40,"crushDef":30,"magicDef":50,"bonusAttack":45,"bonusStrength":38,"bonusRangeStrength":38},"7745":{"name":"Lizardman shaman","hitpoints":150,"combatLevel":150,"attackSpeed":4,"attackLevel":120,"strengthLevel":120,"defenceLevel":140,"rangeLevel":120,"magicLevel":130,"range":45,"slashDef":40,"crushDef":30,"magicDef":50,"bonusAttack":45,"bonusStrength":38,"bonusRangeStrength":38},"7792":{"name":"Long-tailed Wyvern","hitpoints":200,"combatLevel":152,"slayerLevel":66,"attackSpeed":6,"attackLevel":125,"strengthLevel":120,"defenceLevel":90,"rangeLevel":90,"magicLevel":90,"stabDef":70,"slashDef":70,"crushDef":70,"rangeDef":120,"magicDef":140,"dragon":true},"7793":{"name":"Taloned Wyvern","hitpoints":200,"combatLevel":147,"slayerLevel":66,"attackSpeed":6,"attackLevel":120,"strengthLevel":110,"defenceLevel":90,"rangeLevel":90,"magicLevel":90,"stabDef":70,"slashDef":70,"crushDef":70,"rangeDef":120,"magicDef":140,"dragon":true},"7794":{"name":"Spitting Wyvern","hitpoints":200,"combatLevel":139,"slayerLevel":66,"attackSpeed":6,"attackLevel":125,"strengthLevel":80,"defenceLevel":90,"rangeLevel":125,"magicLevel":125,"stabDef":70,"slashDef":70,"crushDef":70,"rangeDef":120,"magicDef":140,"dragon":true},"7795":{"name":"Ancient Wyvern","hitpoints":300,"combatLevel":210,"slayerLevel":82,"attackSpeed":5,"attackLevel":150,"strengthLevel":150,"defenceLevel":150,"rangeLevel":90,"magicLevel":90,"stabDef":70,"slashDef":70,"crushDef":70,"rangeDef":120,"magicDef":170,"dragon":true},"7796":{"name":"Lobstrosity","hitpoints":50,"combatLevel":68,"attackSpeed":4,"attackLevel":60,"strengthLevel":80,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":50,"crushDef":15,"rangeDef":70,"magicDef":99},"7797":{"name":"Ancient Zygomite","hitpoints":150,"combatLevel":109,"slayerLevel":57,"attackSpeed":4,"attackLevel":80,"strengthLevel":80,"defenceLevel":80,"rangeLevel":80,"magicLevel":80,"stab":50,"stabDef":20,"slashDef":20,"crushDef":20,"rangeDef":30,"magicDef":30,"bonusAttack":30},"7799":{"name":"Ammonite Crab","hitpoints":100,"combatLevel":25,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"7802":{"name":"Hoop Snake","hitpoints":25,"combatLevel":19,"attackSpeed":4,"attackLevel":15,"strengthLevel":10,"defenceLevel":20,"rangeLevel":1,"magicLevel":1},"7804":{"name":"Tar Monster","hitpoints":200,"combatLevel":132,"attackSpeed":4,"attackLevel":120,"strengthLevel":80,"defenceLevel":70,"rangeLevel":100,"magicLevel":1},"7806":{"name":"Deranged archaeologist","hitpoints":200,"combatLevel":276,"attackSpeed":3,"attackLevel":280,"strengthLevel":160,"defenceLevel":280,"rangeLevel":320,"magicLevel":1,"range":90,"stabDef":20,"slashDef":20,"crushDef":50,"rangeDef":300,"magicDef":300,"bonusAttack":280,"bonusStrength":30,"bonusRangeStrength":90},"7817":{"name":"Lava beast","hitpoints":65,"attackSpeed":4},"7851":{"name":"Dusk","hitpoints":450,"combatLevel":248,"slayerLevel":75,"attackSpeed":6,"attackLevel":200,"strengthLevel":140,"defenceLevel":100,"rangeLevel":140,"magicLevel":140},"7852":{"name":"Dawn","hitpoints":450,"combatLevel":228,"slayerLevel":75,"attackSpeed":6,"attackLevel":140,"strengthLevel":140,"defenceLevel":100,"rangeLevel":140,"magicLevel":100,"magicDef":80,"poisonImmune":true,"venomImmune":true},"7853":{"name":"Dawn","hitpoints":450,"combatLevel":228,"slayerLevel":75,"attackSpeed":6,"attackLevel":140,"strengthLevel":140,"defenceLevel":100,"rangeLevel":140,"magicLevel":100,"magicDef":80,"poisonImmune":true,"venomImmune":true},"7854":{"name":"Dusk","hitpoints":450,"combatLevel":248,"slayerLevel":75,"attackSpeed":6,"attackLevel":200,"strengthLevel":140,"defenceLevel":100,"rangeLevel":140,"magicLevel":140},"7855":{"name":"Dusk","hitpoints":450,"combatLevel":248,"slayerLevel":75,"attackSpeed":6,"attackLevel":200,"strengthLevel":140,"defenceLevel":100,"rangeLevel":140,"magicLevel":140},"7858":{"name":"Justiciar Zachariah","hitpoints":320,"combatLevel":348,"attackSpeed":6,"attackLevel":500,"strengthLevel":250,"defenceLevel":100,"rangeLevel":1,"magicLevel":180,"magic":80,"stabDef":200,"slashDef":200,"crushDef":200,"rangeDef":200,"bonusAttack":200,"bonusMagicDamage":80,"poisonImmune":true,"venomImmune":true},"7859":{"name":"Derwen","hitpoints":320,"combatLevel":235,"attackSpeed":6,"attackLevel":250,"strengthLevel":150,"defenceLevel":100,"rangeLevel":1,"magicLevel":80,"magic":180,"stabDef":200,"slashDef":200,"crushDef":200,"rangeDef":200,"bonusMagicDamage":80,"poisonImmune":true,"venomImmune":true},"7860":{"name":"Porazdir","hitpoints":320,"combatLevel":235,"attackSpeed":6,"attackLevel":250,"strengthLevel":150,"defenceLevel":100,"rangeLevel":1,"magicLevel":180,"magic":80,"stabDef":200,"slashDef":200,"crushDef":200,"rangeDef":200,"bonusMagicDamage":80,"poisonImmune":true,"venomImmune":true},"7861":{"name":"Black dragon","hitpoints":250,"combatLevel":247,"attackSpeed":4,"attackLevel":200,"strengthLevel":215,"defenceLevel":200,"rangeLevel":1,"magicLevel":150,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"7862":{"name":"Black dragon","hitpoints":250,"combatLevel":247,"attackSpeed":4,"attackLevel":200,"strengthLevel":215,"defenceLevel":200,"rangeLevel":1,"magicLevel":150,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"7863":{"name":"Black dragon","hitpoints":250,"combatLevel":247,"attackSpeed":4,"attackLevel":200,"strengthLevel":215,"defenceLevel":200,"rangeLevel":1,"magicLevel":150,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"7864":{"name":"Ankou","hitpoints":100,"combatLevel":98,"attackSpeed":4,"attackLevel":75,"strengthLevel":90,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"undead":true},"7865":{"name":"Lesser demon","hitpoints":110,"combatLevel":94,"attackSpeed":4,"attackLevel":68,"strengthLevel":85,"defenceLevel":71,"rangeLevel":1,"magicLevel":1,"demon":true},"7866":{"name":"Lesser demon","hitpoints":110,"combatLevel":94,"attackSpeed":4,"attackLevel":68,"strengthLevel":85,"defenceLevel":71,"rangeLevel":1,"magicLevel":1,"demon":true},"7867":{"name":"Lesser demon","hitpoints":110,"combatLevel":94,"attackSpeed":4,"attackLevel":68,"strengthLevel":85,"defenceLevel":71,"rangeLevel":1,"magicLevel":1,"demon":true},"7868":{"name":"Green dragon","hitpoints":100,"combatLevel":88,"attackSpeed":4,"attackLevel":68,"strengthLevel":75,"defenceLevel":68,"rangeLevel":1,"magicLevel":75,"stabDef":20,"slashDef":40,"crushDef":40,"rangeDef":20,"magicDef":30,"dragon":true},"7869":{"name":"Green dragon","hitpoints":100,"combatLevel":88,"attackSpeed":4,"attackLevel":68,"strengthLevel":75,"defenceLevel":68,"rangeLevel":1,"magicLevel":75,"stabDef":20,"slashDef":40,"crushDef":40,"rangeDef":20,"magicDef":30,"dragon":true},"7870":{"name":"Green dragon","hitpoints":100,"combatLevel":88,"attackSpeed":4,"attackLevel":68,"strengthLevel":75,"defenceLevel":68,"rangeLevel":1,"magicLevel":75,"stabDef":20,"slashDef":40,"crushDef":40,"rangeDef":20,"magicDef":30,"dragon":true},"7871":{"name":"Greater demon","hitpoints":120,"combatLevel":104,"attackSpeed":4,"attackLevel":76,"strengthLevel":90,"defenceLevel":81,"rangeLevel":1,"magicLevel":1,"demon":true},"7872":{"name":"Greater demon","hitpoints":120,"combatLevel":104,"attackSpeed":4,"attackLevel":76,"strengthLevel":90,"defenceLevel":81,"rangeLevel":1,"magicLevel":1,"demon":true},"7873":{"name":"Greater demon","hitpoints":120,"combatLevel":104,"attackSpeed":4,"attackLevel":76,"strengthLevel":90,"defenceLevel":81,"rangeLevel":1,"magicLevel":1,"demon":true},"7874":{"name":"Black demon","hitpoints":200,"combatLevel":188,"attackSpeed":4,"attackLevel":145,"strengthLevel":165,"defenceLevel":152,"rangeLevel":1,"magicLevel":1,"demon":true},"7875":{"name":"Black demon","hitpoints":200,"combatLevel":188,"attackSpeed":4,"attackLevel":145,"strengthLevel":165,"defenceLevel":152,"rangeLevel":1,"magicLevel":1,"demon":true},"7876":{"name":"Black demon","hitpoints":200,"combatLevel":188,"attackSpeed":4,"attackLevel":145,"strengthLevel":165,"defenceLevel":152,"rangeLevel":1,"magicLevel":1,"demon":true},"7877":{"name":"Hellhound","hitpoints":150,"combatLevel":136,"attackSpeed":4,"attackLevel":105,"strengthLevel":120,"defenceLevel":102,"rangeLevel":1,"magicLevel":1},"7878":{"name":"Ice giant","hitpoints":100,"combatLevel":67,"attackSpeed":5,"attackLevel":40,"strengthLevel":60,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"bonusAttack":29,"bonusStrength":31},"7879":{"name":"Ice giant","hitpoints":100,"combatLevel":67,"attackSpeed":5,"attackLevel":40,"strengthLevel":60,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"bonusAttack":29,"bonusStrength":31},"7880":{"name":"Ice giant","hitpoints":100,"combatLevel":67,"attackSpeed":5,"attackLevel":40,"strengthLevel":60,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"slashDef":3,"crushDef":2,"bonusAttack":29,"bonusStrength":31},"7881":{"name":"Revenant imp","hitpoints":10,"combatLevel":7,"attackSpeed":5,"attackLevel":5,"strengthLevel":5,"defenceLevel":4,"rangeLevel":5,"magicLevel":9,"magic":5,"magicDef":5,"undead":true},"7882":{"name":"Dusk","hitpoints":450,"combatLevel":248,"slayerLevel":75,"attackSpeed":6,"attackLevel":200,"strengthLevel":140,"defenceLevel":100,"rangeLevel":140,"magicLevel":140},"7883":{"name":"Dusk","hitpoints":450,"combatLevel":248,"slayerLevel":75,"attackSpeed":6,"attackLevel":200,"strengthLevel":140,"defenceLevel":100,"rangeLevel":140,"magicLevel":140},"7884":{"name":"Dawn","hitpoints":450,"combatLevel":228,"slayerLevel":75,"attackSpeed":6,"attackLevel":140,"strengthLevel":140,"defenceLevel":100,"rangeLevel":140,"magicLevel":100,"magicDef":80,"poisonImmune":true,"venomImmune":true},"7885":{"name":"Dawn","hitpoints":450,"combatLevel":228,"slayerLevel":75,"attackSpeed":6,"attackLevel":140,"strengthLevel":140,"defenceLevel":100,"rangeLevel":140,"magicLevel":100,"magicDef":80,"poisonImmune":true,"venomImmune":true},"7886":{"name":"Dusk","hitpoints":450,"combatLevel":248,"slayerLevel":75,"attackSpeed":6,"attackLevel":200,"strengthLevel":140,"defenceLevel":100,"rangeLevel":140,"magicLevel":140},"7887":{"name":"Dusk","hitpoints":450,"combatLevel":328,"slayerLevel":75,"attackSpeed":6,"attackLevel":300,"strengthLevel":250,"defenceLevel":150,"rangeLevel":250,"magicLevel":250},"7888":{"name":"Dusk","hitpoints":450,"combatLevel":328,"slayerLevel":75,"attackSpeed":6,"attackLevel":300,"strengthLevel":250,"defenceLevel":150,"rangeLevel":250,"magicLevel":250},"7889":{"name":"Dusk","hitpoints":450,"combatLevel":328,"slayerLevel":75,"attackSpeed":6,"attackLevel":300,"strengthLevel":250,"defenceLevel":150,"rangeLevel":250,"magicLevel":250},"7894":{"name":"Sand Snake (hard)","hitpoints":180,"combatLevel":154,"attackSpeed":4,"attackLevel":180,"strengthLevel":140,"defenceLevel":20,"rangeLevel":1,"magicLevel":1},"7895":{"name":"Sand Snake","hitpoints":60,"combatLevel":36,"attackSpeed":4,"attackLevel":30,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1},"7903":{"name":"Sand Snake","hitpoints":60,"combatLevel":36,"attackSpeed":4,"attackLevel":30,"strengthLevel":20,"defenceLevel":20,"rangeLevel":1,"magicLevel":1},"7916":{"name":"Thief","hitpoints":22,"combatLevel":21,"attackSpeed":4,"attackLevel":14,"strengthLevel":13,"defenceLevel":12,"rangeLevel":1,"magicLevel":1},"7921":{"name":"Woman","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"7922":{"name":"Woman","hitpoints":7,"combatLevel":2,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":1,"rangeLevel":1,"magicLevel":1},"7931":{"name":"Revenant goblin","hitpoints":14,"combatLevel":15,"attackSpeed":5,"attackLevel":13,"strengthLevel":14,"defenceLevel":14,"rangeLevel":15,"magicLevel":12,"range":21,"magic":37,"stabDef":25,"slashDef":28,"crushDef":31,"rangeDef":31,"magicDef":1,"bonusAttack":6,"bonusStrength":8,"bonusRangeStrength":12,"bonusMagicDamage":12,"undead":true},"7932":{"name":"Revenant pyrefiend","hitpoints":48,"combatLevel":52,"attackSpeed":5,"attackLevel":60,"strengthLevel":40,"defenceLevel":33,"rangeLevel":40,"magicLevel":67,"stabDef":45,"slashDef":40,"crushDef":50,"rangeDef":10,"magicDef":15,"undead":true},"7933":{"name":"Revenant hobgoblin","hitpoints":72,"combatLevel":60,"attackSpeed":4,"attackLevel":50,"strengthLevel":50,"defenceLevel":41,"rangeLevel":60,"magicLevel":55,"range":25,"magic":5,"stabDef":65,"slashDef":60,"crushDef":68,"rangeDef":50,"magicDef":30,"bonusAttack":20,"bonusStrength":24,"undead":true},"7934":{"name":"Revenant cyclops","hitpoints":110,"combatLevel":82,"attackSpeed":6,"attackLevel":60,"strengthLevel":73,"defenceLevel":49,"rangeLevel":70,"magicLevel":65,"stabDef":140,"slashDef":130,"crushDef":135,"rangeDef":135,"magicDef":10,"bonusAttack":53,"bonusStrength":64,"undead":true},"7935":{"name":"Revenant hellhound","hitpoints":80,"combatLevel":90,"attackSpeed":5,"attackLevel":76,"strengthLevel":80,"defenceLevel":80,"rangeLevel":80,"magicLevel":104,"magic":30,"stabDef":138,"slashDef":140,"crushDef":142,"rangeDef":140,"magicDef":62,"bonusAttack":38,"bonusStrength":40,"undead":true},"7937":{"name":"Revenant ork","hitpoints":105,"combatLevel":105,"attackSpeed":5,"attackLevel":99,"strengthLevel":100,"defenceLevel":60,"rangeLevel":130,"magicLevel":110,"range":50,"stabDef":148,"slashDef":150,"crushDef":146,"rangeDef":148,"magicDef":50,"bonusAttack":60,"bonusStrength":55,"undead":true},"7938":{"name":"Revenant dark beast","hitpoints":140,"combatLevel":120,"attackSpeed":5,"attackLevel":93,"strengthLevel":110,"defenceLevel":80,"rangeLevel":135,"magicLevel":130,"range":45,"stabDef":153,"slashDef":152,"crushDef":155,"rangeDef":158,"magicDef":70,"bonusAttack":65,"bonusStrength":60,"undead":true},"7939":{"name":"Revenant knight","hitpoints":143,"combatLevel":126,"attackSpeed":5,"attackLevel":100,"strengthLevel":119,"defenceLevel":80,"rangeLevel":146,"magicLevel":146,"range":55,"magic":55,"stabDef":195,"slashDef":200,"crushDef":180,"rangeDef":190,"magicDef":95,"bonusAttack":69,"bonusStrength":71,"bonusRangeStrength":45,"bonusMagicDamage":50,"undead":true},"7940":{"name":"Revenant dragon","hitpoints":155,"combatLevel":135,"attackSpeed":5,"attackLevel":106,"strengthLevel":126,"defenceLevel":87,"rangeLevel":151,"magicLevel":150,"range":60,"magic":61,"stabDef":201,"slashDef":206,"crushDef":188,"rangeDef":197,"magicDef":101,"bonusAttack":72,"bonusStrength":78,"bonusRangeStrength":51,"bonusMagicDamage":35,"undead":true},"7948":{"name":"Corsair Traitor (hard)","hitpoints":160,"combatLevel":103,"attackSpeed":3,"attackLevel":1,"strengthLevel":1,"defenceLevel":80,"rangeLevel":1,"magicLevel":90},"7949":{"name":"Corsair Traitor","hitpoints":55,"combatLevel":35,"attackSpeed":5,"attackLevel":1,"strengthLevel":1,"defenceLevel":30,"rangeLevel":1,"magicLevel":30},"7955":{"name":"Baby dragon","hitpoints":80,"combatLevel":83,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"stabDef":30,"slashDef":50,"crushDef":50,"rangeDef":30,"magicDef":40,"dragon":true},"7964":{"name":"Ithoi the Navigator","hitpoints":55,"combatLevel":35,"attackSpeed":5,"attackLevel":1,"strengthLevel":1,"defenceLevel":30,"rangeLevel":1,"magicLevel":30},"7989":{"name":"Ogress Warrior","hitpoints":82,"combatLevel":82,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":82,"rangeLevel":1,"magicLevel":60,"stabDef":10,"slashDef":12,"crushDef":12,"rangeDef":16,"magicDef":14},"7990":{"name":"Ogress Warrior","hitpoints":82,"combatLevel":82,"attackSpeed":4,"attackLevel":68,"strengthLevel":70,"defenceLevel":82,"rangeLevel":1,"magicLevel":60,"stabDef":10,"slashDef":12,"crushDef":12,"rangeDef":16,"magicDef":14},"7991":{"name":"Ogress Shaman","hitpoints":82,"combatLevel":82,"attackSpeed":4,"attackLevel":68,"strengthLevel":20,"defenceLevel":82,"rangeLevel":1,"magicLevel":68,"stabDef":12,"slashDef":14,"crushDef":14,"rangeDef":8,"magicDef":16},"7992":{"name":"Ogress Shaman","hitpoints":82,"combatLevel":82,"attackSpeed":4,"attackLevel":68,"strengthLevel":20,"defenceLevel":82,"rangeLevel":1,"magicLevel":68,"stabDef":12,"slashDef":14,"crushDef":14,"rangeDef":8,"magicDef":16},"7996":{"name":"Corrupt Lizardman (hard)","hitpoints":150,"combatLevel":152,"attackSpeed":4,"attackLevel":162,"strengthLevel":162,"defenceLevel":38,"rangeLevel":162,"magicLevel":1,"range":22,"slashDef":25,"bonusAttack":22,"bonusStrength":20,"bonusRangeStrength":20},"7997":{"name":"Corrupt Lizardman","hitpoints":50,"combatLevel":46,"attackSpeed":4,"attackLevel":38,"strengthLevel":38,"defenceLevel":38,"rangeLevel":38,"magicLevel":1,"range":20,"slashDef":25,"bonusAttack":22,"bonusStrength":20,"bonusRangeStrength":20},"8000":{"name":"Corrupt Lizardman","hitpoints":50,"combatLevel":46,"attackSpeed":4,"attackLevel":38,"strengthLevel":38,"defenceLevel":38,"rangeLevel":38,"magicLevel":1,"range":20,"slashDef":25,"bonusAttack":22,"bonusStrength":20,"bonusRangeStrength":20},"8027":{"name":"Rune dragon","hitpoints":330,"combatLevel":380,"attackSpeed":4,"attackLevel":284,"strengthLevel":284,"defenceLevel":276,"rangeLevel":246,"magicLevel":196,"stabDef":30,"slashDef":115,"crushDef":90,"rangeDef":95,"magicDef":30,"bonusRangeStrength":14,"poisonImmune":true,"venomImmune":true},"8030":{"name":"Adamant dragon","hitpoints":295,"combatLevel":338,"attackSpeed":4,"attackLevel":280,"strengthLevel":280,"defenceLevel":272,"rangeLevel":186,"magicLevel":186,"stabDef":30,"slashDef":110,"crushDef":85,"rangeDef":95,"magicDef":30,"dragon":true},"8031":{"name":"Rune dragon","hitpoints":330,"combatLevel":380,"attackSpeed":4,"attackLevel":284,"strengthLevel":284,"defenceLevel":276,"rangeLevel":246,"magicLevel":196,"stabDef":30,"slashDef":115,"crushDef":90,"rangeDef":95,"magicDef":30,"bonusRangeStrength":14,"dragon":true},"8033":{"name":"Elvarg","hitpoints":80,"combatLevel":83,"attackSpeed":4,"attackLevel":70,"strengthLevel":70,"defenceLevel":70,"rangeLevel":1,"magicLevel":70,"stabDef":20,"slashDef":40,"crushDef":40,"rangeDef":20,"magicDef":30},"8056":{"name":"Spawn","hitpoints":80,"combatLevel":100,"attackSpeed":4,"attackLevel":100,"strengthLevel":100,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"stab":1,"slash":1,"crush":1,"range":1,"magic":1,"stabDef":5,"slashDef":15,"crushDef":15,"rangeDef":5},"8057":{"name":"Robert the Strong","hitpoints":280,"combatLevel":194,"attackSpeed":4,"defenceLevel":140,"rangeLevel":328,"magicLevel":128,"range":126,"stabDef":140,"slashDef":180,"crushDef":60,"rangeDef":860,"magicDef":940,"poisonImmune":true,"venomImmune":true},"8058":{"name":"Vorkath","hitpoints":460,"combatLevel":392,"attackSpeed":5,"attackLevel":560,"strengthLevel":268,"defenceLevel":164,"rangeLevel":268,"magicLevel":148,"range":96,"magic":148,"stabDef":66,"slashDef":126,"crushDef":126,"rangeDef":80,"magicDef":204,"bonusAttack":14,"dragon":true,"undead":true},"8059":{"name":"Vorkath","hitpoints":750,"combatLevel":732,"attackSpeed":5,"attackLevel":560,"strengthLevel":308,"defenceLevel":214,"rangeLevel":308,"magicLevel":150,"range":78,"magic":150,"stabDef":26,"slashDef":108,"crushDef":108,"rangeDef":26,"magicDef":240,"bonusAttack":16,"dragon":true,"undead":true},"8060":{"name":"Vorkath","hitpoints":460,"combatLevel":392,"attackSpeed":5,"attackLevel":560,"strengthLevel":268,"defenceLevel":164,"rangeLevel":268,"magicLevel":148,"range":96,"magic":148,"stabDef":66,"slashDef":126,"crushDef":126,"rangeDef":80,"magicDef":204,"bonusAttack":14,"dragon":true,"undead":true},"8061":{"name":"Vorkath","hitpoints":750,"combatLevel":732,"attackSpeed":5,"attackLevel":560,"strengthLevel":308,"defenceLevel":214,"rangeLevel":308,"magicLevel":150,"range":78,"magic":150,"stabDef":26,"slashDef":108,"crushDef":108,"rangeDef":26,"magicDef":240,"bonusAttack":16,"dragon":true,"undead":true},"8062":{"name":"Zombified Spawn","hitpoints":8,"combatLevel":55,"attackLevel":80,"strengthLevel":80,"defenceLevel":4,"rangeLevel":1,"magicLevel":1,"stab":1,"slash":1,"crush":1,"range":1,"magic":1,"stabDef":3,"slashDef":3,"crushDef":3,"rangeDef":3,"undead":true},"8063":{"name":"Zombified Spawn","hitpoints":38,"combatLevel":64,"attackLevel":82,"strengthLevel":82,"defenceLevel":6,"rangeLevel":1,"magicLevel":1,"stab":1,"slash":1,"crush":1,"range":1,"magic":1,"stabDef":3,"slashDef":3,"crushDef":3,"rangeDef":3,"undead":true},"8064":{"name":"Stone Guardian","hitpoints":62,"combatLevel":124,"attackSpeed":5,"attackLevel":150,"strengthLevel":148,"defenceLevel":138,"rangeLevel":1,"magicLevel":118},"8065":{"name":"Stone Guardian","hitpoints":62,"combatLevel":124,"attackSpeed":5,"attackLevel":1,"strengthLevel":1,"defenceLevel":138,"rangeLevel":128,"magicLevel":118},"8066":{"name":"Stone Guardian","hitpoints":62,"combatLevel":124,"attackSpeed":5,"attackLevel":1,"strengthLevel":1,"defenceLevel":138,"rangeLevel":1,"magicLevel":128},"8067":{"name":"Zombie","hitpoints":54,"combatLevel":132,"attackSpeed":5,"attackLevel":160,"strengthLevel":180,"defenceLevel":62,"rangeLevel":1,"magicLevel":1,"stabDef":25,"slashDef":20,"crushDef":25,"rangeDef":30,"magicDef":10,"bonusAttack":30,"undead":true},"8068":{"name":"Zombie","hitpoints":54,"combatLevel":132,"attackSpeed":5,"attackLevel":160,"strengthLevel":1,"defenceLevel":62,"rangeLevel":180,"magicLevel":1,"range":20,"stabDef":15,"slashDef":10,"crushDef":15,"rangeDef":20,"magicDef":30,"undead":true},"8069":{"name":"Zombie","hitpoints":54,"combatLevel":132,"attackSpeed":5,"attackLevel":160,"strengthLevel":1,"defenceLevel":62,"rangeLevel":1,"magicLevel":180,"magic":20,"stabDef":35,"slashDef":30,"crushDef":35,"rangeDef":10,"magicDef":20,"undead":true},"8070":{"name":"Skeleton","hitpoints":54,"combatLevel":132,"attackSpeed":5,"attackLevel":160,"strengthLevel":180,"defenceLevel":62,"rangeLevel":1,"magicLevel":1,"stabDef":25,"slashDef":20,"crushDef":25,"rangeDef":30,"magicDef":10,"bonusAttack":30,"undead":true},"8071":{"name":"Skeleton","hitpoints":54,"combatLevel":132,"attackSpeed":5,"attackLevel":160,"strengthLevel":1,"defenceLevel":62,"rangeLevel":180,"magicLevel":1,"range":20,"stabDef":15,"slashDef":10,"crushDef":15,"rangeDef":20,"magicDef":30,"undead":true},"8072":{"name":"Skeleton","hitpoints":54,"combatLevel":132,"attackSpeed":5,"attackLevel":160,"strengthLevel":1,"defenceLevel":62,"rangeLevel":1,"magicLevel":180,"magic":20,"stabDef":35,"slashDef":30,"crushDef":35,"rangeDef":10,"magicDef":20,"undead":true},"8073":{"name":"Green dragon","hitpoints":75,"combatLevel":79,"attackSpeed":4,"attackLevel":68,"strengthLevel":68,"defenceLevel":68,"rangeLevel":1,"magicLevel":68,"stabDef":20,"slashDef":40,"crushDef":40,"rangeDef":20,"magicDef":30,"dragon":true},"8075":{"name":"Red dragon","hitpoints":140,"combatLevel":152,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":130,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"8076":{"name":"Green dragon","hitpoints":75,"combatLevel":79,"attackSpeed":4,"attackLevel":68,"strengthLevel":68,"defenceLevel":68,"rangeLevel":1,"magicLevel":68,"stabDef":20,"slashDef":40,"crushDef":40,"rangeDef":20,"magicDef":30,"dragon":true},"8078":{"name":"Red dragon","hitpoints":140,"combatLevel":152,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":130,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"8079":{"name":"Red dragon","hitpoints":140,"combatLevel":152,"attackSpeed":4,"attackLevel":130,"strengthLevel":130,"defenceLevel":130,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"8080":{"name":"Iron dragon","hitpoints":165,"combatLevel":189,"attackSpeed":4,"attackLevel":165,"strengthLevel":165,"defenceLevel":165,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":90,"magicDef":30,"dragon":true},"8081":{"name":"Brutal green dragon","hitpoints":175,"combatLevel":227,"attackSpeed":4,"attackLevel":268,"strengthLevel":168,"defenceLevel":168,"magicLevel":168,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"poisonImmune":true,"venomImmune":true,"dragon":true},"8082":{"name":"Green dragon","hitpoints":75,"combatLevel":79,"attackSpeed":4,"attackLevel":68,"strengthLevel":68,"defenceLevel":68,"rangeLevel":1,"magicLevel":68,"stabDef":20,"slashDef":40,"crushDef":40,"rangeDef":20,"magicDef":30,"dragon":true},"8083":{"name":"Blue dragon","hitpoints":105,"combatLevel":111,"attackSpeed":4,"attackLevel":95,"strengthLevel":95,"defenceLevel":95,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"8084":{"name":"Black dragon","hitpoints":190,"combatLevel":227,"attackSpeed":4,"attackLevel":200,"strengthLevel":200,"defenceLevel":200,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"8085":{"name":"Black dragon","hitpoints":190,"combatLevel":227,"attackSpeed":4,"attackLevel":200,"strengthLevel":200,"defenceLevel":200,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"dragon":true},"8086":{"name":"Steel dragon","hitpoints":210,"combatLevel":246,"attackSpeed":4,"attackLevel":215,"strengthLevel":215,"defenceLevel":215,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":90,"magicDef":30,"dragon":true},"8087":{"name":"Brutal red dragon","hitpoints":285,"combatLevel":289,"attackSpeed":4,"attackLevel":310,"strengthLevel":210,"defenceLevel":198,"magicLevel":250,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"poisonImmune":true,"venomImmune":true,"dragon":true},"8088":{"name":"Mithril dragon","hitpoints":254,"combatLevel":304,"attackSpeed":4,"attackLevel":268,"strengthLevel":268,"defenceLevel":268,"rangeLevel":168,"magicLevel":168,"stabDef":50,"slashDef":100,"crushDef":70,"rangeDef":90,"magicDef":30,"venomImmune":true,"dragon":true},"8089":{"name":"Mithril dragon","hitpoints":254,"combatLevel":304,"attackSpeed":4,"attackLevel":268,"strengthLevel":268,"defenceLevel":268,"rangeLevel":168,"magicLevel":168,"stabDef":50,"slashDef":100,"crushDef":70,"rangeDef":90,"magicDef":30,"venomImmune":true,"dragon":true},"8090":{"name":"Adamant dragon","hitpoints":295,"combatLevel":338,"attackSpeed":4,"attackLevel":280,"strengthLevel":280,"defenceLevel":272,"rangeLevel":186,"magicLevel":186,"stabDef":30,"slashDef":110,"crushDef":85,"rangeDef":95,"magicDef":30,"dragon":true},"8091":{"name":"Rune dragon","hitpoints":330,"combatLevel":380,"attackSpeed":4,"attackLevel":284,"strengthLevel":284,"defenceLevel":276,"rangeLevel":246,"magicLevel":196,"stabDef":30,"slashDef":115,"crushDef":90,"rangeDef":95,"magicDef":30,"bonusRangeStrength":14,"dragon":true},"8092":{"name":"Brutal black dragon","hitpoints":315,"combatLevel":318,"slayerLevel":77,"attackSpeed":4,"attackLevel":330,"strengthLevel":210,"defenceLevel":258,"magicLevel":250,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"bonusStrength":20,"poisonImmune":true,"venomImmune":true,"dragon":true},"8093":{"name":"Brutal black dragon","hitpoints":315,"combatLevel":318,"slayerLevel":77,"attackSpeed":4,"attackLevel":330,"strengthLevel":210,"defenceLevel":258,"magicLevel":250,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60,"bonusStrength":20,"poisonImmune":true,"venomImmune":true,"dragon":true},"8094":{"name":"Galvek","hitpoints":1200,"combatLevel":608,"attackSpeed":6,"attackLevel":632,"strengthLevel":268,"defenceLevel":188,"rangeLevel":246,"magicLevel":160,"range":180,"magic":160,"stabDef":80,"slashDef":140,"crushDef":140,"rangeDef":86,"magicDef":280,"bonusAttack":34,"bonusRangeStrength":6,"bonusMagicDamage":42,"poisonImmune":true,"venomImmune":true,"dragon":true},"8095":{"name":"Galvek","hitpoints":1200,"combatLevel":608,"attackSpeed":6,"attackLevel":632,"strengthLevel":268,"defenceLevel":188,"rangeLevel":246,"magicLevel":160,"range":180,"magic":160,"stabDef":80,"slashDef":140,"crushDef":140,"rangeDef":86,"magicDef":280,"bonusAttack":34,"bonusRangeStrength":6,"bonusMagicDamage":42,"poisonImmune":true,"venomImmune":true,"dragon":true},"8096":{"name":"Galvek","hitpoints":1200,"combatLevel":608,"attackSpeed":6,"attackLevel":632,"strengthLevel":268,"defenceLevel":188,"rangeLevel":246,"magicLevel":160,"range":180,"magic":160,"stabDef":80,"slashDef":140,"crushDef":140,"rangeDef":86,"magicDef":280,"bonusAttack":34,"bonusRangeStrength":6,"bonusMagicDamage":42,"poisonImmune":true,"venomImmune":true,"dragon":true},"8097":{"name":"Galvek","hitpoints":1200,"combatLevel":608,"attackSpeed":6,"attackLevel":632,"strengthLevel":268,"defenceLevel":188,"rangeLevel":246,"magicLevel":160,"range":180,"magic":160,"stabDef":80,"slashDef":140,"crushDef":140,"rangeDef":86,"magicDef":280,"bonusAttack":34,"bonusRangeStrength":6,"bonusMagicDamage":42,"poisonImmune":true,"venomImmune":true,"dragon":true},"8098":{"name":"Galvek","hitpoints":1200,"combatLevel":608,"attackSpeed":6,"attackLevel":632,"strengthLevel":268,"defenceLevel":188,"rangeLevel":246,"magicLevel":160,"range":180,"magic":160,"stabDef":80,"slashDef":140,"crushDef":140,"rangeDef":86,"magicDef":280,"bonusAttack":34,"bonusRangeStrength":6,"bonusMagicDamage":42,"poisonImmune":true,"venomImmune":true,"dragon":true},"8137":{"name":"Spider","hitpoints":4,"combatLevel":35,"attackSpeed":4,"attackLevel":45,"strengthLevel":47,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stab":1,"slash":1,"crush":1,"range":1,"magic":1,"stabDef":20,"slashDef":20,"crushDef":10,"rangeDef":20,"magicDef":17},"8138":{"name":"Spider","hitpoints":4,"combatLevel":35,"attackSpeed":4,"attackLevel":45,"strengthLevel":47,"defenceLevel":20,"rangeLevel":1,"magicLevel":1,"stab":1,"slash":1,"crush":1,"range":1,"magic":1,"stabDef":20,"slashDef":20,"crushDef":10,"rangeDef":20,"magicDef":17},"8149":{"name":"White Knight","hitpoints":52,"combatLevel":36,"attackSpeed":7,"attackLevel":27,"strengthLevel":29,"defenceLevel":21,"rangeLevel":1,"magicLevel":1,"stabDef":83,"slashDef":76,"crushDef":70,"rangeDef":74,"bonusAttack":30,"bonusStrength":31},"8150":{"name":"Paladin","hitpoints":66,"combatLevel":62,"attackSpeed":5,"attackLevel":54,"strengthLevel":54,"defenceLevel":54,"rangeLevel":1,"magicLevel":1,"stabDef":87,"slashDef":84,"crushDef":76,"rangeDef":79,"bonusAttack":20,"bonusStrength":22},"8177":{"name":"Galvek","hitpoints":1200,"combatLevel":608,"attackSpeed":6,"attackLevel":632,"strengthLevel":268,"defenceLevel":188,"rangeLevel":246,"magicLevel":160,"range":180,"magic":160,"stabDef":80,"slashDef":140,"crushDef":140,"rangeDef":86,"magicDef":280,"bonusAttack":34,"bonusRangeStrength":6,"bonusMagicDamage":42,"poisonImmune":true,"venomImmune":true,"dragon":true},"8178":{"name":"Galvek","hitpoints":1200,"combatLevel":608,"attackSpeed":6,"attackLevel":632,"strengthLevel":268,"defenceLevel":188,"rangeLevel":246,"magicLevel":160,"range":180,"magic":160,"stabDef":80,"slashDef":140,"crushDef":140,"rangeDef":86,"magicDef":280,"bonusAttack":34,"bonusRangeStrength":6,"bonusMagicDamage":42,"poisonImmune":true,"venomImmune":true,"dragon":true},"8179":{"name":"Galvek","hitpoints":1200,"combatLevel":608,"attackSpeed":6,"attackLevel":632,"strengthLevel":268,"defenceLevel":188,"rangeLevel":246,"magicLevel":160,"range":180,"magic":160,"stabDef":80,"slashDef":140,"crushDef":140,"rangeDef":86,"magicDef":280,"bonusAttack":34,"bonusRangeStrength":6,"bonusMagicDamage":42,"poisonImmune":true,"venomImmune":true,"dragon":true},"8194":{"name":"Growthling","hitpoints":10,"combatLevel":37,"attackSpeed":4,"attackLevel":40,"strengthLevel":38,"defenceLevel":40,"rangeLevel":1,"magicLevel":1,"poisonImmune":true,"venomImmune":true},"8195":{"name":"Bryophyta","hitpoints":115,"combatLevel":128,"attackSpeed":6,"attackLevel":130,"strengthLevel":100,"defenceLevel":100,"rangeLevel":1,"magicLevel":90,"bonusAttack":33,"bonusStrength":31},"8239":{"name":"Vanstrom Klause","hitpoints":155,"combatLevel":169,"attackSpeed":8,"attackLevel":150,"strengthLevel":136,"defenceLevel":150,"rangeLevel":150,"magicLevel":150,"poisonImmune":true,"venomImmune":true},"8240":{"name":"Vanstrom Klause","hitpoints":155,"combatLevel":169,"attackSpeed":8,"attackLevel":150,"strengthLevel":136,"defenceLevel":150,"rangeLevel":150,"magicLevel":150,"poisonImmune":true,"venomImmune":true},"8242":{"name":"Ranis Drakan","hitpoints":400,"combatLevel":233,"attackSpeed":5,"attackLevel":120,"strengthLevel":120,"defenceLevel":120,"rangeLevel":1,"magicLevel":120,"stabDef":60,"slashDef":60,"crushDef":60,"rangeDef":60,"magicDef":60,"bonusStrength":34,"bonusMagicDamage":34,"poisonImmune":true,"venomImmune":true},"8243":{"name":"Ranis Drakan","hitpoints":400,"combatLevel":233,"attackSpeed":5,"attackLevel":120,"strengthLevel":120,"defenceLevel":120,"rangeLevel":1,"magicLevel":120,"stabDef":60,"slashDef":60,"crushDef":60,"rangeDef":60,"magicDef":60,"bonusStrength":34,"bonusMagicDamage":34,"poisonImmune":true,"venomImmune":true},"8244":{"name":"Ranis Drakan","hitpoints":400,"combatLevel":233,"attackSpeed":5,"attackLevel":120,"strengthLevel":120,"defenceLevel":120,"rangeLevel":1,"magicLevel":120,"stabDef":60,"slashDef":60,"crushDef":60,"rangeDef":60,"magicDef":60,"bonusStrength":34,"bonusMagicDamage":34,"poisonImmune":true,"venomImmune":true},"8245":{"name":"Ranis Drakan","hitpoints":400,"combatLevel":233,"attackSpeed":5,"attackLevel":120,"strengthLevel":120,"defenceLevel":120,"rangeLevel":1,"magicLevel":120,"stabDef":60,"slashDef":60,"crushDef":60,"rangeDef":60,"magicDef":60,"bonusStrength":34,"bonusMagicDamage":34,"poisonImmune":true,"venomImmune":true},"8246":{"name":"Ranis Drakan","hitpoints":400,"combatLevel":233,"attackSpeed":5,"attackLevel":120,"strengthLevel":120,"defenceLevel":120,"rangeLevel":1,"magicLevel":120,"stabDef":60,"slashDef":60,"crushDef":60,"rangeDef":60,"magicDef":60,"bonusStrength":34,"bonusMagicDamage":34,"poisonImmune":true,"venomImmune":true},"8247":{"name":"Ranis Drakan","hitpoints":400,"combatLevel":233,"attackSpeed":5,"attackLevel":120,"strengthLevel":120,"defenceLevel":120,"rangeLevel":1,"magicLevel":120,"stabDef":60,"slashDef":60,"crushDef":60,"rangeDef":60,"magicDef":60,"bonusStrength":34,"bonusMagicDamage":34,"poisonImmune":true,"venomImmune":true},"8248":{"name":"Ranis Drakan","hitpoints":400,"combatLevel":233,"attackSpeed":2,"attackLevel":120,"strengthLevel":120,"defenceLevel":120,"rangeLevel":1,"magicLevel":120,"stabDef":60,"slashDef":60,"crushDef":60,"rangeDef":60,"magicDef":60,"bonusAttack":160,"bonusMagicDamage":34,"poisonImmune":true,"venomImmune":true},"8251":{"name":"Vyrewatch","hitpoints":75,"combatLevel":87,"attackSpeed":4,"attackLevel":80,"strengthLevel":75,"defenceLevel":75,"rangeLevel":1,"magicLevel":75},"8252":{"name":"Vyrewatch","hitpoints":75,"combatLevel":87,"attackSpeed":4,"attackLevel":80,"strengthLevel":75,"defenceLevel":75,"rangeLevel":1,"magicLevel":75},"8253":{"name":"Vyrewatch","hitpoints":75,"combatLevel":87,"attackSpeed":4,"attackLevel":80,"strengthLevel":75,"defenceLevel":75,"rangeLevel":1,"magicLevel":75},"8254":{"name":"Vyrewatch","hitpoints":75,"combatLevel":87,"attackSpeed":4,"attackLevel":80,"strengthLevel":75,"defenceLevel":75,"rangeLevel":1,"magicLevel":75},"8255":{"name":"Vyrewatch","hitpoints":75,"combatLevel":87,"attackSpeed":4,"attackLevel":80,"strengthLevel":75,"defenceLevel":75,"rangeLevel":1,"magicLevel":75},"8256":{"name":"Vyrewatch","hitpoints":75,"combatLevel":87,"attackSpeed":4,"attackLevel":80,"strengthLevel":75,"defenceLevel":75,"rangeLevel":1,"magicLevel":75},"8257":{"name":"Vyrewatch","hitpoints":75,"combatLevel":87,"attackSpeed":4,"attackLevel":80,"strengthLevel":75,"defenceLevel":75,"rangeLevel":1,"magicLevel":75},"8258":{"name":"Vyrewatch","hitpoints":75,"combatLevel":87,"attackSpeed":4,"attackLevel":80,"strengthLevel":75,"defenceLevel":75,"rangeLevel":1,"magicLevel":75},"8259":{"name":"Vyrewatch","hitpoints":75,"combatLevel":87,"attackSpeed":4,"attackLevel":80,"strengthLevel":75,"defenceLevel":75,"rangeLevel":1,"magicLevel":75},"8260":{"name":"Abomination","hitpoints":200,"combatLevel":149,"attackSpeed":5,"attackLevel":110,"strengthLevel":110,"defenceLevel":110,"rangeLevel":110,"magicLevel":110,"stabDef":80,"slashDef":80,"crushDef":80,"rangeDef":180,"magicDef":20},"8261":{"name":"Abomination","hitpoints":200,"combatLevel":149,"attackSpeed":5,"attackLevel":110,"strengthLevel":110,"defenceLevel":110,"rangeLevel":110,"magicLevel":110,"stabDef":80,"slashDef":80,"crushDef":80,"rangeDef":180,"magicDef":20},"8262":{"name":"Abomination","hitpoints":200,"combatLevel":149,"attackSpeed":5,"attackLevel":110,"strengthLevel":110,"defenceLevel":110,"rangeLevel":110,"magicLevel":110,"stabDef":80,"slashDef":80,"crushDef":80,"rangeDef":180,"magicDef":20},"8297":{"name":"Swamp Crab","hitpoints":75,"combatLevel":55,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":50,"rangeLevel":1,"magicLevel":50,"stabDef":100,"slashDef":100,"crushDef":100,"magicDef":100},"8298":{"name":"Swamp Crab","hitpoints":75,"combatLevel":55,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":50,"rangeLevel":1,"magicLevel":50,"stabDef":100,"slashDef":100,"crushDef":100,"magicDef":100},"8299":{"name":"Swampy log","hitpoints":75,"combatLevel":55,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":50,"rangeLevel":1,"magicLevel":50,"stabDef":100,"slashDef":100,"crushDef":100,"magicDef":100},"8300":{"name":"Vyrewatch","hitpoints":90,"combatLevel":105,"attackSpeed":4,"attackLevel":105,"strengthLevel":86,"defenceLevel":85,"rangeLevel":105,"magicLevel":105},"8301":{"name":"Vyrewatch","hitpoints":90,"combatLevel":105,"attackSpeed":4,"attackLevel":105,"strengthLevel":86,"defenceLevel":85,"rangeLevel":105,"magicLevel":105},"8302":{"name":"Vyrewatch","hitpoints":90,"combatLevel":105,"attackSpeed":4,"attackLevel":105,"strengthLevel":86,"defenceLevel":85,"rangeLevel":105,"magicLevel":105},"8303":{"name":"Vyrewatch","hitpoints":90,"combatLevel":105,"attackSpeed":4,"attackLevel":105,"strengthLevel":86,"defenceLevel":85,"rangeLevel":105,"magicLevel":105},"8304":{"name":"Vyrewatch","hitpoints":90,"combatLevel":105,"attackSpeed":4,"attackLevel":105,"strengthLevel":86,"defenceLevel":85,"rangeLevel":105,"magicLevel":105},"8305":{"name":"Vyrewatch","hitpoints":90,"combatLevel":105,"attackSpeed":4,"attackLevel":105,"strengthLevel":86,"defenceLevel":85,"rangeLevel":105,"magicLevel":105},"8306":{"name":"Vyrewatch","hitpoints":90,"combatLevel":105,"attackSpeed":4,"attackLevel":105,"strengthLevel":86,"defenceLevel":85,"rangeLevel":105,"magicLevel":105},"8307":{"name":"Vyrewatch","hitpoints":90,"combatLevel":105,"attackSpeed":4,"attackLevel":105,"strengthLevel":86,"defenceLevel":85,"rangeLevel":105,"magicLevel":105},"8340":{"name":"Xarpus","hitpoints":5080,"combatLevel":960,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":250,"rangeLevel":1,"magicLevel":220,"rangeDef":160},"8341":{"name":"Xarpus","hitpoints":5080,"combatLevel":960,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":250,"rangeLevel":1,"magicLevel":220,"rangeDef":160},"8342":{"name":"Nylocas Ischyros","hitpoints":11,"combatLevel":162,"attackSpeed":3,"attackLevel":200,"strengthLevel":160,"defenceLevel":1,"rangeLevel":200,"magicLevel":1,"magic":1073,"bonusMagicDamage":928},"8343":{"name":"Nylocas Toxobolos","hitpoints":11,"combatLevel":162,"attackSpeed":3,"attackLevel":200,"strengthLevel":160,"defenceLevel":1,"rangeLevel":200,"magicLevel":1,"magic":1073,"bonusMagicDamage":928},"8344":{"name":"Nylocas Hagios","hitpoints":11,"combatLevel":162,"attackSpeed":3,"attackLevel":200,"strengthLevel":160,"defenceLevel":1,"rangeLevel":200,"magicLevel":1,"magic":1073,"bonusMagicDamage":928},"8345":{"name":"Nylocas Ischyros","hitpoints":22,"combatLevel":260,"attackSpeed":3,"attackLevel":250,"strengthLevel":230,"defenceLevel":20,"rangeLevel":250,"magicLevel":20,"magic":500,"bonusMagicDamage":500},"8346":{"name":"Nylocas Toxobolos","hitpoints":22,"combatLevel":260,"attackSpeed":3,"attackLevel":250,"strengthLevel":230,"defenceLevel":20,"rangeLevel":250,"magicLevel":20,"magic":500,"bonusMagicDamage":500},"8347":{"name":"Nylocas Hagios","hitpoints":22,"combatLevel":260,"attackSpeed":3,"attackLevel":250,"strengthLevel":230,"defenceLevel":20,"rangeLevel":250,"magicLevel":20,"magic":500,"bonusMagicDamage":500},"8348":{"name":"Nylocas Ischyros","hitpoints":11,"combatLevel":162,"attackSpeed":3,"attackLevel":200,"strengthLevel":160,"defenceLevel":1,"rangeLevel":200,"magicLevel":1,"magic":1073,"bonusMagicDamage":928},"8349":{"name":"Nylocas Toxobolos","hitpoints":11,"combatLevel":162,"attackSpeed":3,"attackLevel":200,"strengthLevel":160,"defenceLevel":1,"rangeLevel":200,"magicLevel":1,"magic":1073,"bonusMagicDamage":928},"8350":{"name":"Nylocas Hagios","hitpoints":11,"combatLevel":162,"attackSpeed":3,"attackLevel":200,"strengthLevel":160,"defenceLevel":1,"rangeLevel":200,"magicLevel":1,"magic":1073,"bonusMagicDamage":928},"8351":{"name":"Nylocas Ischyros","hitpoints":22,"combatLevel":260,"attackSpeed":3,"attackLevel":250,"strengthLevel":230,"defenceLevel":20,"rangeLevel":250,"magicLevel":20,"magic":500,"bonusMagicDamage":500},"8352":{"name":"Nylocas Toxobolos","hitpoints":22,"combatLevel":260,"attackSpeed":3,"attackLevel":250,"strengthLevel":230,"defenceLevel":20,"rangeLevel":250,"magicLevel":20,"magic":500,"bonusMagicDamage":500},"8353":{"name":"Nylocas Hagios","hitpoints":22,"combatLevel":260,"attackSpeed":3,"attackLevel":250,"strengthLevel":230,"defenceLevel":20,"rangeLevel":250,"magicLevel":20,"magic":500,"bonusMagicDamage":500},"8355":{"name":"Nylocas Vasilias","hitpoints":2500,"combatLevel":800,"attackSpeed":4,"attackLevel":400,"strengthLevel":350,"defenceLevel":50,"rangeLevel":350,"magicLevel":50,"magic":600,"bonusStrength":60,"bonusRangeStrength":60,"bonusMagicDamage":600},"8356":{"name":"Nylocas Vasilias","hitpoints":2500,"combatLevel":800,"attackSpeed":4,"attackLevel":400,"strengthLevel":350,"defenceLevel":50,"rangeLevel":350,"magicLevel":50,"magic":600,"bonusStrength":60,"bonusRangeStrength":60,"bonusMagicDamage":600},"8357":{"name":"Nylocas Vasilias","hitpoints":2500,"combatLevel":800,"attackSpeed":4,"attackLevel":400,"strengthLevel":350,"defenceLevel":50,"rangeLevel":350,"magicLevel":50,"magic":600,"bonusStrength":60,"bonusRangeStrength":60,"bonusMagicDamage":600},"8359":{"name":"Pestilent Bloat","hitpoints":2000,"combatLevel":870,"attackSpeed":1,"attackLevel":250,"strengthLevel":340,"defenceLevel":100,"rangeLevel":180,"magicLevel":150,"range":180,"stabDef":40,"slashDef":20,"crushDef":40,"rangeDef":800,"magicDef":600,"bonusAttack":150,"bonusStrength":82,"bonusRangeStrength":4,"undead":true},"8360":{"name":"The Maiden of Sugadinti","hitpoints":3500,"combatLevel":940,"attackSpeed":10,"attackLevel":350,"strengthLevel":350,"defenceLevel":200,"rangeLevel":350,"magicLevel":350,"magic":300},"8361":{"name":"The Maiden of Sugadinti","hitpoints":3500,"combatLevel":940,"attackSpeed":10,"attackLevel":350,"strengthLevel":350,"defenceLevel":200,"rangeLevel":350,"magicLevel":350,"magic":300},"8362":{"name":"The Maiden of Sugadinti","hitpoints":3500,"combatLevel":940,"attackSpeed":10,"attackLevel":350,"strengthLevel":350,"defenceLevel":200,"rangeLevel":350,"magicLevel":350,"magic":300},"8363":{"name":"The Maiden of Sugadinti","hitpoints":3500,"combatLevel":940,"attackSpeed":10,"attackLevel":350,"strengthLevel":350,"defenceLevel":200,"rangeLevel":350,"magicLevel":350,"magic":300},"8366":{"name":"Nylocas Matomenos","hitpoints":200,"combatLevel":115,"attackLevel":100,"strengthLevel":100,"defenceLevel":100,"rangeLevel":100,"magicLevel":100},"8367":{"name":"Blood spawn","hitpoints":120,"combatLevel":55,"attackLevel":1,"strengthLevel":1,"rangeLevel":1},"8369":{"name":"Verzik Vitur","hitpoints":2000,"combatLevel":1040,"attackSpeed":4,"attackLevel":400,"strengthLevel":400,"defenceLevel":20,"rangeLevel":400,"magicLevel":400,"range":80,"magic":80,"stabDef":20,"slashDef":20,"crushDef":20,"rangeDef":20,"magicDef":20,"bonusRangeStrength":80,"bonusMagicDamage":150},"8370":{"name":"Verzik Vitur","hitpoints":2000,"combatLevel":1040,"attackSpeed":4,"attackLevel":400,"strengthLevel":400,"defenceLevel":20,"rangeLevel":400,"magicLevel":400,"range":80,"magic":80,"stabDef":20,"slashDef":20,"crushDef":20,"rangeDef":20,"magicDef":20,"bonusRangeStrength":80,"bonusMagicDamage":150},"8371":{"name":"Verzik Vitur","hitpoints":2000,"combatLevel":1040,"attackSpeed":4,"attackLevel":400,"strengthLevel":400,"defenceLevel":20,"rangeLevel":400,"magicLevel":400,"range":80,"magic":80,"stabDef":20,"slashDef":20,"crushDef":20,"rangeDef":20,"magicDef":20,"bonusRangeStrength":80,"bonusMagicDamage":150},"8372":{"name":"Verzik Vitur","hitpoints":3250,"combatLevel":1265,"attackSpeed":4,"attackLevel":400,"strengthLevel":400,"defenceLevel":200,"rangeLevel":400,"magicLevel":400,"range":80,"magic":80,"stabDef":100,"slashDef":60,"crushDef":100,"rangeDef":250,"magicDef":70,"bonusRangeStrength":80,"bonusMagicDamage":80},"8373":{"name":"Verzik Vitur","hitpoints":3250,"combatLevel":1265,"attackSpeed":4,"attackLevel":400,"strengthLevel":400,"defenceLevel":200,"rangeLevel":400,"magicLevel":400,"range":80,"magic":80,"stabDef":100,"slashDef":60,"crushDef":100,"rangeDef":250,"magicDef":70,"bonusRangeStrength":80,"bonusMagicDamage":80},"8374":{"name":"Verzik Vitur","hitpoints":3250,"combatLevel":1520,"attackSpeed":7,"attackLevel":400,"strengthLevel":400,"defenceLevel":150,"rangeLevel":300,"magicLevel":300,"range":80,"magic":80,"stabDef":70,"slashDef":30,"crushDef":70,"rangeDef":230,"magicDef":100,"bonusAttack":80,"bonusStrength":30,"bonusRangeStrength":5,"bonusMagicDamage":5},"8375":{"name":"Verzik Vitur","hitpoints":3250,"combatLevel":1520,"attackSpeed":7,"attackLevel":400,"strengthLevel":400,"defenceLevel":150,"rangeLevel":300,"magicLevel":300,"range":80,"magic":80,"stabDef":70,"slashDef":30,"crushDef":70,"rangeDef":230,"magicDef":100,"bonusAttack":80,"bonusStrength":30,"bonusRangeStrength":5,"bonusMagicDamage":5},"8381":{"name":"Nylocas Ischyros","hitpoints":11,"combatLevel":162,"attackSpeed":3,"attackLevel":200,"strengthLevel":160,"defenceLevel":1,"rangeLevel":200,"magicLevel":1,"magic":1073,"bonusMagicDamage":928},"8382":{"name":"Nylocas Toxobolos","hitpoints":11,"combatLevel":162,"attackSpeed":3,"attackLevel":200,"strengthLevel":160,"defenceLevel":1,"rangeLevel":200,"magicLevel":1,"magic":1073,"bonusMagicDamage":928},"8383":{"name":"Nylocas Hagios","hitpoints":11,"combatLevel":162,"attackSpeed":3,"attackLevel":200,"strengthLevel":160,"defenceLevel":1,"rangeLevel":200,"magicLevel":1,"magic":1073,"bonusMagicDamage":928},"8384":{"name":"Nylocas Athanatos","hitpoints":180,"combatLevel":350,"attackLevel":1,"strengthLevel":1,"defenceLevel":50,"rangeLevel":1,"magicLevel":50},"8385":{"name":"Nylocas Matomenos","hitpoints":200,"combatLevel":115,"attackLevel":100,"strengthLevel":100,"defenceLevel":100,"rangeLevel":100,"magicLevel":100},"8387":{"name":"Sotetseg","hitpoints":4000,"combatLevel":995,"attackSpeed":5,"attackLevel":250,"strengthLevel":250,"defenceLevel":200,"magicLevel":250,"stabDef":70,"slashDef":70,"crushDef":70,"rangeDef":150,"magicDef":30,"bonusStrength":49,"poisonImmune":true,"venomImmune":true},"8388":{"name":"Sotetseg","hitpoints":4000,"combatLevel":995,"attackSpeed":5,"attackLevel":250,"strengthLevel":250,"defenceLevel":200,"magicLevel":250,"stabDef":70,"slashDef":70,"crushDef":70,"rangeDef":150,"magicDef":30,"bonusStrength":49,"poisonImmune":true,"venomImmune":true},"8400":{"name":"Monk of Zamorak","hitpoints":20,"combatLevel":22,"attackSpeed":4,"attackLevel":18,"strengthLevel":18,"defenceLevel":22,"rangeLevel":1,"magicLevel":25},"8401":{"name":"Monk of Zamorak","hitpoints":10,"combatLevel":17,"attackSpeed":4,"attackLevel":8,"strengthLevel":8,"defenceLevel":12,"rangeLevel":1,"magicLevel":25},"8428":{"name":"Mother","hitpoints":235,"combatLevel":198,"attackSpeed":4,"attackLevel":150,"strengthLevel":150,"defenceLevel":170,"rangeLevel":105,"magicLevel":60,"magicDef":200,"bonusAttack":60,"bonusStrength":50},"8429":{"name":"Mother","hitpoints":235,"combatLevel":198,"attackSpeed":4,"attackLevel":150,"strengthLevel":150,"defenceLevel":170,"rangeLevel":105,"magicLevel":60,"magicDef":200,"bonusAttack":60,"bonusStrength":50},"8430":{"name":"Mother","hitpoints":235,"combatLevel":198,"attackSpeed":4,"attackLevel":150,"strengthLevel":150,"defenceLevel":170,"rangeLevel":105,"magicLevel":60,"magicDef":200,"bonusAttack":60,"bonusStrength":50},"8439":{"name":"Don't Know What","hitpoints":220,"combatLevel":163,"attackSpeed":3,"attackLevel":120,"strengthLevel":90,"defenceLevel":160,"rangeLevel":115,"magicLevel":60,"magicDef":200,"bonusRangeStrength":40},"8474":{"name":"Black Guard","hitpoints":40,"combatLevel":48,"attackSpeed":3,"attackLevel":40,"strengthLevel":45,"defenceLevel":45,"rangeLevel":1,"magicLevel":1,"stabDef":40,"slashDef":40,"crushDef":40,"rangeDef":40,"bonusAttack":30,"bonusStrength":30},"8475":{"name":"Black Guard","hitpoints":40,"combatLevel":48,"attackSpeed":3,"attackLevel":40,"strengthLevel":45,"defenceLevel":45,"rangeLevel":1,"magicLevel":1,"stabDef":40,"slashDef":40,"crushDef":40,"rangeDef":40,"bonusAttack":30,"bonusStrength":30},"8476":{"name":"Black Guard","hitpoints":40,"combatLevel":48,"attackSpeed":3,"attackLevel":40,"strengthLevel":45,"defenceLevel":45,"rangeLevel":1,"magicLevel":1,"stabDef":40,"slashDef":40,"crushDef":40,"rangeDef":40,"bonusAttack":30,"bonusStrength":30},"8496":{"name":"Dwarf","hitpoints":16,"combatLevel":10,"attackSpeed":5},"8512":{"name":"Tormented Soul","hitpoints":20,"combatLevel":16,"attackSpeed":4,"attackLevel":16,"strengthLevel":12,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"8513":{"name":"Tormented Soul","hitpoints":20,"combatLevel":16,"attackSpeed":4,"attackLevel":16,"strengthLevel":12,"defenceLevel":10,"rangeLevel":1,"magicLevel":1},"8514":{"name":"Trapped Soul","hitpoints":30,"combatLevel":30,"attackSpeed":4,"attackLevel":25,"strengthLevel":29,"defenceLevel":20,"rangeLevel":1,"magicLevel":1},"8528":{"name":"Trapped Soul","hitpoints":30,"combatLevel":30,"attackSpeed":4,"attackLevel":25,"strengthLevel":29,"defenceLevel":20,"rangeLevel":1,"magicLevel":1},"8529":{"name":"Trapped Soul (hard)","hitpoints":100,"combatLevel":101,"attackSpeed":4,"attackLevel":100,"strengthLevel":120,"defenceLevel":20,"rangeLevel":1,"magicLevel":1},"8563":{"name":"Lizardman","hitpoints":60,"combatLevel":62,"attackSpeed":4,"attackLevel":53,"strengthLevel":53,"defenceLevel":52,"rangeLevel":1,"magicLevel":1,"range":28,"slashDef":20,"crushDef":5,"bonusAttack":28,"bonusStrength":25,"bonusRangeStrength":25},"8564":{"name":"Lizardman brute","hitpoints":60,"combatLevel":73,"attackSpeed":4,"attackLevel":65,"strengthLevel":65,"defenceLevel":65,"rangeLevel":1,"magicLevel":1,"range":34,"slashDef":30,"crushDef":10,"bonusAttack":34,"bonusStrength":30,"bonusRangeStrength":30},"8565":{"name":"Lizardman shaman","hitpoints":150,"combatLevel":150,"attackSpeed":4,"attackLevel":120,"strengthLevel":120,"defenceLevel":140,"rangeLevel":120,"magicLevel":130,"range":45,"slashDef":40,"crushDef":30,"magicDef":50,"bonusAttack":45,"bonusStrength":38,"bonusRangeStrength":38},"8578":{"name":"Swamp frog","hitpoints":25,"combatLevel":24,"attackSpeed":4,"attackLevel":25,"strengthLevel":20,"defenceLevel":15,"rangeLevel":1,"magicLevel":1},"8583":{"name":"Hespori","hitpoints":300,"combatLevel":284,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":120,"rangeLevel":150,"magicLevel":126,"range":150,"magic":150,"stabDef":60,"slashDef":20,"crushDef":60,"rangeDef":80,"magicDef":80},"8584":{"name":"Flower","hitpoints":10},"8609":{"name":"Hydra","hitpoints":300,"combatLevel":194,"slayerLevel":95,"attackSpeed":6,"attackLevel":1,"strengthLevel":1,"defenceLevel":100,"rangeLevel":210,"magicLevel":210,"stabDef":160,"slashDef":160,"crushDef":160,"magicDef":160,"dragon":true},"8610":{"name":"Wyrm","hitpoints":130,"combatLevel":99,"slayerLevel":62,"attackSpeed":4,"attackLevel":85,"strengthLevel":60,"defenceLevel":80,"rangeLevel":80,"magicLevel":80,"stabDef":20,"slashDef":50,"crushDef":50,"rangeDef":20,"magicDef":50,"bonusStrength":30,"bonusMagicDamage":30,"dragon":true},"8611":{"name":"Wyrm","hitpoints":130,"combatLevel":99,"slayerLevel":62,"attackSpeed":4,"attackLevel":85,"strengthLevel":60,"defenceLevel":80,"rangeLevel":80,"magicLevel":80,"stabDef":20,"slashDef":50,"crushDef":50,"rangeDef":20,"magicDef":50,"bonusStrength":30,"bonusMagicDamage":30,"dragon":true},"8612":{"name":"Drake","hitpoints":250,"combatLevel":192,"slayerLevel":84,"attackSpeed":4,"attackLevel":140,"strengthLevel":118,"defenceLevel":120,"rangeLevel":140,"magicLevel":112,"range":40,"stabDef":60,"slashDef":60,"crushDef":60,"rangeDef":100,"magicDef":20,"bonusAttack":40,"bonusStrength":12,"bonusRangeStrength":40,"dragon":true},"8613":{"name":"Drake","hitpoints":250,"combatLevel":192,"slayerLevel":84,"attackSpeed":4,"attackLevel":140,"strengthLevel":118,"defenceLevel":120,"rangeLevel":140,"magicLevel":112,"range":40,"stabDef":60,"slashDef":60,"crushDef":60,"rangeDef":100,"magicDef":20,"bonusAttack":40,"bonusStrength":12,"bonusRangeStrength":40,"dragon":true},"8614":{"name":"Sulphur Lizard","hitpoints":50,"combatLevel":50,"slayerLevel":44,"attackSpeed":4,"attackLevel":50,"strengthLevel":45,"defenceLevel":30,"rangeLevel":1,"magicLevel":1,"stabDef":15,"slashDef":25,"crushDef":25,"rangeDef":15},"8615":{"name":"Alchemical Hydra","hitpoints":1100,"combatLevel":426,"slayerLevel":95,"attackSpeed":6,"attackLevel":100,"strengthLevel":100,"defenceLevel":100,"rangeLevel":260,"magicLevel":260,"range":45,"magic":45,"stabDef":75,"slashDef":150,"crushDef":150,"rangeDef":45,"magicDef":150,"bonusRangeStrength":20,"bonusMagicDamage":20,"dragon":true},"8616":{"name":"Alchemical Hydra","hitpoints":1100,"combatLevel":426,"slayerLevel":95,"attackSpeed":6,"attackLevel":100,"strengthLevel":100,"defenceLevel":100,"rangeLevel":260,"magicLevel":260,"range":45,"magic":45,"stabDef":75,"slashDef":150,"crushDef":150,"rangeDef":45,"magicDef":150,"bonusRangeStrength":20,"bonusMagicDamage":20,"dragon":true},"8617":{"name":"Alchemical Hydra","hitpoints":1100,"combatLevel":426,"slayerLevel":95,"attackSpeed":6,"attackLevel":100,"strengthLevel":100,"defenceLevel":100,"rangeLevel":260,"magicLevel":260,"range":45,"magic":45,"stabDef":75,"slashDef":150,"crushDef":150,"rangeDef":45,"magicDef":150,"bonusRangeStrength":20,"bonusMagicDamage":20,"dragon":true},"8618":{"name":"Alchemical Hydra","hitpoints":1100,"combatLevel":426,"slayerLevel":95,"attackSpeed":6,"attackLevel":100,"strengthLevel":100,"defenceLevel":100,"rangeLevel":260,"magicLevel":260,"range":45,"magic":45,"stabDef":75,"slashDef":150,"crushDef":150,"rangeDef":45,"magicDef":150,"bonusRangeStrength":20,"bonusMagicDamage":20,"dragon":true},"8619":{"name":"Alchemical Hydra","hitpoints":1100,"combatLevel":426,"slayerLevel":95,"attackSpeed":6,"attackLevel":100,"strengthLevel":100,"defenceLevel":100,"rangeLevel":260,"magicLevel":260,"range":45,"magic":45,"stabDef":75,"slashDef":150,"crushDef":150,"rangeDef":45,"magicDef":150,"bonusRangeStrength":20,"bonusMagicDamage":20,"dragon":true},"8620":{"name":"Alchemical Hydra","hitpoints":1100,"combatLevel":426,"slayerLevel":95,"attackSpeed":6,"attackLevel":100,"strengthLevel":100,"defenceLevel":100,"rangeLevel":260,"magicLevel":260,"range":45,"magic":45,"stabDef":75,"slashDef":150,"crushDef":150,"rangeDef":45,"magicDef":150,"bonusRangeStrength":20,"bonusMagicDamage":20,"dragon":true},"8621":{"name":"Alchemical Hydra","hitpoints":1100,"combatLevel":426,"slayerLevel":95,"attackSpeed":4,"attackLevel":100,"strengthLevel":100,"defenceLevel":100,"rangeLevel":260,"magicLevel":260,"range":45,"magic":45,"stabDef":75,"slashDef":150,"crushDef":150,"rangeDef":45,"magicDef":150,"bonusRangeStrength":20,"bonusMagicDamage":20,"dragon":true},"8622":{"name":"Alchemical Hydra","hitpoints":1100,"combatLevel":426,"slayerLevel":95,"attackSpeed":4,"attackLevel":100,"strengthLevel":100,"defenceLevel":100,"rangeLevel":260,"magicLevel":260,"range":45,"magic":45,"stabDef":75,"slashDef":150,"crushDef":150,"rangeDef":45,"magicDef":150,"bonusRangeStrength":20,"bonusMagicDamage":20,"dragon":true},"8633":{"name":"The Mimic","hitpoints":230,"combatLevel":186,"attackSpeed":3,"attackLevel":185,"strengthLevel":120,"defenceLevel":120,"rangeLevel":1,"magicLevel":60,"magic":180,"stabDef":160,"slashDef":165,"crushDef":150,"rangeDef":145,"magicDef":30,"bonusAttack":135,"bonusStrength":48},"8635":{"name":"Third Age Warrior","hitpoints":40,"combatLevel":83,"attackSpeed":5,"attackLevel":90,"strengthLevel":75,"defenceLevel":80,"rangeLevel":1,"magicLevel":1,"stabDef":96,"slashDef":108,"crushDef":113,"rangeDef":97,"bonusAttack":105,"bonusStrength":75},"8636":{"name":"Third Age Ranger","hitpoints":40,"combatLevel":76,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":80,"rangeLevel":95,"magicLevel":1,"range":140,"stabDef":55,"slashDef":47,"crushDef":60,"rangeDef":55,"magicDef":60,"bonusRangeStrength":7},"8637":{"name":"Third Age Mage","hitpoints":40,"combatLevel":83,"attackSpeed":4,"attackLevel":1,"strengthLevel":1,"defenceLevel":80,"rangeLevel":1,"magicLevel":110,"magic":145,"stabDef":5,"slashDef":6,"crushDef":5,"magicDef":65,"bonusMagicDamage":24},"8678":{"name":"Feral Vampyre","hitpoints":50,"combatLevel":72,"attackSpeed":4,"attackLevel":65,"strengthLevel":70,"defenceLevel":65,"rangeLevel":1,"magicLevel":50},"8698":{"name":"Monk of Zamorak","hitpoints":16,"combatLevel":23,"attackSpeed":4,"attackLevel":15,"strengthLevel":13,"defenceLevel":18,"rangeLevel":1,"magicLevel":30},"8701":{"name":"Big frog","hitpoints":18,"combatLevel":10,"attackSpeed":4,"attackLevel":8,"strengthLevel":6,"defenceLevel":4,"rangeLevel":1,"magicLevel":1},"8702":{"name":"Frog","hitpoints":8,"combatLevel":5,"attackSpeed":4,"attackLevel":5,"strengthLevel":4,"defenceLevel":3,"rangeLevel":1,"magicLevel":1},"8703":{"name":"Temple Spider","hitpoints":70,"combatLevel":75,"attackSpeed":4,"attackLevel":120,"strengthLevel":50,"defenceLevel":10,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":30,"crushDef":10,"rangeDef":20,"magicDef":25},"8709":{"name":"Shaeded Beast","hitpoints":210,"combatLevel":186,"attackSpeed":4,"attackLevel":50,"strengthLevel":80,"defenceLevel":50,"rangeLevel":1,"magicLevel":250,"stabDef":50,"slashDef":30,"crushDef":100,"rangeDef":50,"magicDef":150,"bonusMagicDamage":10},"8713":{"name":"Sarachnis","hitpoints":400,"combatLevel":318,"attackSpeed":4,"attackLevel":200,"strengthLevel":240,"defenceLevel":150,"rangeLevel":300,"magicLevel":150,"range":15,"stabDef":60,"slashDef":40,"crushDef":10,"rangeDef":300,"magicDef":150,"bonusAttack":30,"bonusRangeStrength":15},"8714":{"name":"Spawn of Sarachnis","hitpoints":30,"combatLevel":107,"attackSpeed":3,"attackLevel":150,"strengthLevel":120,"defenceLevel":50,"rangeLevel":1,"magicLevel":1,"stabDef":50,"slashDef":50,"crushDef":20,"rangeDef":150,"bonusAttack":50},"8715":{"name":"Spawn of Sarachnis","hitpoints":30,"combatLevel":68,"attackSpeed":4,"attackLevel":10,"strengthLevel":10,"defenceLevel":50,"rangeLevel":1,"magicLevel":100,"stabDef":50,"slashDef":50,"crushDef":50,"magicDef":150},"8736":{"name":"Moss Giant","hitpoints":120,"combatLevel":84,"attackSpeed":6,"attackLevel":60,"strengthLevel":60,"defenceLevel":60,"rangeLevel":1,"magicLevel":1,"bonusAttack":66,"bonusStrength":62},"8759":{"name":"Iorwerth Warrior","hitpoints":105,"combatLevel":108,"attackSpeed":4,"attackLevel":95,"strengthLevel":95,"defenceLevel":80,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60},"8760":{"name":"Iorwerth Archer","hitpoints":105,"combatLevel":90,"attackSpeed":5,"attackLevel":10,"strengthLevel":10,"defenceLevel":80,"rangeLevel":90,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60},"8847":{"name":"Essyllt","hitpoints":320,"combatLevel":236,"attackSpeed":4,"attackLevel":268,"strengthLevel":268,"defenceLevel":104,"rangeLevel":342,"magicLevel":104,"stabDef":40,"slashDef":40,"crushDef":20,"rangeDef":120,"magicDef":30,"bonusStrength":28,"bonusRangeStrength":28},"8871":{"name":"Essyllt","hitpoints":320,"combatLevel":236,"attackSpeed":4,"attackLevel":268,"strengthLevel":268,"defenceLevel":104,"rangeLevel":342,"magicLevel":104,"stabDef":40,"slashDef":40,"crushDef":20,"rangeDef":120,"magicDef":30,"bonusStrength":28,"bonusRangeStrength":28},"8872":{"name":"Essyllt","hitpoints":320,"combatLevel":236,"attackSpeed":4,"attackLevel":268,"strengthLevel":268,"defenceLevel":104,"rangeLevel":342,"magicLevel":104,"stabDef":40,"slashDef":40,"crushDef":20,"rangeDef":120,"magicDef":30,"bonusStrength":28,"bonusRangeStrength":28},"8917":{"name":"Fragment of Seren","hitpoints":1000,"combatLevel":494,"attackSpeed":7,"attackLevel":242,"strengthLevel":288,"defenceLevel":102,"rangeLevel":235,"magicLevel":102,"stab":236,"slash":236,"crush":236,"range":224,"stabDef":320,"slashDef":220,"crushDef":320,"rangeDef":480,"magicDef":10},"8918":{"name":"Fragment of Seren","hitpoints":1000,"combatLevel":494,"attackSpeed":7,"attackLevel":242,"strengthLevel":288,"defenceLevel":102,"rangeLevel":235,"magicLevel":102,"stab":236,"slash":236,"crush":236,"range":224,"stabDef":320,"slashDef":220,"crushDef":320,"rangeDef":480,"magicDef":10},"8919":{"name":"Fragment of Seren","hitpoints":1000,"combatLevel":494,"attackSpeed":7,"attackLevel":242,"strengthLevel":288,"defenceLevel":102,"rangeLevel":235,"magicLevel":102,"stab":236,"slash":236,"crush":236,"range":224,"stabDef":320,"slashDef":220,"crushDef":320,"rangeDef":480,"magicDef":10},"8920":{"name":"Fragment of Seren","hitpoints":1000,"combatLevel":494,"attackSpeed":7,"attackLevel":242,"strengthLevel":288,"defenceLevel":102,"rangeLevel":235,"magicLevel":102,"stab":236,"slash":236,"crush":236,"range":224,"stabDef":320,"slashDef":220,"crushDef":320,"rangeDef":480,"magicDef":10},"8950":{"name":"Essyllt","hitpoints":320,"combatLevel":236,"attackSpeed":4,"attackLevel":268,"strengthLevel":268,"defenceLevel":104,"rangeLevel":342,"magicLevel":104,"stabDef":40,"slashDef":40,"crushDef":20,"rangeDef":120,"magicDef":30,"bonusStrength":28,"bonusRangeStrength":28},"9016":{"name":"Essyllt","hitpoints":320,"combatLevel":236,"attackSpeed":4,"attackLevel":268,"strengthLevel":268,"defenceLevel":104,"rangeLevel":342,"magicLevel":104,"stabDef":40,"slashDef":40,"crushDef":20,"rangeDef":120,"magicDef":30,"bonusStrength":28,"bonusRangeStrength":28},"9021":{"name":"Crystalline Hunllef","hitpoints":600,"combatLevel":674,"attackSpeed":5},"9022":{"name":"Crystalline Hunllef","hitpoints":600,"combatLevel":674,"attackSpeed":5},"9023":{"name":"Crystalline Hunllef","hitpoints":600,"combatLevel":674,"attackSpeed":5},"9024":{"name":"Crystalline Hunllef","hitpoints":600,"combatLevel":674,"attackSpeed":5},"9026":{"name":"Crystalline Rat","combatLevel":24,"attackSpeed":4},"9028":{"name":"Crystalline Bat","combatLevel":33,"attackSpeed":4},"9029":{"name":"Crystalline Unicorn","combatLevel":48,"attackSpeed":4},"9030":{"name":"Crystalline Scorpion","combatLevel":64,"attackSpeed":4},"9031":{"name":"Crystalline Wolf","combatLevel":74,"attackSpeed":4},"9032":{"name":"Crystalline Bear","combatLevel":172,"attackSpeed":4},"9033":{"name":"Crystalline Dragon","combatLevel":172,"attackSpeed":4},"9035":{"name":"Corrupted Hunllef","hitpoints":1000,"combatLevel":894,"attackSpeed":5},"9036":{"name":"Corrupted Hunllef","hitpoints":1000,"combatLevel":894,"attackSpeed":5},"9037":{"name":"Corrupted Hunllef","hitpoints":1000,"combatLevel":894,"attackSpeed":5},"9038":{"name":"Corrupted Hunllef","hitpoints":1000,"combatLevel":894,"attackSpeed":5},"9040":{"name":"Corrupted Rat","combatLevel":34,"attackSpeed":4,"attackLevel":30,"strengthLevel":40,"defenceLevel":30,"rangeLevel":1,"magicLevel":10,"stab":30,"slash":30,"crush":30,"range":1,"magic":10,"stabDef":50,"slashDef":1,"crushDef":50,"rangeDef":1,"magicDef":1,"bonusAttack":30,"bonusStrength":30,"bonusRangeStrength":1,"bonusMagicDamage":10},"9041":{"name":"Corrupted Spider","hitpoints":12,"combatLevel":32,"attackSpeed":4},"9042":{"name":"Corrupted Bat","combatLevel":48,"attackSpeed":4},"9043":{"name":"Corrupted Unicorn","combatLevel":64,"attackSpeed":4},"9044":{"name":"Corrupted Scorpion","combatLevel":89,"attackSpeed":4},"9045":{"name":"Corrupted Wolf","combatLevel":102,"attackSpeed":4},"9046":{"name":"Corrupted Bear","hitpoints":100,"combatLevel":258,"attackSpeed":4},"9047":{"name":"Corrupted Dragon","combatLevel":258,"attackSpeed":4},"9048":{"name":"Corrupted Dark Beast","hitpoints":100,"combatLevel":258,"attackSpeed":4},"9049":{"name":"Zalcano","hitpoints":1000,"combatLevel":336,"attackSpeed":5},"9051":{"name":"Golem","hitpoints":14,"combatLevel":64},"9181":{"name":"Dire Wolf","hitpoints":74,"combatLevel":72,"attackSpeed":4,"attackLevel":60,"strengthLevel":61,"defenceLevel":62,"rangeLevel":1,"magicLevel":1},"9182":{"name":"Guard","hitpoints":105,"combatLevel":108,"attackSpeed":4,"attackLevel":95,"strengthLevel":80,"defenceLevel":95,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60},"9183":{"name":"Guard","hitpoints":105,"combatLevel":108,"attackSpeed":4,"attackLevel":95,"strengthLevel":80,"defenceLevel":95,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60},"9184":{"name":"Guard","hitpoints":105,"combatLevel":108,"attackSpeed":4,"attackLevel":95,"strengthLevel":80,"defenceLevel":95,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60},"9185":{"name":"Guard","hitpoints":105,"combatLevel":108,"attackSpeed":4,"attackLevel":95,"strengthLevel":80,"defenceLevel":95,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60},"9186":{"name":"Guard","hitpoints":105,"combatLevel":108,"attackSpeed":4,"attackLevel":95,"strengthLevel":80,"defenceLevel":95,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60},"9187":{"name":"Guard","hitpoints":105,"combatLevel":108,"attackSpeed":4,"attackLevel":95,"strengthLevel":80,"defenceLevel":95,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60},"9188":{"name":"Guard","hitpoints":105,"combatLevel":108,"attackSpeed":4,"attackLevel":95,"strengthLevel":80,"defenceLevel":95,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60},"9189":{"name":"Guard","hitpoints":105,"combatLevel":108,"attackSpeed":4,"attackLevel":95,"strengthLevel":80,"defenceLevel":95,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60},"9190":{"name":"Guard","hitpoints":105,"combatLevel":108,"attackSpeed":4,"attackLevel":95,"strengthLevel":80,"defenceLevel":95,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60},"9191":{"name":"Guard","hitpoints":105,"combatLevel":108,"attackSpeed":4,"attackLevel":95,"strengthLevel":80,"defenceLevel":95,"magicLevel":1,"stabDef":50,"slashDef":70,"crushDef":70,"rangeDef":50,"magicDef":60},"9246":{"name":"Arianwyn (hard)","hitpoints":300,"combatLevel":368,"attackSpeed":5,"defenceLevel":102,"rangeLevel":552,"magicLevel":153,"range":126,"stabDef":80,"slashDef":80,"crushDef":80,"rangeDef":180,"magicDef":260},"9247":{"name":"Essyllt (hard)","hitpoints":320,"combatLevel":395,"attackSpeed":4,"attackLevel":408,"strengthLevel":408,"defenceLevel":104,"rangeLevel":512,"magicLevel":104,"range":168,"stabDef":40,"slashDef":40,"crushDef":20,"rangeDef":120,"magicDef":30,"bonusAttack":14,"bonusStrength":28,"bonusRangeStrength":28},"9249":{"name":"Essyllt (hard)","hitpoints":320,"combatLevel":395,"attackSpeed":4,"attackLevel":408,"strengthLevel":408,"defenceLevel":104,"rangeLevel":512,"magicLevel":104,"range":168,"stabDef":40,"slashDef":40,"crushDef":20,"rangeDef":120,"magicDef":30,"bonusAttack":14,"bonusStrength":28,"bonusRangeStrength":28},"9258":{"name":"Basilisk Sentinel","hitpoints":520,"combatLevel":358,"slayerLevel":60,"attackSpeed":4,"attackLevel":274,"strengthLevel":274,"defenceLevel":274,"rangeLevel":1,"magicLevel":274,"stabDef":50,"slashDef":50,"crushDef":10,"rangeDef":10,"magicDef":50,"bonusAttack":12,"bonusMagicDamage":12},"9282":{"name":"Basilisk Youngling","hitpoints":60,"combatLevel":57,"slayerLevel":40,"attackSpeed":4,"attackLevel":25,"strengthLevel":40,"defenceLevel":70,"rangeLevel":1,"magicLevel":1,"stabDef":20,"slashDef":20,"magicDef":20},"9287":{"name":"Monstrous Basilisk","hitpoints":170,"combatLevel":135,"attackSpeed":4,"attackLevel":88,"strengthLevel":98,"defenceLevel":130,"rangeLevel":1,"magicLevel":1,"stabDef":35,"slashDef":35,"magicDef":35,"poisonImmune":true,"venomImmune":true},"9288":{"name":"Monstrous Basilisk","hitpoints":170,"combatLevel":135,"attackSpeed":4,"attackLevel":88,"strengthLevel":98,"defenceLevel":130,"rangeLevel":1,"magicLevel":1,"stabDef":35,"slashDef":35,"magicDef":35,"poisonImmune":true,"venomImmune":true},"9289":{"name":"The Jormungand","hitpoints":600,"combatLevel":363,"slayerLevel":40,"attackSpeed":5,"attackLevel":180,"strengthLevel":180,"defenceLevel":180,"rangeLevel":180,"magicLevel":180,"stabDef":50,"slashDef":50,"crushDef":10,"rangeDef":50,"magicDef":50,"bonusStrength":12,"bonusRangeStrength":12,"bonusMagicDamage":12},"9290":{"name":"The Jormungand","hitpoints":600,"combatLevel":363,"slayerLevel":40,"attackSpeed":5,"attackLevel":180,"strengthLevel":180,"defenceLevel":180,"rangeLevel":180,"magicLevel":180,"stabDef":50,"slashDef":50,"crushDef":10,"rangeDef":50,"magicDef":50,"bonusStrength":12,"bonusRangeStrength":12,"bonusMagicDamage":12},"9291":{"name":"The Jormungand","hitpoints":600,"combatLevel":363,"slayerLevel":40,"attackSpeed":5,"attackLevel":180,"strengthLevel":180,"defenceLevel":180,"rangeLevel":180,"magicLevel":180,"stabDef":50,"slashDef":50,"crushDef":10,"rangeDef":50,"magicDef":50,"bonusStrength":12,"bonusRangeStrength":12,"bonusMagicDamage":12},"9292":{"name":"The Jormungand","hitpoints":600,"combatLevel":363,"slayerLevel":40,"attackSpeed":5,"attackLevel":180,"strengthLevel":180,"defenceLevel":180,"rangeLevel":180,"magicLevel":180,"stabDef":50,"slashDef":50,"crushDef":10,"rangeDef":50,"magicDef":50,"bonusStrength":12,"bonusRangeStrength":12,"bonusMagicDamage":12},"9293":{"name":"Basilisk Knight","hitpoints":300,"combatLevel":204,"slayerLevel":60,"attackSpeed":4,"attackLevel":186,"strengthLevel":186,"defenceLevel":186,"rangeLevel":1,"magicLevel":186,"stabDef":30,"slashDef":30,"magicDef":30},"9295":{"name":"Typhor","hitpoints":280,"combatLevel":194,"slayerLevel":40,"attackSpeed":4,"attackLevel":150,"strengthLevel":150,"defenceLevel":150,"rangeLevel":1,"magicLevel":150,"stabDef":25,"slashDef":25,"magicDef":25,"poisonImmune":true,"venomImmune":true},"9296":{"name":"Typhor","hitpoints":280,"combatLevel":194,"slayerLevel":40,"attackSpeed":4,"attackLevel":150,"strengthLevel":150,"defenceLevel":150,"rangeLevel":1,"magicLevel":150,"stabDef":25,"slashDef":25,"magicDef":25,"poisonImmune":true,"venomImmune":true}} \ No newline at end of file diff --git a/runelite-client/src/main/resources/skill_icons_small/league points.png b/runelite-client/src/main/resources/skill_icons_small/league points.png new file mode 100644 index 0000000000..1b976d526c Binary files /dev/null and b/runelite-client/src/main/resources/skill_icons_small/league points.png differ diff --git a/runelite-client/src/main/scripts/ChatBuilder.hash b/runelite-client/src/main/scripts/ChatBuilder.hash index 78c3523af1..b13d3671c5 100644 --- a/runelite-client/src/main/scripts/ChatBuilder.hash +++ b/runelite-client/src/main/scripts/ChatBuilder.hash @@ -1 +1 @@ -B591FB2134EF9FA75FCCEC25A1FD90581D3A7AD0F1E6FBE4267C8AF6010C547C \ No newline at end of file +FAA689813E3E4C1BA5A0B7DF492C6AE48DBD466C50968E97FADF4BBD42A9A166 \ No newline at end of file diff --git a/runelite-client/src/main/scripts/ChatBuilder.rs2asm b/runelite-client/src/main/scripts/ChatBuilder.rs2asm index c39606ff2c..8173576eae 100644 --- a/runelite-client/src/main/scripts/ChatBuilder.rs2asm +++ b/runelite-client/src/main/scripts/ChatBuilder.rs2asm @@ -1,7 +1,7 @@ .id 84 .int_stack_count 1 .string_stack_count 0 -.int_var_count 15 +.int_var_count 17 .string_var_count 13 iconst 10616890 if_getwidth @@ -157,22 +157,26 @@ LABEL133: sstore 11 sconst "" sstore 12 - iconst 0 - istore 12 -LABEL149: - iload 9 iconst -1 - if_icmpne LABEL153 - jump LABEL679 + istore 12 + iconst 0 + istore 13 + iconst 0 + istore 14 LABEL153: - iload 8 + iload 9 iconst -1 if_icmpne LABEL157 - jump LABEL679 + jump LABEL714 LABEL157: + iload 8 + iconst -1 + if_icmpne LABEL161 + jump LABEL714 +LABEL161: iload 9 - chat_gethistory_byuid - istore 12 + chat_gethistory_byuid + istore 14 sstore 11 sstore 10 sstore 9 @@ -180,60 +184,60 @@ LABEL157: istore 10 iload 10 sload 9 - iload 12 + iload 14 invoke 193 iconst 1 if_icmpeq CHAT_FILTER - jump LABEL675 + jump LABEL710 CHAT_FILTER: sload 11 ; Load the message iconst 1 ; Gets changed to 0 if message is blocked iload 10 ; Load the messageType iload 9 ; Load the id of the messageNode sconst "chatFilterCheck" - runelite_callback - pop_int ; Pop the id of the messageNode - pop_int ; Pop the messageType + runelite_callback + pop_int ; Pop the id of the messageNode + pop_int ; Pop the messageType iconst 1 ; 2nd half of conditional sstore 11 ; Override the message with our filtered message - if_icmpeq LABEL172 ; Check if we are building this message - jump LABEL675 ; continue to next message, skipping this -LABEL172: + if_icmpeq LABEL176 ; Check if we are building this message + jump LABEL710 ; continue to next message, skipping this +LABEL176: iload 10 sload 9 sload 11 iload 11 iload 2 sload 0 - iload 12 + iload 14 invoke 90 iconst 1 - if_icmpeq LABEL183 - jump LABEL675 -LABEL183: + if_icmpeq LABEL187 + jump LABEL710 +LABEL187: iload 10 - switch - 1: LABEL186 - 2: LABEL186 - 3: LABEL228 - 101: LABEL250 - 5: LABEL268 - 6: LABEL301 - 7: LABEL228 - 103: LABEL323 - 104: LABEL323 - 9: LABEL341 - 107: LABEL390 - 14: LABEL367 - 90: LABEL207 - 91: LABEL207 - jump LABEL426 -LABEL186: + switch + 1: LABEL190 + 2: LABEL190 + 3: LABEL232 + 101: LABEL254 + 5: LABEL272 + 6: LABEL305 + 7: LABEL232 + 103: LABEL327 + 104: LABEL327 + 9: LABEL345 + 107: LABEL395 + 14: LABEL371 + 90: LABEL211 + 91: LABEL211 + jump LABEL431 +LABEL190: iload 9 ; The id of the messageNode of the message being built sconst "" sconst "addTimestamp" - runelite_callback - pop_int ; pop message id + runelite_callback + pop_int ; pop message id sload 9 sconst ":" join_string 3 ; + 1 for timestamp @@ -254,13 +258,13 @@ LABEL186: iload 4 invoke 203 istore 6 - jump LABEL440 -LABEL207: + jump LABEL445 +LABEL211: iload 9 ; The id of the messageNode of the message being built sconst "" sconst "addTimestamp" - runelite_callback - pop_int ; pop message id + runelite_callback + pop_int ; pop message id sload 9 sconst ":" join_string 3 ; + 1 for timestamp @@ -281,18 +285,18 @@ LABEL207: iload 4 invoke 203 istore 6 - jump LABEL440 -LABEL228: + jump LABEL445 +LABEL232: iload 9 ; The id of the messageNode of the message being built sconst "" sconst "addTimestamp" - runelite_callback - pop_int ; pop message id + runelite_callback + pop_int ; pop message id sconst "From " sload 9 sconst ":" sconst "privateChatFrom" - runelite_callback ; for prepending color tags + runelite_callback ; for prepending color tags join_string 4 ; + 1 for timestamp sload 2 sload 11 @@ -311,13 +315,13 @@ LABEL228: iload 4 invoke 203 istore 6 - jump LABEL440 -LABEL250: + jump LABEL445 +LABEL254: iload 9 ; The id of the messageNode of the message being built sconst "" sconst "addTimestamp" - runelite_callback - pop_int ; pop message id + runelite_callback + pop_int ; pop message id sload 7 sload 11 sconst "" @@ -335,13 +339,13 @@ LABEL250: iload 4 invoke 199 istore 6 - jump LABEL440 -LABEL268: + jump LABEL445 +LABEL272: iload 9 ; The id of the messageNode of the message being built sconst "" sconst "addTimestamp" - runelite_callback - pop_int ; pop message id + runelite_callback + pop_int ; pop message id sload 2 sload 11 sconst "" @@ -361,33 +365,33 @@ LABEL268: istore 6 get_varbit 1627 iconst 0 - if_icmpeq LABEL289 - jump LABEL300 -LABEL289: + if_icmpeq LABEL293 + jump LABEL304 +LABEL293: iload 11 iconst 500 - add + add iconst 1 - add + add set_varc_int 65 iconst 664 iconst 0 sconst "1" iconst 10616832 - if_setontimer -LABEL300: - jump LABEL440 -LABEL301: + if_setontimer +LABEL304: + jump LABEL445 +LABEL305: iload 9 ; The id of the messageNode of the message being built sconst "" sconst "addTimestamp" - runelite_callback - pop_int ; pop message id + runelite_callback + pop_int ; pop message id sconst "To " sload 9 sconst ":" sconst "privateChatTo" - runelite_callback ; for chat recolors + runelite_callback ; for chat recolors join_string 4 ; + 1 for timestamp sload 2 sload 11 @@ -406,13 +410,13 @@ LABEL301: iload 4 invoke 203 istore 6 - jump LABEL440 -LABEL323: + jump LABEL445 +LABEL327: iload 9 ; The id of the messageNode of the message being built sconst "" sconst "addTimestamp" - runelite_callback - pop_int ; pop message id + runelite_callback + pop_int ; pop message id sload 8 sload 11 sconst "" @@ -430,13 +434,13 @@ LABEL323: iload 4 invoke 199 istore 6 - jump LABEL440 -LABEL341: + jump LABEL445 +LABEL345: iload 9 ; The id of the messageNode of the message being built sconst "" sconst "addTimestamp" - runelite_callback - pop_int ; pop message id + runelite_callback + pop_int ; pop message id sconst "[" sload 5 sload 10 @@ -462,10 +466,11 @@ LABEL341: iload 4 invoke 203 istore 6 - jump LABEL440 -LABEL367: + jump LABEL445 +LABEL371: sload 11 invoke 2066 + istore 12 sstore 12 sstore 11 sload 4 @@ -486,15 +491,15 @@ LABEL367: iload 4 invoke 203 istore 6 - jump LABEL440 -LABEL390: - clientclock + jump LABEL445 +LABEL395: + clientclock iload 11 - sub + sub iconst 500 - if_icmpgt LABEL396 - jump LABEL411 -LABEL396: + if_icmpgt LABEL401 + jump LABEL416 +LABEL401: sconst "jk :P" iload 7 iload 8 @@ -509,8 +514,8 @@ LABEL396: iload 4 invoke 199 istore 6 - jump LABEL425 -LABEL411: + jump LABEL430 +LABEL416: sload 11 iload 7 iload 8 @@ -525,9 +530,9 @@ LABEL411: iload 4 invoke 199 istore 6 -LABEL425: - jump LABEL440 -LABEL426: +LABEL430: + jump LABEL445 +LABEL431: sload 11 iload 7 iload 8 @@ -542,454 +547,490 @@ LABEL426: iload 4 invoke 199 istore 6 -LABEL440: - iload 8 - if_clearops - iload 10 - switch - 1: LABEL445 - 2: LABEL445 - 3: LABEL445 - 101: LABEL510 - 6: LABEL445 - 7: LABEL445 - 103: LABEL552 - 104: LABEL552 - 9: LABEL445 - 106: LABEL445 - 14: LABEL594 - 90: LABEL445 - 91: LABEL445 - jump LABEL649 LABEL445: + iload 8 + if_clearops + iload 10 + switch + 1: LABEL450 + 2: LABEL450 + 3: LABEL450 + 101: LABEL515 + 6: LABEL450 + 7: LABEL450 + 103: LABEL557 + 104: LABEL557 + 9: LABEL450 + 106: LABEL450 + 14: LABEL599 + 90: LABEL450 + 91: LABEL450 + jump LABEL684 +LABEL450: sconst "" sload 9 sconst "" join_string 3 iload 8 - if_setopbase + if_setopbase iconst 86 iconst -2147483644 sconst "event_opbase" sconst "is" iload 8 - if_setonop + if_setonop iconst -1 sconst "" iload 8 - if_setonmouserepeat + if_setonmouserepeat iconst -1 sconst "" iload 8 - if_setonmouseleave + if_setonmouseleave sload 0 sload 9 - removetags - compare + removetags + compare iconst 0 - if_icmpne LABEL472 - jump LABEL509 -LABEL472: - iload 12 + if_icmpne LABEL477 + jump LABEL514 +LABEL477: + iload 14 iconst 1 - if_icmpeq LABEL476 - jump LABEL481 -LABEL476: + if_icmpeq LABEL481 + jump LABEL486 +LABEL481: iconst 6 sconst "Message" iload 8 - if_setop - jump LABEL489 -LABEL481: + if_setop + jump LABEL494 +LABEL486: iconst 6 sconst "Add friend" iload 8 - if_setop + if_setop iconst 7 sconst "Add ignore" iload 8 - if_setop -LABEL489: + if_setop +LABEL494: iconst 8 sconst "Report" iload 8 - if_setop + if_setop iload 10 iconst 9 - if_icmpeq LABEL497 - jump LABEL509 -LABEL497: - clan_getchatcount + if_icmpeq LABEL502 + jump LABEL514 +LABEL502: + clan_getchatcount iconst 0 - if_icmpgt LABEL501 - jump LABEL509 -LABEL501: - clan_getchatrank - clan_getchatminkick - if_icmpge LABEL505 - jump LABEL509 -LABEL505: + if_icmpgt LABEL506 + jump LABEL514 +LABEL506: + clan_getchatrank + clan_getchatminkick + if_icmpge LABEL510 + jump LABEL514 +LABEL510: iconst 9 sconst "Kick" iload 8 - if_setop -LABEL509: - jump LABEL661 -LABEL510: + if_setop +LABEL514: + jump LABEL696 +LABEL515: sconst "" sload 9 sconst "" join_string 3 iload 8 - if_setopbase + if_setopbase iconst 86 iconst -2147483644 sconst "event_opbase" sconst "is" iload 8 - if_setonop + if_setonop iconst -1 sconst "" iload 8 - if_setonmouserepeat + if_setonmouserepeat iconst -1 sconst "" iload 8 - if_setonmouseleave + if_setonmouseleave iconst 1 sconst "Accept trade" iload 8 - if_setop - iload 12 + if_setop + iload 14 iconst 1 - if_icmpeq LABEL538 - jump LABEL543 -LABEL538: + if_icmpeq LABEL543 + jump LABEL548 +LABEL543: iconst 6 sconst "Message" iload 8 - if_setop - jump LABEL551 -LABEL543: + if_setop + jump LABEL556 +LABEL548: iconst 6 sconst "Add friend" iload 8 - if_setop + if_setop iconst 7 sconst "Add ignore" iload 8 - if_setop -LABEL551: - jump LABEL661 -LABEL552: + if_setop +LABEL556: + jump LABEL696 +LABEL557: sconst "" sload 9 sconst "" join_string 3 iload 8 - if_setopbase + if_setopbase iconst 86 iconst -2147483644 sconst "event_opbase" sconst "is" iload 8 - if_setonop + if_setonop iconst -1 sconst "" iload 8 - if_setonmouserepeat + if_setonmouserepeat iconst -1 sconst "" iload 8 - if_setonmouseleave + if_setonmouseleave iconst 2 sconst "Accept challenge" iload 8 - if_setop - iload 12 + if_setop + iload 14 iconst 1 - if_icmpeq LABEL580 - jump LABEL585 -LABEL580: + if_icmpeq LABEL585 + jump LABEL590 +LABEL585: iconst 6 sconst "Message" iload 8 - if_setop - jump LABEL593 -LABEL585: + if_setop + jump LABEL598 +LABEL590: iconst 6 sconst "Add friend" iload 8 - if_setop + if_setop iconst 7 sconst "Add ignore" iload 8 - if_setop -LABEL593: - jump LABEL661 -LABEL594: - sload 12 - string_length - iconst 0 - if_icmpgt LABEL599 - jump LABEL624 + if_setop +LABEL598: + jump LABEL696 LABEL599: + sload 12 + string_length + iconst 0 + if_icmpgt LABEL604 + jump LABEL658 +LABEL604: + iload 12 + iconst -1 + if_icmpne LABEL608 + jump LABEL658 +LABEL608: + iconst 105 + iconst 49 + iconst 2761 + iload 12 + enum + istore 13 + clienttype + iconst 3 + if_icmpne LABEL618 + jump LABEL620 +LABEL618: + iconst 0 + istore 13 +LABEL620: + iload 13 + iconst 0 + if_icmpeq LABEL624 + jump LABEL649 +LABEL624: iconst 6 sconst "Open" iload 8 - if_setop + if_setop iconst 7 sconst "Check" iload 8 - if_setop + if_setop iconst 2065 iload 8 - if_getlayer + if_getlayer iload 7 iconst 3158271 sconst "Iii" iload 8 - if_setonmouserepeat + if_setonmouserepeat iconst 2065 iload 8 - if_getlayer + if_getlayer iload 7 iload 3 sconst "Iii" iload 8 - if_setonmouseleave - jump LABEL632 -LABEL624: + if_setonmouseleave + jump LABEL657 +LABEL649: iconst -1 sconst "" iload 8 - if_setonmouserepeat + if_setonmouserepeat iconst -1 sconst "" iload 8 - if_setonmouseleave -LABEL632: + if_setonmouseleave +LABEL657: + jump LABEL666 +LABEL658: + iconst -1 + sconst "" + iload 8 + if_setonmouserepeat + iconst -1 + sconst "" + iload 8 + if_setonmouseleave +LABEL666: iconst 9 sconst "Clear history" iload 8 - if_setop + if_setop sconst "" sconst "Notification" sconst "" join_string 3 iload 8 - if_setopbase + if_setopbase iconst 2064 iconst -2147483644 sload 12 - sconst "is" + iload 12 + sconst "isi" iload 8 - if_setonop - jump LABEL661 -LABEL649: + if_setonop + jump LABEL696 +LABEL684: iconst -1 sconst "" iload 8 - if_setonop + if_setonop iconst -1 sconst "" iload 8 - if_setonmouserepeat + if_setonmouserepeat iconst -1 sconst "" iload 8 - if_setonmouseleave -LABEL661: + if_setonmouseleave +LABEL696: iload 5 iload 6 - sub + sub istore 5 iload 7 iconst 1 - add + add istore 7 iconst 105 iconst 73 iconst 579 iload 7 - enum + enum istore 8 -LABEL675: +LABEL710: iload 9 - chat_getprevuid + chat_getprevuid istore 9 - jump LABEL149 -LABEL679: + jump LABEL153 +LABEL714: iload 7 - istore 13 -LABEL681: + istore 15 +LABEL716: iload 8 iconst -1 - if_icmpne LABEL685 - jump LABEL742 -LABEL685: + if_icmpne LABEL720 + jump LABEL777 +LABEL720: iload 8 - if_clearops + if_clearops iconst -1 sconst "" iload 8 - if_setonop + if_setonop iconst -1 sconst "" iload 8 - if_setonmouserepeat + if_setonmouserepeat iconst -1 sconst "" iload 8 - if_setonmouseleave + if_setonmouseleave iconst 0 iconst 0 iconst 0 iconst 0 iload 8 - if_setsize + if_setsize iconst 10616890 iload 7 iconst 2 - multiply - cc_find + multiply + cc_find iconst 1 - if_icmpeq LABEL713 - jump LABEL717 -LABEL713: + if_icmpeq LABEL748 + jump LABEL752 +LABEL748: sconst "" - cc_settext + cc_settext iconst 1 - cc_sethide -LABEL717: + cc_sethide +LABEL752: iconst 10616890 iload 7 iconst 2 - multiply + multiply iconst 1 - add - cc_find + add + cc_find iconst 1 - if_icmpeq LABEL727 - jump LABEL731 -LABEL727: + if_icmpeq LABEL762 + jump LABEL766 +LABEL762: sconst "" - cc_settext + cc_settext iconst 1 - cc_sethide -LABEL731: + cc_sethide +LABEL766: iload 7 iconst 1 - add + add istore 7 iconst 105 iconst 73 iconst 579 iload 7 - enum + enum istore 8 - jump LABEL681 -LABEL742: + jump LABEL716 +LABEL777: iload 5 iconst 2 - sub + sub istore 5 iconst 0 iload 5 - sub + sub istore 5 iconst 10616890 - if_getheight - istore 14 + if_getheight + istore 16 iload 5 - iload 14 - if_icmpgt LABEL757 - jump LABEL759 -LABEL757: + iload 16 + if_icmpgt LABEL792 + jump LABEL794 +LABEL792: iload 5 - istore 14 -LABEL759: - iload 13 + istore 16 +LABEL794: + iload 15 istore 7 -LABEL761: +LABEL796: iload 7 iconst 0 - if_icmpgt LABEL765 - jump LABEL818 -LABEL765: + if_icmpgt LABEL800 + jump LABEL853 +LABEL800: iload 7 iconst 1 - sub + sub istore 7 iconst 105 iconst 73 iconst 579 iload 7 - enum + enum istore 8 iload 8 - if_gety - iload 14 - add + if_gety + iload 16 + add iconst 2 - sub + sub istore 5 iload 8 - if_getx + if_getx iload 5 iconst 0 iconst 0 iload 8 - if_setposition + if_setposition iconst 10616890 iload 7 iconst 2 - multiply - cc_find + multiply + cc_find iconst 1 - if_icmpeq LABEL797 - jump LABEL802 -LABEL797: - cc_getx + if_icmpeq LABEL832 + jump LABEL837 +LABEL832: + cc_getx iload 5 iconst 0 iconst 0 - cc_setposition -LABEL802: + cc_setposition +LABEL837: iconst 10616890 iload 7 iconst 2 - multiply + multiply iconst 1 - add - cc_find + add + cc_find iconst 1 - if_icmpeq LABEL812 - jump LABEL817 -LABEL812: - cc_getx + if_icmpeq LABEL847 + jump LABEL852 +LABEL847: + cc_getx iload 5 iconst 0 iconst 0 - cc_setposition -LABEL817: - jump LABEL761 -LABEL818: + cc_setposition +LABEL852: + jump LABEL796 +LABEL853: iconst 0 - iload 14 + iload 16 iconst 10616890 if_setscrollsize iconst 10617391 iconst 10616890 get_varc_int 7 - iload 14 + iload 16 get_varc_int 8 sub add invoke 72 iconst 10616890 if_getscrolly - iload 14 + iload 16 set_varc_int 8 set_varc_int 7 return diff --git a/runelite-client/src/main/scripts/ChatSplitBuilder.hash b/runelite-client/src/main/scripts/ChatSplitBuilder.hash index 9e67531c83..636ae58d81 100644 --- a/runelite-client/src/main/scripts/ChatSplitBuilder.hash +++ b/runelite-client/src/main/scripts/ChatSplitBuilder.hash @@ -1 +1 @@ -5BCAA21926CF079794AAF3DA80E512297DD6F8353741929302FE6490D17DDF8C \ No newline at end of file +6F98F4F02F8A6B8B774D6B5010B7751260DB766C3E1C43F787A8BE213E7E2C3A \ No newline at end of file diff --git a/runelite-client/src/main/scripts/ChatSplitBuilder.rs2asm b/runelite-client/src/main/scripts/ChatSplitBuilder.rs2asm index 354aa42e71..6c87c8b256 100644 --- a/runelite-client/src/main/scripts/ChatSplitBuilder.rs2asm +++ b/runelite-client/src/main/scripts/ChatSplitBuilder.rs2asm @@ -1,7 +1,7 @@ .id 89 .int_stack_count 1 .string_stack_count 0 -.int_var_count 16 +.int_var_count 18 .string_var_count 4 iconst 0 istore 1 @@ -62,7 +62,7 @@ LABEL49: iconst 73 iconst 73 iload 6 - iconst 10551325 + iconst 10551326 enum if_getheight add @@ -183,24 +183,28 @@ LABEL156: sstore 2 sconst "" sstore 3 + iconst -1 + istore 15 + iconst 0 + istore 16 get_varc_int 55 get_varc_int 202 - if_icmpge LABEL172 - jump LABEL282 -LABEL172: + if_icmpge LABEL176 + jump LABEL317 +LABEL176: get_varc_int 55 clientclock iconst 3000 sub - if_icmpgt LABEL178 - jump LABEL282 -LABEL178: + if_icmpgt LABEL182 + jump LABEL317 +LABEL182: iconst 14 chat_gethistorylength iconst 0 - if_icmpgt LABEL183 - jump LABEL282 -LABEL183: + if_icmpgt LABEL187 + jump LABEL317 +LABEL187: iconst 14 iconst 0 chat_gethistory_bytypeandline @@ -212,11 +216,12 @@ LABEL183: istore 12 iload 12 iconst -1 - if_icmpne LABEL196 - jump LABEL282 -LABEL196: + if_icmpne LABEL200 + jump LABEL317 +LABEL200: sload 0 invoke 2066 + istore 15 sstore 3 sstore 0 iload 7 @@ -240,9 +245,33 @@ LABEL196: sload 3 string_length iconst 0 - if_icmpgt LABEL223 - jump LABEL248 -LABEL223: + if_icmpgt LABEL228 + jump LABEL282 +LABEL228: + iload 15 + iconst -1 + if_icmpne LABEL232 + jump LABEL282 +LABEL232: + iconst 105 + iconst 49 + iconst 2761 + iload 15 + enum + istore 16 + clienttype + iconst 3 + if_icmpne LABEL242 + jump LABEL244 +LABEL242: + iconst 0 + istore 16 +LABEL244: + iload 16 + iconst 0 + if_icmpeq LABEL248 + jump LABEL273 +LABEL248: iconst 6 sconst "Open" iload 10 @@ -267,8 +296,8 @@ LABEL223: sconst "Iii" iload 10 if_setonmouseleave - jump LABEL256 -LABEL248: + jump LABEL281 +LABEL273: iconst -1 sconst "" iload 10 @@ -277,7 +306,18 @@ LABEL248: sconst "" iload 10 if_setonmouseleave -LABEL256: +LABEL281: + jump LABEL290 +LABEL282: + iconst -1 + sconst "" + iload 10 + if_setonmouserepeat + iconst -1 + sconst "" + iload 10 + if_setonmouseleave +LABEL290: iconst 9 sconst "Clear history" iload 10 @@ -291,7 +331,8 @@ LABEL256: iconst 2064 iconst -2147483644 sload 3 - sconst "is" + iload 15 + sconst "isi" iload 10 if_setonop iload 9 @@ -304,41 +345,41 @@ LABEL256: iload 9 enum istore 10 -LABEL282: +LABEL317: iload 0 istore 12 iconst 0 - istore 15 + istore 17 get_varp 287 iconst 1 - if_icmpeq LABEL290 - jump LABEL479 -LABEL290: + if_icmpeq LABEL325 + jump LABEL514 +LABEL325: get_varc_int 41 iconst 1337 - if_icmpne LABEL297 + if_icmpne LABEL332 get_varbit 4089 iconst 0 - if_icmpeq LABEL297 - jump LABEL479 -LABEL297: + if_icmpeq LABEL332 + jump LABEL514 +LABEL332: iload 12 iconst -1 - if_icmpne LABEL301 - jump LABEL479 -LABEL301: + if_icmpne LABEL336 + jump LABEL514 +LABEL336: iload 10 iconst -1 - if_icmpne LABEL305 - jump LABEL479 -LABEL305: + if_icmpne LABEL340 + jump LABEL514 +LABEL340: iload 7 iload 4 sub iconst 57 - if_icmplt LABEL311 - jump LABEL479 -LABEL311: + if_icmplt LABEL346 + jump LABEL514 +LABEL346: iload 12 chat_gethistory_byuid istore 14 @@ -346,42 +387,42 @@ LABEL311: sstore 2 sstore 1 istore 13 - istore 15 - iload 15 + istore 17 + iload 17 sload 1 iload 13 iload 14 invoke 91 iconst 1 if_icmpeq CHAT_FILTER ; Jump to our new label instead - jump LABEL475 + jump LABEL510 CHAT_FILTER: sload 0 ; Load the message iconst 1 ; Gets changed to 0 if message is blocked - iload 15 ; Load the messageType + iload 17 ; Load the messageType iload 12 ; Load the id of the messageNode sconst "chatFilterCheck" - runelite_callback - pop_int ; Pop the id of the messageNode - pop_int ; Pop the messageType + runelite_callback + pop_int ; Pop the id of the messageNode + pop_int ; Pop the messageType iconst 1 ; 2nd half of conditional sstore 0 ; Override the message with our filtered message - if_icmpeq LABEL327 ; Check if we are building this message - jump LABEL475 -LABEL327: - iload 15 + if_icmpeq LABEL362 ; Check if we are building this message + jump LABEL510 +LABEL362: + iload 17 switch - 3: LABEL330 - 6: LABEL351 - 7: LABEL330 - jump LABEL372 -LABEL330: + 3: LABEL365 + 6: LABEL386 + 7: LABEL365 + jump LABEL407 +LABEL365: iload 7 iload 12 ; Load the id of the messageNode sconst "" ; Push a container for the timestamp sconst "addTimestamp" ; Push event name - runelite_callback ; Invoke callback - pop_int ; Pop the id of the messageNode + runelite_callback ; Invoke callback + pop_int ; Pop the id of the messageNode sconst "From " sload 1 sconst ":" @@ -403,14 +444,14 @@ LABEL330: invoke 203 add istore 7 - jump LABEL407 -LABEL351: + jump LABEL442 +LABEL386: iload 7 iload 12 ; Load the id of the messageNode sconst "" ; Push container for the timestamp sconst "addTimestamp" ; Push event name - runelite_callback ; Invoke callback - pop_int ; Pop the id of the messageNode + runelite_callback ; Invoke callback + pop_int ; Pop the id of the messageNode sconst "To " sload 1 sconst ":" @@ -432,16 +473,16 @@ LABEL351: invoke 203 add istore 7 - jump LABEL407 -LABEL372: + jump LABEL442 +LABEL407: iload 7 iload 12 ; Load the id of the messageNode sconst "" ; Push a container for the timestamp sconst "addTimestamp" ; Push event name - runelite_callback ; Invoke callback - pop_int ; Pop the id of the messageNode + runelite_callback ; Invoke callback + pop_int ; Pop the id of the messageNode sload 0 ; Load the log in/out message - join_string 2 ; Add the timestamp to the message + join_string 3 ; Add the timestamp to the message iload 9 iload 10 iconst 10682368 @@ -456,16 +497,16 @@ LABEL372: invoke 199 add istore 7 - iload 15 + iload 17 iconst 5 - if_icmpeq LABEL392 - jump LABEL407 -LABEL392: + if_icmpeq LABEL427 + jump LABEL442 +LABEL427: get_varbit 1627 iconst 0 - if_icmpeq LABEL396 - jump LABEL407 -LABEL396: + if_icmpeq LABEL431 + jump LABEL442 +LABEL431: iload 13 iconst 500 add @@ -477,31 +518,31 @@ LABEL396: sconst "1" iconst 10616832 if_setontimer -LABEL407: +LABEL442: iload 10 if_clearops - iload 15 + iload 17 iconst 3 - if_icmpeq LABEL419 - iload 15 + if_icmpeq LABEL454 + iload 17 iconst 6 - if_icmpeq LABEL419 - iload 15 + if_icmpeq LABEL454 + iload 17 iconst 7 - if_icmpeq LABEL419 - jump LABEL453 -LABEL419: + if_icmpeq LABEL454 + jump LABEL488 +LABEL454: iload 14 iconst 1 - if_icmpeq LABEL423 - jump LABEL428 -LABEL423: + if_icmpeq LABEL458 + jump LABEL463 +LABEL458: iconst 8 sconst "Message" iload 10 if_setop - jump LABEL436 -LABEL428: + jump LABEL471 +LABEL463: iconst 8 sconst "Add friend" iload 10 @@ -510,7 +551,7 @@ LABEL428: sconst "Add ignore" iload 10 if_setop -LABEL436: +LABEL471: iconst 10 sconst "Report" iload 10 @@ -527,13 +568,13 @@ LABEL436: sconst "is" iload 10 if_setonop - jump LABEL457 -LABEL453: + jump LABEL492 +LABEL488: iconst -1 sconst "" iload 10 if_setonop -LABEL457: +LABEL492: iconst -1 sconst "" iload 10 @@ -552,17 +593,17 @@ LABEL457: iload 9 enum istore 10 -LABEL475: +LABEL510: iload 12 chat_getprevuid istore 12 - jump LABEL297 -LABEL479: + jump LABEL332 +LABEL514: iload 10 iconst -1 - if_icmpne LABEL483 - jump LABEL540 -LABEL483: + if_icmpne LABEL518 + jump LABEL575 +LABEL518: iload 10 if_clearops iconst -1 @@ -589,14 +630,14 @@ LABEL483: multiply cc_find iconst 1 - if_icmpeq LABEL511 - jump LABEL515 -LABEL511: + if_icmpeq LABEL546 + jump LABEL550 +LABEL546: sconst "" cc_settext iconst 1 cc_sethide -LABEL515: +LABEL550: iconst 10682368 iload 9 iconst 2 @@ -605,14 +646,14 @@ LABEL515: add cc_find iconst 1 - if_icmpeq LABEL525 - jump LABEL529 -LABEL525: + if_icmpeq LABEL560 + jump LABEL564 +LABEL560: sconst "" cc_settext iconst 1 cc_sethide -LABEL529: +LABEL564: iload 9 iconst 1 add @@ -623,6 +664,6 @@ LABEL529: iload 9 enum istore 10 - jump LABEL479 -LABEL540: + jump LABEL514 +LABEL575: return diff --git a/runelite-client/src/main/scripts/FakeXPDrops.hash b/runelite-client/src/main/scripts/FakeXPDrops.hash deleted file mode 100644 index cf5e37e931..0000000000 --- a/runelite-client/src/main/scripts/FakeXPDrops.hash +++ /dev/null @@ -1 +0,0 @@ -32FBC48F8C6D8E62E02BCF09F444BA036F76133B6596396F0AB9E474687D9F3F \ No newline at end of file diff --git a/runelite-client/src/main/scripts/FakeXpDrop.hash b/runelite-client/src/main/scripts/FakeXpDrop.hash new file mode 100644 index 0000000000..9eba813f20 --- /dev/null +++ b/runelite-client/src/main/scripts/FakeXpDrop.hash @@ -0,0 +1 @@ +C85469C2529D794C523505679F14AA20E988513E8FBAF249E41F4760382B4BBB \ No newline at end of file diff --git a/runelite-client/src/main/scripts/FakeXPDrops.rs2asm b/runelite-client/src/main/scripts/FakeXpDrop.rs2asm similarity index 67% rename from runelite-client/src/main/scripts/FakeXPDrops.rs2asm rename to runelite-client/src/main/scripts/FakeXpDrop.rs2asm index e2c097a3f8..0f5b817d85 100644 --- a/runelite-client/src/main/scripts/FakeXPDrops.rs2asm +++ b/runelite-client/src/main/scripts/FakeXpDrop.rs2asm @@ -3,18 +3,18 @@ .string_stack_count 0 .int_var_count 2 .string_var_count 0 - iload 0 - iload 1 + iload 0 ; stat + iload 1 ; xp sconst "fakeXpDrop" - runelite_callback - pop_int - pop_int + runelite_callback + pop_int + pop_int iconst 105 iconst 83 iconst 681 get_varc_int 207 - coordx - enum + coordx + enum iload 0 if_icmpeq LABEL9 jump LABEL16 @@ -23,16 +23,16 @@ LABEL9: iconst 0 iconst 0 iload 1 - movecoord + movecoord set_varc_int 207 - jump LABEL216 + jump LABEL227 LABEL16: iconst 105 iconst 83 iconst 681 get_varc_int 208 - coordx - enum + coordx + enum iload 0 if_icmpeq LABEL25 jump LABEL32 @@ -41,16 +41,16 @@ LABEL25: iconst 0 iconst 0 iload 1 - movecoord + movecoord set_varc_int 208 - jump LABEL216 + jump LABEL227 LABEL32: iconst 105 iconst 83 iconst 681 get_varc_int 209 - coordx - enum + coordx + enum iload 0 if_icmpeq LABEL41 jump LABEL48 @@ -59,16 +59,16 @@ LABEL41: iconst 0 iconst 0 iload 1 - movecoord + movecoord set_varc_int 209 - jump LABEL216 + jump LABEL227 LABEL48: iconst 105 iconst 83 iconst 681 get_varc_int 210 - coordx - enum + coordx + enum iload 0 if_icmpeq LABEL57 jump LABEL64 @@ -77,16 +77,16 @@ LABEL57: iconst 0 iconst 0 iload 1 - movecoord + movecoord set_varc_int 210 - jump LABEL216 + jump LABEL227 LABEL64: iconst 105 iconst 83 iconst 681 get_varc_int 211 - coordx - enum + coordx + enum iload 0 if_icmpeq LABEL73 jump LABEL80 @@ -95,16 +95,16 @@ LABEL73: iconst 0 iconst 0 iload 1 - movecoord + movecoord set_varc_int 211 - jump LABEL216 + jump LABEL227 LABEL80: iconst 105 iconst 83 iconst 681 get_varc_int 212 - coordx - enum + coordx + enum iload 0 if_icmpeq LABEL89 jump LABEL96 @@ -113,16 +113,16 @@ LABEL89: iconst 0 iconst 0 iload 1 - movecoord + movecoord set_varc_int 212 - jump LABEL216 + jump LABEL227 LABEL96: iconst 105 iconst 83 iconst 681 get_varc_int 213 - coordx - enum + coordx + enum iload 0 if_icmpeq LABEL105 jump LABEL112 @@ -131,126 +131,140 @@ LABEL105: iconst 0 iconst 0 iload 1 - movecoord + movecoord set_varc_int 213 - jump LABEL216 + jump LABEL227 LABEL112: + iload 0 + iconst 3 + if_icmpeq LABEL116 + jump LABEL123 +LABEL116: + iload 1 + iconst 20000001 + if_icmpeq LABEL120 + jump LABEL123 +LABEL120: + iconst 269500481 + set_varc_int 207 + jump LABEL227 +LABEL123: get_varc_int 207 iconst -1 - if_icmpeq LABEL116 - jump LABEL127 -LABEL116: + if_icmpeq LABEL127 + jump LABEL138 +LABEL127: iconst 0 iconst 83 iconst 105 iconst 81 iload 0 - enum + enum iconst 0 iload 1 - movecoord + movecoord set_varc_int 207 - jump LABEL216 -LABEL127: + jump LABEL227 +LABEL138: get_varc_int 208 iconst -1 - if_icmpeq LABEL131 - jump LABEL142 -LABEL131: + if_icmpeq LABEL142 + jump LABEL153 +LABEL142: iconst 0 iconst 83 iconst 105 iconst 81 iload 0 - enum + enum iconst 0 iload 1 - movecoord + movecoord set_varc_int 208 - jump LABEL216 -LABEL142: + jump LABEL227 +LABEL153: get_varc_int 209 iconst -1 - if_icmpeq LABEL146 - jump LABEL157 -LABEL146: + if_icmpeq LABEL157 + jump LABEL168 +LABEL157: iconst 0 iconst 83 iconst 105 iconst 81 iload 0 - enum + enum iconst 0 iload 1 - movecoord + movecoord set_varc_int 209 - jump LABEL216 -LABEL157: + jump LABEL227 +LABEL168: get_varc_int 210 iconst -1 - if_icmpeq LABEL161 - jump LABEL172 -LABEL161: + if_icmpeq LABEL172 + jump LABEL183 +LABEL172: iconst 0 iconst 83 iconst 105 iconst 81 iload 0 - enum + enum iconst 0 iload 1 - movecoord + movecoord set_varc_int 210 - jump LABEL216 -LABEL172: + jump LABEL227 +LABEL183: get_varc_int 211 iconst -1 - if_icmpeq LABEL176 - jump LABEL187 -LABEL176: + if_icmpeq LABEL187 + jump LABEL198 +LABEL187: iconst 0 iconst 83 iconst 105 iconst 81 iload 0 - enum + enum iconst 0 iload 1 - movecoord + movecoord set_varc_int 211 - jump LABEL216 -LABEL187: + jump LABEL227 +LABEL198: get_varc_int 212 iconst -1 - if_icmpeq LABEL191 - jump LABEL202 -LABEL191: + if_icmpeq LABEL202 + jump LABEL213 +LABEL202: iconst 0 iconst 83 iconst 105 iconst 81 iload 0 - enum + enum iconst 0 iload 1 - movecoord + movecoord set_varc_int 212 - jump LABEL216 -LABEL202: + jump LABEL227 +LABEL213: get_varc_int 213 iconst -1 - if_icmpeq LABEL206 - jump LABEL216 -LABEL206: + if_icmpeq LABEL217 + jump LABEL227 +LABEL217: iconst 0 iconst 83 iconst 105 iconst 81 iload 0 - enum + enum iconst 0 iload 1 - movecoord + movecoord set_varc_int 213 -LABEL216: - return +LABEL227: + return diff --git a/runelite-client/src/main/scripts/MagicSpellBookRedraw.hash b/runelite-client/src/main/scripts/MagicSpellBookRedraw.hash index 42dcf2565f..9560cbccda 100644 --- a/runelite-client/src/main/scripts/MagicSpellBookRedraw.hash +++ b/runelite-client/src/main/scripts/MagicSpellBookRedraw.hash @@ -1 +1 @@ -401615A4A80516444D88DB3612D803C47C67B151C6588666701911DDACA79534 \ No newline at end of file +F4729C2DE16BB31A779316E5D5080A9B5E6871C752BB4534863E0790D5F35154 \ No newline at end of file diff --git a/runelite-client/src/main/scripts/MagicSpellBookRedraw.rs2asm b/runelite-client/src/main/scripts/MagicSpellBookRedraw.rs2asm index 60807af8e1..45bf0691bf 100644 --- a/runelite-client/src/main/scripts/MagicSpellBookRedraw.rs2asm +++ b/runelite-client/src/main/scripts/MagicSpellBookRedraw.rs2asm @@ -21,10 +21,10 @@ LABEL10: iconst 1 iconst 0 iload 3 - if_setsize + if_setsize iconst 190 iconst 6 - sub + sub iconst 240 istore 12 istore 11 @@ -33,54 +33,54 @@ LABEL10: iconst 1 iconst 0 iload 3 - if_setposition + if_setposition iconst 0 iload 4 - if_sethide + if_sethide sload 0 iconst 190 iconst 494 - parawidth + parawidth sload 1 iconst 190 iconst 494 - parawidth + parawidth invoke 1045 iconst 14 - add + add istore 13 iload 13 iconst 0 iconst 0 iconst 1 iload 5 - if_setsize + if_setsize iload 13 iconst 0 iconst 0 iconst 1 iload 6 - if_setsize + if_setsize iconst 190 iload 13 iconst 2 - multiply - sub + multiply + sub iconst 3 - div + div istore 13 iload 13 iconst 0 iconst 0 iconst 1 iload 5 - if_setposition + if_setposition iload 13 iconst 0 iconst 2 iconst 1 iload 6 - if_setposition + if_setposition jump LABEL147 LABEL76: get_varbit 6718 @@ -93,16 +93,16 @@ LABEL80: iconst 1 iconst 1 iload 3 - if_setsize + if_setsize iconst 0 iconst 0 iconst 1 iconst 1 iload 3 - if_setposition + if_setposition iconst 1 iload 4 - if_sethide + if_sethide iconst -1 iload 10 iload 5 @@ -123,10 +123,10 @@ LABEL109: iconst 1 iconst 0 iload 3 - if_setsize + if_setsize iconst 190 iconst 6 - sub + sub iconst 240 istore 12 istore 11 @@ -135,39 +135,39 @@ LABEL109: iconst 1 iconst 0 iload 3 - if_setposition + if_setposition iconst 0 iload 4 - if_sethide + if_sethide sload 1 iconst 190 iconst 494 - parawidth + parawidth iconst 14 - add + add iconst 0 iconst 0 iconst 1 iload 6 - if_setsize + if_setsize iconst 0 iconst 0 iconst 1 iconst 1 iload 6 - if_setposition + if_setposition LABEL147: iload 0 - cc_deleteall + cc_deleteall iload 1 - cc_deleteall + cc_deleteall iload 2 - cc_deleteall + cc_deleteall iconst 105 iconst 103 iconst 1981 get_varbit 4070 - enum + enum istore 14 iload 14 iconst 1982 @@ -206,10 +206,10 @@ LABEL183: if_icmpeq LABEL187 jump LABEL188 LABEL187: - return + return LABEL188: iload 14 - enum_getoutputcount + enum_getoutputcount istore 15 iload 15 define_array 105 @@ -222,60 +222,78 @@ LABEL188: iload 10 iconst 0 if_icmpeq LABEL203 - jump LABEL235 + jump LABEL242 LABEL203: get_varbit 6718 iconst 1 if_icmpeq LABEL207 - jump LABEL235 + jump LABEL242 LABEL207: iload 18 iload 15 if_icmplt LABEL211 - jump LABEL234 + jump LABEL241 LABEL211: iconst 105 iconst 111 iload 14 iload 18 - enum + enum istore 17 + invoke 3160 + iconst 1 + if_icmpeq LABEL221 + jump LABEL224 +LABEL221: + iload 17 + invoke 3159 + istore 17 +LABEL224: iconst 0 iload 17 iconst 596 - oc_param - if_sethide + oc_param + if_sethide iload 16 iload 18 - set_array_int + set_array_int iload 16 iconst 1 - add + add istore 16 iload 18 iconst 1 - add + add istore 18 jump LABEL207 -LABEL234: - jump LABEL273 -LABEL235: +LABEL241: + jump LABEL287 +LABEL242: iload 18 iload 15 - if_icmplt LABEL239 - jump LABEL273 -LABEL239: + if_icmplt LABEL246 + jump LABEL287 +LABEL246: iconst 105 iconst 111 iload 14 iload 18 - enum + enum istore 17 + invoke 3160 + iconst 1 + if_icmpeq LABEL256 + jump LABEL259 +LABEL256: + iload 17 + invoke 3159 + istore 17 +LABEL259: iload 17 invoke 2619 iconst 1 if_icmpeq FILTER_SPELL - jump LABEL263 + jump LABEL277 FILTER_SPELL: iconst 1 ; boolean the callback modifies iload 17 @@ -289,82 +307,82 @@ FILTER_SPELL: pop_string ; pop the name pop_int ; and the widgetID iconst 1 ; default true, so the script still functions without plugin on - if_icmpeq LABEL250 - jump LABEL263 -LABEL250: + if_icmpeq LABEL264 + jump LABEL277 +LABEL264: iconst 0 iload 17 iconst 596 - oc_param - if_sethide + oc_param + if_sethide iload 16 iload 18 - set_array_int + set_array_int iload 16 iconst 1 - add + add istore 16 - jump LABEL268 -LABEL263: + jump LABEL282 +LABEL277: iconst 1 iload 17 iconst 596 - oc_param - if_sethide -LABEL268: + oc_param + if_sethide +LABEL282: iload 18 iconst 1 - add + add istore 18 - jump LABEL235 -LABEL273: + jump LABEL242 +LABEL287: iload 16 iconst 2 - if_icmpge LABEL277 - jump LABEL285 -LABEL277: + if_icmpge LABEL291 + jump LABEL299 +LABEL291: iconst 0 iconst 0 iload 16 iconst 1 - sub + sub iload 14 invoke 2621 - jump LABEL316 -LABEL285: + jump LABEL330 +LABEL299: iload 16 iconst 0 - if_icmple LABEL289 - jump LABEL316 -LABEL289: + if_icmple LABEL303 + jump LABEL330 +LABEL303: iload 0 iconst 4 iconst 0 - cc_create + cc_create iconst 0 iconst 0 iconst 1 iconst 1 - cc_setsize + cc_setsize iconst 0 iconst 0 iconst 1 iconst 1 - cc_setposition + cc_setposition iconst 16750623 - cc_setcolour + cc_setcolour iconst 495 - cc_settextfont + cc_settextfont iconst 1 - cc_settextshadow + cc_settextshadow iconst 1 iconst 1 iconst 0 - cc_settextalign + cc_settextalign sconst "No spells match your selected filters." - cc_settext - return -LABEL316: + cc_settext + return +LABEL330: iconst 24 istore 19 iconst 0 @@ -381,58 +399,58 @@ LABEL316: sconst "isMobileSpellbookEnabled" runelite_callback iconst 1 - if_icmpeq LABEL332 - jump LABEL422 -LABEL332: + if_icmpeq LABEL346 + jump LABEL436 +LABEL346: iload 16 iconst 15 - if_icmple LABEL336 - jump LABEL341 -LABEL336: + if_icmple LABEL350 + jump LABEL355 +LABEL350: iconst 40 iconst 3 sconst "resizeSpell" runelite_callback istore 20 istore 19 - jump LABEL360 -LABEL341: + jump LABEL374 +LABEL355: iload 16 iconst 20 - if_icmple LABEL345 - jump LABEL350 -LABEL345: + if_icmple LABEL359 + jump LABEL364 +LABEL359: iconst 40 iconst 4 istore 20 istore 19 - jump LABEL360 -LABEL350: + jump LABEL374 +LABEL364: iconst 4 iconst 7 iload 16 iconst 8 - add + add iconst 9 - div + div invoke 1046 invoke 1045 istore 20 -LABEL360: +LABEL374: iconst 0 iconst 5 iconst 7 iload 19 - scale + scale iload 11 iload 19 iload 20 - multiply - sub + multiply + sub iload 20 iconst 1 - sub - div + sub + div invoke 1046 invoke 1045 istore 23 @@ -440,60 +458,60 @@ LABEL360: iload 16 iload 20 iconst 1 - sub - add + sub + add iload 20 - div + div invoke 1045 istore 21 iload 21 iconst 2 - if_icmpge LABEL391 - jump LABEL405 -LABEL391: + if_icmpge LABEL405 + jump LABEL419 +LABEL405: iconst 0 iload 23 iload 12 iload 19 iload 21 - multiply - sub + multiply + sub iload 21 iconst 1 - sub - div + sub + div invoke 1046 invoke 1045 istore 22 -LABEL405: +LABEL419: iload 21 iload 19 - multiply + multiply iload 21 iconst 1 - sub + sub iload 22 - multiply - add + multiply + add istore 24 iconst 0 iconst 0 iconst 1 iconst 1 iload 0 - if_setposition - jump LABEL577 -LABEL422: + if_setposition + jump LABEL591 +LABEL436: get_varbit 6718 iconst 1 - if_icmpeq LABEL426 - jump LABEL498 -LABEL426: + if_icmpeq LABEL440 + jump LABEL512 +LABEL440: get_varbit 4070 - switch - 1: LABEL443 - 2: LABEL458 - 3: LABEL473 + switch + 1: LABEL457 + 2: LABEL472 + 3: LABEL487 iconst 7 iconst 10 iconst 0 @@ -507,9 +525,9 @@ LABEL426: iconst 1 iconst 0 iload 0 - if_setposition - jump LABEL487 -LABEL443: + if_setposition + jump LABEL501 +LABEL457: iconst 4 iconst 7 iconst 20 @@ -523,9 +541,9 @@ LABEL443: iconst 1 iconst 0 iload 0 - if_setposition - jump LABEL487 -LABEL458: + if_setposition + jump LABEL501 +LABEL472: iconst 6 iconst 8 iconst 6 @@ -539,9 +557,9 @@ LABEL458: iconst 1 iconst 0 iload 0 - if_setposition - jump LABEL487 -LABEL473: + if_setposition + jump LABEL501 +LABEL487: iconst 4 iconst 9 iconst 21 @@ -555,51 +573,51 @@ LABEL473: iconst 1 iconst 0 iload 0 - if_setposition -LABEL487: + if_setposition +LABEL501: iload 21 iload 19 - multiply + multiply iload 21 iconst 1 - sub + sub iload 22 - multiply - add + multiply + add istore 24 - jump LABEL577 -LABEL498: + jump LABEL591 +LABEL512: iload 16 iconst 28 - if_icmple LABEL502 - jump LABEL505 -LABEL502: + if_icmple LABEL516 + jump LABEL519 +LABEL516: iconst 4 istore 20 - jump LABEL515 -LABEL505: + jump LABEL529 +LABEL519: iconst 4 iconst 7 iload 16 iconst 8 - add + add iconst 9 - div + div invoke 1046 invoke 1045 istore 20 -LABEL515: +LABEL529: iconst 0 iload 19 iload 11 iload 19 iload 20 - multiply - sub + multiply + sub iload 20 iconst 1 - sub - div + sub + div invoke 1046 invoke 1045 istore 23 @@ -607,44 +625,44 @@ LABEL515: iload 16 iload 20 iconst 1 - sub - add + sub + add iload 20 - div + div invoke 1045 istore 21 iload 21 iconst 2 - if_icmpge LABEL543 - jump LABEL557 -LABEL543: + if_icmpge LABEL557 + jump LABEL571 +LABEL557: iconst 0 iload 23 iload 12 iload 19 iload 21 - multiply - sub + multiply + sub iload 21 iconst 1 - sub - div + sub + div invoke 1046 invoke 1045 istore 22 -LABEL557: +LABEL571: iload 21 iload 19 - multiply + multiply iload 21 iconst 1 - sub + sub iload 22 - multiply - add + multiply + add iload 12 iconst 30 - sub + sub invoke 1045 istore 24 iconst 0 @@ -652,14 +670,14 @@ LABEL557: iconst 1 iconst 1 iload 0 - if_setposition -LABEL577: + if_setposition +LABEL591: iload 20 iload 19 - multiply + multiply iload 20 iconst 1 - sub + sub iload 23 multiply add ; start of the label until here calcs total width @@ -669,16 +687,16 @@ LABEL577: iconst 0 iconst 0 iload 0 - if_setsize + if_setsize iconst -1 istore 25 iload 19 iload 23 - add + add istore 26 iload 19 iload 22 - add + add istore 27 iconst 0 istore 28 @@ -686,22 +704,31 @@ LABEL577: istore 29 iconst 0 istore 18 -LABEL607: +LABEL621: iload 18 iload 16 - if_icmplt LABEL611 - jump LABEL741 -LABEL611: + if_icmplt LABEL625 + jump LABEL762 +LABEL625: iconst 105 iconst 111 iload 14 iload 18 - get_array_int - enum + get_array_int + enum istore 17 + invoke 3160 + iconst 1 + if_icmpeq LABEL636 + jump LABEL639 +LABEL636: + iload 17 + invoke 3159 + istore 17 +LABEL639: iload 17 iconst 596 - oc_param + oc_param istore 25 iload 19 iload 19 @@ -712,17 +739,17 @@ LABEL611: iconst 0 iconst 0 iload 25 - if_setsize + if_setsize iload 18 iload 20 - mod + mod iload 26 - multiply + multiply iload 18 iload 20 - div + div iload 27 - multiply + multiply istore 29 istore 28 iload 28 @@ -737,82 +764,82 @@ LABEL611: iload 25 invoke 2614 iconst 1 - if_icmpeq LABEL652 - jump LABEL668 -LABEL652: + if_icmpeq LABEL673 + jump LABEL689 +LABEL673: iload 19 iconst 40 - if_icmpge LABEL656 - jump LABEL662 -LABEL656: + if_icmpge LABEL677 + jump LABEL683 +LABEL677: iload 17 iconst 599 - oc_param + oc_param iload 25 - if_setgraphic - jump LABEL667 -LABEL662: + if_setgraphic + jump LABEL688 +LABEL683: iload 17 iconst 597 - oc_param + oc_param iload 25 - if_setgraphic -LABEL667: - jump LABEL683 -LABEL668: + if_setgraphic +LABEL688: + jump LABEL704 +LABEL689: iload 19 iconst 40 - if_icmpge LABEL672 - jump LABEL678 -LABEL672: + if_icmpge LABEL693 + jump LABEL699 +LABEL693: iload 17 iconst 600 - oc_param + oc_param iload 25 - if_setgraphic - jump LABEL683 -LABEL678: + if_setgraphic + jump LABEL704 +LABEL699: iload 17 iconst 598 - oc_param + oc_param iload 25 - if_setgraphic -LABEL683: + if_setgraphic +LABEL704: iload 25 invoke 2615 iload 10 iconst 1 - if_icmpeq LABEL689 - jump LABEL716 -LABEL689: + if_icmpeq LABEL710 + jump LABEL737 +LABEL710: iload 1 iconst 5 iload 18 - cc_create + cc_create iload 19 iload 19 iconst 0 iconst 0 - cc_setsize + cc_setsize iload 28 iload 29 iconst 0 iconst 0 - cc_setposition + cc_setposition iload 17 iconst 1 - cc_setobject + cc_setobject iconst 255 - cc_settrans + cc_settrans iconst 2612 iload 17 iload 1 iload 2 iload 12 sconst "oIIi" - cc_setonclick - jump LABEL736 -LABEL716: + cc_setonclick + jump LABEL757 +LABEL737: iconst 2622 iconst 1 iload 17 @@ -822,7 +849,7 @@ LABEL716: iload 12 sconst "1oIiIi" iload 25 - if_setonmouserepeat + if_setonmouserepeat iconst 2622 iconst 0 iload 17 @@ -832,12 +859,12 @@ LABEL716: iload 12 sconst "1oIiIi" iload 25 - if_setonmouseleave -LABEL736: + if_setonmouseleave +LABEL757: iload 18 iconst 1 - add + add istore 18 - jump LABEL607 -LABEL741: - return + jump LABEL621 +LABEL762: + return diff --git a/runelite-client/src/main/scripts/OptionsPanelRebuilder.hash b/runelite-client/src/main/scripts/OptionsPanelRebuilder.hash index 95e14db861..a90e9082b0 100644 --- a/runelite-client/src/main/scripts/OptionsPanelRebuilder.hash +++ b/runelite-client/src/main/scripts/OptionsPanelRebuilder.hash @@ -1 +1 @@ -1D663B889321070027599B4B8437A321C0C83336C703BBBA34BE22A183E1D7B9 \ No newline at end of file +A55D398EBF2C1CE70F2CFC6BEA21939307B69840DEBF46E0384EC2E7EFBBC58A \ No newline at end of file diff --git a/runelite-client/src/main/scripts/OptionsPanelRebuilder.rs2asm b/runelite-client/src/main/scripts/OptionsPanelRebuilder.rs2asm index afb820ff0f..9a2fbfe92f 100644 --- a/runelite-client/src/main/scripts/OptionsPanelRebuilder.rs2asm +++ b/runelite-client/src/main/scripts/OptionsPanelRebuilder.rs2asm @@ -12,19 +12,19 @@ iconst 73 iconst 73 iload 1 - iconst 10551306 + iconst 10551307 enum istore 3 iconst 73 iconst 73 iload 1 - iconst 10551301 + iconst 10551302 enum istore 4 iconst 73 iconst 73 iload 1 - iconst 10551308 + iconst 10551309 enum istore 5 iconst 103 @@ -76,14 +76,14 @@ LABEL70: iconst 0 iload 16 - iconst 39387148 + iconst 39387149 if_getwidth sub invoke 1045 istore 14 iconst 0 iload 17 - iconst 39387148 + iconst 39387149 if_getheight sub invoke 1045 @@ -248,7 +248,7 @@ LABEL163: iconst 73 iconst 73 iload 1 - iconst 10551307 + iconst 10551308 enum iload 5 iload 8 @@ -260,7 +260,7 @@ LABEL242: iconst 73 iconst 73 iload 1 - iconst 10551307 + iconst 10551308 enum iload 3 iconst 0 @@ -386,7 +386,7 @@ LABEL316: iconst 73 iconst 73 iload 1 - iconst 10551307 + iconst 10551308 enum iload 5 iload 8 @@ -398,7 +398,7 @@ LABEL359: iconst 73 iconst 73 iload 1 - iconst 10551307 + iconst 10551308 enum iload 3 iconst 0 @@ -408,7 +408,7 @@ LABEL369: iconst 73 iconst 73 iload 1 - iconst 10551309 + iconst 10551310 enum istore 18 iload 18 @@ -472,7 +472,7 @@ LABEL423: iconst 73 iconst 73 iload 1 - iconst 10551311 + iconst 10551312 enum istore 18 iconst 0 @@ -487,7 +487,7 @@ LABEL437: iconst 73 iconst 73 iload 1 - iconst 10551303 + iconst 10551304 enum if_hassub iconst 1 @@ -542,7 +542,7 @@ LABEL481: iconst 73 iconst 73 iload 1 - iconst 10551303 + iconst 10551304 enum istore 18 iconst 0 diff --git a/runelite-client/src/main/scripts/QuestListShowProgress.hash b/runelite-client/src/main/scripts/QuestListShowProgress.hash index d3899f1431..c235a4ae9b 100644 --- a/runelite-client/src/main/scripts/QuestListShowProgress.hash +++ b/runelite-client/src/main/scripts/QuestListShowProgress.hash @@ -1 +1 @@ -A6B3A7BFE7B688A08F69B91A7FD5C7184D71147D3DAF74B1262369D85DBB3A03 \ No newline at end of file +FC7F8B54745582D6DD530D5458E129B67D6B3CFF61BACD4BBE7BC8C40E26F3C6 \ No newline at end of file diff --git a/runelite-client/src/main/scripts/QuestListShowProgress.rs2asm b/runelite-client/src/main/scripts/QuestListShowProgress.rs2asm index 275080edfc..ca43ff61b9 100644 --- a/runelite-client/src/main/scripts/QuestListShowProgress.rs2asm +++ b/runelite-client/src/main/scripts/QuestListShowProgress.rs2asm @@ -15,39 +15,49 @@ LABEL8: iload 5 iload 6 if_icmplt LABEL12 - jump LABEL56 + jump LABEL64 LABEL12: iload 0 iload 5 cc_find iconst 1 if_icmpeq LABEL18 - jump LABEL51 + jump LABEL59 LABEL18: iload 5 invoke 1357 istore 3 + iload 5 + invoke 3236 + iconst 1 + if_icmpeq LABEL26 + jump LABEL29 +LABEL26: + iconst 10461087 + istore 4 + jump LABEL45 +LABEL29: iload 3 iconst 2 - if_icmpeq LABEL25 - jump LABEL28 -LABEL25: + if_icmpeq LABEL33 + jump LABEL36 +LABEL33: iconst 901389 istore 4 - jump LABEL37 -LABEL28: + jump LABEL45 +LABEL36: iload 3 iconst 0 - if_icmpeq LABEL32 - jump LABEL35 -LABEL32: + if_icmpeq LABEL40 + jump LABEL43 +LABEL40: iconst 16776960 istore 4 - jump LABEL37 -LABEL35: + jump LABEL45 +LABEL43: iconst 16711680 istore 4 -LABEL37: +LABEL45: iload 4 cc_setcolour iconst 85 @@ -62,54 +72,64 @@ LABEL37: iload 4 sconst "Iii" cc_setonmouseleave -LABEL51: +LABEL59: iload 5 iconst 1 add istore 5 jump LABEL8 -LABEL56: +LABEL64: iconst 0 invoke 2245 istore 6 istore 5 -LABEL60: +LABEL68: iload 5 iload 6 - if_icmplt LABEL64 - jump LABEL108 -LABEL64: + if_icmplt LABEL72 + jump LABEL124 +LABEL72: iload 1 iload 5 cc_find iconst 1 - if_icmpeq LABEL70 - jump LABEL103 -LABEL70: + if_icmpeq LABEL78 + jump LABEL119 +LABEL78: iload 5 invoke 1358 istore 3 + iload 5 + invoke 3237 + iconst 1 + if_icmpeq LABEL86 + jump LABEL89 +LABEL86: + iconst 10461087 + istore 4 + jump LABEL105 +LABEL89: iload 3 iconst 2 - if_icmpeq LABEL77 - jump LABEL80 -LABEL77: + if_icmpeq LABEL93 + jump LABEL96 +LABEL93: iconst 901389 istore 4 - jump LABEL89 -LABEL80: + jump LABEL105 +LABEL96: iload 3 iconst 0 - if_icmpeq LABEL84 - jump LABEL87 -LABEL84: + if_icmpeq LABEL100 + jump LABEL103 +LABEL100: iconst 16776960 istore 4 - jump LABEL89 -LABEL87: + jump LABEL105 +LABEL103: iconst 16711680 istore 4 -LABEL89: +LABEL105: iload 4 cc_setcolour iconst 85 @@ -124,54 +144,64 @@ LABEL89: iload 4 sconst "Iii" cc_setonmouseleave -LABEL103: +LABEL119: iload 5 iconst 1 add istore 5 - jump LABEL60 -LABEL108: + jump LABEL68 +LABEL124: iconst 0 invoke 2265 istore 6 istore 5 -LABEL112: +LABEL128: iload 5 iload 6 - if_icmplt LABEL116 - jump LABEL160 -LABEL116: + if_icmplt LABEL132 + jump LABEL184 +LABEL132: iload 2 iload 5 cc_find iconst 1 - if_icmpeq LABEL122 - jump LABEL155 -LABEL122: + if_icmpeq LABEL138 + jump LABEL179 +LABEL138: iload 5 invoke 1359 istore 3 + iload 5 + invoke 3238 + iconst 1 + if_icmpeq LABEL146 + jump LABEL149 +LABEL146: + iconst 10461087 + istore 4 + jump LABEL165 +LABEL149: iload 3 iconst 2 - if_icmpeq LABEL129 - jump LABEL132 -LABEL129: + if_icmpeq LABEL153 + jump LABEL156 +LABEL153: iconst 901389 istore 4 - jump LABEL141 -LABEL132: + jump LABEL165 +LABEL156: iload 3 iconst 0 - if_icmpeq LABEL136 - jump LABEL139 -LABEL136: + if_icmpeq LABEL160 + jump LABEL163 +LABEL160: iconst 16776960 istore 4 - jump LABEL141 -LABEL139: + jump LABEL165 +LABEL163: iconst 16711680 istore 4 -LABEL141: +LABEL165: iload 4 cc_setcolour iconst 85 @@ -186,13 +216,13 @@ LABEL141: iload 4 sconst "Iii" cc_setonmouseleave -LABEL155: +LABEL179: iload 5 iconst 1 add istore 5 - jump LABEL112 -LABEL160: + jump LABEL128 +LABEL184: sconst "questProgressUpdated" runelite_callback return diff --git a/runelite-client/src/main/scripts/ResetChatboxInput.hash b/runelite-client/src/main/scripts/ResetChatboxInput.hash index 12bd3c5bb1..2c90f09832 100644 --- a/runelite-client/src/main/scripts/ResetChatboxInput.hash +++ b/runelite-client/src/main/scripts/ResetChatboxInput.hash @@ -1 +1 @@ -E8B1910003198AB024BADC89831AF1735A2C77256C23551212105F25439E022D \ No newline at end of file +9985AC752BF689CA5353232CF302B41E83EC1901D8615B507EA10DFAA9F5AF9A \ No newline at end of file diff --git a/runelite-client/src/main/scripts/ResetChatboxInput.rs2asm b/runelite-client/src/main/scripts/ResetChatboxInput.rs2asm index 40f4b02c6f..17070abc16 100644 --- a/runelite-client/src/main/scripts/ResetChatboxInput.rs2asm +++ b/runelite-client/src/main/scripts/ResetChatboxInput.rs2asm @@ -165,16 +165,18 @@ LABEL40: get_varc_int 41 iconst 1337 if_icmpeq LABEL154 - jump LABEL156 + jump LABEL158 LABEL154: invoke 2526 pop_int -LABEL156: + clientclock + set_varc_int 384 +LABEL158: invoke 1972 iconst 1 - if_icmpeq LABEL160 - jump LABEL161 -LABEL160: + if_icmpeq LABEL162 + jump LABEL163 +LABEL162: invoke 2581 -LABEL161: +LABEL163: return diff --git a/runelite-client/src/main/scripts/XpDropChanged.hash b/runelite-client/src/main/scripts/XpDropChanged.hash index 052dc1acf7..a1f5ae3d57 100644 --- a/runelite-client/src/main/scripts/XpDropChanged.hash +++ b/runelite-client/src/main/scripts/XpDropChanged.hash @@ -1 +1 @@ -AAA12D64549A1E4573B242AD9D53D8B1A436B947CF55BACBA660812411750E20 \ No newline at end of file +A4641387DC1A542BDEB6F3728D23944F968EF2FD3EA2868B5B6AAF6961D0C6E0 \ No newline at end of file diff --git a/runelite-client/src/main/scripts/XpDropChanged.rs2asm b/runelite-client/src/main/scripts/XpDropChanged.rs2asm index 5c08be1651..401c12d4de 100644 --- a/runelite-client/src/main/scripts/XpDropChanged.rs2asm +++ b/runelite-client/src/main/scripts/XpDropChanged.rs2asm @@ -30,42 +30,54 @@ LABEL9: iload 0 iconst 1 if_icmpeq LABEL25 - jump LABEL71 + jump LABEL81 LABEL25: get_varc_int 207 iconst -1 if_icmpne LABEL29 - jump LABEL70 + jump LABEL80 LABEL29: + get_varc_int 207 + iconst 269500481 + if_icmpeq LABEL33 + jump LABEL39 +LABEL33: + iload 1 + iload 3 + iload 8 + iload 9 + invoke 997 + jump LABEL65 +LABEL39: iload 35 iconst 105 iconst 83 iconst 681 get_varc_int 207 - coordx - enum - set_array_int + coordx + enum + set_array_int iload 35 get_varc_int 207 - coordy + coordy set_array_int 1 iload 35 - get_array_int + get_array_int iconst -1 - if_icmpne LABEL46 - jump LABEL55 -LABEL46: + if_icmpne LABEL56 + jump LABEL65 +LABEL56: iload 35 get_array_int 1 iconst 0 - if_icmpgt LABEL51 - jump LABEL55 -LABEL51: + if_icmpgt LABEL61 + jump LABEL65 +LABEL61: iload 35 iconst 1 - add + add istore 35 -LABEL55: +LABEL65: get_varc_int 208 get_varc_int 209 get_varc_int 210 @@ -81,150 +93,150 @@ LABEL55: set_varc_int 208 set_varc_int 207 jump LABEL25 -LABEL70: - jump LABEL508 -LABEL71: +LABEL80: + jump LABEL518 +LABEL81: sconst "newXpDrop" runelite_callback iconst 10 - stat_xp + stat_xp iload 25 - sub + sub istore 36 iload 36 iconst 0 - if_icmpgt LABEL80 - jump LABEL90 -LABEL80: + if_icmpgt LABEL90 + jump LABEL100 +LABEL90: iload 35 iconst 10 - set_array_int + set_array_int iload 35 iload 36 set_array_int 1 iload 35 iconst 1 - add + add istore 35 -LABEL90: +LABEL100: iconst 0 - stat_xp + stat_xp iload 11 - sub + sub istore 36 iload 36 iconst 0 - if_icmpgt LABEL99 - jump LABEL109 -LABEL99: - iload 35 - iconst 0 - set_array_int - iload 35 - iload 36 - set_array_int 1 - iload 35 - iconst 1 - add - istore 35 + if_icmpgt LABEL109 + jump LABEL119 LABEL109: + iload 35 + iconst 0 + set_array_int + iload 35 + iload 36 + set_array_int 1 + iload 35 + iconst 1 + add + istore 35 +LABEL119: iconst 2 - stat_xp + stat_xp iload 12 - sub + sub istore 36 iload 36 iconst 0 - if_icmpgt LABEL118 - jump LABEL128 -LABEL118: + if_icmpgt LABEL128 + jump LABEL138 +LABEL128: iload 35 iconst 2 - set_array_int + set_array_int iload 35 iload 36 set_array_int 1 iload 35 iconst 1 - add + add istore 35 -LABEL128: +LABEL138: iconst 4 - stat_xp + stat_xp iload 13 - sub + sub istore 36 iload 36 iconst 0 - if_icmpgt LABEL137 - jump LABEL147 -LABEL137: + if_icmpgt LABEL147 + jump LABEL157 +LABEL147: iload 35 iconst 4 - set_array_int + set_array_int iload 35 iload 36 set_array_int 1 iload 35 iconst 1 - add + add istore 35 -LABEL147: +LABEL157: iconst 6 - stat_xp + stat_xp iload 14 - sub + sub istore 36 iload 36 iconst 0 - if_icmpgt LABEL156 - jump LABEL166 -LABEL156: + if_icmpgt LABEL166 + jump LABEL176 +LABEL166: iload 35 iconst 6 - set_array_int + set_array_int iload 35 iload 36 set_array_int 1 iload 35 iconst 1 - add + add istore 35 -LABEL166: +LABEL176: iconst 1 - stat_xp + stat_xp iload 15 - sub + sub istore 36 iload 36 iconst 0 - if_icmpgt LABEL175 - jump LABEL185 -LABEL175: + if_icmpgt LABEL185 + jump LABEL195 +LABEL185: iload 35 iconst 1 - set_array_int + set_array_int iload 35 iload 36 set_array_int 1 iload 35 iconst 1 - add + add istore 35 -LABEL185: +LABEL195: iconst 3 - stat_xp + stat_xp iload 16 - sub + sub istore 36 iload 36 iconst 0 if_icmpgt HP_XP_GAINED - jump LABEL204 + jump LABEL214 HP_XP_GAINED: iload 35 iconst 3 - set_array_int + set_array_int iload 35 iload 36 sconst "hpXpGained" @@ -232,345 +244,345 @@ HP_XP_GAINED: set_array_int 1 iload 35 iconst 1 - add + add istore 35 -LABEL204: +LABEL214: iconst 5 - stat_xp + stat_xp iload 17 - sub + sub istore 36 iload 36 iconst 0 - if_icmpgt LABEL213 - jump LABEL223 -LABEL213: + if_icmpgt LABEL223 + jump LABEL233 +LABEL223: iload 35 iconst 5 - set_array_int + set_array_int iload 35 iload 36 set_array_int 1 iload 35 iconst 1 - add + add istore 35 -LABEL223: +LABEL233: iconst 16 - stat_xp + stat_xp iload 18 - sub + sub istore 36 iload 36 iconst 0 - if_icmpgt LABEL232 - jump LABEL242 -LABEL232: + if_icmpgt LABEL242 + jump LABEL252 +LABEL242: iload 35 iconst 16 - set_array_int + set_array_int iload 35 iload 36 set_array_int 1 iload 35 iconst 1 - add + add istore 35 -LABEL242: +LABEL252: iconst 15 - stat_xp + stat_xp iload 19 - sub + sub istore 36 iload 36 iconst 0 - if_icmpgt LABEL251 - jump LABEL261 -LABEL251: + if_icmpgt LABEL261 + jump LABEL271 +LABEL261: iload 35 iconst 15 - set_array_int + set_array_int iload 35 iload 36 set_array_int 1 iload 35 iconst 1 - add + add istore 35 -LABEL261: +LABEL271: iconst 17 - stat_xp + stat_xp iload 20 - sub + sub istore 36 iload 36 iconst 0 - if_icmpgt LABEL270 - jump LABEL280 -LABEL270: + if_icmpgt LABEL280 + jump LABEL290 +LABEL280: iload 35 iconst 17 - set_array_int + set_array_int iload 35 iload 36 set_array_int 1 iload 35 iconst 1 - add + add istore 35 -LABEL280: +LABEL290: iconst 12 - stat_xp + stat_xp iload 21 - sub + sub istore 36 iload 36 iconst 0 - if_icmpgt LABEL289 - jump LABEL299 -LABEL289: + if_icmpgt LABEL299 + jump LABEL309 +LABEL299: iload 35 iconst 12 - set_array_int + set_array_int iload 35 iload 36 set_array_int 1 iload 35 iconst 1 - add + add istore 35 -LABEL299: +LABEL309: iconst 20 - stat_xp + stat_xp iload 22 - sub + sub istore 36 iload 36 iconst 0 - if_icmpgt LABEL308 - jump LABEL318 -LABEL308: + if_icmpgt LABEL318 + jump LABEL328 +LABEL318: iload 35 iconst 20 - set_array_int + set_array_int iload 35 iload 36 set_array_int 1 iload 35 iconst 1 - add + add istore 35 -LABEL318: +LABEL328: iconst 14 - stat_xp + stat_xp iload 23 - sub + sub istore 36 iload 36 iconst 0 - if_icmpgt LABEL327 - jump LABEL337 -LABEL327: + if_icmpgt LABEL337 + jump LABEL347 +LABEL337: iload 35 iconst 14 - set_array_int + set_array_int iload 35 iload 36 set_array_int 1 iload 35 iconst 1 - add + add istore 35 -LABEL337: +LABEL347: iconst 13 - stat_xp + stat_xp iload 24 - sub + sub istore 36 iload 36 iconst 0 - if_icmpgt LABEL346 - jump LABEL356 -LABEL346: + if_icmpgt LABEL356 + jump LABEL366 +LABEL356: iload 35 iconst 13 - set_array_int + set_array_int iload 35 iload 36 set_array_int 1 iload 35 iconst 1 - add + add istore 35 -LABEL356: +LABEL366: iconst 7 - stat_xp + stat_xp iload 26 - sub + sub istore 36 iload 36 iconst 0 - if_icmpgt LABEL365 - jump LABEL375 -LABEL365: + if_icmpgt LABEL375 + jump LABEL385 +LABEL375: iload 35 iconst 7 - set_array_int + set_array_int iload 35 iload 36 set_array_int 1 iload 35 iconst 1 - add + add istore 35 -LABEL375: +LABEL385: iconst 11 - stat_xp + stat_xp iload 27 - sub + sub istore 36 iload 36 iconst 0 - if_icmpgt LABEL384 - jump LABEL394 -LABEL384: + if_icmpgt LABEL394 + jump LABEL404 +LABEL394: iload 35 iconst 11 - set_array_int + set_array_int iload 35 iload 36 set_array_int 1 iload 35 iconst 1 - add + add istore 35 -LABEL394: +LABEL404: iconst 8 - stat_xp + stat_xp iload 28 - sub + sub istore 36 iload 36 iconst 0 - if_icmpgt LABEL403 - jump LABEL413 -LABEL403: + if_icmpgt LABEL413 + jump LABEL423 +LABEL413: iload 35 iconst 8 - set_array_int + set_array_int iload 35 iload 36 set_array_int 1 iload 35 iconst 1 - add + add istore 35 -LABEL413: +LABEL423: iconst 9 - stat_xp + stat_xp iload 29 - sub + sub istore 36 iload 36 iconst 0 - if_icmpgt LABEL422 - jump LABEL432 -LABEL422: + if_icmpgt LABEL432 + jump LABEL442 +LABEL432: iload 35 iconst 9 - set_array_int + set_array_int iload 35 iload 36 set_array_int 1 iload 35 iconst 1 - add + add istore 35 -LABEL432: +LABEL442: iconst 18 - stat_xp + stat_xp iload 30 - sub + sub istore 36 iload 36 iconst 0 - if_icmpgt LABEL441 - jump LABEL451 -LABEL441: + if_icmpgt LABEL451 + jump LABEL461 +LABEL451: iload 35 iconst 18 - set_array_int + set_array_int iload 35 iload 36 set_array_int 1 iload 35 iconst 1 - add + add istore 35 -LABEL451: +LABEL461: iconst 19 - stat_xp + stat_xp iload 31 - sub + sub istore 36 iload 36 iconst 0 - if_icmpgt LABEL460 - jump LABEL470 -LABEL460: + if_icmpgt LABEL470 + jump LABEL480 +LABEL470: iload 35 iconst 19 - set_array_int + set_array_int iload 35 iload 36 set_array_int 1 iload 35 iconst 1 - add + add istore 35 -LABEL470: +LABEL480: iconst 22 - stat_xp + stat_xp iload 32 - sub + sub istore 36 iload 36 iconst 0 - if_icmpgt LABEL479 - jump LABEL489 -LABEL479: + if_icmpgt LABEL489 + jump LABEL499 +LABEL489: iload 35 iconst 22 - set_array_int + set_array_int iload 35 iload 36 set_array_int 1 iload 35 iconst 1 - add + add istore 35 -LABEL489: +LABEL499: iconst 21 - stat_xp + stat_xp iload 33 - sub + sub istore 36 iload 36 iconst 0 - if_icmpgt LABEL498 - jump LABEL508 -LABEL498: + if_icmpgt LABEL508 + jump LABEL518 +LABEL508: iload 35 iconst 21 - set_array_int + set_array_int iload 35 iload 36 set_array_int 1 iload 35 iconst 1 - add + add istore 35 -LABEL508: +LABEL518: iconst 0 istore 37 iconst 0 @@ -597,221 +609,221 @@ LABEL508: sstore 0 iload 35 iconst 0 - if_icmpgt LABEL536 - jump LABEL779 -LABEL536: + if_icmpgt LABEL546 + jump LABEL789 +LABEL546: iload 16 iconst 0 - if_icmpgt LABEL540 - jump LABEL779 -LABEL540: - clientclock + if_icmpgt LABEL550 + jump LABEL789 +LABEL550: + clientclock get_varc_int 76 - sub + sub iconst 10 - if_icmpgt LABEL546 - jump LABEL779 -LABEL546: + if_icmpgt LABEL556 + jump LABEL789 +LABEL556: get_varbit 4693 iconst 1 - if_icmpeq LABEL550 - jump LABEL561 -LABEL550: + if_icmpeq LABEL560 + jump LABEL571 +LABEL560: invoke 1972 iconst 0 - if_icmpeq LABEL554 - jump LABEL561 -LABEL554: + if_icmpeq LABEL564 + jump LABEL571 +LABEL564: iconst 495 iconst 495 iconst 25 istore 41 istore 40 istore 39 - jump LABEL575 -LABEL561: + jump LABEL585 +LABEL571: get_varbit 4693 iconst 2 - if_icmpeq LABEL565 - jump LABEL575 -LABEL565: + if_icmpeq LABEL575 + jump LABEL585 +LABEL575: invoke 1972 iconst 0 - if_icmpeq LABEL569 - jump LABEL575 -LABEL569: + if_icmpeq LABEL579 + jump LABEL585 +LABEL579: iconst 496 iconst 496 iconst 25 istore 41 istore 40 istore 39 -LABEL575: +LABEL585: iload 8 - if_getheight + if_getheight istore 42 iload 42 iconst 100 - if_icmplt LABEL582 - jump LABEL584 -LABEL582: + if_icmplt LABEL592 + jump LABEL594 +LABEL592: iconst 100 istore 42 -LABEL584: +LABEL594: iload 41 iconst 105 iconst 105 iconst 1171 get_varbit 4722 - enum - multiply + enum + multiply iload 42 - div + div iconst 1 - add + add istore 43 -LABEL596: +LABEL606: iload 37 iload 35 - if_icmplt LABEL600 - jump LABEL774 -LABEL600: + if_icmplt LABEL610 + jump LABEL784 +LABEL610: iload 38 iconst 0 - if_icmpeq LABEL604 - jump LABEL613 -LABEL604: + if_icmpeq LABEL614 + jump LABEL623 +LABEL614: iload 0 iconst 0 - if_icmpeq LABEL608 - jump LABEL613 -LABEL608: + if_icmpeq LABEL618 + jump LABEL623 +LABEL618: iload 37 - get_array_int + get_array_int set_varc_int 72 iconst 1 istore 38 -LABEL613: - get_varc_int 71 - iconst 0 - if_icmpgt LABEL617 - jump LABEL628 -LABEL617: - get_varc_int 71 - clientclock - iload 43 - sub - if_icmpgt LABEL623 - jump LABEL628 LABEL623: get_varc_int 71 + iconst 0 + if_icmpgt LABEL627 + jump LABEL638 +LABEL627: + get_varc_int 71 + clientclock iload 43 - add + sub + if_icmpgt LABEL633 + jump LABEL638 +LABEL633: + get_varc_int 71 + iload 43 + add istore 44 - jump LABEL630 -LABEL628: - clientclock + jump LABEL640 +LABEL638: + clientclock istore 44 -LABEL630: +LABEL640: iload 44 - clientclock + clientclock iload 43 iload 10 - multiply - add - if_icmplt LABEL638 - jump LABEL771 -LABEL638: + multiply + add + if_icmplt LABEL648 + jump LABEL781 +LABEL648: iconst 105 iconst 73 iconst 1163 get_varc_int 70 - enum + enum istore 47 iconst 0 iload 47 - if_sethide + if_sethide iload 37 get_array_int 1 istore 46 iload 47 iconst 5 iconst 1 - cc_create + cc_create iconst 83 iconst 100 iconst 255 iload 37 - get_array_int - enum - cc_setgraphic + get_array_int + enum + cc_setgraphic iconst 0 iconst 0 iconst 0 iconst 5 - cc_setposition + cc_setposition iconst 1 - cc_sethide + cc_sethide iconst 1 istore 45 iload 37 iconst 1 - add + add istore 37 -LABEL674: +LABEL684: get_varbit 4696 iconst 1 - if_icmpeq LABEL678 - jump LABEL722 -LABEL678: + if_icmpeq LABEL688 + jump LABEL732 +LABEL688: iload 37 iload 35 - if_icmplt LABEL682 - jump LABEL722 -LABEL682: + if_icmplt LABEL692 + jump LABEL732 +LABEL692: iload 45 iconst 5 - if_icmplt LABEL686 - jump LABEL722 -LABEL686: + if_icmplt LABEL696 + jump LABEL732 +LABEL696: iload 46 iconst 1000000 - if_icmplt LABEL690 - jump LABEL722 -LABEL690: + if_icmplt LABEL700 + jump LABEL732 +LABEL700: iload 46 iload 37 get_array_int 1 - add + add istore 46 iload 45 iconst 1 - add + add istore 45 iload 47 iconst 5 iload 45 - cc_create + cc_create iconst 83 iconst 100 iconst 255 iload 37 - get_array_int - enum - cc_setgraphic + get_array_int + enum + cc_setgraphic iconst 0 iconst 0 iconst 0 iconst 5 - cc_setposition + cc_setposition iconst 1 - cc_sethide + cc_sethide iload 37 iconst 1 - add + add istore 37 - jump LABEL674 -LABEL722: + jump LABEL684 +LABEL732: iload 46 sconst "," invoke 46 @@ -820,70 +832,70 @@ LABEL722: sstore 0 iload 0 iconst 1 - if_icmpeq LABEL730 - jump LABEL735 -LABEL730: + if_icmpeq LABEL740 + jump LABEL745 +LABEL740: sconst "" sconst " " sload 0 join_string 3 sstore 0 -LABEL735: +LABEL745: iload 47 iconst 0 - cc_find + cc_find iconst 1 - if_icmpeq LABEL741 - jump LABEL756 -LABEL741: + if_icmpeq LABEL751 + jump LABEL766 +LABEL751: sload 0 - cc_settext + cc_settext iconst 0 iconst 0 iconst 0 iconst 5 - cc_setposition + cc_setposition iconst 1 - cc_sethide + cc_sethide iload 47 iload 41 iload 39 iload 40 sload 0 invoke 996 -LABEL756: +LABEL766: iconst 1005 iload 47 iload 44 sconst "Ii" iload 47 - if_setontimer + if_setontimer iload 44 set_varc_int 71 get_varc_int 70 iconst 1 - add + add iload 10 - mod + mod set_varc_int 70 - jump LABEL773 -LABEL771: + jump LABEL783 +LABEL781: iload 35 istore 37 -LABEL773: - jump LABEL596 -LABEL774: +LABEL783: + jump LABEL606 +LABEL784: iload 1 iload 3 iload 8 iload 9 invoke 997 -LABEL779: +LABEL789: iload 0 iconst 0 - if_icmpeq LABEL783 - jump LABEL802 -LABEL783: + if_icmpeq LABEL793 + jump LABEL812 +LABEL793: iload 3 iload 4 iload 5 @@ -903,5 +915,5 @@ LABEL783: iload 9 iload 10 invoke 1003 -LABEL802: +LABEL812: return diff --git a/runelite-client/src/test/java/net/runelite/client/config/ConfigManagerTest.java b/runelite-client/src/test/java/net/runelite/client/config/ConfigManagerTest.java index 63ca4d6a64..2be777d4d4 100644 --- a/runelite-client/src/test/java/net/runelite/client/config/ConfigManagerTest.java +++ b/runelite-client/src/test/java/net/runelite/client/config/ConfigManagerTest.java @@ -27,11 +27,11 @@ package net.runelite.client.config; import com.google.inject.Guice; import com.google.inject.testing.fieldbinder.Bind; import com.google.inject.testing.fieldbinder.BoundFieldModule; -import java.io.IOException; import java.time.Instant; import java.util.UUID; import java.util.concurrent.ScheduledExecutorService; import javax.inject.Inject; +import net.runelite.api.Client; import net.runelite.client.account.AccountSession; import net.runelite.client.eventbus.EventBus; import org.junit.Assert; @@ -44,6 +44,10 @@ import org.mockito.junit.MockitoJUnitRunner; @RunWith(MockitoJUnitRunner.class) public class ConfigManagerTest { + @Mock + @Bind + Client client; + @Mock @Bind EventBus eventBus; @@ -70,7 +74,7 @@ public class ConfigManagerTest } @Test - public void testGetConfig() throws IOException + public void testGetConfig() { AccountSession accountSession = new AccountSession(UUID.randomUUID(), Instant.now()); accountSession.setUsername("test"); @@ -82,7 +86,7 @@ public class ConfigManagerTest } @Test - public void testGetConfigDefault() throws IOException + public void testGetConfigDefault() { AccountSession accountSession = new AccountSession(UUID.randomUUID(), Instant.now()); accountSession.setUsername("test"); @@ -92,7 +96,7 @@ public class ConfigManagerTest } @Test - public void testSetConfig() throws IOException + public void testSetConfig() { AccountSession accountSession = new AccountSession(UUID.randomUUID(), Instant.now()); accountSession.setUsername("test"); @@ -104,7 +108,7 @@ public class ConfigManagerTest } @Test - public void testGetConfigDescriptor() throws IOException + public void testGetConfigDescriptor() { AccountSession accountSession = new AccountSession(UUID.randomUUID(), Instant.now()); accountSession.setUsername("test"); diff --git a/runelite-client/src/test/java/net/runelite/client/game/ItemVariationMappingTest.java b/runelite-client/src/test/java/net/runelite/client/game/ItemVariationMappingTest.java index a07494cd75..0018b2d7bd 100644 --- a/runelite-client/src/test/java/net/runelite/client/game/ItemVariationMappingTest.java +++ b/runelite-client/src/test/java/net/runelite/client/game/ItemVariationMappingTest.java @@ -345,8 +345,6 @@ public class ItemVariationMappingTest ItemVariationMapping.load(); ITEMS_MAP.forEach((key, value) -> - { - assertEquals(value, (Integer) ItemVariationMapping.map(key)); - }); + assertEquals(value, (Integer) ItemVariationMapping.map(key))); } } diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/PluginManagerTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/PluginManagerTest.java index 0069618dd6..6db1801b14 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/PluginManagerTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/PluginManagerTest.java @@ -46,10 +46,13 @@ import java.util.List; import java.util.Objects; import java.util.Set; import net.runelite.api.Client; +import net.runelite.api.events.Event; import net.runelite.client.RuneLite; import net.runelite.client.RuneLiteModule; import net.runelite.client.config.Config; import net.runelite.client.config.ConfigItem; +import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; import static org.junit.Assert.assertEquals; import org.junit.Before; import org.junit.Rule; @@ -108,7 +111,6 @@ public class PluginManagerTest } } - @SuppressWarnings("unchecked") @Test public void testLoadPlugins() throws Exception { @@ -190,4 +192,34 @@ public class PluginManagerTest } } + @Test + public void testEventbusAnnotations() throws PluginInstantiationException + { + EventBus eventbus = new EventBus(); + PluginManager pluginManager = new PluginManager(true, eventbus, null, null, null, null) + { + @Override + public boolean isPluginEnabled(Plugin plugin) + { + return true; + } + }; + + class TestEvent implements Event {} + class TestPlugin extends Plugin + { + private boolean thisShouldBeTrue = false; + + @Subscribe + private void doSomething(TestEvent event) + { + thisShouldBeTrue = true; + } + } + + TestPlugin plugin = new TestPlugin(); + pluginManager.startPlugin(plugin); + eventbus.post(TestEvent.class, new TestEvent()); + assert plugin.thisShouldBeTrue; + } } diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/attackstyles/AttackStylesPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/attackstyles/AttackStylesPluginTest.java index 893a88771b..702a040ec4 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/attackstyles/AttackStylesPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/attackstyles/AttackStylesPluginTest.java @@ -33,19 +33,23 @@ import net.runelite.api.Client; import net.runelite.api.Skill; import net.runelite.api.VarPlayer; import net.runelite.api.Varbits; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.VarbitChanged; +import net.runelite.api.events.WidgetHiddenChanged; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.config.OpenOSRSConfig; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.ui.overlay.OverlayManager; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; import org.mockito.Mock; +import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import org.mockito.junit.MockitoJUnitRunner; @@ -174,6 +178,61 @@ public class AttackStylesPluginTest WidgetInfo.COMBAT_STYLE_THREE)); } + /* + * Verify that the defensive style is hidden when switching from bludgeon to bow + */ + @Test + public void testHiddenLongrange() + { + final ArgumentCaptor captor = ArgumentCaptor.forClass(Boolean.class); + final ConfigChanged warnForAttackEvent = new ConfigChanged(); + warnForAttackEvent.setGroup("attackIndicator"); + warnForAttackEvent.setKey("warnForDefensive"); + warnForAttackEvent.setNewValue("true"); + attackPlugin.onConfigChanged(warnForAttackEvent); + + // verify there is a warned skill + Set warnedSkills = attackPlugin.getWarnedSkills(); + assertTrue(warnedSkills.contains(Skill.DEFENCE)); + + // Set up mock widget for strength and longrange + final Widget widget = mock(Widget.class); + when(client.getWidget(WidgetInfo.COMBAT_STYLE_FOUR)).thenReturn(widget); + + // Set up hidden changed event + final WidgetHiddenChanged widgetHiddenChanged = new WidgetHiddenChanged(); + widgetHiddenChanged.setWidget(widget); + when(widget.getId()).thenReturn(WidgetInfo.COMBAT_STYLE_FOUR.getPackedId()); + + // Enable hiding widgets + final ConfigChanged hideWidgetEvent = new ConfigChanged(); + hideWidgetEvent.setGroup("attackIndicator"); + hideWidgetEvent.setKey("removeWarnedStyles"); + hideWidgetEvent.setNewValue("true"); + attackPlugin.onConfigChanged(hideWidgetEvent); + attackPlugin.removeWarnedStyles = true; + + // equip bludgeon on player + when(client.getVar(Varbits.EQUIPPED_WEAPON_TYPE)).thenReturn(WeaponType.TYPE_26.ordinal()); + attackPlugin.onVarbitChanged(new VarbitChanged()); + attackPlugin.onWidgetHiddenChanged(widgetHiddenChanged); + + // verify that the agressive style style widget is showing + verify(widget, atLeastOnce()).setHidden(captor.capture()); + assertFalse(captor.getValue()); + + // equip bow on player + // the equipped weaopn varbit will change after the hiddenChanged event has been dispatched + attackPlugin.onWidgetHiddenChanged(widgetHiddenChanged); + when(client.getVar(Varbits.EQUIPPED_WEAPON_TYPE)).thenReturn(WeaponType.TYPE_3.ordinal()); + attackPlugin.onVarbitChanged(new VarbitChanged()); + + // verify that the longrange attack style widget is now hidden + verify(widget, atLeastOnce()).setHidden(captor.capture()); + System.out.println(captor.getValue()); + assertTrue(captor.getValue()); + } + private boolean isAtkHidden() { if (attackPlugin.getHiddenWidgets().size() == 0) diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/emojis/EmojiPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/emojis/EmojiPluginTest.java index 2846dd1993..d6019ce8f9 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/emojis/EmojiPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/emojis/EmojiPluginTest.java @@ -37,6 +37,8 @@ import net.runelite.api.events.ChatMessage; import net.runelite.api.events.GameStateChanged; import net.runelite.client.chat.ChatMessageManager; import net.runelite.client.config.OpenOSRSConfig; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -45,8 +47,6 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import org.mockito.junit.MockitoJUnitRunner; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; @RunWith(MockitoJUnitRunner.class) public class EmojiPluginTest diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/gpu/template/TemplateTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/gpu/template/TemplateTest.java index 0c35e65d52..4279252ea9 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/gpu/template/TemplateTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/gpu/template/TemplateTest.java @@ -50,13 +50,11 @@ public class TemplateTest { Function func = (String resource) -> { - switch (resource) + if ("file2".equals(resource)) { - case "file2": - return FILE2; - default: - throw new RuntimeException("unknown resource"); + return FILE2; } + throw new RuntimeException("unknown resource"); }; String out = new Template(func).process(FILE1); assertEquals(RESULT, out); diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/hiscore/HiscorePanelTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/hiscore/HiscorePanelTest.java index e496268ac1..6c954d062b 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/hiscore/HiscorePanelTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/hiscore/HiscorePanelTest.java @@ -31,8 +31,6 @@ public class HiscorePanelTest @Test public void testConstructor() { - new HiscorePanel(new HiscorePlugin() - { - }); + new HiscorePanel(new HiscorePlugin() {}); } } diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPluginTest.java index 5a7371e45f..dff30ddf14 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPluginTest.java @@ -104,13 +104,13 @@ public class IdleNotifierPluginTest Guice.createInjector(BoundFieldModule.of(this)).injectMembers(this); // Mock monster - final String[] monsterActions = new String[] { "Attack", "Examine" }; + final String[] monsterActions = new String[]{"Attack", "Examine"}; final NPCDefinition monsterComp = mock(NPCDefinition.class); when(monsterComp.getActions()).thenReturn(monsterActions); when(monster.getDefinition()).thenReturn(monsterComp); // Mock random event - final String[] randomEventActions = new String[] { "Talk-to", "Dismiss", "Examine" }; + final String[] randomEventActions = new String[]{"Talk-to", "Dismiss", "Examine"}; final NPCDefinition randomEventComp = mock(NPCDefinition.class); when(randomEventComp.getActions()).thenReturn(randomEventActions); when(randomEvent.getDefinition()).thenReturn(randomEventComp); diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/itemskeptondeath/ItemsKeptOnDeathPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/itemskeptondeath/ItemsKeptOnDeathPluginTest.java index a4410851b0..dc57659955 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/itemskeptondeath/ItemsKeptOnDeathPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/itemskeptondeath/ItemsKeptOnDeathPluginTest.java @@ -662,4 +662,29 @@ public class ItemsKeptOnDeathPluginTest final List kept = deathItems.getKeptItems(); assertTrue(kept.contains(new ItemStack(ItemID.AVERNIC_DEFENDER, 1))); } + + @Test + public void lockedItemTest() + { + // Base item data needs to exist for each locked item tested as the death price is pulled from the base item. + final Item defenderBase = mItem(ItemID.AVERNIC_DEFENDER, 1, "Avernic defender", false, 0); + final Item defenderLocked = mItem(ItemID.AVERNIC_DEFENDER_L, 1, "Avernic defender (l)", false, 0); + + assertEquals(plugin.getDeathPrice(defenderBase), plugin.getDeathPrice(defenderLocked)); + + final Item[] inv = new Item[] + { + defenderLocked, + mItem(ItemID.DRAGON_CLAWS, 1, "Dragon Claws", true, 30042579) + }; + + plugin.isSkulled = true; + plugin.protectingItem = true; + plugin.wildyLevel = 21; + + final DeathItems deathItems = plugin.calculateKeptLostItems(inv, new Item[0]); + + final List kept = deathItems.getKeptItems(); + assertEquals(inv.length, kept.size()); + } } diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/maxhit/calculators/testconfig/MagicMaxHitConfig.java b/runelite-client/src/test/java/net/runelite/client/plugins/maxhit/calculators/testconfig/MagicMaxHitConfig.java index 6702012544..b1339691a8 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/maxhit/calculators/testconfig/MagicMaxHitConfig.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/maxhit/calculators/testconfig/MagicMaxHitConfig.java @@ -32,7 +32,6 @@ import net.runelite.api.ItemID; import net.runelite.api.Skill; import net.runelite.api.Varbits; import net.runelite.client.plugins.maxhit.calculators.MagicMaxHitCalculator; - import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -40,7 +39,7 @@ import static org.mockito.Mockito.when; public enum MagicMaxHitConfig implements MaxHitConfig { - TRIDENT_SLAYER(new int[] {75, 83, 99}, 0, new Item[] + TRIDENT_SLAYER(new int[]{75, 83, 99}, 0, new Item[] { mockItem(ItemID.SLAYER_HELMET_I), mockItem(ItemID.SARADOMIN_CAPE), @@ -54,9 +53,9 @@ public enum MagicMaxHitConfig implements MaxHitConfig mockItem(ItemID.MYSTIC_GLOVES), mockItem(ItemID.WIZARD_BOOTS), mockItem(ItemID.RING_OF_WEALTH) - }, new int[] {25, 27, 34}), + }, new int[]{25, 27, 34}), - TRIDENT_OF_SEAS(new int[] {75, 83, 99}, 0, new Item[] + TRIDENT_OF_SEAS(new int[]{75, 83, 99}, 0, new Item[] { mockItem(ItemID.MYSTIC_HAT), mockItem(ItemID.SARADOMIN_CAPE), @@ -70,9 +69,9 @@ public enum MagicMaxHitConfig implements MaxHitConfig mockItem(ItemID.MYSTIC_GLOVES), mockItem(ItemID.WIZARD_BOOTS), mockItem(ItemID.RING_OF_WEALTH) - }, new int[] {20, 22, 28}), + }, new int[]{20, 22, 28}), - TRIDENT_OF_SWAMP(new int[] {75, 83, 99}, 0, new Item[] + TRIDENT_OF_SWAMP(new int[]{75, 83, 99}, 0, new Item[] { mockItem(ItemID.MYSTIC_HAT), mockItem(ItemID.SARADOMIN_CAPE), @@ -86,9 +85,9 @@ public enum MagicMaxHitConfig implements MaxHitConfig mockItem(ItemID.MYSTIC_GLOVES), mockItem(ItemID.WIZARD_BOOTS), mockItem(ItemID.RING_OF_WEALTH) - }, new int[] {23, 25, 31}), + }, new int[]{23, 25, 31}), - MAGIC_DART(new int[] {75, 83, 99}, 18, new Item[] + MAGIC_DART(new int[]{75, 83, 99}, 18, new Item[] { mockItem(ItemID.MYSTIC_HAT), mockItem(ItemID.SARADOMIN_CAPE), @@ -102,7 +101,7 @@ public enum MagicMaxHitConfig implements MaxHitConfig mockItem(ItemID.MYSTIC_GLOVES), mockItem(ItemID.WIZARD_BOOTS), mockItem(ItemID.RING_OF_WEALTH) - }, new int[] {17, 18, 19}), + }, new int[]{17, 18, 19}), FIRE_BOLT(75, 8, new Item[] @@ -198,10 +197,10 @@ public enum MagicMaxHitConfig implements MaxHitConfig MagicMaxHitConfig(int magicLevel, int spellId, Item[] equipedItems, int expectedMaxHit) { - this.magicLevels = new int[] {magicLevel}; + this.magicLevels = new int[]{magicLevel}; this.spellId = spellId; this.equipedItems = equipedItems; - this.expectedMaxHits = new int[] {expectedMaxHit}; + this.expectedMaxHits = new int[]{expectedMaxHit}; } MagicMaxHitConfig(int[] magicLevels, int spellId, Item[] equipedItems, int[] expectedMaxHits) diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/maxhit/calculators/testconfig/MeleeMaxHitConfig.java b/runelite-client/src/test/java/net/runelite/client/plugins/maxhit/calculators/testconfig/MeleeMaxHitConfig.java index be9b240de9..a986dd9390 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/maxhit/calculators/testconfig/MeleeMaxHitConfig.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/maxhit/calculators/testconfig/MeleeMaxHitConfig.java @@ -36,7 +36,6 @@ import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.plugins.attackstyles.WeaponType; import net.runelite.client.plugins.maxhit.calculators.MeleeMaxHitCalculator; - import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -44,7 +43,7 @@ import static org.mockito.Mockito.when; public enum MeleeMaxHitConfig implements MaxHitConfig { - DRAGON_SCIMITAR(new int[] {75, 83, 99}, 66, WeaponType.TYPE_9, 1, new Item[] + DRAGON_SCIMITAR(new int[]{75, 83, 99}, 66, WeaponType.TYPE_9, 1, new Item[] { mockItem(ItemID.IRON_FULL_HELM), mockItem(ItemID.BLACK_CAPE), @@ -58,9 +57,9 @@ public enum MeleeMaxHitConfig implements MaxHitConfig mockItem(ItemID.LEATHER_GLOVES), mockItem(ItemID.LEATHER_BOOTS), mockItem(ItemID.GOLD_RING) - }, new int[] {17, 19, 22}), + }, new int[]{17, 19, 22}), - DRAGON_SCIMITAR_DEFENDER(new int[] {75, 83, 99}, 76, WeaponType.TYPE_9, 1, new Item[] + DRAGON_SCIMITAR_DEFENDER(new int[]{75, 83, 99}, 76, WeaponType.TYPE_9, 1, new Item[] { mockItem(ItemID.IRON_FULL_HELM), mockItem(ItemID.BLACK_CAPE), @@ -74,9 +73,9 @@ public enum MeleeMaxHitConfig implements MaxHitConfig mockItem(ItemID.LEATHER_GLOVES), mockItem(ItemID.LEATHER_BOOTS), mockItem(ItemID.GOLD_RING) - }, new int[] {19, 21, 24}), + }, new int[]{19, 21, 24}), - DRAGON_SCIMITAR_COMPLETE(new int[] {75, 83, 99}, 108, WeaponType.TYPE_9, 1, new Item[] + DRAGON_SCIMITAR_COMPLETE(new int[]{75, 83, 99}, 108, WeaponType.TYPE_9, 1, new Item[] { mockItem(ItemID.SLAYER_HELMET), mockItem(ItemID.FIRE_CAPE), @@ -90,9 +89,9 @@ public enum MeleeMaxHitConfig implements MaxHitConfig mockItem(ItemID.BARROWS_GLOVES), mockItem(ItemID.DRAGON_BOOTS), mockItem(ItemID.BERSERKER_RING) - }, new int[] {26, 29, 35}), + }, new int[]{26, 29, 35}), - OBSIDIAN_SET(new int[] {75, 83, 99}, 61, WeaponType.TYPE_17, 2, new Item[] + OBSIDIAN_SET(new int[]{75, 83, 99}, 61, WeaponType.TYPE_17, 2, new Item[] { mockItem(ItemID.OBSIDIAN_HELMET), mockItem(ItemID.OBSIDIAN_CAPE), @@ -106,10 +105,10 @@ public enum MeleeMaxHitConfig implements MaxHitConfig mockItem(ItemID.LEATHER_GLOVES), mockItem(ItemID.LEATHER_BOOTS), mockItem(ItemID.GOLD_RING) - }, new int[] {18, 19, 23}), + }, new int[]{18, 19, 23}), - DHAROK_SET(new int[] {75, 75, 75, 83, 83, 83, 99, 99, 99}, 105, WeaponType.TYPE_1, 1, - new int[][] {{99, 99}, {1, 99}, {32, 75}, {99, 99}, {1, 99}, {32, 75}, {99, 99}, {1, 99}, {32, 75}}, + DHAROK_SET(new int[]{75, 75, 75, 83, 83, 83, 99, 99, 99}, 105, WeaponType.TYPE_1, 1, + new int[][]{{99, 99}, {1, 99}, {32, 75}, {99, 99}, {1, 99}, {32, 75}, {99, 99}, {1, 99}, {32, 75}}, new Item[] { mockItem(ItemID.DHAROKS_HELM_100), @@ -124,9 +123,9 @@ public enum MeleeMaxHitConfig implements MaxHitConfig mockItem(ItemID.LEATHER_GLOVES), mockItem(ItemID.LEATHER_BOOTS), mockItem(ItemID.GOLD_RING) - }, new int[] {23, 45, 30, 25, 49, 33, 29, 57, 38}), + }, new int[]{23, 45, 30, 25, 49, 33, 29, 57, 38}), - VOID_SET(new int[] {75, 83, 99}, 66, WeaponType.TYPE_9, 1, new Item[] + VOID_SET(new int[]{75, 83, 99}, 66, WeaponType.TYPE_9, 1, new Item[] { mockItem(ItemID.VOID_MELEE_HELM), mockItem(ItemID.BLACK_CAPE), @@ -140,7 +139,7 @@ public enum MeleeMaxHitConfig implements MaxHitConfig mockItem(ItemID.VOID_KNIGHT_GLOVES), mockItem(ItemID.LEATHER_BOOTS), mockItem(ItemID.GOLD_RING) - }, new int[] {19, 21, 25}), + }, new int[]{19, 21, 25}), ; diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/maxhit/calculators/testconfig/RangeMaxHitConfig.java b/runelite-client/src/test/java/net/runelite/client/plugins/maxhit/calculators/testconfig/RangeMaxHitConfig.java index 2fa986c29c..81d7f196e5 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/maxhit/calculators/testconfig/RangeMaxHitConfig.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/maxhit/calculators/testconfig/RangeMaxHitConfig.java @@ -36,7 +36,6 @@ import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.plugins.maxhit.attackstyle.WeaponType; import net.runelite.client.plugins.maxhit.calculators.RangeMaxHitCalculator; - import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -44,7 +43,7 @@ import static org.mockito.Mockito.when; public enum RangeMaxHitConfig implements MaxHitConfig { - MAGIC_SHORTBOW(new int[] {75, 83, 99}, 49, WeaponType.TYPE_3, 1, new Item[] + MAGIC_SHORTBOW(new int[]{75, 83, 99}, 49, WeaponType.TYPE_3, 1, new Item[] { mockItem(ItemID.IRON_FULL_HELM), mockItem(ItemID.BLACK_CAPE), @@ -59,9 +58,9 @@ public enum RangeMaxHitConfig implements MaxHitConfig mockItem(ItemID.LEATHER_BOOTS), mockItem(ItemID.GOLD_RING), mockItem(ItemID.RUNE_ARROW) - }, new int[] {15, 16, 19}), + }, new int[]{15, 16, 19}), - RUNE_CROSSBOW(new int[] {75, 83, 99}, 115, WeaponType.TYPE_5, 0, new Item[] + RUNE_CROSSBOW(new int[]{75, 83, 99}, 115, WeaponType.TYPE_5, 0, new Item[] { mockItem(ItemID.IRON_FULL_HELM), mockItem(ItemID.BLACK_CAPE), @@ -76,9 +75,9 @@ public enum RangeMaxHitConfig implements MaxHitConfig mockItem(ItemID.LEATHER_BOOTS), mockItem(ItemID.GOLD_RING), mockItem(ItemID.RUNITE_BOLTS) - }, new int[] {24, 26, 31}), + }, new int[]{24, 26, 31}), - BLOwPIPE(new int[] {75, 83, 99}, 50, WeaponType.TYPE_19, 1, new Item[] + BLOwPIPE(new int[]{75, 83, 99}, 50, WeaponType.TYPE_19, 1, new Item[] { mockItem(ItemID.IRON_FULL_HELM), mockItem(ItemID.BLACK_CAPE), @@ -92,9 +91,9 @@ public enum RangeMaxHitConfig implements MaxHitConfig mockItem(ItemID.LEATHER_GLOVES), mockItem(ItemID.LEATHER_BOOTS), mockItem(ItemID.GOLD_RING) - }, new int[] {15, 16, 19}), + }, new int[]{15, 16, 19}), - VOID_SET(new int[] {75, 83, 99}, 115, WeaponType.TYPE_5, 1, new Item[] + VOID_SET(new int[]{75, 83, 99}, 115, WeaponType.TYPE_5, 1, new Item[] { mockItem(ItemID.VOID_RANGER_HELM), mockItem(ItemID.BLACK_CAPE), @@ -108,7 +107,7 @@ public enum RangeMaxHitConfig implements MaxHitConfig mockItem(ItemID.VOID_KNIGHT_GLOVES), mockItem(ItemID.LEATHER_BOOTS), mockItem(ItemID.GOLD_RING) - }, new int[] {26, 28, 33}), + }, new int[]{26, 28, 33}), ; diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverTest.java index 6a09ff0f71..efd84a3646 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverTest.java @@ -30,109 +30,109 @@ import net.runelite.client.plugins.puzzlesolver.solver.PuzzleState; import net.runelite.client.plugins.puzzlesolver.solver.heuristics.ManhattanDistance; import net.runelite.client.plugins.puzzlesolver.solver.pathfinding.IDAStar; import net.runelite.client.plugins.puzzlesolver.solver.pathfinding.IDAStarMM; -import org.junit.Test; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; +import org.junit.Test; public class PuzzleSolverTest { private static final PuzzleState[] START_STATES = - { - new PuzzleState(new int[]{0, 11, 1, 3, 4, 5, 12, 2, 7, 9, 6, 20, 18, 16, 8, 15, 22, 10, 14, 13, 21, -1, 17, 23, 19}), - new PuzzleState(new int[]{0, 2, 7, 3, 4, 10, 5, 12, 1, 9, 6, 17, 8, 14, 19, -1, 16, 21, 11, 13, 15, 20, 22, 18, 23}), - new PuzzleState(new int[]{0, 1, 11, 3, 4, 12, 2, 7, 13, 9, 5, 21, 15, 17, 14, -1, 10, 6, 8, 19, 16, 20, 22, 18, 23}), - new PuzzleState(new int[]{0, 1, 2, 3, 4, 10, 5, 6, 9, 14, 15, -1, 7, 13, 17, 21, 11, 20, 23, 8, 16, 22, 12, 19, 18}), - new PuzzleState(new int[]{0, 1, 2, 3, 4, 5, 6, 8, 22, 18, 10, -1, 7, 17, 9, 20, 11, 12, 21, 14, 16, 15, 23, 13, 19}), - new PuzzleState(new int[]{0, 1, 2, 3, 4, 5, 6, 8, 12, 9, 16, 11, 17, 7, 14, 10, 20, -1, 22, 13, 15, 18, 21, 23, 19}), - new PuzzleState(new int[]{1, 6, 16, 8, 4, 0, 7, 11, 2, 9, 5, 21, 18, 3, 14, 10, 20, -1, 13, 22, 15, 23, 12, 17, 19}), - new PuzzleState(new int[]{0, 1, 2, 4, 8, 6, 16, 11, 7, 3, 5, -1, 12, 14, 9, 15, 10, 17, 13, 18, 20, 21, 22, 23, 19}), - new PuzzleState(new int[]{0, 2, 9, 14, 6, 5, 7, 11, 3, 4, 15, 10, 1, 12, 18, 16, 17, -1, 8, 13, 20, 21, 22, 23, 19}), - new PuzzleState(new int[]{0, 1, 2, 3, 4, 11, 5, 12, 7, 8, 10, 6, 15, 13, 9, 16, 21, -1, 17, 14, 20, 22, 23, 18, 19}), - new PuzzleState(new int[]{5, 0, 1, 2, 4, 10, 6, 3, 8, 9, 12, 13, 7, 14, 19, 15, 11, 16, 17, -1, 20, 21, 22, 18, 23}), - new PuzzleState(new int[]{0, 6, 1, 3, 4, 5, 8, -1, 2, 9, 16, 11, 12, 7, 14, 10, 15, 17, 13, 19, 20, 21, 22, 18, 23}), - new PuzzleState(new int[]{0, 6, 1, 2, 4, 11, 15, 8, 3, 14, 5, 7, 9, 12, 18, 16, 10, 17, 23, 13, 20, 21, 22, -1, 19}), - new PuzzleState(new int[]{0, 1, 7, 2, 4, 5, 3, 12, 8, 9, 15, 6, 18, -1, 13, 11, 10, 22, 17, 23, 16, 21, 20, 19, 14}), - new PuzzleState(new int[]{0, 1, 2, 7, 3, 5, 11, 6, 14, 4, 10, -1, 16, 12, 9, 15, 17, 18, 8, 19, 20, 21, 13, 22, 23}), - new PuzzleState(new int[]{2, 10, 5, 3, 4, -1, 0, 1, 8, 9, 15, 11, 7, 13, 23, 17, 6, 20, 14, 19, 16, 12, 18, 21, 22}), - new PuzzleState(new int[]{0, 1, 2, 8, 9, 5, 6, 7, 3, 4, 10, -1, 14, 23, 18, 21, 11, 16, 12, 19, 15, 20, 17, 13, 22}), - new PuzzleState(new int[]{0, 6, 1, 3, 4, 11, 2, 13, 9, 12, 5, 16, 7, 18, 8, 20, 15, -1, 14, 19, 21, 10, 22, 23, 17}), - new PuzzleState(new int[]{12, 1, 2, 3, 4, 0, 7, 6, 8, 9, 5, 10, 22, 13, 19, 15, 11, 21, 14, 17, 20, 16, 18, -1, 23}), - new PuzzleState(new int[]{0, 2, 11, 3, 4, 5, 1, 6, 8, 9, 15, 10, 13, 14, 19, 7, 12, -1, 17, 18, 20, 21, 16, 22, 23}), - new PuzzleState(new int[]{5, 0, 4, 2, 9, 10, 7, 3, 19, 8, 6, 1, 18, -1, 14, 15, 11, 16, 12, 13, 20, 21, 17, 22, 23}), - new PuzzleState(new int[]{0, 3, 2, 7, 4, 6, 10, 1, 8, 9, 15, 5, 12, 18, 13, -1, 20, 11, 22, 14, 16, 21, 23, 17, 19}), - new PuzzleState(new int[]{1, 2, 4, -1, 9, 0, 5, 7, 3, 14, 10, 6, 8, 13, 19, 15, 11, 18, 12, 22, 20, 16, 21, 23, 17}), - new PuzzleState(new int[]{0, 1, 2, 4, 9, 5, 11, -1, 7, 14, 10, 17, 6, 13, 8, 15, 16, 20, 3, 18, 22, 21, 12, 23, 19}), - new PuzzleState(new int[]{0, 1, 8, 2, 4, 5, 11, 17, 3, 9, 6, 16, 7, 12, 18, 15, 21, -1, 14, 13, 20, 22, 10, 23, 19}), - new PuzzleState(new int[]{5, 0, 2, 3, 4, 1, 8, 6, 7, 9, 11, 12, 16, 13, 14, -1, 22, 20, 17, 19, 21, 10, 15, 18, 23}), - new PuzzleState(new int[]{0, -1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 16, 11, 13, 14, 10, 15, 19, 22, 23, 20, 21, 17, 12, 18}), - new PuzzleState(new int[]{0, 2, 7, -1, 4, 6, 1, 9, 3, 14, 5, 12, 8, 13, 19, 15, 16, 10, 22, 23, 20, 11, 18, 21, 17}), - new PuzzleState(new int[]{7, 5, 13, 1, 12, 0, 2, 4, 3, 9, 10, 6, 8, 17, 14, 15, 11, 16, 18, -1, 20, 21, 22, 23, 19}), - new PuzzleState(new int[]{5, 0, 3, 8, 4, 10, 6, -1, 7, 9, 11, 1, 12, 2, 19, 15, 16, 17, 14, 13, 20, 21, 22, 18, 23}), - new PuzzleState(new int[]{5, 2, 3, 7, 4, 0, 6, 14, 9, 19, 1, 11, 22, 17, 12, 10, 15, -1, 13, 8, 20, 16, 21, 18, 23}), - new PuzzleState(new int[]{0, 1, 3, 4, 9, 5, 6, 2, 7, 14, 10, 13, 17, -1, 8, 15, 11, 16, 12, 18, 20, 21, 22, 23, 19}), - new PuzzleState(new int[]{0, 3, 11, 7, 4, 5, 2, 6, 12, 8, 10, 1, 17, -1, 9, 15, 16, 23, 13, 14, 20, 21, 18, 22, 19}), - new PuzzleState(new int[]{1, 5, 8, 2, 4, -1, 0, 7, 3, 9, 11, 22, 15, 12, 14, 6, 10, 18, 16, 19, 20, 21, 17, 13, 23}), - new PuzzleState(new int[]{7, 12, 11, 4, 9, -1, 0, 8, 10, 2, 6, 1, 16, 3, 14, 5, 15, 17, 13, 19, 20, 21, 22, 18, 23}), - new PuzzleState(new int[]{11, 3, 2, 12, 4, 6, 0, 7, 13, 8, 1, 5, 17, 16, 9, -1, 10, 15, 18, 14, 20, 21, 22, 23, 19}), - new PuzzleState(new int[]{0, 6, 1, 3, 4, 5, 11, 2, 10, 9, 15, 12, 8, 14, 19, 16, 21, -1, 7, 13, 20, 22, 17, 18, 23}), - new PuzzleState(new int[]{0, 1, 2, 3, 4, 6, 10, 7, 8, 9, 5, 16, 11, 14, 17, 20, 13, 18, 12, 22, 21, 15, 23, -1, 19}), - new PuzzleState(new int[]{0, 1, 2, 4, 8, 5, 6, 7, 3, -1, 10, 16, 18, 17, 9, 15, 12, 11, 14, 13, 20, 21, 22, 23, 19}), - new PuzzleState(new int[]{0, 11, 6, 1, 4, 5, 21, 8, 2, 9, 10, 3, 16, -1, 14, 15, 12, 17, 13, 19, 20, 22, 7, 18, 23}), - new PuzzleState(new int[]{0, 6, 1, 2, 4, 11, 10, 3, 13, 9, 5, 7, 8, -1, 23, 15, 16, 22, 18, 14, 20, 21, 12, 17, 19}), - new PuzzleState(new int[]{0, 6, 1, 2, 3, 10, 11, 12, 5, 18, 15, 7, 4, -1, 14, 21, 17, 13, 8, 9, 16, 20, 22, 23, 19}), - new PuzzleState(new int[]{0, 1, 3, 11, 4, 6, 10, 14, 2, 8, 5, -1, 12, 7, 9, 15, 16, 18, 13, 19, 20, 21, 22, 17, 23}), - new PuzzleState(new int[]{1, 5, 2, 3, 4, -1, 0, 7, 14, 8, 11, 6, 13, 9, 23, 10, 12, 15, 19, 17, 20, 21, 16, 22, 18}), - }; + { + new PuzzleState(new int[]{0, 11, 1, 3, 4, 5, 12, 2, 7, 9, 6, 20, 18, 16, 8, 15, 22, 10, 14, 13, 21, -1, 17, 23, 19}), + new PuzzleState(new int[]{0, 2, 7, 3, 4, 10, 5, 12, 1, 9, 6, 17, 8, 14, 19, -1, 16, 21, 11, 13, 15, 20, 22, 18, 23}), + new PuzzleState(new int[]{0, 1, 11, 3, 4, 12, 2, 7, 13, 9, 5, 21, 15, 17, 14, -1, 10, 6, 8, 19, 16, 20, 22, 18, 23}), + new PuzzleState(new int[]{0, 1, 2, 3, 4, 10, 5, 6, 9, 14, 15, -1, 7, 13, 17, 21, 11, 20, 23, 8, 16, 22, 12, 19, 18}), + new PuzzleState(new int[]{0, 1, 2, 3, 4, 5, 6, 8, 22, 18, 10, -1, 7, 17, 9, 20, 11, 12, 21, 14, 16, 15, 23, 13, 19}), + new PuzzleState(new int[]{0, 1, 2, 3, 4, 5, 6, 8, 12, 9, 16, 11, 17, 7, 14, 10, 20, -1, 22, 13, 15, 18, 21, 23, 19}), + new PuzzleState(new int[]{1, 6, 16, 8, 4, 0, 7, 11, 2, 9, 5, 21, 18, 3, 14, 10, 20, -1, 13, 22, 15, 23, 12, 17, 19}), + new PuzzleState(new int[]{0, 1, 2, 4, 8, 6, 16, 11, 7, 3, 5, -1, 12, 14, 9, 15, 10, 17, 13, 18, 20, 21, 22, 23, 19}), + new PuzzleState(new int[]{0, 2, 9, 14, 6, 5, 7, 11, 3, 4, 15, 10, 1, 12, 18, 16, 17, -1, 8, 13, 20, 21, 22, 23, 19}), + new PuzzleState(new int[]{0, 1, 2, 3, 4, 11, 5, 12, 7, 8, 10, 6, 15, 13, 9, 16, 21, -1, 17, 14, 20, 22, 23, 18, 19}), + new PuzzleState(new int[]{5, 0, 1, 2, 4, 10, 6, 3, 8, 9, 12, 13, 7, 14, 19, 15, 11, 16, 17, -1, 20, 21, 22, 18, 23}), + new PuzzleState(new int[]{0, 6, 1, 3, 4, 5, 8, -1, 2, 9, 16, 11, 12, 7, 14, 10, 15, 17, 13, 19, 20, 21, 22, 18, 23}), + new PuzzleState(new int[]{0, 6, 1, 2, 4, 11, 15, 8, 3, 14, 5, 7, 9, 12, 18, 16, 10, 17, 23, 13, 20, 21, 22, -1, 19}), + new PuzzleState(new int[]{0, 1, 7, 2, 4, 5, 3, 12, 8, 9, 15, 6, 18, -1, 13, 11, 10, 22, 17, 23, 16, 21, 20, 19, 14}), + new PuzzleState(new int[]{0, 1, 2, 7, 3, 5, 11, 6, 14, 4, 10, -1, 16, 12, 9, 15, 17, 18, 8, 19, 20, 21, 13, 22, 23}), + new PuzzleState(new int[]{2, 10, 5, 3, 4, -1, 0, 1, 8, 9, 15, 11, 7, 13, 23, 17, 6, 20, 14, 19, 16, 12, 18, 21, 22}), + new PuzzleState(new int[]{0, 1, 2, 8, 9, 5, 6, 7, 3, 4, 10, -1, 14, 23, 18, 21, 11, 16, 12, 19, 15, 20, 17, 13, 22}), + new PuzzleState(new int[]{0, 6, 1, 3, 4, 11, 2, 13, 9, 12, 5, 16, 7, 18, 8, 20, 15, -1, 14, 19, 21, 10, 22, 23, 17}), + new PuzzleState(new int[]{12, 1, 2, 3, 4, 0, 7, 6, 8, 9, 5, 10, 22, 13, 19, 15, 11, 21, 14, 17, 20, 16, 18, -1, 23}), + new PuzzleState(new int[]{0, 2, 11, 3, 4, 5, 1, 6, 8, 9, 15, 10, 13, 14, 19, 7, 12, -1, 17, 18, 20, 21, 16, 22, 23}), + new PuzzleState(new int[]{5, 0, 4, 2, 9, 10, 7, 3, 19, 8, 6, 1, 18, -1, 14, 15, 11, 16, 12, 13, 20, 21, 17, 22, 23}), + new PuzzleState(new int[]{0, 3, 2, 7, 4, 6, 10, 1, 8, 9, 15, 5, 12, 18, 13, -1, 20, 11, 22, 14, 16, 21, 23, 17, 19}), + new PuzzleState(new int[]{1, 2, 4, -1, 9, 0, 5, 7, 3, 14, 10, 6, 8, 13, 19, 15, 11, 18, 12, 22, 20, 16, 21, 23, 17}), + new PuzzleState(new int[]{0, 1, 2, 4, 9, 5, 11, -1, 7, 14, 10, 17, 6, 13, 8, 15, 16, 20, 3, 18, 22, 21, 12, 23, 19}), + new PuzzleState(new int[]{0, 1, 8, 2, 4, 5, 11, 17, 3, 9, 6, 16, 7, 12, 18, 15, 21, -1, 14, 13, 20, 22, 10, 23, 19}), + new PuzzleState(new int[]{5, 0, 2, 3, 4, 1, 8, 6, 7, 9, 11, 12, 16, 13, 14, -1, 22, 20, 17, 19, 21, 10, 15, 18, 23}), + new PuzzleState(new int[]{0, -1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 16, 11, 13, 14, 10, 15, 19, 22, 23, 20, 21, 17, 12, 18}), + new PuzzleState(new int[]{0, 2, 7, -1, 4, 6, 1, 9, 3, 14, 5, 12, 8, 13, 19, 15, 16, 10, 22, 23, 20, 11, 18, 21, 17}), + new PuzzleState(new int[]{7, 5, 13, 1, 12, 0, 2, 4, 3, 9, 10, 6, 8, 17, 14, 15, 11, 16, 18, -1, 20, 21, 22, 23, 19}), + new PuzzleState(new int[]{5, 0, 3, 8, 4, 10, 6, -1, 7, 9, 11, 1, 12, 2, 19, 15, 16, 17, 14, 13, 20, 21, 22, 18, 23}), + new PuzzleState(new int[]{5, 2, 3, 7, 4, 0, 6, 14, 9, 19, 1, 11, 22, 17, 12, 10, 15, -1, 13, 8, 20, 16, 21, 18, 23}), + new PuzzleState(new int[]{0, 1, 3, 4, 9, 5, 6, 2, 7, 14, 10, 13, 17, -1, 8, 15, 11, 16, 12, 18, 20, 21, 22, 23, 19}), + new PuzzleState(new int[]{0, 3, 11, 7, 4, 5, 2, 6, 12, 8, 10, 1, 17, -1, 9, 15, 16, 23, 13, 14, 20, 21, 18, 22, 19}), + new PuzzleState(new int[]{1, 5, 8, 2, 4, -1, 0, 7, 3, 9, 11, 22, 15, 12, 14, 6, 10, 18, 16, 19, 20, 21, 17, 13, 23}), + new PuzzleState(new int[]{7, 12, 11, 4, 9, -1, 0, 8, 10, 2, 6, 1, 16, 3, 14, 5, 15, 17, 13, 19, 20, 21, 22, 18, 23}), + new PuzzleState(new int[]{11, 3, 2, 12, 4, 6, 0, 7, 13, 8, 1, 5, 17, 16, 9, -1, 10, 15, 18, 14, 20, 21, 22, 23, 19}), + new PuzzleState(new int[]{0, 6, 1, 3, 4, 5, 11, 2, 10, 9, 15, 12, 8, 14, 19, 16, 21, -1, 7, 13, 20, 22, 17, 18, 23}), + new PuzzleState(new int[]{0, 1, 2, 3, 4, 6, 10, 7, 8, 9, 5, 16, 11, 14, 17, 20, 13, 18, 12, 22, 21, 15, 23, -1, 19}), + new PuzzleState(new int[]{0, 1, 2, 4, 8, 5, 6, 7, 3, -1, 10, 16, 18, 17, 9, 15, 12, 11, 14, 13, 20, 21, 22, 23, 19}), + new PuzzleState(new int[]{0, 11, 6, 1, 4, 5, 21, 8, 2, 9, 10, 3, 16, -1, 14, 15, 12, 17, 13, 19, 20, 22, 7, 18, 23}), + new PuzzleState(new int[]{0, 6, 1, 2, 4, 11, 10, 3, 13, 9, 5, 7, 8, -1, 23, 15, 16, 22, 18, 14, 20, 21, 12, 17, 19}), + new PuzzleState(new int[]{0, 6, 1, 2, 3, 10, 11, 12, 5, 18, 15, 7, 4, -1, 14, 21, 17, 13, 8, 9, 16, 20, 22, 23, 19}), + new PuzzleState(new int[]{0, 1, 3, 11, 4, 6, 10, 14, 2, 8, 5, -1, 12, 7, 9, 15, 16, 18, 13, 19, 20, 21, 22, 17, 23}), + new PuzzleState(new int[]{1, 5, 2, 3, 4, -1, 0, 7, 14, 8, 11, 6, 13, 9, 23, 10, 12, 15, 19, 17, 20, 21, 16, 22, 18}), + }; private static final PuzzleState[] START_STATES_MM = - { - new PuzzleState(new int[]{0, 5, 1, 3, 4, 15, 2, 8, 10, 9, 22, 16, 11, 6, 14, 7, 21, 23, 12, 18, 20, -1, 17, 13, 19}), - new PuzzleState(new int[]{0, 12, 8, 13, 4, 3, 16, 2, 1, 9, 21, 5, 6, 10, 14, 7, 17, 20, 18, -1, 15, 11, 22, 23, 19}), - new PuzzleState(new int[]{1, 3, 7, 9, 8, 13, 17, 2, 4, 6, 15, 5, 22, 12, 14, 11, 0, 10, 21, -1, 20, 18, 16, 23, 19}), - new PuzzleState(new int[]{5, 2, 16, 14, 4, 3, 0, 8, 9, 11, 15, 6, 17, 19, 7, 1, 10, -1, 23, 18, 20, 12, 21, 13, 22}), - new PuzzleState(new int[]{0, 6, 1, 4, 13, 10, 2, 16, 7, 3, 20, -1, 8, 14, 9, 21, 5, 18, 11, 19, 17, 15, 12, 22, 23}), - new PuzzleState(new int[]{5, 0, 1, 4, 8, 10, 6, 7, 12, 3, 17, 16, 21, 2, 9, 18, 20, 13, 14, 19, 11, -1, 23, 15, 22}), - new PuzzleState(new int[]{1, 9, 2, 13, 17, 5, 7, 8, 3, 22, 6, -1, 16, 12, 4, 15, 18, 0, 23, 14, 10, 21, 11, 20, 19}), - new PuzzleState(new int[]{1, 2, 11, 13, 4, 21, 7, 3, 6, 9, 0, 8, 10, 19, 14, 20, 12, 16, 23, -1, 5, 17, 15, 22, 18}), - new PuzzleState(new int[]{2, 0, 1, 4, 13, 6, 7, 3, 8, 9, 22, 15, 10, 14, 18, 5, 12, -1, 17, 21, 20, 11, 23, 16, 19}), - new PuzzleState(new int[]{0, 1, 2, 8, 3, 6, 12, 22, 9, 7, 11, 21, 13, 4, 14, 5, 10, -1, 18, 19, 20, 15, 16, 23, 17}), - new PuzzleState(new int[]{1, 2, 3, 4, 8, 0, 6, 15, 14, 18, 16, 17, 20, -1, 9, 10, 12, 22, 11, 13, 21, 7, 5, 19, 23}), - new PuzzleState(new int[]{0, 5, 2, 4, 9, 7, 15, 20, 12, 13, 6, -1, 22, 1, 8, 10, 11, 23, 14, 3, 21, 16, 17, 19, 18}), - new PuzzleState(new int[]{0, 1, 9, 6, 13, 5, 18, -1, 4, 2, 15, 12, 3, 17, 7, 16, 10, 8, 23, 14, 20, 21, 19, 11, 22}), - new PuzzleState(new int[]{11, 5, 12, 3, 4, 15, 8, 0, 7, 1, 6, -1, 19, 2, 9, 16, 10, 13, 17, 23, 20, 21, 22, 14, 18}), - new PuzzleState(new int[]{10, 0, 1, 3, 4, 18, 5, 6, 12, 9, 7, 11, 8, -1, 22, 15, 23, 14, 19, 13, 20, 2, 17, 16, 21}), - new PuzzleState(new int[]{19, -1, 6, 2, 4, 0, 21, 10, 3, 9, 1, 15, 17, 8, 14, 11, 13, 22, 7, 18, 16, 12, 5, 23, 20}), - new PuzzleState(new int[]{11, 6, 3, 4, 9, 1, 10, 16, 2, 7, 5, 0, 13, -1, 12, 21, 8, 18, 17, 14, 15, 20, 22, 23, 19}), - new PuzzleState(new int[]{0, 1, 5, 3, 4, -1, 6, 2, 15, 10, 7, 8, 23, 16, 13, 22, 11, 9, 12, 14, 20, 21, 18, 17, 19}), - new PuzzleState(new int[]{10, 0, 1, -1, 2, 6, 5, 4, 13, 9, 16, 17, 12, 8, 19, 20, 15, 7, 21, 11, 22, 18, 14, 23, 3}), - new PuzzleState(new int[]{1, 0, 5, 3, 9, 20, 15, 7, 2, 14, 6, 4, 12, -1, 8, 13, 18, 10, 23, 11, 21, 16, 17, 19, 22}), - new PuzzleState(new int[]{0, 7, 6, 3, 4, 15, 1, 2, 8, 18, 11, 5, 13, -1, 22, 17, 16, 23, 14, 9, 20, 10, 12, 19, 21}), - new PuzzleState(new int[]{5, 7, 0, 2, 9, 10, 1, 11, 3, 4, 16, 22, 8, 14, 17, 15, 20, 12, 13, 6, 21, 23, 19, -1, 18}), - new PuzzleState(new int[]{3, 0, 1, 5, 4, 11, 6, 2, 16, 9, 15, 10, 7, 12, 13, 21, 19, -1, 22, 8, 20, 17, 14, 18, 23}), - new PuzzleState(new int[]{6, 0, 3, 2, 4, 5, 1, 8, 13, 12, 15, 14, 10, 7, 9, -1, 22, 11, 19, 23, 16, 20, 17, 21, 18}), - new PuzzleState(new int[]{11, 5, 6, 8, 9, 0, 21, 16, 4, 3, 17, 18, 2, 7, 1, 15, 10, -1, 22, 14, 20, 19, 13, 12, 23}), - new PuzzleState(new int[]{2, 18, 3, 11, 4, -1, 5, 6, 12, 1, 10, 20, 0, 7, 9, 21, 15, 14, 23, 19, 16, 22, 13, 8, 17}), - new PuzzleState(new int[]{0, 6, 8, 3, 1, 5, 2, 12, 9, 13, 16, 14, 19, 7, 18, 10, 11, -1, 4, 15, 20, 17, 23, 21, 22}), - new PuzzleState(new int[]{1, 16, 10, 4, 3, 0, 15, 2, 9, -1, 8, 5, 23, 12, 6, 21, 18, 14, 13, 11, 20, 22, 7, 19, 17}), - new PuzzleState(new int[]{1, 7, 6, 3, 4, 0, 2, 14, 5, 22, 18, 21, 16, 9, 13, 10, 20, -1, 8, 17, 15, 23, 11, 19, 12}), - new PuzzleState(new int[]{5, 0, 1, 7, 9, 11, 8, 4, 2, 14, 15, 17, 18, -1, 3, 20, 10, 12, 22, 19, 16, 6, 13, 21, 23}), - new PuzzleState(new int[]{5, 0, 6, 14, 7, 13, 15, 1, 3, 10, 20, 9, 17, 4, 2, 11, 12, 8, 19, -1, 21, 16, 22, 18, 23}), - new PuzzleState(new int[]{12, 7, 8, 4, 9, 6, 11, 15, 2, 1, 5, -1, 13, 16, 3, 17, 0, 10, 18, 14, 20, 22, 21, 19, 23}), - new PuzzleState(new int[]{15, 1, 2, 3, 14, -1, 20, 9, 4, 19, 0, 6, 7, 16, 13, 10, 5, 12, 17, 18, 22, 11, 21, 23, 8}), - new PuzzleState(new int[]{0, 1, 17, -1, 14, 6, 4, 2, 3, 16, 10, 18, 13, 19, 9, 7, 5, 8, 21, 22, 11, 20, 15, 12, 23}), - new PuzzleState(new int[]{5, 11, 9, 0, 3, 8, 14, -1, 6, 4, 1, 13, 7, 2, 19, 10, 21, 18, 23, 17, 15, 20, 12, 16, 22}), - new PuzzleState(new int[]{2, 0, 14, -1, 4, 18, 1, 10, 12, 13, 5, 9, 11, 22, 7, 15, 8, 17, 19, 3, 20, 21, 6, 16, 23}), - new PuzzleState(new int[]{0, 1, 13, 9, 2, 6, 8, 22, 3, 4, 12, 16, 10, 7, 19, -1, 5, 11, 14, 17, 15, 20, 21, 18, 23}), - new PuzzleState(new int[]{0, 13, 17, 8, 3, 5, 1, 12, 14, 4, 10, -1, 6, 7, 9, 15, 23, 2, 16, 19, 20, 11, 21, 22, 18}), - new PuzzleState(new int[]{5, 10, 7, 2, 9, 15, 0, -1, 1, 3, 18, 4, 17, 12, 14, 21, 11, 6, 8, 23, 20, 16, 22, 19, 13}), - new PuzzleState(new int[]{0, 3, 1, 2, 4, 10, 5, 7, 8, 9, 11, 6, 21, 13, 12, 20, 17, -1, 14, 19, 22, 18, 15, 16, 23}), - new PuzzleState(new int[]{0, 2, 7, 11, 13, 3, 14, 1, 4, 9, 5, -1, 12, 8, 18, 20, 10, 15, 22, 23, 17, 16, 6, 21, 19}), - new PuzzleState(new int[]{0, 16, 3, 22, 7, 11, 6, -1, 9, 4, 2, 1, 13, 12, 18, 5, 10, 8, 19, 14, 15, 20, 17, 23, 21}), - new PuzzleState(new int[]{0, 13, 5, 12, 3, 2, 10, 4, 6, 8, 1, 21, 19, 14, 9, 17, 23, 22, 16, 11, 15, 7, 20, -1, 18}), - new PuzzleState(new int[]{14, 5, 6, 12, 4, 10, 20, 1, 0, 23, 2, 16, 13, 19, 3, 15, 22, -1, 9, 8, 11, 7, 18, 17, 21}), - new PuzzleState(new int[]{0, 1, 2, 4, 7, 5, 11, -1, 18, 8, 16, 10, 12, 13, 3, 17, 6, 21, 23, 9, 15, 20, 22, 14, 19}), - new PuzzleState(new int[]{1, 6, 7, 3, 4, 5, 17, 0, 22, 12, 10, 15, 8, -1, 14, 11, 13, 16, 18, 19, 20, 2, 21, 9, 23}), - }; + { + new PuzzleState(new int[]{0, 5, 1, 3, 4, 15, 2, 8, 10, 9, 22, 16, 11, 6, 14, 7, 21, 23, 12, 18, 20, -1, 17, 13, 19}), + new PuzzleState(new int[]{0, 12, 8, 13, 4, 3, 16, 2, 1, 9, 21, 5, 6, 10, 14, 7, 17, 20, 18, -1, 15, 11, 22, 23, 19}), + new PuzzleState(new int[]{1, 3, 7, 9, 8, 13, 17, 2, 4, 6, 15, 5, 22, 12, 14, 11, 0, 10, 21, -1, 20, 18, 16, 23, 19}), + new PuzzleState(new int[]{5, 2, 16, 14, 4, 3, 0, 8, 9, 11, 15, 6, 17, 19, 7, 1, 10, -1, 23, 18, 20, 12, 21, 13, 22}), + new PuzzleState(new int[]{0, 6, 1, 4, 13, 10, 2, 16, 7, 3, 20, -1, 8, 14, 9, 21, 5, 18, 11, 19, 17, 15, 12, 22, 23}), + new PuzzleState(new int[]{5, 0, 1, 4, 8, 10, 6, 7, 12, 3, 17, 16, 21, 2, 9, 18, 20, 13, 14, 19, 11, -1, 23, 15, 22}), + new PuzzleState(new int[]{1, 9, 2, 13, 17, 5, 7, 8, 3, 22, 6, -1, 16, 12, 4, 15, 18, 0, 23, 14, 10, 21, 11, 20, 19}), + new PuzzleState(new int[]{1, 2, 11, 13, 4, 21, 7, 3, 6, 9, 0, 8, 10, 19, 14, 20, 12, 16, 23, -1, 5, 17, 15, 22, 18}), + new PuzzleState(new int[]{2, 0, 1, 4, 13, 6, 7, 3, 8, 9, 22, 15, 10, 14, 18, 5, 12, -1, 17, 21, 20, 11, 23, 16, 19}), + new PuzzleState(new int[]{0, 1, 2, 8, 3, 6, 12, 22, 9, 7, 11, 21, 13, 4, 14, 5, 10, -1, 18, 19, 20, 15, 16, 23, 17}), + new PuzzleState(new int[]{1, 2, 3, 4, 8, 0, 6, 15, 14, 18, 16, 17, 20, -1, 9, 10, 12, 22, 11, 13, 21, 7, 5, 19, 23}), + new PuzzleState(new int[]{0, 5, 2, 4, 9, 7, 15, 20, 12, 13, 6, -1, 22, 1, 8, 10, 11, 23, 14, 3, 21, 16, 17, 19, 18}), + new PuzzleState(new int[]{0, 1, 9, 6, 13, 5, 18, -1, 4, 2, 15, 12, 3, 17, 7, 16, 10, 8, 23, 14, 20, 21, 19, 11, 22}), + new PuzzleState(new int[]{11, 5, 12, 3, 4, 15, 8, 0, 7, 1, 6, -1, 19, 2, 9, 16, 10, 13, 17, 23, 20, 21, 22, 14, 18}), + new PuzzleState(new int[]{10, 0, 1, 3, 4, 18, 5, 6, 12, 9, 7, 11, 8, -1, 22, 15, 23, 14, 19, 13, 20, 2, 17, 16, 21}), + new PuzzleState(new int[]{19, -1, 6, 2, 4, 0, 21, 10, 3, 9, 1, 15, 17, 8, 14, 11, 13, 22, 7, 18, 16, 12, 5, 23, 20}), + new PuzzleState(new int[]{11, 6, 3, 4, 9, 1, 10, 16, 2, 7, 5, 0, 13, -1, 12, 21, 8, 18, 17, 14, 15, 20, 22, 23, 19}), + new PuzzleState(new int[]{0, 1, 5, 3, 4, -1, 6, 2, 15, 10, 7, 8, 23, 16, 13, 22, 11, 9, 12, 14, 20, 21, 18, 17, 19}), + new PuzzleState(new int[]{10, 0, 1, -1, 2, 6, 5, 4, 13, 9, 16, 17, 12, 8, 19, 20, 15, 7, 21, 11, 22, 18, 14, 23, 3}), + new PuzzleState(new int[]{1, 0, 5, 3, 9, 20, 15, 7, 2, 14, 6, 4, 12, -1, 8, 13, 18, 10, 23, 11, 21, 16, 17, 19, 22}), + new PuzzleState(new int[]{0, 7, 6, 3, 4, 15, 1, 2, 8, 18, 11, 5, 13, -1, 22, 17, 16, 23, 14, 9, 20, 10, 12, 19, 21}), + new PuzzleState(new int[]{5, 7, 0, 2, 9, 10, 1, 11, 3, 4, 16, 22, 8, 14, 17, 15, 20, 12, 13, 6, 21, 23, 19, -1, 18}), + new PuzzleState(new int[]{3, 0, 1, 5, 4, 11, 6, 2, 16, 9, 15, 10, 7, 12, 13, 21, 19, -1, 22, 8, 20, 17, 14, 18, 23}), + new PuzzleState(new int[]{6, 0, 3, 2, 4, 5, 1, 8, 13, 12, 15, 14, 10, 7, 9, -1, 22, 11, 19, 23, 16, 20, 17, 21, 18}), + new PuzzleState(new int[]{11, 5, 6, 8, 9, 0, 21, 16, 4, 3, 17, 18, 2, 7, 1, 15, 10, -1, 22, 14, 20, 19, 13, 12, 23}), + new PuzzleState(new int[]{2, 18, 3, 11, 4, -1, 5, 6, 12, 1, 10, 20, 0, 7, 9, 21, 15, 14, 23, 19, 16, 22, 13, 8, 17}), + new PuzzleState(new int[]{0, 6, 8, 3, 1, 5, 2, 12, 9, 13, 16, 14, 19, 7, 18, 10, 11, -1, 4, 15, 20, 17, 23, 21, 22}), + new PuzzleState(new int[]{1, 16, 10, 4, 3, 0, 15, 2, 9, -1, 8, 5, 23, 12, 6, 21, 18, 14, 13, 11, 20, 22, 7, 19, 17}), + new PuzzleState(new int[]{1, 7, 6, 3, 4, 0, 2, 14, 5, 22, 18, 21, 16, 9, 13, 10, 20, -1, 8, 17, 15, 23, 11, 19, 12}), + new PuzzleState(new int[]{5, 0, 1, 7, 9, 11, 8, 4, 2, 14, 15, 17, 18, -1, 3, 20, 10, 12, 22, 19, 16, 6, 13, 21, 23}), + new PuzzleState(new int[]{5, 0, 6, 14, 7, 13, 15, 1, 3, 10, 20, 9, 17, 4, 2, 11, 12, 8, 19, -1, 21, 16, 22, 18, 23}), + new PuzzleState(new int[]{12, 7, 8, 4, 9, 6, 11, 15, 2, 1, 5, -1, 13, 16, 3, 17, 0, 10, 18, 14, 20, 22, 21, 19, 23}), + new PuzzleState(new int[]{15, 1, 2, 3, 14, -1, 20, 9, 4, 19, 0, 6, 7, 16, 13, 10, 5, 12, 17, 18, 22, 11, 21, 23, 8}), + new PuzzleState(new int[]{0, 1, 17, -1, 14, 6, 4, 2, 3, 16, 10, 18, 13, 19, 9, 7, 5, 8, 21, 22, 11, 20, 15, 12, 23}), + new PuzzleState(new int[]{5, 11, 9, 0, 3, 8, 14, -1, 6, 4, 1, 13, 7, 2, 19, 10, 21, 18, 23, 17, 15, 20, 12, 16, 22}), + new PuzzleState(new int[]{2, 0, 14, -1, 4, 18, 1, 10, 12, 13, 5, 9, 11, 22, 7, 15, 8, 17, 19, 3, 20, 21, 6, 16, 23}), + new PuzzleState(new int[]{0, 1, 13, 9, 2, 6, 8, 22, 3, 4, 12, 16, 10, 7, 19, -1, 5, 11, 14, 17, 15, 20, 21, 18, 23}), + new PuzzleState(new int[]{0, 13, 17, 8, 3, 5, 1, 12, 14, 4, 10, -1, 6, 7, 9, 15, 23, 2, 16, 19, 20, 11, 21, 22, 18}), + new PuzzleState(new int[]{5, 10, 7, 2, 9, 15, 0, -1, 1, 3, 18, 4, 17, 12, 14, 21, 11, 6, 8, 23, 20, 16, 22, 19, 13}), + new PuzzleState(new int[]{0, 3, 1, 2, 4, 10, 5, 7, 8, 9, 11, 6, 21, 13, 12, 20, 17, -1, 14, 19, 22, 18, 15, 16, 23}), + new PuzzleState(new int[]{0, 2, 7, 11, 13, 3, 14, 1, 4, 9, 5, -1, 12, 8, 18, 20, 10, 15, 22, 23, 17, 16, 6, 21, 19}), + new PuzzleState(new int[]{0, 16, 3, 22, 7, 11, 6, -1, 9, 4, 2, 1, 13, 12, 18, 5, 10, 8, 19, 14, 15, 20, 17, 23, 21}), + new PuzzleState(new int[]{0, 13, 5, 12, 3, 2, 10, 4, 6, 8, 1, 21, 19, 14, 9, 17, 23, 22, 16, 11, 15, 7, 20, -1, 18}), + new PuzzleState(new int[]{14, 5, 6, 12, 4, 10, 20, 1, 0, 23, 2, 16, 13, 19, 3, 15, 22, -1, 9, 8, 11, 7, 18, 17, 21}), + new PuzzleState(new int[]{0, 1, 2, 4, 7, 5, 11, -1, 18, 8, 16, 10, 12, 13, 3, 17, 6, 21, 23, 9, 15, 20, 22, 14, 19}), + new PuzzleState(new int[]{1, 6, 7, 3, 4, 5, 17, 0, 22, 12, 10, 15, 8, -1, 14, 11, 13, 16, 18, 19, 20, 2, 21, 9, 23}), + }; private static final int[] FINISHED_STATE = 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, -1}; diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/raids/RotationSolverTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/raids/RotationSolverTest.java deleted file mode 100644 index 5c2bba30e6..0000000000 --- a/runelite-client/src/test/java/net/runelite/client/plugins/raids/RotationSolverTest.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (c) 2019, Adam - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package net.runelite.client.plugins.raids; - -import static net.runelite.client.plugins.raids.RaidRoom.GUARDIANS; -import static net.runelite.client.plugins.raids.RaidRoom.MUTTADILES; -import static net.runelite.client.plugins.raids.RaidRoom.MYSTICS; -import static net.runelite.client.plugins.raids.RaidRoom.SHAMANS; -import static net.runelite.client.plugins.raids.RaidRoom.TEKTON; -import static net.runelite.client.plugins.raids.RaidRoom.UNKNOWN_COMBAT; -import static net.runelite.client.plugins.raids.RaidRoom.VANGUARDS; -import static net.runelite.client.plugins.raids.RaidRoom.VASA; -import static net.runelite.client.plugins.raids.RaidRoom.VESPULA; -import static org.junit.Assert.assertArrayEquals; -import org.junit.Test; - -public class RotationSolverTest -{ - @Test - public void testSolve1() - { - RaidRoom[] rooms = new RaidRoom[]{VESPULA, UNKNOWN_COMBAT, UNKNOWN_COMBAT, VANGUARDS}; - RotationSolver.solve(rooms); - assertArrayEquals(new RaidRoom[]{VESPULA, SHAMANS, VASA, VANGUARDS}, rooms); - } - - @Test - public void testSolve2() - { - RaidRoom[] rooms = new RaidRoom[]{UNKNOWN_COMBAT, UNKNOWN_COMBAT, MUTTADILES, TEKTON}; - RotationSolver.solve(rooms); - assertArrayEquals(new RaidRoom[]{VESPULA, GUARDIANS, MUTTADILES, TEKTON}, rooms); - } - - @Test - public void testSolve3() - { - RaidRoom[] rooms = new RaidRoom[]{TEKTON, UNKNOWN_COMBAT, GUARDIANS, MYSTICS}; - RotationSolver.solve(rooms); - assertArrayEquals(new RaidRoom[]{TEKTON, VASA, GUARDIANS, MYSTICS}, rooms); - } - - @Test - public void testSolve4() - { - RaidRoom[] rooms = new RaidRoom[]{VASA, UNKNOWN_COMBAT, UNKNOWN_COMBAT, GUARDIANS}; - RotationSolver.solve(rooms); - assertArrayEquals(new RaidRoom[]{VASA, SHAMANS, VESPULA, GUARDIANS}, rooms); - } -} \ No newline at end of file diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/reorderprayers/ReorderPrayersPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/reorderprayers/ReorderPrayersPluginTest.java index 9a4a4953e9..3b3df9f784 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/reorderprayers/ReorderPrayersPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/reorderprayers/ReorderPrayersPluginTest.java @@ -26,7 +26,7 @@ package net.runelite.client.plugins.reorderprayers; import net.runelite.api.Prayer; import static net.runelite.api.Prayer.*; -import static org.junit.Assert.*; +import static org.junit.Assert.assertArrayEquals; import org.junit.Test; public class ReorderPrayersPluginTest diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/screenshot/ScreenshotPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/screenshot/ScreenshotPluginTest.java index df840c4e34..5c199b2b09 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/screenshot/ScreenshotPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/screenshot/ScreenshotPluginTest.java @@ -178,7 +178,7 @@ public class ScreenshotPluginTest when(levelChild.getText()).thenReturn("Your Hitpoints are now 99."); - assertEquals("Hitpoints(99)", screenshotPlugin.parseLevelUpWidget(LEVEL_UP_LEVEL)); + assertEquals("Hitpoints(99)", screenshotPlugin.parseLevelUpWidget(client.getWidget(LEVEL_UP_LEVEL))); WidgetLoaded event = new WidgetLoaded(); event.setGroupId(LEVEL_UP_GROUP_ID); @@ -199,7 +199,7 @@ public class ScreenshotPluginTest when(levelChild.getText()).thenReturn("Your Firemaking level is now 9."); - assertEquals("Firemaking(9)", screenshotPlugin.parseLevelUpWidget(LEVEL_UP_LEVEL)); + assertEquals("Firemaking(9)", screenshotPlugin.parseLevelUpWidget(client.getWidget(LEVEL_UP_LEVEL))); WidgetLoaded event = new WidgetLoaded(); event.setGroupId(LEVEL_UP_GROUP_ID); @@ -220,7 +220,7 @@ public class ScreenshotPluginTest when(levelChild.getText()).thenReturn("Your Attack level is now 70."); - assertEquals("Attack(70)", screenshotPlugin.parseLevelUpWidget(LEVEL_UP_LEVEL)); + assertEquals("Attack(70)", screenshotPlugin.parseLevelUpWidget(client.getWidget(LEVEL_UP_LEVEL))); WidgetLoaded event = new WidgetLoaded(); event.setGroupId(LEVEL_UP_GROUP_ID); @@ -241,7 +241,7 @@ public class ScreenshotPluginTest when(levelChild.getText()).thenReturn("Congratulations, you've just advanced a Hunter level.

Your Hunter level is now 2."); - assertEquals("Hunter(2)", screenshotPlugin.parseLevelUpWidget(DIALOG_SPRITE_TEXT)); + assertEquals("Hunter(2)", screenshotPlugin.parseLevelUpWidget(client.getWidget(DIALOG_SPRITE_TEXT))); WidgetLoaded event = new WidgetLoaded(); event.setGroupId(DIALOG_SPRITE_GROUP_ID); diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/slayer/SlayerPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/slayer/SlayerPluginTest.java index b2e5b15173..1d838d8bc5 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/slayer/SlayerPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/slayer/SlayerPluginTest.java @@ -42,8 +42,8 @@ import net.runelite.api.coords.LocalPoint; import net.runelite.api.events.ChatMessage; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; -import net.runelite.api.events.VarbitChanged; import net.runelite.api.events.StatChanged; +import net.runelite.api.events.VarbitChanged; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.Notifier; @@ -430,7 +430,7 @@ public class SlayerPluginTest } @Test - public void testTaskLookupInvalid() throws IOException + public void testTaskLookupInvalid() { net.runelite.http.api.chat.Task task = new net.runelite.http.api.chat.Task(); task.setTask("task<"); diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/timestamp/TimestampPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/timestamp/TimestampPluginTest.java index 046b67f9b8..e278553476 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/timestamp/TimestampPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/timestamp/TimestampPluginTest.java @@ -32,7 +32,7 @@ import javax.inject.Inject; import net.runelite.api.Client; import net.runelite.client.config.OpenOSRSConfig; import net.runelite.client.events.ConfigChanged; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertEquals; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -79,6 +79,6 @@ public class TimestampPluginTest String testOutput = "[2019:04:07:15:03:58:36]"; TimeZone timeZone = TimeZone.getTimeZone("America/New_York"); plugin.getFormatter().setTimeZone(timeZone); - assertTrue(plugin.generateTimestamp(testInput, timeZone.toZoneId()).equals(testOutput)); + assertEquals(plugin.generateTimestamp(testInput, timeZone.toZoneId()), testOutput); } } diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/timetracking/clocks/ClockPanelTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/timetracking/clocks/ClockPanelTest.java index 09849de72b..fb75827ebe 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/timetracking/clocks/ClockPanelTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/timetracking/clocks/ClockPanelTest.java @@ -25,9 +25,9 @@ package net.runelite.client.plugins.timetracking.clocks; import java.time.format.DateTimeParseException; -import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; +import org.junit.Test; public class ClockPanelTest { diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/timetracking/farming/PatchImplementationTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/timetracking/farming/PatchImplementationTest.java index 6ed2f81f60..51110b0c2f 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/timetracking/farming/PatchImplementationTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/timetracking/farming/PatchImplementationTest.java @@ -26,10 +26,14 @@ package net.runelite.client.plugins.timetracking.farming; import java.util.HashMap; import java.util.Map; +import static org.hamcrest.Matchers.greaterThan; +import static org.hamcrest.Matchers.greaterThanOrEqualTo; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.lessThan; +import static org.hamcrest.Matchers.notNullValue; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ErrorCollector; -import static org.hamcrest.Matchers.*; public class PatchImplementationTest { diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/woodcutting/WoodcuttingPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/woodcutting/WoodcuttingPluginTest.java new file mode 100644 index 0000000000..ad4b7fda79 --- /dev/null +++ b/runelite-client/src/test/java/net/runelite/client/plugins/woodcutting/WoodcuttingPluginTest.java @@ -0,0 +1,145 @@ +/* + * Copyright (c) 2019, Jordan Zomerlei + * Copyright (c) 2019, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.client.plugins.woodcutting; + +import com.google.inject.Guice; +import com.google.inject.testing.fieldbinder.Bind; +import com.google.inject.testing.fieldbinder.BoundFieldModule; +import java.util.concurrent.ScheduledExecutorService; +import javax.inject.Inject; +import net.runelite.api.ChatMessageType; +import net.runelite.api.Client; +import net.runelite.api.events.ChatMessage; +import net.runelite.client.Notifier; +import net.runelite.client.config.OpenOSRSConfig; +import net.runelite.client.game.ItemManager; +import net.runelite.client.ui.overlay.OverlayManager; +import static org.junit.Assert.assertNotNull; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; +import static org.mockito.Mockito.when; +import org.mockito.junit.MockitoJUnitRunner; + +@RunWith(MockitoJUnitRunner.class) +public class WoodcuttingPluginTest +{ + private static final String BIRDS_NEST_MESSAGE = "A bird's nest falls out of the tree."; + + @Inject + WoodcuttingPlugin woodcuttingPlugin; + + @Mock + @Bind + WoodcuttingConfig woodcuttingConfig; + + @Mock + @Bind + OpenOSRSConfig openOSRSConfig; + + @Mock + @Bind + ScheduledExecutorService scheduledExecutorService; + + @Mock + @Bind + Notifier notifier; + + @Mock + @Bind + Client client; + + @Mock + @Bind + WoodcuttingOverlay woodcuttingOverlay; + + @Mock + @Bind + WoodcuttingTreesOverlay woodcuttingTreesOverlay; + + @Mock + @Bind + OverlayManager overlayManager; + + @Mock + @Bind + private ItemManager itemManager; + + @Before + public void before() + { + Guice.createInjector(BoundFieldModule.of(this)).injectMembers(this); + } + + @Test + public void testLogs() + { + ChatMessage chatMessage = new ChatMessage(null, ChatMessageType.SPAM, "", "You get some logs.", "", 0); + woodcuttingPlugin.onChatMessage(chatMessage); + assertNotNull(woodcuttingPlugin.getSession()); + } + + @Test + public void testOakLogs() + { + ChatMessage chatMessage = new ChatMessage(null, ChatMessageType.SPAM, "", "You get some oak logs.", "", 0); + woodcuttingPlugin.onChatMessage(chatMessage); + assertNotNull(woodcuttingPlugin.getSession()); + } + + @Test + public void testArcticLogs() + { + ChatMessage chatMessage = new ChatMessage(null, ChatMessageType.SPAM, "", "You get an arctic log.", "", 0); + woodcuttingPlugin.onChatMessage(chatMessage); + assertNotNull(woodcuttingPlugin.getSession()); + } + + @Test + public void testMushrooms() + { + ChatMessage chatMessage = new ChatMessage(null, ChatMessageType.SPAM, "", "You get some mushrooms.", "", 0); + woodcuttingPlugin.onChatMessage(chatMessage); + assertNotNull(woodcuttingPlugin.getSession()); + } + + @Test + public void testBirdsNest() + { + ChatMessage chatMessage = new ChatMessage(null, ChatMessageType.GAMEMESSAGE, "", BIRDS_NEST_MESSAGE, "", 0); + + when(woodcuttingConfig.showNestNotification()).thenReturn(true); + woodcuttingPlugin.onChatMessage(chatMessage); + verify(notifier).notify("A bird nest has spawned!"); + + when(woodcuttingConfig.showNestNotification()).thenReturn(false); + woodcuttingPlugin.onChatMessage(chatMessage); + verifyNoMoreInteractions(notifier); + } +} \ No newline at end of file diff --git a/runelite-client/src/test/java/net/runelite/client/rs/ClientConfigLoaderTest.java b/runelite-client/src/test/java/net/runelite/client/rs/ClientConfigLoaderTest.java index 3955f4a101..bfacb59016 100644 --- a/runelite-client/src/test/java/net/runelite/client/rs/ClientConfigLoaderTest.java +++ b/runelite-client/src/test/java/net/runelite/client/rs/ClientConfigLoaderTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2017, Adam + * Copyright (c) 2016-2019, Adam * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -22,33 +22,49 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - package net.runelite.client.rs; +import com.google.common.base.Charsets; +import com.google.common.io.CharStreams; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import okhttp3.mockwebserver.MockResponse; +import okhttp3.mockwebserver.MockWebServer; +import org.junit.After; +import static org.junit.Assert.assertEquals; +import org.junit.Before; import org.junit.Test; -/** - * - * @author Adam - */ public class ClientConfigLoaderTest { - @Test - public void test() + private final MockWebServer server = new MockWebServer(); + + @Before + public void before() throws IOException { - final RSConfig config = ClientConfigLoader.fetch().blockingGet(); - - for (String key : config.getClassLoaderProperties().keySet()) + String response; + try (InputStream in = getClass().getResourceAsStream("jav_config.ws")) { - System.out.println(key + ": " + config.getClassLoaderProperties().get(key)); + response = CharStreams.toString(new InputStreamReader( + in, Charsets.UTF_8)); } + server.enqueue(new MockResponse().setBody(response)); - System.out.println("Applet properties:"); - - for (String key : config.getAppletProperties().keySet()) - { - System.out.println(key + ": " + config.getAppletProperties().get(key)); - } + server.start(); } -} + @After + public void after() throws IOException + { + server.shutdown(); + } + + @Test + public void testFetch() throws IOException + { + final RSConfig config = ClientConfigLoader.fetch(server.url("/")); + assertEquals("http://oldschool1.runescape.com/", config.getCodeBase()); + } + +} \ No newline at end of file diff --git a/runelite-client/src/test/java/net/runelite/client/ui/overlay/OverlayManagerTest.java b/runelite-client/src/test/java/net/runelite/client/ui/overlay/OverlayManagerTest.java index af1accea5b..37c53b5f34 100644 --- a/runelite-client/src/test/java/net/runelite/client/ui/overlay/OverlayManagerTest.java +++ b/runelite-client/src/test/java/net/runelite/client/ui/overlay/OverlayManagerTest.java @@ -29,13 +29,12 @@ import java.awt.Graphics2D; import java.util.Arrays; import java.util.List; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertNotEquals; import org.junit.Test; public class OverlayManagerTest { - class TestOverlay extends Overlay + static class TestOverlay extends Overlay { TestOverlay(OverlayPosition position, OverlayPriority priority) { @@ -75,11 +74,11 @@ public class OverlayManagerTest Overlay a2 = new OverlayA(); Overlay b = new OverlayB(); // The same instance of the same overlay should be equal - assertTrue(a1.equals(a1)); + assertEquals(a1, a1); // A different instance of the same overlay should not be equal by default - assertFalse(a1.equals(a2)); + assertNotEquals(a1, a2); // A different instance of a different overlay should not be equal - assertFalse(a1.equals(b)); + assertNotEquals(a1, b); } @Test diff --git a/runelite-client/src/test/java/net/runelite/client/ui/overlay/components/table/TableComponentTest.java b/runelite-client/src/test/java/net/runelite/client/ui/overlay/components/table/TableComponentTest.java index a10bd03d80..a5cb12a8c9 100644 --- a/runelite-client/src/test/java/net/runelite/client/ui/overlay/components/table/TableComponentTest.java +++ b/runelite-client/src/test/java/net/runelite/client/ui/overlay/components/table/TableComponentTest.java @@ -25,16 +25,15 @@ package net.runelite.client.ui.overlay.components.table; import java.awt.Color; -import java.awt.image.BufferedImage; -import org.junit.After; import java.awt.Graphics2D; +import java.awt.image.BufferedImage; import java.util.List; +import org.junit.After; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; - public class TableComponentTest { @Mock diff --git a/runelite-client/src/test/java/net/runelite/client/util/ColorUtilTest.java b/runelite-client/src/test/java/net/runelite/client/util/ColorUtilTest.java index 0399a3634b..9d5f9d8f75 100644 --- a/runelite-client/src/test/java/net/runelite/client/util/ColorUtilTest.java +++ b/runelite-client/src/test/java/net/runelite/client/util/ColorUtilTest.java @@ -50,9 +50,7 @@ public class ColorUtilTest public void colorTag() { COLOR_HEXSTRING_MAP.forEach((color, hex) -> - { - assertEquals("", ColorUtil.colorTag(color)); - }); + assertEquals("", ColorUtil.colorTag(color))); } @Test @@ -81,9 +79,7 @@ public class ColorUtilTest public void toHexColor() { COLOR_HEXSTRING_MAP.forEach((color, hex) -> - { - assertEquals("#" + hex, ColorUtil.toHexColor(color)); - }); + assertEquals("#" + hex, ColorUtil.toHexColor(color))); } @Test @@ -99,9 +95,7 @@ public class ColorUtilTest public void colorToHexCode() { COLOR_HEXSTRING_MAP.forEach((color, hex) -> - { - assertEquals(hex, ColorUtil.colorToHexCode(color)); - }); + assertEquals(hex, ColorUtil.colorToHexCode(color))); } @Test diff --git a/runelite-client/src/test/java/net/runelite/client/util/ImageUtilTest.java b/runelite-client/src/test/java/net/runelite/client/util/ImageUtilTest.java index 829e90368b..e5a6add830 100644 --- a/runelite-client/src/test/java/net/runelite/client/util/ImageUtilTest.java +++ b/runelite-client/src/test/java/net/runelite/client/util/ImageUtilTest.java @@ -130,14 +130,14 @@ public class ImageUtilTest @Test public void grayscaleImage() { - final BufferedImage[] grayscaleColors = new BufferedImage[] { + final BufferedImage[] grayscaleColors = new BufferedImage[]{ oneByOne(WHITE), oneByOne(GRAY), oneByOne(BLACK), oneByOne(BLACK_HALF_TRANSPARENT), oneByOne(BLACK_TRANSPARENT), }; - final BufferedImage[] nonGrayscaleColors = new BufferedImage[] { + final BufferedImage[] nonGrayscaleColors = new BufferedImage[]{ oneByOne(RED), oneByOne(GREEN), oneByOne(BLUE), @@ -173,7 +173,7 @@ public class ImageUtilTest assertEquals(12, stretched.getWidth()); assertEquals(34, stretched.getHeight()); - final BufferedImage[] assertSameAfterResize = new BufferedImage[] { + final BufferedImage[] assertSameAfterResize = new BufferedImage[]{ oneByOne(WHITE), oneByOne(GRAY), oneByOne(BLACK), @@ -327,7 +327,7 @@ public class ImageUtilTest * * @param expected The first {@link BufferedImage} to be compared. * @param actual The second {@link BufferedImage} to be compared. - * @return A boolean indicating whether the given {@link BufferedImage}s are of the same image data. + * @return A boolean indicating whether the given {@link BufferedImage}s are of the same image data. */ private boolean bufferedImagesEqual(final @Nonnull BufferedImage expected, final @Nonnull BufferedImage actual) { @@ -368,7 +368,7 @@ public class ImageUtilTest * Returns whether a {@link BufferedImage} contains only grayscale pixel data. * * @param image The image to be checked. - * @return A boolean indicating whether all of the given image's pixels are grayscale. + * @return A boolean indicating whether all of the given image's pixels are grayscale. */ private boolean isGrayscale(final @Nonnull BufferedImage image) { @@ -394,7 +394,7 @@ public class ImageUtilTest * Creates a {@link BufferedImage} of a 1-by-1px image of the given color. * * @param color The color to use for the image's single pixel. - * @return A {@link BufferedImage} containing a single pixel of the given color. + * @return A {@link BufferedImage} containing a single pixel of the given color. */ private BufferedImage oneByOne(final @Nonnull Color color) { @@ -406,8 +406,8 @@ public class ImageUtilTest * image. * * @param color The color to use for the centered pixel. - * @return A {@link BufferedImage} with completely transparent pixels and one pixel of the - * given color in the center. + * @return A {@link BufferedImage} with completely transparent pixels and one pixel of the + * given color in the center. */ private BufferedImage centeredPixel(final @Nonnull Color color) { @@ -422,7 +422,7 @@ public class ImageUtilTest * @param width The desired width of the color image. * @param height The desired height of the color image. * @param color The desired color of the image. - * @return A {@link BufferedImage} of given dimensions filled with the given color. + * @return A {@link BufferedImage} of given dimensions filled with the given color. */ private BufferedImage solidColor(final int width, final int height, final @Nonnull Color color) { diff --git a/runelite-client/src/test/resources/net/runelite/client/rs/jav_config.ws b/runelite-client/src/test/resources/net/runelite/client/rs/jav_config.ws new file mode 100644 index 0000000000..f3ab2531fb --- /dev/null +++ b/runelite-client/src/test/resources/net/runelite/client/rs/jav_config.ws @@ -0,0 +1,65 @@ +title=Old School RuneScape +adverturl=http://www.runescape.com/g=oldscape/bare_advert.ws +codebase=http://oldschool1.runescape.com/ +cachedir=oldschool +storebase=0 +initial_jar=gamepack_6140455.jar +initial_class=client.class +termsurl=http://www.jagex.com/g=oldscape/terms/terms.ws +privacyurl=http://www.jagex.com/g=oldscape/privacy/privacy.ws +viewerversion=124 +win_sub_version=1 +mac_sub_version=2 +other_sub_version=2 +browsercontrol_win_x86_jar=browsercontrol_0_-1928975093.jar +browsercontrol_win_amd64_jar=browsercontrol_1_1674545273.jar +download=1276414 +window_preferredwidth=800 +window_preferredheight=600 +advert_height=96 +applet_minwidth=765 +applet_minheight=503 +applet_maxwidth=5760 +applet_maxheight=2160 +msg=lang0=English +msg=tandc=This game is copyright © 1999 - 2019 Jagex Ltd.\Use of this game is subject to our ["http://www.runescape.com/terms/terms.ws"Terms and Conditions] and ["http://www.runescape.com/privacy/privacy.ws"Privacy Policy]. +msg=options=Options +msg=language=Language +msg=changes_on_restart=Your changes will take effect when you next start this program. +msg=loading_app_resources=Loading application resources +msg=err_verify_bc64=Unable to verify browsercontrol64 +msg=err_verify_bc=Unable to verify browsercontrol +msg=err_load_bc=Unable to load browsercontrol +msg=loading_app=Loading application +msg=err_create_target=Unable to create target applet +msg=err_create_advertising=Unable to create advertising +msg=err_save_file=Error saving file +msg=err_downloading=Error downloading +msg=ok=OK +msg=cancel=Cancel +msg=message=Message +msg=copy_paste_url=Please copy and paste the following URL into your web browser +msg=information=Information +msg=err_get_file=Error getting file +msg=new_version=Update available! You can now launch the client directly from the OldSchool website.\nGet the new version from the link on the OldSchool homepage: http://oldschool.runescape.com/ +msg=new_version_linktext=Open OldSchool Homepage +msg=new_version_link=http://oldschool.runescape.com/ +param=14=0 +param=12=301 +param=11=https://auth.jagex.com/ +param=13=.runescape.com +param=3=false +param=6=0 +param=7=0 +param=9=ElZAIrq5NpKN6D3mDdihco3oPeYN2KFy2DCquj7JMmECPmLrDP3Bnw +param=15=0 +param=10=5 +param=8=true +param=17=http://www.runescape.com/g=oldscape/slr.ws?order=LPWM +param=2=https://payments.jagex.com/operator/v1/ +param=18= +param=4=45569 +param=1=1 +param=19=196515767263-1oo20deqm6edn7ujlihl6rpadk9drhva.apps.googleusercontent.com +param=16=false +param=5=0 \ No newline at end of file diff --git a/runelite-mixins/src/main/java/net/runelite/api/mixins/Inject.java b/runelite-mixins/src/main/java/net/runelite/api/mixins/Inject.java index a0f40f6bb5..311bb9f4c0 100644 --- a/runelite-mixins/src/main/java/net/runelite/api/mixins/Inject.java +++ b/runelite-mixins/src/main/java/net/runelite/api/mixins/Inject.java @@ -31,7 +31,4 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD, ElementType.FIELD, ElementType.CONSTRUCTOR}) -public @interface Inject -{ - -} +public @interface Inject {} diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/EntityHiderBridgeMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/EntityHiderBridgeMixin.java index f7f78593cc..566e6cdd2e 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/EntityHiderBridgeMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/EntityHiderBridgeMixin.java @@ -62,6 +62,9 @@ public abstract class EntityHiderBridgeMixin implements RSClient @Inject public static boolean hideNPCs2D; + @Inject + public static boolean hidePets; + @Inject public static boolean hideAttackers; @@ -222,6 +225,13 @@ public abstract class EntityHiderBridgeMixin implements RSClient hideSpecificPlayers = players; } + @Inject + @Override + public void setPetsHidden(boolean state) + { + hidePets = state; + } + @Inject @Override public void setAttackersHidden(boolean state) diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/EntityHiderMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/EntityHiderMixin.java index 3daf94d9ba..afb41862e5 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/EntityHiderMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/EntityHiderMixin.java @@ -83,6 +83,9 @@ public abstract class EntityHiderMixin implements RSScene @Shadow("hideNPCs2D") private static boolean hideNPCs2D; + @Shadow("hidePets") + private static boolean hidePets; + @Shadow("hideAttackers") private static boolean hideAttackers; @@ -188,6 +191,14 @@ public abstract class EntityHiderMixin implements RSScene } } + if (hidePets) + { + if (npc.getDefinition().isFollower()) + { + return false; + } + } + if (hideDeadNPCs && npc.getHealthRatio() == 0) { return false; diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSActorMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSActorMixin.java index 3c748ab51e..36cc00f839 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSActorMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSActorMixin.java @@ -37,7 +37,7 @@ import net.runelite.api.coords.WorldArea; import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.AnimationChanged; import net.runelite.api.events.HitsplatApplied; -import net.runelite.api.events.LocalPlayerDeath; +import net.runelite.api.events.PlayerDeath; import net.runelite.api.events.PlayerDeath; import net.runelite.api.events.SpotAnimationChanged; import net.runelite.api.events.InteractingChanged; @@ -248,14 +248,7 @@ public abstract class RSActorMixin implements RSActor { if (healthRatio == 0) { - if (this == client.getLocalPlayer()) - { - client.getLogger().debug("You died!"); - - LocalPlayerDeath event = LocalPlayerDeath.INSTANCE; - client.getCallbacks().post(LocalPlayerDeath.class, event); - } - else if (this != client.getLocalPlayer() && this instanceof Player) + if (this instanceof Player) { final PlayerDeath event = new PlayerDeath((Player) this); client.getCallbacks().post(PlayerDeath.class, event); diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSPlayerMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSPlayerMixin.java index 56fad5dd38..d36d369e89 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSPlayerMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSPlayerMixin.java @@ -45,12 +45,14 @@ import static net.runelite.api.SkullIcon.DEAD_MAN_TWO; import static net.runelite.api.SkullIcon.SKULL; import static net.runelite.api.SkullIcon.SKULL_FIGHT_PIT; import net.runelite.api.coords.LocalPoint; +import net.runelite.api.events.PlayerAppearanceChanged; import net.runelite.api.mixins.Copy; import net.runelite.api.mixins.Inject; import net.runelite.api.mixins.MethodHook; import net.runelite.api.mixins.Mixin; import net.runelite.api.mixins.Replace; import net.runelite.api.mixins.Shadow; +import net.runelite.rs.api.RSBuffer; import net.runelite.rs.api.RSClient; import net.runelite.rs.api.RSModel; import net.runelite.rs.api.RSPlayer; @@ -236,4 +238,20 @@ public abstract class RSPlayerMixin implements RSPlayer { friended = client.getFriendManager().isFriended(getRsName(), false); } + + @Copy("read") + public abstract void rs$read(RSBuffer buffer); + + @Replace("read") + public void rl$read(RSBuffer buffer) + { + final long appearanceHash = getPlayerAppearance() == null ? 0 : getPlayerAppearance().getHash(); + + rs$read(buffer); + + if (getPlayerAppearance().getHash() != appearanceHash) + { + client.getCallbacks().post(PlayerAppearanceChanged.class, new PlayerAppearanceChanged(this)); + } + } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/ScriptVMMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/ScriptVMMixin.java index e71992c810..22062a9e31 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/ScriptVMMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/ScriptVMMixin.java @@ -24,18 +24,17 @@ */ package net.runelite.mixins; - +import java.util.regex.Matcher; +import java.util.regex.Pattern; import net.runelite.api.Client; import static net.runelite.api.Opcodes.RUNELITE_EXECUTE; import net.runelite.api.events.ScriptCallbackEvent; -import net.runelite.api.widgets.JavaScriptCallback; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import net.runelite.api.mixins.Copy; import net.runelite.api.mixins.Inject; import net.runelite.api.mixins.Mixin; import net.runelite.api.mixins.Replace; import net.runelite.api.mixins.Shadow; +import net.runelite.api.widgets.JavaScriptCallback; import net.runelite.rs.api.RSClient; import net.runelite.rs.api.RSScript; import net.runelite.rs.api.RSScriptEvent; diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/SpriteMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/SpriteMixin.java index df5e6acd38..de48e43a8a 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/SpriteMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/SpriteMixin.java @@ -1,9 +1,8 @@ package net.runelite.mixins; -import net.runelite.api.Sprite; import java.util.HashMap; import java.util.Map; - +import net.runelite.api.Sprite; import net.runelite.api.mixins.Copy; import net.runelite.api.mixins.Inject; import net.runelite.api.mixins.Mixin; diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/StretchedModeMaxSizeMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/StretchedModeMaxSizeMixin.java index b80d7c8b59..7908b5422f 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/StretchedModeMaxSizeMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/StretchedModeMaxSizeMixin.java @@ -1,6 +1,5 @@ package net.runelite.mixins; - import java.awt.Dimension; import net.runelite.api.mixins.Copy; import net.runelite.api.mixins.Mixin; diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/StretchedModeMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/StretchedModeMixin.java index 99ba3f5260..23c71c2ed6 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/StretchedModeMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/StretchedModeMixin.java @@ -1,9 +1,8 @@ package net.runelite.mixins; - -import net.runelite.api.Constants; import java.awt.Container; import java.awt.Dimension; +import net.runelite.api.Constants; import net.runelite.api.mixins.Inject; import net.runelite.api.mixins.Mixin; import net.runelite.rs.api.RSClient; diff --git a/runescape-api/src/main/java/net/runelite/mapping/Construct.java b/runescape-api/src/main/java/net/runelite/mapping/Construct.java index a5b5b2541a..894456dc7c 100644 --- a/runescape-api/src/main/java/net/runelite/mapping/Construct.java +++ b/runescape-api/src/main/java/net/runelite/mapping/Construct.java @@ -34,18 +34,15 @@ import java.lang.annotation.Target; * Inject a method to create and construct an object. * The object type is inferred from the return value * of the method. - * + * * {@code * {@literal @}Construct * RSIndexedImage createIndexedImage(); * } - * + * * @author Adam */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) @Documented -public @interface Construct -{ - -} +public @interface Construct {} diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSCanvas.java b/runescape-api/src/main/java/net/runelite/rs/api/RSCanvas.java index f0295a0770..05d6b5bc5e 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSCanvas.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSCanvas.java @@ -1,5 +1,3 @@ package net.runelite.rs.api; -public interface RSCanvas -{ -} +public interface RSCanvas {} diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSClanMate.java b/runescape-api/src/main/java/net/runelite/rs/api/RSClanMate.java index 1bcfb5b6df..aaa5291c8d 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSClanMate.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSClanMate.java @@ -2,6 +2,4 @@ package net.runelite.rs.api; import net.runelite.api.ClanMember; -public interface RSClanMate extends RSBuddy, ClanMember -{ -} +public interface RSClanMate extends RSBuddy, ClanMember {} diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSDecimator.java b/runescape-api/src/main/java/net/runelite/rs/api/RSDecimator.java index 401b20c13f..1a27187b57 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSDecimator.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSDecimator.java @@ -24,6 +24,4 @@ */ package net.runelite.rs.api; -public interface RSDecimator -{ -} +public interface RSDecimator {} diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSFont.java b/runescape-api/src/main/java/net/runelite/rs/api/RSFont.java index b12c97d946..ec246abb22 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSFont.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSFont.java @@ -1,5 +1,3 @@ package net.runelite.rs.api; -public interface RSFont extends RSAbstractFont -{ -} +public interface RSFont extends RSAbstractFont {} diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSFriend.java b/runescape-api/src/main/java/net/runelite/rs/api/RSFriend.java index 3b4e047066..880ae16d81 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSFriend.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSFriend.java @@ -2,6 +2,4 @@ package net.runelite.rs.api; import net.runelite.api.Friend; -public interface RSFriend extends Friend, RSBuddy -{ -} +public interface RSFriend extends Friend, RSBuddy {} diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSFriendsList.java b/runescape-api/src/main/java/net/runelite/rs/api/RSFriendsList.java index 5617d00bc0..5dfc75efcb 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSFriendsList.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSFriendsList.java @@ -1,5 +1,3 @@ package net.runelite.rs.api; -public interface RSFriendsList extends RSUserList -{ -} +public interface RSFriendsList extends RSUserList {} diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSIgnoreList.java b/runescape-api/src/main/java/net/runelite/rs/api/RSIgnoreList.java index 802fe122a0..4bf6ffc33b 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSIgnoreList.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSIgnoreList.java @@ -1,5 +1,3 @@ package net.runelite.rs.api; -public interface RSIgnoreList extends RSUserList -{ -} +public interface RSIgnoreList extends RSUserList {} diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSIgnored.java b/runescape-api/src/main/java/net/runelite/rs/api/RSIgnored.java index 5fcca27e00..f52ca9a620 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSIgnored.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSIgnored.java @@ -2,6 +2,4 @@ package net.runelite.rs.api; import net.runelite.api.Ignore; -public interface RSIgnored extends Ignore, RSUser -{ -} +public interface RSIgnored extends Ignore, RSUser {} diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSKeyHandler.java b/runescape-api/src/main/java/net/runelite/rs/api/RSKeyHandler.java index c683aa129a..2344684c6b 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSKeyHandler.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSKeyHandler.java @@ -4,6 +4,4 @@ import net.runelite.api.KeyFocusListener; import java.awt.event.FocusListener; import java.awt.event.KeyListener; -public interface RSKeyHandler extends KeyListener, FocusListener, KeyFocusListener -{ -} +public interface RSKeyHandler extends KeyListener, FocusListener, KeyFocusListener {} diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSLoginType.java b/runescape-api/src/main/java/net/runelite/rs/api/RSLoginType.java index ecbde757f7..41644178b3 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSLoginType.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSLoginType.java @@ -1,5 +1,3 @@ package net.runelite.rs.api; -public interface RSLoginType -{ -} +public interface RSLoginType {} diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSMouseHandler.java b/runescape-api/src/main/java/net/runelite/rs/api/RSMouseHandler.java index b89b833c85..7048a39b27 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSMouseHandler.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSMouseHandler.java @@ -4,6 +4,4 @@ import java.awt.event.FocusListener; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; -public interface RSMouseHandler extends MouseListener, MouseMotionListener, FocusListener -{ -} +public interface RSMouseHandler extends MouseListener, MouseMotionListener, FocusListener {} diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSMouseWheelHandler.java b/runescape-api/src/main/java/net/runelite/rs/api/RSMouseWheelHandler.java index 2add3af142..e749630541 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSMouseWheelHandler.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSMouseWheelHandler.java @@ -2,6 +2,4 @@ package net.runelite.rs.api; import java.awt.event.MouseWheelListener; -public interface RSMouseWheelHandler extends MouseWheelListener -{ -} +public interface RSMouseWheelHandler extends MouseWheelListener {} diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSNPCDefinition.java b/runescape-api/src/main/java/net/runelite/rs/api/RSNPCDefinition.java index 7e6fd4ba16..8378f01757 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSNPCDefinition.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSNPCDefinition.java @@ -21,6 +21,10 @@ public interface RSNPCDefinition extends NPCDefinition @Override boolean isClickable(); + @Import("isFollower") + @Override + boolean isFollower(); + @Import("drawMapDot") @Override boolean isMinimapVisible(); diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSPacketBuffer.java b/runescape-api/src/main/java/net/runelite/rs/api/RSPacketBuffer.java index 602a497d4a..08619c28a7 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSPacketBuffer.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSPacketBuffer.java @@ -1,5 +1,3 @@ package net.runelite.rs.api; -public interface RSPacketBuffer -{ -} +public interface RSPacketBuffer {} diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSPcmStream.java b/runescape-api/src/main/java/net/runelite/rs/api/RSPcmStream.java index 0c5e118782..558f26571c 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSPcmStream.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSPcmStream.java @@ -24,6 +24,4 @@ */ package net.runelite.rs.api; -public interface RSPcmStream -{ -} +public interface RSPcmStream {} diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSPlayerAppearance.java b/runescape-api/src/main/java/net/runelite/rs/api/RSPlayerAppearance.java index 3f084e3114..8c9f2499be 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSPlayerAppearance.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSPlayerAppearance.java @@ -11,6 +11,9 @@ public interface RSPlayerAppearance extends PlayerAppearance @Import("bodyColors") int[] getBodyPartColours(); + @Import("hash") + long getHash(); + @Import("equipment") @Override int[] getEquipmentIds(); diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSWidget.java b/runescape-api/src/main/java/net/runelite/rs/api/RSWidget.java index 78ec802de9..589074b78b 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSWidget.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSWidget.java @@ -73,6 +73,10 @@ public interface RSWidget extends Widget @Override int getModelId(); + @Import("modelId") + @Override + void setModelId(int modelId); + @Import("itemIds") int[] getItemIds(); @@ -160,14 +164,37 @@ public interface RSWidget extends Widget @Import("childIndex") void setIndex(int index); - //@Import("rotationX") - //int getRotationX(); + @Import("modelAngleX") + @Override + int getRotationX(); - //@Import("rotationY") --- All unused - //int getRotationY(); + @Import("modelAngleX") + @Override + void setRotationX(int rotationX); - //@Import("rotationZ") - //int getRotationZ(); + @Import("modelAngleY") + @Override + int getRotationY(); + + @Import("modelAngleY") + @Override + void setRotationY(int rotationY); + + @Import("modelAngleZ") + @Override + int getRotationZ(); + + @Import("modelAngleZ") + @Override + void setRotationZ(int rotationZ); + + @Import("modelZoom") + @Override + int getModelZoom(); + + @Import("modelZoom") + @Override + void setModelZoom(int modelZoom); @Import("contentType") @Override diff --git a/runescape-client/src/main/java/AbstractArchive.java b/runescape-client/src/main/java/AbstractArchive.java index a26ec86f73..83f06b627a 100644 --- a/runescape-client/src/main/java/AbstractArchive.java +++ b/runescape-client/src/main/java/AbstractArchive.java @@ -4,87 +4,81 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("hq") +@ObfuscatedName("hf") @Implements("AbstractArchive") public abstract class AbstractArchive { - @ObfuscatedName("k") + @ObfuscatedName("e") @ObfuscatedSignature( - signature = "Llj;" + signature = "Llk;" ) @Export("gzipDecompressor") static GZipDecompressor gzipDecompressor; - @ObfuscatedName("e") + @ObfuscatedName("a") @ObfuscatedGetter( - intValue = -1159865063 + intValue = 1872832013 ) - static int field3128; - @ObfuscatedName("hs") + static int field3152; + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = 906312301 - ) - @Export("oculusOrbFocalPointY") - static int oculusOrbFocalPointY; - @ObfuscatedName("t") - @ObfuscatedGetter( - intValue = -869416099 + intValue = 2020242851 ) @Export("groupCount") int groupCount; - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("groupIds") int[] groupIds; - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("groupNameHashes") int[] groupNameHashes; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "Lle;" + signature = "Lla;" ) @Export("groupNameHashTable") IntHashTable groupNameHashTable; - @ObfuscatedName("l") + @ObfuscatedName("p") @Export("groupCrcs") int[] groupCrcs; - @ObfuscatedName("c") + @ObfuscatedName("h") @Export("groupVersions") int[] groupVersions; - @ObfuscatedName("o") + @ObfuscatedName("y") @Export("fileCounts") int[] fileCounts; - @ObfuscatedName("i") + @ObfuscatedName("w") @Export("fileIds") int[][] fileIds; - @ObfuscatedName("d") + @ObfuscatedName("i") @Export("fileNameHashes") int[][] fileNameHashes; - @ObfuscatedName("m") + @ObfuscatedName("k") @ObfuscatedSignature( - signature = "[Lle;" + signature = "[Lla;" ) @Export("fileNameHashTables") IntHashTable[] fileNameHashTables; - @ObfuscatedName("p") + @ObfuscatedName("x") @Export("groups") Object[] groups; - @ObfuscatedName("h") + @ObfuscatedName("o") @Export("files") Object[][] files; - @ObfuscatedName("x") + @ObfuscatedName("n") @ObfuscatedGetter( - intValue = -514507625 + intValue = 765464633 ) @Export("hash") public int hash; - @ObfuscatedName("j") + @ObfuscatedName("r") @Export("releaseGroups") boolean releaseGroups; - @ObfuscatedName("r") + @ObfuscatedName("c") @Export("shallowFiles") boolean shallowFiles; static { gzipDecompressor = new GZipDecompressor(); - field3128 = 0; + field3152 = 0; } AbstractArchive(boolean var1, boolean var2) { @@ -92,133 +86,131 @@ public abstract class AbstractArchive { this.shallowFiles = var2; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "([BI)V", - garbageValue = "-702728253" + garbageValue = "-764987026" ) @Export("decodeIndex") void decodeIndex(byte[] var1) { - int var3 = var1.length; - int var2 = class3.method50(var1, 0, var3); - this.hash = var2; - Buffer var4 = new Buffer(ArchiveLoader.decompressBytes(var1)); - int var5 = var4.readUnsignedByte(); - if (var5 >= 5 && var5 <= 7) { - if (var5 >= 6) { - var4.readInt(); + this.hash = class222.method4196(var1, var1.length); + Buffer var2 = new Buffer(class226.decompressBytes(var1)); + int var3 = var2.readUnsignedByte(); + if (var3 >= 5 && var3 <= 7) { + if (var3 >= 6) { + var2.readInt(); } - int var6 = var4.readUnsignedByte(); - if (var5 >= 7) { - this.groupCount = var4.method5624(); + int var4 = var2.readUnsignedByte(); + if (var3 >= 7) { + this.groupCount = var2.method5617(); } else { - this.groupCount = var4.readUnsignedShort(); + this.groupCount = var2.readUnsignedShort(); } - int var7 = 0; - int var8 = -1; + int var5 = 0; + int var6 = -1; this.groupIds = new int[this.groupCount]; - int var9; - if (var5 >= 7) { - for (var9 = 0; var9 < this.groupCount; ++var9) { - this.groupIds[var9] = var7 += var4.method5624(); - if (this.groupIds[var9] > var8) { - var8 = this.groupIds[var9]; + int var7; + if (var3 >= 7) { + for (var7 = 0; var7 < this.groupCount; ++var7) { + this.groupIds[var7] = var5 += var2.method5617(); + if (this.groupIds[var7] > var6) { + var6 = this.groupIds[var7]; } } } else { - for (var9 = 0; var9 < this.groupCount; ++var9) { - this.groupIds[var9] = var7 += var4.readUnsignedShort(); - if (this.groupIds[var9] > var8) { - var8 = this.groupIds[var9]; + for (var7 = 0; var7 < this.groupCount; ++var7) { + this.groupIds[var7] = var5 += var2.readUnsignedShort(); + if (this.groupIds[var7] > var6) { + var6 = this.groupIds[var7]; } } } - this.groupCrcs = new int[var8 + 1]; - this.groupVersions = new int[var8 + 1]; - this.fileCounts = new int[var8 + 1]; - this.fileIds = new int[var8 + 1][]; - this.groups = new Object[var8 + 1]; - this.files = new Object[var8 + 1][]; - if (var6 != 0) { - this.groupNameHashes = new int[var8 + 1]; + this.groupCrcs = new int[var6 + 1]; + this.groupVersions = new int[var6 + 1]; + this.fileCounts = new int[var6 + 1]; + this.fileIds = new int[var6 + 1][]; + this.groups = new Object[var6 + 1]; + this.files = new Object[var6 + 1][]; + if (var4 != 0) { + this.groupNameHashes = new int[var6 + 1]; - for (var9 = 0; var9 < this.groupCount; ++var9) { - this.groupNameHashes[this.groupIds[var9]] = var4.readInt(); + for (var7 = 0; var7 < this.groupCount; ++var7) { + this.groupNameHashes[this.groupIds[var7]] = var2.readInt(); } this.groupNameHashTable = new IntHashTable(this.groupNameHashes); } - for (var9 = 0; var9 < this.groupCount; ++var9) { - this.groupCrcs[this.groupIds[var9]] = var4.readInt(); + for (var7 = 0; var7 < this.groupCount; ++var7) { + this.groupCrcs[this.groupIds[var7]] = var2.readInt(); } - for (var9 = 0; var9 < this.groupCount; ++var9) { - this.groupVersions[this.groupIds[var9]] = var4.readInt(); + for (var7 = 0; var7 < this.groupCount; ++var7) { + this.groupVersions[this.groupIds[var7]] = var2.readInt(); } - for (var9 = 0; var9 < this.groupCount; ++var9) { - this.fileCounts[this.groupIds[var9]] = var4.readUnsignedShort(); + for (var7 = 0; var7 < this.groupCount; ++var7) { + this.fileCounts[this.groupIds[var7]] = var2.readUnsignedShort(); } + int var8; + int var9; int var10; int var11; int var12; - int var13; - int var14; - if (var5 >= 7) { - for (var9 = 0; var9 < this.groupCount; ++var9) { - var10 = this.groupIds[var9]; - var11 = this.fileCounts[var10]; - var7 = 0; - var12 = -1; - this.fileIds[var10] = new int[var11]; + if (var3 >= 7) { + for (var7 = 0; var7 < this.groupCount; ++var7) { + var8 = this.groupIds[var7]; + var9 = this.fileCounts[var8]; + var5 = 0; + var10 = -1; + this.fileIds[var8] = new int[var9]; - for (var13 = 0; var13 < var11; ++var13) { - var14 = this.fileIds[var10][var13] = var7 += var4.method5624(); - if (var14 > var12) { - var12 = var14; + for (var11 = 0; var11 < var9; ++var11) { + var12 = this.fileIds[var8][var11] = var5 += var2.method5617(); + if (var12 > var10) { + var10 = var12; } } - this.files[var10] = new Object[var12 + 1]; + this.files[var8] = new Object[var10 + 1]; } } else { - for (var9 = 0; var9 < this.groupCount; ++var9) { - var10 = this.groupIds[var9]; - var11 = this.fileCounts[var10]; - var7 = 0; - var12 = -1; - this.fileIds[var10] = new int[var11]; + for (var7 = 0; var7 < this.groupCount; ++var7) { + var8 = this.groupIds[var7]; + var9 = this.fileCounts[var8]; + var5 = 0; + var10 = -1; + this.fileIds[var8] = new int[var9]; - for (var13 = 0; var13 < var11; ++var13) { - var14 = this.fileIds[var10][var13] = var7 += var4.readUnsignedShort(); - if (var14 > var12) { - var12 = var14; + for (var11 = 0; var11 < var9; ++var11) { + var12 = this.fileIds[var8][var11] = var5 += var2.readUnsignedShort(); + if (var12 > var10) { + var10 = var12; } } - this.files[var10] = new Object[var12 + 1]; + this.files[var8] = new Object[var10 + 1]; } } - if (var6 != 0) { - this.fileNameHashes = new int[var8 + 1][]; - this.fileNameHashTables = new IntHashTable[var8 + 1]; + if (var4 != 0) { + this.fileNameHashes = new int[var6 + 1][]; + this.fileNameHashTables = new IntHashTable[var6 + 1]; - for (var9 = 0; var9 < this.groupCount; ++var9) { - var10 = this.groupIds[var9]; - var11 = this.fileCounts[var10]; - this.fileNameHashes[var10] = new int[this.files[var10].length]; + for (var7 = 0; var7 < this.groupCount; ++var7) { + var8 = this.groupIds[var7]; + var9 = this.fileCounts[var8]; + this.fileNameHashes[var8] = new int[this.files[var8].length]; - for (var12 = 0; var12 < var11; ++var12) { - this.fileNameHashes[var10][this.fileIds[var10][var12]] = var4.readInt(); + for (var10 = 0; var10 < var9; ++var10) { + this.fileNameHashes[var8][this.fileIds[var8][var10]] = var2.readInt(); } - this.fileNameHashTables[var10] = new IntHashTable(this.fileNameHashes[var10]); + this.fileNameHashTables[var8] = new IntHashTable(this.fileNameHashes[var8]); } } @@ -227,29 +219,29 @@ public abstract class AbstractArchive { } } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(IB)V", - garbageValue = "117" + signature = "(II)V", + garbageValue = "-64779180" ) @Export("loadRegionFromGroup") void loadRegionFromGroup(int var1) { } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(III)[B", - garbageValue = "-1573138603" + signature = "(IIB)[B", + garbageValue = "40" ) @Export("takeFile") public byte[] takeFile(int var1, int var2) { return this.takeFileEncrypted(var1, var2, (int[])null); } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(II[IB)[B", - garbageValue = "0" + signature = "(II[II)[B", + garbageValue = "1072052433" ) @Export("takeFileEncrypted") public byte[] takeFileEncrypted(int var1, int var2, int[] var3) { @@ -265,7 +257,7 @@ public abstract class AbstractArchive { } } - byte[] var5 = Decimator.serialize(this.files[var1][var2], false); + byte[] var5 = FontName.serialize(this.files[var1][var2], false); if (this.shallowFiles) { this.files[var1][var2] = null; } @@ -276,10 +268,10 @@ public abstract class AbstractArchive { } } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( signature = "(III)Z", - garbageValue = "2054202524" + garbageValue = "398293520" ) @Export("tryLoadFile") public boolean tryLoadFile(int var1, int var2) { @@ -297,12 +289,12 @@ public abstract class AbstractArchive { } } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(IS)Z", - garbageValue = "-31796" + signature = "(II)Z", + garbageValue = "1197413241" ) - public boolean method4327(int var1) { + public boolean method4237(int var1) { if (this.files.length == 1) { return this.tryLoadFile(0, var1); } else if (this.files[var1].length == 1) { @@ -312,10 +304,10 @@ public abstract class AbstractArchive { } } - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "(II)Z", - garbageValue = "-1781242235" + signature = "(IB)Z", + garbageValue = "-18" ) @Export("tryLoadGroup") public boolean tryLoadGroup(int var1) { @@ -327,10 +319,10 @@ public abstract class AbstractArchive { } } - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedSignature( signature = "(I)Z", - garbageValue = "-2109708107" + garbageValue = "2065138049" ) @Export("isFullyLoaded") public boolean isFullyLoaded() { @@ -349,20 +341,20 @@ public abstract class AbstractArchive { return var1; } - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedSignature( signature = "(II)I", - garbageValue = "-778670663" + garbageValue = "-1387572162" ) @Export("groupLoadPercent") int groupLoadPercent(int var1) { return this.groups[var1] != null ? 100 : 0; } - @ObfuscatedName("d") + @ObfuscatedName("i") @ObfuscatedSignature( - signature = "(IB)[B", - garbageValue = "-112" + signature = "(II)[B", + garbageValue = "1651082224" ) @Export("takeFileFlat") public byte[] takeFileFlat(int var1) { @@ -375,10 +367,10 @@ public abstract class AbstractArchive { } } - @ObfuscatedName("m") + @ObfuscatedName("k") @ObfuscatedSignature( signature = "(III)[B", - garbageValue = "-315309482" + garbageValue = "574646503" ) @Export("getFile") public byte[] getFile(int var1, int var2) { @@ -394,17 +386,17 @@ public abstract class AbstractArchive { } } - byte[] var4 = Decimator.serialize(this.files[var1][var2], false); + byte[] var4 = FontName.serialize(this.files[var1][var2], false); return var4; } else { return null; } } - @ObfuscatedName("p") + @ObfuscatedName("x") @ObfuscatedSignature( - signature = "(II)[B", - garbageValue = "-2080975442" + signature = "(IS)[B", + garbageValue = "14651" ) @Export("getFileFlat") public byte[] getFileFlat(int var1) { @@ -417,49 +409,49 @@ public abstract class AbstractArchive { } } - @ObfuscatedName("h") + @ObfuscatedName("o") @ObfuscatedSignature( signature = "(II)V", - garbageValue = "664192835" + garbageValue = "130067407" ) @Export("loadGroup") void loadGroup(int var1) { } - @ObfuscatedName("k") + @ObfuscatedName("e") @ObfuscatedSignature( signature = "(II)[I", - garbageValue = "1547416359" + garbageValue = "1555449772" ) @Export("getGroupFileIds") public int[] getGroupFileIds(int var1) { return var1 >= 0 && var1 < this.fileIds.length ? this.fileIds[var1] : null; } - @ObfuscatedName("x") + @ObfuscatedName("n") @ObfuscatedSignature( signature = "(II)I", - garbageValue = "-829743673" + garbageValue = "526743948" ) @Export("getGroupFileCount") public int getGroupFileCount(int var1) { return this.files[var1].length; } - @ObfuscatedName("j") + @ObfuscatedName("c") @ObfuscatedSignature( - signature = "(B)I", - garbageValue = "107" + signature = "(I)I", + garbageValue = "-1631712923" ) @Export("getGroupCount") public int getGroupCount() { return this.files.length; } - @ObfuscatedName("r") + @ObfuscatedName("s") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "77380292" + garbageValue = "254893440" ) @Export("clearGroups") public void clearGroups() { @@ -469,10 +461,10 @@ public abstract class AbstractArchive { } - @ObfuscatedName("e") + @ObfuscatedName("t") @ObfuscatedSignature( - signature = "(IB)V", - garbageValue = "17" + signature = "(II)V", + garbageValue = "-438088964" ) @Export("clearFilesGroup") public void clearFilesGroup(int var1) { @@ -482,10 +474,10 @@ public abstract class AbstractArchive { } - @ObfuscatedName("s") + @ObfuscatedName("m") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "1828023605" + garbageValue = "944527898" ) @Export("clearFiles") public void clearFiles() { @@ -499,10 +491,10 @@ public abstract class AbstractArchive { } - @ObfuscatedName("b") + @ObfuscatedName("v") @ObfuscatedSignature( signature = "(I[II)Z", - garbageValue = "1853690533" + garbageValue = "1913631817" ) @Export("buildFiles") boolean buildFiles(int var1, int[] var2) { @@ -524,26 +516,27 @@ public abstract class AbstractArchive { if (var6) { return true; } else { - byte[] var18; + byte[] var21; if (var2 == null || var2[0] == 0 && var2[1] == 0 && var2[2] == 0 && var2[3] == 0) { - var18 = Decimator.serialize(this.groups[var1], false); + var21 = FontName.serialize(this.groups[var1], false); } else { - var18 = Decimator.serialize(this.groups[var1], true); - Buffer var8 = new Buffer(var18); + var21 = FontName.serialize(this.groups[var1], true); + Buffer var8 = new Buffer(var21); var8.xteaDecrypt(var2, 5, var8.array.length); } - byte[] var20 = ArchiveLoader.decompressBytes(var18); + byte[] var25 = class226.decompressBytes(var21); if (this.releaseGroups) { this.groups[var1] = null; } + int var10; if (var3 > 1) { - int var9 = var20.length; + int var9 = var25.length; --var9; - int var10 = var20[var9] & 255; + var10 = var25[var9] & 255; var9 -= var10 * var3 * 4; - Buffer var11 = new Buffer(var20); + Buffer var11 = new Buffer(var25); int[] var12 = new int[var3]; var11.offset = var9; @@ -558,22 +551,23 @@ public abstract class AbstractArchive { } } - byte[][] var19 = new byte[var3][]; + byte[][] var22 = new byte[var3][]; for (var14 = 0; var14 < var3; ++var14) { - var19[var14] = new byte[var12[var14]]; + var22[var14] = new byte[var12[var14]]; var12[var14] = 0; } var11.offset = var9; var14 = 0; + int var17; for (var15 = 0; var15 < var10; ++var15) { int var16 = 0; - for (int var17 = 0; var17 < var3; ++var17) { + for (var17 = 0; var17 < var3; ++var17) { var16 += var11.readInt(); - System.arraycopy(var20, var14, var19[var17], var12[var17], var16); + System.arraycopy(var25, var14, var22[var17], var12[var17], var16); var12[var17] += var16; var14 += var16; } @@ -581,15 +575,40 @@ public abstract class AbstractArchive { for (var15 = 0; var15 < var3; ++var15) { if (!this.shallowFiles) { - var5[var4[var15]] = MusicPatchPcmStream.method4064(var19[var15], false); + var17 = var4[var15]; + byte[] var19 = var22[var15]; + Object var18; + if (var19 == null) { + var18 = null; + } else if (var19.length > 136) { + DirectByteArrayCopier var20 = new DirectByteArrayCopier(); + var20.set(var19); + var18 = var20; + } else { + var18 = var19; + } + + var5[var17] = var18; } else { - var5[var4[var15]] = var19[var15]; + var5[var4[var15]] = var22[var15]; } } } else if (!this.shallowFiles) { - var5[var4[0]] = MusicPatchPcmStream.method4064(var20, false); + var10 = var4[0]; + Object var26; + if (var25 == null) { + var26 = null; + } else if (var25.length > 136) { + DirectByteArrayCopier var27 = new DirectByteArrayCopier(); + var27.set(var25); + var26 = var27; + } else { + var26 = var25; + } + + var5[var10] = var26; } else { - var5[var4[0]] = var20; + var5[var4[0]] = var25; } return true; @@ -597,215 +616,109 @@ public abstract class AbstractArchive { } } - @ObfuscatedName("w") + @ObfuscatedName("q") @ObfuscatedSignature( signature = "(Ljava/lang/String;I)I", - garbageValue = "-568803871" + garbageValue = "282795041" ) @Export("getGroupId") public int getGroupId(String var1) { var1 = var1.toLowerCase(); - return this.groupNameHashTable.get(WorldMapIcon_0.hashString(var1)); + return this.groupNameHashTable.get(class42.hashString(var1)); } - @ObfuscatedName("u") + @ObfuscatedName("l") @ObfuscatedSignature( signature = "(ILjava/lang/String;B)I", - garbageValue = "1" + garbageValue = "20" ) @Export("getFileId") public int getFileId(int var1, String var2) { var2 = var2.toLowerCase(); - return this.fileNameHashTables[var1].get(WorldMapIcon_0.hashString(var2)); + return this.fileNameHashTables[var1].get(class42.hashString(var2)); } - @ObfuscatedName("ad") + @ObfuscatedName("j") @ObfuscatedSignature( - signature = "(Ljava/lang/String;Ljava/lang/String;B)Z", - garbageValue = "-1" + signature = "(Ljava/lang/String;Ljava/lang/String;I)Z", + garbageValue = "1492371951" ) @Export("isValidFileName") public boolean isValidFileName(String var1, String var2) { var1 = var1.toLowerCase(); var2 = var2.toLowerCase(); - int var3 = this.groupNameHashTable.get(WorldMapIcon_0.hashString(var1)); + int var3 = this.groupNameHashTable.get(class42.hashString(var1)); if (var3 < 0) { return false; } else { - int var4 = this.fileNameHashTables[var3].get(WorldMapIcon_0.hashString(var2)); + int var4 = this.fileNameHashTables[var3].get(class42.hashString(var2)); return var4 >= 0; } } - @ObfuscatedName("ag") + @ObfuscatedName("ad") @ObfuscatedSignature( signature = "(Ljava/lang/String;Ljava/lang/String;I)[B", - garbageValue = "1996624784" + garbageValue = "2111442561" ) @Export("takeFileByNames") public byte[] takeFileByNames(String var1, String var2) { var1 = var1.toLowerCase(); var2 = var2.toLowerCase(); - int var3 = this.groupNameHashTable.get(WorldMapIcon_0.hashString(var1)); - int var4 = this.fileNameHashTables[var3].get(WorldMapIcon_0.hashString(var2)); + int var3 = this.groupNameHashTable.get(class42.hashString(var1)); + int var4 = this.fileNameHashTables[var3].get(class42.hashString(var2)); return this.takeFile(var3, var4); } - @ObfuscatedName("ak") + @ObfuscatedName("am") @ObfuscatedSignature( - signature = "(Ljava/lang/String;Ljava/lang/String;I)Z", - garbageValue = "1453372171" + signature = "(Ljava/lang/String;Ljava/lang/String;B)Z", + garbageValue = "0" ) @Export("tryLoadFileByNames") public boolean tryLoadFileByNames(String var1, String var2) { var1 = var1.toLowerCase(); var2 = var2.toLowerCase(); - int var3 = this.groupNameHashTable.get(WorldMapIcon_0.hashString(var1)); - int var4 = this.fileNameHashTables[var3].get(WorldMapIcon_0.hashString(var2)); + int var3 = this.groupNameHashTable.get(class42.hashString(var1)); + int var4 = this.fileNameHashTables[var3].get(class42.hashString(var2)); return this.tryLoadFile(var3, var4); } - @ObfuscatedName("av") + @ObfuscatedName("ai") @ObfuscatedSignature( - signature = "(Ljava/lang/String;I)Z", - garbageValue = "1150520386" + signature = "(Ljava/lang/String;B)Z", + garbageValue = "-14" ) @Export("tryLoadGroupByName") public boolean tryLoadGroupByName(String var1) { var1 = var1.toLowerCase(); - int var2 = this.groupNameHashTable.get(WorldMapIcon_0.hashString(var1)); + int var2 = this.groupNameHashTable.get(class42.hashString(var1)); return this.tryLoadGroup(var2); } - @ObfuscatedName("am") + @ObfuscatedName("ag") @ObfuscatedSignature( - signature = "(Ljava/lang/String;B)V", - garbageValue = "-94" + signature = "(Ljava/lang/String;I)V", + garbageValue = "793456202" ) @Export("loadRegionFromName") public void loadRegionFromName(String var1) { var1 = var1.toLowerCase(); - int var2 = this.groupNameHashTable.get(WorldMapIcon_0.hashString(var1)); + int var2 = this.groupNameHashTable.get(class42.hashString(var1)); if (var2 >= 0) { this.loadRegionFromGroup(var2); } } - @ObfuscatedName("ab") + @ObfuscatedName("ao") @ObfuscatedSignature( - signature = "(Ljava/lang/String;B)I", - garbageValue = "125" + signature = "(Ljava/lang/String;I)I", + garbageValue = "2116991634" ) @Export("groupLoadPercentByName") public int groupLoadPercentByName(String var1) { var1 = var1.toLowerCase(); - int var2 = this.groupNameHashTable.get(WorldMapIcon_0.hashString(var1)); + int var2 = this.groupNameHashTable.get(class42.hashString(var1)); return this.groupLoadPercent(var2); } - - @ObfuscatedName("t") - @ObfuscatedSignature( - signature = "(II)Ljava/lang/String;", - garbageValue = "-1378160996" - ) - @Export("colorStartTag") - static String colorStartTag(int var0) { - return ""; - } - - @ObfuscatedName("fm") - @ObfuscatedSignature( - signature = "(II)V", - garbageValue = "-1166291616" - ) - @Export("getLoginError") - static void getLoginError(int var0) { - if (var0 == -3) { - GrandExchangeOffer.setLoginResponseString("Connection timed out.", "Please try using a different world.", ""); - } else if (var0 == -2) { - GrandExchangeOffer.setLoginResponseString("", "Error connecting to server.", ""); - } else if (var0 == -1) { - GrandExchangeOffer.setLoginResponseString("No response from server.", "Please try using a different world.", ""); - } else if (var0 == 3) { - Login.loginIndex = 3; - Login.field1166 = 1; - } else if (var0 == 4) { - Login.loginIndex = 12; - Login.field1156 = 0; - } else if (var0 == 5) { - Login.field1166 = 2; - GrandExchangeOffer.setLoginResponseString("Your account has not logged out from its last", "session or the server is too busy right now.", "Please try again in a few minutes."); - } else if (var0 == 68 || !Client.onMobile && var0 == 6) { - GrandExchangeOffer.setLoginResponseString("RuneScape has been updated!", "Please reload this page.", ""); - } else if (var0 == 7) { - GrandExchangeOffer.setLoginResponseString("This world is full.", "Please use a different world.", ""); - } else if (var0 == 8) { - GrandExchangeOffer.setLoginResponseString("Unable to connect.", "Login server offline.", ""); - } else if (var0 == 9) { - GrandExchangeOffer.setLoginResponseString("Login limit exceeded.", "Too many connections from your address.", ""); - } else if (var0 == 10) { - GrandExchangeOffer.setLoginResponseString("Unable to connect.", "Bad session id.", ""); - } else if (var0 == 11) { - GrandExchangeOffer.setLoginResponseString("We suspect someone knows your password.", "Press 'change your password' on front page.", ""); - } else if (var0 == 12) { - GrandExchangeOffer.setLoginResponseString("You need a members account to login to this world.", "Please subscribe, or use a different world.", ""); - } else if (var0 == 13) { - GrandExchangeOffer.setLoginResponseString("Could not complete login.", "Please try using a different world.", ""); - } else if (var0 == 14) { - GrandExchangeOffer.setLoginResponseString("The server is being updated.", "Please wait 1 minute and try again.", ""); - } else if (var0 == 16) { - GrandExchangeOffer.setLoginResponseString("Too many login attempts.", "Please wait a few minutes before trying again.", ""); - } else if (var0 == 17) { - GrandExchangeOffer.setLoginResponseString("You are standing in a members-only area.", "To play on this world move to a free area first", ""); - } else if (var0 == 18) { - Login.loginIndex = 12; - Login.field1156 = 1; - } else if (var0 == 19) { - GrandExchangeOffer.setLoginResponseString("This world is running a closed Beta.", "Sorry invited players only.", "Please use a different world."); - } else if (var0 == 20) { - GrandExchangeOffer.setLoginResponseString("Invalid loginserver requested.", "Please try using a different world.", ""); - } else if (var0 == 22) { - GrandExchangeOffer.setLoginResponseString("Malformed login packet.", "Please try again.", ""); - } else if (var0 == 23) { - GrandExchangeOffer.setLoginResponseString("No reply from loginserver.", "Please wait 1 minute and try again.", ""); - } else if (var0 == 24) { - GrandExchangeOffer.setLoginResponseString("Error loading your profile.", "Please contact customer support.", ""); - } else if (var0 == 25) { - GrandExchangeOffer.setLoginResponseString("Unexpected loginserver response.", "Please try using a different world.", ""); - } else if (var0 == 26) { - GrandExchangeOffer.setLoginResponseString("This computers address has been blocked", "as it was used to break our rules.", ""); - } else if (var0 == 27) { - GrandExchangeOffer.setLoginResponseString("", "Service unavailable.", ""); - } else if (var0 == 31) { - GrandExchangeOffer.setLoginResponseString("Your account must have a displayname set", "in order to play the game. Please set it", "via the website, or the main game."); - } else if (var0 == 32) { - GrandExchangeOffer.setLoginResponseString("Your attempt to log into your account was", "unsuccessful. Don't worry, you can sort", "this out by visiting the billing system."); - } else if (var0 == 37) { - GrandExchangeOffer.setLoginResponseString("Your account is currently inaccessible.", "Please try again in a few minutes.", ""); - } else if (var0 == 38) { - GrandExchangeOffer.setLoginResponseString("You need to vote to play!", "Visit runescape.com and vote,", "and then come back here!"); - } else if (var0 == 55) { - Login.loginIndex = 8; - } else { - if (var0 == 56) { - GrandExchangeOffer.setLoginResponseString("Enter the 6-digit code generated by your", "authenticator app.", ""); - Tile.updateGameState(11); - return; - } - - if (var0 == 57) { - GrandExchangeOffer.setLoginResponseString("The code you entered was incorrect.", "Please try again.", ""); - Tile.updateGameState(11); - return; - } - - if (var0 == 61) { - Login.loginIndex = 7; - } else { - GrandExchangeOffer.setLoginResponseString("Unexpected server response", "Please try using a different world.", ""); - } - } - - Tile.updateGameState(10); - } } diff --git a/runescape-client/src/main/java/AbstractByteArrayCopier.java b/runescape-client/src/main/java/AbstractByteArrayCopier.java index b6d21bd8ae..059199fc81 100644 --- a/runescape-client/src/main/java/AbstractByteArrayCopier.java +++ b/runescape-client/src/main/java/AbstractByteArrayCopier.java @@ -1,72 +1,44 @@ import net.runelite.mapping.Export; import net.runelite.mapping.Implements; -import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("gc") +@ObfuscatedName("gp") @Implements("AbstractByteArrayCopier") public abstract class AbstractByteArrayCopier { - @ObfuscatedName("n") - @ObfuscatedGetter( - intValue = 977117713 + @ObfuscatedName("h") + @ObfuscatedSignature( + signature = "Lln;" ) - @Export("WorldMapElement_count") - public static int WorldMapElement_count; + @Export("leftTitleSprite") + static Sprite leftTitleSprite; AbstractByteArrayCopier() { } - @ObfuscatedName("q") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(B)[B", - garbageValue = "19" + signature = "(S)[B", + garbageValue = "18982" ) @Export("get") abstract byte[] get(); - @ObfuscatedName("v") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "([BB)V", - garbageValue = "-93" + signature = "([BI)V", + garbageValue = "-1436271820" ) @Export("set") - abstract void set(byte[] var1); + public abstract void set(byte[] var1); - @ObfuscatedName("x") + @ObfuscatedName("kg") @ObfuscatedSignature( - signature = "(ILcj;ZI)I", - garbageValue = "2005076338" + signature = "(Lhl;B)Z", + garbageValue = "-78" ) - static int method4093(int var0, Script var1, boolean var2) { - Widget var3 = var2 ? class96.field1301 : ReflectionCheck.field1310; - if (var0 == ScriptOpcodes.CC_GETINVOBJECT) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.itemId; - return 1; - } else if (var0 == ScriptOpcodes.CC_GETINVCOUNT) { - if (var3.itemId != -1) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.itemQuantity; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - } - - return 1; - } else if (var0 == ScriptOpcodes.CC_GETID) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.childIndex; - return 1; - } else { - return 2; - } - } - - @ObfuscatedName("kb") - @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "-66" - ) - static final void method4092() { - Client.field825 = Client.cycleCntr; - Ignored.ClanChat_inClanChat = true; + @Export("isComponentHidden") + static boolean isComponentHidden(Widget var0) { + return var0.isHidden; } } diff --git a/runescape-client/src/main/java/AbstractFont.java b/runescape-client/src/main/java/AbstractFont.java index fcae714b6a..5159618ab3 100644 --- a/runescape-client/src/main/java/AbstractFont.java +++ b/runescape-client/src/main/java/AbstractFont.java @@ -4,76 +4,76 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("kx") +@ObfuscatedName("kr") @Implements("AbstractFont") public abstract class AbstractFont extends Rasterizer2D { - @ObfuscatedName("d") + @ObfuscatedName("i") @ObfuscatedSignature( - signature = "[Llw;" + signature = "[Llm;" ) @Export("AbstractFont_modIconSprites") public static IndexedSprite[] AbstractFont_modIconSprites; - @ObfuscatedName("p") + @ObfuscatedName("x") @Export("AbstractFont_strike") static int AbstractFont_strike; - @ObfuscatedName("h") + @ObfuscatedName("o") @Export("AbstractFont_underline") static int AbstractFont_underline; - @ObfuscatedName("k") + @ObfuscatedName("e") @Export("AbstractFont_previousShadow") static int AbstractFont_previousShadow; - @ObfuscatedName("x") + @ObfuscatedName("n") @Export("AbstractFont_shadow") static int AbstractFont_shadow; - @ObfuscatedName("j") + @ObfuscatedName("r") @Export("AbstractFont_previousColor") static int AbstractFont_previousColor; - @ObfuscatedName("r") + @ObfuscatedName("c") @Export("AbstractFont_color") static int AbstractFont_color; - @ObfuscatedName("e") + @ObfuscatedName("a") @Export("AbstractFont_alpha") static int AbstractFont_alpha; - @ObfuscatedName("s") + @ObfuscatedName("d") @Export("AbstractFont_justificationTotal") static int AbstractFont_justificationTotal; - @ObfuscatedName("b") + @ObfuscatedName("s") @Export("AbstractFont_justificationCurrent") static int AbstractFont_justificationCurrent; - @ObfuscatedName("z") + @ObfuscatedName("t") @Export("AbstractFont_random") static Random AbstractFont_random; - @ObfuscatedName("f") + @ObfuscatedName("m") @Export("AbstractFont_lines") static String[] AbstractFont_lines; - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("pixels") byte[][] pixels; - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("advances") int[] advances; - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("widths") int[] widths; - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("heights") int[] heights; - @ObfuscatedName("v") + @ObfuscatedName("z") @Export("leftBearings") int[] leftBearings; - @ObfuscatedName("l") + @ObfuscatedName("p") @Export("topBearings") int[] topBearings; - @ObfuscatedName("c") + @ObfuscatedName("h") @Export("ascent") public int ascent; - @ObfuscatedName("o") + @ObfuscatedName("y") @Export("maxAscent") public int maxAscent; - @ObfuscatedName("i") + @ObfuscatedName("w") @Export("maxDescent") public int maxDescent; - @ObfuscatedName("m") + @ObfuscatedName("k") @Export("kerning") byte[] kerning; @@ -123,15 +123,15 @@ public abstract class AbstractFont extends Rasterizer2D { this.readMetrics(var1); } - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("drawGlyph") abstract void drawGlyph(byte[] var1, int var2, int var3, int var4, int var5, int var6); - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("drawGlyphAlpha") abstract void drawGlyphAlpha(byte[] var1, int var2, int var3, int var4, int var5, int var6, int var7); - @ObfuscatedName("o") + @ObfuscatedName("y") @Export("readMetrics") void readMetrics(byte[] var1) { this.advances = new int[256]; @@ -193,7 +193,7 @@ public abstract class AbstractFont extends Rasterizer2D { if (var13 != 32 && var13 != 160) { for (var8 = 0; var8 < 256; ++var8) { if (var8 != 32 && var8 != 160) { - this.kerning[var8 + (var13 << 8)] = (byte)method5506(var11, var12, var4, this.advances, var10, var13, var8); + this.kerning[var8 + (var13 << 8)] = (byte)method5442(var11, var12, var4, this.advances, var10, var13, var8); } } } @@ -204,17 +204,17 @@ public abstract class AbstractFont extends Rasterizer2D { } - @ObfuscatedName("d") + @ObfuscatedName("i") @Export("charWidth") int charWidth(char var1) { if (var1 == 160) { var1 = ' '; } - return this.advances[WorldMapData_1.charToByteCp1252(var1) & 255]; + return this.advances[Skills.charToByteCp1252(var1) & 255]; } - @ObfuscatedName("m") + @ObfuscatedName("k") @Export("stringWidth") public int stringWidth(String var1) { if (var1 == null) { @@ -238,7 +238,7 @@ public abstract class AbstractFont extends Rasterizer2D { if (!var7.equals("gt")) { if (var7.startsWith("img=")) { try { - int var8 = ClientPreferences.parseInt(var7.substring(4)); + int var8 = SoundCache.parseInt(var7.substring(4)); var4 += AbstractFont_modIconSprites[var8].width; var3 = -1; } catch (Exception var10) { @@ -256,7 +256,7 @@ public abstract class AbstractFont extends Rasterizer2D { } if (var2 == -1) { - var4 += this.advances[(char)(WorldMapData_1.charToByteCp1252(var6) & 255)]; + var4 += this.advances[(char)(Skills.charToByteCp1252(var6) & 255)]; if (this.kerning != null && var3 != -1) { var4 += this.kerning[var6 + (var3 << 8)]; } @@ -270,7 +270,7 @@ public abstract class AbstractFont extends Rasterizer2D { } } - @ObfuscatedName("p") + @ObfuscatedName("x") @Export("breakLines") public int breakLines(String var1, int[] var2, String[] var3) { if (var1 == null) { @@ -321,7 +321,7 @@ public abstract class AbstractFont extends Rasterizer2D { var11 = '>'; } else if (var16.startsWith("img=")) { try { - int var17 = ClientPreferences.parseInt(var16.substring(4)); + int var17 = SoundCache.parseInt(var16.substring(4)); var4 += AbstractFont_modIconSprites[var17].width; var11 = 0; } catch (Exception var20) { @@ -375,7 +375,7 @@ public abstract class AbstractFont extends Rasterizer2D { } } - @ObfuscatedName("h") + @ObfuscatedName("o") @Export("lineWidth") public int lineWidth(String var1, int var2) { int var3 = this.breakLines(var1, new int[]{var2}, AbstractFont_lines); @@ -391,13 +391,13 @@ public abstract class AbstractFont extends Rasterizer2D { return var4; } - @ObfuscatedName("k") + @ObfuscatedName("e") @Export("lineCount") public int lineCount(String var1, int var2) { return this.breakLines(var1, new int[]{var2}, AbstractFont_lines); } - @ObfuscatedName("j") + @ObfuscatedName("c") @Export("draw") public void draw(String var1, int var2, int var3, int var4, int var5) { if (var1 != null) { @@ -406,7 +406,7 @@ public abstract class AbstractFont extends Rasterizer2D { } } - @ObfuscatedName("r") + @ObfuscatedName("s") @Export("drawAlpha") public void drawAlpha(String var1, int var2, int var3, int var4, int var5, int var6) { if (var1 != null) { @@ -416,7 +416,7 @@ public abstract class AbstractFont extends Rasterizer2D { } } - @ObfuscatedName("e") + @ObfuscatedName("t") @Export("drawRightAligned") public void drawRightAligned(String var1, int var2, int var3, int var4, int var5) { if (var1 != null) { @@ -425,7 +425,7 @@ public abstract class AbstractFont extends Rasterizer2D { } } - @ObfuscatedName("s") + @ObfuscatedName("m") @Export("drawCentered") public void drawCentered(String var1, int var2, int var3, int var4, int var5) { if (var1 != null) { @@ -434,7 +434,7 @@ public abstract class AbstractFont extends Rasterizer2D { } } - @ObfuscatedName("b") + @ObfuscatedName("v") @Export("drawLines") public int drawLines(String var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10) { if (var1 == null) { @@ -495,7 +495,7 @@ public abstract class AbstractFont extends Rasterizer2D { } } - @ObfuscatedName("w") + @ObfuscatedName("q") @Export("drawCenteredWave") public void drawCenteredWave(String var1, int var2, int var3, int var4, int var5, int var6) { if (var1 != null) { @@ -510,7 +510,7 @@ public abstract class AbstractFont extends Rasterizer2D { } } - @ObfuscatedName("u") + @ObfuscatedName("l") @Export("drawCenteredWave2") public void drawCenteredWave2(String var1, int var2, int var3, int var4, int var5, int var6) { if (var1 != null) { @@ -527,7 +527,7 @@ public abstract class AbstractFont extends Rasterizer2D { } } - @ObfuscatedName("ad") + @ObfuscatedName("j") @Export("drawCenteredShake") public void drawCenteredShake(String var1, int var2, int var3, int var4, int var5, int var6, int var7) { if (var1 != null) { @@ -547,7 +547,7 @@ public abstract class AbstractFont extends Rasterizer2D { } } - @ObfuscatedName("ag") + @ObfuscatedName("ad") @Export("drawRandomAlphaAndSpacing") public void drawRandomAlphaAndSpacing(String var1, int var2, int var3, int var4, int var5, int var6) { if (var1 != null) { @@ -568,7 +568,7 @@ public abstract class AbstractFont extends Rasterizer2D { } } - @ObfuscatedName("ak") + @ObfuscatedName("am") @Export("reset") void reset(int var1, int var2) { AbstractFont_strike = -1; @@ -582,7 +582,7 @@ public abstract class AbstractFont extends Rasterizer2D { AbstractFont_justificationCurrent = 0; } - @ObfuscatedName("av") + @ObfuscatedName("ai") @Export("decodeTag") void decodeTag(String var1) { try { @@ -590,13 +590,13 @@ public abstract class AbstractFont extends Rasterizer2D { String var3; if (var1.startsWith("col=")) { var3 = var1.substring(4); - var2 = class192.parseIntCustomRadix(var3, 16, true); + var2 = UserComparator8.parseIntCustomRadix(var3, 16, true); AbstractFont_color = var2; } else if (var1.equals("/col")) { AbstractFont_color = AbstractFont_previousColor; } else if (var1.startsWith("str=")) { var3 = var1.substring(4); - var2 = class192.parseIntCustomRadix(var3, 16, true); + var2 = UserComparator8.parseIntCustomRadix(var3, 16, true); AbstractFont_strike = var2; } else if (var1.equals("str")) { AbstractFont_strike = 8388608; @@ -604,7 +604,7 @@ public abstract class AbstractFont extends Rasterizer2D { AbstractFont_strike = -1; } else if (var1.startsWith("u=")) { var3 = var1.substring(2); - var2 = class192.parseIntCustomRadix(var3, 16, true); + var2 = UserComparator8.parseIntCustomRadix(var3, 16, true); AbstractFont_underline = var2; } else if (var1.equals("u")) { AbstractFont_underline = 0; @@ -612,7 +612,7 @@ public abstract class AbstractFont extends Rasterizer2D { AbstractFont_underline = -1; } else if (var1.startsWith("shad=")) { var3 = var1.substring(5); - var2 = class192.parseIntCustomRadix(var3, 16, true); + var2 = UserComparator8.parseIntCustomRadix(var3, 16, true); AbstractFont_shadow = var2; } else if (var1.equals("shad")) { AbstractFont_shadow = 0; @@ -626,7 +626,7 @@ public abstract class AbstractFont extends Rasterizer2D { } - @ObfuscatedName("am") + @ObfuscatedName("ag") @Export("calculateLineJustification") void calculateLineJustification(String var1, int var2) { int var3 = 0; @@ -649,7 +649,7 @@ public abstract class AbstractFont extends Rasterizer2D { } - @ObfuscatedName("ab") + @ObfuscatedName("ao") @Export("draw0") void draw0(String var1, int var2, int var3) { var3 -= this.ascent; @@ -658,7 +658,7 @@ public abstract class AbstractFont extends Rasterizer2D { for (int var6 = 0; var6 < var1.length(); ++var6) { if (var1.charAt(var6) != 0) { - char var7 = (char)(WorldMapData_1.charToByteCp1252(var1.charAt(var6)) & 255); + char var7 = (char)(Skills.charToByteCp1252(var1.charAt(var6)) & 255); if (var7 == '<') { var4 = var6; } else { @@ -672,7 +672,7 @@ public abstract class AbstractFont extends Rasterizer2D { if (!var8.equals("gt")) { if (var8.startsWith("img=")) { try { - var9 = ClientPreferences.parseInt(var8.substring(4)); + var9 = SoundCache.parseInt(var8.substring(4)); IndexedSprite var10 = AbstractFont_modIconSprites[var9]; var10.drawAt(var2, var3 + this.ascent - var10.height); var2 += var10.width; @@ -738,7 +738,7 @@ public abstract class AbstractFont extends Rasterizer2D { } - @ObfuscatedName("ax") + @ObfuscatedName("aw") @Export("drawWithOffsets0") void drawWithOffsets0(String var1, int var2, int var3, int[] var4, int[] var5) { var3 -= this.ascent; @@ -748,7 +748,7 @@ public abstract class AbstractFont extends Rasterizer2D { for (int var9 = 0; var9 < var1.length(); ++var9) { if (var1.charAt(var9) != 0) { - char var10 = (char)(WorldMapData_1.charToByteCp1252(var1.charAt(var9)) & 255); + char var10 = (char)(Skills.charToByteCp1252(var1.charAt(var9)) & 255); if (var10 == '<') { var6 = var9; } else { @@ -777,7 +777,7 @@ public abstract class AbstractFont extends Rasterizer2D { } ++var8; - var14 = ClientPreferences.parseInt(var11.substring(4)); + var14 = SoundCache.parseInt(var11.substring(4)); IndexedSprite var15 = AbstractFont_modIconSprites[var14]; var15.drawAt(var12 + var2, var13 + (var3 + this.ascent - var15.height)); var2 += var15.width; @@ -856,8 +856,8 @@ public abstract class AbstractFont extends Rasterizer2D { } - @ObfuscatedName("i") - static int method5506(byte[][] var0, byte[][] var1, int[] var2, int[] var3, int[] var4, int var5, int var6) { + @ObfuscatedName("w") + static int method5442(byte[][] var0, byte[][] var1, int[] var2, int[] var3, int[] var4, int var5, int var6) { int var7 = var2[var5]; int var8 = var7 + var4[var5]; int var9 = var2[var6]; @@ -892,7 +892,7 @@ public abstract class AbstractFont extends Rasterizer2D { return -var13; } - @ObfuscatedName("x") + @ObfuscatedName("n") @Export("escapeBrackets") public static String escapeBrackets(String var0) { int var1 = var0.length(); @@ -921,7 +921,7 @@ public abstract class AbstractFont extends Rasterizer2D { return var6.toString(); } - @ObfuscatedName("al") + @ObfuscatedName("ak") @Export("AbstractFont_drawGlyph") static void AbstractFont_drawGlyph(byte[] var0, int var1, int var2, int var3, int var4, int var5) { int var6 = var1 + var2 * Rasterizer2D.Rasterizer2D_width; @@ -963,7 +963,7 @@ public abstract class AbstractFont extends Rasterizer2D { } } - @ObfuscatedName("ap") + @ObfuscatedName("aa") @Export("AbstractFont_placeGlyph") static void AbstractFont_placeGlyph(int[] var0, byte[] var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8) { int var9 = -(var5 >> 2); @@ -1011,7 +1011,7 @@ public abstract class AbstractFont extends Rasterizer2D { } - @ObfuscatedName("aj") + @ObfuscatedName("ab") @Export("AbstractFont_drawGlyphAlpha") static void AbstractFont_drawGlyphAlpha(byte[] var0, int var1, int var2, int var3, int var4, int var5, int var6) { int var7 = var1 + var2 * Rasterizer2D.Rasterizer2D_width; @@ -1053,7 +1053,7 @@ public abstract class AbstractFont extends Rasterizer2D { } } - @ObfuscatedName("ae") + @ObfuscatedName("ar") @Export("AbstractFont_placeGlyphAlpha") static void AbstractFont_placeGlyphAlpha(int[] var0, byte[] var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9) { var2 = ((var2 & 65280) * var9 & 16711680) + (var9 * (var2 & 16711935) & -16711936) >> 8; diff --git a/runescape-client/src/main/java/AbstractRasterProvider.java b/runescape-client/src/main/java/AbstractRasterProvider.java index bf05333521..8d474318fb 100644 --- a/runescape-client/src/main/java/AbstractRasterProvider.java +++ b/runescape-client/src/main/java/AbstractRasterProvider.java @@ -4,21 +4,21 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("lu") +@ObfuscatedName("lp") @Implements("AbstractRasterProvider") public abstract class AbstractRasterProvider { - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("pixels") public int[] pixels; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = -1627177537 + intValue = 1041400109 ) @Export("width") public int width; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = -594636233 + intValue = -854439651 ) @Export("height") public int height; @@ -26,26 +26,26 @@ public abstract class AbstractRasterProvider { protected AbstractRasterProvider() { } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( signature = "(IIB)V", - garbageValue = "3" + garbageValue = "0" ) @Export("drawFull") public abstract void drawFull(int var1, int var2); - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( signature = "(IIIII)V", - garbageValue = "-2086134046" + garbageValue = "-787999204" ) @Export("draw") public abstract void draw(int var1, int var2, int var3, int var4); - @ObfuscatedName("s") + @ObfuscatedName("t") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "-2129049965" + signature = "(S)V", + garbageValue = "-30907" ) @Export("apply") public final void apply() { diff --git a/runescape-client/src/main/java/AbstractSocket.java b/runescape-client/src/main/java/AbstractSocket.java index 7772084655..14ed855360 100644 --- a/runescape-client/src/main/java/AbstractSocket.java +++ b/runescape-client/src/main/java/AbstractSocket.java @@ -4,684 +4,57 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ku") +@ObfuscatedName("kn") @Implements("AbstractSocket") public abstract class AbstractSocket { protected AbstractSocket() { } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "1632517280" + signature = "(B)V", + garbageValue = "-29" ) @Export("close") public abstract void close(); - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( signature = "(B)I", - garbageValue = "0" + garbageValue = "27" ) @Export("readUnsignedByte") public abstract int readUnsignedByte() throws IOException; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( signature = "(B)I", - garbageValue = "-1" + garbageValue = "-53" ) @Export("available") public abstract int available() throws IOException; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( signature = "(II)Z", - garbageValue = "1174929907" + garbageValue = "-1591428004" ) @Export("isAvailable") public abstract boolean isAvailable(int var1) throws IOException; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "([BIII)I", - garbageValue = "1681485484" + signature = "([BIIB)I", + garbageValue = "29" ) @Export("read") public abstract int read(byte[] var1, int var2, int var3) throws IOException; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( signature = "([BIII)V", - garbageValue = "1989353375" + garbageValue = "-543253817" ) @Export("write") public abstract void write(byte[] var1, int var2, int var3) throws IOException; - - @ObfuscatedName("hj") - @ObfuscatedSignature( - signature = "(Lbz;IIIIII)V", - garbageValue = "-453340900" - ) - @Export("drawActor2d") - static final void drawActor2d(Actor var0, int var1, int var2, int var3, int var4, int var5) { - if (var0 != null && var0.isVisible()) { - if (var0 instanceof NPC) { - NPCDefinition var6 = ((NPC)var0).definition; - if (var6.transforms != null) { - var6 = var6.transform(); - } - - if (var6 == null) { - return; - } - } - - int var75 = Players.Players_count; - int[] var7 = Players.Players_indices; - byte var8 = 0; - Player var10; - if (var1 < var75 && var0.playerCycle == Client.cycle) { - var10 = (Player)var0; - boolean var9; - if (Client.drawPlayerNames == 0) { - var9 = false; - } else { - boolean var77; - if (var10 != class215.localPlayer) { - var77 = (Client.drawPlayerNames & 4) != 0; - boolean var78 = var77; - boolean var13; - if (!var77) { - var13 = (Client.drawPlayerNames & 1) != 0; - var78 = var13 && var10.isFriend(); - } - - var13 = var78; - if (!var78) { - boolean var79 = (Client.drawPlayerNames & 2) != 0; - var13 = var79 && var10.isClanMember(); - } - - var9 = var13; - } else { - var77 = (Client.drawPlayerNames & 8) != 0; - var9 = var77; - } - } - - if (var9) { - Player var11 = (Player)var0; - if (var1 < var75) { - Entity.getActorScreenLocation(var0, var0.defaultHeight + 15); - AbstractFont var12 = (AbstractFont)Client.fontsMap.get(FontName.FontName_plain12); - byte var92 = 9; - var12.drawCentered(var11.username.getName(), var2 + Client.viewportTempX, var3 + Client.viewportTempY - var92, 16777215, 0); - var8 = 18; - } - } - } - - int var87 = -2; - int var15; - int var22; - int var23; - if (!var0.healthBars.method5004()) { - Entity.getActorScreenLocation(var0, var0.defaultHeight + 15); - - for (HealthBar var88 = (HealthBar)var0.healthBars.last(); var88 != null; var88 = (HealthBar)var0.healthBars.previous()) { - HealthBarUpdate var89 = var88.get(Client.cycle); - if (var89 == null) { - if (var88.isEmpty()) { - var88.remove(); - } - } else { - HealthBarDefinition var91 = var88.definition; - Sprite var76 = var91.getBackSprite(); - Sprite var14 = var91.getFrontSprite(); - int var16 = 0; - if (var76 != null && var14 != null) { - if (var91.widthPadding * 2 < var14.subWidth) { - var16 = var91.widthPadding; - } - - var15 = var14.subWidth - var16 * 2; - } else { - var15 = var91.width; - } - - int var17 = 255; - boolean var18 = true; - int var19 = Client.cycle - var89.cycle; - int var20 = var15 * var89.health2 / var91.width; - int var21; - int var93; - if (var89.cycleOffset > var19) { - var21 = var91.int4 == 0 ? 0 : var91.int4 * (var19 / var91.int4); - var22 = var15 * var89.health / var91.width; - var93 = var21 * (var20 - var22) / var89.cycleOffset + var22; - } else { - var93 = var20; - var21 = var89.cycleOffset + var91.int5 - var19; - if (var91.int3 >= 0) { - var17 = (var21 << 8) / (var91.int5 - var91.int3); - } - } - - if (var89.health2 > 0 && var93 < 1) { - var93 = 1; - } - - if (var76 != null && var14 != null) { - if (var93 == var15) { - var93 += var16 * 2; - } else { - var93 += var16; - } - - var21 = var76.subHeight; - var87 += var21; - var22 = var2 + Client.viewportTempX - (var15 >> 1); - var23 = var3 + Client.viewportTempY - var87; - var22 -= var16; - if (var17 >= 0 && var17 < 255) { - var76.drawTransAt(var22, var23, var17); - Rasterizer2D.Rasterizer2D_expandClip(var22, var23, var93 + var22, var23 + var21); - var14.drawTransAt(var22, var23, var17); - } else { - var76.drawTransBgAt(var22, var23); - Rasterizer2D.Rasterizer2D_expandClip(var22, var23, var22 + var93, var21 + var23); - var14.drawTransBgAt(var22, var23); - } - - Rasterizer2D.Rasterizer2D_setClip(var2, var3, var2 + var4, var3 + var5); - var87 += 2; - } else { - var87 += 5; - if (Client.viewportTempX > -1) { - var21 = var2 + Client.viewportTempX - (var15 >> 1); - var22 = var3 + Client.viewportTempY - var87; - Rasterizer2D.Rasterizer2D_fillRectangle(var21, var22, var93, 5, 65280); - Rasterizer2D.Rasterizer2D_fillRectangle(var93 + var21, var22, var15 - var93, 5, 16711680); - } - - var87 += 2; - } - } - } - } - - if (var87 == -2) { - var87 += 7; - } - - var87 += var8; - if (var1 < var75) { - var10 = (Player)var0; - if (var10.isHidden) { - return; - } - - if (var10.headIconPk != -1 || var10.headIconPrayer != -1) { - Entity.getActorScreenLocation(var0, var0.defaultHeight + 15); - if (Client.viewportTempX > -1) { - if (var10.headIconPk != -1) { - var87 += 25; - FriendLoginUpdate.headIconPkSprites[var10.headIconPk].drawTransBgAt(var2 + Client.viewportTempX - 12, var3 + Client.viewportTempY - var87); - } - - if (var10.headIconPrayer != -1) { - var87 += 25; - Login.headIconPrayerSprites[var10.headIconPrayer].drawTransBgAt(var2 + Client.viewportTempX - 12, var3 + Client.viewportTempY - var87); - } - } - } - - if (var1 >= 0 && Client.hintArrowType == 10 && var7[var1] == Client.hintArrowPlayerIndex) { - Entity.getActorScreenLocation(var0, var0.defaultHeight + 15); - if (Client.viewportTempX > -1) { - var87 += class14.headIconHintSprites[1].subHeight; - class14.headIconHintSprites[1].drawTransBgAt(var2 + Client.viewportTempX - 12, var3 + Client.viewportTempY - var87); - } - } - } else { - NPCDefinition var90 = ((NPC)var0).definition; - if (var90.transforms != null) { - var90 = var90.transform(); - } - - if (var90.headIconPrayer >= 0 && var90.headIconPrayer < Login.headIconPrayerSprites.length) { - Entity.getActorScreenLocation(var0, var0.defaultHeight + 15); - if (Client.viewportTempX > -1) { - Login.headIconPrayerSprites[var90.headIconPrayer].drawTransBgAt(var2 + Client.viewportTempX - 12, var3 + Client.viewportTempY - 30); - } - } - - if (Client.hintArrowType == 1 && Client.npcIndices[var1 - var75] == Client.hintArrowNpcIndex && Client.cycle % 20 < 10) { - Entity.getActorScreenLocation(var0, var0.defaultHeight + 15); - if (Client.viewportTempX > -1) { - class14.headIconHintSprites[0].drawTransBgAt(var2 + Client.viewportTempX - 12, var3 + Client.viewportTempY - 28); - } - } - } - - if (var0.overheadText != null && (var1 >= var75 || !var0.field939 && (Client.publicChatMode == 4 || !var0.isAutoChatting && (Client.publicChatMode == 0 || Client.publicChatMode == 3 || Client.publicChatMode == 1 && ((Player)var0).isFriend())))) { - Entity.getActorScreenLocation(var0, var0.defaultHeight); - if (Client.viewportTempX > -1 && Client.overheadTextCount < Client.overheadTextLimit) { - Client.overheadTextXOffsets[Client.overheadTextCount] = class43.fontBold12.stringWidth(var0.overheadText) / 2; - Client.overheadTextAscents[Client.overheadTextCount] = class43.fontBold12.ascent; - Client.overheadTextXs[Client.overheadTextCount] = Client.viewportTempX; - Client.overheadTextYs[Client.overheadTextCount] = Client.viewportTempY; - Client.overheadTextColors[Client.overheadTextCount] = var0.overheadTextColor; - Client.overheadTextEffects[Client.overheadTextCount] = var0.overheadTextEffect; - Client.overheadTextCyclesRemaining[Client.overheadTextCount] = var0.overheadTextCyclesRemaining; - Client.overheadText[Client.overheadTextCount] = var0.overheadText; - ++Client.overheadTextCount; - } - } - - for (int var80 = 0; var80 < 4; ++var80) { - int var96 = var0.hitSplatCycles[var80]; - int var97 = var0.hitSplatTypes[var80]; - HitSplatDefinition var95 = null; - int var98 = 0; - if (var97 >= 0) { - if (var96 <= Client.cycle) { - continue; - } - - var95 = NetFileRequest.method4298(var0.hitSplatTypes[var80]); - var98 = var95.field3314; - if (var95 != null && var95.transforms != null) { - var95 = var95.transform(); - if (var95 == null) { - var0.hitSplatCycles[var80] = -1; - continue; - } - } - } else if (var96 < 0) { - continue; - } - - var15 = var0.hitSplatTypes2[var80]; - HitSplatDefinition var81 = null; - if (var15 >= 0) { - var81 = NetFileRequest.method4298(var15); - if (var81 != null && var81.transforms != null) { - var81 = var81.transform(); - } - } - - if (var96 - var98 <= Client.cycle) { - if (var95 == null) { - var0.hitSplatCycles[var80] = -1; - } else { - Entity.getActorScreenLocation(var0, var0.defaultHeight / 2); - if (Client.viewportTempX > -1) { - if (var80 == 1) { - Client.viewportTempY -= 20; - } - - if (var80 == 2) { - Client.viewportTempX -= 15; - Client.viewportTempY -= 10; - } - - if (var80 == 3) { - Client.viewportTempX += 15; - Client.viewportTempY -= 10; - } - - Sprite var82 = null; - Sprite var83 = null; - Sprite var84 = null; - Sprite var85 = null; - var22 = 0; - var23 = 0; - int var24 = 0; - int var25 = 0; - int var26 = 0; - int var27 = 0; - int var28 = 0; - int var29 = 0; - Sprite var30 = null; - Sprite var31 = null; - Sprite var32 = null; - Sprite var33 = null; - int var34 = 0; - int var35 = 0; - int var36 = 0; - int var37 = 0; - int var38 = 0; - int var39 = 0; - int var40 = 0; - int var41 = 0; - int var42 = 0; - var82 = var95.method4719(); - int var43; - if (var82 != null) { - var22 = var82.subWidth; - var43 = var82.subHeight; - if (var43 > var42) { - var42 = var43; - } - - var26 = var82.xOffset; - } - - var83 = var95.method4709(); - if (var83 != null) { - var23 = var83.subWidth; - var43 = var83.subHeight; - if (var43 > var42) { - var42 = var43; - } - - var27 = var83.xOffset; - } - - var84 = var95.method4710(); - if (var84 != null) { - var24 = var84.subWidth; - var43 = var84.subHeight; - if (var43 > var42) { - var42 = var43; - } - - var28 = var84.xOffset; - } - - var85 = var95.method4731(); - if (var85 != null) { - var25 = var85.subWidth; - var43 = var85.subHeight; - if (var43 > var42) { - var42 = var43; - } - - var29 = var85.xOffset; - } - - if (var81 != null) { - var30 = var81.method4719(); - if (var30 != null) { - var34 = var30.subWidth; - var43 = var30.subHeight; - if (var43 > var42) { - var42 = var43; - } - - var38 = var30.xOffset; - } - - var31 = var81.method4709(); - if (var31 != null) { - var35 = var31.subWidth; - var43 = var31.subHeight; - if (var43 > var42) { - var42 = var43; - } - - var39 = var31.xOffset; - } - - var32 = var81.method4710(); - if (var32 != null) { - var36 = var32.subWidth; - var43 = var32.subHeight; - if (var43 > var42) { - var42 = var43; - } - - var40 = var32.xOffset; - } - - var33 = var81.method4731(); - if (var33 != null) { - var37 = var33.subWidth; - var43 = var33.subHeight; - if (var43 > var42) { - var42 = var43; - } - - var41 = var33.xOffset; - } - } - - Font var86 = var95.getFont(); - if (var86 == null) { - var86 = class51.fontPlain11; - } - - Font var44; - if (var81 != null) { - var44 = var81.getFont(); - if (var44 == null) { - var44 = class51.fontPlain11; - } - } else { - var44 = class51.fontPlain11; - } - - String var45 = null; - String var46 = null; - boolean var47 = false; - int var48 = 0; - var45 = var95.getString(var0.hitSplatValues[var80]); - int var94 = var86.stringWidth(var45); - if (var81 != null) { - var46 = var81.getString(var0.hitSplatValues2[var80]); - var48 = var44.stringWidth(var46); - } - - int var49 = 0; - int var50 = 0; - if (var23 > 0) { - if (var84 == null && var85 == null) { - var49 = 1; - } else { - var49 = var94 / var23 + 1; - } - } - - if (var81 != null && var35 > 0) { - if (var32 == null && var33 == null) { - var50 = 1; - } else { - var50 = var48 / var35 + 1; - } - } - - int var51 = 0; - int var52 = var51; - if (var22 > 0) { - var51 += var22; - } - - var51 += 2; - int var53 = var51; - if (var24 > 0) { - var51 += var24; - } - - int var54 = var51; - int var55 = var51; - int var56; - if (var23 > 0) { - var56 = var49 * var23; - var51 += var56; - var55 += (var56 - var94) / 2; - } else { - var51 += var94; - } - - var56 = var51; - if (var25 > 0) { - var51 += var25; - } - - int var57 = 0; - int var58 = 0; - int var59 = 0; - int var60 = 0; - int var61 = 0; - int var62; - if (var81 != null) { - var51 += 2; - var57 = var51; - if (var34 > 0) { - var51 += var34; - } - - var51 += 2; - var58 = var51; - if (var36 > 0) { - var51 += var36; - } - - var59 = var51; - var61 = var51; - if (var35 > 0) { - var62 = var35 * var50; - var51 += var62; - var61 += (var62 - var48) / 2; - } else { - var51 += var48; - } - - var60 = var51; - if (var37 > 0) { - var51 += var37; - } - } - - var62 = var0.hitSplatCycles[var80] - Client.cycle; - int var63 = var95.field3329 - var62 * var95.field3329 / var95.field3314; - int var64 = var62 * var95.field3315 / var95.field3314 + -var95.field3315; - int var65 = var63 + (var2 + Client.viewportTempX - (var51 >> 1)); - int var66 = var3 + Client.viewportTempY - 12 + var64; - int var67 = var66; - int var68 = var42 + var66; - int var69 = var66 + var95.field3330 + 15; - int var70 = var69 - var86.maxAscent; - int var71 = var69 + var86.maxDescent; - if (var70 < var66) { - var67 = var70; - } - - if (var71 > var68) { - var68 = var71; - } - - int var72 = 0; - int var73; - int var74; - if (var81 != null) { - var72 = var66 + var81.field3330 + 15; - var73 = var72 - var44.maxAscent; - var74 = var72 + var44.maxDescent; - if (var73 < var67) { - ; - } - - if (var74 > var68) { - ; - } - } - - var73 = 255; - if (var95.field3327 >= 0) { - var73 = (var62 << 8) / (var95.field3314 - var95.field3327); - } - - if (var73 >= 0 && var73 < 255) { - if (var82 != null) { - var82.drawTransAt(var52 + var65 - var26, var66, var73); - } - - if (var84 != null) { - var84.drawTransAt(var65 + var53 - var28, var66, var73); - } - - if (var83 != null) { - for (var74 = 0; var74 < var49; ++var74) { - var83.drawTransAt(var74 * var23 + (var65 + var54 - var27), var66, var73); - } - } - - if (var85 != null) { - var85.drawTransAt(var65 + var56 - var29, var66, var73); - } - - var86.drawAlpha(var45, var55 + var65, var69, var95.textColor, 0, var73); - if (var81 != null) { - if (var30 != null) { - var30.drawTransAt(var65 + var57 - var38, var66, var73); - } - - if (var32 != null) { - var32.drawTransAt(var65 + var58 - var40, var66, var73); - } - - if (var31 != null) { - for (var74 = 0; var74 < var50; ++var74) { - var31.drawTransAt(var35 * var74 + (var65 + var59 - var39), var66, var73); - } - } - - if (var33 != null) { - var33.drawTransAt(var60 + var65 - var41, var66, var73); - } - - var44.drawAlpha(var46, var65 + var61, var72, var81.textColor, 0, var73); - } - } else { - if (var82 != null) { - var82.drawTransBgAt(var65 + var52 - var26, var66); - } - - if (var84 != null) { - var84.drawTransBgAt(var65 + var53 - var28, var66); - } - - if (var83 != null) { - for (var74 = 0; var74 < var49; ++var74) { - var83.drawTransBgAt(var23 * var74 + (var65 + var54 - var27), var66); - } - } - - if (var85 != null) { - var85.drawTransBgAt(var65 + var56 - var29, var66); - } - - var86.draw(var45, var55 + var65, var69, var95.textColor | -16777216, 0); - if (var81 != null) { - if (var30 != null) { - var30.drawTransBgAt(var57 + var65 - var38, var66); - } - - if (var32 != null) { - var32.drawTransBgAt(var58 + var65 - var40, var66); - } - - if (var31 != null) { - for (var74 = 0; var74 < var50; ++var74) { - var31.drawTransBgAt(var74 * var35 + (var65 + var59 - var39), var66); - } - } - - if (var33 != null) { - var33.drawTransBgAt(var60 + var65 - var41, var66); - } - - var44.draw(var46, var65 + var61, var72, var81.textColor | -16777216, 0); - } - } - } - } - } - } - - } - } } diff --git a/runescape-client/src/main/java/AbstractSound.java b/runescape-client/src/main/java/AbstractSound.java index ad3fe1df6d..7862953b3e 100644 --- a/runescape-client/src/main/java/AbstractSound.java +++ b/runescape-client/src/main/java/AbstractSound.java @@ -2,10 +2,10 @@ import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; -@ObfuscatedName("dg") +@ObfuscatedName("dl") @Implements("AbstractSound") public abstract class AbstractSound extends Node { - @ObfuscatedName("l") + @ObfuscatedName("p") @Export("position") int position; diff --git a/runescape-client/src/main/java/AbstractUserComparator.java b/runescape-client/src/main/java/AbstractUserComparator.java index 3b1f96a183..c8885f3a9e 100644 --- a/runescape-client/src/main/java/AbstractUserComparator.java +++ b/runescape-client/src/main/java/AbstractUserComparator.java @@ -1,29 +1,23 @@ import java.util.Comparator; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; -import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("jr") +@ObfuscatedName("jq") @Implements("AbstractUserComparator") public abstract class AbstractUserComparator implements Comparator { - @ObfuscatedName("rb") - @ObfuscatedGetter( - intValue = -1217958016 - ) - static int field3583; - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("nextComparator") Comparator nextComparator; protected AbstractUserComparator() { } - @ObfuscatedName("d") + @ObfuscatedName("w") @ObfuscatedSignature( - signature = "(Ljava/util/Comparator;B)V", - garbageValue = "115" + signature = "(Ljava/util/Comparator;I)V", + garbageValue = "314545919" ) @Export("addComparator") final void addComparator(Comparator var1) { @@ -35,10 +29,10 @@ public abstract class AbstractUserComparator implements Comparator { } - @ObfuscatedName("m") + @ObfuscatedName("i") @ObfuscatedSignature( - signature = "(Ljg;Ljg;B)I", - garbageValue = "124" + signature = "(Ljr;Ljr;B)I", + garbageValue = "14" ) @Export("compareUser") protected final int compareUser(User var1, User var2) { diff --git a/runescape-client/src/main/java/AbstractWorldMapData.java b/runescape-client/src/main/java/AbstractWorldMapData.java index 90d804474c..0bc7432133 100644 --- a/runescape-client/src/main/java/AbstractWorldMapData.java +++ b/runescape-client/src/main/java/AbstractWorldMapData.java @@ -5,114 +5,114 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("f") +@ObfuscatedName("m") @Implements("AbstractWorldMapData") public abstract class AbstractWorldMapData { - @ObfuscatedName("ae") + @ObfuscatedName("dl") @ObfuscatedSignature( - signature = "Llu;" + signature = "Lij;" ) - @Export("rasterProvider") - public static AbstractRasterProvider rasterProvider; - @ObfuscatedName("a") + @Export("archive6") + static Archive archive6; + @ObfuscatedName("u") @ObfuscatedGetter( - intValue = 1032040448 + intValue = 111975616 ) @Export("regionXLow") int regionXLow; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = 2012131328 + intValue = 1782706176 ) @Export("regionYLow") int regionYLow; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = 1049638377 + intValue = -577212613 ) @Export("regionX") int regionX; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = 548799015 + intValue = -248705921 ) @Export("regionY") int regionY; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = 974666319 + intValue = 1296595709 ) @Export("minPlane") int minPlane; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = 1744389767 + intValue = 380384989 ) @Export("planes") int planes; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedGetter( - intValue = -1592799997 + intValue = -1445814981 ) @Export("groupId") int groupId; - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedGetter( - intValue = -1573333695 + intValue = 1373242491 ) @Export("fileId") int fileId; - @ObfuscatedName("i") + @ObfuscatedName("w") @Export("floorUnderlayIds") short[][][] floorUnderlayIds; - @ObfuscatedName("d") + @ObfuscatedName("i") @Export("floorOverlayIds") short[][][] floorOverlayIds; - @ObfuscatedName("m") - byte[][][] field161; - @ObfuscatedName("p") - byte[][][] field157; - @ObfuscatedName("h") + @ObfuscatedName("k") + byte[][][] field166; + @ObfuscatedName("x") + byte[][][] field160; + @ObfuscatedName("o") @ObfuscatedSignature( - signature = "[[[[Ly;" + signature = "[[[[Lj;" ) @Export("decorations") WorldMapDecoration[][][][] decorations; - @ObfuscatedName("k") - boolean field159; - @ObfuscatedName("x") - boolean field151; + @ObfuscatedName("e") + boolean field169; + @ObfuscatedName("n") + boolean field167; AbstractWorldMapData() { this.groupId = -1; this.fileId = -1; new LinkedList(); - this.field159 = false; - this.field151 = false; + this.field169 = false; + this.field167 = false; } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Lkc;I)V", - garbageValue = "1045041620" + signature = "(Lkg;B)V", + garbageValue = "35" ) @Export("readGeography") abstract void readGeography(Buffer var1); - @ObfuscatedName("i") + @ObfuscatedName("p") @ObfuscatedSignature( signature = "(I)Z", - garbageValue = "-992891082" + garbageValue = "-1722967008" ) @Export("isFullyLoaded") boolean isFullyLoaded() { - return this.field159 && this.field151; + return this.field169 && this.field167; } - @ObfuscatedName("d") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "(Lhq;I)V", - garbageValue = "126023316" + signature = "(Lhf;I)V", + garbageValue = "222528841" ) @Export("loadGeography") void loadGeography(AbstractArchive var1) { @@ -120,53 +120,53 @@ public abstract class AbstractWorldMapData { byte[] var2 = var1.takeFile(this.groupId, this.fileId); if (var2 != null) { this.readGeography(new Buffer(var2)); - this.field159 = true; - this.field151 = true; + this.field169 = true; + this.field167 = true; } } } - @ObfuscatedName("m") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "124" + signature = "(I)V", + garbageValue = "1687680184" ) @Export("reset") void reset() { this.floorUnderlayIds = null; this.floorOverlayIds = null; - this.field161 = null; - this.field157 = null; + this.field166 = null; + this.field160 = null; this.decorations = null; - this.field159 = false; - this.field151 = false; + this.field169 = false; + this.field167 = false; } - @ObfuscatedName("p") + @ObfuscatedName("w") @ObfuscatedSignature( - signature = "(IILkc;I)V", - garbageValue = "-2099963410" + signature = "(IILkg;B)V", + garbageValue = "3" ) @Export("readTile") void readTile(int var1, int var2, Buffer var3) { int var4 = var3.readUnsignedByte(); if (var4 != 0) { if ((var4 & 1) != 0) { - this.method320(var1, var2, var3, var4); + this.method278(var1, var2, var3, var4); } else { - this.method302(var1, var2, var3, var4); + this.method279(var1, var2, var3, var4); } } } - @ObfuscatedName("h") + @ObfuscatedName("i") @ObfuscatedSignature( - signature = "(IILkc;IB)V", - garbageValue = "-1" + signature = "(IILkg;IB)V", + garbageValue = "92" ) - void method320(int var1, int var2, Buffer var3, int var4) { + void method278(int var1, int var2, Buffer var3, int var4) { boolean var5 = (var4 & 2) != 0; if (var5) { this.floorOverlayIds[0][var1][var2] = (short)var3.readUnsignedByte(); @@ -177,10 +177,10 @@ public abstract class AbstractWorldMapData { @ObfuscatedName("k") @ObfuscatedSignature( - signature = "(IILkc;IB)V", - garbageValue = "0" + signature = "(IILkg;II)V", + garbageValue = "1096070019" ) - void method302(int var1, int var2, Buffer var3, int var4) { + void method279(int var1, int var2, Buffer var3, int var4) { int var5 = ((var4 & 24) >> 3) + 1; boolean var6 = (var4 & 2) != 0; boolean var7 = (var4 & 4) != 0; @@ -196,8 +196,8 @@ public abstract class AbstractWorldMapData { if (var10 != 0) { this.floorOverlayIds[var9][var1][var2] = (short)var10; var11 = var3.readUnsignedByte(); - this.field161[var9][var1][var2] = (byte)(var11 >> 2); - this.field157[var9][var1][var2] = (byte)(var11 & 3); + this.field166[var9][var1][var2] = (byte)(var11 >> 2); + this.field160[var9][var1][var2] = (byte)(var11 & 3); } } } @@ -209,7 +209,7 @@ public abstract class AbstractWorldMapData { WorldMapDecoration[] var14 = this.decorations[var8][var1][var2] = new WorldMapDecoration[var9]; for (var11 = 0; var11 < var9; ++var11) { - int var12 = var3.method5638(); + int var12 = var3.method5618(); int var13 = var3.readUnsignedByte(); var14[var11] = new WorldMapDecoration(var12, var13 >> 2, var13 & 3); } @@ -221,158 +221,54 @@ public abstract class AbstractWorldMapData { @ObfuscatedName("x") @ObfuscatedSignature( - signature = "(B)I", - garbageValue = "80" + signature = "(I)I", + garbageValue = "1505128614" ) @Export("getRegionX") int getRegionX() { return this.regionX; } - @ObfuscatedName("j") + @ObfuscatedName("o") @ObfuscatedSignature( signature = "(B)I", - garbageValue = "84" + garbageValue = "-8" ) @Export("getRegionY") int getRegionY() { return this.regionY; } - @ObfuscatedName("t") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Ljava/lang/CharSequence;I)Z", - garbageValue = "403966383" + signature = "(Ljava/lang/CharSequence;I)I", + garbageValue = "493677830" ) - @Export("isNumber") - public static boolean isNumber(CharSequence var0) { - boolean var2 = false; - boolean var3 = false; - int var4 = 0; - int var5 = var0.length(); - int var6 = 0; + public static int method284(CharSequence var0) { + int var1 = var0.length(); + int var2 = 0; - boolean var1; - while (true) { - if (var6 >= var5) { - var1 = var3; - break; - } - - label81: { - char var7 = var0.charAt(var6); - if (var6 == 0) { - if (var7 == '-') { - var2 = true; - break label81; - } - - if (var7 == '+') { - break label81; - } - } - - int var9; - if (var7 >= '0' && var7 <= '9') { - var9 = var7 - '0'; - } else if (var7 >= 'A' && var7 <= 'Z') { - var9 = var7 - '7'; - } else { - if (var7 < 'a' || var7 > 'z') { - var1 = false; - break; - } - - var9 = var7 - 'W'; - } - - if (var9 >= 10) { - var1 = false; - break; - } - - if (var2) { - var9 = -var9; - } - - int var8 = var4 * 10 + var9; - if (var4 != var8 / 10) { - var1 = false; - break; - } - - var4 = var8; - var3 = true; - } - - ++var6; - } - - return var1; - } - - @ObfuscatedName("q") - @ObfuscatedSignature( - signature = "(II)Z", - garbageValue = "693586906" - ) - public static boolean method327(int var0) { - return (var0 >> 21 & 1) != 0; - } - - @ObfuscatedName("hp") - @ObfuscatedSignature( - signature = "(ZLkf;I)V", - garbageValue = "1158282077" - ) - @Export("updateNpcs") - static final void updateNpcs(boolean var0, PacketBuffer var1) { - Client.field752 = 0; - Client.field676 = 0; - class30.method606(); - WorldMapManager.method710(var0, var1); - class160.method3586(var1); - - int var2; - for (var2 = 0; var2 < Client.field752; ++var2) { - int var3 = Client.field870[var2]; - if (Client.npcs[var3].npcCycle != Client.cycle) { - Client.npcs[var3].definition = null; - Client.npcs[var3] = null; + for (int var3 = 0; var3 < var1; ++var3) { + char var4 = var0.charAt(var3); + if (var4 <= 127) { + ++var2; + } else if (var4 <= 2047) { + var2 += 2; + } else { + var2 += 3; } } - if (var1.offset != Client.packetWriter.serverPacketLength) { - throw new RuntimeException(var1.offset + "," + Client.packetWriter.serverPacketLength); - } else { - for (var2 = 0; var2 < Client.npcCount; ++var2) { - if (Client.npcs[Client.npcIndices[var2]] == null) { - throw new RuntimeException(var2 + "," + Client.npcCount); - } - } - - } + return var2; } - @ObfuscatedName("kw") + @ObfuscatedName("w") @ObfuscatedSignature( - signature = "(III)V", - garbageValue = "2048365157" + signature = "(CI)Z", + garbageValue = "-858513722" ) - static void method325(int var0, int var1) { - MenuAction var2 = StudioGame.tempMenuAction; - GrandExchangeOfferOwnWorldComparator.menuAction(var2.param0, var2.param1, var2.opcode, var2.identifier, var2.action, var2.action, var0, var1); - StudioGame.tempMenuAction = null; - } - - @ObfuscatedName("kx") - @ObfuscatedSignature( - signature = "(II)V", - garbageValue = "871169152" - ) - static final void method326(int var0) { - if (TextureProvider.loadInterface(var0)) { - HealthBarDefinition.drawModelComponents(Widget.Widget_interfaceComponents[var0], -1); - } + @Export("isDigit") + public static boolean isDigit(char var0) { + return var0 >= '0' && var0 <= '9'; } } diff --git a/runescape-client/src/main/java/AbstractWorldMapIcon.java b/runescape-client/src/main/java/AbstractWorldMapIcon.java index 94293054b5..9720d35568 100644 --- a/runescape-client/src/main/java/AbstractWorldMapIcon.java +++ b/runescape-client/src/main/java/AbstractWorldMapIcon.java @@ -3,91 +3,102 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; +import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("am") +@ObfuscatedName("aa") @Implements("AbstractWorldMapIcon") public abstract class AbstractWorldMapIcon { - @ObfuscatedName("qa") - @ObfuscatedSignature( - signature = "Ldo;" + @ObfuscatedName("qk") + @ObfuscatedGetter( + intValue = 1263704437 ) - @Export("decimator") - static Decimator decimator; - @ObfuscatedName("dz") + static int field299; + @ObfuscatedName("as") + @Export("client") + @ObfuscatedSignature( + signature = "Lclient;" + ) + static Client client; + @ObfuscatedName("ey") @ObfuscatedSignature( signature = "Lij;" ) - @Export("archive2") - static Archive archive2; - @ObfuscatedName("c") + @Export("archive17") + static Archive archive17; + @ObfuscatedName("ef") + @ObfuscatedGetter( + intValue = 821874025 + ) + static int field292; + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "Lhf;" + signature = "Lhx;" ) @Export("coord2") public final Coord coord2; - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "Lhf;" + signature = "Lhx;" ) @Export("coord1") public final Coord coord1; - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedGetter( - intValue = 2101295301 + intValue = 148025221 ) @Export("screenX") int screenX; - @ObfuscatedName("d") + @ObfuscatedName("i") @ObfuscatedGetter( - intValue = 1809390745 + intValue = 316665889 ) @Export("screenY") int screenY; @ObfuscatedSignature( - signature = "(Lhf;Lhf;)V" + signature = "(Lhx;Lhx;)V" ) AbstractWorldMapIcon(Coord var1, Coord var2) { this.coord1 = var1; this.coord2 = var2; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "(I)I", - garbageValue = "-1878632225" + garbageValue = "-871583687" ) @Export("getElement") public abstract int getElement(); - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(I)Lar;", - garbageValue = "-77909992" + signature = "(I)Lam;", + garbageValue = "969160497" ) @Export("getLabel") abstract WorldMapLabel getLabel(); - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( signature = "(I)I", - garbageValue = "60677286" + garbageValue = "-55298135" ) @Export("getSubWidth") abstract int getSubWidth(); - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( signature = "(B)I", - garbageValue = "-92" + garbageValue = "-51" ) @Export("getSubHeight") abstract int getSubHeight(); - @ObfuscatedName("e") + @ObfuscatedName("c") @ObfuscatedSignature( - signature = "(III)Z", - garbageValue = "1408503186" + signature = "(IIB)Z", + garbageValue = "34" ) @Export("fitsScreen") boolean fitsScreen(int var1, int var2) { @@ -101,47 +112,48 @@ public abstract class AbstractWorldMapIcon { @ObfuscatedName("s") @ObfuscatedSignature( signature = "(I)Z", - garbageValue = "1618081006" + garbageValue = "1140208309" ) @Export("hasValidElement") boolean hasValidElement() { return this.getElement() >= 0; } - @ObfuscatedName("b") + @ObfuscatedName("t") @ObfuscatedSignature( - signature = "(III)Z", - garbageValue = "471623513" + signature = "(IIB)Z", + garbageValue = "75" ) @Export("elementFitsScreen") boolean elementFitsScreen(int var1, int var2) { if (!this.hasValidElement()) { return false; } else { - WorldMapElement var3 = class65.WorldMapElement_get(this.getElement()); + WorldMapElement var3 = Varcs.WorldMapElement_get(this.getElement()); int var4 = this.getSubWidth(); int var5 = this.getSubHeight(); switch(var3.horizontalAlignment.value) { case 0: - if (var1 <= this.screenX - var4 || var1 > this.screenX) { - return false; + if (var1 >= this.screenX && var1 < var4 + this.screenX) { + break; } - break; + + return false; case 1: - if (var1 >= this.screenX - var4 / 2 && var1 <= var4 / 2 + this.screenX) { + if (var1 > this.screenX - var4 && var1 <= this.screenX) { break; } return false; case 2: - if (var1 < this.screenX || var1 >= var4 + this.screenX) { + if (var1 < this.screenX - var4 / 2 || var1 > var4 / 2 + this.screenX) { return false; } } switch(var3.verticalAlignment.value) { case 0: - if (var2 <= this.screenY - var5 || var2 > this.screenY) { + if (var2 < this.screenY || var2 >= var5 + this.screenY) { return false; } break; @@ -151,7 +163,7 @@ public abstract class AbstractWorldMapIcon { } break; case 2: - if (var2 < this.screenY || var2 >= var5 + this.screenY) { + if (var2 <= this.screenY - var5 || var2 > this.screenY) { return false; } } @@ -160,10 +172,10 @@ public abstract class AbstractWorldMapIcon { } } - @ObfuscatedName("w") + @ObfuscatedName("m") @ObfuscatedSignature( signature = "(III)Z", - garbageValue = "1082527847" + garbageValue = "-1821247860" ) @Export("labelFitsScreen") boolean labelFitsScreen(int var1, int var2) { @@ -171,52 +183,89 @@ public abstract class AbstractWorldMapIcon { if (var3 == null) { return false; } else if (var1 >= this.screenX - var3.width / 2 && var1 <= var3.width / 2 + this.screenX) { - return var2 >= this.screenY && var2 <= var3.height + this.screenY; + return var2 >= this.screenY && var2 <= this.screenY + var3.height; } else { return false; } } - @ObfuscatedName("o") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(CI)Z", - garbageValue = "93178768" + signature = "(Lhf;Lhf;ZB)V", + garbageValue = "28" ) - static boolean method679(char var0) { - return "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!\"£$%^&*()-_=+[{]};:'@#~,<.>/?\\| ".indexOf(var0) != -1; + public static void method625(AbstractArchive var0, AbstractArchive var1, boolean var2) { + ObjectDefinition.ObjectDefinition_archive = var0; + ObjectDefinition.ObjectDefinition_modelsArchive = var1; + ObjectDefinition.ObjectDefinition_isLowDetail = var2; } - @ObfuscatedName("fa") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "30161399" + signature = "(B)V", + garbageValue = "1" ) - static final void method652() { - if (Client.logoutTimer > 0) { - class1.logOut(); + static void method623() { + Messages.Messages_channels.clear(); + Messages.Messages_hashTable.clear(); + Messages.Messages_queue.clear(); + Messages.Messages_count = 0; + } + + @ObfuscatedName("m") + @ObfuscatedSignature( + signature = "(ILci;ZI)I", + garbageValue = "1136599608" + ) + static int method618(int var0, Script var1, boolean var2) { + Widget var3 = Language.getWidget(Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]); + if (var0 == ScriptOpcodes.IF_GETSCROLLX) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.scrollX; + return 1; + } else if (var0 == ScriptOpcodes.IF_GETSCROLLY) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.scrollY; + return 1; + } else if (var0 == ScriptOpcodes.IF_GETTEXT) { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var3.text; + return 1; + } else if (var0 == ScriptOpcodes.IF_GETSCROLLWIDTH) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.scrollWidth; + return 1; + } else if (var0 == ScriptOpcodes.IF_GETSCROLLHEIGHT) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.scrollHeight; + return 1; + } else if (var0 == ScriptOpcodes.IF_GETMODELZOOM) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.modelZoom; + return 1; + } else if (var0 == ScriptOpcodes.IF_GETMODELANGLE_X) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.modelAngleX; + return 1; + } else if (var0 == ScriptOpcodes.IF_GETMODELANGLE_Z) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.modelAngleZ; + return 1; + } else if (var0 == ScriptOpcodes.IF_GETMODELANGLE_Y) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.modelAngleY; + return 1; + } else if (var0 == ScriptOpcodes.IF_GETTRANSTOP) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.transparencyTop; + return 1; + } else if (var0 == ScriptOpcodes.IF_GETTRANSBOT) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.transparencyBot; + return 1; + } else if (var0 == ScriptOpcodes.IF_GETCOLOUR) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.color; + return 1; + } else if (var0 == ScriptOpcodes.IF_GETFILLCOLOUR) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.color2; + return 1; + } else if (var0 == ScriptOpcodes.IF_GETFILLMODE) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.fillMode.rsOrdinal(); + return 1; + } else if (var0 == ScriptOpcodes.IF_GETMODELTRANSPARENT) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.modelTransparency ? 1 : 0; + return 1; } else { - Client.timer.method5123(); - Tile.updateGameState(40); - Tiles.field499 = Client.packetWriter.getSocket(); - Client.packetWriter.removeSocket(); + return 2; } } - - @ObfuscatedName("fo") - @ObfuscatedSignature( - signature = "(II)V", - garbageValue = "542479713" - ) - @Export("playSong") - static void playSong(int var0) { - if (var0 == -1 && !Client.field855) { - class197.midiPcmStream.clear(); - class197.field2377 = 1; - class247.musicTrackArchive = null; - } else if (var0 != -1 && var0 != Client.currentTrackGroupId && Client.musicVolume != 0 && !Client.field855) { - WorldMapIcon_0.method253(2, class216.archive6, var0, 0, Client.musicVolume, false); - } - - Client.currentTrackGroupId = var0; - } } diff --git a/runescape-client/src/main/java/AccessFile.java b/runescape-client/src/main/java/AccessFile.java index 06275123ba..71d75f894f 100644 --- a/runescape-client/src/main/java/AccessFile.java +++ b/runescape-client/src/main/java/AccessFile.java @@ -9,21 +9,21 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("mh") +@ObfuscatedName("md") @Implements("AccessFile") public final class AccessFile { - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("file") RandomAccessFile file; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedGetter( - longValue = 6718173947913803383L + longValue = -1982697081356352199L ) @Export("maxSize") final long maxSize; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - longValue = -8033630762525345541L + longValue = 797587694615508853L ) @Export("offset") long offset; @@ -49,17 +49,17 @@ public final class AccessFile { this.file.seek(0L); } - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("seek") final void seek(long var1) throws IOException { this.file.seek(var1); this.offset = var1; } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( signature = "([BIII)V", - garbageValue = "-1742010354" + garbageValue = "2100291593" ) @Export("write") public final void write(byte[] var1, int var2, int var3) throws IOException { @@ -73,20 +73,20 @@ public final class AccessFile { } } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( signature = "(B)V", - garbageValue = "-87" + garbageValue = "-108" ) @Export("close") public final void close() throws IOException { this.closeSync(false); } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(ZS)V", - garbageValue = "26740" + signature = "(ZI)V", + garbageValue = "-687857713" ) @Export("closeSync") public final void closeSync(boolean var1) throws IOException { @@ -104,20 +104,20 @@ public final class AccessFile { } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(B)J", - garbageValue = "-60" + signature = "(I)J", + garbageValue = "-266154110" ) @Export("length") public final long length() throws IOException { return this.file.length(); } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "([BIIB)I", - garbageValue = "2" + signature = "([BIII)I", + garbageValue = "-309112442" ) @Export("read") public final int read(byte[] var1, int var2, int var3) throws IOException { diff --git a/runescape-client/src/main/java/Actor.java b/runescape-client/src/main/java/Actor.java index 54a1ae94c7..bd575ae4d6 100644 --- a/runescape-client/src/main/java/Actor.java +++ b/runescape-client/src/main/java/Actor.java @@ -3,327 +3,334 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; +import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("bz") +@ObfuscatedName("bt") @Implements("Actor") public abstract class Actor extends Entity { - @ObfuscatedName("eu") + @ObfuscatedName("el") @ObfuscatedSignature( - signature = "Lij;" + signature = "Lku;" ) - @Export("archive20") - static Archive archive20; - @ObfuscatedName("aq") + @Export("spriteIds") + static GraphicsDefaults spriteIds; + @ObfuscatedName("mh") @ObfuscatedGetter( - intValue = 1673440105 + intValue = 1998357535 + ) + @Export("selectedSpellFlags") + static int selectedSpellFlags; + @ObfuscatedName("ai") + @ObfuscatedGetter( + intValue = 1951571129 ) @Export("x") int x; - @ObfuscatedName("ad") + @ObfuscatedName("ag") @ObfuscatedGetter( - intValue = -86496457 + intValue = -1702454117 ) @Export("y") int y; - @ObfuscatedName("ag") + @ObfuscatedName("ao") @ObfuscatedGetter( - intValue = -1022004991 + intValue = -1278261801 ) @Export("rotation") int rotation; - @ObfuscatedName("ak") + @ObfuscatedName("aw") @Export("isWalking") boolean isWalking; - @ObfuscatedName("av") + @ObfuscatedName("ak") @ObfuscatedGetter( - intValue = 1414687121 + intValue = 401053777 ) - int field927; - @ObfuscatedName("am") + int field938; + @ObfuscatedName("aa") @ObfuscatedGetter( - intValue = 222387089 + intValue = 1537825747 ) @Export("playerCycle") int playerCycle; @ObfuscatedName("ab") @ObfuscatedGetter( - intValue = -1677804381 + intValue = 1548693687 ) @Export("readySequence") int readySequence; - @ObfuscatedName("ax") + @ObfuscatedName("ar") @ObfuscatedGetter( - intValue = 594336323 + intValue = 2043182385 ) @Export("turnLeftSequence") int turnLeftSequence; - @ObfuscatedName("al") + @ObfuscatedName("av") @ObfuscatedGetter( - intValue = 1154441065 + intValue = -1529323687 ) @Export("turnRightSequence") int turnRightSequence; - @ObfuscatedName("ap") + @ObfuscatedName("aq") @ObfuscatedGetter( - intValue = 83349541 + intValue = -1702834689 ) @Export("walkSequence") int walkSequence; - @ObfuscatedName("aj") + @ObfuscatedName("ac") @ObfuscatedGetter( - intValue = 1700088935 + intValue = -1195328729 ) @Export("walkBackSequence") int walkBackSequence; - @ObfuscatedName("ae") + @ObfuscatedName("az") @ObfuscatedGetter( - intValue = -781057529 + intValue = -551716323 ) @Export("walkLeftSequence") int walkLeftSequence; - @ObfuscatedName("au") + @ObfuscatedName("at") @ObfuscatedGetter( - intValue = -1829521957 + intValue = -588172397 ) @Export("walkRightSequence") int walkRightSequence; - @ObfuscatedName("ah") + @ObfuscatedName("ae") @ObfuscatedGetter( - intValue = -2016822393 + intValue = 1934964713 ) @Export("runSequence") int runSequence; - @ObfuscatedName("an") + @ObfuscatedName("aj") @Export("overheadText") String overheadText; - @ObfuscatedName("af") + @ObfuscatedName("ap") @Export("isAutoChatting") boolean isAutoChatting; - @ObfuscatedName("ay") - boolean field939; - @ObfuscatedName("az") + @ObfuscatedName("an") + boolean field950; + @ObfuscatedName("al") @ObfuscatedGetter( - intValue = 1235378121 + intValue = -2071391287 ) @Export("overheadTextCyclesRemaining") int overheadTextCyclesRemaining; - @ObfuscatedName("ao") + @ObfuscatedName("ay") @ObfuscatedGetter( - intValue = -696280171 + intValue = -1854297981 ) @Export("overheadTextColor") int overheadTextColor; - @ObfuscatedName("ai") + @ObfuscatedName("ax") @ObfuscatedGetter( - intValue = -1688504189 + intValue = -2046431957 ) @Export("overheadTextEffect") int overheadTextEffect; - @ObfuscatedName("at") + @ObfuscatedName("as") @Export("hitSplatCount") byte hitSplatCount; - @ObfuscatedName("as") + @ObfuscatedName("ah") @Export("hitSplatTypes") int[] hitSplatTypes; - @ObfuscatedName("ba") + @ObfuscatedName("bi") @Export("hitSplatValues") int[] hitSplatValues; - @ObfuscatedName("bg") + @ObfuscatedName("bo") @Export("hitSplatCycles") int[] hitSplatCycles; - @ObfuscatedName("bc") + @ObfuscatedName("bx") @Export("hitSplatTypes2") int[] hitSplatTypes2; - @ObfuscatedName("bd") + @ObfuscatedName("bu") @Export("hitSplatValues2") int[] hitSplatValues2; - @ObfuscatedName("bx") + @ObfuscatedName("bd") @ObfuscatedSignature( signature = "Ljm;" ) @Export("healthBars") IterableNodeDeque healthBars; - @ObfuscatedName("bl") + @ObfuscatedName("bn") @ObfuscatedGetter( - intValue = -2097579951 + intValue = 2135432751 ) @Export("targetIndex") int targetIndex; - @ObfuscatedName("bh") + @ObfuscatedName("bj") @Export("false0") boolean false0; - @ObfuscatedName("bu") + @ObfuscatedName("bm") @ObfuscatedGetter( - intValue = -1107390821 + intValue = 1522685125 ) - int field934; - @ObfuscatedName("br") + int field965; + @ObfuscatedName("bq") @ObfuscatedGetter( - intValue = -1581860297 + intValue = -1971794141 ) @Export("movementSequence") int movementSequence; - @ObfuscatedName("bq") + @ObfuscatedName("bf") @ObfuscatedGetter( - intValue = 1528888905 + intValue = -1163192511 ) @Export("movementFrame") int movementFrame; - @ObfuscatedName("bi") + @ObfuscatedName("by") @ObfuscatedGetter( - intValue = -687202097 + intValue = -705488337 ) @Export("movementFrameCycle") int movementFrameCycle; - @ObfuscatedName("be") + @ObfuscatedName("br") @ObfuscatedGetter( - intValue = 805247977 + intValue = 980221 ) @Export("sequence") int sequence; - @ObfuscatedName("bt") + @ObfuscatedName("ba") @ObfuscatedGetter( - intValue = 736502107 + intValue = 1531052871 ) @Export("sequenceFrame") int sequenceFrame; - @ObfuscatedName("bs") + @ObfuscatedName("bb") @ObfuscatedGetter( - intValue = -420296753 + intValue = 2086339795 ) @Export("sequenceFrameCycle") int sequenceFrameCycle; - @ObfuscatedName("bj") + @ObfuscatedName("bg") @ObfuscatedGetter( - intValue = 336768917 + intValue = 863905413 ) @Export("sequenceDelay") int sequenceDelay; - @ObfuscatedName("bm") + @ObfuscatedName("bw") @ObfuscatedGetter( - intValue = -1410322499 + intValue = -217068217 ) - int field960; - @ObfuscatedName("bn") + int field971; + @ObfuscatedName("be") @ObfuscatedGetter( - intValue = 1228903613 + intValue = -1431332559 ) @Export("spotAnimation") int spotAnimation; - @ObfuscatedName("bz") + @ObfuscatedName("bt") @ObfuscatedGetter( - intValue = 1265033073 + intValue = -446541561 ) @Export("spotAnimationFrame") int spotAnimationFrame; - @ObfuscatedName("bo") + @ObfuscatedName("bl") @ObfuscatedGetter( - intValue = -663316133 + intValue = -1428986091 ) @Export("spotAnimationFrameCycle") int spotAnimationFrameCycle; - @ObfuscatedName("bk") - @ObfuscatedGetter( - intValue = -1273295849 - ) - int field973; - @ObfuscatedName("bv") - @ObfuscatedGetter( - intValue = 528591249 - ) - int field965; - @ObfuscatedName("bw") - @ObfuscatedGetter( - intValue = 1608804509 - ) - int field966; - @ObfuscatedName("bb") - @ObfuscatedGetter( - intValue = -164988469 - ) - int field967; - @ObfuscatedName("bf") - @ObfuscatedGetter( - intValue = -1333983147 - ) - int field979; - @ObfuscatedName("by") - @ObfuscatedGetter( - intValue = 105474701 - ) - int field969; @ObfuscatedName("bp") @ObfuscatedGetter( - intValue = 1769569101 + intValue = 1351668501 ) - int field925; - @ObfuscatedName("cx") + int field975; + @ObfuscatedName("bv") @ObfuscatedGetter( - intValue = 1506809691 + intValue = 639610433 ) - int field971; + int field996; + @ObfuscatedName("bs") + @ObfuscatedGetter( + intValue = 817107681 + ) + int field946; + @ObfuscatedName("bz") + @ObfuscatedGetter( + intValue = 810384445 + ) + int field978; + @ObfuscatedName("bc") + @ObfuscatedGetter( + intValue = 40503997 + ) + int field979; + @ObfuscatedName("bh") + @ObfuscatedGetter( + intValue = 1623463931 + ) + int field980; + @ObfuscatedName("bk") + @ObfuscatedGetter( + intValue = -950690973 + ) + int field934; + @ObfuscatedName("cm") + @ObfuscatedGetter( + intValue = 1712532071 + ) + int field982; + @ObfuscatedName("cd") + @ObfuscatedGetter( + intValue = 1620214811 + ) + int field983; @ObfuscatedName("cv") @ObfuscatedGetter( - intValue = 1295543135 - ) - int field972; - @ObfuscatedName("ce") - @ObfuscatedGetter( - intValue = 1559943605 + intValue = 1481734065 ) @Export("npcCycle") int npcCycle; - @ObfuscatedName("cw") + @ObfuscatedName("cl") @ObfuscatedGetter( - intValue = 320863757 + intValue = 1455392247 ) @Export("defaultHeight") int defaultHeight; - @ObfuscatedName("cd") + @ObfuscatedName("cg") @ObfuscatedGetter( - intValue = -1451956301 + intValue = -27617279 ) @Export("orientation") int orientation; - @ObfuscatedName("cn") + @ObfuscatedName("ch") @ObfuscatedGetter( - intValue = 477550871 + intValue = 1781093081 ) - int field948; + int field987; + @ObfuscatedName("co") + @ObfuscatedGetter( + intValue = 860658493 + ) + int field988; @ObfuscatedName("cr") @ObfuscatedGetter( - intValue = 1785171989 - ) - int field977; - @ObfuscatedName("ci") - @ObfuscatedGetter( - intValue = 2075263543 + intValue = 469579589 ) @Export("pathLength") int pathLength; - @ObfuscatedName("cy") + @ObfuscatedName("ck") @Export("pathX") int[] pathX; - @ObfuscatedName("cl") + @ObfuscatedName("cb") @Export("pathY") int[] pathY; - @ObfuscatedName("co") + @ObfuscatedName("cy") @Export("pathTraversed") byte[] pathTraversed; - @ObfuscatedName("cu") + @ObfuscatedName("cn") @ObfuscatedGetter( - intValue = -2083065961 + intValue = 1598784809 ) - int field982; - @ObfuscatedName("cz") + int field976; + @ObfuscatedName("cj") @ObfuscatedGetter( - intValue = 1810694977 + intValue = 559009223 ) - int field983; + int field994; Actor() { this.isWalking = false; - this.field927 = 1; + this.field938 = 1; this.readySequence = -1; this.turnLeftSequence = -1; this.turnRightSequence = -1; @@ -333,7 +340,7 @@ public abstract class Actor extends Entity { this.walkRightSequence = -1; this.runSequence = -1; this.overheadText = null; - this.field939 = false; + this.field950 = false; this.overheadTextCyclesRemaining = 100; this.overheadTextColor = 0; this.overheadTextEffect = 0; @@ -346,7 +353,7 @@ public abstract class Actor extends Entity { this.healthBars = new IterableNodeDeque(); this.targetIndex = -1; this.false0 = false; - this.field934 = -1; + this.field965 = -1; this.movementSequence = -1; this.movementFrame = 0; this.movementFrameCycle = 0; @@ -354,46 +361,46 @@ public abstract class Actor extends Entity { this.sequenceFrame = 0; this.sequenceFrameCycle = 0; this.sequenceDelay = 0; - this.field960 = 0; + this.field971 = 0; this.spotAnimation = -1; this.spotAnimationFrame = 0; this.spotAnimationFrameCycle = 0; this.npcCycle = 0; this.defaultHeight = 200; - this.field948 = 0; - this.field977 = 32; + this.field987 = 0; + this.field988 = 32; this.pathLength = 0; this.pathX = new int[10]; this.pathY = new int[10]; this.pathTraversed = new byte[10]; - this.field982 = 0; - this.field983 = 0; + this.field976 = 0; + this.field994 = 0; } - @ObfuscatedName("h") + @ObfuscatedName("o") @ObfuscatedSignature( - signature = "(B)Z", - garbageValue = "-25" + signature = "(I)Z", + garbageValue = "-968027489" ) @Export("isVisible") boolean isVisible() { return false; } - @ObfuscatedName("bu") + @ObfuscatedName("au") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "0" + signature = "(I)V", + garbageValue = "-2082426618" ) - final void method1862() { + final void method1759() { this.pathLength = 0; - this.field983 = 0; + this.field994 = 0; } - @ObfuscatedName("br") + @ObfuscatedName("as") @ObfuscatedSignature( signature = "(IIIIIII)V", - garbageValue = "-506913236" + garbageValue = "-666824571" ) @Export("addHitSplat") final void addHitSplat(int var1, int var2, int var3, int var4, int var5, int var6) { @@ -413,9 +420,9 @@ public abstract class Actor extends Entity { int var10 = -1; int var11 = 0; if (var1 >= 0) { - HitSplatDefinition var12 = NetFileRequest.method4298(var1); - var10 = var12.field3313; - var11 = var12.field3314; + HitSplatDefinition var12 = class42.method811(var1); + var10 = var12.field3347; + var11 = var12.field3338; } int var14; @@ -471,10 +478,10 @@ public abstract class Actor extends Entity { } } - @ObfuscatedName("bq") + @ObfuscatedName("ah") @ObfuscatedSignature( - signature = "(IIIIIIB)V", - garbageValue = "-38" + signature = "(IIIIIII)V", + garbageValue = "1706369606" ) @Export("addHealthBar") final void addHealthBar(int var1, int var2, int var3, int var4, int var5, int var6) { @@ -502,7 +509,7 @@ public abstract class Actor extends Entity { HealthBar var13; for (var13 = (HealthBar)this.healthBars.last(); var13 != null; var13 = (HealthBar)this.healthBars.previous()) { ++var12; - if (var13.definition.field3265 == var8.field3265) { + if (var13.definition.field3294 == var8.field3294) { var13.put(var2 + var4, var5, var6, var3); return; } @@ -536,114 +543,209 @@ public abstract class Actor extends Entity { @ObfuscatedName("bi") @ObfuscatedSignature( signature = "(II)V", - garbageValue = "-1507831115" + garbageValue = "-1031768324" ) @Export("removeHealthBar") final void removeHealthBar(int var1) { - HealthBarDefinition var3 = (HealthBarDefinition)HealthBarDefinition.HealthBarDefinition_cached.get((long)var1); - HealthBarDefinition var2; - if (var3 != null) { - var2 = var3; - } else { - byte[] var4 = HealthBarDefinition.HealthBarDefinition_archive.takeFile(33, var1); - var3 = new HealthBarDefinition(); - if (var4 != null) { - var3.decode(new Buffer(var4)); - } + HealthBarDefinition var2 = class42.method810(var1); - HealthBarDefinition.HealthBarDefinition_cached.put(var3, (long)var1); - var2 = var3; - } - - var3 = var2; - - for (HealthBar var5 = (HealthBar)this.healthBars.last(); var5 != null; var5 = (HealthBar)this.healthBars.previous()) { - if (var3 == var5.definition) { - var5.remove(); + for (HealthBar var3 = (HealthBar)this.healthBars.last(); var3 != null; var3 = (HealthBar)this.healthBars.previous()) { + if (var2 == var3.definition) { + var3.remove(); return; } } } - @ObfuscatedName("gj") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Lbz;S)V", - garbageValue = "16384" + signature = "(Ljava/lang/CharSequence;I)J", + garbageValue = "1807317311" ) - static final void method1873(Actor var0) { - if (var0.field977 != 0) { - if (var0.targetIndex != -1) { - Object var1 = null; - if (var0.targetIndex < 32768) { - var1 = Client.npcs[var0.targetIndex]; - } else if (var0.targetIndex >= 32768) { - var1 = Client.players[var0.targetIndex - 32768]; - } + static long method1773(CharSequence var0) { + long var1 = 0L; + int var3 = var0.length(); - if (var1 != null) { - int var2 = var0.x - ((Actor)var1).x; - int var3 = var0.y - ((Actor)var1).y; - if (var2 != 0 || var3 != 0) { - var0.orientation = (int)(Math.atan2((double)var2, (double)var3) * 325.949D) & 2047; - } - } else if (var0.false0) { - var0.targetIndex = -1; - var0.false0 = false; - } + for (int var4 = 0; var4 < var3; ++var4) { + var1 *= 37L; + char var5 = var0.charAt(var4); + if (var5 >= 'A' && var5 <= 'Z') { + var1 += (long)(var5 + 1 - 65); + } else if (var5 >= 'a' && var5 <= 'z') { + var1 += (long)(var5 + 1 - 97); + } else if (var5 >= '0' && var5 <= '9') { + var1 += (long)(var5 + 27 - 48); } - if (var0.field934 != -1 && (var0.pathLength == 0 || var0.field982 > 0)) { - var0.orientation = var0.field934; - var0.field934 = -1; + if (var1 >= 177917621779460413L) { + break; } + } - int var4 = var0.orientation - var0.rotation & 2047; - if (var4 == 0 && var0.false0) { - var0.targetIndex = -1; - var0.false0 = false; - } + while (0L == var1 % 37L && 0L != var1) { + var1 /= 37L; + } - if (var4 != 0) { - ++var0.field948; - boolean var6; - if (var4 > 1024) { - var0.rotation -= var0.field977; - var6 = true; - if (var4 < var0.field977 || var4 > 2048 - var0.field977) { - var0.rotation = var0.orientation; - var6 = false; - } + return var1; + } - if (var0.readySequence == var0.movementSequence && (var0.field948 > 25 || var6)) { - if (var0.turnLeftSequence != -1) { - var0.movementSequence = var0.turnLeftSequence; - } else { - var0.movementSequence = var0.walkSequence; - } - } - } else { - var0.rotation += var0.field977; - var6 = true; - if (var4 < var0.field977 || var4 > 2048 - var0.field977) { - var0.rotation = var0.orientation; - var6 = false; - } + @ObfuscatedName("s") + @ObfuscatedSignature( + signature = "(ILci;ZB)I", + garbageValue = "-13" + ) + static int method1774(int var0, Script var1, boolean var2) { + Widget var3; + if (var0 >= 2000) { + var0 -= 1000; + var3 = Language.getWidget(Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]); + } else { + var3 = var2 ? Interpreter.field1090 : class188.field2352; + } - if (var0.readySequence == var0.movementSequence && (var0.field948 > 25 || var6)) { - if (var0.turnRightSequence != -1) { - var0.movementSequence = var0.turnRightSequence; - } else { - var0.movementSequence = var0.walkSequence; - } - } - } - - var0.rotation &= 2047; + if (var0 == ScriptOpcodes.CC_CALLONRESIZE) { + if (Interpreter.field1095 >= 10) { + throw new RuntimeException(); + } else if (var3.onResize == null) { + return 0; } else { - var0.field948 = 0; + ScriptEvent var4 = new ScriptEvent(); + var4.widget = var3; + var4.args = var3.onResize; + var4.field577 = Interpreter.field1095 + 1; + Client.scriptEvents.addFirst(var4); + return 1; } - + } else { + return 2; } } + + @ObfuscatedName("hs") + @ObfuscatedSignature( + signature = "(IIIIIIIB)V", + garbageValue = "-99" + ) + @Export("addPendingSpawnToScene") + static final void addPendingSpawnToScene(int var0, int var1, int var2, int var3, int var4, int var5, int var6) { + if (var2 >= 1 && var3 >= 1 && var2 <= 102 && var3 <= 102) { + if (Client.isLowDetail && var0 != ClientPacket.Client_plane) { + return; + } + + long var7 = 0L; + boolean var9 = true; + boolean var10 = false; + boolean var11 = false; + if (var1 == 0) { + var7 = class2.scene.getBoundaryObjectTag(var0, var2, var3); + } + + if (var1 == 1) { + var7 = class2.scene.getWallDecorationTag(var0, var2, var3); + } + + if (var1 == 2) { + var7 = class2.scene.getGameObjectTag(var0, var2, var3); + } + + if (var1 == 3) { + var7 = class2.scene.getFloorDecorationTag(var0, var2, var3); + } + + int var12; + if (var7 != 0L) { + var12 = class2.scene.getObjectFlags(var0, var2, var3, var7); + int var14 = ItemContainer.Entity_unpackID(var7); + int var15 = var12 & 31; + int var16 = var12 >> 6 & 3; + ObjectDefinition var13; + if (var1 == 0) { + class2.scene.removeBoundaryObject(var0, var2, var3); + var13 = Occluder.getObjectDefinition(var14); + if (var13.interactType != 0) { + Client.collisionMaps[var0].method3598(var2, var3, var15, var16, var13.boolean1); + } + } + + if (var1 == 1) { + class2.scene.removeWallDecoration(var0, var2, var3); + } + + if (var1 == 2) { + class2.scene.removeGameObject(var0, var2, var3); + var13 = Occluder.getObjectDefinition(var14); + if (var2 + var13.sizeX > 103 || var3 + var13.sizeX > 103 || var2 + var13.sizeY > 103 || var3 + var13.sizeY > 103) { + return; + } + + if (var13.interactType != 0) { + Client.collisionMaps[var0].setFlagOffNonSquare(var2, var3, var13.sizeX, var13.sizeY, var16, var13.boolean1); + } + } + + if (var1 == 3) { + class2.scene.removeFloorDecoration(var0, var2, var3); + var13 = Occluder.getObjectDefinition(var14); + if (var13.interactType == 1) { + Client.collisionMaps[var0].method3601(var2, var3); + } + } + } + + if (var4 >= 0) { + var12 = var0; + if (var0 < 3 && (Tiles.Tiles_renderFlags[1][var2][var3] & 2) == 2) { + var12 = var0 + 1; + } + + MenuAction.method2088(var0, var12, var2, var3, var4, var5, var6, class2.scene, Client.collisionMaps[var0]); + } + } + + } + + @ObfuscatedName("im") + @ObfuscatedSignature( + signature = "(B)V", + garbageValue = "0" + ) + @Export("Widget_runOnTargetLeave") + static void Widget_runOnTargetLeave() { + if (Client.isSpellSelected) { + Widget var0 = UserComparator3.getWidgetChild(WorldMapAreaData.selectedSpellWidget, Client.selectedSpellChildIndex); + if (var0 != null && var0.onTargetLeave != null) { + ScriptEvent var1 = new ScriptEvent(); + var1.widget = var0; + var1.args = var0.onTargetLeave; + WorldMapLabel.runScriptEvent(var1); + } + + Client.isSpellSelected = false; + ScriptEvent.invalidateWidget(var0); + } + } + + @ObfuscatedName("jg") + @ObfuscatedSignature( + signature = "(B)V", + garbageValue = "3" + ) + static final void method1756() { + PacketBufferNode var0 = ModelData0.getPacketBufferNode(ClientPacket.field2311, Client.packetWriter.isaacCipher); + Client.packetWriter.addNode(var0); + + for (InterfaceParent var1 = (InterfaceParent)Client.interfaceParents.first(); var1 != null; var1 = (InterfaceParent)Client.interfaceParents.next()) { + if (var1.type == 0 || var1.type == 3) { + class43.closeInterface(var1, true); + } + } + + if (Client.meslayerContinueWidget != null) { + ScriptEvent.invalidateWidget(Client.meslayerContinueWidget); + Client.meslayerContinueWidget = null; + } + + } } diff --git a/runescape-client/src/main/java/Animation.java b/runescape-client/src/main/java/Animation.java index e313d89071..c46c916f09 100644 --- a/runescape-client/src/main/java/Animation.java +++ b/runescape-client/src/main/java/Animation.java @@ -3,51 +3,51 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("dw") +@ObfuscatedName("dg") @Implements("Animation") public class Animation { - @ObfuscatedName("a") - static int[] field1609; - @ObfuscatedName("t") - static int[] field1611; - @ObfuscatedName("n") - static int[] field1618; - @ObfuscatedName("q") - static int[] field1610; - @ObfuscatedName("v") + @ObfuscatedName("u") + static int[] field1634; + @ObfuscatedName("f") + static int[] field1626; + @ObfuscatedName("b") + static int[] field1627; + @ObfuscatedName("g") + static int[] field1631; + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "Lee;" + signature = "Lec;" ) @Export("skeleton") Skeleton skeleton; - @ObfuscatedName("l") + @ObfuscatedName("p") @Export("transformCount") int transformCount; - @ObfuscatedName("c") + @ObfuscatedName("h") @Export("transformSkeletonLabels") int[] transformSkeletonLabels; - @ObfuscatedName("o") + @ObfuscatedName("y") @Export("transformXs") int[] transformXs; - @ObfuscatedName("i") + @ObfuscatedName("w") @Export("transformYs") int[] transformYs; - @ObfuscatedName("d") + @ObfuscatedName("i") @Export("transformZs") int[] transformZs; - @ObfuscatedName("m") + @ObfuscatedName("k") @Export("hasAlphaTransform") boolean hasAlphaTransform; static { - field1609 = new int[500]; - field1611 = new int[500]; - field1618 = new int[500]; - field1610 = new int[500]; + field1634 = new int[500]; + field1626 = new int[500]; + field1627 = new int[500]; + field1631 = new int[500]; } @ObfuscatedSignature( - signature = "([BLee;)V" + signature = "([BLec;)V" ) Animation(byte[] var1, Skeleton var2) { this.skeleton = null; @@ -69,38 +69,38 @@ public class Animation { if (this.skeleton.transformTypes[var8] != 0) { for (int var10 = var8 - 1; var10 > var6; --var10) { if (this.skeleton.transformTypes[var10] == 0) { - field1609[var7] = var10; - field1611[var7] = 0; - field1618[var7] = 0; - field1610[var7] = 0; + field1634[var7] = var10; + field1626[var7] = 0; + field1627[var7] = 0; + field1631[var7] = 0; ++var7; break; } } } - field1609[var7] = var8; + field1634[var7] = var8; short var11 = 0; if (this.skeleton.transformTypes[var8] == 3) { var11 = 128; } if ((var9 & 1) != 0) { - field1611[var7] = var4.readShortSmart(); + field1626[var7] = var4.readShortSmart(); } else { - field1611[var7] = var11; + field1626[var7] = var11; } if ((var9 & 2) != 0) { - field1618[var7] = var4.readShortSmart(); + field1627[var7] = var4.readShortSmart(); } else { - field1618[var7] = var11; + field1627[var7] = var11; } if ((var9 & 4) != 0) { - field1610[var7] = var4.readShortSmart(); + field1631[var7] = var4.readShortSmart(); } else { - field1610[var7] = var11; + field1631[var7] = var11; } var6 = var8; @@ -121,10 +121,10 @@ public class Animation { this.transformZs = new int[var7]; for (var8 = 0; var8 < var7; ++var8) { - this.transformSkeletonLabels[var8] = field1609[var8]; - this.transformXs[var8] = field1611[var8]; - this.transformYs[var8] = field1618[var8]; - this.transformZs[var8] = field1610[var8]; + this.transformSkeletonLabels[var8] = field1634[var8]; + this.transformXs[var8] = field1626[var8]; + this.transformYs[var8] = field1627[var8]; + this.transformZs[var8] = field1631[var8]; } } diff --git a/runescape-client/src/main/java/Archive.java b/runescape-client/src/main/java/Archive.java index 606e7f91ac..c7d0e702a5 100644 --- a/runescape-client/src/main/java/Archive.java +++ b/runescape-client/src/main/java/Archive.java @@ -8,51 +8,51 @@ import net.runelite.mapping.ObfuscatedSignature; @ObfuscatedName("ij") @Implements("Archive") public class Archive extends AbstractArchive { - @ObfuscatedName("ar") + @ObfuscatedName("am") @Export("Archive_crc") static CRC32 Archive_crc; - @ObfuscatedName("g") + @ObfuscatedName("v") @ObfuscatedSignature( signature = "Lke;" ) @Export("archiveDisk") ArchiveDisk archiveDisk; - @ObfuscatedName("w") + @ObfuscatedName("q") @ObfuscatedSignature( signature = "Lke;" ) @Export("masterDisk") ArchiveDisk masterDisk; - @ObfuscatedName("u") + @ObfuscatedName("l") @ObfuscatedGetter( - intValue = -697196869 + intValue = -485019115 ) @Export("index") int index; - @ObfuscatedName("y") - volatile boolean field3145; - @ObfuscatedName("aa") - boolean field3139; - @ObfuscatedName("aw") + @ObfuscatedName("j") + volatile boolean field3158; + @ObfuscatedName("af") + boolean field3163; + @ObfuscatedName("ad") @Export("validGroups") volatile boolean[] validGroups; - @ObfuscatedName("aq") + @ObfuscatedName("ai") @ObfuscatedGetter( - intValue = 1007467833 + intValue = -811032565 ) @Export("indexCrc") int indexCrc; - @ObfuscatedName("ad") + @ObfuscatedName("ag") @ObfuscatedGetter( - intValue = -722952975 + intValue = -714735647 ) @Export("indexVersion") int indexVersion; - @ObfuscatedName("ag") + @ObfuscatedName("ao") @ObfuscatedGetter( - intValue = 372476733 + intValue = -1499508755 ) - int field3148; + int field3168; static { Archive_crc = new CRC32(); @@ -63,170 +63,142 @@ public class Archive extends AbstractArchive { ) public Archive(ArchiveDisk var1, ArchiveDisk var2, int var3, boolean var4, boolean var5, boolean var6) { super(var4, var5); - this.field3145 = false; - this.field3139 = false; - this.field3148 = -1; + this.field3158 = false; + this.field3163 = false; + this.field3168 = -1; this.archiveDisk = var1; this.masterDisk = var2; this.index = var3; - this.field3139 = var6; - int var8 = this.index; - if (Calendar.NetCache_reference != null) { - Calendar.NetCache_reference.offset = var8 * 8 + 5; - int var9 = Calendar.NetCache_reference.readInt(); - int var10 = Calendar.NetCache_reference.readInt(); - this.loadIndex(var9, var10); - } else { - BuddyRankComparator.requestNetFile((Archive)null, 255, 255, 0, (byte)0, true); - NetCache.NetCache_archives[var8] = this; + this.field3163 = var6; + WorldMapIcon_0.method224(this, this.index); + } + + @ObfuscatedName("f") + @ObfuscatedSignature( + signature = "(II)V", + garbageValue = "-64779180" + ) + @Export("loadRegionFromGroup") + void loadRegionFromGroup(int var1) { + int var2 = this.index; + long var3 = (long)((var2 << 16) + var1); + NetFileRequest var5 = (NetFileRequest)NetCache.NetCache_pendingWrites.get(var3); + if (var5 != null) { + NetCache.NetCache_pendingWritesQueue.addLast(var5); } } - @ObfuscatedName("t") - @ObfuscatedSignature( - signature = "(IB)V", - garbageValue = "117" - ) - @Export("loadRegionFromGroup") - void loadRegionFromGroup(int var1) { - Tile.method3021(this.index, var1); - } - - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedSignature( signature = "(II)I", - garbageValue = "-778670663" + garbageValue = "-1387572162" ) @Export("groupLoadPercent") int groupLoadPercent(int var1) { if (super.groups[var1] != null) { return 100; + } else if (this.validGroups[var1]) { + return 100; } else { - return this.validGroups[var1] ? 100 : PcmPlayer.method2638(this.index, var1); + int var3 = this.index; + long var4 = (long)((var3 << 16) + var1); + int var2; + if (NetCache.NetCache_currentResponse != null && NetCache.NetCache_currentResponse.key == var4) { + var2 = class32.NetCache_responseArchiveBuffer.offset * 99 / (class32.NetCache_responseArchiveBuffer.array.length - NetCache.NetCache_currentResponse.padding) + 1; + } else { + var2 = 0; + } + + return var2; } } - @ObfuscatedName("h") + @ObfuscatedName("o") @ObfuscatedSignature( signature = "(II)V", - garbageValue = "664192835" + garbageValue = "130067407" ) @Export("loadGroup") void loadGroup(int var1) { if (this.archiveDisk != null && this.validGroups != null && this.validGroups[var1]) { - ArchiveDisk var2 = this.archiveDisk; - byte[] var4 = null; - synchronized(ArchiveDiskActionHandler.ArchiveDiskActionHandler_requestQueue) { - for (ArchiveDiskAction var6 = (ArchiveDiskAction)ArchiveDiskActionHandler.ArchiveDiskActionHandler_requestQueue.last(); var6 != null; var6 = (ArchiveDiskAction)ArchiveDiskActionHandler.ArchiveDiskActionHandler_requestQueue.previous()) { - if (var6.key == (long)var1 && var2 == var6.archiveDisk && var6.type == 0) { - var4 = var6.data; - break; - } - } - } - - if (var4 != null) { - this.load(var2, var1, var4, true); - } else { - byte[] var5 = var2.read(var1); - this.load(var2, var1, var5, true); - } + PlayerType.method4210(var1, this.archiveDisk, this); } else { - BuddyRankComparator.requestNetFile(this, this.index, var1, super.groupCrcs[var1], (byte)2, true); + ClientPreferences.requestNetFile(this, this.index, var1, super.groupCrcs[var1], (byte)2, true); } } - @ObfuscatedName("dm") + @ObfuscatedName("dw") @ObfuscatedSignature( - signature = "(I)Z", - garbageValue = "1944128769" + signature = "(B)Z", + garbageValue = "0" ) - public boolean method4409() { - return this.field3145; + public boolean method4345() { + return this.field3158; } - @ObfuscatedName("di") + @ObfuscatedName("de") @ObfuscatedSignature( - signature = "(I)I", - garbageValue = "1888934237" + signature = "(B)I", + garbageValue = "-77" ) @Export("percentage") public int percentage() { - if (this.field3145) { + if (this.field3158) { return 100; } else if (super.groups != null) { return 99; } else { - int var1 = PcmPlayer.method2638(255, this.index); - if (var1 >= 100) { - var1 = 99; + int var2 = this.index; + long var3 = (long)(var2 + 16711680); + int var1; + if (NetCache.NetCache_currentResponse != null && NetCache.NetCache_currentResponse.key == var3) { + var1 = class32.NetCache_responseArchiveBuffer.offset * 99 / (class32.NetCache_responseArchiveBuffer.array.length - NetCache.NetCache_currentResponse.padding) + 1; + } else { + var1 = 0; } - return var1; + int var5 = var1; + if (var1 >= 100) { + var5 = 99; + } + + return var5; } } - @ObfuscatedName("dn") + @ObfuscatedName("dx") @ObfuscatedSignature( signature = "(III)V", - garbageValue = "1627267757" + garbageValue = "-1360359241" ) @Export("loadIndex") - public void loadIndex(int var1, int var2) { + void loadIndex(int var1, int var2) { this.indexCrc = var1; this.indexVersion = var2; if (this.masterDisk != null) { - int var3 = this.index; - ArchiveDisk var4 = this.masterDisk; - byte[] var6 = null; - synchronized(ArchiveDiskActionHandler.ArchiveDiskActionHandler_requestQueue) { - for (ArchiveDiskAction var8 = (ArchiveDiskAction)ArchiveDiskActionHandler.ArchiveDiskActionHandler_requestQueue.last(); var8 != null; var8 = (ArchiveDiskAction)ArchiveDiskActionHandler.ArchiveDiskActionHandler_requestQueue.previous()) { - if (var8.key == (long)var3 && var4 == var8.archiveDisk && var8.type == 0) { - var6 = var8.data; - break; - } - } - } - - if (var6 != null) { - this.load(var4, var3, var6, true); - } else { - byte[] var7 = var4.read(var3); - this.load(var4, var3, var7, true); - } + PlayerType.method4210(this.index, this.masterDisk, this); } else { - BuddyRankComparator.requestNetFile(this, 255, this.index, this.indexCrc, (byte)0, true); + ClientPreferences.requestNetFile(this, 255, this.index, this.indexCrc, (byte)0, true); } } - @ObfuscatedName("dr") + @ObfuscatedName("dc") @ObfuscatedSignature( - signature = "(I[BZZB)V", - garbageValue = "4" + signature = "(I[BZZI)V", + garbageValue = "1341522635" ) @Export("write") - public void write(int var1, byte[] var2, boolean var3, boolean var4) { + void write(int var1, byte[] var2, boolean var3, boolean var4) { if (var3) { - if (this.field3145) { + if (this.field3158) { throw new RuntimeException(); } if (this.masterDisk != null) { - int var5 = this.index; - ArchiveDisk var6 = this.masterDisk; - ArchiveDiskAction var7 = new ArchiveDiskAction(); - var7.type = 0; - var7.key = (long)var5; - var7.data = var2; - var7.archiveDisk = var6; - synchronized(ArchiveDiskActionHandler.ArchiveDiskActionHandler_requestQueue) { - ArchiveDiskActionHandler.ArchiveDiskActionHandler_requestQueue.addFirst(var7); - } - - ItemContainer.method1250(); + TileItem.method2144(this.index, var2, this.masterDisk); } this.decodeIndex(var2); @@ -235,42 +207,44 @@ public class Archive extends AbstractArchive { var2[var2.length - 2] = (byte)(super.groupVersions[var1] >> 8); var2[var2.length - 1] = (byte)super.groupVersions[var1]; if (this.archiveDisk != null) { - ArchiveDisk var11 = this.archiveDisk; - ArchiveDiskAction var14 = new ArchiveDiskAction(); - var14.type = 0; - var14.key = (long)var1; - var14.data = var2; - var14.archiveDisk = var11; - synchronized(ArchiveDiskActionHandler.ArchiveDiskActionHandler_requestQueue) { - ArchiveDiskActionHandler.ArchiveDiskActionHandler_requestQueue.addFirst(var14); - } - - ItemContainer.method1250(); + TileItem.method2144(var1, var2, this.archiveDisk); this.validGroups[var1] = true; } if (var4) { - super.groups[var1] = MusicPatchPcmStream.method4064(var2, false); + Object[] var5 = super.groups; + Object var7; + if (var2 == null) { + var7 = null; + } else if (var2.length > 136) { + DirectByteArrayCopier var8 = new DirectByteArrayCopier(); + var8.set(var2); + var7 = var8; + } else { + var7 = var2; + } + + var5[var1] = var7; } } } - @ObfuscatedName("do") + @ObfuscatedName("dk") @ObfuscatedSignature( - signature = "(Lke;I[BZI)V", - garbageValue = "-1897627904" + signature = "(Lke;I[BZB)V", + garbageValue = "45" ) @Export("load") - public void load(ArchiveDisk var1, int var2, byte[] var3, boolean var4) { + void load(ArchiveDisk var1, int var2, byte[] var3, boolean var4) { int var5; if (var1 == this.masterDisk) { - if (this.field3145) { + if (this.field3158) { throw new RuntimeException(); } if (var3 == null) { - BuddyRankComparator.requestNetFile(this, 255, this.index, this.indexCrc, (byte)0, true); + ClientPreferences.requestNetFile(this, 255, this.index, this.indexCrc, (byte)0, true); return; } @@ -278,37 +252,37 @@ public class Archive extends AbstractArchive { Archive_crc.update(var3, 0, var3.length); var5 = (int)Archive_crc.getValue(); if (var5 != this.indexCrc) { - BuddyRankComparator.requestNetFile(this, 255, this.index, this.indexCrc, (byte)0, true); + ClientPreferences.requestNetFile(this, 255, this.index, this.indexCrc, (byte)0, true); return; } - Buffer var9 = new Buffer(ArchiveLoader.decompressBytes(var3)); - int var7 = var9.readUnsignedByte(); - if (var7 != 5 && var7 != 6) { - throw new RuntimeException(var7 + "," + this.index + "," + var2); + Buffer var11 = new Buffer(class226.decompressBytes(var3)); + int var12 = var11.readUnsignedByte(); + if (var12 != 5 && var12 != 6) { + throw new RuntimeException(var12 + "," + this.index + "," + var2); } int var8 = 0; - if (var7 >= 6) { - var8 = var9.readInt(); + if (var12 >= 6) { + var8 = var11.readInt(); } if (var8 != this.indexVersion) { - BuddyRankComparator.requestNetFile(this, 255, this.index, this.indexCrc, (byte)0, true); + ClientPreferences.requestNetFile(this, 255, this.index, this.indexCrc, (byte)0, true); return; } this.decodeIndex(var3); this.loadAllLocal(); } else { - if (!var4 && var2 == this.field3148) { - this.field3145 = true; + if (!var4 && var2 == this.field3168) { + this.field3158 = true; } if (var3 == null || var3.length <= 2) { this.validGroups[var2] = false; - if (this.field3139 || var4) { - BuddyRankComparator.requestNetFile(this, this.index, var2, super.groupCrcs[var2], (byte)2, var4); + if (this.field3163 || var4) { + ClientPreferences.requestNetFile(this, this.index, var2, super.groupCrcs[var2], (byte)2, var4); } return; @@ -320,8 +294,8 @@ public class Archive extends AbstractArchive { int var6 = ((var3[var3.length - 2] & 255) << 8) + (var3[var3.length - 1] & 255); if (var5 != super.groupCrcs[var2] || var6 != super.groupVersions[var2]) { this.validGroups[var2] = false; - if (this.field3139 || var4) { - BuddyRankComparator.requestNetFile(this, this.index, var2, super.groupCrcs[var2], (byte)2, var4); + if (this.field3163 || var4) { + ClientPreferences.requestNetFile(this, this.index, var2, super.groupCrcs[var2], (byte)2, var4); } return; @@ -329,16 +303,28 @@ public class Archive extends AbstractArchive { this.validGroups[var2] = true; if (var4) { - super.groups[var2] = MusicPatchPcmStream.method4064(var3, false); + Object[] var7 = super.groups; + Object var9; + if (var3 == null) { + var9 = null; + } else if (var3.length > 136) { + DirectByteArrayCopier var10 = new DirectByteArrayCopier(); + var10.set(var3); + var9 = var10; + } else { + var9 = var3; + } + + var7[var2] = var9; } } } - @ObfuscatedName("ds") + @ObfuscatedName("dj") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "0" + signature = "(I)V", + garbageValue = "-1169710133" ) @Export("loadAllLocal") void loadAllLocal() { @@ -350,56 +336,46 @@ public class Archive extends AbstractArchive { } if (this.archiveDisk == null) { - this.field3145 = true; + this.field3158 = true; } else { - this.field3148 = -1; + this.field3168 = -1; for (var1 = 0; var1 < this.validGroups.length; ++var1) { if (super.fileCounts[var1] > 0) { - ArchiveDisk var2 = this.archiveDisk; - ArchiveDiskAction var4 = new ArchiveDiskAction(); - var4.type = 1; - var4.key = (long)var1; - var4.archiveDisk = var2; - var4.archive = this; - synchronized(ArchiveDiskActionHandler.ArchiveDiskActionHandler_requestQueue) { - ArchiveDiskActionHandler.ArchiveDiskActionHandler_requestQueue.addFirst(var4); - } - - ItemContainer.method1250(); - this.field3148 = var1; + class40.method780(var1, this.archiveDisk, this); + this.field3168 = var1; } } - if (this.field3148 == -1) { - this.field3145 = true; + if (this.field3168 == -1) { + this.field3158 = true; } } } - @ObfuscatedName("dz") + @ObfuscatedName("dp") @ObfuscatedSignature( signature = "(II)Z", - garbageValue = "139739095" + garbageValue = "2065580050" ) - public boolean method4417(int var1) { + public boolean method4354(int var1) { return this.validGroups[var1]; } - @ObfuscatedName("dj") + @ObfuscatedName("di") @ObfuscatedSignature( signature = "(II)Z", - garbageValue = "308980057" + garbageValue = "581589057" ) - public boolean method4436(int var1) { + public boolean method4355(int var1) { return this.getGroupFileIds(var1) != null; } - @ObfuscatedName("df") + @ObfuscatedName("dn") @ObfuscatedSignature( - signature = "(B)I", - garbageValue = "52" + signature = "(I)I", + garbageValue = "1792861334" ) @Export("loadPercent") public int loadPercent() { diff --git a/runescape-client/src/main/java/ArchiveDisk.java b/runescape-client/src/main/java/ArchiveDisk.java index 5b11c78ddd..119d80c4c1 100644 --- a/runescape-client/src/main/java/ArchiveDisk.java +++ b/runescape-client/src/main/java/ArchiveDisk.java @@ -9,30 +9,30 @@ import net.runelite.mapping.ObfuscatedSignature; @ObfuscatedName("ke") @Implements("ArchiveDisk") public final class ArchiveDisk { - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("ArchiveDisk_buffer") static byte[] ArchiveDisk_buffer; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lmz;" + signature = "Lmb;" ) @Export("datFile") BufferedFile datFile; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Lmz;" + signature = "Lmb;" ) @Export("idxFile") BufferedFile idxFile; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = 161703877 + intValue = 417377451 ) @Export("archive") int archive; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = -1904076189 + intValue = 1640009955 ) @Export("maxEntrySize") int maxEntrySize; @@ -42,7 +42,7 @@ public final class ArchiveDisk { } @ObfuscatedSignature( - signature = "(ILmz;Lmz;I)V" + signature = "(ILmb;Lmb;I)V" ) public ArchiveDisk(int var1, BufferedFile var2, BufferedFile var3, int var4) { this.datFile = null; @@ -54,10 +54,10 @@ public final class ArchiveDisk { this.maxEntrySize = var4; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "(II)[B", - garbageValue = "909989456" + garbageValue = "-2146892586" ) @Export("read") public byte[] read(int var1) { @@ -81,15 +81,14 @@ public final class ArchiveDisk { } else { byte[] var5 = new byte[var3]; int var6 = 0; - int var7 = 0; - while (var6 < var3) { + for (int var7 = 0; var6 < var3; ++var7) { if (var4 == 0) { var10000 = null; return (byte[])var10000; } - this.datFile.seek(520L * (long)var4); + this.datFile.seek((long)var4 * 520L); int var8 = var3 - var6; int var9; int var10; @@ -102,7 +101,7 @@ public final class ArchiveDisk { } var13 = 10; - this.datFile.read(ArchiveDisk_buffer, 0, var13 + var8); + this.datFile.read(ArchiveDisk_buffer, 0, var8 + var13); var9 = ((ArchiveDisk_buffer[1] & 255) << 16) + ((ArchiveDisk_buffer[0] & 255) << 24) + (ArchiveDisk_buffer[3] & 255) + ((ArchiveDisk_buffer[2] & 255) << 8); var10 = (ArchiveDisk_buffer[5] & 255) + ((ArchiveDisk_buffer[4] & 255) << 8); var11 = (ArchiveDisk_buffer[8] & 255) + ((ArchiveDisk_buffer[7] & 255) << 8) + ((ArchiveDisk_buffer[6] & 255) << 16); @@ -120,25 +119,23 @@ public final class ArchiveDisk { var12 = ArchiveDisk_buffer[7] & 255; } - if (var9 == var1 && var7 == var10 && var12 == this.archive) { - if (var11 >= 0 && (long)var11 <= this.datFile.length() / 520L) { - int var14 = var13 + var8; - - for (int var15 = var13; var15 < var14; ++var15) { - var5[var6++] = ArchiveDisk_buffer[var15]; - } - - var4 = var11; - ++var7; - continue; - } - + if (var9 != var1 || var10 != var7 || var12 != this.archive) { var10000 = null; return (byte[])var10000; } - var10000 = null; - return (byte[])var10000; + if (var11 < 0 || (long)var11 > this.datFile.length() / 520L) { + var10000 = null; + return (byte[])var10000; + } + + int var14 = var8 + var13; + + for (int var15 = var13; var15 < var14; ++var15) { + var5[var6++] = ArchiveDisk_buffer[var15]; + } + + var4 = var11; } byte[] var20 = var5; @@ -151,10 +148,10 @@ public final class ArchiveDisk { } } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( signature = "(I[BII)Z", - garbageValue = "434454104" + garbageValue = "-847322953" ) @Export("write") public boolean write(int var1, byte[] var2, int var3) { @@ -172,10 +169,10 @@ public final class ArchiveDisk { } } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(I[BIZI)Z", - garbageValue = "-498922457" + signature = "(I[BIZB)Z", + garbageValue = "127" ) @Export("write0") boolean write0(int var1, byte[] var2, int var3, boolean var4) { @@ -216,7 +213,7 @@ public final class ArchiveDisk { while (true) { if (var7 < var3) { - label170: { + label172: { int var9 = 0; int var10; if (var4) { @@ -227,7 +224,7 @@ public final class ArchiveDisk { try { this.datFile.read(ArchiveDisk_buffer, 0, 10); } catch (EOFException var17) { - break label170; + break label172; } var10 = ((ArchiveDisk_buffer[1] & 255) << 16) + ((ArchiveDisk_buffer[0] & 255) << 24) + (ArchiveDisk_buffer[3] & 255) + ((ArchiveDisk_buffer[2] & 255) << 8); @@ -238,7 +235,7 @@ public final class ArchiveDisk { try { this.datFile.read(ArchiveDisk_buffer, 0, 8); } catch (EOFException var16) { - break label170; + break label172; } var10 = (ArchiveDisk_buffer[1] & 255) + ((ArchiveDisk_buffer[0] & 255) << 8); @@ -285,7 +282,7 @@ public final class ArchiveDisk { ArchiveDisk_buffer[7] = (byte)(var9 >> 8); ArchiveDisk_buffer[8] = (byte)var9; ArchiveDisk_buffer[9] = (byte)this.archive; - this.datFile.seek((long)var6 * 520L); + this.datFile.seek(520L * (long)var6); this.datFile.write(ArchiveDisk_buffer, 0, 10); var10 = var3 - var7; if (var10 > 510) { @@ -307,7 +304,7 @@ public final class ArchiveDisk { ArchiveDisk_buffer[5] = (byte)(var9 >> 8); ArchiveDisk_buffer[6] = (byte)var9; ArchiveDisk_buffer[7] = (byte)this.archive; - this.datFile.seek((long)var6 * 520L); + this.datFile.seek(520L * (long)var6); this.datFile.write(ArchiveDisk_buffer, 0, 8); var10 = var3 - var7; if (var10 > 512) { diff --git a/runescape-client/src/main/java/ArchiveDiskAction.java b/runescape-client/src/main/java/ArchiveDiskAction.java index 82fedcc9e1..36fa6a6825 100644 --- a/runescape-client/src/main/java/ArchiveDiskAction.java +++ b/runescape-client/src/main/java/ArchiveDiskAction.java @@ -3,391 +3,58 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("hs") +@ObfuscatedName("ho") @Implements("ArchiveDiskAction") public class ArchiveDiskAction extends Node { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedGetter( - intValue = -114474261 + intValue = 168002015 ) @Export("type") int type; - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("data") - public byte[] data; - @ObfuscatedName("n") + byte[] data; + @ObfuscatedName("b") @ObfuscatedSignature( signature = "Lke;" ) @Export("archiveDisk") - public ArchiveDisk archiveDisk; - @ObfuscatedName("q") + ArchiveDisk archiveDisk; + @ObfuscatedName("g") @ObfuscatedSignature( signature = "Lij;" ) @Export("archive") - public Archive archive; + Archive archive; ArchiveDiskAction() { } - @ObfuscatedName("a") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Lgw;B)I", - garbageValue = "2" + signature = "([BILjava/lang/CharSequence;I)I", + garbageValue = "-1806066306" ) - @Export("compareStrings") - public static int compareStrings(CharSequence var0, CharSequence var1, Language var2) { - int var3 = var0.length(); - int var4 = var1.length(); - int var5 = 0; - int var6 = 0; - char var7 = 0; - char var8 = 0; + public static int method4229(byte[] var0, int var1, CharSequence var2) { + int var3 = var2.length(); + int var4 = var1; - while (var5 - var7 < var3 || var6 - var8 < var4) { - if (var5 - var7 >= var3) { - return -1; - } - - if (var6 - var8 >= var4) { - return 1; - } - - char var9; - if (var7 != 0) { - var9 = var7; - boolean var14 = false; + for (int var5 = 0; var5 < var3; ++var5) { + char var6 = var2.charAt(var5); + if (var6 <= 127) { + var0[var4++] = (byte)var6; + } else if (var6 <= 2047) { + var0[var4++] = (byte)(192 | var6 >> 6); + var0[var4++] = (byte)(128 | var6 & '?'); } else { - var9 = var0.charAt(var5++); - } - - char var10; - if (var8 != 0) { - var10 = var8; - boolean var15 = false; - } else { - var10 = var1.charAt(var6++); - } - - var7 = WorldMapSectionType.method296(var9); - var8 = WorldMapSectionType.method296(var10); - var9 = class80.standardizeChar(var9, var2); - var10 = class80.standardizeChar(var10, var2); - if (var10 != var9 && Character.toUpperCase(var9) != Character.toUpperCase(var10)) { - var9 = Character.toLowerCase(var9); - var10 = Character.toLowerCase(var10); - if (var10 != var9) { - return ScriptEvent.lowercaseChar(var9, var2) - ScriptEvent.lowercaseChar(var10, var2); - } + var0[var4++] = (byte)(224 | var6 >> '\f'); + var0[var4++] = (byte)(128 | var6 >> 6 & 63); + var0[var4++] = (byte)(128 | var6 & '?'); } } - int var16 = Math.min(var3, var4); - - char var12; - int var17; - for (var17 = 0; var17 < var16; ++var17) { - if (var2 == Language.Language_FR) { - var5 = var3 - 1 - var17; - var6 = var4 - 1 - var17; - } else { - var6 = var17; - var5 = var17; - } - - char var11 = var0.charAt(var5); - var12 = var1.charAt(var6); - if (var11 != var12 && Character.toUpperCase(var11) != Character.toUpperCase(var12)) { - var11 = Character.toLowerCase(var11); - var12 = Character.toLowerCase(var12); - if (var11 != var12) { - return ScriptEvent.lowercaseChar(var11, var2) - ScriptEvent.lowercaseChar(var12, var2); - } - } - } - - var17 = var3 - var4; - if (var17 != 0) { - return var17; - } else { - for (int var18 = 0; var18 < var16; ++var18) { - var12 = var0.charAt(var18); - char var13 = var1.charAt(var18); - if (var12 != var13) { - return ScriptEvent.lowercaseChar(var12, var2) - ScriptEvent.lowercaseChar(var13, var2); - } - } - - return 0; - } - } - - @ObfuscatedName("ay") - @ObfuscatedSignature( - signature = "(ILcj;ZB)I", - garbageValue = "1" - ) - static int method4296(int var0, Script var1, boolean var2) { - if (var0 == ScriptOpcodes.WORLDLIST_FETCH) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = class43.loadWorlds() ? 1 : 0; - return 1; - } else { - World var3; - if (var0 == ScriptOpcodes.WORLDLIST_START) { - var3 = WorldMapData_0.worldListStart(); - if (var3 != null) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.id; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.properties; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var3.activity; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.location; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.population; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var3.host; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = -1; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = ""; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = ""; - } - - return 1; - } else if (var0 == ScriptOpcodes.WORLDLIST_NEXT) { - var3 = class1.getNextWorldListWorld(); - if (var3 != null) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.id; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.properties; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var3.activity; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.location; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.population; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var3.host; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = -1; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = ""; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = ""; - } - - return 1; - } else { - World var4; - int var5; - int var7; - if (var0 == ScriptOpcodes.WORLDLIST_SPECIFIC) { - var7 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - var4 = null; - - for (var5 = 0; var5 < World.World_count; ++var5) { - if (var7 == Username.World_worlds[var5].id) { - var4 = Username.World_worlds[var5]; - break; - } - } - - if (var4 != null) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var4.id; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var4.properties; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var4.activity; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var4.location; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var4.population; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var4.host; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = -1; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = ""; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = ""; - } - - return 1; - } else if (var0 == ScriptOpcodes.WORLDLIST_SORT) { - Interpreter.Interpreter_intStackSize -= 4; - var7 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - boolean var10 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1] == 1; - var5 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 2]; - boolean var6 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 3] == 1; - class96.sortWorldList(var7, var10, var5, var6); - return 1; - } else if (var0 != ScriptOpcodes.GETWORLDINFO) { - if (var0 == ScriptOpcodes.SETFOLLOWEROPSLOWPRIORITY) { - Client.followerOpsLowPriority = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - return 1; - } else { - int var8; - ParamDefinition var9; - if (var0 == ScriptOpcodes.NC_PARAM) { - Interpreter.Interpreter_intStackSize -= 2; - var7 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var8 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - var9 = class162.getParamDefinition(var8); - if (var9.isString()) { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = SecureRandomCallable.getNpcDefinition(var7).getStringParam(var8, var9.defaultStr); - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = SecureRandomCallable.getNpcDefinition(var7).getIntParam(var8, var9.defaultInt); - } - - return 1; - } else if (var0 == ScriptOpcodes.LC_PARAM) { - Interpreter.Interpreter_intStackSize -= 2; - var7 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var8 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - var9 = class162.getParamDefinition(var8); - if (var9.isString()) { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = WorldMapDecorationType.getObjectDefinition(var7).getStringParam(var8, var9.defaultStr); - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = WorldMapDecorationType.getObjectDefinition(var7).getIntParam(var8, var9.defaultInt); - } - - return 1; - } else if (var0 == ScriptOpcodes.OC_PARAM) { - Interpreter.Interpreter_intStackSize -= 2; - var7 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var8 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - var9 = class162.getParamDefinition(var8); - if (var9.isString()) { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = class222.ItemDefinition_get(var7).getStringParam(var8, var9.defaultStr); - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = class222.ItemDefinition_get(var7).getIntParam(var8, var9.defaultInt); - } - - return 1; - } else if (var0 == ScriptOpcodes.STRUCT_PARAM) { - Interpreter.Interpreter_intStackSize -= 2; - var7 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var8 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - var9 = class162.getParamDefinition(var8); - if (var9.isString()) { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = GrandExchangeOfferOwnWorldComparator.StructDefinition_getStructDefinition(var7).getStringParam(var8, var9.defaultStr); - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = GrandExchangeOfferOwnWorldComparator.StructDefinition_getStructDefinition(var7).getIntParam(var8, var9.defaultInt); - } - - return 1; - } else if (var0 == ScriptOpcodes.ON_MOBILE) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = Client.onMobile ? 1 : 0; - return 1; - } else if (var0 == ScriptOpcodes.CLIENTTYPE) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = Client.clientType & 3; - return 1; - } else if (var0 == 6520) { - return 1; - } else if (var0 == ScriptOpcodes.MOBILE_KEYBOARDHIDE) { - return 1; - } else if (var0 == 6522) { - --WorldMapDecoration.Interpreter_stringStackSize; - --Interpreter.Interpreter_intStackSize; - return 1; - } else if (var0 == 6523) { - --WorldMapDecoration.Interpreter_stringStackSize; - --Interpreter.Interpreter_intStackSize; - return 1; - } else if (var0 == ScriptOpcodes.BATTERYLEVEL) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = -1; - return 1; - } else if (var0 == ScriptOpcodes.BATTERYCHARGING) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 1; - return 1; - } else if (var0 == ScriptOpcodes.WIFIAVAILABLE) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 1; - return 1; - } else { - return 2; - } - } - } else { - var7 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - if (var7 >= 0 && var7 < World.World_count) { - var4 = Username.World_worlds[var7]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var4.id; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var4.properties; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var4.activity; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var4.location; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var4.population; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var4.host; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = -1; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = ""; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = ""; - } - - return 1; - } - } - } - } - - @ObfuscatedName("ix") - @ObfuscatedSignature( - signature = "(Ljava/lang/String;Ljava/lang/String;IIIIZI)V", - garbageValue = "-128903403" - ) - @Export("insertMenuItem") - static final void insertMenuItem(String var0, String var1, int var2, int var3, int var4, int var5, boolean var6) { - if (!Client.isMenuOpen) { - if (Client.menuOptionsCount < 500) { - Client.menuActions[Client.menuOptionsCount] = var0; - Client.menuTargets[Client.menuOptionsCount] = var1; - Client.menuOpcodes[Client.menuOptionsCount] = var2; - Client.menuIdentifiers[Client.menuOptionsCount] = var3; - Client.menuArguments1[Client.menuOptionsCount] = var4; - Client.menuArguments2[Client.menuOptionsCount] = var5; - Client.menuShiftClick[Client.menuOptionsCount] = var6; - ++Client.menuOptionsCount; - } - - } - } - - @ObfuscatedName("kf") - @ObfuscatedSignature( - signature = "(Lhi;I)V", - garbageValue = "774063316" - ) - static final void method4297(Widget var0) { - int var1 = var0.contentType; - if (var1 == 324) { - if (Client.field818 == -1) { - Client.field818 = var0.spriteId2; - Client.field896 = var0.spriteId; - } - - if (Client.playerAppearance.isFemale) { - var0.spriteId2 = Client.field818; - } else { - var0.spriteId2 = Client.field896; - } - - } else if (var1 == 325) { - if (Client.field818 == -1) { - Client.field818 = var0.spriteId2; - Client.field896 = var0.spriteId; - } - - if (Client.playerAppearance.isFemale) { - var0.spriteId2 = Client.field896; - } else { - var0.spriteId2 = Client.field818; - } - - } else if (var1 == 327) { - var0.modelAngleX = 150; - var0.modelAngleY = (int)(Math.sin((double)Client.cycle / 40.0D) * 256.0D) & 2047; - var0.modelType = 5; - var0.modelId = 0; - } else if (var1 == 328) { - var0.modelAngleX = 150; - var0.modelAngleY = (int)(Math.sin((double)Client.cycle / 40.0D) * 256.0D) & 2047; - var0.modelType = 5; - var0.modelId = 1; - } + return var4 - var1; } } diff --git a/runescape-client/src/main/java/ArchiveDiskActionHandler.java b/runescape-client/src/main/java/ArchiveDiskActionHandler.java index f64245e11c..b8238bfa09 100644 --- a/runescape-client/src/main/java/ArchiveDiskActionHandler.java +++ b/runescape-client/src/main/java/ArchiveDiskActionHandler.java @@ -4,53 +4,37 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ig") +@ObfuscatedName("ic") @Implements("ArchiveDiskActionHandler") public class ArchiveDiskActionHandler implements Runnable { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Ljb;" + signature = "Ljd;" ) @Export("ArchiveDiskActionHandler_requestQueue") - public static NodeDeque ArchiveDiskActionHandler_requestQueue; - @ObfuscatedName("n") + static NodeDeque ArchiveDiskActionHandler_requestQueue; + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Ljb;" + signature = "Ljd;" ) @Export("ArchiveDiskActionHandler_responseQueue") - public static NodeDeque ArchiveDiskActionHandler_responseQueue; - @ObfuscatedName("q") + static NodeDeque ArchiveDiskActionHandler_responseQueue; + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = -2025054069 + intValue = 1217750145 ) - static int field3132; - @ObfuscatedName("v") + public static int field3155; + @ObfuscatedName("g") @Export("ArchiveDiskActionHandler_lock") - static Object ArchiveDiskActionHandler_lock; - @ObfuscatedName("l") + public static Object ArchiveDiskActionHandler_lock; + @ObfuscatedName("z") @Export("ArchiveDiskActionHandler_thread") static Thread ArchiveDiskActionHandler_thread; - @ObfuscatedName("c") - @ObfuscatedGetter( - intValue = 1867272823 - ) - static int field3133; - @ObfuscatedName("dr") - @ObfuscatedGetter( - longValue = -4581696908763214333L - ) - static long field3130; - @ObfuscatedName("fk") - @ObfuscatedSignature( - signature = "Lks;" - ) - @Export("fontPlain12") - static Font fontPlain12; static { ArchiveDiskActionHandler_requestQueue = new NodeDeque(); ArchiveDiskActionHandler_responseQueue = new NodeDeque(); - field3132 = 0; + field3155 = 0; ArchiveDiskActionHandler_lock = new Object(); } @@ -79,29 +63,162 @@ public class ArchiveDiskActionHandler implements Runnable { } synchronized(ArchiveDiskActionHandler_lock) { - if (field3132 <= 1) { - field3132 = 0; + if (field3155 <= 1) { + field3155 = 0; ArchiveDiskActionHandler_lock.notifyAll(); return; } - field3132 = 600; + field3155 = 600; } } else { - ClanChat.method5367(100L); + long var8 = 99L; + + try { + Thread.sleep(var8); + } catch (InterruptedException var15) { + } + + try { + Thread.sleep(1L); + } catch (InterruptedException var14) { + } + synchronized(ArchiveDiskActionHandler_lock) { - if (field3132 <= 1) { - field3132 = 0; + if (field3155 <= 1) { + field3155 = 0; ArchiveDiskActionHandler_lock.notifyAll(); return; } - --field3132; + --field3155; } } } - } catch (Exception var13) { - User.RunException_sendStackTrace((String)null, var13); + } catch (Exception var17) { + Calendar.RunException_sendStackTrace((String)null, var17); + } + } + + @ObfuscatedName("u") + @ObfuscatedSignature( + signature = "(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Lgc;I)I", + garbageValue = "-1277174237" + ) + @Export("compareStrings") + public static int compareStrings(CharSequence var0, CharSequence var1, Language var2) { + int var3 = var0.length(); + int var4 = var1.length(); + int var5 = 0; + int var6 = 0; + byte var7 = 0; + byte var8 = 0; + + while (var5 - var7 < var3 || var6 - var8 < var4) { + if (var5 - var7 >= var3) { + return -1; + } + + if (var6 - var8 >= var4) { + return 1; + } + + char var9; + if (var7 != 0) { + var9 = (char)var7; + boolean var14 = false; + } else { + var9 = var0.charAt(var5++); + } + + char var10; + if (var8 != 0) { + var10 = (char)var8; + boolean var15 = false; + } else { + var10 = var1.charAt(var6++); + } + + byte var11; + if (var9 == 198) { + var11 = 69; + } else if (var9 == 230) { + var11 = 101; + } else if (var9 == 223) { + var11 = 115; + } else if (var9 == 338) { + var11 = 69; + } else if (var9 == 339) { + var11 = 101; + } else { + var11 = 0; + } + + var7 = var11; + byte var12; + if (var10 == 198) { + var12 = 69; + } else if (var10 == 230) { + var12 = 101; + } else if (var10 == 223) { + var12 = 115; + } else if (var10 == 338) { + var12 = 69; + } else if (var10 == 339) { + var12 = 101; + } else { + var12 = 0; + } + + var8 = var12; + var9 = PacketWriter.standardizeChar(var9, var2); + var10 = PacketWriter.standardizeChar(var10, var2); + if (var10 != var9 && Character.toUpperCase(var9) != Character.toUpperCase(var10)) { + var9 = Character.toLowerCase(var9); + var10 = Character.toLowerCase(var10); + if (var9 != var10) { + return StudioGame.lowercaseChar(var9, var2) - StudioGame.lowercaseChar(var10, var2); + } + } + } + + int var16 = Math.min(var3, var4); + + int var17; + char var20; + for (var17 = 0; var17 < var16; ++var17) { + if (var2 == Language.Language_FR) { + var5 = var3 - 1 - var17; + var6 = var4 - 1 - var17; + } else { + var6 = var17; + var5 = var17; + } + + char var18 = var0.charAt(var5); + var20 = var1.charAt(var6); + if (var18 != var20 && Character.toUpperCase(var18) != Character.toUpperCase(var20)) { + var18 = Character.toLowerCase(var18); + var20 = Character.toLowerCase(var20); + if (var20 != var18) { + return StudioGame.lowercaseChar(var18, var2) - StudioGame.lowercaseChar(var20, var2); + } + } + } + + var17 = var3 - var4; + if (var17 != 0) { + return var17; + } else { + for (int var19 = 0; var19 < var16; ++var19) { + var20 = var0.charAt(var19); + char var13 = var1.charAt(var19); + if (var20 != var13) { + return StudioGame.lowercaseChar(var20, var2) - StudioGame.lowercaseChar(var13, var2); + } + } + + return 0; } } } diff --git a/runescape-client/src/main/java/ArchiveLoader.java b/runescape-client/src/main/java/ArchiveLoader.java index 16c5340e59..e4480b978c 100644 --- a/runescape-client/src/main/java/ArchiveLoader.java +++ b/runescape-client/src/main/java/ArchiveLoader.java @@ -3,38 +3,30 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("bh") +@ObfuscatedName("bj") @Implements("ArchiveLoader") public class ArchiveLoader { - @ObfuscatedName("c") - @ObfuscatedGetter( - intValue = 1109035575 - ) - @Export("gameCyclesToDo") - static int gameCyclesToDo; - @ObfuscatedName("x") - @ObfuscatedSignature( - signature = "[Lmz;" - ) - @Export("JagexCache_idxFiles") - public static BufferedFile[] JagexCache_idxFiles; - @ObfuscatedName("t") + @ObfuscatedName("y") + public static short[][] field533; + @ObfuscatedName("k") + @Export("musicTrackBoolean") + public static boolean musicTrackBoolean; + @ObfuscatedName("f") @ObfuscatedSignature( signature = "Lij;" ) @Export("archive") final Archive archive; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = -1458094845 + intValue = -1292831283 ) @Export("groupCount") final int groupCount; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = 1936388269 + intValue = -95708581 ) @Export("loadedCount") int loadedCount; @@ -48,17 +40,17 @@ public class ArchiveLoader { this.groupCount = var1.getGroupCount(); } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "(I)Z", - garbageValue = "2053388584" + garbageValue = "-1362696328" ) @Export("isLoaded") boolean isLoaded() { this.loadedCount = 0; for (int var1 = 0; var1 < this.groupCount; ++var1) { - if (!this.archive.method4436(var1) || this.archive.method4417(var1)) { + if (!this.archive.method4355(var1) || this.archive.method4354(var1)) { ++this.loadedCount; } } @@ -66,822 +58,21 @@ public class ArchiveLoader { return this.loadedCount >= this.groupCount; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(II)Z", - garbageValue = "145350821" + signature = "(I)[Lik;", + garbageValue = "141715201" ) - public static boolean method1239(int var0) { - return var0 == WorldMapDecorationType.field2723.id; + static VerticalAlignment[] method1177() { + return new VerticalAlignment[]{VerticalAlignment.field3200, VerticalAlignment.VerticalAlignment_centered, VerticalAlignment.field3201}; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(III)I", - garbageValue = "-1915313873" + signature = "(B)V", + garbageValue = "-84" ) - static int method1237(int var0, int var1) { - if (var0 == -2) { - return 12345678; - } else if (var0 == -1) { - if (var1 < 0) { - var1 = 0; - } else if (var1 > 127) { - var1 = 127; - } - - var1 = 127 - var1; - return var1; - } else { - var1 = (var0 & 127) * var1 / 128; - if (var1 < 2) { - var1 = 2; - } else if (var1 > 126) { - var1 = 126; - } - - return (var0 & 65408) + var1; - } - } - - @ObfuscatedName("a") - @ObfuscatedSignature( - signature = "(Lhq;I)V", - garbageValue = "1291572583" - ) - public static void method1235(AbstractArchive var0) { - FloorOverlayDefinition.FloorOverlayDefinition_archive = var0; - } - - @ObfuscatedName("a") - @ObfuscatedSignature( - signature = "(Lkf;B)V", - garbageValue = "49" - ) - @Export("updatePlayer") - static final void updatePlayer(PacketBuffer var0) { - var0.importIndex(); - int var1 = Client.localPlayerIndex; - Player var2 = class215.localPlayer = Client.players[var1] = new Player(); - var2.index = var1; - int var3 = var0.readBits(30); - byte var4 = (byte)(var3 >> 28); - int var5 = var3 >> 14 & 16383; - int var6 = var3 & 16383; - var2.pathX[0] = var5 - UserComparator8.baseX * 64; - var2.x = (var2.pathX[0] << 7) + (var2.transformedSize() << 6); - var2.pathY[0] = var6 - HealthBar.baseY * 64; - var2.y = (var2.pathY[0] << 7) + (var2.transformedSize() << 6); - Player.Client_plane = var2.plane = var4; - if (Players.field1229[var1] != null) { - var2.read(Players.field1229[var1]); - } - - Players.Players_count = 0; - Players.Players_indices[++Players.Players_count - 1] = var1; - Players.field1227[var1] = 0; - Players.Players_emptyIdxCount = 0; - - for (int var7 = 1; var7 < 2048; ++var7) { - if (var1 != var7) { - int var8 = var0.readBits(18); - int var9 = var8 >> 16; - int var10 = var8 >> 8 & 597; - int var11 = var8 & 597; - Players.Players_regions[var7] = (var10 << 14) + var11 + (var9 << 28); - Players.Players_orientations[var7] = 0; - Players.Players_targetIndices[var7] = -1; - Players.Players_emptyIndices[++Players.Players_emptyIdxCount - 1] = var7; - Players.field1227[var7] = 0; - } - } - - var0.exportIndex(); - } - - @ObfuscatedName("t") - @ObfuscatedSignature( - signature = "(IIII)I", - garbageValue = "-561019342" - ) - static int method1230(int var0, int var1, int var2) { - if (var2 > 179) { - var1 /= 2; - } - - if (var2 > 192) { - var1 /= 2; - } - - if (var2 > 217) { - var1 /= 2; - } - - if (var2 > 243) { - var1 /= 2; - } - - int var3 = (var1 / 32 << 7) + (var0 / 4 << 10) + var2 / 2; - return var3; - } - - @ObfuscatedName("n") - @ObfuscatedSignature( - signature = "(IIB)Lhi;", - garbageValue = "-102" - ) - @Export("getWidgetChild") - public static Widget getWidgetChild(int var0, int var1) { - Widget var2 = PacketBufferNode.getWidget(var0); - if (var1 == -1) { - return var2; - } else { - return var2 != null && var2.children != null && var1 < var2.children.length ? var2.children[var1] : null; - } - } - - @ObfuscatedName("q") - @ObfuscatedSignature( - signature = "(Lkc;II)Ljava/lang/String;", - garbageValue = "1190041961" - ) - static String method1234(Buffer var0, int var1) { - try { - int var2 = var0.readUShortSmart(); - if (var2 > var1) { - var2 = var1; - } - - byte[] var3 = new byte[var2]; - var0.offset += class210.huffman.decompress(var0.array, var0.offset, var3, 0, var2); - String var4 = class160.decodeStringCp1252(var3, 0, var2); - return var4; - } catch (Exception var6) { - return "Cabbage"; - } - } - - @ObfuscatedName("w") - @ObfuscatedSignature( - signature = "(Ljava/lang/String;II)V", - garbageValue = "2071952148" - ) - static final void method1242(String var0, int var1) { - PacketBufferNode var2 = SoundSystem.getPacketBufferNode(ClientPacket.field2246, Client.packetWriter.isaacCipher); - var2.packetBuffer.writeByte(UserComparator6.stringCp1252NullTerminatedByteSize(var0) + 1); - var2.packetBuffer.writeStringCp1252NullTerminated(var0); - var2.packetBuffer.method5634(var1); - Client.packetWriter.addNode(var2); - } - - @ObfuscatedName("ax") - @ObfuscatedSignature( - signature = "([BI)[B", - garbageValue = "-79197837" - ) - @Export("decompressBytes") - static final byte[] decompressBytes(byte[] var0) { - Buffer var1 = new Buffer(var0); - int var2 = var1.readUnsignedByte(); - int var3 = var1.readInt(); - if (var3 < 0 || AbstractArchive.field3128 != 0 && var3 > AbstractArchive.field3128) { - throw new RuntimeException(); - } else if (var2 == 0) { - byte[] var4 = new byte[var3]; - var1.readBytes(var4, 0, var3); - return var4; - } else { - int var6 = var1.readInt(); - if (var6 < 0 || AbstractArchive.field3128 != 0 && var6 > AbstractArchive.field3128) { - throw new RuntimeException(); - } else { - byte[] var5 = new byte[var6]; - if (var2 == 1) { - BZip2Decompressor.BZip2Decompressor_decompress(var5, var6, var0, var3, 9); - } else { - AbstractArchive.gzipDecompressor.decompress(var1, var5); - } - - return var5; - } - } - } - - @ObfuscatedName("aj") - @ObfuscatedSignature( - signature = "(ILcj;ZI)I", - garbageValue = "1460957872" - ) - static int method1245(int var0, Script var1, boolean var2) { - if (var0 == ScriptOpcodes.GETWINDOWMODE) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = WallDecoration.getWindowedMode(); - return 1; - } else { - int var3; - if (var0 == ScriptOpcodes.SETWINDOWMODE) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - if (var3 == 1 || var3 == 2) { - FontName.setWindowedMode(var3); - } - - return 1; - } else if (var0 == ScriptOpcodes.GETDEFAULTWINDOWMODE) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = ScriptEvent.clientPreferences.windowMode; - return 1; - } else if (var0 != ScriptOpcodes.SETDEFAULTWINDOWMODE) { - if (var0 == 5310) { - --Interpreter.Interpreter_intStackSize; - return 1; - } else { - return 2; - } - } else { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - if (var3 == 1 || var3 == 2) { - ScriptEvent.clientPreferences.windowMode = var3; - HitSplatDefinition.savePreferences(); - } - - return 1; - } - } - } - - @ObfuscatedName("jg") - @ObfuscatedSignature( - signature = "(IIIIIB)V", - garbageValue = "-34" - ) - @Export("drawScrollBar") - static final void drawScrollBar(int var0, int var1, int var2, int var3, int var4) { - NetSocket.scrollBarSprites[0].drawAt(var0, var1); - NetSocket.scrollBarSprites[1].drawAt(var0, var3 + var1 - 16); - Rasterizer2D.Rasterizer2D_fillRectangle(var0, var1 + 16, 16, var3 - 32, Client.field895); - int var5 = var3 * (var3 - 32) / var4; - if (var5 < 8) { - var5 = 8; - } - - int var6 = (var3 - 32 - var5) * var2 / (var4 - var3); - Rasterizer2D.Rasterizer2D_fillRectangle(var0, var6 + var1 + 16, 16, var5, Client.field661); - Rasterizer2D.Rasterizer2D_drawVerticalLine(var0, var6 + var1 + 16, var5, Client.field790); - Rasterizer2D.Rasterizer2D_drawVerticalLine(var0 + 1, var6 + var1 + 16, var5, Client.field790); - Rasterizer2D.Rasterizer2D_drawHorizontalLine(var0, var6 + var1 + 16, 16, Client.field790); - Rasterizer2D.Rasterizer2D_drawHorizontalLine(var0, var6 + var1 + 17, 16, Client.field790); - Rasterizer2D.Rasterizer2D_drawVerticalLine(var0 + 15, var6 + var1 + 16, var5, Client.field683); - Rasterizer2D.Rasterizer2D_drawVerticalLine(var0 + 14, var6 + var1 + 17, var5 - 1, Client.field683); - Rasterizer2D.Rasterizer2D_drawHorizontalLine(var0, var6 + var5 + var1 + 15, 16, Client.field683); - Rasterizer2D.Rasterizer2D_drawHorizontalLine(var0 + 1, var5 + var6 + var1 + 14, 15, Client.field683); - } - - @ObfuscatedName("jf") - @ObfuscatedSignature( - signature = "([Lhi;IIIIIIII)V", - garbageValue = "-954572124" - ) - @Export("updateInterface") - static final void updateInterface(Widget[] var0, int var1, int var2, int var3, int var4, int var5, int var6, int var7) { - for (int var8 = 0; var8 < var0.length; ++var8) { - Widget var9 = var0[var8]; - if (var9 != null && var9.parentId == var1 && (!var9.isIf3 || var9.type == 0 || var9.hasListener || class195.getWidgetClickMask(var9) != 0 || var9 == Client.clickedWidgetParent || var9.contentType == 1338)) { - if (var9.isIf3) { - if (WorldMapManager.isComponentHidden(var9)) { - continue; - } - } else if (var9.type == 0 && var9 != ChatChannel.mousedOverWidgetIf1 && WorldMapManager.isComponentHidden(var9)) { - continue; - } - - int var10 = var9.x + var6; - int var11 = var7 + var9.y; - int var12; - int var13; - int var14; - int var15; - int var17; - int var18; - if (var9.type == 2) { - var12 = var2; - var13 = var3; - var14 = var4; - var15 = var5; - } else { - int var16; - if (var9.type == 9) { - var16 = var10; - var17 = var11; - var18 = var10 + var9.width; - int var19 = var11 + var9.height; - if (var18 < var10) { - var16 = var18; - var18 = var10; - } - - if (var19 < var11) { - var17 = var19; - var19 = var11; - } - - ++var18; - ++var19; - var12 = var16 > var2 ? var16 : var2; - var13 = var17 > var3 ? var17 : var3; - var14 = var18 < var4 ? var18 : var4; - var15 = var19 < var5 ? var19 : var5; - } else { - var16 = var10 + var9.width; - var17 = var11 + var9.height; - var12 = var10 > var2 ? var10 : var2; - var13 = var11 > var3 ? var11 : var3; - var14 = var16 < var4 ? var16 : var4; - var15 = var17 < var5 ? var17 : var5; - } - } - - if (var9 == Client.clickedWidget) { - Client.field695 = true; - Client.field846 = var10; - Client.field814 = var11; - } - - boolean var32 = false; - if (var9.field2606) { - switch(Client.field828) { - case 0: - var32 = true; - case 1: - default: - break; - case 2: - if (Client.field794 == var9.id >>> 16) { - var32 = true; - } - break; - case 3: - if (var9.id == Client.field794) { - var32 = true; - } - } - } - - if (var32 || !var9.isIf3 || var12 < var14 && var13 < var15) { - if (var9.isIf3) { - ScriptEvent var26; - if (var9.noClickThrough) { - if (MouseHandler.MouseHandler_x >= var12 && MouseHandler.MouseHandler_y >= var13 && MouseHandler.MouseHandler_x < var14 && MouseHandler.MouseHandler_y < var15) { - for (var26 = (ScriptEvent)Client.scriptEvents.last(); var26 != null; var26 = (ScriptEvent)Client.scriptEvents.previous()) { - if (var26.isMouseInputEvent) { - var26.remove(); - var26.widget.containsMouse = false; - } - } - - if (FloorDecoration.widgetDragDuration == 0) { - Client.clickedWidget = null; - Client.clickedWidgetParent = null; - } - - if (!Client.isMenuOpen) { - ClientPacket.addCancelMenuEntry(); - } - } - } else if (var9.noScrollThrough && MouseHandler.MouseHandler_x >= var12 && MouseHandler.MouseHandler_y >= var13 && MouseHandler.MouseHandler_x < var14 && MouseHandler.MouseHandler_y < var15) { - for (var26 = (ScriptEvent)Client.scriptEvents.last(); var26 != null; var26 = (ScriptEvent)Client.scriptEvents.previous()) { - if (var26.isMouseInputEvent && var26.widget.onScroll == var26.args) { - var26.remove(); - } - } - } - } - - var17 = MouseHandler.MouseHandler_x; - var18 = MouseHandler.MouseHandler_y; - if (MouseHandler.MouseHandler_lastButton != 0) { - var17 = MouseHandler.MouseHandler_lastPressedX; - var18 = MouseHandler.MouseHandler_lastPressedY; - } - - boolean var33 = var17 >= var12 && var18 >= var13 && var17 < var14 && var18 < var15; - if (var9.contentType == 1337) { - if (!Client.isLoading && !Client.isMenuOpen && var33) { - GrandExchangeOfferNameComparator.addSceneMenuOptions(var17, var18, var12, var13); - } - } else if (var9.contentType == 1338) { - WorldMapIcon_1.checkIfMinimapClicked(var9, var10, var11); - } else { - if (var9.contentType == 1400) { - Login.worldMap.onCycle(MouseHandler.MouseHandler_x, MouseHandler.MouseHandler_y, var33, var10, var11, var9.width, var9.height); - } - - if (!Client.isMenuOpen && var33) { - if (var9.contentType == 1400) { - Login.worldMap.addElementMenuOptions(var10, var11, var9.width, var9.height, var17, var18); - } else { - class80.method2197(var9, var17 - var10, var18 - var11); - } - } - - boolean var21; - int var23; - if (var32) { - for (int var20 = 0; var20 < var9.field2623.length; ++var20) { - var21 = false; - boolean var22 = false; - if (!var21 && var9.field2623[var20] != null) { - for (var23 = 0; var23 < var9.field2623[var20].length; ++var23) { - boolean var24 = false; - if (var9.field2627 != null) { - var24 = KeyHandler.KeyHandler_pressedKeys[var9.field2623[var20][var23]]; - } - - if (Frames.method3400(var9.field2623[var20][var23]) || var24) { - var21 = true; - if (var9.field2627 != null && var9.field2627[var20] > Client.cycle) { - break; - } - - byte var25 = var9.field2624[var20][var23]; - if (var25 == 0 || ((var25 & 8) == 0 || !KeyHandler.KeyHandler_pressedKeys[86] && !KeyHandler.KeyHandler_pressedKeys[82] && !KeyHandler.KeyHandler_pressedKeys[81]) && ((var25 & 2) == 0 || KeyHandler.KeyHandler_pressedKeys[86]) && ((var25 & 1) == 0 || KeyHandler.KeyHandler_pressedKeys[82]) && ((var25 & 4) == 0 || KeyHandler.KeyHandler_pressedKeys[81])) { - var22 = true; - break; - } - } - } - } - - if (var22) { - if (var20 < 10) { - class287.widgetDefaultMenuAction(var20 + 1, var9.id, var9.childIndex, var9.itemId, ""); - } else if (var20 == 10) { - InterfaceParent.Widget_runOnTargetLeave(); - class51.selectSpell(var9.id, var9.childIndex, UserComparator5.method3551(class195.getWidgetClickMask(var9)), var9.itemId); - Client.selectedSpellActionName = SoundCache.method2666(var9); - if (Client.selectedSpellActionName == null) { - Client.selectedSpellActionName = "null"; - } - - Client.selectedSpellName = var9.dataText + AbstractArchive.colorStartTag(16777215); - } - - var23 = var9.field2628[var20]; - if (var9.field2627 == null) { - var9.field2627 = new int[var9.field2623.length]; - } - - if (var9.field2626 == null) { - var9.field2626 = new int[var9.field2623.length]; - } - - if (var23 != 0) { - if (var9.field2627[var20] == 0) { - var9.field2627[var20] = var23 + Client.cycle + var9.field2626[var20]; - } else { - var9.field2627[var20] = var23 + Client.cycle; - } - } else { - var9.field2627[var20] = Integer.MAX_VALUE; - } - } - - if (!var21 && var9.field2627 != null) { - var9.field2627[var20] = 0; - } - } - } - - if (var9.isIf3) { - if (MouseHandler.MouseHandler_x >= var12 && MouseHandler.MouseHandler_y >= var13 && MouseHandler.MouseHandler_x < var14 && MouseHandler.MouseHandler_y < var15) { - var33 = true; - } else { - var33 = false; - } - - boolean var34 = false; - if ((MouseHandler.MouseHandler_currentButton == 1 || !WorldMapLabelSize.mouseCam && MouseHandler.MouseHandler_currentButton == 4) && var33) { - var34 = true; - } - - var21 = false; - if ((MouseHandler.MouseHandler_lastButton == 1 || !WorldMapLabelSize.mouseCam && MouseHandler.MouseHandler_lastButton == 4) && MouseHandler.MouseHandler_lastPressedX >= var12 && MouseHandler.MouseHandler_lastPressedY >= var13 && MouseHandler.MouseHandler_lastPressedX < var14 && MouseHandler.MouseHandler_lastPressedY < var15) { - var21 = true; - } - - if (var21) { - class4.clickWidget(var9, MouseHandler.MouseHandler_lastPressedX - var10, MouseHandler.MouseHandler_lastPressedY - var11); - } - - if (var9.contentType == 1400) { - Login.worldMap.method6429(var17, var18, var33 & var34, var33 & var21); - } - - if (Client.clickedWidget != null && var9 != Client.clickedWidget && var33 && TextureProvider.method2931(class195.getWidgetClickMask(var9))) { - Client.draggedOnWidget = var9; - } - - if (var9 == Client.clickedWidgetParent) { - Client.field809 = true; - Client.field748 = var10; - Client.field751 = var11; - } - - if (var9.hasListener) { - ScriptEvent var29; - if (var33 && Client.mouseWheelRotation != 0 && var9.onScroll != null) { - var29 = new ScriptEvent(); - var29.isMouseInputEvent = true; - var29.widget = var9; - var29.mouseY = Client.mouseWheelRotation; - var29.args = var9.onScroll; - Client.scriptEvents.addFirst(var29); - } - - if (Client.clickedWidget != null || GrandExchangeOffer.dragInventoryWidget != null || Client.isMenuOpen) { - var21 = false; - var34 = false; - var33 = false; - } - - if (!var9.isClicked && var21) { - var9.isClicked = true; - if (var9.onClick != null) { - var29 = new ScriptEvent(); - var29.isMouseInputEvent = true; - var29.widget = var9; - var29.mouseX = MouseHandler.MouseHandler_lastPressedX - var10; - var29.mouseY = MouseHandler.MouseHandler_lastPressedY - var11; - var29.args = var9.onClick; - Client.scriptEvents.addFirst(var29); - } - } - - if (var9.isClicked && var34 && var9.onClickRepeat != null) { - var29 = new ScriptEvent(); - var29.isMouseInputEvent = true; - var29.widget = var9; - var29.mouseX = MouseHandler.MouseHandler_x - var10; - var29.mouseY = MouseHandler.MouseHandler_y - var11; - var29.args = var9.onClickRepeat; - Client.scriptEvents.addFirst(var29); - } - - if (var9.isClicked && !var34) { - var9.isClicked = false; - if (var9.onRelease != null) { - var29 = new ScriptEvent(); - var29.isMouseInputEvent = true; - var29.widget = var9; - var29.mouseX = MouseHandler.MouseHandler_x - var10; - var29.mouseY = MouseHandler.MouseHandler_y - var11; - var29.args = var9.onRelease; - Client.field832.addFirst(var29); - } - } - - if (var34 && var9.onHold != null) { - var29 = new ScriptEvent(); - var29.isMouseInputEvent = true; - var29.widget = var9; - var29.mouseX = MouseHandler.MouseHandler_x - var10; - var29.mouseY = MouseHandler.MouseHandler_y - var11; - var29.args = var9.onHold; - Client.scriptEvents.addFirst(var29); - } - - if (!var9.containsMouse && var33) { - var9.containsMouse = true; - if (var9.onMouseOver != null) { - var29 = new ScriptEvent(); - var29.isMouseInputEvent = true; - var29.widget = var9; - var29.mouseX = MouseHandler.MouseHandler_x - var10; - var29.mouseY = MouseHandler.MouseHandler_y - var11; - var29.args = var9.onMouseOver; - Client.scriptEvents.addFirst(var29); - } - } - - if (var9.containsMouse && var33 && var9.onMouseRepeat != null) { - var29 = new ScriptEvent(); - var29.isMouseInputEvent = true; - var29.widget = var9; - var29.mouseX = MouseHandler.MouseHandler_x - var10; - var29.mouseY = MouseHandler.MouseHandler_y - var11; - var29.args = var9.onMouseRepeat; - Client.scriptEvents.addFirst(var29); - } - - if (var9.containsMouse && !var33) { - var9.containsMouse = false; - if (var9.onMouseLeave != null) { - var29 = new ScriptEvent(); - var29.isMouseInputEvent = true; - var29.widget = var9; - var29.mouseX = MouseHandler.MouseHandler_x - var10; - var29.mouseY = MouseHandler.MouseHandler_y - var11; - var29.args = var9.onMouseLeave; - Client.field832.addFirst(var29); - } - } - - if (var9.onTimer != null) { - var29 = new ScriptEvent(); - var29.widget = var9; - var29.args = var9.onTimer; - Client.field813.addFirst(var29); - } - - ScriptEvent var30; - int var35; - int var36; - if (var9.onVarTransmit != null && Client.field679 > var9.field2644) { - if (var9.varTransmitTriggers != null && Client.field679 - var9.field2644 <= 32) { - label886: - for (var35 = var9.field2644; var35 < Client.field679; ++var35) { - var23 = Client.field817[var35 & 31]; - - for (var36 = 0; var36 < var9.varTransmitTriggers.length; ++var36) { - if (var23 == var9.varTransmitTriggers[var36]) { - var30 = new ScriptEvent(); - var30.widget = var9; - var30.args = var9.onVarTransmit; - Client.scriptEvents.addFirst(var30); - break label886; - } - } - } - } else { - var29 = new ScriptEvent(); - var29.widget = var9; - var29.args = var9.onVarTransmit; - Client.scriptEvents.addFirst(var29); - } - - var9.field2644 = Client.field679; - } - - if (var9.onInvTransmit != null && Client.field820 > var9.field2567) { - if (var9.invTransmitTriggers != null && Client.field820 - var9.field2567 <= 32) { - label862: - for (var35 = var9.field2567; var35 < Client.field820; ++var35) { - var23 = Client.changedItemContainers[var35 & 31]; - - for (var36 = 0; var36 < var9.invTransmitTriggers.length; ++var36) { - if (var23 == var9.invTransmitTriggers[var36]) { - var30 = new ScriptEvent(); - var30.widget = var9; - var30.args = var9.onInvTransmit; - Client.scriptEvents.addFirst(var30); - break label862; - } - } - } - } else { - var29 = new ScriptEvent(); - var29.widget = var9; - var29.args = var9.onInvTransmit; - Client.scriptEvents.addFirst(var29); - } - - var9.field2567 = Client.field820; - } - - if (var9.onStatTransmit != null && Client.changedSkillsCount > var9.field2684) { - if (var9.statTransmitTriggers != null && Client.changedSkillsCount - var9.field2684 <= 32) { - label838: - for (var35 = var9.field2684; var35 < Client.changedSkillsCount; ++var35) { - var23 = Client.changedSkills[var35 & 31]; - - for (var36 = 0; var36 < var9.statTransmitTriggers.length; ++var36) { - if (var23 == var9.statTransmitTriggers[var36]) { - var30 = new ScriptEvent(); - var30.widget = var9; - var30.args = var9.onStatTransmit; - Client.scriptEvents.addFirst(var30); - break label838; - } - } - } - } else { - var29 = new ScriptEvent(); - var29.widget = var9; - var29.args = var9.onStatTransmit; - Client.scriptEvents.addFirst(var29); - } - - var9.field2684 = Client.changedSkillsCount; - } - - if (Client.chatCycle > var9.field2681 && var9.onChatTransmit != null) { - var29 = new ScriptEvent(); - var29.widget = var9; - var29.args = var9.onChatTransmit; - Client.scriptEvents.addFirst(var29); - } - - if (Client.field824 > var9.field2681 && var9.onFriendTransmit != null) { - var29 = new ScriptEvent(); - var29.widget = var9; - var29.args = var9.onFriendTransmit; - Client.scriptEvents.addFirst(var29); - } - - if (Client.field825 > var9.field2681 && var9.onClanTransmit != null) { - var29 = new ScriptEvent(); - var29.widget = var9; - var29.args = var9.onClanTransmit; - Client.scriptEvents.addFirst(var29); - } - - if (Client.field826 > var9.field2681 && var9.onStockTransmit != null) { - var29 = new ScriptEvent(); - var29.widget = var9; - var29.args = var9.onStockTransmit; - Client.scriptEvents.addFirst(var29); - } - - if (Client.field652 > var9.field2681 && var9.field2665 != null) { - var29 = new ScriptEvent(); - var29.widget = var9; - var29.args = var9.field2665; - Client.scriptEvents.addFirst(var29); - } - - if (Client.field834 > var9.field2681 && var9.onMiscTransmit != null) { - var29 = new ScriptEvent(); - var29.widget = var9; - var29.args = var9.onMiscTransmit; - Client.scriptEvents.addFirst(var29); - } - - var9.field2681 = Client.cycleCntr; - if (var9.onKey != null) { - for (var35 = 0; var35 < Client.field866; ++var35) { - ScriptEvent var31 = new ScriptEvent(); - var31.widget = var9; - var31.keyTyped = Client.field854[var35]; - var31.keyPressed = Client.field853[var35]; - var31.args = var9.onKey; - Client.scriptEvents.addFirst(var31); - } - } - } - } - - if (!var9.isIf3) { - if (Client.clickedWidget != null || GrandExchangeOffer.dragInventoryWidget != null || Client.isMenuOpen) { - continue; - } - - if ((var9.mouseOverRedirect >= 0 || var9.mouseOverColor != 0) && MouseHandler.MouseHandler_x >= var12 && MouseHandler.MouseHandler_y >= var13 && MouseHandler.MouseHandler_x < var14 && MouseHandler.MouseHandler_y < var15) { - if (var9.mouseOverRedirect >= 0) { - ChatChannel.mousedOverWidgetIf1 = var0[var9.mouseOverRedirect]; - } else { - ChatChannel.mousedOverWidgetIf1 = var9; - } - } - - if (var9.type == 8 && MouseHandler.MouseHandler_x >= var12 && MouseHandler.MouseHandler_y >= var13 && MouseHandler.MouseHandler_x < var14 && MouseHandler.MouseHandler_y < var15) { - GrandExchangeEvents.field39 = var9; - } - - if (var9.scrollHeight > var9.height) { - GrandExchangeOfferOwnWorldComparator.method1389(var9, var10 + var9.width, var11, var9.height, var9.scrollHeight, MouseHandler.MouseHandler_x, MouseHandler.MouseHandler_y); - } - } - - if (var9.type == 0) { - updateInterface(var0, var9.id, var12, var13, var14, var15, var10 - var9.scrollX, var11 - var9.scrollY); - if (var9.children != null) { - updateInterface(var9.children, var9.id, var12, var13, var14, var15, var10 - var9.scrollX, var11 - var9.scrollY); - } - - InterfaceParent var27 = (InterfaceParent)Client.interfaceParents.get((long)var9.id); - if (var27 != null) { - if (var27.type == 0 && MouseHandler.MouseHandler_x >= var12 && MouseHandler.MouseHandler_y >= var13 && MouseHandler.MouseHandler_x < var14 && MouseHandler.MouseHandler_y < var15 && !Client.isMenuOpen) { - for (ScriptEvent var28 = (ScriptEvent)Client.scriptEvents.last(); var28 != null; var28 = (ScriptEvent)Client.scriptEvents.previous()) { - if (var28.isMouseInputEvent) { - var28.remove(); - var28.widget.containsMouse = false; - } - } - - if (FloorDecoration.widgetDragDuration == 0) { - Client.clickedWidget = null; - Client.clickedWidgetParent = null; - } - - if (!Client.isMenuOpen) { - ClientPacket.addCancelMenuEntry(); - } - } - - ServerBuild.updateRootInterface(var27.group, var12, var13, var14, var15, var10, var11); - } - } - } - } - } - } - + public static void method1178() { + class96.reflectionChecks = new IterableNodeDeque(); } } diff --git a/runescape-client/src/main/java/AttackOption.java b/runescape-client/src/main/java/AttackOption.java index 8512fa12af..9ab90e679e 100644 --- a/runescape-client/src/main/java/AttackOption.java +++ b/runescape-client/src/main/java/AttackOption.java @@ -4,48 +4,55 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("cr") +@ObfuscatedName("co") @Implements("AttackOption") public enum AttackOption implements Enumerated { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lcr;" + signature = "Lco;" ) @Export("AttackOption_dependsOnCombatLevels") AttackOption_dependsOnCombatLevels(0), - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lcr;" + signature = "Lco;" ) @Export("AttackOption_alwaysRightClick") AttackOption_alwaysRightClick(1), - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Lcr;" + signature = "Lco;" ) @Export("AttackOption_leftClickWhereAvailable") AttackOption_leftClickWhereAvailable(2), - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Lcr;" + signature = "Lco;" ) @Export("AttackOption_hidden") AttackOption_hidden(3); - @ObfuscatedName("c") - @Export("SpriteBuffer_spriteHeights") - public static int[] SpriteBuffer_spriteHeights; - @ObfuscatedName("h") - public static boolean field1151; - @ObfuscatedName("fp") + @ObfuscatedName("ox") @ObfuscatedSignature( - signature = "Lfw;" + signature = "Lcj;" ) - @Export("socketTask") - static Task socketTask; - @ObfuscatedName("v") + @Export("varcs") + static Varcs varcs; + @ObfuscatedName("fr") + @ObfuscatedSignature( + signature = "Lky;" + ) + @Export("fontPlain11") + static Font fontPlain11; + @ObfuscatedName("gt") + @ObfuscatedSignature( + signature = "[Lln;" + ) + @Export("mapMarkerSprites") + static Sprite[] mapMarkerSprites; + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = -871271379 + intValue = 2079114159 ) @Export("id") final int id; @@ -54,124 +61,43 @@ public enum AttackOption implements Enumerated { this.id = var3; } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(I)I", - garbageValue = "-1993081102" + signature = "(B)I", + garbageValue = "7" ) @Export("rsOrdinal") public int rsOrdinal() { return this.id; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Lhq;B)V", - garbageValue = "17" + signature = "(III)I", + garbageValue = "-573010380" ) - public static void method2221(AbstractArchive var0) { - VarbitDefinition.VarbitDefinition_archive = var0; - } - - @ObfuscatedName("n") - @ObfuscatedSignature( - signature = "(Lhq;Lhq;ZIS)V", - garbageValue = "-32666" - ) - static void method2218(AbstractArchive var0, AbstractArchive var1, boolean var2, int var3) { - if (Login.field1188) { - if (var3 == 4) { - Login.loginIndex = 4; - } - + static int method2098(int var0, int var1) { + ItemContainer var2 = (ItemContainer)ItemContainer.itemContainers.get((long)var0); + if (var2 == null) { + return -1; } else { - Login.loginIndex = var3; - Rasterizer2D.Rasterizer2D_clear(); - byte[] var4 = var0.takeFileByNames("title.jpg", ""); - Login.leftTitleSprite = WorldMapSection1.convertJpgToSprite(var4); - FontName.rightTitleSprite = Login.leftTitleSprite.mirrorHorizontally(); - if ((Client.worldProperties & 536870912) != 0) { - Tiles.logoSprite = ClientPacket.SpriteBuffer_getIndexedSpriteByName(var1, "logo_deadman_mode", ""); - } else if ((Client.worldProperties & 1073741824) != 0) { - Tiles.logoSprite = ClientPacket.SpriteBuffer_getIndexedSpriteByName(var1, "logo_seasonal_mode", ""); - } else { - Tiles.logoSprite = ClientPacket.SpriteBuffer_getIndexedSpriteByName(var1, "logo", ""); - } - - NPC.titleboxSprite = ClientPacket.SpriteBuffer_getIndexedSpriteByName(var1, "titlebox", ""); - UserComparator9.titlebuttonSprite = ClientPacket.SpriteBuffer_getIndexedSpriteByName(var1, "titlebutton", ""); - class208.runesSprite = PlayerAppearance.method4160(var1, "runes", ""); - Decimator.title_muteSprite = PlayerAppearance.method4160(var1, "title_mute", ""); - UserComparator8.options_buttons_0Sprite = ClientPacket.SpriteBuffer_getIndexedSpriteByName(var1, "options_radio_buttons,0", ""); - class51.field412 = ClientPacket.SpriteBuffer_getIndexedSpriteByName(var1, "options_radio_buttons,4", ""); - Login.options_buttons_2Sprite = ClientPacket.SpriteBuffer_getIndexedSpriteByName(var1, "options_radio_buttons,2", ""); - class4.field23 = ClientPacket.SpriteBuffer_getIndexedSpriteByName(var1, "options_radio_buttons,6", ""); - Login.field1174 = UserComparator8.options_buttons_0Sprite.subWidth; - Language.field2328 = UserComparator8.options_buttons_0Sprite.subHeight; - Login.loginScreenRunesAnimation = new LoginScreenAnimation(class208.runesSprite); - if (var2) { - Login.Login_username = ""; - Login.Login_password = ""; - } - - Huffman.field2491 = 0; - class268.otp = ""; - Login.field1177 = true; - Login.worldSelectOpen = false; - if (!ScriptEvent.clientPreferences.titleMusicDisabled) { - Archive var5 = class216.archive6; - int var6 = var5.getGroupId("scape main"); - int var7 = var5.getFileId(var6, ""); - WorldMapIcon_0.method253(2, var5, var6, var7, 255, false); - } else { - class80.method2194(2); - } - - UrlRequester.method3428(false); - Login.field1188 = true; - Login.xPadding = (class286.canvasWidth - 765) / 2; - Login.loginBoxX = Login.xPadding + 202; - class192.loginBoxCenter = Login.loginBoxX + 180; - Login.leftTitleSprite.drawAt(Login.xPadding, 0); - FontName.rightTitleSprite.drawAt(Login.xPadding + 382, 0); - Tiles.logoSprite.drawAt(Login.xPadding + 382 - Tiles.logoSprite.subWidth / 2, 18); + return var1 >= 0 && var1 < var2.ids.length ? var2.ids[var1] : -1; } } - @ObfuscatedName("v") + @ObfuscatedName("fq") @ObfuscatedSignature( - signature = "(II)I", - garbageValue = "2026213000" + signature = "(II)V", + garbageValue = "-940191492" ) - @Export("Messages_getHistorySize") - static int Messages_getHistorySize(int var0) { - ChatChannel var1 = (ChatChannel)Messages.Messages_channels.get(var0); - return var1 == null ? 0 : var1.size(); - } - - @ObfuscatedName("x") - @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "1182575987" - ) - static void method2215() { - if (class43.loadWorlds()) { - Login.worldSelectOpen = true; - Login.worldSelectPage = 0; - Login.worldSelectPagesCount = 0; + @Export("playSong") + static void playSong(int var0) { + if (var0 == -1 && !Client.field742) { + TileItemPile.method2811(); + } else if (var0 != -1 && var0 != Client.currentTrackGroupId && Client.musicVolume != 0 && !Client.field742) { + World.method1819(2, AbstractWorldMapData.archive6, var0, 0, Client.musicVolume, false); } - } - - @ObfuscatedName("jj") - @ObfuscatedSignature( - signature = "(III)V", - garbageValue = "2104552058" - ) - @Export("runIntfCloseListeners") - static final void runIntfCloseListeners(int var0, int var1) { - if (TextureProvider.loadInterface(var0)) { - DirectByteArrayCopier.runComponentCloseListeners(Widget.Widget_interfaceComponents[var0], var1); - } + Client.currentTrackGroupId = var0; } } diff --git a/runescape-client/src/main/java/AudioFilter.java b/runescape-client/src/main/java/AudioFilter.java index 6068471dcc..8a999e7850 100644 --- a/runescape-client/src/main/java/AudioFilter.java +++ b/runescape-client/src/main/java/AudioFilter.java @@ -3,154 +3,154 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("dz") +@ObfuscatedName("dh") @Implements("AudioFilter") public class AudioFilter { - @ObfuscatedName("l") - static float[][] field1460; - @ObfuscatedName("c") + @ObfuscatedName("p") + static float[][] field1474; + @ObfuscatedName("h") @Export("coefficients") static int[][] coefficients; - @ObfuscatedName("o") - static float field1458; - @ObfuscatedName("i") + @ObfuscatedName("y") + static float field1478; + @ObfuscatedName("w") @Export("forwardMultiplier") static int forwardMultiplier; - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("pairs") int[] pairs; - @ObfuscatedName("n") - int[][][] field1457; - @ObfuscatedName("q") - int[][][] field1459; - @ObfuscatedName("v") - int[] field1455; + @ObfuscatedName("b") + int[][][] field1473; + @ObfuscatedName("g") + int[][][] field1475; + @ObfuscatedName("z") + int[] field1471; static { - field1460 = new float[2][8]; + field1474 = new float[2][8]; coefficients = new int[2][8]; } AudioFilter() { this.pairs = new int[2]; - this.field1457 = new int[2][2][4]; - this.field1459 = new int[2][2][4]; - this.field1455 = new int[2]; + this.field1473 = new int[2][2][4]; + this.field1475 = new int[2][2][4]; + this.field1471 = new int[2]; } - @ObfuscatedName("a") - float method2857(int var1, int var2, float var3) { - float var4 = (float)this.field1459[var1][0][var2] + var3 * (float)(this.field1459[var1][1][var2] - this.field1459[var1][0][var2]); + @ObfuscatedName("u") + float method2728(int var1, int var2, float var3) { + float var4 = (float)this.field1475[var1][0][var2] + var3 * (float)(this.field1475[var1][1][var2] - this.field1475[var1][0][var2]); var4 *= 0.0015258789F; return 1.0F - (float)Math.pow(10.0D, (double)(-var4 / 20.0F)); } - @ObfuscatedName("n") - float method2854(int var1, int var2, float var3) { - float var4 = (float)this.field1457[var1][0][var2] + var3 * (float)(this.field1457[var1][1][var2] - this.field1457[var1][0][var2]); + @ObfuscatedName("b") + float method2725(int var1, int var2, float var3) { + float var4 = (float)this.field1473[var1][0][var2] + var3 * (float)(this.field1473[var1][1][var2] - this.field1473[var1][0][var2]); var4 *= 1.2207031E-4F; return normalize(var4); } - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("compute") int compute(int var1, float var2) { float var3; if (var1 == 0) { - var3 = (float)this.field1455[0] + (float)(this.field1455[1] - this.field1455[0]) * var2; + var3 = (float)this.field1471[0] + (float)(this.field1471[1] - this.field1471[0]) * var2; var3 *= 0.0030517578F; - field1458 = (float)Math.pow(0.1D, (double)(var3 / 20.0F)); - forwardMultiplier = (int)(field1458 * 65536.0F); + field1478 = (float)Math.pow(0.1D, (double)(var3 / 20.0F)); + forwardMultiplier = (int)(field1478 * 65536.0F); } if (this.pairs[var1] == 0) { return 0; } else { - var3 = this.method2857(var1, 0, var2); - field1460[var1][0] = -2.0F * var3 * (float)Math.cos((double)this.method2854(var1, 0, var2)); - field1460[var1][1] = var3 * var3; + var3 = this.method2728(var1, 0, var2); + field1474[var1][0] = -2.0F * var3 * (float)Math.cos((double)this.method2725(var1, 0, var2)); + field1474[var1][1] = var3 * var3; float[] var10000; int var4; for (var4 = 1; var4 < this.pairs[var1]; ++var4) { - var3 = this.method2857(var1, var4, var2); - float var5 = -2.0F * var3 * (float)Math.cos((double)this.method2854(var1, var4, var2)); + var3 = this.method2728(var1, var4, var2); + float var5 = -2.0F * var3 * (float)Math.cos((double)this.method2725(var1, var4, var2)); float var6 = var3 * var3; - field1460[var1][var4 * 2 + 1] = field1460[var1][var4 * 2 - 1] * var6; - field1460[var1][var4 * 2] = field1460[var1][var4 * 2 - 1] * var5 + field1460[var1][var4 * 2 - 2] * var6; + field1474[var1][var4 * 2 + 1] = field1474[var1][var4 * 2 - 1] * var6; + field1474[var1][var4 * 2] = field1474[var1][var4 * 2 - 1] * var5 + field1474[var1][var4 * 2 - 2] * var6; for (int var7 = var4 * 2 - 1; var7 >= 2; --var7) { - var10000 = field1460[var1]; - var10000[var7] += field1460[var1][var7 - 1] * var5 + field1460[var1][var7 - 2] * var6; + var10000 = field1474[var1]; + var10000[var7] += field1474[var1][var7 - 1] * var5 + field1474[var1][var7 - 2] * var6; } - var10000 = field1460[var1]; - var10000[1] += field1460[var1][0] * var5 + var6; - var10000 = field1460[var1]; + var10000 = field1474[var1]; + var10000[1] += field1474[var1][0] * var5 + var6; + var10000 = field1474[var1]; var10000[0] += var5; } if (var1 == 0) { for (var4 = 0; var4 < this.pairs[0] * 2; ++var4) { - var10000 = field1460[0]; - var10000[var4] *= field1458; + var10000 = field1474[0]; + var10000[var4] *= field1478; } } for (var4 = 0; var4 < this.pairs[var1] * 2; ++var4) { - coefficients[var1][var4] = (int)(field1460[var1][var4] * 65536.0F); + coefficients[var1][var4] = (int)(field1474[var1][var4] * 65536.0F); } return this.pairs[var1] * 2; } } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(Lkc;Ldd;)V" + signature = "(Lkg;Ldx;)V" ) - final void method2852(Buffer var1, SoundEnvelope var2) { + final void method2729(Buffer var1, SoundEnvelope var2) { int var3 = var1.readUnsignedByte(); this.pairs[0] = var3 >> 4; this.pairs[1] = var3 & 15; if (var3 != 0) { - this.field1455[0] = var1.readUnsignedShort(); - this.field1455[1] = var1.readUnsignedShort(); + this.field1471[0] = var1.readUnsignedShort(); + this.field1471[1] = var1.readUnsignedShort(); int var4 = var1.readUnsignedByte(); int var5; int var6; for (var5 = 0; var5 < 2; ++var5) { for (var6 = 0; var6 < this.pairs[var5]; ++var6) { - this.field1457[var5][0][var6] = var1.readUnsignedShort(); - this.field1459[var5][0][var6] = var1.readUnsignedShort(); + this.field1473[var5][0][var6] = var1.readUnsignedShort(); + this.field1475[var5][0][var6] = var1.readUnsignedShort(); } } for (var5 = 0; var5 < 2; ++var5) { for (var6 = 0; var6 < this.pairs[var5]; ++var6) { if ((var4 & 1 << var5 * 4 << var6) != 0) { - this.field1457[var5][1][var6] = var1.readUnsignedShort(); - this.field1459[var5][1][var6] = var1.readUnsignedShort(); + this.field1473[var5][1][var6] = var1.readUnsignedShort(); + this.field1475[var5][1][var6] = var1.readUnsignedShort(); } else { - this.field1457[var5][1][var6] = this.field1457[var5][0][var6]; - this.field1459[var5][1][var6] = this.field1459[var5][0][var6]; + this.field1473[var5][1][var6] = this.field1473[var5][0][var6]; + this.field1475[var5][1][var6] = this.field1475[var5][0][var6]; } } } - if (var4 != 0 || this.field1455[1] != this.field1455[0]) { + if (var4 != 0 || this.field1471[1] != this.field1471[0]) { var2.decodeSegments(var1); } } else { - int[] var7 = this.field1455; - this.field1455[1] = 0; + int[] var7 = this.field1471; + this.field1471[1] = 0; var7[0] = 0; } } - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("normalize") static float normalize(float var0) { float var1 = 32.703197F * (float)Math.pow(2.0D, (double)var0); diff --git a/runescape-client/src/main/java/BZip2Decompressor.java b/runescape-client/src/main/java/BZip2Decompressor.java index 94edb55b89..c4e65976d8 100644 --- a/runescape-client/src/main/java/BZip2Decompressor.java +++ b/runescape-client/src/main/java/BZip2Decompressor.java @@ -3,12 +3,12 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("kd") +@ObfuscatedName("kq") @Implements("BZip2Decompressor") public final class BZip2Decompressor { - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "Lky;" + signature = "Lko;" ) @Export("BZip2Decompressor_state") static BZip2State BZip2Decompressor_state; @@ -17,7 +17,7 @@ public final class BZip2Decompressor { BZip2Decompressor_state = new BZip2State(); } - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("BZip2Decompressor_decompress") public static int BZip2Decompressor_decompress(byte[] var0, int var1, byte[] var2, int var3, int var4) { synchronized(BZip2Decompressor_state) { @@ -29,7 +29,7 @@ public final class BZip2Decompressor { BZip2Decompressor_state.bsLive = 0; BZip2Decompressor_state.bsBuff = 0; BZip2Decompressor_state.nextBit_unused = 0; - BZip2Decompressor_state.field3718 = 0; + BZip2Decompressor_state.field3742 = 0; BZip2Decompressor_decompress(BZip2Decompressor_state); var1 -= BZip2Decompressor_state.outputLength; BZip2Decompressor_state.inputArray = null; @@ -38,21 +38,21 @@ public final class BZip2Decompressor { } } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Lky;)V" + signature = "(Lko;)V" ) - static void method5897(BZip2State var0) { + static void method5895(BZip2State var0) { byte var2 = var0.out_char; int var3 = var0.su_rNToGo; int var4 = var0.nblocks_used; int var5 = var0.su_ch2; - int[] var6 = class162.BZip2Decompressor_block; - int var7 = var0.field3720; + int[] var6 = FillMode.BZip2Decompressor_block; + int var7 = var0.field3738; byte[] var8 = var0.outputArray; int var9 = var0.next_out; int var10 = var0.outputLength; - int var12 = var0.field3745 + 1; + int var12 = var0.field3756 + 1; label61: while (true) { @@ -148,25 +148,25 @@ public final class BZip2Decompressor { break; } - int var13 = var0.field3718; - var0.field3718 += var10 - var10; - if (var0.field3718 < var13) { + int var13 = var0.field3742; + var0.field3742 += var10 - var10; + if (var0.field3742 < var13) { } var0.out_char = var2; var0.su_rNToGo = var3; var0.nblocks_used = var4; var0.su_ch2 = var5; - class162.BZip2Decompressor_block = var6; - var0.field3720 = var7; + FillMode.BZip2Decompressor_block = var6; + var0.field3738 = var7; var0.outputArray = var8; var0.next_out = var9; var0.outputLength = var10; } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Lky;)V" + signature = "(Lko;)V" ) @Export("BZip2Decompressor_decompress") static void BZip2Decompressor_decompress(BZip2State var0) { @@ -193,8 +193,8 @@ public final class BZip2Decompressor { int[] var24 = null; int[] var25 = null; var0.blockSize100k = 1410065408; - if (class162.BZip2Decompressor_block == null) { - class162.BZip2Decompressor_block = new int[var0.blockSize100k * 100000]; + if (FillMode.BZip2Decompressor_block == null) { + FillMode.BZip2Decompressor_block = new int[var0.blockSize100k * 100000]; } boolean var26 = true; @@ -430,7 +430,7 @@ public final class BZip2Decompressor { } var10002 = var0.unzftab[var0.seqToUnseq[var1 & 255] & 255]++; - class162.BZip2Decompressor_block[var47] = var0.seqToUnseq[var1 & 255] & 255; + FillMode.BZip2Decompressor_block[var47] = var0.seqToUnseq[var1 & 255] & 255; ++var47; if (var45 == 0) { ++var43; @@ -489,7 +489,7 @@ public final class BZip2Decompressor { var10000 = var0.unzftab; for (var10000[var1 & 255] += var48; var48 > 0; --var48) { - class162.BZip2Decompressor_block[var47] = var1 & 255; + FillMode.BZip2Decompressor_block[var47] = var1 & 255; ++var47; } } @@ -509,22 +509,22 @@ public final class BZip2Decompressor { } for (var36 = 0; var36 < var47; ++var36) { - var1 = (byte)(class162.BZip2Decompressor_block[var36] & 255); - var10000 = class162.BZip2Decompressor_block; + var1 = (byte)(FillMode.BZip2Decompressor_block[var36] & 255); + var10000 = FillMode.BZip2Decompressor_block; int var10001 = var0.cftab[var1 & 255]; var10000[var10001] |= var36 << 8; var10002 = var0.cftab[var1 & 255]++; } - var0.field3720 = class162.BZip2Decompressor_block[var0.originalPointer] >> 8; + var0.field3738 = FillMode.BZip2Decompressor_block[var0.originalPointer] >> 8; var0.nblocks_used = 0; - var0.field3720 = class162.BZip2Decompressor_block[var0.field3720]; - var0.su_ch2 = (byte)(var0.field3720 & 255); - var0.field3720 >>= 8; + var0.field3738 = FillMode.BZip2Decompressor_block[var0.field3738]; + var0.su_ch2 = (byte)(var0.field3738 & 255); + var0.field3738 >>= 8; ++var0.nblocks_used; - var0.field3745 = var47; - method5897(var0); - if (var0.field3745 + 1 == var0.nblocks_used && var0.su_rNToGo == 0) { + var0.field3756 = var47; + method5895(var0); + if (var0.field3756 + 1 == var0.nblocks_used && var0.su_rNToGo == 0) { var26 = true; break; } @@ -538,27 +538,27 @@ public final class BZip2Decompressor { } } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(Lky;)B" + signature = "(Lko;)B" ) @Export("BZip2Decompressor_readNextByte") static byte BZip2Decompressor_readNextByte(BZip2State var0) { return (byte)BZip2Decompressor_readBits(8, var0); } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(Lky;)B" + signature = "(Lko;)B" ) @Export("BZip2Decompressor_readNextBit") static byte BZip2Decompressor_readNextBit(BZip2State var0) { return (byte)BZip2Decompressor_readBits(1, var0); } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(ILky;)I" + signature = "(ILko;)I" ) @Export("BZip2Decompressor_readBits") static int BZip2Decompressor_readBits(int var0, BZip2State var1) { @@ -576,9 +576,9 @@ public final class BZip2Decompressor { return var2; } - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "(Lky;)V" + signature = "(Lko;)V" ) @Export("makeMaps") static void makeMaps(BZip2State var0) { @@ -593,7 +593,7 @@ public final class BZip2Decompressor { } - @ObfuscatedName("o") + @ObfuscatedName("y") @Export("BZip2Decompressor_createHuffmanTables") static void BZip2Decompressor_createHuffmanTables(int[] var0, int[] var1, int[] var2, byte[] var3, int var4, int var5, int var6) { int var7 = 0; diff --git a/runescape-client/src/main/java/BZip2State.java b/runescape-client/src/main/java/BZip2State.java index fe50f929c4..8f828f534d 100644 --- a/runescape-client/src/main/java/BZip2State.java +++ b/runescape-client/src/main/java/BZip2State.java @@ -2,168 +2,169 @@ import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; +import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ky") +@ObfuscatedName("ko") @Implements("BZip2State") public final class BZip2State { - @ObfuscatedName("a") - final int field3709; - @ObfuscatedName("t") - final int field3732; - @ObfuscatedName("n") - final int field3734; - @ObfuscatedName("q") - final int field3711; - @ObfuscatedName("v") - final int field3712; - @ObfuscatedName("l") - final int field3713; - @ObfuscatedName("c") + @ObfuscatedName("u") + final int field3731; + @ObfuscatedName("f") + final int field3720; + @ObfuscatedName("b") + final int field3733; + @ObfuscatedName("g") + final int field3722; + @ObfuscatedName("z") + final int field3723; + @ObfuscatedName("p") + final int field3724; + @ObfuscatedName("h") @Export("inputArray") byte[] inputArray; - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedGetter( - intValue = -502427743 + intValue = 2112153425 ) @Export("nextByte") int nextByte; - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedGetter( - intValue = -561445913 + intValue = -604029507 ) @Export("nextBit_unused") int nextBit_unused; - @ObfuscatedName("d") + @ObfuscatedName("i") @Export("outputArray") byte[] outputArray; - @ObfuscatedName("m") + @ObfuscatedName("k") @ObfuscatedGetter( - intValue = -871682081 + intValue = 101751211 ) @Export("next_out") int next_out; - @ObfuscatedName("p") + @ObfuscatedName("x") @ObfuscatedGetter( - intValue = -661840641 + intValue = 1229248277 ) @Export("outputLength") int outputLength; - @ObfuscatedName("h") + @ObfuscatedName("o") @ObfuscatedGetter( - intValue = 77506983 + intValue = 1913236213 ) - int field3718; - @ObfuscatedName("k") + int field3742; + @ObfuscatedName("e") @Export("out_char") byte out_char; - @ObfuscatedName("x") + @ObfuscatedName("n") @ObfuscatedGetter( - intValue = -250901683 + intValue = -975314591 ) @Export("su_rNToGo") int su_rNToGo; - @ObfuscatedName("j") + @ObfuscatedName("r") @ObfuscatedGetter( - intValue = 2016386947 + intValue = 843438185 ) @Export("bsBuff") int bsBuff; - @ObfuscatedName("r") + @ObfuscatedName("c") @ObfuscatedGetter( - intValue = 1150627855 + intValue = 1790725095 ) @Export("bsLive") int bsLive; - @ObfuscatedName("e") + @ObfuscatedName("a") @ObfuscatedGetter( - intValue = 1637628928 + intValue = 2072280064 ) @Export("blockSize100k") int blockSize100k; - @ObfuscatedName("s") + @ObfuscatedName("d") @ObfuscatedGetter( - intValue = 1744345569 + intValue = -233574369 ) @Export("originalPointer") int originalPointer; - @ObfuscatedName("b") + @ObfuscatedName("s") @ObfuscatedGetter( - intValue = 1139360211 + intValue = 396288217 ) - int field3720; - @ObfuscatedName("z") + int field3738; + @ObfuscatedName("t") @ObfuscatedGetter( - intValue = -2116705151 + intValue = -1359010819 ) @Export("su_ch2") int su_ch2; - @ObfuscatedName("f") + @ObfuscatedName("m") @Export("unzftab") int[] unzftab; - @ObfuscatedName("g") + @ObfuscatedName("v") @ObfuscatedGetter( - intValue = -271375789 + intValue = -197163901 ) @Export("nblocks_used") int nblocks_used; - @ObfuscatedName("w") + @ObfuscatedName("q") @Export("cftab") int[] cftab; - @ObfuscatedName("y") + @ObfuscatedName("j") @ObfuscatedGetter( - intValue = 1457092991 + intValue = 1651646591 ) @Export("nInUse") int nInUse; - @ObfuscatedName("aa") + @ObfuscatedName("af") @Export("inUse") boolean[] inUse; - @ObfuscatedName("aw") + @ObfuscatedName("ad") @Export("inUse16") boolean[] inUse16; - @ObfuscatedName("ar") + @ObfuscatedName("am") @Export("seqToUnseq") byte[] seqToUnseq; - @ObfuscatedName("aq") + @ObfuscatedName("ai") @Export("ll8") byte[] ll8; - @ObfuscatedName("ad") + @ObfuscatedName("ag") @Export("getAndMoveToFrontDecode_yy") int[] getAndMoveToFrontDecode_yy; - @ObfuscatedName("ag") + @ObfuscatedName("ao") @Export("selector") byte[] selector; - @ObfuscatedName("ak") + @ObfuscatedName("aw") @Export("selectorMtf") byte[] selectorMtf; - @ObfuscatedName("av") + @ObfuscatedName("ak") @Export("temp_charArray2d") byte[][] temp_charArray2d; - @ObfuscatedName("am") + @ObfuscatedName("aa") @Export("limit") int[][] limit; @ObfuscatedName("ab") @Export("base") int[][] base; - @ObfuscatedName("ax") + @ObfuscatedName("ar") @Export("perm") int[][] perm; - @ObfuscatedName("al") + @ObfuscatedName("av") @Export("minLens") int[] minLens; - @ObfuscatedName("ap") + @ObfuscatedName("aq") @ObfuscatedGetter( - intValue = 1163964567 + intValue = -1771574853 ) - int field3745; + int field3756; BZip2State() { - this.field3709 = 4096; - this.field3732 = 16; - this.field3734 = 258; - this.field3711 = 6; - this.field3712 = 50; - this.field3713 = 18002; + this.field3731 = 4096; + this.field3720 = 16; + this.field3733 = 258; + this.field3722 = 6; + this.field3723 = 50; + this.field3724 = 18002; this.nextByte = 0; this.next_out = 0; this.unzftab = new int[256]; @@ -181,4 +182,16 @@ public final class BZip2State { this.perm = new int[6][258]; this.minLens = new int[6]; } + + @ObfuscatedName("z") + @ObfuscatedSignature( + signature = "(Lhf;Ljava/lang/String;Ljava/lang/String;I)Llm;", + garbageValue = "-972225948" + ) + @Export("SpriteBuffer_getIndexedSpriteByName") + public static IndexedSprite SpriteBuffer_getIndexedSpriteByName(AbstractArchive var0, String var1, String var2) { + int var3 = var0.getGroupId(var1); + int var4 = var0.getFileId(var3, var2); + return UserComparator6.method3491(var0, var3, var4); + } } diff --git a/runescape-client/src/main/java/BoundaryObject.java b/runescape-client/src/main/java/BoundaryObject.java index 7f8e3d023c..4111c48f5c 100644 --- a/runescape-client/src/main/java/BoundaryObject.java +++ b/runescape-client/src/main/java/BoundaryObject.java @@ -3,63 +3,68 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; +import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("et") +@ObfuscatedName("eu") @Implements("BoundaryObject") public final class BoundaryObject { - @ObfuscatedName("r") - static String[] field1859; - @ObfuscatedName("a") + @ObfuscatedName("q") @ObfuscatedGetter( - intValue = -14166733 + intValue = -37914995 + ) + @Export("canvasWidth") + public static int canvasWidth; + @ObfuscatedName("u") + @ObfuscatedGetter( + intValue = 1092947403 ) @Export("tileHeight") int tileHeight; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = -591706183 + intValue = -1863121231 ) @Export("x") int x; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = -1799577875 + intValue = 523556867 ) @Export("y") int y; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = 1720763557 + intValue = -470947197 ) @Export("orientationA") int orientationA; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = 1635831629 + intValue = 113063737 ) @Export("orientationB") int orientationB; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "Lep;" + signature = "Lee;" ) @Export("entity1") public Entity entity1; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "Lep;" + signature = "Lee;" ) @Export("entity2") public Entity entity2; - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedGetter( - longValue = 7223116526443198487L + longValue = 667705109801803207L ) @Export("tag") public long tag; - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedGetter( - intValue = 1447474805 + intValue = 1624595735 ) @Export("flags") int flags; @@ -69,101 +74,245 @@ public final class BoundaryObject { this.flags = 0; } - @ObfuscatedName("ko") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "1336245402" + signature = "(IB)I", + garbageValue = "17" ) - static void method3393() { - for (InterfaceParent var0 = (InterfaceParent)Client.interfaceParents.first(); var0 != null; var0 = (InterfaceParent)Client.interfaceParents.next()) { - int var1 = var0.group; - if (TextureProvider.loadInterface(var1)) { - boolean var2 = true; - Widget[] var3 = Widget.Widget_interfaceComponents[var1]; - - int var4; - for (var4 = 0; var4 < var3.length; ++var4) { - if (var3[var4] != null) { - var2 = var3[var4].isIf3; - break; - } - } - - if (!var2) { - var4 = (int)var0.key; - Widget var5 = PacketBufferNode.getWidget(var4); - if (var5 != null) { - GrandExchangeOfferAgeComparator.invalidateWidget(var5); - } - } - } - } - + public static int method3312(int var0) { + var0 = (var0 & 1431655765) + (var0 >>> 1 & 1431655765); + var0 = (var0 >>> 2 & 858993459) + (var0 & 858993459); + var0 = var0 + (var0 >>> 4) & 252645135; + var0 += var0 >>> 8; + var0 += var0 >>> 16; + return var0 & 255; } - @ObfuscatedName("lw") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Ljava/lang/String;ZI)V", - garbageValue = "-2087337765" + signature = "(Ljava/lang/CharSequence;II[BII)I", + garbageValue = "549909361" ) - @Export("findItemDefinitions") - static void findItemDefinitions(String var0, boolean var1) { - var0 = var0.toLowerCase(); - short[] var2 = new short[16]; - int var3 = 0; + @Export("encodeStringCp1252") + public static int encodeStringCp1252(CharSequence var0, int var1, int var2, byte[] var3, int var4) { + int var5 = var2 - var1; - for (int var4 = 0; var4 < ItemDefinition.ItemDefinition_fileCount; ++var4) { - ItemDefinition var5 = class222.ItemDefinition_get(var4); - if ((!var1 || var5.isTradable) && var5.noteTemplate == -1 && var5.name.toLowerCase().indexOf(var0) != -1) { - if (var3 >= 250) { - MouseHandler.foundItemIdCount = -1; - UserComparator4.foundItemIds = null; - return; - } - - if (var3 >= var2.length) { - short[] var6 = new short[var2.length * 2]; - - for (int var7 = 0; var7 < var3; ++var7) { - var6[var7] = var2[var7]; - } - - var2 = var6; - } - - var2[var3++] = (short)var4; + for (int var6 = 0; var6 < var5; ++var6) { + char var7 = var0.charAt(var6 + var1); + if (var7 > 0 && var7 < 128 || var7 >= 160 && var7 <= 255) { + var3[var6 + var4] = (byte)var7; + } else if (var7 == 8364) { + var3[var6 + var4] = -128; + } else if (var7 == 8218) { + var3[var6 + var4] = -126; + } else if (var7 == 402) { + var3[var6 + var4] = -125; + } else if (var7 == 8222) { + var3[var6 + var4] = -124; + } else if (var7 == 8230) { + var3[var6 + var4] = -123; + } else if (var7 == 8224) { + var3[var6 + var4] = -122; + } else if (var7 == 8225) { + var3[var6 + var4] = -121; + } else if (var7 == 710) { + var3[var6 + var4] = -120; + } else if (var7 == 8240) { + var3[var6 + var4] = -119; + } else if (var7 == 352) { + var3[var6 + var4] = -118; + } else if (var7 == 8249) { + var3[var6 + var4] = -117; + } else if (var7 == 338) { + var3[var6 + var4] = -116; + } else if (var7 == 381) { + var3[var6 + var4] = -114; + } else if (var7 == 8216) { + var3[var6 + var4] = -111; + } else if (var7 == 8217) { + var3[var6 + var4] = -110; + } else if (var7 == 8220) { + var3[var6 + var4] = -109; + } else if (var7 == 8221) { + var3[var6 + var4] = -108; + } else if (var7 == 8226) { + var3[var6 + var4] = -107; + } else if (var7 == 8211) { + var3[var6 + var4] = -106; + } else if (var7 == 8212) { + var3[var6 + var4] = -105; + } else if (var7 == 732) { + var3[var6 + var4] = -104; + } else if (var7 == 8482) { + var3[var6 + var4] = -103; + } else if (var7 == 353) { + var3[var6 + var4] = -102; + } else if (var7 == 8250) { + var3[var6 + var4] = -101; + } else if (var7 == 339) { + var3[var6 + var4] = -100; + } else if (var7 == 382) { + var3[var6 + var4] = -98; + } else if (var7 == 376) { + var3[var6 + var4] = -97; + } else { + var3[var6 + var4] = 63; } } - UserComparator4.foundItemIds = var2; - WorldMapManager.foundItemIndex = 0; - MouseHandler.foundItemIdCount = var3; - String[] var8 = new String[MouseHandler.foundItemIdCount]; - - for (int var9 = 0; var9 < MouseHandler.foundItemIdCount; ++var9) { - var8[var9] = class222.ItemDefinition_get(var2[var9]).name; - } - - short[] var10 = UserComparator4.foundItemIds; - RouteStrategy.sortItemsByName(var8, var10, 0, var8.length - 1); + return var5; } - @ObfuscatedName("lj") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "124156386" + signature = "(B)V", + garbageValue = "-1" ) - static void method3394() { - if (GrandExchangeOfferWorldComparator.field30 != null) { - Client.field900 = Client.cycle; - GrandExchangeOfferWorldComparator.field30.method4482(); + public static void method3311() { + FloorUnderlayDefinition.FloorUnderlayDefinition_cached.clear(); + } - for (int var0 = 0; var0 < Client.players.length; ++var0) { - if (Client.players[var0] != null) { - GrandExchangeOfferWorldComparator.field30.method4476(UserComparator8.baseX * 64 + (Client.players[var0].x >> 7), HealthBar.baseY * 64 + (Client.players[var0].y >> 7)); - } + @ObfuscatedName("ao") + @ObfuscatedSignature( + signature = "(ILci;ZB)I", + garbageValue = "0" + ) + static int method3313(int var0, Script var1, boolean var2) { + int var3; + int var4; + if (var0 == ScriptOpcodes.ADD) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var3 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var4 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3 + var4; + return 1; + } else if (var0 == ScriptOpcodes.SUB) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var3 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var4 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3 - var4; + return 1; + } else if (var0 == ScriptOpcodes.MULTIPLY) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var3 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var4 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3 * var4; + return 1; + } else if (var0 == ScriptOpcodes.DIV) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var3 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var4 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3 / var4; + return 1; + } else if (var0 == ScriptOpcodes.RANDOM) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = (int)(Math.random() * (double)var3); + return 1; + } else if (var0 == ScriptOpcodes.RANDOMINC) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = (int)(Math.random() * (double)(var3 + 1)); + return 1; + } else if (var0 == ScriptOpcodes.INTERPOLATE) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 5; + var3 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var4 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + int var5 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 2]; + int var6 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 3]; + int var7 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 4]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3 + (var7 - var5) * (var4 - var3) / (var6 - var5); + return 1; + } else if (var0 == ScriptOpcodes.ADDPERCENT) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var3 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var4 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3 + var3 * var4 / 100; + return 1; + } else if (var0 == ScriptOpcodes.SETBIT) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var3 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var4 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3 | 1 << var4; + return 1; + } else if (var0 == ScriptOpcodes.CLEARBIT) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var3 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var4 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3 & -1 - (1 << var4); + return 1; + } else if (var0 == ScriptOpcodes.TESTBIT) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var3 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var4 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = (var3 & 1 << var4) != 0 ? 1 : 0; + return 1; + } else if (var0 == ScriptOpcodes.MOD) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var3 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var4 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3 % var4; + return 1; + } else if (var0 == ScriptOpcodes.POW) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var3 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var4 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + if (var3 == 0) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = (int)Math.pow((double)var3, (double)var4); } - } + return 1; + } else if (var0 == ScriptOpcodes.INVPOW) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var3 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var4 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + if (var3 == 0) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + return 1; + } else { + switch(var4) { + case 0: + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Integer.MAX_VALUE; + break; + case 1: + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3; + break; + case 2: + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = (int)Math.sqrt((double)var3); + break; + case 3: + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = (int)Math.cbrt((double)var3); + break; + case 4: + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = (int)Math.sqrt(Math.sqrt((double)var3)); + break; + default: + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = (int)Math.pow((double)var3, 1.0D / (double)var4); + } + + return 1; + } + } else if (var0 == ScriptOpcodes.AND) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var3 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var4 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3 & var4; + return 1; + } else if (var0 == ScriptOpcodes.OR) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var3 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var4 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3 | var4; + return 1; + } else if (var0 == ScriptOpcodes.SCALE) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 3; + long var9 = (long)Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + long var11 = (long)Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + long var13 = (long)Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 2]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = (int)(var9 * var13 / var11); + return 1; + } else { + return 2; + } } } diff --git a/runescape-client/src/main/java/Bounds.java b/runescape-client/src/main/java/Bounds.java index dc7a080ec3..31fd5a44e9 100644 --- a/runescape-client/src/main/java/Bounds.java +++ b/runescape-client/src/main/java/Bounds.java @@ -4,30 +4,30 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ls") +@ObfuscatedName("lw") @Implements("Bounds") public class Bounds { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedGetter( - intValue = -1735724601 + intValue = -460052355 ) @Export("lowX") public int lowX; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = -701395687 + intValue = -2012134471 ) @Export("lowY") public int lowY; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = -825003219 + intValue = -295033527 ) @Export("highX") public int highX; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = 1589322753 + intValue = 168990255 ) @Export("highY") public int highY; @@ -41,10 +41,10 @@ public class Bounds { this(0, 0, var1, var2); } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(IIB)V", - garbageValue = "0" + signature = "(III)V", + garbageValue = "2660177" ) @Export("setLow") public void setLow(int var1, int var2) { @@ -52,10 +52,10 @@ public class Bounds { this.lowY = var2; } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(IIB)V", - garbageValue = "-111" + signature = "(III)V", + garbageValue = "-2094067134" ) @Export("setHigh") public void setHigh(int var1, int var2) { @@ -63,22 +63,22 @@ public class Bounds { this.highY = var2; } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Lls;Lls;I)V", - garbageValue = "478225673" + signature = "(Llw;Llw;I)V", + garbageValue = "-1378813027" ) - public void method6081(Bounds var1, Bounds var2) { - this.method6097(var1, var2); - this.method6085(var1, var2); + public void method6069(Bounds var1, Bounds var2) { + this.method6070(var1, var2); + this.method6071(var1, var2); } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(Lls;Lls;I)V", - garbageValue = "-1348909503" + signature = "(Llw;Llw;B)V", + garbageValue = "6" ) - void method6097(Bounds var1, Bounds var2) { + void method6070(Bounds var1, Bounds var2) { var2.lowX = this.lowX; var2.highX = this.highX; if (this.lowX < var1.lowX) { @@ -96,12 +96,12 @@ public class Bounds { } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(Lls;Lls;B)V", - garbageValue = "1" + signature = "(Llw;Llw;B)V", + garbageValue = "72" ) - void method6085(Bounds var1, Bounds var2) { + void method6071(Bounds var1, Bounds var2) { var2.lowY = this.lowY; var2.highY = this.highY; if (this.lowY < var1.lowY) { @@ -109,8 +109,8 @@ public class Bounds { var2.lowY = var1.lowY; } - if (var2.method6087() > var1.method6087()) { - var2.highY -= var2.method6087() - var1.method6087(); + if (var2.method6085() > var1.method6085()) { + var2.highY -= var2.method6085() - var1.method6085(); } if (var2.highY < 0) { @@ -119,22 +119,22 @@ public class Bounds { } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(B)I", - garbageValue = "-20" + signature = "(S)I", + garbageValue = "-14495" ) int method6086() { return this.highX + this.lowX; } - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "(B)I", - garbageValue = "-30" + signature = "(I)I", + garbageValue = "-1630571197" ) - int method6087() { - return this.lowY + this.highY; + int method6085() { + return this.highY + this.lowY; } public String toString() { diff --git a/runescape-client/src/main/java/Buddy.java b/runescape-client/src/main/java/Buddy.java index 5c122cb3cf..f151e5240a 100644 --- a/runescape-client/src/main/java/Buddy.java +++ b/runescape-client/src/main/java/Buddy.java @@ -4,24 +4,24 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("jx") +@ObfuscatedName("jt") @Implements("Buddy") public class Buddy extends User { - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = 1646057305 + intValue = -1985676249 ) @Export("world") public int world; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = 1797004239 + intValue = 1502929201 ) @Export("int2") public int int2; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedGetter( - intValue = 48717521 + intValue = -588738279 ) @Export("rank") public int rank; @@ -30,10 +30,10 @@ public class Buddy extends User { this.world = -1; } - @ObfuscatedName("bx") + @ObfuscatedName("ar") @ObfuscatedSignature( - signature = "(IIB)V", - garbageValue = "-15" + signature = "(IIS)V", + garbageValue = "13296" ) @Export("set") void set(int var1, int var2) { @@ -41,120 +41,37 @@ public class Buddy extends User { this.int2 = var2; } - @ObfuscatedName("bl") + @ObfuscatedName("av") @ObfuscatedSignature( signature = "(I)I", - garbageValue = "-319513783" + garbageValue = "1862219925" ) @Export("getWorld") public int getWorld() { return this.world; } - @ObfuscatedName("bh") + @ObfuscatedName("aq") @ObfuscatedSignature( - signature = "(B)Z", - garbageValue = "0" + signature = "(I)Z", + garbageValue = "-127464442" ) @Export("hasWorld") public boolean hasWorld() { return this.world > 0; } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(CI)C", - garbageValue = "129853061" + signature = "(I)V", + garbageValue = "595265698" ) - public static char method5286(char var0) { - switch(var0) { - case ' ': - case '-': - case '_': - case ' ': - return '_'; - case '#': - case '[': - case ']': - return var0; - case 'À': - case 'Á': - case 'Â': - case 'Ã': - case 'Ä': - case 'à': - case 'á': - case 'â': - case 'ã': - case 'ä': - return 'a'; - case 'Ç': - case 'ç': - return 'c'; - case 'È': - case 'É': - case 'Ê': - case 'Ë': - case 'è': - case 'é': - case 'ê': - case 'ë': - return 'e'; - case 'Í': - case 'Î': - case 'Ï': - case 'í': - case 'î': - case 'ï': - return 'i'; - case 'Ñ': - case 'ñ': - return 'n'; - case 'Ò': - case 'Ó': - case 'Ô': - case 'Õ': - case 'Ö': - case 'ò': - case 'ó': - case 'ô': - case 'õ': - case 'ö': - return 'o'; - case 'Ù': - case 'Ú': - case 'Û': - case 'Ü': - case 'ù': - case 'ú': - case 'û': - case 'ü': - return 'u'; - case 'ß': - return 'b'; - case 'ÿ': - case 'Ÿ': - return 'y'; - default: - return Character.toLowerCase(var0); + static void method5251() { + if (Client.Login_isUsernameRemembered && Login.Login_username != null && Login.Login_username.length() > 0) { + Login.currentLoginField = 1; + } else { + Login.currentLoginField = 0; } - } - @ObfuscatedName("ah") - @ObfuscatedSignature( - signature = "(IB)I", - garbageValue = "116" - ) - static int method5298(int var0) { - return (int)Math.pow(2.0D, (double)((float)var0 / 256.0F + 7.0F)); - } - - @ObfuscatedName("bh") - @ObfuscatedSignature( - signature = "(Ljava/lang/String;I)I", - garbageValue = "-2095111578" - ) - public static int method5297(String var0) { - return var0.length() + 2; } } diff --git a/runescape-client/src/main/java/BuddyRankComparator.java b/runescape-client/src/main/java/BuddyRankComparator.java index 39f5c6a4f1..f943d956e1 100644 --- a/runescape-client/src/main/java/BuddyRankComparator.java +++ b/runescape-client/src/main/java/BuddyRankComparator.java @@ -1,18 +1,27 @@ import net.runelite.mapping.Export; import net.runelite.mapping.Implements; +import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("fs") +@ObfuscatedName("fj") @Implements("BuddyRankComparator") public class BuddyRankComparator extends AbstractUserComparator { - @ObfuscatedName("do") - @ObfuscatedSignature( - signature = "Lij;" + @ObfuscatedName("rm") + @ObfuscatedGetter( + intValue = -773868241 ) - @Export("archive0") - static Archive archive0; - @ObfuscatedName("a") + static int field1998; + @ObfuscatedName("e") + @ObfuscatedSignature( + signature = "Lfp;" + ) + @Export("clock") + protected static Clock clock; + @ObfuscatedName("gd") + @Export("regionMapArchiveIds") + static int[] regionMapArchiveIds; + @ObfuscatedName("u") @Export("reversed") final boolean reversed; @@ -20,10 +29,10 @@ public class BuddyRankComparator extends AbstractUserComparator { this.reversed = var1; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Ljx;Ljx;I)I", - garbageValue = "63405397" + signature = "(Ljt;Ljt;I)I", + garbageValue = "-525022889" ) @Export("compareBuddy") int compareBuddy(Buddy var1, Buddy var2) { @@ -38,60 +47,16 @@ public class BuddyRankComparator extends AbstractUserComparator { return this.compareBuddy((Buddy)var1, (Buddy)var2); } - @ObfuscatedName("n") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Lij;IIIBZI)V", - garbageValue = "-1505675157" + signature = "(Lhf;Lhf;Lhf;Lgz;I)Z", + garbageValue = "-2130405669" ) - @Export("requestNetFile") - static void requestNetFile(Archive var0, int var1, int var2, int var3, byte var4, boolean var5) { - long var6 = (long)((var1 << 16) + var2); - NetFileRequest var8 = (NetFileRequest)NetCache.NetCache_pendingPriorityWrites.get(var6); - if (var8 == null) { - var8 = (NetFileRequest)NetCache.NetCache_pendingPriorityResponses.get(var6); - if (var8 == null) { - var8 = (NetFileRequest)NetCache.NetCache_pendingWrites.get(var6); - if (var8 != null) { - if (var5) { - var8.removeDual(); - NetCache.NetCache_pendingPriorityWrites.put(var8, var6); - --NetCache.NetCache_pendingWritesCount; - ++NetCache.NetCache_pendingPriorityWritesCount; - } - - } else { - if (!var5) { - var8 = (NetFileRequest)NetCache.NetCache_pendingResponses.get(var6); - if (var8 != null) { - return; - } - } - - var8 = new NetFileRequest(); - var8.archive = var0; - var8.crc = var3; - var8.padding = var4; - if (var5) { - NetCache.NetCache_pendingPriorityWrites.put(var8, var6); - ++NetCache.NetCache_pendingPriorityWritesCount; - } else { - NetCache.NetCache_pendingWritesQueue.addFirst(var8); - NetCache.NetCache_pendingWrites.put(var8, var6); - ++NetCache.NetCache_pendingWritesCount; - } - - } - } - } - } - - @ObfuscatedName("p") - @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "2092280519" - ) - public static void method3568() { - SequenceDefinition.SequenceDefinition_cached.clear(); - SequenceDefinition.SequenceDefinition_cachedFrames.clear(); + public static boolean method3483(AbstractArchive var0, AbstractArchive var1, AbstractArchive var2, MidiPcmStream var3) { + class197.musicPatchesArchive = var0; + class197.musicSamplesArchive = var1; + class197.soundEffectsArchive = var2; + FaceNormal.midiPcmStream = var3; + return true; } } diff --git a/runescape-client/src/main/java/Buffer.java b/runescape-client/src/main/java/Buffer.java index c8aa009bda..794dce2579 100644 --- a/runescape-client/src/main/java/Buffer.java +++ b/runescape-client/src/main/java/Buffer.java @@ -5,21 +5,21 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("kc") +@ObfuscatedName("kg") @Implements("Buffer") public class Buffer extends Node { - @ObfuscatedName("o") + @ObfuscatedName("y") @Export("crc32Table") static int[] crc32Table; - @ObfuscatedName("d") + @ObfuscatedName("i") @Export("crc64Table") static long[] crc64Table; - @ObfuscatedName("l") + @ObfuscatedName("p") @Export("array") public byte[] array; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedGetter( - intValue = -827254609 + intValue = -1187800467 ) @Export("offset") public int offset; @@ -48,7 +48,7 @@ public class Buffer extends Node { long var4 = (long)var2; for (int var3 = 0; var3 < 8; ++var3) { - if ((var4 & 1L) == 1L) { + if (1L == (var4 & 1L)) { var4 = var4 >>> 1 ^ -3932672073523589310L; } else { var4 >>>= 1; @@ -61,7 +61,7 @@ public class Buffer extends Node { } public Buffer(int var1) { - this.array = World.ByteArrayPool_getArray(var1); + this.array = UserComparator9.ByteArrayPool_getArray(var1); this.offset = 0; } @@ -70,34 +70,34 @@ public class Buffer extends Node { this.offset = 0; } - @ObfuscatedName("ai") + @ObfuscatedName("ap") @ObfuscatedSignature( signature = "(B)V", - garbageValue = "67" + garbageValue = "-46" ) @Export("releaseArray") public void releaseArray() { if (this.array != null) { - class191.ByteArrayPool_release(this.array); + Skeleton.ByteArrayPool_release(this.array); } this.array = null; } - @ObfuscatedName("ac") + @ObfuscatedName("an") @ObfuscatedSignature( signature = "(II)V", - garbageValue = "-124467030" + garbageValue = "2118821041" ) @Export("writeByte") public void writeByte(int var1) { this.array[++this.offset - 1] = (byte)var1; } - @ObfuscatedName("at") + @ObfuscatedName("al") @ObfuscatedSignature( - signature = "(II)V", - garbageValue = "-469527659" + signature = "(IB)V", + garbageValue = "-1" ) @Export("writeShort") public void writeShort(int var1) { @@ -105,10 +105,10 @@ public class Buffer extends Node { this.array[++this.offset - 1] = (byte)var1; } - @ObfuscatedName("as") + @ObfuscatedName("ay") @ObfuscatedSignature( - signature = "(II)V", - garbageValue = "-1060098226" + signature = "(IB)V", + garbageValue = "0" ) @Export("writeMedium") public void writeMedium(int var1) { @@ -117,10 +117,10 @@ public class Buffer extends Node { this.array[++this.offset - 1] = (byte)var1; } - @ObfuscatedName("ba") + @ObfuscatedName("ax") @ObfuscatedSignature( - signature = "(II)V", - garbageValue = "-1202665318" + signature = "(IB)V", + garbageValue = "56" ) @Export("writeInt") public void writeInt(int var1) { @@ -130,7 +130,7 @@ public class Buffer extends Node { this.array[++this.offset - 1] = (byte)var1; } - @ObfuscatedName("bg") + @ObfuscatedName("au") @Export("writeLongMedium") public void writeLongMedium(long var1) { this.array[++this.offset - 1] = (byte)((int)(var1 >> 40)); @@ -141,7 +141,7 @@ public class Buffer extends Node { this.array[++this.offset - 1] = (byte)((int)var1); } - @ObfuscatedName("bc") + @ObfuscatedName("as") @Export("writeLong") public void writeLong(long var1) { this.array[++this.offset - 1] = (byte)((int)(var1 >> 56)); @@ -154,20 +154,20 @@ public class Buffer extends Node { this.array[++this.offset - 1] = (byte)((int)var1); } - @ObfuscatedName("bd") + @ObfuscatedName("ah") @ObfuscatedSignature( - signature = "(ZI)V", - garbageValue = "-802962767" + signature = "(ZB)V", + garbageValue = "14" ) @Export("writeBoolean") public void writeBoolean(boolean var1) { this.writeByte(var1 ? 1 : 0); } - @ObfuscatedName("bl") + @ObfuscatedName("bo") @ObfuscatedSignature( signature = "(Ljava/lang/String;I)V", - garbageValue = "1119026352" + garbageValue = "-1755897392" ) @Export("writeStringCp1252NullTerminated") public void writeStringCp1252NullTerminated(String var1) { @@ -175,15 +175,15 @@ public class Buffer extends Node { if (var2 >= 0) { throw new IllegalArgumentException(""); } else { - this.offset += GrandExchangeOffer.encodeStringCp1252(var1, 0, var1.length(), this.array, this.offset); + this.offset += BoundaryObject.encodeStringCp1252(var1, 0, var1.length(), this.array, this.offset); this.array[++this.offset - 1] = 0; } } - @ObfuscatedName("bu") + @ObfuscatedName("bx") @ObfuscatedSignature( signature = "(Ljava/lang/String;I)V", - garbageValue = "-1964385686" + garbageValue = "1903174229" ) @Export("writeStringCp1252NullCircumfixed") public void writeStringCp1252NullCircumfixed(String var1) { @@ -192,28 +192,28 @@ public class Buffer extends Node { throw new IllegalArgumentException(""); } else { this.array[++this.offset - 1] = 0; - this.offset += GrandExchangeOffer.encodeStringCp1252(var1, 0, var1.length(), this.array, this.offset); + this.offset += BoundaryObject.encodeStringCp1252(var1, 0, var1.length(), this.array, this.offset); this.array[++this.offset - 1] = 0; } } - @ObfuscatedName("br") + @ObfuscatedName("bu") @ObfuscatedSignature( - signature = "(Ljava/lang/CharSequence;B)V", - garbageValue = "8" + signature = "(Ljava/lang/CharSequence;I)V", + garbageValue = "124331679" ) @Export("writeCESU8") public void writeCESU8(CharSequence var1) { - int var2 = Projectile.method2268(var1); + int var2 = AbstractWorldMapData.method284(var1); this.array[++this.offset - 1] = 0; this.writeVarInt(var2); - this.offset += Entity.method3390(this.array, this.offset, var1); + this.offset += ArchiveDiskAction.method4229(this.array, this.offset, var1); } - @ObfuscatedName("bq") + @ObfuscatedName("bd") @ObfuscatedSignature( - signature = "([BIIS)V", - garbageValue = "-9801" + signature = "([BIIB)V", + garbageValue = "21" ) @Export("writeBytes") public void writeBytes(byte[] var1, int var2, int var3) { @@ -223,10 +223,10 @@ public class Buffer extends Node { } - @ObfuscatedName("bi") + @ObfuscatedName("bn") @ObfuscatedSignature( signature = "(IB)V", - garbageValue = "4" + garbageValue = "1" ) @Export("writeLengthInt") public void writeLengthInt(int var1) { @@ -240,10 +240,10 @@ public class Buffer extends Node { } } - @ObfuscatedName("be") + @ObfuscatedName("bj") @ObfuscatedSignature( - signature = "(IB)V", - garbageValue = "-72" + signature = "(II)V", + garbageValue = "-1717604297" ) @Export("writeLengthShort") public void writeLengthShort(int var1) { @@ -255,10 +255,10 @@ public class Buffer extends Node { } } - @ObfuscatedName("bt") + @ObfuscatedName("bm") @ObfuscatedSignature( - signature = "(II)V", - garbageValue = "-69272234" + signature = "(IB)V", + garbageValue = "67" ) @Export("writeLengthByte") public void writeLengthByte(int var1) { @@ -269,10 +269,10 @@ public class Buffer extends Node { } } - @ObfuscatedName("bs") + @ObfuscatedName("bq") @ObfuscatedSignature( signature = "(II)V", - garbageValue = "2007891987" + garbageValue = "1696071523" ) @Export("writeSmartByteShort") public void writeSmartByteShort(int var1) { @@ -285,10 +285,10 @@ public class Buffer extends Node { } } - @ObfuscatedName("bj") + @ObfuscatedName("bf") @ObfuscatedSignature( signature = "(IB)V", - garbageValue = "97" + garbageValue = "-38" ) @Export("writeVarInt") public void writeVarInt(int var1) { @@ -311,30 +311,30 @@ public class Buffer extends Node { this.writeByte(var1 & 127); } - @ObfuscatedName("bm") + @ObfuscatedName("by") @ObfuscatedSignature( - signature = "(B)I", - garbageValue = "29" + signature = "(I)I", + garbageValue = "981075318" ) @Export("readUnsignedByte") public int readUnsignedByte() { return this.array[++this.offset - 1] & 255; } - @ObfuscatedName("bn") + @ObfuscatedName("br") @ObfuscatedSignature( - signature = "(B)B", - garbageValue = "122" + signature = "(I)B", + garbageValue = "2139724295" ) @Export("readByte") public byte readByte() { return this.array[++this.offset - 1]; } - @ObfuscatedName("bz") + @ObfuscatedName("ba") @ObfuscatedSignature( - signature = "(B)I", - garbageValue = "66" + signature = "(I)I", + garbageValue = "1493264537" ) @Export("readUnsignedShort") public int readUnsignedShort() { @@ -342,10 +342,10 @@ public class Buffer extends Node { return (this.array[this.offset - 1] & 255) + ((this.array[this.offset - 2] & 255) << 8); } - @ObfuscatedName("bo") + @ObfuscatedName("bb") @ObfuscatedSignature( signature = "(I)I", - garbageValue = "1302638663" + garbageValue = "-2064115104" ) @Export("readShort") public int readShort() { @@ -358,10 +358,10 @@ public class Buffer extends Node { return var1; } - @ObfuscatedName("bk") + @ObfuscatedName("bg") @ObfuscatedSignature( - signature = "(B)I", - garbageValue = "0" + signature = "(I)I", + garbageValue = "-142746027" ) @Export("readMedium") public int readMedium() { @@ -369,10 +369,10 @@ public class Buffer extends Node { return ((this.array[this.offset - 3] & 255) << 16) + (this.array[this.offset - 1] & 255) + ((this.array[this.offset - 2] & 255) << 8); } - @ObfuscatedName("bv") + @ObfuscatedName("bw") @ObfuscatedSignature( signature = "(I)I", - garbageValue = "-1932524542" + garbageValue = "1280310408" ) @Export("readInt") public int readInt() { @@ -380,10 +380,10 @@ public class Buffer extends Node { return ((this.array[this.offset - 3] & 255) << 16) + (this.array[this.offset - 1] & 255) + ((this.array[this.offset - 2] & 255) << 8) + ((this.array[this.offset - 4] & 255) << 24); } - @ObfuscatedName("bw") + @ObfuscatedName("be") @ObfuscatedSignature( signature = "(I)J", - garbageValue = "-1857115687" + garbageValue = "-433708522" ) @Export("readLong") public long readLong() { @@ -392,20 +392,20 @@ public class Buffer extends Node { return (var1 << 32) + var3; } - @ObfuscatedName("bb") + @ObfuscatedName("bt") @ObfuscatedSignature( - signature = "(I)Z", - garbageValue = "462936462" + signature = "(S)Z", + garbageValue = "128" ) @Export("readBoolean") public boolean readBoolean() { return (this.readUnsignedByte() & 1) == 1; } - @ObfuscatedName("bf") + @ObfuscatedName("bl") @ObfuscatedSignature( - signature = "(I)Ljava/lang/String;", - garbageValue = "-1021286320" + signature = "(S)Ljava/lang/String;", + garbageValue = "383" ) @Export("readStringCp1252NullTerminatedOrNull") public String readStringCp1252NullTerminatedOrNull() { @@ -417,10 +417,10 @@ public class Buffer extends Node { } } - @ObfuscatedName("by") + @ObfuscatedName("bp") @ObfuscatedSignature( signature = "(I)Ljava/lang/String;", - garbageValue = "-63676026" + garbageValue = "-510997912" ) @Export("readStringCp1252NullTerminated") public String readStringCp1252NullTerminated() { @@ -430,13 +430,13 @@ public class Buffer extends Node { } int var2 = this.offset - var1 - 1; - return var2 == 0 ? "" : class160.decodeStringCp1252(this.array, var1, var2); + return var2 == 0 ? "" : NetCache.decodeStringCp1252(this.array, var1, var2); } - @ObfuscatedName("bp") + @ObfuscatedName("bv") @ObfuscatedSignature( signature = "(I)Ljava/lang/String;", - garbageValue = "445274981" + garbageValue = "-1601573396" ) @Export("readStringCp1252NullCircumfixed") public String readStringCp1252NullCircumfixed() { @@ -450,14 +450,14 @@ public class Buffer extends Node { } int var3 = this.offset - var2 - 1; - return var3 == 0 ? "" : class160.decodeStringCp1252(this.array, var2, var3); + return var3 == 0 ? "" : NetCache.decodeStringCp1252(this.array, var2, var3); } } - @ObfuscatedName("cx") + @ObfuscatedName("bs") @ObfuscatedSignature( signature = "(I)Ljava/lang/String;", - garbageValue = "1958782178" + garbageValue = "-180311328" ) @Export("readCESU8") public String readCESU8() { @@ -527,10 +527,10 @@ public class Buffer extends Node { } } - @ObfuscatedName("cv") + @ObfuscatedName("bz") @ObfuscatedSignature( signature = "([BIII)V", - garbageValue = "-2023216453" + garbageValue = "713077513" ) @Export("readBytes") public void readBytes(byte[] var1, int var2, int var3) { @@ -540,10 +540,10 @@ public class Buffer extends Node { } - @ObfuscatedName("ce") + @ObfuscatedName("bc") @ObfuscatedSignature( - signature = "(I)I", - garbageValue = "1739180184" + signature = "(B)I", + garbageValue = "60" ) @Export("readShortSmart") public int readShortSmart() { @@ -551,10 +551,10 @@ public class Buffer extends Node { return var1 < 128 ? this.readUnsignedByte() - 64 : this.readUnsignedShort() - 49152; } - @ObfuscatedName("cw") + @ObfuscatedName("bh") @ObfuscatedSignature( signature = "(I)I", - garbageValue = "1284153115" + garbageValue = "896603690" ) @Export("readUShortSmart") public int readUShortSmart() { @@ -562,12 +562,12 @@ public class Buffer extends Node { return var1 < 128 ? this.readUnsignedByte() : this.readUnsignedShort() - 32768; } - @ObfuscatedName("cd") + @ObfuscatedName("bk") @ObfuscatedSignature( signature = "(I)I", - garbageValue = "-1852913201" + garbageValue = "1915469336" ) - public int method5623() { + public int method5710() { int var1 = 0; int var2; @@ -579,21 +579,21 @@ public class Buffer extends Node { return var1; } - @ObfuscatedName("cn") + @ObfuscatedName("cm") @ObfuscatedSignature( - signature = "(I)I", - garbageValue = "1135440353" + signature = "(B)I", + garbageValue = "-109" ) - public int method5624() { + public int method5617() { return this.array[this.offset] < 0 ? this.readInt() & Integer.MAX_VALUE : this.readUnsignedShort(); } - @ObfuscatedName("cr") + @ObfuscatedName("cd") @ObfuscatedSignature( signature = "(I)I", - garbageValue = "918113281" + garbageValue = "-1394561672" ) - public int method5638() { + public int method5618() { if (this.array[this.offset] < 0) { return this.readInt() & Integer.MAX_VALUE; } else { @@ -602,10 +602,10 @@ public class Buffer extends Node { } } - @ObfuscatedName("ci") + @ObfuscatedName("cv") @ObfuscatedSignature( - signature = "(B)I", - garbageValue = "46" + signature = "(I)I", + garbageValue = "-681860010" ) @Export("readVarInt") public int readVarInt() { @@ -619,10 +619,10 @@ public class Buffer extends Node { return var2 | var1; } - @ObfuscatedName("cy") + @ObfuscatedName("cl") @ObfuscatedSignature( signature = "([II)V", - garbageValue = "-1693681803" + garbageValue = "1250000974" ) @Export("xteaEncryptAll") public void xteaEncryptAll(int[] var1) { @@ -647,10 +647,10 @@ public class Buffer extends Node { } - @ObfuscatedName("cl") + @ObfuscatedName("cg") @ObfuscatedSignature( - signature = "([IB)V", - garbageValue = "68" + signature = "([II)V", + garbageValue = "1827488017" ) @Export("xteaDecryptAll") public void xteaDecryptAll(int[] var1) { @@ -675,10 +675,10 @@ public class Buffer extends Node { } - @ObfuscatedName("co") + @ObfuscatedName("ch") @ObfuscatedSignature( signature = "([IIII)V", - garbageValue = "-2013644278" + garbageValue = "1249213138" ) @Export("xteaEncrypt") public void xteaEncrypt(int[] var1, int var2, int var3) { @@ -705,10 +705,10 @@ public class Buffer extends Node { this.offset = var4; } - @ObfuscatedName("cu") + @ObfuscatedName("co") @ObfuscatedSignature( - signature = "([IIII)V", - garbageValue = "-1289996541" + signature = "([IIIS)V", + garbageValue = "22292" ) @Export("xteaDecrypt") public void xteaDecrypt(int[] var1, int var2, int var3) { @@ -735,10 +735,10 @@ public class Buffer extends Node { this.offset = var4; } - @ObfuscatedName("cz") + @ObfuscatedName("cr") @ObfuscatedSignature( - signature = "(Ljava/math/BigInteger;Ljava/math/BigInteger;B)V", - garbageValue = "46" + signature = "(Ljava/math/BigInteger;Ljava/math/BigInteger;I)V", + garbageValue = "161696795" ) @Export("encryptRsa") public void encryptRsa(BigInteger var1, BigInteger var2) { @@ -754,136 +754,137 @@ public class Buffer extends Node { this.writeBytes(var7, 0, var7.length); } - @ObfuscatedName("cq") + @ObfuscatedName("ck") @ObfuscatedSignature( - signature = "(IS)I", - garbageValue = "-12364" + signature = "(IB)I", + garbageValue = "-112" ) @Export("writeCrc") public int writeCrc(int var1) { - int var2 = class3.method50(this.array, var1, this.offset); + int var2 = UserComparator5.method3467(this.array, var1, this.offset); this.writeInt(var2); return var2; } - @ObfuscatedName("cj") + @ObfuscatedName("cb") @ObfuscatedSignature( - signature = "(B)Z", - garbageValue = "0" + signature = "(S)Z", + garbageValue = "13755" ) @Export("checkCrc") public boolean checkCrc() { this.offset -= 4; - int var1 = class3.method50(this.array, 0, this.offset); + int var1 = UserComparator5.method3467(this.array, 0, this.offset); int var2 = this.readInt(); - return var1 == var2; + return var2 == var1; } - @ObfuscatedName("cm") + @ObfuscatedName("cy") @ObfuscatedSignature( signature = "(II)V", - garbageValue = "274218508" + garbageValue = "2047890611" ) - public void method5634(int var1) { + public void method5598(int var1) { this.array[++this.offset - 1] = (byte)(var1 + 128); } - @ObfuscatedName("cb") + @ObfuscatedName("cn") @ObfuscatedSignature( signature = "(II)V", - garbageValue = "-1061719400" + garbageValue = "-1379722724" ) - public void method5635(int var1) { + public void method5628(int var1) { this.array[++this.offset - 1] = (byte)(0 - var1); } - @ObfuscatedName("cp") + @ObfuscatedName("cj") @ObfuscatedSignature( signature = "(II)V", - garbageValue = "-1910519130" + garbageValue = "709584424" ) - public void method5636(int var1) { + @Export("writeIntME") + public void writeIntME(int var1) { this.array[++this.offset - 1] = (byte)(128 - var1); } + @ObfuscatedName("cq") + @ObfuscatedSignature( + signature = "(S)I", + garbageValue = "128" + ) + public int method5728() { + return this.array[++this.offset - 1] - 128 & 255; + } + + @ObfuscatedName("ci") + @ObfuscatedSignature( + signature = "(I)I", + garbageValue = "1543854045" + ) + public int method5631() { + return 0 - this.array[++this.offset - 1] & 255; + } + + @ObfuscatedName("cu") + @ObfuscatedSignature( + signature = "(I)I", + garbageValue = "-1082297230" + ) + public int method5689() { + return 128 - this.array[++this.offset - 1] & 255; + } + @ObfuscatedName("cs") @ObfuscatedSignature( - signature = "(B)I", - garbageValue = "21" + signature = "(I)B", + garbageValue = "1164121747" ) - public int method5697() { - return this.array[++this.offset - 1] - 128 & 255; - } - - @ObfuscatedName("ck") - @ObfuscatedSignature( - signature = "(I)I", - garbageValue = "-806225833" - ) - public int method5622() { - return 0 - this.array[++this.offset - 1] & 255; - } - - @ObfuscatedName("ct") - @ObfuscatedSignature( - signature = "(B)I", - garbageValue = "6" - ) - public int method5639() { - return 128 - this.array[++this.offset - 1] & 255; + public byte method5633() { + return (byte)(this.array[++this.offset - 1] - 128); } @ObfuscatedName("cc") @ObfuscatedSignature( signature = "(I)B", - garbageValue = "-787549657" + garbageValue = "-839452095" ) - public byte method5640() { - return (byte)(this.array[++this.offset - 1] - 128); - } - - @ObfuscatedName("ch") - @ObfuscatedSignature( - signature = "(I)B", - garbageValue = "-1656298865" - ) - public byte method5671() { + public byte method5637() { return (byte)(0 - this.array[++this.offset - 1]); } - @ObfuscatedName("cg") + @ObfuscatedName("cp") @ObfuscatedSignature( - signature = "(I)B", - garbageValue = "1929724921" + signature = "(B)B", + garbageValue = "-65" ) - public byte method5763() { + public byte method5772() { return (byte)(128 - this.array[++this.offset - 1]); } - @ObfuscatedName("cf") + @ObfuscatedName("ce") @ObfuscatedSignature( signature = "(II)V", - garbageValue = "1201605899" + garbageValue = "1799174836" ) - public void method5643(int var1) { + public void method5636(int var1) { this.array[++this.offset - 1] = (byte)var1; this.array[++this.offset - 1] = (byte)(var1 >> 8); } @ObfuscatedName("ca") @ObfuscatedSignature( - signature = "(II)V", - garbageValue = "-1719673408" + signature = "(IB)V", + garbageValue = "-8" ) - public void method5644(int var1) { + public void method5613(int var1) { this.array[++this.offset - 1] = (byte)(var1 >> 8); this.array[++this.offset - 1] = (byte)(var1 + 128); } - @ObfuscatedName("db") + @ObfuscatedName("cf") @ObfuscatedSignature( signature = "(II)V", - garbageValue = "-1488299936" + garbageValue = "23275811" ) @Export("writeShortLE") public void writeShortLE(int var1) { @@ -891,42 +892,42 @@ public class Buffer extends Node { this.array[++this.offset - 1] = (byte)(var1 >> 8); } - @ObfuscatedName("dq") + @ObfuscatedName("cx") @ObfuscatedSignature( - signature = "(S)I", - garbageValue = "-7547" + signature = "(B)I", + garbageValue = "92" ) - public int method5646() { + public int method5719() { this.offset += 2; return ((this.array[this.offset - 1] & 255) << 8) + (this.array[this.offset - 2] & 255); } - @ObfuscatedName("dd") + @ObfuscatedName("cz") @ObfuscatedSignature( - signature = "(B)I", - garbageValue = "96" + signature = "(I)I", + garbageValue = "-699058931" ) - public int method5647() { + public int method5640() { this.offset += 2; return (this.array[this.offset - 1] - 128 & 255) + ((this.array[this.offset - 2] & 255) << 8); } - @ObfuscatedName("dl") + @ObfuscatedName("ct") @ObfuscatedSignature( signature = "(I)I", - garbageValue = "1001624658" + garbageValue = "-2077720731" ) - public int method5648() { + public int method5641() { this.offset += 2; return ((this.array[this.offset - 1] & 255) << 8) + (this.array[this.offset - 2] - 128 & 255); } - @ObfuscatedName("dm") + @ObfuscatedName("cw") @ObfuscatedSignature( signature = "(I)I", - garbageValue = "1363257322" + garbageValue = "-1939464839" ) - public int method5649() { + public int method5765() { this.offset += 2; int var1 = ((this.array[this.offset - 1] & 255) << 8) + (this.array[this.offset - 2] & 255); if (var1 > 32767) { @@ -936,27 +937,12 @@ public class Buffer extends Node { return var1; } - @ObfuscatedName("di") + @ObfuscatedName("dw") @ObfuscatedSignature( - signature = "(B)I", - garbageValue = "-11" + signature = "(I)I", + garbageValue = "-1382531763" ) - public int method5650() { - this.offset += 2; - int var1 = (this.array[this.offset - 1] - 128 & 255) + ((this.array[this.offset - 2] & 255) << 8); - if (var1 > 32767) { - var1 -= 65536; - } - - return var1; - } - - @ObfuscatedName("dn") - @ObfuscatedSignature( - signature = "(B)I", - garbageValue = "60" - ) - public int method5651() { + public int method5643() { this.offset += 2; int var1 = ((this.array[this.offset - 1] & 255) << 8) + (this.array[this.offset - 2] - 128 & 255); if (var1 > 32767) { @@ -966,91 +952,161 @@ public class Buffer extends Node { return var1; } - @ObfuscatedName("dr") + @ObfuscatedName("de") + @ObfuscatedSignature( + signature = "(II)V", + garbageValue = "-163163988" + ) + public void method5627(int var1) { + this.array[++this.offset - 1] = (byte)(var1 >> 8); + this.array[++this.offset - 1] = (byte)(var1 >> 16); + this.array[++this.offset - 1] = (byte)var1; + } + + @ObfuscatedName("dx") @ObfuscatedSignature( signature = "(I)I", - garbageValue = "842389221" + garbageValue = "1088416772" ) - public int method5678() { + public int method5645() { this.offset += 3; return (this.array[this.offset - 1] & 255) + ((this.array[this.offset - 3] & 255) << 8) + ((this.array[this.offset - 2] & 255) << 16); } - @ObfuscatedName("do") + @ObfuscatedName("dc") @ObfuscatedSignature( signature = "(II)V", - garbageValue = "-1296850548" + garbageValue = "2035333434" ) - public void method5653(int var1) { + public void method5811(int var1) { this.array[++this.offset - 1] = (byte)var1; this.array[++this.offset - 1] = (byte)(var1 >> 8); this.array[++this.offset - 1] = (byte)(var1 >> 16); this.array[++this.offset - 1] = (byte)(var1 >> 24); } - @ObfuscatedName("ds") + @ObfuscatedName("dk") @ObfuscatedSignature( signature = "(II)V", - garbageValue = "-232914500" + garbageValue = "272743804" ) - @Export("writeIntME") - public void writeIntME(int var1) { + public void method5647(int var1) { this.array[++this.offset - 1] = (byte)(var1 >> 8); this.array[++this.offset - 1] = (byte)var1; this.array[++this.offset - 1] = (byte)(var1 >> 24); this.array[++this.offset - 1] = (byte)(var1 >> 16); } - @ObfuscatedName("dz") - @ObfuscatedSignature( - signature = "(II)V", - garbageValue = "-1673259479" - ) - public void method5655(int var1) { - this.array[++this.offset - 1] = (byte)(var1 >> 16); - this.array[++this.offset - 1] = (byte)(var1 >> 24); - this.array[++this.offset - 1] = (byte)var1; - this.array[++this.offset - 1] = (byte)(var1 >> 8); - } - @ObfuscatedName("dj") @ObfuscatedSignature( - signature = "(B)I", - garbageValue = "-18" + signature = "(II)V", + garbageValue = "476827595" ) - public int method5656() { + public void method5648(int var1) { + this.array[++this.offset - 1] = (byte)(var1 >> 16); + this.array[++this.offset - 1] = (byte)(var1 >> 24); + this.array[++this.offset - 1] = (byte)var1; + this.array[++this.offset - 1] = (byte)(var1 >> 8); + } + + @ObfuscatedName("dp") + @ObfuscatedSignature( + signature = "(I)I", + garbageValue = "1875662145" + ) + public int method5649() { this.offset += 4; return (this.array[this.offset - 4] & 255) + ((this.array[this.offset - 3] & 255) << 8) + ((this.array[this.offset - 2] & 255) << 16) + ((this.array[this.offset - 1] & 255) << 24); } - @ObfuscatedName("df") + @ObfuscatedName("di") @ObfuscatedSignature( - signature = "(I)I", - garbageValue = "-1810248535" + signature = "(B)I", + garbageValue = "-68" ) - public int method5796() { + public int method5650() { this.offset += 4; return ((this.array[this.offset - 2] & 255) << 24) + ((this.array[this.offset - 4] & 255) << 8) + (this.array[this.offset - 3] & 255) + ((this.array[this.offset - 1] & 255) << 16); } - @ObfuscatedName("da") + @ObfuscatedName("dn") @ObfuscatedSignature( signature = "(I)I", - garbageValue = "-1563321841" + garbageValue = "-163399300" ) - public int method5603() { + public int method5588() { this.offset += 4; return ((this.array[this.offset - 1] & 255) << 8) + ((this.array[this.offset - 4] & 255) << 16) + (this.array[this.offset - 2] & 255) + ((this.array[this.offset - 3] & 255) << 24); } - @ObfuscatedName("dg") + @ObfuscatedName("o") @ObfuscatedSignature( - signature = "([BIII)V", - garbageValue = "-2008997891" + signature = "([BI)V", + garbageValue = "875536376" ) - public void method5702(byte[] var1, int var2, int var3) { - for (int var4 = var3 + var2 - 1; var4 >= var2; --var4) { - var1[var4] = (byte)(this.array[++this.offset - 1] - 128); + @Export("SpriteBuffer_decode") + static void SpriteBuffer_decode(byte[] var0) { + Buffer var1 = new Buffer(var0); + var1.offset = var0.length - 2; + class325.SpriteBuffer_spriteCount = var1.readUnsignedShort(); + UrlRequester.SpriteBuffer_xOffsets = new int[class325.SpriteBuffer_spriteCount]; + class216.SpriteBuffer_yOffsets = new int[class325.SpriteBuffer_spriteCount]; + class325.SpriteBuffer_spriteWidths = new int[class325.SpriteBuffer_spriteCount]; + VarcInt.SpriteBuffer_spriteHeights = new int[class325.SpriteBuffer_spriteCount]; + FillMode.SpriteBuffer_pixels = new byte[class325.SpriteBuffer_spriteCount][]; + var1.offset = var0.length - 7 - class325.SpriteBuffer_spriteCount * 8; + class325.SpriteBuffer_spriteWidth = var1.readUnsignedShort(); + UserComparator9.SpriteBuffer_spriteHeight = var1.readUnsignedShort(); + int var2 = (var1.readUnsignedByte() & 255) + 1; + + int var3; + for (var3 = 0; var3 < class325.SpriteBuffer_spriteCount; ++var3) { + UrlRequester.SpriteBuffer_xOffsets[var3] = var1.readUnsignedShort(); + } + + for (var3 = 0; var3 < class325.SpriteBuffer_spriteCount; ++var3) { + class216.SpriteBuffer_yOffsets[var3] = var1.readUnsignedShort(); + } + + for (var3 = 0; var3 < class325.SpriteBuffer_spriteCount; ++var3) { + class325.SpriteBuffer_spriteWidths[var3] = var1.readUnsignedShort(); + } + + for (var3 = 0; var3 < class325.SpriteBuffer_spriteCount; ++var3) { + VarcInt.SpriteBuffer_spriteHeights[var3] = var1.readUnsignedShort(); + } + + var1.offset = var0.length - 7 - class325.SpriteBuffer_spriteCount * 8 - (var2 - 1) * 3; + class325.SpriteBuffer_spritePalette = new int[var2]; + + for (var3 = 1; var3 < var2; ++var3) { + class325.SpriteBuffer_spritePalette[var3] = var1.readMedium(); + if (class325.SpriteBuffer_spritePalette[var3] == 0) { + class325.SpriteBuffer_spritePalette[var3] = 1; + } + } + + var1.offset = 0; + + for (var3 = 0; var3 < class325.SpriteBuffer_spriteCount; ++var3) { + int var4 = class325.SpriteBuffer_spriteWidths[var3]; + int var5 = VarcInt.SpriteBuffer_spriteHeights[var3]; + int var6 = var4 * var5; + byte[] var7 = new byte[var6]; + FillMode.SpriteBuffer_pixels[var3] = var7; + int var8 = var1.readUnsignedByte(); + int var9; + if (var8 == 0) { + for (var9 = 0; var9 < var6; ++var9) { + var7[var9] = var1.readByte(); + } + } else if (var8 == 1) { + for (var9 = 0; var9 < var4; ++var9) { + for (int var10 = 0; var10 < var5; ++var10) { + var7[var9 + var10 * var4] = var1.readByte(); + } + } + } } } diff --git a/runescape-client/src/main/java/BufferedFile.java b/runescape-client/src/main/java/BufferedFile.java index c36f6d19d8..74c44e3d5d 100644 --- a/runescape-client/src/main/java/BufferedFile.java +++ b/runescape-client/src/main/java/BufferedFile.java @@ -6,72 +6,72 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("mz") +@ObfuscatedName("mb") @Implements("BufferedFile") public class BufferedFile { - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lmh;" + signature = "Lmd;" ) @Export("accessFile") AccessFile accessFile; - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("readBuffer") byte[] readBuffer; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - longValue = -3262164853072505693L + longValue = 4441824273806734931L ) @Export("readBufferOffset") long readBufferOffset; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = -773924091 + intValue = 2129478493 ) @Export("readBufferLength") int readBufferLength; - @ObfuscatedName("l") + @ObfuscatedName("p") @Export("writeBuffer") byte[] writeBuffer; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedGetter( - longValue = 2584269110563809293L + longValue = -8796048585263914235L ) @Export("writeBufferOffset") long writeBufferOffset; - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedGetter( - intValue = 2068321047 + intValue = -585871581 ) @Export("writeBufferLength") int writeBufferLength; - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedGetter( - longValue = 6372981625088766905L + longValue = -2340341034582279311L ) @Export("offset") long offset; - @ObfuscatedName("d") + @ObfuscatedName("i") @ObfuscatedGetter( - longValue = 7685888135171302975L + longValue = -5942828629537241469L ) @Export("fileLength") long fileLength; - @ObfuscatedName("m") + @ObfuscatedName("k") @ObfuscatedGetter( - longValue = -4038469138705030175L + longValue = 2651922969862605519L ) @Export("length") long length; - @ObfuscatedName("p") + @ObfuscatedName("x") @ObfuscatedGetter( - longValue = 8140662089348975089L + longValue = 9216989625367163093L ) @Export("fileOffset") long fileOffset; @ObfuscatedSignature( - signature = "(Lmh;II)V" + signature = "(Lmd;II)V" ) public BufferedFile(AccessFile var1, int var2, int var3) throws IOException { this.readBufferOffset = -1L; @@ -84,10 +84,10 @@ public class BufferedFile { this.offset = 0L; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "57" + signature = "(I)V", + garbageValue = "-394540595" ) @Export("close") public void close() throws IOException { @@ -95,7 +95,7 @@ public class BufferedFile { this.accessFile.close(); } - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("seek") public void seek(long var1) throws IOException { if (var1 < 0L) { @@ -105,30 +105,30 @@ public class BufferedFile { } } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( signature = "(B)J", - garbageValue = "87" + garbageValue = "-30" ) @Export("length") public long length() { return this.length; } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "([BS)V", - garbageValue = "1024" + signature = "([BI)V", + garbageValue = "-2037969367" ) @Export("readFully") public void readFully(byte[] var1) throws IOException { this.read(var1, 0, var1.length); } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( signature = "([BIII)V", - garbageValue = "2116217795" + garbageValue = "2058467153" ) @Export("read") public void read(byte[] var1, int var2, int var3) throws IOException { @@ -137,7 +137,7 @@ public class BufferedFile { throw new ArrayIndexOutOfBoundsException(var3 + var2 - var1.length); } - if (-1L != this.writeBufferOffset && this.offset >= this.writeBufferOffset && this.offset + (long)var3 <= (long)this.writeBufferLength + this.writeBufferOffset) { + if (-1L != this.writeBufferOffset && this.offset >= this.writeBufferOffset && (long)var3 + this.offset <= (long)this.writeBufferLength + this.writeBufferOffset) { System.arraycopy(this.writeBuffer, (int)(this.offset - this.writeBufferOffset), var1, var2, var3); this.offset += (long)var3; return; @@ -146,7 +146,7 @@ public class BufferedFile { long var4 = this.offset; int var7 = var3; int var8; - if (this.offset >= this.readBufferOffset && this.offset < (long)this.readBufferLength + this.readBufferOffset) { + if (this.offset >= this.readBufferOffset && this.offset < this.readBufferOffset + (long)this.readBufferLength) { var8 = (int)((long)this.readBufferLength - (this.offset - this.readBufferOffset)); if (var8 > var3) { var8 = var3; @@ -184,7 +184,7 @@ public class BufferedFile { this.offset += (long)var8; } - if (-1L != this.writeBufferOffset) { + if (this.writeBufferOffset != -1L) { if (this.writeBufferOffset > this.offset && var3 > 0) { var8 = var2 + (int)(this.writeBufferOffset - this.offset); if (var8 > var3 + var2) { @@ -207,7 +207,7 @@ public class BufferedFile { } if ((long)this.writeBufferLength + this.writeBufferOffset > var4 && this.writeBufferOffset + (long)this.writeBufferLength <= (long)var7 + var4) { - var10 = (long)this.writeBufferLength + this.writeBufferOffset; + var10 = this.writeBufferOffset + (long)this.writeBufferLength; } else if ((long)var7 + var4 > this.writeBufferOffset && (long)var7 + var4 <= (long)this.writeBufferLength + this.writeBufferOffset) { var10 = var4 + (long)var7; } @@ -231,10 +231,10 @@ public class BufferedFile { } } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "27" + signature = "(I)V", + garbageValue = "-1188509289" ) @Export("load") void load() throws IOException { @@ -261,15 +261,15 @@ public class BufferedFile { } - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "([BIII)V", - garbageValue = "2065277497" + signature = "([BIIS)V", + garbageValue = "13009" ) @Export("write") public void write(byte[] var1, int var2, int var3) throws IOException { try { - if (this.offset + (long)var3 > this.length) { + if ((long)var3 + this.offset > this.length) { this.length = this.offset + (long)var3; } @@ -277,7 +277,7 @@ public class BufferedFile { this.flush(); } - if (this.writeBufferOffset != -1L && (long)var3 + this.offset > this.writeBufferOffset + (long)this.writeBuffer.length) { + if (-1L != this.writeBufferOffset && (long)var3 + this.offset > (long)this.writeBuffer.length + this.writeBufferOffset) { int var4 = (int)((long)this.writeBuffer.length - (this.offset - this.writeBufferOffset)); System.arraycopy(var1, var2, this.writeBuffer, (int)(this.offset - this.writeBufferOffset), var4); this.offset += (long)var4; @@ -289,7 +289,7 @@ public class BufferedFile { if (var3 <= this.writeBuffer.length) { if (var3 > 0) { - if (this.writeBufferOffset == -1L) { + if (-1L == this.writeBufferOffset) { this.writeBufferOffset = this.offset; } @@ -301,7 +301,7 @@ public class BufferedFile { } } else { - if (this.fileOffset != this.offset) { + if (this.offset != this.fileOffset) { this.accessFile.seek(this.offset); this.fileOffset = this.offset; } @@ -314,16 +314,16 @@ public class BufferedFile { long var9 = -1L; long var6 = -1L; - if (this.offset >= this.readBufferOffset && this.offset < (long)this.readBufferLength + this.readBufferOffset) { + if (this.offset >= this.readBufferOffset && this.offset < this.readBufferOffset + (long)this.readBufferLength) { var9 = this.offset; } else if (this.readBufferOffset >= this.offset && this.readBufferOffset < (long)var3 + this.offset) { var9 = this.readBufferOffset; } - if (this.offset + (long)var3 > this.readBufferOffset && this.offset + (long)var3 <= (long)this.readBufferLength + this.readBufferOffset) { - var6 = (long)var3 + this.offset; - } else if ((long)this.readBufferLength + this.readBufferOffset > this.offset && (long)this.readBufferLength + this.readBufferOffset <= this.offset + (long)var3) { - var6 = this.readBufferOffset + (long)this.readBufferLength; + if ((long)var3 + this.offset > this.readBufferOffset && (long)var3 + this.offset <= this.readBufferOffset + (long)this.readBufferLength) { + var6 = this.offset + (long)var3; + } else if (this.readBufferOffset + (long)this.readBufferLength > this.offset && (long)this.readBufferLength + this.readBufferOffset <= (long)var3 + this.offset) { + var6 = (long)this.readBufferLength + this.readBufferOffset; } if (var9 > -1L && var6 > var9) { @@ -339,36 +339,36 @@ public class BufferedFile { } } - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedSignature( signature = "(B)V", - garbageValue = "4" + garbageValue = "0" ) @Export("flush") void flush() throws IOException { - if (this.writeBufferOffset != -1L) { + if (-1L != this.writeBufferOffset) { if (this.fileOffset != this.writeBufferOffset) { this.accessFile.seek(this.writeBufferOffset); this.fileOffset = this.writeBufferOffset; } this.accessFile.write(this.writeBuffer, 0, this.writeBufferLength); - this.fileOffset += 2068321047L * (long)(this.writeBufferLength * 1929925799); + this.fileOffset += (long)(this.writeBufferLength * -520660853) * -585871581L; if (this.fileOffset > this.fileLength) { this.fileLength = this.fileOffset; } long var1 = -1L; long var3 = -1L; - if (this.writeBufferOffset >= this.readBufferOffset && this.writeBufferOffset < this.readBufferOffset + (long)this.readBufferLength) { + if (this.writeBufferOffset >= this.readBufferOffset && this.writeBufferOffset < (long)this.readBufferLength + this.readBufferOffset) { var1 = this.writeBufferOffset; } else if (this.readBufferOffset >= this.writeBufferOffset && this.readBufferOffset < (long)this.writeBufferLength + this.writeBufferOffset) { var1 = this.readBufferOffset; } - if ((long)this.writeBufferLength + this.writeBufferOffset > this.readBufferOffset && (long)this.writeBufferLength + this.writeBufferOffset <= (long)this.readBufferLength + this.readBufferOffset) { + if ((long)this.writeBufferLength + this.writeBufferOffset > this.readBufferOffset && (long)this.writeBufferLength + this.writeBufferOffset <= this.readBufferOffset + (long)this.readBufferLength) { var3 = (long)this.writeBufferLength + this.writeBufferOffset; - } else if (this.readBufferOffset + (long)this.readBufferLength > this.writeBufferOffset && this.readBufferOffset + (long)this.readBufferLength <= this.writeBufferOffset + (long)this.writeBufferLength) { + } else if (this.readBufferOffset + (long)this.readBufferLength > this.writeBufferOffset && this.readBufferOffset + (long)this.readBufferLength <= (long)this.writeBufferLength + this.writeBufferOffset) { var3 = this.readBufferOffset + (long)this.readBufferLength; } diff --git a/runescape-client/src/main/java/BufferedNetSocket.java b/runescape-client/src/main/java/BufferedNetSocket.java index d8cf6916e5..46d9f56e65 100644 --- a/runescape-client/src/main/java/BufferedNetSocket.java +++ b/runescape-client/src/main/java/BufferedNetSocket.java @@ -5,21 +5,21 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("kg") +@ObfuscatedName("ki") @Implements("BufferedNetSocket") public class BufferedNetSocket extends AbstractSocket { - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("socket") Socket socket; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lkl;" + signature = "Lkt;" ) @Export("source") BufferedSource source; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Lkn;" + signature = "Lkb;" ) @Export("sink") BufferedSink sink; @@ -34,10 +34,10 @@ public class BufferedNetSocket extends AbstractSocket { this.sink = new BufferedSink(this.socket.getOutputStream(), var3); } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "1632517280" + signature = "(B)V", + garbageValue = "-29" ) @Export("close") public void close() { @@ -51,50 +51,50 @@ public class BufferedNetSocket extends AbstractSocket { this.source.close(); } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( signature = "(B)I", - garbageValue = "0" + garbageValue = "27" ) @Export("readUnsignedByte") public int readUnsignedByte() throws IOException { return this.source.readUnsignedByte(); } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( signature = "(B)I", - garbageValue = "-1" + garbageValue = "-53" ) @Export("available") public int available() throws IOException { return this.source.available(); } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( signature = "(II)Z", - garbageValue = "1174929907" + garbageValue = "-1591428004" ) @Export("isAvailable") public boolean isAvailable(int var1) throws IOException { return this.source.isAvailable(var1); } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "([BIII)I", - garbageValue = "1681485484" + signature = "([BIIB)I", + garbageValue = "29" ) @Export("read") public int read(byte[] var1, int var2, int var3) throws IOException { return this.source.read(var1, var2, var3); } - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( signature = "([BIII)V", - garbageValue = "1989353375" + garbageValue = "-543253817" ) @Export("write") public void write(byte[] var1, int var2, int var3) throws IOException { diff --git a/runescape-client/src/main/java/BufferedSink.java b/runescape-client/src/main/java/BufferedSink.java index e525b043b7..7e84199f4c 100644 --- a/runescape-client/src/main/java/BufferedSink.java +++ b/runescape-client/src/main/java/BufferedSink.java @@ -6,40 +6,40 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("kn") +@ObfuscatedName("kb") @Implements("BufferedSink") public class BufferedSink implements Runnable { - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("thread") Thread thread; - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("outputStream") OutputStream outputStream; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = 1704761219 + intValue = 904264235 ) @Export("capacity") int capacity; - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("buffer") byte[] buffer; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = -1398859285 + intValue = -566617461 ) @Export("position") int position; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = 1220399631 + intValue = -217387211 ) @Export("limit") int limit; - @ObfuscatedName("c") + @ObfuscatedName("h") @Export("exception") IOException exception; - @ObfuscatedName("o") + @ObfuscatedName("y") @Export("closed") boolean closed; @@ -54,10 +54,10 @@ public class BufferedSink implements Runnable { this.thread.start(); } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "(I)Z", - garbageValue = "-1040331430" + garbageValue = "1508887687" ) @Export("isClosed") boolean isClosed() { @@ -79,10 +79,10 @@ public class BufferedSink implements Runnable { } } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "([BIII)V", - garbageValue = "-2046611751" + signature = "([BIIB)V", + garbageValue = "-22" ) @Export("write") void write(byte[] var1, int var2, int var3) throws IOException { @@ -119,10 +119,10 @@ public class BufferedSink implements Runnable { } } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "96034687" + garbageValue = "1435553079" ) @Export("close") void close() { diff --git a/runescape-client/src/main/java/BufferedSource.java b/runescape-client/src/main/java/BufferedSource.java index b1e081a165..4c5873dca5 100644 --- a/runescape-client/src/main/java/BufferedSource.java +++ b/runescape-client/src/main/java/BufferedSource.java @@ -7,37 +7,37 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("kl") +@ObfuscatedName("kt") @Implements("BufferedSource") public class BufferedSource implements Runnable { - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("thread") Thread thread; - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("inputStream") InputStream inputStream; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = -1673259479 + intValue = -290674023 ) @Export("capacity") int capacity; - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("buffer") byte[] buffer; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = 571240185 + intValue = 1886229969 ) @Export("position") int position; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = -143003191 + intValue = 1533965281 ) @Export("limit") int limit; - @ObfuscatedName("c") + @ObfuscatedName("h") @Export("exception") IOException exception; @@ -52,10 +52,10 @@ public class BufferedSource implements Runnable { this.thread.start(); } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(II)Z", - garbageValue = "1194815492" + signature = "(IB)Z", + garbageValue = "-1" ) @Export("isAvailable") boolean isAvailable(int var1) throws IOException { @@ -86,10 +86,10 @@ public class BufferedSource implements Runnable { } } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(S)I", - garbageValue = "256" + signature = "(B)I", + garbageValue = "71" ) @Export("available") int available() throws IOException { @@ -110,15 +110,15 @@ public class BufferedSource implements Runnable { } } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( signature = "(I)I", - garbageValue = "418616079" + garbageValue = "-245742191" ) @Export("readUnsignedByte") int readUnsignedByte() throws IOException { synchronized(this) { - if (this.position == this.limit) { + if (this.limit == this.position) { if (this.exception != null) { throw new IOException(this.exception.toString()); } else { @@ -133,10 +133,10 @@ public class BufferedSource implements Runnable { } } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( signature = "([BIII)I", - garbageValue = "153221716" + garbageValue = "4492631" ) @Export("read") int read(byte[] var1, int var2, int var3) throws IOException { @@ -174,10 +174,10 @@ public class BufferedSource implements Runnable { } } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "-206595375" + signature = "(B)V", + garbageValue = "34" ) @Export("close") void close() { @@ -243,26 +243,4 @@ public class BufferedSource implements Runnable { } } } - - @ObfuscatedName("a") - @ObfuscatedSignature( - signature = "(II)Lio;", - garbageValue = "-139133141" - ) - @Export("KitDefinition_get") - public static KitDefinition KitDefinition_get(int var0) { - KitDefinition var1 = (KitDefinition)KitDefinition.KitDefinition_cached.get((long)var0); - if (var1 != null) { - return var1; - } else { - byte[] var2 = KitDefinition.KitDefinition_archive.takeFile(3, var0); - var1 = new KitDefinition(); - if (var2 != null) { - var1.decode(new Buffer(var2)); - } - - KitDefinition.KitDefinition_cached.put(var1, (long)var0); - return var1; - } - } } diff --git a/runescape-client/src/main/java/ByteArrayNode.java b/runescape-client/src/main/java/ByteArrayNode.java index fb76fe1b7c..14fbf4cd65 100644 --- a/runescape-client/src/main/java/ByteArrayNode.java +++ b/runescape-client/src/main/java/ByteArrayNode.java @@ -2,10 +2,10 @@ import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; -@ObfuscatedName("fq") +@ObfuscatedName("ff") @Implements("ByteArrayNode") public class ByteArrayNode extends Node { - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("byteArray") public byte[] byteArray; diff --git a/runescape-client/src/main/java/ByteArrayPool.java b/runescape-client/src/main/java/ByteArrayPool.java index 76ec2c7a0c..b3b0edcfe5 100644 --- a/runescape-client/src/main/java/ByteArrayPool.java +++ b/runescape-client/src/main/java/ByteArrayPool.java @@ -1,49 +1,42 @@ -import java.util.Iterator; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("kz") +@ObfuscatedName("kv") @Implements("ByteArrayPool") public class ByteArrayPool { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedGetter( - intValue = -261452537 + intValue = 153239603 ) @Export("ByteArrayPool_smallCount") static int ByteArrayPool_smallCount; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = -718717257 + intValue = -433125971 ) @Export("ByteArrayPool_mediumCount") static int ByteArrayPool_mediumCount; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = -1909793595 + intValue = -1031778889 ) @Export("ByteArrayPool_largeCount") static int ByteArrayPool_largeCount; - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("ByteArrayPool_small") static byte[][] ByteArrayPool_small; - @ObfuscatedName("v") + @ObfuscatedName("z") @Export("ByteArrayPool_medium") static byte[][] ByteArrayPool_medium; - @ObfuscatedName("l") + @ObfuscatedName("p") @Export("ByteArrayPool_large") static byte[][] ByteArrayPool_large; - @ObfuscatedName("c") - @Export("ByteArrayPool_alternativeSizes") - static int[] ByteArrayPool_alternativeSizes; - @ObfuscatedName("h") - @ObfuscatedSignature( - signature = "Ldm;" - ) - @Export("soundCache") - public static SoundCache soundCache; + @ObfuscatedName("w") + @Export("ByteArrayPool_arrays") + static byte[][][] ByteArrayPool_arrays; static { ByteArrayPool_smallCount = 0; @@ -54,10 +47,10 @@ public class ByteArrayPool { ByteArrayPool_large = new byte[50][]; } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( signature = "(IZI)[B", - garbageValue = "77699142" + garbageValue = "-2110348593" ) @Export("ByteArrayPool_getArrayBool") static synchronized byte[] ByteArrayPool_getArrayBool(int var0, boolean var1) { @@ -89,14 +82,14 @@ public class ByteArrayPool { return var2; } - if (HorizontalAlignment.ByteArrayPool_arrays != null) { - for (int var4 = 0; var4 < ByteArrayPool_alternativeSizes.length; ++var4) { - if (ByteArrayPool_alternativeSizes[var4] != var0) { - if (var0 < ByteArrayPool_alternativeSizes[var4]) { + if (ByteArrayPool_arrays != null) { + for (int var4 = 0; var4 < WorldMapSprite.ByteArrayPool_alternativeSizes.length; ++var4) { + if (WorldMapSprite.ByteArrayPool_alternativeSizes[var4] != var0) { + if (var0 < WorldMapSprite.ByteArrayPool_alternativeSizes[var4]) { } - } else if (class222.ByteArrayPool_altSizeArrayCounts[var4] > 0) { - byte[] var3 = HorizontalAlignment.ByteArrayPool_arrays[var4][--class222.ByteArrayPool_altSizeArrayCounts[var4]]; - HorizontalAlignment.ByteArrayPool_arrays[var4][class222.ByteArrayPool_altSizeArrayCounts[var4]] = null; + } else if (class216.ByteArrayPool_altSizeArrayCounts[var4] > 0) { + byte[] var3 = ByteArrayPool_arrays[var4][--class216.ByteArrayPool_altSizeArrayCounts[var4]]; + ByteArrayPool_arrays[var4][class216.ByteArrayPool_altSizeArrayCounts[var4]] = null; return var3; } } @@ -104,46 +97,4 @@ public class ByteArrayPool { return new byte[var0]; } - - @ObfuscatedName("t") - @ObfuscatedSignature( - signature = "(Ljava/lang/Throwable;Ljava/lang/String;)Lmf;" - ) - @Export("newRunException") - public static RunException newRunException(Throwable var0, String var1) { - RunException var2; - if (var0 instanceof RunException) { - var2 = (RunException)var0; - var2.message = var2.message + ' ' + var1; - } else { - var2 = new RunException(var0, var1); - } - - return var2; - } - - @ObfuscatedName("ke") - @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "-1348959879" - ) - @Export("FriendSystem_invalidateFriends") - static final void FriendSystem_invalidateFriends() { - for (int var0 = 0; var0 < Players.Players_count; ++var0) { - Player var1 = Client.players[Players.Players_indices[var0]]; - var1.clearIsFriend(); - } - - Iterator var2 = Messages.Messages_hashTable.iterator(); - - while (var2.hasNext()) { - Message var3 = (Message)var2.next(); - var3.clearIsFromFriend(); - } - - if (class4.clanChat != null) { - class4.clanChat.clearFriends(); - } - - } } diff --git a/runescape-client/src/main/java/Calendar.java b/runescape-client/src/main/java/Calendar.java index 1cc8b8fee4..661047a338 100644 --- a/runescape-client/src/main/java/Calendar.java +++ b/runescape-client/src/main/java/Calendar.java @@ -1,27 +1,23 @@ +import java.io.DataInputStream; +import java.net.URL; import java.util.TimeZone; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("gi") +@ObfuscatedName("gf") @Implements("Calendar") public class Calendar { - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("MONTH_NAMES_ENGLISH_GERMAN") - public static final String[][] MONTH_NAMES_ENGLISH_GERMAN; - @ObfuscatedName("t") + static final String[][] MONTH_NAMES_ENGLISH_GERMAN; + @ObfuscatedName("f") @Export("DAYS_OF_THE_WEEK") - public static final String[] DAYS_OF_THE_WEEK; - @ObfuscatedName("n") - @Export("Calendar_calendar") - public static java.util.Calendar Calendar_calendar; + static final String[] DAYS_OF_THE_WEEK; @ObfuscatedName("b") - @ObfuscatedSignature( - signature = "Lkc;" - ) - @Export("NetCache_reference") - public static Buffer NetCache_reference; + @Export("Calendar_calendar") + static java.util.Calendar Calendar_calendar; static { MONTH_NAMES_ENGLISH_GERMAN = new String[][]{{"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}, {"Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"}, {"jan", "fév", "mars", "avr", "mai", "juin", "juil", "août", "sept", "oct", "nov", "déc"}, {"jan", "fev", "mar", "abr", "mai", "jun", "jul", "ago", "set", "out", "nov", "dez"}, {"jan", "feb", "mrt", "apr", "mei", "jun", "jul", "aug", "sep", "okt", "nov", "dec"}, {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}, {"ene", "feb", "mar", "abr", "may", "jun", "jul", "ago", "sep", "oct", "nov", "dic"}}; @@ -30,86 +26,46 @@ public class Calendar { Calendar_calendar = java.util.Calendar.getInstance(TimeZone.getTimeZone("GMT")); } - @ObfuscatedName("d") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(I)I", - garbageValue = "-2132557577" + signature = "(Ljava/lang/String;Ljava/lang/Throwable;I)V", + garbageValue = "1722882053" ) - static final int method4102() { - return ViewportMouse.ViewportMouse_x; - } - - @ObfuscatedName("gd") - @ObfuscatedSignature( - signature = "(IIIIZI)V", - garbageValue = "399120527" - ) - @Export("setViewportShape") - static final void setViewportShape(int var0, int var1, int var2, int var3, boolean var4) { - if (var2 < 1) { - var2 = 1; - } - - if (var3 < 1) { - var3 = 1; - } - - int var5 = var3 - 334; - int var6; - if (var5 < 0) { - var6 = Client.field881; - } else if (var5 >= 100) { - var6 = Client.field882; + @Export("RunException_sendStackTrace") + public static void RunException_sendStackTrace(String var0, Throwable var1) { + if (var1 != null) { + var1.printStackTrace(); } else { - var6 = (Client.field882 - Client.field881) * var5 / 100 + Client.field881; - } - - int var7 = var3 * var6 * 512 / (var2 * 334); - int var8; - int var9; - short var10; - if (var7 < Client.field844) { - var10 = Client.field844; - var6 = var10 * var2 * 334 / (var3 * 512); - if (var6 > Client.field886) { - var6 = Client.field886; - var8 = var3 * var6 * 512 / (var10 * 334); - var9 = (var2 - var8) / 2; - if (var4) { - Rasterizer2D.Rasterizer2D_resetClip(); - Rasterizer2D.Rasterizer2D_fillRectangle(var0, var1, var9, var3, -16777216); - Rasterizer2D.Rasterizer2D_fillRectangle(var0 + var2 - var9, var1, var9, var3, -16777216); + try { + String var2 = ""; + if (var1 != null) { + var2 = SpriteMask.method4035(var1); } - var0 += var9; - var2 -= var9 * 2; - } - } else if (var7 > Client.field888) { - var10 = Client.field888; - var6 = var10 * var2 * 334 / (var3 * 512); - if (var6 < Client.field885) { - var6 = Client.field885; - var8 = var10 * var2 * 334 / (var6 * 512); - var9 = (var3 - var8) / 2; - if (var4) { - Rasterizer2D.Rasterizer2D_resetClip(); - Rasterizer2D.Rasterizer2D_fillRectangle(var0, var1, var2, var9, -16777216); - Rasterizer2D.Rasterizer2D_fillRectangle(var0, var3 + var1 - var9, var2, var9, -16777216); + if (var0 != null) { + if (var1 != null) { + var2 = var2 + " | "; + } + + var2 = var2 + var0; } - var1 += var9; - var3 -= var9 * 2; + System.out.println("Error: " + var2); + var2 = var2.replace(':', '.'); + var2 = var2.replace('@', '_'); + var2 = var2.replace('&', '_'); + var2 = var2.replace('#', '_'); + if (RunException.RunException_applet == null) { + return; + } + + URL var3 = new URL(RunException.RunException_applet.getCodeBase(), "clienterror.ws?c=" + RunException.RunException_revision + "&u=" + RunException.localPlayerName + "&v1=" + TaskHandler.javaVendor + "&v2=" + TaskHandler.javaVersion + "&ct=" + RunException.clientType + "&e=" + var2); + DataInputStream var4 = new DataInputStream(var3.openStream()); + var4.read(); + var4.close(); + } catch (Exception var5) { } - } - Client.viewportZoom = var3 * var6 / 334; - if (var2 != Client.viewportWidth || var3 != Client.viewportHeight) { - class192.method3813(var2, var3); } - - Client.viewportOffsetX = var0; - Client.viewportOffsetY = var1; - Client.viewportWidth = var2; - Client.viewportHeight = var3; } } diff --git a/runescape-client/src/main/java/Canvas.java b/runescape-client/src/main/java/Canvas.java index 2f5f8efd42..1f44db588a 100644 --- a/runescape-client/src/main/java/Canvas.java +++ b/runescape-client/src/main/java/Canvas.java @@ -1,14 +1,20 @@ import java.awt.Component; import java.awt.Graphics; +import java.net.URL; +import java.util.LinkedHashMap; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; +import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("ai") +@ObfuscatedName("ax") @Implements("Canvas") public final class Canvas extends java.awt.Canvas { - @ObfuscatedName("a") + @ObfuscatedName("ek") + @Export("worldHost") + static String worldHost; + @ObfuscatedName("u") @Export("component") Component component; @@ -16,82 +22,165 @@ public final class Canvas extends java.awt.Canvas { this.component = var1; } - public final void paint(Graphics var1) { - this.component.paint(var1); - } - public final void update(Graphics var1) { this.component.update(var1); } - @ObfuscatedName("n") - @ObfuscatedSignature( - signature = "(IIB)I", - garbageValue = "-116" - ) - static int method935(int var0, int var1) { - ItemContainer var2 = (ItemContainer)ItemContainer.itemContainers.get((long)var0); - if (var2 == null) { - return 0; - } else if (var1 == -1) { - return 0; - } else { - int var3 = 0; + public final void paint(Graphics var1) { + this.component.paint(var1); + } - for (int var4 = 0; var4 < var2.quantities.length; ++var4) { - if (var2.ids[var4] == var1) { - var3 += var2.quantities[var4]; + @ObfuscatedName("u") + @ObfuscatedSignature( + signature = "(I)Z", + garbageValue = "-1452894334" + ) + @Export("loadWorlds") + static boolean loadWorlds() { + try { + if (GrandExchangeOfferOwnWorldComparator.World_request == null) { + GrandExchangeOfferOwnWorldComparator.World_request = SpriteMask.urlRequester.request(new URL(WallDecoration.field1914)); + } else if (GrandExchangeOfferOwnWorldComparator.World_request.isDone()) { + byte[] var0 = GrandExchangeOfferOwnWorldComparator.World_request.getResponse(); + Buffer var1 = new Buffer(var0); + var1.readInt(); + World.World_count = var1.readUnsignedShort(); + Skills.World_worlds = new World[World.World_count]; + + World var3; + for (int var2 = 0; var2 < World.World_count; var3.index = var2++) { + var3 = Skills.World_worlds[var2] = new World(); + var3.id = var1.readUnsignedShort(); + var3.properties = var1.readInt(); + var3.host = var1.readStringCp1252NullTerminated(); + var3.activity = var1.readStringCp1252NullTerminated(); + var3.location = var1.readUnsignedByte(); + var3.population = var1.readShort(); + } + + Clock.sortWorlds(Skills.World_worlds, 0, Skills.World_worlds.length - 1, World.World_sortOption1, World.World_sortOption2); + GrandExchangeOfferOwnWorldComparator.World_request = null; + return true; + } + } catch (Exception var4) { + var4.printStackTrace(); + GrandExchangeOfferOwnWorldComparator.World_request = null; + } + + return false; + } + + @ObfuscatedName("k") + @ObfuscatedSignature( + signature = "(II)Ler;", + garbageValue = "-1118777455" + ) + @Export("getFrames") + static Frames getFrames(int var0) { + Frames var1 = (Frames)SequenceDefinition.SequenceDefinition_cachedFrames.get((long)var0); + if (var1 != null) { + return var1; + } else { + AbstractArchive var3 = SequenceDefinition.SequenceDefinition_animationsArchive; + AbstractArchive var4 = SequenceDefinition.SequenceDefinition_skeletonsArchive; + boolean var5 = true; + int[] var6 = var3.getGroupFileIds(var0); + + for (int var7 = 0; var7 < var6.length; ++var7) { + byte[] var8 = var3.getFile(var0, var6[var7]); + if (var8 == null) { + var5 = false; + } else { + int var9 = (var8[0] & 255) << 8 | var8[1] & 255; + byte[] var10 = var4.getFile(var9, 0); + if (var10 == null) { + var5 = false; + } } } - return var3; + Frames var2; + if (!var5) { + var2 = null; + } else { + try { + var2 = new Frames(var3, var4, var0, false); + } catch (Exception var12) { + var2 = null; + } + } + + if (var2 != null) { + SequenceDefinition.SequenceDefinition_cachedFrames.put(var2, (long)var0); + } + + return var2; } } - @ObfuscatedName("il") + @ObfuscatedName("o") @ObfuscatedSignature( - signature = "(ILjava/lang/String;I)V", - garbageValue = "-1452803850" + signature = "(ILci;ZB)I", + garbageValue = "-7" ) - static void method934(int var0, String var1) { - int var2 = Players.Players_count; - int[] var3 = Players.Players_indices; - boolean var4 = false; - Username var5 = new Username(var1, class60.loginType); - - for (int var6 = 0; var6 < var2; ++var6) { - Player var7 = Client.players[var3[var6]]; - if (var7 != null && var7 != class215.localPlayer && var7.username != null && var7.username.equals(var5)) { - PacketBufferNode var8; - if (var0 == 1) { - var8 = SoundSystem.getPacketBufferNode(ClientPacket.field2193, Client.packetWriter.isaacCipher); - var8.packetBuffer.writeShort(var3[var6]); - var8.packetBuffer.writeByte(0); - Client.packetWriter.addNode(var8); - } else if (var0 == 4) { - var8 = SoundSystem.getPacketBufferNode(ClientPacket.field2229, Client.packetWriter.isaacCipher); - var8.packetBuffer.writeShortLE(var3[var6]); - var8.packetBuffer.method5634(0); - Client.packetWriter.addNode(var8); - } else if (var0 == 6) { - var8 = SoundSystem.getPacketBufferNode(ClientPacket.field2236, Client.packetWriter.isaacCipher); - var8.packetBuffer.method5635(0); - var8.packetBuffer.writeShort(var3[var6]); - Client.packetWriter.addNode(var8); - } else if (var0 == 7) { - var8 = SoundSystem.getPacketBufferNode(ClientPacket.field2251, Client.packetWriter.isaacCipher); - var8.packetBuffer.method5643(var3[var6]); - var8.packetBuffer.writeByte(0); - Client.packetWriter.addNode(var8); - } - - var4 = true; - break; - } + static int method873(int var0, Script var1, boolean var2) { + Widget var3 = var2 ? Interpreter.field1090 : class188.field2352; + if (var0 == ScriptOpcodes.CC_GETX) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.x; + return 1; + } else if (var0 == ScriptOpcodes.CC_GETY) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.y; + return 1; + } else if (var0 == ScriptOpcodes.CC_GETWIDTH) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.width; + return 1; + } else if (var0 == ScriptOpcodes.CC_GETHEIGHT) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.height; + return 1; + } else if (var0 == ScriptOpcodes.CC_GETHIDE) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.isHidden ? 1 : 0; + return 1; + } else if (var0 == ScriptOpcodes.CC_GETLAYER) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.parentId; + return 1; + } else { + return 2; } + } - if (!var4) { - class30.addGameMessage(4, "", "Unable to find " + var1); + @ObfuscatedName("ap") + @ObfuscatedSignature( + signature = "(ILhx;ZB)V", + garbageValue = "0" + ) + static void method871(int var0, Coord var1, boolean var2) { + WorldMapArea var3 = Clock.getWorldMap().getMapArea(var0); + int var4 = class215.localPlayer.plane; + int var5 = class51.baseX * 64 + (class215.localPlayer.x >> 7); + int var6 = VarcInt.baseY * 64 + (class215.localPlayer.y >> 7); + Coord var7 = new Coord(var4, var5, var6); + Clock.getWorldMap().method6453(var3, var7, var1, var2); + } + + @ObfuscatedName("fo") + @ObfuscatedSignature( + signature = "(ZB)V", + garbageValue = "-90" + ) + static final void method872(boolean var0) { + if (var0) { + Client.field680 = Login.field1196 ? class160.field2008 : class160.field2005; + } else { + LinkedHashMap var1 = UserComparator10.clientPreferences.parameters; + String var3 = Login.Login_username; + int var4 = var3.length(); + int var5 = 0; + + for (int var6 = 0; var6 < var4; ++var6) { + var5 = (var5 << 5) - var5 + var3.charAt(var6); + } + + Client.field680 = var1.containsKey(var5) ? class160.field2009 : class160.field2006; } } diff --git a/runescape-client/src/main/java/ChatChannel.java b/runescape-client/src/main/java/ChatChannel.java index 84dccad638..ee84696016 100644 --- a/runescape-client/src/main/java/ChatChannel.java +++ b/runescape-client/src/main/java/ChatChannel.java @@ -4,24 +4,18 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("cb") +@ObfuscatedName("cs") @Implements("ChatChannel") public class ChatChannel { - @ObfuscatedName("lb") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lhi;" - ) - @Export("mousedOverWidgetIf1") - static Widget mousedOverWidgetIf1; - @ObfuscatedName("t") - @ObfuscatedSignature( - signature = "[Lbt;" + signature = "[Lba;" ) @Export("messages") Message[] messages; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = -1655773149 + intValue = -2111791625 ) @Export("count") int count; @@ -30,10 +24,10 @@ public class ChatChannel { this.messages = new Message[100]; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;I)Lbt;", - garbageValue = "-2124852367" + signature = "(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;I)Lba;", + garbageValue = "1583297440" ) @Export("addMessage") Message addMessage(int var1, String var2, String var3, String var4) { @@ -61,49 +55,41 @@ public class ChatChannel { return var5; } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(II)Lbt;", - garbageValue = "1546938937" + signature = "(IB)Lba;", + garbageValue = "-6" ) @Export("getMessage") Message getMessage(int var1) { return var1 >= 0 && var1 < this.count ? this.messages[var1] : null; } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( signature = "(B)I", - garbageValue = "126" + garbageValue = "0" ) @Export("size") int size() { return this.count; } - @ObfuscatedName("o") - @ObfuscatedSignature( - signature = "(CI)Z", - garbageValue = "1710830217" - ) - @Export("isCharAlphabetic") - public static boolean isCharAlphabetic(char var0) { - return var0 >= 'A' && var0 <= 'Z' || var0 >= 'a' && var0 <= 'z'; - } - - @ObfuscatedName("fz") + @ObfuscatedName("ll") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "-1507769653" + garbageValue = "-1059026202" ) - @Export("playPcmPlayers") - static final void playPcmPlayers() { - if (MenuAction.pcmPlayer1 != null) { - MenuAction.pcmPlayer1.run(); - } + static void method2274() { + if (InvDefinition.field3210 != null) { + Client.field863 = Client.cycle; + InvDefinition.field3210.method4403(); - if (class80.pcmPlayer0 != null) { - class80.pcmPlayer0.run(); + for (int var0 = 0; var0 < Client.players.length; ++var0) { + if (Client.players[var0] != null) { + InvDefinition.field3210.method4406(class51.baseX * 64 + (Client.players[var0].x >> 7), VarcInt.baseY * 64 + (Client.players[var0].y >> 7)); + } + } } } diff --git a/runescape-client/src/main/java/ClanChat.java b/runescape-client/src/main/java/ClanChat.java index 43968e40ec..295adc0848 100644 --- a/runescape-client/src/main/java/ClanChat.java +++ b/runescape-client/src/main/java/ClanChat.java @@ -4,160 +4,104 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("jp") +@ObfuscatedName("jg") @Implements("ClanChat") public class ClanChat extends UserList { - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lln;" + signature = "Llg;" ) @Export("loginType") final LoginType loginType; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( signature = "Ljv;" ) @Export("localUser") final Usernamed localUser; - @ObfuscatedName("d") + @ObfuscatedName("i") @Export("name") public String name; - @ObfuscatedName("m") + @ObfuscatedName("k") @Export("owner") public String owner; - @ObfuscatedName("p") + @ObfuscatedName("x") @Export("minKick") public byte minKick; - @ObfuscatedName("h") + @ObfuscatedName("o") @ObfuscatedGetter( - intValue = 1359173587 + intValue = 591163035 ) @Export("rank") public int rank; - @ObfuscatedName("k") + @ObfuscatedName("e") @ObfuscatedGetter( - intValue = 1180287539 + intValue = -1630154821 ) - int field3621; + int field3639; @ObfuscatedSignature( - signature = "(Lln;Ljv;)V" + signature = "(Llg;Ljv;)V" ) public ClanChat(LoginType var1, Usernamed var2) { super(100); this.name = null; this.owner = null; - this.field3621 = 1; + this.field3639 = 1; this.loginType = var1; this.localUser = var2; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(I)Ljg;", - garbageValue = "-706396611" + signature = "(I)Ljr;", + garbageValue = "-1592540968" ) @Export("newInstance") User newInstance() { return new ClanMate(); } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(II)[Ljg;", - garbageValue = "1510983955" + signature = "(IB)[Ljr;", + garbageValue = "-122" ) @Export("newTypedArray") User[] newTypedArray(int var1) { return new ClanMate[var1]; } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( signature = "(Ljava/lang/String;I)V", - garbageValue = "-1580131719" + garbageValue = "1093647998" ) @Export("readName") final void readName(String var1) { - long var5 = 0L; - int var7 = var1.length(); - - for (int var8 = 0; var8 < var7; ++var8) { - var5 *= 37L; - char var9 = var1.charAt(var8); - if (var9 >= 'A' && var9 <= 'Z') { - var5 += (long)(var9 + 1 - 65); - } else if (var9 >= 'a' && var9 <= 'z') { - var5 += (long)(var9 + 1 - 97); - } else if (var9 >= '0' && var9 <= '9') { - var5 += (long)(var9 + 27 - 48); - } - - if (var5 >= 177917621779460413L) { - break; - } - } - - while (0L == var5 % 37L && 0L != var5) { - var5 /= 37L; - } - - String var10 = WorldMapDecoration.base37DecodeLong(var5); - if (var10 == null) { - var10 = ""; - } - - this.name = var10; + this.name = GrandExchangeOfferTotalQuantityComparator.method97(var1); } - @ObfuscatedName("cw") + @ObfuscatedName("o") @ObfuscatedSignature( signature = "(Ljava/lang/String;B)V", - garbageValue = "97" + garbageValue = "77" ) @Export("setOwner") final void setOwner(String var1) { - long var5 = 0L; - int var7 = var1.length(); - - for (int var8 = 0; var8 < var7; ++var8) { - var5 *= 37L; - char var9 = var1.charAt(var8); - if (var9 >= 'A' && var9 <= 'Z') { - var5 += (long)(var9 + 1 - 65); - } else if (var9 >= 'a' && var9 <= 'z') { - var5 += (long)(var9 + 1 - 97); - } else if (var9 >= '0' && var9 <= '9') { - var5 += (long)(var9 + 27 - 48); - } - - if (var5 >= 177917621779460413L) { - break; - } - } - - while (0L == var5 % 37L && var5 != 0L) { - var5 /= 37L; - } - - String var10 = WorldMapDecoration.base37DecodeLong(var5); - if (var10 == null) { - var10 = ""; - } - - this.owner = var10; + this.owner = GrandExchangeOfferTotalQuantityComparator.method97(var1); } - @ObfuscatedName("cd") + @ObfuscatedName("e") @ObfuscatedSignature( - signature = "(Lkc;I)V", - garbageValue = "-1009603456" + signature = "(Lkg;I)V", + garbageValue = "2029148344" ) @Export("readUpdate") public final void readUpdate(Buffer var1) { this.setOwner(var1.readStringCp1252NullTerminated()); long var2 = var1.readLong(); - this.readName(class30.method602(var2)); + this.readName(SpriteMask.method4038(var2)); this.minKick = var1.readByte(); int var4 = var1.readUnsignedByte(); if (var4 != 255) { @@ -166,7 +110,7 @@ public class ClanChat extends UserList { for (int var5 = 0; var5 < var4; ++var5) { ClanMate var6 = (ClanMate)this.addLastNoPreviousUsername(new Username(var1.readStringCp1252NullTerminated(), this.loginType)); int var7 = var1.readUnsignedShort(); - var6.set(var7, ++this.field3621 - 1); + var6.set(var7, ++this.field3639 - 1); var6.rank = var1.readByte(); var1.readStringCp1252NullTerminated(); this.isLocalPlayer(var6); @@ -175,12 +119,12 @@ public class ClanChat extends UserList { } } - @ObfuscatedName("cn") + @ObfuscatedName("cr") @ObfuscatedSignature( - signature = "(Lkc;B)V", - garbageValue = "38" + signature = "(Lkg;I)V", + garbageValue = "1670981116" ) - public final void method5354(Buffer var1) { + public final void method5329(Buffer var1) { Username var2 = new Username(var1.readStringCp1252NullTerminated(), this.loginType); int var3 = var1.readUnsignedShort(); byte var4 = var1.readByte(); @@ -210,17 +154,17 @@ public class ClanChat extends UserList { var6 = (ClanMate)this.addLastNoPreviousUsername(var2); } - var6.set(var3, ++this.field3621 - 1); + var6.set(var3, ++this.field3639 - 1); var6.rank = var4; this.isLocalPlayer(var6); } } - @ObfuscatedName("cr") + @ObfuscatedName("ck") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "2124688840" + garbageValue = "327438402" ) @Export("clearFriends") public final void clearFriends() { @@ -230,10 +174,10 @@ public class ClanChat extends UserList { } - @ObfuscatedName("ci") + @ObfuscatedName("cb") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "-1188581699" + signature = "(B)V", + garbageValue = "83" ) @Export("invalidateIgnoreds") public final void invalidateIgnoreds() { @@ -245,8 +189,8 @@ public class ClanChat extends UserList { @ObfuscatedName("cy") @ObfuscatedSignature( - signature = "(Ljn;I)V", - garbageValue = "-1306702332" + signature = "(Ljs;I)V", + garbageValue = "-2081381015" ) @Export("isLocalPlayer") final void isLocalPlayer(ClanMate var1) { @@ -255,21 +199,4 @@ public class ClanChat extends UserList { } } - - @ObfuscatedName("a") - public static final void method5367(long var0) { - if (var0 > 0L) { - if (var0 % 10L == 0L) { - class43.method882(var0 - 1L); - - try { - Thread.sleep(1L); - } catch (InterruptedException var3) { - } - } else { - class43.method882(var0); - } - - } - } } diff --git a/runescape-client/src/main/java/ClanMate.java b/runescape-client/src/main/java/ClanMate.java index adaa93e430..282c6bdfe1 100644 --- a/runescape-client/src/main/java/ClanMate.java +++ b/runescape-client/src/main/java/ClanMate.java @@ -3,18 +3,18 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("jn") +@ObfuscatedName("js") @Implements("ClanMate") public class ClanMate extends Buddy { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Ljs;" + signature = "Lja;" ) @Export("friend") TriBool friend; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Ljs;" + signature = "Lja;" ) @Export("ignored") TriBool ignored; @@ -24,20 +24,20 @@ public class ClanMate extends Buddy { this.ignored = TriBool.TriBool_unknown; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "1787297671" + garbageValue = "-186118944" ) @Export("clearIsFriend") void clearIsFriend() { this.friend = TriBool.TriBool_unknown; } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( signature = "(I)Z", - garbageValue = "2015099973" + garbageValue = "-1867763200" ) @Export("isFriend") public final boolean isFriend() { @@ -48,30 +48,30 @@ public class ClanMate extends Buddy { return this.friend == TriBool.TriBool_true; } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( signature = "(B)V", - garbageValue = "36" + garbageValue = "1" ) @Export("fillIsFriend") void fillIsFriend() { - this.friend = PacketWriter.friendSystem.friendsList.contains(super.username) ? TriBool.TriBool_true : TriBool.TriBool_false; + this.friend = VertexNormal.friendSystem.friendsList.contains(super.username) ? TriBool.TriBool_true : TriBool.TriBool_false; } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( signature = "(B)V", - garbageValue = "-59" + garbageValue = "1" ) @Export("clearIsIgnored") void clearIsIgnored() { this.ignored = TriBool.TriBool_unknown; } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(B)Z", - garbageValue = "-8" + signature = "(I)Z", + garbageValue = "-1504737045" ) @Export("isIgnored") public final boolean isIgnored() { @@ -82,26 +82,13 @@ public class ClanMate extends Buddy { return this.ignored == TriBool.TriBool_true; } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "-1162251482" + garbageValue = "-1422306006" ) @Export("fillIsIgnored") void fillIsIgnored() { - this.ignored = PacketWriter.friendSystem.ignoreList.contains(super.username) ? TriBool.TriBool_true : TriBool.TriBool_false; - } - - @ObfuscatedName("lx") - @ObfuscatedSignature( - signature = "([BIB)V", - garbageValue = "81" - ) - static void method5151(byte[] var0, int var1) { - if (Client.randomDatData == null) { - Client.randomDatData = new byte[24]; - } - - class300.writeRandomDat(var0, var1, Client.randomDatData, 0, 24); + this.ignored = VertexNormal.friendSystem.ignoreList.contains(super.username) ? TriBool.TriBool_true : TriBool.TriBool_false; } } diff --git a/runescape-client/src/main/java/Client.java b/runescape-client/src/main/java/Client.java index 22e6bce188..e95c088ad8 100644 --- a/runescape-client/src/main/java/Client.java +++ b/runescape-client/src/main/java/Client.java @@ -1,1272 +1,1268 @@ +import java.io.File; import java.io.IOException; +import java.io.RandomAccessFile; import java.net.Socket; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; +import java.util.LinkedHashMap; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -import netscape.javascript.JSObject; @Implements("Client") @ObfuscatedName("client") public final class Client extends GameShell implements Usernamed { - @ObfuscatedName("ma") + @ObfuscatedName("mw") @ObfuscatedSignature( - signature = "Lhi;" + signature = "Lhl;" ) @Export("clickedWidget") static Widget clickedWidget; - @ObfuscatedName("oq") + @ObfuscatedName("oj") @ObfuscatedGetter( - intValue = 1669670355 - ) - static int field835; - @ObfuscatedName("or") - @ObfuscatedGetter( - intValue = -1587927699 + intValue = 228290229 ) @Export("rootWidgetCount") static int rootWidgetCount; - @ObfuscatedName("oe") + @ObfuscatedName("ok") @ObfuscatedGetter( - longValue = 7809710238956253295L + intValue = 986793503 ) - static long field736; - @ObfuscatedName("ot") - static boolean[] field842; - @ObfuscatedName("oh") - static boolean[] field837; + static int field690; + @ObfuscatedName("os") + @ObfuscatedGetter( + longValue = -7754540937541537763L + ) + static long field652; + @ObfuscatedName("oa") + static boolean[] field847; + @ObfuscatedName("ob") + static boolean[] field849; @ObfuscatedName("ov") - static boolean[] field631; - @ObfuscatedName("nw") - static boolean field695; - @ObfuscatedName("oz") + static boolean[] field837; + @ObfuscatedName("ne") + static boolean field823; + @ObfuscatedName("of") @Export("isResizable") static boolean isResizable; - @ObfuscatedName("nf") + @ObfuscatedName("nl") @ObfuscatedGetter( - intValue = -447078155 + intValue = 1560570297 ) @Export("cycleCntr") static int cycleCntr; - @ObfuscatedName("sk") + @ObfuscatedName("nc") @ObfuscatedGetter( - intValue = -711169745 + intValue = -796800237 ) - public static int field900; - @ObfuscatedName("nz") + static int field833; + @ObfuscatedName("si") @ObfuscatedGetter( - intValue = -2050239349 + intValue = -957842515 ) - static int field824; - @ObfuscatedName("nk") - static boolean field809; - @ObfuscatedName("qp") - static boolean field855; - @ObfuscatedName("mp") + public static int field863; + @ObfuscatedName("nm") + static boolean field820; + @ObfuscatedName("qt") + static boolean field742; + @ObfuscatedName("ml") @ObfuscatedGetter( - intValue = -1344541921 + intValue = -944462791 ) @Export("widgetClickX") static int widgetClickX; @ObfuscatedName("me") @ObfuscatedGetter( - intValue = -1705214051 + intValue = -1327051591 ) @Export("widgetClickY") static int widgetClickY; - @ObfuscatedName("np") + @ObfuscatedName("nd") @ObfuscatedGetter( - intValue = -230439773 + intValue = -1892868949 ) - static int field748; - @ObfuscatedName("ms") + static int field698; + @ObfuscatedName("oy") @ObfuscatedSignature( - signature = "Lhi;" - ) - @Export("clickedWidgetParent") - static Widget clickedWidgetParent; - @ObfuscatedName("mo") - @ObfuscatedSignature( - signature = "Llh;" - ) - @Export("interfaceParents") - static NodeHashTable interfaceParents; - @ObfuscatedName("ox") - @Export("rootWidgetXs") - static int[] rootWidgetXs; - @ObfuscatedName("ob") - @Export("rootWidgetWidths") - static int[] rootWidgetWidths; - @ObfuscatedName("nn") - @ObfuscatedGetter( - intValue = 415324941 - ) - static int field751; - @ObfuscatedName("ml") - @ObfuscatedSignature( - signature = "Lhi;" - ) - @Export("viewportWidget") - static Widget viewportWidget; - @ObfuscatedName("oi") - @ObfuscatedGetter( - intValue = 1211489517 - ) - @Export("gameDrawingMode") - static int gameDrawingMode; - @ObfuscatedName("og") - @Export("rootWidgetYs") - static int[] rootWidgetYs; - @ObfuscatedName("mn") - @ObfuscatedGetter( - intValue = -615155411 - ) - @Export("staffModLevel") - public static int staffModLevel; - @ObfuscatedName("os") - @Export("rootWidgetHeights") - static int[] rootWidgetHeights; - @ObfuscatedName("op") - @ObfuscatedSignature( - signature = "Llh;" + signature = "Lle;" ) @Export("widgetClickMasks") static NodeHashTable widgetClickMasks; - @ObfuscatedName("th") - static int[] field890; - @ObfuscatedName("nm") + @ObfuscatedName("mp") + @ObfuscatedSignature( + signature = "Lhl;" + ) + @Export("clickedWidgetParent") + static Widget clickedWidgetParent; + @ObfuscatedName("ow") + @Export("rootWidgetWidths") + static int[] rootWidgetWidths; + @ObfuscatedName("mq") + @ObfuscatedSignature( + signature = "Lle;" + ) + @Export("interfaceParents") + static NodeHashTable interfaceParents; + @ObfuscatedName("on") + @Export("rootWidgetXs") + static int[] rootWidgetXs; + @ObfuscatedName("nh") @ObfuscatedGetter( - intValue = 172768801 + intValue = -1392572657 ) - static int field834; - @ObfuscatedName("ta") - static int[] field906; - @ObfuscatedName("tg") + static int field822; + @ObfuscatedName("mc") @ObfuscatedSignature( - signature = "Lbs;" + signature = "Lhl;" ) - static final class65 field904; - @ObfuscatedName("sr") - @ObfuscatedSignature( - signature = "[Ld;" + @Export("viewportWidget") + static Widget viewportWidget; + @ObfuscatedName("oe") + @ObfuscatedGetter( + intValue = -311062333 ) - @Export("grandExchangeOffers") - static GrandExchangeOffer[] grandExchangeOffers; - @ObfuscatedName("oj") + @Export("gameDrawingMode") + static int gameDrawingMode; + @ObfuscatedName("oh") + @Export("rootWidgetHeights") + static int[] rootWidgetHeights; + @ObfuscatedName("ms") + @ObfuscatedGetter( + intValue = -1520316987 + ) + @Export("staffModLevel") + static int staffModLevel; + @ObfuscatedName("ol") + @Export("rootWidgetYs") + static int[] rootWidgetYs; + @ObfuscatedName("tv") + static int[] field916; + @ObfuscatedName("tx") + static int[] field862; + @ObfuscatedName("tp") @ObfuscatedSignature( - signature = "Ljb;" + signature = "Lbb;" + ) + static final class65 field915; + @ObfuscatedName("or") + @ObfuscatedSignature( + signature = "Ljd;" ) @Export("scriptEvents") static NodeDeque scriptEvents; - @ObfuscatedName("pg") + @ObfuscatedName("ni") @ObfuscatedGetter( - intValue = 1345286015 + intValue = -463811251 + ) + static int field808; + @ObfuscatedName("no") + @ObfuscatedGetter( + intValue = 414578091 + ) + static int field825; + @ObfuscatedName("px") + @ObfuscatedGetter( + intValue = -731611885 ) @Export("destinationX") static int destinationX; - @ObfuscatedName("nc") + @ObfuscatedName("pn") @ObfuscatedGetter( - intValue = 723672855 - ) - static int field846; - @ObfuscatedName("pd") - @ObfuscatedGetter( - intValue = 959702887 + intValue = 16541371 ) @Export("destinationY") static int destinationY; - @ObfuscatedName("nb") - @ObfuscatedGetter( - intValue = -899895459 - ) - static int field814; - @ObfuscatedName("ng") - @ObfuscatedGetter( - intValue = -1812598639 - ) - static int field652; - @ObfuscatedName("nd") - @ObfuscatedGetter( - intValue = -441716439 - ) - static int field826; + @ObfuscatedName("na") + static int[] field828; @ObfuscatedName("nr") + @ObfuscatedGetter( + intValue = -2117192957 + ) + static int field829; + @ObfuscatedName("nv") @Export("isDraggingWidget") static boolean isDraggingWidget; - @ObfuscatedName("mr") + @ObfuscatedName("nf") + @Export("changedItemContainers") + static int[] changedItemContainers; + @ObfuscatedName("mv") @ObfuscatedGetter( - intValue = -397177077 + intValue = -660424691 ) @Export("runEnergy") static int runEnergy; - @ObfuscatedName("mk") + @ObfuscatedName("ng") @ObfuscatedGetter( - intValue = -887954319 + intValue = 1845259309 + ) + static int field898; + @ObfuscatedName("my") + @ObfuscatedGetter( + intValue = 557453795 ) @Export("weight") static int weight; - @ObfuscatedName("mu") + @ObfuscatedName("mg") @ObfuscatedSignature( - signature = "Lhi;" + signature = "Lhl;" ) @Export("meslayerContinueWidget") static Widget meslayerContinueWidget; - @ObfuscatedName("no") - @Export("changedItemContainers") - static int[] changedItemContainers; - @ObfuscatedName("sm") + @ObfuscatedName("op") @ObfuscatedGetter( - intValue = 857681821 - ) - static int field818; - @ObfuscatedName("nu") - @ObfuscatedGetter( - intValue = 703633297 - ) - static int field820; - @ObfuscatedName("rg") - @ObfuscatedSignature( - signature = "Lhe;" - ) - @Export("playerAppearance") - static PlayerAppearance playerAppearance; - @ObfuscatedName("qk") - @ObfuscatedGetter( - intValue = -1636781949 - ) - @Export("areaSoundEffectVolume") - static int areaSoundEffectVolume; - @ObfuscatedName("sl") - @ObfuscatedGetter( - intValue = 1393467707 - ) - static int field896; - @ObfuscatedName("ol") - @ObfuscatedGetter( - intValue = 1068901591 + intValue = -735804001 ) @Export("mouseWheelRotation") static int mouseWheelRotation; - @ObfuscatedName("mv") - @ObfuscatedSignature( - signature = "Lhi;" - ) - @Export("draggedOnWidget") - static Widget draggedOnWidget; - @ObfuscatedName("ru") - static boolean[] field641; - @ObfuscatedName("rz") - static int[] field877; - @ObfuscatedName("qx") - @ObfuscatedGetter( - intValue = -233646219 - ) - @Export("minimapState") - static int minimapState; - @ObfuscatedName("rl") - static int[] field795; - @ObfuscatedName("rn") - static int[] field879; - @ObfuscatedName("ri") - static int[] field880; - @ObfuscatedName("sv") - @Export("archiveLoaders") - static ArrayList archiveLoaders; - @ObfuscatedName("sa") - @ObfuscatedGetter( - intValue = 1310325491 - ) - @Export("archiveLoadersDone") - static int archiveLoadersDone; - @ObfuscatedName("pl") - @ObfuscatedGetter( - intValue = -1292384633 - ) - static int field856; - @ObfuscatedName("ps") - @ObfuscatedGetter( - longValue = 6749730827027050469L - ) - static long field663; - @ObfuscatedName("rs") - @ObfuscatedGetter( - intValue = -137337439 - ) - @Export("viewportOffsetX") - static int viewportOffsetX; - @ObfuscatedName("rm") - @ObfuscatedGetter( - intValue = 2111319843 - ) - @Export("viewportOffsetY") - static int viewportOffsetY; - @ObfuscatedName("rr") - @ObfuscatedGetter( - intValue = 1474521741 - ) - @Export("viewportWidth") - static int viewportWidth; - @ObfuscatedName("rf") - @ObfuscatedGetter( - intValue = -816916675 - ) - @Export("viewportHeight") - static int viewportHeight; - @ObfuscatedName("qm") - @ObfuscatedGetter( - intValue = -1444022859 - ) - @Export("soundEffectCount") - static int soundEffectCount; - @ObfuscatedName("pi") - static long[] field852; - @ObfuscatedName("qd") - @Export("soundEffectIds") - static int[] soundEffectIds; - @ObfuscatedName("rt") - static short field881; - @ObfuscatedName("qb") - @Export("queuedSoundEffectLoops") - static int[] queuedSoundEffectLoops; - @ObfuscatedName("qw") - @Export("isCameraLocked") - static boolean isCameraLocked; - @ObfuscatedName("ra") - static short field882; - @ObfuscatedName("rc") - static short field844; - @ObfuscatedName("qr") - @Export("queuedSoundEffectDelays") - static int[] queuedSoundEffectDelays; - @ObfuscatedName("re") - static short field888; - @ObfuscatedName("rx") - static short field886; - @ObfuscatedName("qy") - @ObfuscatedSignature( - signature = "[Lcg;" - ) - @Export("soundEffects") - static SoundEffect[] soundEffects; - @ObfuscatedName("qv") - @ObfuscatedGetter( - intValue = 398456721 - ) - @Export("currentTrackGroupId") - static int currentTrackGroupId; - @ObfuscatedName("pq") - @ObfuscatedGetter( - intValue = -87647027 - ) - static int field721; - @ObfuscatedName("rh") - @ObfuscatedGetter( - intValue = -1065055441 - ) - @Export("viewportZoom") - static int viewportZoom; - @ObfuscatedName("rj") - static short field885; - @ObfuscatedName("qf") - @ObfuscatedGetter( - intValue = -1999845863 - ) - @Export("musicVolume") - static int musicVolume; - @ObfuscatedName("qq") - @Export("soundLocations") - static int[] soundLocations; - @ObfuscatedName("pb") - @ObfuscatedGetter( - intValue = 1617941687 - ) - @Export("mapIconCount") - static int mapIconCount; - @ObfuscatedName("sq") - @ObfuscatedSignature( - signature = "Llb;" - ) - @Export("platformInfoProvider") - static PlatformInfoProvider platformInfoProvider; - @ObfuscatedName("pa") - @Export("mapIconXs") - static int[] mapIconXs; - @ObfuscatedName("pj") - @Export("mapIconYs") - static int[] mapIconYs; - @ObfuscatedName("pt") - @ObfuscatedSignature( - signature = "[Llx;" - ) - @Export("mapIcons") - static Sprite[] mapIcons; - @ObfuscatedName("ni") - @ObfuscatedGetter( - intValue = -406012573 - ) - static int field679; - @ObfuscatedName("nj") - @ObfuscatedGetter( - intValue = 581751417 - ) - @Export("chatCycle") - static int chatCycle; - @ObfuscatedName("rp") - @Export("zoomHeight") - static short zoomHeight; - @ObfuscatedName("rk") - @Export("zoomWidth") - static short zoomWidth; - @ObfuscatedName("qt") - @ObfuscatedGetter( - intValue = -1154555301 - ) - @Export("soundEffectVolume") - static int soundEffectVolume; - @ObfuscatedName("nx") - static int[] field817; - @ObfuscatedName("sw") - @ObfuscatedGetter( - intValue = 1025711975 - ) - static int field903; - @ObfuscatedName("pf") - static String field849; - @ObfuscatedName("px") - @ObfuscatedGetter( - intValue = -131485607 - ) - static int field866; - @ObfuscatedName("mt") - @Export("playerMod") - static boolean playerMod; - @ObfuscatedName("pz") - @ObfuscatedGetter( - intValue = -1422495067 - ) - @Export("publicChatMode") - static int publicChatMode; - @ObfuscatedName("pn") - @ObfuscatedGetter( - intValue = -1887689269 - ) - @Export("tradeChatMode") - static int tradeChatMode; - @ObfuscatedName("pp") - static int[] field854; - @ObfuscatedName("py") - static int[] field853; - @ObfuscatedName("oc") - @ObfuscatedSignature( - signature = "Ljb;" - ) - static NodeDeque field813; - @ObfuscatedName("mj") - @ObfuscatedGetter( - intValue = 381105829 - ) - @Export("chatEffects") - static int chatEffects; - @ObfuscatedName("pv") - static int[] field829; - @ObfuscatedName("od") - @ObfuscatedSignature( - signature = "Ljb;" - ) - static NodeDeque field832; - @ObfuscatedName("nt") + @ObfuscatedName("nu") @Export("changedSkills") static int[] changedSkills; - @ObfuscatedName("my") + @ObfuscatedName("nz") @ObfuscatedGetter( - intValue = 611257561 - ) - static int field907; - @ObfuscatedName("ny") - @ObfuscatedGetter( - intValue = -1741556813 + intValue = -485415327 ) @Export("changedSkillsCount") static int changedSkillsCount; - @ObfuscatedName("nh") + @ObfuscatedName("sf") @ObfuscatedGetter( - intValue = -1179398273 + intValue = 1362250675 ) - static int field825; - @ObfuscatedName("mq") + static int field906; + @ObfuscatedName("rk") + @ObfuscatedSignature( + signature = "Lhd;" + ) + @Export("playerAppearance") + static PlayerAppearance playerAppearance; + @ObfuscatedName("qr") @ObfuscatedGetter( - intValue = 1191445113 + intValue = -412348325 + ) + @Export("areaSoundEffectVolume") + static int areaSoundEffectVolume; + @ObfuscatedName("ql") + @ObfuscatedGetter( + intValue = 1577720607 + ) + @Export("soundEffectCount") + static int soundEffectCount; + @ObfuscatedName("sm") + @ObfuscatedGetter( + intValue = -1100705823 + ) + static int field907; + @ObfuscatedName("mj") + @ObfuscatedSignature( + signature = "Lhl;" + ) + @Export("draggedOnWidget") + static Widget draggedOnWidget; + @ObfuscatedName("qs") + @Export("soundEffectIds") + static int[] soundEffectIds; + @ObfuscatedName("qa") + @Export("queuedSoundEffectLoops") + static int[] queuedSoundEffectLoops; + @ObfuscatedName("qv") + @Export("queuedSoundEffectDelays") + static int[] queuedSoundEffectDelays; + @ObfuscatedName("qj") + @ObfuscatedGetter( + intValue = 350468397 + ) + @Export("musicVolume") + static int musicVolume; + @ObfuscatedName("qe") + @ObfuscatedSignature( + signature = "[Lcz;" + ) + @Export("soundEffects") + static SoundEffect[] soundEffects; + @ObfuscatedName("sq") + @Export("archiveLoaders") + static ArrayList archiveLoaders; + @ObfuscatedName("qq") + @ObfuscatedGetter( + intValue = -857958987 + ) + @Export("currentTrackGroupId") + static int currentTrackGroupId; + @ObfuscatedName("qd") + @Export("soundLocations") + static int[] soundLocations; + @ObfuscatedName("sk") + @ObfuscatedGetter( + intValue = -1151595097 + ) + @Export("archiveLoadersDone") + static int archiveLoadersDone; + @ObfuscatedName("qn") + @ObfuscatedGetter( + intValue = 1053015149 + ) + @Export("minimapState") + static int minimapState; + @ObfuscatedName("qw") + @Export("isCameraLocked") + static boolean isCameraLocked; + @ObfuscatedName("qb") + @ObfuscatedGetter( + intValue = 1255558445 + ) + @Export("soundEffectVolume") + static int soundEffectVolume; + @ObfuscatedName("re") + static boolean[] field835; + @ObfuscatedName("ra") + static int[] field736; + @ObfuscatedName("rs") + static int[] field901; + @ObfuscatedName("ri") + static int[] field890; + @ObfuscatedName("rx") + static int[] field891; + @ObfuscatedName("mm") + @ObfuscatedGetter( + intValue = -1297477089 + ) + @Export("chatEffects") + static int chatEffects; + @ObfuscatedName("pu") + static long[] field861; + @ObfuscatedName("pp") + @ObfuscatedGetter( + intValue = -1561057363 + ) + static int field867; + @ObfuscatedName("mx") + @ObfuscatedGetter( + intValue = -1459895255 + ) + static int field807; + @ObfuscatedName("sl") + @ObfuscatedSignature( + signature = "Llh;" + ) + @Export("platformInfoProvider") + static PlatformInfoProvider platformInfoProvider; + @ObfuscatedName("pb") + @ObfuscatedGetter( + intValue = 590028811 + ) + static int field855; + @ObfuscatedName("rw") + static short field880; + @ObfuscatedName("rn") + static short field893; + @ObfuscatedName("rf") + static short field785; + @ObfuscatedName("nb") + @ObfuscatedGetter( + intValue = 880355845 + ) + static int field834; + @ObfuscatedName("ru") + static short field679; + @ObfuscatedName("rv") + static short field897; + @ObfuscatedName("rr") + @ObfuscatedGetter( + intValue = -766521235 + ) + @Export("viewportZoom") + static int viewportZoom; + @ObfuscatedName("rz") + static short field896; + @ObfuscatedName("mt") + @ObfuscatedGetter( + intValue = 1669925739 ) @Export("followerIndex") static int followerIndex; - @ObfuscatedName("md") + @ObfuscatedName("py") @ObfuscatedGetter( - intValue = -1252075313 + intValue = -1526497235 ) - static int field828; - @ObfuscatedName("mc") + @Export("mapIconCount") + static int mapIconCount; + @ObfuscatedName("ro") @ObfuscatedGetter( - intValue = 1310053169 + intValue = 1417358417 ) - static int field794; - @ObfuscatedName("sn") + @Export("viewportWidth") + static int viewportWidth; + @ObfuscatedName("pw") + @Export("mapIconXs") + static int[] mapIconXs; + @ObfuscatedName("pq") + @Export("mapIconYs") + static int[] mapIconYs; + @ObfuscatedName("pd") @ObfuscatedSignature( - signature = "Lbm;" + signature = "[Lln;" + ) + @Export("mapIcons") + static Sprite[] mapIcons; + @ObfuscatedName("rj") + @ObfuscatedGetter( + intValue = -1082228789 + ) + @Export("viewportHeight") + static int viewportHeight; + @ObfuscatedName("ry") + @ObfuscatedGetter( + intValue = -668988237 + ) + @Export("viewportOffsetX") + static int viewportOffsetX; + @ObfuscatedName("pv") + @ObfuscatedGetter( + longValue = -417631311892860553L + ) + static long field866; + @ObfuscatedName("rt") + @ObfuscatedGetter( + intValue = 885622525 + ) + @Export("viewportOffsetY") + static int viewportOffsetY; + @ObfuscatedName("su") + @ObfuscatedGetter( + intValue = -352497469 + ) + static int field914; + @ObfuscatedName("mu") + @Export("playerMod") + static boolean playerMod; + @ObfuscatedName("pg") + @ObfuscatedGetter( + intValue = 1090044339 + ) + static int field889; + @ObfuscatedName("nt") + @ObfuscatedGetter( + intValue = -1961048311 + ) + static int field836; + @ObfuscatedName("nx") + @ObfuscatedGetter( + intValue = -375047505 + ) + @Export("chatCycle") + static int chatCycle; + @ObfuscatedName("pl") + static int[] field865; + @ObfuscatedName("pt") + static int[] field864; + @ObfuscatedName("oo") + @ObfuscatedSignature( + signature = "Ljd;" + ) + static NodeDeque field900; + @ObfuscatedName("rb") + @Export("zoomHeight") + static short zoomHeight; + @ObfuscatedName("rd") + @Export("zoomWidth") + static short zoomWidth; + @ObfuscatedName("oq") + @ObfuscatedSignature( + signature = "Ljd;" + ) + static NodeDeque field843; + @ObfuscatedName("nq") + @ObfuscatedGetter( + intValue = -42064155 + ) + static int field734; + @ObfuscatedName("mk") + @ObfuscatedGetter( + intValue = -404795193 + ) + static int field804; + @ObfuscatedName("mn") + @ObfuscatedGetter( + intValue = -305198765 + ) + static int field805; + @ObfuscatedName("pj") + @ObfuscatedGetter( + intValue = 1916921629 + ) + @Export("publicChatMode") + static int publicChatMode; + @ObfuscatedName("pk") + @ObfuscatedGetter( + intValue = 205603533 + ) + @Export("tradeChatMode") + static int tradeChatMode; + @ObfuscatedName("sv") + @ObfuscatedSignature( + signature = "[Li;" + ) + @Export("grandExchangeOffers") + static GrandExchangeOffer[] grandExchangeOffers; + @ObfuscatedName("ny") + @ObfuscatedGetter( + intValue = -24326817 + ) + static int field645; + @ObfuscatedName("pa") + static int[] field857; + @ObfuscatedName("ph") + static String field860; + @ObfuscatedName("sh") + @ObfuscatedSignature( + signature = "Lbw;" ) @Export("GrandExchangeEvents_worldComparator") static GrandExchangeOfferOwnWorldComparator GrandExchangeEvents_worldComparator; @ObfuscatedName("w") @ObfuscatedSignature( - signature = "[Lfm;" + signature = "[Lfh;" ) @Export("collisionMaps") static CollisionMap[] collisionMaps; - @ObfuscatedName("as") - static boolean field791; - @ObfuscatedName("ba") + @ObfuscatedName("ah") + static boolean field831; + @ObfuscatedName("bi") @ObfuscatedGetter( - intValue = -20471151 + intValue = 664513407 ) @Export("worldId") public static int worldId; - @ObfuscatedName("bg") + @ObfuscatedName("bo") @ObfuscatedGetter( - intValue = -51989745 + intValue = -1431286255 ) @Export("worldProperties") static int worldProperties; - @ObfuscatedName("bd") + @ObfuscatedName("bu") @ObfuscatedGetter( - intValue = -179388567 + intValue = -979515215 ) @Export("gameBuild") static int gameBuild; - @ObfuscatedName("bh") + @ObfuscatedName("bj") @Export("isMembersWorld") public static boolean isMembersWorld; - @ObfuscatedName("bu") + @ObfuscatedName("bm") @Export("isLowDetail") static boolean isLowDetail; - @ObfuscatedName("bt") + @ObfuscatedName("ba") @ObfuscatedGetter( - intValue = 257125477 + intValue = 1709497385 ) @Export("clientType") static int clientType; - @ObfuscatedName("bs") + @ObfuscatedName("bb") @Export("onMobile") static boolean onMobile; - @ObfuscatedName("bj") + @ObfuscatedName("bg") @ObfuscatedGetter( - intValue = -275274109 + intValue = 1930753179 ) @Export("gameState") static int gameState; - @ObfuscatedName("cr") + @ObfuscatedName("co") @Export("isLoading") static boolean isLoading; - @ObfuscatedName("ci") + @ObfuscatedName("cr") @ObfuscatedGetter( - intValue = 240908191 + intValue = -283063249 ) @Export("cycle") static int cycle; - @ObfuscatedName("cy") + @ObfuscatedName("ck") @ObfuscatedGetter( - longValue = -715337301000899145L + longValue = 1346502483774771015L ) @Export("mouseLastLastPressedTimeMillis") static long mouseLastLastPressedTimeMillis; - @ObfuscatedName("co") + @ObfuscatedName("cy") @ObfuscatedGetter( - intValue = -1508326543 + intValue = -1710295131 ) - static int field644; - @ObfuscatedName("cu") + static int field877; + @ObfuscatedName("cn") @ObfuscatedGetter( - intValue = 309923467 + intValue = -1896423743 ) - static int field905; - @ObfuscatedName("cz") + static int field657; + @ObfuscatedName("cj") @ObfuscatedGetter( - longValue = -6250089135032631577L + longValue = 7288307648884652687L ) - static long field646; + static long field658; @ObfuscatedName("cq") @Export("hadFocus") static boolean hadFocus; - @ObfuscatedName("cj") + @ObfuscatedName("ci") @Export("displayFps") static boolean displayFps; - @ObfuscatedName("cm") + @ObfuscatedName("cu") @ObfuscatedGetter( - intValue = 568076161 + intValue = -179691599 ) @Export("rebootTimer") static int rebootTimer; - @ObfuscatedName("cb") + @ObfuscatedName("cs") @ObfuscatedGetter( - intValue = 1087784609 + intValue = 1452336083 ) @Export("hintArrowType") static int hintArrowType; - @ObfuscatedName("cp") + @ObfuscatedName("cc") @ObfuscatedGetter( - intValue = 560832713 + intValue = 1408841509 ) @Export("hintArrowNpcIndex") static int hintArrowNpcIndex; - @ObfuscatedName("cs") + @ObfuscatedName("cp") @ObfuscatedGetter( - intValue = 2097708219 + intValue = -1427936639 ) @Export("hintArrowPlayerIndex") static int hintArrowPlayerIndex; - @ObfuscatedName("ck") + @ObfuscatedName("ce") @ObfuscatedGetter( - intValue = -614355373 + intValue = -1905046117 ) @Export("hintArrowX") static int hintArrowX; - @ObfuscatedName("ct") + @ObfuscatedName("ca") @ObfuscatedGetter( - intValue = -1984180121 + intValue = 1995090411 ) @Export("hintArrowY") static int hintArrowY; - @ObfuscatedName("cc") + @ObfuscatedName("cf") @ObfuscatedGetter( - intValue = -607598836 + intValue = -231665652 ) @Export("hintArrowHeight") static int hintArrowHeight; - @ObfuscatedName("ch") + @ObfuscatedName("cx") @ObfuscatedGetter( - intValue = -2044500288 + intValue = 280792896 ) @Export("hintArrowSubX") static int hintArrowSubX; - @ObfuscatedName("cg") + @ObfuscatedName("cz") @ObfuscatedGetter( - intValue = -848173760 + intValue = 1621938368 ) @Export("hintArrowSubY") static int hintArrowSubY; - @ObfuscatedName("ca") - @ObfuscatedSignature( - signature = "Lcr;" - ) - @Export("playerAttackOption") - static AttackOption playerAttackOption; - @ObfuscatedName("db") - @ObfuscatedSignature( - signature = "Lcr;" - ) - @Export("npcAttackOption") - static AttackOption npcAttackOption; - @ObfuscatedName("dd") - @ObfuscatedGetter( - intValue = 355773429 - ) - @Export("titleLoadingStage") - static int titleLoadingStage; - @ObfuscatedName("dm") - @ObfuscatedSignature( - signature = "Lku;" - ) - @Export("js5Socket") - static AbstractSocket js5Socket; - @ObfuscatedName("di") - @ObfuscatedGetter( - intValue = -1799860723 - ) - @Export("js5ConnectState") - static int js5ConnectState; - @ObfuscatedName("dn") - @ObfuscatedGetter( - intValue = -762525009 - ) - static int field819; - @ObfuscatedName("ee") - @ObfuscatedGetter( - intValue = 1297064295 - ) - @Export("js5Errors") - static int js5Errors; - @ObfuscatedName("ef") - @ObfuscatedGetter( - intValue = -1775311529 - ) - @Export("loginState") - static int loginState; - @ObfuscatedName("ep") - @ObfuscatedGetter( - intValue = -1375640047 - ) - static int field666; - @ObfuscatedName("et") - @ObfuscatedGetter( - intValue = -589488051 - ) - static int field667; - @ObfuscatedName("eq") - @ObfuscatedGetter( - intValue = -627164889 - ) - static int field668; - @ObfuscatedName("em") - @ObfuscatedSignature( - signature = "Lfp;" - ) - static class160 field850; - @ObfuscatedName("es") - @Export("Login_isUsernameRemembered") - static boolean Login_isUsernameRemembered; - @ObfuscatedName("en") + @ObfuscatedName("cw") @ObfuscatedSignature( signature = "Lco;" ) + @Export("playerAttackOption") + static AttackOption playerAttackOption; + @ObfuscatedName("dw") + @ObfuscatedSignature( + signature = "Lco;" + ) + @Export("npcAttackOption") + static AttackOption npcAttackOption; + @ObfuscatedName("dx") + @ObfuscatedGetter( + intValue = 2117225913 + ) + @Export("titleLoadingStage") + static int titleLoadingStage; + @ObfuscatedName("dj") + @ObfuscatedGetter( + intValue = -1916189945 + ) + @Export("js5ConnectState") + static int js5ConnectState; + @ObfuscatedName("dp") + @ObfuscatedGetter( + intValue = 1530929997 + ) + static int field674; + @ObfuscatedName("ec") + @ObfuscatedGetter( + intValue = 12617063 + ) + @Export("js5Errors") + static int js5Errors; + @ObfuscatedName("em") + @ObfuscatedGetter( + intValue = 499634575 + ) + @Export("loginState") + static int loginState; + @ObfuscatedName("ee") + @ObfuscatedGetter( + intValue = 221607875 + ) + static int field887; + @ObfuscatedName("eu") + @ObfuscatedGetter( + intValue = 1579409689 + ) + static int field678; + @ObfuscatedName("ea") + @ObfuscatedGetter( + intValue = 310708051 + ) + static int field694; + @ObfuscatedName("er") + @ObfuscatedSignature( + signature = "Lfx;" + ) + static class160 field680; + @ObfuscatedName("ex") + @Export("Login_isUsernameRemembered") + static boolean Login_isUsernameRemembered; + @ObfuscatedName("ep") + @ObfuscatedSignature( + signature = "Lcy;" + ) @Export("secureRandomFuture") static SecureRandomFuture secureRandomFuture; - @ObfuscatedName("ea") + @ObfuscatedName("ei") @Export("randomDatData") static byte[] randomDatData; - @ObfuscatedName("ej") + @ObfuscatedName("ed") @ObfuscatedSignature( - signature = "[Lcv;" + signature = "[Lcd;" ) @Export("npcs") static NPC[] npcs; - @ObfuscatedName("el") + @ObfuscatedName("eq") @ObfuscatedGetter( - intValue = 1003307959 + intValue = -1981398561 ) @Export("npcCount") static int npcCount; - @ObfuscatedName("ft") + @ObfuscatedName("fe") @Export("npcIndices") static int[] npcIndices; - @ObfuscatedName("fe") + @ObfuscatedName("fl") @ObfuscatedGetter( - intValue = 9572479 + intValue = 1827526777 ) - static int field676; - @ObfuscatedName("fs") - static int[] field677; - @ObfuscatedName("fu") + static int field687; + @ObfuscatedName("fj") + static int[] field688; + @ObfuscatedName("fm") @ObfuscatedSignature( - signature = "Lcp;" + signature = "Lcc;" ) @Export("packetWriter") public static final PacketWriter packetWriter; - @ObfuscatedName("fn") + @ObfuscatedName("fz") @ObfuscatedGetter( - intValue = -1045918939 + intValue = 479164645 ) @Export("logoutTimer") static int logoutTimer; - @ObfuscatedName("fg") - static boolean field680; - @ObfuscatedName("fw") + @ObfuscatedName("fi") + static boolean field691; + @ObfuscatedName("fo") @Export("useBufferedSocket") static boolean useBufferedSocket; - @ObfuscatedName("ff") + @ObfuscatedName("fu") @ObfuscatedSignature( - signature = "Ljt;" + signature = "Ljl;" ) @Export("timer") static Timer timer; - @ObfuscatedName("fm") + @ObfuscatedName("fh") @Export("fontsMap") static HashMap fontsMap; + @ObfuscatedName("ft") + @ObfuscatedGetter( + intValue = -1155714541 + ) + static int field676; @ObfuscatedName("fb") @ObfuscatedGetter( - intValue = 287183653 + intValue = -2129248571 ) - static int field684; - @ObfuscatedName("fd") + static int field794; + @ObfuscatedName("fw") @ObfuscatedGetter( - intValue = 887047471 + intValue = 1251092849 ) - static int field685; - @ObfuscatedName("fo") + static int field850; + @ObfuscatedName("gm") @ObfuscatedGetter( - intValue = 202768591 + intValue = 1774005601 ) - static int field686; - @ObfuscatedName("ga") + static int field672; + @ObfuscatedName("gj") @ObfuscatedGetter( - intValue = -1491451085 + intValue = 333425851 ) - static int field687; - @ObfuscatedName("gx") - @ObfuscatedGetter( - intValue = -331520367 - ) - static int field688; - @ObfuscatedName("gt") + static int field699; + @ObfuscatedName("gw") @Export("isInInstance") static boolean isInInstance; - @ObfuscatedName("gm") + @ObfuscatedName("go") @Export("instanceChunkTemplates") static int[][][] instanceChunkTemplates; - @ObfuscatedName("gj") - static final int[] field692; - @ObfuscatedName("gp") + @ObfuscatedName("ga") + static final int[] field703; + @ObfuscatedName("gl") @ObfuscatedGetter( - intValue = 1121540223 + intValue = 1238371275 ) - static int field693; + static int field704; + @ObfuscatedName("hr") + @ObfuscatedGetter( + intValue = 974279119 + ) + static int field705; @ObfuscatedName("hg") @ObfuscatedGetter( - intValue = 10829207 + intValue = -1114899617 ) - static int field895; - @ObfuscatedName("hx") + static int field706; + @ObfuscatedName("ha") @ObfuscatedGetter( - intValue = -1992997175 + intValue = 1195340625 ) - static int field661; - @ObfuscatedName("hw") - @ObfuscatedGetter( - intValue = 1623441797 - ) - static int field683; + static int field707; @ObfuscatedName("hn") @ObfuscatedGetter( - intValue = 7192417 + intValue = -870518941 ) - static int field790; - @ObfuscatedName("hj") - static boolean field698; - @ObfuscatedName("hf") + static int field708; + @ObfuscatedName("hm") + static boolean field908; + @ObfuscatedName("hx") @ObfuscatedGetter( - intValue = -78158007 + intValue = 466427237 ) @Export("alternativeScrollbarWidth") static int alternativeScrollbarWidth; - @ObfuscatedName("hd") + @ObfuscatedName("hk") @ObfuscatedGetter( - intValue = 1116385961 + intValue = -1940558953 ) @Export("camAngleX") static int camAngleX; - @ObfuscatedName("hz") + @ObfuscatedName("ht") @ObfuscatedGetter( - intValue = -683972071 + intValue = 2068550151 ) @Export("camAngleY") static int camAngleY; - @ObfuscatedName("hu") + @ObfuscatedName("hw") @ObfuscatedGetter( - intValue = 1986559825 + intValue = -31256613 ) @Export("camAngleDY") static int camAngleDY; - @ObfuscatedName("hm") + @ObfuscatedName("hy") @ObfuscatedGetter( - intValue = 1107670461 + intValue = 270383157 ) @Export("camAngleDX") static int camAngleDX; - @ObfuscatedName("ht") + @ObfuscatedName("hu") @ObfuscatedGetter( - intValue = 749134913 + intValue = -1361461931 ) @Export("mouseCamClickedX") static int mouseCamClickedX; - @ObfuscatedName("hc") + @ObfuscatedName("hq") @ObfuscatedGetter( - intValue = -1131712939 + intValue = 30671027 ) @Export("mouseCamClickedY") static int mouseCamClickedY; - @ObfuscatedName("hl") + @ObfuscatedName("hp") @ObfuscatedGetter( - intValue = -1055821533 + intValue = -1970077779 ) @Export("oculusOrbState") static int oculusOrbState; - @ObfuscatedName("hy") + @ObfuscatedName("hb") @ObfuscatedGetter( - intValue = -344634531 + intValue = 467342205 ) @Export("camFollowHeight") static int camFollowHeight; - @ObfuscatedName("ho") + @ObfuscatedName("hi") @ObfuscatedGetter( - intValue = 1262882711 + intValue = -99029133 ) - static int field876; - @ObfuscatedName("hq") + static int field697; + @ObfuscatedName("hf") @ObfuscatedGetter( - intValue = -1868446673 + intValue = -1744973303 ) - static int field709; - @ObfuscatedName("ig") + static int field720; + @ObfuscatedName("ic") @ObfuscatedGetter( - intValue = -1777737639 + intValue = 1224307299 ) - static int field710; - @ObfuscatedName("ip") + static int field818; + @ObfuscatedName("im") @ObfuscatedGetter( - intValue = -934038365 + intValue = -2053876137 ) @Export("oculusOrbNormalSpeed") static int oculusOrbNormalSpeed; @ObfuscatedName("if") @ObfuscatedGetter( - intValue = -1149402609 + intValue = -468814589 ) @Export("oculusOrbSlowedSpeed") static int oculusOrbSlowedSpeed; @ObfuscatedName("ik") @ObfuscatedGetter( - intValue = -1869232701 + intValue = -1625015947 ) - public static int field799; - @ObfuscatedName("iq") - static boolean field645; - @ObfuscatedName("iu") - @ObfuscatedGetter( - intValue = -979694055 - ) - static int field715; - @ObfuscatedName("ie") - static boolean field733; - @ObfuscatedName("im") - @ObfuscatedGetter( - intValue = -843916833 - ) - static int field717; - @ObfuscatedName("ir") - @ObfuscatedGetter( - intValue = -1954915145 - ) - @Export("overheadTextCount") - static int overheadTextCount; - @ObfuscatedName("io") - @ObfuscatedGetter( - intValue = -1863882285 - ) - @Export("overheadTextLimit") - static int overheadTextLimit; - @ObfuscatedName("il") - @Export("overheadTextXs") - static int[] overheadTextXs; - @ObfuscatedName("ic") - @Export("overheadTextYs") - static int[] overheadTextYs; - @ObfuscatedName("ib") - @Export("overheadTextAscents") - static int[] overheadTextAscents; - @ObfuscatedName("iy") - @Export("overheadTextXOffsets") - static int[] overheadTextXOffsets; - @ObfuscatedName("id") - @Export("overheadTextColors") - static int[] overheadTextColors; - @ObfuscatedName("ih") - @Export("overheadTextEffects") - static int[] overheadTextEffects; - @ObfuscatedName("ii") - @Export("overheadTextCyclesRemaining") - static int[] overheadTextCyclesRemaining; - @ObfuscatedName("iw") - @Export("overheadText") - static String[] overheadText; - @ObfuscatedName("in") - @Export("tileLastDrawnActor") - static int[][] tileLastDrawnActor; + static int field748; @ObfuscatedName("it") @Export("selectedItemName") static String selectedItemName; + @ObfuscatedName("ib") + static boolean field826; @ObfuscatedName("is") @ObfuscatedGetter( - intValue = 1250054919 + intValue = 965343951 + ) + static int field776; + @ObfuscatedName("ia") + static boolean field727; + @ObfuscatedName("ir") + @ObfuscatedGetter( + intValue = -1343425675 + ) + static int field728; + @ObfuscatedName("ig") + @ObfuscatedGetter( + intValue = -277251891 + ) + @Export("overheadTextCount") + static int overheadTextCount; + @ObfuscatedName("ie") + @ObfuscatedGetter( + intValue = -739487043 + ) + @Export("overheadTextLimit") + static int overheadTextLimit; + @ObfuscatedName("iv") + @Export("overheadTextXs") + static int[] overheadTextXs; + @ObfuscatedName("iq") + @Export("overheadTextYs") + static int[] overheadTextYs; + @ObfuscatedName("io") + @Export("overheadTextAscents") + static int[] overheadTextAscents; + @ObfuscatedName("id") + @Export("overheadTextXOffsets") + static int[] overheadTextXOffsets; + @ObfuscatedName("in") + @Export("overheadTextColors") + static int[] overheadTextColors; + @ObfuscatedName("il") + @Export("overheadTextEffects") + static int[] overheadTextEffects; + @ObfuscatedName("iu") + @Export("overheadTextCyclesRemaining") + static int[] overheadTextCyclesRemaining; + @ObfuscatedName("ip") + @Export("overheadText") + static String[] overheadText; + @ObfuscatedName("ih") + @Export("tileLastDrawnActor") + static int[][] tileLastDrawnActor; + @ObfuscatedName("ii") + @ObfuscatedGetter( + intValue = 301129667 ) @Export("viewportDrawCount") static int viewportDrawCount; - @ObfuscatedName("iv") + @ObfuscatedName("iy") @ObfuscatedGetter( - intValue = 556959165 + intValue = 1117796663 ) @Export("viewportTempX") static int viewportTempX; - @ObfuscatedName("ia") + @ObfuscatedName("iw") @ObfuscatedGetter( - intValue = -393888855 + intValue = -1022356229 ) @Export("viewportTempY") static int viewportTempY; @ObfuscatedName("jm") @ObfuscatedGetter( - intValue = 584317187 + intValue = 1108408543 ) @Export("mouseCrossX") static int mouseCrossX; - @ObfuscatedName("jb") + @ObfuscatedName("jd") @ObfuscatedGetter( - intValue = 719414467 + intValue = 1117092081 ) @Export("mouseCrossY") static int mouseCrossY; - @ObfuscatedName("ja") + @ObfuscatedName("jj") @ObfuscatedGetter( - intValue = 1435356244 + intValue = 1711302667 ) @Export("mouseCrossState") static int mouseCrossState; - @ObfuscatedName("jd") + @ObfuscatedName("jw") @ObfuscatedGetter( - intValue = 339244279 + intValue = -1916688599 ) @Export("mouseCrossColor") static int mouseCrossColor; - @ObfuscatedName("jk") + @ObfuscatedName("jp") @Export("showMouseCross") static boolean showMouseCross; @ObfuscatedName("jy") @ObfuscatedGetter( - intValue = 1508339329 + intValue = -1524913155 ) - static int field753; - @ObfuscatedName("jl") + static int field664; + @ObfuscatedName("jc") @ObfuscatedGetter( - intValue = -306605903 + intValue = 426832895 ) - static int field665; - @ObfuscatedName("jw") + static int field749; + @ObfuscatedName("jo") @ObfuscatedGetter( - intValue = -577138959 + intValue = -696084645 ) @Export("dragItemSlotSource") static int dragItemSlotSource; - @ObfuscatedName("jt") + @ObfuscatedName("jl") @ObfuscatedGetter( - intValue = 1983943063 + intValue = -948734419 ) - static int field729; - @ObfuscatedName("jn") + static int field751; + @ObfuscatedName("js") @ObfuscatedGetter( - intValue = -1896878651 + intValue = -1639572587 ) - static int field741; - @ObfuscatedName("jg") + static int field752; + @ObfuscatedName("jr") @ObfuscatedGetter( - intValue = -2099734901 + intValue = 1443949053 ) @Export("dragItemSlotDestination") static int dragItemSlotDestination; - @ObfuscatedName("jr") - static boolean field743; - @ObfuscatedName("je") + @ObfuscatedName("jq") + static boolean field754; + @ObfuscatedName("ju") @ObfuscatedGetter( - intValue = 2041162413 + intValue = -2139000407 ) @Export("itemDragDuration") static int itemDragDuration; - @ObfuscatedName("jc") + @ObfuscatedName("je") @ObfuscatedGetter( - intValue = -1234034497 + intValue = -832368541 ) - static int field745; - @ObfuscatedName("jx") + static int field756; + @ObfuscatedName("jt") @Export("showLoadingMessages") static boolean showLoadingMessages; - @ObfuscatedName("js") + @ObfuscatedName("ja") @ObfuscatedSignature( - signature = "[Lbj;" + signature = "[Lbg;" ) @Export("players") static Player[] players; - @ObfuscatedName("ju") + @ObfuscatedName("jb") @ObfuscatedGetter( - intValue = 1889062631 + intValue = 241706055 ) @Export("localPlayerIndex") static int localPlayerIndex; - @ObfuscatedName("jf") + @ObfuscatedName("jn") @ObfuscatedGetter( - intValue = -1181575857 + intValue = 184797301 ) - static int field749; - @ObfuscatedName("jj") + static int field789; + @ObfuscatedName("jf") @Export("renderSelf") static boolean renderSelf; @ObfuscatedName("kw") @ObfuscatedGetter( - intValue = 2026004463 + intValue = -1334418049 ) @Export("drawPlayerNames") static int drawPlayerNames; - @ObfuscatedName("kq") + @ObfuscatedName("ka") @ObfuscatedGetter( - intValue = -299289873 + intValue = -629694105 ) - static int field752; - @ObfuscatedName("ko") - static int[] field870; - @ObfuscatedName("ks") + static int field814; + @ObfuscatedName("kf") + static int[] field764; + @ObfuscatedName("ky") @Export("playerMenuOpcodes") static final int[] playerMenuOpcodes; - @ObfuscatedName("kx") + @ObfuscatedName("kr") @Export("playerMenuActions") static String[] playerMenuActions; - @ObfuscatedName("ka") + @ObfuscatedName("kk") @Export("playerOptionsPriorities") static boolean[] playerOptionsPriorities; - @ObfuscatedName("kj") + @ObfuscatedName("kp") @Export("defaultRotations") static int[] defaultRotations; - @ObfuscatedName("kf") + @ObfuscatedName("kj") @ObfuscatedGetter( - intValue = -201752719 + intValue = -2070989129 ) @Export("combatTargetPlayerIndex") static int combatTargetPlayerIndex; - @ObfuscatedName("kc") + @ObfuscatedName("kg") @ObfuscatedSignature( - signature = "[[[Ljb;" + signature = "[[[Ljd;" ) @Export("groundItems") static NodeDeque[][][] groundItems; - @ObfuscatedName("ki") + @ObfuscatedName("kz") @ObfuscatedSignature( - signature = "Ljb;" + signature = "Ljd;" ) @Export("pendingSpawns") static NodeDeque pendingSpawns; - @ObfuscatedName("kz") + @ObfuscatedName("kv") @ObfuscatedSignature( - signature = "Ljb;" + signature = "Ljd;" ) @Export("projectiles") static NodeDeque projectiles; - @ObfuscatedName("ky") + @ObfuscatedName("ko") @ObfuscatedSignature( - signature = "Ljb;" + signature = "Ljd;" ) @Export("graphicsObjects") static NodeDeque graphicsObjects; - @ObfuscatedName("kd") + @ObfuscatedName("kq") @Export("currentLevels") static int[] currentLevels; - @ObfuscatedName("ku") + @ObfuscatedName("kn") @Export("levels") static int[] levels; - @ObfuscatedName("kg") + @ObfuscatedName("ki") @Export("experience") static int[] experience; - @ObfuscatedName("kn") + @ObfuscatedName("kb") @ObfuscatedGetter( - intValue = -629997959 + intValue = 1619030373 ) @Export("leftClickOpensMenu") static int leftClickOpensMenu; @ObfuscatedName("ke") @Export("isMenuOpen") static boolean isMenuOpen; - @ObfuscatedName("la") + @ObfuscatedName("lu") @ObfuscatedGetter( - intValue = -1431664981 + intValue = 1033223389 ) @Export("menuOptionsCount") static int menuOptionsCount; @ObfuscatedName("lq") @Export("menuArguments1") static int[] menuArguments1; - @ObfuscatedName("lr") + @ObfuscatedName("lb") @Export("menuArguments2") static int[] menuArguments2; @ObfuscatedName("ll") @Export("menuOpcodes") static int[] menuOpcodes; - @ObfuscatedName("lh") + @ObfuscatedName("le") @Export("menuIdentifiers") static int[] menuIdentifiers; - @ObfuscatedName("ls") + @ObfuscatedName("lw") @Export("menuActions") static String[] menuActions; - @ObfuscatedName("li") + @ObfuscatedName("ls") @Export("menuTargets") static String[] menuTargets; - @ObfuscatedName("lv") + @ObfuscatedName("ly") @Export("menuShiftClick") static boolean[] menuShiftClick; - @ObfuscatedName("lu") + @ObfuscatedName("lp") @Export("followerOpsLowPriority") static boolean followerOpsLowPriority; - @ObfuscatedName("lw") + @ObfuscatedName("lm") @Export("shiftClickDrop") static boolean shiftClickDrop; - @ObfuscatedName("lx") + @ObfuscatedName("ln") @Export("tapToDrop") static boolean tapToDrop; - @ObfuscatedName("ld") + @ObfuscatedName("lt") @Export("showMouseOverText") static boolean showMouseOverText; - @ObfuscatedName("lz") + @ObfuscatedName("lf") @ObfuscatedGetter( - intValue = 1922593219 + intValue = -17398737 ) @Export("viewportX") static int viewportX; - @ObfuscatedName("lm") + @ObfuscatedName("ld") @ObfuscatedGetter( - intValue = 1274966975 + intValue = 1819623055 ) @Export("viewportY") static int viewportY; - @ObfuscatedName("lp") + @ObfuscatedName("lr") @ObfuscatedGetter( - intValue = -365534183 + intValue = -943012111 ) - static int field782; + static int field643; @ObfuscatedName("lo") @ObfuscatedGetter( - intValue = 230985687 + intValue = -1168428899 ) - static int field783; - @ObfuscatedName("lj") + static int field768; + @ObfuscatedName("lk") @ObfuscatedGetter( - intValue = -27300387 + intValue = 8672977 ) @Export("isItemSelected") static int isItemSelected; - @ObfuscatedName("lg") + @ObfuscatedName("lc") @Export("isSpellSelected") static boolean isSpellSelected; - @ObfuscatedName("ln") + @ObfuscatedName("lg") @ObfuscatedGetter( - intValue = 151795301 + intValue = -1752263001 ) @Export("selectedSpellChildIndex") static int selectedSpellChildIndex; - @ObfuscatedName("mg") - @ObfuscatedGetter( - intValue = -1039451535 - ) - static int field788; @ObfuscatedName("mf") + @ObfuscatedGetter( + intValue = -2117287011 + ) + static int field799; + @ObfuscatedName("mr") @Export("selectedSpellActionName") static String selectedSpellActionName; - @ObfuscatedName("mz") + @ObfuscatedName("mb") @Export("selectedSpellName") static String selectedSpellName; - @ObfuscatedName("mh") + @ObfuscatedName("md") @ObfuscatedGetter( - intValue = 1866987545 + intValue = 241193399 ) @Export("rootInterface") static int rootInterface; static { - field791 = true; + field831 = true; worldId = 1; worldProperties = 0; gameBuild = 0; @@ -1278,9 +1274,9 @@ public final class Client extends GameShell implements Usernamed { isLoading = true; cycle = 0; mouseLastLastPressedTimeMillis = 1L; - field644 = -1; - field905 = -1; - field646 = -1L; + field877 = -1; + field657 = -1; + field658 = -1L; hadFocus = true; displayFps = false; rebootTimer = 0; @@ -1296,42 +1292,42 @@ public final class Client extends GameShell implements Usernamed { npcAttackOption = AttackOption.AttackOption_hidden; titleLoadingStage = 0; js5ConnectState = 0; - field819 = 0; + field674 = 0; js5Errors = 0; loginState = 0; - field666 = 0; - field667 = 0; - field668 = 0; - field850 = class160.field1982; + field887 = 0; + field678 = 0; + field694 = 0; + field680 = class160.field2006; Login_isUsernameRemembered = false; secureRandomFuture = new SecureRandomFuture(); randomDatData = null; npcs = new NPC[32768]; npcCount = 0; npcIndices = new int[32768]; - field676 = 0; - field677 = new int[250]; + field687 = 0; + field688 = new int[250]; packetWriter = new PacketWriter(); logoutTimer = 0; - field680 = false; + field691 = false; useBufferedSocket = true; timer = new Timer(); fontsMap = new HashMap(); - field684 = 0; - field685 = 1; - field686 = 0; - field687 = 1; - field688 = 0; + field676 = 0; + field794 = 1; + field850 = 0; + field672 = 1; + field699 = 0; collisionMaps = new CollisionMap[4]; isInInstance = false; instanceChunkTemplates = new int[4][13][13]; - field692 = 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}; - field693 = 0; - field895 = 2301979; - field661 = 5063219; - field683 = 3353893; - field790 = 7759444; - field698 = false; + field703 = 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}; + field704 = 0; + field705 = 2301979; + field706 = 5063219; + field707 = 3353893; + field708 = 7759444; + field908 = false; alternativeScrollbarWidth = 0; camAngleX = 128; camAngleY = 0; @@ -1341,16 +1337,16 @@ public final class Client extends GameShell implements Usernamed { mouseCamClickedY = 0; oculusOrbState = 0; camFollowHeight = 50; - field876 = 0; - field709 = 0; - field710 = 0; + field697 = 0; + field720 = 0; + field818 = 0; oculusOrbNormalSpeed = 12; oculusOrbSlowedSpeed = 6; - field799 = 0; - field645 = false; - field715 = 0; - field733 = false; - field717 = 0; + field748 = 0; + field826 = false; + field776 = 0; + field727 = false; + field728 = 0; overheadTextCount = 0; overheadTextLimit = 50; overheadTextXs = new int[overheadTextLimit]; @@ -1370,23 +1366,23 @@ public final class Client extends GameShell implements Usernamed { mouseCrossState = 0; mouseCrossColor = 0; showMouseCross = true; - field753 = 0; - field665 = 0; + field664 = 0; + field749 = 0; dragItemSlotSource = 0; - field729 = 0; - field741 = 0; + field751 = 0; + field752 = 0; dragItemSlotDestination = 0; - field743 = false; + field754 = false; itemDragDuration = 0; - field745 = 0; + field756 = 0; showLoadingMessages = true; players = new Player[2048]; localPlayerIndex = -1; - field749 = 0; + field789 = 0; renderSelf = true; drawPlayerNames = 0; - field752 = 0; - field870 = new int[1000]; + field814 = 0; + field764 = new int[1000]; playerMenuOpcodes = new int[]{44, 45, 46, 47, 48, 49, 50, 51}; playerMenuActions = new String[8]; playerOptionsPriorities = new boolean[8]; @@ -1415,21 +1411,21 @@ public final class Client extends GameShell implements Usernamed { showMouseOverText = true; viewportX = -1; viewportY = -1; - field782 = 0; - field783 = 50; + field643 = 0; + field768 = 50; isItemSelected = 0; selectedItemName = null; isSpellSelected = false; selectedSpellChildIndex = -1; - field788 = -1; + field799 = -1; selectedSpellActionName = null; selectedSpellName = null; rootInterface = -1; interfaceParents = new NodeHashTable(8); - field828 = 0; - field794 = -1; + field804 = 0; + field805 = -1; chatEffects = 0; - field907 = 0; + field807 = 0; meslayerContinueWidget = null; runEnergy = 0; weight = 0; @@ -1442,54 +1438,54 @@ public final class Client extends GameShell implements Usernamed { widgetClickX = 0; widgetClickY = 0; draggedOnWidget = null; - field809 = false; - field748 = -1; - field751 = -1; - field695 = false; - field846 = -1; - field814 = -1; + field820 = false; + field698 = -1; + field822 = -1; + field823 = false; + field808 = -1; + field825 = -1; isDraggingWidget = false; cycleCntr = 1; - field817 = new int[32]; - field679 = 0; + field828 = new int[32]; + field829 = 0; changedItemContainers = new int[32]; - field820 = 0; + field898 = 0; changedSkills = new int[32]; changedSkillsCount = 0; chatCycle = 0; - field824 = 0; - field825 = 0; - field826 = 0; - field652 = 0; + field833 = 0; + field836 = 0; + field645 = 0; + field734 = 0; field834 = 0; mouseWheelRotation = 0; scriptEvents = new NodeDeque(); - field813 = new NodeDeque(); - field832 = new NodeDeque(); + field900 = new NodeDeque(); + field843 = new NodeDeque(); widgetClickMasks = new NodeHashTable(512); rootWidgetCount = 0; - field835 = -2; - field842 = new boolean[100]; + field690 = -2; + field847 = new boolean[100]; field837 = new boolean[100]; - field631 = new boolean[100]; + field849 = new boolean[100]; rootWidgetXs = new int[100]; rootWidgetYs = new int[100]; rootWidgetWidths = new int[100]; rootWidgetHeights = new int[100]; gameDrawingMode = 0; - field736 = 0L; + field652 = 0L; isResizable = true; - field829 = new int[]{16776960, 16711680, 65280, 65535, 16711935, 16777215}; + field857 = new int[]{16776960, 16711680, 65280, 65535, 16711935, 16777215}; publicChatMode = 0; tradeChatMode = 0; - field849 = ""; - field852 = new long[100]; - field721 = 0; - field866 = 0; - field853 = new int[128]; - field854 = new int[128]; - field663 = -1L; - field856 = -1; + field860 = ""; + field861 = new long[100]; + field855 = 0; + field889 = 0; + field864 = new int[128]; + field865 = new int[128]; + field866 = -1L; + field867 = -1; mapIconCount = 0; mapIconXs = new int[1000]; mapIconYs = new int[1000]; @@ -1499,7 +1495,7 @@ public final class Client extends GameShell implements Usernamed { minimapState = 0; musicVolume = 255; currentTrackGroupId = -1; - field855 = false; + field742 = false; soundEffectVolume = 127; areaSoundEffectVolume = 127; soundEffectCount = 0; @@ -1509,47 +1505,47 @@ public final class Client extends GameShell implements Usernamed { soundLocations = new int[50]; soundEffects = new SoundEffect[50]; isCameraLocked = false; - field641 = new boolean[5]; - field877 = new int[5]; - field795 = new int[5]; - field879 = new int[5]; - field880 = new int[5]; - field881 = 256; - field882 = 205; + field835 = new boolean[5]; + field736 = new int[5]; + field901 = new int[5]; + field890 = new int[5]; + field891 = new int[5]; + field880 = 256; + field893 = 205; zoomHeight = 256; zoomWidth = 320; - field885 = 1; - field886 = 32767; - field844 = 1; - field888 = 32767; + field896 = 1; + field897 = 32767; + field785 = 1; + field679 = 32767; viewportOffsetX = 0; viewportOffsetY = 0; viewportWidth = 0; viewportHeight = 0; viewportZoom = 0; playerAppearance = new PlayerAppearance(); - field818 = -1; - field896 = -1; + field906 = -1; + field907 = -1; platformInfoProvider = new DesktopPlatformInfoProvider(); grandExchangeOffers = new GrandExchangeOffer[8]; GrandExchangeEvents_worldComparator = new GrandExchangeOfferOwnWorldComparator(); - field900 = -1; + field863 = -1; archiveLoaders = new ArrayList(10); archiveLoadersDone = 0; - field903 = 0; - field904 = new class65(); - field890 = new int[50]; - field906 = new int[50]; + field914 = 0; + field915 = new class65(); + field916 = new int[50]; + field862 = new int[50]; } - @ObfuscatedName("x") + @ObfuscatedName("e") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "2060332880" + garbageValue = "-1452127908" ) @Export("resizeGame") protected final void resizeGame() { - field736 = PlayerAppearance.currentTimeMillis() + 500L; + field652 = TaskHandler.currentTimeMillis() + 500L; this.resizeJS(); if (rootInterface != -1) { this.resizeRoot(true); @@ -1557,1188 +1553,259 @@ public final class Client extends GameShell implements Usernamed { } - @ObfuscatedName("aj") + @ObfuscatedName("aa") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "-1799342365" + signature = "(B)V", + garbageValue = "81" ) @Export("setUp") protected final void setUp() { - Huffman.method4104(new int[]{20, 260, 10000}, new int[]{1000, 100, 500}); - class222.port1 = gameBuild == 0 ? 43594 : worldId + 40000; - Decimator.port2 = gameBuild == 0 ? 443 : worldId + 50000; - GrandExchangeOfferUnitPriceComparator.port3 = class222.port1; - PlayerAppearance.field2519 = class215.field2524; - PlayerAppearance.field2520 = class215.field2527; - class326.field3881 = class215.field2526; - class195.field2359 = class215.field2525; - Skills.urlRequester = new UrlRequester(); + class286.method5353(new int[]{20, 260, 10000}, new int[]{1000, 100, 500}); + SecureRandomCallable.port1 = gameBuild == 0 ? 43594 : worldId + 40000; + class49.port2 = gameBuild == 0 ? 443 : worldId + 50000; + WorldMapIcon_0.port3 = SecureRandomCallable.port1; + PlayerAppearance.field2548 = class215.field2553; + ArchiveLoader.field533 = class215.field2554; + PlayerAppearance.field2542 = class215.field2555; + TileItemPile.field1537 = class215.field2556; + SpriteMask.urlRequester = new UrlRequester(); this.setUpKeyboard(); this.setUpMouse(); - KeyHandler.mouseWheel = this.mouseWheel(); - WorldMapSectionType.masterDisk = new ArchiveDisk(255, JagexCache.JagexCache_dat2File, JagexCache.JagexCache_idx255File, 500000); - ScriptEvent.clientPreferences = Skeleton.method3201(); + ItemContainer.mouseWheel = this.mouseWheel(); + class30.masterDisk = new ArchiveDisk(255, JagexCache.JagexCache_dat2File, JagexCache.JagexCache_idx255File, 500000); + UserComparator10.clientPreferences = WorldMapArea.method422(); this.setUpClipboard(); - NetCache.method4472(this, MusicPatchPcmStream.null_string); + String var2 = Players.null_string; + class51.applet = this; + if (var2 != null) { + class51.field424 = var2; + } + if (gameBuild != 0) { displayFps = true; } - FontName.setWindowedMode(ScriptEvent.clientPreferences.windowMode); - PacketWriter.friendSystem = new FriendSystem(class60.loginType); + MouseHandler.setWindowedMode(UserComparator10.clientPreferences.windowMode); + VertexNormal.friendSystem = new FriendSystem(WorldMapLabelSize.loginType); } - @ObfuscatedName("ae") + @ObfuscatedName("ab") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "-127" + signature = "(I)V", + garbageValue = "776219916" ) @Export("doCycle") protected final void doCycle() { ++cycle; this.doCycleJs5(); - - while (true) { - ArchiveDiskAction var1; - synchronized(ArchiveDiskActionHandler.ArchiveDiskActionHandler_requestQueue) { - var1 = (ArchiveDiskAction)ArchiveDiskActionHandler.ArchiveDiskActionHandler_responseQueue.removeLast(); - } - - if (var1 == null) { - int var45; - try { - if (class197.field2377 == 1) { - var45 = class197.midiPcmStream.method3848(); - if (var45 > 0 && class197.midiPcmStream.isReady()) { - var45 -= class197.field2384; - if (var45 < 0) { - var45 = 0; - } - - class197.midiPcmStream.setPcmStreamVolume(var45); - } else { - class197.midiPcmStream.clear(); - class197.midiPcmStream.removeAll(); - if (class247.musicTrackArchive != null) { - class197.field2377 = 2; - } else { - class197.field2377 = 0; - } - - class197.musicTrack = null; - ByteArrayPool.soundCache = null; - } - } - } catch (Exception var68) { - var68.printStackTrace(); - class197.midiPcmStream.clear(); - class197.field2377 = 0; - class197.musicTrack = null; - ByteArrayPool.soundCache = null; - class247.musicTrackArchive = null; - } - - ChatChannel.playPcmPlayers(); - int var46; - synchronized(KeyHandler.KeyHandler_instance) { - ++KeyHandler.KeyHandler_idleCycles; - KeyHandler.field385 = KeyHandler.field370; - KeyHandler.field384 = 0; - if (KeyHandler.field380 >= 0) { - while (KeyHandler.field380 != KeyHandler.field379) { - var46 = KeyHandler.field378[KeyHandler.field379]; - KeyHandler.field379 = KeyHandler.field379 + 1 & 127; - if (var46 < 0) { - KeyHandler.KeyHandler_pressedKeys[~var46] = false; - } else { - if (!KeyHandler.KeyHandler_pressedKeys[var46] && KeyHandler.field384 < KeyHandler.field383.length - 1) { - KeyHandler.field383[++KeyHandler.field384 - 1] = var46; - } - - KeyHandler.KeyHandler_pressedKeys[var46] = true; - } - } + NetCache.method4399(); + ScriptEvent.method1198(); + Tiles.playPcmPlayers(); + synchronized(KeyHandler.KeyHandler_instance) { + ++KeyHandler.KeyHandler_idleCycles; + KeyHandler.field399 = KeyHandler.field384; + KeyHandler.field398 = 0; + int var2; + if (KeyHandler.field397 >= 0) { + while (KeyHandler.field393 != KeyHandler.field397) { + var2 = KeyHandler.field394[KeyHandler.field393]; + KeyHandler.field393 = KeyHandler.field393 + 1 & 127; + if (var2 < 0) { + KeyHandler.KeyHandler_pressedKeys[~var2] = false; } else { - for (var46 = 0; var46 < 112; ++var46) { - KeyHandler.KeyHandler_pressedKeys[var46] = false; + if (!KeyHandler.KeyHandler_pressedKeys[var2] && KeyHandler.field398 < KeyHandler.field378.length - 1) { + KeyHandler.field378[++KeyHandler.field398 - 1] = var2; } - KeyHandler.field380 = KeyHandler.field379; + KeyHandler.KeyHandler_pressedKeys[var2] = true; } - - if (KeyHandler.field384 > 0) { - KeyHandler.KeyHandler_idleCycles = 0; - } - - KeyHandler.field370 = KeyHandler.field387; + } + } else { + for (var2 = 0; var2 < 112; ++var2) { + KeyHandler.KeyHandler_pressedKeys[var2] = false; } - synchronized(MouseHandler.MouseHandler_instance) { - MouseHandler.MouseHandler_currentButton = MouseHandler.MouseHandler_currentButtonVolatile; - MouseHandler.MouseHandler_x = MouseHandler.MouseHandler_xVolatile; - MouseHandler.MouseHandler_y = MouseHandler.MouseHandler_yVolatile; - MouseHandler.MouseHandler_millis = MouseHandler.MouseHandler_lastMovedVolatile; - MouseHandler.MouseHandler_lastButton = MouseHandler.MouseHandler_lastButtonVolatile; - MouseHandler.MouseHandler_lastPressedX = MouseHandler.MouseHandler_lastPressedXVolatile; - MouseHandler.MouseHandler_lastPressedY = MouseHandler.MouseHandler_lastPressedYVolatile; - MouseHandler.MouseHandler_lastPressedTimeMillis = MouseHandler.MouseHandler_lastPressedTimeMillisVolatile; - MouseHandler.MouseHandler_lastButtonVolatile = 0; - } - - if (KeyHandler.mouseWheel != null) { - var45 = KeyHandler.mouseWheel.useRotation(); - mouseWheelRotation = var45; - } - - if (gameState == 0) { - NetCache.load(); - HealthBar.method2161(); - } else if (gameState == 5) { - class189.doCycleTitle(this); - NetCache.load(); - HealthBar.method2161(); - } else if (gameState != 10 && gameState != 11) { - if (gameState == 20) { - class189.doCycleTitle(this); - this.doCycleLoggedOut(); - } else if (gameState == 25) { - GrandExchangeOfferNameComparator.method172(false); - field684 = 0; - boolean var79 = true; - - for (var46 = 0; var46 < UrlRequester.regionLandArchives.length; ++var46) { - if (class338.regionMapArchiveIds[var46] != -1 && UrlRequester.regionLandArchives[var46] == null) { - UrlRequester.regionLandArchives[var46] = WorldMapRectangle.archive5.takeFile(class338.regionMapArchiveIds[var46], 0); - if (UrlRequester.regionLandArchives[var46] == null) { - var79 = false; - ++field684; - } - } - - if (WorldMapCacheName.regionLandArchiveIds[var46] != -1 && UserComparator3.regionMapArchives[var46] == null) { - UserComparator3.regionMapArchives[var46] = WorldMapRectangle.archive5.takeFileEncrypted(WorldMapCacheName.regionLandArchiveIds[var46], 0, ClientPacket.xteaKeys[var46]); - if (UserComparator3.regionMapArchives[var46] == null) { - var79 = false; - ++field684; - } - } - } - - if (!var79) { - field688 = 1; - } else { - field686 = 0; - var79 = true; - - Buffer var9; - int var10; - int var11; - int var12; - int var14; - int var15; - int var16; - int var17; - int var18; - int var19; - int var47; - int var48; - for (var46 = 0; var46 < UrlRequester.regionLandArchives.length; ++var46) { - byte[] var3 = UserComparator3.regionMapArchives[var46]; - if (var3 != null) { - var47 = (GrandExchangeOfferOwnWorldComparator.regions[var46] >> 8) * 64 - UserComparator8.baseX * 64; - var48 = (GrandExchangeOfferOwnWorldComparator.regions[var46] & 255) * 64 - HealthBar.baseY * 64; - if (isInInstance) { - var47 = 10; - var48 = 10; - } - - boolean var8 = true; - var9 = new Buffer(var3); - var10 = -1; - - label1395: - while (true) { - var11 = var9.method5623(); - if (var11 == 0) { - var79 &= var8; - break; - } - - var10 += var11; - var12 = 0; - boolean var13 = false; - - while (true) { - while (!var13) { - var14 = var9.readUShortSmart(); - if (var14 == 0) { - continue label1395; - } - - var12 += var14 - 1; - var15 = var12 & 63; - var16 = var12 >> 6 & 63; - var17 = var9.readUnsignedByte() >> 2; - var18 = var16 + var47; - var19 = var48 + var15; - if (var18 > 0 && var19 > 0 && var18 < 103 && var19 < 103) { - ObjectDefinition var20 = WorldMapDecorationType.getObjectDefinition(var10); - if (var17 != 22 || !isLowDetail || var20.int1 != 0 || var20.interactType == 1 || var20.boolean2) { - if (!var20.needsModelFiles()) { - ++field686; - var8 = false; - } - - var13 = true; - } - } - } - - var14 = var9.readUShortSmart(); - if (var14 == 0) { - break; - } - - var9.readUnsignedByte(); - } - } - } - } - - if (!var79) { - field688 = 2; - } else { - if (field688 != 0) { - GrandExchangeEvents.drawLoadingMessage("Loading - please wait." + "
" + " (" + 100 + "%" + ")", true); - } - - ChatChannel.playPcmPlayers(); - WorldMapArea.scene.clear(); - - for (var46 = 0; var46 < 4; ++var46) { - collisionMaps[var46].clear(); - } - - int var49; - for (var46 = 0; var46 < 4; ++var46) { - for (var49 = 0; var49 < 104; ++var49) { - for (var47 = 0; var47 < 104; ++var47) { - Tiles.Tiles_renderFlags[var46][var49][var47] = 0; - } - } - } - - ChatChannel.playPcmPlayers(); - MusicPatchPcmStream.method4038(); - var46 = UrlRequester.regionLandArchives.length; - GameShell.method1141(); - GrandExchangeOfferNameComparator.method172(true); - int var6; - int var21; - int var22; - int var53; - int var73; - if (!isInInstance) { - byte[] var50; - for (var49 = 0; var49 < var46; ++var49) { - var47 = (GrandExchangeOfferOwnWorldComparator.regions[var49] >> 8) * 64 - UserComparator8.baseX * 64; - var48 = (GrandExchangeOfferOwnWorldComparator.regions[var49] & 255) * 64 - HealthBar.baseY * 64; - var50 = UrlRequester.regionLandArchives[var49]; - if (var50 != null) { - ChatChannel.playPcmPlayers(); - TilePaint.method3200(var50, var47, var48, WorldMapSectionType.field140 * 8 - 48, ScriptEvent.field563 * 8 - 48, collisionMaps); - } - } - - for (var49 = 0; var49 < var46; ++var49) { - var47 = (GrandExchangeOfferOwnWorldComparator.regions[var49] >> 8) * 64 - UserComparator8.baseX * 64; - var48 = (GrandExchangeOfferOwnWorldComparator.regions[var49] & 255) * 64 - HealthBar.baseY * 64; - var50 = UrlRequester.regionLandArchives[var49]; - if (var50 == null && ScriptEvent.field563 < 800) { - ChatChannel.playPcmPlayers(); - class30.method609(var47, var48, 64, 64); - } - } - - GrandExchangeOfferNameComparator.method172(true); - - for (var49 = 0; var49 < var46; ++var49) { - byte[] var4 = UserComparator3.regionMapArchives[var49]; - if (var4 != null) { - var48 = (GrandExchangeOfferOwnWorldComparator.regions[var49] >> 8) * 64 - UserComparator8.baseX * 64; - var6 = (GrandExchangeOfferOwnWorldComparator.regions[var49] & 255) * 64 - HealthBar.baseY * 64; - ChatChannel.playPcmPlayers(); - Scene var51 = WorldMapArea.scene; - CollisionMap[] var52 = collisionMaps; - var9 = new Buffer(var4); - var10 = -1; - - while (true) { - var11 = var9.method5623(); - if (var11 == 0) { - break; - } - - var10 += var11; - var12 = 0; - - while (true) { - var73 = var9.readUShortSmart(); - if (var73 == 0) { - break; - } - - var12 += var73 - 1; - var14 = var12 & 63; - var15 = var12 >> 6 & 63; - var16 = var12 >> 12; - var17 = var9.readUnsignedByte(); - var18 = var17 >> 2; - var19 = var17 & 3; - var53 = var15 + var48; - var21 = var14 + var6; - if (var53 > 0 && var21 > 0 && var53 < 103 && var21 < 103) { - var22 = var16; - if ((Tiles.Tiles_renderFlags[1][var53][var21] & 2) == 2) { - var22 = var16 - 1; - } - - CollisionMap var23 = null; - if (var22 >= 0) { - var23 = var52[var22]; - } - - class247.method4637(var16, var53, var21, var10, var19, var18, var51, var23); - } - } - } - } - } - } - - int var7; - int[] var10000; - int var27; - int var28; - int var29; - int var30; - int var33; - int var35; - int var36; - int var37; - int var54; - int var57; - int var72; - if (isInInstance) { - var49 = 0; - - label1300: - while (true) { - if (var49 >= 4) { - for (var49 = 0; var49 < 13; ++var49) { - for (var47 = 0; var47 < 13; ++var47) { - var48 = instanceChunkTemplates[0][var49][var47]; - if (var48 == -1) { - class30.method609(var49 * 8, var47 * 8, 8, 8); - } - } - } - - GrandExchangeOfferNameComparator.method172(true); - var49 = 0; - - while (true) { - if (var49 >= 4) { - break label1300; - } - - ChatChannel.playPcmPlayers(); - - for (var47 = 0; var47 < 13; ++var47) { - for (var48 = 0; var48 < 13; ++var48) { - var6 = instanceChunkTemplates[var49][var47][var48]; - if (var6 != -1) { - var7 = var6 >> 24 & 3; - var72 = var6 >> 1 & 3; - var54 = var6 >> 14 & 1023; - var10 = var6 >> 3 & 2047; - var11 = (var54 / 8 << 8) + var10 / 8; - - for (var12 = 0; var12 < GrandExchangeOfferOwnWorldComparator.regions.length; ++var12) { - if (GrandExchangeOfferOwnWorldComparator.regions[var12] == var11 && UserComparator3.regionMapArchives[var12] != null) { - class218.method4263(UserComparator3.regionMapArchives[var12], var49, var47 * 8, var48 * 8, var7, (var54 & 7) * 8, (var10 & 7) * 8, var72, WorldMapArea.scene, collisionMaps); - break; - } - } - } - } - } - - ++var49; - } - } - - ChatChannel.playPcmPlayers(); - - for (var47 = 0; var47 < 13; ++var47) { - for (var48 = 0; var48 < 13; ++var48) { - boolean var71 = false; - var7 = instanceChunkTemplates[var49][var47][var48]; - if (var7 != -1) { - var72 = var7 >> 24 & 3; - var54 = var7 >> 1 & 3; - var10 = var7 >> 14 & 1023; - var11 = var7 >> 3 & 2047; - var12 = (var10 / 8 << 8) + var11 / 8; - - for (var73 = 0; var73 < GrandExchangeOfferOwnWorldComparator.regions.length; ++var73) { - if (GrandExchangeOfferOwnWorldComparator.regions[var73] == var12 && UrlRequester.regionLandArchives[var73] != null) { - byte[] var55 = UrlRequester.regionLandArchives[var73]; - var15 = var47 * 8; - var16 = var48 * 8; - var17 = (var10 & 7) * 8; - var18 = (var11 & 7) * 8; - CollisionMap[] var56 = collisionMaps; - - for (var53 = 0; var53 < 8; ++var53) { - for (var21 = 0; var21 < 8; ++var21) { - if (var53 + var15 > 0 && var53 + var15 < 103 && var16 + var21 > 0 && var16 + var21 < 103) { - var10000 = var56[var49].flags[var53 + var15]; - var10000[var21 + var16] &= -16777217; - } - } - } - - Buffer var74 = new Buffer(var55); - - for (var21 = 0; var21 < 4; ++var21) { - for (var22 = 0; var22 < 64; ++var22) { - for (var57 = 0; var57 < 64; ++var57) { - if (var72 == var21 && var22 >= var17 && var22 < var17 + 8 && var57 >= var18 && var57 < var18 + 8) { - var28 = var22 & 7; - var29 = var57 & 7; - var30 = var54 & 3; - if (var30 == 0) { - var27 = var28; - } else if (var30 == 1) { - var27 = var29; - } else if (var30 == 2) { - var27 = 7 - var28; - } else { - var27 = 7 - var29; - } - - var33 = var27 + var15; - var36 = var22 & 7; - var37 = var57 & 7; - int var38 = var54 & 3; - if (var38 == 0) { - var35 = var37; - } else if (var38 == 1) { - var35 = 7 - var36; - } else if (var38 == 2) { - var35 = 7 - var37; - } else { - var35 = var36; - } - - class312.loadTerrain(var74, var49, var33, var35 + var16, 0, 0, var54); - } else { - class312.loadTerrain(var74, 0, -1, -1, 0, 0, 0); - } - } - } - } - - var71 = true; - break; - } - } - } - - if (!var71) { - class160.method3585(var49, var47 * 8, var48 * 8); - } - } - } - - ++var49; - } - } - - GrandExchangeOfferNameComparator.method172(true); - ChatChannel.playPcmPlayers(); - Scene var69 = WorldMapArea.scene; - CollisionMap[] var70 = collisionMaps; - - for (var48 = 0; var48 < 4; ++var48) { - for (var6 = 0; var6 < 104; ++var6) { - for (var7 = 0; var7 < 104; ++var7) { - if ((Tiles.Tiles_renderFlags[var48][var6][var7] & 1) == 1) { - var72 = var48; - if ((Tiles.Tiles_renderFlags[1][var6][var7] & 2) == 2) { - var72 = var48 - 1; - } - - if (var72 >= 0) { - var70[var72].setBlockedByFloor(var6, var7); - } - } - } - } - } - - Tiles.field495 += (int)(Math.random() * 5.0D) - 2; - if (Tiles.field495 < -8) { - Tiles.field495 = -8; - } - - if (Tiles.field495 > 8) { - Tiles.field495 = 8; - } - - Tiles.field496 += (int)(Math.random() * 5.0D) - 2; - if (Tiles.field496 < -16) { - Tiles.field496 = -16; - } - - if (Tiles.field496 > 16) { - Tiles.field496 = 16; - } - - for (var48 = 0; var48 < 4; ++var48) { - byte[][] var80 = class96.field1300[var48]; - var12 = (int)Math.sqrt(5100.0D); - var73 = var12 * 768 >> 8; - - for (var14 = 1; var14 < 103; ++var14) { - for (var15 = 1; var15 < 103; ++var15) { - var16 = Tiles.Tiles_heights[var48][var15 + 1][var14] - Tiles.Tiles_heights[var48][var15 - 1][var14]; - var17 = Tiles.Tiles_heights[var48][var15][var14 + 1] - Tiles.Tiles_heights[var48][var15][var14 - 1]; - var18 = (int)Math.sqrt((double)(var16 * var16 + var17 * var17 + 65536)); - var19 = (var16 << 8) / var18; - var53 = 65536 / var18; - var21 = (var17 << 8) / var18; - var22 = (var19 * -50 + var21 * -50 + var53 * -10) / var73 + 96; - var57 = (var80[var15][var14 + 1] >> 3) + (var80[var15 - 1][var14] >> 2) + (var80[var15][var14 - 1] >> 2) + (var80[var15 + 1][var14] >> 3) + (var80[var15][var14] >> 1); - UserComparator10.field1964[var15][var14] = var22 - var57; - } - } - - for (var14 = 0; var14 < 104; ++var14) { - Tiles.Tiles_hue[var14] = 0; - Tiles.Tiles_saturation[var14] = 0; - Tiles.Tiles_lightness[var14] = 0; - Tiles.Tiles_hueMultiplier[var14] = 0; - PlayerType.field3083[var14] = 0; - } - - for (var14 = -5; var14 < 109; ++var14) { - for (var15 = 0; var15 < 104; ++var15) { - var16 = var14 + 5; - int var10002; - if (var16 >= 0 && var16 < 104) { - var17 = SoundSystem.field1414[var48][var16][var15] & 255; - if (var17 > 0) { - var19 = var17 - 1; - FloorUnderlayDefinition var75 = (FloorUnderlayDefinition)FloorUnderlayDefinition.FloorUnderlayDefinition_cached.get((long)var19); - FloorUnderlayDefinition var58; - if (var75 != null) { - var58 = var75; - } else { - byte[] var59 = FloorUnderlayDefinition.FloorUnderlayDefinition_archive.takeFile(1, var19); - var75 = new FloorUnderlayDefinition(); - if (var59 != null) { - var75.decode(new Buffer(var59), var19); - } - - var75.postDecode(); - FloorUnderlayDefinition.FloorUnderlayDefinition_cached.put(var75, (long)var19); - var58 = var75; - } - - var10000 = Tiles.Tiles_hue; - var10000[var15] += var58.hue; - var10000 = Tiles.Tiles_saturation; - var10000[var15] += var58.saturation; - var10000 = Tiles.Tiles_lightness; - var10000[var15] += var58.lightness; - var10000 = Tiles.Tiles_hueMultiplier; - var10000[var15] += var58.hueMultiplier; - var10002 = PlayerType.field3083[var15]++; - } - } - - var17 = var14 - 5; - if (var17 >= 0 && var17 < 104) { - var18 = SoundSystem.field1414[var48][var17][var15] & 255; - if (var18 > 0) { - var53 = var18 - 1; - FloorUnderlayDefinition var84 = (FloorUnderlayDefinition)FloorUnderlayDefinition.FloorUnderlayDefinition_cached.get((long)var53); - FloorUnderlayDefinition var83; - if (var84 != null) { - var83 = var84; - } else { - byte[] var60 = FloorUnderlayDefinition.FloorUnderlayDefinition_archive.takeFile(1, var53); - var84 = new FloorUnderlayDefinition(); - if (var60 != null) { - var84.decode(new Buffer(var60), var53); - } - - var84.postDecode(); - FloorUnderlayDefinition.FloorUnderlayDefinition_cached.put(var84, (long)var53); - var83 = var84; - } - - var10000 = Tiles.Tiles_hue; - var10000[var15] -= var83.hue; - var10000 = Tiles.Tiles_saturation; - var10000[var15] -= var83.saturation; - var10000 = Tiles.Tiles_lightness; - var10000[var15] -= var83.lightness; - var10000 = Tiles.Tiles_hueMultiplier; - var10000[var15] -= var83.hueMultiplier; - var10002 = PlayerType.field3083[var15]--; - } - } - } - - if (var14 >= 1 && var14 < 103) { - var15 = 0; - var16 = 0; - var17 = 0; - var18 = 0; - var19 = 0; - - for (var53 = -5; var53 < 109; ++var53) { - var21 = var53 + 5; - if (var21 >= 0 && var21 < 104) { - var15 += Tiles.Tiles_hue[var21]; - var16 += Tiles.Tiles_saturation[var21]; - var17 += Tiles.Tiles_lightness[var21]; - var18 += Tiles.Tiles_hueMultiplier[var21]; - var19 += PlayerType.field3083[var21]; - } - - var22 = var53 - 5; - if (var22 >= 0 && var22 < 104) { - var15 -= Tiles.Tiles_hue[var22]; - var16 -= Tiles.Tiles_saturation[var22]; - var17 -= Tiles.Tiles_lightness[var22]; - var18 -= Tiles.Tiles_hueMultiplier[var22]; - var19 -= PlayerType.field3083[var22]; - } - - if (var53 >= 1 && var53 < 103 && (!isLowDetail || (Tiles.Tiles_renderFlags[0][var14][var53] & 2) != 0 || (Tiles.Tiles_renderFlags[var48][var14][var53] & 16) == 0)) { - if (var48 < Tiles.Tiles_minPlane) { - Tiles.Tiles_minPlane = var48; - } - - var57 = SoundSystem.field1414[var48][var14][var53] & 255; - int var61 = Tiles.field485[var48][var14][var53] & 255; - if (var57 > 0 || var61 > 0) { - int var25 = Tiles.Tiles_heights[var48][var14][var53]; - int var26 = Tiles.Tiles_heights[var48][var14 + 1][var53]; - var27 = Tiles.Tiles_heights[var48][var14 + 1][var53 + 1]; - var28 = Tiles.Tiles_heights[var48][var14][var53 + 1]; - var29 = UserComparator10.field1964[var14][var53]; - var30 = UserComparator10.field1964[var14 + 1][var53]; - int var62 = UserComparator10.field1964[var14 + 1][var53 + 1]; - int var32 = UserComparator10.field1964[var14][var53 + 1]; - var33 = -1; - int var34 = -1; - if (var57 > 0) { - var35 = var15 * 256 / var18; - var36 = var16 / var19; - var37 = var17 / var19; - var33 = EnumDefinition.hslToRgb(var35, var36, var37); - var35 = var35 + Tiles.field495 & 255; - var37 += Tiles.field496; - if (var37 < 0) { - var37 = 0; - } else if (var37 > 255) { - var37 = 255; - } - - var34 = EnumDefinition.hslToRgb(var35, var36, var37); - } - - if (var48 > 0) { - boolean var77 = true; - if (var57 == 0 && Tiles.field482[var48][var14][var53] != 0) { - var77 = false; - } - - if (var61 > 0 && !WorldMapDecoration.FloorUnderlayDefinition_get(var61 - 1).hideUnderlay) { - var77 = false; - } - - if (var77 && var25 == var26 && var25 == var27 && var28 == var25) { - var10000 = Tiles.field488[var48][var14]; - var10000[var53] |= 2340; - } - } - - var35 = 0; - if (var34 != -1) { - var35 = Rasterizer3D.Rasterizer3D_colorPalette[WorldMapCacheName.method686(var34, 96)]; - } - - if (var61 == 0) { - var69.addTile(var48, var14, var53, 0, 0, -1, var25, var26, var27, var28, WorldMapCacheName.method686(var33, var29), WorldMapCacheName.method686(var33, var30), WorldMapCacheName.method686(var33, var62), WorldMapCacheName.method686(var33, var32), 0, 0, 0, 0, var35, 0); - } else { - var36 = Tiles.field482[var48][var14][var53] + 1; - byte var78 = Tiles.field483[var48][var14][var53]; - FloorOverlayDefinition var63 = WorldMapDecoration.FloorUnderlayDefinition_get(var61 - 1); - int var39 = var63.texture; - int var40; - int var41; - int var42; - int var43; - if (var39 >= 0) { - var41 = Rasterizer3D.Rasterizer3D_textureLoader.getAverageTextureRGB(var39); - var40 = -1; - } else if (var63.primaryRgb == 16711935) { - var40 = -2; - var39 = -1; - var41 = -2; - } else { - var40 = EnumDefinition.hslToRgb(var63.hue, var63.saturation, var63.lightness); - var42 = var63.hue + Tiles.field495 & 255; - var43 = var63.lightness + Tiles.field496; - if (var43 < 0) { - var43 = 0; - } else if (var43 > 255) { - var43 = 255; - } - - var41 = EnumDefinition.hslToRgb(var42, var63.saturation, var43); - } - - var42 = 0; - if (var41 != -2) { - var42 = Rasterizer3D.Rasterizer3D_colorPalette[HealthBarUpdate.method1880(var41, 96)]; - } - - if (var63.secondaryRgb != -1) { - var43 = var63.secondaryHue + Tiles.field495 & 255; - int var44 = var63.secondaryLightness + Tiles.field496; - if (var44 < 0) { - var44 = 0; - } else if (var44 > 255) { - var44 = 255; - } - - var41 = EnumDefinition.hslToRgb(var43, var63.secondarySaturation, var44); - var42 = Rasterizer3D.Rasterizer3D_colorPalette[HealthBarUpdate.method1880(var41, 96)]; - } - - var69.addTile(var48, var14, var53, var36, var78, var39, var25, var26, var27, var28, WorldMapCacheName.method686(var33, var29), WorldMapCacheName.method686(var33, var30), WorldMapCacheName.method686(var33, var62), WorldMapCacheName.method686(var33, var32), HealthBarUpdate.method1880(var40, var29), HealthBarUpdate.method1880(var40, var30), HealthBarUpdate.method1880(var40, var62), HealthBarUpdate.method1880(var40, var32), var35, var42); - } - } - } - } - } - } - - for (var14 = 1; var14 < 103; ++var14) { - for (var15 = 1; var15 < 103; ++var15) { - if ((Tiles.Tiles_renderFlags[var48][var15][var14] & 8) != 0) { - var53 = 0; - } else if (var48 > 0 && (Tiles.Tiles_renderFlags[1][var15][var14] & 2) != 0) { - var53 = var48 - 1; - } else { - var53 = var48; - } - - var69.setTileMinPlane(var48, var15, var14, var53); - } - } - - SoundSystem.field1414[var48] = null; - Tiles.field485[var48] = null; - Tiles.field482[var48] = null; - Tiles.field483[var48] = null; - class96.field1300[var48] = null; - } - - var69.method3234(-50, -10, -50); - - for (var48 = 0; var48 < 104; ++var48) { - for (var6 = 0; var6 < 104; ++var6) { - if ((Tiles.Tiles_renderFlags[1][var48][var6] & 2) == 2) { - var69.setLinkBelow(var48, var6); - } - } - } - - var48 = 1; - var6 = 2; - var7 = 4; - - for (var72 = 0; var72 < 4; ++var72) { - if (var72 > 0) { - var48 <<= 3; - var6 <<= 3; - var7 <<= 3; - } - - for (var54 = 0; var54 <= var72; ++var54) { - for (var10 = 0; var10 <= 104; ++var10) { - for (var11 = 0; var11 <= 104; ++var11) { - short var76; - if ((Tiles.field488[var54][var11][var10] & var48) != 0) { - var12 = var10; - var73 = var10; - var14 = var54; - - for (var15 = var54; var12 > 0 && (Tiles.field488[var54][var11][var12 - 1] & var48) != 0; --var12) { - } - - while (var73 < 104 && (Tiles.field488[var54][var11][var73 + 1] & var48) != 0) { - ++var73; - } - - label951: - while (var14 > 0) { - for (var16 = var12; var16 <= var73; ++var16) { - if ((Tiles.field488[var14 - 1][var11][var16] & var48) == 0) { - break label951; - } - } - - --var14; - } - - label940: - while (var15 < var72) { - for (var16 = var12; var16 <= var73; ++var16) { - if ((Tiles.field488[var15 + 1][var11][var16] & var48) == 0) { - break label940; - } - } - - ++var15; - } - - var16 = (var73 - var12 + 1) * (var15 + 1 - var14); - if (var16 >= 8) { - var76 = 240; - var18 = Tiles.Tiles_heights[var15][var11][var12] - var76; - var19 = Tiles.Tiles_heights[var14][var11][var12]; - Scene.Scene_addOccluder(var72, 1, var11 * 128, var11 * 128, var12 * 128, var73 * 128 + 128, var18, var19); - - for (var53 = var14; var53 <= var15; ++var53) { - for (var21 = var12; var21 <= var73; ++var21) { - var10000 = Tiles.field488[var53][var11]; - var10000[var21] &= ~var48; - } - } - } - } - - if ((Tiles.field488[var54][var11][var10] & var6) != 0) { - var12 = var11; - var73 = var11; - var14 = var54; - - for (var15 = var54; var12 > 0 && (Tiles.field488[var54][var12 - 1][var10] & var6) != 0; --var12) { - } - - while (var73 < 104 && (Tiles.field488[var54][var73 + 1][var10] & var6) != 0) { - ++var73; - } - - label1004: - while (var14 > 0) { - for (var16 = var12; var16 <= var73; ++var16) { - if ((Tiles.field488[var14 - 1][var16][var10] & var6) == 0) { - break label1004; - } - } - - --var14; - } - - label993: - while (var15 < var72) { - for (var16 = var12; var16 <= var73; ++var16) { - if ((Tiles.field488[var15 + 1][var16][var10] & var6) == 0) { - break label993; - } - } - - ++var15; - } - - var16 = (var73 - var12 + 1) * (var15 + 1 - var14); - if (var16 >= 8) { - var76 = 240; - var18 = Tiles.Tiles_heights[var15][var12][var10] - var76; - var19 = Tiles.Tiles_heights[var14][var12][var10]; - Scene.Scene_addOccluder(var72, 2, var12 * 128, var73 * 128 + 128, var10 * 128, var10 * 128, var18, var19); - - for (var53 = var14; var53 <= var15; ++var53) { - for (var21 = var12; var21 <= var73; ++var21) { - var10000 = Tiles.field488[var53][var21]; - var10000[var10] &= ~var6; - } - } - } - } - - if ((Tiles.field488[var54][var11][var10] & var7) != 0) { - var12 = var11; - var73 = var11; - var14 = var10; - - for (var15 = var10; var14 > 0 && (Tiles.field488[var54][var11][var14 - 1] & var7) != 0; --var14) { - } - - while (var15 < 104 && (Tiles.field488[var54][var11][var15 + 1] & var7) != 0) { - ++var15; - } - - label1057: - while (var12 > 0) { - for (var16 = var14; var16 <= var15; ++var16) { - if ((Tiles.field488[var54][var12 - 1][var16] & var7) == 0) { - break label1057; - } - } - - --var12; - } - - label1046: - while (var73 < 104) { - for (var16 = var14; var16 <= var15; ++var16) { - if ((Tiles.field488[var54][var73 + 1][var16] & var7) == 0) { - break label1046; - } - } - - ++var73; - } - - if ((var15 - var14 + 1) * (var73 - var12 + 1) >= 4) { - var16 = Tiles.Tiles_heights[var54][var12][var14]; - Scene.Scene_addOccluder(var72, 4, var12 * 128, var73 * 128 + 128, var14 * 128, var15 * 128 + 128, var16, var16); - - for (var17 = var12; var17 <= var73; ++var17) { - for (var18 = var14; var18 <= var15; ++var18) { - var10000 = Tiles.field488[var54][var17]; - var10000[var18] &= ~var7; - } - } - } - } - } - } - } - } - - GrandExchangeOfferNameComparator.method172(true); - var48 = Tiles.Tiles_minPlane; - if (var48 > Player.Client_plane) { - var48 = Player.Client_plane; - } - - if (var48 < Player.Client_plane - 1) { - var48 = Player.Client_plane - 1; - } - - if (isLowDetail) { - WorldMapArea.scene.init(Tiles.Tiles_minPlane); - } else { - WorldMapArea.scene.init(0); - } - - for (var6 = 0; var6 < 104; ++var6) { - for (var7 = 0; var7 < 104; ++var7) { - class4.updateItemPile(var6, var7); - } - } - - ChatChannel.playPcmPlayers(); - - for (PendingSpawn var81 = (PendingSpawn)pendingSpawns.last(); var81 != null; var81 = (PendingSpawn)pendingSpawns.previous()) { - if (var81.hitpoints == -1) { - var81.delay = 0; - FaceNormal.method3396(var81); - } else { - var81.remove(); - } - } - - ObjectDefinition.ObjectDefinition_cachedModelData.clear(); - PacketBufferNode var82; - if (WorldMapID.client.hasFrame()) { - var82 = SoundSystem.getPacketBufferNode(ClientPacket.field2271, packetWriter.isaacCipher); - var82.packetBuffer.writeInt(1057001181); - packetWriter.addNode(var82); - } - - if (!isInInstance) { - var6 = (WorldMapSectionType.field140 - 6) / 8; - var7 = (WorldMapSectionType.field140 + 6) / 8; - var72 = (ScriptEvent.field563 - 6) / 8; - var54 = (ScriptEvent.field563 + 6) / 8; - - for (var10 = var6 - 1; var10 <= var7 + 1; ++var10) { - for (var11 = var72 - 1; var11 <= var54 + 1; ++var11) { - if (var10 < var6 || var10 > var7 || var11 < var72 || var11 > var54) { - WorldMapRectangle.archive5.loadRegionFromName("m" + var10 + "_" + var11); - WorldMapRectangle.archive5.loadRegionFromName("l" + var10 + "_" + var11); - } - } - } - } - - Tile.updateGameState(30); - ChatChannel.playPcmPlayers(); - SoundSystem.field1414 = null; - Tiles.field485 = null; - Tiles.field482 = null; - Tiles.field483 = null; - Tiles.field488 = null; - class96.field1300 = null; - UserComparator10.field1964 = null; - Tiles.Tiles_hue = null; - Tiles.Tiles_saturation = null; - Tiles.Tiles_lightness = null; - Tiles.Tiles_hueMultiplier = null; - PlayerType.field3083 = null; - var82 = SoundSystem.getPacketBufferNode(ClientPacket.field2280, packetWriter.isaacCipher); - packetWriter.addNode(var82); - HealthBar.method2161(); - } - } - } - } else { - class189.doCycleTitle(this); - } - - if (gameState == 30) { - this.doCycleLoggedIn(); - } else if (gameState == 40 || gameState == 45) { - this.doCycleLoggedOut(); - } - - return; + KeyHandler.field397 = KeyHandler.field393; } - var1.archive.load(var1.archiveDisk, (int)var1.key, var1.data, false); + if (KeyHandler.field398 > 0) { + KeyHandler.KeyHandler_idleCycles = 0; + } + + KeyHandler.field384 = KeyHandler.field400; } + + synchronized(MouseHandler.MouseHandler_instance) { + MouseHandler.MouseHandler_currentButton = MouseHandler.MouseHandler_currentButtonVolatile; + MouseHandler.MouseHandler_x = MouseHandler.MouseHandler_xVolatile; + MouseHandler.MouseHandler_y = MouseHandler.MouseHandler_yVolatile; + MouseHandler.MouseHandler_millis = MouseHandler.MouseHandler_lastMovedVolatile; + MouseHandler.MouseHandler_lastButton = MouseHandler.MouseHandler_lastButtonVolatile; + MouseHandler.MouseHandler_lastPressedX = MouseHandler.MouseHandler_lastPressedXVolatile; + MouseHandler.MouseHandler_lastPressedY = MouseHandler.MouseHandler_lastPressedYVolatile; + MouseHandler.MouseHandler_lastPressedTimeMillis = MouseHandler.MouseHandler_lastPressedTimeMillisVolatile; + MouseHandler.MouseHandler_lastButtonVolatile = 0; + } + + int var5; + if (ItemContainer.mouseWheel != null) { + var5 = ItemContainer.mouseWheel.useRotation(); + mouseWheelRotation = var5; + } + + if (gameState == 0) { + GrandExchangeOfferOwnWorldComparator.load(); + BuddyRankComparator.clock.mark(); + + for (var5 = 0; var5 < 32; ++var5) { + GameShell.graphicsTickTimes[var5] = 0L; + } + + for (var5 = 0; var5 < 32; ++var5) { + GameShell.clientTickTimes[var5] = 0L; + } + + GameShell.gameCyclesToDo = 0; + } else if (gameState == 5) { + ObjectDefinition.doCycleTitle(this); + GrandExchangeOfferOwnWorldComparator.load(); + BuddyRankComparator.clock.mark(); + + for (var5 = 0; var5 < 32; ++var5) { + GameShell.graphicsTickTimes[var5] = 0L; + } + + for (var5 = 0; var5 < 32; ++var5) { + GameShell.clientTickTimes[var5] = 0L; + } + + GameShell.gameCyclesToDo = 0; + } else if (gameState != 10 && gameState != 11) { + if (gameState == 20) { + ObjectDefinition.doCycleTitle(this); + this.doCycleLoggedOut(); + } else if (gameState == 25) { + class267.method5068(); + } + } else { + ObjectDefinition.doCycleTitle(this); + } + + if (gameState == 30) { + this.doCycleLoggedIn(); + } else if (gameState == 40 || gameState == 45) { + this.doCycleLoggedOut(); + } + } - @ObfuscatedName("au") + @ObfuscatedName("ar") @ObfuscatedSignature( - signature = "(ZI)V", - garbageValue = "-1361952953" + signature = "(ZB)V", + garbageValue = "-24" ) @Export("draw") protected final void draw(boolean var1) { boolean var2; - label170: { + label171: { try { - if (class197.field2377 == 2) { - if (class197.musicTrack == null) { - class197.musicTrack = MusicTrack.readTrack(class247.musicTrackArchive, class189.musicTrackGroupId, class197.musicTrackFileId); - if (class197.musicTrack == null) { + if (class197.field2411 == 2) { + if (WorldMapSprite.musicTrack == null) { + WorldMapSprite.musicTrack = MusicTrack.readTrack(class197.musicTrackArchive, UrlRequester.musicTrackGroupId, UserComparator7.musicTrackFileId); + if (WorldMapSprite.musicTrack == null) { var2 = false; - break label170; + break label171; } } - if (ByteArrayPool.soundCache == null) { - ByteArrayPool.soundCache = new SoundCache(class197.soundEffectsArchive, class197.musicSamplesArchive); + if (NPC.soundCache == null) { + NPC.soundCache = new SoundCache(class197.soundEffectsArchive, class197.musicSamplesArchive); } - if (class197.midiPcmStream.loadMusicTrack(class197.musicTrack, class197.musicPatchesArchive, ByteArrayPool.soundCache, 22050)) { - class197.midiPcmStream.clearAll(); - class197.midiPcmStream.setPcmStreamVolume(class197.musicTrackVolume); - class197.midiPcmStream.setMusicTrack(class197.musicTrack, ScriptFrame.musicTrackBoolean); - class197.field2377 = 0; - class197.musicTrack = null; - ByteArrayPool.soundCache = null; - class247.musicTrackArchive = null; + if (FaceNormal.midiPcmStream.loadMusicTrack(WorldMapSprite.musicTrack, class197.musicPatchesArchive, NPC.soundCache, 22050)) { + FaceNormal.midiPcmStream.clearAll(); + FaceNormal.midiPcmStream.setPcmStreamVolume(class197.musicTrackVolume); + FaceNormal.midiPcmStream.setMusicTrack(WorldMapSprite.musicTrack, ArchiveLoader.musicTrackBoolean); + class197.field2411 = 0; + WorldMapSprite.musicTrack = null; + NPC.soundCache = null; + class197.musicTrackArchive = null; var2 = true; - break label170; + break label171; } } } catch (Exception var6) { var6.printStackTrace(); - class197.midiPcmStream.clear(); - class197.field2377 = 0; - class197.musicTrack = null; - ByteArrayPool.soundCache = null; - class247.musicTrackArchive = null; + FaceNormal.midiPcmStream.clear(); + class197.field2411 = 0; + WorldMapSprite.musicTrack = null; + NPC.soundCache = null; + class197.musicTrackArchive = null; } var2 = false; } - if (var2 && field855 && class80.pcmPlayer0 != null) { - class80.pcmPlayer0.tryDiscard(); + if (var2 && field742 && MenuAction.pcmPlayer0 != null) { + MenuAction.pcmPlayer0.tryDiscard(); } - if ((gameState == 10 || gameState == 20 || gameState == 30) && field736 != 0L && PlayerAppearance.currentTimeMillis() > field736) { - FontName.setWindowedMode(WallDecoration.getWindowedMode()); + if ((gameState == 10 || gameState == 20 || gameState == 30) && field652 != 0L && TaskHandler.currentTimeMillis() > field652) { + MouseHandler.setWindowedMode(class43.getWindowedMode()); } int var4; if (var1) { for (var4 = 0; var4 < 100; ++var4) { - field842[var4] = true; + field847[var4] = true; } } if (gameState == 0) { this.drawInitial(Login.Login_loadingPercent, Login.Login_loadingText, var1); } else if (gameState == 5) { - class1.drawTitle(class43.fontBold12, class51.fontPlain11, ArchiveDiskActionHandler.fontPlain12); + ClientPacket.drawTitle(JagexCache.fontBold12, AttackOption.fontPlain11, Player.fontPlain12); } else if (gameState != 10 && gameState != 11) { if (gameState == 20) { - class1.drawTitle(class43.fontBold12, class51.fontPlain11, ArchiveDiskActionHandler.fontPlain12); + ClientPacket.drawTitle(JagexCache.fontBold12, AttackOption.fontPlain11, Player.fontPlain12); } else if (gameState == 25) { - if (field688 == 1) { - if (field684 > field685) { - field685 = field684; + if (field699 == 1) { + if (field676 > field794) { + field794 = field676; } - var4 = (field685 * 50 - field684 * 50) / field685; - GrandExchangeEvents.drawLoadingMessage("Loading - please wait." + "
" + " (" + var4 + "%" + ")", false); - } else if (field688 == 2) { - if (field686 > field687) { - field687 = field686; + var4 = (field794 * 50 - field676 * 50) / field794; + WorldMapIcon_1.drawLoadingMessage("Loading - please wait." + "
" + " (" + var4 + "%" + ")", false); + } else if (field699 == 2) { + if (field850 > field672) { + field672 = field850; } - var4 = (field687 * 50 - field686 * 50) / field687 + 50; - GrandExchangeEvents.drawLoadingMessage("Loading - please wait." + "
" + " (" + var4 + "%" + ")", false); + var4 = (field672 * 50 - field850 * 50) / field672 + 50; + WorldMapIcon_1.drawLoadingMessage("Loading - please wait." + "
" + " (" + var4 + "%" + ")", false); } else { - GrandExchangeEvents.drawLoadingMessage("Loading - please wait.", false); + WorldMapIcon_1.drawLoadingMessage("Loading - please wait.", false); } } else if (gameState == 30) { this.drawLoggedIn(); } else if (gameState == 40) { - GrandExchangeEvents.drawLoadingMessage("Connection lost" + "
" + "Please wait - attempting to reestablish", false); + WorldMapIcon_1.drawLoadingMessage("Connection lost" + "
" + "Please wait - attempting to reestablish", false); } else if (gameState == 45) { - GrandExchangeEvents.drawLoadingMessage("Please wait...", false); + WorldMapIcon_1.drawLoadingMessage("Please wait...", false); } } else { - class1.drawTitle(class43.fontBold12, class51.fontPlain11, ArchiveDiskActionHandler.fontPlain12); + ClientPacket.drawTitle(JagexCache.fontBold12, AttackOption.fontPlain11, Player.fontPlain12); } if (gameState == 30 && gameDrawingMode == 0 && !var1 && !isResizable) { for (var4 = 0; var4 < rootWidgetCount; ++var4) { if (field837[var4]) { - AbstractWorldMapData.rasterProvider.draw(rootWidgetXs[var4], rootWidgetYs[var4], rootWidgetWidths[var4], rootWidgetHeights[var4]); + DirectByteArrayCopier.rasterProvider.draw(rootWidgetXs[var4], rootWidgetYs[var4], rootWidgetWidths[var4], rootWidgetHeights[var4]); field837[var4] = false; } } } else if (gameState > 0) { - AbstractWorldMapData.rasterProvider.drawFull(0, 0); + DirectByteArrayCopier.rasterProvider.drawFull(0, 0); for (var4 = 0; var4 < rootWidgetCount; ++var4) { field837[var4] = false; @@ -2747,59 +1814,70 @@ public final class Client extends GameShell implements Usernamed { } - @ObfuscatedName("ah") + @ObfuscatedName("av") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "-1838623985" + signature = "(B)V", + garbageValue = "-105" ) @Export("kill0") protected final void kill0() { - if (class1.varcs.hasUnwrittenChanges()) { - class1.varcs.write(); + if (AttackOption.varcs.hasUnwrittenChanges()) { + AttackOption.varcs.write(); } - if (class3.mouseRecorder != null) { - class3.mouseRecorder.isRunning = false; + if (class2.mouseRecorder != null) { + class2.mouseRecorder.isRunning = false; } - class3.mouseRecorder = null; + class2.mouseRecorder = null; packetWriter.close(); - class43.method880(); - NPCDefinition.method4880(); - KeyHandler.mouseWheel = null; - if (class80.pcmPlayer0 != null) { - class80.pcmPlayer0.shutdown(); + MusicPatchNode2.method3750(); + SpriteMask.method4040(); + ItemContainer.mouseWheel = null; + if (MenuAction.pcmPlayer0 != null) { + MenuAction.pcmPlayer0.shutdown(); } - if (MenuAction.pcmPlayer1 != null) { - MenuAction.pcmPlayer1.shutdown(); + if (class60.pcmPlayer1 != null) { + class60.pcmPlayer1.shutdown(); } - class185.method3774(); - class218.method4255(); - if (Skills.urlRequester != null) { - Skills.urlRequester.close(); - Skills.urlRequester = null; + GameShell.method1074(); + synchronized(ArchiveDiskActionHandler.ArchiveDiskActionHandler_lock) { + if (ArchiveDiskActionHandler.field3155 != 0) { + ArchiveDiskActionHandler.field3155 = 1; + + try { + ArchiveDiskActionHandler.ArchiveDiskActionHandler_lock.wait(); + } catch (InterruptedException var4) { + } + } } - Tile.method3023(); + if (SpriteMask.urlRequester != null) { + SpriteMask.urlRequester.close(); + SpriteMask.urlRequester = null; + } + + Login.method2125(); } - @ObfuscatedName("at") + @ObfuscatedName("an") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "-22" + signature = "(I)V", + garbageValue = "-1314130629" ) - protected final void vmethod1393() { + protected final void vmethod1301() { } public final void init() { try { if (this.checkHost()) { + int var4; + int var6; for (int var1 = 0; var1 <= 19; ++var1) { String var2 = this.getParameter(Integer.toString(var1)); if (var2 != null) { - int var4; switch(var1) { case 1: useBufferedSocket = Integer.parseInt(var2) != 0; @@ -2826,313 +1904,380 @@ public final class Client extends GameShell implements Usernamed { break; case 6: var4 = Integer.parseInt(var2); - Language var13; + Language var43; if (var4 >= 0 && var4 < Language.Language_valuesOrdered.length) { - var13 = Language.Language_valuesOrdered[var4]; + var43 = Language.Language_valuesOrdered[var4]; } else { - var13 = null; + var43 = null; } - WorldMapSection1.clientLanguage = var13; + VarbitDefinition.clientLanguage = var43; break; case 7: var4 = Integer.parseInt(var2); - ServerBuild[] var5 = new ServerBuild[]{ServerBuild.BUILDLIVE, ServerBuild.WIP, ServerBuild.RC, ServerBuild.LIVE}; - ServerBuild[] var6 = var5; - int var7 = 0; + ServerBuild[] var5 = WorldMapSection0.method245(); + var6 = 0; ServerBuild var3; while (true) { - if (var7 >= var6.length) { + if (var6 >= var5.length) { var3 = null; break; } - ServerBuild var8 = var6[var7]; - if (var4 == var8.field3088) { - var3 = var8; + ServerBuild var7 = var5[var6]; + if (var4 == var7.field3109) { + var3 = var7; break; } - ++var7; + ++var6; } - class32.field265 = var3; + class40.field352 = var3; break; case 8: if (var2.equalsIgnoreCase("true")) { } break; case 9: - MilliClock.field1994 = var2; + WorldMapManager.field327 = var2; break; case 10: - MouseHandler.field458 = (StudioGame)WorldMapIcon_1.findEnumerated(class60.method1260(), Integer.parseInt(var2)); - if (StudioGame.oldscape == MouseHandler.field458) { - class60.loginType = LoginType.oldscape; + UserComparator8.field1973 = (StudioGame)CollisionMap.findEnumerated(WorldMapAreaData.method709(), Integer.parseInt(var2)); + if (UserComparator8.field1973 == StudioGame.oldscape) { + WorldMapLabelSize.loginType = LoginType.oldscape; } else { - class60.loginType = LoginType.field4032; + WorldMapLabelSize.loginType = LoginType.field4031; } break; case 12: worldId = Integer.parseInt(var2); break; case 14: - class339.field4041 = Integer.parseInt(var2); + class13.field91 = Integer.parseInt(var2); break; case 15: gameBuild = Integer.parseInt(var2); break; case 17: - class335.field4016 = var2; + WallDecoration.field1914 = var2; } } } - class13.method199(); - WorldMapAreaData.worldHost = this.getCodeBase().getHost(); - String var9 = class32.field265.name; - byte var10 = 0; + class1.method15(); + Canvas.worldHost = this.getCodeBase().getHost(); + String var17 = class40.field352.name; + byte var18 = 0; try { - class192.method3814("oldschool", var9, var10, 21); - } catch (Exception var11) { - User.RunException_sendStackTrace((String)null, var11); + JagexCache.idxCount = 21; + PendingSpawn.cacheGamebuild = var18; + + try { + UrlRequest.field1947 = System.getProperty("os.name"); + } catch (Exception var37) { + UrlRequest.field1947 = "Unknown"; + } + + WorldMapIcon_0.field131 = UrlRequest.field1947.toLowerCase(); + + try { + JagexCache.userHomeDirectory = System.getProperty("user.home"); + if (JagexCache.userHomeDirectory != null) { + JagexCache.userHomeDirectory = JagexCache.userHomeDirectory + "/"; + } + } catch (Exception var36) { + } + + try { + if (WorldMapIcon_0.field131.startsWith("win")) { + if (JagexCache.userHomeDirectory == null) { + JagexCache.userHomeDirectory = System.getenv("USERPROFILE"); + } + } else if (JagexCache.userHomeDirectory == null) { + JagexCache.userHomeDirectory = System.getenv("HOME"); + } + + if (JagexCache.userHomeDirectory != null) { + JagexCache.userHomeDirectory = JagexCache.userHomeDirectory + "/"; + } + } catch (Exception var35) { + } + + if (JagexCache.userHomeDirectory == null) { + JagexCache.userHomeDirectory = "~/"; + } + + JagexCache.field2046 = new String[]{"c:/rscache/", "/rscache/", "c:/windows/", "c:/winnt/", "c:/", JagexCache.userHomeDirectory, "/tmp/", ""}; + Ignored.field3610 = new String[]{".jagex_cache_" + PendingSpawn.cacheGamebuild, ".file_store_" + PendingSpawn.cacheGamebuild}; + int var19 = 0; + + File var27; + label338: + while (var19 < 4) { + String var45 = var19 == 0 ? "" : "" + var19; + JagexCache.JagexCache_locationFile = new File(JagexCache.userHomeDirectory, "jagex_cl_oldschool_" + var17 + var45 + ".dat"); + String var20 = null; + String var48 = null; + boolean var8 = false; + Buffer var10; + int var11; + int var13; + File var51; + if (JagexCache.JagexCache_locationFile.exists()) { + try { + AccessFile var9 = new AccessFile(JagexCache.JagexCache_locationFile, "rw", 10000L); + + for (var10 = new Buffer((int)var9.length()); var10.offset < var10.array.length; var10.offset += var11) { + var11 = var9.read(var10.array, var10.offset, var10.array.length - var10.offset); + if (var11 == -1) { + throw new IOException(); + } + } + + var10.offset = 0; + var11 = var10.readUnsignedByte(); + if (var11 < 1 || var11 > 3) { + throw new IOException("" + var11); + } + + int var12 = 0; + if (var11 > 1) { + var12 = var10.readUnsignedByte(); + } + + if (var11 <= 2) { + var20 = var10.readStringCp1252NullCircumfixed(); + if (var12 == 1) { + var48 = var10.readStringCp1252NullCircumfixed(); + } + } else { + var20 = var10.readCESU8(); + if (var12 == 1) { + var48 = var10.readCESU8(); + } + } + + var9.close(); + } catch (IOException var40) { + var40.printStackTrace(); + } + + if (var20 != null) { + var51 = new File(var20); + if (!var51.exists()) { + var20 = null; + } + } + + if (var20 != null) { + var51 = new File(var20, "test.dat"); + + boolean var52; + try { + RandomAccessFile var21 = new RandomAccessFile(var51, "rw"); + var13 = var21.read(); + var21.seek(0L); + var21.write(var13); + var21.seek(0L); + var21.close(); + var51.delete(); + var52 = true; + } catch (Exception var34) { + var52 = false; + } + + if (!var52) { + var20 = null; + } + } + } + + if (var20 == null && var19 == 0) { + label313: + for (int var22 = 0; var22 < Ignored.field3610.length; ++var22) { + for (int var23 = 0; var23 < JagexCache.field2046.length; ++var23) { + File var24 = new File(JagexCache.field2046[var23] + Ignored.field3610[var22] + File.separatorChar + "oldschool" + File.separatorChar); + if (var24.exists()) { + File var25 = new File(var24, "test.dat"); + + boolean var54; + try { + RandomAccessFile var14 = new RandomAccessFile(var25, "rw"); + int var15 = var14.read(); + var14.seek(0L); + var14.write(var15); + var14.seek(0L); + var14.close(); + var25.delete(); + var54 = true; + } catch (Exception var33) { + var54 = false; + } + + if (var54) { + var20 = var24.toString(); + var8 = true; + break label313; + } + } + } + } + } + + if (var20 == null) { + var20 = JagexCache.userHomeDirectory + File.separatorChar + "jagexcache" + var45 + File.separatorChar + "oldschool" + File.separatorChar + var17 + File.separatorChar; + var8 = true; + } + + File var50; + if (var48 != null) { + var50 = new File(var48); + var51 = new File(var20); + + try { + File[] var59 = var50.listFiles(); + File[] var56 = var59; + + for (var13 = 0; var13 < var56.length; ++var13) { + File var55 = var56[var13]; + File var26 = new File(var51, var55.getName()); + boolean var16 = var55.renameTo(var26); + if (!var16) { + throw new IOException(); + } + } + } catch (Exception var39) { + var39.printStackTrace(); + } + + var8 = true; + } + + if (var8) { + var50 = new File(var20); + var10 = null; + + try { + AccessFile var60 = new AccessFile(JagexCache.JagexCache_locationFile, "rw", 10000L); + Buffer var57 = new Buffer(500); + var57.writeByte(3); + var57.writeByte(var10 != null ? 1 : 0); + var57.writeCESU8(var50.getPath()); + if (var10 != null) { + var57.writeCESU8(""); + } + + var60.write(var57.array, 0, var57.offset); + var60.close(); + } catch (IOException var32) { + var32.printStackTrace(); + } + } + + var27 = new File(var20); + UserComparator2.cacheDir = var27; + if (!UserComparator2.cacheDir.exists()) { + UserComparator2.cacheDir.mkdirs(); + } + + File[] var46 = UserComparator2.cacheDir.listFiles(); + if (var46 != null) { + File[] var61 = var46; + + for (int var28 = 0; var28 < var61.length; ++var28) { + File var29 = var61[var28]; + + boolean var58; + try { + RandomAccessFile var53 = new RandomAccessFile(var29, "rw"); + var11 = var53.read(); + var53.seek(0L); + var53.write(var11); + var53.seek(0L); + var53.close(); + var58 = true; + } catch (Exception var31) { + var58 = false; + } + + if (!var58) { + ++var19; + continue label338; + } + } + } + break; + } + + File var44 = UserComparator2.cacheDir; + FileSystem.FileSystem_cacheDir = var44; + if (!FileSystem.FileSystem_cacheDir.exists()) { + throw new RuntimeException(""); + } + + FileSystem.FileSystem_hasPermissions = true; + + try { + var27 = new File(JagexCache.userHomeDirectory, "random.dat"); + if (var27.exists()) { + JagexCache.JagexCache_randomDat = new BufferedFile(new AccessFile(var27, "rw", 25L), 24, 0); + } else { + label260: + for (int var30 = 0; var30 < Ignored.field3610.length; ++var30) { + for (var6 = 0; var6 < JagexCache.field2046.length; ++var6) { + File var49 = new File(JagexCache.field2046[var6] + Ignored.field3610[var30] + File.separatorChar + "random.dat"); + if (var49.exists()) { + JagexCache.JagexCache_randomDat = new BufferedFile(new AccessFile(var49, "rw", 25L), 24, 0); + break label260; + } + } + } + } + + if (JagexCache.JagexCache_randomDat == null) { + RandomAccessFile var47 = new RandomAccessFile(var27, "rw"); + var6 = var47.read(); + var47.seek(0L); + var47.write(var6); + var47.seek(0L); + var47.close(); + JagexCache.JagexCache_randomDat = new BufferedFile(new AccessFile(var27, "rw", 25L), 24, 0); + } + } catch (IOException var38) { + } + + JagexCache.JagexCache_dat2File = new BufferedFile(new AccessFile(ScriptFrame.getFile("main_file_cache.dat2"), "rw", 1048576000L), 5200, 0); + JagexCache.JagexCache_idx255File = new BufferedFile(new AccessFile(ScriptFrame.getFile("main_file_cache.idx255"), "rw", 1048576L), 6000, 0); + WorldMapSection1.JagexCache_idxFiles = new BufferedFile[JagexCache.idxCount]; + + for (var4 = 0; var4 < JagexCache.idxCount; ++var4) { + WorldMapSection1.JagexCache_idxFiles[var4] = new BufferedFile(new AccessFile(ScriptFrame.getFile("main_file_cache.idx" + var4), "rw", 1048576L), 6000, 0); + } + } catch (Exception var41) { + Calendar.RunException_sendStackTrace((String)null, var41); } - WorldMapID.client = this; - TileItem.clientType = clientType; - this.startThread(765, 503, 185); + AbstractWorldMapIcon.client = this; + RunException.clientType = clientType; + this.startThread(765, 503, 186); } - } catch (RuntimeException var12) { - throw ByteArrayPool.newRunException(var12, "client.init(" + ')'); + } catch (RuntimeException var42) { + throw class219.newRunException(var42, "client.init(" + ')'); } } - @ObfuscatedName("fu") + @ObfuscatedName("ei") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "773781799" + signature = "(B)V", + garbageValue = "-104" ) @Export("doCycleJs5") void doCycleJs5() { if (gameState != 1000) { - long var2 = PlayerAppearance.currentTimeMillis(); - int var4 = (int)(var2 - NetCache.field3149); - NetCache.field3149 = var2; - if (var4 > 200) { - var4 = 200; - } - - NetCache.NetCache_loadTime += var4; - boolean var1; - if (NetCache.NetCache_pendingResponsesCount == 0 && NetCache.NetCache_pendingPriorityResponsesCount == 0 && NetCache.NetCache_pendingWritesCount == 0 && NetCache.NetCache_pendingPriorityWritesCount == 0) { - var1 = true; - } else if (NetCache.NetCache_socket == null) { - var1 = false; - } else { - try { - label247: { - if (NetCache.NetCache_loadTime > 30000) { - throw new IOException(); - } - - NetFileRequest var5; - Buffer var6; - while (NetCache.NetCache_pendingPriorityResponsesCount < 200 && NetCache.NetCache_pendingPriorityWritesCount > 0) { - var5 = (NetFileRequest)NetCache.NetCache_pendingPriorityWrites.first(); - var6 = new Buffer(4); - var6.writeByte(1); - var6.writeMedium((int)var5.key); - NetCache.NetCache_socket.write(var6.array, 0, 4); - NetCache.NetCache_pendingPriorityResponses.put(var5, var5.key); - --NetCache.NetCache_pendingPriorityWritesCount; - ++NetCache.NetCache_pendingPriorityResponsesCount; - } - - while (NetCache.NetCache_pendingResponsesCount < 200 && NetCache.NetCache_pendingWritesCount > 0) { - var5 = (NetFileRequest)NetCache.NetCache_pendingWritesQueue.removeLast(); - var6 = new Buffer(4); - var6.writeByte(0); - var6.writeMedium((int)var5.key); - NetCache.NetCache_socket.write(var6.array, 0, 4); - var5.removeDual(); - NetCache.NetCache_pendingResponses.put(var5, var5.key); - --NetCache.NetCache_pendingWritesCount; - ++NetCache.NetCache_pendingResponsesCount; - } - - for (int var17 = 0; var17 < 100; ++var17) { - int var18 = NetCache.NetCache_socket.available(); - if (var18 < 0) { - throw new IOException(); - } - - if (var18 == 0) { - break; - } - - NetCache.NetCache_loadTime = 0; - byte var7 = 0; - if (UserComparator6.NetCache_currentResponse == null) { - var7 = 8; - } else if (NetCache.field3161 == 0) { - var7 = 1; - } - - int var8; - int var9; - int var10; - int var12; - byte[] var10000; - int var10001; - Buffer var25; - if (var7 > 0) { - var8 = var7 - NetCache.NetCache_responseHeaderBuffer.offset; - if (var8 > var18) { - var8 = var18; - } - - NetCache.NetCache_socket.read(NetCache.NetCache_responseHeaderBuffer.array, NetCache.NetCache_responseHeaderBuffer.offset, var8); - if (NetCache.field3165 != 0) { - for (var9 = 0; var9 < var8; ++var9) { - var10000 = NetCache.NetCache_responseHeaderBuffer.array; - var10001 = var9 + NetCache.NetCache_responseHeaderBuffer.offset; - var10000[var10001] ^= NetCache.field3165; - } - } - - var25 = NetCache.NetCache_responseHeaderBuffer; - var25.offset += var8; - if (NetCache.NetCache_responseHeaderBuffer.offset < var7) { - break; - } - - if (UserComparator6.NetCache_currentResponse == null) { - NetCache.NetCache_responseHeaderBuffer.offset = 0; - var9 = NetCache.NetCache_responseHeaderBuffer.readUnsignedByte(); - var10 = NetCache.NetCache_responseHeaderBuffer.readUnsignedShort(); - int var11 = NetCache.NetCache_responseHeaderBuffer.readUnsignedByte(); - var12 = NetCache.NetCache_responseHeaderBuffer.readInt(); - long var13 = (long)(var10 + (var9 << 16)); - NetFileRequest var15 = (NetFileRequest)NetCache.NetCache_pendingPriorityResponses.get(var13); - AttackOption.field1151 = true; - if (var15 == null) { - var15 = (NetFileRequest)NetCache.NetCache_pendingResponses.get(var13); - AttackOption.field1151 = false; - } - - if (var15 == null) { - throw new IOException(); - } - - int var16 = var11 == 0 ? 5 : 9; - UserComparator6.NetCache_currentResponse = var15; - Frames.NetCache_responseArchiveBuffer = new Buffer(var16 + var12 + UserComparator6.NetCache_currentResponse.padding); - Frames.NetCache_responseArchiveBuffer.writeByte(var11); - Frames.NetCache_responseArchiveBuffer.writeInt(var12); - NetCache.field3161 = 8; - NetCache.NetCache_responseHeaderBuffer.offset = 0; - } else if (NetCache.field3161 == 0) { - if (NetCache.NetCache_responseHeaderBuffer.array[0] == -1) { - NetCache.field3161 = 1; - NetCache.NetCache_responseHeaderBuffer.offset = 0; - } else { - UserComparator6.NetCache_currentResponse = null; - } - } - } else { - var8 = Frames.NetCache_responseArchiveBuffer.array.length - UserComparator6.NetCache_currentResponse.padding; - var9 = 512 - NetCache.field3161; - if (var9 > var8 - Frames.NetCache_responseArchiveBuffer.offset) { - var9 = var8 - Frames.NetCache_responseArchiveBuffer.offset; - } - - if (var9 > var18) { - var9 = var18; - } - - NetCache.NetCache_socket.read(Frames.NetCache_responseArchiveBuffer.array, Frames.NetCache_responseArchiveBuffer.offset, var9); - if (NetCache.field3165 != 0) { - for (var10 = 0; var10 < var9; ++var10) { - var10000 = Frames.NetCache_responseArchiveBuffer.array; - var10001 = Frames.NetCache_responseArchiveBuffer.offset + var10; - var10000[var10001] ^= NetCache.field3165; - } - } - - var25 = Frames.NetCache_responseArchiveBuffer; - var25.offset += var9; - NetCache.field3161 += var9; - if (var8 == Frames.NetCache_responseArchiveBuffer.offset) { - if (UserComparator6.NetCache_currentResponse.key == 16711935L) { - Calendar.NetCache_reference = Frames.NetCache_responseArchiveBuffer; - - for (var10 = 0; var10 < 256; ++var10) { - Archive var19 = NetCache.NetCache_archives[var10]; - if (var19 != null) { - Calendar.NetCache_reference.offset = var10 * 8 + 5; - var12 = Calendar.NetCache_reference.readInt(); - int var20 = Calendar.NetCache_reference.readInt(); - var19.loadIndex(var12, var20); - } - } - } else { - NetCache.NetCache_crc.reset(); - NetCache.NetCache_crc.update(Frames.NetCache_responseArchiveBuffer.array, 0, var8); - var10 = (int)NetCache.NetCache_crc.getValue(); - if (var10 != UserComparator6.NetCache_currentResponse.crc) { - try { - NetCache.NetCache_socket.close(); - } catch (Exception var23) { - } - - ++NetCache.NetCache_crcMismatches; - NetCache.NetCache_socket = null; - NetCache.field3165 = (byte)((int)(Math.random() * 255.0D + 1.0D)); - var1 = false; - break label247; - } - - NetCache.NetCache_crcMismatches = 0; - NetCache.NetCache_ioExceptions = 0; - UserComparator6.NetCache_currentResponse.archive.write((int)(UserComparator6.NetCache_currentResponse.key & 65535L), Frames.NetCache_responseArchiveBuffer.array, 16711680L == (UserComparator6.NetCache_currentResponse.key & 16711680L), AttackOption.field1151); - } - - UserComparator6.NetCache_currentResponse.remove(); - if (AttackOption.field1151) { - --NetCache.NetCache_pendingPriorityResponsesCount; - } else { - --NetCache.NetCache_pendingResponsesCount; - } - - NetCache.field3161 = 0; - UserComparator6.NetCache_currentResponse = null; - Frames.NetCache_responseArchiveBuffer = null; - } else { - if (NetCache.field3161 != 512) { - break; - } - - NetCache.field3161 = 0; - } - } - } - - var1 = true; - } - } catch (IOException var24) { - try { - NetCache.NetCache_socket.close(); - } catch (Exception var22) { - } - - ++NetCache.NetCache_ioExceptions; - NetCache.NetCache_socket = null; - var1 = false; - } - } - + boolean var1 = class30.method565(); if (!var1) { this.doCycleJs5Connect(); } @@ -3140,10 +2285,10 @@ public final class Client extends GameShell implements Usernamed { } } - @ObfuscatedName("fy") + @ObfuscatedName("en") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "40" + signature = "(I)V", + garbageValue = "-2127628124" ) @Export("doCycleJs5Connect") void doCycleJs5Connect() { @@ -3158,62 +2303,62 @@ public final class Client extends GameShell implements Usernamed { return; } - field819 = 3000; + field674 = 3000; NetCache.NetCache_ioExceptions = 3; } - if (--field819 + 1 <= 0) { + if (--field674 + 1 <= 0) { try { if (js5ConnectState == 0) { - Entity.js5SocketTask = GameShell.taskHandler.newSocketTask(WorldMapAreaData.worldHost, GrandExchangeOfferUnitPriceComparator.port3); + KeyHandler.js5SocketTask = GameShell.taskHandler.newSocketTask(Canvas.worldHost, WorldMapIcon_0.port3); ++js5ConnectState; } if (js5ConnectState == 1) { - if (Entity.js5SocketTask.status == 2) { + if (KeyHandler.js5SocketTask.status == 2) { this.js5Error(-1); return; } - if (Entity.js5SocketTask.status == 1) { + if (KeyHandler.js5SocketTask.status == 1) { ++js5ConnectState; } } if (js5ConnectState == 2) { if (useBufferedSocket) { - js5Socket = class40.method839((Socket)Entity.js5SocketTask.result, 40000, 5000); + Interpreter.js5Socket = WorldMapEvent.method783((Socket)KeyHandler.js5SocketTask.result, 40000, 5000); } else { - js5Socket = new NetSocket((Socket)Entity.js5SocketTask.result, GameShell.taskHandler, 5000); + Interpreter.js5Socket = new NetSocket((Socket)KeyHandler.js5SocketTask.result, GameShell.taskHandler, 5000); } Buffer var1 = new Buffer(5); var1.writeByte(15); - var1.writeInt(185); - js5Socket.write(var1.array, 0, 5); + var1.writeInt(186); + Interpreter.js5Socket.write(var1.array, 0, 5); ++js5ConnectState; - ArchiveDiskActionHandler.field3130 = PlayerAppearance.currentTimeMillis(); + Varps.field2533 = TaskHandler.currentTimeMillis(); } if (js5ConnectState == 3) { - if (js5Socket.available() > 0 || !useBufferedSocket && gameState <= 5) { - int var2 = js5Socket.readUnsignedByte(); + if (Interpreter.js5Socket.available() > 0 || !useBufferedSocket && gameState <= 5) { + int var2 = Interpreter.js5Socket.readUnsignedByte(); if (var2 != 0) { this.js5Error(var2); return; } ++js5ConnectState; - } else if (PlayerAppearance.currentTimeMillis() - ArchiveDiskActionHandler.field3130 > 30000L) { + } else if (TaskHandler.currentTimeMillis() - Varps.field2533 > 30000L) { this.js5Error(-2); return; } } if (js5ConnectState == 4) { - VerticalAlignment.method4503(js5Socket, gameState > 20); - Entity.js5SocketTask = null; - js5Socket = null; + UserComparator9.method3436(Interpreter.js5Socket, gameState > 20); + KeyHandler.js5SocketTask = null; + Interpreter.js5Socket = null; js5ConnectState = 0; js5Errors = 0; } @@ -3225,20 +2370,20 @@ public final class Client extends GameShell implements Usernamed { } } - @ObfuscatedName("fn") + @ObfuscatedName("eb") @ObfuscatedSignature( signature = "(II)V", - garbageValue = "-1648884107" + garbageValue = "297233490" ) @Export("js5Error") void js5Error(int var1) { - Entity.js5SocketTask = null; - js5Socket = null; + KeyHandler.js5SocketTask = null; + Interpreter.js5Socket = null; js5ConnectState = 0; - if (GrandExchangeOfferUnitPriceComparator.port3 == class222.port1) { - GrandExchangeOfferUnitPriceComparator.port3 = Decimator.port2; + if (WorldMapIcon_0.port3 == SecureRandomCallable.port1) { + WorldMapIcon_0.port3 = class49.port2; } else { - GrandExchangeOfferUnitPriceComparator.port3 = class222.port1; + WorldMapIcon_0.port3 = SecureRandomCallable.port1; } ++js5Errors; @@ -3247,7 +2392,7 @@ public final class Client extends GameShell implements Usernamed { this.error("js5connect_full"); gameState = 1000; } else { - field819 = 3000; + field674 = 3000; } } else if (js5Errors >= 2 && var1 == 6) { this.error("js5connect_outofdate"); @@ -3257,16 +2402,16 @@ public final class Client extends GameShell implements Usernamed { this.error("js5connect"); gameState = 1000; } else { - field819 = 3000; + field674 = 3000; } } } - @ObfuscatedName("fk") + @ObfuscatedName("fx") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "2145880760" + garbageValue = "-2112641787" ) @Export("doCycleLoggedOut") final void doCycleLoggedOut() { @@ -3275,94 +2420,86 @@ public final class Client extends GameShell implements Usernamed { try { if (loginState == 0) { - if (GZipDecompressor.secureRandom == null && (secureRandomFuture.isDone() || field666 > 250)) { - GZipDecompressor.secureRandom = secureRandomFuture.get(); + if (class51.secureRandom == null && (secureRandomFuture.isDone() || field887 > 250)) { + class51.secureRandom = secureRandomFuture.get(); secureRandomFuture.shutdown(); secureRandomFuture = null; } - if (GZipDecompressor.secureRandom != null) { + if (class51.secureRandom != null) { if (var1 != null) { ((AbstractSocket)var1).close(); var1 = null; } - AttackOption.socketTask = null; - field680 = false; - field666 = 0; + SecureRandomFuture.socketTask = null; + field691 = false; + field887 = 0; loginState = 1; } } if (loginState == 1) { - if (AttackOption.socketTask == null) { - AttackOption.socketTask = GameShell.taskHandler.newSocketTask(WorldMapAreaData.worldHost, GrandExchangeOfferUnitPriceComparator.port3); + if (SecureRandomFuture.socketTask == null) { + SecureRandomFuture.socketTask = GameShell.taskHandler.newSocketTask(Canvas.worldHost, WorldMapIcon_0.port3); } - if (AttackOption.socketTask.status == 2) { + if (SecureRandomFuture.socketTask.status == 2) { throw new IOException(); } - if (AttackOption.socketTask.status == 1) { + if (SecureRandomFuture.socketTask.status == 1) { if (useBufferedSocket) { - var1 = class40.method839((Socket)AttackOption.socketTask.result, 40000, 5000); + var1 = WorldMapEvent.method783((Socket)SecureRandomFuture.socketTask.result, 40000, 5000); } else { - var1 = new NetSocket((Socket)AttackOption.socketTask.result, GameShell.taskHandler, 5000); + var1 = new NetSocket((Socket)SecureRandomFuture.socketTask.result, GameShell.taskHandler, 5000); } packetWriter.setSocket((AbstractSocket)var1); - AttackOption.socketTask = null; + SecureRandomFuture.socketTask = null; loginState = 2; } } - PacketBufferNode var4; + PacketBufferNode var3; if (loginState == 2) { packetWriter.clearBuffer(); - if (PacketBufferNode.PacketBufferNode_packetBufferNodeCount == 0) { - var4 = new PacketBufferNode(); - } else { - var4 = PacketBufferNode.PacketBufferNode_packetBufferNodes[--PacketBufferNode.PacketBufferNode_packetBufferNodeCount]; - } - - var4.clientPacket = null; - var4.clientPacketLength = 0; - var4.packetBuffer = new PacketBuffer(5000); - var4.packetBuffer.writeByte(LoginPacket.field2283.id); - packetWriter.addNode(var4); + var3 = Varcs.method2221(); + var3.packetBuffer.writeByte(LoginPacket.field2324.id); + packetWriter.addNode(var3); packetWriter.flush(); var2.offset = 0; loginState = 3; } - boolean var14; - int var15; + int var4; + boolean var12; if (loginState == 3) { - if (class80.pcmPlayer0 != null) { - class80.pcmPlayer0.method2581(); + if (MenuAction.pcmPlayer0 != null) { + MenuAction.pcmPlayer0.method2458(); } - if (MenuAction.pcmPlayer1 != null) { - MenuAction.pcmPlayer1.method2581(); + if (class60.pcmPlayer1 != null) { + class60.pcmPlayer1.method2458(); } - var14 = true; + var12 = true; if (useBufferedSocket && !((AbstractSocket)var1).isAvailable(1)) { - var14 = false; + var12 = false; } - if (var14) { - var15 = ((AbstractSocket)var1).readUnsignedByte(); - if (class80.pcmPlayer0 != null) { - class80.pcmPlayer0.method2581(); + if (var12) { + var4 = ((AbstractSocket)var1).readUnsignedByte(); + if (MenuAction.pcmPlayer0 != null) { + MenuAction.pcmPlayer0.method2458(); } - if (MenuAction.pcmPlayer1 != null) { - MenuAction.pcmPlayer1.method2581(); + if (class60.pcmPlayer1 != null) { + class60.pcmPlayer1.method2458(); } - if (var15 != 0) { - AbstractArchive.getLoginError(var15); + if (var4 != 0) { + class162.getLoginError(var4); return; } @@ -3371,179 +2508,158 @@ public final class Client extends GameShell implements Usernamed { } } - int var30; + int var31; if (loginState == 4) { if (var2.offset < 8) { - var30 = ((AbstractSocket)var1).available(); - if (var30 > 8 - var2.offset) { - var30 = 8 - var2.offset; + var31 = ((AbstractSocket)var1).available(); + if (var31 > 8 - var2.offset) { + var31 = 8 - var2.offset; } - if (var30 > 0) { - ((AbstractSocket)var1).read(var2.array, var2.offset, var30); - var2.offset += var30; + if (var31 > 0) { + ((AbstractSocket)var1).read(var2.array, var2.offset, var31); + var2.offset += var31; } } if (var2.offset == 8) { var2.offset = 0; - Message.field577 = var2.readLong(); + RouteStrategy.field2110 = var2.readLong(); loginState = 5; } } + int var7; + int var9; + int var14; if (loginState == 5) { packetWriter.packetBuffer.offset = 0; packetWriter.clearBuffer(); - PacketBuffer var3 = new PacketBuffer(500); - int[] var24 = new int[]{GZipDecompressor.secureRandom.nextInt(), GZipDecompressor.secureRandom.nextInt(), GZipDecompressor.secureRandom.nextInt(), GZipDecompressor.secureRandom.nextInt()}; - var3.offset = 0; - var3.writeByte(1); - var3.writeInt(var24[0]); - var3.writeInt(var24[1]); - var3.writeInt(var24[2]); - var3.writeInt(var24[3]); - var3.writeLong(Message.field577); + PacketBuffer var21 = new PacketBuffer(500); + int[] var13 = new int[]{class51.secureRandom.nextInt(), class51.secureRandom.nextInt(), class51.secureRandom.nextInt(), class51.secureRandom.nextInt()}; + var21.offset = 0; + var21.writeByte(1); + var21.writeInt(var13[0]); + var21.writeInt(var13[1]); + var21.writeInt(var13[2]); + var21.writeInt(var13[3]); + var21.writeLong(RouteStrategy.field2110); + int var10; if (gameState == 40) { - var3.writeInt(class173.field2074[0]); - var3.writeInt(class173.field2074[1]); - var3.writeInt(class173.field2074[2]); - var3.writeInt(class173.field2074[3]); + var21.writeInt(PlayerAppearance.field2552[0]); + var21.writeInt(PlayerAppearance.field2552[1]); + var21.writeInt(PlayerAppearance.field2552[2]); + var21.writeInt(PlayerAppearance.field2552[3]); } else { - var3.writeByte(field850.rsOrdinal()); - switch(field850.field1983) { + var21.writeByte(field680.rsOrdinal()); + switch(field680.field2007) { case 0: - case 1: - var3.writeMedium(Huffman.field2491); - ++var3.offset; - break; case 2: - var3.writeInt((Integer)ScriptEvent.clientPreferences.parameters.get(GrandExchangeEvents.method108(Login.Login_username))); + var21.writeMedium(class192.field2395); + ++var21.offset; + break; + case 1: + LinkedHashMap var6 = UserComparator10.clientPreferences.parameters; + String var8 = Login.Login_username; + var9 = var8.length(); + var10 = 0; + + for (int var11 = 0; var11 < var9; ++var11) { + var10 = (var10 << 5) - var10 + var8.charAt(var11); + } + + var21.writeInt((Integer)var6.get(var10)); break; case 3: - var3.offset += 4; + var21.offset += 4; } - var3.writeByte(class312.field3799.rsOrdinal()); - var3.writeStringCp1252NullTerminated(Login.Login_password); + var21.writeByte(class312.field3814.rsOrdinal()); + var21.writeStringCp1252NullTerminated(Login.Login_password); } - var3.encryptRsa(class83.field1144, class83.field1145); - class173.field2074 = var24; - PacketBufferNode var6; - if (PacketBufferNode.PacketBufferNode_packetBufferNodeCount == 0) { - var6 = new PacketBufferNode(); - } else { - var6 = PacketBufferNode.PacketBufferNode_packetBufferNodes[--PacketBufferNode.PacketBufferNode_packetBufferNodeCount]; - } - - var6.clientPacket = null; - var6.clientPacketLength = 0; - var6.packetBuffer = new PacketBuffer(5000); - var6.packetBuffer.offset = 0; + var21.encryptRsa(class83.field1158, class83.field1160); + PlayerAppearance.field2552 = var13; + PacketBufferNode var5 = Varcs.method2221(); + var5.packetBuffer.offset = 0; if (gameState == 40) { - var6.packetBuffer.writeByte(LoginPacket.field2286.id); + var5.packetBuffer.writeByte(LoginPacket.field2328.id); } else { - var6.packetBuffer.writeByte(LoginPacket.field2285.id); + var5.packetBuffer.writeByte(LoginPacket.field2326.id); } - var6.packetBuffer.writeShort(0); - int var16 = var6.packetBuffer.offset; - var6.packetBuffer.writeInt(185); - var6.packetBuffer.writeInt(1); - var6.packetBuffer.writeByte(clientType); - var6.packetBuffer.writeBytes(var3.array, 0, var3.offset); - int var8 = var6.packetBuffer.offset; - var6.packetBuffer.writeStringCp1252NullTerminated(Login.Login_username); - var6.packetBuffer.writeByte((isResizable ? 1 : 0) << 1 | (isLowDetail ? 1 : 0)); - var6.packetBuffer.writeShort(class286.canvasWidth); - var6.packetBuffer.writeShort(FloorUnderlayDefinition.canvasHeight); - PacketBuffer var9 = var6.packetBuffer; - int var12; - if (randomDatData != null) { - var9.writeBytes(randomDatData, 0, randomDatData.length); - } else { - byte[] var11 = new byte[24]; - - try { - JagexCache.JagexCache_randomDat.seek(0L); - JagexCache.JagexCache_randomDat.readFully(var11); - - for (var12 = 0; var12 < 24 && var11[var12] == 0; ++var12) { - } - - if (var12 >= 24) { - throw new IOException(); - } - } catch (Exception var21) { - for (int var13 = 0; var13 < 24; ++var13) { - var11[var13] = -1; - } - } - - var9.writeBytes(var11, 0, var11.length); - } - - var6.packetBuffer.writeStringCp1252NullTerminated(MilliClock.field1994); - var6.packetBuffer.writeInt(class339.field4041); - Buffer var10 = new Buffer(class216.platformInfo.size()); - class216.platformInfo.write(var10); - var6.packetBuffer.writeBytes(var10.array, 0, var10.array.length); - var6.packetBuffer.writeByte(clientType); - var6.packetBuffer.writeInt(0); - var6.packetBuffer.writeInt(BuddyRankComparator.archive0.hash); - var6.packetBuffer.writeInt(LoginPacket.archive1.hash); - var6.packetBuffer.writeInt(AbstractWorldMapIcon.archive2.hash); - var6.packetBuffer.writeInt(SpriteMask.archive3.hash); - var6.packetBuffer.writeInt(NetFileRequest.archive4.hash); - var6.packetBuffer.writeInt(WorldMapRectangle.archive5.hash); - var6.packetBuffer.writeInt(class216.archive6.hash); - var6.packetBuffer.writeInt(Language.archive7.hash); - var6.packetBuffer.writeInt(GrandExchangeOfferUnitPriceComparator.archive8.hash); - var6.packetBuffer.writeInt(WorldMapSprite.archive9.hash); - var6.packetBuffer.writeInt(WorldMapID.archive10.hash); - var6.packetBuffer.writeInt(Decimator.archive11.hash); - var6.packetBuffer.writeInt(Occluder.archive12.hash); - var6.packetBuffer.writeInt(UrlRequest.archive13.hash); - var6.packetBuffer.writeInt(class192.archive14.hash); - var6.packetBuffer.writeInt(Coord.archive15.hash); - var6.packetBuffer.writeInt(0); - var6.packetBuffer.writeInt(DesktopPlatformInfoProvider.archive17.hash); - var6.packetBuffer.writeInt(WorldMapDecoration.archive18.hash); - var6.packetBuffer.writeInt(ReflectionCheck.archive19.hash); - var6.packetBuffer.writeInt(Actor.archive20.hash); - var6.packetBuffer.xteaEncrypt(var24, var8, var6.packetBuffer.offset); - var6.packetBuffer.writeLengthShort(var6.packetBuffer.offset - var16); - packetWriter.addNode(var6); + var5.packetBuffer.writeShort(0); + var14 = var5.packetBuffer.offset; + var5.packetBuffer.writeInt(186); + var5.packetBuffer.writeInt(1); + var5.packetBuffer.writeByte(clientType); + var5.packetBuffer.writeBytes(var21.array, 0, var21.offset); + var7 = var5.packetBuffer.offset; + var5.packetBuffer.writeStringCp1252NullTerminated(Login.Login_username); + var5.packetBuffer.writeByte((isResizable ? 1 : 0) << 1 | (isLowDetail ? 1 : 0)); + var5.packetBuffer.writeShort(BoundaryObject.canvasWidth); + var5.packetBuffer.writeShort(WorldMapCacheName.canvasHeight); + GrandExchangeOfferTotalQuantityComparator.method104(var5.packetBuffer); + var5.packetBuffer.writeStringCp1252NullTerminated(WorldMapManager.field327); + var5.packetBuffer.writeInt(class13.field91); + Buffer var29 = new Buffer(NPC.platformInfo.size()); + NPC.platformInfo.write(var29); + var5.packetBuffer.writeBytes(var29.array, 0, var29.array.length); + var5.packetBuffer.writeByte(clientType); + var5.packetBuffer.writeInt(0); + var5.packetBuffer.writeInt(GrandExchangeOfferAgeComparator.archive0.hash); + var5.packetBuffer.writeInt(class43.archive1.hash); + var5.packetBuffer.writeInt(class288.archive2.hash); + var5.packetBuffer.writeInt(WorldMapID.archive3.hash); + var5.packetBuffer.writeInt(SpriteMask.archive4.hash); + var5.packetBuffer.writeInt(DirectByteArrayCopier.archive5.hash); + var5.packetBuffer.writeInt(AbstractWorldMapData.archive6.hash); + var5.packetBuffer.writeInt(ClientPacket.archive7.hash); + var5.packetBuffer.writeInt(WorldMapRegion.archive8.hash); + var5.packetBuffer.writeInt(class2.archive9.hash); + var5.packetBuffer.writeInt(class81.archive10.hash); + var5.packetBuffer.writeInt(ScriptFrame.archive11.hash); + var5.packetBuffer.writeInt(class267.archive12.hash); + var5.packetBuffer.writeInt(class269.archive13.hash); + var5.packetBuffer.writeInt(class162.archive14.hash); + var5.packetBuffer.writeInt(class210.archive15.hash); + var5.packetBuffer.writeInt(0); + var5.packetBuffer.writeInt(AbstractWorldMapIcon.archive17.hash); + var5.packetBuffer.writeInt(UserComparator9.archive18.hash); + var5.packetBuffer.writeInt(class13.archive19.hash); + var5.packetBuffer.writeInt(class60.archive20.hash); + var5.packetBuffer.xteaEncrypt(var13, var7, var5.packetBuffer.offset); + var5.packetBuffer.writeLengthShort(var5.packetBuffer.offset - var14); + packetWriter.addNode(var5); packetWriter.flush(); - packetWriter.isaacCipher = new IsaacCipher(var24); - int[] var29 = new int[4]; + packetWriter.isaacCipher = new IsaacCipher(var13); + int[] var15 = new int[4]; - for (var12 = 0; var12 < 4; ++var12) { - var29[var12] = var24[var12] + 50; + for (var10 = 0; var10 < 4; ++var10) { + var15[var10] = var13[var10] + 50; } - var2.newIsaacCipher(var29); + var2.newIsaacCipher(var15); loginState = 6; } if (loginState == 6 && ((AbstractSocket)var1).available() > 0) { - var30 = ((AbstractSocket)var1).readUnsignedByte(); - if (var30 == 21 && gameState == 20) { + var31 = ((AbstractSocket)var1).readUnsignedByte(); + if (var31 == 21 && gameState == 20) { loginState = 9; - } else if (var30 == 2) { + } else if (var31 == 2) { loginState = 11; - } else if (var30 == 15 && gameState == 40) { + } else if (var31 == 15 && gameState == 40) { packetWriter.serverPacketLength = -1; loginState = 16; - } else if (var30 == 64) { + } else if (var31 == 64) { loginState = 7; - } else if (var30 == 23 && field667 < 1) { - ++field667; + } else if (var31 == 23 && field678 < 1) { + ++field678; loginState = 0; } else { - if (var30 != 29) { - AbstractArchive.getLoginError(var30); + if (var31 != 29) { + class162.getLoginError(var31); return; } @@ -3552,84 +2668,96 @@ public final class Client extends GameShell implements Usernamed { } if (loginState == 7 && ((AbstractSocket)var1).available() > 0) { - WorldMapAreaData.field329 = ((AbstractSocket)var1).readUnsignedByte(); + UrlRequester.field1940 = ((AbstractSocket)var1).readUnsignedByte(); loginState = 8; } - if (loginState == 8 && ((AbstractSocket)var1).available() >= WorldMapAreaData.field329) { - ((AbstractSocket)var1).read(var2.array, 0, WorldMapAreaData.field329); + if (loginState == 8 && ((AbstractSocket)var1).available() >= UrlRequester.field1940) { + ((AbstractSocket)var1).read(var2.array, 0, UrlRequester.field1940); var2.offset = 0; loginState = 6; } if (loginState == 9 && ((AbstractSocket)var1).available() > 0) { - field668 = (((AbstractSocket)var1).readUnsignedByte() + 3) * 60; + field694 = (((AbstractSocket)var1).readUnsignedByte() + 3) * 60; loginState = 10; } if (loginState == 10) { - field666 = 0; - GrandExchangeOffer.setLoginResponseString("You have only just left another world.", "Your profile will be transferred in:", field668 / 60 + " seconds."); - if (--field668 <= 0) { + field887 = 0; + PacketWriter.setLoginResponseString("You have only just left another world.", "Your profile will be transferred in:", field694 / 60 + " seconds."); + if (--field694 <= 0) { loginState = 0; } } else { if (loginState == 11 && ((AbstractSocket)var1).available() >= 1) { - class49.field399 = ((AbstractSocket)var1).readUnsignedByte(); + GrandExchangeOfferNameComparator.field73 = ((AbstractSocket)var1).readUnsignedByte(); loginState = 12; } - if (loginState == 12 && ((AbstractSocket)var1).available() >= class49.field399) { - var14 = ((AbstractSocket)var1).readUnsignedByte() == 1; + if (loginState == 12 && ((AbstractSocket)var1).available() >= GrandExchangeOfferNameComparator.field73) { + var12 = ((AbstractSocket)var1).readUnsignedByte() == 1; ((AbstractSocket)var1).read(var2.array, 0, 4); var2.offset = 0; - boolean var31 = false; - if (var14) { - var15 = var2.readByteIsaac() << 24; - var15 |= var2.readByteIsaac() << 16; - var15 |= var2.readByteIsaac() << 8; - var15 |= var2.readByteIsaac(); - int var18 = GrandExchangeEvents.method108(Login.Login_username); - if (ScriptEvent.clientPreferences.parameters.size() >= 10 && !ScriptEvent.clientPreferences.parameters.containsKey(var18)) { - Iterator var28 = ScriptEvent.clientPreferences.parameters.entrySet().iterator(); - var28.next(); - var28.remove(); - } + boolean var24 = false; + if (var12) { + var4 = var2.readByteIsaac() << 24; + var4 |= var2.readByteIsaac() << 16; + var4 |= var2.readByteIsaac() << 8; + var4 |= var2.readByteIsaac(); + String var28 = Login.Login_username; + var7 = var28.length(); + int var16 = 0; + var9 = 0; - ScriptEvent.clientPreferences.parameters.put(var18, var15); + while (true) { + if (var9 >= var7) { + if (UserComparator10.clientPreferences.parameters.size() >= 10 && !UserComparator10.clientPreferences.parameters.containsKey(var16)) { + Iterator var30 = UserComparator10.clientPreferences.parameters.entrySet().iterator(); + var30.next(); + var30.remove(); + } + + UserComparator10.clientPreferences.parameters.put(var16, var4); + break; + } + + var16 = (var16 << 5) - var16 + var28.charAt(var9); + ++var9; + } } if (Login_isUsernameRemembered) { - ScriptEvent.clientPreferences.rememberedUsername = Login.Login_username; + UserComparator10.clientPreferences.rememberedUsername = Login.Login_username; } else { - ScriptEvent.clientPreferences.rememberedUsername = null; + UserComparator10.clientPreferences.rememberedUsername = null; } - HitSplatDefinition.savePreferences(); + class40.savePreferences(); staffModLevel = ((AbstractSocket)var1).readUnsignedByte(); playerMod = ((AbstractSocket)var1).readUnsignedByte() == 1; localPlayerIndex = ((AbstractSocket)var1).readUnsignedByte(); localPlayerIndex <<= 8; localPlayerIndex += ((AbstractSocket)var1).readUnsignedByte(); - field749 = ((AbstractSocket)var1).readUnsignedByte(); + field789 = ((AbstractSocket)var1).readUnsignedByte(); ((AbstractSocket)var1).read(var2.array, 0, 1); var2.offset = 0; - ServerPacket[] var5 = SecureRandomCallable.ServerPacket_values(); - int var19 = var2.readSmartByteShortIsaac(); - if (var19 < 0 || var19 >= var5.length) { - throw new IOException(var19 + " " + var2.offset); + ServerPacket[] var25 = WorldMapLabelSize.ServerPacket_values(); + var14 = var2.readSmartByteShortIsaac(); + if (var14 < 0 || var14 >= var25.length) { + throw new IOException(var14 + " " + var2.offset); } - packetWriter.serverPacket = var5[var19]; + packetWriter.serverPacket = var25[var14]; packetWriter.serverPacketLength = packetWriter.serverPacket.length; ((AbstractSocket)var1).read(var2.array, 0, 2); var2.offset = 0; packetWriter.serverPacketLength = var2.readUnsignedShort(); try { - class47.method923(WorldMapID.client, "zap"); - } catch (Throwable var20) { + class47.method864(AbstractWorldMapIcon.client, "zap"); + } catch (Throwable var19) { } loginState = 13; @@ -3639,11 +2767,116 @@ public final class Client extends GameShell implements Usernamed { if (((AbstractSocket)var1).available() >= packetWriter.serverPacketLength) { var2.offset = 0; ((AbstractSocket)var1).read(var2.array, 0, packetWriter.serverPacketLength); - timer.method5119(); - GrandExchangeOfferTotalQuantityComparator.method130(); - ArchiveLoader.updatePlayer(var2); - WorldMapSectionType.field140 = -1; - Clock.loadRegions(false, var2); + timer.method5079(); + mouseLastLastPressedTimeMillis = 1L; + class2.mouseRecorder.index = 0; + TextureProvider.hasFocus = true; + hadFocus = true; + field866 = -1L; + ArchiveLoader.method1178(); + packetWriter.clearBuffer(); + packetWriter.packetBuffer.offset = 0; + packetWriter.serverPacket = null; + packetWriter.field1299 = null; + packetWriter.field1311 = null; + packetWriter.field1312 = null; + packetWriter.serverPacketLength = 0; + packetWriter.field1305 = 0; + rebootTimer = 0; + logoutTimer = 0; + hintArrowType = 0; + RouteStrategy.method3641(); + class4.method56(0); + AbstractWorldMapIcon.method623(); + isItemSelected = 0; + isSpellSelected = false; + soundEffectCount = 0; + camAngleY = 0; + oculusOrbState = 0; + InvDefinition.field3210 = null; + minimapState = 0; + field867 = -1; + destinationX = 0; + destinationY = 0; + playerAttackOption = AttackOption.AttackOption_hidden; + npcAttackOption = AttackOption.AttackOption_hidden; + npcCount = 0; + class42.method809(); + + for (var31 = 0; var31 < 2048; ++var31) { + players[var31] = null; + } + + for (var31 = 0; var31 < 32768; ++var31) { + npcs[var31] = null; + } + + combatTargetPlayerIndex = -1; + projectiles.clear(); + graphicsObjects.clear(); + + for (var31 = 0; var31 < 4; ++var31) { + for (var4 = 0; var4 < 104; ++var4) { + for (int var17 = 0; var17 < 104; ++var17) { + groundItems[var31][var4][var17] = null; + } + } + } + + pendingSpawns = new NodeDeque(); + VertexNormal.friendSystem.clear(); + + for (var31 = 0; var31 < VarpDefinition.VarpDefinition_fileCount; ++var31) { + VarpDefinition var34 = NetCache.VarpDefinition_get(var31); + if (var34 != null) { + Varps.Varps_temp[var31] = 0; + Varps.Varps_main[var31] = 0; + } + } + + AttackOption.varcs.clearTransient(); + followerIndex = -1; + if (rootInterface != -1) { + DynamicObject.method2263(rootInterface); + } + + for (InterfaceParent var23 = (InterfaceParent)interfaceParents.first(); var23 != null; var23 = (InterfaceParent)interfaceParents.next()) { + class43.closeInterface(var23, true); + } + + rootInterface = -1; + interfaceParents = new NodeHashTable(8); + meslayerContinueWidget = null; + RouteStrategy.method3641(); + playerAppearance.update((int[])null, new int[]{0, 0, 0, 0, 0}, false, -1); + + for (var31 = 0; var31 < 8; ++var31) { + playerMenuActions[var31] = null; + playerOptionsPriorities[var31] = false; + } + + ItemContainer.itemContainers = new NodeHashTable(32); + isLoading = true; + + for (var31 = 0; var31 < 100; ++var31) { + field847[var31] = true; + } + + var3 = ModelData0.getPacketBufferNode(ClientPacket.field2218, packetWriter.isaacCipher); + var3.packetBuffer.writeByte(class43.getWindowedMode()); + var3.packetBuffer.writeShort(BoundaryObject.canvasWidth); + var3.packetBuffer.writeShort(WorldMapCacheName.canvasHeight); + packetWriter.addNode(var3); + InterfaceParent.clanChat = null; + + for (var31 = 0; var31 < 8; ++var31) { + grandExchangeOffers[var31] = new GrandExchangeOffer(); + } + + SoundCache.grandExchangeEvents = null; + UserComparator6.updatePlayer(var2); + CollisionMap.field2086 = -1; + WorldMapRegion.loadRegions(false, var2); packetWriter.serverPacket = null; } @@ -3652,35 +2885,35 @@ public final class Client extends GameShell implements Usernamed { var2.offset = 0; ((AbstractSocket)var1).read(var2.array, 0, 2); var2.offset = 0; - WorldMapData_0.field92 = var2.readUnsignedShort(); + AbstractWorldMapIcon.field292 = var2.readUnsignedShort(); loginState = 15; } - if (loginState == 15 && ((AbstractSocket)var1).available() >= WorldMapData_0.field92) { + if (loginState == 15 && ((AbstractSocket)var1).available() >= AbstractWorldMapIcon.field292) { var2.offset = 0; - ((AbstractSocket)var1).read(var2.array, 0, WorldMapData_0.field92); + ((AbstractSocket)var1).read(var2.array, 0, AbstractWorldMapIcon.field292); var2.offset = 0; - String var23 = var2.readStringCp1252NullTerminated(); - String var25 = var2.readStringCp1252NullTerminated(); + String var22 = var2.readStringCp1252NullTerminated(); + String var32 = var2.readStringCp1252NullTerminated(); String var26 = var2.readStringCp1252NullTerminated(); - GrandExchangeOffer.setLoginResponseString(var23, var25, var26); - Tile.updateGameState(10); + PacketWriter.setLoginResponseString(var22, var32, var26); + class81.updateGameState(10); } if (loginState != 16) { - ++field666; - if (field666 > 2000) { - if (field667 < 1) { - if (GrandExchangeOfferUnitPriceComparator.port3 == class222.port1) { - GrandExchangeOfferUnitPriceComparator.port3 = Decimator.port2; + ++field887; + if (field887 > 2000) { + if (field678 < 1) { + if (WorldMapIcon_0.port3 == SecureRandomCallable.port1) { + WorldMapIcon_0.port3 = class49.port2; } else { - GrandExchangeOfferUnitPriceComparator.port3 = class222.port1; + WorldMapIcon_0.port3 = SecureRandomCallable.port1; } - ++field667; + ++field678; loginState = 0; } else { - AbstractArchive.getLoginError(-3); + class162.getLoginError(-3); } } } else { @@ -3697,30 +2930,29 @@ public final class Client extends GameShell implements Usernamed { if (((AbstractSocket)var1).available() >= packetWriter.serverPacketLength) { ((AbstractSocket)var1).read(var2.array, 0, packetWriter.serverPacketLength); var2.offset = 0; - var30 = packetWriter.serverPacketLength; - timer.method5121(); + var31 = packetWriter.serverPacketLength; + timer.method5076(); packetWriter.clearBuffer(); packetWriter.packetBuffer.offset = 0; packetWriter.serverPacket = null; - packetWriter.field1290 = null; - packetWriter.field1286 = null; - packetWriter.field1292 = null; + packetWriter.field1299 = null; + packetWriter.field1311 = null; + packetWriter.field1312 = null; packetWriter.serverPacketLength = 0; - packetWriter.field1291 = 0; + packetWriter.field1305 = 0; rebootTimer = 0; - menuOptionsCount = 0; - isMenuOpen = false; + RouteStrategy.method3641(); minimapState = 0; destinationX = 0; - for (var15 = 0; var15 < 2048; ++var15) { - players[var15] = null; + for (var4 = 0; var4 < 2048; ++var4) { + players[var4] = null; } class215.localPlayer = null; - for (var15 = 0; var15 < npcs.length; ++var15) { - NPC var27 = npcs[var15]; + for (var4 = 0; var4 < npcs.length; ++var4) { + NPC var27 = npcs[var4]; if (var27 != null) { var27.targetIndex = -1; var27.false0 = false; @@ -3728,45 +2960,45 @@ public final class Client extends GameShell implements Usernamed { } ItemContainer.itemContainers = new NodeHashTable(32); - Tile.updateGameState(30); + class81.updateGameState(30); - for (var15 = 0; var15 < 100; ++var15) { - field842[var15] = true; + for (var4 = 0; var4 < 100; ++var4) { + field847[var4] = true; } - var4 = SoundSystem.getPacketBufferNode(ClientPacket.field2257, packetWriter.isaacCipher); - var4.packetBuffer.writeByte(WallDecoration.getWindowedMode()); - var4.packetBuffer.writeShort(class286.canvasWidth); - var4.packetBuffer.writeShort(FloorUnderlayDefinition.canvasHeight); - packetWriter.addNode(var4); - ArchiveLoader.updatePlayer(var2); - if (var30 != var2.offset) { + PacketBufferNode var33 = ModelData0.getPacketBufferNode(ClientPacket.field2218, packetWriter.isaacCipher); + var33.packetBuffer.writeByte(class43.getWindowedMode()); + var33.packetBuffer.writeShort(BoundaryObject.canvasWidth); + var33.packetBuffer.writeShort(WorldMapCacheName.canvasHeight); + packetWriter.addNode(var33); + UserComparator6.updatePlayer(var2); + if (var31 != var2.offset) { throw new RuntimeException(); } } } } } - } catch (IOException var22) { - if (field667 < 1) { - if (class222.port1 == GrandExchangeOfferUnitPriceComparator.port3) { - GrandExchangeOfferUnitPriceComparator.port3 = Decimator.port2; + } catch (IOException var20) { + if (field678 < 1) { + if (SecureRandomCallable.port1 == WorldMapIcon_0.port3) { + WorldMapIcon_0.port3 = class49.port2; } else { - GrandExchangeOfferUnitPriceComparator.port3 = class222.port1; + WorldMapIcon_0.port3 = SecureRandomCallable.port1; } - ++field667; + ++field678; loginState = 0; } else { - AbstractArchive.getLoginError(-2); + class162.getLoginError(-2); } } } - @ObfuscatedName("fq") + @ObfuscatedName("fu") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "80" + signature = "(I)V", + garbageValue = "-1256997578" ) @Export("doCycleLoggedIn") final void doCycleLoggedIn() { @@ -3778,535 +3010,497 @@ public final class Client extends GameShell implements Usernamed { --logoutTimer; } - if (field680) { - field680 = false; - AbstractWorldMapIcon.method652(); + if (field691) { + field691 = false; + Projectile.method2137(); } else { if (!isMenuOpen) { - ClientPacket.addCancelMenuEntry(); + class2.addCancelMenuEntry(); } - int var1; - for (var1 = 0; var1 < 100 && this.method1720(packetWriter); ++var1) { + for (int var1 = 0; var1 < 100 && this.method1316(packetWriter); ++var1) { } if (gameState == 30) { - while (true) { - ReflectionCheck var2 = (ReflectionCheck)class96.reflectionChecks.last(); - boolean var29; - if (var2 == null) { - var29 = false; - } else { - var29 = true; + int var2; + PacketBufferNode var14; + while (class43.method820()) { + var14 = ModelData0.getPacketBufferNode(ClientPacket.field2283, packetWriter.isaacCipher); + var14.packetBuffer.writeByte(0); + var2 = var14.packetBuffer.offset; + UserComparator10.performReflectionCheck(var14.packetBuffer); + var14.packetBuffer.writeLengthByte(var14.packetBuffer.offset - var2); + packetWriter.addNode(var14); + } + + if (timer.field3581) { + var14 = ModelData0.getPacketBufferNode(ClientPacket.field2302, packetWriter.isaacCipher); + var14.packetBuffer.writeByte(0); + var2 = var14.packetBuffer.offset; + timer.write(var14.packetBuffer); + var14.packetBuffer.writeLengthByte(var14.packetBuffer.offset - var2); + packetWriter.addNode(var14); + timer.method5075(); + } + + int var3; + int var4; + int var5; + int var6; + int var7; + int var8; + int var9; + int var10; + int var11; + int var12; + synchronized(class2.mouseRecorder.lock) { + if (!field831) { + class2.mouseRecorder.index = 0; + } else if (MouseHandler.MouseHandler_lastButton != 0 || class2.mouseRecorder.index >= 40) { + PacketBufferNode var15 = null; + var3 = 0; + var4 = 0; + var5 = 0; + var6 = 0; + + for (var7 = 0; var7 < class2.mouseRecorder.index && (var15 == null || var15.packetBuffer.offset - var3 < 246); ++var7) { + var4 = var7; + var8 = class2.mouseRecorder.ys[var7]; + if (var8 < -1) { + var8 = -1; + } else if (var8 > 65534) { + var8 = 65534; + } + + var9 = class2.mouseRecorder.xs[var7]; + if (var9 < -1) { + var9 = -1; + } else if (var9 > 65534) { + var9 = 65534; + } + + if (var9 != field877 || var8 != field657) { + if (var15 == null) { + var15 = ModelData0.getPacketBufferNode(ClientPacket.field2221, packetWriter.isaacCipher); + var15.packetBuffer.writeByte(0); + var3 = var15.packetBuffer.offset; + PacketBuffer var10000 = var15.packetBuffer; + var10000.offset += 2; + var5 = 0; + var6 = 0; + } + + if (field658 != -1L) { + var10 = var9 - field877; + var11 = var8 - field657; + var12 = (int)((class2.mouseRecorder.millis[var7] - field658) / 20L); + var5 = (int)((long)var5 + (class2.mouseRecorder.millis[var7] - field658) % 20L); + } else { + var10 = var9; + var11 = var8; + var12 = Integer.MAX_VALUE; + } + + field877 = var9; + field657 = var8; + if (var12 < 8 && var10 >= -32 && var10 <= 31 && var11 >= -32 && var11 <= 31) { + var10 += 32; + var11 += 32; + var15.packetBuffer.writeShort((var12 << 12) + var11 + (var10 << 6)); + } else if (var12 < 32 && var10 >= -128 && var10 <= 127 && var11 >= -128 && var11 <= 127) { + var10 += 128; + var11 += 128; + var15.packetBuffer.writeByte(var12 + 128); + var15.packetBuffer.writeShort(var11 + (var10 << 8)); + } else if (var12 < 32) { + var15.packetBuffer.writeByte(var12 + 192); + if (var9 != -1 && var8 != -1) { + var15.packetBuffer.writeInt(var9 | var8 << 16); + } else { + var15.packetBuffer.writeInt(Integer.MIN_VALUE); + } + } else { + var15.packetBuffer.writeShort((var12 & 8191) + 57344); + if (var9 != -1 && var8 != -1) { + var15.packetBuffer.writeInt(var9 | var8 << 16); + } else { + var15.packetBuffer.writeInt(Integer.MIN_VALUE); + } + } + + ++var6; + field658 = class2.mouseRecorder.millis[var7]; + } + } + + if (var15 != null) { + var15.packetBuffer.writeLengthByte(var15.packetBuffer.offset - var3); + var7 = var15.packetBuffer.offset; + var15.packetBuffer.offset = var3; + var15.packetBuffer.writeByte(var5 / var6); + var15.packetBuffer.writeByte(var5 % var6); + var15.packetBuffer.offset = var7; + packetWriter.addNode(var15); + } + + if (var4 >= class2.mouseRecorder.index) { + class2.mouseRecorder.index = 0; + } else { + MouseRecorder var47 = class2.mouseRecorder; + var47.index -= var4; + System.arraycopy(class2.mouseRecorder.xs, var4, class2.mouseRecorder.xs, 0, class2.mouseRecorder.index); + System.arraycopy(class2.mouseRecorder.ys, var4, class2.mouseRecorder.ys, 0, class2.mouseRecorder.index); + System.arraycopy(class2.mouseRecorder.millis, var4, class2.mouseRecorder.millis, 0, class2.mouseRecorder.index); + } + } + } + + if (MouseHandler.MouseHandler_lastButton == 1 || !JagexCache.mouseCam && MouseHandler.MouseHandler_lastButton == 4 || MouseHandler.MouseHandler_lastButton == 2) { + long var16 = (MouseHandler.MouseHandler_lastPressedTimeMillis - mouseLastLastPressedTimeMillis * -1L) / 50L; + if (var16 > 4095L) { + var16 = 4095L; } - int var3; - PacketBufferNode var30; - if (!var29) { - PacketBufferNode var14; - int var15; - if (timer.field3568) { - var14 = SoundSystem.getPacketBufferNode(ClientPacket.field2201, packetWriter.isaacCipher); - var14.packetBuffer.writeByte(0); - var15 = var14.packetBuffer.offset; - timer.write(var14.packetBuffer); - var14.packetBuffer.writeLengthByte(var14.packetBuffer.offset - var15); - packetWriter.addNode(var14); - timer.method5120(); + mouseLastLastPressedTimeMillis = MouseHandler.MouseHandler_lastPressedTimeMillis * -1L; + var3 = MouseHandler.MouseHandler_lastPressedY; + if (var3 < 0) { + var3 = 0; + } else if (var3 > WorldMapCacheName.canvasHeight) { + var3 = WorldMapCacheName.canvasHeight; + } + + var4 = MouseHandler.MouseHandler_lastPressedX; + if (var4 < 0) { + var4 = 0; + } else if (var4 > BoundaryObject.canvasWidth) { + var4 = BoundaryObject.canvasWidth; + } + + var5 = (int)var16; + PacketBufferNode var18 = ModelData0.getPacketBufferNode(ClientPacket.field2224, packetWriter.isaacCipher); + var18.packetBuffer.writeShort((MouseHandler.MouseHandler_lastButton == 2 ? 1 : 0) + (var5 << 1)); + var18.packetBuffer.writeShort(var4); + var18.packetBuffer.writeShort(var3); + packetWriter.addNode(var18); + } + + if (KeyHandler.field398 > 0) { + var14 = ModelData0.getPacketBufferNode(ClientPacket.field2281, packetWriter.isaacCipher); + var14.packetBuffer.writeShort(0); + var2 = var14.packetBuffer.offset; + long var19 = TaskHandler.currentTimeMillis(); + + for (var5 = 0; var5 < KeyHandler.field398; ++var5) { + long var21 = var19 - field866; + if (var21 > 16777215L) { + var21 = 16777215L; } - int var4; - int var5; - int var6; - int var7; - int var8; - int var9; - int var10; - int var11; - int var12; - PacketBuffer var10000; - synchronized(class3.mouseRecorder.lock) { - if (!field791) { - class3.mouseRecorder.index = 0; - } else if (MouseHandler.MouseHandler_lastButton != 0 || class3.mouseRecorder.index >= 40) { - var30 = null; - var3 = 0; - var4 = 0; - var5 = 0; - var6 = 0; + field866 = var19; + var14.packetBuffer.method5627((int)var21); + var14.packetBuffer.writeIntME(KeyHandler.field378[var5]); + } - for (var7 = 0; var7 < class3.mouseRecorder.index && (var30 == null || var30.packetBuffer.offset - var3 < 246); ++var7) { - var4 = var7; - var8 = class3.mouseRecorder.ys[var7]; - if (var8 < -1) { - var8 = -1; - } else if (var8 > 65534) { - var8 = 65534; + var14.packetBuffer.writeLengthShort(var14.packetBuffer.offset - var2); + packetWriter.addNode(var14); + } + + if (field776 > 0) { + --field776; + } + + if (KeyHandler.KeyHandler_pressedKeys[96] || KeyHandler.KeyHandler_pressedKeys[97] || KeyHandler.KeyHandler_pressedKeys[98] || KeyHandler.KeyHandler_pressedKeys[99]) { + field727 = true; + } + + if (field727 && field776 <= 0) { + field776 = 20; + field727 = false; + var14 = ModelData0.getPacketBufferNode(ClientPacket.field2295, packetWriter.isaacCipher); + var14.packetBuffer.writeShortLE(camAngleX); + var14.packetBuffer.writeShort(camAngleY); + packetWriter.addNode(var14); + } + + if (TextureProvider.hasFocus && !hadFocus) { + hadFocus = true; + var14 = ModelData0.getPacketBufferNode(ClientPacket.field2309, packetWriter.isaacCipher); + var14.packetBuffer.writeByte(1); + packetWriter.addNode(var14); + } + + if (!TextureProvider.hasFocus && hadFocus) { + hadFocus = false; + var14 = ModelData0.getPacketBufferNode(ClientPacket.field2309, packetWriter.isaacCipher); + var14.packetBuffer.writeByte(0); + packetWriter.addNode(var14); + } + + if (WorldMapRegion.worldMap != null) { + WorldMapRegion.worldMap.method6376(); + } + + class222.method4198(); + GrandExchangeOfferNameComparator.method157(); + if (gameState == 30) { + for (PendingSpawn var35 = (PendingSpawn)pendingSpawns.last(); var35 != null; var35 = (PendingSpawn)pendingSpawns.previous()) { + if (var35.hitpoints > 0) { + --var35.hitpoints; + } + + ObjectDefinition var23; + boolean var30; + if (var35.hitpoints == 0) { + if (var35.objectId >= 0) { + var3 = var35.objectId; + var4 = var35.field924; + var23 = Occluder.getObjectDefinition(var3); + if (var4 == 11) { + var4 = 10; + } + + if (var4 >= 5 && var4 <= 8) { + var4 = 4; + } + + var30 = var23.method4691(var4); + if (!var30) { + continue; + } + } + + Actor.addPendingSpawnToScene(var35.plane, var35.type, var35.x, var35.y, var35.objectId, var35.field929, var35.field924); + var35.remove(); + } else { + if (var35.delay > 0) { + --var35.delay; + } + + if (var35.delay == 0 && var35.x >= 1 && var35.y >= 1 && var35.x <= 102 && var35.y <= 102) { + if (var35.id >= 0) { + var3 = var35.id; + var4 = var35.field927; + var23 = Occluder.getObjectDefinition(var3); + if (var4 == 11) { + var4 = 10; } - var9 = class3.mouseRecorder.xs[var7]; - if (var9 < -1) { - var9 = -1; - } else if (var9 > 65534) { - var9 = 65534; + if (var4 >= 5 && var4 <= 8) { + var4 = 4; } - if (var9 != field644 || var8 != field905) { - if (var30 == null) { - var30 = SoundSystem.getPacketBufferNode(ClientPacket.field2183, packetWriter.isaacCipher); - var30.packetBuffer.writeByte(0); - var3 = var30.packetBuffer.offset; - var10000 = var30.packetBuffer; - var10000.offset += 2; - var5 = 0; - var6 = 0; - } - - if (field646 != -1L) { - var10 = var9 - field644; - var11 = var8 - field905; - var12 = (int)((class3.mouseRecorder.millis[var7] - field646) / 20L); - var5 = (int)((long)var5 + (class3.mouseRecorder.millis[var7] - field646) % 20L); - } else { - var10 = var9; - var11 = var8; - var12 = Integer.MAX_VALUE; - } - - field644 = var9; - field905 = var8; - if (var12 < 8 && var10 >= -32 && var10 <= 31 && var11 >= -32 && var11 <= 31) { - var10 += 32; - var11 += 32; - var30.packetBuffer.writeShort((var12 << 12) + var11 + (var10 << 6)); - } else if (var12 < 32 && var10 >= -128 && var10 <= 127 && var11 >= -128 && var11 <= 127) { - var10 += 128; - var11 += 128; - var30.packetBuffer.writeByte(var12 + 128); - var30.packetBuffer.writeShort(var11 + (var10 << 8)); - } else if (var12 < 32) { - var30.packetBuffer.writeByte(var12 + 192); - if (var9 != -1 && var8 != -1) { - var30.packetBuffer.writeInt(var9 | var8 << 16); - } else { - var30.packetBuffer.writeInt(Integer.MIN_VALUE); - } - } else { - var30.packetBuffer.writeShort((var12 & 8191) + 57344); - if (var9 != -1 && var8 != -1) { - var30.packetBuffer.writeInt(var9 | var8 << 16); - } else { - var30.packetBuffer.writeInt(Integer.MIN_VALUE); - } - } - - ++var6; - field646 = class3.mouseRecorder.millis[var7]; - } - } - - if (var30 != null) { - var30.packetBuffer.writeLengthByte(var30.packetBuffer.offset - var3); - var7 = var30.packetBuffer.offset; - var30.packetBuffer.offset = var3; - var30.packetBuffer.writeByte(var5 / var6); - var30.packetBuffer.writeByte(var5 % var6); - var30.packetBuffer.offset = var7; - packetWriter.addNode(var30); - } - - if (var4 >= class3.mouseRecorder.index) { - class3.mouseRecorder.index = 0; - } else { - MouseRecorder var47 = class3.mouseRecorder; - var47.index -= var4; - System.arraycopy(class3.mouseRecorder.xs, var4, class3.mouseRecorder.xs, 0, class3.mouseRecorder.index); - System.arraycopy(class3.mouseRecorder.ys, var4, class3.mouseRecorder.ys, 0, class3.mouseRecorder.index); - System.arraycopy(class3.mouseRecorder.millis, var4, class3.mouseRecorder.millis, 0, class3.mouseRecorder.index); - } - } - } - - PacketBufferNode var18; - if (MouseHandler.MouseHandler_lastButton == 1 || !WorldMapLabelSize.mouseCam && MouseHandler.MouseHandler_lastButton == 4 || MouseHandler.MouseHandler_lastButton == 2) { - long var16 = (MouseHandler.MouseHandler_lastPressedTimeMillis - mouseLastLastPressedTimeMillis * -1L) / 50L; - if (var16 > 4095L) { - var16 = 4095L; - } - - mouseLastLastPressedTimeMillis = MouseHandler.MouseHandler_lastPressedTimeMillis * -1L; - var3 = MouseHandler.MouseHandler_lastPressedY; - if (var3 < 0) { - var3 = 0; - } else if (var3 > FloorUnderlayDefinition.canvasHeight) { - var3 = FloorUnderlayDefinition.canvasHeight; - } - - var4 = MouseHandler.MouseHandler_lastPressedX; - if (var4 < 0) { - var4 = 0; - } else if (var4 > class286.canvasWidth) { - var4 = class286.canvasWidth; - } - - var5 = (int)var16; - var18 = SoundSystem.getPacketBufferNode(ClientPacket.field2216, packetWriter.isaacCipher); - var18.packetBuffer.writeShort((MouseHandler.MouseHandler_lastButton == 2 ? 1 : 0) + (var5 << 1)); - var18.packetBuffer.writeShort(var4); - var18.packetBuffer.writeShort(var3); - packetWriter.addNode(var18); - } - - if (KeyHandler.field384 > 0) { - var14 = SoundSystem.getPacketBufferNode(ClientPacket.field2187, packetWriter.isaacCipher); - var14.packetBuffer.writeShort(0); - var15 = var14.packetBuffer.offset; - long var19 = PlayerAppearance.currentTimeMillis(); - - for (var5 = 0; var5 < KeyHandler.field384; ++var5) { - long var21 = var19 - field663; - if (var21 > 16777215L) { - var21 = 16777215L; - } - - field663 = var19; - var14.packetBuffer.writeMedium((int)var21); - var14.packetBuffer.writeByte(KeyHandler.field383[var5]); - } - - var14.packetBuffer.writeLengthShort(var14.packetBuffer.offset - var15); - packetWriter.addNode(var14); - } - - if (field715 > 0) { - --field715; - } - - if (KeyHandler.KeyHandler_pressedKeys[96] || KeyHandler.KeyHandler_pressedKeys[97] || KeyHandler.KeyHandler_pressedKeys[98] || KeyHandler.KeyHandler_pressedKeys[99]) { - field733 = true; - } - - if (field733 && field715 <= 0) { - field715 = 20; - field733 = false; - var14 = SoundSystem.getPacketBufferNode(ClientPacket.field2220, packetWriter.isaacCipher); - var14.packetBuffer.method5644(camAngleY); - var14.packetBuffer.writeShortLE(camAngleX); - packetWriter.addNode(var14); - } - - if (class30.hasFocus && !hadFocus) { - hadFocus = true; - var14 = SoundSystem.getPacketBufferNode(ClientPacket.field2209, packetWriter.isaacCipher); - var14.packetBuffer.writeByte(1); - packetWriter.addNode(var14); - } - - if (!class30.hasFocus && hadFocus) { - hadFocus = false; - var14 = SoundSystem.getPacketBufferNode(ClientPacket.field2209, packetWriter.isaacCipher); - var14.packetBuffer.writeByte(0); - packetWriter.addNode(var14); - } - - if (Login.worldMap != null) { - Login.worldMap.method6427(); - } - - ModelData0.method3378(); - ScriptFrame.method1219(); - if (gameState != 30) { - return; - } - - for (PendingSpawn var37 = (PendingSpawn)pendingSpawns.last(); var37 != null; var37 = (PendingSpawn)pendingSpawns.previous()) { - if (var37.hitpoints > 0) { - --var37.hitpoints; - } - - if (var37.hitpoints == 0) { - if (var37.objectId < 0 || class296.method5547(var37.objectId, var37.field914)) { - GrandExchangeOfferUnitPriceComparator.addPendingSpawnToScene(var37.plane, var37.type, var37.x, var37.y, var37.objectId, var37.field913, var37.field914); - var37.remove(); - } - } else { - if (var37.delay > 0) { - --var37.delay; - } - - if (var37.delay == 0 && var37.x >= 1 && var37.y >= 1 && var37.x <= 102 && var37.y <= 102 && (var37.id < 0 || class296.method5547(var37.id, var37.field917))) { - GrandExchangeOfferUnitPriceComparator.addPendingSpawnToScene(var37.plane, var37.type, var37.x, var37.y, var37.id, var37.orientation, var37.field917); - var37.delay = -1; - if (var37.id == var37.objectId && var37.objectId == -1) { - var37.remove(); - } else if (var37.id == var37.objectId && var37.field913 == var37.orientation && var37.field917 == var37.field914) { - var37.remove(); - } - } - } - } - - int var10002; - for (var1 = 0; var1 < soundEffectCount; ++var1) { - var10002 = queuedSoundEffectDelays[var1]--; - if (queuedSoundEffectDelays[var1] >= -10) { - SoundEffect var31 = soundEffects[var1]; - if (var31 == null) { - var10000 = null; - var31 = SoundEffect.readSoundEffect(NetFileRequest.archive4, soundEffectIds[var1], 0); - if (var31 == null) { + var30 = var23.method4691(var4); + if (!var30) { continue; } - - int[] var48 = queuedSoundEffectDelays; - var48[var1] += var31.calculateDelay(); - soundEffects[var1] = var31; } - if (queuedSoundEffectDelays[var1] < 0) { - if (soundLocations[var1] != 0) { - var4 = (soundLocations[var1] & 255) * 128; - var5 = soundLocations[var1] >> 16 & 255; - var6 = var5 * 128 + 64 - class215.localPlayer.x; - if (var6 < 0) { - var6 = -var6; - } - - var7 = soundLocations[var1] >> 8 & 255; - var8 = var7 * 128 + 64 - class215.localPlayer.y; - if (var8 < 0) { - var8 = -var8; - } - - var9 = var6 + var8 - 128; - if (var9 > var4) { - queuedSoundEffectDelays[var1] = -100; - continue; - } - - if (var9 < 0) { - var9 = 0; - } - - var3 = (var4 - var9) * areaSoundEffectVolume / var4; - } else { - var3 = soundEffectVolume; - } - - if (var3 > 0) { - RawSound var23 = var31.toRawSound().resample(AbstractWorldMapIcon.decimator); - RawPcmStream var24 = RawPcmStream.createRawPcmStream(var23, 100, var3); - var24.setNumLoops(queuedSoundEffectLoops[var1] - 1); - FloorUnderlayDefinition.pcmStreamMixer.addSubStream(var24); - } - - queuedSoundEffectDelays[var1] = -100; + Actor.addPendingSpawnToScene(var35.plane, var35.type, var35.x, var35.y, var35.id, var35.orientation, var35.field927); + var35.delay = -1; + if (var35.objectId == var35.id && var35.objectId == -1) { + var35.remove(); + } else if (var35.id == var35.objectId && var35.orientation == var35.field929 && var35.field927 == var35.field924) { + var35.remove(); } - } else { - --soundEffectCount; + } + } + } - for (var15 = var1; var15 < soundEffectCount; ++var15) { - soundEffectIds[var15] = soundEffectIds[var15 + 1]; - soundEffects[var15] = soundEffects[var15 + 1]; - queuedSoundEffectLoops[var15] = queuedSoundEffectLoops[var15 + 1]; - queuedSoundEffectDelays[var15] = queuedSoundEffectDelays[var15 + 1]; - soundLocations[var15] = soundLocations[var15 + 1]; + class81.method2084(); + ++packetWriter.field1305; + if (packetWriter.field1305 > 750) { + Projectile.method2137(); + } else { + class81.method2085(); + GrandExchangeEvents.method83(); + int[] var36 = Players.Players_indices; + + for (var2 = 0; var2 < Players.Players_count; ++var2) { + Player var24 = players[var36[var2]]; + if (var24 != null && var24.overheadTextCyclesRemaining > 0) { + --var24.overheadTextCyclesRemaining; + if (var24.overheadTextCyclesRemaining == 0) { + var24.overheadText = null; } - - --var1; } } - if (field855 && !Login.method2256()) { - if (musicVolume != 0 && currentTrackGroupId != -1) { - MusicPatchNode2.playMusicTrack(class216.archive6, currentTrackGroupId, 0, musicVolume, false); - } - - field855 = false; - } - - ++packetWriter.field1291; - if (packetWriter.field1291 > 750) { - AbstractWorldMapIcon.method652(); - return; - } - - WorldMapData_1.method767(); - - for (var1 = 0; var1 < npcCount; ++var1) { - var15 = npcIndices[var1]; - NPC var25 = npcs[var15]; - if (var25 != null) { - HitSplatDefinition.updateActorSequence(var25, var25.definition.size); + for (var2 = 0; var2 < npcCount; ++var2) { + var3 = npcIndices[var2]; + NPC var25 = npcs[var3]; + if (var25 != null && var25.overheadTextCyclesRemaining > 0) { + --var25.overheadTextCyclesRemaining; + if (var25.overheadTextCyclesRemaining == 0) { + var25.overheadText = null; + } } } - KeyHandler.method913(); - ++field693; + ++field704; if (mouseCrossColor != 0) { - mouseCrossState = mouseCrossState * 400 + 400; - if (mouseCrossState * 20 >= 400) { + mouseCrossState = mouseCrossState * 400 + 20; + if (mouseCrossState * 400 >= 400) { mouseCrossColor = 0; } } - if (Login.field1165 != null) { - ++field753; - if (field753 >= 15) { - GrandExchangeOfferAgeComparator.invalidateWidget(Login.field1165); - Login.field1165 = null; + if (class51.field432 != null) { + ++field664; + if (field664 >= 15) { + ScriptEvent.invalidateWidget(class51.field432); + class51.field432 = null; } } - Widget var38 = ChatChannel.mousedOverWidgetIf1; - Widget var32 = GrandExchangeEvents.field39; - ChatChannel.mousedOverWidgetIf1 = null; - GrandExchangeEvents.field39 = null; + Widget var37 = class185.mousedOverWidgetIf1; + Widget var38 = GrandExchangeOfferWorldComparator.field31; + class185.mousedOverWidgetIf1 = null; + GrandExchangeOfferWorldComparator.field31 = null; draggedOnWidget = null; - field695 = false; - field809 = false; - field866 = 0; + field823 = false; + field820 = false; + field889 = 0; - while (class237.isKeyDown() && field866 < 128) { - if (staffModLevel >= 2 && KeyHandler.KeyHandler_pressedKeys[82] && WorldMapLabel.field229 == 66) { - String var40 = ""; + while (InvDefinition.isKeyDown() && field889 < 128) { + if (staffModLevel >= 2 && KeyHandler.KeyHandler_pressedKeys[82] && class49.field418 == 66) { + String var44 = ""; Message var39; - for (Iterator var42 = Messages.Messages_hashTable.iterator(); var42.hasNext(); var40 = var40 + var39.sender + ':' + var39.text + '\n') { - var39 = (Message)var42.next(); + for (Iterator var40 = Messages.Messages_hashTable.iterator(); var40.hasNext(); var44 = var44 + var39.sender + ':' + var39.text + '\n') { + var39 = (Message)var40.next(); } - WorldMapID.client.clipboardSetString(var40); - } else if (oculusOrbState != 1 || DevicePcmPlayerProvider.field395 <= 0) { - field854[field866] = WorldMapLabel.field229; - field853[field866] = DevicePcmPlayerProvider.field395; - ++field866; + AbstractWorldMapIcon.client.clipboardSetString(var44); + } else if (oculusOrbState != 1 || class297.field3699 <= 0) { + field865[field889] = class49.field418; + field864[field889] = class297.field3699; + ++field889; } } - if (PendingSpawn.method1854() && KeyHandler.KeyHandler_pressedKeys[82] && KeyHandler.KeyHandler_pressedKeys[81] && mouseWheelRotation != 0) { - var3 = class215.localPlayer.Client_plane - mouseWheelRotation; + if (WorldMapSection0.method254() && KeyHandler.KeyHandler_pressedKeys[82] && KeyHandler.KeyHandler_pressedKeys[81] && mouseWheelRotation != 0) { + var3 = class215.localPlayer.plane - mouseWheelRotation; if (var3 < 0) { var3 = 0; } else if (var3 > 3) { var3 = 3; } - if (var3 != class215.localPlayer.Client_plane) { - var4 = class215.localPlayer.pathX[0] + UserComparator8.baseX * 64; - var5 = class215.localPlayer.pathY[0] + HealthBar.baseY * 64; - var18 = SoundSystem.getPacketBufferNode(ClientPacket.field2228, packetWriter.isaacCipher); - var18.packetBuffer.writeIntME(0); - var18.packetBuffer.writeByte(var3); - var18.packetBuffer.method5644(var5); - var18.packetBuffer.writeShortLE(var4); - packetWriter.addNode(var18); + if (var3 != class215.localPlayer.plane) { + Clock.method3555(class215.localPlayer.pathX[0] + class51.baseX * 64, class215.localPlayer.pathY[0] + VarcInt.baseY * 64, var3, false); } mouseWheelRotation = 0; } if (rootInterface != -1) { - ServerBuild.updateRootInterface(rootInterface, 0, 0, class286.canvasWidth, FloorUnderlayDefinition.canvasHeight, 0, 0); + Script.updateRootInterface(rootInterface, 0, 0, BoundaryObject.canvasWidth, WorldMapCacheName.canvasHeight, 0, 0); } ++cycleCntr; while (true) { Widget var41; - Widget var43; - ScriptEvent var44; + ScriptEvent var42; + Widget var46; do { - var44 = (ScriptEvent)field813.removeLast(); - if (var44 == null) { + var42 = (ScriptEvent)field900.removeLast(); + if (var42 == null) { while (true) { do { - var44 = (ScriptEvent)field832.removeLast(); - if (var44 == null) { + var42 = (ScriptEvent)field843.removeLast(); + if (var42 == null) { while (true) { do { - var44 = (ScriptEvent)scriptEvents.removeLast(); - if (var44 == null) { + var42 = (ScriptEvent)scriptEvents.removeLast(); + if (var42 == null) { this.menu(); - JagexCache.method3624(); - if (clickedWidget != null) { - this.method1414(); + if (WorldMapRegion.worldMap != null) { + WorldMapRegion.worldMap.method6381(ClientPacket.Client_plane, class51.baseX * 64 + (class215.localPlayer.x >> 7), VarcInt.baseY * 64 + (class215.localPlayer.y >> 7), false); + WorldMapRegion.worldMap.loadCache(); } - if (GrandExchangeOffer.dragInventoryWidget != null) { - GrandExchangeOfferAgeComparator.invalidateWidget(GrandExchangeOffer.dragInventoryWidget); + if (clickedWidget != null) { + this.method1503(); + } + + PacketBufferNode var26; + if (DevicePcmPlayerProvider.dragInventoryWidget != null) { + ScriptEvent.invalidateWidget(DevicePcmPlayerProvider.dragInventoryWidget); ++itemDragDuration; if (MouseHandler.MouseHandler_currentButton == 0) { - if (field743) { - if (DirectByteArrayCopier.field2476 == GrandExchangeOffer.dragInventoryWidget && dragItemSlotSource != dragItemSlotDestination) { - Widget var46 = GrandExchangeOffer.dragInventoryWidget; + if (field754) { + if (DevicePcmPlayerProvider.dragInventoryWidget == FloorOverlayDefinition.field3507 && dragItemSlotSource != dragItemSlotDestination) { + Widget var45 = DevicePcmPlayerProvider.dragInventoryWidget; byte var33 = 0; - if (field907 == 1 && var46.contentType == 206) { + if (field807 == 1 && var45.contentType == 206) { var33 = 1; } - if (var46.itemIds[dragItemSlotDestination] <= 0) { + if (var45.itemIds[dragItemSlotDestination] <= 0) { var33 = 0; } - var6 = class195.getWidgetClickMask(var46); - boolean var34 = (var6 >> 29 & 1) != 0; - if (var34) { + var6 = MenuAction.getWidgetClickMask(var45); + boolean var31 = (var6 >> 29 & 1) != 0; + if (var31) { var7 = dragItemSlotSource; var8 = dragItemSlotDestination; - var46.itemIds[var8] = var46.itemIds[var7]; - var46.itemQuantities[var8] = var46.itemQuantities[var7]; - var46.itemIds[var7] = -1; - var46.itemQuantities[var7] = 0; + var45.itemIds[var8] = var45.itemIds[var7]; + var45.itemQuantities[var8] = var45.itemQuantities[var7]; + var45.itemIds[var7] = -1; + var45.itemQuantities[var7] = 0; } else if (var33 == 1) { var7 = dragItemSlotSource; var8 = dragItemSlotDestination; - while (var8 != var7) { + while (var7 != var8) { if (var7 > var8) { - var46.swapItems(var7 - 1, var7); + var45.swapItems(var7 - 1, var7); --var7; } else if (var7 < var8) { - var46.swapItems(var7 + 1, var7); + var45.swapItems(var7 + 1, var7); ++var7; } } } else { - var46.swapItems(dragItemSlotDestination, dragItemSlotSource); + var45.swapItems(dragItemSlotDestination, dragItemSlotSource); } - PacketBufferNode var26 = SoundSystem.getPacketBufferNode(ClientPacket.field2205, packetWriter.isaacCipher); - var26.packetBuffer.method5644(dragItemSlotSource); - var26.packetBuffer.method5653(GrandExchangeOffer.dragInventoryWidget.id); - var26.packetBuffer.method5643(dragItemSlotDestination); - var26.packetBuffer.method5636(var33); + var26 = ModelData0.getPacketBufferNode(ClientPacket.field2271, packetWriter.isaacCipher); + var26.packetBuffer.method5647(DevicePcmPlayerProvider.dragInventoryWidget.id); + var26.packetBuffer.writeByte(var33); + var26.packetBuffer.writeShortLE(dragItemSlotDestination); + var26.packetBuffer.method5636(dragItemSlotSource); packetWriter.addNode(var26); } } else if (this.shouldLeftClickOpenMenu()) { - this.openMenu(field729, field741); + this.openMenu(field751, field752); } else if (menuOptionsCount > 0) { - AbstractWorldMapData.method325(field729, field741); + var3 = field751; + var4 = field752; + Language.method3705(Tiles.tempMenuAction, var3, var4); + Tiles.tempMenuAction = null; } - field753 = 10; + field664 = 10; MouseHandler.MouseHandler_lastButton = 0; - GrandExchangeOffer.dragInventoryWidget = null; - } else if (itemDragDuration >= 5 && (MouseHandler.MouseHandler_x > field729 + 5 || MouseHandler.MouseHandler_x < field729 - 5 || MouseHandler.MouseHandler_y > field741 + 5 || MouseHandler.MouseHandler_y < field741 - 5)) { - field743 = true; + DevicePcmPlayerProvider.dragInventoryWidget = null; + } else if (itemDragDuration >= 5 && (MouseHandler.MouseHandler_x > field751 + 5 || MouseHandler.MouseHandler_x < field751 - 5 || MouseHandler.MouseHandler_y > field752 + 5 || MouseHandler.MouseHandler_y < field752 - 5)) { + field754 = true; } } - PacketBufferNode var45; - if (Scene.method3252()) { + if (Scene.method3146()) { var3 = Scene.Scene_selectedX; var4 = Scene.Scene_selectedY; - var45 = SoundSystem.getPacketBufferNode(ClientPacket.field2243, packetWriter.isaacCipher); - var45.packetBuffer.writeByte(5); - var45.packetBuffer.writeShort(UserComparator8.baseX * 64 + var3); - var45.packetBuffer.method5634(KeyHandler.KeyHandler_pressedKeys[82] ? (KeyHandler.KeyHandler_pressedKeys[81] ? 2 : 1) : 0); - var45.packetBuffer.writeShort(HealthBar.baseY * 64 + var4); - packetWriter.addNode(var45); - Scene.method3281(); + PacketBufferNode var43 = ModelData0.getPacketBufferNode(ClientPacket.field2266, packetWriter.isaacCipher); + var43.packetBuffer.writeByte(5); + var43.packetBuffer.method5636(class51.baseX * 64 + var3); + var43.packetBuffer.method5628(KeyHandler.KeyHandler_pressedKeys[82] ? (KeyHandler.KeyHandler_pressedKeys[81] ? 2 : 1) : 0); + var43.packetBuffer.method5636(VarcInt.baseY * 64 + var4); + packetWriter.addNode(var43); + Scene.method3147(); mouseCrossX = MouseHandler.MouseHandler_lastPressedX; mouseCrossY = MouseHandler.MouseHandler_lastPressedY; mouseCrossColor = 1; @@ -4315,61 +3509,61 @@ public final class Client extends GameShell implements Usernamed { destinationY = var4; } - if (var38 != ChatChannel.mousedOverWidgetIf1) { + if (var37 != class185.mousedOverWidgetIf1) { + if (var37 != null) { + ScriptEvent.invalidateWidget(var37); + } + + if (class185.mousedOverWidgetIf1 != null) { + ScriptEvent.invalidateWidget(class185.mousedOverWidgetIf1); + } + } + + if (var38 != GrandExchangeOfferWorldComparator.field31 && field643 == field768) { if (var38 != null) { - GrandExchangeOfferAgeComparator.invalidateWidget(var38); + ScriptEvent.invalidateWidget(var38); } - if (ChatChannel.mousedOverWidgetIf1 != null) { - GrandExchangeOfferAgeComparator.invalidateWidget(ChatChannel.mousedOverWidgetIf1); + if (GrandExchangeOfferWorldComparator.field31 != null) { + ScriptEvent.invalidateWidget(GrandExchangeOfferWorldComparator.field31); } } - if (var32 != GrandExchangeEvents.field39 && field783 == field782) { - if (var32 != null) { - GrandExchangeOfferAgeComparator.invalidateWidget(var32); - } - - if (GrandExchangeEvents.field39 != null) { - GrandExchangeOfferAgeComparator.invalidateWidget(GrandExchangeEvents.field39); - } - } - - if (GrandExchangeEvents.field39 != null) { - if (field782 < field783) { - ++field782; - if (field782 == field783) { - GrandExchangeOfferAgeComparator.invalidateWidget(GrandExchangeEvents.field39); + if (GrandExchangeOfferWorldComparator.field31 != null) { + if (field643 < field768) { + ++field643; + if (field768 == field643) { + ScriptEvent.invalidateWidget(GrandExchangeOfferWorldComparator.field31); } } - } else if (field782 > 0) { - --field782; + } else if (field643 > 0) { + --field643; } if (oculusOrbState == 0) { var3 = class215.localPlayer.x; var4 = class215.localPlayer.y; - if (IgnoreList.oculusOrbFocalPointX - var3 < -500 || IgnoreList.oculusOrbFocalPointX - var3 > 500 || AbstractArchive.oculusOrbFocalPointY - var4 < -500 || AbstractArchive.oculusOrbFocalPointY - var4 > 500) { - IgnoreList.oculusOrbFocalPointX = var3; - AbstractArchive.oculusOrbFocalPointY = var4; + if (class80.oculusOrbFocalPointX - var3 < -500 || class80.oculusOrbFocalPointX - var3 > 500 || class81.oculusOrbFocalPointY - var4 < -500 || class81.oculusOrbFocalPointY - var4 > 500) { + class80.oculusOrbFocalPointX = var3; + class81.oculusOrbFocalPointY = var4; } - if (var3 != IgnoreList.oculusOrbFocalPointX) { - IgnoreList.oculusOrbFocalPointX += (var3 - IgnoreList.oculusOrbFocalPointX) / 16; + if (var3 != class80.oculusOrbFocalPointX) { + class80.oculusOrbFocalPointX += (var3 - class80.oculusOrbFocalPointX) / 16; } - if (var4 != AbstractArchive.oculusOrbFocalPointY) { - AbstractArchive.oculusOrbFocalPointY += (var4 - AbstractArchive.oculusOrbFocalPointY) / 16; + if (var4 != class81.oculusOrbFocalPointY) { + class81.oculusOrbFocalPointY += (var4 - class81.oculusOrbFocalPointY) / 16; } - var5 = IgnoreList.oculusOrbFocalPointX >> 7; - var6 = AbstractArchive.oculusOrbFocalPointY >> 7; - var7 = GraphicsObject.getTileHeight(IgnoreList.oculusOrbFocalPointX, AbstractArchive.oculusOrbFocalPointY, Player.Client_plane); + var5 = class80.oculusOrbFocalPointX >> 7; + var6 = class81.oculusOrbFocalPointY >> 7; + var7 = class195.getTileHeight(class80.oculusOrbFocalPointX, class81.oculusOrbFocalPointY, ClientPacket.Client_plane); var8 = 0; if (var5 > 3 && var6 > 3 && var5 < 100 && var6 < 100) { for (var9 = var5 - 4; var9 <= var5 + 4; ++var9) { for (var10 = var6 - 4; var10 <= var6 + 4; ++var10) { - var11 = Player.Client_plane; + var11 = ClientPacket.Client_plane; if (var11 < 3 && (Tiles.Tiles_renderFlags[1][var9][var10] & 2) == 2) { ++var11; } @@ -4391,97 +3585,97 @@ public final class Client extends GameShell implements Usernamed { var9 = 32768; } - if (var9 > field717) { - field717 += (var9 - field717) / 24; - } else if (var9 < field717) { - field717 += (var9 - field717) / 80; + if (var9 > field728) { + field728 += (var9 - field728) / 24; + } else if (var9 < field728) { + field728 += (var9 - field728) / 80; } - Tiles.field497 = GraphicsObject.getTileHeight(class215.localPlayer.x, class215.localPlayer.y, Player.Client_plane) - camFollowHeight; + GrandExchangeOfferAgeComparator.field78 = class195.getTileHeight(class215.localPlayer.x, class215.localPlayer.y, ClientPacket.Client_plane) - camFollowHeight; } else if (oculusOrbState == 1) { - FontName.method5443(); - short var35 = -1; + JagexCache.method3539(); + short var32 = -1; if (KeyHandler.KeyHandler_pressedKeys[33]) { - var35 = 0; + var32 = 0; } else if (KeyHandler.KeyHandler_pressedKeys[49]) { - var35 = 1024; + var32 = 1024; } if (KeyHandler.KeyHandler_pressedKeys[48]) { - if (var35 == 0) { - var35 = 1792; - } else if (var35 == 1024) { - var35 = 1280; + if (var32 == 0) { + var32 = 1792; + } else if (var32 == 1024) { + var32 = 1280; } else { - var35 = 1536; + var32 = 1536; } } else if (KeyHandler.KeyHandler_pressedKeys[50]) { - if (var35 == 0) { - var35 = 256; - } else if (var35 == 1024) { - var35 = 768; + if (var32 == 0) { + var32 = 256; + } else if (var32 == 1024) { + var32 = 768; } else { - var35 = 512; + var32 = 512; } } - byte var36 = 0; + byte var34 = 0; if (KeyHandler.KeyHandler_pressedKeys[35]) { - var36 = -1; + var34 = -1; } else if (KeyHandler.KeyHandler_pressedKeys[51]) { - var36 = 1; + var34 = 1; } var5 = 0; - if (var35 >= 0 || var36 != 0) { + if (var32 >= 0 || var34 != 0) { var5 = KeyHandler.KeyHandler_pressedKeys[81] ? oculusOrbSlowedSpeed : oculusOrbNormalSpeed; var5 *= 16; - field709 = var35; - field710 = var36; + field720 = var32; + field818 = var34; } - if (field876 < var5) { - field876 += var5 / 8; - if (field876 > var5) { - field876 = var5; + if (field697 < var5) { + field697 += var5 / 8; + if (field697 > var5) { + field697 = var5; } - } else if (field876 > var5) { - field876 = field876 * 9 / 10; + } else if (field697 > var5) { + field697 = field697 * 9 / 10; } - if (field876 > 0) { - var6 = field876 / 16; - if (field709 >= 0) { - var3 = field709 - WorldMapData_1.cameraYaw & 2047; + if (field697 > 0) { + var6 = field697 / 16; + if (field720 >= 0) { + var3 = field720 - Decimator.cameraYaw & 2047; var7 = Rasterizer3D.Rasterizer3D_sine[var3]; var8 = Rasterizer3D.Rasterizer3D_cosine[var3]; - IgnoreList.oculusOrbFocalPointX += var7 * var6 / 65536; - AbstractArchive.oculusOrbFocalPointY += var6 * var8 / 65536; + class80.oculusOrbFocalPointX += var7 * var6 / 65536; + class81.oculusOrbFocalPointY += var6 * var8 / 65536; } - if (field710 != 0) { - Tiles.field497 += var6 * field710; - if (Tiles.field497 > 0) { - Tiles.field497 = 0; + if (field818 != 0) { + GrandExchangeOfferAgeComparator.field78 += var6 * field818; + if (GrandExchangeOfferAgeComparator.field78 > 0) { + GrandExchangeOfferAgeComparator.field78 = 0; } } } else { - field709 = -1; - field710 = -1; + field720 = -1; + field818 = -1; } if (KeyHandler.KeyHandler_pressedKeys[13]) { - LoginPacket.method3767(); + WorldMapLabelSize.method208(); } } - if (MouseHandler.MouseHandler_currentButton == 4 && WorldMapLabelSize.mouseCam) { + if (MouseHandler.MouseHandler_currentButton == 4 && JagexCache.mouseCam) { var3 = MouseHandler.MouseHandler_y - mouseCamClickedY; camAngleDX = var3 * 2; mouseCamClickedY = var3 != -1 && var3 != 1 ? (MouseHandler.MouseHandler_y + mouseCamClickedY) / 2 : MouseHandler.MouseHandler_y; var4 = mouseCamClickedX - MouseHandler.MouseHandler_x; camAngleDY = var4 * 2; - mouseCamClickedX = var4 != -1 && var4 != 1 ? (MouseHandler.MouseHandler_x + mouseCamClickedX) / 2 : MouseHandler.MouseHandler_x; + mouseCamClickedX = var4 != -1 && var4 != 1 ? (mouseCamClickedX + MouseHandler.MouseHandler_x) / 2 : MouseHandler.MouseHandler_x; } else { if (KeyHandler.KeyHandler_pressedKeys[96]) { camAngleDY += (-24 - camAngleDY) / 2; @@ -4514,95 +3708,194 @@ public final class Client extends GameShell implements Usernamed { } if (isCameraLocked) { - Script.method2383(); + var3 = PendingSpawn.field925 * 128 + 64; + var4 = GrandExchangeOfferOwnWorldComparator.field639 * 128 + 64; + var5 = class195.getTileHeight(var3, var4, ClientPacket.Client_plane) - AbstractWorldMapIcon.field299; + if (class30.cameraX < var3) { + class30.cameraX = (var3 - class30.cameraX) * UserComparator3.field1990 / 1000 + class30.cameraX + GameObject.field1933; + if (class30.cameraX > var3) { + class30.cameraX = var3; + } + } + + if (class30.cameraX > var3) { + class30.cameraX -= UserComparator3.field1990 * (class30.cameraX - var3) / 1000 + GameObject.field1933; + if (class30.cameraX < var3) { + class30.cameraX = var3; + } + } + + if (GameObject.cameraY < var5) { + GameObject.cameraY = (var5 - GameObject.cameraY) * UserComparator3.field1990 / 1000 + GameObject.cameraY + GameObject.field1933; + if (GameObject.cameraY > var5) { + GameObject.cameraY = var5; + } + } + + if (GameObject.cameraY > var5) { + GameObject.cameraY -= UserComparator3.field1990 * (GameObject.cameraY - var5) / 1000 + GameObject.field1933; + if (GameObject.cameraY < var5) { + GameObject.cameraY = var5; + } + } + + if (FloorDecoration.cameraZ < var4) { + FloorDecoration.cameraZ = (var4 - FloorDecoration.cameraZ) * UserComparator3.field1990 / 1000 + FloorDecoration.cameraZ + GameObject.field1933; + if (FloorDecoration.cameraZ > var4) { + FloorDecoration.cameraZ = var4; + } + } + + if (FloorDecoration.cameraZ > var4) { + FloorDecoration.cameraZ -= UserComparator3.field1990 * (FloorDecoration.cameraZ - var4) / 1000 + GameObject.field1933; + if (FloorDecoration.cameraZ < var4) { + FloorDecoration.cameraZ = var4; + } + } + + var3 = class49.field417 * 128 + 64; + var4 = SecureRandomFuture.field1242 * 16384 + 64; + var5 = class195.getTileHeight(var3, var4, ClientPacket.Client_plane) - WorldMapCacheName.field308; + var6 = var3 - class30.cameraX; + var7 = var5 - GameObject.cameraY; + var8 = var4 - FloorDecoration.cameraZ; + var9 = (int)Math.sqrt((double)(var6 * var6 + var8 * var8)); + var10 = (int)(Math.atan2((double)var7, (double)var9) * 325.949D) & 2047; + var11 = (int)(Math.atan2((double)var6, (double)var8) * -325.949D) & 2047; + if (var10 < 128) { + var10 = 128; + } + + if (var10 > 383) { + var10 = 383; + } + + if (ItemContainer.cameraPitch < var10) { + ItemContainer.cameraPitch = (var10 - ItemContainer.cameraPitch) * BuddyRankComparator.field1998 / 1000 + ItemContainer.cameraPitch + FriendLoginUpdate.field3643; + if (ItemContainer.cameraPitch > var10) { + ItemContainer.cameraPitch = var10; + } + } + + if (ItemContainer.cameraPitch > var10) { + ItemContainer.cameraPitch -= BuddyRankComparator.field1998 * (ItemContainer.cameraPitch - var10) / 1000 + FriendLoginUpdate.field3643; + if (ItemContainer.cameraPitch < var10) { + ItemContainer.cameraPitch = var10; + } + } + + var12 = var11 - Decimator.cameraYaw; + if (var12 > 1024) { + var12 -= 2048; + } + + if (var12 < -1024) { + var12 += 2048; + } + + if (var12 > 0) { + Decimator.cameraYaw = Decimator.cameraYaw + FriendLoginUpdate.field3643 + var12 * BuddyRankComparator.field1998 / 1000; + Decimator.cameraYaw &= 2047; + } + + if (var12 < 0) { + Decimator.cameraYaw -= -var12 * BuddyRankComparator.field1998 / 1000 + FriendLoginUpdate.field3643; + Decimator.cameraYaw &= 2047; + } + + int var27 = var11 - Decimator.cameraYaw; + if (var27 > 1024) { + var27 -= 2048; + } + + if (var27 < -1024) { + var27 += 2048; + } + + if (var27 < 0 && var12 > 0 || var27 > 0 && var12 < 0) { + Decimator.cameraYaw = var11; + } } for (var3 = 0; var3 < 5; ++var3) { - var10002 = field880[var3]++; + int var10002 = field891[var3]++; } - class1.varcs.tryWrite(); - var3 = UserComparator4.method3502(); - var4 = class1.method26(); - if (var3 > 15000 && var4 > 15000) { + AttackOption.varcs.tryWrite(); + var3 = ++MouseHandler.MouseHandler_idleCycles - 1; + var5 = KeyHandler.KeyHandler_idleCycles; + if (var3 > 15000 && var5 > 15000) { logoutTimer = 250; - MouseHandler.MouseHandler_idleCycles = 14500; - var45 = SoundSystem.getPacketBufferNode(ClientPacket.field2238, packetWriter.isaacCipher); - packetWriter.addNode(var45); + class4.method56(14500); + var26 = ModelData0.getPacketBufferNode(ClientPacket.field2234, packetWriter.isaacCipher); + packetWriter.addNode(var26); } - PacketWriter.friendSystem.processFriendUpdates(); + VertexNormal.friendSystem.processFriendUpdates(); ++packetWriter.pendingWrites; if (packetWriter.pendingWrites > 50) { - var45 = SoundSystem.getPacketBufferNode(ClientPacket.field2245, packetWriter.isaacCipher); - packetWriter.addNode(var45); + var26 = ModelData0.getPacketBufferNode(ClientPacket.field2278, packetWriter.isaacCipher); + packetWriter.addNode(var26); } try { packetWriter.flush(); - } catch (IOException var27) { - AbstractWorldMapIcon.method652(); + } catch (IOException var28) { + Projectile.method2137(); } return; } - var41 = var44.widget; - if (var41.childIndex < 0) { + var46 = var42.widget; + if (var46.childIndex < 0) { break; } - var43 = PacketBufferNode.getWidget(var41.parentId); - } while(var43 == null || var43.children == null || var41.childIndex >= var43.children.length || var41 != var43.children[var41.childIndex]); + var41 = Language.getWidget(var46.parentId); + } while(var41 == null || var41.children == null || var46.childIndex >= var41.children.length || var46 != var41.children[var46.childIndex]); - GrandExchangeOfferAgeComparator.runScriptEvent(var44); + WorldMapLabel.runScriptEvent(var42); } } - var41 = var44.widget; - if (var41.childIndex < 0) { + var46 = var42.widget; + if (var46.childIndex < 0) { break; } - var43 = PacketBufferNode.getWidget(var41.parentId); - } while(var43 == null || var43.children == null || var41.childIndex >= var43.children.length || var41 != var43.children[var41.childIndex]); + var41 = Language.getWidget(var46.parentId); + } while(var41 == null || var41.children == null || var46.childIndex >= var41.children.length || var46 != var41.children[var46.childIndex]); - GrandExchangeOfferAgeComparator.runScriptEvent(var44); + WorldMapLabel.runScriptEvent(var42); } } - var41 = var44.widget; - if (var41.childIndex < 0) { + var46 = var42.widget; + if (var46.childIndex < 0) { break; } - var43 = PacketBufferNode.getWidget(var41.parentId); - } while(var43 == null || var43.children == null || var41.childIndex >= var43.children.length || var41 != var43.children[var41.childIndex]); + var41 = Language.getWidget(var46.parentId); + } while(var41 == null || var41.children == null || var46.childIndex >= var41.children.length || var46 != var41.children[var46.childIndex]); - GrandExchangeOfferAgeComparator.runScriptEvent(var44); + WorldMapLabel.runScriptEvent(var42); } } - - var30 = SoundSystem.getPacketBufferNode(ClientPacket.field2275, packetWriter.isaacCipher); - var30.packetBuffer.writeByte(0); - var3 = var30.packetBuffer.offset; - class32.performReflectionCheck(var30.packetBuffer); - var30.packetBuffer.writeLengthByte(var30.packetBuffer.offset - var3); - packetWriter.addNode(var30); } } } } - @ObfuscatedName("gg") + @ObfuscatedName("gd") @ObfuscatedSignature( - signature = "(S)V", - garbageValue = "-18793" + signature = "(I)V", + garbageValue = "184542015" ) @Export("resizeJS") void resizeJS() { - int var1 = class286.canvasWidth; - int var2 = FloorUnderlayDefinition.canvasHeight; + int var1 = BoundaryObject.canvasWidth; + int var2 = WorldMapCacheName.canvasHeight; if (super.contentWidth < var1) { var1 = super.contentWidth; } @@ -4611,89 +3904,143 @@ public final class Client extends GameShell implements Usernamed { var2 = super.contentHeight; } - if (ScriptEvent.clientPreferences != null) { + if (UserComparator10.clientPreferences != null) { try { - Client var3 = WorldMapID.client; - Object[] var4 = new Object[]{WallDecoration.getWindowedMode()}; - JSObject.getWindow(var3).call("resize", var4); - } catch (Throwable var5) { + class47.method865(AbstractWorldMapIcon.client, "resize", new Object[]{class43.getWindowedMode()}); + } catch (Throwable var4) { } } } - @ObfuscatedName("gq") + @ObfuscatedName("gs") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "100" + signature = "(I)V", + garbageValue = "1364255143" ) @Export("drawLoggedIn") final void drawLoggedIn() { if (rootInterface != -1) { - AbstractWorldMapData.method326(rootInterface); + class160.method3494(rootInterface); } int var1; for (var1 = 0; var1 < rootWidgetCount; ++var1) { - if (field842[var1]) { + if (field847[var1]) { field837[var1] = true; } - field631[var1] = field842[var1]; - field842[var1] = false; + field849[var1] = field847[var1]; + field847[var1] = false; } - field835 = cycle; + field690 = cycle; viewportX = -1; viewportY = -1; - DirectByteArrayCopier.field2476 = null; + FloorOverlayDefinition.field3507 = null; if (rootInterface != -1) { rootWidgetCount = 0; - ScriptEvent.drawWidgets(rootInterface, 0, 0, class286.canvasWidth, FloorUnderlayDefinition.canvasHeight, 0, 0, -1); + class65.drawWidgets(rootInterface, 0, 0, BoundaryObject.canvasWidth, WorldMapCacheName.canvasHeight, 0, 0, -1); } Rasterizer2D.Rasterizer2D_resetClip(); if (showMouseCross) { if (mouseCrossColor == 1) { - TextureProvider.crossSprites[mouseCrossState * 20 / 100].drawTransBgAt(mouseCrossX - 8, mouseCrossY - 8); + KeyHandler.crossSprites[mouseCrossState * 400 / 100].drawTransBgAt(mouseCrossX - 8, mouseCrossY - 8); } if (mouseCrossColor == 2) { - TextureProvider.crossSprites[mouseCrossState * 20 / 100 + 4].drawTransBgAt(mouseCrossX - 8, mouseCrossY - 8); + KeyHandler.crossSprites[mouseCrossState * 400 / 100 + 4].drawTransBgAt(mouseCrossX - 8, mouseCrossY - 8); } } int var2; int var3; + int var4; + int var6; + int var7; + int var8; if (!isMenuOpen) { if (viewportX != -1) { var1 = viewportX; var2 = viewportY; if ((menuOptionsCount >= 2 || isItemSelected != 0 || isSpellSelected) && showMouseOverText) { - var3 = class16.getNewestMenuIdx(); - String var12; + var3 = menuOptionsCount - 1; + String var5; if (isItemSelected == 1 && menuOptionsCount < 2) { - var12 = "Use" + " " + selectedItemName + " " + "->"; + var5 = "Use" + " " + selectedItemName + " " + "->"; } else if (isSpellSelected && menuOptionsCount < 2) { - var12 = selectedSpellActionName + " " + selectedSpellName + " " + "->"; + var5 = selectedSpellActionName + " " + selectedSpellName + " " + "->"; } else { - var12 = class65.method1316(var3); + String var16; + if (var3 < 0) { + var16 = ""; + } else if (menuTargets[var3].length() > 0) { + var16 = menuActions[var3] + " " + menuTargets[var3]; + } else { + var16 = menuActions[var3]; + } + + var5 = var16; } if (menuOptionsCount > 2) { - var12 = var12 + AbstractArchive.colorStartTag(16777215) + " " + '/' + " " + (menuOptionsCount - 2) + " more options"; + var5 = var5 + class222.colorStartTag(16777215) + " " + '/' + " " + (menuOptionsCount - 2) + " more options"; } - class43.fontBold12.drawRandomAlphaAndSpacing(var12, var1 + 4, var2 + 15, 16777215, 0, cycle / 1000); + JagexCache.fontBold12.drawRandomAlphaAndSpacing(var5, var1 + 4, var2 + 15, 16777215, 0, cycle / 1000); } } } else { - WorldMapSection2.method383(); + var1 = HealthBar.menuX; + var2 = class191.menuY; + var3 = TileItemPile.menuWidth; + var4 = SoundSystem.menuHeight; + int var13 = 6116423; + Rasterizer2D.Rasterizer2D_fillRectangle(var1, var2, var3, var4, var13); + Rasterizer2D.Rasterizer2D_fillRectangle(var1 + 1, var2 + 1, var3 - 2, 16, 0); + Rasterizer2D.Rasterizer2D_drawRectangle(var1 + 1, var2 + 18, var3 - 2, var4 - 19, 0); + JagexCache.fontBold12.draw("Choose Option", var1 + 3, var2 + 14, var13, -1); + var6 = MouseHandler.MouseHandler_x; + var7 = MouseHandler.MouseHandler_y; + + int var9; + int var10; + for (var8 = 0; var8 < menuOptionsCount; ++var8) { + var9 = (menuOptionsCount - 1 - var8) * 15 + var2 + 31; + var10 = 16777215; + if (var6 > var1 && var6 < var3 + var1 && var7 > var9 - 13 && var7 < var9 + 3) { + var10 = 16776960; + } + + Font var11 = JagexCache.fontBold12; + String var12; + if (var8 < 0) { + var12 = ""; + } else if (menuTargets[var8].length() > 0) { + var12 = menuActions[var8] + " " + menuTargets[var8]; + } else { + var12 = menuActions[var8]; + } + + var11.draw(var12, var1 + 3, var9, var10, 0); + } + + var8 = HealthBar.menuX; + var9 = class191.menuY; + var10 = TileItemPile.menuWidth; + int var14 = SoundSystem.menuHeight; + + for (int var15 = 0; var15 < rootWidgetCount; ++var15) { + if (rootWidgetXs[var15] + rootWidgetWidths[var15] > var8 && rootWidgetXs[var15] < var10 + var8 && rootWidgetYs[var15] + rootWidgetHeights[var15] > var9 && rootWidgetYs[var15] < var14 + var9) { + field837[var15] = true; + } + } } if (gameDrawingMode == 3) { for (var1 = 0; var1 < rootWidgetCount; ++var1) { - if (field631[var1]) { + if (field849[var1]) { Rasterizer2D.Rasterizer2D_fillRectangleAlpha(rootWidgetXs[var1], rootWidgetYs[var1], rootWidgetWidths[var1], rootWidgetHeights[var1], 16711935, 128); } else if (field837[var1]) { Rasterizer2D.Rasterizer2D_fillRectangleAlpha(rootWidgetXs[var1], rootWidgetYs[var1], rootWidgetWidths[var1], rootWidgetHeights[var1], 16711680, 128); @@ -4701,125 +4048,125 @@ public final class Client extends GameShell implements Usernamed { } } - var1 = Player.Client_plane; + var1 = ClientPacket.Client_plane; var2 = class215.localPlayer.x; var3 = class215.localPlayer.y; - int var4 = field693; + var4 = field704; - for (ObjectSound var5 = (ObjectSound)ObjectSound.objectSounds.last(); var5 != null; var5 = (ObjectSound)ObjectSound.objectSounds.previous()) { - if (var5.soundEffectId != -1 || var5.soundEffectIds != null) { - int var6 = 0; - if (var2 > var5.field1060 * 128) { - var6 += var2 - var5.field1060 * 128; - } else if (var2 < var5.x * 16384) { - var6 += var5.x * 16384 - var2; + for (ObjectSound var20 = (ObjectSound)ObjectSound.objectSounds.last(); var20 != null; var20 = (ObjectSound)ObjectSound.objectSounds.previous()) { + if (var20.soundEffectId != -1 || var20.soundEffectIds != null) { + var6 = 0; + if (var2 > var20.field1074 * 16384) { + var6 += var2 - var20.field1074 * 16384; + } else if (var2 < var20.x * 16384) { + var6 += var20.x * 16384 - var2; } - if (var3 > var5.field1053 * 128) { - var6 += var3 - var5.field1053 * 128; - } else if (var3 < var5.y * 128) { - var6 += var5.y * 128 - var3; + if (var3 > var20.field1071 * 16384) { + var6 += var3 - var20.field1071 * 16384; + } else if (var3 < var20.y * 16384) { + var6 += var20.y * 16384 - var3; } - if (var6 - 64 <= var5.field1052 && areaSoundEffectVolume != 0 && var1 == var5.plane) { + if (var6 - 64 <= var20.field1072 && areaSoundEffectVolume != 0 && var1 == var20.plane) { var6 -= 64; if (var6 < 0) { var6 = 0; } - int var7 = (var5.field1052 - var6) * areaSoundEffectVolume / var5.field1052; + var7 = (var20.field1072 - var6) * areaSoundEffectVolume / var20.field1072; Object var10000; - if (var5.stream1 == null) { - if (var5.soundEffectId >= 0) { + if (var20.stream1 == null) { + if (var20.soundEffectId >= 0) { var10000 = null; - SoundEffect var8 = SoundEffect.readSoundEffect(NetFileRequest.archive4, var5.soundEffectId, 0); - if (var8 != null) { - RawSound var9 = var8.toRawSound().resample(AbstractWorldMapIcon.decimator); - RawPcmStream var10 = RawPcmStream.createRawPcmStream(var9, 100, var7); - var10.setNumLoops(-1); - FloorUnderlayDefinition.pcmStreamMixer.addSubStream(var10); - var5.stream1 = var10; + SoundEffect var17 = SoundEffect.readSoundEffect(SpriteMask.archive4, var20.soundEffectId, 0); + if (var17 != null) { + RawSound var18 = var17.toRawSound().resample(LoginScreenAnimation.decimator); + RawPcmStream var19 = RawPcmStream.createRawPcmStream(var18, 100, var7); + var19.setNumLoops(-1); + ClientPacket.pcmStreamMixer.addSubStream(var19); + var20.stream1 = var19; } } } else { - var5.stream1.method2702(var7); + var20.stream1.method2572(var7); } - if (var5.stream2 == null) { - if (var5.soundEffectIds != null && (var5.field1054 -= var4) <= 0) { - int var13 = (int)(Math.random() * (double)var5.soundEffectIds.length); + if (var20.stream2 == null) { + if (var20.soundEffectIds != null && (var20.field1078 -= var4) <= 0) { + var8 = (int)(Math.random() * (double)var20.soundEffectIds.length); var10000 = null; - SoundEffect var14 = SoundEffect.readSoundEffect(NetFileRequest.archive4, var5.soundEffectIds[var13], 0); - if (var14 != null) { - RawSound var15 = var14.toRawSound().resample(AbstractWorldMapIcon.decimator); - RawPcmStream var11 = RawPcmStream.createRawPcmStream(var15, 100, var7); - var11.setNumLoops(0); - FloorUnderlayDefinition.pcmStreamMixer.addSubStream(var11); - var5.stream2 = var11; - var5.field1054 = var5.field1057 + (int)(Math.random() * (double)(var5.field1058 - var5.field1057)); + SoundEffect var22 = SoundEffect.readSoundEffect(SpriteMask.archive4, var20.soundEffectIds[var8], 0); + if (var22 != null) { + RawSound var23 = var22.toRawSound().resample(LoginScreenAnimation.decimator); + RawPcmStream var21 = RawPcmStream.createRawPcmStream(var23, 100, var7); + var21.setNumLoops(0); + ClientPacket.pcmStreamMixer.addSubStream(var21); + var20.stream2 = var21; + var20.field1078 = var20.field1075 + (int)(Math.random() * (double)(var20.field1076 - var20.field1075)); } } } else { - var5.stream2.method2702(var7); - if (!var5.stream2.hasNext()) { - var5.stream2 = null; + var20.stream2.method2572(var7); + if (!var20.stream2.hasNext()) { + var20.stream2 = null; } } } else { - if (var5.stream1 != null) { - FloorUnderlayDefinition.pcmStreamMixer.removeSubStream(var5.stream1); - var5.stream1 = null; + if (var20.stream1 != null) { + ClientPacket.pcmStreamMixer.removeSubStream(var20.stream1); + var20.stream1 = null; } - if (var5.stream2 != null) { - FloorUnderlayDefinition.pcmStreamMixer.removeSubStream(var5.stream2); - var5.stream2 = null; + if (var20.stream2 != null) { + ClientPacket.pcmStreamMixer.removeSubStream(var20.stream2); + var20.stream2 = null; } } } } - field693 = 0; + field704 = 0; } - @ObfuscatedName("hm") + @ObfuscatedName("hc") @ObfuscatedSignature( - signature = "(Lcp;I)Z", - garbageValue = "823373866" + signature = "(Lcc;I)Z", + garbageValue = "2024286178" ) - final boolean method1720(PacketWriter var1) { + final boolean method1316(PacketWriter var1) { AbstractSocket var2 = var1.getSocket(); PacketBuffer var3 = var1.packetBuffer; if (var2 == null) { return false; } else { int var6; - String var17; + String var19; try { int var5; if (var1.serverPacket == null) { - if (var1.field1287) { + if (var1.field1307) { if (!var2.isAvailable(1)) { return false; } var2.read(var1.packetBuffer.array, 0, 1); - var1.field1291 = 0; - var1.field1287 = false; + var1.field1305 = 0; + var1.field1307 = false; } var3.offset = 0; - if (var3.method5586()) { + if (var3.method5581()) { if (!var2.isAvailable(1)) { return false; } var2.read(var1.packetBuffer.array, 1, 1); - var1.field1291 = 0; + var1.field1305 = 0; } - var1.field1287 = true; - ServerPacket[] var4 = SecureRandomCallable.ServerPacket_values(); + var1.field1307 = true; + ServerPacket[] var4 = WorldMapLabelSize.ServerPacket_values(); var5 = var3.readSmartByteShortIsaac(); if (var5 < 0 || var5 >= var4.length) { throw new IOException(var5 + " " + var3.offset); @@ -4854,81 +4201,1076 @@ public final class Client extends GameShell implements Usernamed { var3.offset = 0; var2.read(var3.array, 0, var1.serverPacketLength); - var1.field1291 = 0; - timer.method5115(); - var1.field1292 = var1.field1286; - var1.field1286 = var1.field1290; - var1.field1290 = var1.serverPacket; - if (ServerPacket.field2126 == var1.serverPacket) { - rebootTimer = var3.method5646() * 30; - field834 = cycleCntr; + var1.field1305 = 0; + timer.method5071(); + var1.field1312 = var1.field1311; + var1.field1311 = var1.field1299; + var1.field1299 = var1.serverPacket; + if (ServerPacket.field2211 == var1.serverPacket) { + HealthBarUpdate.method1779(class185.field2331); + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2197 == var1.serverPacket) { + HealthBarUpdate.method1779(class185.field2337); var1.serverPacket = null; return true; } int var16; - if (ServerPacket.field2129 == var1.serverPacket) { - var16 = var3.readUnsignedByte(); - if (var3.readUnsignedByte() == 0) { - grandExchangeOffers[var16] = new GrandExchangeOffer(); - var3.offset += 18; - } else { - --var3.offset; - grandExchangeOffers[var16] = new GrandExchangeOffer(var3, false); + if (ServerPacket.field2176 == var1.serverPacket) { + var16 = var3.readUnsignedShort(); + var5 = var3.readInt(); + Varps.Varps_temp[var16] = var5; + if (Varps.Varps_main[var16] != var5) { + Varps.Varps_main[var16] = var5; } - field826 = cycleCntr; + ObjectDefinition.changeGameOptions(var16); + field828[++field829 - 1 & 31] = var16; + var1.serverPacket = null; + return true; + } + + InterfaceParent var43; + if (ServerPacket.field2168 == var1.serverPacket) { + var16 = var3.readUnsignedShort(); + var5 = var3.readUnsignedByte(); + var6 = var3.method5649(); + var43 = (InterfaceParent)interfaceParents.get((long)var6); + if (var43 != null) { + class43.closeInterface(var43, var16 != var43.group); + } + + Friend.method5303(var6, var16, var5); + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2146 == var1.serverPacket) { + UrlRequest.updatePlayers(var3, var1.serverPacketLength); + ChatChannel.method2274(); var1.serverPacket = null; return true; } - int var7; int var8; - long var9; - if (ServerPacket.field2176 == var1.serverPacket) { - var16 = var3.method5648(); - if (var16 == 65535) { - var16 = -1; + int var9; + Widget var17; + int var18; + if (ServerPacket.field2203 == var1.serverPacket) { + var16 = var3.readInt(); + var5 = var3.readUnsignedShort(); + if (var16 < -70000) { + var5 += 32768; } - var5 = var3.method5796(); - var6 = var3.readUnsignedShort(); - if (var6 == 65535) { - var6 = -1; + if (var16 >= 0) { + var17 = Language.getWidget(var16); + } else { + var17 = null; } - var7 = var3.method5656(); - - for (var8 = var16; var8 <= var6; ++var8) { - var9 = ((long)var7 << 32) + (long)var8; - Node var44 = widgetClickMasks.get(var9); - if (var44 != null) { - var44.remove(); + for (; var3.offset < var1.serverPacketLength; WorldMapDecorationType.itemContainerSetItem(var5, var18, var8 - 1, var9)) { + var18 = var3.readUShortSmart(); + var8 = var3.readUnsignedShort(); + var9 = 0; + if (var8 != 0) { + var9 = var3.readUnsignedByte(); + if (var9 == 255) { + var9 = var3.readInt(); + } } - widgetClickMasks.put(new IntegerNode(var5), var9); + if (var17 != null && var18 >= 0 && var18 < var17.itemIds.length) { + var17.itemIds[var18] = var8; + var17.itemQuantities[var18] = var9; + } + } + + if (var17 != null) { + ScriptEvent.invalidateWidget(var17); + } + + class312.method6006(); + changedItemContainers[++field898 - 1 & 31] = var5 & 32767; + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2155 == var1.serverPacket) { + WorldMapRegion.loadRegions(false, var1.packetBuffer); + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2145 == var1.serverPacket) { + destinationX = var3.readUnsignedByte(); + if (destinationX == 255) { + destinationX = 0; + } + + destinationY = var3.readUnsignedByte(); + if (destinationY == 255) { + destinationY = 0; } var1.serverPacket = null; return true; } - boolean var46; - if (ServerPacket.field2122 == var1.serverPacket) { - var46 = var3.readUnsignedByte() == 1; - if (var46) { - Message.field584 = PlayerAppearance.currentTimeMillis() - var3.readLong(); - WorldMapData_1.grandExchangeEvents = new GrandExchangeEvents(var3, true); - } else { - WorldMapData_1.grandExchangeEvents = null; + if (ServerPacket.field2164 == var1.serverPacket) { + var3.offset += 28; + if (var3.checkCrc()) { + class32.method570(var3, var3.offset - 28); } - field652 = cycleCntr; + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2185 == var1.serverPacket) { + class312.method6006(); + var16 = var3.method5689(); + var5 = var3.readInt(); + var6 = var3.method5631(); + experience[var16] = var5; + currentLevels[var16] = var6; + levels[var16] = 1; + + for (var18 = 0; var18 < 98; ++var18) { + if (var5 >= Skills.Skills_experienceTable[var18]) { + levels[var16] = var18 + 2; + } + } + + changedSkills[++changedSkillsCount - 1 & 31] = var16; + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2149 == var1.serverPacket) { + if (rootInterface != -1) { + GrandExchangeEvents.runIntfCloseListeners(rootInterface, 0); + } + + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2132 == var1.serverPacket) { + var16 = var3.readUnsignedByte(); + class192.method3732(var16); var1.serverPacket = null; return true; } if (ServerPacket.field2140 == var1.serverPacket) { + var16 = var3.method5588(); + var19 = var3.readStringCp1252NullTerminated(); + var17 = Language.getWidget(var16); + if (!var19.equals(var17.text)) { + var17.text = var19; + ScriptEvent.invalidateWidget(var17); + } + + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2183 == var1.serverPacket) { + class40.field343 = var3.method5631(); + class227.field3092 = var3.method5631(); + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2133 == var1.serverPacket) { + var16 = var3.method5728(); + var19 = var3.readStringCp1252NullTerminated(); + var6 = var3.method5689(); + if (var6 >= 1 && var6 <= 8) { + if (var19.equalsIgnoreCase("null")) { + var19 = null; + } + + playerMenuActions[var6 - 1] = var19; + playerOptionsPriorities[var6 - 1] = var16 == 0; + } + + var1.serverPacket = null; + return true; + } + + Widget var52; + if (ServerPacket.field2137 == var1.serverPacket) { + var16 = var3.readInt(); + var5 = var3.method5588(); + InterfaceParent var56 = (InterfaceParent)interfaceParents.get((long)var16); + var43 = (InterfaceParent)interfaceParents.get((long)var5); + if (var43 != null) { + class43.closeInterface(var43, var56 == null || var56.group != var43.group); + } + + if (var56 != null) { + var56.remove(); + interfaceParents.put(var56, (long)var5); + } + + var52 = Language.getWidget(var16); + if (var52 != null) { + ScriptEvent.invalidateWidget(var52); + } + + var52 = Language.getWidget(var5); + if (var52 != null) { + ScriptEvent.invalidateWidget(var52); + MilliClock.revalidateWidgetScroll(FloorDecoration.Widget_interfaceComponents[var52.id >>> 16], var52, true); + } + + if (rootInterface != -1) { + GrandExchangeEvents.runIntfCloseListeners(rootInterface, 1); + } + + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2207 == var1.serverPacket) { + for (var16 = 0; var16 < Varps.Varps_main.length; ++var16) { + if (Varps.Varps_main[var16] != Varps.Varps_temp[var16]) { + Varps.Varps_main[var16] = Varps.Varps_temp[var16]; + ObjectDefinition.changeGameOptions(var16); + field828[++field829 - 1 & 31] = var16; + } + } + + var1.serverPacket = null; + return true; + } + + long var21; + long var23; + String var39; + if (ServerPacket.field2130 == var1.serverPacket) { + var39 = var3.readStringCp1252NullTerminated(); + var21 = (long)var3.readUnsignedShort(); + var23 = (long)var3.readMedium(); + PlayerType var25 = (PlayerType)CollisionMap.findEnumerated(class2.PlayerType_values(), var3.readUnsignedByte()); + long var10 = (var21 << 32) + var23; + boolean var12 = false; + + for (int var13 = 0; var13 < 100; ++var13) { + if (var10 == field861[var13]) { + var12 = true; + break; + } + } + + if (VertexNormal.friendSystem.isIgnored(new Username(var39, WorldMapLabelSize.loginType))) { + var12 = true; + } + + if (!var12 && field756 == 0) { + field861[field855] = var10; + field855 = (field855 + 1) % 100; + String var26 = AbstractFont.escapeBrackets(class191.method3720(GrandExchangeOfferUnitPriceComparator.method142(var3))); + byte var46; + if (var25.isPrivileged) { + var46 = 7; + } else { + var46 = 3; + } + + if (var25.modIcon != -1) { + GrandExchangeOfferAgeComparator.addGameMessage(var46, method1749(var25.modIcon) + var39, var26); + } else { + GrandExchangeOfferAgeComparator.addGameMessage(var46, var39, var26); + } + } + + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2194 == var1.serverPacket) { + var16 = var3.readInt(); + var5 = var3.method5719(); + var17 = Language.getWidget(var16); + if (var17.modelType != 2 || var5 != var17.modelId) { + var17.modelType = 2; + var17.modelId = var5; + ScriptEvent.invalidateWidget(var17); + } + + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2199 == var1.serverPacket) { + for (var16 = 0; var16 < players.length; ++var16) { + if (players[var16] != null) { + players[var16].sequence = -1; + } + } + + for (var16 = 0; var16 < npcs.length; ++var16) { + if (npcs[var16] != null) { + npcs[var16].sequence = -1; + } + } + + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2128 == var1.serverPacket) { + var16 = var3.readUnsignedShort(); + var5 = var3.readInt(); + var17 = Language.getWidget(var5); + if (var17 != null && var17.type == 0) { + if (var16 > var17.scrollHeight - var17.height) { + var16 = var17.scrollHeight - var17.height; + } + + if (var16 < 0) { + var16 = 0; + } + + if (var16 != var17.scrollY) { + var17.scrollY = var16; + ScriptEvent.invalidateWidget(var17); + } + } + + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2182 == var1.serverPacket) { + VertexNormal.friendSystem.readUpdate(var3, var1.serverPacketLength); + field833 = cycleCntr; + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2181 == var1.serverPacket) { + HealthBarUpdate.method1779(class185.field2333); + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2212 == var1.serverPacket) { + var16 = var3.readUnsignedByte(); + var5 = var3.readUnsignedByte(); + var6 = var3.readUnsignedByte(); + var18 = var3.readUnsignedByte(); + field835[var16] = true; + field736[var16] = var5; + field901[var16] = var6; + field890[var16] = var18; + field891[var16] = 0; + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2141 == var1.serverPacket) { + isCameraLocked = true; + PendingSpawn.field925 = var3.readUnsignedByte() * 16384; + GrandExchangeOfferOwnWorldComparator.field639 = var3.readUnsignedByte() * 16384; + AbstractWorldMapIcon.field299 = var3.readUnsignedShort(); + GameObject.field1933 = var3.readUnsignedByte(); + UserComparator3.field1990 = var3.readUnsignedByte(); + if (UserComparator3.field1990 >= 100) { + class30.cameraX = PendingSpawn.field925 * 128 + 64; + FloorDecoration.cameraZ = GrandExchangeOfferOwnWorldComparator.field639 * 128 + 64; + GameObject.cameraY = class195.getTileHeight(class30.cameraX, FloorDecoration.cameraZ, ClientPacket.Client_plane) - AbstractWorldMapIcon.field299; + } + + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2153 == var1.serverPacket) { + var39 = var3.readStringCp1252NullTerminated(); + Object[] var59 = new Object[var39.length() + 1]; + + for (var6 = var39.length() - 1; var6 >= 0; --var6) { + if (var39.charAt(var6) == 's') { + var59[var6 + 1] = var3.readStringCp1252NullTerminated(); + } else { + var59[var6 + 1] = new Integer(var3.readInt()); + } + } + + var59[0] = new Integer(var3.readInt()); + ScriptEvent var51 = new ScriptEvent(); + var51.args = var59; + WorldMapLabel.runScriptEvent(var51); + var1.serverPacket = null; + return true; + } + + long var27; + if (ServerPacket.field2136 == var1.serverPacket) { + var16 = var3.method5641(); + if (var16 == 65535) { + var16 = -1; + } + + var5 = var3.readInt(); + var6 = var3.method5650(); + var18 = var3.method5641(); + if (var18 == 65535) { + var18 = -1; + } + + for (var8 = var18; var8 <= var16; ++var8) { + var27 = ((long)var6 << 32) + (long)var8; + Node var44 = widgetClickMasks.get(var27); + if (var44 != null) { + var44.remove(); + } + + widgetClickMasks.put(new IntegerNode(var5), var27); + } + + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2169 == var1.serverPacket) { + var16 = var3.readUnsignedByte(); + DevicePcmPlayerProvider.forceDisconnect(var16); + var1.serverPacket = null; + return false; + } + + long var29; + if (ServerPacket.field2188 == var1.serverPacket) { + var39 = var3.readStringCp1252NullTerminated(); + var21 = var3.readLong(); + var23 = (long)var3.readUnsignedShort(); + var27 = (long)var3.readMedium(); + PlayerType var11 = (PlayerType)CollisionMap.findEnumerated(class2.PlayerType_values(), var3.readUnsignedByte()); + var29 = var27 + (var23 << 32); + boolean var14 = false; + + for (int var15 = 0; var15 < 100; ++var15) { + if (var29 == field861[var15]) { + var14 = true; + break; + } + } + + if (var11.isUser && VertexNormal.friendSystem.isIgnored(new Username(var39, WorldMapLabelSize.loginType))) { + var14 = true; + } + + if (!var14 && field756 == 0) { + field861[field855] = var29; + field855 = (field855 + 1) % 100; + String var31 = AbstractFont.escapeBrackets(class191.method3720(GrandExchangeOfferUnitPriceComparator.method142(var3))); + if (var11.modIcon != -1) { + SecureRandomCallable.addChatMessage(9, method1749(var11.modIcon) + var39, var31, GrandExchangeOffer.base37DecodeLong(var21)); + } else { + SecureRandomCallable.addChatMessage(9, var39, var31, GrandExchangeOffer.base37DecodeLong(var21)); + } + } + + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2190 == var1.serverPacket) { + var16 = var3.method5650(); + var5 = var3.method5643(); + var17 = Language.getWidget(var16); + if (var5 != var17.sequenceId || var5 == -1) { + var17.sequenceId = var5; + var17.modelFrame = 0; + var17.modelFrameCycle = 0; + ScriptEvent.invalidateWidget(var17); + } + + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2150 == var1.serverPacket) { + var16 = var3.method5640(); + byte var45 = var3.method5637(); + Varps.Varps_temp[var16] = var45; + if (Varps.Varps_main[var16] != var45) { + Varps.Varps_main[var16] = var45; + } + + ObjectDefinition.changeGameOptions(var16); + field828[++field829 - 1 & 31] = var16; + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2205 == var1.serverPacket) { + VertexNormal.friendSystem.method1867(); + field833 = cycleCntr; + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2201 == var1.serverPacket) { + var16 = var3.method5719(); + var5 = var3.method5588(); + var17 = Language.getWidget(var5); + if (var17.modelType != 1 || var16 != var17.modelId) { + var17.modelType = 1; + var17.modelId = var16; + ScriptEvent.invalidateWidget(var17); + } + + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2174 == var1.serverPacket) { + var16 = var3.readUnsignedShort(); + rootInterface = var16; + this.resizeRoot(false); + WorldMapArea.Widget_resetModelFrames(var16); + UserComparator9.runWidgetOnLoadListener(rootInterface); + + for (var5 = 0; var5 < 100; ++var5) { + field847[var5] = true; + } + + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2154 == var1.serverPacket) { + class312.method6006(); + weight = var3.readShort(); + field834 = cycleCntr; + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2134 == var1.serverPacket) { + class312.method6006(); + runEnergy = var3.readUnsignedByte(); + field834 = cycleCntr; + var1.serverPacket = null; + return true; + } + + int var33; + if (ServerPacket.field2186 == var1.serverPacket) { + var16 = var3.offset + var1.serverPacketLength; + var5 = var3.readUnsignedShort(); + var6 = var3.readUnsignedShort(); + if (var5 != rootInterface) { + rootInterface = var5; + this.resizeRoot(false); + WorldMapArea.Widget_resetModelFrames(rootInterface); + UserComparator9.runWidgetOnLoadListener(rootInterface); + + for (var18 = 0; var18 < 100; ++var18) { + field847[var18] = true; + } + } + + InterfaceParent var60; + for (; var6-- > 0; var60.field561 = true) { + var18 = var3.readInt(); + var8 = var3.readUnsignedShort(); + var9 = var3.readUnsignedByte(); + var60 = (InterfaceParent)interfaceParents.get((long)var18); + if (var60 != null && var8 != var60.group) { + class43.closeInterface(var60, true); + var60 = null; + } + + if (var60 == null) { + var60 = Friend.method5303(var18, var8, var9); + } + } + + for (var43 = (InterfaceParent)interfaceParents.first(); var43 != null; var43 = (InterfaceParent)interfaceParents.next()) { + if (var43.field561) { + var43.field561 = false; + } else { + class43.closeInterface(var43, true); + } + } + + widgetClickMasks = new NodeHashTable(512); + + while (var3.offset < var16) { + var18 = var3.readInt(); + var8 = var3.readUnsignedShort(); + var9 = var3.readUnsignedShort(); + var33 = var3.readInt(); + + for (int var34 = var8; var34 <= var9; ++var34) { + var29 = (long)var34 + ((long)var18 << 32); + widgetClickMasks.put(new IntegerNode(var33), var29); + } + } + + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2175 == var1.serverPacket) { + isCameraLocked = false; + + for (var16 = 0; var16 < 5; ++var16) { + field835[var16] = false; + } + + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2167 == var1.serverPacket) { + HealthBarUpdate.method1779(class185.field2340); + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2156 == var1.serverPacket) { + class227.field3092 = var3.method5631(); + class40.field343 = var3.method5689(); + + while (var3.offset < var1.serverPacketLength) { + var16 = var3.readUnsignedByte(); + class185 var58 = FriendSystem.method1927()[var16]; + HealthBarUpdate.method1779(var58); + } + + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2210 == var1.serverPacket) { + var16 = var3.readInt(); + InterfaceParent var57 = (InterfaceParent)interfaceParents.get((long)var16); + if (var57 != null) { + class43.closeInterface(var57, true); + } + + if (meslayerContinueWidget != null) { + ScriptEvent.invalidateWidget(meslayerContinueWidget); + meslayerContinueWidget = null; + } + + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2166 == var1.serverPacket) { + HealthBarUpdate.method1779(class185.field2332); + var1.serverPacket = null; + return true; + } + + Widget var7; + if (ServerPacket.field2163 == var1.serverPacket) { + var16 = var3.readUnsignedShort(); + var5 = var3.method5650(); + var6 = var3.method5719(); + var7 = Language.getWidget(var5); + var7.field2633 = var6 + (var16 << 16); + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2195 == var1.serverPacket) { + var16 = var3.readInt(); + var5 = var3.method5641(); + if (var5 == 65535) { + var5 = -1; + } + + var6 = var3.method5650(); + var7 = Language.getWidget(var16); + ItemDefinition var54; + if (!var7.isIf3) { + if (var5 == -1) { + var7.modelType = 0; + var1.serverPacket = null; + return true; + } + + var54 = Interpreter.ItemDefinition_get(var5); + var7.modelType = 4; + var7.modelId = var5; + var7.modelAngleX = var54.xan2d; + var7.modelAngleY = var54.yan2d; + var7.modelZoom = var54.zoom2d * 100 / var6; + ScriptEvent.invalidateWidget(var7); + } else { + var7.itemId = var5; + var7.itemQuantity = var6; + var54 = Interpreter.ItemDefinition_get(var5); + var7.modelAngleX = var54.xan2d; + var7.modelAngleY = var54.yan2d; + var7.modelAngleZ = var54.zan2d; + var7.modelOffsetX = var54.offsetX2d; + var7.modelOffsetY = var54.offsetY2d; + var7.modelZoom = var54.zoom2d; + if (var54.isStackable == 1) { + var7.itemQuantityMode = 1; + } else { + var7.itemQuantityMode = 2; + } + + if (var7.field2711 > 0) { + var7.modelZoom = var7.modelZoom * 32 / var7.field2711; + } else if (var7.rawWidth > 0) { + var7.modelZoom = var7.modelZoom * 32 / var7.rawWidth; + } + + ScriptEvent.invalidateWidget(var7); + } + + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2160 == var1.serverPacket) { + var16 = var3.readInt(); + var5 = var3.readUnsignedShort(); + if (var16 < -70000) { + var5 += 32768; + } + + if (var16 >= 0) { + var17 = Language.getWidget(var16); + } else { + var17 = null; + } + + if (var17 != null) { + for (var18 = 0; var18 < var17.itemIds.length; ++var18) { + var17.itemIds[var18] = 0; + var17.itemQuantities[var18] = 0; + } + } + + WorldMapAreaData.clearItemContainer(var5); + var18 = var3.readUnsignedShort(); + + for (var8 = 0; var8 < var18; ++var8) { + var9 = var3.method5728(); + if (var9 == 255) { + var9 = var3.readInt(); + } + + var33 = var3.method5719(); + if (var17 != null && var8 < var17.itemIds.length) { + var17.itemIds[var8] = var33; + var17.itemQuantities[var8] = var9; + } + + WorldMapDecorationType.itemContainerSetItem(var5, var8, var33 - 1, var9); + } + + if (var17 != null) { + ScriptEvent.invalidateWidget(var17); + } + + class312.method6006(); + changedItemContainers[++field898 - 1 & 31] = var5 & 32767; + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2144 == var1.serverPacket) { + isCameraLocked = true; + class49.field417 = var3.readUnsignedByte() * 16384; + SecureRandomFuture.field1242 = var3.readUnsignedByte() * 128; + WorldMapCacheName.field308 = var3.readUnsignedShort(); + FriendLoginUpdate.field3643 = var3.readUnsignedByte(); + BuddyRankComparator.field1998 = var3.readUnsignedByte(); + if (BuddyRankComparator.field1998 >= 100) { + var16 = class49.field417 * 128 + 64; + var5 = SecureRandomFuture.field1242 * 16384 + 64; + var6 = class195.getTileHeight(var16, var5, ClientPacket.Client_plane) - WorldMapCacheName.field308; + var18 = var16 - class30.cameraX; + var8 = var6 - GameObject.cameraY; + var9 = var5 - FloorDecoration.cameraZ; + var33 = (int)Math.sqrt((double)(var18 * var18 + var9 * var9)); + ItemContainer.cameraPitch = (int)(Math.atan2((double)var8, (double)var33) * 325.949D) & 2047; + Decimator.cameraYaw = (int)(Math.atan2((double)var18, (double)var9) * -325.949D) & 2047; + if (ItemContainer.cameraPitch < 128) { + ItemContainer.cameraPitch = 128; + } + + if (ItemContainer.cameraPitch > 383) { + ItemContainer.cameraPitch = 383; + } + } + + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2138 == var1.serverPacket) { + WorldMapRegion.loadRegions(true, var1.packetBuffer); + var1.serverPacket = null; + return true; + } + + String var48; + if (ServerPacket.field2193 == var1.serverPacket) { + byte[] var40 = new byte[var1.serverPacketLength]; + var3.method5551(var40, 0, var40.length); + Buffer var55 = new Buffer(var40); + var48 = var55.readStringCp1252NullTerminated(); + WorldMapAreaData.openURL(var48, true, false); + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2206 == var1.serverPacket) { + var39 = var3.readStringCp1252NullTerminated(); + var19 = AbstractFont.escapeBrackets(class191.method3720(GrandExchangeOfferUnitPriceComparator.method142(var3))); + GrandExchangeOfferAgeComparator.addGameMessage(6, var39, var19); + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2161 == var1.serverPacket) { + HealthBarUpdate.method1779(class185.field2334); + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2172 == var1.serverPacket) { + var16 = var3.readInt(); + var5 = var3.readInt(); + var6 = Projectile.getGcDuration(); + PacketBufferNode var41 = ModelData0.getPacketBufferNode(ClientPacket.field2228, packetWriter.isaacCipher); + var41.packetBuffer.method5647(var16); + var41.packetBuffer.method5811(var5); + var41.packetBuffer.writeIntME(GameShell.fps); + var41.packetBuffer.method5598(var6); + packetWriter.addNode(var41); + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2147 == var1.serverPacket) { + World var38 = new World(); + var38.host = var3.readStringCp1252NullTerminated(); + var38.id = var3.readUnsignedShort(); + var5 = var3.readInt(); + var38.properties = var5; + class81.updateGameState(45); + var2.close(); + var2 = null; + GrandExchangeOfferAgeComparator.changeWorld(var38); + var1.serverPacket = null; + return false; + } + + if (ServerPacket.field2158 == var1.serverPacket) { + var16 = var3.method5641(); + var5 = var3.method5650(); + var6 = var3.method5719(); + var18 = var3.readUnsignedShort(); + var52 = Language.getWidget(var5); + if (var6 != var52.modelAngleX || var16 != var52.modelAngleY || var18 != var52.modelZoom) { + var52.modelAngleX = var6; + var52.modelAngleY = var16; + var52.modelZoom = var18; + ScriptEvent.invalidateWidget(var52); + } + + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2189 == var1.serverPacket) { + for (var16 = 0; var16 < VarpDefinition.VarpDefinition_fileCount; ++var16) { + VarpDefinition var53 = NetCache.VarpDefinition_get(var16); + if (var53 != null) { + Varps.Varps_temp[var16] = 0; + Varps.Varps_main[var16] = 0; + } + } + + class312.method6006(); + field829 += 32; + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2173 == var1.serverPacket) { + class192.readReflectionCheck(var3, var1.serverPacketLength); + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2196 == var1.serverPacket) { + var16 = var3.readUShortSmart(); + boolean var42 = var3.readUnsignedByte() == 1; + var48 = ""; + boolean var49 = false; + if (var42) { + var48 = var3.readStringCp1252NullTerminated(); + if (VertexNormal.friendSystem.isIgnored(new Username(var48, WorldMapLabelSize.loginType))) { + var49 = true; + } + } + + String var20 = var3.readStringCp1252NullTerminated(); + if (!var49) { + GrandExchangeOfferAgeComparator.addGameMessage(var16, var48, var20); + } + + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2198 == var1.serverPacket) { + VertexNormal.friendSystem.ignoreList.read(var3, var1.serverPacketLength); + Language.FriendSystem_invalidateIgnoreds(); + field833 = cycleCntr; + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2170 == var1.serverPacket) { + if (InterfaceParent.clanChat != null) { + InterfaceParent.clanChat.method5329(var3); + } + + ObjectSound.method1936(); + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2179 == var1.serverPacket) { + var16 = var3.method5640(); + GrandExchangeEvent.method91(var16); + changedItemContainers[++field898 - 1 & 31] = var16 & 32767; + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2192 == var1.serverPacket) { + var16 = var3.readUnsignedShort(); + var5 = var3.readUnsignedByte(); + var6 = var3.readUnsignedShort(); + FileSystem.queueSoundEffect(var16, var5, var6); + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2143 == var1.serverPacket) { + class43.method823(var3.readStringCp1252NullTerminated()); + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2142 == var1.serverPacket) { + rebootTimer = var3.method5640() * 30; + field834 = cycleCntr; + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2200 == var1.serverPacket) { + class40.logOut(); + var1.serverPacket = null; + return false; + } + + if (ServerPacket.field2151 == var1.serverPacket) { + MusicPatchNode.privateChatMode = User.method5131(var3.readUnsignedByte()); + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2171 == var1.serverPacket) { + class227.field3092 = var3.readUnsignedByte(); + class40.field343 = var3.method5728(); + + for (var16 = class227.field3092; var16 < class227.field3092 + 8; ++var16) { + for (var5 = class40.field343; var5 < class40.field343 + 8; ++var5) { + if (groundItems[ClientPacket.Client_plane][var16][var5] != null) { + groundItems[ClientPacket.Client_plane][var16][var5] = null; + HealthBar.updateItemPile(var16, var5); + } + } + } + + for (PendingSpawn var37 = (PendingSpawn)pendingSpawns.last(); var37 != null; var37 = (PendingSpawn)pendingSpawns.previous()) { + if (var37.x >= class227.field3092 && var37.x < class227.field3092 + 8 && var37.y >= class40.field343 && var37.y < class40.field343 + 8 && var37.plane == ClientPacket.Client_plane) { + var37.hitpoints = 0; + } + } + + var1.serverPacket = null; + return true; + } + + boolean var47; + if (ServerPacket.field2187 == var1.serverPacket) { + var47 = var3.readUnsignedByte() == 1; + if (var47) { + class65.field604 = TaskHandler.currentTimeMillis() - var3.readLong(); + SoundCache.grandExchangeEvents = new GrandExchangeEvents(var3, true); + } else { + SoundCache.grandExchangeEvents = null; + } + + field734 = cycleCntr; + var1.serverPacket = null; + return true; + } + + Widget var50; + if (ServerPacket.field2202 == var1.serverPacket) { + var16 = var3.method5588(); + var50 = Language.getWidget(var16); + + for (var6 = 0; var6 < var50.itemIds.length; ++var6) { + var50.itemIds[var6] = -1; + var50.itemIds[var6] = 0; + } + + ScriptEvent.invalidateWidget(var50); + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2191 == var1.serverPacket) { + HealthBarUpdate.method1779(class185.field2341); + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2148 == var1.serverPacket) { + if (var1.serverPacketLength == 0) { + InterfaceParent.clanChat = null; + } else { + if (InterfaceParent.clanChat == null) { + InterfaceParent.clanChat = new ClanChat(WorldMapLabelSize.loginType, AbstractWorldMapIcon.client); + } + + InterfaceParent.clanChat.readUpdate(var3); + } + + ObjectSound.method1936(); + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2129 == var1.serverPacket) { hintArrowType = var3.readUnsignedByte(); if (hintArrowType == 1) { hintArrowNpcIndex = var3.readUnsignedShort(); @@ -4974,221 +5316,130 @@ public final class Client extends GameShell implements Usernamed { return true; } - String var50; - if (ServerPacket.field2162 == var1.serverPacket) { - byte[] var40 = new byte[var1.serverPacketLength]; - var3.method5558(var40, 0, var40.length); - Buffer var54 = new Buffer(var40); - var50 = var54.readStringCp1252NullTerminated(); - class2.openURL(var50, true, false); + if (ServerPacket.field2184 == var1.serverPacket) { + minimapState = var3.readUnsignedByte(); var1.serverPacket = null; return true; } - if (ServerPacket.field2111 == var1.serverPacket) { - AbstractWorldMapData.updateNpcs(true, var3); - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2095 == var1.serverPacket) { - Clock.loadRegions(true, var1.packetBuffer); - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2127 == var1.serverPacket) { - var16 = var3.readInt(); - if (var16 != field799) { - field799 = var16; - WorldMapSection1.method650(); + if (ServerPacket.field2165 == var1.serverPacket) { + var16 = var3.readUnsignedShort(); + if (var16 == 65535) { + var16 = -1; } + AttackOption.playSong(var16); + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2152 == var1.serverPacket) { + var16 = var3.method5640(); + if (var16 == 65535) { + var16 = -1; + } + + var5 = var3.method5645(); + MouseHandler.playSoundJingle(var16, var5); + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2213 == var1.serverPacket) { + var47 = var3.readBoolean(); + if (var47) { + if (InvDefinition.field3210 == null) { + InvDefinition.field3210 = new class237(); + } + } else { + InvDefinition.field3210 = null; + } + + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2131 == var1.serverPacket) { + var16 = var3.method5719(); + var5 = var3.readInt(); + var6 = var16 >> 10 & 31; + var18 = var16 >> 5 & 31; + var8 = var16 & 31; + var9 = (var18 << 11) + (var6 << 19) + (var8 << 3); + Widget var32 = Language.getWidget(var5); + if (var9 != var32.color) { + var32.color = var9; + ScriptEvent.invalidateWidget(var32); + } + + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2139 == var1.serverPacket) { + var16 = var3.method5650(); + var5 = var3.method5765(); + var6 = var3.readShort(); + var7 = Language.getWidget(var16); + if (var5 != var7.rawX || var6 != var7.rawY || var7.xAlignment != 0 || var7.yAlignment != 0) { + var7.rawX = var5; + var7.rawY = var6; + var7.xAlignment = 0; + var7.yAlignment = 0; + ScriptEvent.invalidateWidget(var7); + this.alignWidget(var7); + if (var7.type == 0) { + MilliClock.revalidateWidgetScroll(FloorDecoration.Widget_interfaceComponents[var16 >> 16], var7, false); + } + } + + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2178 == var1.serverPacket) { + HealthBarUpdate.method1779(class185.field2336); + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2208 == var1.serverPacket) { + var16 = var3.readInt(); + if (var16 != field748) { + field748 = var16; + class3.method41(); + } + + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2157 == var1.serverPacket) { + HealthBarUpdate.method1779(class185.field2339); + var1.serverPacket = null; + return true; + } + + if (ServerPacket.field2204 == var1.serverPacket) { + publicChatMode = var3.method5689(); + tradeChatMode = var3.method5689(); var1.serverPacket = null; return true; } if (ServerPacket.field2135 == var1.serverPacket) { - class319.updatePlayers(var3, var1.serverPacketLength); - BoundaryObject.method3394(); + HealthBarUpdate.method1779(class185.field2335); var1.serverPacket = null; return true; } - Widget var48; - if (ServerPacket.field2134 == var1.serverPacket) { - var16 = var3.readUnsignedShort(); - var5 = var3.method5796(); - var48 = PacketBufferNode.getWidget(var5); - if (var48.modelType != 1 || var16 != var48.modelId) { - var48.modelType = 1; - var48.modelId = var16; - GrandExchangeOfferAgeComparator.invalidateWidget(var48); - } - - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2124 == var1.serverPacket) { - WorldMapSprite.method474(class185.field2295); - var1.serverPacket = null; - return true; - } - - int var19; - if (ServerPacket.field2104 == var1.serverPacket) { - var16 = var3.readInt(); - var5 = var3.readUnsignedShort(); - if (var16 < -70000) { - var5 += 32768; - } - - if (var16 >= 0) { - var48 = PacketBufferNode.getWidget(var16); - } else { - var48 = null; - } - - for (; var3.offset < var1.serverPacketLength; WorldMapCacheName.itemContainerSetItem(var5, var7, var8 - 1, var19)) { - var7 = var3.readUShortSmart(); - var8 = var3.readUnsignedShort(); - var19 = 0; - if (var8 != 0) { - var19 = var3.readUnsignedByte(); - if (var19 == 255) { - var19 = var3.readInt(); - } - } - - if (var48 != null && var7 >= 0 && var7 < var48.itemIds.length) { - var48.itemIds[var7] = var8; - var48.itemQuantities[var7] = var19; - } - } - - if (var48 != null) { - GrandExchangeOfferAgeComparator.invalidateWidget(var48); - } - - BoundaryObject.method3393(); - changedItemContainers[++field820 - 1 & 31] = var5 & 32767; - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2136 == var1.serverPacket) { - var16 = var3.method5646(); - WorldMapIcon_0.method252(var16); - changedItemContainers[++field820 - 1 & 31] = var16 & 32767; - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2167 == var1.serverPacket) { - var16 = var3.readInt(); - InterfaceParent var53 = (InterfaceParent)interfaceParents.get((long)var16); - if (var53 != null) { - GrandExchangeOfferOwnWorldComparator.closeInterface(var53, true); - } - - if (meslayerContinueWidget != null) { - GrandExchangeOfferAgeComparator.invalidateWidget(meslayerContinueWidget); - meslayerContinueWidget = null; - } - - var1.serverPacket = null; - return true; - } - - long var12; - int var21; - InterfaceParent var55; - if (ServerPacket.field2098 == var1.serverPacket) { - var16 = var3.offset + var1.serverPacketLength; - var5 = var3.readUnsignedShort(); - var6 = var3.readUnsignedShort(); - if (var5 != rootInterface) { - rootInterface = var5; - this.resizeRoot(false); - WorldMapLabel.Widget_resetModelFrames(rootInterface); - FaceNormal.runWidgetOnLoadListener(rootInterface); - - for (var7 = 0; var7 < 100; ++var7) { - field842[var7] = true; - } - } - - InterfaceParent var43; - for (; var6-- > 0; var43.field545 = true) { - var7 = var3.readInt(); - var8 = var3.readUnsignedShort(); - var19 = var3.readUnsignedByte(); - var43 = (InterfaceParent)interfaceParents.get((long)var7); - if (var43 != null && var8 != var43.group) { - GrandExchangeOfferOwnWorldComparator.closeInterface(var43, true); - var43 = null; - } - - if (var43 == null) { - var43 = WorldMapDecoration.method385(var7, var8, var19); - } - } - - for (var55 = (InterfaceParent)interfaceParents.first(); var55 != null; var55 = (InterfaceParent)interfaceParents.next()) { - if (var55.field545) { - var55.field545 = false; - } else { - GrandExchangeOfferOwnWorldComparator.closeInterface(var55, true); - } - } - - widgetClickMasks = new NodeHashTable(512); - - while (var3.offset < var16) { - var7 = var3.readInt(); - var8 = var3.readUnsignedShort(); - var19 = var3.readUnsignedShort(); - var21 = var3.readInt(); - - for (int var22 = var8; var22 <= var19; ++var22) { - var12 = ((long)var7 << 32) + (long)var22; - widgetClickMasks.put(new IntegerNode(var21), var12); - } - } - - var1.serverPacket = null; - return true; - } - - Widget var23; - if (ServerPacket.field2169 == var1.serverPacket) { - var16 = var3.method5796(); - var5 = var3.readInt(); - InterfaceParent var57 = (InterfaceParent)interfaceParents.get((long)var16); - var55 = (InterfaceParent)interfaceParents.get((long)var5); - if (var55 != null) { - GrandExchangeOfferOwnWorldComparator.closeInterface(var55, var57 == null || var55.group != var57.group); - } - - if (var57 != null) { - var57.remove(); - interfaceParents.put(var57, (long)var5); - } - - var23 = PacketBufferNode.getWidget(var16); - if (var23 != null) { - GrandExchangeOfferAgeComparator.invalidateWidget(var23); - } - - var23 = PacketBufferNode.getWidget(var5); - if (var23 != null) { - GrandExchangeOfferAgeComparator.invalidateWidget(var23); - class43.revalidateWidgetScroll(Widget.Widget_interfaceComponents[var23.id >>> 16], var23, true); - } - - if (rootInterface != -1) { - AttackOption.runIntfCloseListeners(rootInterface, 1); + if (ServerPacket.field2209 == var1.serverPacket) { + var47 = var3.method5728() == 1; + var5 = var3.method5650(); + var17 = Language.getWidget(var5); + if (var47 != var17.isHidden) { + var17.isHidden = var47; + ScriptEvent.invalidateWidget(var17); } var1.serverPacket = null; @@ -5196,1186 +5447,307 @@ public final class Client extends GameShell implements Usernamed { } if (ServerPacket.field2159 == var1.serverPacket) { - WorldMapSprite.method474(class185.field2297); - var1.serverPacket = null; - return true; - } - - long var24; - long var26; - String var36; - if (ServerPacket.field2148 == var1.serverPacket) { - var36 = var3.readStringCp1252NullTerminated(); - var24 = var3.readLong(); - var26 = (long)var3.readUnsignedShort(); - var9 = (long)var3.readMedium(); - PlayerType var11 = (PlayerType)WorldMapIcon_1.findEnumerated(class51.PlayerType_values(), var3.readUnsignedByte()); - var12 = (var26 << 32) + var9; - boolean var45 = false; - - for (int var15 = 0; var15 < 100; ++var15) { - if (field852[var15] == var12) { - var45 = true; - break; - } - } - - if (var11.isUser && PacketWriter.friendSystem.isIgnored(new Username(var36, class60.loginType))) { - var45 = true; - } - - if (!var45 && field745 == 0) { - field852[field721] = var12; - field721 = (field721 + 1) % 100; - String var28 = AbstractFont.escapeBrackets(class222.method4274(class4.method90(var3))); - if (var11.modIcon != -1) { - WorldMapLabel.addChatMessage(9, GrandExchangeEvent.method122(var11.modIcon) + var36, var28, WorldMapDecoration.base37DecodeLong(var24)); - } else { - WorldMapLabel.addChatMessage(9, var36, var28, WorldMapDecoration.base37DecodeLong(var24)); - } - } - - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2096 == var1.serverPacket) { var16 = var3.readUnsignedByte(); - var5 = var3.readUnsignedByte(); - var6 = var3.readUnsignedByte(); - var7 = var3.readUnsignedByte(); - field641[var16] = true; - field877[var16] = var5; - field795[var16] = var6; - field879[var16] = var7; - field880[var16] = 0; - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2091 == var1.serverPacket) { - BoundaryObject.method3393(); - weight = var3.readShort(); - field834 = cycleCntr; - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2161 == var1.serverPacket) { - SpriteMask.field2501 = var3.method5622(); - GrandExchangeOffer.field61 = var3.method5622(); - - for (var16 = SpriteMask.field2501; var16 < SpriteMask.field2501 + 8; ++var16) { - for (var5 = GrandExchangeOffer.field61; var5 < GrandExchangeOffer.field61 + 8; ++var5) { - if (groundItems[Player.Client_plane][var16][var5] != null) { - groundItems[Player.Client_plane][var16][var5] = null; - class4.updateItemPile(var16, var5); - } - } - } - - for (PendingSpawn var38 = (PendingSpawn)pendingSpawns.last(); var38 != null; var38 = (PendingSpawn)pendingSpawns.previous()) { - if (var38.x >= SpriteMask.field2501 && var38.x < SpriteMask.field2501 + 8 && var38.y >= GrandExchangeOffer.field61 && var38.y < GrandExchangeOffer.field61 + 8 && var38.plane == Player.Client_plane) { - var38.hitpoints = 0; - } - } - - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2109 == var1.serverPacket) { - for (var16 = 0; var16 < players.length; ++var16) { - if (players[var16] != null) { - players[var16].sequence = -1; - } - } - - for (var16 = 0; var16 < npcs.length; ++var16) { - if (npcs[var16] != null) { - npcs[var16].sequence = -1; - } - } - - var1.serverPacket = null; - return true; - } - - Widget var20; - if (ServerPacket.field2141 == var1.serverPacket) { - var16 = var3.readUnsignedShort(); - if (var16 == 65535) { - var16 = -1; - } - - var5 = var3.readInt(); - var6 = var3.method5603(); - var20 = PacketBufferNode.getWidget(var6); - ItemDefinition var59; - if (!var20.isIf3) { - if (var16 == -1) { - var20.modelType = 0; - var1.serverPacket = null; - return true; - } - - var59 = class222.ItemDefinition_get(var16); - var20.modelType = 4; - var20.modelId = var16; - var20.modelAngleX = var59.xan2d; - var20.modelAngleY = var59.yan2d; - var20.modelZoom = var59.zoom2d * 100 / var5; - GrandExchangeOfferAgeComparator.invalidateWidget(var20); + if (var3.readUnsignedByte() == 0) { + grandExchangeOffers[var16] = new GrandExchangeOffer(); + var3.offset += 18; } else { - var20.itemId = var16; - var20.itemQuantity = var5; - var59 = class222.ItemDefinition_get(var16); - var20.modelAngleX = var59.xan2d; - var20.modelAngleY = var59.yan2d; - var20.modelAngleZ = var59.zan2d; - var20.modelOffsetX = var59.offsetX2d; - var20.modelOffsetY = var59.offsetY2d; - var20.modelZoom = var59.zoom2d; - if (var59.isStackable == 1) { - var20.itemQuantityMode = 1; - } else { - var20.itemQuantityMode = 2; - } - - if (var20.field2577 > 0) { - var20.modelZoom = var20.modelZoom * 32 / var20.field2577; - } else if (var20.rawWidth > 0) { - var20.modelZoom = var20.modelZoom * 32 / var20.rawWidth; - } - - GrandExchangeOfferAgeComparator.invalidateWidget(var20); + --var3.offset; + grandExchangeOffers[var16] = new GrandExchangeOffer(var3, false); } + field645 = cycleCntr; var1.serverPacket = null; return true; } - if (ServerPacket.field2107 == var1.serverPacket) { - WorldMapSprite.method474(class185.field2296); + if (ServerPacket.field2177 == var1.serverPacket) { + WorldMapSection2.updateNpcs(false, var3); var1.serverPacket = null; return true; } - if (ServerPacket.field2160 == var1.serverPacket) { - class3.privateChatMode = NPCDefinition.method4881(var3.readUnsignedByte()); + if (ServerPacket.field2180 == var1.serverPacket) { + WorldMapSection2.updateNpcs(true, var3); var1.serverPacket = null; return true; } - boolean var39; - if (ServerPacket.field2156 == var1.serverPacket) { - var16 = var3.readUShortSmart(); - var39 = var3.readUnsignedByte() == 1; - var50 = ""; - boolean var42 = false; - if (var39) { - var50 = var3.readStringCp1252NullTerminated(); - if (PacketWriter.friendSystem.isIgnored(new Username(var50, class60.loginType))) { - var42 = true; - } - } - - String var58 = var3.readStringCp1252NullTerminated(); - if (!var42) { - class30.addGameMessage(var16, var50, var58); - } - + if (ServerPacket.field2162 == var1.serverPacket) { + var16 = var3.method5650(); + var50 = Language.getWidget(var16); + var50.modelType = 3; + var50.modelId = class215.localPlayer.appearance.getChatHeadId(); + ScriptEvent.invalidateWidget(var50); var1.serverPacket = null; return true; } - if (ServerPacket.field2093 == var1.serverPacket) { - PacketWriter.friendSystem.method1968(); - field824 = cycleCntr; - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2146 == var1.serverPacket) { - var16 = var3.method5647(); - rootInterface = var16; - this.resizeRoot(false); - WorldMapLabel.Widget_resetModelFrames(var16); - FaceNormal.runWidgetOnLoadListener(rootInterface); - - for (var5 = 0; var5 < 100; ++var5) { - field842[var5] = true; - } - - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2147 == var1.serverPacket) { - SpriteMask.field2501 = var3.method5639(); - GrandExchangeOffer.field61 = var3.method5697(); - - while (var3.offset < var1.serverPacketLength) { - var16 = var3.readUnsignedByte(); - class185 var52 = WorldMapAreaData.method763()[var16]; - WorldMapSprite.method474(var52); - } - - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2097 == var1.serverPacket) { - var16 = var3.method5656(); - var5 = var3.method5646(); - var48 = PacketBufferNode.getWidget(var16); - if (var48 != null && var48.type == 0) { - if (var5 > var48.scrollHeight - var48.height) { - var5 = var48.scrollHeight - var48.height; - } - - if (var5 < 0) { - var5 = 0; - } - - if (var5 != var48.scrollY) { - var48.scrollY = var5; - GrandExchangeOfferAgeComparator.invalidateWidget(var48); - } - } - - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2118 == var1.serverPacket) { - var16 = var3.readUnsignedByte(); - WorldMapRectangle.method329(var16); - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2130 == var1.serverPacket) { - var16 = var3.readInt(); - var5 = var3.method5651(); - var48 = PacketBufferNode.getWidget(var16); - if (var5 != var48.sequenceId || var5 == -1) { - var48.sequenceId = var5; - var48.modelFrame = 0; - var48.modelFrameCycle = 0; - GrandExchangeOfferAgeComparator.invalidateWidget(var48); - } - - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2137 == var1.serverPacket) { - WorldMapSprite.method474(class185.field2299); - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2165 == var1.serverPacket) { - var16 = var3.method5647(); - if (var16 == 65535) { - var16 = -1; - } - - AbstractWorldMapIcon.playSong(var16); - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2168 == var1.serverPacket) { - var16 = var3.method5678(); - var5 = var3.method5646(); - if (var5 == 65535) { - var5 = -1; - } - - WorldMapEvent.playSoundJingle(var5, var16); - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2139 == var1.serverPacket) { - var16 = var3.readInt(); - var5 = var3.readInt(); - var6 = WorldMapSection0.getGcDuration(); - PacketBufferNode var56 = SoundSystem.getPacketBufferNode(ClientPacket.field2232, packetWriter.isaacCipher); - var56.packetBuffer.method5653(var16); - var56.packetBuffer.writeIntME(var5); - var56.packetBuffer.writeByte(var6); - var56.packetBuffer.writeByte(GameShell.fps); - packetWriter.addNode(var56); - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2113 == var1.serverPacket) { - var16 = var3.method5648(); - var5 = var3.method5647(); - var6 = var3.method5648(); - var7 = var3.readInt(); - var23 = PacketBufferNode.getWidget(var7); - if (var6 != var23.modelAngleX || var5 != var23.modelAngleY || var16 != var23.modelZoom) { - var23.modelAngleX = var6; - var23.modelAngleY = var5; - var23.modelZoom = var16; - GrandExchangeOfferAgeComparator.invalidateWidget(var23); - } - - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2173 == var1.serverPacket) { - AbstractWorldMapData.updateNpcs(false, var3); - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2105 == var1.serverPacket) { - RouteStrategy.method3735(var3.readStringCp1252NullTerminated()); - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2112 == var1.serverPacket) { - class1.logOut(); - var1.serverPacket = null; - return false; - } - - if (ServerPacket.field2094 == var1.serverPacket) { - var16 = var3.readInt(); - var5 = var3.readUnsignedShort(); - if (var16 < -70000) { - var5 += 32768; - } - - if (var16 >= 0) { - var48 = PacketBufferNode.getWidget(var16); - } else { - var48 = null; - } - - if (var48 != null) { - for (var7 = 0; var7 < var48.itemIds.length; ++var7) { - var48.itemIds[var7] = 0; - var48.itemQuantities[var7] = 0; - } - } - - FontName.clearItemContainer(var5); - var7 = var3.readUnsignedShort(); - - for (var8 = 0; var8 < var7; ++var8) { - var19 = var3.method5697(); - if (var19 == 255) { - var19 = var3.method5656(); - } - - var21 = var3.method5648(); - if (var48 != null && var8 < var48.itemIds.length) { - var48.itemIds[var8] = var21; - var48.itemQuantities[var8] = var19; - } - - WorldMapCacheName.itemContainerSetItem(var5, var8, var21 - 1, var19); - } - - if (var48 != null) { - GrandExchangeOfferAgeComparator.invalidateWidget(var48); - } - - BoundaryObject.method3393(); - changedItemContainers[++field820 - 1 & 31] = var5 & 32767; - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2120 == var1.serverPacket) { - isCameraLocked = true; - AbstractUserComparator.field3583 = var3.readUnsignedByte() * 128; - class49.field401 = var3.readUnsignedByte() * 16384; - ViewportMouse.field1713 = var3.readUnsignedShort(); - Clock.field2036 = var3.readUnsignedByte(); - SecureRandomCallable.field510 = var3.readUnsignedByte(); - if (SecureRandomCallable.field510 >= 100) { - var16 = AbstractUserComparator.field3583 * 16384 + 64; - var5 = class49.field401 * 128 + 64; - var6 = GraphicsObject.getTileHeight(var16, var5, Player.Client_plane) - ViewportMouse.field1713; - var7 = var16 - UrlRequester.cameraX; - var8 = var6 - class16.cameraY; - var19 = var5 - GrandExchangeOfferAgeComparator.cameraZ; - var21 = (int)Math.sqrt((double)(var19 * var19 + var7 * var7)); - class247.cameraPitch = (int)(Math.atan2((double)var8, (double)var21) * 325.949D) & 2047; - WorldMapData_1.cameraYaw = (int)(Math.atan2((double)var7, (double)var19) * -325.949D) & 2047; - if (class247.cameraPitch < 128) { - class247.cameraPitch = 128; - } - - if (class247.cameraPitch > 383) { - class247.cameraPitch = 383; - } - } - - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2101 == var1.serverPacket) { - WorldMapSprite.method474(class185.field2294); - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2103 == var1.serverPacket) { - for (var16 = 0; var16 < VarpDefinition.VarpDefinition_fileCount; ++var16) { - VarpDefinition var51 = Varcs.VarpDefinition_get(var16); - if (var51 != null) { - Varps.Varps_temp[var16] = 0; - Varps.Varps_main[var16] = 0; - } - } - - BoundaryObject.method3393(); - field679 += 32; - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2157 == var1.serverPacket) { - WorldMapSprite.method474(class185.field2292); - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2115 == var1.serverPacket) { - var16 = var3.readUnsignedShort(); - byte var41 = var3.method5640(); - Varps.Varps_temp[var16] = var41; - if (Varps.Varps_main[var16] != var41) { - Varps.Varps_main[var16] = var41; - } - - WorldMapDecoration.changeGameOptions(var16); - field817[++field679 - 1 & 31] = var16; - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2152 == var1.serverPacket) { - var16 = var3.method5647(); - var5 = var3.method5796(); - var48 = PacketBufferNode.getWidget(var5); - if (var48.modelType != 2 || var16 != var48.modelId) { - var48.modelType = 2; - var48.modelId = var16; - GrandExchangeOfferAgeComparator.invalidateWidget(var48); - } - - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2170 == var1.serverPacket) { - for (var16 = 0; var16 < Varps.Varps_main.length; ++var16) { - if (Varps.Varps_main[var16] != Varps.Varps_temp[var16]) { - Varps.Varps_main[var16] = Varps.Varps_temp[var16]; - WorldMapDecoration.changeGameOptions(var16); - field817[++field679 - 1 & 31] = var16; - } - } - - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2166 == var1.serverPacket) { - World var37 = new World(); - var37.host = var3.readStringCp1252NullTerminated(); - var37.id = var3.readUnsignedShort(); - var5 = var3.readInt(); - var37.properties = var5; - Tile.updateGameState(45); - var2.close(); - var2 = null; - MouseRecorder.changeWorld(var37); - var1.serverPacket = null; - return false; - } - - if (ServerPacket.field2164 == var1.serverPacket) { - Clock.loadRegions(false, var1.packetBuffer); - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2143 == var1.serverPacket) { - var16 = var3.method5646(); - var5 = var3.method5639(); - var6 = var3.readInt(); - var55 = (InterfaceParent)interfaceParents.get((long)var6); - if (var55 != null) { - GrandExchangeOfferOwnWorldComparator.closeInterface(var55, var16 != var55.group); - } - - WorldMapDecoration.method385(var6, var16, var5); - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2174 == var1.serverPacket) { - PacketWriter.friendSystem.readUpdate(var3, var1.serverPacketLength); - field824 = cycleCntr; - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2092 == var1.serverPacket) { - var16 = var3.readUnsignedByte(); - Frames.forceDisconnect(var16); - var1.serverPacket = null; - return false; - } - - if (ServerPacket.field2119 == var1.serverPacket) { - KeyHandler.readReflectionCheck(var3, var1.serverPacketLength); - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2131 == var1.serverPacket) { - var36 = var3.readStringCp1252NullTerminated(); - var24 = (long)var3.readUnsignedShort(); - var26 = (long)var3.readMedium(); - PlayerType var29 = (PlayerType)WorldMapIcon_1.findEnumerated(class51.PlayerType_values(), var3.readUnsignedByte()); - long var30 = var26 + (var24 << 32); - boolean var32 = false; - - for (int var13 = 0; var13 < 100; ++var13) { - if (field852[var13] == var30) { - var32 = true; - break; - } - } - - if (PacketWriter.friendSystem.isIgnored(new Username(var36, class60.loginType))) { - var32 = true; - } - - if (!var32 && field745 == 0) { - field852[field721] = var30; - field721 = (field721 + 1) % 100; - String var33 = AbstractFont.escapeBrackets(class222.method4274(class4.method90(var3))); - byte var14; - if (var29.isPrivileged) { - var14 = 7; - } else { - var14 = 3; - } - - if (var29.modIcon != -1) { - class30.addGameMessage(var14, GrandExchangeEvent.method122(var29.modIcon) + var36, var33); - } else { - class30.addGameMessage(var14, var36, var33); - } - } - - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2144 == var1.serverPacket) { - var16 = var3.method5649(); - var5 = var3.method5656(); - var6 = var3.readShort(); - var20 = PacketBufferNode.getWidget(var5); - if (var6 != var20.rawX || var16 != var20.rawY || var20.xAlignment != 0 || var20.yAlignment != 0) { - var20.rawX = var6; - var20.rawY = var16; - var20.xAlignment = 0; - var20.yAlignment = 0; - GrandExchangeOfferAgeComparator.invalidateWidget(var20); - this.alignWidget(var20); - if (var20.type == 0) { - class43.revalidateWidgetScroll(Widget.Widget_interfaceComponents[var5 >> 16], var20, false); - } - } - - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2116 == var1.serverPacket) { - var16 = var3.method5656(); - var5 = var3.method5646(); - var6 = var5 >> 10 & 31; - var7 = var5 >> 5 & 31; - var8 = var5 & 31; - var19 = (var7 << 11) + (var6 << 19) + (var8 << 3); - Widget var10 = PacketBufferNode.getWidget(var16); - if (var19 != var10.color) { - var10.color = var19; - GrandExchangeOfferAgeComparator.invalidateWidget(var10); - } - - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2149 == var1.serverPacket) { - destinationX = var3.readUnsignedByte(); - if (destinationX == 255) { - destinationX = 0; - } - - destinationY = var3.readUnsignedByte(); - if (destinationY == 255) { - destinationY = 0; - } - - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2106 == var1.serverPacket) { - BoundaryObject.method3393(); - runEnergy = var3.readUnsignedByte(); - field834 = cycleCntr; - var1.serverPacket = null; - return true; - } - - Widget var49; - if (ServerPacket.field2145 == var1.serverPacket) { - var16 = var3.readInt(); - var49 = PacketBufferNode.getWidget(var16); - - for (var6 = 0; var6 < var49.itemIds.length; ++var6) { - var49.itemIds[var6] = -1; - var49.itemIds[var6] = 0; - } - - GrandExchangeOfferAgeComparator.invalidateWidget(var49); - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2142 == var1.serverPacket) { - var16 = var3.method5697(); - var5 = var3.readUnsignedByte(); - var50 = var3.readStringCp1252NullTerminated(); - if (var5 >= 1 && var5 <= 8) { - if (var50.equalsIgnoreCase("null")) { - var50 = null; - } - - playerMenuActions[var5 - 1] = var50; - playerOptionsPriorities[var5 - 1] = var16 == 0; - } - - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2099 == var1.serverPacket) { - var16 = var3.method5796(); - var49 = PacketBufferNode.getWidget(var16); - var49.modelType = 3; - var49.modelId = class215.localPlayer.appearance.getChatHeadId(); - GrandExchangeOfferAgeComparator.invalidateWidget(var49); - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2175 == var1.serverPacket) { - isCameraLocked = false; - - for (var16 = 0; var16 < 5; ++var16) { - field641[var16] = false; - } - - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2171 == var1.serverPacket) { - var16 = var3.readUnsignedShort(); - var5 = var3.readUnsignedByte(); - var6 = var3.readUnsignedShort(); - class185.queueSoundEffect(var16, var5, var6); - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2158 == var1.serverPacket) { - WorldMapSprite.method474(class185.field2300); - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2123 == var1.serverPacket) { - var16 = var3.method5603(); - var39 = var3.readUnsignedByte() == 1; - var48 = PacketBufferNode.getWidget(var16); - if (var39 != var48.isHidden) { - var48.isHidden = var39; - GrandExchangeOfferAgeComparator.invalidateWidget(var48); - } - - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2133 == var1.serverPacket) { - SpriteMask.field2501 = var3.readUnsignedByte(); - GrandExchangeOffer.field61 = var3.method5639(); - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2138 == var1.serverPacket) { - publicChatMode = var3.method5639(); - tradeChatMode = var3.readUnsignedByte(); - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2114 == var1.serverPacket) { - isCameraLocked = true; - class14.field88 = var3.readUnsignedByte() * 16384; - class42.field360 = var3.readUnsignedByte() * 16384; - WorldMapLabel.field231 = var3.readUnsignedShort(); - WorldMapAreaData.field323 = var3.readUnsignedByte(); - Interpreter.field1068 = var3.readUnsignedByte(); - if (Interpreter.field1068 >= 100) { - UrlRequester.cameraX = class14.field88 * 128 + 64; - GrandExchangeOfferAgeComparator.cameraZ = class42.field360 * 128 + 64; - class16.cameraY = GraphicsObject.getTileHeight(UrlRequester.cameraX, GrandExchangeOfferAgeComparator.cameraZ, Player.Client_plane) - WorldMapLabel.field231; - } - - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2100 == var1.serverPacket) { - if (rootInterface != -1) { - AttackOption.runIntfCloseListeners(rootInterface, 0); - } - - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2128 == var1.serverPacket) { - BoundaryObject.method3393(); - var16 = var3.method5697(); - var5 = var3.method5603(); - var6 = var3.readUnsignedByte(); - experience[var16] = var5; - currentLevels[var16] = var6; - levels[var16] = 1; - - for (var7 = 0; var7 < 98; ++var7) { - if (var5 >= Skills.Skills_experienceTable[var7]) { - levels[var16] = var7 + 2; - } - } - - changedSkills[++changedSkillsCount - 1 & 31] = var16; - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2102 == var1.serverPacket) { - var36 = var3.readStringCp1252NullTerminated(); - var17 = AbstractFont.escapeBrackets(class222.method4274(class4.method90(var3))); - class30.addGameMessage(6, var36, var17); - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2125 == var1.serverPacket) { - var16 = var3.method5603(); - var5 = var3.method5646(); - Varps.Varps_temp[var5] = var16; - if (Varps.Varps_main[var5] != var16) { - Varps.Varps_main[var5] = var16; - } - - WorldMapDecoration.changeGameOptions(var5); - field817[++field679 - 1 & 31] = var5; - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2163 == var1.serverPacket) { - var3.offset += 28; - if (var3.checkCrc()) { - GrandExchangeOfferWorldComparator.method103(var3, var3.offset - 28); - } - - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2110 == var1.serverPacket) { - var16 = var3.method5603(); - var17 = var3.readStringCp1252NullTerminated(); - var48 = PacketBufferNode.getWidget(var16); - if (!var17.equals(var48.text)) { - var48.text = var17; - GrandExchangeOfferAgeComparator.invalidateWidget(var48); - } - - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2117 == var1.serverPacket) { - WorldMapSprite.method474(class185.field2293); - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2153 == var1.serverPacket) { - if (var1.serverPacketLength == 0) { - class4.clanChat = null; - } else { - if (class4.clanChat == null) { - class4.clanChat = new ClanChat(class60.loginType, WorldMapID.client); - } - - class4.clanChat.readUpdate(var3); - } - - AbstractByteArrayCopier.method4092(); - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2154 == var1.serverPacket) { - var46 = var3.readBoolean(); - if (var46) { - if (GrandExchangeOfferWorldComparator.field30 == null) { - GrandExchangeOfferWorldComparator.field30 = new class237(); - } - } else { - GrandExchangeOfferWorldComparator.field30 = null; - } - - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2150 == var1.serverPacket) { - WorldMapSprite.method474(class185.field2298); - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2121 == var1.serverPacket) { - minimapState = var3.readUnsignedByte(); - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2132 == var1.serverPacket) { - var36 = var3.readStringCp1252NullTerminated(); - Object[] var47 = new Object[var36.length() + 1]; - - for (var6 = var36.length() - 1; var6 >= 0; --var6) { - if (var36.charAt(var6) == 's') { - var47[var6 + 1] = var3.readStringCp1252NullTerminated(); - } else { - var47[var6 + 1] = new Integer(var3.readInt()); - } - } - - var47[0] = new Integer(var3.readInt()); - ScriptEvent var18 = new ScriptEvent(); - var18.args = var47; - GrandExchangeOfferAgeComparator.runScriptEvent(var18); - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2108 == var1.serverPacket) { - if (class4.clanChat != null) { - class4.clanChat.method5354(var3); - } - - AbstractByteArrayCopier.method4092(); - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2151 == var1.serverPacket) { - WorldMapSprite.method474(class185.field2291); - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2155 == var1.serverPacket) { - var16 = var3.method5648(); - var5 = var3.method5796(); - var6 = var3.method5648(); - var20 = PacketBufferNode.getWidget(var5); - var20.field2604 = var6 + (var16 << 16); - var1.serverPacket = null; - return true; - } - - if (ServerPacket.field2172 == var1.serverPacket) { - PacketWriter.friendSystem.ignoreList.read(var3, var1.serverPacketLength); - class42.FriendSystem_invalidateIgnoreds(); - field824 = cycleCntr; - var1.serverPacket = null; - return true; - } - - User.RunException_sendStackTrace("" + (var1.serverPacket != null ? var1.serverPacket.id : -1) + "," + (var1.field1286 != null ? var1.field1286.id : -1) + "," + (var1.field1292 != null ? var1.field1292.id : -1) + "," + var1.serverPacketLength, (Throwable)null); - class1.logOut(); - } catch (IOException var34) { - AbstractWorldMapIcon.method652(); - } catch (Exception var35) { - var17 = "" + (var1.serverPacket != null ? var1.serverPacket.id : -1) + "," + (var1.field1286 != null ? var1.field1286.id : -1) + "," + (var1.field1292 != null ? var1.field1292.id : -1) + "," + var1.serverPacketLength + "," + (class215.localPlayer.pathX[0] + UserComparator8.baseX * 64) + "," + (class215.localPlayer.pathY[0] + HealthBar.baseY * 64) + ","; + Calendar.RunException_sendStackTrace("" + (var1.serverPacket != null ? var1.serverPacket.id : -1) + "," + (var1.field1311 != null ? var1.field1311.id : -1) + "," + (var1.field1312 != null ? var1.field1312.id : -1) + "," + var1.serverPacketLength, (Throwable)null); + class40.logOut(); + } catch (IOException var35) { + Projectile.method2137(); + } catch (Exception var36) { + var19 = "" + (var1.serverPacket != null ? var1.serverPacket.id : -1) + "," + (var1.field1311 != null ? var1.field1311.id : -1) + "," + (var1.field1312 != null ? var1.field1312.id : -1) + "," + var1.serverPacketLength + "," + (class215.localPlayer.pathX[0] + class51.baseX * 64) + "," + (class215.localPlayer.pathY[0] + VarcInt.baseY * 64) + ","; for (var6 = 0; var6 < var1.serverPacketLength && var6 < 50; ++var6) { - var17 = var17 + var3.array[var6] + ","; + var19 = var19 + var3.array[var6] + ","; } - User.RunException_sendStackTrace(var17, var35); - class1.logOut(); + Calendar.RunException_sendStackTrace(var19, var36); + class40.logOut(); } return true; } } - @ObfuscatedName("iq") + @ObfuscatedName("hp") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "-331813237" + garbageValue = "2019435319" ) @Export("menu") final void menu() { - Occluder.method3416(); - if (GrandExchangeOffer.dragInventoryWidget == null) { + PcmPlayer.method2509(); + if (DevicePcmPlayerProvider.dragInventoryWidget == null) { if (clickedWidget == null) { - int var1 = MouseHandler.MouseHandler_lastButton; int var2; - int var3; - int var4; int var5; int var6; - int var8; - if (isMenuOpen) { - if (var1 != 1 && (WorldMapLabelSize.mouseCam || var1 != 4)) { - var2 = MouseHandler.MouseHandler_x; - var3 = MouseHandler.MouseHandler_y; - if (var2 < MusicPatchNode.menuX - 10 || var2 > KeyHandler.menuWidth + MusicPatchNode.menuX + 10 || var3 < TextureProvider.menuY - 10 || var3 > TextureProvider.menuY + WorldMapData_1.menuHeight + 10) { - isMenuOpen = false; - class83.method2212(MusicPatchNode.menuX, TextureProvider.menuY, KeyHandler.menuWidth, WorldMapData_1.menuHeight); - } - } + int var9; + int var14; + label276: { + int var1 = MouseHandler.MouseHandler_lastButton; + int var4; + if (isMenuOpen) { + int var3; + int var7; + if (var1 != 1 && (JagexCache.mouseCam || var1 != 4)) { + var2 = MouseHandler.MouseHandler_x; + var3 = MouseHandler.MouseHandler_y; + if (var2 < HealthBar.menuX - 10 || var2 > TileItemPile.menuWidth + HealthBar.menuX + 10 || var3 < class191.menuY - 10 || var3 > SoundSystem.menuHeight + class191.menuY + 10) { + isMenuOpen = false; + var4 = HealthBar.menuX; + var5 = class191.menuY; + var6 = TileItemPile.menuWidth; + var7 = SoundSystem.menuHeight; - if (var1 == 1 || !WorldMapLabelSize.mouseCam && var1 == 4) { - var2 = MusicPatchNode.menuX; - var3 = TextureProvider.menuY; - var4 = KeyHandler.menuWidth; - var5 = MouseHandler.MouseHandler_lastPressedX; - var6 = MouseHandler.MouseHandler_lastPressedY; - int var17 = -1; - - int var9; - for (var8 = 0; var8 < menuOptionsCount; ++var8) { - var9 = var3 + (menuOptionsCount - 1 - var8) * 15 + 31; - if (var5 > var2 && var5 < var2 + var4 && var6 > var9 - 13 && var6 < var9 + 3) { - var17 = var8; - } - } - - if (var17 != -1 && var17 >= 0) { - var8 = menuArguments1[var17]; - var9 = menuArguments2[var17]; - int var10 = menuOpcodes[var17]; - int var11 = menuIdentifiers[var17]; - String var12 = menuActions[var17]; - String var13 = menuTargets[var17]; - GrandExchangeOfferOwnWorldComparator.menuAction(var8, var9, var10, var11, var12, var13, MouseHandler.MouseHandler_lastPressedX, MouseHandler.MouseHandler_lastPressedY); - } - - isMenuOpen = false; - class83.method2212(MusicPatchNode.menuX, TextureProvider.menuY, KeyHandler.menuWidth, WorldMapData_1.menuHeight); - } - } else { - var2 = class16.getNewestMenuIdx(); - if ((var1 == 1 || !WorldMapLabelSize.mouseCam && var1 == 4) && var2 >= 0) { - var3 = menuOpcodes[var2]; - if (var3 == 39 || var3 == 40 || var3 == 41 || var3 == 42 || var3 == 43 || var3 == 33 || var3 == 34 || var3 == 35 || var3 == 36 || var3 == 37 || var3 == 38 || var3 == 1005) { - label260: { - var4 = menuArguments1[var2]; - var5 = menuArguments2[var2]; - Widget var14 = PacketBufferNode.getWidget(var5); - if (!class162.method3588(class195.getWidgetClickMask(var14))) { - var8 = class195.getWidgetClickMask(var14); - boolean var7 = (var8 >> 29 & 1) != 0; - if (!var7) { - break label260; + for (var14 = 0; var14 < rootWidgetCount; ++var14) { + if (rootWidgetWidths[var14] + rootWidgetXs[var14] > var4 && rootWidgetXs[var14] < var4 + var6 && rootWidgetHeights[var14] + rootWidgetYs[var14] > var5 && rootWidgetYs[var14] < var5 + var7) { + field847[var14] = true; } } - - if (GrandExchangeOffer.dragInventoryWidget != null && !field743 && menuOptionsCount > 0 && !this.shouldLeftClickOpenMenu()) { - AbstractWorldMapData.method325(field729, field741); - } - - field743 = false; - itemDragDuration = 0; - if (GrandExchangeOffer.dragInventoryWidget != null) { - GrandExchangeOfferAgeComparator.invalidateWidget(GrandExchangeOffer.dragInventoryWidget); - } - - GrandExchangeOffer.dragInventoryWidget = PacketBufferNode.getWidget(var5); - dragItemSlotSource = var4; - field729 = MouseHandler.MouseHandler_lastPressedX; - field741 = MouseHandler.MouseHandler_lastPressedY; - if (var2 >= 0) { - Script.method2384(var2); - } - - GrandExchangeOfferAgeComparator.invalidateWidget(GrandExchangeOffer.dragInventoryWidget); - return; } } + + if (var1 == 1 || !JagexCache.mouseCam && var1 == 4) { + var2 = HealthBar.menuX; + var3 = class191.menuY; + var4 = TileItemPile.menuWidth; + var5 = MouseHandler.MouseHandler_lastPressedX; + var6 = MouseHandler.MouseHandler_lastPressedY; + var7 = -1; + + for (var14 = 0; var14 < menuOptionsCount; ++var14) { + var9 = (menuOptionsCount - 1 - var14) * 15 + var3 + 31; + if (var5 > var2 && var5 < var2 + var4 && var6 > var9 - 13 && var6 < var9 + 3) { + var7 = var14; + } + } + + if (var7 != -1) { + class60.method1193(var7); + } + + isMenuOpen = false; + var14 = HealthBar.menuX; + var9 = class191.menuY; + int var10 = TileItemPile.menuWidth; + int var11 = SoundSystem.menuHeight; + + for (int var12 = 0; var12 < rootWidgetCount; ++var12) { + if (rootWidgetWidths[var12] + rootWidgetXs[var12] > var14 && rootWidgetXs[var12] < var14 + var10 && rootWidgetHeights[var12] + rootWidgetYs[var12] > var9 && rootWidgetYs[var12] < var9 + var11) { + field847[var12] = true; + } + } + } + } else { + var2 = menuOptionsCount - 1; + if ((var1 == 1 || !JagexCache.mouseCam && var1 == 4) && var2 >= 0) { + var4 = menuOpcodes[var2]; + if (var4 == 39 || var4 == 40 || var4 == 41 || var4 == 42 || var4 == 43 || var4 == 33 || var4 == 34 || var4 == 35 || var4 == 36 || var4 == 37 || var4 == 38 || var4 == 1005) { + var5 = menuArguments1[var2]; + var6 = menuArguments2[var2]; + Widget var13 = Language.getWidget(var6); + if (class215.method4109(MenuAction.getWidgetClickMask(var13))) { + break label276; + } + + var9 = MenuAction.getWidgetClickMask(var13); + boolean var8 = (var9 >> 29 & 1) != 0; + if (var8) { + break label276; + } + } + } + + if ((var1 == 1 || !JagexCache.mouseCam && var1 == 4) && this.shouldLeftClickOpenMenu()) { + var1 = 2; + } + + if ((var1 == 1 || !JagexCache.mouseCam && var1 == 4) && menuOptionsCount > 0) { + class60.method1193(var2); + } + + if (var1 == 2 && menuOptionsCount > 0) { + this.openMenu(MouseHandler.MouseHandler_lastPressedX, MouseHandler.MouseHandler_lastPressedY); + } } - if ((var1 == 1 || !WorldMapLabelSize.mouseCam && var1 == 4) && this.shouldLeftClickOpenMenu()) { - var1 = 2; - } - - if ((var1 == 1 || !WorldMapLabelSize.mouseCam && var1 == 4) && menuOptionsCount > 0 && var2 >= 0) { - var3 = menuArguments1[var2]; - var4 = menuArguments2[var2]; - var5 = menuOpcodes[var2]; - var6 = menuIdentifiers[var2]; - String var15 = menuActions[var2]; - String var16 = menuTargets[var2]; - GrandExchangeOfferOwnWorldComparator.menuAction(var3, var4, var5, var6, var15, var16, MouseHandler.MouseHandler_lastPressedX, MouseHandler.MouseHandler_lastPressedY); - } - - if (var1 == 2 && menuOptionsCount > 0) { - this.openMenu(MouseHandler.MouseHandler_lastPressedX, MouseHandler.MouseHandler_lastPressedY); - } + return; } + if (DevicePcmPlayerProvider.dragInventoryWidget != null && !field754 && menuOptionsCount > 0 && !this.shouldLeftClickOpenMenu()) { + var14 = field751; + var9 = field752; + Language.method3705(Tiles.tempMenuAction, var14, var9); + Tiles.tempMenuAction = null; + } + + field754 = false; + itemDragDuration = 0; + if (DevicePcmPlayerProvider.dragInventoryWidget != null) { + ScriptEvent.invalidateWidget(DevicePcmPlayerProvider.dragInventoryWidget); + } + + DevicePcmPlayerProvider.dragInventoryWidget = Language.getWidget(var6); + dragItemSlotSource = var5; + field751 = MouseHandler.MouseHandler_lastPressedX; + field752 = MouseHandler.MouseHandler_lastPressedY; + if (var2 >= 0) { + class208.method4017(var2); + } + + ScriptEvent.invalidateWidget(DevicePcmPlayerProvider.dragInventoryWidget); } } } - @ObfuscatedName("iu") + @ObfuscatedName("hb") @ObfuscatedSignature( signature = "(I)Z", - garbageValue = "-281326064" + garbageValue = "1175639323" ) @Export("shouldLeftClickOpenMenu") final boolean shouldLeftClickOpenMenu() { - int var1 = class16.getNewestMenuIdx(); - return (leftClickOpensMenu == 1 && menuOptionsCount > 2 || Occluder.method3415(var1)) && !menuShiftClick[var1]; + int var1 = menuOptionsCount - 1; + boolean var3 = leftClickOpensMenu == 1 && menuOptionsCount > 2; + if (!var3) { + boolean var4; + if (var1 < 0) { + var4 = false; + } else { + int var5 = menuOpcodes[var1]; + if (var5 >= 2000) { + var5 -= 2000; + } + + if (var5 == 1007) { + var4 = true; + } else { + var4 = false; + } + } + + var3 = var4; + } + + return var3 && !menuShiftClick[var1]; } - @ObfuscatedName("ie") + @ObfuscatedName("hz") @ObfuscatedSignature( - signature = "(IIS)V", - garbageValue = "-15485" + signature = "(III)V", + garbageValue = "-913599025" ) @Export("openMenu") final void openMenu(int var1, int var2) { - Decimator.calculateMenuBounds(var1, var2); - WorldMapArea.scene.menuOpen(Player.Client_plane, var1, var2, false); + MouseHandler.calculateMenuBounds(var1, var2); + class2.scene.menuOpen(ClientPacket.Client_plane, var1, var2, false); isMenuOpen = true; } - @ObfuscatedName("jy") + @ObfuscatedName("il") @ObfuscatedSignature( signature = "(ZI)V", - garbageValue = "-797725824" + garbageValue = "731320954" ) @Export("resizeRoot") final void resizeRoot(boolean var1) { - int var2 = rootInterface; - int var3 = class286.canvasWidth; - int var4 = FloorUnderlayDefinition.canvasHeight; - if (TextureProvider.loadInterface(var2)) { - Message.resizeInterface(Widget.Widget_interfaceComponents[var2], -1, var3, var4, var1); - } - + WorldMapSectionType.method272(rootInterface, BoundaryObject.canvasWidth, WorldMapCacheName.canvasHeight, var1); } - @ObfuscatedName("jl") + @ObfuscatedName("iu") @ObfuscatedSignature( - signature = "(Lhi;I)V", - garbageValue = "2023561891" + signature = "(Lhl;B)V", + garbageValue = "49" ) @Export("alignWidget") void alignWidget(Widget var1) { - Widget var2 = var1.parentId == -1 ? null : PacketBufferNode.getWidget(var1.parentId); + Widget var2 = var1.parentId == -1 ? null : Language.getWidget(var1.parentId); int var3; int var4; if (var2 == null) { - var3 = class286.canvasWidth; - var4 = FloorUnderlayDefinition.canvasHeight; + var3 = BoundaryObject.canvasWidth; + var4 = WorldMapCacheName.canvasHeight; } else { var3 = var2.width; var4 = var2.height; } - TriBool.alignWidgetSize(var1, var3, var4, false); - ObjectDefinition.alignWidgetPosition(var1, var3, var4); + WorldMapSection1.alignWidgetSize(var1, var3, var4, false); + PendingSpawn.alignWidgetPosition(var1, var3, var4); } - @ObfuscatedName("kr") + @ObfuscatedName("ju") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "296968633" + garbageValue = "2046016880" ) - final void method1414() { - GrandExchangeOfferAgeComparator.invalidateWidget(clickedWidget); - ++FloorDecoration.widgetDragDuration; - if (field695 && field809) { + final void method1503() { + ScriptEvent.invalidateWidget(clickedWidget); + ++class3.widgetDragDuration; + if (field823 && field820) { int var1 = MouseHandler.MouseHandler_x; int var2 = MouseHandler.MouseHandler_y; var1 -= widgetClickX; var2 -= widgetClickY; - if (var1 < field748) { - var1 = field748; + if (var1 < field698) { + var1 = field698; } - if (var1 + clickedWidget.width > field748 + clickedWidgetParent.width) { - var1 = field748 + clickedWidgetParent.width - clickedWidget.width; + if (var1 + clickedWidget.width > field698 + clickedWidgetParent.width) { + var1 = field698 + clickedWidgetParent.width - clickedWidget.width; } - if (var2 < field751) { - var2 = field751; + if (var2 < field822) { + var2 = field822; } - if (var2 + clickedWidget.height > field751 + clickedWidgetParent.height) { - var2 = field751 + clickedWidgetParent.height - clickedWidget.height; + if (var2 + clickedWidget.height > field822 + clickedWidgetParent.height) { + var2 = field822 + clickedWidgetParent.height - clickedWidget.height; } - int var3 = var1 - field846; - int var4 = var2 - field814; + int var3 = var1 - field808; + int var4 = var2 - field825; int var5 = clickedWidget.dragZoneSize; - if (FloorDecoration.widgetDragDuration > clickedWidget.dragThreshold && (var3 > var5 || var3 < -var5 || var4 > var5 || var4 < -var5)) { + if (class3.widgetDragDuration > clickedWidget.dragThreshold && (var3 > var5 || var3 < -var5 || var4 > var5 || var4 < -var5)) { isDraggingWidget = true; } - int var6 = var1 - field748 + clickedWidgetParent.scrollX; - int var7 = var2 - field751 + clickedWidgetParent.scrollY; + int var6 = var1 - field698 + clickedWidgetParent.scrollX; + int var7 = var2 - field822 + clickedWidgetParent.scrollY; ScriptEvent var8; if (clickedWidget.onDrag != null && isDraggingWidget) { var8 = new ScriptEvent(); @@ -6383,7 +5755,7 @@ public final class Client extends GameShell implements Usernamed { var8.mouseX = var6; var8.mouseY = var7; var8.args = clickedWidget.onDrag; - GrandExchangeOfferAgeComparator.runScriptEvent(var8); + WorldMapLabel.runScriptEvent(var8); } if (MouseHandler.MouseHandler_currentButton == 0) { @@ -6395,43 +5767,278 @@ public final class Client extends GameShell implements Usernamed { var8.mouseY = var7; var8.dragTarget = draggedOnWidget; var8.args = clickedWidget.onDragComplete; - GrandExchangeOfferAgeComparator.runScriptEvent(var8); + WorldMapLabel.runScriptEvent(var8); } - if (draggedOnWidget != null && TextureProvider.method2909(clickedWidget) != null) { - PacketBufferNode var9 = SoundSystem.getPacketBufferNode(ClientPacket.field2226, packetWriter.isaacCipher); - var9.packetBuffer.method5644(clickedWidget.itemId); - var9.packetBuffer.method5653(draggedOnWidget.id); - var9.packetBuffer.method5643(draggedOnWidget.childIndex); - var9.packetBuffer.method5644(clickedWidget.childIndex); - var9.packetBuffer.writeShortLE(draggedOnWidget.itemId); - var9.packetBuffer.method5653(clickedWidget.id); - packetWriter.addNode(var9); + if (draggedOnWidget != null) { + Widget var9 = clickedWidget; + int var11 = MenuAction.getWidgetClickMask(var9); + int var10 = var11 >> 17 & 7; + int var12 = var10; + Widget var17; + if (var10 == 0) { + var17 = null; + } else { + int var13 = 0; + + while (true) { + if (var13 >= var12) { + var17 = var9; + break; + } + + var9 = Language.getWidget(var9.parentId); + if (var9 == null) { + var17 = null; + break; + } + + ++var13; + } + } + + if (var17 != null) { + PacketBufferNode var14 = ModelData0.getPacketBufferNode(ClientPacket.field2301, packetWriter.isaacCipher); + var14.packetBuffer.writeInt(draggedOnWidget.id); + var14.packetBuffer.writeShort(draggedOnWidget.itemId); + var14.packetBuffer.writeShortLE(draggedOnWidget.childIndex); + var14.packetBuffer.method5811(clickedWidget.id); + var14.packetBuffer.writeShort(clickedWidget.itemId); + var14.packetBuffer.method5636(clickedWidget.childIndex); + packetWriter.addNode(var14); + } } } else if (this.shouldLeftClickOpenMenu()) { - this.openMenu(widgetClickX + field846, widgetClickY + field814); + this.openMenu(widgetClickX + field808, widgetClickY + field825); } else if (menuOptionsCount > 0) { - AbstractWorldMapData.method325(widgetClickX + field846, widgetClickY + field814); + int var15 = field808 + widgetClickX; + int var16 = field825 + widgetClickY; + Language.method3705(Tiles.tempMenuAction, var15, var16); + Tiles.tempMenuAction = null; } clickedWidget = null; } } else { - if (FloorDecoration.widgetDragDuration > 1) { + if (class3.widgetDragDuration > 1) { clickedWidget = null; } } } - @ObfuscatedName("lz") + @ObfuscatedName("kt") @ObfuscatedSignature( - signature = "(S)Lju;", - garbageValue = "1353" + signature = "(B)Ljb;", + garbageValue = "70" ) @Export("username") public Username username() { return class215.localPlayer != null ? class215.localPlayer.username : null; } + + @ObfuscatedName("u") + @ObfuscatedSignature( + signature = "(II)Ljava/lang/String;", + garbageValue = "1566884695" + ) + static String method1749(int var0) { + return ""; + } + + @ObfuscatedName("b") + @ObfuscatedSignature( + signature = "(II)I", + garbageValue = "-1744005886" + ) + public static int method1655(int var0) { + return var0 >> 11 & 63; + } + + @ObfuscatedName("p") + @ObfuscatedSignature( + signature = "(Lkj;II)Z", + garbageValue = "-304415456" + ) + @Export("updateExternalPlayer") + static boolean updateExternalPlayer(PacketBuffer var0, int var1) { + int var2 = var0.readBits(2); + int var3; + int var4; + int var7; + int var8; + int var9; + int var10; + if (var2 == 0) { + if (var0.readBits(1) != 0) { + updateExternalPlayer(var0, var1); + } + + var3 = var0.readBits(13); + var4 = var0.readBits(13); + boolean var12 = var0.readBits(1) == 1; + if (var12) { + Players.Players_pendingUpdateIndices[++Players.Players_pendingUpdateCount - 1] = var1; + } + + if (players[var1] != null) { + throw new RuntimeException(); + } else { + Player var6 = players[var1] = new Player(); + var6.index = var1; + if (Players.field1248[var1] != null) { + var6.read(Players.field1248[var1]); + } + + var6.orientation = Players.Players_orientations[var1]; + var6.targetIndex = Players.Players_targetIndices[var1]; + var7 = Players.Players_regions[var1]; + var8 = var7 >> 28; + var9 = var7 >> 14 & 255; + var10 = var7 & 255; + var6.pathTraversed[0] = Players.field1247[var1]; + var6.plane = (byte)var8; + var6.resetPath((var9 << 13) + var3 - class51.baseX * 64, (var10 << 13) + var4 - VarcInt.baseY * 64); + var6.field630 = false; + return true; + } + } else if (var2 == 1) { + var3 = var0.readBits(2); + var4 = Players.Players_regions[var1]; + Players.Players_regions[var1] = (((var4 >> 28) + var3 & 3) << 28) + (var4 & 268435455); + return false; + } else { + int var5; + int var11; + if (var2 == 2) { + var3 = var0.readBits(5); + var4 = var3 >> 3; + var5 = var3 & 7; + var11 = Players.Players_regions[var1]; + var7 = (var11 >> 28) + var4 & 3; + var8 = var11 >> 14 & 255; + var9 = var11 & 255; + if (var5 == 0) { + --var8; + --var9; + } + + if (var5 == 1) { + --var9; + } + + if (var5 == 2) { + ++var8; + --var9; + } + + if (var5 == 3) { + --var8; + } + + if (var5 == 4) { + ++var8; + } + + if (var5 == 5) { + --var8; + ++var9; + } + + if (var5 == 6) { + ++var9; + } + + if (var5 == 7) { + ++var8; + ++var9; + } + + Players.Players_regions[var1] = (var8 << 14) + var9 + (var7 << 28); + return false; + } else { + var3 = var0.readBits(18); + var4 = var3 >> 16; + var5 = var3 >> 8 & 255; + var11 = var3 & 255; + var7 = Players.Players_regions[var1]; + var8 = (var7 >> 28) + var4 & 3; + var9 = var5 + (var7 >> 14) & 255; + var10 = var11 + var7 & 255; + Players.Players_regions[var1] = (var9 << 14) + var10 + (var8 << 28); + return false; + } + } + } + + @ObfuscatedName("hx") + @ObfuscatedSignature( + signature = "(II)V", + garbageValue = "-360381512" + ) + static final void method1746(int var0) { + int[] var1 = Interpreter.sceneMinimapSprite.pixels; + int var2 = var1.length; + + int var3; + for (var3 = 0; var3 < var2; ++var3) { + var1[var3] = 0; + } + + int var4; + int var5; + for (var3 = 1; var3 < 103; ++var3) { + var4 = (103 - var3) * 2048 + 24628; + + for (var5 = 1; var5 < 103; ++var5) { + if ((Tiles.Tiles_renderFlags[var0][var5][var3] & 24) == 0) { + class2.scene.drawTileMinimap(var1, var4, 512, var0, var5, var3); + } + + if (var0 < 3 && (Tiles.Tiles_renderFlags[var0 + 1][var5][var3] & 8) != 0) { + class2.scene.drawTileMinimap(var1, var4, 512, var0 + 1, var5, var3); + } + + var4 += 4; + } + } + + var3 = (238 + (int)(Math.random() * 20.0D) - 10 << 16) + (238 + (int)(Math.random() * 20.0D) - 10 << 8) + (238 + (int)(Math.random() * 20.0D) - 10); + var4 = 238 + (int)(Math.random() * 20.0D) - 10 << 16; + Interpreter.sceneMinimapSprite.setRaster(); + + int var6; + for (var5 = 1; var5 < 103; ++var5) { + for (var6 = 1; var6 < 103; ++var6) { + if ((Tiles.Tiles_renderFlags[var0][var6][var5] & 24) == 0) { + World.drawObject(var0, var6, var5, var3, var4); + } + + if (var0 < 3 && (Tiles.Tiles_renderFlags[var0 + 1][var6][var5] & 8) != 0) { + World.drawObject(var0 + 1, var6, var5, var3, var4); + } + } + } + + mapIconCount = 0; + + for (var5 = 0; var5 < 104; ++var5) { + for (var6 = 0; var6 < 104; ++var6) { + long var7 = class2.scene.getFloorDecorationTag(ClientPacket.Client_plane, var5, var6); + if (var7 != 0L) { + int var9 = ItemContainer.Entity_unpackID(var7); + int var10 = Occluder.getObjectDefinition(var9).mapIconId; + if (var10 >= 0) { + mapIcons[mapIconCount] = Varcs.WorldMapElement_get(var10).getSpriteBool(false); + mapIconXs[mapIconCount] = var5; + mapIconYs[mapIconCount] = var6; + ++mapIconCount; + } + } + } + } + + DirectByteArrayCopier.rasterProvider.apply(); + } } diff --git a/runescape-client/src/main/java/ClientPacket.java b/runescape-client/src/main/java/ClientPacket.java index 4dd2bab7f9..23a1ef2bf4 100644 --- a/runescape-client/src/main/java/ClientPacket.java +++ b/runescape-client/src/main/java/ClientPacket.java @@ -1,641 +1,650 @@ -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStreamWriter; -import java.net.URL; -import java.net.URLConnection; -import java.util.Random; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("gx") +@ObfuscatedName("gj") @Implements("ClientPacket") public class ClientPacket implements class181 { - @ObfuscatedName("a") + @ObfuscatedName("qy") @ObfuscatedSignature( - signature = "Lgx;" + signature = "Lca;" ) - public static final ClientPacket field2228; - @ObfuscatedName("t") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2220; - @ObfuscatedName("n") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2181; - @ObfuscatedName("q") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2182; - @ObfuscatedName("v") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2183; - @ObfuscatedName("l") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2184; - @ObfuscatedName("c") - @ObfuscatedSignature( - signature = "Lgx;" - ) - static final ClientPacket field2189; - @ObfuscatedName("o") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2186; - @ObfuscatedName("i") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2187; - @ObfuscatedName("d") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2252; - @ObfuscatedName("m") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2209; - @ObfuscatedName("p") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2277; - @ObfuscatedName("h") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2282; - @ObfuscatedName("k") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2192; - @ObfuscatedName("x") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2193; - @ObfuscatedName("j") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2202; - @ObfuscatedName("r") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2195; - @ObfuscatedName("e") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2196; - @ObfuscatedName("s") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2197; - @ObfuscatedName("b") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2198; - @ObfuscatedName("z") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2199; - @ObfuscatedName("f") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2188; - @ObfuscatedName("g") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2256; - @ObfuscatedName("w") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2191; + @Export("pcmStreamMixer") + static PcmStreamMixer pcmStreamMixer; @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lgx;" + signature = "Lgj;" ) - public static final ClientPacket field2231; - @ObfuscatedName("y") + public static final ClientPacket field2322; + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2204; - @ObfuscatedName("aa") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2205; - @ObfuscatedName("aw") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2206; - @ObfuscatedName("ar") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2207; - @ObfuscatedName("aq") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2208; - @ObfuscatedName("ad") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2200; - @ObfuscatedName("ag") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2210; - @ObfuscatedName("ak") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2211; - @ObfuscatedName("av") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2201; - @ObfuscatedName("am") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2213; - @ObfuscatedName("ab") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2214; - @ObfuscatedName("ax") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2180; - @ObfuscatedName("al") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2216; - @ObfuscatedName("ap") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2217; - @ObfuscatedName("aj") - @ObfuscatedSignature( - signature = "Lgx;" + signature = "Lgj;" ) public static final ClientPacket field2218; - @ObfuscatedName("ae") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Lgx;" + signature = "Lgj;" ) - public static final ClientPacket field2219; - @ObfuscatedName("au") + public static final ClientPacket field2299; + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Lgx;" + signature = "Lgj;" ) - public static final ClientPacket field2179; - @ObfuscatedName("ah") + public static final ClientPacket field2220; + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2238; - @ObfuscatedName("an") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2222; - @ObfuscatedName("af") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2190; - @ObfuscatedName("ay") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2224; - @ObfuscatedName("az") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2225; - @ObfuscatedName("ao") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2226; - @ObfuscatedName("ai") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2227; - @ObfuscatedName("ac") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2280; - @ObfuscatedName("at") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2229; - @ObfuscatedName("as") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2230; - @ObfuscatedName("ba") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2273; - @ObfuscatedName("bg") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2232; - @ObfuscatedName("bc") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2233; - @ObfuscatedName("bd") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2258; - @ObfuscatedName("bx") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2235; - @ObfuscatedName("bl") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2236; - @ObfuscatedName("bh") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2237; - @ObfuscatedName("bu") - @ObfuscatedSignature( - signature = "Lgx;" - ) - static final ClientPacket field2261; - @ObfuscatedName("br") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2239; - @ObfuscatedName("bq") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2247; - @ObfuscatedName("bi") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2185; - @ObfuscatedName("be") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2242; - @ObfuscatedName("bt") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2243; - @ObfuscatedName("bs") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2244; - @ObfuscatedName("bj") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2245; - @ObfuscatedName("bm") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2246; - @ObfuscatedName("bn") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2215; - @ObfuscatedName("bz") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2248; - @ObfuscatedName("bo") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2255; - @ObfuscatedName("bk") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2250; - @ObfuscatedName("bv") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2251; - @ObfuscatedName("bw") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2249; - @ObfuscatedName("bb") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2253; - @ObfuscatedName("bf") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2254; - @ObfuscatedName("by") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2257; - @ObfuscatedName("bp") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2241; - @ObfuscatedName("cx") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2234; - @ObfuscatedName("cv") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2270; - @ObfuscatedName("ce") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2259; - @ObfuscatedName("cw") - @ObfuscatedSignature( - signature = "Lgx;" + signature = "Lgj;" ) public static final ClientPacket field2221; - @ObfuscatedName("cd") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "Lgx;" + signature = "Lgj;" ) - public static final ClientPacket field2260; - @ObfuscatedName("cn") + public static final ClientPacket field2222; + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "Lgx;" + signature = "Lgj;" ) - public static final ClientPacket field2262; - @ObfuscatedName("cr") + public static final ClientPacket field2217; + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2263; - @ObfuscatedName("ci") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2264; - @ObfuscatedName("cy") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2265; - @ObfuscatedName("cl") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2266; - @ObfuscatedName("co") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2267; - @ObfuscatedName("cu") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2268; - @ObfuscatedName("cz") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2269; - @ObfuscatedName("cq") - @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2276; - @ObfuscatedName("cj") - @ObfuscatedSignature( - signature = "Lgx;" + signature = "Lgj;" ) public static final ClientPacket field2271; - @ObfuscatedName("cm") + @ObfuscatedName("w") @ObfuscatedSignature( - signature = "Lgx;" + signature = "Lgj;" ) - public static final ClientPacket field2272; - @ObfuscatedName("cb") + public static final ClientPacket field2313; + @ObfuscatedName("i") @ObfuscatedSignature( - signature = "Lgx;" + signature = "Lgj;" ) - static final ClientPacket field2203; - @ObfuscatedName("cp") + public static final ClientPacket field2226; + @ObfuscatedName("k") @ObfuscatedSignature( - signature = "Lgx;" + signature = "Lgj;" ) - public static final ClientPacket field2274; - @ObfuscatedName("cs") + public static final ClientPacket field2303; + @ObfuscatedName("x") @ObfuscatedSignature( - signature = "Lgx;" + signature = "Lgj;" + ) + public static final ClientPacket field2228; + @ObfuscatedName("o") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2229; + @ObfuscatedName("e") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2315; + @ObfuscatedName("n") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2231; + @ObfuscatedName("r") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2232; + @ObfuscatedName("c") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2237; + @ObfuscatedName("a") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2233; + @ObfuscatedName("d") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2235; + @ObfuscatedName("s") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2224; + @ObfuscatedName("t") + @ObfuscatedSignature( + signature = "Lgj;" ) public static final ClientPacket field2275; - @ObfuscatedName("ck") + @ObfuscatedName("m") @ObfuscatedSignature( - signature = "Lgx;" + signature = "Lgj;" ) - public static final ClientPacket field2223; - @ObfuscatedName("ct") + public static final ClientPacket field2238; + @ObfuscatedName("v") @ObfuscatedSignature( - signature = "Lgx;" + signature = "Lgj;" ) - public static final ClientPacket field2194; - @ObfuscatedName("cc") + public static final ClientPacket field2227; + @ObfuscatedName("q") @ObfuscatedSignature( - signature = "Lgx;" - ) - public static final ClientPacket field2278; - @ObfuscatedName("ch") - @ObfuscatedSignature( - signature = "Lgx;" + signature = "Lgj;" ) public static final ClientPacket field2240; - @ObfuscatedName("gk") - @Export("xteaKeys") - static int[][] xteaKeys; + @ObfuscatedName("l") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2241; + @ObfuscatedName("j") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2242; + @ObfuscatedName("af") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2243; + @ObfuscatedName("ad") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2276; + @ObfuscatedName("am") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2245; + @ObfuscatedName("ai") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2244; + @ObfuscatedName("ag") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2268; + @ObfuscatedName("ao") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2248; + @ObfuscatedName("aw") + @ObfuscatedSignature( + signature = "Lgj;" + ) + static final ClientPacket field2249; + @ObfuscatedName("ak") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2250; + @ObfuscatedName("aa") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2251; + @ObfuscatedName("ab") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2252; + @ObfuscatedName("ar") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2253; + @ObfuscatedName("av") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2266; + @ObfuscatedName("aq") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2255; + @ObfuscatedName("ac") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2236; + @ObfuscatedName("az") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2257; + @ObfuscatedName("at") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2258; + @ObfuscatedName("ae") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2304; + @ObfuscatedName("aj") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2260; + @ObfuscatedName("ap") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2261; + @ObfuscatedName("an") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2311; + @ObfuscatedName("al") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2263; + @ObfuscatedName("ay") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2223; + @ObfuscatedName("ax") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2292; + @ObfuscatedName("au") + @ObfuscatedSignature( + signature = "Lgj;" + ) + static final ClientPacket field2262; + @ObfuscatedName("as") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2267; + @ObfuscatedName("ah") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2264; + @ObfuscatedName("bi") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2293; + @ObfuscatedName("bo") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2270; + @ObfuscatedName("bx") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2273; + @ObfuscatedName("bu") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2259; + @ObfuscatedName("bd") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2316; + @ObfuscatedName("bn") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2274; + @ObfuscatedName("bj") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2256; + @ObfuscatedName("bm") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2247; + @ObfuscatedName("bq") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2277; + @ObfuscatedName("bf") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2278; + @ObfuscatedName("by") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2279; + @ObfuscatedName("br") + @ObfuscatedSignature( + signature = "Lgj;" + ) + static final ClientPacket field2280; + @ObfuscatedName("ba") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2281; + @ObfuscatedName("bb") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2282; + @ObfuscatedName("bg") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2283; + @ObfuscatedName("bw") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2284; + @ObfuscatedName("be") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2285; + @ObfuscatedName("bt") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2286; + @ObfuscatedName("bl") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2287; + @ObfuscatedName("bp") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2288; + @ObfuscatedName("bv") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2230; + @ObfuscatedName("bs") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2290; + @ObfuscatedName("bz") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2291; + @ObfuscatedName("bc") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2319; + @ObfuscatedName("bh") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2295; + @ObfuscatedName("bk") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2294; + @ObfuscatedName("cm") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2265; + @ObfuscatedName("cd") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2296; + @ObfuscatedName("cv") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2297; + @ObfuscatedName("cl") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2298; @ObfuscatedName("cg") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2246; + @ObfuscatedName("ch") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2300; + @ObfuscatedName("co") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2301; + @ObfuscatedName("cr") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2302; + @ObfuscatedName("ck") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2234; + @ObfuscatedName("cb") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2269; + @ObfuscatedName("cy") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2305; + @ObfuscatedName("cn") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2225; + @ObfuscatedName("cj") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2219; + @ObfuscatedName("cq") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2308; + @ObfuscatedName("ci") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2309; + @ObfuscatedName("cu") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2310; + @ObfuscatedName("cs") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2289; + @ObfuscatedName("cc") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2317; + @ObfuscatedName("cp") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2312; + @ObfuscatedName("ce") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2314; + @ObfuscatedName("ca") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2254; + @ObfuscatedName("cf") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2306; + @ObfuscatedName("cx") + @ObfuscatedSignature( + signature = "Lgj;" + ) + public static final ClientPacket field2272; + @ObfuscatedName("db") + @ObfuscatedSignature( + signature = "Lij;" + ) + @Export("archive7") + static Archive archive7; + @ObfuscatedName("jh") @ObfuscatedGetter( - intValue = -495540295 + intValue = 222528841 + ) + @Export("Client_plane") + static int Client_plane; + @ObfuscatedName("cz") + @ObfuscatedGetter( + intValue = 896326747 ) @Export("id") final int id; - @ObfuscatedName("cf") + @ObfuscatedName("ct") @ObfuscatedGetter( - intValue = -1101670465 + intValue = 1444150799 ) @Export("length") final int length; static { - field2228 = new ClientPacket(0, 9); - field2220 = new ClientPacket(1, 4); - field2181 = new ClientPacket(2, 3); - field2182 = new ClientPacket(3, -1); - field2183 = new ClientPacket(4, -1); - field2184 = new ClientPacket(5, 15); - field2189 = new ClientPacket(6, -1); - field2186 = new ClientPacket(7, 8); - field2187 = new ClientPacket(8, -2); - field2252 = new ClientPacket(9, 4); - field2209 = new ClientPacket(10, 1); - field2277 = new ClientPacket(11, 6); - field2282 = new ClientPacket(12, 3); - field2192 = new ClientPacket(13, 7); - field2193 = new ClientPacket(14, 3); - field2202 = new ClientPacket(15, -1); - field2195 = new ClientPacket(16, -1); - field2196 = new ClientPacket(17, 8); - field2197 = new ClientPacket(18, -1); - field2198 = new ClientPacket(19, 2); - field2199 = new ClientPacket(20, -1); - field2188 = new ClientPacket(21, 3); - field2256 = new ClientPacket(22, 3); - field2191 = new ClientPacket(23, 8); - field2231 = new ClientPacket(24, 3); - field2204 = new ClientPacket(25, -1); - field2205 = new ClientPacket(26, 9); - field2206 = new ClientPacket(27, 11); - field2207 = new ClientPacket(28, -2); - field2208 = new ClientPacket(29, 7); - field2200 = new ClientPacket(30, 7); - field2210 = new ClientPacket(31, 0); - field2211 = new ClientPacket(32, 8); - field2201 = new ClientPacket(33, -1); - field2213 = new ClientPacket(34, -1); - field2214 = new ClientPacket(35, 7); - field2180 = new ClientPacket(36, 9); - field2216 = new ClientPacket(37, 6); - field2217 = new ClientPacket(38, 9); - field2218 = new ClientPacket(39, 8); - field2219 = new ClientPacket(40, 8); - field2179 = new ClientPacket(41, 2); - field2238 = new ClientPacket(42, 0); - field2222 = new ClientPacket(43, 2); - field2190 = new ClientPacket(44, 8); - field2224 = new ClientPacket(45, 7); - field2225 = new ClientPacket(46, 3); - field2226 = new ClientPacket(47, 16); - field2227 = new ClientPacket(48, -1); - field2280 = new ClientPacket(49, 0); - field2229 = new ClientPacket(50, 3); - field2230 = new ClientPacket(51, -2); - field2273 = new ClientPacket(52, 8); - field2232 = new ClientPacket(53, 10); - field2233 = new ClientPacket(54, 11); - field2258 = new ClientPacket(55, 8); - field2235 = new ClientPacket(56, 3); - field2236 = new ClientPacket(57, 3); - field2237 = new ClientPacket(58, 8); - field2261 = new ClientPacket(59, 2); - field2239 = new ClientPacket(60, 4); - field2247 = new ClientPacket(61, -1); - field2185 = new ClientPacket(62, 8); - field2242 = new ClientPacket(63, 16); - field2243 = new ClientPacket(64, -1); - field2244 = new ClientPacket(65, 7); - field2245 = new ClientPacket(66, 0); - field2246 = new ClientPacket(67, -1); - field2215 = new ClientPacket(68, 8); - field2248 = new ClientPacket(69, 8); - field2255 = new ClientPacket(70, -1); - field2250 = new ClientPacket(71, 8); - field2251 = new ClientPacket(72, 3); - field2249 = new ClientPacket(73, 15); - field2253 = new ClientPacket(74, 8); - field2254 = new ClientPacket(75, 13); - field2257 = new ClientPacket(76, 5); - field2241 = new ClientPacket(77, 14); - field2234 = new ClientPacket(78, 3); - field2270 = new ClientPacket(79, 7); - field2259 = new ClientPacket(80, 8); - field2221 = new ClientPacket(81, 4); - field2260 = new ClientPacket(82, 8); - field2262 = new ClientPacket(83, 2); - field2263 = new ClientPacket(84, 8); - field2264 = new ClientPacket(85, 13); - field2265 = new ClientPacket(86, 0); - field2266 = new ClientPacket(87, -1); - field2267 = new ClientPacket(88, -1); - field2268 = new ClientPacket(89, 3); - field2269 = new ClientPacket(90, 7); - field2276 = new ClientPacket(91, 8); - field2271 = new ClientPacket(92, 4); - field2272 = new ClientPacket(93, 3); - field2203 = new ClientPacket(94, 7); - field2274 = new ClientPacket(95, 16); - field2275 = new ClientPacket(96, -1); - field2223 = new ClientPacket(97, 13); - field2194 = new ClientPacket(98, 8); - field2278 = new ClientPacket(99, 7); - field2240 = new ClientPacket(100, 7); + field2322 = new ClientPacket(0, 13); + field2218 = new ClientPacket(1, 5); + field2299 = new ClientPacket(2, 8); + field2220 = new ClientPacket(3, 7); + field2221 = new ClientPacket(4, -1); + field2222 = new ClientPacket(5, 8); + field2217 = new ClientPacket(6, -1); + field2271 = new ClientPacket(7, 9); + field2313 = new ClientPacket(8, 8); + field2226 = new ClientPacket(9, 7); + field2303 = new ClientPacket(10, 8); + field2228 = new ClientPacket(11, 10); + field2229 = new ClientPacket(12, -2); + field2315 = new ClientPacket(13, 8); + field2231 = new ClientPacket(14, 3); + field2232 = new ClientPacket(15, 16); + field2237 = new ClientPacket(16, 7); + field2233 = new ClientPacket(17, 7); + field2235 = new ClientPacket(18, 8); + field2224 = new ClientPacket(19, 6); + field2275 = new ClientPacket(20, 6); + field2238 = new ClientPacket(21, 3); + field2227 = new ClientPacket(22, 7); + field2240 = new ClientPacket(23, 8); + field2241 = new ClientPacket(24, 3); + field2242 = new ClientPacket(25, 3); + field2243 = new ClientPacket(26, 3); + field2276 = new ClientPacket(27, 8); + field2245 = new ClientPacket(28, 3); + field2244 = new ClientPacket(29, 15); + field2268 = new ClientPacket(30, -1); + field2248 = new ClientPacket(31, 16); + field2249 = new ClientPacket(32, 2); + field2250 = new ClientPacket(33, 8); + field2251 = new ClientPacket(34, 3); + field2252 = new ClientPacket(35, 7); + field2253 = new ClientPacket(36, 8); + field2266 = new ClientPacket(37, -1); + field2255 = new ClientPacket(38, 3); + field2236 = new ClientPacket(39, 7); + field2257 = new ClientPacket(40, 3); + field2258 = new ClientPacket(41, 2); + field2304 = new ClientPacket(42, 2); + field2260 = new ClientPacket(43, 4); + field2261 = new ClientPacket(44, 3); + field2311 = new ClientPacket(45, 0); + field2263 = new ClientPacket(46, 13); + field2223 = new ClientPacket(47, 0); + field2292 = new ClientPacket(48, 7); + field2262 = new ClientPacket(49, -1); + field2267 = new ClientPacket(50, 3); + field2264 = new ClientPacket(51, 7); + field2293 = new ClientPacket(52, 2); + field2270 = new ClientPacket(53, 3); + field2273 = new ClientPacket(54, 8); + field2259 = new ClientPacket(55, 8); + field2316 = new ClientPacket(56, 11); + field2274 = new ClientPacket(57, 4); + field2256 = new ClientPacket(58, -1); + field2247 = new ClientPacket(59, 8); + field2277 = new ClientPacket(60, -1); + field2278 = new ClientPacket(61, 0); + field2279 = new ClientPacket(62, 8); + field2280 = new ClientPacket(63, 7); + field2281 = new ClientPacket(64, -2); + field2282 = new ClientPacket(65, -1); + field2283 = new ClientPacket(66, -1); + field2284 = new ClientPacket(67, 15); + field2285 = new ClientPacket(68, 9); + field2286 = new ClientPacket(69, 11); + field2287 = new ClientPacket(70, 8); + field2288 = new ClientPacket(71, 2); + field2230 = new ClientPacket(72, 4); + field2290 = new ClientPacket(73, -2); + field2291 = new ClientPacket(74, 4); + field2319 = new ClientPacket(75, -1); + field2295 = new ClientPacket(76, 4); + field2294 = new ClientPacket(77, 8); + field2265 = new ClientPacket(78, 3); + field2296 = new ClientPacket(79, -1); + field2297 = new ClientPacket(80, 7); + field2298 = new ClientPacket(81, 8); + field2246 = new ClientPacket(82, -1); + field2300 = new ClientPacket(83, 9); + field2301 = new ClientPacket(84, 16); + field2302 = new ClientPacket(85, -1); + field2234 = new ClientPacket(86, 0); + field2269 = new ClientPacket(87, 14); + field2305 = new ClientPacket(88, -1); + field2225 = new ClientPacket(89, 9); + field2219 = new ClientPacket(90, -1); + field2308 = new ClientPacket(91, 3); + field2309 = new ClientPacket(92, 1); + field2310 = new ClientPacket(93, 8); + field2289 = new ClientPacket(94, -1); + field2317 = new ClientPacket(95, 8); + field2312 = new ClientPacket(96, -1); + field2314 = new ClientPacket(97, -1); + field2254 = new ClientPacket(98, 13); + field2306 = new ClientPacket(99, 8); + field2272 = new ClientPacket(100, 0); } ClientPacket(int var1, int var2) { @@ -643,428 +652,735 @@ public class ClientPacket implements class181 { this.length = var2; } - @ObfuscatedName("v") + @ObfuscatedName("w") @ObfuscatedSignature( - signature = "(Lkf;II)V", - garbageValue = "1627354797" + signature = "(Lky;Lky;Lky;I)V", + garbageValue = "-375424606" ) - @Export("readPlayerUpdate") - static void readPlayerUpdate(PacketBuffer var0, int var1) { - boolean var2 = var0.readBits(1) == 1; - if (var2) { - Players.Players_pendingUpdateIndices[++Players.Players_pendingUpdateCount - 1] = var1; - } - - int var3 = var0.readBits(2); - Player var4 = Client.players[var1]; - if (var3 == 0) { - if (var2) { - var4.field606 = false; - } else if (Client.localPlayerIndex == var1) { - throw new RuntimeException(); - } else { - Players.Players_regions[var1] = (var4.plane << 28) + (HealthBar.baseY * 64 + var4.pathY[0] >> 13) + (UserComparator8.baseX * 64 + var4.pathX[0] >> 13 << 14); - if (var4.field934 != -1) { - Players.Players_orientations[var1] = var4.field934; - } else { - Players.Players_orientations[var1] = var4.orientation; - } - - Players.Players_targetIndices[var1] = var4.targetIndex; - Client.players[var1] = null; - if (var0.readBits(1) != 0) { - class247.updateExternalPlayer(var0, var1); - } - + @Export("drawTitle") + static void drawTitle(Font var0, Font var1, Font var2) { + Login.xPadding = (BoundaryObject.canvasWidth - 765) / 2; + Login.loginBoxX = Login.xPadding + 202; + GrandExchangeOfferOwnWorldComparator.loginBoxCenter = Login.loginBoxX + 180; + int var6; + int var9; + byte var23; + int var24; + int var26; + int var31; + int var38; + if (Login.worldSelectOpen) { + if (class42.worldSelectBackSprites == null) { + class42.worldSelectBackSprites = GraphicsDefaults.method5997(WorldMapRegion.archive8, "sl_back", ""); } - } else { - int var5; - int var6; - int var7; - if (var3 == 1) { - var5 = var0.readBits(3); - var6 = var4.pathX[0]; - var7 = var4.pathY[0]; - if (var5 == 0) { - --var6; - --var7; - } else if (var5 == 1) { - --var7; - } else if (var5 == 2) { - ++var6; - --var7; - } else if (var5 == 3) { - --var6; - } else if (var5 == 4) { - ++var6; - } else if (var5 == 5) { - --var6; - ++var7; - } else if (var5 == 6) { - ++var7; - } else if (var5 == 7) { - ++var6; - ++var7; + + IndexedSprite[] var7; + Archive var30; + if (ItemContainer.worldSelectFlagSprites == null) { + var30 = WorldMapRegion.archive8; + var31 = var30.getGroupId("sl_flags"); + var6 = var30.getFileId(var31, ""); + if (!GraphicsObject.method2030(var30, var31, var6)) { + var7 = null; + } else { + var7 = WallDecoration.method3341(); } - if (Client.localPlayerIndex != var1 || var4.x >= 1536 && var4.y >= 1536 && var4.x < 11776 && var4.y < 11776) { - if (var2) { - var4.field606 = true; - var4.tileX = var6; - var4.tileY = var7; + ItemContainer.worldSelectFlagSprites = var7; + } + + if (class40.worldSelectArrows == null) { + var30 = WorldMapRegion.archive8; + var31 = var30.getGroupId("sl_arrows"); + var6 = var30.getFileId(var31, ""); + if (!GraphicsObject.method2030(var30, var31, var6)) { + var7 = null; + } else { + var7 = WallDecoration.method3341(); + } + + class40.worldSelectArrows = var7; + } + + if (GraphicsObject.worldSelectStars == null) { + var30 = WorldMapRegion.archive8; + var31 = var30.getGroupId("sl_stars"); + var6 = var30.getFileId(var31, ""); + if (!GraphicsObject.method2030(var30, var31, var6)) { + var7 = null; + } else { + var7 = WallDecoration.method3341(); + } + + GraphicsObject.worldSelectStars = var7; + } + + if (Skills.worldSelectLeftSprite == null) { + Skills.worldSelectLeftSprite = BZip2State.SpriteBuffer_getIndexedSpriteByName(WorldMapRegion.archive8, "leftarrow", ""); + } + + if (KitDefinition.worldSelectRightSprite == null) { + KitDefinition.worldSelectRightSprite = BZip2State.SpriteBuffer_getIndexedSpriteByName(WorldMapRegion.archive8, "rightarrow", ""); + } + + Rasterizer2D.Rasterizer2D_fillRectangle(Login.xPadding, 23, 765, 480, 0); + Rasterizer2D.Rasterizer2D_fillRectangleGradient(Login.xPadding, 0, 125, 23, 12425273, 9135624); + Rasterizer2D.Rasterizer2D_fillRectangleGradient(Login.xPadding + 125, 0, 640, 23, 5197647, 2697513); + var0.drawCentered("Select a world", Login.xPadding + 62, 15, 0, -1); + if (GraphicsObject.worldSelectStars != null) { + GraphicsObject.worldSelectStars[1].drawAt(Login.xPadding + 140, 1); + var1.draw("Members only world", Login.xPadding + 152, 10, 16777215, -1); + GraphicsObject.worldSelectStars[0].drawAt(Login.xPadding + 140, 12); + var1.draw("Free world", Login.xPadding + 152, 21, 16777215, -1); + } + + if (class40.worldSelectArrows != null) { + var38 = Login.xPadding + 280; + if (World.World_sortOption1[0] == 0 && World.World_sortOption2[0] == 0) { + class40.worldSelectArrows[2].drawAt(var38, 4); + } else { + class40.worldSelectArrows[0].drawAt(var38, 4); + } + + if (World.World_sortOption1[0] == 0 && World.World_sortOption2[0] == 1) { + class40.worldSelectArrows[3].drawAt(var38 + 15, 4); + } else { + class40.worldSelectArrows[1].drawAt(var38 + 15, 4); + } + + var0.draw("World", var38 + 32, 17, 16777215, -1); + var24 = Login.xPadding + 390; + if (World.World_sortOption1[0] == 1 && World.World_sortOption2[0] == 0) { + class40.worldSelectArrows[2].drawAt(var24, 4); + } else { + class40.worldSelectArrows[0].drawAt(var24, 4); + } + + if (World.World_sortOption1[0] == 1 && World.World_sortOption2[0] == 1) { + class40.worldSelectArrows[3].drawAt(var24 + 15, 4); + } else { + class40.worldSelectArrows[1].drawAt(var24 + 15, 4); + } + + var0.draw("Players", var24 + 32, 17, 16777215, -1); + var31 = Login.xPadding + 500; + if (World.World_sortOption1[0] == 2 && World.World_sortOption2[0] == 0) { + class40.worldSelectArrows[2].drawAt(var31, 4); + } else { + class40.worldSelectArrows[0].drawAt(var31, 4); + } + + if (World.World_sortOption1[0] == 2 && World.World_sortOption2[0] == 1) { + class40.worldSelectArrows[3].drawAt(var31 + 15, 4); + } else { + class40.worldSelectArrows[1].drawAt(var31 + 15, 4); + } + + var0.draw("Location", var31 + 32, 17, 16777215, -1); + var6 = Login.xPadding + 610; + if (World.World_sortOption1[0] == 3 && World.World_sortOption2[0] == 0) { + class40.worldSelectArrows[2].drawAt(var6, 4); + } else { + class40.worldSelectArrows[0].drawAt(var6, 4); + } + + if (World.World_sortOption1[0] == 3 && World.World_sortOption2[0] == 1) { + class40.worldSelectArrows[3].drawAt(var6 + 15, 4); + } else { + class40.worldSelectArrows[1].drawAt(var6 + 15, 4); + } + + var0.draw("Type", var6 + 32, 17, 16777215, -1); + } + + Rasterizer2D.Rasterizer2D_fillRectangle(Login.xPadding + 708, 4, 50, 16, 0); + var1.drawCentered("Cancel", Login.xPadding + 708 + 25, 16, 16777215, -1); + Login.hoveredWorldIndex = -1; + if (class42.worldSelectBackSprites != null) { + var23 = 88; + byte var42 = 19; + var31 = 765 / (var23 + 1) - 1; + var6 = 480 / (var42 + 1); + + int var34; + do { + var26 = var6; + var34 = var31; + if (var6 * (var31 - 1) >= World.World_count) { + --var31; + } + + if (var31 * (var6 - 1) >= World.World_count) { + --var6; + } + + if (var31 * (var6 - 1) >= World.World_count) { + --var6; + } + } while(var26 != var6 || var31 != var34); + + var26 = (765 - var23 * var31) / (var31 + 1); + if (var26 > 5) { + var26 = 5; + } + + var34 = (480 - var6 * var42) / (var6 + 1); + if (var34 > 5) { + var34 = 5; + } + + var9 = (765 - var23 * var31 - var26 * (var31 - 1)) / 2; + int var35 = (480 - var6 * var42 - var34 * (var6 - 1)) / 2; + int var11 = (var6 + World.World_count - 1) / var6; + Login.worldSelectPagesCount = var11 - var31; + if (Skills.worldSelectLeftSprite != null && Login.worldSelectPage > 0) { + Skills.worldSelectLeftSprite.drawAt(8, WorldMapCacheName.canvasHeight / 2 - Skills.worldSelectLeftSprite.subHeight / 2); + } + + if (KitDefinition.worldSelectRightSprite != null && Login.worldSelectPage < Login.worldSelectPagesCount) { + KitDefinition.worldSelectRightSprite.drawAt(BoundaryObject.canvasWidth - KitDefinition.worldSelectRightSprite.subWidth - 8, WorldMapCacheName.canvasHeight / 2 - KitDefinition.worldSelectRightSprite.subHeight / 2); + } + + int var12 = var35 + 23; + int var13 = var9 + Login.xPadding; + int var14 = 0; + boolean var15 = false; + int var16 = Login.worldSelectPage; + + int var17; + for (var17 = var16 * var6; var17 < World.World_count && var16 - Login.worldSelectPage < var31; ++var17) { + World var28 = Skills.World_worlds[var17]; + boolean var19 = true; + String var20 = Integer.toString(var28.population); + if (var28.population == -1) { + var20 = "OFF"; + var19 = false; + } else if (var28.population > 1980) { + var20 = "FULL"; + var19 = false; + } + + int var22 = 0; + byte var21; + if (var28.isBeta()) { + if (var28.isMembersOnly()) { + var21 = 7; + } else { + var21 = 6; + } + } else if (var28.isDeadman()) { + var22 = 16711680; + if (var28.isMembersOnly()) { + var21 = 5; + } else { + var21 = 4; + } + } else if (var28.method1788()) { + var21 = 8; + } else if (var28.isPvp()) { + if (var28.isMembersOnly()) { + var21 = 3; + } else { + var21 = 2; + } + } else if (var28.isMembersOnly()) { + var21 = 1; } else { - var4.field606 = false; - var4.method1334(var6, var7, Players.field1228[var1]); + var21 = 0; + } + + if (MouseHandler.MouseHandler_x >= var13 && MouseHandler.MouseHandler_y >= var12 && MouseHandler.MouseHandler_x < var23 + var13 && MouseHandler.MouseHandler_y < var42 + var12 && var19) { + Login.hoveredWorldIndex = var17; + class42.worldSelectBackSprites[var21].drawTransOverlayAt(var13, var12, 128, 16777215); + var15 = true; + } else { + class42.worldSelectBackSprites[var21].drawAt(var13, var12); + } + + if (ItemContainer.worldSelectFlagSprites != null) { + ItemContainer.worldSelectFlagSprites[(var28.isMembersOnly() ? 8 : 0) + var28.location].drawAt(var13 + 29, var12); + } + + var0.drawCentered(Integer.toString(var28.id), var13 + 15, var42 / 2 + var12 + 5, var22, -1); + var1.drawCentered(var20, var13 + 60, var42 / 2 + var12 + 5, 268435455, -1); + var12 = var12 + var34 + var42; + ++var14; + if (var14 >= var6) { + var12 = var35 + 23; + var13 = var13 + var23 + var26; + var14 = 0; + ++var16; + } + } + + if (var15) { + var17 = var1.stringWidth(Skills.World_worlds[Login.hoveredWorldIndex].activity) + 6; + int var18 = var1.ascent + 8; + int var36 = MouseHandler.MouseHandler_y + 25; + if (var36 + var18 > 480) { + var36 = MouseHandler.MouseHandler_y - 25 - var18; + } + + Rasterizer2D.Rasterizer2D_fillRectangle(MouseHandler.MouseHandler_x - var17 / 2, var36, var17, var18, 16777120); + Rasterizer2D.Rasterizer2D_drawRectangle(MouseHandler.MouseHandler_x - var17 / 2, var36, var17, var18, 0); + var1.drawCentered(Skills.World_worlds[Login.hoveredWorldIndex].activity, MouseHandler.MouseHandler_x, var36 + var1.ascent + 4, 0, -1); + } + } + + DirectByteArrayCopier.rasterProvider.drawFull(0, 0); + } else { + AbstractByteArrayCopier.leftTitleSprite.drawAt(Login.xPadding, 0); + class319.rightTitleSprite.drawAt(Login.xPadding + 382, 0); + Decimator.logoSprite.drawAt(Login.xPadding + 382 - Decimator.logoSprite.subWidth / 2, 18); + if (Client.gameState == 0 || Client.gameState == 5) { + var23 = 20; + var0.drawCentered("RuneScape is loading - please wait...", Login.loginBoxX + 180, 245 - var23, 16777215, -1); + var24 = 253 - var23; + Rasterizer2D.Rasterizer2D_drawRectangle(Login.loginBoxX + 180 - 152, var24, 304, 34, 9179409); + Rasterizer2D.Rasterizer2D_drawRectangle(Login.loginBoxX + 180 - 151, var24 + 1, 302, 32, 0); + Rasterizer2D.Rasterizer2D_fillRectangle(Login.loginBoxX + 180 - 150, var24 + 2, Login.Login_loadingPercent * 3, 30, 9179409); + Rasterizer2D.Rasterizer2D_fillRectangle(Login.loginBoxX + 180 - 150 + Login.Login_loadingPercent * 3, var24 + 2, 300 - Login.Login_loadingPercent * 3, 30, 0); + var0.drawCentered(Login.Login_loadingText, Login.loginBoxX + 180, 276 - var23, 16777215, -1); + } + + String var25; + String var27; + short var37; + short var39; + if (Client.gameState == 20) { + Login.titleboxSprite.drawAt(Login.loginBoxX + 180 - Login.titleboxSprite.subWidth / 2, 271 - Login.titleboxSprite.subHeight / 2); + var37 = 201; + var0.drawCentered(Login.Login_response1, Login.loginBoxX + 180, var37, 16776960, 0); + var38 = var37 + 15; + var0.drawCentered(Login.Login_response2, Login.loginBoxX + 180, var38, 16776960, 0); + var38 += 15; + var0.drawCentered(Login.Login_response3, Login.loginBoxX + 180, var38, 16776960, 0); + var38 += 15; + var38 += 7; + if (Login.loginIndex != 4) { + var0.draw("Login: ", Login.loginBoxX + 180 - 110, var38, 16777215, 0); + var39 = 200; + + for (var25 = RouteStrategy.method3639(); var0.stringWidth(var25) > var39; var25 = var25.substring(0, var25.length() - 1)) { + } + + var0.draw(AbstractFont.escapeBrackets(var25), Login.loginBoxX + 180 - 70, var38, 16777215, 0); + var38 += 15; + + for (var27 = PlayerType.method4212(Login.Login_password); var0.stringWidth(var27) > var39; var27 = var27.substring(1)) { + } + + var0.draw("Password: " + var27, Login.loginBoxX + 180 - 108, var38, 16777215, 0); + var38 += 15; + } + } + + if (Client.gameState == 10 || Client.gameState == 11) { + Login.titleboxSprite.drawAt(Login.loginBoxX, 171); + short var5; + if (Login.loginIndex == 0) { + var37 = 251; + var0.drawCentered("Welcome to RuneScape", Login.loginBoxX + 180, var37, 16776960, 0); + var38 = var37 + 30; + var24 = Login.loginBoxX + 180 - 80; + var5 = 291; + Login.titlebuttonSprite.drawAt(var24 - 73, var5 - 20); + var0.drawLines("New User", var24 - 73, var5 - 20, 144, 40, 16777215, 0, 1, 1, 0); + var24 = Login.loginBoxX + 180 + 80; + Login.titlebuttonSprite.drawAt(var24 - 73, var5 - 20); + var0.drawLines("Existing User", var24 - 73, var5 - 20, 144, 40, 16777215, 0, 1, 1, 0); + } else if (Login.loginIndex == 1) { + var0.drawCentered(Login.Login_response0, Login.loginBoxX + 180, 201, 16776960, 0); + var37 = 236; + var0.drawCentered(Login.Login_response1, Login.loginBoxX + 180, var37, 16777215, 0); + var38 = var37 + 15; + var0.drawCentered(Login.Login_response2, Login.loginBoxX + 180, var38, 16777215, 0); + var38 += 15; + var0.drawCentered(Login.Login_response3, Login.loginBoxX + 180, var38, 16777215, 0); + var38 += 15; + var24 = Login.loginBoxX + 180 - 80; + var5 = 321; + Login.titlebuttonSprite.drawAt(var24 - 73, var5 - 20); + var0.drawCentered("Continue", var24, var5 + 5, 16777215, 0); + var24 = Login.loginBoxX + 180 + 80; + Login.titlebuttonSprite.drawAt(var24 - 73, var5 - 20); + var0.drawCentered("Cancel", var24, var5 + 5, 16777215, 0); + } else if (Login.loginIndex == 2) { + var37 = 201; + var0.drawCentered(Login.Login_response1, GrandExchangeOfferOwnWorldComparator.loginBoxCenter, var37, 16776960, 0); + var38 = var37 + 15; + var0.drawCentered(Login.Login_response2, GrandExchangeOfferOwnWorldComparator.loginBoxCenter, var38, 16776960, 0); + var38 += 15; + var0.drawCentered(Login.Login_response3, GrandExchangeOfferOwnWorldComparator.loginBoxCenter, var38, 16776960, 0); + var38 += 15; + var38 += 7; + var0.draw("Login: ", GrandExchangeOfferOwnWorldComparator.loginBoxCenter - 110, var38, 16777215, 0); + var39 = 200; + + for (var25 = RouteStrategy.method3639(); var0.stringWidth(var25) > var39; var25 = var25.substring(1)) { + } + + var0.draw(AbstractFont.escapeBrackets(var25) + (Login.currentLoginField == 0 & Client.cycle % 40 < 20 ? class222.colorStartTag(16776960) + "|" : ""), GrandExchangeOfferOwnWorldComparator.loginBoxCenter - 70, var38, 16777215, 0); + var38 += 15; + + for (var27 = PlayerType.method4212(Login.Login_password); var0.stringWidth(var27) > var39; var27 = var27.substring(1)) { + } + + var0.draw("Password: " + var27 + (Login.currentLoginField == 1 & Client.cycle % 40 < 20 ? class222.colorStartTag(16776960) + "|" : ""), GrandExchangeOfferOwnWorldComparator.loginBoxCenter - 108, var38, 16777215, 0); + var38 += 15; + var37 = 277; + var26 = GrandExchangeOfferOwnWorldComparator.loginBoxCenter + -117; + IndexedSprite var29 = PendingSpawn.method1753(Client.Login_isUsernameRemembered, Login.field1173); + var29.drawAt(var26, var37); + var26 = var26 + var29.subWidth + 5; + var1.draw("Remember username", var26, var37 + 13, 16776960, 0); + var26 = GrandExchangeOfferOwnWorldComparator.loginBoxCenter + 24; + var29 = PendingSpawn.method1753(UserComparator10.clientPreferences.hideUsername, Login.field1195); + var29.drawAt(var26, var37); + var26 = var26 + var29.subWidth + 5; + var1.draw("Hide username", var26, var37 + 13, 16776960, 0); + var38 = var37 + 15; + var9 = GrandExchangeOfferOwnWorldComparator.loginBoxCenter - 80; + short var10 = 321; + Login.titlebuttonSprite.drawAt(var9 - 73, var10 - 20); + var0.drawCentered("Login", var9, var10 + 5, 16777215, 0); + var9 = GrandExchangeOfferOwnWorldComparator.loginBoxCenter + 80; + Login.titlebuttonSprite.drawAt(var9 - 73, var10 - 20); + var0.drawCentered("Cancel", var9, var10 + 5, 16777215, 0); + var37 = 357; + switch(Login.field1186) { + case 2: + ClientPreferences.field1052 = "Having trouble logging in?"; + break; + default: + ClientPreferences.field1052 = "Can't login? Click here."; + } + + GrandExchangeOfferOwnWorldComparator.field638 = new Bounds(GrandExchangeOfferOwnWorldComparator.loginBoxCenter, var37, var1.stringWidth(ClientPreferences.field1052), 11); + class186.field2342 = new Bounds(GrandExchangeOfferOwnWorldComparator.loginBoxCenter, var37, var1.stringWidth("Still having trouble logging in?"), 11); + var1.drawCentered(ClientPreferences.field1052, GrandExchangeOfferOwnWorldComparator.loginBoxCenter, var37, 16777215, 0); + } else if (Login.loginIndex == 3) { + var37 = 201; + var0.drawCentered("Invalid credentials.", Login.loginBoxX + 180, var37, 16776960, 0); + var38 = var37 + 20; + var1.drawCentered("For accounts created after 24th November 2010, please use your", Login.loginBoxX + 180, var38, 16776960, 0); + var38 += 15; + var1.drawCentered("email address to login. Otherwise please login with your username.", Login.loginBoxX + 180, var38, 16776960, 0); + var38 += 15; + var24 = Login.loginBoxX + 180; + var5 = 276; + Login.titlebuttonSprite.drawAt(var24 - 73, var5 - 20); + var2.drawCentered("Try again", var24, var5 + 5, 16777215, 0); + var24 = Login.loginBoxX + 180; + var5 = 326; + Login.titlebuttonSprite.drawAt(var24 - 73, var5 - 20); + var2.drawCentered("Forgotten password?", var24, var5 + 5, 16777215, 0); + } else { + short var8; + if (Login.loginIndex == 4) { + var0.drawCentered("Authenticator", Login.loginBoxX + 180, 201, 16776960, 0); + var37 = 236; + var0.drawCentered(Login.Login_response1, Login.loginBoxX + 180, var37, 16777215, 0); + var38 = var37 + 15; + var0.drawCentered(Login.Login_response2, Login.loginBoxX + 180, var38, 16777215, 0); + var38 += 15; + var0.drawCentered(Login.Login_response3, Login.loginBoxX + 180, var38, 16777215, 0); + var38 += 15; + var0.draw("PIN: " + PlayerType.method4212(WorldMapSection0.otp) + (Client.cycle % 40 < 20 ? class222.colorStartTag(16776960) + "|" : ""), Login.loginBoxX + 180 - 108, var38, 16777215, 0); + var38 -= 8; + var0.draw("Trust this computer", Login.loginBoxX + 180 - 9, var38, 16776960, 0); + var38 += 15; + var0.draw("for 30 days: ", Login.loginBoxX + 180 - 9, var38, 16776960, 0); + var24 = Login.loginBoxX + 180 - 9 + var0.stringWidth("for 30 days: ") + 15; + var31 = var38 - var0.ascent; + IndexedSprite var41; + if (Login.field1196) { + var41 = Varps.options_buttons_2Sprite; + } else { + var41 = InterfaceParent.options_buttons_0Sprite; + } + + var41.drawAt(var24, var31); + var38 += 15; + var26 = Login.loginBoxX + 180 - 80; + var8 = 321; + Login.titlebuttonSprite.drawAt(var26 - 73, var8 - 20); + var0.drawCentered("Continue", var26, var8 + 5, 16777215, 0); + var26 = Login.loginBoxX + 180 + 80; + Login.titlebuttonSprite.drawAt(var26 - 73, var8 - 20); + var0.drawCentered("Cancel", var26, var8 + 5, 16777215, 0); + var1.drawCentered("Can't Log In?", Login.loginBoxX + 180, var8 + 36, 255, 0); + } else if (Login.loginIndex == 5) { + var0.drawCentered("Forgotten your password?", Login.loginBoxX + 180, 201, 16776960, 0); + var37 = 221; + var2.drawCentered(Login.Login_response1, Login.loginBoxX + 180, var37, 16776960, 0); + var38 = var37 + 15; + var2.drawCentered(Login.Login_response2, Login.loginBoxX + 180, var38, 16776960, 0); + var38 += 15; + var2.drawCentered(Login.Login_response3, Login.loginBoxX + 180, var38, 16776960, 0); + var38 += 15; + var38 += 14; + var0.draw("Username/email: ", Login.loginBoxX + 180 - 145, var38, 16777215, 0); + var39 = 174; + + for (var25 = RouteStrategy.method3639(); var0.stringWidth(var25) > var39; var25 = var25.substring(1)) { + } + + var0.draw(AbstractFont.escapeBrackets(var25) + (Client.cycle % 40 < 20 ? class222.colorStartTag(16776960) + "|" : ""), Login.loginBoxX + 180 - 34, var38, 16777215, 0); + var38 += 15; + var6 = Login.loginBoxX + 180 - 80; + short var40 = 321; + Login.titlebuttonSprite.drawAt(var6 - 73, var40 - 20); + var0.drawCentered("Recover", var6, var40 + 5, 16777215, 0); + var6 = Login.loginBoxX + 180 + 80; + Login.titlebuttonSprite.drawAt(var6 - 73, var40 - 20); + var0.drawCentered("Back", var6, var40 + 5, 16777215, 0); + var40 = 356; + var1.drawCentered("Still having trouble logging in?", GrandExchangeOfferOwnWorldComparator.loginBoxCenter, var40, 268435455, 0); + } else if (Login.loginIndex == 6) { + var37 = 201; + var0.drawCentered(Login.Login_response1, Login.loginBoxX + 180, var37, 16776960, 0); + var38 = var37 + 15; + var0.drawCentered(Login.Login_response2, Login.loginBoxX + 180, var38, 16776960, 0); + var38 += 15; + var0.drawCentered(Login.Login_response3, Login.loginBoxX + 180, var38, 16776960, 0); + var38 += 15; + var24 = Login.loginBoxX + 180; + var5 = 321; + Login.titlebuttonSprite.drawAt(var24 - 73, var5 - 20); + var0.drawCentered("Back", var24, var5 + 5, 16777215, 0); + } else if (Login.loginIndex == 7) { + var37 = 216; + var0.drawCentered("Your date of birth isn't set.", Login.loginBoxX + 180, var37, 16776960, 0); + var38 = var37 + 15; + var2.drawCentered("Please verify your account status by", Login.loginBoxX + 180, var38, 16776960, 0); + var38 += 15; + var2.drawCentered("setting your date of birth.", Login.loginBoxX + 180, var38, 16776960, 0); + var38 += 15; + var24 = Login.loginBoxX + 180 - 80; + var5 = 321; + Login.titlebuttonSprite.drawAt(var24 - 73, var5 - 20); + var0.drawCentered("Set Date of Birth", var24, var5 + 5, 16777215, 0); + var24 = Login.loginBoxX + 180 + 80; + Login.titlebuttonSprite.drawAt(var24 - 73, var5 - 20); + var0.drawCentered("Back", var24, var5 + 5, 16777215, 0); + } else if (Login.loginIndex == 8) { + var37 = 216; + var0.drawCentered("Sorry, but your account is not eligible to play.", Login.loginBoxX + 180, var37, 16776960, 0); + var38 = var37 + 15; + var2.drawCentered("For more information, please take a look at", Login.loginBoxX + 180, var38, 16776960, 0); + var38 += 15; + var2.drawCentered("our privacy policy.", Login.loginBoxX + 180, var38, 16776960, 0); + var38 += 15; + var24 = Login.loginBoxX + 180 - 80; + var5 = 321; + Login.titlebuttonSprite.drawAt(var24 - 73, var5 - 20); + var0.drawCentered("Privacy Policy", var24, var5 + 5, 16777215, 0); + var24 = Login.loginBoxX + 180 + 80; + Login.titlebuttonSprite.drawAt(var24 - 73, var5 - 20); + var0.drawCentered("Back", var24, var5 + 5, 16777215, 0); + } else if (Login.loginIndex == 12) { + var37 = 201; + String var4 = ""; + var25 = ""; + var27 = ""; + switch(Login.field1185) { + case 0: + var4 = "Your account has been disabled."; + var25 = Strings.field2823; + var27 = ""; + break; + case 1: + var4 = "Account locked as we suspect it has been stolen."; + var25 = Strings.field2862; + var27 = ""; + break; + default: + class222.Login_promptCredentials(false); + } + + var0.drawCentered(var4, Login.loginBoxX + 180, var37, 16776960, 0); + var38 = var37 + 15; + var2.drawCentered(var25, Login.loginBoxX + 180, var38, 16776960, 0); + var38 += 15; + var2.drawCentered(var27, Login.loginBoxX + 180, var38, 16776960, 0); + var38 += 15; + var26 = Login.loginBoxX + 180; + var8 = 276; + Login.titlebuttonSprite.drawAt(var26 - 73, var8 - 20); + var0.drawCentered("Support Page", var26, var8 + 5, 16777215, 0); + var26 = Login.loginBoxX + 180; + var8 = 326; + Login.titlebuttonSprite.drawAt(var26 - 73, var8 - 20); + var0.drawCentered("Back", var26, var8 + 5, 16777215, 0); + } else if (Login.loginIndex == 24) { + var37 = 221; + var0.drawCentered(Login.Login_response1, Login.loginBoxX + 180, var37, 16777215, 0); + var38 = var37 + 15; + var0.drawCentered(Login.Login_response2, Login.loginBoxX + 180, var38, 16777215, 0); + var38 += 15; + var0.drawCentered(Login.Login_response3, Login.loginBoxX + 180, var38, 16777215, 0); + var38 += 15; + var24 = Login.loginBoxX + 180; + var5 = 301; + Login.titlebuttonSprite.drawAt(var24 - 73, var5 - 20); + var0.drawCentered("Ok", var24, var5 + 5, 16777215, 0); + } + } + } + + if (Client.gameState >= 10) { + int[] var3 = new int[4]; + Rasterizer2D.Rasterizer2D_getClipArray(var3); + Rasterizer2D.Rasterizer2D_setClip(Login.xPadding, 0, Login.xPadding + 765, WorldMapCacheName.canvasHeight); + DynamicObject.loginScreenRunesAnimation.draw(Login.xPadding - 22, Client.cycle); + DynamicObject.loginScreenRunesAnimation.draw(Login.xPadding + 22 + 765 - 128, Client.cycle); + Rasterizer2D.Rasterizer2D_setClipArray(var3); + } + + Login.title_muteSprite[UserComparator10.clientPreferences.titleMusicDisabled ? 1 : 0].drawAt(Login.xPadding + 765 - 40, 463); + if (Client.gameState > 5 && VarbitDefinition.clientLanguage == Language.Language_EN) { + if (class42.field364 != null) { + var38 = Login.xPadding + 5; + var39 = 463; + byte var33 = 100; + byte var32 = 35; + class42.field364.drawAt(var38, var39); + var0.drawCentered("World" + " " + Client.worldId, var33 / 2 + var38, var32 / 2 + var39 - 2, 16777215, 0); + if (GrandExchangeOfferOwnWorldComparator.World_request != null) { + var1.drawCentered("Loading...", var33 / 2 + var38, var32 / 2 + var39 + 12, 16777215, 0); + } else { + var1.drawCentered("Click to switch", var33 / 2 + var38, var32 / 2 + var39 + 12, 16777215, 0); } } else { - var4.resetPath(var6, var7); - var4.field606 = false; + class42.field364 = BZip2State.SpriteBuffer_getIndexedSpriteByName(WorldMapRegion.archive8, "sl_button", ""); } + } - } else if (var3 == 2) { - var5 = var0.readBits(4); - var6 = var4.pathX[0]; - var7 = var4.pathY[0]; - if (var5 == 0) { - var6 -= 2; - var7 -= 2; - } else if (var5 == 1) { - --var6; - var7 -= 2; - } else if (var5 == 2) { - var7 -= 2; - } else if (var5 == 3) { - ++var6; - var7 -= 2; - } else if (var5 == 4) { - var6 += 2; - var7 -= 2; - } else if (var5 == 5) { - var6 -= 2; - --var7; - } else if (var5 == 6) { - var6 += 2; - --var7; - } else if (var5 == 7) { - var6 -= 2; - } else if (var5 == 8) { - var6 += 2; - } else if (var5 == 9) { - var6 -= 2; - ++var7; - } else if (var5 == 10) { - var6 += 2; - ++var7; - } else if (var5 == 11) { - var6 -= 2; - var7 += 2; - } else if (var5 == 12) { - --var6; - var7 += 2; - } else if (var5 == 13) { - var7 += 2; - } else if (var5 == 14) { - ++var6; - var7 += 2; - } else if (var5 == 15) { - var6 += 2; - var7 += 2; - } + } + } - if (Client.localPlayerIndex == var1 && (var4.x < 1536 || var4.y < 1536 || var4.x >= 11776 || var4.y >= 11776)) { - var4.resetPath(var6, var7); - var4.field606 = false; - } else if (var2) { - var4.field606 = true; - var4.tileX = var6; - var4.tileY = var7; + @ObfuscatedName("gl") + @ObfuscatedSignature( + signature = "(I)I", + garbageValue = "-850052471" + ) + static final int method3660() { + if (UserComparator10.clientPreferences.roofsHidden) { + return Client_plane; + } else { + int var0 = 3; + if (ItemContainer.cameraPitch < 310) { + int var1; + int var2; + if (Client.oculusOrbState == 1) { + var1 = class80.oculusOrbFocalPointX >> 7; + var2 = class81.oculusOrbFocalPointY >> 7; } else { - var4.field606 = false; - var4.method1334(var6, var7, Players.field1228[var1]); + var1 = class215.localPlayer.x >> 7; + var2 = class215.localPlayer.y >> 7; } - } else { - var5 = var0.readBits(1); + int var3 = class30.cameraX >> 7; + int var4 = FloorDecoration.cameraZ >> 7; + if (var3 < 0 || var4 < 0 || var3 >= 104 || var4 >= 104) { + return Client_plane; + } + + if (var1 < 0 || var2 < 0 || var1 >= 104 || var2 >= 104) { + return Client_plane; + } + + if ((Tiles.Tiles_renderFlags[Client_plane][var3][var4] & 4) != 0) { + var0 = Client_plane; + } + + int var5; + if (var1 > var3) { + var5 = var1 - var3; + } else { + var5 = var3 - var1; + } + + int var6; + if (var2 > var4) { + var6 = var2 - var4; + } else { + var6 = var4 - var2; + } + + int var7; int var8; - int var9; - int var10; - int var11; - if (var5 == 0) { - var6 = var0.readBits(12); - var7 = var6 >> 10; - var8 = var6 >> 5 & 31; - if (var8 > 15) { - var8 -= 32; - } + if (var5 > var6) { + var7 = var6 * 65536 / var5; + var8 = 32768; - var9 = var6 & 31; - if (var9 > 15) { - var9 -= 32; - } - - var10 = var8 + var4.pathX[0]; - var11 = var9 + var4.pathY[0]; - if (Client.localPlayerIndex != var1 || var4.x >= 1536 && var4.y >= 1536 && var4.x < 11776 && var4.y < 11776) { - if (var2) { - var4.field606 = true; - var4.tileX = var10; - var4.tileY = var11; - } else { - var4.field606 = false; - var4.method1334(var10, var11, Players.field1228[var1]); - } - } else { - var4.resetPath(var10, var11); - var4.field606 = false; - } - - var4.plane = (byte)(var7 + var4.plane & 3); - if (Client.localPlayerIndex == var1) { - Player.Client_plane = var4.Client_plane; - } - - } else { - var6 = var0.readBits(30); - var7 = var6 >> 28; - var8 = var6 >> 14 & 16383; - var9 = var6 & 16383; - var10 = (UserComparator8.baseX * 64 + var8 + var4.pathX[0] & 16383) - UserComparator8.baseX * 64; - var11 = (HealthBar.baseY * 64 + var9 + var4.pathY[0] & 16383) - HealthBar.baseY * 64; - if (Client.localPlayerIndex != var1 || var4.x >= 1536 && var4.y >= 1536 && var4.x < 11776 && var4.y < 11776) { - if (var2) { - var4.field606 = true; - var4.tileX = var10; - var4.tileY = var11; - } else { - var4.field606 = false; - var4.method1334(var10, var11, Players.field1228[var1]); - } - } else { - var4.resetPath(var10, var11); - var4.field606 = false; - } - - var4.plane = (byte)(var7 + var4.plane & 3); - if (Client.localPlayerIndex == var1) { - Player.Client_plane = var4.plane; - } - - } - } - } - } - - @ObfuscatedName("l") - @ObfuscatedSignature( - signature = "(Lhq;Ljava/lang/String;Ljava/lang/String;I)Llw;", - garbageValue = "-210604118" - ) - @Export("SpriteBuffer_getIndexedSpriteByName") - public static IndexedSprite SpriteBuffer_getIndexedSpriteByName(AbstractArchive var0, String var1, String var2) { - int var3 = var0.getGroupId(var1); - int var4 = var0.getFileId(var3, var2); - return WorldMapAreaData.method762(var0, var3, var4); - } - - @ObfuscatedName("i") - @ObfuscatedSignature( - signature = "(CB)Z", - garbageValue = "64" - ) - @Export("isDigit") - public static boolean isDigit(char var0) { - return var0 >= '0' && var0 <= '9'; - } - - @ObfuscatedName("d") - @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "2065171333" - ) - static void method3764() { - Login.Login_username = Login.Login_username.trim(); - if (Login.Login_username.length() == 0) { - GrandExchangeOffer.setLoginResponseString("Please enter your username.", "If you created your account after November", "2010, this will be the creation email address."); - } else { - long var1 = SecureRandomCallable.method1225(); - byte var0; - if (var1 == 0L) { - var0 = 5; - } else { - String var4 = Login.Login_username; - Random var5 = new Random(); - Buffer var6 = new Buffer(128); - Buffer var7 = new Buffer(128); - int[] var8 = new int[]{var5.nextInt(), var5.nextInt(), (int)(var1 >> 32), (int)var1}; - var6.writeByte(10); - - int var9; - for (var9 = 0; var9 < 4; ++var9) { - var6.writeInt(var5.nextInt()); - } - - var6.writeInt(var8[0]); - var6.writeInt(var8[1]); - var6.writeLong(var1); - var6.writeLong(0L); - - for (var9 = 0; var9 < 4; ++var9) { - var6.writeInt(var5.nextInt()); - } - - var6.encryptRsa(class80.field1119, class80.field1120); - var7.writeByte(10); - - for (var9 = 0; var9 < 3; ++var9) { - var7.writeInt(var5.nextInt()); - } - - var7.writeLong(var5.nextLong()); - var7.writeLongMedium(var5.nextLong()); - if (Client.randomDatData != null) { - var7.writeBytes(Client.randomDatData, 0, Client.randomDatData.length); - } else { - byte[] var10 = new byte[24]; - - try { - JagexCache.JagexCache_randomDat.seek(0L); - JagexCache.JagexCache_randomDat.readFully(var10); - - int var11; - for (var11 = 0; var11 < 24 && var10[var11] == 0; ++var11) { + while (var3 != var1) { + if (var3 < var1) { + ++var3; + } else if (var3 > var1) { + --var3; } - if (var11 >= 24) { - throw new IOException(); + if ((Tiles.Tiles_renderFlags[Client_plane][var3][var4] & 4) != 0) { + var0 = Client_plane; } - } catch (Exception var25) { - for (int var12 = 0; var12 < 24; ++var12) { - var10[var12] = -1; - } - } - var7.writeBytes(var10, 0, var10.length); - } - - var7.writeLong(var5.nextLong()); - var7.encryptRsa(class80.field1119, class80.field1120); - var9 = UserComparator6.stringCp1252NullTerminatedByteSize(var4); - if (var9 % 8 != 0) { - var9 += 8 - var9 % 8; - } - - Buffer var26 = new Buffer(var9); - var26.writeStringCp1252NullTerminated(var4); - var26.offset = var9; - var26.xteaEncryptAll(var8); - Buffer var20 = new Buffer(var7.offset + var6.offset + var26.offset + 5); - var20.writeByte(2); - var20.writeByte(var6.offset); - var20.writeBytes(var6.array, 0, var6.offset); - var20.writeByte(var7.offset); - var20.writeBytes(var7.array, 0, var7.offset); - var20.writeShort(var26.offset); - var20.writeBytes(var26.array, 0, var26.offset); - byte[] var13 = var20.array; - String var22 = ItemContainer.method1252(var13, 0, var13.length); - String var14 = var22; - - byte var3; - try { - URL var15 = new URL(WorldMapElement.method4547("services", false) + "m=accountappeal/login.ws"); - URLConnection var16 = var15.openConnection(); - var16.setDoInput(true); - var16.setDoOutput(true); - var16.setConnectTimeout(5000); - OutputStreamWriter var17 = new OutputStreamWriter(var16.getOutputStream()); - var17.write("data2=" + class312.method6014(var14) + "&dest=" + class312.method6014("passwordchoice.ws")); - var17.flush(); - InputStream var18 = var16.getInputStream(); - var20 = new Buffer(new byte[1000]); - - while (true) { - int var19 = var18.read(var20.array, var20.offset, 1000 - var20.offset); - if (var19 == -1) { - var17.close(); - var18.close(); - String var23 = new String(var20.array); - if (var23.startsWith("OFFLINE")) { - var3 = 4; - } else if (var23.startsWith("WRONG")) { - var3 = 7; - } else if (var23.startsWith("RELOAD")) { - var3 = 3; - } else if (var23.startsWith("Not permitted for social network accounts.")) { - var3 = 6; - } else { - var20.xteaDecryptAll(var8); - - while (var20.offset > 0 && var20.array[var20.offset - 1] == 0) { - --var20.offset; - } - - var23 = new String(var20.array, 0, var20.offset); - if (SequenceDefinition.isValidURL(var23)) { - class2.openURL(var23, true, false); - var3 = 2; - } else { - var3 = 5; - } + var8 += var7; + if (var8 >= 65536) { + var8 -= 65536; + if (var4 < var2) { + ++var4; + } else if (var4 > var2) { + --var4; } - break; - } - var20.offset += var19; - if (var20.offset >= 1000) { - var3 = 5; - break; + if ((Tiles.Tiles_renderFlags[Client_plane][var3][var4] & 4) != 0) { + var0 = Client_plane; + } } } - } catch (Throwable var24) { - var24.printStackTrace(); - var3 = 5; + } else if (var6 > 0) { + var7 = var5 * 65536 / var6; + var8 = 32768; + + while (var4 != var2) { + if (var4 < var2) { + ++var4; + } else if (var4 > var2) { + --var4; + } + + if ((Tiles.Tiles_renderFlags[Client_plane][var3][var4] & 4) != 0) { + var0 = Client_plane; + } + + var8 += var7; + if (var8 >= 65536) { + var8 -= 65536; + if (var3 < var1) { + ++var3; + } else if (var3 > var1) { + --var3; + } + + if ((Tiles.Tiles_renderFlags[Client_plane][var3][var4] & 4) != 0) { + var0 = Client_plane; + } + } + } + } + } + + if (class215.localPlayer.x >= 0 && class215.localPlayer.y >= 0 && class215.localPlayer.x < 13312 && class215.localPlayer.y < 13312) { + if ((Tiles.Tiles_renderFlags[Client_plane][class215.localPlayer.x >> 7][class215.localPlayer.y >> 7] & 4) != 0) { + var0 = Client_plane; } - var0 = var3; + return var0; + } else { + return Client_plane; } - - switch(var0) { - case 2: - GrandExchangeOffer.setLoginResponseString(Strings.field2894, Strings.field3013, Strings.field3014); - Login.loginIndex = 6; - break; - case 3: - GrandExchangeOffer.setLoginResponseString("", "Error connecting to server.", ""); - break; - case 4: - GrandExchangeOffer.setLoginResponseString("The part of the website you are trying", "to connect to is offline at the moment.", "Please try again later."); - break; - case 5: - GrandExchangeOffer.setLoginResponseString("Sorry, there was an error trying to", "log you in to this part of the website.", "Please try again later."); - break; - case 6: - GrandExchangeOffer.setLoginResponseString("", "Error connecting to server.", ""); - break; - case 7: - GrandExchangeOffer.setLoginResponseString("You must enter a valid login to proceed. For accounts", "created after 24th November 2010, please use your", "email address. Otherwise please use your username."); - } - } } - - @ObfuscatedName("ij") - @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "-78" - ) - @Export("addCancelMenuEntry") - static void addCancelMenuEntry() { - Client.menuOptionsCount = 0; - Client.isMenuOpen = false; - Client.menuActions[0] = "Cancel"; - Client.menuTargets[0] = ""; - Client.menuOpcodes[0] = 1006; - Client.menuShiftClick[0] = false; - Client.menuOptionsCount = 1; - } } diff --git a/runescape-client/src/main/java/ClientPreferences.java b/runescape-client/src/main/java/ClientPreferences.java index 95cb2f1f53..cd9bd681fc 100644 --- a/runescape-client/src/main/java/ClientPreferences.java +++ b/runescape-client/src/main/java/ClientPreferences.java @@ -7,34 +7,36 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("bw") +@ObfuscatedName("bs") @Implements("ClientPreferences") public class ClientPreferences { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedGetter( - intValue = 1383703517 + intValue = -1145191991 ) @Export("ClientPreferences_optionCount") static int ClientPreferences_optionCount; - @ObfuscatedName("n") + @ObfuscatedName("ak") + static String field1052; + @ObfuscatedName("b") @Export("roofsHidden") boolean roofsHidden; - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("titleMusicDisabled") boolean titleMusicDisabled; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = 1268365417 + intValue = -1051174515 ) @Export("windowMode") int windowMode; - @ObfuscatedName("l") + @ObfuscatedName("p") @Export("rememberedUsername") String rememberedUsername; - @ObfuscatedName("c") + @ObfuscatedName("h") @Export("hideUsername") boolean hideUsername; - @ObfuscatedName("o") + @ObfuscatedName("y") @Export("parameters") LinkedHashMap parameters; @@ -47,11 +49,11 @@ public class ClientPreferences { this.rememberedUsername = null; this.hideUsername = false; this.parameters = new LinkedHashMap(); - this.method1957(true); + this.method1856(true); } @ObfuscatedSignature( - signature = "(Lkc;)V" + signature = "(Lkg;)V" ) ClientPreferences(Buffer var1) { this.windowMode = 1; @@ -91,26 +93,26 @@ public class ClientPreferences { this.hideUsername = var1.readBoolean(); } } else { - this.method1957(true); + this.method1856(true); } } else { - this.method1957(true); + this.method1856(true); } } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "(ZI)V", - garbageValue = "271600309" + garbageValue = "1503707935" ) - void method1957(boolean var1) { + void method1856(boolean var1) { } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(I)Lkc;", - garbageValue = "1659906273" + signature = "(I)Lkg;", + garbageValue = "-650033927" ) @Export("toBuffer") Buffer toBuffer() { @@ -133,13 +135,50 @@ public class ClientPreferences { return var1; } - @ObfuscatedName("n") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(Ljava/lang/CharSequence;I)I", - garbageValue = "1282610090" + signature = "(Lij;IIIBZI)V", + garbageValue = "-4346330" ) - @Export("parseInt") - public static int parseInt(CharSequence var0) { - return class192.parseIntCustomRadix(var0, 10, true); + @Export("requestNetFile") + static void requestNetFile(Archive var0, int var1, int var2, int var3, byte var4, boolean var5) { + long var6 = (long)((var1 << 16) + var2); + NetFileRequest var8 = (NetFileRequest)NetCache.NetCache_pendingPriorityWrites.get(var6); + if (var8 == null) { + var8 = (NetFileRequest)NetCache.NetCache_pendingPriorityResponses.get(var6); + if (var8 == null) { + var8 = (NetFileRequest)NetCache.NetCache_pendingWrites.get(var6); + if (var8 != null) { + if (var5) { + var8.removeDual(); + NetCache.NetCache_pendingPriorityWrites.put(var8, var6); + --NetCache.NetCache_pendingWritesCount; + ++NetCache.NetCache_pendingPriorityWritesCount; + } + + } else { + if (!var5) { + var8 = (NetFileRequest)NetCache.NetCache_pendingResponses.get(var6); + if (var8 != null) { + return; + } + } + + var8 = new NetFileRequest(); + var8.archive = var0; + var8.crc = var3; + var8.padding = var4; + if (var5) { + NetCache.NetCache_pendingPriorityWrites.put(var8, var6); + ++NetCache.NetCache_pendingPriorityWritesCount; + } else { + NetCache.NetCache_pendingWritesQueue.addFirst(var8); + NetCache.NetCache_pendingWrites.put(var8, var6); + ++NetCache.NetCache_pendingWritesCount; + } + + } + } + } } } diff --git a/runescape-client/src/main/java/Clock.java b/runescape-client/src/main/java/Clock.java index 49850f433d..fa3a147361 100644 --- a/runescape-client/src/main/java/Clock.java +++ b/runescape-client/src/main/java/Clock.java @@ -1,180 +1,163 @@ import net.runelite.mapping.Export; import net.runelite.mapping.Implements; -import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("fk") +@ObfuscatedName("fp") @Implements("Clock") public abstract class Clock { - @ObfuscatedName("ro") - @ObfuscatedGetter( - intValue = -578402437 - ) - static int field2036; - @ObfuscatedName("ly") - @ObfuscatedGetter( - intValue = -568224545 - ) - @Export("selectedSpellWidget") - static int selectedSpellWidget; - Clock() { } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "1605126906" + garbageValue = "-26166053" ) @Export("mark") public abstract void mark(); - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(III)I", - garbageValue = "432238723" + signature = "(IIB)I", + garbageValue = "6" ) @Export("wait") public abstract int wait(int var1, int var2); - @ObfuscatedName("a") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Lhq;Lhq;Lhq;Lgg;I)Z", - garbageValue = "654132136" + signature = "([Lbp;II[I[II)V", + garbageValue = "-767358668" ) - public static boolean method3641(AbstractArchive var0, AbstractArchive var1, AbstractArchive var2, MidiPcmStream var3) { - class197.musicPatchesArchive = var0; - class197.musicSamplesArchive = var1; - class197.soundEffectsArchive = var2; - class197.midiPcmStream = var3; - return true; - } + @Export("sortWorlds") + static void sortWorlds(World[] var0, int var1, int var2, int[] var3, int[] var4) { + if (var1 < var2) { + int var5 = var1 - 1; + int var6 = var2 + 1; + int var7 = (var2 + var1) / 2; + World var8 = var0[var7]; + var0[var7] = var0[var1]; + var0[var1] = var8; - @ObfuscatedName("hv") - @ObfuscatedSignature( - signature = "(ZLkf;I)V", - garbageValue = "900111549" - ) - @Export("loadRegions") - static final void loadRegions(boolean var0, PacketBuffer var1) { - Client.isInInstance = var0; - int var2; - int var4; - int var5; - int var6; - int var7; - int var8; - if (!Client.isInInstance) { - var2 = var1.method5646(); - int var3 = var1.readUnsignedShort(); - var4 = var1.readUnsignedShort(); - ClientPacket.xteaKeys = new int[var4][4]; + while (var5 < var6) { + boolean var9 = true; - for (var5 = 0; var5 < var4; ++var5) { - for (var6 = 0; var6 < 4; ++var6) { - ClientPacket.xteaKeys[var5][var6] = var1.readInt(); - } - } + int var10; + int var11; + int var12; + do { + --var6; - GrandExchangeOfferOwnWorldComparator.regions = new int[var4]; - class338.regionMapArchiveIds = new int[var4]; - WorldMapCacheName.regionLandArchiveIds = new int[var4]; - UrlRequester.regionLandArchives = new byte[var4][]; - UserComparator3.regionMapArchives = new byte[var4][]; - boolean var16 = false; - if ((var3 / 8 == 48 || var3 / 8 == 49) && var2 / 8 == 48) { - var16 = true; - } + for (var10 = 0; var10 < 4; ++var10) { + if (var3[var10] == 2) { + var11 = var0[var6].index; + var12 = var8.index; + } else if (var3[var10] == 1) { + var11 = var0[var6].population; + var12 = var8.population; + if (var11 == -1 && var4[var10] == 1) { + var11 = 2001; + } - if (var3 / 8 == 48 && var2 / 8 == 148) { - var16 = true; - } - - var4 = 0; - - for (var6 = (var3 - 6) / 8; var6 <= (var3 + 6) / 8; ++var6) { - for (var7 = (var2 - 6) / 8; var7 <= (var2 + 6) / 8; ++var7) { - var8 = var7 + (var6 << 8); - if (!var16 || var7 != 49 && var7 != 149 && var7 != 147 && var6 != 50 && (var6 != 49 || var7 != 47)) { - GrandExchangeOfferOwnWorldComparator.regions[var4] = var8; - class338.regionMapArchiveIds[var4] = WorldMapRectangle.archive5.getGroupId("m" + var6 + "_" + var7); - WorldMapCacheName.regionLandArchiveIds[var4] = WorldMapRectangle.archive5.getGroupId("l" + var6 + "_" + var7); - ++var4; - } - } - } - - WorldMapSectionType.method290(var3, var2, true); - } else { - var2 = var1.method5648(); - boolean var15 = var1.method5622() == 1; - var4 = var1.method5647(); - var5 = var1.readUnsignedShort(); - var1.importIndex(); - - int var9; - for (var6 = 0; var6 < 4; ++var6) { - for (var7 = 0; var7 < 13; ++var7) { - for (var8 = 0; var8 < 13; ++var8) { - var9 = var1.readBits(1); - if (var9 == 1) { - Client.instanceChunkTemplates[var6][var7][var8] = var1.readBits(26); + if (var12 == -1 && var4[var10] == 1) { + var12 = 2001; + } + } else if (var3[var10] == 3) { + var11 = var0[var6].isMembersOnly() ? 1 : 0; + var12 = var8.isMembersOnly() ? 1 : 0; } else { - Client.instanceChunkTemplates[var6][var7][var8] = -1; + var11 = var0[var6].id; + var12 = var8.id; + } + + if (var12 != var11) { + if ((var4[var10] != 1 || var11 <= var12) && (var4[var10] != 0 || var11 >= var12)) { + var9 = false; + } + break; + } + + if (var10 == 3) { + var9 = false; } } - } - } + } while(var9); - var1.exportIndex(); - ClientPacket.xteaKeys = new int[var5][4]; + var9 = true; - for (var6 = 0; var6 < var5; ++var6) { - for (var7 = 0; var7 < 4; ++var7) { - ClientPacket.xteaKeys[var6][var7] = var1.readInt(); - } - } + do { + ++var5; - GrandExchangeOfferOwnWorldComparator.regions = new int[var5]; - class338.regionMapArchiveIds = new int[var5]; - WorldMapCacheName.regionLandArchiveIds = new int[var5]; - UrlRequester.regionLandArchives = new byte[var5][]; - UserComparator3.regionMapArchives = new byte[var5][]; - var5 = 0; - - for (var6 = 0; var6 < 4; ++var6) { - for (var7 = 0; var7 < 13; ++var7) { - for (var8 = 0; var8 < 13; ++var8) { - var9 = Client.instanceChunkTemplates[var6][var7][var8]; - if (var9 != -1) { - int var10 = var9 >> 14 & 1023; - int var11 = var9 >> 3 & 2047; - int var12 = (var10 / 8 << 8) + var11 / 8; - - int var13; - for (var13 = 0; var13 < var5; ++var13) { - if (GrandExchangeOfferOwnWorldComparator.regions[var13] == var12) { - var12 = -1; - break; - } + for (var10 = 0; var10 < 4; ++var10) { + if (var3[var10] == 2) { + var11 = var0[var5].index; + var12 = var8.index; + } else if (var3[var10] == 1) { + var11 = var0[var5].population; + var12 = var8.population; + if (var11 == -1 && var4[var10] == 1) { + var11 = 2001; } - if (var12 != -1) { - GrandExchangeOfferOwnWorldComparator.regions[var5] = var12; - var13 = var12 >> 8 & 255; - int var14 = var12 & 255; - class338.regionMapArchiveIds[var5] = WorldMapRectangle.archive5.getGroupId("m" + var13 + "_" + var14); - WorldMapCacheName.regionLandArchiveIds[var5] = WorldMapRectangle.archive5.getGroupId("l" + var13 + "_" + var14); - ++var5; + if (var12 == -1 && var4[var10] == 1) { + var12 = 2001; } + } else if (var3[var10] == 3) { + var11 = var0[var5].isMembersOnly() ? 1 : 0; + var12 = var8.isMembersOnly() ? 1 : 0; + } else { + var11 = var0[var5].id; + var12 = var8.id; + } + + if (var11 != var12) { + if ((var4[var10] != 1 || var11 >= var12) && (var4[var10] != 0 || var11 <= var12)) { + var9 = false; + } + break; + } + + if (var10 == 3) { + var9 = false; } } + } while(var9); + + if (var5 < var6) { + World var13 = var0[var5]; + var0[var5] = var0[var6]; + var0[var6] = var13; } } - WorldMapSectionType.method290(var4, var2, !var15); + sortWorlds(var0, var1, var6, var3, var4); + sortWorlds(var0, var6 + 1, var2, var3, var4); } } + + @ObfuscatedName("ex") + @ObfuscatedSignature( + signature = "(I)Llo;", + garbageValue = "-40760681" + ) + @Export("getWorldMap") + static WorldMap getWorldMap() { + return WorldMapRegion.worldMap; + } + + @ObfuscatedName("kc") + @ObfuscatedSignature( + signature = "(IIIZI)V", + garbageValue = "744755226" + ) + public static void method3555(int var0, int var1, int var2, boolean var3) { + PacketBufferNode var4 = ModelData0.getPacketBufferNode(ClientPacket.field2285, Client.packetWriter.isaacCipher); + var4.packetBuffer.writeIntME(var2); + var4.packetBuffer.writeShortLE(var1); + var4.packetBuffer.method5648(var3 ? Client.field748 : 0); + var4.packetBuffer.writeShortLE(var0); + Client.packetWriter.addNode(var4); + } } diff --git a/runescape-client/src/main/java/CollisionMap.java b/runescape-client/src/main/java/CollisionMap.java index 176b7afa2c..ec63850cc8 100644 --- a/runescape-client/src/main/java/CollisionMap.java +++ b/runescape-client/src/main/java/CollisionMap.java @@ -1,39 +1,42 @@ -import java.io.File; -import java.io.IOException; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("fm") +@ObfuscatedName("fh") @Implements("CollisionMap") public class CollisionMap { - @ObfuscatedName("av") + @ObfuscatedName("ff") @ObfuscatedGetter( - intValue = 1716548279 + intValue = -580865105 + ) + static int field2086; + @ObfuscatedName("ak") + @ObfuscatedGetter( + intValue = -1403306953 ) @Export("xInset") int xInset; - @ObfuscatedName("am") + @ObfuscatedName("aa") @ObfuscatedGetter( - intValue = 100209491 + intValue = -111839057 ) @Export("yInset") int yInset; @ObfuscatedName("ab") @ObfuscatedGetter( - intValue = -1893583227 + intValue = 1867472401 ) @Export("xSize") int xSize; - @ObfuscatedName("ax") + @ObfuscatedName("ar") @ObfuscatedGetter( - intValue = 430347067 + intValue = 1884371115 ) @Export("ySize") int ySize; - @ObfuscatedName("al") + @ObfuscatedName("av") @Export("flags") public int[][] flags; @@ -46,10 +49,10 @@ public class CollisionMap { this.clear(); } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "-418924176" + garbageValue = "621832318" ) @Export("clear") public void clear() { @@ -65,12 +68,12 @@ public class CollisionMap { } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(IIIIZI)V", - garbageValue = "-622707761" + signature = "(IIIIZB)V", + garbageValue = "61" ) - public void method3685(int var1, int var2, int var3, int var4, boolean var5) { + public void method3614(int var1, int var2, int var3, int var4, boolean var5) { var1 -= this.xInset; var2 -= this.yInset; if (var3 == 0) { @@ -217,10 +220,10 @@ public class CollisionMap { } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(IIIIZS)V", - garbageValue = "463" + signature = "(IIIIZB)V", + garbageValue = "6" ) @Export("addGameObject") public void addGameObject(int var1, int var2, int var3, int var4, boolean var5) { @@ -244,10 +247,10 @@ public class CollisionMap { } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(III)V", - garbageValue = "-712245850" + signature = "(IIB)V", + garbageValue = "0" ) @Export("setBlockedByFloor") public void setBlockedByFloor(int var1, int var2) { @@ -257,10 +260,10 @@ public class CollisionMap { var10000[var2] |= 2097152; } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(III)V", - garbageValue = "1787525972" + signature = "(IIB)V", + garbageValue = "-82" ) @Export("setBlockedByFloorDec") public void setBlockedByFloorDec(int var1, int var2) { @@ -270,10 +273,10 @@ public class CollisionMap { var10000[var2] |= 262144; } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( signature = "(IIII)V", - garbageValue = "-1353999324" + garbageValue = "-144108327" ) @Export("setFlag") void setFlag(int var1, int var2, int var3) { @@ -281,12 +284,12 @@ public class CollisionMap { var10000[var2] |= var3; } - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( signature = "(IIIIZI)V", - garbageValue = "343029197" + garbageValue = "350468397" ) - public void method3690(int var1, int var2, int var3, int var4, boolean var5) { + public void method3598(int var1, int var2, int var3, int var4, boolean var5) { var1 -= this.xInset; var2 -= this.yInset; if (var3 == 0) { @@ -433,10 +436,10 @@ public class CollisionMap { } - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "(IIIIIZB)V", - garbageValue = "16" + signature = "(IIIIIZI)V", + garbageValue = "-1764798116" ) @Export("setFlagOffNonSquare") public void setFlagOffNonSquare(int var1, int var2, int var3, int var4, int var5, boolean var6) { @@ -466,10 +469,10 @@ public class CollisionMap { } - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedSignature( signature = "(IIII)V", - garbageValue = "-840002361" + garbageValue = "-1534832380" ) @Export("setFlagOff") void setFlagOff(int var1, int var2, int var3) { @@ -477,56 +480,73 @@ public class CollisionMap { var10000[var2] &= ~var3; } - @ObfuscatedName("d") + @ObfuscatedName("i") @ObfuscatedSignature( - signature = "(IIS)V", - garbageValue = "-31094" + signature = "(III)V", + garbageValue = "1031605578" ) - public void method3693(int var1, int var2) { + public void method3601(int var1, int var2) { var1 -= this.xInset; var2 -= this.yInset; int[] var10000 = this.flags[var1]; var10000[var2] &= -262145; } - @ObfuscatedName("n") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Ljava/lang/String;Ljava/lang/String;ZI)Lmh;", - garbageValue = "1385178219" + signature = "([Lgy;II)Lgy;", + garbageValue = "-356918192" ) - @Export("getPreferencesFile") - public static AccessFile getPreferencesFile(String var0, String var1, boolean var2) { - File var3 = new File(JagexCache.cacheDir, "preferences" + var0 + ".dat"); - if (var3.exists()) { - try { - AccessFile var10 = new AccessFile(var3, "rw", 10000L); - return var10; - } catch (IOException var9) { + @Export("findEnumerated") + public static Enumerated findEnumerated(Enumerated[] var0, int var1) { + Enumerated[] var2 = var0; + + for (int var3 = 0; var3 < var2.length; ++var3) { + Enumerated var4 = var2[var3]; + if (var1 == var4.rsOrdinal()) { + return var4; } } - String var4 = ""; - if (class189.cacheGamebuild == 33) { - var4 = "_rc"; - } else if (class189.cacheGamebuild == 34) { - var4 = "_wip"; - } + return null; + } - File var5 = new File(class30.userHomeDirectory, "jagex_" + var1 + "_preferences" + var0 + var4 + ".dat"); - AccessFile var6; - if (!var2 && var5.exists()) { - try { - var6 = new AccessFile(var5, "rw", 10000L); - return var6; - } catch (IOException var8) { - } - } + @ObfuscatedName("u") + @ObfuscatedSignature( + signature = "(Lhf;Lhf;I)V", + garbageValue = "1646323129" + ) + public static void method3615(AbstractArchive var0, AbstractArchive var1) { + class14.KitDefinition_archive = var0; + KitDefinition.KitDefinition_modelsArchive = var1; + KitDefinition.KitDefinition_fileCount = class14.KitDefinition_archive.getGroupFileCount(3); + } - try { - var6 = new AccessFile(var3, "rw", 10000L); - return var6; - } catch (IOException var7) { - throw new RuntimeException(); + @ObfuscatedName("y") + @ObfuscatedSignature( + signature = "(II)I", + garbageValue = "-1773174519" + ) + @Export("Messages_getLastChatID") + static int Messages_getLastChatID(int var0) { + Message var1 = (Message)Messages.Messages_hashTable.get((long)var0); + if (var1 == null) { + return -1; + } else { + return var1.nextDual == Messages.Messages_queue.sentinel ? -1 : ((Message)var1.nextDual).count; } } + + @ObfuscatedName("w") + @ObfuscatedSignature( + signature = "(III)V", + garbageValue = "746775715" + ) + public static final void method3628(int var0, int var1) { + ViewportMouse.ViewportMouse_x = var0; + ViewportMouse.ViewportMouse_y = var1; + ViewportMouse.ViewportMouse_isInViewport = true; + ViewportMouse.ViewportMouse_entityCount = 0; + ViewportMouse.ViewportMouse_false0 = false; + } } diff --git a/runescape-client/src/main/java/Coord.java b/runescape-client/src/main/java/Coord.java index d5056361f2..5779d09c80 100644 --- a/runescape-client/src/main/java/Coord.java +++ b/runescape-client/src/main/java/Coord.java @@ -4,42 +4,36 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("hf") +@ObfuscatedName("hx") @Implements("Coord") public class Coord { - @ObfuscatedName("i") - @ObfuscatedSignature( - signature = "Lhq;" - ) - @Export("Widget_archive") - static AbstractArchive Widget_archive; - @ObfuscatedName("dv") - @ObfuscatedSignature( - signature = "Lij;" - ) - @Export("archive15") - static Archive archive15; - @ObfuscatedName("a") + @ObfuscatedName("c") @ObfuscatedGetter( - intValue = 440805047 + intValue = 556251855 + ) + @Export("graphicsTickTimeIdx") + static int graphicsTickTimeIdx; + @ObfuscatedName("u") + @ObfuscatedGetter( + intValue = 1348059781 ) @Export("plane") public int plane; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = 649013739 + intValue = 1294830225 ) @Export("x") public int x; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = 1217821847 + intValue = 358494981 ) @Export("y") public int y; @ObfuscatedSignature( - signature = "(Lhf;)V" + signature = "(Lhx;)V" ) public Coord(Coord var1) { this.plane = var1.plane; @@ -64,20 +58,20 @@ public class Coord { } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "(I)I", - garbageValue = "-1545441296" + garbageValue = "-633329475" ) @Export("packed") public int packed() { return this.plane << 28 | this.x << 14 | this.y; } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Lhf;I)Z", - garbageValue = "472807046" + signature = "(Lhx;I)Z", + garbageValue = "1606698981" ) @Export("equalsCoord") boolean equalsCoord(Coord var1) { @@ -90,10 +84,10 @@ public class Coord { } } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Ljava/lang/String;I)Ljava/lang/String;", - garbageValue = "-1765692684" + signature = "(Ljava/lang/String;B)Ljava/lang/String;", + garbageValue = "-38" ) @Export("toString") String toString(String var1) { @@ -115,54 +109,4 @@ public class Coord { public String toString() { return this.toString(","); } - - @ObfuscatedName("t") - @ObfuscatedSignature( - signature = "(IB)Lih;", - garbageValue = "-87" - ) - @Export("getEnum") - public static EnumDefinition getEnum(int var0) { - EnumDefinition var1 = (EnumDefinition)EnumDefinition.EnumDefinition_cached.get((long)var0); - if (var1 != null) { - return var1; - } else { - byte[] var2 = EnumDefinition.EnumDefinition_archive.takeFile(8, var0); - var1 = new EnumDefinition(); - if (var2 != null) { - var1.decode(new Buffer(var2)); - } - - EnumDefinition.EnumDefinition_cached.put(var1, (long)var0); - return var1; - } - } - - @ObfuscatedName("v") - @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "-1708484762" - ) - static void method4144() { - if (Login.field1188) { - NPC.titleboxSprite = null; - UserComparator9.titlebuttonSprite = null; - class208.runesSprite = null; - Login.leftTitleSprite = null; - FontName.rightTitleSprite = null; - Tiles.logoSprite = null; - Decimator.title_muteSprite = null; - UserComparator8.options_buttons_0Sprite = null; - Login.options_buttons_2Sprite = null; - GrandExchangeEvent.worldSelectBackSprites = null; - JagexCache.worldSelectFlagSprites = null; - StudioGame.worldSelectArrows = null; - Interpreter.worldSelectStars = null; - Message.field587 = null; - Login.loginScreenRunesAnimation.method1955(); - class80.method2194(2); - UrlRequester.method3428(true); - Login.field1188 = false; - } - } } diff --git a/runescape-client/src/main/java/Decimator.java b/runescape-client/src/main/java/Decimator.java index dd616eb1b3..23578ec9b2 100644 --- a/runescape-client/src/main/java/Decimator.java +++ b/runescape-client/src/main/java/Decimator.java @@ -3,41 +3,36 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; +import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("do") +@ObfuscatedName("dn") @Implements("Decimator") public class Decimator { - @ObfuscatedName("d") + @ObfuscatedName("w") @ObfuscatedSignature( - signature = "[Llw;" + signature = "Llm;" ) - @Export("title_muteSprite") - static IndexedSprite[] title_muteSprite; - @ObfuscatedName("dx") - @ObfuscatedSignature( - signature = "Lij;" - ) - @Export("archive11") - static Archive archive11; - @ObfuscatedName("ei") + @Export("logoSprite") + static IndexedSprite logoSprite; + @ObfuscatedName("hh") @ObfuscatedGetter( - intValue = -1888445625 + intValue = -1979391885 ) - @Export("port2") - static int port2; - @ObfuscatedName("q") + @Export("cameraYaw") + static int cameraYaw; + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = -885023939 + intValue = 169220929 ) @Export("inputRate") int inputRate; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = 929482819 + intValue = 1367353289 ) @Export("outputRate") int outputRate; - @ObfuscatedName("l") + @ObfuscatedName("p") @Export("table") int[][] table; @@ -65,7 +60,7 @@ public class Decimator { for (int var7 = 0; var7 < var1; ++var7) { int[] var8 = this.table[var7]; double var9 = (double)var7 / (double)var1 + 6.0D; - int var11 = (int)Math.floor(1.0D + (var9 - 7.0D)); + int var11 = (int)Math.floor(var9 - 7.0D + 1.0D); if (var11 < 0) { var11 = 0; } @@ -76,29 +71,29 @@ public class Decimator { } for (double var13 = (double)var2 / (double)var1; var11 < var12; ++var11) { - double var15 = ((double)var11 - var9) * 3.141592653589793D; + double var15 = 3.141592653589793D * ((double)var11 - var9); double var17 = var13; if (var15 < -1.0E-4D || var15 > 1.0E-4D) { var17 = var13 * (Math.sin(var15) / var15); } - var17 *= 0.54D + 0.46D * Math.cos(0.2243994752564138D * ((double)var11 - var9)); - var8[var11] = (int)Math.floor(0.5D + 65536.0D * var17); + var17 *= 0.54D + 0.46D * Math.cos(((double)var11 - var9) * 0.2243994752564138D); + var8[var11] = (int)Math.floor(65536.0D * var17 + 0.5D); } } } } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "([BI)[B", - garbageValue = "73782280" + garbageValue = "-1845568783" ) @Export("resample") byte[] resample(byte[] var1) { if (this.table != null) { - int var2 = (int)((long)var1.length * (long)this.outputRate / (long)this.inputRate) + 14; + int var2 = (int)((long)this.outputRate * (long)var1.length / (long)this.inputRate) + 14; int[] var3 = new int[var2]; int var4 = 0; int var5 = 0; @@ -136,24 +131,24 @@ public class Decimator { return var1; } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(IB)I", - garbageValue = "30" + signature = "(II)I", + garbageValue = "1828348822" ) @Export("scaleRate") int scaleRate(int var1) { if (this.table != null) { - var1 = (int)((long)var1 * (long)this.outputRate / (long)this.inputRate); + var1 = (int)((long)this.outputRate * (long)var1 / (long)this.inputRate); } return var1; } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(IB)I", - garbageValue = "13" + signature = "(II)I", + garbageValue = "-925934558" ) @Export("scalePosition") int scalePosition(int var1) { @@ -164,88 +159,29 @@ public class Decimator { return var1; } - @ObfuscatedName("a") + @ObfuscatedName("n") @ObfuscatedSignature( - signature = "(II)Liz;", - garbageValue = "1437628659" + signature = "(ILci;ZI)I", + garbageValue = "1172796739" ) - public static VarcInt method2694(int var0) { - VarcInt var1 = (VarcInt)VarcInt.VarcInt_cached.get((long)var0); - if (var1 != null) { - return var1; - } else { - byte[] var2 = VarcInt.VarcInt_archive.takeFile(19, var0); - var1 = new VarcInt(); - if (var2 != null) { - var1.method4549(new Buffer(var2)); + static int method2564(int var0, Script var1, boolean var2) { + Widget var3 = var2 ? Interpreter.field1090 : class188.field2352; + if (var0 == ScriptOpcodes.CC_GETINVOBJECT) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.itemId; + return 1; + } else if (var0 == ScriptOpcodes.CC_GETINVCOUNT) { + if (var3.itemId != -1) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.itemQuantity; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; } - VarcInt.VarcInt_cached.put(var1, (long)var0); - return var1; - } - } - - @ObfuscatedName("t") - @ObfuscatedSignature( - signature = "(Ljava/lang/Object;ZI)[B", - garbageValue = "1813906686" - ) - @Export("serialize") - public static byte[] serialize(Object var0, boolean var1) { - if (var0 == null) { - return null; - } else if (var0 instanceof byte[]) { - byte[] var3 = (byte[])((byte[])var0); - return var1 ? Message.method1312(var3) : var3; - } else if (var0 instanceof AbstractByteArrayCopier) { - AbstractByteArrayCopier var2 = (AbstractByteArrayCopier)var0; - return var2.get(); + return 1; + } else if (var0 == ScriptOpcodes.CC_GETID) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.childIndex; + return 1; } else { - throw new IllegalArgumentException(); + return 2; } } - - @ObfuscatedName("im") - @ObfuscatedSignature( - signature = "(III)V", - garbageValue = "-962309215" - ) - @Export("calculateMenuBounds") - static void calculateMenuBounds(int var0, int var1) { - int var2 = class43.fontBold12.stringWidth("Choose Option"); - - int var3; - int var4; - for (var3 = 0; var3 < Client.menuOptionsCount; ++var3) { - var4 = class43.fontBold12.stringWidth(class65.method1316(var3)); - if (var4 > var2) { - var2 = var4; - } - } - - var2 += 8; - var3 = Client.menuOptionsCount * 15 + 22; - var4 = var0 - var2 / 2; - if (var2 + var4 > class286.canvasWidth) { - var4 = class286.canvasWidth - var2; - } - - if (var4 < 0) { - var4 = 0; - } - - int var5 = var1; - if (var1 + var3 > FloorUnderlayDefinition.canvasHeight) { - var5 = FloorUnderlayDefinition.canvasHeight - var3; - } - - if (var5 < 0) { - var5 = 0; - } - - MusicPatchNode.menuX = var4; - TextureProvider.menuY = var5; - KeyHandler.menuWidth = var2; - WorldMapData_1.menuHeight = Client.menuOptionsCount * 15 + 22; - } } diff --git a/runescape-client/src/main/java/DefaultsGroup.java b/runescape-client/src/main/java/DefaultsGroup.java index 571513f888..f95b3a8595 100644 --- a/runescape-client/src/main/java/DefaultsGroup.java +++ b/runescape-client/src/main/java/DefaultsGroup.java @@ -4,23 +4,23 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("km") +@ObfuscatedName("kd") @Implements("DefaultsGroup") public class DefaultsGroup { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lkm;" + signature = "Lkd;" ) - static final DefaultsGroup field3785; - @ObfuscatedName("t") + static final DefaultsGroup field3797; + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = 1787952601 + intValue = -757733349 ) @Export("group") final int group; static { - field3785 = new DefaultsGroup(3); + field3797 = new DefaultsGroup(3); } DefaultsGroup(int var1) { diff --git a/runescape-client/src/main/java/DemotingHashTable.java b/runescape-client/src/main/java/DemotingHashTable.java index 3861bf89e0..6274341083 100644 --- a/runescape-client/src/main/java/DemotingHashTable.java +++ b/runescape-client/src/main/java/DemotingHashTable.java @@ -3,32 +3,32 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ed") +@ObfuscatedName("eo") @Implements("DemotingHashTable") public final class DemotingHashTable { - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("capacity") int capacity; - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("remaining") int remaining; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Llr;" + signature = "Llb;" ) @Export("hashTable") IterableNodeHashTable hashTable; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Ljq;" + signature = "Ljz;" ) @Export("queue") IterableDualNodeQueue queue; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "Les;" + signature = "Lex;" ) - class146 field1943; + class146 field1960; public DemotingHashTable(int var1, int var2) { this.queue = new IterableDualNodeQueue(); @@ -42,7 +42,7 @@ public final class DemotingHashTable { this.hashTable = new IterableNodeHashTable(var3); } - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("get") public Object get(long var1) { Wrapper var3 = (Wrapper)this.hashTable.get(var1); @@ -73,16 +73,16 @@ public final class DemotingHashTable { } } - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("remove") void remove(long var1) { Wrapper var3 = (Wrapper)this.hashTable.get(var1); this.removeWrapper(var3); } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Leo;)V" + signature = "(Lev;)V" ) @Export("removeWrapper") void removeWrapper(Wrapper var1) { @@ -94,7 +94,7 @@ public final class DemotingHashTable { } - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("put") public void put(Object var1, long var2, int var4) { if (var4 > this.capacity) { @@ -113,8 +113,8 @@ public final class DemotingHashTable { } this.removeWrapper(var5); - if (this.field1943 != null) { - this.field1943.method3453(var5.get()); + if (this.field1960 != null) { + this.field1960.method3382(var5.get()); } } @@ -125,7 +125,7 @@ public final class DemotingHashTable { } } - @ObfuscatedName("v") + @ObfuscatedName("z") @Export("demote") public void demote(int var1) { for (Wrapper var2 = (Wrapper)this.queue.last(); var2 != null; var2 = (Wrapper)this.queue.previous()) { @@ -146,7 +146,7 @@ public final class DemotingHashTable { } - @ObfuscatedName("l") + @ObfuscatedName("p") @Export("clear") public void clear() { this.queue.clear(); diff --git a/runescape-client/src/main/java/DesktopPlatformInfoProvider.java b/runescape-client/src/main/java/DesktopPlatformInfoProvider.java index 408c226efa..e37f47f796 100644 --- a/runescape-client/src/main/java/DesktopPlatformInfoProvider.java +++ b/runescape-client/src/main/java/DesktopPlatformInfoProvider.java @@ -5,44 +5,38 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("lf") +@ObfuscatedName("li") @Implements("DesktopPlatformInfoProvider") public class DesktopPlatformInfoProvider implements PlatformInfoProvider { - @ObfuscatedName("eg") - @ObfuscatedSignature( - signature = "Lij;" - ) - @Export("archive17") - static Archive archive17; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = -1279916099 + intValue = -628926999 ) - int field3895; - @ObfuscatedName("v") + int field3897; + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = 1801255819 - ) - int field3896; - @ObfuscatedName("l") - @ObfuscatedGetter( - intValue = 10853499 + intValue = 1090209519 ) int field3899; + @ObfuscatedName("p") + @ObfuscatedGetter( + intValue = 1137197967 + ) + int field3900; - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(I)Llk;", - garbageValue = "-1540970685" + signature = "(B)Llj;", + garbageValue = "-40" ) @Export("get") public PlatformInfo get() { byte var1; - if (class96.field1299.startsWith("win")) { + if (WorldMapIcon_0.field131.startsWith("win")) { var1 = 1; - } else if (class96.field1299.startsWith("mac")) { + } else if (WorldMapIcon_0.field131.startsWith("mac")) { var1 = 2; - } else if (class96.field1299.startsWith("linux")) { + } else if (WorldMapIcon_0.field131.startsWith("linux")) { var1 = 3; } else { var1 = 4; @@ -140,11 +134,11 @@ public class DesktopPlatformInfoProvider implements PlatformInfoProvider { var8 = 4; } - this.method6392(var5); + this.method6345(var5); Runtime.getRuntime(); int var10 = (int)((long)((new Random()).nextInt(31457280) + 230686720) / 1048576L) + 1; int var11; - if (this.field3895 > 3) { + if (this.field3897 > 3) { var11 = Runtime.getRuntime().availableProcessors(); } else { var11 = 0; @@ -158,53 +152,53 @@ public class DesktopPlatformInfoProvider implements PlatformInfoProvider { String var17 = ""; String var18 = ""; int[] var23 = new int[3]; - return new PlatformInfo(var1, var24, var7, var8, this.field3895, this.field3896, this.field3899, false, var10, var11, var12, 0, var13, var14, var15, var16, 0, 0, 0, 0, var17, var18, var23, 0, ""); + return new PlatformInfo(var1, var24, var7, var8, this.field3897, this.field3899, this.field3900, false, var10, var11, var12, 0, var13, var14, var15, var16, 0, 0, 0, 0, var17, var18, var23, 0, ""); } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Ljava/lang/String;S)V", - garbageValue = "4097" + signature = "(Ljava/lang/String;B)V", + garbageValue = "-51" ) - void method6392(String var1) { + void method6345(String var1) { if (var1.startsWith("1.")) { - this.method6390(var1); + this.method6349(var1); } else { - this.method6395(var1); + this.method6343(var1); } } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Ljava/lang/String;B)V", - garbageValue = "4" + signature = "(Ljava/lang/String;I)V", + garbageValue = "-907450519" ) - void method6390(String var1) { + void method6349(String var1) { String[] var2 = var1.split("\\."); try { - this.field3895 = Integer.parseInt(var2[1]); + this.field3897 = Integer.parseInt(var2[1]); var2 = var2[2].split("_"); - this.field3896 = Integer.parseInt(var2[0]); - this.field3899 = Integer.parseInt(var2[1]); + this.field3899 = Integer.parseInt(var2[0]); + this.field3900 = Integer.parseInt(var2[1]); } catch (Exception var4) { } } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(Ljava/lang/String;B)V", - garbageValue = "1" + signature = "(Ljava/lang/String;I)V", + garbageValue = "-342949877" ) - void method6395(String var1) { + void method6343(String var1) { String[] var2 = var1.split("\\."); try { - this.field3895 = Integer.parseInt(var2[0]); - this.field3896 = Integer.parseInt(var2[1]); - this.field3899 = Integer.parseInt(var2[2]); + this.field3897 = Integer.parseInt(var2[0]); + this.field3899 = Integer.parseInt(var2[1]); + this.field3900 = Integer.parseInt(var2[2]); } catch (Exception var4) { } diff --git a/runescape-client/src/main/java/DevicePcmPlayer.java b/runescape-client/src/main/java/DevicePcmPlayer.java index ffe25b46a0..c209b0bcfc 100644 --- a/runescape-client/src/main/java/DevicePcmPlayer.java +++ b/runescape-client/src/main/java/DevicePcmPlayer.java @@ -9,54 +9,54 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("at") +@ObfuscatedName("as") @Implements("DevicePcmPlayer") public class DevicePcmPlayer extends PcmPlayer { - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("format") AudioFormat format; - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("line") SourceDataLine line; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = 1308062251 + intValue = 447959355 ) @Export("capacity2") int capacity2; - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("byteSamples") byte[] byteSamples; DevicePcmPlayer() { } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "-122" + signature = "(I)V", + garbageValue = "347893346" ) @Export("init") protected void init() { - this.format = new AudioFormat((float)(PcmPlayer.PcmPlayer_sampleRate * 22050), 16, InterfaceParent.PcmPlayer_stereo ? 2 : 1, true, false); - this.byteSamples = new byte[256 << (InterfaceParent.PcmPlayer_stereo ? 2 : 1)]; + this.format = new AudioFormat((float)Messages.PcmPlayer_sampleRate, 16, PcmPlayer.PcmPlayer_stereo ? 2 : 1, true, false); + this.byteSamples = new byte[256 << (PcmPlayer.PcmPlayer_stereo ? 2 : 1)]; } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(II)V", - garbageValue = "1329305761" + signature = "(IB)V", + garbageValue = "25" ) @Export("open") protected void open(int var1) throws LineUnavailableException { try { - Info var2 = new Info(SourceDataLine.class, this.format, var1 << (InterfaceParent.PcmPlayer_stereo ? 2 : 1)); + Info var2 = new Info(SourceDataLine.class, this.format, var1 << (PcmPlayer.PcmPlayer_stereo ? 2 : 1)); this.line = (SourceDataLine)AudioSystem.getLine(var2); this.line.open(); this.line.start(); this.capacity2 = var1; } catch (LineUnavailableException var5) { - if (GraphicsObject.method2158(var1) != 1) { + if (BoundaryObject.method3312(var1) != 1) { int var4 = var1 - 1; var4 |= var4 >>> 1; var4 |= var4 >>> 2; @@ -72,21 +72,21 @@ public class DevicePcmPlayer extends PcmPlayer { } } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(I)I", - garbageValue = "-2053382901" + signature = "(B)I", + garbageValue = "80" ) @Export("position") protected int position() { - return this.capacity2 - (this.line.available() >> (InterfaceParent.PcmPlayer_stereo ? 2 : 1)); + return this.capacity2 - (this.line.available() >> (PcmPlayer.PcmPlayer_stereo ? 2 : 1)); } - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("write") protected void write() { int var1 = 256; - if (InterfaceParent.PcmPlayer_stereo) { + if (PcmPlayer.PcmPlayer_stereo) { var1 <<= 1; } @@ -103,10 +103,10 @@ public class DevicePcmPlayer extends PcmPlayer { this.line.write(this.byteSamples, 0, var1 << 1); } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "-359946727" + garbageValue = "-1441503616" ) @Export("close") protected void close() { @@ -117,10 +117,10 @@ public class DevicePcmPlayer extends PcmPlayer { } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "47548316" + signature = "(B)V", + garbageValue = "45" ) @Export("discard") protected void discard() { diff --git a/runescape-client/src/main/java/DevicePcmPlayerProvider.java b/runescape-client/src/main/java/DevicePcmPlayerProvider.java index 04694b554c..265e0a3975 100644 --- a/runescape-client/src/main/java/DevicePcmPlayerProvider.java +++ b/runescape-client/src/main/java/DevicePcmPlayerProvider.java @@ -2,315 +2,47 @@ import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("az") +@ObfuscatedName("al") @Implements("DevicePcmPlayerProvider") public class DevicePcmPlayerProvider implements class99 { - @ObfuscatedName("t") + @ObfuscatedName("jx") @ObfuscatedSignature( - signature = "Lhq;" + signature = "Lhl;" ) - @Export("SequenceDefinition_animationsArchive") - static AbstractArchive SequenceDefinition_animationsArchive; - @ObfuscatedName("co") - public static char field395; + @Export("dragInventoryWidget") + static Widget dragInventoryWidget; DevicePcmPlayerProvider() { } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(I)Ldq;", - garbageValue = "1807765023" + signature = "(I)Lde;", + garbageValue = "2104968763" ) @Export("player") public PcmPlayer player() { return new DevicePcmPlayer(); } - @ObfuscatedName("n") + @ObfuscatedName("fz") @ObfuscatedSignature( - signature = "(Lkf;I)V", - garbageValue = "-1072829390" + signature = "(II)V", + garbageValue = "2048125775" ) - static final void method919(PacketBuffer var0) { - int var1 = 0; - var0.importIndex(); - - byte[] var10000; - int var2; - int var3; - int var4; - for (var2 = 0; var2 < Players.Players_count; ++var2) { - var3 = Players.Players_indices[var2]; - if ((Players.field1227[var3] & 1) == 0) { - if (var1 > 0) { - --var1; - var10000 = Players.field1227; - var10000[var3] = (byte)(var10000[var3] | 2); - } else { - var4 = var0.readBits(1); - if (var4 == 0) { - var1 = class81.method2206(var0); - var10000 = Players.field1227; - var10000[var3] = (byte)(var10000[var3] | 2); - } else { - ClientPacket.readPlayerUpdate(var0, var3); - } - } - } + @Export("forceDisconnect") + static final void forceDisconnect(int var0) { + class40.logOut(); + switch(var0) { + case 1: + Login.loginIndex = 24; + PacketWriter.setLoginResponseString("", "You were disconnected from the server.", ""); + break; + case 2: + Login.loginIndex = 24; + PacketWriter.setLoginResponseString("The game servers are currently being updated.", "Please wait a few minutes and try again.", ""); } - var0.exportIndex(); - if (var1 != 0) { - throw new RuntimeException(); - } else { - var0.importIndex(); - - for (var2 = 0; var2 < Players.Players_count; ++var2) { - var3 = Players.Players_indices[var2]; - if ((Players.field1227[var3] & 1) != 0) { - if (var1 > 0) { - --var1; - var10000 = Players.field1227; - var10000[var3] = (byte)(var10000[var3] | 2); - } else { - var4 = var0.readBits(1); - if (var4 == 0) { - var1 = class81.method2206(var0); - var10000 = Players.field1227; - var10000[var3] = (byte)(var10000[var3] | 2); - } else { - ClientPacket.readPlayerUpdate(var0, var3); - } - } - } - } - - var0.exportIndex(); - if (var1 != 0) { - throw new RuntimeException(); - } else { - var0.importIndex(); - - for (var2 = 0; var2 < Players.Players_emptyIdxCount; ++var2) { - var3 = Players.Players_emptyIndices[var2]; - if ((Players.field1227[var3] & 1) != 0) { - if (var1 > 0) { - --var1; - var10000 = Players.field1227; - var10000[var3] = (byte)(var10000[var3] | 2); - } else { - var4 = var0.readBits(1); - if (var4 == 0) { - var1 = class81.method2206(var0); - var10000 = Players.field1227; - var10000[var3] = (byte)(var10000[var3] | 2); - } else if (class247.updateExternalPlayer(var0, var3)) { - var10000 = Players.field1227; - var10000[var3] = (byte)(var10000[var3] | 2); - } - } - } - } - - var0.exportIndex(); - if (var1 != 0) { - throw new RuntimeException(); - } else { - var0.importIndex(); - - for (var2 = 0; var2 < Players.Players_emptyIdxCount; ++var2) { - var3 = Players.Players_emptyIndices[var2]; - if ((Players.field1227[var3] & 1) == 0) { - if (var1 > 0) { - --var1; - var10000 = Players.field1227; - var10000[var3] = (byte)(var10000[var3] | 2); - } else { - var4 = var0.readBits(1); - if (var4 == 0) { - var1 = class81.method2206(var0); - var10000 = Players.field1227; - var10000[var3] = (byte)(var10000[var3] | 2); - } else if (class247.updateExternalPlayer(var0, var3)) { - var10000 = Players.field1227; - var10000[var3] = (byte)(var10000[var3] | 2); - } - } - } - } - - var0.exportIndex(); - if (var1 != 0) { - throw new RuntimeException(); - } else { - Players.Players_count = 0; - Players.Players_emptyIdxCount = 0; - - for (var2 = 1; var2 < 2048; ++var2) { - var10000 = Players.field1227; - var10000[var2] = (byte)(var10000[var2] >> 1); - Player var5 = Client.players[var2]; - if (var5 != null) { - Players.Players_indices[++Players.Players_count - 1] = var2; - } else { - Players.Players_emptyIndices[++Players.Players_emptyIdxCount - 1] = var2; - } - } - - } - } - } - } - } - - @ObfuscatedName("p") - @ObfuscatedSignature( - signature = "(IIS)I", - garbageValue = "6602" - ) - static final int method918(int var0, int var1) { - int var2 = var0 + var1 * 57; - var2 ^= var2 << 13; - int var3 = var2 * (var2 * var2 * 15731 + 789221) + 1376312589 & Integer.MAX_VALUE; - return var3 >> 19 & 255; - } - - @ObfuscatedName("ag") - @ObfuscatedSignature( - signature = "(ILcj;ZI)I", - garbageValue = "1874090730" - ) - static int method916(int var0, Script var1, boolean var2) { - if (var0 == ScriptOpcodes.CLIENTCLOCK) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = Client.cycle; - return 1; - } else { - int var3; - int var4; - if (var0 == ScriptOpcodes.INV_GETOBJ) { - Interpreter.Interpreter_intStackSize -= 2; - var3 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var4 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = class3.method68(var3, var4); - return 1; - } else if (var0 == ScriptOpcodes.INV_GETNUM) { - Interpreter.Interpreter_intStackSize -= 2; - var3 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var4 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = WorldMapAreaData.ItemContainer_getCount(var3, var4); - return 1; - } else if (var0 == ScriptOpcodes.INV_TOTAL) { - Interpreter.Interpreter_intStackSize -= 2; - var3 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var4 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = Canvas.method935(var3, var4); - return 1; - } else if (var0 == ScriptOpcodes.INV_SIZE) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = WorldMapSectionType.getInvDefinition(var3).size; - return 1; - } else if (var0 == ScriptOpcodes.STAT) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = Client.currentLevels[var3]; - return 1; - } else if (var0 == ScriptOpcodes.STAT_BASE) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = Client.levels[var3]; - return 1; - } else if (var0 == ScriptOpcodes.STAT_XP) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = Client.experience[var3]; - return 1; - } else { - int var5; - if (var0 == ScriptOpcodes.COORD) { - var3 = Player.Client_plane; - var4 = UserComparator8.baseX * 64 + (class215.localPlayer.x >> 7); - var5 = HealthBar.baseY * 64 + (class215.localPlayer.y >> 7); - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = (var4 << 14) + var5 + (var3 << 28); - return 1; - } else if (var0 == ScriptOpcodes.COORDX) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3 >> 14 & 16383; - return 1; - } else if (var0 == ScriptOpcodes.COORDZ) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3 >> 28; - return 1; - } else if (var0 == ScriptOpcodes.COORDY) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3 & 16383; - return 1; - } else if (var0 == ScriptOpcodes.MAP_MEMBERS) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = Client.isMembersWorld ? 1 : 0; - return 1; - } else if (var0 == ScriptOpcodes.INVOTHER_GETOBJ) { - Interpreter.Interpreter_intStackSize -= 2; - var3 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize] + 32768; - var4 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = class3.method68(var3, var4); - return 1; - } else if (var0 == ScriptOpcodes.INVOTHER_GETNUM) { - Interpreter.Interpreter_intStackSize -= 2; - var3 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize] + 32768; - var4 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = WorldMapAreaData.ItemContainer_getCount(var3, var4); - return 1; - } else if (var0 == ScriptOpcodes.INVOTHER_TOTAL) { - Interpreter.Interpreter_intStackSize -= 2; - var3 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize] + 32768; - var4 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = Canvas.method935(var3, var4); - return 1; - } else if (var0 == ScriptOpcodes.STAFFMODLEVEL) { - if (Client.staffModLevel >= 2) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = Client.staffModLevel; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - } - - return 1; - } else if (var0 == ScriptOpcodes.REBOOTTIMER) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = Client.rebootTimer; - return 1; - } else if (var0 == ScriptOpcodes.MAP_WORLD) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = Client.worldId; - return 1; - } else if (var0 == ScriptOpcodes.RUNENERGY_VISIBLE) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = Client.runEnergy; - return 1; - } else if (var0 == ScriptOpcodes.RUNWEIGHT_VISIBLE) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = Client.weight; - return 1; - } else if (var0 == ScriptOpcodes.PLAYERMOD) { - if (Client.playerMod) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 1; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - } - - return 1; - } else if (var0 == ScriptOpcodes.WORLDFLAGS) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = Client.worldProperties; - return 1; - } else if (var0 == ScriptOpcodes.MOVECOORD) { - Interpreter.Interpreter_intStackSize -= 4; - var3 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var4 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - var5 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 2]; - int var6 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 3]; - var3 += var4 << 14; - var3 += var5 << 28; - var3 += var6; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3; - return 1; - } else { - return 2; - } - } - } } } diff --git a/runescape-client/src/main/java/DirectByteArrayCopier.java b/runescape-client/src/main/java/DirectByteArrayCopier.java index b985d4ee2a..3b1617cee3 100644 --- a/runescape-client/src/main/java/DirectByteArrayCopier.java +++ b/runescape-client/src/main/java/DirectByteArrayCopier.java @@ -4,25 +4,29 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("gv") +@ObfuscatedName("gu") @Implements("DirectByteArrayCopier") public class DirectByteArrayCopier extends AbstractByteArrayCopier { - @ObfuscatedName("jz") + @ObfuscatedName("az") @ObfuscatedSignature( - signature = "Lhi;" + signature = "Llp;" ) - static Widget field2476; - @ObfuscatedName("a") + @Export("rasterProvider") + public static AbstractRasterProvider rasterProvider; + @ObfuscatedName("dr") + @ObfuscatedSignature( + signature = "Lij;" + ) + @Export("archive5") + static Archive archive5; + @ObfuscatedName("u") @Export("directBuffer") ByteBuffer directBuffer; - DirectByteArrayCopier() { - } - - @ObfuscatedName("q") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(B)[B", - garbageValue = "19" + signature = "(S)[B", + garbageValue = "18982" ) @Export("get") byte[] get() { @@ -32,71 +36,30 @@ public class DirectByteArrayCopier extends AbstractByteArrayCopier { return var1; } - @ObfuscatedName("v") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "([BB)V", - garbageValue = "-93" + signature = "([BI)V", + garbageValue = "-1436271820" ) @Export("set") - void set(byte[] var1) { + public void set(byte[] var1) { this.directBuffer = ByteBuffer.allocateDirect(var1.length); this.directBuffer.position(0); this.directBuffer.put(var1); } - @ObfuscatedName("d") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "102" + signature = "(CI)Z", + garbageValue = "-1809076627" ) - public static void method4101() { - PlayerAppearance.PlayerAppearance_cachedModels.clear(); - } - - @ObfuscatedName("kv") - @ObfuscatedSignature( - signature = "([Lhi;IB)V", - garbageValue = "126" - ) - @Export("runComponentCloseListeners") - static final void runComponentCloseListeners(Widget[] var0, int var1) { - for (int var2 = 0; var2 < var0.length; ++var2) { - Widget var3 = var0[var2]; - if (var3 != null) { - if (var3.type == 0) { - if (var3.children != null) { - runComponentCloseListeners(var3.children, var1); - } - - InterfaceParent var4 = (InterfaceParent)Client.interfaceParents.get((long)var3.id); - if (var4 != null) { - AttackOption.runIntfCloseListeners(var4.group, var1); - } - } - - ScriptEvent var5; - if (var1 == 0 && var3.onDialogAbort != null) { - var5 = new ScriptEvent(); - var5.widget = var3; - var5.args = var3.onDialogAbort; - GrandExchangeOfferAgeComparator.runScriptEvent(var5); - } - - if (var1 == 1 && var3.onSubChange != null) { - if (var3.childIndex >= 0) { - Widget var6 = PacketBufferNode.getWidget(var3.id); - if (var6 == null || var6.children == null || var3.childIndex >= var6.children.length || var3 != var6.children[var3.childIndex]) { - continue; - } - } - - var5 = new ScriptEvent(); - var5.widget = var3; - var5.args = var3.onSubChange; - GrandExchangeOfferAgeComparator.runScriptEvent(var5); - } + static boolean method4010(char var0) { + for (int var1 = 0; var1 < "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!\"£$%^&*()-_=+[{]};:'@#~,<.>/?\\| ".length(); ++var1) { + if (var0 == "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!\"£$%^&*()-_=+[{]};:'@#~,<.>/?\\| ".charAt(var1)) { + return true; } } + return false; } } diff --git a/runescape-client/src/main/java/DirectWrapper.java b/runescape-client/src/main/java/DirectWrapper.java index d8c7a0fb3e..4ac6db4a2a 100644 --- a/runescape-client/src/main/java/DirectWrapper.java +++ b/runescape-client/src/main/java/DirectWrapper.java @@ -2,10 +2,10 @@ import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; -@ObfuscatedName("en") +@ObfuscatedName("ep") @Implements("DirectWrapper") public class DirectWrapper extends Wrapper { - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("obj") Object obj; @@ -14,13 +14,13 @@ public class DirectWrapper extends Wrapper { this.obj = var1; } - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("get") Object get() { return this.obj; } - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("isSoft") boolean isSoft() { return false; diff --git a/runescape-client/src/main/java/DualNode.java b/runescape-client/src/main/java/DualNode.java index f83bdcd2d4..0007a4f0f3 100644 --- a/runescape-client/src/main/java/DualNode.java +++ b/runescape-client/src/main/java/DualNode.java @@ -3,26 +3,26 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("fa") +@ObfuscatedName("fn") @Implements("DualNode") public class DualNode extends Node { - @ObfuscatedName("cj") + @ObfuscatedName("ci") @Export("keyDual") public long keyDual; - @ObfuscatedName("cm") + @ObfuscatedName("cu") @ObfuscatedSignature( - signature = "Lfa;" + signature = "Lfn;" ) @Export("previousDual") public DualNode previousDual; - @ObfuscatedName("cb") + @ObfuscatedName("cs") @ObfuscatedSignature( - signature = "Lfa;" + signature = "Lfn;" ) @Export("nextDual") public DualNode nextDual; - @ObfuscatedName("cu") + @ObfuscatedName("cn") @Export("removeDual") public void removeDual() { if (this.nextDual != null) { diff --git a/runescape-client/src/main/java/DualNodeDeque.java b/runescape-client/src/main/java/DualNodeDeque.java index ecfd3d2e67..d3063fc7bb 100644 --- a/runescape-client/src/main/java/DualNodeDeque.java +++ b/runescape-client/src/main/java/DualNodeDeque.java @@ -3,12 +3,12 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ia") +@ObfuscatedName("iw") @Implements("DualNodeDeque") public final class DualNodeDeque { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lfa;" + signature = "Lfn;" ) @Export("sentinel") DualNode sentinel; @@ -19,9 +19,9 @@ public final class DualNodeDeque { this.sentinel.nextDual = this.sentinel; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Lfa;)V" + signature = "(Lfn;)V" ) @Export("addFirst") public void addFirst(DualNode var1) { @@ -35,9 +35,9 @@ public final class DualNodeDeque { var1.previousDual.nextDual = var1; } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Lfa;)V" + signature = "(Lfn;)V" ) @Export("addLast") public void addLast(DualNode var1) { @@ -51,9 +51,9 @@ public final class DualNodeDeque { var1.previousDual.nextDual = var1; } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "()Lfa;" + signature = "()Lfn;" ) @Export("removeLast") public DualNode removeLast() { diff --git a/runescape-client/src/main/java/DynamicObject.java b/runescape-client/src/main/java/DynamicObject.java index e9c7d84097..81d621e05a 100644 --- a/runescape-client/src/main/java/DynamicObject.java +++ b/runescape-client/src/main/java/DynamicObject.java @@ -4,66 +4,72 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("cm") +@ObfuscatedName("cu") @Implements("DynamicObject") public class DynamicObject extends Entity { - @ObfuscatedName("a") + @ObfuscatedName("n") + @ObfuscatedSignature( + signature = "Lbv;" + ) + @Export("loginScreenRunesAnimation") + static LoginScreenAnimation loginScreenRunesAnimation; + @ObfuscatedName("u") @ObfuscatedGetter( - intValue = 555172431 + intValue = -679887147 ) @Export("id") int id; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = 1782600615 + intValue = 431933847 ) @Export("type") int type; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = 984708177 + intValue = -68495843 ) @Export("orientation") int orientation; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = -1991906229 + intValue = -1644974197 ) @Export("plane") int plane; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = -2040349825 + intValue = 707207003 ) @Export("x") int x; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = 1510224555 + intValue = -1196896887 ) @Export("y") int y; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "Liv;" + signature = "Liy;" ) @Export("sequenceDefinition") SequenceDefinition sequenceDefinition; - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedGetter( - intValue = 1143115641 + intValue = 672363513 ) @Export("frame") int frame; - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedGetter( - intValue = -1689348079 + intValue = 1683729561 ) @Export("cycleStart") int cycleStart; @ObfuscatedSignature( - signature = "(IIIIIIIZLep;)V" + signature = "(IIIIIIIZLee;)V" ) DynamicObject(int var1, int var2, int var3, int var4, int var5, int var6, int var7, boolean var8, Entity var9) { this.id = var1; @@ -73,12 +79,12 @@ public class DynamicObject extends Entity { this.x = var5; this.y = var6; if (var7 != -1) { - this.sequenceDefinition = PlayerType.SequenceDefinition_get(var7); + this.sequenceDefinition = GrandExchangeOfferAgeComparator.SequenceDefinition_get(var7); this.frame = 0; this.cycleStart = Client.cycle - 1; - if (this.sequenceDefinition.field3521 == 0 && var9 != null && var9 instanceof DynamicObject) { + if (this.sequenceDefinition.field3533 == 0 && var9 != null && var9 instanceof DynamicObject) { DynamicObject var10 = (DynamicObject)var9; - if (this.sequenceDefinition == var10.sequenceDefinition) { + if (var10.sequenceDefinition == this.sequenceDefinition) { this.frame = var10.frame; this.cycleStart = var10.cycleStart; return; @@ -93,10 +99,10 @@ public class DynamicObject extends Entity { } - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedSignature( - signature = "(B)Ldv;", - garbageValue = "-40" + signature = "(I)Ldf;", + garbageValue = "-174129419" ) @Export("getModel") protected final Model getModel() { @@ -106,11 +112,11 @@ public class DynamicObject extends Entity { var1 = 100; } - label55: { + label56: { do { do { if (var1 <= this.sequenceDefinition.frameLengths[this.frame]) { - break label55; + break label56; } var1 -= this.sequenceDefinition.frameLengths[this.frame]; @@ -126,7 +132,7 @@ public class DynamicObject extends Entity { this.cycleStart = Client.cycle - var1; } - ObjectDefinition var12 = WorldMapDecorationType.getObjectDefinition(this.id); + ObjectDefinition var12 = Occluder.getObjectDefinition(this.id); if (var12.transforms != null) { var12 = var12.transform(); } @@ -149,10 +155,131 @@ public class DynamicObject extends Entity { int var6 = (var3 >> 1) + this.y; int var7 = (var3 + 1 >> 1) + this.y; int[][] var8 = Tiles.Tiles_heights[this.plane]; - int var9 = var8[var4][var6] + var8[var5][var6] + var8[var4][var7] + var8[var5][var7] >> 2; + int var9 = var8[var5][var7] + var8[var5][var6] + var8[var4][var6] + var8[var4][var7] >> 2; int var10 = (this.x << 7) + (var2 << 6); int var11 = (this.y << 7) + (var3 << 6); return var12.getModelDynamic(this.type, this.orientation, var8, var10, var9, var11, this.sequenceDefinition, this.frame); } } + + @ObfuscatedName("g") + @ObfuscatedSignature( + signature = "(II)V", + garbageValue = "1357680514" + ) + public static void method2263(int var0) { + if (var0 != -1) { + if (Widget.Widget_loadedInterfaces[var0]) { + InvDefinition.Widget_archive.clearFilesGroup(var0); + if (FloorDecoration.Widget_interfaceComponents[var0] != null) { + boolean var1 = true; + + for (int var2 = 0; var2 < FloorDecoration.Widget_interfaceComponents[var0].length; ++var2) { + if (FloorDecoration.Widget_interfaceComponents[var0][var2] != null) { + if (FloorDecoration.Widget_interfaceComponents[var0][var2].type != 2) { + FloorDecoration.Widget_interfaceComponents[var0][var2] = null; + } else { + var1 = false; + } + } + } + + if (var1) { + FloorDecoration.Widget_interfaceComponents[var0] = null; + } + + Widget.Widget_loadedInterfaces[var0] = false; + } + } + } + } + + @ObfuscatedName("w") + @ObfuscatedSignature( + signature = "(I)V", + garbageValue = "514266465" + ) + public static void method2259() { + KitDefinition.KitDefinition_cached.clear(); + } + + @ObfuscatedName("hw") + @ObfuscatedSignature( + signature = "(ZLkj;B)V", + garbageValue = "4" + ) + static final void method2262(boolean var0, PacketBuffer var1) { + while (true) { + if (var1.bitsRemaining(Client.packetWriter.serverPacketLength) >= 27) { + int var2 = var1.readBits(15); + if (var2 != 32767) { + boolean var3 = false; + if (Client.npcs[var2] == null) { + Client.npcs[var2] = new NPC(); + var3 = true; + } + + NPC var4 = Client.npcs[var2]; + Client.npcIndices[++Client.npcCount - 1] = var2; + var4.npcCycle = Client.cycle; + int var5 = Client.defaultRotations[var1.readBits(3)]; + if (var3) { + var4.orientation = var4.rotation = var5; + } + + int var6 = var1.readBits(1); + var4.definition = VarcInt.getNpcDefinition(var1.readBits(14)); + int var7; + if (var0) { + var7 = var1.readBits(8); + if (var7 > 127) { + var7 -= 256; + } + } else { + var7 = var1.readBits(5); + if (var7 > 15) { + var7 -= 32; + } + } + + int var8; + if (var0) { + var8 = var1.readBits(8); + if (var8 > 127) { + var8 -= 256; + } + } else { + var8 = var1.readBits(5); + if (var8 > 15) { + var8 -= 32; + } + } + + int var9 = var1.readBits(1); + if (var9 == 1) { + Client.field688[++Client.field687 - 1] = var2; + } + + var4.field938 = var4.definition.size; + var4.field988 = var4.definition.rotation; + if (var4.field988 == 0) { + var4.rotation = 0; + } + + var4.walkSequence = var4.definition.walkSequence; + var4.walkBackSequence = var4.definition.walkBackSequence; + var4.walkLeftSequence = var4.definition.walkLeftSequence; + var4.walkRightSequence = var4.definition.walkRightSequence; + var4.readySequence = var4.definition.readySequence; + var4.turnLeftSequence = var4.definition.turnLeftSequence; + var4.turnRightSequence = var4.definition.turnRightSequence; + var4.method2059(class215.localPlayer.pathX[0] + var7, class215.localPlayer.pathY[0] + var8, var6 == 1); + continue; + } + } + + var1.exportIndex(); + return; + } + } } diff --git a/runescape-client/src/main/java/Entity.java b/runescape-client/src/main/java/Entity.java index 13f9160e26..6e9609a917 100644 --- a/runescape-client/src/main/java/Entity.java +++ b/runescape-client/src/main/java/Entity.java @@ -4,18 +4,12 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ep") +@ObfuscatedName("ee") @Implements("Entity") public abstract class Entity extends DualNode { - @ObfuscatedName("dl") - @ObfuscatedSignature( - signature = "Lfw;" - ) - @Export("js5SocketTask") - static Task js5SocketTask; @ObfuscatedName("cq") @ObfuscatedGetter( - intValue = 1761306051 + intValue = -254761411 ) @Export("height") public int height; @@ -24,17 +18,17 @@ public abstract class Entity extends DualNode { this.height = 1000; } - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedSignature( - signature = "(B)Ldv;", - garbageValue = "-40" + signature = "(I)Ldf;", + garbageValue = "-174129419" ) @Export("getModel") protected Model getModel() { return null; } - @ObfuscatedName("ci") + @ObfuscatedName("ch") @Export("draw") void draw(int var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, long var9) { Model var11 = this.getModel(); @@ -45,54 +39,68 @@ public abstract class Entity extends DualNode { } - @ObfuscatedName("t") + @ObfuscatedName("iz") @ObfuscatedSignature( - signature = "([BILjava/lang/CharSequence;I)I", - garbageValue = "-1230334360" + signature = "(Lbg;IIIB)V", + garbageValue = "40" ) - public static int method3390(byte[] var0, int var1, CharSequence var2) { - int var3 = var2.length(); - int var4 = var1; + @Export("addPlayerToMenu") + static final void addPlayerToMenu(Player var0, int var1, int var2, int var3) { + if (class215.localPlayer != var0) { + if (Client.menuOptionsCount < 400) { + String var4; + if (var0.skillLevel == 0) { + var4 = var0.actions[0] + var0.username + var0.actions[1] + GrandExchangeOfferWorldComparator.method77(var0.combatLevel, class215.localPlayer.combatLevel) + " " + " (" + "level-" + var0.combatLevel + ")" + var0.actions[2]; + } else { + var4 = var0.actions[0] + var0.username + var0.actions[1] + " " + " (" + "skill-" + var0.skillLevel + ")" + var0.actions[2]; + } + + int var5; + if (Client.isItemSelected == 1) { + WorldMapSprite.insertMenuItemNoShift("Use", Client.selectedItemName + " " + "->" + " " + class222.colorStartTag(16777215) + var4, 14, var1, var2, var3); + } else if (Client.isSpellSelected) { + if ((Actor.selectedSpellFlags & 8) == 8) { + WorldMapSprite.insertMenuItemNoShift(Client.selectedSpellActionName, Client.selectedSpellName + " " + "->" + " " + class222.colorStartTag(16777215) + var4, 15, var1, var2, var3); + } + } else { + for (var5 = 7; var5 >= 0; --var5) { + if (Client.playerMenuActions[var5] != null) { + short var6 = 0; + if (Client.playerMenuActions[var5].equalsIgnoreCase("Attack")) { + if (AttackOption.AttackOption_hidden == Client.playerAttackOption) { + continue; + } + + if (AttackOption.AttackOption_alwaysRightClick == Client.playerAttackOption || Client.playerAttackOption == AttackOption.AttackOption_dependsOnCombatLevels && var0.combatLevel > class215.localPlayer.combatLevel) { + var6 = 2000; + } + + if (class215.localPlayer.team != 0 && var0.team != 0) { + if (var0.team == class215.localPlayer.team) { + var6 = 2000; + } else { + var6 = 0; + } + } + } else if (Client.playerOptionsPriorities[var5]) { + var6 = 2000; + } + + boolean var7 = false; + int var8 = Client.playerMenuOpcodes[var5] + var6; + WorldMapSprite.insertMenuItemNoShift(Client.playerMenuActions[var5], class222.colorStartTag(16777215) + var4, var8, var1, var2, var3); + } + } + } + + for (var5 = 0; var5 < Client.menuOptionsCount; ++var5) { + if (Client.menuOpcodes[var5] == 23) { + Client.menuTargets[var5] = class222.colorStartTag(16777215) + var4; + break; + } + } - for (int var5 = 0; var5 < var3; ++var5) { - char var6 = var2.charAt(var5); - if (var6 <= 127) { - var0[var4++] = (byte)var6; - } else if (var6 <= 2047) { - var0[var4++] = (byte)(192 | var6 >> 6); - var0[var4++] = (byte)(128 | var6 & '?'); - } else { - var0[var4++] = (byte)(224 | var6 >> '\f'); - var0[var4++] = (byte)(128 | var6 >> 6 & 63); - var0[var4++] = (byte)(128 | var6 & '?'); } } - - return var4 - var1; - } - - @ObfuscatedName("hh") - @ObfuscatedSignature( - signature = "(Lbz;II)V", - garbageValue = "781315687" - ) - @Export("getActorScreenLocation") - static final void getActorScreenLocation(Actor var0, int var1) { - WorldMapCacheName.worldToScreen(var0.x, var0.y, var1); - } - - @ObfuscatedName("la") - @ObfuscatedSignature( - signature = "(Ljava/lang/String;B)V", - garbageValue = "-43" - ) - @Export("Clan_joinChat") - static final void Clan_joinChat(String var0) { - if (!var0.equals("")) { - PacketBufferNode var1 = SoundSystem.getPacketBufferNode(ClientPacket.field2267, Client.packetWriter.isaacCipher); - var1.packetBuffer.writeByte(UserComparator6.stringCp1252NullTerminatedByteSize(var0)); - var1.packetBuffer.writeStringCp1252NullTerminated(var0); - Client.packetWriter.addNode(var1); - } } } diff --git a/runescape-client/src/main/java/EnumDefinition.java b/runescape-client/src/main/java/EnumDefinition.java index 65058f0c48..84ee0662e5 100644 --- a/runescape-client/src/main/java/EnumDefinition.java +++ b/runescape-client/src/main/java/EnumDefinition.java @@ -4,49 +4,49 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ih") +@ObfuscatedName("in") @Implements("EnumDefinition") public class EnumDefinition extends DualNode { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lhq;" + signature = "Lhf;" ) @Export("EnumDefinition_archive") static AbstractArchive EnumDefinition_archive; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Leb;" + signature = "Lef;" ) @Export("EnumDefinition_cached") static EvictingDualNodeHashTable EnumDefinition_cached; - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("inputType") public char inputType; - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("outputType") public char outputType; - @ObfuscatedName("v") + @ObfuscatedName("z") @Export("defaultStr") public String defaultStr; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = -308571373 + intValue = -687974969 ) @Export("defaultInt") public int defaultInt; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedGetter( - intValue = 1084759985 + intValue = 1462437727 ) @Export("outputCount") public int outputCount; - @ObfuscatedName("o") + @ObfuscatedName("y") @Export("keys") public int[] keys; - @ObfuscatedName("i") + @ObfuscatedName("w") @Export("intVals") public int[] intVals; - @ObfuscatedName("d") + @ObfuscatedName("i") @Export("strVals") public String[] strVals; @@ -59,10 +59,10 @@ public class EnumDefinition extends DualNode { this.outputCount = 0; } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Lkc;S)V", - garbageValue = "-15054" + signature = "(Lkg;I)V", + garbageValue = "-858026130" ) @Export("decode") void decode(Buffer var1) { @@ -76,10 +76,10 @@ public class EnumDefinition extends DualNode { } } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(Lkc;II)V", - garbageValue = "1118644647" + signature = "(Lkg;II)V", + garbageValue = "248753838" ) @Export("decodeNext") void decodeNext(Buffer var1, int var2) { @@ -116,40 +116,377 @@ public class EnumDefinition extends DualNode { } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( signature = "(I)I", - garbageValue = "-1832582259" + garbageValue = "-1646358574" ) @Export("size") public int size() { return this.outputCount; } - @ObfuscatedName("x") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "(IIII)I", - garbageValue = "-1010207116" + signature = "(IIIIIILel;Lfh;I)V", + garbageValue = "1647105288" ) - @Export("hslToRgb") - static final int hslToRgb(int var0, int var1, int var2) { - if (var2 > 179) { - var1 /= 2; - } + static final void method4656(int var0, int var1, int var2, int var3, int var4, int var5, Scene var6, CollisionMap var7) { + if (!Client.isLowDetail || (Tiles.Tiles_renderFlags[0][var1][var2] & 2) != 0 || (Tiles.Tiles_renderFlags[var0][var1][var2] & 16) == 0) { + if (var0 < Tiles.Tiles_minPlane) { + Tiles.Tiles_minPlane = var0; + } - if (var2 > 192) { - var1 /= 2; - } + ObjectDefinition var8 = Occluder.getObjectDefinition(var3); + int var9; + int var10; + if (var4 != 1 && var4 != 3) { + var9 = var8.sizeX; + var10 = var8.sizeY; + } else { + var9 = var8.sizeY; + var10 = var8.sizeX; + } - if (var2 > 217) { - var1 /= 2; - } + int var11; + int var12; + if (var9 + var1 <= 104) { + var11 = (var9 >> 1) + var1; + var12 = (var9 + 1 >> 1) + var1; + } else { + var11 = var1; + var12 = var1 + 1; + } - if (var2 > 243) { - var1 /= 2; - } + int var13; + int var14; + if (var10 + var2 <= 104) { + var13 = (var10 >> 1) + var2; + var14 = var2 + (var10 + 1 >> 1); + } else { + var13 = var2; + var14 = var2 + 1; + } - int var3 = (var1 / 32 << 7) + (var0 / 4 << 10) + var2 / 2; - return var3; + int[][] var15 = Tiles.Tiles_heights[var0]; + int var16 = var15[var11][var14] + var15[var12][var13] + var15[var11][var13] + var15[var12][var14] >> 2; + int var17 = (var1 << 7) + (var9 << 6); + int var18 = (var2 << 7) + (var10 << 6); + long var19 = MouseHandler.calculateTag(var1, var2, 2, var8.int1 == 0, var3); + int var21 = var5 + (var4 << 6); + if (var8.int3 == 1) { + var21 += 256; + } + + if (var8.hasSound()) { + WorldMapData_1.method737(var0, var1, var2, var8, var4); + } + + Object var22; + if (var5 == 22) { + if (!Client.isLowDetail || var8.int1 != 0 || var8.interactType == 1 || var8.boolean2) { + if (var8.animationId == -1 && var8.transforms == null) { + var22 = var8.getEntity(22, var4, var15, var17, var16, var18); + } else { + var22 = new DynamicObject(var3, 22, var4, var0, var1, var2, var8.animationId, true, (Entity)null); + } + + var6.newFloorDecoration(var0, var1, var2, var16, (Entity)var22, var19, var21); + if (var8.interactType == 1 && var7 != null) { + var7.setBlockedByFloorDec(var1, var2); + } + + } + } else { + int var23; + if (var5 != 10 && var5 != 11) { + int[] var10000; + if (var5 >= 12) { + if (var8.animationId == -1 && var8.transforms == null) { + var22 = var8.getEntity(var5, var4, var15, var17, var16, var18); + } else { + var22 = new DynamicObject(var3, var5, var4, var0, var1, var2, var8.animationId, true, (Entity)null); + } + + var6.method3242(var0, var1, var2, var16, 1, 1, (Entity)var22, 0, var19, var21); + if (var5 >= 12 && var5 <= 17 && var5 != 13 && var0 > 0) { + var10000 = WorldMapLabel.field233[var0][var1]; + var10000[var2] |= 2340; + } + + if (var8.interactType != 0 && var7 != null) { + var7.addGameObject(var1, var2, var9, var10, var8.boolean1); + } + + } else if (var5 == 0) { + if (var8.animationId == -1 && var8.transforms == null) { + var22 = var8.getEntity(0, var4, var15, var17, var16, var18); + } else { + var22 = new DynamicObject(var3, 0, var4, var0, var1, var2, var8.animationId, true, (Entity)null); + } + + var6.newBoundaryObject(var0, var1, var2, var16, (Entity)var22, (Entity)null, Tiles.field505[var4], 0, var19, var21); + if (var4 == 0) { + if (var8.clipped) { + class51.field423[var0][var1][var2] = 50; + class51.field423[var0][var1][var2 + 1] = 50; + } + + if (var8.modelClipped) { + var10000 = WorldMapLabel.field233[var0][var1]; + var10000[var2] |= 585; + } + } else if (var4 == 1) { + if (var8.clipped) { + class51.field423[var0][var1][var2 + 1] = 50; + class51.field423[var0][var1 + 1][var2 + 1] = 50; + } + + if (var8.modelClipped) { + var10000 = WorldMapLabel.field233[var0][var1]; + var10000[var2 + 1] |= 1170; + } + } else if (var4 == 2) { + if (var8.clipped) { + class51.field423[var0][var1 + 1][var2] = 50; + class51.field423[var0][var1 + 1][var2 + 1] = 50; + } + + if (var8.modelClipped) { + var10000 = WorldMapLabel.field233[var0][var1 + 1]; + var10000[var2] |= 585; + } + } else if (var4 == 3) { + if (var8.clipped) { + class51.field423[var0][var1][var2] = 50; + class51.field423[var0][var1 + 1][var2] = 50; + } + + if (var8.modelClipped) { + var10000 = WorldMapLabel.field233[var0][var1]; + var10000[var2] |= 1170; + } + } + + if (var8.interactType != 0 && var7 != null) { + var7.method3614(var1, var2, var5, var4, var8.boolean1); + } + + if (var8.int2 != 16) { + var6.method3124(var0, var1, var2, var8.int2); + } + + } else if (var5 == 1) { + if (var8.animationId == -1 && var8.transforms == null) { + var22 = var8.getEntity(1, var4, var15, var17, var16, var18); + } else { + var22 = new DynamicObject(var3, 1, var4, var0, var1, var2, var8.animationId, true, (Entity)null); + } + + var6.newBoundaryObject(var0, var1, var2, var16, (Entity)var22, (Entity)null, Tiles.field506[var4], 0, var19, var21); + if (var8.clipped) { + if (var4 == 0) { + class51.field423[var0][var1][var2 + 1] = 50; + } else if (var4 == 1) { + class51.field423[var0][var1 + 1][var2 + 1] = 50; + } else if (var4 == 2) { + class51.field423[var0][var1 + 1][var2] = 50; + } else if (var4 == 3) { + class51.field423[var0][var1][var2] = 50; + } + } + + if (var8.interactType != 0 && var7 != null) { + var7.method3614(var1, var2, var5, var4, var8.boolean1); + } + + } else { + int var28; + if (var5 == 2) { + var28 = var4 + 1 & 3; + Object var29; + Object var30; + if (var8.animationId == -1 && var8.transforms == null) { + var29 = var8.getEntity(2, var4 + 4, var15, var17, var16, var18); + var30 = var8.getEntity(2, var28, var15, var17, var16, var18); + } else { + var29 = new DynamicObject(var3, 2, var4 + 4, var0, var1, var2, var8.animationId, true, (Entity)null); + var30 = new DynamicObject(var3, 2, var28, var0, var1, var2, var8.animationId, true, (Entity)null); + } + + var6.newBoundaryObject(var0, var1, var2, var16, (Entity)var29, (Entity)var30, Tiles.field505[var4], Tiles.field505[var28], var19, var21); + if (var8.modelClipped) { + if (var4 == 0) { + var10000 = WorldMapLabel.field233[var0][var1]; + var10000[var2] |= 585; + var10000 = WorldMapLabel.field233[var0][var1]; + var10000[1 + var2] |= 1170; + } else if (var4 == 1) { + var10000 = WorldMapLabel.field233[var0][var1]; + var10000[var2 + 1] |= 1170; + var10000 = WorldMapLabel.field233[var0][var1 + 1]; + var10000[var2] |= 585; + } else if (var4 == 2) { + var10000 = WorldMapLabel.field233[var0][var1 + 1]; + var10000[var2] |= 585; + var10000 = WorldMapLabel.field233[var0][var1]; + var10000[var2] |= 1170; + } else if (var4 == 3) { + var10000 = WorldMapLabel.field233[var0][var1]; + var10000[var2] |= 1170; + var10000 = WorldMapLabel.field233[var0][var1]; + var10000[var2] |= 585; + } + } + + if (var8.interactType != 0 && var7 != null) { + var7.method3614(var1, var2, var5, var4, var8.boolean1); + } + + if (var8.int2 != 16) { + var6.method3124(var0, var1, var2, var8.int2); + } + + } else if (var5 == 3) { + if (var8.animationId == -1 && var8.transforms == null) { + var22 = var8.getEntity(3, var4, var15, var17, var16, var18); + } else { + var22 = new DynamicObject(var3, 3, var4, var0, var1, var2, var8.animationId, true, (Entity)null); + } + + var6.newBoundaryObject(var0, var1, var2, var16, (Entity)var22, (Entity)null, Tiles.field506[var4], 0, var19, var21); + if (var8.clipped) { + if (var4 == 0) { + class51.field423[var0][var1][var2 + 1] = 50; + } else if (var4 == 1) { + class51.field423[var0][var1 + 1][var2 + 1] = 50; + } else if (var4 == 2) { + class51.field423[var0][var1 + 1][var2] = 50; + } else if (var4 == 3) { + class51.field423[var0][var1][var2] = 50; + } + } + + if (var8.interactType != 0 && var7 != null) { + var7.method3614(var1, var2, var5, var4, var8.boolean1); + } + + } else if (var5 == 9) { + if (var8.animationId == -1 && var8.transforms == null) { + var22 = var8.getEntity(var5, var4, var15, var17, var16, var18); + } else { + var22 = new DynamicObject(var3, var5, var4, var0, var1, var2, var8.animationId, true, (Entity)null); + } + + var6.method3242(var0, var1, var2, var16, 1, 1, (Entity)var22, 0, var19, var21); + if (var8.interactType != 0 && var7 != null) { + var7.addGameObject(var1, var2, var9, var10, var8.boolean1); + } + + if (var8.int2 != 16) { + var6.method3124(var0, var1, var2, var8.int2); + } + + } else if (var5 == 4) { + if (var8.animationId == -1 && var8.transforms == null) { + var22 = var8.getEntity(4, var4, var15, var17, var16, var18); + } else { + var22 = new DynamicObject(var3, 4, var4, var0, var1, var2, var8.animationId, true, (Entity)null); + } + + var6.newWallDecoration(var0, var1, var2, var16, (Entity)var22, (Entity)null, Tiles.field505[var4], 0, 0, 0, var19, var21); + } else { + long var31; + Object var33; + if (var5 == 5) { + var28 = 16; + var31 = var6.getBoundaryObjectTag(var0, var1, var2); + if (var31 != 0L) { + var28 = Occluder.getObjectDefinition(ItemContainer.Entity_unpackID(var31)).int2; + } + + if (var8.animationId == -1 && var8.transforms == null) { + var33 = var8.getEntity(4, var4, var15, var17, var16, var18); + } else { + var33 = new DynamicObject(var3, 4, var4, var0, var1, var2, var8.animationId, true, (Entity)null); + } + + var6.newWallDecoration(var0, var1, var2, var16, (Entity)var33, (Entity)null, Tiles.field505[var4], 0, var28 * Tiles.field507[var4], var28 * Tiles.field508[var4], var19, var21); + } else if (var5 == 6) { + var28 = 8; + var31 = var6.getBoundaryObjectTag(var0, var1, var2); + if (0L != var31) { + var28 = Occluder.getObjectDefinition(ItemContainer.Entity_unpackID(var31)).int2 / 2; + } + + if (var8.animationId == -1 && var8.transforms == null) { + var33 = var8.getEntity(4, var4 + 4, var15, var17, var16, var18); + } else { + var33 = new DynamicObject(var3, 4, var4 + 4, var0, var1, var2, var8.animationId, true, (Entity)null); + } + + var6.newWallDecoration(var0, var1, var2, var16, (Entity)var33, (Entity)null, 256, var4, var28 * Tiles.field509[var4], var28 * Tiles.field513[var4], var19, var21); + } else if (var5 == 7) { + var23 = var4 + 2 & 3; + if (var8.animationId == -1 && var8.transforms == null) { + var22 = var8.getEntity(4, var23 + 4, var15, var17, var16, var18); + } else { + var22 = new DynamicObject(var3, 4, var23 + 4, var0, var1, var2, var8.animationId, true, (Entity)null); + } + + var6.newWallDecoration(var0, var1, var2, var16, (Entity)var22, (Entity)null, 256, var23, 0, 0, var19, var21); + } else if (var5 == 8) { + var28 = 8; + var31 = var6.getBoundaryObjectTag(var0, var1, var2); + if (var31 != 0L) { + var28 = Occluder.getObjectDefinition(ItemContainer.Entity_unpackID(var31)).int2 / 2; + } + + int var27 = var4 + 2 & 3; + Object var26; + if (var8.animationId == -1 && var8.transforms == null) { + var33 = var8.getEntity(4, var4 + 4, var15, var17, var16, var18); + var26 = var8.getEntity(4, var27 + 4, var15, var17, var16, var18); + } else { + var33 = new DynamicObject(var3, 4, var4 + 4, var0, var1, var2, var8.animationId, true, (Entity)null); + var26 = new DynamicObject(var3, 4, var27 + 4, var0, var1, var2, var8.animationId, true, (Entity)null); + } + + var6.newWallDecoration(var0, var1, var2, var16, (Entity)var33, (Entity)var26, 256, var4, var28 * Tiles.field509[var4], var28 * Tiles.field513[var4], var19, var21); + } + } + } + } else { + if (var8.animationId == -1 && var8.transforms == null) { + var22 = var8.getEntity(10, var4, var15, var17, var16, var18); + } else { + var22 = new DynamicObject(var3, 10, var4, var0, var1, var2, var8.animationId, true, (Entity)null); + } + + if (var22 != null && var6.method3242(var0, var1, var2, var16, var9, var10, (Entity)var22, var5 == 11 ? 256 : 0, var19, var21) && var8.clipped) { + var23 = 15; + if (var22 instanceof Model) { + var23 = ((Model)var22).method2907() / 4; + if (var23 > 30) { + var23 = 30; + } + } + + for (int var24 = 0; var24 <= var9; ++var24) { + for (int var25 = 0; var25 <= var10; ++var25) { + if (var23 > class51.field423[var0][var24 + var1][var25 + var2]) { + class51.field423[var0][var24 + var1][var25 + var2] = (byte)var23; + } + } + } + } + + if (var8.interactType != 0 && var7 != null) { + var7.addGameObject(var1, var2, var9, var10, var8.boolean1); + } + + } + } + } } } diff --git a/runescape-client/src/main/java/Enumerated.java b/runescape-client/src/main/java/Enumerated.java index 77411434cc..beb723f43f 100644 --- a/runescape-client/src/main/java/Enumerated.java +++ b/runescape-client/src/main/java/Enumerated.java @@ -6,10 +6,10 @@ import net.runelite.mapping.ObfuscatedSignature; @ObfuscatedName("gy") @Implements("Enumerated") public interface Enumerated { - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(I)I", - garbageValue = "-1993081102" + signature = "(B)I", + garbageValue = "7" ) @Export("rsOrdinal") int rsOrdinal(); diff --git a/runescape-client/src/main/java/EvictingDualNodeHashTable.java b/runescape-client/src/main/java/EvictingDualNodeHashTable.java index b738a161de..0f98a4b759 100644 --- a/runescape-client/src/main/java/EvictingDualNodeHashTable.java +++ b/runescape-client/src/main/java/EvictingDualNodeHashTable.java @@ -3,35 +3,35 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("eb") +@ObfuscatedName("ef") @Implements("EvictingDualNodeHashTable") public final class EvictingDualNodeHashTable { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lfa;" + signature = "Lfn;" ) - DualNode field1936; - @ObfuscatedName("t") + DualNode field1949; + @ObfuscatedName("f") @Export("capacity") int capacity; - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("remainingCapacity") int remainingCapacity; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Llr;" + signature = "Llb;" ) @Export("hashTable") IterableNodeHashTable hashTable; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "Ljq;" + signature = "Ljz;" ) @Export("deque") IterableDualNodeQueue deque; public EvictingDualNodeHashTable(int var1) { - this.field1936 = new DualNode(); + this.field1949 = new DualNode(); this.deque = new IterableDualNodeQueue(); this.capacity = var1; this.remainingCapacity = var1; @@ -43,9 +43,9 @@ public final class EvictingDualNodeHashTable { this.hashTable = new IterableNodeHashTable(var2); } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(J)Lfa;" + signature = "(J)Lfn;" ) @Export("get") public DualNode get(long var1) { @@ -57,7 +57,7 @@ public final class EvictingDualNodeHashTable { return var3; } - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("remove") public void remove(long var1) { DualNode var3 = (DualNode)this.hashTable.get(var1); @@ -69,9 +69,9 @@ public final class EvictingDualNodeHashTable { } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Lfa;J)V" + signature = "(Lfn;J)V" ) @Export("put") public void put(DualNode var1, long var2) { @@ -79,7 +79,7 @@ public final class EvictingDualNodeHashTable { DualNode var4 = this.deque.removeLast(); var4.remove(); var4.removeDual(); - if (var4 == this.field1936) { + if (var4 == this.field1949) { var4 = this.deque.removeLast(); var4.remove(); var4.removeDual(); @@ -92,12 +92,12 @@ public final class EvictingDualNodeHashTable { this.deque.add(var1); } - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("clear") public void clear() { this.deque.clear(); this.hashTable.clear(); - this.field1936 = new DualNode(); + this.field1949 = new DualNode(); this.remainingCapacity = this.capacity; } } diff --git a/runescape-client/src/main/java/FaceNormal.java b/runescape-client/src/main/java/FaceNormal.java index 4923b7be9f..f9cd5663cb 100644 --- a/runescape-client/src/main/java/FaceNormal.java +++ b/runescape-client/src/main/java/FaceNormal.java @@ -4,91 +4,34 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("eq") +@ObfuscatedName("ea") @Implements("FaceNormal") public class FaceNormal { - @ObfuscatedName("a") + @ObfuscatedName("g") + @ObfuscatedSignature( + signature = "Lgz;" + ) + @Export("midiPcmStream") + public static MidiPcmStream midiPcmStream; + @ObfuscatedName("u") @ObfuscatedGetter( - intValue = -749416207 + intValue = -133317529 ) @Export("x") int x; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = 1897816947 + intValue = -328773159 ) @Export("y") int y; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = 1642061929 + intValue = -138913585 ) @Export("z") int z; FaceNormal() { } - - @ObfuscatedName("ao") - @ObfuscatedSignature( - signature = "(II)V", - garbageValue = "-973017204" - ) - @Export("runWidgetOnLoadListener") - static void runWidgetOnLoadListener(int var0) { - if (var0 != -1) { - if (TextureProvider.loadInterface(var0)) { - Widget[] var1 = Widget.Widget_interfaceComponents[var0]; - - for (int var2 = 0; var2 < var1.length; ++var2) { - Widget var3 = var1[var2]; - if (var3.onLoad != null) { - ScriptEvent var4 = new ScriptEvent(); - var4.widget = var3; - var4.args = var3.onLoad; - class4.runScript(var4, 5000000); - } - } - - } - } - } - - @ObfuscatedName("hl") - @ObfuscatedSignature( - signature = "(Lbn;I)V", - garbageValue = "-935329851" - ) - static final void method3396(PendingSpawn var0) { - long var1 = 0L; - int var3 = -1; - int var4 = 0; - int var5 = 0; - if (var0.type == 0) { - var1 = WorldMapArea.scene.getBoundaryObjectTag(var0.plane, var0.x, var0.y); - } - - if (var0.type == 1) { - var1 = WorldMapArea.scene.getWallDecorationTag(var0.plane, var0.x, var0.y); - } - - if (var0.type == 2) { - var1 = WorldMapArea.scene.getGameObjectTag(var0.plane, var0.x, var0.y); - } - - if (var0.type == 3) { - var1 = WorldMapArea.scene.getFloorDecorationTag(var0.plane, var0.x, var0.y); - } - - if (var1 != 0L) { - int var6 = WorldMapArea.scene.getObjectFlags(var0.plane, var0.x, var0.y, var1); - var3 = UserComparator8.Entity_unpackID(var1); - var4 = var6 & 31; - var5 = var6 >> 6 & 3; - } - - var0.objectId = var3; - var0.field914 = var4; - var0.field913 = var5; - } } diff --git a/runescape-client/src/main/java/FileSystem.java b/runescape-client/src/main/java/FileSystem.java index b544056df8..b3c2061019 100644 --- a/runescape-client/src/main/java/FileSystem.java +++ b/runescape-client/src/main/java/FileSystem.java @@ -3,17 +3,18 @@ import java.util.Hashtable; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; +import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("fv") +@ObfuscatedName("fr") @Implements("FileSystem") public class FileSystem { - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("FileSystem_hasPermissions") - static boolean FileSystem_hasPermissions; - @ObfuscatedName("t") + public static boolean FileSystem_hasPermissions; + @ObfuscatedName("f") @Export("FileSystem_cacheDir") - static File FileSystem_cacheDir; - @ObfuscatedName("n") + public static File FileSystem_cacheDir; + @ObfuscatedName("b") @Export("FileSystem_cacheFiles") static Hashtable FileSystem_cacheFiles; @@ -21,4 +22,209 @@ public class FileSystem { FileSystem_hasPermissions = false; FileSystem_cacheFiles = new Hashtable(16); } + + @ObfuscatedName("u") + @ObfuscatedSignature( + signature = "(II)I", + garbageValue = "-585871581" + ) + @Export("getVarbit") + public static int getVarbit(int var0) { + VarbitDefinition var2 = (VarbitDefinition)VarbitDefinition.VarbitDefinition_cached.get((long)var0); + VarbitDefinition var1; + if (var2 != null) { + var1 = var2; + } else { + byte[] var7 = VarbitDefinition.VarbitDefinition_archive.takeFile(14, var0); + var2 = new VarbitDefinition(); + if (var7 != null) { + var2.decode(new Buffer(var7)); + } + + VarbitDefinition.VarbitDefinition_cached.put(var2, (long)var0); + var1 = var2; + } + + int var3 = var1.baseVar; + int var4 = var1.startBit; + int var5 = var1.endBit; + int var6 = Varps.Varps_masks[var5 - var4]; + return Varps.Varps_main[var3] >> var4 & var6; + } + + @ObfuscatedName("b") + @ObfuscatedSignature( + signature = "(IIIIIIB)I", + garbageValue = "46" + ) + public static int method3549(int var0, int var1, int var2, int var3, int var4, int var5) { + if ((var5 & 1) == 1) { + int var6 = var3; + var3 = var4; + var4 = var6; + } + + var2 &= 3; + if (var2 == 0) { + return var1; + } else if (var2 == 1) { + return 7 - var0 - (var3 - 1); + } else { + return var2 == 2 ? 7 - var1 - (var4 - 1) : var0; + } + } + + @ObfuscatedName("p") + @ObfuscatedSignature( + signature = "([BIIIIIIILel;[Lfh;I)V", + garbageValue = "1216246502" + ) + static final void method3552(byte[] var0, int var1, int var2, int var3, int var4, int var5, int var6, int var7, Scene var8, CollisionMap[] var9) { + Buffer var10 = new Buffer(var0); + int var11 = -1; + + while (true) { + int var12 = var10.method5710(); + if (var12 == 0) { + return; + } + + var11 += var12; + int var13 = 0; + + while (true) { + int var14 = var10.readUShortSmart(); + if (var14 == 0) { + break; + } + + var13 += var14 - 1; + int var15 = var13 & 63; + int var16 = var13 >> 6 & 63; + int var17 = var13 >> 12; + int var18 = var10.readUnsignedByte(); + int var19 = var18 >> 2; + int var20 = var18 & 3; + if (var17 == var4 && var16 >= var5 && var16 < var5 + 8 && var15 >= var6 && var15 < var6 + 8) { + ObjectDefinition var21 = Occluder.getObjectDefinition(var11); + int var22 = var2 + PacketWriter.method2292(var16 & 7, var15 & 7, var7, var21.sizeX, var21.sizeY, var20); + int var23 = var3 + method3549(var16 & 7, var15 & 7, var7, var21.sizeX, var21.sizeY, var20); + if (var22 > 0 && var23 > 0 && var22 < 103 && var23 < 103) { + int var24 = var1; + if ((Tiles.Tiles_renderFlags[1][var22][var23] & 2) == 2) { + var24 = var1 - 1; + } + + CollisionMap var25 = null; + if (var24 >= 0) { + var25 = var9[var24]; + } + + EnumDefinition.method4656(var1, var22, var23, var11, var20 + var7 & 3, var19, var8, var25); + } + } + } + } + } + + @ObfuscatedName("ac") + @ObfuscatedSignature( + signature = "(II)I", + garbageValue = "1410165290" + ) + static int method3551(int var0) { + return (int)((Math.log((double)var0) / Interpreter.field1082 - 7.0D) * 256.0D); + } + + @ObfuscatedName("fp") + @ObfuscatedSignature( + signature = "(IIII)V", + garbageValue = "-782793212" + ) + @Export("queueSoundEffect") + static void queueSoundEffect(int var0, int var1, int var2) { + if (Client.soundEffectVolume != 0 && var1 != 0 && Client.soundEffectCount < 50) { + Client.soundEffectIds[Client.soundEffectCount] = var0; + Client.queuedSoundEffectLoops[Client.soundEffectCount] = var1; + Client.queuedSoundEffectDelays[Client.soundEffectCount] = var2; + Client.soundEffects[Client.soundEffectCount] = null; + Client.soundLocations[Client.soundEffectCount] = 0; + ++Client.soundEffectCount; + } + + } + + @ObfuscatedName("gb") + @ObfuscatedSignature( + signature = "(IIIIZI)V", + garbageValue = "444981203" + ) + @Export("setViewportShape") + static final void setViewportShape(int var0, int var1, int var2, int var3, boolean var4) { + if (var2 < 1) { + var2 = 1; + } + + if (var3 < 1) { + var3 = 1; + } + + int var5 = var3 - 334; + int var6; + if (var5 < 0) { + var6 = Client.field880; + } else if (var5 >= 100) { + var6 = Client.field893; + } else { + var6 = (Client.field893 - Client.field880) * var5 / 100 + Client.field880; + } + + int var7 = var3 * var6 * 512 / (var2 * 334); + int var8; + int var9; + short var10; + if (var7 < Client.field785) { + var10 = Client.field785; + var6 = var10 * var2 * 334 / (var3 * 512); + if (var6 > Client.field897) { + var6 = Client.field897; + var8 = var3 * var6 * 512 / (var10 * 334); + var9 = (var2 - var8) / 2; + if (var4) { + Rasterizer2D.Rasterizer2D_resetClip(); + Rasterizer2D.Rasterizer2D_fillRectangle(var0, var1, var9, var3, -16777216); + Rasterizer2D.Rasterizer2D_fillRectangle(var0 + var2 - var9, var1, var9, var3, -16777216); + } + + var0 += var9; + var2 -= var9 * 2; + } + } else if (var7 > Client.field679) { + var10 = Client.field679; + var6 = var10 * var2 * 334 / (var3 * 512); + if (var6 < Client.field896) { + var6 = Client.field896; + var8 = var10 * var2 * 334 / (var6 * 512); + var9 = (var3 - var8) / 2; + if (var4) { + Rasterizer2D.Rasterizer2D_resetClip(); + Rasterizer2D.Rasterizer2D_fillRectangle(var0, var1, var2, var9, -16777216); + Rasterizer2D.Rasterizer2D_fillRectangle(var0, var3 + var1 - var9, var2, var9, -16777216); + } + + var1 += var9; + var3 -= var9 * 2; + } + } + + Client.viewportZoom = var3 * var6 / 334; + if (var2 != Client.viewportWidth || var3 != Client.viewportHeight) { + WorldMapManager.method676(var2, var3); + } + + Client.viewportOffsetX = var0; + Client.viewportOffsetY = var1; + Client.viewportWidth = var2; + Client.viewportHeight = var3; + } } diff --git a/runescape-client/src/main/java/FillMode.java b/runescape-client/src/main/java/FillMode.java index a5c05548b2..48451bc3ca 100644 --- a/runescape-client/src/main/java/FillMode.java +++ b/runescape-client/src/main/java/FillMode.java @@ -4,35 +4,41 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("lt") +@ObfuscatedName("lz") @Implements("FillMode") public enum FillMode implements Enumerated { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Llt;" + signature = "Llz;" ) @Export("SOLID") SOLID(0, 0), - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Llt;" + signature = "Llz;" ) - field3847(1, 1), - @ObfuscatedName("n") + field3854(1, 1), + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Llt;" + signature = "Llz;" ) - field3849(2, 2); + field3855(2, 2); - @ObfuscatedName("q") + @ObfuscatedName("w") + @Export("SpriteBuffer_pixels") + static byte[][] SpriteBuffer_pixels; + @ObfuscatedName("l") + @Export("BZip2Decompressor_block") + static int[] BZip2Decompressor_block; + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = -626837763 + intValue = 80643323 ) @Export("value") public final int value; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = -1570105459 + intValue = 1639591945 ) @Export("id") final int id; @@ -42,10 +48,10 @@ public enum FillMode implements Enumerated { this.id = var4; } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(I)I", - garbageValue = "-1993081102" + signature = "(B)I", + garbageValue = "7" ) @Export("rsOrdinal") public int rsOrdinal() { diff --git a/runescape-client/src/main/java/FloorDecoration.java b/runescape-client/src/main/java/FloorDecoration.java index 3048ed9f1c..7adcc90cf8 100644 --- a/runescape-client/src/main/java/FloorDecoration.java +++ b/runescape-client/src/main/java/FloorDecoration.java @@ -4,54 +4,54 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("dx") +@ObfuscatedName("du") @Implements("FloorDecoration") public final class FloorDecoration { - @ObfuscatedName("na") - @ObfuscatedGetter( - intValue = 379430595 - ) - @Export("widgetDragDuration") - static int widgetDragDuration; - @ObfuscatedName("pe") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "Llx;" + signature = "[[Lhl;" ) - @Export("sceneMinimapSprite") - static Sprite sceneMinimapSprite; - @ObfuscatedName("a") + @Export("Widget_interfaceComponents") + public static Widget[][] Widget_interfaceComponents; + @ObfuscatedName("hj") @ObfuscatedGetter( - intValue = 1575825247 + intValue = -787534095 + ) + @Export("cameraZ") + static int cameraZ; + @ObfuscatedName("u") + @ObfuscatedGetter( + intValue = 1000348855 ) @Export("tileHeight") int tileHeight; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = -455882757 + intValue = -2093523795 ) @Export("x") int x; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = 733154095 + intValue = -512662577 ) @Export("y") int y; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Lep;" + signature = "Lee;" ) @Export("entity") public Entity entity; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - longValue = -4694647978187683379L + longValue = -2591467341780492125L ) @Export("tag") public long tag; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = -984240523 + intValue = 424120209 ) @Export("flags") int flags; @@ -59,25 +59,28 @@ public final class FloorDecoration { FloorDecoration() { } - @ObfuscatedName("a") + @ObfuscatedName("o") @ObfuscatedSignature( - signature = "(IIIIIIB)I", - garbageValue = "30" + signature = "(CI)Z", + garbageValue = "-345109095" ) - public static int method3010(int var0, int var1, int var2, int var3, int var4, int var5) { - if ((var5 & 1) == 1) { - int var6 = var3; - var3 = var4; - var4 = var6; - } - - var2 &= 3; - if (var2 == 0) { - return var0; - } else if (var2 == 1) { - return var1; + @Export("isCharPrintable") + public static boolean isCharPrintable(char var0) { + if (var0 >= ' ' && var0 <= '~') { + return true; + } else if (var0 >= 160 && var0 <= 255) { + return true; } else { - return var2 == 2 ? 7 - var0 - (var3 - 1) : 7 - var1 - (var4 - 1); + return var0 == 8364 || var0 == 338 || var0 == 8212 || var0 == 339 || var0 == 376; } } + + @ObfuscatedName("fe") + @ObfuscatedSignature( + signature = "(IB)I", + garbageValue = "3" + ) + static int method2888(int var0) { + return var0 * 3 + 600; + } } diff --git a/runescape-client/src/main/java/FloorOverlayDefinition.java b/runescape-client/src/main/java/FloorOverlayDefinition.java index d5f9a06881..e7ee9c175d 100644 --- a/runescape-client/src/main/java/FloorOverlayDefinition.java +++ b/runescape-client/src/main/java/FloorOverlayDefinition.java @@ -4,75 +4,80 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("is") +@ObfuscatedName("ii") @Implements("FloorOverlayDefinition") public class FloorOverlayDefinition extends DualNode { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lhq;" + signature = "Lhf;" ) @Export("FloorOverlayDefinition_archive") - static AbstractArchive FloorOverlayDefinition_archive; - @ObfuscatedName("t") + public static AbstractArchive FloorOverlayDefinition_archive; + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Leb;" + signature = "Lef;" ) @Export("FloorOverlayDefinition_cached") - public static EvictingDualNodeHashTable FloorOverlayDefinition_cached; - @ObfuscatedName("n") + static EvictingDualNodeHashTable FloorOverlayDefinition_cached; + @ObfuscatedName("jk") + @ObfuscatedSignature( + signature = "Lhl;" + ) + static Widget field3507; + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = 174203121 + intValue = 1374985713 ) @Export("primaryRgb") public int primaryRgb; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = 1513667197 + intValue = -2103886801 ) @Export("texture") public int texture; - @ObfuscatedName("v") + @ObfuscatedName("z") @Export("hideUnderlay") public boolean hideUnderlay; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = -173396079 + intValue = -1548545133 ) @Export("secondaryRgb") public int secondaryRgb; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedGetter( - intValue = -538711707 + intValue = -2117743259 ) @Export("hue") public int hue; - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedGetter( - intValue = 343032535 + intValue = 259844631 ) @Export("saturation") public int saturation; - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedGetter( - intValue = -459750833 + intValue = 1486642951 ) @Export("lightness") public int lightness; - @ObfuscatedName("d") + @ObfuscatedName("i") @ObfuscatedGetter( - intValue = 675536463 + intValue = 1953195007 ) @Export("secondaryHue") public int secondaryHue; - @ObfuscatedName("m") + @ObfuscatedName("k") @ObfuscatedGetter( - intValue = -1939857721 + intValue = -1833494779 ) @Export("secondarySaturation") public int secondarySaturation; - @ObfuscatedName("p") + @ObfuscatedName("x") @ObfuscatedGetter( - intValue = 773106025 + intValue = 1532984689 ) @Export("secondaryLightness") public int secondaryLightness; @@ -88,10 +93,10 @@ public class FloorOverlayDefinition extends DualNode { this.secondaryRgb = -1; } - @ObfuscatedName("n") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(S)V", - garbageValue = "-4204" + signature = "(I)V", + garbageValue = "1381729137" ) @Export("postDecode") void postDecode() { @@ -105,10 +110,10 @@ public class FloorOverlayDefinition extends DualNode { this.setHsl(this.primaryRgb); } - @ObfuscatedName("q") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Lkc;IB)V", - garbageValue = "-1" + signature = "(Lkg;II)V", + garbageValue = "-157824233" ) @Export("decode") void decode(Buffer var1, int var2) { @@ -122,10 +127,10 @@ public class FloorOverlayDefinition extends DualNode { } } - @ObfuscatedName("v") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(Lkc;III)V", - garbageValue = "1158781542" + signature = "(Lkg;III)V", + garbageValue = "-2104384515" ) @Export("decodeNext") void decodeNext(Buffer var1, int var2, int var3) { @@ -142,10 +147,10 @@ public class FloorOverlayDefinition extends DualNode { } - @ObfuscatedName("l") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(IB)V", - garbageValue = "109" + signature = "(II)V", + garbageValue = "-1137503330" ) @Export("setHsl") void setHsl(int var1) { @@ -175,26 +180,26 @@ public class FloorOverlayDefinition extends DualNode { double var16 = (var8 + var10) / 2.0D; if (var10 != var8) { if (var16 < 0.5D) { - var14 = (var10 - var8) / (var8 + var10); + var14 = (var10 - var8) / (var10 + var8); } if (var16 >= 0.5D) { var14 = (var10 - var8) / (2.0D - var10 - var8); } - if (var10 == var2) { + if (var2 == var10) { var12 = (var4 - var6) / (var10 - var8); - } else if (var10 == var4) { + } else if (var4 == var10) { var12 = (var6 - var2) / (var10 - var8) + 2.0D; - } else if (var10 == var6) { + } else if (var6 == var10) { var12 = 4.0D + (var2 - var4) / (var10 - var8); } } var12 /= 6.0D; this.hue = (int)(256.0D * var12); - this.saturation = (int)(256.0D * var14); - this.lightness = (int)(256.0D * var16); + this.saturation = (int)(var14 * 256.0D); + this.lightness = (int)(var16 * 256.0D); if (this.saturation < 0) { this.saturation = 0; } else if (this.saturation > 255) { @@ -208,4 +213,19 @@ public class FloorOverlayDefinition extends DualNode { } } + + @ObfuscatedName("k") + @ObfuscatedSignature( + signature = "([BI)Lky;", + garbageValue = "1533965281" + ) + static Font method4853(byte[] var0) { + if (var0 == null) { + return null; + } else { + Font var1 = new Font(var0, UrlRequester.SpriteBuffer_xOffsets, class216.SpriteBuffer_yOffsets, class325.SpriteBuffer_spriteWidths, VarcInt.SpriteBuffer_spriteHeights, class325.SpriteBuffer_spritePalette, FillMode.SpriteBuffer_pixels); + PcmPlayer.method2510(); + return var1; + } + } } diff --git a/runescape-client/src/main/java/FloorUnderlayDefinition.java b/runescape-client/src/main/java/FloorUnderlayDefinition.java index 995a56c23b..ae89edca6c 100644 --- a/runescape-client/src/main/java/FloorUnderlayDefinition.java +++ b/runescape-client/src/main/java/FloorUnderlayDefinition.java @@ -4,60 +4,48 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ir") +@ObfuscatedName("ig") @Implements("FloorUnderlayDefinition") public class FloorUnderlayDefinition extends DualNode { - @ObfuscatedName("qu") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lct;" - ) - @Export("pcmStreamMixer") - static PcmStreamMixer pcmStreamMixer; - @ObfuscatedName("a") - @ObfuscatedSignature( - signature = "Lhq;" + signature = "Lhf;" ) @Export("FloorUnderlayDefinition_archive") public static AbstractArchive FloorUnderlayDefinition_archive; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Leb;" + signature = "Lef;" ) @Export("FloorUnderlayDefinition_cached") - public static EvictingDualNodeHashTable FloorUnderlayDefinition_cached; - @ObfuscatedName("g") + static EvictingDualNodeHashTable FloorUnderlayDefinition_cached; + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = 1804516089 - ) - @Export("canvasHeight") - public static int canvasHeight; - @ObfuscatedName("n") - @ObfuscatedGetter( - intValue = 1186961111 + intValue = -1990790849 ) @Export("rgb") int rgb; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = 2037772261 + intValue = 950733239 ) @Export("hue") public int hue; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = 232580593 + intValue = -1331768767 ) @Export("saturation") public int saturation; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = -818130019 + intValue = -1638943331 ) @Export("lightness") public int lightness; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedGetter( - intValue = 820254553 + intValue = -49620877 ) @Export("hueMultiplier") public int hueMultiplier; @@ -66,27 +54,27 @@ public class FloorUnderlayDefinition extends DualNode { FloorUnderlayDefinition_cached = new EvictingDualNodeHashTable(64); } - public FloorUnderlayDefinition() { + FloorUnderlayDefinition() { this.rgb = 0; } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "65" + signature = "(I)V", + garbageValue = "-1444888846" ) @Export("postDecode") - public void postDecode() { + void postDecode() { this.setHsl(this.rgb); } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Lkc;II)V", - garbageValue = "-2043109243" + signature = "(Lkg;IB)V", + garbageValue = "-99" ) @Export("decode") - public void decode(Buffer var1, int var2) { + void decode(Buffer var1, int var2) { while (true) { int var3 = var1.readUnsignedByte(); if (var3 == 0) { @@ -97,10 +85,10 @@ public class FloorUnderlayDefinition extends DualNode { } } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(Lkc;III)V", - garbageValue = "347709925" + signature = "(Lkg;III)V", + garbageValue = "-1897870876" ) @Export("decodeNext") void decodeNext(Buffer var1, int var2, int var3) { @@ -110,10 +98,10 @@ public class FloorUnderlayDefinition extends DualNode { } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(IB)V", - garbageValue = "1" + signature = "(II)V", + garbageValue = "-2026180735" ) @Export("setHsl") void setHsl(int var1) { @@ -140,10 +128,10 @@ public class FloorUnderlayDefinition extends DualNode { double var12 = 0.0D; double var14 = 0.0D; - double var16 = (var8 + var10) / 2.0D; - if (var8 != var10) { + double var16 = (var10 + var8) / 2.0D; + if (var10 != var8) { if (var16 < 0.5D) { - var14 = (var10 - var8) / (var8 + var10); + var14 = (var10 - var8) / (var10 + var8); } if (var16 >= 0.5D) { @@ -153,15 +141,15 @@ public class FloorUnderlayDefinition extends DualNode { if (var2 == var10) { var12 = (var4 - var6) / (var10 - var8); } else if (var4 == var10) { - var12 = (var6 - var2) / (var10 - var8) + 2.0D; - } else if (var6 == var10) { + var12 = 2.0D + (var6 - var2) / (var10 - var8); + } else if (var10 == var6) { var12 = 4.0D + (var2 - var4) / (var10 - var8); } } var12 /= 6.0D; - this.saturation = (int)(var14 * 256.0D); - this.lightness = (int)(256.0D * var16); + this.saturation = (int)(256.0D * var14); + this.lightness = (int)(var16 * 256.0D); if (this.saturation < 0) { this.saturation = 0; } else if (this.saturation > 255) { @@ -175,15 +163,15 @@ public class FloorUnderlayDefinition extends DualNode { } if (var16 > 0.5D) { - this.hueMultiplier = (int)(var14 * (1.0D - var16) * 512.0D); + this.hueMultiplier = (int)((1.0D - var16) * var14 * 512.0D); } else { - this.hueMultiplier = (int)(var14 * var16 * 512.0D); + this.hueMultiplier = (int)(512.0D * var14 * var16); } if (this.hueMultiplier < 1) { this.hueMultiplier = 1; } - this.hue = (int)((double)this.hueMultiplier * var12); + this.hue = (int)(var12 * (double)this.hueMultiplier); } } diff --git a/runescape-client/src/main/java/Font.java b/runescape-client/src/main/java/Font.java index de253dc7e7..8a3482aed2 100644 --- a/runescape-client/src/main/java/Font.java +++ b/runescape-client/src/main/java/Font.java @@ -2,7 +2,7 @@ import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; -@ObfuscatedName("ks") +@ObfuscatedName("ky") @Implements("Font") public final class Font extends AbstractFont { public Font(byte[] var1, int[] var2, int[] var3, int[] var4, int[] var5, int[] var6, byte[][] var7) { @@ -13,7 +13,7 @@ public final class Font extends AbstractFont { super(var1); } - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("drawGlyph") final void drawGlyph(byte[] var1, int var2, int var3, int var4, int var5, int var6) { int var7 = var3 * Rasterizer2D.Rasterizer2D_width + var2; @@ -55,7 +55,7 @@ public final class Font extends AbstractFont { } } - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("drawGlyphAlpha") final void drawGlyphAlpha(byte[] var1, int var2, int var3, int var4, int var5, int var6, int var7) { int var8 = var3 * Rasterizer2D.Rasterizer2D_width + var2; diff --git a/runescape-client/src/main/java/FontName.java b/runescape-client/src/main/java/FontName.java index 0d19a49f34..8dced08124 100644 --- a/runescape-client/src/main/java/FontName.java +++ b/runescape-client/src/main/java/FontName.java @@ -2,54 +2,53 @@ import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -import net.runelite.rs.Reflection; -@ObfuscatedName("kq") +@ObfuscatedName("ka") @Implements("FontName") public class FontName { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lkq;" + signature = "Lka;" ) @Export("FontName_plain11") public static final FontName FontName_plain11; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lkq;" + signature = "Lka;" ) @Export("FontName_plain12") public static final FontName FontName_plain12; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Lkq;" + signature = "Lka;" ) @Export("FontName_bold12") public static final FontName FontName_bold12; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Lkq;" + signature = "Lka;" ) @Export("FontName_verdana11") public static final FontName FontName_verdana11; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "Lkq;" + signature = "Lka;" ) @Export("FontName_verdana13") public static final FontName FontName_verdana13; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "Lkq;" + signature = "Lka;" ) @Export("FontName_verdana15") public static final FontName FontName_verdana15; - @ObfuscatedName("o") + @ObfuscatedName("gg") @ObfuscatedSignature( - signature = "Llx;" + signature = "[Lln;" ) - @Export("rightTitleSprite") - static Sprite rightTitleSprite; - @ObfuscatedName("c") + @Export("headIconPkSprites") + static Sprite[] headIconPkSprites; + @ObfuscatedName("h") @Export("name") String name; @@ -66,125 +65,232 @@ public class FontName { this.name = var1; } - @ObfuscatedName("q") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Ljava/lang/String;I)Ljava/lang/Class;", - garbageValue = "703814886" + signature = "(Ljava/lang/Object;ZB)[B", + garbageValue = "-6" ) - @Export("loadClassFromDescriptor") - static Class loadClassFromDescriptor(String var0) throws ClassNotFoundException { - if (var0.equals("B")) { - return Byte.TYPE; - } else if (var0.equals("I")) { - return Integer.TYPE; - } else if (var0.equals("S")) { - return Short.TYPE; - } else if (var0.equals("J")) { - return Long.TYPE; - } else if (var0.equals("Z")) { - return Boolean.TYPE; - } else if (var0.equals("F")) { - return Float.TYPE; - } else if (var0.equals("D")) { - return Double.TYPE; - } else if (var0.equals("C")) { - return Character.TYPE; + @Export("serialize") + public static byte[] serialize(Object var0, boolean var1) { + if (var0 == null) { + return null; + } else if (var0 instanceof byte[]) { + byte[] var3 = (byte[])((byte[])var0); + return var1 ? ObjectSound.method1935(var3) : var3; + } else if (var0 instanceof AbstractByteArrayCopier) { + AbstractByteArrayCopier var2 = (AbstractByteArrayCopier)var0; + return var2.get(); } else { - return var0.equals("void") ? Void.TYPE : Reflection.findClass(var0); + throw new IllegalArgumentException(); } } - @ObfuscatedName("v") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(II)V", - garbageValue = "348293638" + signature = "([Ljava/lang/CharSequence;IIS)Ljava/lang/String;", + garbageValue = "11835" ) - @Export("clearItemContainer") - static void clearItemContainer(int var0) { - ItemContainer var1 = (ItemContainer)ItemContainer.itemContainers.get((long)var0); - if (var1 != null) { - for (int var2 = 0; var2 < var1.ids.length; ++var2) { - var1.ids[var2] = -1; - var1.quantities[var2] = 0; + public static String method5425(CharSequence[] var0, int var1, int var2) { + if (var2 == 0) { + return ""; + } else if (var2 == 1) { + CharSequence var3 = var0[var1]; + return var3 == null ? "null" : var3.toString(); + } else { + int var8 = var2 + var1; + int var4 = 0; + + for (int var5 = var1; var5 < var8; ++var5) { + CharSequence var6 = var0[var5]; + if (var6 == null) { + var4 += 4; + } else { + var4 += var6.length(); + } } + StringBuilder var9 = new StringBuilder(var4); + + for (int var10 = var1; var10 < var8; ++var10) { + CharSequence var7 = var0[var10]; + if (var7 == null) { + var9.append("null"); + } else { + var9.append(var7); + } + } + + return var9.toString(); } } - @ObfuscatedName("gh") - @ObfuscatedSignature( - signature = "(II)V", - garbageValue = "-837375180" - ) - @Export("setWindowedMode") - static void setWindowedMode(int var0) { - Client.field736 = 0L; - if (var0 >= 2) { - Client.isResizable = true; - } else { - Client.isResizable = false; - } - - if (WallDecoration.getWindowedMode() == 1) { - WorldMapID.client.setMaxCanvasSize(765, 503); - } else { - WorldMapID.client.setMaxCanvasSize(7680, 2160); - } - - if (Client.gameState >= 25) { - PacketBufferNode var1 = SoundSystem.getPacketBufferNode(ClientPacket.field2257, Client.packetWriter.isaacCipher); - var1.packetBuffer.writeByte(WallDecoration.getWindowedMode()); - var1.packetBuffer.writeShort(class286.canvasWidth); - var1.packetBuffer.writeShort(FloorUnderlayDefinition.canvasHeight); - Client.packetWriter.addNode(var1); - } - - } - - @ObfuscatedName("hw") + @ObfuscatedName("gw") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "-1528266884" + garbageValue = "1549507676" ) - static final void method5442() { - for (GraphicsObject var0 = (GraphicsObject)Client.graphicsObjects.last(); var0 != null; var0 = (GraphicsObject)Client.graphicsObjects.previous()) { - if (var0.plane == Player.Client_plane && !var0.isFinished) { - if (Client.cycle >= var0.cycleStart) { - var0.advance(Client.field693); - if (var0.isFinished) { - var0.remove(); - } else { - WorldMapArea.scene.drawEntity(var0.plane, var0.x, var0.y, var0.height, 60, var0, 0, -1L, false); - } + static void method5427() { + if (Client.combatTargetPlayerIndex >= 0 && Client.players[Client.combatTargetPlayerIndex] != null) { + Varcs.addPlayerToScene(Client.players[Client.combatTargetPlayerIndex], false); + } + + } + + @ObfuscatedName("gr") + @ObfuscatedSignature( + signature = "(IIIII)V", + garbageValue = "-310614097" + ) + static final void method5426(int var0, int var1, int var2, int var3) { + Client.overheadTextCount = 0; + boolean var4 = false; + int var5 = -1; + int var6 = -1; + int var7 = Players.Players_count; + int[] var8 = Players.Players_indices; + + int var9; + for (var9 = 0; var9 < var7 + Client.npcCount; ++var9) { + Object var10; + if (var9 < var7) { + var10 = Client.players[var8[var9]]; + if (var8[var9] == Client.combatTargetPlayerIndex) { + var4 = true; + var5 = var9; + continue; + } + + if (var10 == class215.localPlayer) { + var6 = var9; + continue; } } else { - var0.remove(); + var10 = Client.npcs[Client.npcIndices[var9 - var7]]; } + + class80.drawActor2d((Actor)var10, var9, var0, var1, var2, var3); } - } + if (Client.renderSelf && var6 != -1) { + class80.drawActor2d(class215.localPlayer, var6, var0, var1, var2, var3); + } - @ObfuscatedName("lp") - @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "-1324423171" - ) - static void method5443() { - if (Client.field645 && class215.localPlayer != null) { - int var0 = class215.localPlayer.pathX[0]; - int var1 = class215.localPlayer.pathY[0]; - if (var0 < 0 || var1 < 0 || var0 >= 104 || var1 >= 104) { - return; + if (var4) { + class80.drawActor2d(Client.players[Client.combatTargetPlayerIndex], var5, var0, var1, var2, var3); + } + + for (var9 = 0; var9 < Client.overheadTextCount; ++var9) { + int var19 = Client.overheadTextXs[var9]; + int var11 = Client.overheadTextYs[var9]; + int var12 = Client.overheadTextXOffsets[var9]; + int var13 = Client.overheadTextAscents[var9]; + boolean var14 = true; + + while (var14) { + var14 = false; + + for (int var15 = 0; var15 < var9; ++var15) { + if (var11 + 2 > Client.overheadTextYs[var15] - Client.overheadTextAscents[var15] && var11 - var13 < Client.overheadTextYs[var15] + 2 && var19 - var12 < Client.overheadTextXOffsets[var15] + Client.overheadTextXs[var15] && var19 + var12 > Client.overheadTextXs[var15] - Client.overheadTextXOffsets[var15] && Client.overheadTextYs[var15] - Client.overheadTextAscents[var15] < var11) { + var11 = Client.overheadTextYs[var15] - Client.overheadTextAscents[var15]; + var14 = true; + } + } } - IgnoreList.oculusOrbFocalPointX = class215.localPlayer.x; - int var2 = GraphicsObject.getTileHeight(class215.localPlayer.x, class215.localPlayer.y, Player.Client_plane) - Client.camFollowHeight; - if (var2 < Tiles.field497) { - Tiles.field497 = var2; - } + Client.viewportTempX = Client.overheadTextXs[var9]; + Client.viewportTempY = Client.overheadTextYs[var9] = var11; + String var20 = Client.overheadText[var9]; + if (Client.chatEffects == 0) { + int var16 = 16776960; + if (Client.overheadTextColors[var9] < 6) { + var16 = Client.field857[Client.overheadTextColors[var9]]; + } - AbstractArchive.oculusOrbFocalPointY = class215.localPlayer.y; - Client.field645 = false; + if (Client.overheadTextColors[var9] == 6) { + var16 = Client.viewportDrawCount % 20 < 10 ? 16711680 : 16776960; + } + + if (Client.overheadTextColors[var9] == 7) { + var16 = Client.viewportDrawCount % 20 < 10 ? 255 : '\uffff'; + } + + if (Client.overheadTextColors[var9] == 8) { + var16 = Client.viewportDrawCount % 20 < 10 ? '뀀' : 8454016; + } + + int var17; + if (Client.overheadTextColors[var9] == 9) { + var17 = 150 - Client.overheadTextCyclesRemaining[var9]; + if (var17 < 50) { + var16 = var17 * 1280 + 16711680; + } else if (var17 < 100) { + var16 = 16776960 - (var17 - 50) * 327680; + } else if (var17 < 150) { + var16 = (var17 - 100) * 5 + 65280; + } + } + + if (Client.overheadTextColors[var9] == 10) { + var17 = 150 - Client.overheadTextCyclesRemaining[var9]; + if (var17 < 50) { + var16 = var17 * 5 + 16711680; + } else if (var17 < 100) { + var16 = 16711935 - (var17 - 50) * 327680; + } else if (var17 < 150) { + var16 = (var17 - 100) * 327680 + 255 - (var17 - 100) * 5; + } + } + + if (Client.overheadTextColors[var9] == 11) { + var17 = 150 - Client.overheadTextCyclesRemaining[var9]; + if (var17 < 50) { + var16 = 16777215 - var17 * 327685; + } else if (var17 < 100) { + var16 = (var17 - 50) * 327685 + 65280; + } else if (var17 < 150) { + var16 = 16777215 - (var17 - 100) * 327680; + } + } + + if (Client.overheadTextEffects[var9] == 0) { + JagexCache.fontBold12.drawCentered(var20, var0 + Client.viewportTempX, Client.viewportTempY + var1, var16, 0); + } + + if (Client.overheadTextEffects[var9] == 1) { + JagexCache.fontBold12.drawCenteredWave(var20, var0 + Client.viewportTempX, Client.viewportTempY + var1, var16, 0, Client.viewportDrawCount); + } + + if (Client.overheadTextEffects[var9] == 2) { + JagexCache.fontBold12.drawCenteredWave2(var20, var0 + Client.viewportTempX, Client.viewportTempY + var1, var16, 0, Client.viewportDrawCount); + } + + if (Client.overheadTextEffects[var9] == 3) { + JagexCache.fontBold12.drawCenteredShake(var20, var0 + Client.viewportTempX, Client.viewportTempY + var1, var16, 0, Client.viewportDrawCount, 150 - Client.overheadTextCyclesRemaining[var9]); + } + + if (Client.overheadTextEffects[var9] == 4) { + var17 = (150 - Client.overheadTextCyclesRemaining[var9]) * (JagexCache.fontBold12.stringWidth(var20) + 100) / 150; + Rasterizer2D.Rasterizer2D_expandClip(var0 + Client.viewportTempX - 50, var1, var0 + Client.viewportTempX + 50, var3 + var1); + JagexCache.fontBold12.draw(var20, var0 + Client.viewportTempX + 50 - var17, Client.viewportTempY + var1, var16, 0); + Rasterizer2D.Rasterizer2D_setClip(var0, var1, var0 + var2, var3 + var1); + } + + if (Client.overheadTextEffects[var9] == 5) { + var17 = 150 - Client.overheadTextCyclesRemaining[var9]; + int var18 = 0; + if (var17 < 25) { + var18 = var17 - 25; + } else if (var17 > 125) { + var18 = var17 - 125; + } + + Rasterizer2D.Rasterizer2D_expandClip(var0, Client.viewportTempY + var1 - JagexCache.fontBold12.ascent - 1, var0 + var2, Client.viewportTempY + var1 + 5); + JagexCache.fontBold12.drawCentered(var20, var0 + Client.viewportTempX, var18 + Client.viewportTempY + var1, var16, 0); + Rasterizer2D.Rasterizer2D_setClip(var0, var1, var0 + var2, var3 + var1); + } + } else { + JagexCache.fontBold12.drawCentered(var20, var0 + Client.viewportTempX, Client.viewportTempY + var1, 16776960, 0); + } } } diff --git a/runescape-client/src/main/java/Fonts.java b/runescape-client/src/main/java/Fonts.java index 374a6c9afa..dab03a7179 100644 --- a/runescape-client/src/main/java/Fonts.java +++ b/runescape-client/src/main/java/Fonts.java @@ -4,27 +4,27 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ko") +@ObfuscatedName("kf") @Implements("Fonts") public class Fonts { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lhq;" + signature = "Lhf;" ) @Export("spritesArchive") AbstractArchive spritesArchive; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lhq;" + signature = "Lhf;" ) @Export("fontsArchive") AbstractArchive fontsArchive; - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("map") HashMap map; @ObfuscatedSignature( - signature = "(Lhq;Lhq;)V" + signature = "(Lhf;Lhf;)V" ) public Fonts(AbstractArchive var1, AbstractArchive var2) { this.spritesArchive = var1; @@ -32,10 +32,10 @@ public class Fonts { this.map = new HashMap(); } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "([Lkq;B)Ljava/util/HashMap;", - garbageValue = "-73" + signature = "([Lka;B)Ljava/util/HashMap;", + garbageValue = "35" ) @Export("createMap") public HashMap createMap(FontName[] var1) { @@ -52,7 +52,7 @@ public class Fonts { String var9 = var5.name; int var10 = var7.getGroupId(var9); int var11 = var7.getFileId(var10, ""); - Font var6 = class269.method5114(var7, var8, var10, var11); + Font var6 = class60.method1195(var7, var8, var10, var11); if (var6 != null) { this.map.put(var5, var6); var2.put(var5, var6); @@ -62,4 +62,42 @@ public class Fonts { return var2; } + + @ObfuscatedName("f") + @ObfuscatedSignature( + signature = "([Ljava/lang/String;[SIII)V", + garbageValue = "-1903452094" + ) + @Export("sortItemsByName") + static void sortItemsByName(String[] var0, short[] var1, int var2, int var3) { + if (var2 < var3) { + int var4 = (var3 + var2) / 2; + int var5 = var2; + String var6 = var0[var4]; + var0[var4] = var0[var3]; + var0[var3] = var6; + short var7 = var1[var4]; + var1[var4] = var1[var3]; + var1[var3] = var7; + + for (int var8 = var2; var8 < var3; ++var8) { + if (var6 == null || var0[var8] != null && var0[var8].compareTo(var6) < (var8 & 1)) { + String var9 = var0[var8]; + var0[var8] = var0[var5]; + var0[var5] = var9; + short var10 = var1[var8]; + var1[var8] = var1[var5]; + var1[var5++] = var10; + } + } + + var0[var3] = var0[var5]; + var0[var5] = var6; + var1[var3] = var1[var5]; + var1[var5] = var7; + sortItemsByName(var0, var1, var2, var5 - 1); + sortItemsByName(var0, var1, var5 + 1, var3); + } + + } } diff --git a/runescape-client/src/main/java/Frames.java b/runescape-client/src/main/java/Frames.java index d61482d088..fcc2378511 100644 --- a/runescape-client/src/main/java/Frames.java +++ b/runescape-client/src/main/java/Frames.java @@ -1,26 +1,29 @@ import net.runelite.mapping.Export; import net.runelite.mapping.Implements; +import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("em") +@ObfuscatedName("er") @Implements("Frames") public class Frames extends DualNode { - @ObfuscatedName("j") - @ObfuscatedSignature( - signature = "Lkc;" + @ObfuscatedName("b") + @Export("Interpreter_intLocals") + static int[] Interpreter_intLocals; + @ObfuscatedName("k") + @ObfuscatedGetter( + intValue = 1770537973 ) - @Export("NetCache_responseArchiveBuffer") - public static Buffer NetCache_responseArchiveBuffer; - @ObfuscatedName("a") + static int field1880; + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "[Ldw;" + signature = "[Ldg;" ) @Export("frames") Animation[] frames; @ObfuscatedSignature( - signature = "(Lhq;Lhq;IZ)V", + signature = "(Lhf;Lhf;IZ)V", garbageValue = "0" ) public Frames(AbstractArchive var1, AbstractArchive var2, int var3, boolean var4) { @@ -52,59 +55,475 @@ public class Frames extends DualNode { } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "(II)Z", - garbageValue = "1903935769" + garbageValue = "-1990783363" ) @Export("hasAlphaTransform") public boolean hasAlphaTransform(int var1) { return this.frames[var1].hasAlphaTransform; } - @ObfuscatedName("fc") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "(IB)V", - garbageValue = "3" + signature = "(Lel;[Lfh;B)V", + garbageValue = "-55" ) - @Export("forceDisconnect") - static final void forceDisconnect(int var0) { - class1.logOut(); - switch(var0) { - case 1: - Login.loginIndex = 24; - GrandExchangeOffer.setLoginResponseString("", "You were disconnected from the server.", ""); - break; - case 2: - Players.method2298(); - } + static final void method3319(Scene var0, CollisionMap[] var1) { + int var2; + int var3; + int var4; + int var5; + for (var2 = 0; var2 < 4; ++var2) { + for (var3 = 0; var3 < 104; ++var3) { + for (var4 = 0; var4 < 104; ++var4) { + if ((Tiles.Tiles_renderFlags[var2][var3][var4] & 1) == 1) { + var5 = var2; + if ((Tiles.Tiles_renderFlags[1][var3][var4] & 2) == 2) { + var5 = var2 - 1; + } - } - - @ObfuscatedName("gb") - @ObfuscatedSignature( - signature = "(S)V", - garbageValue = "-13007" - ) - static void method3397() { - if (class215.localPlayer.x >> 7 == Client.destinationX && class215.localPlayer.y >> 7 == Client.destinationY) { - Client.destinationX = 0; - } - - } - - @ObfuscatedName("jp") - @ObfuscatedSignature( - signature = "(II)Z", - garbageValue = "-244259971" - ) - static boolean method3400(int var0) { - for (int var1 = 0; var1 < Client.field866; ++var1) { - if (Client.field854[var1] == var0) { - return true; + if (var5 >= 0) { + var1[var5].setBlockedByFloor(var3, var4); + } + } + } + } + } + + Tiles.field511 += (int)(Math.random() * 5.0D) - 2; + if (Tiles.field511 < -8) { + Tiles.field511 = -8; + } + + if (Tiles.field511 > 8) { + Tiles.field511 = 8; + } + + Tiles.field503 += (int)(Math.random() * 5.0D) - 2; + if (Tiles.field503 < -16) { + Tiles.field503 = -16; + } + + if (Tiles.field503 > 16) { + Tiles.field503 = 16; + } + + int var9; + int var10; + int var11; + int var12; + int var13; + int var14; + int var15; + int var16; + int[] var10000; + int var17; + int var18; + for (var2 = 0; var2 < 4; ++var2) { + byte[][] var42 = class51.field423[var2]; + var9 = (int)Math.sqrt(5100.0D); + var10 = var9 * 768 >> 8; + + int var19; + int var20; + for (var11 = 1; var11 < 103; ++var11) { + for (var12 = 1; var12 < 103; ++var12) { + var13 = Tiles.Tiles_heights[var2][var12 + 1][var11] - Tiles.Tiles_heights[var2][var12 - 1][var11]; + var14 = Tiles.Tiles_heights[var2][var12][var11 + 1] - Tiles.Tiles_heights[var2][var12][var11 - 1]; + var15 = (int)Math.sqrt((double)(var14 * var14 + var13 * var13 + 65536)); + var16 = (var13 << 8) / var15; + var17 = 65536 / var15; + var18 = (var14 << 8) / var15; + var19 = (var16 * -50 + var18 * -50 + var17 * -10) / var10 + 96; + var20 = (var42[var12 - 1][var11] >> 2) + (var42[var12][var11 - 1] >> 2) + (var42[var12 + 1][var11] >> 3) + (var42[var12][var11 + 1] >> 3) + (var42[var12][var11] >> 1); + Login.field1207[var12][var11] = var19 - var20; + } + } + + for (var11 = 0; var11 < 104; ++var11) { + Tiles.Tiles_hue[var11] = 0; + Tiles.Tiles_saturation[var11] = 0; + Tiles.Tiles_lightness[var11] = 0; + class290.Tiles_hueMultiplier[var11] = 0; + MouseRecorder.field588[var11] = 0; + } + + for (var11 = -5; var11 < 109; ++var11) { + for (var12 = 0; var12 < 104; ++var12) { + var13 = var11 + 5; + int var10002; + if (var13 >= 0 && var13 < 104) { + var14 = Tiles.field498[var2][var13][var12] & 255; + if (var14 > 0) { + FloorUnderlayDefinition var43 = WallDecoration.method3339(var14 - 1); + var10000 = Tiles.Tiles_hue; + var10000[var12] += var43.hue; + var10000 = Tiles.Tiles_saturation; + var10000[var12] += var43.saturation; + var10000 = Tiles.Tiles_lightness; + var10000[var12] += var43.lightness; + var10000 = class290.Tiles_hueMultiplier; + var10000[var12] += var43.hueMultiplier; + var10002 = MouseRecorder.field588[var12]++; + } + } + + var14 = var11 - 5; + if (var14 >= 0 && var14 < 104) { + var15 = Tiles.field498[var2][var14][var12] & 255; + if (var15 > 0) { + FloorUnderlayDefinition var45 = WallDecoration.method3339(var15 - 1); + var10000 = Tiles.Tiles_hue; + var10000[var12] -= var45.hue; + var10000 = Tiles.Tiles_saturation; + var10000[var12] -= var45.saturation; + var10000 = Tiles.Tiles_lightness; + var10000[var12] -= var45.lightness; + var10000 = class290.Tiles_hueMultiplier; + var10000[var12] -= var45.hueMultiplier; + var10002 = MouseRecorder.field588[var12]--; + } + } + } + + if (var11 >= 1 && var11 < 103) { + var12 = 0; + var13 = 0; + var14 = 0; + var15 = 0; + var16 = 0; + + for (var17 = -5; var17 < 109; ++var17) { + var18 = var17 + 5; + if (var18 >= 0 && var18 < 104) { + var12 += Tiles.Tiles_hue[var18]; + var13 += Tiles.Tiles_saturation[var18]; + var14 += Tiles.Tiles_lightness[var18]; + var15 += class290.Tiles_hueMultiplier[var18]; + var16 += MouseRecorder.field588[var18]; + } + + var19 = var17 - 5; + if (var19 >= 0 && var19 < 104) { + var12 -= Tiles.Tiles_hue[var19]; + var13 -= Tiles.Tiles_saturation[var19]; + var14 -= Tiles.Tiles_lightness[var19]; + var15 -= class290.Tiles_hueMultiplier[var19]; + var16 -= MouseRecorder.field588[var19]; + } + + if (var17 >= 1 && var17 < 103 && (!Client.isLowDetail || (Tiles.Tiles_renderFlags[0][var11][var17] & 2) != 0 || (Tiles.Tiles_renderFlags[var2][var11][var17] & 16) == 0)) { + if (var2 < Tiles.Tiles_minPlane) { + Tiles.Tiles_minPlane = var2; + } + + var20 = Tiles.field498[var2][var11][var17] & 255; + int var21 = Tiles.field499[var2][var11][var17] & 255; + if (var20 > 0 || var21 > 0) { + int var22 = Tiles.Tiles_heights[var2][var11][var17]; + int var23 = Tiles.Tiles_heights[var2][var11 + 1][var17]; + int var24 = Tiles.Tiles_heights[var2][var11 + 1][var17 + 1]; + int var25 = Tiles.Tiles_heights[var2][var11][var17 + 1]; + int var26 = Login.field1207[var11][var17]; + int var27 = Login.field1207[var11 + 1][var17]; + int var28 = Login.field1207[var11 + 1][var17 + 1]; + int var29 = Login.field1207[var11][var17 + 1]; + int var30 = -1; + int var31 = -1; + int var32; + int var33; + if (var20 > 0) { + var32 = var12 * 256 / var15; + var33 = var13 / var16; + int var34 = var14 / var16; + var30 = FriendLoginUpdate.hslToRgb(var32, var33, var34); + var32 = var32 + Tiles.field511 & 255; + var34 += Tiles.field503; + if (var34 < 0) { + var34 = 0; + } else if (var34 > 255) { + var34 = 255; + } + + var31 = FriendLoginUpdate.hslToRgb(var32, var33, var34); + } + + if (var2 > 0) { + boolean var47 = true; + if (var20 == 0 && Tiles.field500[var2][var11][var17] != 0) { + var47 = false; + } + + if (var21 > 0 && !WorldMapRectangle.FloorUnderlayDefinition_get(var21 - 1).hideUnderlay) { + var47 = false; + } + + if (var47 && var23 == var22 && var24 == var22 && var22 == var25) { + var10000 = WorldMapLabel.field233[var2][var11]; + var10000[var17] |= 2340; + } + } + + var32 = 0; + if (var31 != -1) { + var32 = Rasterizer3D.Rasterizer3D_colorPalette[TriBool.method5255(var31, 96)]; + } + + if (var21 == 0) { + var0.addTile(var2, var11, var17, 0, 0, -1, var22, var23, var24, var25, TriBool.method5255(var30, var26), TriBool.method5255(var30, var27), TriBool.method5255(var30, var28), TriBool.method5255(var30, var29), 0, 0, 0, 0, var32, 0); + } else { + var33 = Tiles.field500[var2][var11][var17] + 1; + byte var48 = Tiles.field501[var2][var11][var17]; + FloorOverlayDefinition var35 = WorldMapRectangle.FloorUnderlayDefinition_get(var21 - 1); + int var36 = var35.texture; + int var37; + int var38; + int var39; + int var40; + if (var36 >= 0) { + var38 = Rasterizer3D.Rasterizer3D_textureLoader.getAverageTextureRGB(var36); + var37 = -1; + } else if (var35.primaryRgb == 16711935) { + var37 = -2; + var36 = -1; + var38 = -2; + } else { + var37 = FriendLoginUpdate.hslToRgb(var35.hue, var35.saturation, var35.lightness); + var39 = var35.hue + Tiles.field511 & 255; + var40 = var35.lightness + Tiles.field503; + if (var40 < 0) { + var40 = 0; + } else if (var40 > 255) { + var40 = 255; + } + + var38 = FriendLoginUpdate.hslToRgb(var39, var35.saturation, var40); + } + + var39 = 0; + if (var38 != -2) { + var39 = Rasterizer3D.Rasterizer3D_colorPalette[LoginScreenAnimation.method1832(var38, 96)]; + } + + if (var35.secondaryRgb != -1) { + var40 = var35.secondaryHue + Tiles.field511 & 255; + int var41 = var35.secondaryLightness + Tiles.field503; + if (var41 < 0) { + var41 = 0; + } else if (var41 > 255) { + var41 = 255; + } + + var38 = FriendLoginUpdate.hslToRgb(var40, var35.secondarySaturation, var41); + var39 = Rasterizer3D.Rasterizer3D_colorPalette[LoginScreenAnimation.method1832(var38, 96)]; + } + + var0.addTile(var2, var11, var17, var33, var48, var36, var22, var23, var24, var25, TriBool.method5255(var30, var26), TriBool.method5255(var30, var27), TriBool.method5255(var30, var28), TriBool.method5255(var30, var29), LoginScreenAnimation.method1832(var37, var26), LoginScreenAnimation.method1832(var37, var27), LoginScreenAnimation.method1832(var37, var28), LoginScreenAnimation.method1832(var37, var29), var32, var39); + } + } + } + } + } + } + + for (var11 = 1; var11 < 103; ++var11) { + for (var12 = 1; var12 < 103; ++var12) { + if ((Tiles.Tiles_renderFlags[var2][var12][var11] & 8) != 0) { + var17 = 0; + } else if (var2 > 0 && (Tiles.Tiles_renderFlags[1][var12][var11] & 2) != 0) { + var17 = var2 - 1; + } else { + var17 = var2; + } + + var0.setTileMinPlane(var2, var12, var11, var17); + } + } + + Tiles.field498[var2] = null; + Tiles.field499[var2] = null; + Tiles.field500[var2] = null; + Tiles.field501[var2] = null; + class51.field423[var2] = null; + } + + var0.method3165(-50, -10, -50); + + for (var2 = 0; var2 < 104; ++var2) { + for (var3 = 0; var3 < 104; ++var3) { + if ((Tiles.Tiles_renderFlags[1][var2][var3] & 2) == 2) { + var0.setLinkBelow(var2, var3); + } + } + } + + var2 = 1; + var3 = 2; + var4 = 4; + + for (var5 = 0; var5 < 4; ++var5) { + if (var5 > 0) { + var2 <<= 3; + var3 <<= 3; + var4 <<= 3; + } + + for (int var6 = 0; var6 <= var5; ++var6) { + for (int var7 = 0; var7 <= 104; ++var7) { + for (int var8 = 0; var8 <= 104; ++var8) { + short var46; + if ((WorldMapLabel.field233[var6][var8][var7] & var2) != 0) { + var9 = var7; + var10 = var7; + var11 = var6; + + for (var12 = var6; var9 > 0 && (WorldMapLabel.field233[var6][var8][var9 - 1] & var2) != 0; --var9) { + } + + while (var10 < 104 && (WorldMapLabel.field233[var6][var8][var10 + 1] & var2) != 0) { + ++var10; + } + + label492: + while (var11 > 0) { + for (var13 = var9; var13 <= var10; ++var13) { + if ((WorldMapLabel.field233[var11 - 1][var8][var13] & var2) == 0) { + break label492; + } + } + + --var11; + } + + label481: + while (var12 < var5) { + for (var13 = var9; var13 <= var10; ++var13) { + if ((WorldMapLabel.field233[var12 + 1][var8][var13] & var2) == 0) { + break label481; + } + } + + ++var12; + } + + var13 = (var12 + 1 - var11) * (var10 - var9 + 1); + if (var13 >= 8) { + var46 = 240; + var15 = Tiles.Tiles_heights[var12][var8][var9] - var46; + var16 = Tiles.Tiles_heights[var11][var8][var9]; + Scene.Scene_addOccluder(var5, 1, var8 * 128, var8 * 128, var9 * 128, var10 * 128 + 128, var15, var16); + + for (var17 = var11; var17 <= var12; ++var17) { + for (var18 = var9; var18 <= var10; ++var18) { + var10000 = WorldMapLabel.field233[var17][var8]; + var10000[var18] &= ~var2; + } + } + } + } + + if ((WorldMapLabel.field233[var6][var8][var7] & var3) != 0) { + var9 = var8; + var10 = var8; + var11 = var6; + + for (var12 = var6; var9 > 0 && (WorldMapLabel.field233[var6][var9 - 1][var7] & var3) != 0; --var9) { + } + + while (var10 < 104 && (WorldMapLabel.field233[var6][var10 + 1][var7] & var3) != 0) { + ++var10; + } + + label545: + while (var11 > 0) { + for (var13 = var9; var13 <= var10; ++var13) { + if ((WorldMapLabel.field233[var11 - 1][var13][var7] & var3) == 0) { + break label545; + } + } + + --var11; + } + + label534: + while (var12 < var5) { + for (var13 = var9; var13 <= var10; ++var13) { + if ((WorldMapLabel.field233[var12 + 1][var13][var7] & var3) == 0) { + break label534; + } + } + + ++var12; + } + + var13 = (var12 + 1 - var11) * (var10 - var9 + 1); + if (var13 >= 8) { + var46 = 240; + var15 = Tiles.Tiles_heights[var12][var9][var7] - var46; + var16 = Tiles.Tiles_heights[var11][var9][var7]; + Scene.Scene_addOccluder(var5, 2, var9 * 128, var10 * 128 + 128, var7 * 128, var7 * 128, var15, var16); + + for (var17 = var11; var17 <= var12; ++var17) { + for (var18 = var9; var18 <= var10; ++var18) { + var10000 = WorldMapLabel.field233[var17][var18]; + var10000[var7] &= ~var3; + } + } + } + } + + if ((WorldMapLabel.field233[var6][var8][var7] & var4) != 0) { + var9 = var8; + var10 = var8; + var11 = var7; + + for (var12 = var7; var11 > 0 && (WorldMapLabel.field233[var6][var8][var11 - 1] & var4) != 0; --var11) { + } + + while (var12 < 104 && (WorldMapLabel.field233[var6][var8][var12 + 1] & var4) != 0) { + ++var12; + } + + label598: + while (var9 > 0) { + for (var13 = var11; var13 <= var12; ++var13) { + if ((WorldMapLabel.field233[var6][var9 - 1][var13] & var4) == 0) { + break label598; + } + } + + --var9; + } + + label587: + while (var10 < 104) { + for (var13 = var11; var13 <= var12; ++var13) { + if ((WorldMapLabel.field233[var6][var10 + 1][var13] & var4) == 0) { + break label587; + } + } + + ++var10; + } + + if ((var10 - var9 + 1) * (var12 - var11 + 1) >= 4) { + var13 = Tiles.Tiles_heights[var6][var9][var11]; + Scene.Scene_addOccluder(var5, 4, var9 * 128, var10 * 128 + 128, var11 * 128, var12 * 128 + 128, var13, var13); + + for (var14 = var9; var14 <= var10; ++var14) { + for (var15 = var11; var15 <= var12; ++var15) { + var10000 = WorldMapLabel.field233[var6][var14]; + var10000[var15] &= ~var4; + } + } + } + } + } + } } } - return false; } } diff --git a/runescape-client/src/main/java/Friend.java b/runescape-client/src/main/java/Friend.java index bff6c89b1d..a4a94c8bae 100644 --- a/runescape-client/src/main/java/Friend.java +++ b/runescape-client/src/main/java/Friend.java @@ -3,21 +3,21 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("jf") +@ObfuscatedName("jn") @Implements("Friend") public class Friend extends Buddy { - @ObfuscatedName("a") - boolean field3613; - @ObfuscatedName("t") - boolean field3611; + @ObfuscatedName("u") + boolean field3629; + @ObfuscatedName("f") + boolean field3630; Friend() { } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Ljf;I)I", - garbageValue = "-1251947576" + signature = "(Ljn;I)I", + garbageValue = "-1380403624" ) @Export("compareToFriend") int compareToFriend(Friend var1) { @@ -29,23 +29,23 @@ public class Friend extends Buddy { return -1; } else if (var1.world != 0 && super.world == 0) { return 1; - } else if (this.field3613 && !var1.field3613) { + } else if (this.field3629 && !var1.field3629) { return -1; - } else if (!this.field3613 && var1.field3613) { + } else if (!this.field3629 && var1.field3629) { return 1; - } else if (this.field3611 && !var1.field3611) { + } else if (this.field3630 && !var1.field3630) { return -1; - } else if (!this.field3611 && var1.field3611) { + } else if (!this.field3630 && var1.field3630) { return 1; } else { return super.world != 0 ? super.int2 - var1.int2 : var1.int2 - super.int2; } } - @ObfuscatedName("av") + @ObfuscatedName("v") @ObfuscatedSignature( - signature = "(Ljg;I)I", - garbageValue = "105019827" + signature = "(Ljr;B)I", + garbageValue = "41" ) @Export("compareTo_user") public int compareTo_user(User var1) { @@ -55,4 +55,55 @@ public class Friend extends Buddy { public int compareTo(Object var1) { return this.compareToFriend((Friend)var1); } + + @ObfuscatedName("e") + @ObfuscatedSignature( + signature = "(II)I", + garbageValue = "-825705813" + ) + public static int method5293(int var0) { + if (var0 > 0) { + return 1; + } else { + return var0 < 0 ? -1 : 0; + } + } + + @ObfuscatedName("jy") + @ObfuscatedSignature( + signature = "(ZB)V", + garbageValue = "0" + ) + @Export("setTapToDrop") + static void setTapToDrop(boolean var0) { + Client.tapToDrop = var0; + } + + @ObfuscatedName("jf") + @ObfuscatedSignature( + signature = "(IIII)Lbf;", + garbageValue = "-252811827" + ) + static final InterfaceParent method5303(int var0, int var1, int var2) { + InterfaceParent var3 = new InterfaceParent(); + var3.group = var1; + var3.type = var2; + Client.interfaceParents.put(var3, (long)var0); + WorldMapArea.Widget_resetModelFrames(var1); + Widget var4 = Language.getWidget(var0); + ScriptEvent.invalidateWidget(var4); + if (Client.meslayerContinueWidget != null) { + ScriptEvent.invalidateWidget(Client.meslayerContinueWidget); + Client.meslayerContinueWidget = null; + } + + Varps.method4043(); + MilliClock.revalidateWidgetScroll(FloorDecoration.Widget_interfaceComponents[var0 >> 16], var4, false); + UserComparator9.runWidgetOnLoadListener(var1); + if (Client.rootInterface != -1) { + GrandExchangeEvents.runIntfCloseListeners(Client.rootInterface, 1); + } + + return var3; + } } diff --git a/runescape-client/src/main/java/FriendLoginUpdate.java b/runescape-client/src/main/java/FriendLoginUpdate.java index e2c4849aad..d528ced360 100644 --- a/runescape-client/src/main/java/FriendLoginUpdate.java +++ b/runescape-client/src/main/java/FriendLoginUpdate.java @@ -4,36 +4,68 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("jj") +@ObfuscatedName("jf") @Implements("FriendLoginUpdate") public class FriendLoginUpdate extends Link { - @ObfuscatedName("gr") - @ObfuscatedSignature( - signature = "[Llx;" - ) - @Export("headIconPkSprites") - static Sprite[] headIconPkSprites; - @ObfuscatedName("n") + @ObfuscatedName("rc") @ObfuscatedGetter( - intValue = -1234988847 + intValue = -1971912431 ) - public int field3624; - @ObfuscatedName("q") + static int field3643; + @ObfuscatedName("i") @ObfuscatedSignature( - signature = "Lju;" + signature = "Lhf;" + ) + @Export("Widget_modelsArchive") + public static AbstractArchive Widget_modelsArchive; + @ObfuscatedName("b") + @ObfuscatedGetter( + intValue = 674667209 + ) + public int field3646; + @ObfuscatedName("g") + @ObfuscatedSignature( + signature = "Ljb;" ) @Export("username") public Username username; - @ObfuscatedName("v") + @ObfuscatedName("z") @Export("world") public short world; @ObfuscatedSignature( - signature = "(Lju;I)V" + signature = "(Ljb;I)V" ) FriendLoginUpdate(Username var1, int var2) { - this.field3624 = (int)(PlayerAppearance.currentTimeMillis() / 1000L); + this.field3646 = (int)(TaskHandler.currentTimeMillis() / 1000L); this.username = var1; this.world = (short)var2; } + + @ObfuscatedName("c") + @ObfuscatedSignature( + signature = "(IIII)I", + garbageValue = "1735579843" + ) + @Export("hslToRgb") + static final int hslToRgb(int var0, int var1, int var2) { + if (var2 > 179) { + var1 /= 2; + } + + if (var2 > 192) { + var1 /= 2; + } + + if (var2 > 217) { + var1 /= 2; + } + + if (var2 > 243) { + var1 /= 2; + } + + int var3 = (var1 / 32 << 7) + (var0 / 4 << 10) + var2 / 2; + return var3; + } } diff --git a/runescape-client/src/main/java/FriendSystem.java b/runescape-client/src/main/java/FriendSystem.java index 4efcf20198..cb8f9be5d8 100644 --- a/runescape-client/src/main/java/FriendSystem.java +++ b/runescape-client/src/main/java/FriendSystem.java @@ -4,88 +4,88 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("bb") +@ObfuscatedName("bz") @Implements("FriendSystem") public class FriendSystem { - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Lln;" + signature = "Llg;" ) @Export("loginType") final LoginType loginType; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( signature = "Ljh;" ) @Export("friendsList") public final FriendsList friendsList; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "Lje;" + signature = "Lju;" ) @Export("ignoreList") public final IgnoreList ignoreList; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedGetter( - intValue = -1502987485 + intValue = 618152065 ) - int field1044; + int field1061; @ObfuscatedSignature( - signature = "(Lln;)V" + signature = "(Llg;)V" ) FriendSystem(LoginType var1) { - this.field1044 = 0; + this.field1061 = 0; this.loginType = var1; this.friendsList = new FriendsList(var1); this.ignoreList = new IgnoreList(var1); } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "(I)Z", - garbageValue = "-2101343080" + garbageValue = "-1963052463" ) - boolean method1973() { - return this.field1044 == 2; + boolean method1870() { + return this.field1061 == 2; } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "1650406039" + signature = "(B)V", + garbageValue = "-31" ) - final void method1968() { - this.field1044 = 1; + final void method1867() { + this.field1061 = 1; } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Lkc;II)V", - garbageValue = "1319465817" + signature = "(Lkg;IB)V", + garbageValue = "52" ) @Export("readUpdate") final void readUpdate(Buffer var1, int var2) { this.friendsList.read(var1, var2); - this.field1044 = 2; - ByteArrayPool.FriendSystem_invalidateFriends(); + this.field1061 = 2; + WorldMapIcon_1.FriendSystem_invalidateFriends(); } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "-885412524" + garbageValue = "2007033957" ) @Export("processFriendUpdates") final void processFriendUpdates() { for (FriendLoginUpdate var1 = (FriendLoginUpdate)this.friendsList.friendLoginUpdates.last(); var1 != null; var1 = (FriendLoginUpdate)this.friendsList.friendLoginUpdates.previous()) { - if ((long)var1.field3624 < PlayerAppearance.currentTimeMillis() / 1000L - 5L) { + if ((long)var1.field3646 < TaskHandler.currentTimeMillis() / 1000L - 5L) { if (var1.world > 0) { - class30.addGameMessage(5, "", var1.username + " has logged in."); + GrandExchangeOfferAgeComparator.addGameMessage(5, "", var1.username + " has logged in."); } if (var1.world == 0) { - class30.addGameMessage(5, "", var1.username + " has logged out."); + GrandExchangeOfferAgeComparator.addGameMessage(5, "", var1.username + " has logged out."); } var1.remove(); @@ -94,22 +94,22 @@ public class FriendSystem { } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "-44" + signature = "(I)V", + garbageValue = "-242142328" ) @Export("clear") final void clear() { - this.field1044 = 0; + this.field1061 = 0; this.friendsList.clear(); this.ignoreList.clear(); } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(Lju;ZB)Z", - garbageValue = "-128" + signature = "(Ljb;ZI)Z", + garbageValue = "-557958994" ) @Export("isFriended") final boolean isFriended(Username var1, boolean var2) { @@ -122,10 +122,10 @@ public class FriendSystem { } } - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "(Lju;S)Z", - garbageValue = "19045" + signature = "(Ljb;B)Z", + garbageValue = "94" ) @Export("isIgnored") final boolean isIgnored(Username var1) { @@ -136,52 +136,48 @@ public class FriendSystem { } } - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "(Ljava/lang/String;B)V", - garbageValue = "14" + signature = "(Ljava/lang/String;I)V", + garbageValue = "905679920" ) @Export("addFriend") final void addFriend(String var1) { if (var1 != null) { Username var2 = new Username(var1, this.loginType); if (var2.hasCleanName()) { - StringBuilder var10000; - String var3; if (this.friendsListIsFull()) { - var10000 = null; - var3 = "Your friend list is full. Max of 200 for free users, and 400 for members"; - class30.addGameMessage(30, "", var3); + PacketBufferNode.method3670(); } else if (class215.localPlayer.username.equals(var2)) { - WorldMapRegion.method599(); + WorldMapSection2.method347("You can't add yourself to your own friend list"); } else if (this.isFriended(var2, false)) { - var10000 = (new StringBuilder()).append(var1); - Object var10001 = null; - var3 = var10000.append(" is already on your friend list").toString(); - class30.addGameMessage(30, "", var3); + class65.method1244(var1); } else if (this.isIgnored(var2)) { - Players.method2308(var1); + WorldMapSection2.method347("Please remove " + var1 + " from your ignore list first"); } else { - method2024(var1); + PacketBufferNode var3 = ModelData0.getPacketBufferNode(ClientPacket.field2268, Client.packetWriter.isaacCipher); + var3.packetBuffer.writeByte(class173.stringCp1252NullTerminatedByteSize(var1)); + var3.packetBuffer.writeStringCp1252NullTerminated(var1); + Client.packetWriter.addNode(var3); } } } } - @ObfuscatedName("p") + @ObfuscatedName("x") @ObfuscatedSignature( signature = "(I)Z", - garbageValue = "1177214541" + garbageValue = "-1079308803" ) @Export("friendsListIsFull") final boolean friendsListIsFull() { - return this.friendsList.isFull() || this.friendsList.getSize() >= 200 && Client.field749 != 1; + return this.friendsList.isFull() || this.friendsList.getSize() >= 200 && Client.field789 != 1; } - @ObfuscatedName("h") + @ObfuscatedName("o") @ObfuscatedSignature( signature = "(Ljava/lang/String;B)V", - garbageValue = "22" + garbageValue = "15" ) @Export("addIgnore") final void addIgnore(String var1) { @@ -189,37 +185,34 @@ public class FriendSystem { Username var2 = new Username(var1, this.loginType); if (var2.hasCleanName()) { if (this.canAddIgnore()) { - ModelData0.method3380(); + GrandExchangeOfferNameComparator.method145(); } else if (class215.localPlayer.username.equals(var2)) { - class247.method4642(); + WorldMapSection2.method347("You can't add yourself to your own ignore list"); } else if (this.isIgnored(var2)) { - VarbitDefinition.method4651(var1); + WorldMapSection2.method347(var1 + " is already on your ignore list"); } else if (this.isFriended(var2, false)) { - WorldMapIcon_1.method355(var1); + WorldMapSectionType.method269(var1); } else { - PacketBufferNode var3 = SoundSystem.getPacketBufferNode(ClientPacket.field2202, Client.packetWriter.isaacCipher); - var3.packetBuffer.writeByte(UserComparator6.stringCp1252NullTerminatedByteSize(var1)); - var3.packetBuffer.writeStringCp1252NullTerminated(var1); - Client.packetWriter.addNode(var3); + class218.method4179(var1); } } } } - @ObfuscatedName("e") + @ObfuscatedName("s") @ObfuscatedSignature( signature = "(B)Z", - garbageValue = "-54" + garbageValue = "97" ) @Export("canAddIgnore") final boolean canAddIgnore() { - return this.ignoreList.isFull() || this.ignoreList.getSize() >= 100 && Client.field749 != 1; + return this.ignoreList.isFull() || this.ignoreList.getSize() >= 100 && Client.field789 != 1; } - @ObfuscatedName("s") + @ObfuscatedName("t") @ObfuscatedSignature( signature = "(Ljava/lang/String;I)V", - garbageValue = "-248973546" + garbageValue = "-774164721" ) @Export("removeFriend") final void removeFriend(String var1) { @@ -227,22 +220,22 @@ public class FriendSystem { Username var2 = new Username(var1, this.loginType); if (var2.hasCleanName()) { if (this.friendsList.removeByUsername(var2)) { - MilliClock.method3604(); - PacketBufferNode var3 = SoundSystem.getPacketBufferNode(ClientPacket.field2227, Client.packetWriter.isaacCipher); - var3.packetBuffer.writeByte(UserComparator6.stringCp1252NullTerminatedByteSize(var1)); + Client.field833 = Client.cycleCntr; + PacketBufferNode var3 = ModelData0.getPacketBufferNode(ClientPacket.field2289, Client.packetWriter.isaacCipher); + var3.packetBuffer.writeByte(class173.stringCp1252NullTerminatedByteSize(var1)); var3.packetBuffer.writeStringCp1252NullTerminated(var1); Client.packetWriter.addNode(var3); } - ByteArrayPool.FriendSystem_invalidateFriends(); + WorldMapIcon_1.FriendSystem_invalidateFriends(); } } } - @ObfuscatedName("b") + @ObfuscatedName("m") @ObfuscatedSignature( signature = "(Ljava/lang/String;I)V", - garbageValue = "1867823329" + garbageValue = "-1018111" ) @Export("removeIgnore") final void removeIgnore(String var1) { @@ -250,22 +243,22 @@ public class FriendSystem { Username var2 = new Username(var1, this.loginType); if (var2.hasCleanName()) { if (this.ignoreList.removeByUsername(var2)) { - MilliClock.method3604(); - PacketBufferNode var3 = SoundSystem.getPacketBufferNode(ClientPacket.field2197, Client.packetWriter.isaacCipher); - var3.packetBuffer.writeByte(UserComparator6.stringCp1252NullTerminatedByteSize(var1)); + Client.field833 = Client.cycleCntr; + PacketBufferNode var3 = ModelData0.getPacketBufferNode(ClientPacket.field2217, Client.packetWriter.isaacCipher); + var3.packetBuffer.writeByte(class173.stringCp1252NullTerminatedByteSize(var1)); var3.packetBuffer.writeStringCp1252NullTerminated(var1); Client.packetWriter.addNode(var3); } - class42.FriendSystem_invalidateIgnoreds(); + Language.FriendSystem_invalidateIgnoreds(); } } } - @ObfuscatedName("u") + @ObfuscatedName("q") @ObfuscatedSignature( - signature = "(Lju;B)Z", - garbageValue = "-6" + signature = "(Ljb;B)Z", + garbageValue = "0" ) @Export("isFriendAndHasWorld") final boolean isFriendAndHasWorld(Username var1) { @@ -273,26 +266,21 @@ public class FriendSystem { return var2 != null && var2.hasWorld(); } - @ObfuscatedName("m") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Ljava/lang/String;I)V", - garbageValue = "-758327012" + signature = "(I)[Lgd;", + garbageValue = "-1110076754" ) - static final void method2024(String var0) { - PacketBufferNode var1 = SoundSystem.getPacketBufferNode(ClientPacket.field2247, Client.packetWriter.isaacCipher); - var1.packetBuffer.writeByte(UserComparator6.stringCp1252NullTerminatedByteSize(var0)); - var1.packetBuffer.writeStringCp1252NullTerminated(var0); - Client.packetWriter.addNode(var1); + public static class185[] method1927() { + return new class185[]{class185.field2334, class185.field2332, class185.field2333, class185.field2339, class185.field2336, class185.field2341, class185.field2337, class185.field2331, class185.field2335, class185.field2340}; } - @ObfuscatedName("s") + @ObfuscatedName("ge") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "896810620" + signature = "(B)Z", + garbageValue = "-90" ) - public static void method2038() { - ItemDefinition.ItemDefinition_cached.clear(); - ItemDefinition.ItemDefinition_cachedModels.clear(); - ItemDefinition.ItemDefinition_cachedSprites.clear(); + static boolean method1920() { + return (Client.drawPlayerNames & 2) != 0; } } diff --git a/runescape-client/src/main/java/FriendsList.java b/runescape-client/src/main/java/FriendsList.java index c68601b6b6..ead290bce8 100644 --- a/runescape-client/src/main/java/FriendsList.java +++ b/runescape-client/src/main/java/FriendsList.java @@ -1,3 +1,4 @@ +import java.awt.Image; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; @@ -7,58 +8,60 @@ import net.runelite.mapping.ObfuscatedSignature; @ObfuscatedName("jh") @Implements("FriendsList") public class FriendsList extends UserList { - @ObfuscatedName("n") + @ObfuscatedName("aa") + static Image field3623; + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Lln;" + signature = "Llg;" ) @Export("loginType") final LoginType loginType; - @ObfuscatedName("d") + @ObfuscatedName("i") @ObfuscatedGetter( - intValue = 823977789 + intValue = -273540175 ) - int field3603; - @ObfuscatedName("m") + int field3621; + @ObfuscatedName("k") @ObfuscatedSignature( - signature = "Lja;" + signature = "Ljj;" ) @Export("friendLoginUpdates") public LinkDeque friendLoginUpdates; @ObfuscatedSignature( - signature = "(Lln;)V" + signature = "(Llg;)V" ) public FriendsList(LoginType var1) { super(400); - this.field3603 = 1; + this.field3621 = 1; this.friendLoginUpdates = new LinkDeque(); this.loginType = var1; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(I)Ljg;", - garbageValue = "-706396611" + signature = "(I)Ljr;", + garbageValue = "-1592540968" ) @Export("newInstance") User newInstance() { return new Friend(); } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(II)[Ljg;", - garbageValue = "1510983955" + signature = "(IB)[Ljr;", + garbageValue = "-122" ) @Export("newTypedArray") User[] newTypedArray(int var1) { return new Friend[var1]; } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Lju;ZI)Z", - garbageValue = "-163065823" + signature = "(Ljb;ZI)Z", + garbageValue = "-331352727" ) @Export("isFriended") public boolean isFriended(Username var1, boolean var2) { @@ -70,10 +73,10 @@ public class FriendsList extends UserList { } } - @ObfuscatedName("cw") + @ObfuscatedName("o") @ObfuscatedSignature( - signature = "(Lkc;II)V", - garbageValue = "1371210383" + signature = "(Lkg;IB)V", + garbageValue = "78" ) @Export("read") public void read(Buffer var1, int var2) { @@ -98,7 +101,7 @@ public class FriendsList extends UserList { Friend var11 = (Friend)this.getByCurrentUsername(var4); if (var3) { Friend var12 = (Friend)this.getByCurrentUsername(var5); - if (var12 != null && var11 != var12) { + if (var12 != null && var12 != var11) { if (var11 != null) { this.remove(var12); } else { @@ -137,17 +140,17 @@ public class FriendsList extends UserList { } if (var6 != var11.world) { - var11.int2 = ++this.field3603 - 1; + var11.int2 = ++this.field3621 - 1; if (var11.world == -1 && var6 == 0) { - var11.int2 = -(var11.int2 * 357239599) * 1797004239; + var11.int2 = -(var11.int2 * -460007471) * 1502929201; } var11.world = var6; } var11.rank = var7; - var11.field3613 = var9; - var11.field3611 = var10; + var11.field3629 = var9; + var11.field3630 = var10; continue; } @@ -158,18 +161,4 @@ public class FriendsList extends UserList { return; } } - - @ObfuscatedName("t") - @ObfuscatedSignature( - signature = "(Llr;III)I", - garbageValue = "2102175416" - ) - static int method5306(IterableNodeHashTable var0, int var1, int var2) { - if (var0 == null) { - return var2; - } else { - IntegerNode var3 = (IntegerNode)var0.get((long)var1); - return var3 == null ? var2 : var3.integer; - } - } } diff --git a/runescape-client/src/main/java/GZipDecompressor.java b/runescape-client/src/main/java/GZipDecompressor.java index 9cc91785eb..fcbae70418 100644 --- a/runescape-client/src/main/java/GZipDecompressor.java +++ b/runescape-client/src/main/java/GZipDecompressor.java @@ -1,17 +1,13 @@ -import java.security.SecureRandom; import java.util.zip.Inflater; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("lj") +@ObfuscatedName("lk") @Implements("GZipDecompressor") public class GZipDecompressor { - @ObfuscatedName("eo") - @Export("secureRandom") - static SecureRandom secureRandom; - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("inflater") Inflater inflater; @@ -26,10 +22,10 @@ public class GZipDecompressor { this(-1, 1000000, 1000000); } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Lkc;[BI)V", - garbageValue = "924316150" + signature = "(Lkg;[BI)V", + garbageValue = "1447004496" ) @Export("decompress") public void decompress(Buffer var1, byte[] var2) { diff --git a/runescape-client/src/main/java/GameObject.java b/runescape-client/src/main/java/GameObject.java index daf08cf491..d1f403ee4b 100644 --- a/runescape-client/src/main/java/GameObject.java +++ b/runescape-client/src/main/java/GameObject.java @@ -4,89 +4,100 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ex") +@ObfuscatedName("eh") @Implements("GameObject") public final class GameObject { - @ObfuscatedName("a") + @ObfuscatedName("qf") @ObfuscatedGetter( - intValue = -1950933673 + intValue = -1623440827 + ) + static int field1933; + @ObfuscatedName("hl") + @ObfuscatedGetter( + intValue = 143211467 + ) + @Export("cameraY") + static int cameraY; + @ObfuscatedName("u") + @ObfuscatedGetter( + intValue = 602271545 ) @Export("plane") int plane; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = -1570818829 + intValue = 996548305 ) @Export("height") int height; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = -1477915037 + intValue = -28565159 ) @Export("centerX") int centerX; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = 1448814329 + intValue = -213801155 ) @Export("centerY") int centerY; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "Lep;" + signature = "Lee;" ) @Export("entity") public Entity entity; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = -1886669661 + intValue = -1884988183 ) @Export("orientation") int orientation; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedGetter( - intValue = -564679873 + intValue = -422485367 ) @Export("startX") int startX; - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedGetter( - intValue = -441030449 + intValue = 640777493 ) @Export("endX") int endX; - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedGetter( - intValue = -187063391 + intValue = -1986114597 ) @Export("startY") int startY; - @ObfuscatedName("d") + @ObfuscatedName("i") @ObfuscatedGetter( - intValue = -1484089673 + intValue = 1415770979 ) @Export("endY") int endY; - @ObfuscatedName("m") + @ObfuscatedName("k") @ObfuscatedGetter( - intValue = -875771859 + intValue = -2079543087 ) - int field1912; - @ObfuscatedName("p") + int field1925; + @ObfuscatedName("x") @ObfuscatedGetter( - intValue = -1503559581 + intValue = -1243689435 ) @Export("lastDrawn") int lastDrawn; - @ObfuscatedName("h") + @ObfuscatedName("o") @ObfuscatedGetter( - longValue = -3849133574729992117L + longValue = 9016646142835721523L ) @Export("tag") public long tag; - @ObfuscatedName("k") + @ObfuscatedName("e") @ObfuscatedGetter( - intValue = 823124257 + intValue = -2013432545 ) @Export("flags") int flags; @@ -96,48 +107,110 @@ public final class GameObject { this.flags = 0; } - @ObfuscatedName("i") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Lhi;I[B[BB)V", - garbageValue = "-22" + signature = "(IILfg;Lfh;I)Z", + garbageValue = "-1345578739" ) - @Export("Widget_setKey") - static final void Widget_setKey(Widget var0, int var1, byte[] var2, byte[] var3) { - if (var0.field2623 == null) { - if (var2 == null) { - return; + static final boolean method3342(int var0, int var1, RouteStrategy var2, CollisionMap var3) { + int var4 = var0; + int var5 = var1; + byte var6 = 64; + byte var7 = 64; + int var8 = var0 - var6; + int var9 = var1 - var7; + class173.directions[var6][var7] = 99; + class173.distances[var6][var7] = 0; + byte var10 = 0; + int var11 = 0; + class173.bufferX[var10] = var0; + byte var10001 = var10; + int var18 = var10 + 1; + class173.bufferY[var10001] = var1; + int[][] var12 = var3.flags; + + while (var18 != var11) { + var4 = class173.bufferX[var11]; + var5 = class173.bufferY[var11]; + var11 = var11 + 1 & 4095; + int var16 = var4 - var8; + int var17 = var5 - var9; + int var13 = var4 - var3.xInset; + int var14 = var5 - var3.yInset; + if (var2.hasArrived(2, var4, var5, var3)) { + class173.field2103 = var4; + class173.field2100 = var5; + return true; } - var0.field2623 = new byte[11][]; - var0.field2624 = new byte[11][]; - var0.field2628 = new int[11]; - var0.field2626 = new int[11]; - } + int var15 = class173.distances[var16][var17] + 1; + if (var16 > 0 && class173.directions[var16 - 1][var17] == 0 && (var12[var13 - 1][var14] & 19136782) == 0 && (var12[var13 - 1][var14 + 1] & 19136824) == 0) { + class173.bufferX[var18] = var4 - 1; + class173.bufferY[var18] = var5; + var18 = var18 + 1 & 4095; + class173.directions[var16 - 1][var17] = 2; + class173.distances[var16 - 1][var17] = var15; + } - var0.field2623[var1] = var2; - if (var2 != null) { - var0.field2606 = true; - } else { - var0.field2606 = false; + if (var16 < 126 && class173.directions[var16 + 1][var17] == 0 && (var12[var13 + 2][var14] & 19136899) == 0 && (var12[var13 + 2][var14 + 1] & 19136992) == 0) { + class173.bufferX[var18] = var4 + 1; + class173.bufferY[var18] = var5; + var18 = var18 + 1 & 4095; + class173.directions[var16 + 1][var17] = 8; + class173.distances[var16 + 1][var17] = var15; + } - for (int var4 = 0; var4 < var0.field2623.length; ++var4) { - if (var0.field2623[var4] != null) { - var0.field2606 = true; - break; - } + if (var17 > 0 && class173.directions[var16][var17 - 1] == 0 && (var12[var13][var14 - 1] & 19136782) == 0 && (var12[var13 + 1][var14 - 1] & 19136899) == 0) { + class173.bufferX[var18] = var4; + class173.bufferY[var18] = var5 - 1; + var18 = var18 + 1 & 4095; + class173.directions[var16][var17 - 1] = 1; + class173.distances[var16][var17 - 1] = var15; + } + + if (var17 < 126 && class173.directions[var16][var17 + 1] == 0 && (var12[var13][var14 + 2] & 19136824) == 0 && (var12[var13 + 1][var14 + 2] & 19136992) == 0) { + class173.bufferX[var18] = var4; + class173.bufferY[var18] = var5 + 1; + var18 = var18 + 1 & 4095; + class173.directions[var16][var17 + 1] = 4; + class173.distances[var16][var17 + 1] = var15; + } + + if (var16 > 0 && var17 > 0 && class173.directions[var16 - 1][var17 - 1] == 0 && (var12[var13 - 1][var14] & 19136830) == 0 && (var12[var13 - 1][var14 - 1] & 19136782) == 0 && (var12[var13][var14 - 1] & 19136911) == 0) { + class173.bufferX[var18] = var4 - 1; + class173.bufferY[var18] = var5 - 1; + var18 = var18 + 1 & 4095; + class173.directions[var16 - 1][var17 - 1] = 3; + class173.distances[var16 - 1][var17 - 1] = var15; + } + + if (var16 < 126 && var17 > 0 && class173.directions[var16 + 1][var17 - 1] == 0 && (var12[var13 + 1][var14 - 1] & 19136911) == 0 && (var12[var13 + 2][var14 - 1] & 19136899) == 0 && (var12[var13 + 2][var14] & 19136995) == 0) { + class173.bufferX[var18] = var4 + 1; + class173.bufferY[var18] = var5 - 1; + var18 = var18 + 1 & 4095; + class173.directions[var16 + 1][var17 - 1] = 9; + class173.distances[var16 + 1][var17 - 1] = var15; + } + + if (var16 > 0 && var17 < 126 && class173.directions[var16 - 1][var17 + 1] == 0 && (var12[var13 - 1][var14 + 1] & 19136830) == 0 && (var12[var13 - 1][var14 + 2] & 19136824) == 0 && (var12[var13][var14 + 2] & 19137016) == 0) { + class173.bufferX[var18] = var4 - 1; + class173.bufferY[var18] = var5 + 1; + var18 = var18 + 1 & 4095; + class173.directions[var16 - 1][var17 + 1] = 6; + class173.distances[var16 - 1][var17 + 1] = var15; + } + + if (var16 < 126 && var17 < 126 && class173.directions[var16 + 1][var17 + 1] == 0 && (var12[var13 + 1][var14 + 2] & 19137016) == 0 && (var12[var13 + 2][var14 + 2] & 19136992) == 0 && (var12[var13 + 2][var14 + 1] & 19136995) == 0) { + class173.bufferX[var18] = var4 + 1; + class173.bufferY[var18] = var5 + 1; + var18 = var18 + 1 & 4095; + class173.directions[var16 + 1][var17 + 1] = 12; + class173.distances[var16 + 1][var17 + 1] = var15; } } - var0.field2624[var1] = var3; - } - - @ObfuscatedName("ii") - @ObfuscatedSignature( - signature = "(Ljava/lang/String;Ljava/lang/String;IIIIB)V", - garbageValue = "-59" - ) - @Export("insertMenuItemNoShift") - public static final void insertMenuItemNoShift(String var0, String var1, int var2, int var3, int var4, int var5) { - ArchiveDiskAction.insertMenuItem(var0, var1, var2, var3, var4, var5, false); + class173.field2103 = var4; + class173.field2100 = var5; + return false; } } diff --git a/runescape-client/src/main/java/GameShell.java b/runescape-client/src/main/java/GameShell.java index 660970500c..6ab504b2e9 100644 --- a/runescape-client/src/main/java/GameShell.java +++ b/runescape-client/src/main/java/GameShell.java @@ -25,164 +25,167 @@ import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("bg") +@ObfuscatedName("bo") @Implements("GameShell") public abstract class GameShell extends Applet implements Runnable, FocusListener, WindowListener { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lff;" + signature = "Lfu;" ) @Export("taskHandler") protected static TaskHandler taskHandler; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lbg;" + signature = "Lbo;" ) @Export("gameShell") static GameShell gameShell; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = -1568380543 + intValue = -1923689957 ) @Export("GameShell_redundantStartThreadCount") static int GameShell_redundantStartThreadCount; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - longValue = -3934802970152503561L + longValue = -711950158356493609L ) @Export("stopTimeMs") static long stopTimeMs; - @ObfuscatedName("v") + @ObfuscatedName("z") @Export("isKilled") static boolean isKilled; - @ObfuscatedName("o") + @ObfuscatedName("h") @ObfuscatedGetter( - intValue = -1371255407 + intValue = 844501225 + ) + @Export("gameCyclesToDo") + protected static int gameCyclesToDo; + @ObfuscatedName("i") + @ObfuscatedGetter( + intValue = -1954278037 ) @Export("cycleDurationMillis") static int cycleDurationMillis; - @ObfuscatedName("i") + @ObfuscatedName("k") @ObfuscatedGetter( - intValue = 1482162353 + intValue = 814037945 ) @Export("fiveOrOne") static int fiveOrOne; - @ObfuscatedName("d") + @ObfuscatedName("o") @ObfuscatedGetter( - intValue = 808514129 + intValue = 526235567 ) @Export("fps") protected static int fps; - @ObfuscatedName("m") - @ObfuscatedSignature( - signature = "Lfk;" - ) - @Export("clock") - static Clock clock; - @ObfuscatedName("h") + @ObfuscatedName("r") @Export("graphicsTickTimes") - static long[] graphicsTickTimes; - @ObfuscatedName("j") + protected static long[] graphicsTickTimes; + @ObfuscatedName("a") @Export("clientTickTimes") - static long[] clientTickTimes; + protected static long[] clientTickTimes; + @ObfuscatedName("ai") + @Export("fontHelvetica13") + static java.awt.Font fontHelvetica13; @ObfuscatedName("ab") @ObfuscatedGetter( - intValue = 1342168007 + intValue = -150498005 ) - static int field442; - @ObfuscatedName("af") + static int field459; + @ObfuscatedName("ap") @Export("volatileFocus") static volatile boolean volatileFocus; - @ObfuscatedName("ao") + @ObfuscatedName("ay") @ObfuscatedGetter( - longValue = -177025641845415175L + longValue = 7372771313492696971L ) @Export("garbageCollectorLastCollectionTime") static long garbageCollectorLastCollectionTime; - @ObfuscatedName("ai") + @ObfuscatedName("ax") @ObfuscatedGetter( - longValue = -5558564081282193119L + longValue = 6756916101787281109L ) @Export("garbageCollectorLastCheckTimeMs") static long garbageCollectorLastCheckTimeMs; - @ObfuscatedName("l") + @ObfuscatedName("p") @Export("hasErrored") boolean hasErrored; - @ObfuscatedName("e") + @ObfuscatedName("s") @ObfuscatedGetter( - intValue = -204703651 + intValue = -547568387 ) @Export("contentWidth") protected int contentWidth; - @ObfuscatedName("s") + @ObfuscatedName("t") @ObfuscatedGetter( - intValue = 392229745 + intValue = 683939377 ) @Export("contentHeight") protected int contentHeight; - @ObfuscatedName("b") + @ObfuscatedName("m") @ObfuscatedGetter( - intValue = -1066655429 + intValue = 719542385 ) @Export("canvasX") int canvasX; - @ObfuscatedName("z") + @ObfuscatedName("v") @ObfuscatedGetter( - intValue = 1472937073 + intValue = -1012759109 ) @Export("canvasY") int canvasY; - @ObfuscatedName("u") + @ObfuscatedName("j") @ObfuscatedGetter( - intValue = 656950483 + intValue = -1249070367 ) - int field435; - @ObfuscatedName("aa") + int field442; + @ObfuscatedName("af") @ObfuscatedGetter( - intValue = 144301553 + intValue = 1228347859 ) - int field419; - @ObfuscatedName("aw") + int field455; + @ObfuscatedName("ad") @ObfuscatedGetter( - intValue = 1666707357 + intValue = 895763941 ) @Export("maxCanvasWidth") int maxCanvasWidth; - @ObfuscatedName("ar") + @ObfuscatedName("am") @ObfuscatedGetter( - intValue = -298093883 + intValue = 1882164127 ) @Export("maxCanvasHeight") int maxCanvasHeight; - @ObfuscatedName("ag") + @ObfuscatedName("ao") @Export("frame") Frame frame; - @ObfuscatedName("ak") + @ObfuscatedName("aw") @Export("canvas") java.awt.Canvas canvas; - @ObfuscatedName("av") - volatile boolean field441; - @ObfuscatedName("ax") + @ObfuscatedName("ak") + volatile boolean field451; + @ObfuscatedName("ar") @Export("resizeCanvasNextFrame") boolean resizeCanvasNextFrame; - @ObfuscatedName("al") + @ObfuscatedName("av") @Export("isCanvasInvalid") volatile boolean isCanvasInvalid; - @ObfuscatedName("ap") + @ObfuscatedName("aq") @ObfuscatedGetter( - longValue = 1167951270454872895L + longValue = -6875842226424781075L ) - volatile long field445; - @ObfuscatedName("au") + volatile long field463; + @ObfuscatedName("at") @ObfuscatedSignature( - signature = "Laf;" + signature = "Lap;" ) @Export("mouseWheelHandler") MouseWheelHandler mouseWheelHandler; - @ObfuscatedName("ah") + @ObfuscatedName("ae") @Export("clipboard") Clipboard clipboard; - @ObfuscatedName("an") + @ObfuscatedName("aj") @Export("eventQueue") final EventQueue eventQueue; @@ -196,7 +199,7 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene fps = 0; graphicsTickTimes = new long[32]; clientTickTimes = new long[32]; - field442 = 500; + field459 = 500; volatileFocus = true; garbageCollectorLastCollectionTime = -1L; garbageCollectorLastCheckTimeMs = -1L; @@ -206,10 +209,10 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene this.hasErrored = false; this.canvasX = 0; this.canvasY = 0; - this.field441 = true; + this.field451 = true; this.resizeCanvasNextFrame = false; this.isCanvasInvalid = false; - this.field445 = 0L; + this.field463 = 0L; EventQueue var1 = null; try { @@ -218,34 +221,37 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene } this.eventQueue = var1; - class297.method5550(new DevicePcmPlayerProvider()); + WorldMapLabel.method433(new DevicePcmPlayerProvider()); } - @ObfuscatedName("c") + @ObfuscatedName("p") @ObfuscatedSignature( signature = "(III)V", - garbageValue = "-2135691733" + garbageValue = "744575449" ) @Export("setMaxCanvasSize") protected final void setMaxCanvasSize(int var1, int var2) { if (this.maxCanvasWidth != var1 || var2 != this.maxCanvasHeight) { - this.method1012(); + this.method947(); } this.maxCanvasWidth = var1; this.maxCanvasHeight = var2; } - @ObfuscatedName("o") + @ObfuscatedName("h") @ObfuscatedSignature( signature = "(Ljava/lang/Object;I)V", - garbageValue = "1374052820" + garbageValue = "-391960941" ) @Export("post") final void post(Object var1) { if (this.eventQueue != null) { for (int var2 = 0; var2 < 50 && this.eventQueue.peekEvent() != null; ++var2) { - ClanChat.method5367(1L); + try { + Thread.sleep(1L); + } catch (InterruptedException var4) { + } } if (var1 != null) { @@ -255,10 +261,10 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene } } - @ObfuscatedName("i") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "(I)Lfl;", - garbageValue = "304684246" + signature = "(I)Lfk;", + garbageValue = "-1514990609" ) @Export("mouseWheel") protected MouseWheel mouseWheel() { @@ -270,65 +276,59 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene return this.mouseWheelHandler; } - @ObfuscatedName("d") + @ObfuscatedName("w") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "-1135938442" + garbageValue = "1232345027" ) @Export("setUpClipboard") protected void setUpClipboard() { this.clipboard = this.getToolkit().getSystemClipboard(); } - @ObfuscatedName("m") + @ObfuscatedName("i") @ObfuscatedSignature( - signature = "(Ljava/lang/String;B)V", - garbageValue = "18" + signature = "(Ljava/lang/String;I)V", + garbageValue = "724915000" ) @Export("clipboardSetString") protected void clipboardSetString(String var1) { this.clipboard.setContents(new StringSelection(var1), (ClipboardOwner)null); } - @ObfuscatedName("p") + @ObfuscatedName("k") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "-36" + signature = "(I)V", + garbageValue = "2141966350" ) @Export("setUpKeyboard") protected final void setUpKeyboard() { - GrandExchangeEvents.method110(); - java.awt.Canvas var1 = this.canvas; - var1.setFocusTraversalKeysEnabled(false); - var1.addKeyListener(KeyHandler.KeyHandler_instance); - var1.addFocusListener(KeyHandler.KeyHandler_instance); + GrandExchangeOfferNameComparator.method153(); + class14.method178(this.canvas); } - @ObfuscatedName("h") + @ObfuscatedName("x") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "-878530927" + signature = "(B)V", + garbageValue = "-47" ) @Export("setUpMouse") protected final void setUpMouse() { - java.awt.Canvas var1 = this.canvas; - var1.addMouseListener(MouseHandler.MouseHandler_instance); - var1.addMouseMotionListener(MouseHandler.MouseHandler_instance); - var1.addFocusListener(MouseHandler.MouseHandler_instance); + VarcInt.method4484(this.canvas); } - @ObfuscatedName("k") + @ObfuscatedName("o") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "-31" + signature = "(I)V", + garbageValue = "-1570451977" ) @Export("resizeCanvas") final void resizeCanvas() { Container var1 = this.container(); if (var1 != null) { Bounds var2 = this.getFrameContentBounds(); - this.contentWidth = Math.max(var2.highX, this.field435); - this.contentHeight = Math.max(var2.highY, this.field419); + this.contentWidth = Math.max(var2.highX, this.field442); + this.contentHeight = Math.max(var2.highY, this.field455); if (this.contentWidth <= 0) { this.contentWidth = 1; } @@ -337,12 +337,12 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene this.contentHeight = 1; } - class286.canvasWidth = Math.min(this.contentWidth, this.maxCanvasWidth); - FloorUnderlayDefinition.canvasHeight = Math.min(this.contentHeight, this.maxCanvasHeight); - this.canvasX = (this.contentWidth - class286.canvasWidth) / 2; + BoundaryObject.canvasWidth = Math.min(this.contentWidth, this.maxCanvasWidth); + WorldMapCacheName.canvasHeight = Math.min(this.contentHeight, this.maxCanvasHeight); + this.canvasX = (this.contentWidth - BoundaryObject.canvasWidth) / 2; this.canvasY = 0; - this.canvas.setSize(class286.canvasWidth, FloorUnderlayDefinition.canvasHeight); - AbstractWorldMapData.rasterProvider = new RasterProvider(class286.canvasWidth, FloorUnderlayDefinition.canvasHeight, this.canvas); + this.canvas.setSize(BoundaryObject.canvasWidth, WorldMapCacheName.canvasHeight); + DirectByteArrayCopier.rasterProvider = new RasterProvider(BoundaryObject.canvasWidth, WorldMapCacheName.canvasHeight, this.canvas); if (var1 == this.frame) { Insets var3 = this.frame.getInsets(); this.canvas.setLocation(this.canvasX + var3.left, this.canvasY + var3.top); @@ -350,30 +350,30 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene this.canvas.setLocation(this.canvasX, this.canvasY); } - this.field441 = true; + this.field451 = true; this.resizeGame(); } } - @ObfuscatedName("x") + @ObfuscatedName("e") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "2060332880" + garbageValue = "-1452127908" ) @Export("resizeGame") protected abstract void resizeGame(); - @ObfuscatedName("j") + @ObfuscatedName("n") @ObfuscatedSignature( signature = "(B)V", - garbageValue = "-77" + garbageValue = "14" ) @Export("clearBackground") void clearBackground() { int var1 = this.canvasX; int var2 = this.canvasY; - int var3 = this.contentWidth - class286.canvasWidth - var1; - int var4 = this.contentHeight - FloorUnderlayDefinition.canvasHeight - var2; + int var3 = this.contentWidth - BoundaryObject.canvasWidth - var1; + int var4 = this.contentHeight - WorldMapCacheName.canvasHeight - var2; if (var1 > 0 || var3 > 0 || var2 > 0 || var4 > 0) { try { Container var5 = this.container(); @@ -408,42 +408,37 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene } - @ObfuscatedName("r") + @ObfuscatedName("c") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "1138022384" + garbageValue = "-1864925789" ) @Export("replaceCanvas") final void replaceCanvas() { + GrandExchangeOffer.method129(this.canvas); java.awt.Canvas var1 = this.canvas; - var1.removeKeyListener(KeyHandler.KeyHandler_instance); - var1.removeFocusListener(KeyHandler.KeyHandler_instance); - KeyHandler.field380 = -1; - KeyHandler.method914(this.canvas); + var1.removeMouseListener(MouseHandler.MouseHandler_instance); + var1.removeMouseMotionListener(MouseHandler.MouseHandler_instance); + var1.removeFocusListener(MouseHandler.MouseHandler_instance); + MouseHandler.MouseHandler_currentButtonVolatile = 0; if (this.mouseWheelHandler != null) { this.mouseWheelHandler.removeFrom(this.canvas); } this.addCanvas(); - java.awt.Canvas var2 = this.canvas; - var2.setFocusTraversalKeysEnabled(false); - var2.addKeyListener(KeyHandler.KeyHandler_instance); - var2.addFocusListener(KeyHandler.KeyHandler_instance); - java.awt.Canvas var3 = this.canvas; - var3.addMouseListener(MouseHandler.MouseHandler_instance); - var3.addMouseMotionListener(MouseHandler.MouseHandler_instance); - var3.addFocusListener(MouseHandler.MouseHandler_instance); + class14.method178(this.canvas); + VarcInt.method4484(this.canvas); if (this.mouseWheelHandler != null) { this.mouseWheelHandler.addTo(this.canvas); } - this.method1012(); + this.method947(); } - @ObfuscatedName("e") + @ObfuscatedName("s") @ObfuscatedSignature( signature = "(IIIB)V", - garbageValue = "-122" + garbageValue = "-97" ) @Export("startThread") protected final void startThread(int var1, int var2, int var3) { @@ -460,8 +455,8 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene } gameShell = this; - class286.canvasWidth = var1; - FloorUnderlayDefinition.canvasHeight = var2; + BoundaryObject.canvasWidth = var1; + WorldMapCacheName.canvasHeight = var2; RunException.RunException_revision = var3; RunException.RunException_applet = this; if (taskHandler == null) { @@ -470,16 +465,16 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene taskHandler.newThreadTask(this, 1); } catch (Exception var5) { - User.RunException_sendStackTrace((String)null, var5); + Calendar.RunException_sendStackTrace((String)null, var5); this.error("crash"); } } - @ObfuscatedName("ag") + @ObfuscatedName("t") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "-1386190897" + garbageValue = "-1777926819" ) @Export("addCanvas") final synchronized void addCanvas() { @@ -489,47 +484,47 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene var1.remove(this.canvas); } - class286.canvasWidth = Math.max(var1.getWidth(), this.field435); - FloorUnderlayDefinition.canvasHeight = Math.max(var1.getHeight(), this.field419); + BoundaryObject.canvasWidth = Math.max(var1.getWidth(), this.field442); + WorldMapCacheName.canvasHeight = Math.max(var1.getHeight(), this.field455); Insets var2; if (this.frame != null) { var2 = this.frame.getInsets(); - class286.canvasWidth -= var2.left + var2.right; - FloorUnderlayDefinition.canvasHeight -= var2.top + var2.bottom; + BoundaryObject.canvasWidth -= var2.right + var2.left; + WorldMapCacheName.canvasHeight -= var2.top + var2.bottom; } this.canvas = new Canvas(this); var1.setBackground(Color.BLACK); var1.setLayout((LayoutManager)null); var1.add(this.canvas); - this.canvas.setSize(class286.canvasWidth, FloorUnderlayDefinition.canvasHeight); + this.canvas.setSize(BoundaryObject.canvasWidth, WorldMapCacheName.canvasHeight); this.canvas.setVisible(true); this.canvas.setBackground(Color.BLACK); if (var1 == this.frame) { var2 = this.frame.getInsets(); - this.canvas.setLocation(var2.left + this.canvasX, var2.top + this.canvasY); + this.canvas.setLocation(this.canvasX + var2.left, var2.top + this.canvasY); } else { this.canvas.setLocation(this.canvasX, this.canvasY); } this.canvas.addFocusListener(this); this.canvas.requestFocus(); - this.field441 = true; - if (AbstractWorldMapData.rasterProvider != null && class286.canvasWidth == AbstractWorldMapData.rasterProvider.width && FloorUnderlayDefinition.canvasHeight == AbstractWorldMapData.rasterProvider.height) { - ((RasterProvider)AbstractWorldMapData.rasterProvider).setComponent(this.canvas); - AbstractWorldMapData.rasterProvider.drawFull(0, 0); + this.field451 = true; + if (DirectByteArrayCopier.rasterProvider != null && BoundaryObject.canvasWidth == DirectByteArrayCopier.rasterProvider.width && WorldMapCacheName.canvasHeight == DirectByteArrayCopier.rasterProvider.height) { + ((RasterProvider)DirectByteArrayCopier.rasterProvider).setComponent(this.canvas); + DirectByteArrayCopier.rasterProvider.drawFull(0, 0); } else { - AbstractWorldMapData.rasterProvider = new RasterProvider(class286.canvasWidth, FloorUnderlayDefinition.canvasHeight, this.canvas); + DirectByteArrayCopier.rasterProvider = new RasterProvider(BoundaryObject.canvasWidth, WorldMapCacheName.canvasHeight, this.canvas); } this.isCanvasInvalid = false; - this.field445 = PlayerAppearance.currentTimeMillis(); + this.field463 = TaskHandler.currentTimeMillis(); } - @ObfuscatedName("ak") + @ObfuscatedName("m") @ObfuscatedSignature( signature = "(I)Z", - garbageValue = "927173753" + garbageValue = "1146937119" ) @Export("checkHost") protected final boolean checkHost() { @@ -558,52 +553,52 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene } } - @ObfuscatedName("av") + @ObfuscatedName("v") @ObfuscatedSignature( signature = "(B)V", - garbageValue = "0" + garbageValue = "22" ) @Export("clientTick") void clientTick() { - long var1 = PlayerAppearance.currentTimeMillis(); - long var3 = clientTickTimes[class49.clientTickTimeIdx]; - clientTickTimes[class49.clientTickTimeIdx] = var1; - class49.clientTickTimeIdx = class49.clientTickTimeIdx + 1 & 31; - if (0L != var3 && var1 > var3) { + long var1 = TaskHandler.currentTimeMillis(); + long var3 = clientTickTimes[WorldMapSection2.clientTickTimeIdx]; + clientTickTimes[WorldMapSection2.clientTickTimeIdx] = var1; + WorldMapSection2.clientTickTimeIdx = WorldMapSection2.clientTickTimeIdx + 1 & 31; + if (var3 != 0L && var1 > var3) { } synchronized(this) { - class30.hasFocus = volatileFocus; + TextureProvider.hasFocus = volatileFocus; } this.doCycle(); } - @ObfuscatedName("am") + @ObfuscatedName("q") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "4" + signature = "(I)V", + garbageValue = "1595065586" ) @Export("graphicsTick") void graphicsTick() { Container var1 = this.container(); - long var2 = PlayerAppearance.currentTimeMillis(); - long var4 = graphicsTickTimes[Messages.graphicsTickTimeIdx]; - graphicsTickTimes[Messages.graphicsTickTimeIdx] = var2; - Messages.graphicsTickTimeIdx = Messages.graphicsTickTimeIdx + 1 & 31; + long var2 = TaskHandler.currentTimeMillis(); + long var4 = graphicsTickTimes[Coord.graphicsTickTimeIdx]; + graphicsTickTimes[Coord.graphicsTickTimeIdx] = var2; + Coord.graphicsTickTimeIdx = Coord.graphicsTickTimeIdx + 1 & 31; if (0L != var4 && var2 > var4) { int var6 = (int)(var2 - var4); fps = ((var6 >> 1) + 32000) / var6; } - if (++field442 - 1 > 50) { - field442 -= 50; - this.field441 = true; - this.canvas.setSize(class286.canvasWidth, FloorUnderlayDefinition.canvasHeight); + if (++field459 - 1 > 50) { + field459 -= 50; + this.field451 = true; + this.canvas.setSize(BoundaryObject.canvasWidth, WorldMapCacheName.canvasHeight); this.canvas.setVisible(true); if (var1 == this.frame) { Insets var7 = this.frame.getInsets(); - this.canvas.setLocation(this.canvasX + var7.left, this.canvasY + var7.top); + this.canvas.setLocation(var7.left + this.canvasX, this.canvasY + var7.top); } else { this.canvas.setLocation(this.canvasX, this.canvasY); } @@ -613,21 +608,21 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene this.replaceCanvas(); } - this.method1011(); - this.draw(this.field441); - if (this.field441) { + this.method946(); + this.draw(this.field451); + if (this.field451) { this.clearBackground(); } - this.field441 = false; + this.field451 = false; } - @ObfuscatedName("ab") + @ObfuscatedName("l") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "-2098606310" + garbageValue = "1393805519" ) - final void method1011() { + final void method946() { Bounds var1 = this.getFrameContentBounds(); if (var1.highX != this.contentWidth || this.contentHeight != var1.highY || this.resizeCanvasNextFrame) { this.resizeCanvas(); @@ -636,19 +631,19 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene } - @ObfuscatedName("ax") + @ObfuscatedName("aw") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "65535" + garbageValue = "-1945680127" ) - final void method1012() { + final void method947() { this.resizeCanvasNextFrame = true; } - @ObfuscatedName("al") + @ObfuscatedName("ak") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "26" + signature = "(I)V", + garbageValue = "887145603" ) @Export("kill") final synchronized void kill() { @@ -679,91 +674,91 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene } } - this.vmethod1393(); + this.vmethod1301(); } } - @ObfuscatedName("aj") + @ObfuscatedName("aa") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "-1799342365" + signature = "(B)V", + garbageValue = "81" ) @Export("setUp") protected abstract void setUp(); - @ObfuscatedName("ae") + @ObfuscatedName("ab") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "-127" + signature = "(I)V", + garbageValue = "776219916" ) @Export("doCycle") protected abstract void doCycle(); - @ObfuscatedName("au") + @ObfuscatedName("ar") @ObfuscatedSignature( - signature = "(ZI)V", - garbageValue = "-1361952953" + signature = "(ZB)V", + garbageValue = "-24" ) @Export("draw") protected abstract void draw(boolean var1); - @ObfuscatedName("ah") + @ObfuscatedName("av") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "-1838623985" + signature = "(B)V", + garbageValue = "-105" ) @Export("kill0") protected abstract void kill0(); - @ObfuscatedName("an") + @ObfuscatedName("aq") @ObfuscatedSignature( signature = "(ILjava/lang/String;ZB)V", - garbageValue = "74" + garbageValue = "0" ) @Export("drawInitial") protected final void drawInitial(int var1, String var2, boolean var3) { try { Graphics var4 = this.canvas.getGraphics(); - if (GrandExchangeOffer.fontHelvetica13 == null) { - GrandExchangeOffer.fontHelvetica13 = new java.awt.Font("Helvetica", 1, 13); - class30.loginScreenFontMetrics = this.canvas.getFontMetrics(GrandExchangeOffer.fontHelvetica13); + if (fontHelvetica13 == null) { + fontHelvetica13 = new java.awt.Font("Helvetica", 1, 13); + class51.loginScreenFontMetrics = this.canvas.getFontMetrics(fontHelvetica13); } if (var3) { var4.setColor(Color.black); - var4.fillRect(0, 0, class286.canvasWidth, FloorUnderlayDefinition.canvasHeight); + var4.fillRect(0, 0, BoundaryObject.canvasWidth, WorldMapCacheName.canvasHeight); } Color var5 = new Color(140, 17, 17); try { - if (World.field996 == null) { - World.field996 = this.canvas.createImage(304, 34); + if (FriendsList.field3623 == null) { + FriendsList.field3623 = this.canvas.createImage(304, 34); } - Graphics var6 = World.field996.getGraphics(); + Graphics var6 = FriendsList.field3623.getGraphics(); var6.setColor(var5); var6.drawRect(0, 0, 303, 33); var6.fillRect(2, 2, var1 * 3, 30); var6.setColor(Color.black); var6.drawRect(1, 1, 301, 31); var6.fillRect(var1 * 3 + 2, 2, 300 - var1 * 3, 30); - var6.setFont(GrandExchangeOffer.fontHelvetica13); + var6.setFont(fontHelvetica13); var6.setColor(Color.white); - var6.drawString(var2, (304 - class30.loginScreenFontMetrics.stringWidth(var2)) / 2, 22); - var4.drawImage(World.field996, class286.canvasWidth / 2 - 152, FloorUnderlayDefinition.canvasHeight / 2 - 18, (ImageObserver)null); + var6.drawString(var2, (304 - class51.loginScreenFontMetrics.stringWidth(var2)) / 2, 22); + var4.drawImage(FriendsList.field3623, BoundaryObject.canvasWidth / 2 - 152, WorldMapCacheName.canvasHeight / 2 - 18, (ImageObserver)null); } catch (Exception var9) { - int var7 = class286.canvasWidth / 2 - 152; - int var8 = FloorUnderlayDefinition.canvasHeight / 2 - 18; + int var7 = BoundaryObject.canvasWidth / 2 - 152; + int var8 = WorldMapCacheName.canvasHeight / 2 - 18; var4.setColor(var5); var4.drawRect(var7, var8, 303, 33); var4.fillRect(var7 + 2, var8 + 2, var1 * 3, 30); var4.setColor(Color.black); var4.drawRect(var7 + 1, var8 + 1, 301, 31); - var4.fillRect(var1 * 3 + var7 + 2, var8 + 2, 300 - var1 * 3, 30); - var4.setFont(GrandExchangeOffer.fontHelvetica13); + var4.fillRect(var7 + var1 * 3 + 2, var8 + 2, 300 - var1 * 3, 30); + var4.setFont(fontHelvetica13); var4.setColor(Color.white); - var4.drawString(var2, var7 + (304 - class30.loginScreenFontMetrics.stringWidth(var2)) / 2, var8 + 22); + var4.drawString(var2, var7 + (304 - class51.loginScreenFontMetrics.stringWidth(var2)) / 2, var8 + 22); } } catch (Exception var10) { this.canvas.repaint(); @@ -771,21 +766,21 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene } - @ObfuscatedName("af") + @ObfuscatedName("ac") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "807770545" + garbageValue = "-1200081624" ) - protected final void method1029() { - World.field996 = null; - GrandExchangeOffer.fontHelvetica13 = null; - class30.loginScreenFontMetrics = null; + protected final void method991() { + FriendsList.field3623 = null; + fontHelvetica13 = null; + class51.loginScreenFontMetrics = null; } - @ObfuscatedName("ay") + @ObfuscatedName("az") @ObfuscatedSignature( signature = "(Ljava/lang/String;B)V", - garbageValue = "-32" + garbageValue = "18" ) @Export("error") protected void error(String var1) { @@ -801,66 +796,77 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene } } - @ObfuscatedName("az") + @ObfuscatedName("at") @ObfuscatedSignature( - signature = "(I)Ljava/awt/Container;", - garbageValue = "-1606453002" + signature = "(S)Ljava/awt/Container;", + garbageValue = "1024" ) @Export("container") Container container() { return (Container)(this.frame != null ? this.frame : this); } - @ObfuscatedName("ao") + @ObfuscatedName("ae") @ObfuscatedSignature( - signature = "(I)Lls;", - garbageValue = "-1228957997" + signature = "(B)Llw;", + garbageValue = "65" ) @Export("getFrameContentBounds") Bounds getFrameContentBounds() { Container var1 = this.container(); - int var2 = Math.max(var1.getWidth(), this.field435); - int var3 = Math.max(var1.getHeight(), this.field419); + int var2 = Math.max(var1.getWidth(), this.field442); + int var3 = Math.max(var1.getHeight(), this.field455); if (this.frame != null) { Insets var4 = this.frame.getInsets(); - var2 -= var4.left + var4.right; - var3 -= var4.top + var4.bottom; + var2 -= var4.right + var4.left; + var3 -= var4.bottom + var4.top; } return new Bounds(var2, var3); } - @ObfuscatedName("ai") + @ObfuscatedName("aj") @ObfuscatedSignature( - signature = "(B)Z", - garbageValue = "95" + signature = "(I)Z", + garbageValue = "-934815852" ) @Export("hasFrame") protected final boolean hasFrame() { return this.frame != null; } - @ObfuscatedName("at") + @ObfuscatedName("an") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "-22" + signature = "(I)V", + garbageValue = "-1314130629" ) - protected abstract void vmethod1393(); + protected abstract void vmethod1301(); public final void destroy() { if (this == gameShell && !isKilled) { - stopTimeMs = PlayerAppearance.currentTimeMillis(); - ClanChat.method5367(5000L); + stopTimeMs = TaskHandler.currentTimeMillis(); + long var1 = 4999L; + + try { + Thread.sleep(var1); + } catch (InterruptedException var5) { + } + + try { + Thread.sleep(1L); + } catch (InterruptedException var4) { + } + this.kill(); } } public final synchronized void paint(Graphics var1) { if (this == gameShell && !isKilled) { - this.field441 = true; - if (PlayerAppearance.currentTimeMillis() - this.field445 > 1000L) { + this.field451 = true; + if (TaskHandler.currentTimeMillis() - this.field463 > 1000L) { Rectangle var2 = var1.getClipBounds(); - if (var2 == null || var2.width >= class286.canvasWidth && var2.height >= FloorUnderlayDefinition.canvasHeight) { + if (var2 == null || var2.width >= BoundaryObject.canvasWidth && var2.height >= WorldMapCacheName.canvasHeight) { this.isCanvasInvalid = true; } } @@ -868,6 +874,12 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene } } + public final void windowClosing(WindowEvent var1) { + this.destroy(); + } + + public abstract void init(); + public void run() { try { if (TaskHandler.javaVendor != null) { @@ -881,11 +893,11 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene if (var2.startsWith("1.6.0_")) { int var3; - for (var3 = 6; var3 < var2.length() && ClientPacket.isDigit(var2.charAt(var3)); ++var3) { + for (var3 = 6; var3 < var2.length() && AbstractWorldMapData.isDigit(var2.charAt(var3)); ++var3) { } String var4 = var2.substring(6, var3); - if (AbstractWorldMapData.isNumber(var4) && ClientPreferences.parseInt(var4) < 10) { + if (Interpreter.isNumber(var4) && SoundCache.parseInt(var4) < 10) { this.error("wrongjava"); return; } @@ -906,12 +918,12 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene var8 = new MilliClock(); } - clock = (Clock)var8; + BuddyRankComparator.clock = (Clock)var8; - while (stopTimeMs == 0L || PlayerAppearance.currentTimeMillis() < stopTimeMs) { - ArchiveLoader.gameCyclesToDo = clock.wait(cycleDurationMillis, fiveOrOne); + while (0L == stopTimeMs || TaskHandler.currentTimeMillis() < stopTimeMs) { + gameCyclesToDo = BuddyRankComparator.clock.wait(cycleDurationMillis, fiveOrOne); - for (int var5 = 0; var5 < ArchiveLoader.gameCyclesToDo; ++var5) { + for (int var5 = 0; var5 < gameCyclesToDo; ++var5) { this.clientTick(); } @@ -919,7 +931,7 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene this.post(this.canvas); } } catch (Exception var7) { - User.RunException_sendStackTrace((String)null, var7); + Calendar.RunException_sendStackTrace((String)null, var7); this.error("crash"); } @@ -934,13 +946,12 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene public final void stop() { if (this == gameShell && !isKilled) { - stopTimeMs = PlayerAppearance.currentTimeMillis() + 4000L; + stopTimeMs = TaskHandler.currentTimeMillis() + 4000L; } } - public final void focusGained(FocusEvent var1) { - volatileFocus = true; - this.field441 = true; + public final void update(Graphics var1) { + this.paint(var1); } public final void focusLost(FocusEvent var1) { @@ -950,81 +961,111 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene public final void windowActivated(WindowEvent var1) { } + public final void windowClosed(WindowEvent var1) { + } + public final void windowDeiconified(WindowEvent var1) { } public final void windowIconified(WindowEvent var1) { } - public final void windowOpened(WindowEvent var1) { - } - - public abstract void init(); - - public final void windowClosed(WindowEvent var1) { - } - public final void windowDeactivated(WindowEvent var1) { } - public final void update(Graphics var1) { - this.paint(var1); + public final void windowOpened(WindowEvent var1) { } - public final void windowClosing(WindowEvent var1) { - this.destroy(); + public final void focusGained(FocusEvent var1) { + volatileFocus = true; + this.field451 = true; } - @ObfuscatedName("a") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "1395167338" + signature = "(ILci;ZB)I", + garbageValue = "8" ) - static void method1141() { - for (ObjectSound var0 = (ObjectSound)ObjectSound.objectSounds.last(); var0 != null; var0 = (ObjectSound)ObjectSound.objectSounds.previous()) { - if (var0.stream1 != null) { - FloorUnderlayDefinition.pcmStreamMixer.removeSubStream(var0.stream1); - var0.stream1 = null; - } - - if (var0.stream2 != null) { - FloorUnderlayDefinition.pcmStreamMixer.removeSubStream(var0.stream2); - var0.stream2 = null; - } - } - - ObjectSound.objectSounds.clear(); - } - - @ObfuscatedName("r") - @ObfuscatedSignature( - signature = "(ILcj;ZI)I", - garbageValue = "-459731769" - ) - static int method1142(int var0, Script var1, boolean var2) { - Widget var3; + static int method952(int var0, Script var1, boolean var2) { + int var3 = -1; + Widget var4; if (var0 >= 2000) { var0 -= 1000; - var3 = PacketBufferNode.getWidget(Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]); + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var4 = Language.getWidget(var3); } else { - var3 = var2 ? class96.field1301 : ReflectionCheck.field1310; + var4 = var2 ? Interpreter.field1090 : class188.field2352; } - if (var0 == ScriptOpcodes.CC_CALLONRESIZE) { - if (Interpreter.field1080 >= 10) { - throw new RuntimeException(); - } else if (var3.onResize == null) { - return 0; - } else { - ScriptEvent var4 = new ScriptEvent(); - var4.widget = var3; - var4.args = var3.onResize; - var4.field550 = Interpreter.field1080 + 1; - Client.scriptEvents.addFirst(var4); - return 1; + if (var0 == ScriptOpcodes.CC_SETPOSITION) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 4; + var4.rawX = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var4.rawY = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + var4.xAlignment = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 2]; + var4.yAlignment = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 3]; + ScriptEvent.invalidateWidget(var4); + AbstractWorldMapIcon.client.alignWidget(var4); + if (var3 != -1 && var4.type == 0) { + MilliClock.revalidateWidgetScroll(FloorDecoration.Widget_interfaceComponents[var3 >> 16], var4, false); } + + return 1; + } else if (var0 == ScriptOpcodes.CC_SETSIZE) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 4; + var4.rawWidth = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var4.rawHeight = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + var4.widthAlignment = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 2]; + var4.heightAlignment = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 3]; + ScriptEvent.invalidateWidget(var4); + AbstractWorldMapIcon.client.alignWidget(var4); + if (var3 != -1 && var4.type == 0) { + MilliClock.revalidateWidgetScroll(FloorDecoration.Widget_interfaceComponents[var3 >> 16], var4, false); + } + + return 1; + } else if (var0 == ScriptOpcodes.CC_SETHIDE) { + boolean var5 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + if (var5 != var4.isHidden) { + var4.isHidden = var5; + ScriptEvent.invalidateWidget(var4); + } + + return 1; + } else if (var0 == ScriptOpcodes.CC_SETNOCLICKTHROUGH) { + var4.noClickThrough = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + return 1; + } else if (var0 == ScriptOpcodes.CC_SETNOSCROLLTHROUGH) { + var4.noScrollThrough = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + return 1; } else { return 2; } } + + @ObfuscatedName("p") + @ObfuscatedSignature( + signature = "(I)V", + garbageValue = "1734679245" + ) + public static void method1074() { + if (NetCache.NetCache_socket != null) { + NetCache.NetCache_socket.close(); + } + + } + + @ObfuscatedName("fv") + @ObfuscatedSignature( + signature = "(IZZZI)Lij;", + garbageValue = "-1217554678" + ) + @Export("newArchive") + static Archive newArchive(int var0, boolean var1, boolean var2, boolean var3) { + ArchiveDisk var4 = null; + if (JagexCache.JagexCache_dat2File != null) { + var4 = new ArchiveDisk(var0, JagexCache.JagexCache_dat2File, WorldMapSection1.JagexCache_idxFiles[var0], 1000000); + } + + return new Archive(var4, class30.masterDisk, var0, var1, var2, var3); + } } diff --git a/runescape-client/src/main/java/GrandExchangeEvent.java b/runescape-client/src/main/java/GrandExchangeEvent.java index b18689c590..b60d95e088 100644 --- a/runescape-client/src/main/java/GrandExchangeEvent.java +++ b/runescape-client/src/main/java/GrandExchangeEvent.java @@ -4,47 +4,36 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("o") +@ObfuscatedName("y") @Implements("GrandExchangeEvent") public class GrandExchangeEvent { - @ObfuscatedName("nl") + @ObfuscatedName("u") @ObfuscatedGetter( - intValue = -1005036451 - ) - static int field46; - @ObfuscatedName("bu") - @ObfuscatedSignature( - signature = "[Llx;" - ) - @Export("worldSelectBackSprites") - static Sprite[] worldSelectBackSprites; - @ObfuscatedName("a") - @ObfuscatedGetter( - intValue = 1055414531 + intValue = 1903174229 ) @Export("world") public final int world; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedGetter( - longValue = -1970915304396216385L + longValue = -3619466799124397109L ) @Export("age") public final long age; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Ld;" + signature = "Li;" ) @Export("grandExchangeOffer") public final GrandExchangeOffer grandExchangeOffer; - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("offerName") String offerName; - @ObfuscatedName("v") + @ObfuscatedName("z") @Export("previousOfferName") String previousOfferName; @ObfuscatedSignature( - signature = "(Lkc;BI)V" + signature = "(Lkg;BI)V" ) GrandExchangeEvent(Buffer var1, byte var2, int var3) { this.offerName = var1.readStringCp1252NullTerminated(); @@ -54,8 +43,8 @@ public class GrandExchangeEvent { int var4 = var1.readInt(); int var5 = var1.readInt(); this.grandExchangeOffer = new GrandExchangeOffer(); - this.grandExchangeOffer.method139(2); - this.grandExchangeOffer.method152(var2); + this.grandExchangeOffer.method109(2); + this.grandExchangeOffer.method110(var2); this.grandExchangeOffer.unitPrice = var4; this.grandExchangeOffer.totalQuantity = var5; this.grandExchangeOffer.currentQuantity = 0; @@ -63,50 +52,72 @@ public class GrandExchangeEvent { this.grandExchangeOffer.id = var3; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(I)Ljava/lang/String;", - garbageValue = "65536" + signature = "(B)Ljava/lang/String;", + garbageValue = "16" ) @Export("getOfferName") public String getOfferName() { return this.offerName; } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(S)Ljava/lang/String;", - garbageValue = "3632" + signature = "(I)Ljava/lang/String;", + garbageValue = "1776036206" ) @Export("getPreviousOfferName") public String getPreviousOfferName() { return this.previousOfferName; } - @ObfuscatedName("a") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(II)Ljava/lang/String;", - garbageValue = "1325412403" + signature = "(Lkg;II)V", + garbageValue = "-894744142" ) - static String method122(int var0) { - return ""; - } - - @ObfuscatedName("t") - @ObfuscatedSignature( - signature = "(DDII)[D", - garbageValue = "-2110450939" - ) - public static double[] method123(double var0, double var2, int var4) { - int var5 = var4 * 2 + 1; - double[] var6 = new double[var5]; - int var7 = -var4; - - for (int var8 = 0; var7 <= var4; ++var8) { - var6[var8] = WorldMapSection1.method636((double)var7, var0, var2); - ++var7; + public static void method86(Buffer var0, int var1) { + if (JagexCache.JagexCache_randomDat != null) { + try { + JagexCache.JagexCache_randomDat.seek(0L); + JagexCache.JagexCache_randomDat.write(var0.array, var1, 24); + } catch (Exception var3) { + } } - return var6; + } + + @ObfuscatedName("g") + @ObfuscatedSignature( + signature = "(Lkg;II)Ljava/lang/String;", + garbageValue = "808138004" + ) + static String method92(Buffer var0, int var1) { + try { + int var2 = var0.readUShortSmart(); + if (var2 > var1) { + var2 = var1; + } + + byte[] var3 = new byte[var2]; + var0.offset += class210.huffman.decompress(var0.array, var0.offset, var3, 0, var2); + String var4 = NetCache.decodeStringCp1252(var3, 0, var2); + return var4; + } catch (Exception var6) { + return "Cabbage"; + } + } + + @ObfuscatedName("p") + @ObfuscatedSignature( + signature = "(II)V", + garbageValue = "-357486416" + ) + static void method91(int var0) { + ItemContainer var1 = (ItemContainer)ItemContainer.itemContainers.get((long)var0); + if (var1 != null) { + var1.remove(); + } } } diff --git a/runescape-client/src/main/java/GrandExchangeEvents.java b/runescape-client/src/main/java/GrandExchangeEvents.java index c1c49465ed..474f93eaae 100644 --- a/runescape-client/src/main/java/GrandExchangeEvents.java +++ b/runescape-client/src/main/java/GrandExchangeEvents.java @@ -4,30 +4,31 @@ import java.util.Comparator; import java.util.List; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; +import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("c") +@ObfuscatedName("h") @Implements("GrandExchangeEvents") public class GrandExchangeEvents { - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("GrandExchangeEvents_ageComparator") public static Comparator GrandExchangeEvents_ageComparator; - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("GrandExchangeEvents_priceComparator") public static Comparator GrandExchangeEvents_priceComparator; - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("GrandExchangeEvents_nameComparator") public static Comparator GrandExchangeEvents_nameComparator; - @ObfuscatedName("v") + @ObfuscatedName("z") @Export("GrandExchangeEvents_quantityComparator") public static Comparator GrandExchangeEvents_quantityComparator; - @ObfuscatedName("lk") - @ObfuscatedSignature( - signature = "Lhi;" + @ObfuscatedName("h") + @ObfuscatedGetter( + intValue = 130975453 ) - static Widget field39; - @ObfuscatedName("a") + static int field36; + @ObfuscatedName("u") @Export("events") public final List events; @@ -40,7 +41,7 @@ public class GrandExchangeEvents { } @ObfuscatedSignature( - signature = "(Lkc;Z)V", + signature = "(Lkg;Z)V", garbageValue = "1" ) public GrandExchangeEvents(Buffer var1, boolean var2) { @@ -62,10 +63,10 @@ public class GrandExchangeEvents { } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Ljava/util/Comparator;ZB)V", - garbageValue = "-120" + signature = "(Ljava/util/Comparator;ZI)V", + garbageValue = "1634803719" ) @Export("sort") public void sort(Comparator var1, boolean var2) { @@ -77,138 +78,76 @@ public class GrandExchangeEvents { } - @ObfuscatedName("a") + @ObfuscatedName("fd") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "-11933082" + garbageValue = "-1784799744" ) - static void method110() { - if (TaskHandler.javaVendor.toLowerCase().indexOf("microsoft") != -1) { - KeyHandler.KeyHandler_keyCodes[186] = 57; - KeyHandler.KeyHandler_keyCodes[187] = 27; - KeyHandler.KeyHandler_keyCodes[188] = 71; - KeyHandler.KeyHandler_keyCodes[189] = 26; - KeyHandler.KeyHandler_keyCodes[190] = 72; - KeyHandler.KeyHandler_keyCodes[191] = 73; - KeyHandler.KeyHandler_keyCodes[192] = 58; - KeyHandler.KeyHandler_keyCodes[219] = 42; - KeyHandler.KeyHandler_keyCodes[220] = 74; - KeyHandler.KeyHandler_keyCodes[221] = 43; - KeyHandler.KeyHandler_keyCodes[222] = 59; - KeyHandler.KeyHandler_keyCodes[223] = 28; - } else { - KeyHandler.KeyHandler_keyCodes[44] = 71; - KeyHandler.KeyHandler_keyCodes[45] = 26; - KeyHandler.KeyHandler_keyCodes[46] = 72; - KeyHandler.KeyHandler_keyCodes[47] = 73; - KeyHandler.KeyHandler_keyCodes[59] = 57; - KeyHandler.KeyHandler_keyCodes[61] = 27; - KeyHandler.KeyHandler_keyCodes[91] = 42; - KeyHandler.KeyHandler_keyCodes[92] = 74; - KeyHandler.KeyHandler_keyCodes[93] = 43; - KeyHandler.KeyHandler_keyCodes[192] = 28; - KeyHandler.KeyHandler_keyCodes[222] = 58; - KeyHandler.KeyHandler_keyCodes[520] = 59; - } - - } - - @ObfuscatedName("q") - @ObfuscatedSignature( - signature = "(IB)J", - garbageValue = "27" - ) - public static long method109(int var0) { - return ViewportMouse.ViewportMouse_entityTags[var0]; - } - - @ObfuscatedName("c") - @ObfuscatedSignature( - signature = "(Ljava/lang/CharSequence;I)I", - garbageValue = "83870185" - ) - public static int method108(CharSequence var0) { - int var1 = var0.length(); - int var2 = 0; - - for (int var3 = 0; var3 < var1; ++var3) { - var2 = (var2 << 5) - var2 + var0.charAt(var3); - } - - return var2; - } - - @ObfuscatedName("m") - @ObfuscatedSignature( - signature = "(IS)Lem;", - garbageValue = "9638" - ) - @Export("getFrames") - static Frames getFrames(int var0) { - Frames var1 = (Frames)SequenceDefinition.SequenceDefinition_cachedFrames.get((long)var0); - if (var1 != null) { - return var1; - } else { - AbstractArchive var3 = DevicePcmPlayerProvider.SequenceDefinition_animationsArchive; - AbstractArchive var4 = SequenceDefinition.SequenceDefinition_skeletonsArchive; - boolean var5 = true; - int[] var6 = var3.getGroupFileIds(var0); - - for (int var7 = 0; var7 < var6.length; ++var7) { - byte[] var8 = var3.getFile(var0, var6[var7]); - if (var8 == null) { - var5 = false; - } else { - int var9 = (var8[0] & 255) << 8 | var8[1] & 255; - byte[] var10 = var4.getFile(var9, 0); - if (var10 == null) { - var5 = false; - } - } - } - - Frames var2; - if (!var5) { - var2 = null; - } else { - try { - var2 = new Frames(var3, var4, var0, false); - } catch (Exception var12) { - var2 = null; - } - } - + static final void method83() { + for (int var0 = 0; var0 < Client.npcCount; ++var0) { + int var1 = Client.npcIndices[var0]; + NPC var2 = Client.npcs[var1]; if (var2 != null) { - SequenceDefinition.SequenceDefinition_cachedFrames.put(var2, (long)var0); + class3.updateActorSequence(var2, var2.definition.size); } - - return var2; } + } - @ObfuscatedName("gr") + @ObfuscatedName("jm") @ObfuscatedSignature( - signature = "(Ljava/lang/String;ZI)V", - garbageValue = "1827699856" + signature = "(Lhl;IIIIIIS)V", + garbageValue = "3880" ) - @Export("drawLoadingMessage") - static final void drawLoadingMessage(String var0, boolean var1) { - if (Client.showLoadingMessages) { - byte var2 = 4; - int var3 = var2 + 6; - int var4 = var2 + 6; - int var5 = ArchiveDiskActionHandler.fontPlain12.lineWidth(var0, 250); - int var6 = ArchiveDiskActionHandler.fontPlain12.lineCount(var0, 250) * 13; - Rasterizer2D.Rasterizer2D_fillRectangle(var3 - var2, var4 - var2, var5 + var2 + var2, var2 + var6 + var2, 0); - Rasterizer2D.Rasterizer2D_drawRectangle(var3 - var2, var4 - var2, var2 + var5 + var2, var2 + var2 + var6, 16777215); - ArchiveDiskActionHandler.fontPlain12.drawLines(var0, var3, var4, var5, var6, 16777215, -1, 1, 1, 0); - class83.method2212(var3 - var2, var4 - var2, var2 + var2 + var5, var2 + var2 + var6); - if (var1) { - AbstractWorldMapData.rasterProvider.drawFull(0, 0); - } else { - WorldMapSection0.method279(var3, var4, var5, var6); - } + static final void method82(Widget var0, int var1, int var2, int var3, int var4, int var5, int var6) { + if (Client.field908) { + Client.alternativeScrollbarWidth = 32; + } else { + Client.alternativeScrollbarWidth = 0; + } + Client.field908 = false; + int var7; + if (MouseHandler.MouseHandler_currentButton == 1 || !JagexCache.mouseCam && MouseHandler.MouseHandler_currentButton == 4) { + if (var5 >= var1 && var5 < var1 + 16 && var6 >= var2 && var6 < var2 + 16) { + var0.scrollY -= 4; + ScriptEvent.invalidateWidget(var0); + } else if (var5 >= var1 && var5 < var1 + 16 && var6 >= var3 + var2 - 16 && var6 < var3 + var2) { + var0.scrollY += 4; + ScriptEvent.invalidateWidget(var0); + } else if (var5 >= var1 - Client.alternativeScrollbarWidth && var5 < Client.alternativeScrollbarWidth + var1 + 16 && var6 >= var2 + 16 && var6 < var3 + var2 - 16) { + var7 = var3 * (var3 - 32) / var4; + if (var7 < 8) { + var7 = 8; + } + + int var8 = var6 - var2 - 16 - var7 / 2; + int var9 = var3 - 32 - var7; + var0.scrollY = var8 * (var4 - var3) / var9; + ScriptEvent.invalidateWidget(var0); + Client.field908 = true; + } + } + + if (Client.mouseWheelRotation != 0) { + var7 = var0.width; + if (var5 >= var1 - var7 && var6 >= var2 && var5 < var1 + 16 && var6 <= var3 + var2) { + var0.scrollY += Client.mouseWheelRotation * 45; + ScriptEvent.invalidateWidget(var0); + } + } + + } + + @ObfuscatedName("js") + @ObfuscatedSignature( + signature = "(III)V", + garbageValue = "1838875215" + ) + @Export("runIntfCloseListeners") + static final void runIntfCloseListeners(int var0, int var1) { + if (UserComparator3.loadInterface(var0)) { + WorldMapIcon_0.runComponentCloseListeners(FloorDecoration.Widget_interfaceComponents[var0], var1); } } } diff --git a/runescape-client/src/main/java/GrandExchangeOffer.java b/runescape-client/src/main/java/GrandExchangeOffer.java index d27a8e9937..315c566555 100644 --- a/runescape-client/src/main/java/GrandExchangeOffer.java +++ b/runescape-client/src/main/java/GrandExchangeOffer.java @@ -1,56 +1,43 @@ +import java.awt.Component; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("d") +@ObfuscatedName("i") @Implements("GrandExchangeOffer") public class GrandExchangeOffer { - @ObfuscatedName("aq") - @Export("fontHelvetica13") - static java.awt.Font fontHelvetica13; - @ObfuscatedName("go") - @ObfuscatedGetter( - intValue = 1997230309 - ) - static int field61; - @ObfuscatedName("jo") - @ObfuscatedSignature( - signature = "Lhi;" - ) - @Export("dragInventoryWidget") - static Widget dragInventoryWidget; - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("state") byte state; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = 517689507 + intValue = -1162503983 ) @Export("id") public int id; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = 969157751 + intValue = 501595023 ) @Export("unitPrice") public int unitPrice; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = 1699214933 + intValue = -483385453 ) @Export("totalQuantity") public int totalQuantity; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = 573459647 + intValue = 1432604557 ) @Export("currentQuantity") public int currentQuantity; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = 494126965 + intValue = -446179957 ) @Export("currentPrice") public int currentPrice; @@ -59,7 +46,7 @@ public class GrandExchangeOffer { } @ObfuscatedSignature( - signature = "(Lkc;Z)V", + signature = "(Lkg;Z)V", garbageValue = "0" ) public GrandExchangeOffer(Buffer var1, boolean var2) { @@ -71,42 +58,42 @@ public class GrandExchangeOffer { this.currentPrice = var1.readInt(); } - @ObfuscatedName("n") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(B)I", - garbageValue = "-108" + signature = "(I)I", + garbageValue = "855351335" ) @Export("status") public int status() { return this.state & 7; } - @ObfuscatedName("q") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(I)I", - garbageValue = "-928896233" + signature = "(B)I", + garbageValue = "8" ) @Export("type") public int type() { return (this.state & 8) == 8 ? 1 : 0; } - @ObfuscatedName("v") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(IS)V", - garbageValue = "-24365" + signature = "(IB)V", + garbageValue = "6" ) - void method139(int var1) { + void method109(int var1) { this.state &= -8; this.state = (byte)(this.state | var1 & 7); } - @ObfuscatedName("l") + @ObfuscatedName("z") @ObfuscatedSignature( signature = "(II)V", - garbageValue = "-268336020" + garbageValue = "1915474642" ) - void method152(int var1) { + void method110(int var1) { this.state &= -9; if (var1 == 1) { this.state = (byte)(this.state | 8); @@ -114,158 +101,146 @@ public class GrandExchangeOffer { } - @ObfuscatedName("a") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(II)Lcj;", - garbageValue = "538429635" + signature = "([BIIII[Lfh;B)V", + garbageValue = "0" ) - @Export("getScript") - static Script getScript(int var0) { - Script var1 = (Script)Script.Script_cached.get((long)var0); - if (var1 != null) { - return var1; - } else { - byte[] var2 = Occluder.archive12.takeFile(var0, 0); - if (var2 == null) { + static final void method123(byte[] var0, int var1, int var2, int var3, int var4, CollisionMap[] var5) { + int var7; + int var8; + for (int var6 = 0; var6 < 4; ++var6) { + for (var7 = 0; var7 < 64; ++var7) { + for (var8 = 0; var8 < 64; ++var8) { + if (var7 + var1 > 0 && var7 + var1 < 103 && var8 + var2 > 0 && var8 + var2 < 103) { + int[] var10000 = var5[var6].flags[var7 + var1]; + var10000[var2 + var8] &= -16777217; + } + } + } + } + + Buffer var10 = new Buffer(var0); + + for (var7 = 0; var7 < 4; ++var7) { + for (var8 = 0; var8 < 64; ++var8) { + for (int var9 = 0; var9 < 64; ++var9) { + loadTerrain(var10, var7, var8 + var1, var9 + var2, var3, var4, 0); + } + } + } + + } + + @ObfuscatedName("b") + @ObfuscatedSignature( + signature = "(Ljava/awt/Component;I)V", + garbageValue = "-625365247" + ) + static void method129(Component var0) { + var0.removeKeyListener(KeyHandler.KeyHandler_instance); + var0.removeFocusListener(KeyHandler.KeyHandler_instance); + KeyHandler.field397 = -1; + } + + @ObfuscatedName("b") + @Export("base37DecodeLong") + public static String base37DecodeLong(long var0) { + if (var0 > 0L && var0 < 6582952005840035281L) { + if (var0 % 37L == 0L) { return null; } else { - var1 = WorldMapIcon_0.newScript(var2); - Script.Script_cached.put(var1, (long)var0); - return var1; + int var2 = 0; + + for (long var3 = var0; var3 != 0L; var3 /= 37L) { + ++var2; + } + + StringBuilder var5; + char var8; + for (var5 = new StringBuilder(var2); 0L != var0; var5.append(var8)) { + long var6 = var0; + var0 /= 37L; + var8 = class288.base37Table[(int)(var6 - 37L * var0)]; + if (var8 == '_') { + int var9 = var5.length() - 1; + var5.setCharAt(var9, Character.toUpperCase(var5.charAt(var9))); + var8 = 160; + } + } + + var5.reverse(); + var5.setCharAt(0, Character.toUpperCase(var5.charAt(0))); + return var5.toString(); } + } else { + return null; } } - @ObfuscatedName("v") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(Ljava/lang/CharSequence;II[BIB)I", - garbageValue = "-73" + signature = "(Lkg;IIIIIIB)V", + garbageValue = "85" ) - @Export("encodeStringCp1252") - public static int encodeStringCp1252(CharSequence var0, int var1, int var2, byte[] var3, int var4) { - int var5 = var2 - var1; + @Export("loadTerrain") + static final void loadTerrain(Buffer var0, int var1, int var2, int var3, int var4, int var5, int var6) { + int var7; + if (var2 >= 0 && var2 < 104 && var3 >= 0 && var3 < 104) { + Tiles.Tiles_renderFlags[var1][var2][var3] = 0; - for (int var6 = 0; var6 < var5; ++var6) { - char var7 = var0.charAt(var6 + var1); - if (var7 > 0 && var7 < 128 || var7 >= 160 && var7 <= 255) { - var3[var6 + var4] = (byte)var7; - } else if (var7 == 8364) { - var3[var6 + var4] = -128; - } else if (var7 == 8218) { - var3[var6 + var4] = -126; - } else if (var7 == 402) { - var3[var6 + var4] = -125; - } else if (var7 == 8222) { - var3[var6 + var4] = -124; - } else if (var7 == 8230) { - var3[var6 + var4] = -123; - } else if (var7 == 8224) { - var3[var6 + var4] = -122; - } else if (var7 == 8225) { - var3[var6 + var4] = -121; - } else if (var7 == 710) { - var3[var6 + var4] = -120; - } else if (var7 == 8240) { - var3[var6 + var4] = -119; - } else if (var7 == 352) { - var3[var6 + var4] = -118; - } else if (var7 == 8249) { - var3[var6 + var4] = -117; - } else if (var7 == 338) { - var3[var6 + var4] = -116; - } else if (var7 == 381) { - var3[var6 + var4] = -114; - } else if (var7 == 8216) { - var3[var6 + var4] = -111; - } else if (var7 == 8217) { - var3[var6 + var4] = -110; - } else if (var7 == 8220) { - var3[var6 + var4] = -109; - } else if (var7 == 8221) { - var3[var6 + var4] = -108; - } else if (var7 == 8226) { - var3[var6 + var4] = -107; - } else if (var7 == 8211) { - var3[var6 + var4] = -106; - } else if (var7 == 8212) { - var3[var6 + var4] = -105; - } else if (var7 == 732) { - var3[var6 + var4] = -104; - } else if (var7 == 8482) { - var3[var6 + var4] = -103; - } else if (var7 == 353) { - var3[var6 + var4] = -102; - } else if (var7 == 8250) { - var3[var6 + var4] = -101; - } else if (var7 == 339) { - var3[var6 + var4] = -100; - } else if (var7 == 382) { - var3[var6 + var4] = -98; - } else if (var7 == 376) { - var3[var6 + var4] = -97; - } else { - var3[var6 + var4] = 63; + while (true) { + var7 = var0.readUnsignedByte(); + if (var7 == 0) { + if (var1 == 0) { + Tiles.Tiles_heights[0][var2][var3] = -class188.method3692(var4 + var2 + 932731, var3 + 556238 + var5) * 8; + } else { + Tiles.Tiles_heights[var1][var2][var3] = Tiles.Tiles_heights[var1 - 1][var2][var3] - 240; + } + break; + } + + if (var7 == 1) { + int var8 = var0.readUnsignedByte(); + if (var8 == 1) { + var8 = 0; + } + + if (var1 == 0) { + Tiles.Tiles_heights[0][var2][var3] = -var8 * 8; + } else { + Tiles.Tiles_heights[var1][var2][var3] = Tiles.Tiles_heights[var1 - 1][var2][var3] - var8 * 8; + } + break; + } + + if (var7 <= 49) { + Tiles.field499[var1][var2][var3] = var0.readByte(); + Tiles.field500[var1][var2][var3] = (byte)((var7 - 2) / 4); + Tiles.field501[var1][var2][var3] = (byte)(var7 - 2 + var6 & 3); + } else if (var7 <= 81) { + Tiles.Tiles_renderFlags[var1][var2][var3] = (byte)(var7 - 49); + } else { + Tiles.field498[var1][var2][var3] = (byte)(var7 - 81); + } + } + } else { + while (true) { + var7 = var0.readUnsignedByte(); + if (var7 == 0) { + break; + } + + if (var7 == 1) { + var0.readUnsignedByte(); + break; + } + + if (var7 <= 49) { + var0.readUnsignedByte(); + } } } - return var5; - } - - @ObfuscatedName("p") - @ObfuscatedSignature( - signature = "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V", - garbageValue = "-1089712950" - ) - @Export("setLoginResponseString") - static void setLoginResponseString(String var0, String var1, String var2) { - Login.Login_response1 = var0; - Login.Login_response2 = var1; - Login.Login_response3 = var2; - } - - @ObfuscatedName("jm") - @ObfuscatedSignature( - signature = "(III)Ljava/lang/String;", - garbageValue = "76295628" - ) - static final String method159(int var0, int var1) { - int var2 = var1 - var0; - if (var2 < -9) { - return AbstractArchive.colorStartTag(16711680); - } else if (var2 < -6) { - return AbstractArchive.colorStartTag(16723968); - } else if (var2 < -3) { - return AbstractArchive.colorStartTag(16740352); - } else if (var2 < 0) { - return AbstractArchive.colorStartTag(16756736); - } else if (var2 > 9) { - return AbstractArchive.colorStartTag(65280); - } else if (var2 > 6) { - return AbstractArchive.colorStartTag(4259584); - } else if (var2 > 3) { - return AbstractArchive.colorStartTag(8453888); - } else { - return var2 > 0 ? AbstractArchive.colorStartTag(12648192) : AbstractArchive.colorStartTag(16776960); - } - } - - @ObfuscatedName("jq") - @ObfuscatedSignature( - signature = "(II)Ljava/lang/String;", - garbageValue = "354835371" - ) - @Export("formatItemStacks") - static final String formatItemStacks(int var0) { - String var1 = Integer.toString(var0); - - for (int var2 = var1.length() - 3; var2 > 0; var2 -= 3) { - var1 = var1.substring(0, var2) + "," + var1.substring(var2); - } - - if (var1.length() > 9) { - return " " + AbstractArchive.colorStartTag(65408) + var1.substring(0, var1.length() - 8) + "M" + " " + " (" + var1 + ")" + ""; - } else { - return var1.length() > 6 ? " " + AbstractArchive.colorStartTag(16777215) + var1.substring(0, var1.length() - 4) + "K" + " " + " (" + var1 + ")" + "" : " " + AbstractArchive.colorStartTag(16776960) + var1 + ""; - } } } diff --git a/runescape-client/src/main/java/GrandExchangeOfferAgeComparator.java b/runescape-client/src/main/java/GrandExchangeOfferAgeComparator.java index 265798c5e0..14dfbbbc02 100644 --- a/runescape-client/src/main/java/GrandExchangeOfferAgeComparator.java +++ b/runescape-client/src/main/java/GrandExchangeOfferAgeComparator.java @@ -1,26 +1,38 @@ import java.util.Comparator; -import java.util.Date; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("h") +@ObfuscatedName("o") @Implements("GrandExchangeOfferAgeComparator") final class GrandExchangeOfferAgeComparator implements Comparator { - @ObfuscatedName("hk") + @ObfuscatedName("sn") @ObfuscatedGetter( - intValue = -1448356175 + intValue = 1973722011 ) - @Export("cameraZ") - static int cameraZ; - - @ObfuscatedName("a") + @Export("foundItemIndex") + static int foundItemIndex; + @ObfuscatedName("dn") @ObfuscatedSignature( - signature = "(Lo;Lo;B)I", - garbageValue = "46" + signature = "Lij;" + ) + @Export("archive0") + static Archive archive0; + @ObfuscatedName("gs") + @Export("regionLandArchiveIds") + static int[] regionLandArchiveIds; + @ObfuscatedName("he") + @ObfuscatedGetter( + intValue = -1622356541 + ) + static int field78; + + @ObfuscatedName("u") + @ObfuscatedSignature( + signature = "(Ly;Ly;I)I", + garbageValue = "1968951579" ) @Export("compare_bridged") int compare_bridged(GrandExchangeEvent var1, GrandExchangeEvent var2) { @@ -35,215 +47,100 @@ final class GrandExchangeOfferAgeComparator implements Comparator { return this.compare_bridged((GrandExchangeEvent)var1, (GrandExchangeEvent)var2); } - @ObfuscatedName("a") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Lbi;I)V", - garbageValue = "-794060784" + signature = "(II)Liy;", + garbageValue = "-1360050328" ) - @Export("runScriptEvent") - public static void runScriptEvent(ScriptEvent var0) { - class4.runScript(var0, 500000); - } - - @ObfuscatedName("d") - @ObfuscatedSignature( - signature = "(IIIII)I", - garbageValue = "1637402959" - ) - static final int method195(int var0, int var1, int var2, int var3) { - int var4 = 65536 - Rasterizer3D.Rasterizer3D_cosine[var2 * 1024 / var3] >> 1; - return ((65536 - var4) * var0 >> 16) + (var4 * var1 >> 16); - } - - @ObfuscatedName("ax") - @ObfuscatedSignature( - signature = "(ILcj;ZB)I", - garbageValue = "88" - ) - static int method196(int var0, Script var1, boolean var2) { - String var3; - int var4; - if (var0 == ScriptOpcodes.APPEND_NUM) { - var3 = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]; - var4 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var3 + var4; - return 1; + @Export("SequenceDefinition_get") + public static SequenceDefinition SequenceDefinition_get(int var0) { + SequenceDefinition var1 = (SequenceDefinition)SequenceDefinition.SequenceDefinition_cached.get((long)var0); + if (var1 != null) { + return var1; } else { - String var9; - if (var0 == ScriptOpcodes.APPEND) { - WorldMapDecoration.Interpreter_stringStackSize -= 2; - var3 = Interpreter.Interpreter_stringStack[WorldMapDecoration.Interpreter_stringStackSize]; - var9 = Interpreter.Interpreter_stringStack[WorldMapDecoration.Interpreter_stringStackSize + 1]; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var3 + var9; - return 1; - } else if (var0 == ScriptOpcodes.APPEND_SIGNNUM) { - var3 = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]; - var4 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var3 + WorldMapData_0.intToString(var4, true); - return 1; - } else if (var0 == ScriptOpcodes.LOWERCASE) { - var3 = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var3.toLowerCase(); - return 1; - } else { - int var6; - int var10; - if (var0 == ScriptOpcodes.FROMDATE) { - var10 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - long var11 = (11745L + (long)var10) * 86400000L; - Interpreter.Interpreter_calendar.setTime(new Date(var11)); - var6 = Interpreter.Interpreter_calendar.get(5); - int var16 = Interpreter.Interpreter_calendar.get(2); - int var8 = Interpreter.Interpreter_calendar.get(1); - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var6 + "-" + Interpreter.Interpreter_MONTHS[var16] + "-" + var8; - return 1; - } else if (var0 != ScriptOpcodes.TEXT_GENDER) { - if (var0 == ScriptOpcodes.TOSTRING) { - var10 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = Integer.toString(var10); - return 1; - } else if (var0 == ScriptOpcodes.COMPARE) { - WorldMapDecoration.Interpreter_stringStackSize -= 2; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = class326.method6375(ArchiveDiskAction.compareStrings(Interpreter.Interpreter_stringStack[WorldMapDecoration.Interpreter_stringStackSize], Interpreter.Interpreter_stringStack[WorldMapDecoration.Interpreter_stringStackSize + 1], WorldMapSection1.clientLanguage)); - return 1; - } else { - int var5; - byte[] var13; - Font var14; - if (var0 == ScriptOpcodes.PARAHEIGHT) { - var3 = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]; - Interpreter.Interpreter_intStackSize -= 2; - var4 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var5 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - var13 = UrlRequest.archive13.takeFile(var5, 0); - var14 = new Font(var13); - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var14.lineCount(var3, var4); - return 1; - } else if (var0 == ScriptOpcodes.PARAWIDTH) { - var3 = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]; - Interpreter.Interpreter_intStackSize -= 2; - var4 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var5 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - var13 = UrlRequest.archive13.takeFile(var5, 0); - var14 = new Font(var13); - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var14.lineWidth(var3, var4); - return 1; - } else if (var0 == ScriptOpcodes.TEXT_SWITCH) { - WorldMapDecoration.Interpreter_stringStackSize -= 2; - var3 = Interpreter.Interpreter_stringStack[WorldMapDecoration.Interpreter_stringStackSize]; - var9 = Interpreter.Interpreter_stringStack[WorldMapDecoration.Interpreter_stringStackSize + 1]; - if (Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1) { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var3; - } else { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var9; - } - - return 1; - } else if (var0 == ScriptOpcodes.ESCAPE) { - var3 = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = AbstractFont.escapeBrackets(var3); - return 1; - } else if (var0 == ScriptOpcodes.APPEND_CHAR) { - var3 = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]; - var4 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var3 + (char)var4; - return 1; - } else if (var0 == ScriptOpcodes.CHAR_ISPRINTABLE) { - var10 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = WorldMapElement.isCharPrintable((char)var10) ? 1 : 0; - return 1; - } else if (var0 == ScriptOpcodes.CHAR_ISALPHANUMERIC) { - var10 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = UserComparator8.isAlphaNumeric((char)var10) ? 1 : 0; - return 1; - } else if (var0 == ScriptOpcodes.CHAR_ISALPHA) { - var10 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = ChatChannel.isCharAlphabetic((char)var10) ? 1 : 0; - return 1; - } else if (var0 == ScriptOpcodes.CHAR_ISNUMERIC) { - var10 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = ClientPacket.isDigit((char)var10) ? 1 : 0; - return 1; - } else if (var0 == ScriptOpcodes.STRING_LENGTH) { - var3 = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]; - if (var3 != null) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.length(); - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - } - - return 1; - } else if (var0 == ScriptOpcodes.SUBSTRING) { - var3 = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]; - Interpreter.Interpreter_intStackSize -= 2; - var4 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var5 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var3.substring(var4, var5); - return 1; - } else if (var0 == ScriptOpcodes.REMOVETAGS) { - var3 = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]; - StringBuilder var17 = new StringBuilder(var3.length()); - boolean var15 = false; - - for (var6 = 0; var6 < var3.length(); ++var6) { - char var7 = var3.charAt(var6); - if (var7 == '<') { - var15 = true; - } else if (var7 == '>') { - var15 = false; - } else if (!var15) { - var17.append(var7); - } - } - - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var17.toString(); - return 1; - } else if (var0 == ScriptOpcodes.STRING_INDEXOF_CHAR) { - var3 = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]; - var4 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.indexOf(var4); - return 1; - } else if (var0 == ScriptOpcodes.STRING_INDEXOF_STRING) { - WorldMapDecoration.Interpreter_stringStackSize -= 2; - var3 = Interpreter.Interpreter_stringStack[WorldMapDecoration.Interpreter_stringStackSize]; - var9 = Interpreter.Interpreter_stringStack[WorldMapDecoration.Interpreter_stringStackSize + 1]; - var5 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.indexOf(var9, var5); - return 1; - } else if (var0 == ScriptOpcodes.UPPERCASE) { - var3 = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var3.toUpperCase(); - return 1; - } else { - return 2; - } - } - } else { - WorldMapDecoration.Interpreter_stringStackSize -= 2; - var3 = Interpreter.Interpreter_stringStack[WorldMapDecoration.Interpreter_stringStackSize]; - var9 = Interpreter.Interpreter_stringStack[WorldMapDecoration.Interpreter_stringStackSize + 1]; - if (class215.localPlayer.appearance != null && class215.localPlayer.appearance.isFemale) { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var9; - } else { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var3; - } - - return 1; - } + byte[] var2 = SequenceDefinition.SequenceDefinition_archive.takeFile(12, var0); + var1 = new SequenceDefinition(); + if (var2 != null) { + var1.decode(new Buffer(var2)); } + + var1.postDecode(); + SequenceDefinition.SequenceDefinition_cached.put(var1, (long)var0); + return var1; } } - @ObfuscatedName("kq") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Lhi;I)V", - garbageValue = "-1910417202" + signature = "(ILjava/lang/String;Ljava/lang/String;I)V", + garbageValue = "1757015417" ) - @Export("invalidateWidget") - static void invalidateWidget(Widget var0) { - if (var0.cycle == Client.field835) { - Client.field842[var0.rootIndex] = true; + @Export("addGameMessage") + static void addGameMessage(int var0, String var1, String var2) { + SecureRandomCallable.addChatMessage(var0, var1, var2, (String)null); + } + + @ObfuscatedName("f") + @ObfuscatedSignature( + signature = "(B)V", + garbageValue = "-41" + ) + @Export("WorldMapRegion_clearCachedSprites") + static void WorldMapRegion_clearCachedSprites() { + WorldMapRegion.WorldMapRegion_cachedSprites.clear(); + } + + @ObfuscatedName("w") + @ObfuscatedSignature( + signature = "(I)Llm;", + garbageValue = "1974052885" + ) + static IndexedSprite method172() { + IndexedSprite var0 = new IndexedSprite(); + var0.width = class325.SpriteBuffer_spriteWidth; + var0.height = UserComparator9.SpriteBuffer_spriteHeight; + var0.xOffset = UrlRequester.SpriteBuffer_xOffsets[0]; + var0.yOffset = class216.SpriteBuffer_yOffsets[0]; + var0.subWidth = class325.SpriteBuffer_spriteWidths[0]; + var0.subHeight = VarcInt.SpriteBuffer_spriteHeights[0]; + var0.palette = class325.SpriteBuffer_spritePalette; + var0.pixels = FillMode.SpriteBuffer_pixels[0]; + PcmPlayer.method2510(); + return var0; + } + + @ObfuscatedName("k") + @ObfuscatedSignature( + signature = "(Lbp;B)V", + garbageValue = "14" + ) + @Export("changeWorld") + static void changeWorld(World var0) { + if (var0.isMembersOnly() != Client.isMembersWorld) { + Client.isMembersWorld = var0.isMembersOnly(); + WorldMapCacheName.method637(var0.isMembersOnly()); } + Canvas.worldHost = var0.host; + Client.worldId = var0.id; + Client.worldProperties = var0.properties; + SecureRandomCallable.port1 = Client.gameBuild == 0 ? 43594 : var0.id + 40000; + class49.port2 = Client.gameBuild == 0 ? 443 : var0.id + 50000; + WorldMapIcon_0.port3 = SecureRandomCallable.port1; + } + + @ObfuscatedName("j") + @ObfuscatedSignature( + signature = "(IZII)V", + garbageValue = "-1741540406" + ) + public static final void method170(int var0, boolean var1, int var2) { + if (var0 >= 8000 && var0 <= 48000) { + Messages.PcmPlayer_sampleRate = var0; + PcmPlayer.PcmPlayer_stereo = var1; + RouteStrategy.field2114 = var2; + } else { + throw new IllegalArgumentException(); + } } } diff --git a/runescape-client/src/main/java/GrandExchangeOfferNameComparator.java b/runescape-client/src/main/java/GrandExchangeOfferNameComparator.java index 8bce6cd693..b69545827e 100644 --- a/runescape-client/src/main/java/GrandExchangeOfferNameComparator.java +++ b/runescape-client/src/main/java/GrandExchangeOfferNameComparator.java @@ -1,17 +1,24 @@ -import java.io.IOException; import java.util.Comparator; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; +import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; +import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("p") +@ObfuscatedName("x") @Implements("GrandExchangeOfferNameComparator") final class GrandExchangeOfferNameComparator implements Comparator { - @ObfuscatedName("a") + @ObfuscatedName("ew") + @ObfuscatedGetter( + intValue = -2040766613 + ) + static int field73; + + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Lo;Lo;I)I", - garbageValue = "1525556475" + signature = "(Ly;Ly;B)I", + garbageValue = "-36" ) @Export("compare_bridged") int compare_bridged(GrandExchangeEvent var1, GrandExchangeEvent var2) { @@ -26,342 +33,591 @@ final class GrandExchangeOfferNameComparator implements Comparator { return super.equals(var1); } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Lhq;Lhq;B)I", - garbageValue = "75" + signature = "(I)V", + garbageValue = "1232300438" ) - static int method182(AbstractArchive var0, AbstractArchive var1) { - int var2 = 0; - if (var0.tryLoadFileByNames("title.jpg", "")) { - ++var2; - } - - if (var1.tryLoadFileByNames("logo", "")) { - ++var2; - } - - if (var1.tryLoadFileByNames("logo_deadman_mode", "")) { - ++var2; - } - - if (var1.tryLoadFileByNames("logo_seasonal_mode", "")) { - ++var2; - } - - if (var1.tryLoadFileByNames("titlebox", "")) { - ++var2; - } - - if (var1.tryLoadFileByNames("titlebutton", "")) { - ++var2; - } - - if (var1.tryLoadFileByNames("runes", "")) { - ++var2; - } - - if (var1.tryLoadFileByNames("title_mute", "")) { - ++var2; - } - - if (var1.tryLoadFileByNames("options_radio_buttons,0", "")) { - ++var2; - } - - if (var1.tryLoadFileByNames("options_radio_buttons,2", "")) { - ++var2; - } - - if (var1.tryLoadFileByNames("options_radio_buttons,4", "")) { - ++var2; - } - - if (var1.tryLoadFileByNames("options_radio_buttons,6", "")) { - ++var2; - } - - var1.tryLoadFileByNames("sl_back", ""); - var1.tryLoadFileByNames("sl_flags", ""); - var1.tryLoadFileByNames("sl_arrows", ""); - var1.tryLoadFileByNames("sl_stars", ""); - var1.tryLoadFileByNames("sl_button", ""); - return var2; - } - - @ObfuscatedName("ha") - @ObfuscatedSignature( - signature = "(IIIIIIII)V", - garbageValue = "-1414450696" - ) - static final void method183(int var0, int var1, int var2, int var3, int var4, int var5, int var6) { - var5 = PcmPlayer.method2637(var5, var6); - int var7 = 2048 - var3 & 2047; - int var8 = 2048 - var4 & 2047; - int var9 = 0; - int var10 = 0; - int var11 = var5; - int var12; - int var13; - int var14; - if (var7 != 0) { - var12 = Rasterizer3D.Rasterizer3D_sine[var7]; - var13 = Rasterizer3D.Rasterizer3D_cosine[var7]; - var14 = var10 * var13 - var12 * var5 >> 16; - var11 = var13 * var5 + var12 * var10 >> 16; - var10 = var14; - } - - if (var8 != 0) { - var12 = Rasterizer3D.Rasterizer3D_sine[var8]; - var13 = Rasterizer3D.Rasterizer3D_cosine[var8]; - var14 = var13 * var9 + var11 * var12 >> 16; - var11 = var13 * var11 - var9 * var12 >> 16; - var9 = var14; - } - - UrlRequester.cameraX = var0 - var9; - class16.cameraY = var1 - var10; - GrandExchangeOfferAgeComparator.cameraZ = var2 - var11; - class247.cameraPitch = var3; - WorldMapData_1.cameraYaw = var4; - if (Client.oculusOrbState == 1 && Client.staffModLevel >= 2 && Client.cycle % 50 == 0 && (IgnoreList.oculusOrbFocalPointX >> 7 != class215.localPlayer.x >> 7 || AbstractArchive.oculusOrbFocalPointY >> 7 != class215.localPlayer.y >> 7)) { - var12 = class215.localPlayer.Client_plane; - var13 = UserComparator8.baseX * 64 + (IgnoreList.oculusOrbFocalPointX >> 7); - var14 = HealthBar.baseY * 64 + (AbstractArchive.oculusOrbFocalPointY >> 7); - PacketBufferNode var15 = SoundSystem.getPacketBufferNode(ClientPacket.field2228, Client.packetWriter.isaacCipher); - var15.packetBuffer.writeIntME(Client.field799); - var15.packetBuffer.writeByte(var12); - var15.packetBuffer.method5644(var14); - var15.packetBuffer.writeShortLE(var13); - Client.packetWriter.addNode(var15); + static void method153() { + if (TaskHandler.javaVendor.toLowerCase().indexOf("microsoft") != -1) { + KeyHandler.KeyHandler_keyCodes[186] = 57; + KeyHandler.KeyHandler_keyCodes[187] = 27; + KeyHandler.KeyHandler_keyCodes[188] = 71; + KeyHandler.KeyHandler_keyCodes[189] = 26; + KeyHandler.KeyHandler_keyCodes[190] = 72; + KeyHandler.KeyHandler_keyCodes[191] = 73; + KeyHandler.KeyHandler_keyCodes[192] = 58; + KeyHandler.KeyHandler_keyCodes[219] = 42; + KeyHandler.KeyHandler_keyCodes[220] = 74; + KeyHandler.KeyHandler_keyCodes[221] = 43; + KeyHandler.KeyHandler_keyCodes[222] = 59; + KeyHandler.KeyHandler_keyCodes[223] = 28; + } else { + KeyHandler.KeyHandler_keyCodes[44] = 71; + KeyHandler.KeyHandler_keyCodes[45] = 26; + KeyHandler.KeyHandler_keyCodes[46] = 72; + KeyHandler.KeyHandler_keyCodes[47] = 73; + KeyHandler.KeyHandler_keyCodes[59] = 57; + KeyHandler.KeyHandler_keyCodes[61] = 27; + KeyHandler.KeyHandler_keyCodes[91] = 42; + KeyHandler.KeyHandler_keyCodes[92] = 74; + KeyHandler.KeyHandler_keyCodes[93] = 43; + KeyHandler.KeyHandler_keyCodes[192] = 28; + KeyHandler.KeyHandler_keyCodes[222] = 58; + KeyHandler.KeyHandler_keyCodes[520] = 59; } } - @ObfuscatedName("hz") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(ZI)V", - garbageValue = "-604205678" + signature = "(Lby;II)V", + garbageValue = "808339496" ) - static final void method172(boolean var0) { - ChatChannel.playPcmPlayers(); - ++Client.packetWriter.pendingWrites; - if (Client.packetWriter.pendingWrites >= 50 || var0) { - Client.packetWriter.pendingWrites = 0; - if (!Client.field680 && Client.packetWriter.getSocket() != null) { - PacketBufferNode var1 = SoundSystem.getPacketBufferNode(ClientPacket.field2245, Client.packetWriter.isaacCipher); - Client.packetWriter.addNode(var1); + @Export("runScript") + static void runScript(ScriptEvent var0, int var1) { + Object[] var2 = var0.args; + Script var3; + int var17; + if (class210.isWorldMapEvent(var0.type)) { + Messages.worldMapEvent = (WorldMapEvent)var2[0]; + WorldMapElement var4 = Varcs.WorldMapElement_get(Messages.worldMapEvent.mapElement); + var3 = class195.getWorldMapScript(var0.type, var4.objectId, var4.category); + } else { + var17 = (Integer)var2[0]; + var3 = class30.getScript(var17); + } + if (var3 != null) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize = 0; + class43.Interpreter_stringStackSize = 0; + var17 = -1; + int[] var5 = var3.opcodes; + int[] var6 = var3.intOperands; + byte var7 = -1; + Interpreter.Interpreter_frameDepth = 0; + Interpreter.field1093 = false; + + try { + int var10; try { - Client.packetWriter.flush(); - } catch (IOException var3) { - Client.field680 = true; - } - } + Frames.Interpreter_intLocals = new int[var3.localIntCount]; + int var8 = 0; + LoginScreenAnimation.Interpreter_stringLocals = new String[var3.localStringCount]; + int var9 = 0; - } - } + int var11; + String var18; + for (var10 = 1; var10 < var2.length; ++var10) { + if (var2[var10] instanceof Integer) { + var11 = (Integer)var2[var10]; + if (var11 == -2147483647) { + var11 = var0.mouseX; + } - @ObfuscatedName("is") - @ObfuscatedSignature( - signature = "(IIIIB)V", - garbageValue = "-93" - ) - @Export("addSceneMenuOptions") - static final void addSceneMenuOptions(int var0, int var1, int var2, int var3) { - if (Client.isItemSelected == 0 && !Client.isSpellSelected) { - GameObject.insertMenuItemNoShift("Walk here", "", 23, 0, var0 - var2, var1 - var3); - } + if (var11 == -2147483646) { + var11 = var0.mouseY; + } - long var4 = -1L; - long var6 = -1L; + if (var11 == -2147483645) { + var11 = var0.widget != null ? var0.widget.id : -1; + } - int var8; - for (var8 = 0; var8 < WorldMapLabel.method479(); ++var8) { - long var9 = GrandExchangeEvents.method109(var8); - if (var6 != var9) { - var6 = var9; - long var13 = ViewportMouse.ViewportMouse_entityTags[var8]; - int var24 = (int)(var13 >>> 0 & 127L); - var24 = var24; - long var15 = ViewportMouse.ViewportMouse_entityTags[var8]; - int var14 = (int)(var15 >>> 7 & 127L); - var14 = var14; - int var26 = Username.ViewportMouse_unpackX(var8); - int var16 = ScriptEvent.method1272(var8); - if (var26 == 2 && WorldMapArea.scene.getObjectFlags(Player.Client_plane, var24, var14, var9) >= 0) { - ObjectDefinition var17 = WorldMapDecorationType.getObjectDefinition(var16); - if (var17.transforms != null) { - var17 = var17.transform(); - } + if (var11 == -2147483644) { + var11 = var0.opIndex; + } - if (var17 == null) { - continue; - } + if (var11 == -2147483643) { + var11 = var0.widget != null ? var0.widget.childIndex : -1; + } - if (Client.isItemSelected == 1) { - GameObject.insertMenuItemNoShift("Use", Client.selectedItemName + " " + "->" + " " + AbstractArchive.colorStartTag(65535) + var17.name, 1, var16, var24, var14); - } else if (Client.isSpellSelected) { - if ((class81.selectedSpellFlags & 4) == 4) { - GameObject.insertMenuItemNoShift(Client.selectedSpellActionName, Client.selectedSpellName + " " + "->" + " " + AbstractArchive.colorStartTag(65535) + var17.name, 2, var16, var24, var14); + if (var11 == -2147483642) { + var11 = var0.dragTarget != null ? var0.dragTarget.id : -1; + } + + if (var11 == -2147483641) { + var11 = var0.dragTarget != null ? var0.dragTarget.childIndex : -1; + } + + if (var11 == -2147483640) { + var11 = var0.keyTyped; + } + + if (var11 == -2147483639) { + var11 = var0.keyPressed; + } + + Frames.Interpreter_intLocals[var8++] = var11; + } else if (var2[var10] instanceof String) { + var18 = (String)var2[var10]; + if (var18.equals("event_opbase")) { + var18 = var0.targetName; + } + + LoginScreenAnimation.Interpreter_stringLocals[var9++] = var18; } - } else { - String[] var27 = var17.actions; - if (var27 != null) { - for (int var28 = 4; var28 >= 0; --var28) { - if (var27[var28] != null) { - short var20 = 0; - if (var28 == 0) { - var20 = 3; + } + + var10 = 0; + Interpreter.field1095 = var0.field577; + + while (true) { + ++var10; + if (var10 > var1) { + throw new RuntimeException(); + } + + ++var17; + int var29 = var5[var17]; + int var20; + if (var29 >= 100) { + boolean var32; + if (var3.intOperands[var17] == 1) { + var32 = true; + } else { + var32 = false; + } + + var20 = NetCache.method4397(var29, var3, var32); + switch(var20) { + case 0: + return; + case 1: + default: + break; + case 2: + throw new IllegalStateException(); + } + } else if (var29 == 0) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var6[var17]; + } else if (var29 == ScriptOpcodes.GET_VARP) { + var11 = var6[var17]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Varps.Varps_main[var11]; + } else if (var29 == ScriptOpcodes.SET_VARP) { + var11 = var6[var17]; + Varps.Varps_main[var11] = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + ObjectDefinition.changeGameOptions(var11); + } else if (var29 == ScriptOpcodes.SCONST) { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var3.stringOperands[var17]; + } else if (var29 == ScriptOpcodes.JUMP) { + var17 += var6[var17]; + } else if (var29 == ScriptOpcodes.IF_ICMPNE) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + if (Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] != Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]) { + var17 += var6[var17]; + } + } else if (var29 == ScriptOpcodes.IF_ICMPEQ) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + if (Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]) { + var17 += var6[var17]; + } + } else if (var29 == ScriptOpcodes.IF_ICMPLT) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + if (Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] < Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]) { + var17 += var6[var17]; + } + } else if (var29 == ScriptOpcodes.IF_ICMPGT) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + if (Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] > Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]) { + var17 += var6[var17]; + } + } else if (var29 == ScriptOpcodes.RETURN) { + if (Interpreter.Interpreter_frameDepth == 0) { + return; + } + + ScriptFrame var34 = Interpreter.Interpreter_frames[--Interpreter.Interpreter_frameDepth]; + var3 = var34.script; + var5 = var3.opcodes; + var6 = var3.intOperands; + var17 = var34.pc; + Frames.Interpreter_intLocals = var34.intLocals; + LoginScreenAnimation.Interpreter_stringLocals = var34.stringLocals; + } else if (var29 == ScriptOpcodes.GET_VARBIT) { + var11 = var6[var17]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = FileSystem.getVarbit(var11); + } else if (var29 == ScriptOpcodes.SET_VARBIT) { + var11 = var6[var17]; + JagexCache.method3540(var11, Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]); + } else if (var29 == ScriptOpcodes.IF_ICMPLE) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + if (Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] <= Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]) { + var17 += var6[var17]; + } + } else if (var29 == ScriptOpcodes.IF_ICMPGE) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + if (Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] >= Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]) { + var17 += var6[var17]; + } + } else if (var29 == ScriptOpcodes.ILOAD) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Frames.Interpreter_intLocals[var6[var17]]; + } else if (var29 == ScriptOpcodes.ISTORE) { + Frames.Interpreter_intLocals[var6[var17]] = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + } else if (var29 == ScriptOpcodes.SLOAD) { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = LoginScreenAnimation.Interpreter_stringLocals[var6[var17]]; + } else if (var29 == ScriptOpcodes.SSTORE) { + LoginScreenAnimation.Interpreter_stringLocals[var6[var17]] = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]; + } else if (var29 == ScriptOpcodes.JOIN_STRING) { + var11 = var6[var17]; + class43.Interpreter_stringStackSize -= var11; + String var31 = FontName.method5425(Interpreter.Interpreter_stringStack, class43.Interpreter_stringStackSize, var11); + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var31; + } else if (var29 == ScriptOpcodes.POP_INT) { + --GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize; + } else if (var29 == ScriptOpcodes.POP_STRING) { + --class43.Interpreter_stringStackSize; + } else { + int var15; + if (var29 != ScriptOpcodes.INVOKE) { + if (var29 == ScriptOpcodes.GET_VARC_INT) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = AttackOption.varcs.getInt(var6[var17]); + } else if (var29 == ScriptOpcodes.SET_VARC_INT) { + AttackOption.varcs.setInt(var6[var17], Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]); + } else if (var29 == ScriptOpcodes.DEFINE_ARRAY) { + var11 = var6[var17] >> 16; + var20 = var6[var17] & 65535; + int var21 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + if (var21 < 0 || var21 > 5000) { + throw new RuntimeException(); } - if (var28 == 1) { - var20 = 4; + Interpreter.Interpreter_arrayLengths[var11] = var21; + byte var22 = -1; + if (var20 == 105) { + var22 = 0; } - if (var28 == 2) { - var20 = 5; + for (var15 = 0; var15 < var21; ++var15) { + Interpreter.Interpreter_arrays[var11][var15] = var22; + } + } else if (var29 == ScriptOpcodes.GET_ARRAY_INT) { + var11 = var6[var17]; + var20 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + if (var20 < 0 || var20 >= Interpreter.Interpreter_arrayLengths[var11]) { + throw new RuntimeException(); } - if (var28 == 3) { - var20 = 6; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Interpreter.Interpreter_arrays[var11][var20]; + } else if (var29 == ScriptOpcodes.SET_ARRAY_INT) { + var11 = var6[var17]; + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var20 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + if (var20 < 0 || var20 >= Interpreter.Interpreter_arrayLengths[var11]) { + throw new RuntimeException(); } - if (var28 == 4) { - var20 = 1001; + Interpreter.Interpreter_arrays[var11][var20] = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + } else if (var29 == ScriptOpcodes.GET_VARC_STRING_OLD) { + var18 = AttackOption.varcs.getStringOld(var6[var17]); + if (var18 == null) { + var18 = "null"; } - GameObject.insertMenuItemNoShift(var27[var28], AbstractArchive.colorStartTag(65535) + var17.name, var20, var16, var24, var14); - } - } - } + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var18; + } else if (var29 == ScriptOpcodes.SET_VARC_STRING_OLD) { + AttackOption.varcs.setStringOld(var6[var17], Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]); + } else if (var29 == ScriptOpcodes.GET_VARC_STRING) { + var18 = AttackOption.varcs.getString(var6[var17]); + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var18; + } else if (var29 == ScriptOpcodes.SET_VARC_STRING) { + AttackOption.varcs.setString(var6[var17], Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]); + } else { + if (var29 != ScriptOpcodes.SWITCH) { + throw new IllegalStateException(); + } - GameObject.insertMenuItemNoShift("Examine", AbstractArchive.colorStartTag(65535) + var17.name, 1002, var17.id, var24, var14); - } - } - - int var18; - NPC var19; - Player var21; - int[] var34; - int var36; - if (var26 == 1) { - NPC var31 = Client.npcs[var16]; - if (var31 == null) { - continue; - } - - if (var31.definition.size == 1 && (var31.x & 127) == 64 && (var31.y & 127) == 64) { - for (var18 = 0; var18 < Client.npcCount; ++var18) { - var19 = Client.npcs[Client.npcIndices[var18]]; - if (var19 != null && var31 != var19 && var19.definition.size == 1 && var19.x == var31.x && var31.y == var19.y) { - TaskHandler.addNpcToMenu(var19.definition, Client.npcIndices[var18], var24, var14); - } - } - - var18 = Players.Players_count; - var34 = Players.Players_indices; - - for (var36 = 0; var36 < var18; ++var36) { - var21 = Client.players[var34[var36]]; - if (var21 != null && var21.x == var31.x && var21.y == var31.y) { - class40.addPlayerToMenu(var21, var34[var36], var24, var14); - } - } - } - - TaskHandler.addNpcToMenu(var31.definition, var16, var24, var14); - } - - if (var26 == 0) { - Player var32 = Client.players[var16]; - if (var32 == null) { - continue; - } - - if ((var32.x & 127) == 64 && (var32.y & 127) == 64) { - for (var18 = 0; var18 < Client.npcCount; ++var18) { - var19 = Client.npcs[Client.npcIndices[var18]]; - if (var19 != null && var19.definition.size == 1 && var19.x == var32.x && var19.y == var32.y) { - TaskHandler.addNpcToMenu(var19.definition, Client.npcIndices[var18], var24, var14); - } - } - - var18 = Players.Players_count; - var34 = Players.Players_indices; - - for (var36 = 0; var36 < var18; ++var36) { - var21 = Client.players[var34[var36]]; - if (var21 != null && var21 != var32 && var21.x == var32.x && var32.y == var21.y) { - class40.addPlayerToMenu(var21, var34[var36], var24, var14); - } - } - } - - if (var16 != Client.combatTargetPlayerIndex) { - class40.addPlayerToMenu(var32, var16, var24, var14); - } else { - var4 = var9; - } - } - - if (var26 == 3) { - NodeDeque var33 = Client.groundItems[Player.Client_plane][var24][var14]; - if (var33 != null) { - for (TileItem var37 = (TileItem)var33.first(); var37 != null; var37 = (TileItem)var33.next()) { - ItemDefinition var35 = class222.ItemDefinition_get(var37.id); - if (Client.isItemSelected == 1) { - GameObject.insertMenuItemNoShift("Use", Client.selectedItemName + " " + "->" + " " + AbstractArchive.colorStartTag(16748608) + var35.name, 16, var37.id, var24, var14); - } else if (Client.isSpellSelected) { - if ((class81.selectedSpellFlags & 1) == 1) { - GameObject.insertMenuItemNoShift(Client.selectedSpellActionName, Client.selectedSpellName + " " + "->" + " " + AbstractArchive.colorStartTag(16748608) + var35.name, 17, var37.id, var24, var14); + IterableNodeHashTable var33 = var3.switches[var6[var17]]; + IntegerNode var30 = (IntegerNode)var33.get((long)Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]); + if (var30 != null) { + var17 += var30.integer; + } } } else { - String[] var29 = var35.groundActions; + var11 = var6[var17]; + Script var12 = class30.getScript(var11); + int[] var13 = new int[var12.localIntCount]; + String[] var14 = new String[var12.localStringCount]; - for (int var30 = 4; var30 >= 0; --var30) { - if (var29 != null && var29[var30] != null) { - byte var22 = 0; - if (var30 == 0) { - var22 = 18; - } - - if (var30 == 1) { - var22 = 19; - } - - if (var30 == 2) { - var22 = 20; - } - - if (var30 == 3) { - var22 = 21; - } - - if (var30 == 4) { - var22 = 22; - } - - GameObject.insertMenuItemNoShift(var29[var30], AbstractArchive.colorStartTag(16748608) + var35.name, var22, var37.id, var24, var14); - } else if (var30 == 2) { - GameObject.insertMenuItemNoShift("Take", AbstractArchive.colorStartTag(16748608) + var35.name, 20, var37.id, var24, var14); - } + for (var15 = 0; var15 < var12.intArgumentCount; ++var15) { + var13[var15] = Interpreter.Interpreter_intStack[var15 + (GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - var12.intArgumentCount)]; } - GameObject.insertMenuItemNoShift("Examine", AbstractArchive.colorStartTag(16748608) + var35.name, 1004, var37.id, var24, var14); + for (var15 = 0; var15 < var12.stringArgumentCount; ++var15) { + var14[var15] = Interpreter.Interpreter_stringStack[var15 + (class43.Interpreter_stringStackSize - var12.stringArgumentCount)]; + } + + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= var12.intArgumentCount; + class43.Interpreter_stringStackSize -= var12.stringArgumentCount; + ScriptFrame var19 = new ScriptFrame(); + var19.script = var3; + var19.pc = var17; + var19.intLocals = Frames.Interpreter_intLocals; + var19.stringLocals = LoginScreenAnimation.Interpreter_stringLocals; + Interpreter.Interpreter_frames[++Interpreter.Interpreter_frameDepth - 1] = var19; + var3 = var12; + var5 = var12.opcodes; + var6 = var12.intOperands; + var17 = -1; + Frames.Interpreter_intLocals = var13; + LoginScreenAnimation.Interpreter_stringLocals = var14; } } } + } catch (Exception var27) { + StringBuilder var24 = new StringBuilder(30); + var24.append("").append(var3.key).append(" "); + + for (var10 = Interpreter.Interpreter_frameDepth - 1; var10 >= 0; --var10) { + var24.append("").append(Interpreter.Interpreter_frames[var10].script.key).append(" "); + } + + var24.append("").append(var7); + Calendar.RunException_sendStackTrace(var24.toString(), var27); + } + } finally { + if (Interpreter.field1093) { + Interpreter.field1087 = true; + Actor.method1756(); + Interpreter.field1087 = false; + Interpreter.field1093 = false; + } + + } + } + } + + @ObfuscatedName("z") + @ObfuscatedSignature( + signature = "(Lkj;II)V", + garbageValue = "1585697176" + ) + @Export("readPlayerUpdate") + static void readPlayerUpdate(PacketBuffer var0, int var1) { + boolean var2 = var0.readBits(1) == 1; + if (var2) { + Players.Players_pendingUpdateIndices[++Players.Players_pendingUpdateCount - 1] = var1; + } + + int var3 = var0.readBits(2); + Player var4 = Client.players[var1]; + if (var3 == 0) { + if (var2) { + var4.field630 = false; + } else if (Client.localPlayerIndex == var1) { + throw new RuntimeException(); + } else { + Players.Players_regions[var1] = (var4.plane << 28) + (class51.baseX * 64 + var4.pathX[0] >> 13 << 14) + (VarcInt.baseY * 64 + var4.pathY[0] >> 13); + if (var4.field965 != -1) { + Players.Players_orientations[var1] = var4.field965; + } else { + Players.Players_orientations[var1] = var4.orientation; + } + + Players.Players_targetIndices[var1] = var4.targetIndex; + Client.players[var1] = null; + if (var0.readBits(1) != 0) { + Client.updateExternalPlayer(var0, var1); + } + + } + } else { + int var5; + int var6; + int var7; + if (var3 == 1) { + var5 = var0.readBits(3); + var6 = var4.pathX[0]; + var7 = var4.pathY[0]; + if (var5 == 0) { + --var6; + --var7; + } else if (var5 == 1) { + --var7; + } else if (var5 == 2) { + ++var6; + --var7; + } else if (var5 == 3) { + --var6; + } else if (var5 == 4) { + ++var6; + } else if (var5 == 5) { + --var6; + ++var7; + } else if (var5 == 6) { + ++var7; + } else if (var5 == 7) { + ++var6; + ++var7; + } + + if (Client.localPlayerIndex == var1 && (var4.x < 1536 || var4.y < 1536 || var4.x >= 11776 || var4.y >= 11776)) { + var4.resetPath(var6, var7); + var4.field630 = false; + } else if (var2) { + var4.field630 = true; + var4.tileX = var6; + var4.tileY = var7; + } else { + var4.field630 = false; + var4.method1255(var6, var7, Players.field1247[var1]); + } + + } else if (var3 == 2) { + var5 = var0.readBits(4); + var6 = var4.pathX[0]; + var7 = var4.pathY[0]; + if (var5 == 0) { + var6 -= 2; + var7 -= 2; + } else if (var5 == 1) { + --var6; + var7 -= 2; + } else if (var5 == 2) { + var7 -= 2; + } else if (var5 == 3) { + ++var6; + var7 -= 2; + } else if (var5 == 4) { + var6 += 2; + var7 -= 2; + } else if (var5 == 5) { + var6 -= 2; + --var7; + } else if (var5 == 6) { + var6 += 2; + --var7; + } else if (var5 == 7) { + var6 -= 2; + } else if (var5 == 8) { + var6 += 2; + } else if (var5 == 9) { + var6 -= 2; + ++var7; + } else if (var5 == 10) { + var6 += 2; + ++var7; + } else if (var5 == 11) { + var6 -= 2; + var7 += 2; + } else if (var5 == 12) { + --var6; + var7 += 2; + } else if (var5 == 13) { + var7 += 2; + } else if (var5 == 14) { + ++var6; + var7 += 2; + } else if (var5 == 15) { + var6 += 2; + var7 += 2; + } + + if (Client.localPlayerIndex == var1 && (var4.x < 1536 || var4.y < 1536 || var4.x >= 11776 || var4.y >= 11776)) { + var4.resetPath(var6, var7); + var4.field630 = false; + } else if (var2) { + var4.field630 = true; + var4.tileX = var6; + var4.tileY = var7; + } else { + var4.field630 = false; + var4.method1255(var6, var7, Players.field1247[var1]); + } + + } else { + var5 = var0.readBits(1); + int var8; + int var9; + int var10; + int var11; + if (var5 == 0) { + var6 = var0.readBits(12); + var7 = var6 >> 10; + var8 = var6 >> 5 & 31; + if (var8 > 15) { + var8 -= 32; + } + + var9 = var6 & 31; + if (var9 > 15) { + var9 -= 32; + } + + var10 = var8 + var4.pathX[0]; + var11 = var9 + var4.pathY[0]; + if (Client.localPlayerIndex == var1 && (var4.x < 1536 || var4.y < 1536 || var4.x >= 11776 || var4.y >= 11776)) { + var4.resetPath(var10, var11); + var4.field630 = false; + } else if (var2) { + var4.field630 = true; + var4.tileX = var10; + var4.tileY = var11; + } else { + var4.field630 = false; + var4.method1255(var10, var11, Players.field1247[var1]); + } + + var4.plane = (byte)(var7 + var4.plane & 3); + if (Client.localPlayerIndex == var1) { + ClientPacket.Client_plane = var4.plane; + } + + } else { + var6 = var0.readBits(30); + var7 = var6 >> 28; + var8 = var6 >> 14 & 16383; + var9 = var6 & 16383; + var10 = (class51.baseX * 64 + var8 + var4.pathX[0] & 16383) - class51.baseX * 64; + var11 = (VarcInt.baseY * 64 + var9 + var4.pathY[0] & 16383) - VarcInt.baseY * 64; + if (Client.localPlayerIndex == var1 && (var4.x < 1536 || var4.y < 1536 || var4.x >= 11776 || var4.y >= 11776)) { + var4.resetPath(var10, var11); + var4.field630 = false; + } else if (var2) { + var4.field630 = true; + var4.tileX = var10; + var4.tileY = var11; + } else { + var4.field630 = false; + var4.method1255(var10, var11, Players.field1247[var1]); + } + + var4.plane = (byte)(var7 + var4.plane & 3); + if (Client.localPlayerIndex == var1) { + ClientPacket.Client_plane = var4.plane; + } + } } } + } - if (var4 != -1L) { - var8 = (int)(var4 >>> 0 & 127L); - int var10 = (int)(var4 >>> 7 & 127L); - Player var12 = Client.players[Client.combatTargetPlayerIndex]; - class40.addPlayerToMenu(var12, Client.combatTargetPlayerIndex, var8, var10); + @ObfuscatedName("p") + @ObfuscatedSignature( + signature = "(I)V", + garbageValue = "1138794576" + ) + public static void method154() { + FloorOverlayDefinition.FloorOverlayDefinition_cached.clear(); + } + + @ObfuscatedName("e") + @ObfuscatedSignature( + signature = "(B)V", + garbageValue = "121" + ) + static final void method145() { + WorldMapSection2.method347("Your ignore list is full. Max of 100 for free users, and 400 for members"); + } + + @ObfuscatedName("fg") + @ObfuscatedSignature( + signature = "(I)V", + garbageValue = "1975621391" + ) + static final void method157() { + if (Client.field867 != ClientPacket.Client_plane) { + Client.field867 = ClientPacket.Client_plane; + Client.method1746(ClientPacket.Client_plane); } } diff --git a/runescape-client/src/main/java/GrandExchangeOfferOwnWorldComparator.java b/runescape-client/src/main/java/GrandExchangeOfferOwnWorldComparator.java index 80f5c5b3a3..e9da4da017 100644 --- a/runescape-client/src/main/java/GrandExchangeOfferOwnWorldComparator.java +++ b/runescape-client/src/main/java/GrandExchangeOfferOwnWorldComparator.java @@ -1,32 +1,46 @@ import java.util.Comparator; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; +import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("bm") +@ObfuscatedName("bw") @Implements("GrandExchangeOfferOwnWorldComparator") public class GrandExchangeOfferOwnWorldComparator implements Comparator { - @ObfuscatedName("gs") - @Export("regions") - static int[] regions; - @ObfuscatedName("gb") - @ObfuscatedSignature( - signature = "[Llx;" + @ObfuscatedName("qx") + @ObfuscatedGetter( + intValue = 785039360 ) - @Export("mapMarkerSprites") - static Sprite[] mapMarkerSprites; - @ObfuscatedName("a") + static int field639; + @ObfuscatedName("i") + @ObfuscatedSignature( + signature = "Lez;" + ) + @Export("World_request") + static UrlRequest World_request; + @ObfuscatedName("t") + @ObfuscatedGetter( + intValue = 1039309317 + ) + @Export("loginBoxCenter") + static int loginBoxCenter; + @ObfuscatedName("aa") + @ObfuscatedSignature( + signature = "Llw;" + ) + static Bounds field638; + @ObfuscatedName("u") @Export("filterWorlds") boolean filterWorlds; GrandExchangeOfferOwnWorldComparator() { } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Lo;Lo;B)I", - garbageValue = "68" + signature = "(Ly;Ly;I)I", + garbageValue = "415242896" ) @Export("compare_bridged") int compare_bridged(GrandExchangeEvent var1, GrandExchangeEvent var2) { @@ -47,913 +61,464 @@ public class GrandExchangeOfferOwnWorldComparator implements Comparator { } } - public int compare(Object var1, Object var2) { - return this.compare_bridged((GrandExchangeEvent)var1, (GrandExchangeEvent)var2); - } - public boolean equals(Object var1) { return super.equals(var1); } - @ObfuscatedName("a") + public int compare(Object var1, Object var2) { + return this.compare_bridged((GrandExchangeEvent)var1, (GrandExchangeEvent)var2); + } + + @ObfuscatedName("fj") @ObfuscatedSignature( - signature = "(II)Lid;", - garbageValue = "-1586537881" + signature = "(I)V", + garbageValue = "-2027936966" ) - @Export("StructDefinition_getStructDefinition") - public static StructDefinition StructDefinition_getStructDefinition(int var0) { - StructDefinition var1 = (StructDefinition)StructDefinition.StructDefinition_cached.get((long)var0); - if (var1 != null) { - return var1; - } else { - byte[] var2 = StructDefinition.StructDefinition_archive.takeFile(34, var0); - var1 = new StructDefinition(); - if (var2 != null) { - var1.decode(new Buffer(var2)); + @Export("load") + static void load() { + int var0; + if (Client.titleLoadingStage == 0) { + class2.scene = new Scene(4, 104, 104, Tiles.Tiles_heights); + + for (var0 = 0; var0 < 4; ++var0) { + Client.collisionMaps[var0] = new CollisionMap(104, 104); } - var1.postDecode(); - StructDefinition.StructDefinition_cached.put(var1, (long)var0); - return var1; - } - } + Interpreter.sceneMinimapSprite = new Sprite(512, 512); + Login.Login_loadingText = "Starting game engine..."; + Login.Login_loadingPercent = 5; + Client.titleLoadingStage = 20; + } else if (Client.titleLoadingStage == 20) { + Login.Login_loadingText = "Prepared visibility map"; + Login.Login_loadingPercent = 10; + Client.titleLoadingStage = 30; + } else if (Client.titleLoadingStage == 30) { + GrandExchangeOfferAgeComparator.archive0 = GameShell.newArchive(0, false, true, true); + class43.archive1 = GameShell.newArchive(1, false, true, true); + class288.archive2 = GameShell.newArchive(2, true, false, true); + WorldMapID.archive3 = GameShell.newArchive(3, false, true, true); + SpriteMask.archive4 = GameShell.newArchive(4, false, true, true); + DirectByteArrayCopier.archive5 = GameShell.newArchive(5, true, true, true); + AbstractWorldMapData.archive6 = GameShell.newArchive(6, true, true, true); + ClientPacket.archive7 = GameShell.newArchive(7, false, true, true); + WorldMapRegion.archive8 = GameShell.newArchive(8, false, true, true); + class2.archive9 = GameShell.newArchive(9, false, true, true); + class81.archive10 = GameShell.newArchive(10, false, true, true); + ScriptFrame.archive11 = GameShell.newArchive(11, false, true, true); + class267.archive12 = GameShell.newArchive(12, false, true, true); + class269.archive13 = GameShell.newArchive(13, true, false, true); + class162.archive14 = GameShell.newArchive(14, false, true, true); + class210.archive15 = GameShell.newArchive(15, false, true, true); + AbstractWorldMapIcon.archive17 = GameShell.newArchive(17, true, true, true); + UserComparator9.archive18 = GameShell.newArchive(18, false, true, true); + class13.archive19 = GameShell.newArchive(19, false, true, true); + class60.archive20 = GameShell.newArchive(20, false, true, true); + Login.Login_loadingText = "Connecting to update server"; + Login.Login_loadingPercent = 20; + Client.titleLoadingStage = 40; + } else if (Client.titleLoadingStage == 40) { + byte var30 = 0; + var0 = var30 + GrandExchangeOfferAgeComparator.archive0.percentage() * 4 / 100; + var0 += class43.archive1.percentage() * 4 / 100; + var0 += class288.archive2.percentage() * 2 / 100; + var0 += WorldMapID.archive3.percentage() * 2 / 100; + var0 += SpriteMask.archive4.percentage() * 6 / 100; + var0 += DirectByteArrayCopier.archive5.percentage() * 4 / 100; + var0 += AbstractWorldMapData.archive6.percentage() * 2 / 100; + var0 += ClientPacket.archive7.percentage() * 56 / 100; + var0 += WorldMapRegion.archive8.percentage() * 2 / 100; + var0 += class2.archive9.percentage() * 2 / 100; + var0 += class81.archive10.percentage() * 2 / 100; + var0 += ScriptFrame.archive11.percentage() * 2 / 100; + var0 += class267.archive12.percentage() * 2 / 100; + var0 += class269.archive13.percentage() * 2 / 100; + var0 += class162.archive14.percentage() * 2 / 100; + var0 += class210.archive15.percentage() * 2 / 100; + var0 += class13.archive19.percentage() / 100; + var0 += UserComparator9.archive18.percentage() / 100; + var0 += class60.archive20.percentage() / 100; + var0 += AbstractWorldMapIcon.archive17.method4345() && AbstractWorldMapIcon.archive17.isFullyLoaded() ? 1 : 0; + if (var0 != 100) { + if (var0 != 0) { + Login.Login_loadingText = "Checking for updates - " + var0 + "%"; + } - @ObfuscatedName("i") - @ObfuscatedSignature( - signature = "(B)Z", - garbageValue = "26" - ) - static final boolean method1376() { - return ViewportMouse.ViewportMouse_isInViewport; - } - - @ObfuscatedName("io") - @ObfuscatedSignature( - signature = "(IIIILjava/lang/String;Ljava/lang/String;III)V", - garbageValue = "1191285249" - ) - @Export("menuAction") - static final void menuAction(int var0, int var1, int var2, int var3, String var4, String var5, int var6, int var7) { - if (var2 >= 2000) { - var2 -= 2000; - } - - PacketBufferNode var8; - if (var2 == 1) { - Client.mouseCrossX = var6; - Client.mouseCrossY = var7; - Client.mouseCrossColor = 2; - Client.mouseCrossState = 0; - Client.destinationX = var0; - Client.destinationY = var1; - var8 = SoundSystem.getPacketBufferNode(ClientPacket.field2249, Client.packetWriter.isaacCipher); - var8.packetBuffer.writeShort(var3); - var8.packetBuffer.writeByte(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); - var8.packetBuffer.writeShortLE(Occluder.selectedItemId); - var8.packetBuffer.method5643(UserComparator8.baseX * 64 + var0); - var8.packetBuffer.writeInt(MidiPcmStream.selectedItemWidget); - var8.packetBuffer.method5643(HealthBar.baseY * 64 + var1); - var8.packetBuffer.method5644(MouseRecorder.selectedItemSlot); - Client.packetWriter.addNode(var8); - } else if (var2 == 2) { - Client.mouseCrossX = var6; - Client.mouseCrossY = var7; - Client.mouseCrossColor = 2; - Client.mouseCrossState = 0; - Client.destinationX = var0; - Client.destinationY = var1; - var8 = SoundSystem.getPacketBufferNode(ClientPacket.field2223, Client.packetWriter.isaacCipher); - var8.packetBuffer.writeShortLE(HealthBar.baseY * 64 + var1); - var8.packetBuffer.writeShort(var3); - var8.packetBuffer.writeShortLE(UserComparator8.baseX * 64 + var0); - var8.packetBuffer.writeByte(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); - var8.packetBuffer.writeShort(Client.selectedSpellChildIndex); - var8.packetBuffer.writeInt(Clock.selectedSpellWidget); - Client.packetWriter.addNode(var8); - } else if (var2 == 3) { - Client.mouseCrossX = var6; - Client.mouseCrossY = var7; - Client.mouseCrossColor = 2; - Client.mouseCrossState = 0; - Client.destinationX = var0; - Client.destinationY = var1; - var8 = SoundSystem.getPacketBufferNode(ClientPacket.field2270, Client.packetWriter.isaacCipher); - var8.packetBuffer.writeShortLE(UserComparator8.baseX * 64 + var0); - var8.packetBuffer.writeShortLE(HealthBar.baseY * 64 + var1); - var8.packetBuffer.method5643(var3); - var8.packetBuffer.writeByte(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); - Client.packetWriter.addNode(var8); - } else if (var2 == 4) { - Client.mouseCrossX = var6; - Client.mouseCrossY = var7; - Client.mouseCrossColor = 2; - Client.mouseCrossState = 0; - Client.destinationX = var0; - Client.destinationY = var1; - var8 = SoundSystem.getPacketBufferNode(ClientPacket.field2278, Client.packetWriter.isaacCipher); - var8.packetBuffer.method5644(UserComparator8.baseX * 64 + var0); - var8.packetBuffer.method5634(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); - var8.packetBuffer.writeShortLE(var3); - var8.packetBuffer.method5644(HealthBar.baseY * 64 + var1); - Client.packetWriter.addNode(var8); - } else if (var2 == 5) { - Client.mouseCrossX = var6; - Client.mouseCrossY = var7; - Client.mouseCrossColor = 2; - Client.mouseCrossState = 0; - Client.destinationX = var0; - Client.destinationY = var1; - var8 = SoundSystem.getPacketBufferNode(ClientPacket.field2192, Client.packetWriter.isaacCipher); - var8.packetBuffer.method5636(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); - var8.packetBuffer.writeShortLE(UserComparator8.baseX * 64 + var0); - var8.packetBuffer.writeShortLE(HealthBar.baseY * 64 + var1); - var8.packetBuffer.writeShortLE(var3); - Client.packetWriter.addNode(var8); - } else if (var2 == 6) { - Client.mouseCrossX = var6; - Client.mouseCrossY = var7; - Client.mouseCrossColor = 2; - Client.mouseCrossState = 0; - Client.destinationX = var0; - Client.destinationY = var1; - var8 = SoundSystem.getPacketBufferNode(ClientPacket.field2240, Client.packetWriter.isaacCipher); - var8.packetBuffer.method5643(UserComparator8.baseX * 64 + var0); - var8.packetBuffer.method5643(var3); - var8.packetBuffer.method5643(HealthBar.baseY * 64 + var1); - var8.packetBuffer.method5635(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); - Client.packetWriter.addNode(var8); + Login.Login_loadingPercent = 30; + } else { + class266.method5064(GrandExchangeOfferAgeComparator.archive0, "Animations"); + class266.method5064(class43.archive1, "Skeletons"); + class266.method5064(SpriteMask.archive4, "Sound FX"); + class266.method5064(DirectByteArrayCopier.archive5, "Maps"); + class266.method5064(AbstractWorldMapData.archive6, "Music Tracks"); + class266.method5064(ClientPacket.archive7, "Models"); + class266.method5064(WorldMapRegion.archive8, "Sprites"); + class266.method5064(ScriptFrame.archive11, "Music Jingles"); + class266.method5064(class162.archive14, "Music Samples"); + class266.method5064(class210.archive15, "Music Patches"); + class266.method5064(class13.archive19, "World Map"); + class266.method5064(UserComparator9.archive18, "World Map Geography"); + class266.method5064(class60.archive20, "World Map Ground"); + Actor.spriteIds = new GraphicsDefaults(); + Actor.spriteIds.decode(AbstractWorldMapIcon.archive17); + Login.Login_loadingText = "Loaded update list"; + Login.Login_loadingPercent = 30; + Client.titleLoadingStage = 45; + } + } else if (Client.titleLoadingStage == 45) { + GrandExchangeOfferAgeComparator.method170(22050, !Client.isLowDetail, 2); + MidiPcmStream var33 = new MidiPcmStream(); + var33.method3775(9, 128); + MenuAction.pcmPlayer0 = HealthBarUpdate.method1776(GameShell.taskHandler, 0, 22050); + MenuAction.pcmPlayer0.setStream(var33); + BuddyRankComparator.method3483(class210.archive15, class162.archive14, SpriteMask.archive4, var33); + class60.pcmPlayer1 = HealthBarUpdate.method1776(GameShell.taskHandler, 1, 2048); + ClientPacket.pcmStreamMixer = new PcmStreamMixer(); + class60.pcmPlayer1.setStream(ClientPacket.pcmStreamMixer); + LoginScreenAnimation.decimator = new Decimator(22050, Messages.PcmPlayer_sampleRate); + Login.Login_loadingText = "Prepared sound engine"; + Login.Login_loadingPercent = 35; + Client.titleLoadingStage = 50; + WorldMapID.WorldMapElement_fonts = new Fonts(WorldMapRegion.archive8, class269.archive13); } else { - PacketBufferNode var9; - NPC var13; - if (var2 == 7) { - var13 = Client.npcs[var3]; - if (var13 != null) { - Client.mouseCrossX = var6; - Client.mouseCrossY = var7; - Client.mouseCrossColor = 2; - Client.mouseCrossState = 0; - Client.destinationX = var0; - Client.destinationY = var1; - var9 = SoundSystem.getPacketBufferNode(ClientPacket.field2233, Client.packetWriter.isaacCipher); - var9.packetBuffer.writeShortLE(Occluder.selectedItemId); - var9.packetBuffer.method5636(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); - var9.packetBuffer.writeShortLE(var3); - var9.packetBuffer.writeShortLE(MouseRecorder.selectedItemSlot); - var9.packetBuffer.writeIntME(MidiPcmStream.selectedItemWidget); - Client.packetWriter.addNode(var9); - } - } else if (var2 == 8) { - var13 = Client.npcs[var3]; - if (var13 != null) { - Client.mouseCrossX = var6; - Client.mouseCrossY = var7; - Client.mouseCrossColor = 2; - Client.mouseCrossState = 0; - Client.destinationX = var0; - Client.destinationY = var1; - var9 = SoundSystem.getPacketBufferNode(ClientPacket.field2217, Client.packetWriter.isaacCipher); - var9.packetBuffer.method5643(var3); - var9.packetBuffer.method5644(Client.selectedSpellChildIndex); - var9.packetBuffer.method5655(Clock.selectedSpellWidget); - var9.packetBuffer.writeByte(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); - Client.packetWriter.addNode(var9); - } - } else if (var2 == 9) { - var13 = Client.npcs[var3]; - if (var13 != null) { - Client.mouseCrossX = var6; - Client.mouseCrossY = var7; - Client.mouseCrossColor = 2; - Client.mouseCrossState = 0; - Client.destinationX = var0; - Client.destinationY = var1; - var9 = SoundSystem.getPacketBufferNode(ClientPacket.field2181, Client.packetWriter.isaacCipher); - var9.packetBuffer.method5643(var3); - var9.packetBuffer.method5636(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); - Client.packetWriter.addNode(var9); - } - } else if (var2 == 10) { - var13 = Client.npcs[var3]; - if (var13 != null) { - Client.mouseCrossX = var6; - Client.mouseCrossY = var7; - Client.mouseCrossColor = 2; - Client.mouseCrossState = 0; - Client.destinationX = var0; - Client.destinationY = var1; - var9 = SoundSystem.getPacketBufferNode(ClientPacket.field2272, Client.packetWriter.isaacCipher); - var9.packetBuffer.writeShortLE(var3); - var9.packetBuffer.method5635(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); - Client.packetWriter.addNode(var9); - } - } else if (var2 == 11) { - var13 = Client.npcs[var3]; - if (var13 != null) { - Client.mouseCrossX = var6; - Client.mouseCrossY = var7; - Client.mouseCrossColor = 2; - Client.mouseCrossState = 0; - Client.destinationX = var0; - Client.destinationY = var1; - var9 = SoundSystem.getPacketBufferNode(ClientPacket.field2282, Client.packetWriter.isaacCipher); - var9.packetBuffer.writeByte(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); - var9.packetBuffer.method5643(var3); - Client.packetWriter.addNode(var9); - } - } else if (var2 == 12) { - var13 = Client.npcs[var3]; - if (var13 != null) { - Client.mouseCrossX = var6; - Client.mouseCrossY = var7; - Client.mouseCrossColor = 2; - Client.mouseCrossState = 0; - Client.destinationX = var0; - Client.destinationY = var1; - var9 = SoundSystem.getPacketBufferNode(ClientPacket.field2268, Client.packetWriter.isaacCipher); - var9.packetBuffer.writeShort(var3); - var9.packetBuffer.method5636(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); - Client.packetWriter.addNode(var9); - } - } else if (var2 == 13) { - var13 = Client.npcs[var3]; - if (var13 != null) { - Client.mouseCrossX = var6; - Client.mouseCrossY = var7; - Client.mouseCrossColor = 2; - Client.mouseCrossState = 0; - Client.destinationX = var0; - Client.destinationY = var1; - var9 = SoundSystem.getPacketBufferNode(ClientPacket.field2188, Client.packetWriter.isaacCipher); - var9.packetBuffer.method5635(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); - var9.packetBuffer.method5644(var3); - Client.packetWriter.addNode(var9); + int var1; + if (Client.titleLoadingStage == 50) { + FontName[] var32 = new FontName[]{FontName.FontName_verdana13, FontName.FontName_bold12, FontName.FontName_verdana11, FontName.FontName_plain12, FontName.FontName_verdana15, FontName.FontName_plain11}; + var1 = var32.length; + Fonts var28 = WorldMapID.WorldMapElement_fonts; + FontName[] var27 = new FontName[]{FontName.FontName_verdana13, FontName.FontName_bold12, FontName.FontName_verdana11, FontName.FontName_plain12, FontName.FontName_verdana15, FontName.FontName_plain11}; + Client.fontsMap = var28.createMap(var27); + if (Client.fontsMap.size() < var1) { + Login.Login_loadingText = "Loading fonts - " + Client.fontsMap.size() * 100 / var1 + "%"; + Login.Login_loadingPercent = 40; + } else { + AttackOption.fontPlain11 = (Font)Client.fontsMap.get(FontName.FontName_plain11); + Player.fontPlain12 = (Font)Client.fontsMap.get(FontName.FontName_plain12); + JagexCache.fontBold12 = (Font)Client.fontsMap.get(FontName.FontName_bold12); + NPC.platformInfo = Client.platformInfoProvider.get(); + Login.Login_loadingText = "Loaded fonts"; + Login.Login_loadingPercent = 40; + Client.titleLoadingStage = 60; } } else { - Player var15; - if (var2 == 14) { - var15 = Client.players[var3]; - if (var15 != null) { - Client.mouseCrossX = var6; - Client.mouseCrossY = var7; - Client.mouseCrossColor = 2; - Client.mouseCrossState = 0; - Client.destinationX = var0; - Client.destinationY = var1; - var9 = SoundSystem.getPacketBufferNode(ClientPacket.field2206, Client.packetWriter.isaacCipher); - var9.packetBuffer.method5644(var3); - var9.packetBuffer.method5644(MouseRecorder.selectedItemSlot); - var9.packetBuffer.writeInt(MidiPcmStream.selectedItemWidget); - var9.packetBuffer.method5643(Occluder.selectedItemId); - var9.packetBuffer.method5636(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); - Client.packetWriter.addNode(var9); + Archive var2; + int var23; + Archive var34; + if (Client.titleLoadingStage == 60) { + var34 = class81.archive10; + var2 = WorldMapRegion.archive8; + var23 = 0; + if (var34.tryLoadFileByNames("title.jpg", "")) { + ++var23; } - } else if (var2 == 15) { - var15 = Client.players[var3]; - if (var15 != null) { - Client.mouseCrossX = var6; - Client.mouseCrossY = var7; - Client.mouseCrossColor = 2; - Client.mouseCrossState = 0; - Client.destinationX = var0; - Client.destinationY = var1; - var9 = SoundSystem.getPacketBufferNode(ClientPacket.field2180, Client.packetWriter.isaacCipher); - var9.packetBuffer.method5653(Clock.selectedSpellWidget); - var9.packetBuffer.method5635(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); - var9.packetBuffer.writeShort(var3); - var9.packetBuffer.writeShortLE(Client.selectedSpellChildIndex); - Client.packetWriter.addNode(var9); - } - } else if (var2 == 16) { - Client.mouseCrossX = var6; - Client.mouseCrossY = var7; - Client.mouseCrossColor = 2; - Client.mouseCrossState = 0; - Client.destinationX = var0; - Client.destinationY = var1; - var8 = SoundSystem.getPacketBufferNode(ClientPacket.field2184, Client.packetWriter.isaacCipher); - var8.packetBuffer.method5643(var3); - var8.packetBuffer.writeByte(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); - var8.packetBuffer.method5644(UserComparator8.baseX * 64 + var0); - var8.packetBuffer.method5655(MidiPcmStream.selectedItemWidget); - var8.packetBuffer.writeShort(HealthBar.baseY * 64 + var1); - var8.packetBuffer.method5643(MouseRecorder.selectedItemSlot); - var8.packetBuffer.method5643(Occluder.selectedItemId); - Client.packetWriter.addNode(var8); - } else if (var2 == 17) { - Client.mouseCrossX = var6; - Client.mouseCrossY = var7; - Client.mouseCrossColor = 2; - Client.mouseCrossState = 0; - Client.destinationX = var0; - Client.destinationY = var1; - var8 = SoundSystem.getPacketBufferNode(ClientPacket.field2254, Client.packetWriter.isaacCipher); - var8.packetBuffer.writeShortLE(HealthBar.baseY * 64 + var1); - var8.packetBuffer.method5643(UserComparator8.baseX * 64 + var0); - var8.packetBuffer.method5634(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); - var8.packetBuffer.writeShortLE(var3); - var8.packetBuffer.writeIntME(Clock.selectedSpellWidget); - var8.packetBuffer.writeShort(Client.selectedSpellChildIndex); - Client.packetWriter.addNode(var8); - } else if (var2 == 18) { - Client.mouseCrossX = var6; - Client.mouseCrossY = var7; - Client.mouseCrossColor = 2; - Client.mouseCrossState = 0; - Client.destinationX = var0; - Client.destinationY = var1; - var8 = SoundSystem.getPacketBufferNode(ClientPacket.field2224, Client.packetWriter.isaacCipher); - var8.packetBuffer.method5635(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); - var8.packetBuffer.writeShortLE(UserComparator8.baseX * 64 + var0); - var8.packetBuffer.method5644(var3); - var8.packetBuffer.writeShortLE(HealthBar.baseY * 64 + var1); - Client.packetWriter.addNode(var8); - } else if (var2 == 19) { - Client.mouseCrossX = var6; - Client.mouseCrossY = var7; - Client.mouseCrossColor = 2; - Client.mouseCrossState = 0; - Client.destinationX = var0; - Client.destinationY = var1; - var8 = SoundSystem.getPacketBufferNode(ClientPacket.field2269, Client.packetWriter.isaacCipher); - var8.packetBuffer.method5644(var3); - var8.packetBuffer.method5644(UserComparator8.baseX * 64 + var0); - var8.packetBuffer.writeShort(HealthBar.baseY * 64 + var1); - var8.packetBuffer.writeByte(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); - Client.packetWriter.addNode(var8); - } else if (var2 == 20) { - Client.mouseCrossX = var6; - Client.mouseCrossY = var7; - Client.mouseCrossColor = 2; - Client.mouseCrossState = 0; - Client.destinationX = var0; - Client.destinationY = var1; - var8 = SoundSystem.getPacketBufferNode(ClientPacket.field2244, Client.packetWriter.isaacCipher); - var8.packetBuffer.writeShort(var3); - var8.packetBuffer.method5636(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); - var8.packetBuffer.writeShort(HealthBar.baseY * 64 + var1); - var8.packetBuffer.method5643(UserComparator8.baseX * 64 + var0); - Client.packetWriter.addNode(var8); - } else if (var2 == 21) { - Client.mouseCrossX = var6; - Client.mouseCrossY = var7; - Client.mouseCrossColor = 2; - Client.mouseCrossState = 0; - Client.destinationX = var0; - Client.destinationY = var1; - var8 = SoundSystem.getPacketBufferNode(ClientPacket.field2208, Client.packetWriter.isaacCipher); - var8.packetBuffer.writeByte(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); - var8.packetBuffer.method5644(var3); - var8.packetBuffer.method5644(UserComparator8.baseX * 64 + var0); - var8.packetBuffer.method5644(HealthBar.baseY * 64 + var1); - Client.packetWriter.addNode(var8); - } else if (var2 == 22) { - Client.mouseCrossX = var6; - Client.mouseCrossY = var7; - Client.mouseCrossColor = 2; - Client.mouseCrossState = 0; - Client.destinationX = var0; - Client.destinationY = var1; - var8 = SoundSystem.getPacketBufferNode(ClientPacket.field2200, Client.packetWriter.isaacCipher); - var8.packetBuffer.method5644(UserComparator8.baseX * 64 + var0); - var8.packetBuffer.writeByte(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); - var8.packetBuffer.method5643(HealthBar.baseY * 64 + var1); - var8.packetBuffer.method5643(var3); - Client.packetWriter.addNode(var8); - } else if (var2 == 23) { - if (Client.isMenuOpen) { - WorldMapArea.scene.setViewportWalking(); - } else { - WorldMapArea.scene.menuOpen(Player.Client_plane, var0, var1, true); - } - } else { - PacketBufferNode var11; - Widget var16; - if (var2 == 24) { - var16 = PacketBufferNode.getWidget(var1); - boolean var12 = true; - if (var16.contentType > 0) { - var12 = WorldMapIcon_0.method237(var16); - } - if (var12) { - var11 = SoundSystem.getPacketBufferNode(ClientPacket.field2252, Client.packetWriter.isaacCipher); - var11.packetBuffer.writeInt(var1); - Client.packetWriter.addNode(var11); - } - } else { - if (var2 == 25) { - var16 = ArchiveLoader.getWidgetChild(var1, var0); - if (var16 != null) { - InterfaceParent.Widget_runOnTargetLeave(); - class51.selectSpell(var1, var0, UserComparator5.method3551(class195.getWidgetClickMask(var16)), var16.itemId); - Client.isItemSelected = 0; - Client.selectedSpellActionName = SoundCache.method2666(var16); - if (Client.selectedSpellActionName == null) { - Client.selectedSpellActionName = "null"; - } + if (var2.tryLoadFileByNames("logo", "")) { + ++var23; + } - if (var16.isIf3) { - Client.selectedSpellName = var16.dataText + AbstractArchive.colorStartTag(16777215); - } else { - Client.selectedSpellName = AbstractArchive.colorStartTag(65280) + var16.spellName + AbstractArchive.colorStartTag(16777215); + if (var2.tryLoadFileByNames("logo_deadman_mode", "")) { + ++var23; + } + + if (var2.tryLoadFileByNames("logo_seasonal_mode", "")) { + ++var23; + } + + if (var2.tryLoadFileByNames("titlebox", "")) { + ++var23; + } + + if (var2.tryLoadFileByNames("titlebutton", "")) { + ++var23; + } + + if (var2.tryLoadFileByNames("runes", "")) { + ++var23; + } + + if (var2.tryLoadFileByNames("title_mute", "")) { + ++var23; + } + + if (var2.tryLoadFileByNames("options_radio_buttons,0", "")) { + ++var23; + } + + if (var2.tryLoadFileByNames("options_radio_buttons,2", "")) { + ++var23; + } + + if (var2.tryLoadFileByNames("options_radio_buttons,4", "")) { + ++var23; + } + + if (var2.tryLoadFileByNames("options_radio_buttons,6", "")) { + ++var23; + } + + var2.tryLoadFileByNames("sl_back", ""); + var2.tryLoadFileByNames("sl_flags", ""); + var2.tryLoadFileByNames("sl_arrows", ""); + var2.tryLoadFileByNames("sl_stars", ""); + var2.tryLoadFileByNames("sl_button", ""); + byte var29 = 12; + if (var23 < var29) { + Login.Login_loadingText = "Loading title screen - " + var23 * 100 / var29 + "%"; + Login.Login_loadingPercent = 50; + } else { + Login.Login_loadingText = "Loaded title screen"; + Login.Login_loadingPercent = 50; + class81.updateGameState(5); + Client.titleLoadingStage = 70; + } + } else if (Client.titleLoadingStage == 70) { + if (!class288.archive2.isFullyLoaded()) { + Login.Login_loadingText = "Loading config - " + class288.archive2.loadPercent() + "%"; + Login.Login_loadingPercent = 60; + } else { + Archive var31 = class288.archive2; + FloorOverlayDefinition.FloorOverlayDefinition_archive = var31; + var34 = class288.archive2; + FloorUnderlayDefinition.FloorUnderlayDefinition_archive = var34; + CollisionMap.method3615(class288.archive2, ClientPacket.archive7); + AbstractWorldMapIcon.method625(class288.archive2, ClientPacket.archive7, Client.isLowDetail); + var2 = class288.archive2; + Archive var3 = ClientPacket.archive7; + NPCDefinition.NpcDefinition_archive = var2; + NPCDefinition.NpcDefinition_modelArchive = var3; + NetFileRequest.method4230(class288.archive2); + SoundSystem.method2529(class288.archive2, ClientPacket.archive7, Client.isMembersWorld, AttackOption.fontPlain11); + class83.method2090(class288.archive2, GrandExchangeOfferAgeComparator.archive0, class43.archive1); + Archive var24 = class288.archive2; + Archive var25 = ClientPacket.archive7; + SpotAnimationDefinition.SpotAnimationDefinition_archive = var24; + SpotAnimationDefinition.SpotAnimationDefinition_modelArchive = var25; + class185.method3665(class288.archive2); + Archive var6 = class288.archive2; + VarpDefinition.VarpDefinition_archive = var6; + VarpDefinition.VarpDefinition_fileCount = VarpDefinition.VarpDefinition_archive.getGroupFileCount(16); + Archive var7 = WorldMapID.archive3; + Archive var8 = ClientPacket.archive7; + Archive var9 = WorldMapRegion.archive8; + Archive var10 = class269.archive13; + InvDefinition.Widget_archive = var7; + FriendLoginUpdate.Widget_modelsArchive = var8; + Widget.Widget_spritesArchive = var9; + Widget.Widget_fontsArchive = var10; + FloorDecoration.Widget_interfaceComponents = new Widget[InvDefinition.Widget_archive.getGroupCount()][]; + Widget.Widget_loadedInterfaces = new boolean[InvDefinition.Widget_archive.getGroupCount()]; + Archive var11 = class288.archive2; + InvDefinition.InvDefinition_archive = var11; + PacketBufferNode.method3679(class288.archive2); + Archive var12 = class288.archive2; + VarcInt.VarcInt_archive = var12; + Archive var13 = class288.archive2; + ParamDefinition.ParamDefinition_archive = var13; + AttackOption.varcs = new Varcs(); + Archive var14 = class288.archive2; + Archive var15 = WorldMapRegion.archive8; + Archive var16 = class269.archive13; + HitSplatDefinition.HitSplatDefinition_archive = var14; + HitSplatDefinition.field3328 = var15; + HitSplatDefinition.HitSplatDefinition_fontsArchive = var16; + Player.method1285(class288.archive2, WorldMapRegion.archive8); + Archive var17 = class288.archive2; + Archive var18 = WorldMapRegion.archive8; + class223.WorldMapElement_archive = var18; + if (var17.isFullyLoaded()) { + WorldMapElement.WorldMapElement_count = var17.getGroupFileCount(35); + WorldMapElement.WorldMapElement_cached = new WorldMapElement[WorldMapElement.WorldMapElement_count]; + + for (int var19 = 0; var19 < WorldMapElement.WorldMapElement_count; ++var19) { + byte[] var20 = var17.takeFile(35, var19); + WorldMapElement.WorldMapElement_cached[var19] = new WorldMapElement(var19); + if (var20 != null) { + WorldMapElement.WorldMapElement_cached[var19].decode(new Buffer(var20)); + WorldMapElement.WorldMapElement_cached[var19].method4461(); } } - - return; } - if (var2 == 26) { - Skills.method4271(); + Login.Login_loadingText = "Loaded config"; + Login.Login_loadingPercent = 60; + Client.titleLoadingStage = 80; + } + } else if (Client.titleLoadingStage == 80) { + var0 = 0; + if (class40.compass == null) { + class40.compass = class288.SpriteBuffer_getSprite(WorldMapRegion.archive8, Actor.spriteIds.compass, 0); + } else { + ++var0; + } + + if (class225.redHintArrowSprite == null) { + class225.redHintArrowSprite = class288.SpriteBuffer_getSprite(WorldMapRegion.archive8, Actor.spriteIds.field3808, 0); + } else { + ++var0; + } + + IndexedSprite[] var22; + if (GrandExchangeOfferTotalQuantityComparator.mapSceneSprites == null) { + var2 = WorldMapRegion.archive8; + var23 = Actor.spriteIds.mapScenes; + if (!GraphicsObject.method2030(var2, var23, 0)) { + var22 = null; } else { - int var10; - Widget var14; - if (var2 == 28) { - var8 = SoundSystem.getPacketBufferNode(ClientPacket.field2252, Client.packetWriter.isaacCipher); - var8.packetBuffer.writeInt(var1); - Client.packetWriter.addNode(var8); - var14 = PacketBufferNode.getWidget(var1); - if (var14.cs1Instructions != null && var14.cs1Instructions[0][0] == 5) { - var10 = var14.cs1Instructions[0][1]; - Varps.Varps_main[var10] = 1 - Varps.Varps_main[var10]; - WorldMapDecoration.changeGameOptions(var10); - } - } else if (var2 == 29) { - var8 = SoundSystem.getPacketBufferNode(ClientPacket.field2252, Client.packetWriter.isaacCipher); - var8.packetBuffer.writeInt(var1); - Client.packetWriter.addNode(var8); - var14 = PacketBufferNode.getWidget(var1); - if (var14.cs1Instructions != null && var14.cs1Instructions[0][0] == 5) { - var10 = var14.cs1Instructions[0][1]; - if (Varps.Varps_main[var10] != var14.cs1ComparisonValues[0]) { - Varps.Varps_main[var10] = var14.cs1ComparisonValues[0]; - WorldMapDecoration.changeGameOptions(var10); - } - } - } else if (var2 == 30) { - if (Client.meslayerContinueWidget == null) { - Tiles.resumePauseWidget(var1, var0); - Client.meslayerContinueWidget = ArchiveLoader.getWidgetChild(var1, var0); - GrandExchangeOfferAgeComparator.invalidateWidget(Client.meslayerContinueWidget); - } - } else if (var2 == 31) { - var8 = SoundSystem.getPacketBufferNode(ClientPacket.field2242, Client.packetWriter.isaacCipher); - var8.packetBuffer.method5644(var3); - var8.packetBuffer.writeShort(var0); - var8.packetBuffer.method5643(MouseRecorder.selectedItemSlot); - var8.packetBuffer.writeIntME(MidiPcmStream.selectedItemWidget); - var8.packetBuffer.writeShortLE(Occluder.selectedItemId); - var8.packetBuffer.writeInt(var1); - Client.packetWriter.addNode(var8); - Client.field753 = 0; - Login.field1165 = PacketBufferNode.getWidget(var1); - Client.field665 = var0; - } else if (var2 == 32) { - var8 = SoundSystem.getPacketBufferNode(ClientPacket.field2241, Client.packetWriter.isaacCipher); - var8.packetBuffer.method5653(Clock.selectedSpellWidget); - var8.packetBuffer.writeShort(var3); - var8.packetBuffer.writeInt(var1); - var8.packetBuffer.method5643(var0); - var8.packetBuffer.method5643(Client.selectedSpellChildIndex); - Client.packetWriter.addNode(var8); - Client.field753 = 0; - Login.field1165 = PacketBufferNode.getWidget(var1); - Client.field665 = var0; - } else if (var2 == 33) { - var8 = SoundSystem.getPacketBufferNode(ClientPacket.field2260, Client.packetWriter.isaacCipher); - var8.packetBuffer.writeIntME(var1); - var8.packetBuffer.writeShortLE(var0); - var8.packetBuffer.method5644(var3); - Client.packetWriter.addNode(var8); - Client.field753 = 0; - Login.field1165 = PacketBufferNode.getWidget(var1); - Client.field665 = var0; - } else if (var2 == 34) { - var8 = SoundSystem.getPacketBufferNode(ClientPacket.field2237, Client.packetWriter.isaacCipher); - var8.packetBuffer.writeInt(var1); - var8.packetBuffer.writeShortLE(var3); - var8.packetBuffer.method5644(var0); - Client.packetWriter.addNode(var8); - Client.field753 = 0; - Login.field1165 = PacketBufferNode.getWidget(var1); - Client.field665 = var0; - } else if (var2 == 35) { - var8 = SoundSystem.getPacketBufferNode(ClientPacket.field2190, Client.packetWriter.isaacCipher); - var8.packetBuffer.writeShort(var3); - var8.packetBuffer.method5655(var1); - var8.packetBuffer.method5644(var0); - Client.packetWriter.addNode(var8); - Client.field753 = 0; - Login.field1165 = PacketBufferNode.getWidget(var1); - Client.field665 = var0; - } else if (var2 == 36) { - var8 = SoundSystem.getPacketBufferNode(ClientPacket.field2253, Client.packetWriter.isaacCipher); - var8.packetBuffer.writeIntME(var1); - var8.packetBuffer.method5643(var3); - var8.packetBuffer.writeShort(var0); - Client.packetWriter.addNode(var8); - Client.field753 = 0; - Login.field1165 = PacketBufferNode.getWidget(var1); - Client.field665 = var0; - } else if (var2 == 37) { - var8 = SoundSystem.getPacketBufferNode(ClientPacket.field2219, Client.packetWriter.isaacCipher); - var8.packetBuffer.writeIntME(var1); - var8.packetBuffer.method5643(var3); - var8.packetBuffer.method5644(var0); - Client.packetWriter.addNode(var8); - Client.field753 = 0; - Login.field1165 = PacketBufferNode.getWidget(var1); - Client.field665 = var0; - } else { - if (var2 == 38) { - InterfaceParent.Widget_runOnTargetLeave(); - var16 = PacketBufferNode.getWidget(var1); - Client.isItemSelected = 1; - MouseRecorder.selectedItemSlot = var0; - MidiPcmStream.selectedItemWidget = var1; - Occluder.selectedItemId = var3; - GrandExchangeOfferAgeComparator.invalidateWidget(var16); - Client.selectedItemName = AbstractArchive.colorStartTag(16748608) + class222.ItemDefinition_get(var3).name + AbstractArchive.colorStartTag(16777215); - if (Client.selectedItemName == null) { - Client.selectedItemName = "null"; - } - - return; - } - - if (var2 == 39) { - var8 = SoundSystem.getPacketBufferNode(ClientPacket.field2196, Client.packetWriter.isaacCipher); - var8.packetBuffer.writeShortLE(var3); - var8.packetBuffer.writeShort(var0); - var8.packetBuffer.method5655(var1); - Client.packetWriter.addNode(var8); - Client.field753 = 0; - Login.field1165 = PacketBufferNode.getWidget(var1); - Client.field665 = var0; - } else if (var2 == 40) { - var8 = SoundSystem.getPacketBufferNode(ClientPacket.field2258, Client.packetWriter.isaacCipher); - var8.packetBuffer.writeShort(var3); - var8.packetBuffer.writeIntME(var1); - var8.packetBuffer.writeShort(var0); - Client.packetWriter.addNode(var8); - Client.field753 = 0; - Login.field1165 = PacketBufferNode.getWidget(var1); - Client.field665 = var0; - } else if (var2 == 41) { - var8 = SoundSystem.getPacketBufferNode(ClientPacket.field2194, Client.packetWriter.isaacCipher); - var8.packetBuffer.writeShort(var0); - var8.packetBuffer.method5655(var1); - var8.packetBuffer.writeShortLE(var3); - Client.packetWriter.addNode(var8); - Client.field753 = 0; - Login.field1165 = PacketBufferNode.getWidget(var1); - Client.field665 = var0; - } else if (var2 == 42) { - var8 = SoundSystem.getPacketBufferNode(ClientPacket.field2211, Client.packetWriter.isaacCipher); - var8.packetBuffer.method5655(var1); - var8.packetBuffer.writeShort(var0); - var8.packetBuffer.writeShortLE(var3); - Client.packetWriter.addNode(var8); - Client.field753 = 0; - Login.field1165 = PacketBufferNode.getWidget(var1); - Client.field665 = var0; - } else if (var2 == 43) { - var8 = SoundSystem.getPacketBufferNode(ClientPacket.field2215, Client.packetWriter.isaacCipher); - var8.packetBuffer.writeShort(var3); - var8.packetBuffer.writeIntME(var1); - var8.packetBuffer.method5644(var0); - Client.packetWriter.addNode(var8); - Client.field753 = 0; - Login.field1165 = PacketBufferNode.getWidget(var1); - Client.field665 = var0; - } else if (var2 == 44) { - var15 = Client.players[var3]; - if (var15 != null) { - Client.mouseCrossX = var6; - Client.mouseCrossY = var7; - Client.mouseCrossColor = 2; - Client.mouseCrossState = 0; - Client.destinationX = var0; - Client.destinationY = var1; - var9 = SoundSystem.getPacketBufferNode(ClientPacket.field2193, Client.packetWriter.isaacCipher); - var9.packetBuffer.writeShort(var3); - var9.packetBuffer.writeByte(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); - Client.packetWriter.addNode(var9); - } - } else if (var2 == 45) { - var15 = Client.players[var3]; - if (var15 != null) { - Client.mouseCrossX = var6; - Client.mouseCrossY = var7; - Client.mouseCrossColor = 2; - Client.mouseCrossState = 0; - Client.destinationX = var0; - Client.destinationY = var1; - var9 = SoundSystem.getPacketBufferNode(ClientPacket.field2234, Client.packetWriter.isaacCipher); - var9.packetBuffer.method5636(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); - var9.packetBuffer.method5643(var3); - Client.packetWriter.addNode(var9); - } - } else if (var2 == 46) { - var15 = Client.players[var3]; - if (var15 != null) { - Client.mouseCrossX = var6; - Client.mouseCrossY = var7; - Client.mouseCrossColor = 2; - Client.mouseCrossState = 0; - Client.destinationX = var0; - Client.destinationY = var1; - var9 = SoundSystem.getPacketBufferNode(ClientPacket.field2225, Client.packetWriter.isaacCipher); - var9.packetBuffer.method5634(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); - var9.packetBuffer.writeShortLE(var3); - Client.packetWriter.addNode(var9); - } - } else if (var2 == 47) { - var15 = Client.players[var3]; - if (var15 != null) { - Client.mouseCrossX = var6; - Client.mouseCrossY = var7; - Client.mouseCrossColor = 2; - Client.mouseCrossState = 0; - Client.destinationX = var0; - Client.destinationY = var1; - var9 = SoundSystem.getPacketBufferNode(ClientPacket.field2229, Client.packetWriter.isaacCipher); - var9.packetBuffer.writeShortLE(var3); - var9.packetBuffer.method5634(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); - Client.packetWriter.addNode(var9); - } - } else if (var2 == 48) { - var15 = Client.players[var3]; - if (var15 != null) { - Client.mouseCrossX = var6; - Client.mouseCrossY = var7; - Client.mouseCrossColor = 2; - Client.mouseCrossState = 0; - Client.destinationX = var0; - Client.destinationY = var1; - var9 = SoundSystem.getPacketBufferNode(ClientPacket.field2231, Client.packetWriter.isaacCipher); - var9.packetBuffer.method5636(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); - var9.packetBuffer.method5644(var3); - Client.packetWriter.addNode(var9); - } - } else if (var2 == 49) { - var15 = Client.players[var3]; - if (var15 != null) { - Client.mouseCrossX = var6; - Client.mouseCrossY = var7; - Client.mouseCrossColor = 2; - Client.mouseCrossState = 0; - Client.destinationX = var0; - Client.destinationY = var1; - var9 = SoundSystem.getPacketBufferNode(ClientPacket.field2236, Client.packetWriter.isaacCipher); - var9.packetBuffer.method5635(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); - var9.packetBuffer.writeShort(var3); - Client.packetWriter.addNode(var9); - } - } else if (var2 == 50) { - var15 = Client.players[var3]; - if (var15 != null) { - Client.mouseCrossX = var6; - Client.mouseCrossY = var7; - Client.mouseCrossColor = 2; - Client.mouseCrossState = 0; - Client.destinationX = var0; - Client.destinationY = var1; - var9 = SoundSystem.getPacketBufferNode(ClientPacket.field2251, Client.packetWriter.isaacCipher); - var9.packetBuffer.method5643(var3); - var9.packetBuffer.writeByte(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); - Client.packetWriter.addNode(var9); - } - } else if (var2 == 51) { - var15 = Client.players[var3]; - if (var15 != null) { - Client.mouseCrossX = var6; - Client.mouseCrossY = var7; - Client.mouseCrossColor = 2; - Client.mouseCrossState = 0; - Client.destinationX = var0; - Client.destinationY = var1; - var9 = SoundSystem.getPacketBufferNode(ClientPacket.field2235, Client.packetWriter.isaacCipher); - var9.packetBuffer.writeShortLE(var3); - var9.packetBuffer.method5635(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); - Client.packetWriter.addNode(var9); - } - } else { - label795: { - if (var2 != 57) { - if (var2 == 58) { - var16 = ArchiveLoader.getWidgetChild(var1, var0); - if (var16 != null) { - var9 = SoundSystem.getPacketBufferNode(ClientPacket.field2274, Client.packetWriter.isaacCipher); - var9.packetBuffer.writeShortLE(Client.selectedSpellChildIndex); - var9.packetBuffer.writeShortLE(var0); - var9.packetBuffer.method5655(var1); - var9.packetBuffer.writeShortLE(Client.field788); - var9.packetBuffer.writeInt(Clock.selectedSpellWidget); - var9.packetBuffer.method5643(var16.itemId); - Client.packetWriter.addNode(var9); - } - break label795; - } - - if (var2 == 1001) { - Client.mouseCrossX = var6; - Client.mouseCrossY = var7; - Client.mouseCrossColor = 2; - Client.mouseCrossState = 0; - Client.destinationX = var0; - Client.destinationY = var1; - var8 = SoundSystem.getPacketBufferNode(ClientPacket.field2214, Client.packetWriter.isaacCipher); - var8.packetBuffer.method5635(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); - var8.packetBuffer.writeShortLE(HealthBar.baseY * 64 + var1); - var8.packetBuffer.method5643(UserComparator8.baseX * 64 + var0); - var8.packetBuffer.writeShortLE(var3); - Client.packetWriter.addNode(var8); - break label795; - } - - if (var2 == 1002) { - Client.mouseCrossX = var6; - Client.mouseCrossY = var7; - Client.mouseCrossColor = 2; - Client.mouseCrossState = 0; - var8 = SoundSystem.getPacketBufferNode(ClientPacket.field2222, Client.packetWriter.isaacCipher); - var8.packetBuffer.method5643(var3); - Client.packetWriter.addNode(var8); - break label795; - } - - if (var2 == 1003) { - Client.mouseCrossX = var6; - Client.mouseCrossY = var7; - Client.mouseCrossColor = 2; - Client.mouseCrossState = 0; - var13 = Client.npcs[var3]; - if (var13 != null) { - NPCDefinition var17 = var13.definition; - if (var17.transforms != null) { - var17 = var17.transform(); - } - - if (var17 != null) { - var11 = SoundSystem.getPacketBufferNode(ClientPacket.field2262, Client.packetWriter.isaacCipher); - var11.packetBuffer.writeShort(var17.id); - Client.packetWriter.addNode(var11); - } - } - break label795; - } - - if (var2 == 1004) { - Client.mouseCrossX = var6; - Client.mouseCrossY = var7; - Client.mouseCrossColor = 2; - Client.mouseCrossState = 0; - var8 = SoundSystem.getPacketBufferNode(ClientPacket.field2198, Client.packetWriter.isaacCipher); - var8.packetBuffer.method5643(var3); - Client.packetWriter.addNode(var8); - break label795; - } - - if (var2 == 1005) { - var16 = PacketBufferNode.getWidget(var1); - if (var16 != null && var16.itemQuantities[var0] >= 100000) { - class30.addGameMessage(27, "", var16.itemQuantities[var0] + " x " + class222.ItemDefinition_get(var3).name); - } else { - var9 = SoundSystem.getPacketBufferNode(ClientPacket.field2198, Client.packetWriter.isaacCipher); - var9.packetBuffer.method5643(var3); - Client.packetWriter.addNode(var9); - } - - Client.field753 = 0; - Login.field1165 = PacketBufferNode.getWidget(var1); - Client.field665 = var0; - break label795; - } - - if (var2 != 1007) { - if (var2 == 1011 || var2 == 1008 || var2 == 1010 || var2 == 1009 || var2 == 1012) { - Login.worldMap.worldMapMenuAction(var2, var3, new Coord(var0), new Coord(var1)); - } - break label795; - } - } - - var16 = ArchiveLoader.getWidgetChild(var1, var0); - if (var16 != null) { - class287.widgetDefaultMenuAction(var3, var1, var0, var16.itemId, var5); - } - } - } - } + var22 = WallDecoration.method3341(); } + + GrandExchangeOfferTotalQuantityComparator.mapSceneSprites = var22; + } else { + ++var0; } - } - } - } - if (Client.isItemSelected != 0) { - Client.isItemSelected = 0; - GrandExchangeOfferAgeComparator.invalidateWidget(PacketBufferNode.getWidget(MidiPcmStream.selectedItemWidget)); - } - - if (Client.isSpellSelected) { - InterfaceParent.Widget_runOnTargetLeave(); - } - - if (Login.field1165 != null && Client.field753 == 0) { - GrandExchangeOfferAgeComparator.invalidateWidget(Login.field1165); - } - - } - - @ObfuscatedName("jn") - @ObfuscatedSignature( - signature = "(Lhi;IIIIIII)V", - garbageValue = "-1682660629" - ) - static final void method1389(Widget var0, int var1, int var2, int var3, int var4, int var5, int var6) { - if (Client.field698) { - Client.alternativeScrollbarWidth = 32; - } else { - Client.alternativeScrollbarWidth = 0; - } - - Client.field698 = false; - int var7; - if (MouseHandler.MouseHandler_currentButton == 1 || !WorldMapLabelSize.mouseCam && MouseHandler.MouseHandler_currentButton == 4) { - if (var5 >= var1 && var5 < var1 + 16 && var6 >= var2 && var6 < var2 + 16) { - var0.scrollY -= 4; - GrandExchangeOfferAgeComparator.invalidateWidget(var0); - } else if (var5 >= var1 && var5 < var1 + 16 && var6 >= var3 + var2 - 16 && var6 < var3 + var2) { - var0.scrollY += 4; - GrandExchangeOfferAgeComparator.invalidateWidget(var0); - } else if (var5 >= var1 - Client.alternativeScrollbarWidth && var5 < Client.alternativeScrollbarWidth + var1 + 16 && var6 >= var2 + 16 && var6 < var3 + var2 - 16) { - var7 = var3 * (var3 - 32) / var4; - if (var7 < 8) { - var7 = 8; - } - - int var8 = var6 - var2 - 16 - var7 / 2; - int var9 = var3 - 32 - var7; - var0.scrollY = var8 * (var4 - var3) / var9; - GrandExchangeOfferAgeComparator.invalidateWidget(var0); - Client.field698 = true; - } - } - - if (Client.mouseWheelRotation != 0) { - var7 = var0.width; - if (var5 >= var1 - var7 && var6 >= var2 && var5 < var1 + 16 && var6 <= var3 + var2) { - var0.scrollY += Client.mouseWheelRotation * 45; - GrandExchangeOfferAgeComparator.invalidateWidget(var0); - } - } - - } - - @ObfuscatedName("kz") - @ObfuscatedSignature( - signature = "(Lbq;ZI)V", - garbageValue = "2014179335" - ) - @Export("closeInterface") - static final void closeInterface(InterfaceParent var0, boolean var1) { - int var2 = var0.group; - int var3 = (int)var0.key; - var0.remove(); - if (var1) { - PlayerAppearance.method4191(var2); - } - - class197.method3844(var2); - Widget var4 = PacketBufferNode.getWidget(var3); - if (var4 != null) { - GrandExchangeOfferAgeComparator.invalidateWidget(var4); - } - - for (int var5 = 0; var5 < Client.menuOptionsCount; ++var5) { - if (WorldMapIcon_1.method351(Client.menuOpcodes[var5])) { - if (var5 < Client.menuOptionsCount - 1) { - for (int var6 = var5; var6 < Client.menuOptionsCount - 1; ++var6) { - Client.menuActions[var6] = Client.menuActions[var6 + 1]; - Client.menuTargets[var6] = Client.menuTargets[var6 + 1]; - Client.menuOpcodes[var6] = Client.menuOpcodes[var6 + 1]; - Client.menuIdentifiers[var6] = Client.menuIdentifiers[var6 + 1]; - Client.menuArguments1[var6] = Client.menuArguments1[var6 + 1]; - Client.menuArguments2[var6] = Client.menuArguments2[var6 + 1]; - Client.menuShiftClick[var6] = Client.menuShiftClick[var6 + 1]; + if (FontName.headIconPkSprites == null) { + FontName.headIconPkSprites = UserComparator5.SpriteBuffer_getSpriteArray(WorldMapRegion.archive8, Actor.spriteIds.headIconsPk, 0); + } else { + ++var0; } - } - --var5; - --Client.menuOptionsCount; + if (UrlRequest.headIconPrayerSprites == null) { + UrlRequest.headIconPrayerSprites = UserComparator5.SpriteBuffer_getSpriteArray(WorldMapRegion.archive8, Actor.spriteIds.field3799, 0); + } else { + ++var0; + } + + if (SequenceDefinition.headIconHintSprites == null) { + SequenceDefinition.headIconHintSprites = UserComparator5.SpriteBuffer_getSpriteArray(WorldMapRegion.archive8, Actor.spriteIds.field3804, 0); + } else { + ++var0; + } + + if (AttackOption.mapMarkerSprites == null) { + AttackOption.mapMarkerSprites = UserComparator5.SpriteBuffer_getSpriteArray(WorldMapRegion.archive8, Actor.spriteIds.field3805, 0); + } else { + ++var0; + } + + if (KeyHandler.crossSprites == null) { + KeyHandler.crossSprites = UserComparator5.SpriteBuffer_getSpriteArray(WorldMapRegion.archive8, Actor.spriteIds.field3806, 0); + } else { + ++var0; + } + + if (WorldMapData_0.mapDotSprites == null) { + WorldMapData_0.mapDotSprites = UserComparator5.SpriteBuffer_getSpriteArray(WorldMapRegion.archive8, Actor.spriteIds.field3807, 0); + } else { + ++var0; + } + + if (GrandExchangeOfferTotalQuantityComparator.scrollBarSprites == null) { + var2 = WorldMapRegion.archive8; + var23 = Actor.spriteIds.field3800; + if (!GraphicsObject.method2030(var2, var23, 0)) { + var22 = null; + } else { + var22 = WallDecoration.method3341(); + } + + GrandExchangeOfferTotalQuantityComparator.scrollBarSprites = var22; + } else { + ++var0; + } + + if (class192.modIconSprites == null) { + var2 = WorldMapRegion.archive8; + var23 = Actor.spriteIds.field3809; + if (!GraphicsObject.method2030(var2, var23, 0)) { + var22 = null; + } else { + var22 = WallDecoration.method3341(); + } + + class192.modIconSprites = var22; + } else { + ++var0; + } + + if (var0 < 11) { + Login.Login_loadingText = "Loading sprites - " + var0 * 100 / 12 + "%"; + Login.Login_loadingPercent = 70; + } else { + AbstractFont.AbstractFont_modIconSprites = class192.modIconSprites; + class225.redHintArrowSprite.normalize(); + var1 = (int)(Math.random() * 21.0D) - 10; + int var26 = (int)(Math.random() * 21.0D) - 10; + var23 = (int)(Math.random() * 21.0D) - 10; + int var4 = (int)(Math.random() * 41.0D) - 20; + GrandExchangeOfferTotalQuantityComparator.mapSceneSprites[0].shiftColors(var4 + var1, var26 + var4, var4 + var23); + Login.Login_loadingText = "Loaded sprites"; + Login.Login_loadingPercent = 70; + Client.titleLoadingStage = 90; + } + } else if (Client.titleLoadingStage == 90) { + if (!class2.archive9.isFullyLoaded()) { + Login.Login_loadingText = "Loading textures - " + "0%"; + Login.Login_loadingPercent = 90; + } else { + JagexCache.textureProvider = new TextureProvider(class2.archive9, WorldMapRegion.archive8, 20, 0.8D, Client.isLowDetail ? 64 : 128); + Rasterizer3D.Rasterizer3D_setTextureLoader(JagexCache.textureProvider); + Rasterizer3D.Rasterizer3D_setBrightness(0.8D); + Client.titleLoadingStage = 100; + } + } else if (Client.titleLoadingStage == 100) { + var0 = JagexCache.textureProvider.getLoadedPercentage(); + if (var0 < 100) { + Login.Login_loadingText = "Loading textures - " + var0 + "%"; + Login.Login_loadingPercent = 90; + } else { + Login.Login_loadingText = "Loaded textures"; + Login.Login_loadingPercent = 90; + Client.titleLoadingStage = 110; + } + } else if (Client.titleLoadingStage == 110) { + class2.mouseRecorder = new MouseRecorder(); + GameShell.taskHandler.newThreadTask(class2.mouseRecorder, 10); + Login.Login_loadingText = "Loaded input handler"; + Login.Login_loadingPercent = 92; + Client.titleLoadingStage = 120; + } else if (Client.titleLoadingStage == 120) { + if (!class81.archive10.tryLoadFileByNames("huffman", "")) { + Login.Login_loadingText = "Loading wordpack - " + 0 + "%"; + Login.Login_loadingPercent = 94; + } else { + Huffman var21 = new Huffman(class81.archive10.takeFileByNames("huffman", "")); + Messages.method2230(var21); + Login.Login_loadingText = "Loaded wordpack"; + Login.Login_loadingPercent = 94; + Client.titleLoadingStage = 130; + } + } else if (Client.titleLoadingStage == 130) { + if (!WorldMapID.archive3.isFullyLoaded()) { + Login.Login_loadingText = "Loading interfaces - " + WorldMapID.archive3.loadPercent() * 4 / 5 + "%"; + Login.Login_loadingPercent = 96; + } else if (!class267.archive12.isFullyLoaded()) { + Login.Login_loadingText = "Loading interfaces - " + (80 + class267.archive12.loadPercent() / 6) + "%"; + Login.Login_loadingPercent = 96; + } else if (!class269.archive13.isFullyLoaded()) { + Login.Login_loadingText = "Loading interfaces - " + (96 + class269.archive13.loadPercent() / 50) + "%"; + Login.Login_loadingPercent = 96; + } else { + Login.Login_loadingText = "Loaded interfaces"; + Login.Login_loadingPercent = 98; + Client.titleLoadingStage = 140; + } + } else if (Client.titleLoadingStage == 140) { + Login.Login_loadingPercent = 100; + if (!class13.archive19.tryLoadGroupByName(WorldMapCacheName.field304.name)) { + Login.Login_loadingText = "Loading world map - " + class13.archive19.groupLoadPercentByName(WorldMapCacheName.field304.name) / 10 + "%"; + } else { + if (WorldMapRegion.worldMap == null) { + WorldMapRegion.worldMap = new WorldMap(); + WorldMapRegion.worldMap.init(class13.archive19, UserComparator9.archive18, class60.archive20, JagexCache.fontBold12, Client.fontsMap, GrandExchangeOfferTotalQuantityComparator.mapSceneSprites); + } + + Login.Login_loadingText = "Loaded world map"; + Client.titleLoadingStage = 150; + } + } else if (Client.titleLoadingStage == 150) { + class81.updateGameState(10); + } } } - - class30.method603(); - if (Client.rootInterface != -1) { - AttackOption.runIntfCloseListeners(Client.rootInterface, 1); - } - } } diff --git a/runescape-client/src/main/java/GrandExchangeOfferTotalQuantityComparator.java b/runescape-client/src/main/java/GrandExchangeOfferTotalQuantityComparator.java index 3481d3bed2..308aab7966 100644 --- a/runescape-client/src/main/java/GrandExchangeOfferTotalQuantityComparator.java +++ b/runescape-client/src/main/java/GrandExchangeOfferTotalQuantityComparator.java @@ -1,221 +1,94 @@ +import java.io.IOException; import java.util.Comparator; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; +import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("i") +@ObfuscatedName("w") @Implements("GrandExchangeOfferTotalQuantityComparator") final class GrandExchangeOfferTotalQuantityComparator implements Comparator { - @ObfuscatedName("t") - @ObfuscatedSignature( - signature = "[Lie;" + @ObfuscatedName("y") + @ObfuscatedGetter( + intValue = -847322953 ) - @Export("WorldMapElement_cached") - public static WorldMapElement[] WorldMapElement_cached; - - @ObfuscatedName("a") + @Export("Interpreter_intStackSize") + static int Interpreter_intStackSize; + @ObfuscatedName("ge") @ObfuscatedSignature( - signature = "(Lo;Lo;I)I", - garbageValue = "-2091641489" + signature = "[Llm;" + ) + @Export("mapSceneSprites") + static IndexedSprite[] mapSceneSprites; + @ObfuscatedName("gu") + @ObfuscatedSignature( + signature = "[Llm;" + ) + @Export("scrollBarSprites") + static IndexedSprite[] scrollBarSprites; + + @ObfuscatedName("u") + @ObfuscatedSignature( + signature = "(Ly;Ly;B)I", + garbageValue = "85" ) @Export("compare_bridged") int compare_bridged(GrandExchangeEvent var1, GrandExchangeEvent var2) { return var1.grandExchangeOffer.totalQuantity < var2.grandExchangeOffer.totalQuantity ? -1 : (var2.grandExchangeOffer.totalQuantity == var1.grandExchangeOffer.totalQuantity ? 0 : 1); } - public int compare(Object var1, Object var2) { - return this.compare_bridged((GrandExchangeEvent)var1, (GrandExchangeEvent)var2); - } - public boolean equals(Object var1) { return super.equals(var1); } - @ObfuscatedName("v") - @ObfuscatedSignature( - signature = "(ILcj;ZI)I", - garbageValue = "-1959734110" - ) - static int method134(int var0, Script var1, boolean var2) { - int var3 = -1; - Widget var4; - if (var0 >= 2000) { - var0 -= 1000; - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - var4 = PacketBufferNode.getWidget(var3); - } else { - var4 = var2 ? class96.field1301 : ReflectionCheck.field1310; - } - - if (var0 == ScriptOpcodes.CC_SETPOSITION) { - Interpreter.Interpreter_intStackSize -= 4; - var4.rawX = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var4.rawY = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - var4.xAlignment = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 2]; - var4.yAlignment = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 3]; - GrandExchangeOfferAgeComparator.invalidateWidget(var4); - WorldMapID.client.alignWidget(var4); - if (var3 != -1 && var4.type == 0) { - class43.revalidateWidgetScroll(Widget.Widget_interfaceComponents[var3 >> 16], var4, false); - } - - return 1; - } else if (var0 == ScriptOpcodes.CC_SETSIZE) { - Interpreter.Interpreter_intStackSize -= 4; - var4.rawWidth = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var4.rawHeight = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - var4.widthAlignment = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 2]; - var4.heightAlignment = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 3]; - GrandExchangeOfferAgeComparator.invalidateWidget(var4); - WorldMapID.client.alignWidget(var4); - if (var3 != -1 && var4.type == 0) { - class43.revalidateWidgetScroll(Widget.Widget_interfaceComponents[var3 >> 16], var4, false); - } - - return 1; - } else if (var0 == ScriptOpcodes.CC_SETHIDE) { - boolean var5 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - if (var5 != var4.isHidden) { - var4.isHidden = var5; - GrandExchangeOfferAgeComparator.invalidateWidget(var4); - } - - return 1; - } else if (var0 == ScriptOpcodes.CC_SETNOCLICKTHROUGH) { - var4.noClickThrough = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - return 1; - } else if (var0 == ScriptOpcodes.CC_SETNOSCROLLTHROUGH) { - var4.noScrollThrough = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - return 1; - } else { - return 2; - } + public int compare(Object var1, Object var2) { + return this.compare_bridged((GrandExchangeEvent)var1, (GrandExchangeEvent)var2); } - @ObfuscatedName("fr") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "-1403292124" + signature = "(Ljava/lang/CharSequence;I)Ljava/lang/String;", + garbageValue = "1071559755" ) - static void method130() { - Client.mouseLastLastPressedTimeMillis = 1L; - class3.mouseRecorder.index = 0; - class30.hasFocus = true; - Client.hadFocus = true; - Client.field663 = -1L; - class80.method2198(); - Client.packetWriter.clearBuffer(); - Client.packetWriter.packetBuffer.offset = 0; - Client.packetWriter.serverPacket = null; - Client.packetWriter.field1290 = null; - Client.packetWriter.field1286 = null; - Client.packetWriter.field1292 = null; - Client.packetWriter.serverPacketLength = 0; - Client.packetWriter.field1291 = 0; - Client.rebootTimer = 0; - Client.logoutTimer = 0; - Client.hintArrowType = 0; - Client.menuOptionsCount = 0; - Client.isMenuOpen = false; - MouseHandler.MouseHandler_idleCycles = 0; - Messages.Messages_channels.clear(); - Messages.Messages_hashTable.clear(); - Messages.Messages_queue.clear(); - Messages.Messages_count = 0; - Client.isItemSelected = 0; - Client.isSpellSelected = false; - Client.soundEffectCount = 0; - Client.camAngleY = 0; - Client.oculusOrbState = 0; - GrandExchangeOfferWorldComparator.field30 = null; - Client.minimapState = 0; - Client.field856 = -1; - Client.destinationX = 0; - Client.destinationY = 0; - Client.playerAttackOption = AttackOption.AttackOption_hidden; - Client.npcAttackOption = AttackOption.AttackOption_hidden; - Client.npcCount = 0; - Players.Players_count = 0; - - int var0; - for (var0 = 0; var0 < 2048; ++var0) { - Players.field1229[var0] = null; - Players.field1228[var0] = 1; + public static String method97(CharSequence var0) { + String var1 = GrandExchangeOffer.base37DecodeLong(Actor.method1773(var0)); + if (var1 == null) { + var1 = ""; } - for (var0 = 0; var0 < 2048; ++var0) { - Client.players[var0] = null; - } + return var1; + } - for (var0 = 0; var0 < 32768; ++var0) { - Client.npcs[var0] = null; - } + @ObfuscatedName("ke") + @ObfuscatedSignature( + signature = "(Lkg;I)V", + garbageValue = "754530972" + ) + static void method104(Buffer var0) { + if (Client.randomDatData != null) { + var0.writeBytes(Client.randomDatData, 0, Client.randomDatData.length); + } else { + byte[] var2 = new byte[24]; - Client.combatTargetPlayerIndex = -1; - Client.projectiles.clear(); - Client.graphicsObjects.clear(); + try { + JagexCache.JagexCache_randomDat.seek(0L); + JagexCache.JagexCache_randomDat.readFully(var2); - for (var0 = 0; var0 < 4; ++var0) { - for (int var1 = 0; var1 < 104; ++var1) { - for (int var2 = 0; var2 < 104; ++var2) { - Client.groundItems[var0][var1][var2] = null; + int var3; + for (var3 = 0; var3 < 24 && var2[var3] == 0; ++var3) { + } + + if (var3 >= 24) { + throw new IOException(); + } + } catch (Exception var6) { + for (int var4 = 0; var4 < 24; ++var4) { + var2[var4] = -1; } } + + var0.writeBytes(var2, 0, var2.length); } - - Client.pendingSpawns = new NodeDeque(); - PacketWriter.friendSystem.clear(); - - for (var0 = 0; var0 < VarpDefinition.VarpDefinition_fileCount; ++var0) { - VarpDefinition var3 = Varcs.VarpDefinition_get(var0); - if (var3 != null) { - Varps.Varps_temp[var0] = 0; - Varps.Varps_main[var0] = 0; - } - } - - class1.varcs.clearTransient(); - Client.followerIndex = -1; - if (Client.rootInterface != -1) { - PlayerAppearance.method4191(Client.rootInterface); - } - - for (InterfaceParent var4 = (InterfaceParent)Client.interfaceParents.first(); var4 != null; var4 = (InterfaceParent)Client.interfaceParents.next()) { - GrandExchangeOfferOwnWorldComparator.closeInterface(var4, true); - } - - Client.rootInterface = -1; - Client.interfaceParents = new NodeHashTable(8); - Client.meslayerContinueWidget = null; - Client.menuOptionsCount = 0; - Client.isMenuOpen = false; - Client.playerAppearance.update((int[])null, new int[]{0, 0, 0, 0, 0}, false, -1); - - for (var0 = 0; var0 < 8; ++var0) { - Client.playerMenuActions[var0] = null; - Client.playerOptionsPriorities[var0] = false; - } - - ItemContainer.itemContainers = new NodeHashTable(32); - Client.isLoading = true; - - for (var0 = 0; var0 < 100; ++var0) { - Client.field842[var0] = true; - } - - PacketBufferNode var5 = SoundSystem.getPacketBufferNode(ClientPacket.field2257, Client.packetWriter.isaacCipher); - var5.packetBuffer.writeByte(WallDecoration.getWindowedMode()); - var5.packetBuffer.writeShort(class286.canvasWidth); - var5.packetBuffer.writeShort(FloorUnderlayDefinition.canvasHeight); - Client.packetWriter.addNode(var5); - class4.clanChat = null; - - for (var0 = 0; var0 < 8; ++var0) { - Client.grandExchangeOffers[var0] = new GrandExchangeOffer(); - } - - WorldMapData_1.grandExchangeEvents = null; } } diff --git a/runescape-client/src/main/java/GrandExchangeOfferUnitPriceComparator.java b/runescape-client/src/main/java/GrandExchangeOfferUnitPriceComparator.java index 82277e3454..f09f9cc040 100644 --- a/runescape-client/src/main/java/GrandExchangeOfferUnitPriceComparator.java +++ b/runescape-client/src/main/java/GrandExchangeOfferUnitPriceComparator.java @@ -1,337 +1,45 @@ import java.util.Comparator; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; -import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("m") +@ObfuscatedName("k") @Implements("GrandExchangeOfferUnitPriceComparator") final class GrandExchangeOfferUnitPriceComparator implements Comparator { - @ObfuscatedName("dy") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lij;" - ) - @Export("archive8") - static Archive archive8; - @ObfuscatedName("ex") - @ObfuscatedGetter( - intValue = -1695293753 - ) - @Export("port3") - static int port3; - - @ObfuscatedName("a") - @ObfuscatedSignature( - signature = "(Lo;Lo;I)I", - garbageValue = "-1452765932" + signature = "(Ly;Ly;B)I", + garbageValue = "72" ) @Export("compare_bridged") int compare_bridged(GrandExchangeEvent var1, GrandExchangeEvent var2) { return var1.grandExchangeOffer.unitPrice < var2.grandExchangeOffer.unitPrice ? -1 : (var2.grandExchangeOffer.unitPrice == var1.grandExchangeOffer.unitPrice ? 0 : 1); } - public boolean equals(Object var1) { - return super.equals(var1); - } - public int compare(Object var1, Object var2) { return this.compare_bridged((GrandExchangeEvent)var1, (GrandExchangeEvent)var2); } - @ObfuscatedName("hy") + public boolean equals(Object var1) { + return super.equals(var1); + } + + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(IIIIIIIB)V", - garbageValue = "19" + signature = "(Lkg;I)Ljava/lang/String;", + garbageValue = "2005210038" ) - @Export("addPendingSpawnToScene") - static final void addPendingSpawnToScene(int var0, int var1, int var2, int var3, int var4, int var5, int var6) { - if (var2 >= 1 && var3 >= 1 && var2 <= 102 && var3 <= 102) { - if (Client.isLowDetail && var0 != Player.Client_plane) { - return; - } - - long var7 = 0L; - boolean var9 = true; - boolean var10 = false; - boolean var11 = false; - if (var1 == 0) { - var7 = WorldMapArea.scene.getBoundaryObjectTag(var0, var2, var3); - } - - if (var1 == 1) { - var7 = WorldMapArea.scene.getWallDecorationTag(var0, var2, var3); - } - - if (var1 == 2) { - var7 = WorldMapArea.scene.getGameObjectTag(var0, var2, var3); - } - - if (var1 == 3) { - var7 = WorldMapArea.scene.getFloorDecorationTag(var0, var2, var3); - } - - int var12; - if (0L != var7) { - var12 = WorldMapArea.scene.getObjectFlags(var0, var2, var3, var7); - int var39 = UserComparator8.Entity_unpackID(var7); - int var40 = var12 & 31; - int var41 = var12 >> 6 & 3; - ObjectDefinition var13; - if (var1 == 0) { - WorldMapArea.scene.removeBoundaryObject(var0, var2, var3); - var13 = WorldMapDecorationType.getObjectDefinition(var39); - if (var13.interactType != 0) { - Client.collisionMaps[var0].method3690(var2, var3, var40, var41, var13.boolean1); - } - } - - if (var1 == 1) { - WorldMapArea.scene.removeWallDecoration(var0, var2, var3); - } - - if (var1 == 2) { - WorldMapArea.scene.removeGameObject(var0, var2, var3); - var13 = WorldMapDecorationType.getObjectDefinition(var39); - if (var2 + var13.sizeX > 103 || var3 + var13.sizeX > 103 || var2 + var13.sizeY > 103 || var3 + var13.sizeY > 103) { - return; - } - - if (var13.interactType != 0) { - Client.collisionMaps[var0].setFlagOffNonSquare(var2, var3, var13.sizeX, var13.sizeY, var41, var13.boolean1); - } - } - - if (var1 == 3) { - WorldMapArea.scene.removeFloorDecoration(var0, var2, var3); - var13 = WorldMapDecorationType.getObjectDefinition(var39); - if (var13.interactType == 1) { - Client.collisionMaps[var0].method3693(var2, var3); - } - } - } - - if (var4 >= 0) { - var12 = var0; - if (var0 < 3 && (Tiles.Tiles_renderFlags[1][var2][var3] & 2) == 2) { - var12 = var0 + 1; - } - - Scene var42 = WorldMapArea.scene; - CollisionMap var14 = Client.collisionMaps[var0]; - ObjectDefinition var15 = WorldMapDecorationType.getObjectDefinition(var4); - int var16; - int var17; - if (var5 != 1 && var5 != 3) { - var16 = var15.sizeX; - var17 = var15.sizeY; - } else { - var16 = var15.sizeY; - var17 = var15.sizeX; - } - - int var18; - int var19; - if (var16 + var2 <= 104) { - var18 = (var16 >> 1) + var2; - var19 = var2 + (var16 + 1 >> 1); - } else { - var18 = var2; - var19 = var2 + 1; - } - - int var20; - int var21; - if (var3 + var17 <= 104) { - var20 = var3 + (var17 >> 1); - var21 = var3 + (var17 + 1 >> 1); - } else { - var20 = var3; - var21 = var3 + 1; - } - - int[][] var22 = Tiles.Tiles_heights[var12]; - int var23 = var22[var18][var21] + var22[var18][var20] + var22[var19][var20] + var22[var19][var21] >> 2; - int var24 = (var2 << 7) + (var16 << 6); - int var25 = (var3 << 7) + (var17 << 6); - long var26 = class160.calculateTag(var2, var3, 2, var15.int1 == 0, var4); - int var28 = (var5 << 6) + var6; - if (var15.int3 == 1) { - var28 += 256; - } - - Object var29; - if (var6 == 22) { - if (var15.animationId == -1 && var15.transforms == null) { - var29 = var15.getModel(22, var5, var22, var24, var23, var25); - } else { - var29 = new DynamicObject(var4, 22, var5, var12, var2, var3, var15.animationId, true, (Entity)null); - } - - var42.newFloorDecoration(var0, var2, var3, var23, (Entity)var29, var26, var28); - if (var15.interactType == 1) { - var14.setBlockedByFloorDec(var2, var3); - } - } else if (var6 != 10 && var6 != 11) { - if (var6 >= 12) { - if (var15.animationId == -1 && var15.transforms == null) { - var29 = var15.getModel(var6, var5, var22, var24, var23, var25); - } else { - var29 = new DynamicObject(var4, var6, var5, var12, var2, var3, var15.animationId, true, (Entity)null); - } - - var42.method3213(var0, var2, var3, var23, 1, 1, (Entity)var29, 0, var26, var28); - if (var15.interactType != 0) { - var14.addGameObject(var2, var3, var16, var17, var15.boolean1); - } - } else if (var6 == 0) { - if (var15.animationId == -1 && var15.transforms == null) { - var29 = var15.getModel(0, var5, var22, var24, var23, var25); - } else { - var29 = new DynamicObject(var4, 0, var5, var12, var2, var3, var15.animationId, true, (Entity)null); - } - - var42.newBoundaryObject(var0, var2, var3, var23, (Entity)var29, (Entity)null, Tiles.field489[var5], 0, var26, var28); - if (var15.interactType != 0) { - var14.method3685(var2, var3, var6, var5, var15.boolean1); - } - } else if (var6 == 1) { - if (var15.animationId == -1 && var15.transforms == null) { - var29 = var15.getModel(1, var5, var22, var24, var23, var25); - } else { - var29 = new DynamicObject(var4, 1, var5, var12, var2, var3, var15.animationId, true, (Entity)null); - } - - var42.newBoundaryObject(var0, var2, var3, var23, (Entity)var29, (Entity)null, Tiles.field490[var5], 0, var26, var28); - if (var15.interactType != 0) { - var14.method3685(var2, var3, var6, var5, var15.boolean1); - } - } else { - int var35; - if (var6 == 2) { - var35 = var5 + 1 & 3; - Object var30; - Object var31; - if (var15.animationId == -1 && var15.transforms == null) { - var30 = var15.getModel(2, var5 + 4, var22, var24, var23, var25); - var31 = var15.getModel(2, var35, var22, var24, var23, var25); - } else { - var30 = new DynamicObject(var4, 2, var5 + 4, var12, var2, var3, var15.animationId, true, (Entity)null); - var31 = new DynamicObject(var4, 2, var35, var12, var2, var3, var15.animationId, true, (Entity)null); - } - - var42.newBoundaryObject(var0, var2, var3, var23, (Entity)var30, (Entity)var31, Tiles.field489[var5], Tiles.field489[var35], var26, var28); - if (var15.interactType != 0) { - var14.method3685(var2, var3, var6, var5, var15.boolean1); - } - } else if (var6 == 3) { - if (var15.animationId == -1 && var15.transforms == null) { - var29 = var15.getModel(3, var5, var22, var24, var23, var25); - } else { - var29 = new DynamicObject(var4, 3, var5, var12, var2, var3, var15.animationId, true, (Entity)null); - } - - var42.newBoundaryObject(var0, var2, var3, var23, (Entity)var29, (Entity)null, Tiles.field490[var5], 0, var26, var28); - if (var15.interactType != 0) { - var14.method3685(var2, var3, var6, var5, var15.boolean1); - } - } else if (var6 == 9) { - if (var15.animationId == -1 && var15.transforms == null) { - var29 = var15.getModel(var6, var5, var22, var24, var23, var25); - } else { - var29 = new DynamicObject(var4, var6, var5, var12, var2, var3, var15.animationId, true, (Entity)null); - } - - var42.method3213(var0, var2, var3, var23, 1, 1, (Entity)var29, 0, var26, var28); - if (var15.interactType != 0) { - var14.addGameObject(var2, var3, var16, var17, var15.boolean1); - } - } else if (var6 == 4) { - if (var15.animationId == -1 && var15.transforms == null) { - var29 = var15.getModel(4, var5, var22, var24, var23, var25); - } else { - var29 = new DynamicObject(var4, 4, var5, var12, var2, var3, var15.animationId, true, (Entity)null); - } - - var42.newWallDecoration(var0, var2, var3, var23, (Entity)var29, (Entity)null, Tiles.field489[var5], 0, 0, 0, var26, var28); - } else { - Object var32; - long var36; - if (var6 == 5) { - var35 = 16; - var36 = var42.getBoundaryObjectTag(var0, var2, var3); - if (var36 != 0L) { - var35 = WorldMapDecorationType.getObjectDefinition(UserComparator8.Entity_unpackID(var36)).int2; - } - - if (var15.animationId == -1 && var15.transforms == null) { - var32 = var15.getModel(4, var5, var22, var24, var23, var25); - } else { - var32 = new DynamicObject(var4, 4, var5, var12, var2, var3, var15.animationId, true, (Entity)null); - } - - var42.newWallDecoration(var0, var2, var3, var23, (Entity)var32, (Entity)null, Tiles.field489[var5], 0, var35 * Tiles.field491[var5], var35 * Tiles.field498[var5], var26, var28); - } else if (var6 == 6) { - var35 = 8; - var36 = var42.getBoundaryObjectTag(var0, var2, var3); - if (var36 != 0L) { - var35 = WorldMapDecorationType.getObjectDefinition(UserComparator8.Entity_unpackID(var36)).int2 / 2; - } - - if (var15.animationId == -1 && var15.transforms == null) { - var32 = var15.getModel(4, var5 + 4, var22, var24, var23, var25); - } else { - var32 = new DynamicObject(var4, 4, var5 + 4, var12, var2, var3, var15.animationId, true, (Entity)null); - } - - var42.newWallDecoration(var0, var2, var3, var23, (Entity)var32, (Entity)null, 256, var5, var35 * Tiles.field493[var5], var35 * Tiles.field494[var5], var26, var28); - } else if (var6 == 7) { - int var38 = var5 + 2 & 3; - if (var15.animationId == -1 && var15.transforms == null) { - var29 = var15.getModel(4, var38 + 4, var22, var24, var23, var25); - } else { - var29 = new DynamicObject(var4, 4, var38 + 4, var12, var2, var3, var15.animationId, true, (Entity)null); - } - - var42.newWallDecoration(var0, var2, var3, var23, (Entity)var29, (Entity)null, 256, var38, 0, 0, var26, var28); - } else if (var6 == 8) { - var35 = 8; - var36 = var42.getBoundaryObjectTag(var0, var2, var3); - if (0L != var36) { - var35 = WorldMapDecorationType.getObjectDefinition(UserComparator8.Entity_unpackID(var36)).int2 / 2; - } - - int var34 = var5 + 2 & 3; - Object var33; - if (var15.animationId == -1 && var15.transforms == null) { - var32 = var15.getModel(4, var5 + 4, var22, var24, var23, var25); - var33 = var15.getModel(4, var34 + 4, var22, var24, var23, var25); - } else { - var32 = new DynamicObject(var4, 4, var5 + 4, var12, var2, var3, var15.animationId, true, (Entity)null); - var33 = new DynamicObject(var4, 4, var34 + 4, var12, var2, var3, var15.animationId, true, (Entity)null); - } - - var42.newWallDecoration(var0, var2, var3, var23, (Entity)var32, (Entity)var33, 256, var5, var35 * Tiles.field493[var5], var35 * Tiles.field494[var5], var26, var28); - } - } - } - } else { - if (var15.animationId == -1 && var15.transforms == null) { - var29 = var15.getModel(10, var5, var22, var24, var23, var25); - } else { - var29 = new DynamicObject(var4, 10, var5, var12, var2, var3, var15.animationId, true, (Entity)null); - } - - if (var29 != null) { - var42.method3213(var0, var2, var3, var23, var16, var17, (Entity)var29, var6 == 11 ? 256 : 0, var26, var28); - } - - if (var15.interactType != 0) { - var14.addGameObject(var2, var3, var16, var17, var15.boolean1); - } - } - } - } + public static String method142(Buffer var0) { + return GrandExchangeEvent.method92(var0, 32767); + } + @ObfuscatedName("z") + @ObfuscatedSignature( + signature = "(IB)I", + garbageValue = "76" + ) + public static int method143(int var0) { + return WorldMapSectionType.method271(ViewportMouse.ViewportMouse_entityTags[var0]); } } diff --git a/runescape-client/src/main/java/GrandExchangeOfferWorldComparator.java b/runescape-client/src/main/java/GrandExchangeOfferWorldComparator.java index df544be647..29ea15df58 100644 --- a/runescape-client/src/main/java/GrandExchangeOfferWorldComparator.java +++ b/runescape-client/src/main/java/GrandExchangeOfferWorldComparator.java @@ -3,26 +3,21 @@ import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; +import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("l") +@ObfuscatedName("p") @Implements("GrandExchangeOfferWorldComparator") final class GrandExchangeOfferWorldComparator implements Comparator { - @ObfuscatedName("su") + @ObfuscatedName("lj") @ObfuscatedSignature( - signature = "Lif;" + signature = "Lhl;" ) - public static class237 field30; - @ObfuscatedName("gq") - @ObfuscatedSignature( - signature = "[Llw;" - ) - @Export("mapSceneSprites") - static IndexedSprite[] mapSceneSprites; + static Widget field31; - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Lo;Lo;I)I", - garbageValue = "-1039066060" + signature = "(Ly;Ly;I)I", + garbageValue = "2079397392" ) @Export("compare_bridged") int compare_bridged(GrandExchangeEvent var1, GrandExchangeEvent var2) { @@ -37,62 +32,398 @@ final class GrandExchangeOfferWorldComparator implements Comparator { return super.equals(var1); } - @ObfuscatedName("a") + @ObfuscatedName("o") @ObfuscatedSignature( - signature = "(I)[Lgs;", - garbageValue = "-126362707" + signature = "(IIB)I", + garbageValue = "19" ) - static LoginPacket[] method105() { - return new LoginPacket[]{LoginPacket.field2287, LoginPacket.field2284, LoginPacket.field2286, LoginPacket.field2283, LoginPacket.field2285}; + static final int method76(int var0, int var1) { + int var2 = var0 + var1 * 57; + var2 ^= var2 << 13; + int var3 = var2 * (var2 * var2 * 15731 + 789221) + 1376312589 & Integer.MAX_VALUE; + return var3 >> 19 & 255; } - @ObfuscatedName("hc") + @ObfuscatedName("ae") @ObfuscatedSignature( - signature = "(IIIIIIIIIB)V", - garbageValue = "-70" + signature = "(ILci;ZI)I", + garbageValue = "-814260497" ) - @Export("updatePendingSpawn") - static final void updatePendingSpawn(int var0, int var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8) { - PendingSpawn var9 = null; + static int method78(int var0, Script var1, boolean var2) { + int var3; + if (var0 == 6600) { + var3 = ClientPacket.Client_plane; + int var9 = class51.baseX * 64 + (class215.localPlayer.x >> 7); + int var5 = VarcInt.baseY * 64 + (class215.localPlayer.y >> 7); + Clock.getWorldMap().method6381(var3, var9, var5, true); + return 1; + } else { + WorldMapArea var11; + if (var0 == ScriptOpcodes.WORLDMAP_GETMAPNAME) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + String var16 = ""; + var11 = Clock.getWorldMap().getMapArea(var3); + if (var11 != null) { + var16 = var11.getExternalName(); + } - for (PendingSpawn var10 = (PendingSpawn)Client.pendingSpawns.last(); var10 != null; var10 = (PendingSpawn)Client.pendingSpawns.previous()) { - if (var0 == var10.plane && var10.x == var1 && var2 == var10.y && var3 == var10.type) { - var9 = var10; - break; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var16; + return 1; + } else if (var0 == ScriptOpcodes.WORLDMAP_SETMAP) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Clock.getWorldMap().setCurrentMapAreaId(var3); + return 1; + } else if (var0 == ScriptOpcodes.WORLDMAP_GETZOOM) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Clock.getWorldMap().getZoomLevel(); + return 1; + } else if (var0 == ScriptOpcodes.WORLDMAP_SETZOOM) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Clock.getWorldMap().setZoomPercentage(var3); + return 1; + } else if (var0 == ScriptOpcodes.WORLDMAP_ISLOADED) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Clock.getWorldMap().isCacheLoaded() ? 1 : 0; + return 1; + } else { + Coord var15; + if (var0 == ScriptOpcodes.WORLDMAP_JUMPTODISPLAYCOORD) { + var15 = new Coord(Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]); + Clock.getWorldMap().setWorldMapPositionTarget(var15.x, var15.y); + return 1; + } else if (var0 == ScriptOpcodes.WORLDMAP_JUMPTODISPLAYCOORD_INSTANT) { + var15 = new Coord(Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]); + Clock.getWorldMap().setWorldMapPositionTargetInstant(var15.x, var15.y); + return 1; + } else if (var0 == ScriptOpcodes.WORLDMAP_JUMPTOSOURCECOORD) { + var15 = new Coord(Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]); + Clock.getWorldMap().jumpToSourceCoord(var15.plane, var15.x, var15.y); + return 1; + } else if (var0 == ScriptOpcodes.WORLDMAP_JUMPTOSOURCECOORD_INSTANT) { + var15 = new Coord(Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]); + Clock.getWorldMap().jumpToSourceCoordInstant(var15.plane, var15.x, var15.y); + return 1; + } else if (var0 == ScriptOpcodes.WORLDMAP_GETDISPLAYPOSITION) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Clock.getWorldMap().getDisplayX(); + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Clock.getWorldMap().getDisplayY(); + return 1; + } else { + WorldMapArea var13; + if (var0 == ScriptOpcodes.WORLDMAP_GETCONFIGORIGIN) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var13 = Clock.getWorldMap().getMapArea(var3); + if (var13 == null) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var13.getOrigin().packed(); + } + + return 1; + } else if (var0 == ScriptOpcodes.WORLDMAP_GETCONFIGSIZE) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var13 = Clock.getWorldMap().getMapArea(var3); + if (var13 == null) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = (var13.getRegionHighX() - var13.getRegionLowX() + 1) * 64; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = (var13.getRegionHighY() - var13.getRegionLowY() + 1) * 64; + } + + return 1; + } else if (var0 == ScriptOpcodes.WORLDMAP_GETCONFIGBOUNDS) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var13 = Clock.getWorldMap().getMapArea(var3); + if (var13 == null) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var13.getRegionLowX() * 64; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var13.getRegionLowY() * 64; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var13.getRegionHighX() * 64 + 64 - 1; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var13.getRegionHighY() * 64 + 64 - 1; + } + + return 1; + } else if (var0 == ScriptOpcodes.WORLDMAP_GETCONFIGZOOM) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var13 = Clock.getWorldMap().getMapArea(var3); + if (var13 == null) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = -1; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var13.getZoom(); + } + + return 1; + } else if (var0 == 6615) { + var15 = Clock.getWorldMap().getDisplayCoord(); + if (var15 == null) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = -1; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = -1; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var15.x; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var15.y; + } + + return 1; + } else if (var0 == ScriptOpcodes.WORLDMAP_GETCURRENTMAP) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Clock.getWorldMap().currentMapAreaId(); + return 1; + } else if (var0 == ScriptOpcodes.WORLDMAP_GETDISPLAYCOORD) { + var15 = new Coord(Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]); + var13 = Clock.getWorldMap().getCurrentMapArea(); + if (var13 == null) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = -1; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = -1; + return 1; + } else { + int[] var14 = var13.position(var15.plane, var15.x, var15.y); + if (var14 == null) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = -1; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = -1; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var14[0]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var14[1]; + } + + return 1; + } + } else { + Coord var7; + if (var0 == 6618) { + var15 = new Coord(Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]); + var13 = Clock.getWorldMap().getCurrentMapArea(); + if (var13 == null) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = -1; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = -1; + return 1; + } else { + var7 = var13.coord(var15.x, var15.y); + if (var7 == null) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = -1; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var7.packed(); + } + + return 1; + } + } else { + Coord var12; + if (var0 == 6619) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var3 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var12 = new Coord(Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]); + Canvas.method871(var3, var12, false); + return 1; + } else if (var0 == 6620) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var3 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var12 = new Coord(Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]); + Canvas.method871(var3, var12, true); + return 1; + } else if (var0 == ScriptOpcodes.WORLDMAP_COORDINMAP) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var3 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var12 = new Coord(Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]); + var11 = Clock.getWorldMap().getMapArea(var3); + if (var11 == null) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + return 1; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var11.containsCoord(var12.plane, var12.x, var12.y) ? 1 : 0; + return 1; + } + } else if (var0 == ScriptOpcodes.WORLDMAP_GETSIZE) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Clock.getWorldMap().getDisplayWith(); + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Clock.getWorldMap().getDisplayHeight(); + return 1; + } else if (var0 == 6623) { + var15 = new Coord(Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]); + var13 = Clock.getWorldMap().mapAreaAtCoord(var15.plane, var15.x, var15.y); + if (var13 == null) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = -1; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var13.getId(); + } + + return 1; + } else if (var0 == 6624) { + Clock.getWorldMap().setMaxFlashCount(Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]); + return 1; + } else if (var0 == 6625) { + Clock.getWorldMap().resetMaxFlashCount(); + return 1; + } else if (var0 == 6626) { + Clock.getWorldMap().setCyclesPerFlash(Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]); + return 1; + } else if (var0 == 6627) { + Clock.getWorldMap().resetCyclesPerFlash(); + return 1; + } else { + boolean var10; + if (var0 == ScriptOpcodes.WORLDMAP_PERPETUALFLASH) { + var10 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + Clock.getWorldMap().setPerpetualFlash(var10); + return 1; + } else if (var0 == ScriptOpcodes.WORLDMAP_FLASHELEMENT) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Clock.getWorldMap().flashElement(var3); + return 1; + } else if (var0 == ScriptOpcodes.WORLDMAP_FLASHELEMENTCATEGORY) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Clock.getWorldMap().flashCategory(var3); + return 1; + } else if (var0 == ScriptOpcodes.WORLDMAP_STOPCURRENTFLASHES) { + Clock.getWorldMap().stopCurrentFlashes(); + return 1; + } else if (var0 == ScriptOpcodes.WORLDMAP_DISABLEELEMENTS) { + var10 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + Clock.getWorldMap().setElementsDisabled(var10); + return 1; + } else { + boolean var4; + if (var0 == ScriptOpcodes.WORLDMAP_DISABLEELEMENT) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var3 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var4 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1] == 1; + Clock.getWorldMap().disableElement(var3, var4); + return 1; + } else if (var0 == ScriptOpcodes.WORLDMAP_DISABLEELEMENTCATEGORY) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var3 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var4 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1] == 1; + Clock.getWorldMap().setCategoryDisabled(var3, var4); + return 1; + } else if (var0 == ScriptOpcodes.WORLDMAP_GETDISABLEELEMENTS) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Clock.getWorldMap().getElementsDisabled() ? 1 : 0; + return 1; + } else if (var0 == ScriptOpcodes.WORLDMAP_GETDISABLEELEMENT) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Clock.getWorldMap().isElementDisabled(var3) ? 1 : 0; + return 1; + } else if (var0 == ScriptOpcodes.WORLDMAP_GETDISABLEELEMENTCATEGORY) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Clock.getWorldMap().isCategoryDisabled(var3) ? 1 : 0; + return 1; + } else if (var0 == 6638) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var3 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var12 = new Coord(Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]); + var7 = Clock.getWorldMap().method6430(var3, var12); + if (var7 == null) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = -1; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var7.packed(); + } + + return 1; + } else { + AbstractWorldMapIcon var8; + if (var0 == ScriptOpcodes.WORLDMAP_LISTELEMENT_START) { + var8 = Clock.getWorldMap().iconStart(); + if (var8 == null) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = -1; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = -1; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var8.getElement(); + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var8.coord2.packed(); + } + + return 1; + } else if (var0 == ScriptOpcodes.WORLDMAP_LISTELEMENT_NEXT) { + var8 = Clock.getWorldMap().iconNext(); + if (var8 == null) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = -1; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = -1; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var8.getElement(); + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var8.coord2.packed(); + } + + return 1; + } else { + WorldMapElement var6; + if (var0 == ScriptOpcodes.MEC_TEXT) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var6 = Varcs.WorldMapElement_get(var3); + if (var6.name == null) { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = ""; + } else { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var6.name; + } + + return 1; + } else if (var0 == ScriptOpcodes.MEC_TEXTSIZE) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var6 = Varcs.WorldMapElement_get(var3); + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var6.textSize; + return 1; + } else if (var0 == ScriptOpcodes.MEC_CATEGORY) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var6 = Varcs.WorldMapElement_get(var3); + if (var6 == null) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = -1; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var6.category; + } + + return 1; + } else if (var0 == ScriptOpcodes.MEC_SPRITE) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var6 = Varcs.WorldMapElement_get(var3); + if (var6 == null) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = -1; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var6.sprite1; + } + + return 1; + } else if (var0 == ScriptOpcodes.WORLDMAP_ELEMENT) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Messages.worldMapEvent.mapElement; + return 1; + } else if (var0 == 6698) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Messages.worldMapEvent.coord1.packed(); + return 1; + } else if (var0 == ScriptOpcodes.WORLDMAP_ELEMENTCOORD) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Messages.worldMapEvent.coord2.packed(); + return 1; + } else { + return 2; + } + } + } + } + } + } + } + } } } - - if (var9 == null) { - var9 = new PendingSpawn(); - var9.plane = var0; - var9.type = var3; - var9.x = var1; - var9.y = var2; - FaceNormal.method3396(var9); - Client.pendingSpawns.addFirst(var9); - } - - var9.id = var4; - var9.field917 = var5; - var9.orientation = var6; - var9.delay = var7; - var9.hitpoints = var8; } - @ObfuscatedName("ld") + @ObfuscatedName("iv") @ObfuscatedSignature( - signature = "(Lkc;II)V", - garbageValue = "-1416348373" + signature = "(III)Ljava/lang/String;", + garbageValue = "-1702454117" ) - static void method103(Buffer var0, int var1) { - ClanMate.method5151(var0.array, var1); - if (JagexCache.JagexCache_randomDat != null) { - try { - JagexCache.JagexCache_randomDat.seek(0L); - JagexCache.JagexCache_randomDat.write(var0.array, var1, 24); - } catch (Exception var3) { - } + static final String method77(int var0, int var1) { + int var2 = var1 - var0; + if (var2 < -9) { + return class222.colorStartTag(16711680); + } else if (var2 < -6) { + return class222.colorStartTag(16723968); + } else if (var2 < -3) { + return class222.colorStartTag(16740352); + } else if (var2 < 0) { + return class222.colorStartTag(16756736); + } else if (var2 > 9) { + return class222.colorStartTag(65280); + } else if (var2 > 6) { + return class222.colorStartTag(4259584); + } else if (var2 > 3) { + return class222.colorStartTag(8453888); + } else { + return var2 > 0 ? class222.colorStartTag(12648192) : class222.colorStartTag(16776960); } - } } diff --git a/runescape-client/src/main/java/GraphicsDefaults.java b/runescape-client/src/main/java/GraphicsDefaults.java index c9d543cf6b..f14e6cadb7 100644 --- a/runescape-client/src/main/java/GraphicsDefaults.java +++ b/runescape-client/src/main/java/GraphicsDefaults.java @@ -3,92 +3,91 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("kb") +@ObfuscatedName("ku") @Implements("GraphicsDefaults") public class GraphicsDefaults { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedGetter( - intValue = 355639221 + intValue = 576730349 ) @Export("compass") public int compass; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = 1345037469 + intValue = 262749653 ) - public int field3787; - @ObfuscatedName("n") + public int field3808; + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = 1267920099 + intValue = -1408165655 ) @Export("mapScenes") public int mapScenes; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = -1711317783 + intValue = -951498167 ) @Export("headIconsPk") public int headIconsPk; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = 1346521291 + intValue = 62857473 ) - public int field3790; - @ObfuscatedName("l") + public int field3799; + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = 850710053 + intValue = 1864495415 ) - public int field3786; - @ObfuscatedName("c") + public int field3804; + @ObfuscatedName("h") @ObfuscatedGetter( - intValue = 258806615 + intValue = -1605363745 ) - public int field3791; - @ObfuscatedName("o") + public int field3805; + @ObfuscatedName("y") @ObfuscatedGetter( - intValue = -1735079565 + intValue = -177407337 ) - public int field3793; + public int field3806; + @ObfuscatedName("w") + @ObfuscatedGetter( + intValue = -410491181 + ) + public int field3807; @ObfuscatedName("i") @ObfuscatedGetter( - intValue = 579452143 + intValue = -270590657 ) - public int field3794; - @ObfuscatedName("d") + public int field3800; + @ObfuscatedName("k") @ObfuscatedGetter( - intValue = 942987761 + intValue = 838114045 ) - public int field3795; - @ObfuscatedName("m") - @ObfuscatedGetter( - intValue = -2075865955 - ) - public int field3796; + public int field3809; public GraphicsDefaults() { this.compass = -1; - this.field3787 = -1; + this.field3808 = -1; this.mapScenes = -1; this.headIconsPk = -1; - this.field3790 = -1; - this.field3786 = -1; - this.field3791 = -1; - this.field3793 = -1; - this.field3794 = -1; - this.field3795 = -1; - this.field3796 = -1; + this.field3799 = -1; + this.field3804 = -1; + this.field3805 = -1; + this.field3806 = -1; + this.field3807 = -1; + this.field3800 = -1; + this.field3809 = -1; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Lhq;I)V", - garbageValue = "-1902520988" + signature = "(Lhf;B)V", + garbageValue = "16" ) @Export("decode") public void decode(AbstractArchive var1) { - byte[] var2 = var1.takeFileFlat(DefaultsGroup.field3785.group); + byte[] var2 = var1.takeFileFlat(DefaultsGroup.field3797.group); Buffer var3 = new Buffer(var2); while (true) { @@ -102,32 +101,29 @@ public class GraphicsDefaults { var3.readMedium(); break; case 2: - this.compass = var3.method5638(); - this.field3787 = var3.method5638(); - this.mapScenes = var3.method5638(); - this.headIconsPk = var3.method5638(); - this.field3790 = var3.method5638(); - this.field3786 = var3.method5638(); - this.field3791 = var3.method5638(); - this.field3793 = var3.method5638(); - this.field3794 = var3.method5638(); - this.field3795 = var3.method5638(); - this.field3796 = var3.method5638(); + this.compass = var3.method5618(); + this.field3808 = var3.method5618(); + this.mapScenes = var3.method5618(); + this.headIconsPk = var3.method5618(); + this.field3799 = var3.method5618(); + this.field3804 = var3.method5618(); + this.field3805 = var3.method5618(); + this.field3806 = var3.method5618(); + this.field3807 = var3.method5618(); + this.field3800 = var3.method5618(); + this.field3809 = var3.method5618(); } } } - @ObfuscatedName("au") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(ILcj;ZI)I", - garbageValue = "1720763557" + signature = "(Lhf;Ljava/lang/String;Ljava/lang/String;I)[Lln;", + garbageValue = "-1956835175" ) - static int method6006(int var0, Script var1, boolean var2) { - if (var0 == ScriptOpcodes.LOGOUT) { - Client.logoutTimer = 250; - return 1; - } else { - return 2; - } + public static Sprite[] method5997(AbstractArchive var0, String var1, String var2) { + int var3 = var0.getGroupId(var1); + int var4 = var0.getFileId(var3, var2); + return UserComparator5.SpriteBuffer_getSpriteArray(var0, var3, var4); } } diff --git a/runescape-client/src/main/java/GraphicsObject.java b/runescape-client/src/main/java/GraphicsObject.java index 48cde0eb67..7b6529c50c 100644 --- a/runescape-client/src/main/java/GraphicsObject.java +++ b/runescape-client/src/main/java/GraphicsObject.java @@ -4,64 +4,70 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("bp") +@ObfuscatedName("bk") @Implements("GraphicsObject") public final class GraphicsObject extends Entity { - @ObfuscatedName("a") + @ObfuscatedName("by") + @ObfuscatedSignature( + signature = "[Llm;" + ) + @Export("worldSelectStars") + static IndexedSprite[] worldSelectStars; + @ObfuscatedName("u") @ObfuscatedGetter( - intValue = 1802533403 + intValue = 816767025 ) @Export("id") int id; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = 41870533 + intValue = -1764619827 ) @Export("cycleStart") int cycleStart; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = 2097627587 + intValue = -356819999 ) @Export("plane") int plane; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = 1396277017 + intValue = -200533199 ) @Export("x") int x; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = 176169087 - ) - @Export("y") - int y; - @ObfuscatedName("l") - @ObfuscatedGetter( - intValue = -1076898081 + intValue = 528585543 ) @Export("height") int height; - @ObfuscatedName("c") + @ObfuscatedName("p") + @ObfuscatedGetter( + intValue = 1230154279 + ) + @Export("y") + int y; + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "Liv;" + signature = "Liy;" ) @Export("sequenceDefinition") SequenceDefinition sequenceDefinition; - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedGetter( - intValue = 977223341 + intValue = 1295103123 ) @Export("frame") int frame; - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedGetter( - intValue = -706128457 + intValue = 1745958933 ) @Export("frameCycle") int frameCycle; - @ObfuscatedName("d") + @ObfuscatedName("i") @Export("isFinished") boolean isFinished; @@ -75,20 +81,20 @@ public final class GraphicsObject extends Entity { this.y = var4; this.height = var5; this.cycleStart = var7 + var6; - int var8 = MenuAction.SpotAnimationDefinition_get(this.id).sequence; + int var8 = WorldMapRegion.SpotAnimationDefinition_get(this.id).sequence; if (var8 != -1) { this.isFinished = false; - this.sequenceDefinition = PlayerType.SequenceDefinition_get(var8); + this.sequenceDefinition = GrandExchangeOfferAgeComparator.SequenceDefinition_get(var8); } else { this.isFinished = true; } } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "(IB)V", - garbageValue = "1" + garbageValue = "-93" ) @Export("advance") final void advance(int var1) { @@ -107,14 +113,14 @@ public final class GraphicsObject extends Entity { } } - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedSignature( - signature = "(B)Ldv;", - garbageValue = "-40" + signature = "(I)Ldf;", + garbageValue = "-174129419" ) @Export("getModel") protected final Model getModel() { - SpotAnimationDefinition var1 = MenuAction.SpotAnimationDefinition_get(this.id); + SpotAnimationDefinition var1 = WorldMapRegion.SpotAnimationDefinition_get(this.id); Model var2; if (!this.isFinished) { var2 = var1.getModel(this.frame); @@ -125,53 +131,207 @@ public final class GraphicsObject extends Entity { return var2 == null ? null : var2; } - @ObfuscatedName("a") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(II)I", - garbageValue = "-1912506698" + signature = "(Lkj;I)V", + garbageValue = "-219604871" ) - public static int method2158(int var0) { - var0 = (var0 & 1431655765) + (var0 >>> 1 & 1431655765); - var0 = (var0 >>> 2 & 858993459) + (var0 & 858993459); - var0 = var0 + (var0 >>> 4) & 252645135; - var0 += var0 >>> 8; - var0 += var0 >>> 16; - return var0 & 255; + static final void method2041(PacketBuffer var0) { + int var1 = 0; + var0.importIndex(); + + byte[] var10000; + int var2; + int var3; + int var4; + for (var2 = 0; var2 < Players.Players_count; ++var2) { + var3 = Players.Players_indices[var2]; + if ((Players.field1246[var3] & 1) == 0) { + if (var1 > 0) { + --var1; + var10000 = Players.field1246; + var10000[var3] = (byte)(var10000[var3] | 2); + } else { + var4 = var0.readBits(1); + if (var4 == 0) { + var1 = Login.method2124(var0); + var10000 = Players.field1246; + var10000[var3] = (byte)(var10000[var3] | 2); + } else { + GrandExchangeOfferNameComparator.readPlayerUpdate(var0, var3); + } + } + } + } + + var0.exportIndex(); + if (var1 != 0) { + throw new RuntimeException(); + } else { + var0.importIndex(); + + for (var2 = 0; var2 < Players.Players_count; ++var2) { + var3 = Players.Players_indices[var2]; + if ((Players.field1246[var3] & 1) != 0) { + if (var1 > 0) { + --var1; + var10000 = Players.field1246; + var10000[var3] = (byte)(var10000[var3] | 2); + } else { + var4 = var0.readBits(1); + if (var4 == 0) { + var1 = Login.method2124(var0); + var10000 = Players.field1246; + var10000[var3] = (byte)(var10000[var3] | 2); + } else { + GrandExchangeOfferNameComparator.readPlayerUpdate(var0, var3); + } + } + } + } + + var0.exportIndex(); + if (var1 != 0) { + throw new RuntimeException(); + } else { + var0.importIndex(); + + for (var2 = 0; var2 < Players.Players_emptyIdxCount; ++var2) { + var3 = Players.Players_emptyIndices[var2]; + if ((Players.field1246[var3] & 1) != 0) { + if (var1 > 0) { + --var1; + var10000 = Players.field1246; + var10000[var3] = (byte)(var10000[var3] | 2); + } else { + var4 = var0.readBits(1); + if (var4 == 0) { + var1 = Login.method2124(var0); + var10000 = Players.field1246; + var10000[var3] = (byte)(var10000[var3] | 2); + } else if (Client.updateExternalPlayer(var0, var3)) { + var10000 = Players.field1246; + var10000[var3] = (byte)(var10000[var3] | 2); + } + } + } + } + + var0.exportIndex(); + if (var1 != 0) { + throw new RuntimeException(); + } else { + var0.importIndex(); + + for (var2 = 0; var2 < Players.Players_emptyIdxCount; ++var2) { + var3 = Players.Players_emptyIndices[var2]; + if ((Players.field1246[var3] & 1) == 0) { + if (var1 > 0) { + --var1; + var10000 = Players.field1246; + var10000[var3] = (byte)(var10000[var3] | 2); + } else { + var4 = var0.readBits(1); + if (var4 == 0) { + var1 = Login.method2124(var0); + var10000 = Players.field1246; + var10000[var3] = (byte)(var10000[var3] | 2); + } else if (Client.updateExternalPlayer(var0, var3)) { + var10000 = Players.field1246; + var10000[var3] = (byte)(var10000[var3] | 2); + } + } + } + } + + var0.exportIndex(); + if (var1 != 0) { + throw new RuntimeException(); + } else { + Players.Players_count = 0; + Players.Players_emptyIdxCount = 0; + + for (var2 = 1; var2 < 2048; ++var2) { + var10000 = Players.field1246; + var10000[var2] = (byte)(var10000[var2] >> 1); + Player var5 = Client.players[var2]; + if (var5 != null) { + Players.Players_indices[++Players.Players_count - 1] = var2; + } else { + Players.Players_emptyIndices[++Players.Players_emptyIdxCount - 1] = var2; + } + } + + } + } + } + } + } + + @ObfuscatedName("b") + @ObfuscatedSignature( + signature = "(Ljava/lang/String;II)Z", + garbageValue = "1506076524" + ) + static boolean method2040(String var0, int var1) { + return class237.method4422(var0, var1, "openjs"); + } + + @ObfuscatedName("x") + @ObfuscatedSignature( + signature = "(Lhf;IIB)Z", + garbageValue = "19" + ) + public static boolean method2030(AbstractArchive var0, int var1, int var2) { + byte[] var3 = var0.takeFile(var1, var2); + if (var3 == null) { + return false; + } else { + Buffer.SpriteBuffer_decode(var3); + return true; + } } @ObfuscatedName("n") - static boolean method2155(long var0) { - boolean var2 = var0 != 0L; - if (var2) { - boolean var3 = (int)(var0 >>> 16 & 1L) == 1; - var2 = !var3; - } - - return var2; + @ObfuscatedSignature( + signature = "(I)V", + garbageValue = "-1587719078" + ) + public static void method2039() { + ObjectDefinition.ObjectDefinition_cached.clear(); + ObjectDefinition.ObjectDefinition_cachedModelData.clear(); + ObjectDefinition.ObjectDefinition_cachedEntities.clear(); + ObjectDefinition.ObjectDefinition_cachedModels.clear(); } - @ObfuscatedName("hi") + @ObfuscatedName("in") @ObfuscatedSignature( - signature = "(IIII)I", - garbageValue = "-1853163943" + signature = "(Ljava/lang/String;Lhl;S)Ljava/lang/String;", + garbageValue = "128" ) - @Export("getTileHeight") - static final int getTileHeight(int var0, int var1, int var2) { - int var3 = var0 >> 7; - int var4 = var1 >> 7; - if (var3 >= 0 && var4 >= 0 && var3 <= 103 && var4 <= 103) { - int var5 = var2; - if (var2 < 3 && (Tiles.Tiles_renderFlags[1][var3][var4] & 2) == 2) { - var5 = var2 + 1; - } + static String method2036(String var0, Widget var1) { + if (var0.indexOf("%") != -1) { + for (int var2 = 1; var2 <= 5; ++var2) { + while (true) { + int var3 = var0.indexOf("%" + var2); + if (var3 == -1) { + break; + } - int var6 = var0 & 127; - int var7 = var1 & 127; - int var8 = (128 - var6) * Tiles.Tiles_heights[var5][var3][var4] + var6 * Tiles.Tiles_heights[var5][var3 + 1][var4] >> 7; - int var9 = var6 * Tiles.Tiles_heights[var5][var3 + 1][var4 + 1] + Tiles.Tiles_heights[var5][var3][var4 + 1] * (128 - var6) >> 7; - return var8 * (128 - var7) + var7 * var9 >> 7; - } else { - return 0; + String var4 = var0.substring(0, var3); + int var6 = Language.method3719(var1, var2 - 1); + String var5; + if (var6 < 999999999) { + var5 = Integer.toString(var6); + } else { + var5 = "*"; + } + + var0 = var4 + var5 + var0.substring(var3 + 2); + } + } } + + return var0; } } diff --git a/runescape-client/src/main/java/HealthBar.java b/runescape-client/src/main/java/HealthBar.java index ee33b80ee4..d971b950d9 100644 --- a/runescape-client/src/main/java/HealthBar.java +++ b/runescape-client/src/main/java/HealthBar.java @@ -4,25 +4,27 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("cx") +@ObfuscatedName("cm") @Implements("HealthBar") public class HealthBar extends Node { - @ObfuscatedName("v") - @Export("SpriteBuffer_yOffsets") - public static int[] SpriteBuffer_yOffsets; - @ObfuscatedName("fj") + @ObfuscatedName("ay") @ObfuscatedGetter( - intValue = 1157381415 + intValue = -1667121911 ) - @Export("baseY") - static int baseY; - @ObfuscatedName("n") + static int field1115; + @ObfuscatedName("kt") + @ObfuscatedGetter( + intValue = 751391879 + ) + @Export("menuX") + static int menuX; + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Lil;" + signature = "Liz;" ) @Export("definition") HealthBarDefinition definition; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( signature = "Ljm;" ) @@ -30,17 +32,17 @@ public class HealthBar extends Node { IterableNodeDeque updates; @ObfuscatedSignature( - signature = "(Lil;)V" + signature = "(Liz;)V" ) HealthBar(HealthBarDefinition var1) { this.updates = new IterableNodeDeque(); this.definition = var1; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(IIIII)V", - garbageValue = "703172784" + signature = "(IIIIB)V", + garbageValue = "34" ) @Export("put") void put(int var1, int var2, int var3, int var4) { @@ -73,10 +75,10 @@ public class HealthBar extends Node { } } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(II)Lbo;", - garbageValue = "1147155972" + signature = "(II)Lbl;", + garbageValue = "-1781435459" ) @Export("get") HealthBarUpdate get(int var1) { @@ -87,7 +89,7 @@ public class HealthBar extends Node { var2 = var3; } - if (this.definition.int5 + var2.cycleOffset + var2.cycle > var1) { + if (this.definition.int5 + var2.cycle + var2.cycleOffset > var1) { return var2; } else { var2.remove(); @@ -98,33 +100,78 @@ public class HealthBar extends Node { } } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(B)Z", - garbageValue = "-47" + signature = "(I)Z", + garbageValue = "1222201022" ) @Export("isEmpty") boolean isEmpty() { - return this.updates.method5004(); + return this.updates.method4911(); } - @ObfuscatedName("ap") + @ObfuscatedName("n") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "2136910933" + garbageValue = "-154641567" ) - protected static final void method2161() { - GameShell.clock.mark(); + public static void method2054() { + Widget.Widget_cachedSprites.clear(); + Widget.Widget_cachedModels.clear(); + Widget.Widget_cachedFonts.clear(); + Widget.Widget_cachedSpriteMasks.clear(); + } - int var0; - for (var0 = 0; var0 < 32; ++var0) { - GameShell.graphicsTickTimes[var0] = 0L; + @ObfuscatedName("hh") + @ObfuscatedSignature( + signature = "(III)V", + garbageValue = "1071237867" + ) + @Export("updateItemPile") + static final void updateItemPile(int var0, int var1) { + NodeDeque var2 = Client.groundItems[ClientPacket.Client_plane][var0][var1]; + if (var2 == null) { + class2.scene.removeGroundItemPile(ClientPacket.Client_plane, var0, var1); + } else { + long var3 = -99999999L; + TileItem var5 = null; + + TileItem var6; + for (var6 = (TileItem)var2.last(); var6 != null; var6 = (TileItem)var2.previous()) { + ItemDefinition var7 = Interpreter.ItemDefinition_get(var6.id); + long var8 = (long)var7.price; + if (var7.isStackable == 1) { + var8 *= (long)(var6.quantity + 1); + } + + if (var8 > var3) { + var3 = var8; + var5 = var6; + } + } + + if (var5 == null) { + class2.scene.removeGroundItemPile(ClientPacket.Client_plane, var0, var1); + } else { + var2.addLast(var5); + TileItem var12 = null; + TileItem var11 = null; + + for (var6 = (TileItem)var2.last(); var6 != null; var6 = (TileItem)var2.previous()) { + if (var6.id != var5.id) { + if (var12 == null) { + var12 = var6; + } + + if (var12.id != var6.id && var11 == null) { + var11 = var6; + } + } + } + + long var9 = MouseHandler.calculateTag(var0, var1, 3, false, 0); + class2.scene.newGroundItemPile(ClientPacket.Client_plane, var0, var1, class195.getTileHeight(var0 * 128 + 64, var1 * 128 + 64, ClientPacket.Client_plane), var5, var9, var12, var11); + } } - - for (var0 = 0; var0 < 32; ++var0) { - GameShell.clientTickTimes[var0] = 0L; - } - - ArchiveLoader.gameCyclesToDo = 0; } } diff --git a/runescape-client/src/main/java/HealthBarDefinition.java b/runescape-client/src/main/java/HealthBarDefinition.java index a7786293bd..9c6c4b71c8 100644 --- a/runescape-client/src/main/java/HealthBarDefinition.java +++ b/runescape-client/src/main/java/HealthBarDefinition.java @@ -4,89 +4,89 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("il") +@ObfuscatedName("iz") @Implements("HealthBarDefinition") public class HealthBarDefinition extends DualNode { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lhq;" + signature = "Lhf;" ) @Export("HealthBarDefinition_archive") public static AbstractArchive HealthBarDefinition_archive; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lhq;" + signature = "Lhf;" ) @Export("HitSplatDefinition_spritesArchive") - public static AbstractArchive HitSplatDefinition_spritesArchive; - @ObfuscatedName("n") + static AbstractArchive HitSplatDefinition_spritesArchive; + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Leb;" + signature = "Lef;" ) @Export("HealthBarDefinition_cached") public static EvictingDualNodeHashTable HealthBarDefinition_cached; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Leb;" + signature = "Lef;" ) @Export("HealthBarDefinition_cachedSprites") - public static EvictingDualNodeHashTable HealthBarDefinition_cachedSprites; - @ObfuscatedName("v") + static EvictingDualNodeHashTable HealthBarDefinition_cachedSprites; + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = 1067342333 + intValue = -857529975 ) - public int field3265; - @ObfuscatedName("o") + public int field3294; + @ObfuscatedName("y") @ObfuscatedGetter( - intValue = 2032079417 + intValue = -1543890887 ) @Export("int1") public int int1; - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedGetter( - intValue = -1420994465 + intValue = 1006919413 ) @Export("int2") public int int2; - @ObfuscatedName("d") + @ObfuscatedName("i") @ObfuscatedGetter( - intValue = -601170319 + intValue = -1284122497 ) @Export("int3") public int int3; - @ObfuscatedName("m") + @ObfuscatedName("k") @ObfuscatedGetter( - intValue = 1370340653 + intValue = -1289071467 ) @Export("int4") public int int4; - @ObfuscatedName("p") + @ObfuscatedName("x") @ObfuscatedGetter( - intValue = -197026089 + intValue = -658363057 ) @Export("int5") public int int5; - @ObfuscatedName("h") + @ObfuscatedName("o") @ObfuscatedGetter( - intValue = -376766097 + intValue = -2107452847 ) @Export("frontSpriteID") int frontSpriteID; - @ObfuscatedName("k") + @ObfuscatedName("e") @ObfuscatedGetter( - intValue = 1409027365 + intValue = -1482452371 ) @Export("backSpriteID") int backSpriteID; - @ObfuscatedName("x") + @ObfuscatedName("n") @ObfuscatedGetter( - intValue = 1180776485 + intValue = -1572537397 ) @Export("width") public int width; - @ObfuscatedName("j") + @ObfuscatedName("r") @ObfuscatedGetter( - intValue = -975829671 + intValue = -1358361165 ) @Export("widthPadding") public int widthPadding; @@ -108,10 +108,10 @@ public class HealthBarDefinition extends DualNode { this.widthPadding = 0; } - @ObfuscatedName("a") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Lkc;I)V", - garbageValue = "-276948452" + signature = "(Lkg;I)V", + garbageValue = "1732750389" ) @Export("decode") public void decode(Buffer var1) { @@ -125,10 +125,10 @@ public class HealthBarDefinition extends DualNode { } } - @ObfuscatedName("t") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(Lkc;II)V", - garbageValue = "431816555" + signature = "(Lkg;II)V", + garbageValue = "-186566893" ) @Export("decodeNext") void decodeNext(Buffer var1, int var2) { @@ -145,9 +145,9 @@ public class HealthBarDefinition extends DualNode { } else if (var2 == 6) { var1.readUnsignedByte(); } else if (var2 == 7) { - this.frontSpriteID = var1.method5638(); + this.frontSpriteID = var1.method5618(); } else if (var2 == 8) { - this.backSpriteID = var1.method5638(); + this.backSpriteID = var1.method5618(); } else if (var2 == 11) { this.int3 = var1.readUnsignedShort(); } else if (var2 == 14) { @@ -158,10 +158,10 @@ public class HealthBarDefinition extends DualNode { } - @ObfuscatedName("n") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(I)Llx;", - garbageValue = "-907904185" + signature = "(I)Lln;", + garbageValue = "621164098" ) @Export("getFrontSprite") public Sprite getFrontSprite() { @@ -172,7 +172,7 @@ public class HealthBarDefinition extends DualNode { if (var1 != null) { return var1; } else { - var1 = MenuAction.SpriteBuffer_getSprite(HitSplatDefinition_spritesArchive, this.frontSpriteID, 0); + var1 = class288.SpriteBuffer_getSprite(HitSplatDefinition_spritesArchive, this.frontSpriteID, 0); if (var1 != null) { HealthBarDefinition_cachedSprites.put(var1, (long)this.frontSpriteID); } @@ -182,10 +182,10 @@ public class HealthBarDefinition extends DualNode { } } - @ObfuscatedName("q") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(I)Llx;", - garbageValue = "1192801770" + signature = "(I)Lln;", + garbageValue = "2117531338" ) @Export("getBackSprite") public Sprite getBackSprite() { @@ -196,7 +196,7 @@ public class HealthBarDefinition extends DualNode { if (var1 != null) { return var1; } else { - var1 = MenuAction.SpriteBuffer_getSprite(HitSplatDefinition_spritesArchive, this.backSpriteID, 0); + var1 = class288.SpriteBuffer_getSprite(HitSplatDefinition_spritesArchive, this.backSpriteID, 0); if (var1 != null) { HealthBarDefinition_cachedSprites.put(var1, (long)this.backSpriteID); } @@ -205,71 +205,4 @@ public class HealthBarDefinition extends DualNode { } } } - - @ObfuscatedName("ka") - @ObfuscatedSignature( - signature = "([Lhi;IB)V", - garbageValue = "-5" - ) - @Export("drawModelComponents") - static final void drawModelComponents(Widget[] var0, int var1) { - for (int var2 = 0; var2 < var0.length; ++var2) { - Widget var3 = var0[var2]; - if (var3 != null && var3.parentId == var1 && (!var3.isIf3 || !WorldMapManager.isComponentHidden(var3))) { - if (var3.type == 0) { - if (!var3.isIf3 && WorldMapManager.isComponentHidden(var3) && var3 != ChatChannel.mousedOverWidgetIf1) { - continue; - } - - drawModelComponents(var0, var3.id); - if (var3.children != null) { - drawModelComponents(var3.children, var3.id); - } - - InterfaceParent var4 = (InterfaceParent)Client.interfaceParents.get((long)var3.id); - if (var4 != null) { - AbstractWorldMapData.method326(var4.group); - } - } - - if (var3.type == 6) { - int var5; - if (var3.sequenceId != -1 || var3.sequenceId2 != -1) { - boolean var7 = SecureRandomCallable.runCs1(var3); - if (var7) { - var5 = var3.sequenceId2; - } else { - var5 = var3.sequenceId; - } - - if (var5 != -1) { - SequenceDefinition var6 = PlayerType.SequenceDefinition_get(var5); - - for (var3.modelFrameCycle += Client.field693; var3.modelFrameCycle > var6.frameLengths[var3.modelFrame]; GrandExchangeOfferAgeComparator.invalidateWidget(var3)) { - var3.modelFrameCycle -= var6.frameLengths[var3.modelFrame]; - ++var3.modelFrame; - if (var3.modelFrame >= var6.frameIds.length) { - var3.modelFrame -= var6.frameCount; - if (var3.modelFrame < 0 || var3.modelFrame >= var6.frameIds.length) { - var3.modelFrame = 0; - } - } - } - } - } - - if (var3.field2604 != 0 && !var3.isIf3) { - int var8 = var3.field2604 >> 16; - var5 = var3.field2604 << 16 >> 16; - var8 *= Client.field693; - var5 *= Client.field693; - var3.modelAngleX = var8 + var3.modelAngleX & 2047; - var3.modelAngleY = var5 + var3.modelAngleY & 2047; - GrandExchangeOfferAgeComparator.invalidateWidget(var3); - } - } - } - } - - } } diff --git a/runescape-client/src/main/java/HealthBarUpdate.java b/runescape-client/src/main/java/HealthBarUpdate.java index 18372427af..acd94e8aab 100644 --- a/runescape-client/src/main/java/HealthBarUpdate.java +++ b/runescape-client/src/main/java/HealthBarUpdate.java @@ -1,33 +1,41 @@ +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("bo") +@ObfuscatedName("bl") @Implements("HealthBarUpdate") public class HealthBarUpdate extends Node { - @ObfuscatedName("a") + @ObfuscatedName("iz") @ObfuscatedGetter( - intValue = 2144411335 + intValue = -627572607 + ) + @Export("selectedItemId") + static int selectedItemId; + @ObfuscatedName("u") + @ObfuscatedGetter( + intValue = -8508907 ) @Export("cycle") int cycle; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = 1016663119 + intValue = 1785180099 ) @Export("health") int health; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = 487242031 + intValue = -529706747 ) @Export("health2") int health2; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = 1175650203 + intValue = 1993456701 ) @Export("cycleOffset") int cycleOffset; @@ -39,10 +47,10 @@ public class HealthBarUpdate extends Node { this.cycleOffset = var4; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(IIIII)V", - garbageValue = "-287168900" + signature = "(IIIIB)V", + garbageValue = "2" ) @Export("set") void set(int var1, int var2, int var3, int var4) { @@ -52,31 +60,376 @@ public class HealthBarUpdate extends Node { this.cycleOffset = var4; } - @ObfuscatedName("k") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(III)I", - garbageValue = "212785133" + signature = "(II)I", + garbageValue = "-1436766786" ) - static final int method1880(int var0, int var1) { - if (var0 == -2) { - return 12345678; - } else if (var0 == -1) { - if (var1 < 2) { - var1 = 2; - } else if (var1 > 126) { - var1 = 126; + @Export("ViewportMouse_unpackX") + public static int ViewportMouse_unpackX(int var0) { + long var2 = ViewportMouse.ViewportMouse_entityTags[var0]; + int var1 = (int)(var2 >>> 0 & 127L); + return var1; + } + + @ObfuscatedName("ad") + @ObfuscatedSignature( + signature = "(Lfu;III)Lde;", + garbageValue = "148025221" + ) + public static final PcmPlayer method1776(TaskHandler var0, int var1, int var2) { + if (Messages.PcmPlayer_sampleRate == 0) { + throw new IllegalStateException(); + } else if (var1 >= 0 && var1 < 2) { + if (var2 < 256) { + var2 = 256; } - return var1; + try { + PcmPlayer var3 = Interpreter.pcmPlayerProvider.player(); + var3.samples = new int[256 * (PcmPlayer.PcmPlayer_stereo ? 2 : 1)]; + var3.field1401 = var2; + var3.init(); + var3.capacity = (var2 & -1024) + 1024; + if (var3.capacity > 16384) { + var3.capacity = 16384; + } + + var3.open(var3.capacity); + if (RouteStrategy.field2114 > 0 && PcmPlayer.soundSystem == null) { + PcmPlayer.soundSystem = new SoundSystem(); + PcmPlayer.soundSystemExecutor = Executors.newScheduledThreadPool(1); + PcmPlayer.soundSystemExecutor.scheduleAtFixedRate(PcmPlayer.soundSystem, 0L, 10L, TimeUnit.MILLISECONDS); + } + + if (PcmPlayer.soundSystem != null) { + if (PcmPlayer.soundSystem.players[var1] != null) { + throw new IllegalArgumentException(); + } + + PcmPlayer.soundSystem.players[var1] = var3; + } + + return var3; + } catch (Throwable var4) { + return new PcmPlayer(); + } } else { - var1 = (var0 & 127) * var1 / 128; - if (var1 < 2) { - var1 = 2; - } else if (var1 > 126) { - var1 = 126; + throw new IllegalArgumentException(); + } + } + + @ObfuscatedName("hv") + @ObfuscatedSignature( + signature = "(Lgd;I)V", + garbageValue = "1866013369" + ) + static final void method1779(class185 var0) { + PacketBuffer var1 = Client.packetWriter.packetBuffer; + int var2; + int var3; + int var4; + int var5; + int var6; + int var7; + int var8; + if (class185.field2340 == var0) { + var2 = var1.readUnsignedByte(); + var3 = var2 >> 2; + var4 = var2 & 3; + var5 = Client.field703[var3]; + var6 = var1.method5689(); + var7 = (var6 >> 4 & 7) + class227.field3092; + var8 = (var6 & 7) + class40.field343; + if (var7 >= 0 && var8 >= 0 && var7 < 104 && var8 < 104) { + Varps.updatePendingSpawn(ClientPacket.Client_plane, var7, var8, var5, -1, var3, var4, 0, -1); } - return (var0 & 65408) + var1; + } else { + int var9; + if (class185.field2337 == var0) { + var2 = var1.method5728(); + var3 = var2 >> 2; + var4 = var2 & 3; + var5 = Client.field703[var3]; + var6 = var1.readUnsignedShort(); + var7 = var1.readUnsignedByte(); + var8 = (var7 >> 4 & 7) + class227.field3092; + var9 = (var7 & 7) + class40.field343; + if (var8 >= 0 && var9 >= 0 && var8 < 104 && var9 < 104) { + Varps.updatePendingSpawn(ClientPacket.Client_plane, var8, var9, var5, var6, var3, var4, 0, -1); + } + + } else { + TileItem var32; + if (class185.field2339 == var0) { + var2 = var1.readUnsignedShort(); + var3 = var1.readUnsignedByte(); + var4 = (var3 >> 4 & 7) + class227.field3092; + var5 = (var3 & 7) + class40.field343; + if (var4 >= 0 && var5 >= 0 && var4 < 104 && var5 < 104) { + NodeDeque var31 = Client.groundItems[ClientPacket.Client_plane][var4][var5]; + if (var31 != null) { + for (var32 = (TileItem)var31.last(); var32 != null; var32 = (TileItem)var31.previous()) { + if ((var2 & 32767) == var32.id) { + var32.remove(); + break; + } + } + + if (var31.last() == null) { + Client.groundItems[ClientPacket.Client_plane][var4][var5] = null; + } + + HealthBar.updateItemPile(var4, var5); + } + } + + } else { + int var10; + if (class185.field2334 == var0) { + var2 = var1.readUnsignedByte(); + var3 = var2 >> 4 & 15; + var4 = var2 & 7; + var5 = var1.method5689(); + var6 = (var5 >> 4 & 7) + class227.field3092; + var7 = (var5 & 7) + class40.field343; + var8 = var1.method5631(); + var9 = var1.readUnsignedShort(); + if (var6 >= 0 && var7 >= 0 && var6 < 104 && var7 < 104) { + var10 = var3 + 1; + if (class215.localPlayer.pathX[0] >= var6 - var10 && class215.localPlayer.pathX[0] <= var10 + var6 && class215.localPlayer.pathY[0] >= var7 - var10 && class215.localPlayer.pathY[0] <= var10 + var7 && Client.areaSoundEffectVolume != 0 && var4 > 0 && Client.soundEffectCount < 50) { + Client.soundEffectIds[Client.soundEffectCount] = var9; + Client.queuedSoundEffectLoops[Client.soundEffectCount] = var4; + Client.queuedSoundEffectDelays[Client.soundEffectCount] = var8; + Client.soundEffects[Client.soundEffectCount] = null; + Client.soundLocations[Client.soundEffectCount] = var3 + (var7 << 8) + (var6 << 16); + ++Client.soundEffectCount; + } + } + } + + int var11; + int var12; + int var13; + int var14; + if (class185.field2336 == var0) { + var2 = var1.method5689(); + var3 = var1.readUnsignedShort(); + var4 = var1.method5719(); + var5 = var1.method5728(); + var6 = (var5 >> 4 & 7) + class227.field3092; + var7 = (var5 & 7) + class40.field343; + byte var37 = var1.readByte(); + var9 = var1.method5689() * 4; + var10 = var1.method5719(); + var11 = var1.method5689() * 4; + var12 = var1.method5643(); + byte var40 = var1.readByte(); + var14 = var1.method5728(); + var8 = var37 + var6; + var13 = var40 + var7; + if (var6 >= 0 && var7 >= 0 && var6 < 104 && var7 < 104 && var8 >= 0 && var13 >= 0 && var8 < 104 && var13 < 104 && var4 != 65535) { + var6 = var6 * 128 + 64; + var7 = var7 * 128 + 64; + var8 = var8 * 128 + 64; + var13 = var13 * 128 + 64; + Projectile var15 = new Projectile(var4, ClientPacket.Client_plane, var6, var7, class195.getTileHeight(var6, var7, ClientPacket.Client_plane) - var11, var3 + Client.cycle, var10 + Client.cycle, var14, var2, var12, var9); + var15.setDestination(var8, var13, class195.getTileHeight(var8, var13, ClientPacket.Client_plane) - var9, var3 + Client.cycle); + Client.projectiles.addFirst(var15); + } + + } else if (class185.field2332 == var0) { + var2 = var1.method5640(); + var3 = var1.method5689(); + var4 = (var3 >> 4 & 7) + class227.field3092; + var5 = (var3 & 7) + class40.field343; + var6 = var1.method5728(); + var7 = var6 >> 2; + var8 = var6 & 3; + var9 = Client.field703[var7]; + if (var4 >= 0 && var5 >= 0 && var4 < 103 && var5 < 103) { + if (var9 == 0) { + BoundaryObject var33 = class2.scene.method3130(ClientPacket.Client_plane, var4, var5); + if (var33 != null) { + var11 = ItemContainer.Entity_unpackID(var33.tag); + if (var7 == 2) { + var33.entity1 = new DynamicObject(var11, 2, var8 + 4, ClientPacket.Client_plane, var4, var5, var2, false, var33.entity1); + var33.entity2 = new DynamicObject(var11, 2, var8 + 1 & 3, ClientPacket.Client_plane, var4, var5, var2, false, var33.entity2); + } else { + var33.entity1 = new DynamicObject(var11, var7, var8, ClientPacket.Client_plane, var4, var5, var2, false, var33.entity1); + } + } + } + + if (var9 == 1) { + WallDecoration var41 = class2.scene.method3131(ClientPacket.Client_plane, var4, var5); + if (var41 != null) { + var11 = ItemContainer.Entity_unpackID(var41.tag); + if (var7 != 4 && var7 != 5) { + if (var7 == 6) { + var41.entity1 = new DynamicObject(var11, 4, var8 + 4, ClientPacket.Client_plane, var4, var5, var2, false, var41.entity1); + } else if (var7 == 7) { + var41.entity1 = new DynamicObject(var11, 4, (var8 + 2 & 3) + 4, ClientPacket.Client_plane, var4, var5, var2, false, var41.entity1); + } else if (var7 == 8) { + var41.entity1 = new DynamicObject(var11, 4, var8 + 4, ClientPacket.Client_plane, var4, var5, var2, false, var41.entity1); + var41.entity2 = new DynamicObject(var11, 4, (var8 + 2 & 3) + 4, ClientPacket.Client_plane, var4, var5, var2, false, var41.entity2); + } + } else { + var41.entity1 = new DynamicObject(var11, 4, var8, ClientPacket.Client_plane, var4, var5, var2, false, var41.entity1); + } + } + } + + if (var9 == 2) { + GameObject var42 = class2.scene.method3253(ClientPacket.Client_plane, var4, var5); + if (var7 == 11) { + var7 = 10; + } + + if (var42 != null) { + var42.entity = new DynamicObject(ItemContainer.Entity_unpackID(var42.tag), var7, var8, ClientPacket.Client_plane, var4, var5, var2, false, var42.entity); + } + } + + if (var9 == 3) { + FloorDecoration var43 = class2.scene.getFloorDecoration(ClientPacket.Client_plane, var4, var5); + if (var43 != null) { + var43.entity = new DynamicObject(ItemContainer.Entity_unpackID(var43.tag), 22, var8, ClientPacket.Client_plane, var4, var5, var2, false, var43.entity); + } + } + } + + } else if (class185.field2341 == var0) { + var2 = var1.method5640(); + var3 = var1.readUnsignedByte(); + var4 = var1.method5641(); + var5 = var1.readUnsignedByte(); + var6 = (var5 >> 4 & 7) + class227.field3092; + var7 = (var5 & 7) + class40.field343; + if (var6 >= 0 && var7 >= 0 && var6 < 104 && var7 < 104) { + var6 = var6 * 128 + 64; + var7 = var7 * 128 + 64; + GraphicsObject var44 = new GraphicsObject(var2, ClientPacket.Client_plane, var6, var7, class195.getTileHeight(var6, var7, ClientPacket.Client_plane) - var3, var4, Client.cycle); + Client.graphicsObjects.addFirst(var44); + } + + } else if (class185.field2331 == var0) { + var2 = var1.readUnsignedShort(); + var3 = var1.method5641(); + var4 = var1.method5641(); + var5 = var1.method5631(); + var6 = (var5 >> 4 & 7) + class227.field3092; + var7 = (var5 & 7) + class40.field343; + if (var6 >= 0 && var7 >= 0 && var6 < 104 && var7 < 104) { + NodeDeque var34 = Client.groundItems[ClientPacket.Client_plane][var6][var7]; + if (var34 != null) { + for (TileItem var35 = (TileItem)var34.last(); var35 != null; var35 = (TileItem)var34.previous()) { + if ((var2 & 32767) == var35.id && var4 == var35.quantity) { + var35.quantity = var3; + break; + } + } + + HealthBar.updateItemPile(var6, var7); + } + } + + } else if (class185.field2335 == var0) { + var2 = var1.readUnsignedShort(); + var3 = var1.readUnsignedByte(); + var4 = (var3 >> 4 & 7) + class227.field3092; + var5 = (var3 & 7) + class40.field343; + var6 = var1.method5640(); + if (var4 >= 0 && var5 >= 0 && var4 < 104 && var5 < 104) { + var32 = new TileItem(); + var32.id = var6; + var32.quantity = var2; + if (Client.groundItems[ClientPacket.Client_plane][var4][var5] == null) { + Client.groundItems[ClientPacket.Client_plane][var4][var5] = new NodeDeque(); + } + + Client.groundItems[ClientPacket.Client_plane][var4][var5].addFirst(var32); + HealthBar.updateItemPile(var4, var5); + } + + } else { + if (class185.field2333 == var0) { + var2 = var1.readUnsignedShort(); + var3 = var1.method5719(); + var4 = var1.method5689(); + var5 = var4 >> 2; + var6 = var4 & 3; + var7 = Client.field703[var5]; + var8 = var1.method5641(); + byte var38 = var1.method5772(); + byte var39 = var1.method5637(); + var11 = var1.readUnsignedByte(); + var12 = (var11 >> 4 & 7) + class227.field3092; + var13 = (var11 & 7) + class40.field343; + var14 = var1.method5719(); + byte var36 = var1.method5633(); + byte var16 = var1.method5637(); + Player var17; + if (var3 == Client.localPlayerIndex) { + var17 = class215.localPlayer; + } else { + var17 = Client.players[var3]; + } + + if (var17 != null) { + ObjectDefinition var18 = Occluder.getObjectDefinition(var2); + int var19; + int var20; + if (var6 != 1 && var6 != 3) { + var19 = var18.sizeX; + var20 = var18.sizeY; + } else { + var19 = var18.sizeY; + var20 = var18.sizeX; + } + + int var21 = var12 + (var19 >> 1); + int var22 = var12 + (var19 + 1 >> 1); + int var23 = var13 + (var20 >> 1); + int var24 = var13 + (var20 + 1 >> 1); + int[][] var25 = Tiles.Tiles_heights[ClientPacket.Client_plane]; + int var26 = var25[var22][var24] + var25[var22][var23] + var25[var21][var23] + var25[var21][var24] >> 2; + int var27 = (var12 << 7) + (var19 << 6); + int var28 = (var13 << 7) + (var20 << 6); + Model var29 = var18.getModel(var5, var6, var25, var27, var26, var28); + if (var29 != null) { + Varps.updatePendingSpawn(ClientPacket.Client_plane, var12, var13, var7, -1, 0, 0, var8 + 1, var14 + 1); + var17.animationCycleStart = var8 + Client.cycle; + var17.animationCycleEnd = var14 + Client.cycle; + var17.model0 = var29; + var17.field623 = var12 * 128 + var19 * 64; + var17.field617 = var13 * 128 + var20 * 64; + var17.tileHeight2 = var26; + byte var30; + if (var38 > var16) { + var30 = var38; + var38 = var16; + var16 = var30; + } + + if (var36 > var39) { + var30 = var36; + var36 = var39; + var39 = var30; + } + + var17.field618 = var12 + var38; + var17.field621 = var16 + var12; + var17.field620 = var13 + var36; + var17.field622 = var13 + var39; + } + } + } + + } + } + } } } } diff --git a/runescape-client/src/main/java/HitSplatDefinition.java b/runescape-client/src/main/java/HitSplatDefinition.java index dae6dfe6dc..5c06f40bb2 100644 --- a/runescape-client/src/main/java/HitSplatDefinition.java +++ b/runescape-client/src/main/java/HitSplatDefinition.java @@ -4,114 +4,120 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ii") +@ObfuscatedName("ix") @Implements("HitSplatDefinition") public class HitSplatDefinition extends DualNode { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lhq;" + signature = "Lhf;" ) @Export("HitSplatDefinition_archive") - static AbstractArchive HitSplatDefinition_archive; - @ObfuscatedName("t") + public static AbstractArchive HitSplatDefinition_archive; + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lhq;" + signature = "Lhf;" ) - static AbstractArchive field3316; - @ObfuscatedName("q") + public static AbstractArchive field3328; + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Leb;" + signature = "Lhf;" + ) + @Export("HitSplatDefinition_fontsArchive") + public static AbstractArchive HitSplatDefinition_fontsArchive; + @ObfuscatedName("g") + @ObfuscatedSignature( + signature = "Lef;" ) @Export("HitSplatDefinition_cached") public static EvictingDualNodeHashTable HitSplatDefinition_cached; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "Leb;" + signature = "Lef;" ) @Export("HitSplatDefinition_cachedSprites") public static EvictingDualNodeHashTable HitSplatDefinition_cachedSprites; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "Leb;" + signature = "Lef;" ) @Export("HitSplatDefinition_cachedFonts") public static EvictingDualNodeHashTable HitSplatDefinition_cachedFonts; - @ObfuscatedName("p") + @ObfuscatedName("x") @ObfuscatedGetter( - intValue = 941598511 + intValue = 1295461739 ) @Export("fontId") int fontId; - @ObfuscatedName("h") + @ObfuscatedName("o") @ObfuscatedGetter( - intValue = -697129173 + intValue = 963128035 ) @Export("textColor") public int textColor; - @ObfuscatedName("k") - @ObfuscatedGetter( - intValue = 2098099547 - ) - public int field3314; - @ObfuscatedName("x") - @ObfuscatedGetter( - intValue = 1587744329 - ) - int field3321; - @ObfuscatedName("j") - @ObfuscatedGetter( - intValue = -559813503 - ) - int field3320; - @ObfuscatedName("r") - @ObfuscatedGetter( - intValue = 1664346501 - ) - int field3323; @ObfuscatedName("e") @ObfuscatedGetter( - intValue = -798419301 + intValue = -1733975883 ) - int field3325; + public int field3338; + @ObfuscatedName("n") + @ObfuscatedGetter( + intValue = 195481813 + ) + int field3351; + @ObfuscatedName("r") + @ObfuscatedGetter( + intValue = -1766289865 + ) + int field3340; + @ObfuscatedName("c") + @ObfuscatedGetter( + intValue = -2096395153 + ) + int field3341; + @ObfuscatedName("a") + @ObfuscatedGetter( + intValue = -994685313 + ) + int field3349; + @ObfuscatedName("d") + @ObfuscatedGetter( + intValue = 634586915 + ) + public int field3343; @ObfuscatedName("s") @ObfuscatedGetter( - intValue = 1377626099 - ) - public int field3329; - @ObfuscatedName("b") - @ObfuscatedGetter( - intValue = -1078350425 - ) - public int field3315; - @ObfuscatedName("z") - @ObfuscatedGetter( - intValue = -328060003 + intValue = 139308797 ) public int field3327; - @ObfuscatedName("f") - String field3328; - @ObfuscatedName("g") + @ObfuscatedName("t") @ObfuscatedGetter( - intValue = 1213073095 + intValue = -1876635353 ) - public int field3313; - @ObfuscatedName("w") + public int field3348; + @ObfuscatedName("m") + String field3346; + @ObfuscatedName("v") @ObfuscatedGetter( - intValue = 1353538745 + intValue = -779748361 ) - public int field3330; - @ObfuscatedName("u") + public int field3347; + @ObfuscatedName("q") + @ObfuscatedGetter( + intValue = 1251989255 + ) + public int field3333; + @ObfuscatedName("l") @Export("transforms") public int[] transforms; - @ObfuscatedName("y") + @ObfuscatedName("j") @ObfuscatedGetter( - intValue = 1124290535 + intValue = -1418037543 ) @Export("transformVarbit") int transformVarbit; - @ObfuscatedName("aa") + @ObfuscatedName("af") @ObfuscatedGetter( - intValue = 1541441781 + intValue = -1584841553 ) @Export("transformVarp") int transformVarp; @@ -122,31 +128,31 @@ public class HitSplatDefinition extends DualNode { HitSplatDefinition_cachedFonts = new EvictingDualNodeHashTable(20); } - HitSplatDefinition() { + public HitSplatDefinition() { this.fontId = -1; this.textColor = 16777215; - this.field3314 = 70; - this.field3321 = -1; - this.field3320 = -1; - this.field3323 = -1; - this.field3325 = -1; - this.field3329 = 0; - this.field3315 = 0; - this.field3327 = -1; - this.field3328 = ""; - this.field3313 = -1; - this.field3330 = 0; + this.field3338 = 70; + this.field3351 = -1; + this.field3340 = -1; + this.field3341 = -1; + this.field3349 = -1; + this.field3343 = 0; + this.field3327 = 0; + this.field3348 = -1; + this.field3346 = ""; + this.field3347 = -1; + this.field3333 = 0; this.transformVarbit = -1; this.transformVarp = -1; } - @ObfuscatedName("n") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Lkc;I)V", - garbageValue = "1697924004" + signature = "(Lkg;B)V", + garbageValue = "87" ) @Export("decode") - void decode(Buffer var1) { + public void decode(Buffer var1) { while (true) { int var2 = var1.readUnsignedByte(); if (var2 == 0) { @@ -157,41 +163,41 @@ public class HitSplatDefinition extends DualNode { } } - @ObfuscatedName("q") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Lkc;II)V", - garbageValue = "149354669" + signature = "(Lkg;II)V", + garbageValue = "1254085068" ) @Export("decodeNext") void decodeNext(Buffer var1, int var2) { if (var2 == 1) { - this.fontId = var1.method5638(); + this.fontId = var1.method5618(); } else if (var2 == 2) { this.textColor = var1.readMedium(); } else if (var2 == 3) { - this.field3321 = var1.method5638(); + this.field3351 = var1.method5618(); } else if (var2 == 4) { - this.field3323 = var1.method5638(); + this.field3341 = var1.method5618(); } else if (var2 == 5) { - this.field3320 = var1.method5638(); + this.field3340 = var1.method5618(); } else if (var2 == 6) { - this.field3325 = var1.method5638(); + this.field3349 = var1.method5618(); } else if (var2 == 7) { - this.field3329 = var1.readShort(); + this.field3343 = var1.readShort(); } else if (var2 == 8) { - this.field3328 = var1.readStringCp1252NullCircumfixed(); + this.field3346 = var1.readStringCp1252NullCircumfixed(); } else if (var2 == 9) { - this.field3314 = var1.readUnsignedShort(); + this.field3338 = var1.readUnsignedShort(); } else if (var2 == 10) { - this.field3315 = var1.readShort(); + this.field3327 = var1.readShort(); } else if (var2 == 11) { - this.field3327 = 0; + this.field3348 = 0; } else if (var2 == 12) { - this.field3313 = var1.readUnsignedByte(); + this.field3347 = var1.readUnsignedByte(); } else if (var2 == 13) { - this.field3330 = var1.readShort(); + this.field3333 = var1.readShort(); } else if (var2 == 14) { - this.field3327 = var1.readUnsignedShort(); + this.field3348 = var1.readUnsignedShort(); } else if (var2 == 17 || var2 == 18) { this.transformVarbit = var1.readUnsignedShort(); if (this.transformVarbit == 65535) { @@ -226,16 +232,16 @@ public class HitSplatDefinition extends DualNode { } - @ObfuscatedName("v") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(B)Lii;", - garbageValue = "-47" + signature = "(I)Lix;", + garbageValue = "938920807" ) @Export("transform") public final HitSplatDefinition transform() { int var1 = -1; if (this.transformVarbit != -1) { - var1 = UserComparator9.getVarbit(this.transformVarbit); + var1 = FileSystem.getVarbit(this.transformVarbit); } else if (this.transformVarp != -1) { var1 = Varps.Varps_main[this.transformVarp]; } @@ -247,17 +253,36 @@ public class HitSplatDefinition extends DualNode { var2 = this.transforms[this.transforms.length - 1]; } - return var2 != -1 ? NetFileRequest.method4298(var2) : null; + if (var2 != -1) { + HitSplatDefinition var4 = (HitSplatDefinition)HitSplatDefinition_cached.get((long)var2); + HitSplatDefinition var3; + if (var4 != null) { + var3 = var4; + } else { + byte[] var5 = HitSplatDefinition_archive.takeFile(32, var2); + var4 = new HitSplatDefinition(); + if (var5 != null) { + var4.decode(new Buffer(var5)); + } + + HitSplatDefinition_cached.put(var4, (long)var2); + var3 = var4; + } + + return var3; + } else { + return null; + } } - @ObfuscatedName("l") + @ObfuscatedName("z") @ObfuscatedSignature( signature = "(II)Ljava/lang/String;", - garbageValue = "-121756337" + garbageValue = "-1476211586" ) @Export("getString") public String getString(int var1) { - String var2 = this.field3328; + String var2 = this.field3346; while (true) { int var3 = var2.indexOf("%1"); @@ -265,26 +290,26 @@ public class HitSplatDefinition extends DualNode { return var2; } - var2 = var2.substring(0, var3) + WorldMapData_0.intToString(var1, false) + var2.substring(var3 + 2); + var2 = var2.substring(0, var3) + VarbitDefinition.intToString(var1, false) + var2.substring(var3 + 2); } } - @ObfuscatedName("c") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(I)Llx;", - garbageValue = "1012145117" + signature = "(I)Lln;", + garbageValue = "138954957" ) - public Sprite method4719() { - if (this.field3321 < 0) { + public Sprite method4662() { + if (this.field3351 < 0) { return null; } else { - Sprite var1 = (Sprite)HitSplatDefinition_cachedSprites.get((long)this.field3321); + Sprite var1 = (Sprite)HitSplatDefinition_cachedSprites.get((long)this.field3351); if (var1 != null) { return var1; } else { - var1 = MenuAction.SpriteBuffer_getSprite(field3316, this.field3321, 0); + var1 = class288.SpriteBuffer_getSprite(field3328, this.field3351, 0); if (var1 != null) { - HitSplatDefinition_cachedSprites.put(var1, (long)this.field3321); + HitSplatDefinition_cachedSprites.put(var1, (long)this.field3351); } return var1; @@ -292,22 +317,68 @@ public class HitSplatDefinition extends DualNode { } } - @ObfuscatedName("o") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "(B)Llx;", - garbageValue = "-59" + signature = "(I)Lln;", + garbageValue = "-1751554235" ) - public Sprite method4709() { - if (this.field3320 < 0) { + public Sprite method4663() { + if (this.field3340 < 0) { return null; } else { - Sprite var1 = (Sprite)HitSplatDefinition_cachedSprites.get((long)this.field3320); + Sprite var1 = (Sprite)HitSplatDefinition_cachedSprites.get((long)this.field3340); if (var1 != null) { return var1; } else { - var1 = MenuAction.SpriteBuffer_getSprite(field3316, this.field3320, 0); + var1 = class288.SpriteBuffer_getSprite(field3328, this.field3340, 0); if (var1 != null) { - HitSplatDefinition_cachedSprites.put(var1, (long)this.field3320); + HitSplatDefinition_cachedSprites.put(var1, (long)this.field3340); + } + + return var1; + } + } + } + + @ObfuscatedName("y") + @ObfuscatedSignature( + signature = "(I)Lln;", + garbageValue = "243869561" + ) + public Sprite method4671() { + if (this.field3341 < 0) { + return null; + } else { + Sprite var1 = (Sprite)HitSplatDefinition_cachedSprites.get((long)this.field3341); + if (var1 != null) { + return var1; + } else { + var1 = class288.SpriteBuffer_getSprite(field3328, this.field3341, 0); + if (var1 != null) { + HitSplatDefinition_cachedSprites.put(var1, (long)this.field3341); + } + + return var1; + } + } + } + + @ObfuscatedName("w") + @ObfuscatedSignature( + signature = "(B)Lln;", + garbageValue = "20" + ) + public Sprite method4657() { + if (this.field3349 < 0) { + return null; + } else { + Sprite var1 = (Sprite)HitSplatDefinition_cachedSprites.get((long)this.field3349); + if (var1 != null) { + return var1; + } else { + var1 = class288.SpriteBuffer_getSprite(field3328, this.field3349, 0); + if (var1 != null) { + HitSplatDefinition_cachedSprites.put(var1, (long)this.field3349); } return var1; @@ -317,54 +388,8 @@ public class HitSplatDefinition extends DualNode { @ObfuscatedName("i") @ObfuscatedSignature( - signature = "(I)Llx;", - garbageValue = "477012988" - ) - public Sprite method4710() { - if (this.field3323 < 0) { - return null; - } else { - Sprite var1 = (Sprite)HitSplatDefinition_cachedSprites.get((long)this.field3323); - if (var1 != null) { - return var1; - } else { - var1 = MenuAction.SpriteBuffer_getSprite(field3316, this.field3323, 0); - if (var1 != null) { - HitSplatDefinition_cachedSprites.put(var1, (long)this.field3323); - } - - return var1; - } - } - } - - @ObfuscatedName("d") - @ObfuscatedSignature( - signature = "(I)Llx;", - garbageValue = "-1187157829" - ) - public Sprite method4731() { - if (this.field3325 < 0) { - return null; - } else { - Sprite var1 = (Sprite)HitSplatDefinition_cachedSprites.get((long)this.field3325); - if (var1 != null) { - return var1; - } else { - var1 = MenuAction.SpriteBuffer_getSprite(field3316, this.field3325, 0); - if (var1 != null) { - HitSplatDefinition_cachedSprites.put(var1, (long)this.field3325); - } - - return var1; - } - } - } - - @ObfuscatedName("m") - @ObfuscatedSignature( - signature = "(B)Lks;", - garbageValue = "0" + signature = "(I)Lky;", + garbageValue = "-816521399" ) @Export("getFont") public Font getFont() { @@ -375,7 +400,7 @@ public class HitSplatDefinition extends DualNode { if (var1 != null) { return var1; } else { - var1 = class269.method5114(field3316, class2.HitSplatDefinition_fontsArchive, this.fontId, 0); + var1 = class60.method1195(field3328, HitSplatDefinition_fontsArchive, this.fontId, 0); if (var1 != null) { HitSplatDefinition_cachedFonts.put(var1, (long)this.fontId); } @@ -384,170 +409,4 @@ public class HitSplatDefinition extends DualNode { } } } - - @ObfuscatedName("q") - @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "10408118" - ) - @Export("savePreferences") - static void savePreferences() { - AccessFile var0 = null; - - try { - var0 = CollisionMap.getPreferencesFile("", MouseHandler.field458.name, true); - Buffer var1 = ScriptEvent.clientPreferences.toBuffer(); - var0.write(var1.array, 0, var1.offset); - } catch (Exception var3) { - } - - try { - if (var0 != null) { - var0.closeSync(true); - } - } catch (Exception var2) { - } - - } - - @ObfuscatedName("gw") - @ObfuscatedSignature( - signature = "(Lbz;IB)V", - garbageValue = "-26" - ) - @Export("updateActorSequence") - static final void updateActorSequence(Actor var0, int var1) { - int var2; - if (var0.field925 > Client.cycle) { - WorldMapDecoration.method386(var0); - } else if (var0.field971 >= Client.cycle) { - if (var0.field971 == Client.cycle || var0.sequence == -1 || var0.sequenceDelay != 0 || var0.sequenceFrameCycle + 1 > PlayerType.SequenceDefinition_get(var0.sequence).frameLengths[var0.sequenceFrame]) { - var2 = var0.field971 - var0.field925; - int var3 = Client.cycle - var0.field925; - int var4 = var0.field966 * 128 + var0.field927 * 64; - int var5 = var0.field979 * 128 + var0.field927 * 64; - int var6 = var0.field967 * 128 + var0.field927 * 64; - int var7 = var0.field969 * 128 + var0.field927 * 64; - var0.x = (var6 * var3 + var4 * (var2 - var3)) / var2; - var0.y = (var3 * var7 + var5 * (var2 - var3)) / var2; - } - - var0.field982 = 0; - var0.orientation = var0.field972; - var0.rotation = var0.orientation; - } else { - ModelData0.method3377(var0); - } - - if (var0.x < 128 || var0.y < 128 || var0.x >= 13184 || var0.y >= 13184) { - var0.sequence = -1; - var0.spotAnimation = -1; - var0.field925 = 0; - var0.field971 = 0; - var0.x = var0.pathX[0] * 128 + var0.field927 * 64; - var0.y = var0.pathY[0] * 128 + var0.field927 * 64; - var0.method1862(); - } - - if (class215.localPlayer == var0 && (var0.x < 1536 || var0.y < 1536 || var0.x >= 11776 || var0.y >= 11776)) { - var0.sequence = -1; - var0.spotAnimation = -1; - var0.field925 = 0; - var0.field971 = 0; - var0.x = var0.pathX[0] * 128 + var0.field927 * 64; - var0.y = var0.pathY[0] * 128 + var0.field927 * 64; - var0.method1862(); - } - - Actor.method1873(var0); - var0.isWalking = false; - SequenceDefinition var8; - if (var0.movementSequence != -1) { - var8 = PlayerType.SequenceDefinition_get(var0.movementSequence); - if (var8 != null && var8.frameIds != null) { - ++var0.movementFrameCycle; - if (var0.movementFrame < var8.frameIds.length && var0.movementFrameCycle > var8.frameLengths[var0.movementFrame]) { - var0.movementFrameCycle = 1; - ++var0.movementFrame; - Tile.addSequenceSoundEffect(var8, var0.movementFrame, var0.x, var0.y); - } - - if (var0.movementFrame >= var8.frameIds.length) { - var0.movementFrameCycle = 0; - var0.movementFrame = 0; - Tile.addSequenceSoundEffect(var8, var0.movementFrame, var0.x, var0.y); - } - } else { - var0.movementSequence = -1; - } - } - - if (var0.spotAnimation != -1 && Client.cycle >= var0.field973) { - if (var0.spotAnimationFrame < 0) { - var0.spotAnimationFrame = 0; - } - - var2 = MenuAction.SpotAnimationDefinition_get(var0.spotAnimation).sequence; - if (var2 != -1) { - SequenceDefinition var9 = PlayerType.SequenceDefinition_get(var2); - if (var9 != null && var9.frameIds != null) { - ++var0.spotAnimationFrameCycle; - if (var0.spotAnimationFrame < var9.frameIds.length && var0.spotAnimationFrameCycle > var9.frameLengths[var0.spotAnimationFrame]) { - var0.spotAnimationFrameCycle = 1; - ++var0.spotAnimationFrame; - Tile.addSequenceSoundEffect(var9, var0.spotAnimationFrame, var0.x, var0.y); - } - - if (var0.spotAnimationFrame >= var9.frameIds.length && (var0.spotAnimationFrame < 0 || var0.spotAnimationFrame >= var9.frameIds.length)) { - var0.spotAnimation = -1; - } - } else { - var0.spotAnimation = -1; - } - } else { - var0.spotAnimation = -1; - } - } - - if (var0.sequence != -1 && var0.sequenceDelay <= 1) { - var8 = PlayerType.SequenceDefinition_get(var0.sequence); - if (var8.field3504 == 1 && var0.field983 > 0 && var0.field925 <= Client.cycle && var0.field971 < Client.cycle) { - var0.sequenceDelay = 1; - return; - } - } - - if (var0.sequence != -1 && var0.sequenceDelay == 0) { - var8 = PlayerType.SequenceDefinition_get(var0.sequence); - if (var8 != null && var8.frameIds != null) { - ++var0.sequenceFrameCycle; - if (var0.sequenceFrame < var8.frameIds.length && var0.sequenceFrameCycle > var8.frameLengths[var0.sequenceFrame]) { - var0.sequenceFrameCycle = 1; - ++var0.sequenceFrame; - Tile.addSequenceSoundEffect(var8, var0.sequenceFrame, var0.x, var0.y); - } - - if (var0.sequenceFrame >= var8.frameIds.length) { - var0.sequenceFrame -= var8.frameCount; - ++var0.field960; - if (var0.field960 >= var8.field3518) { - var0.sequence = -1; - } else if (var0.sequenceFrame >= 0 && var0.sequenceFrame < var8.frameIds.length) { - Tile.addSequenceSoundEffect(var8, var0.sequenceFrame, var0.x, var0.y); - } else { - var0.sequence = -1; - } - } - - var0.isWalking = var8.field3514; - } else { - var0.sequence = -1; - } - } - - if (var0.sequenceDelay > 0) { - --var0.sequenceDelay; - } - - } } diff --git a/runescape-client/src/main/java/HorizontalAlignment.java b/runescape-client/src/main/java/HorizontalAlignment.java index 428e5f4e46..a1447224d6 100644 --- a/runescape-client/src/main/java/HorizontalAlignment.java +++ b/runescape-client/src/main/java/HorizontalAlignment.java @@ -4,38 +4,35 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("in") +@ObfuscatedName("ip") @Implements("HorizontalAlignment") public enum HorizontalAlignment implements Enumerated { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lin;" + signature = "Lip;" ) - field3449(0, 0), - @ObfuscatedName("t") + field3462(1, 0), + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lin;" + signature = "Lip;" ) @Export("HorizontalAlignment_centered") - HorizontalAlignment_centered(1, 1), - @ObfuscatedName("n") + HorizontalAlignment_centered(2, 1), + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Lin;" + signature = "Lip;" ) - field3447(2, 2); + field3458(0, 2); - @ObfuscatedName("i") - @Export("ByteArrayPool_arrays") - static byte[][][] ByteArrayPool_arrays; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = 1143014811 + intValue = -1180720231 ) @Export("value") public final int value; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = -510132141 + intValue = 1019628395 ) @Export("id") final int id; @@ -45,10 +42,10 @@ public enum HorizontalAlignment implements Enumerated { this.id = var4; } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(I)I", - garbageValue = "-1993081102" + signature = "(B)I", + garbageValue = "7" ) @Export("rsOrdinal") public int rsOrdinal() { diff --git a/runescape-client/src/main/java/Huffman.java b/runescape-client/src/main/java/Huffman.java index 8fa9a194b6..b543eebcd4 100644 --- a/runescape-client/src/main/java/Huffman.java +++ b/runescape-client/src/main/java/Huffman.java @@ -1,24 +1,18 @@ import net.runelite.mapping.Export; import net.runelite.mapping.Implements; -import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("hx") +@ObfuscatedName("hg") @Implements("Huffman") public class Huffman { - @ObfuscatedName("as") - @ObfuscatedGetter( - intValue = 821038913 - ) - static int field2491; - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("masks") int[] masks; - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("bits") byte[] bits; - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("keys") int[] keys; @@ -47,7 +41,7 @@ public class Huffman { for (var10 = var6 - 1; var10 >= 1; --var10) { var11 = var3[var10]; - if (var11 != var8) { + if (var8 != var11) { break; } @@ -105,10 +99,10 @@ public class Huffman { } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "([BII[BIB)I", - garbageValue = "14" + garbageValue = "-1" ) @Export("compress") int compress(byte[] var1, int var2, int var3, byte[] var4, int var5) { @@ -126,7 +120,7 @@ public class Huffman { int var11 = var7 >> 3; int var12 = var7 & 7; var6 &= -var12 >> 31; - int var13 = (var10 + var12 - 1 >> 3) + var11; + int var13 = (var12 + var10 - 1 >> 3) + var11; var12 += 24; var4[var11] = (byte)(var6 |= var9 >>> var12); if (var11 < var13) { @@ -156,10 +150,10 @@ public class Huffman { return (var7 + 7 >> 3) - var5; } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "([BI[BIIB)I", - garbageValue = "-1" + signature = "([BI[BIII)I", + garbageValue = "661108656" ) @Export("decompress") int decompress(byte[] var1, int var2, byte[] var3, int var4, int var5) { @@ -300,25 +294,65 @@ public class Huffman { } } - @ObfuscatedName("a") - @ObfuscatedSignature( - signature = "([I[II)V", - garbageValue = "1107408934" - ) - public static void method4104(int[] var0, int[] var1) { - if (var0 != null && var1 != null) { - ByteArrayPool.ByteArrayPool_alternativeSizes = var0; - class222.ByteArrayPool_altSizeArrayCounts = new int[var0.length]; - HorizontalAlignment.ByteArrayPool_arrays = new byte[var0.length][][]; - - for (int var2 = 0; var2 < ByteArrayPool.ByteArrayPool_alternativeSizes.length; ++var2) { - HorizontalAlignment.ByteArrayPool_arrays[var2] = new byte[var1[var2]][]; + @ObfuscatedName("u") + public static final int method4020(double var0, double var2, double var4) { + double var6 = var4; + double var8 = var4; + double var10 = var4; + if (var2 != 0.0D) { + double var12; + if (var4 < 0.5D) { + var12 = (1.0D + var2) * var4; + } else { + var12 = var4 + var2 - var2 * var4; } - } else { - ByteArrayPool.ByteArrayPool_alternativeSizes = null; - class222.ByteArrayPool_altSizeArrayCounts = null; - HorizontalAlignment.ByteArrayPool_arrays = null; + double var14 = 2.0D * var4 - var12; + double var16 = 0.3333333333333333D + var0; + if (var16 > 1.0D) { + --var16; + } + + double var20 = var0 - 0.3333333333333333D; + if (var20 < 0.0D) { + ++var20; + } + + if (var16 * 6.0D < 1.0D) { + var6 = var16 * (var12 - var14) * 6.0D + var14; + } else if (var16 * 2.0D < 1.0D) { + var6 = var12; + } else if (3.0D * var16 < 2.0D) { + var6 = 6.0D * (var12 - var14) * (0.6666666666666666D - var16) + var14; + } else { + var6 = var14; + } + + if (var0 * 6.0D < 1.0D) { + var8 = var14 + var0 * (var12 - var14) * 6.0D; + } else if (var0 * 2.0D < 1.0D) { + var8 = var12; + } else if (3.0D * var0 < 2.0D) { + var8 = 6.0D * (0.6666666666666666D - var0) * (var12 - var14) + var14; + } else { + var8 = var14; + } + + if (var20 * 6.0D < 1.0D) { + var10 = var20 * 6.0D * (var12 - var14) + var14; + } else if (var20 * 2.0D < 1.0D) { + var10 = var12; + } else if (var20 * 3.0D < 2.0D) { + var10 = var14 + 6.0D * (var12 - var14) * (0.6666666666666666D - var20); + } else { + var10 = var14; + } } + + int var22 = (int)(var6 * 256.0D); + int var13 = (int)(256.0D * var8); + int var23 = (int)(256.0D * var10); + int var15 = var23 + (var13 << 8) + (var22 << 16); + return var15; } } diff --git a/runescape-client/src/main/java/IgnoreList.java b/runescape-client/src/main/java/IgnoreList.java index 3642668efe..e804b4429a 100644 --- a/runescape-client/src/main/java/IgnoreList.java +++ b/runescape-client/src/main/java/IgnoreList.java @@ -1,57 +1,50 @@ import net.runelite.mapping.Export; import net.runelite.mapping.Implements; -import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("je") +@ObfuscatedName("ju") @Implements("IgnoreList") public class IgnoreList extends UserList { - @ObfuscatedName("hr") - @ObfuscatedGetter( - intValue = 1673577413 - ) - @Export("oculusOrbFocalPointX") - static int oculusOrbFocalPointX; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Lln;" + signature = "Llg;" ) @Export("loginType") final LoginType loginType; @ObfuscatedSignature( - signature = "(Lln;)V" + signature = "(Llg;)V" ) public IgnoreList(LoginType var1) { super(400); this.loginType = var1; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(I)Ljg;", - garbageValue = "-706396611" + signature = "(I)Ljr;", + garbageValue = "-1592540968" ) @Export("newInstance") User newInstance() { return new Ignored(); } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(II)[Ljg;", - garbageValue = "1510983955" + signature = "(IB)[Ljr;", + garbageValue = "-122" ) @Export("newTypedArray") User[] newTypedArray(int var1) { return new Ignored[var1]; } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Lkc;IB)V", - garbageValue = "24" + signature = "(Lkg;II)V", + garbageValue = "931957014" ) @Export("read") public void read(Buffer var1, int var2) { @@ -94,635 +87,4 @@ public class IgnoreList extends UserList { return; } } - - @ObfuscatedName("ja") - @ObfuscatedSignature( - signature = "([Lhi;IIIIIIIII)V", - garbageValue = "-564117353" - ) - @Export("drawInterface") - static final void drawInterface(Widget[] var0, int var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8) { - Rasterizer2D.Rasterizer2D_setClip(var2, var3, var4, var5); - Rasterizer3D.Rasterizer3D_setClipFromRasterizer2D(); - - for (int var9 = 0; var9 < var0.length; ++var9) { - Widget var10 = var0[var9]; - if (var10 != null && (var10.parentId == var1 || var1 == -1412584499 && var10 == Client.clickedWidget)) { - int var11; - if (var8 == -1) { - Client.rootWidgetXs[Client.rootWidgetCount] = var10.x + var6; - Client.rootWidgetYs[Client.rootWidgetCount] = var7 + var10.y; - Client.rootWidgetWidths[Client.rootWidgetCount] = var10.width; - Client.rootWidgetHeights[Client.rootWidgetCount] = var10.height; - var11 = ++Client.rootWidgetCount - 1; - } else { - var11 = var8; - } - - var10.rootIndex = var11; - var10.cycle = Client.cycle; - if (!var10.isIf3 || !WorldMapManager.isComponentHidden(var10)) { - if (var10.contentType > 0) { - ArchiveDiskAction.method4297(var10); - } - - int var12 = var10.x + var6; - int var13 = var7 + var10.y; - int var14 = var10.transparencyTop; - int var15; - int var16; - if (var10 == Client.clickedWidget) { - if (var1 != -1412584499 && !var10.isScrollBar) { - VarcInt.field3218 = var0; - TriBool.field3600 = var6; - GrandExchangeEvent.field46 = var7; - continue; - } - - if (Client.isDraggingWidget && Client.field809) { - var15 = MouseHandler.MouseHandler_x; - var16 = MouseHandler.MouseHandler_y; - var15 -= Client.widgetClickX; - var16 -= Client.widgetClickY; - if (var15 < Client.field748) { - var15 = Client.field748; - } - - if (var15 + var10.width > Client.field748 + Client.clickedWidgetParent.width) { - var15 = Client.field748 + Client.clickedWidgetParent.width - var10.width; - } - - if (var16 < Client.field751) { - var16 = Client.field751; - } - - if (var16 + var10.height > Client.field751 + Client.clickedWidgetParent.height) { - var16 = Client.field751 + Client.clickedWidgetParent.height - var10.height; - } - - var12 = var15; - var13 = var16; - } - - if (!var10.isScrollBar) { - var14 = 128; - } - } - - int var17; - int var18; - int var19; - int var20; - int var21; - int var22; - if (var10.type == 2) { - var15 = var2; - var16 = var3; - var17 = var4; - var18 = var5; - } else if (var10.type == 9) { - var19 = var12; - var20 = var13; - var21 = var12 + var10.width; - var22 = var13 + var10.height; - if (var21 < var12) { - var19 = var21; - var21 = var12; - } - - if (var22 < var13) { - var20 = var22; - var22 = var13; - } - - ++var21; - ++var22; - var15 = var19 > var2 ? var19 : var2; - var16 = var20 > var3 ? var20 : var3; - var17 = var21 < var4 ? var21 : var4; - var18 = var22 < var5 ? var22 : var5; - } else { - var19 = var12 + var10.width; - var20 = var13 + var10.height; - var15 = var12 > var2 ? var12 : var2; - var16 = var13 > var3 ? var13 : var3; - var17 = var19 < var4 ? var19 : var4; - var18 = var20 < var5 ? var20 : var5; - } - - if (!var10.isIf3 || var15 < var17 && var16 < var18) { - if (var10.contentType != 0) { - if (var10.contentType == 1336) { - if (Client.displayFps) { - var13 += 15; - ArchiveDiskActionHandler.fontPlain12.drawRightAligned("Fps:" + GameShell.fps, var12 + var10.width, var13, 16776960, -1); - var13 += 15; - Runtime var41 = Runtime.getRuntime(); - var20 = (int)((var41.totalMemory() - var41.freeMemory()) / 1024L); - var21 = 16776960; - if (var20 > 327680 && !Client.isLowDetail) { - var21 = 16711680; - } - - ArchiveDiskActionHandler.fontPlain12.drawRightAligned("Mem:" + var20 + "k", var12 + var10.width, var13, var21, -1); - var13 += 15; - } - continue; - } - - if (var10.contentType == 1337) { - Client.viewportX = var12; - Client.viewportY = var13; - WallDecoration.drawEntities(var12, var13, var10.width, var10.height); - Client.field842[var10.rootIndex] = true; - Rasterizer2D.Rasterizer2D_setClip(var2, var3, var4, var5); - continue; - } - - if (var10.contentType == 1338) { - class4.drawMinimap(var10, var12, var13, var11); - Rasterizer2D.Rasterizer2D_setClip(var2, var3, var4, var5); - continue; - } - - if (var10.contentType == 1339) { - PlayerType.drawCompass(var10, var12, var13, var11); - Rasterizer2D.Rasterizer2D_setClip(var2, var3, var4, var5); - continue; - } - - if (var10.contentType == 1400) { - Login.worldMap.draw(var12, var13, var10.width, var10.height, Client.cycle); - } - - if (var10.contentType == 1401) { - Login.worldMap.drawOverview(var12, var13, var10.width, var10.height); - } - - if (var10.contentType == 1402) { - Login.loginScreenRunesAnimation.draw(var12, Client.cycle); - } - } - - if (var10.type == 0) { - if (!var10.isIf3 && WorldMapManager.isComponentHidden(var10) && var10 != ChatChannel.mousedOverWidgetIf1) { - continue; - } - - if (!var10.isIf3) { - if (var10.scrollY > var10.scrollHeight - var10.height) { - var10.scrollY = var10.scrollHeight - var10.height; - } - - if (var10.scrollY < 0) { - var10.scrollY = 0; - } - } - - drawInterface(var0, var10.id, var15, var16, var17, var18, var12 - var10.scrollX, var13 - var10.scrollY, var11); - if (var10.children != null) { - drawInterface(var10.children, var10.id, var15, var16, var17, var18, var12 - var10.scrollX, var13 - var10.scrollY, var11); - } - - InterfaceParent var30 = (InterfaceParent)Client.interfaceParents.get((long)var10.id); - if (var30 != null) { - ScriptEvent.drawWidgets(var30.group, var15, var16, var17, var18, var12, var13, var11); - } - - Rasterizer2D.Rasterizer2D_setClip(var2, var3, var4, var5); - Rasterizer3D.Rasterizer3D_setClipFromRasterizer2D(); - } - - if (Client.isResizable || Client.field631[var11] || Client.gameDrawingMode > 1) { - if (var10.type == 0 && !var10.isIf3 && var10.scrollHeight > var10.height) { - ArchiveLoader.drawScrollBar(var12 + var10.width, var13, var10.scrollY, var10.height, var10.scrollHeight); - } - - if (var10.type != 1) { - int var23; - int var24; - int var25; - int var26; - if (var10.type == 2) { - var19 = 0; - - for (var20 = 0; var20 < var10.rawHeight; ++var20) { - for (var21 = 0; var21 < var10.rawWidth; ++var21) { - var22 = var12 + var21 * (var10.paddingX + 32); - var23 = var13 + var20 * (var10.paddingY + 32); - if (var19 < 20) { - var22 += var10.inventoryXOffsets[var19]; - var23 += var10.inventoryYOffsets[var19]; - } - - if (var10.itemIds[var19] <= 0) { - if (var10.inventorySprites != null && var19 < 20) { - Sprite var43 = var10.getInventorySprite(var19); - if (var43 != null) { - var43.drawTransBgAt(var22, var23); - } else if (Widget.field2546) { - GrandExchangeOfferAgeComparator.invalidateWidget(var10); - } - } - } else { - boolean var37 = false; - boolean var38 = false; - var26 = var10.itemIds[var19] - 1; - if (var22 + 32 > var2 && var22 < var4 && var23 + 32 > var3 && var23 < var5 || var10 == GrandExchangeOffer.dragInventoryWidget && var19 == Client.dragItemSlotSource) { - Sprite var27; - if (Client.isItemSelected == 1 && var19 == MouseRecorder.selectedItemSlot && var10.id == MidiPcmStream.selectedItemWidget) { - var27 = ScriptEvent.getItemSprite(var26, var10.itemQuantities[var19], 2, 0, 2, false); - } else { - var27 = ScriptEvent.getItemSprite(var26, var10.itemQuantities[var19], 1, 3153952, 2, false); - } - - if (var27 != null) { - if (var10 == GrandExchangeOffer.dragInventoryWidget && var19 == Client.dragItemSlotSource) { - var24 = MouseHandler.MouseHandler_x - Client.field729; - var25 = MouseHandler.MouseHandler_y - Client.field741; - if (var24 < 5 && var24 > -5) { - var24 = 0; - } - - if (var25 < 5 && var25 > -5) { - var25 = 0; - } - - if (Client.itemDragDuration < 5) { - var24 = 0; - var25 = 0; - } - - var27.drawTransAt(var24 + var22, var25 + var23, 128); - if (var1 != -1) { - Widget var28 = var0[var1 & 65535]; - int var29; - if (var25 + var23 < Rasterizer2D.Rasterizer2D_yClipStart && var28.scrollY > 0) { - var29 = (Rasterizer2D.Rasterizer2D_yClipStart - var23 - var25) * Client.field693 / 3; - if (var29 > Client.field693 * 10) { - var29 = Client.field693 * 10; - } - - if (var29 > var28.scrollY) { - var29 = var28.scrollY; - } - - var28.scrollY -= var29; - Client.field741 += var29; - GrandExchangeOfferAgeComparator.invalidateWidget(var28); - } - - if (var25 + var23 + 32 > Rasterizer2D.Rasterizer2D_yClipEnd && var28.scrollY < var28.scrollHeight - var28.height) { - var29 = (var23 + var25 + 32 - Rasterizer2D.Rasterizer2D_yClipEnd) * Client.field693 / 3; - if (var29 > Client.field693 * 10) { - var29 = Client.field693 * 10; - } - - if (var29 > var28.scrollHeight - var28.height - var28.scrollY) { - var29 = var28.scrollHeight - var28.height - var28.scrollY; - } - - var28.scrollY += var29; - Client.field741 -= var29; - GrandExchangeOfferAgeComparator.invalidateWidget(var28); - } - } - } else if (var10 == Login.field1165 && var19 == Client.field665) { - var27.drawTransAt(var22, var23, 128); - } else { - var27.drawTransBgAt(var22, var23); - } - } else { - GrandExchangeOfferAgeComparator.invalidateWidget(var10); - } - } - } - - ++var19; - } - } - } else if (var10.type == 3) { - if (SecureRandomCallable.runCs1(var10)) { - var19 = var10.color2; - if (var10 == ChatChannel.mousedOverWidgetIf1 && var10.mouseOverColor2 != 0) { - var19 = var10.mouseOverColor2; - } - } else { - var19 = var10.color; - if (var10 == ChatChannel.mousedOverWidgetIf1 && var10.mouseOverColor != 0) { - var19 = var10.mouseOverColor; - } - } - - if (var10.fill) { - switch(var10.fillMode.value) { - case 1: - Rasterizer2D.Rasterizer2D_fillRectangleGradient(var12, var13, var10.width, var10.height, var10.color, var10.color2); - break; - case 2: - Rasterizer2D.Rasterizer2D_fillRectangleGradientAlpha(var12, var13, var10.width, var10.height, var10.color, var10.color2, 255 - (var10.transparencyTop & 255), 255 - (var10.transparencyBot & 255)); - break; - default: - if (var14 == 0) { - Rasterizer2D.Rasterizer2D_fillRectangle(var12, var13, var10.width, var10.height, var19); - } else { - Rasterizer2D.Rasterizer2D_fillRectangleAlpha(var12, var13, var10.width, var10.height, var19, 256 - (var14 & 255)); - } - } - } else if (var14 == 0) { - Rasterizer2D.Rasterizer2D_drawRectangle(var12, var13, var10.width, var10.height, var19); - } else { - Rasterizer2D.Rasterizer2D_drawRectangleAlpha(var12, var13, var10.width, var10.height, var19, 256 - (var14 & 255)); - } - } else { - Font var39; - if (var10.type == 4) { - var39 = var10.getFont(); - if (var39 == null) { - if (Widget.field2546) { - GrandExchangeOfferAgeComparator.invalidateWidget(var10); - } - } else { - String var45 = var10.text; - if (SecureRandomCallable.runCs1(var10)) { - var20 = var10.color2; - if (var10 == ChatChannel.mousedOverWidgetIf1 && var10.mouseOverColor2 != 0) { - var20 = var10.mouseOverColor2; - } - - if (var10.text2.length() > 0) { - var45 = var10.text2; - } - } else { - var20 = var10.color; - if (var10 == ChatChannel.mousedOverWidgetIf1 && var10.mouseOverColor != 0) { - var20 = var10.mouseOverColor; - } - } - - if (var10.isIf3 && var10.itemId != -1) { - ItemDefinition var46 = class222.ItemDefinition_get(var10.itemId); - var45 = var46.name; - if (var45 == null) { - var45 = "null"; - } - - if ((var46.isStackable == 1 || var10.itemQuantity != 1) && var10.itemQuantity != -1) { - var45 = AbstractArchive.colorStartTag(16748608) + var45 + "" + " " + 'x' + GrandExchangeOffer.formatItemStacks(var10.itemQuantity); - } - } - - if (var10 == Client.meslayerContinueWidget) { - var45 = "Please wait..."; - var20 = var10.color; - } - - if (!var10.isIf3) { - var45 = class335.method6661(var45, var10); - } - - var39.drawLines(var45, var12, var13, var10.width, var10.height, var20, var10.textShadowed ? 0 : -1, var10.textXAlignment, var10.textYAlignment, var10.textLineHeight); - } - } else if (var10.type == 5) { - Sprite var40; - if (!var10.isIf3) { - var40 = var10.getSprite(SecureRandomCallable.runCs1(var10)); - if (var40 != null) { - var40.drawTransBgAt(var12, var13); - } else if (Widget.field2546) { - GrandExchangeOfferAgeComparator.invalidateWidget(var10); - } - } else { - if (var10.itemId != -1) { - var40 = ScriptEvent.getItemSprite(var10.itemId, var10.itemQuantity, var10.outline, var10.spriteShadow, var10.itemQuantityMode, false); - } else { - var40 = var10.getSprite(false); - } - - if (var40 == null) { - if (Widget.field2546) { - GrandExchangeOfferAgeComparator.invalidateWidget(var10); - } - } else { - var20 = var40.width; - var21 = var40.height; - if (!var10.spriteTiling) { - var22 = var10.width * 4096 / var20; - if (var10.spriteAngle != 0) { - var40.method6266(var10.width / 2 + var12, var10.height / 2 + var13, var10.spriteAngle, var22); - } else if (var14 != 0) { - var40.drawTransScaledAt(var12, var13, var10.width, var10.height, 256 - (var14 & 255)); - } else if (var20 == var10.width && var21 == var10.height) { - var40.drawTransBgAt(var12, var13); - } else { - var40.drawScaledAt(var12, var13, var10.width, var10.height); - } - } else { - Rasterizer2D.Rasterizer2D_expandClip(var12, var13, var12 + var10.width, var13 + var10.height); - var22 = (var20 - 1 + var10.width) / var20; - var23 = (var21 - 1 + var10.height) / var21; - - for (var24 = 0; var24 < var22; ++var24) { - for (var25 = 0; var25 < var23; ++var25) { - if (var10.spriteAngle != 0) { - var40.method6266(var20 / 2 + var12 + var24 * var20, var21 / 2 + var13 + var21 * var25, var10.spriteAngle, 4096); - } else if (var14 != 0) { - var40.drawTransAt(var12 + var24 * var20, var13 + var21 * var25, 256 - (var14 & 255)); - } else { - var40.drawTransBgAt(var12 + var20 * var24, var13 + var25 * var21); - } - } - } - - Rasterizer2D.Rasterizer2D_setClip(var2, var3, var4, var5); - } - } - } - } else { - ItemDefinition var34; - if (var10.type == 6) { - boolean var36 = SecureRandomCallable.runCs1(var10); - if (var36) { - var20 = var10.sequenceId2; - } else { - var20 = var10.sequenceId; - } - - Model var42 = null; - var22 = 0; - if (var10.itemId != -1) { - var34 = class222.ItemDefinition_get(var10.itemId); - if (var34 != null) { - var34 = var34.getCountObj(var10.itemQuantity); - var42 = var34.getModel(1); - if (var42 != null) { - var42.calculateBoundsCylinder(); - var22 = var42.height / 2; - } else { - GrandExchangeOfferAgeComparator.invalidateWidget(var10); - } - } - } else if (var10.modelType == 5) { - if (var10.modelId == 0) { - var42 = Client.playerAppearance.getModel((SequenceDefinition)null, -1, (SequenceDefinition)null, -1); - } else { - var42 = class215.localPlayer.getModel(); - } - } else if (var20 == -1) { - var42 = var10.getModel((SequenceDefinition)null, -1, var36, class215.localPlayer.appearance); - if (var42 == null && Widget.field2546) { - GrandExchangeOfferAgeComparator.invalidateWidget(var10); - } - } else { - SequenceDefinition var47 = PlayerType.SequenceDefinition_get(var20); - var42 = var10.getModel(var47, var10.modelFrame, var36, class215.localPlayer.appearance); - if (var42 == null && Widget.field2546) { - GrandExchangeOfferAgeComparator.invalidateWidget(var10); - } - } - - Rasterizer3D.method3131(var10.width / 2 + var12, var10.height / 2 + var13); - var23 = Rasterizer3D.Rasterizer3D_sine[var10.modelAngleX] * var10.modelZoom >> 16; - var24 = Rasterizer3D.Rasterizer3D_cosine[var10.modelAngleX] * var10.modelZoom >> 16; - if (var42 != null) { - if (!var10.isIf3) { - var42.method3044(0, var10.modelAngleY, 0, var10.modelAngleX, 0, var23, var24); - } else { - var42.calculateBoundsCylinder(); - if (var10.modelOrthog) { - var42.method3046(0, var10.modelAngleY, var10.modelAngleZ, var10.modelAngleX, var10.modelOffsetX, var23 + var22 + var10.modelOffsetY, var24 + var10.modelOffsetY, var10.modelZoom); - } else { - var42.method3044(0, var10.modelAngleY, var10.modelAngleZ, var10.modelAngleX, var10.modelOffsetX, var22 + var23 + var10.modelOffsetY, var24 + var10.modelOffsetY); - } - } - } - - Rasterizer3D.Rasterizer3D_method3(); - } else { - if (var10.type == 7) { - var39 = var10.getFont(); - if (var39 == null) { - if (Widget.field2546) { - GrandExchangeOfferAgeComparator.invalidateWidget(var10); - } - continue; - } - - var20 = 0; - - for (var21 = 0; var21 < var10.rawHeight; ++var21) { - for (var22 = 0; var22 < var10.rawWidth; ++var22) { - if (var10.itemIds[var20] > 0) { - var34 = class222.ItemDefinition_get(var10.itemIds[var20] - 1); - String var31; - if (var34.isStackable != 1 && var10.itemQuantities[var20] == 1) { - var31 = AbstractArchive.colorStartTag(16748608) + var34.name + ""; - } else { - var31 = AbstractArchive.colorStartTag(16748608) + var34.name + "" + " " + 'x' + GrandExchangeOffer.formatItemStacks(var10.itemQuantities[var20]); - } - - var25 = var12 + var22 * (var10.paddingX + 115); - var26 = (var10.paddingY + 12) * var21 + var13; - if (var10.textXAlignment == 0) { - var39.draw(var31, var25, var26, var10.color, var10.textShadowed ? 0 : -1); - } else if (var10.textXAlignment == 1) { - var39.drawCentered(var31, var10.width / 2 + var25, var26, var10.color, var10.textShadowed ? 0 : -1); - } else { - var39.drawRightAligned(var31, var25 + var10.width - 1, var26, var10.color, var10.textShadowed ? 0 : -1); - } - } - - ++var20; - } - } - } - - if (var10.type == 8 && var10 == GrandExchangeEvents.field39 && Client.field782 == Client.field783) { - var19 = 0; - var20 = 0; - Font var32 = ArchiveDiskActionHandler.fontPlain12; - String var33 = var10.text; - - String var44; - for (var33 = class335.method6661(var33, var10); var33.length() > 0; var20 = var20 + var32.ascent + 1) { - var24 = var33.indexOf("
"); - if (var24 != -1) { - var44 = var33.substring(0, var24); - var33 = var33.substring(var24 + 4); - } else { - var44 = var33; - var33 = ""; - } - - var25 = var32.stringWidth(var44); - if (var25 > var19) { - var19 = var25; - } - } - - var19 += 6; - var20 += 7; - var24 = var12 + var10.width - 5 - var19; - var25 = var13 + var10.height + 5; - if (var24 < var12 + 5) { - var24 = var12 + 5; - } - - if (var19 + var24 > var4) { - var24 = var4 - var19; - } - - if (var20 + var25 > var5) { - var25 = var5 - var20; - } - - Rasterizer2D.Rasterizer2D_fillRectangle(var24, var25, var19, var20, 16777120); - Rasterizer2D.Rasterizer2D_drawRectangle(var24, var25, var19, var20, 0); - var33 = var10.text; - var26 = var25 + var32.ascent + 2; - - for (var33 = class335.method6661(var33, var10); var33.length() > 0; var26 = var26 + var32.ascent + 1) { - int var35 = var33.indexOf("
"); - if (var35 != -1) { - var44 = var33.substring(0, var35); - var33 = var33.substring(var35 + 4); - } else { - var44 = var33; - var33 = ""; - } - - var32.draw(var44, var24 + 3, var26, 0, -1); - } - } - - if (var10.type == 9) { - if (var10.field2641) { - var19 = var12; - var20 = var13 + var10.height; - var21 = var12 + var10.width; - var22 = var13; - } else { - var19 = var12; - var20 = var13; - var21 = var12 + var10.width; - var22 = var13 + var10.height; - } - - if (var10.lineWid == 1) { - Rasterizer2D.Rasterizer2D_drawLine(var19, var20, var21, var22, var10.color); - } else { - UrlRequester.method3431(var19, var20, var21, var22, var10.color, var10.lineWid); - } - } - } - } - } - } - } - } - } - } - } - - } } diff --git a/runescape-client/src/main/java/Ignored.java b/runescape-client/src/main/java/Ignored.java index e1d72409fc..fa3707083b 100644 --- a/runescape-client/src/main/java/Ignored.java +++ b/runescape-client/src/main/java/Ignored.java @@ -7,12 +7,11 @@ import net.runelite.mapping.ObfuscatedSignature; @ObfuscatedName("ji") @Implements("Ignored") public class Ignored extends User { - @ObfuscatedName("pw") - @Export("ClanChat_inClanChat") - static boolean ClanChat_inClanChat; @ObfuscatedName("a") + public static String[] field3610; + @ObfuscatedName("u") @ObfuscatedGetter( - intValue = 1062228261 + intValue = -2146797941 ) @Export("id") int id; @@ -20,20 +19,20 @@ public class Ignored extends User { Ignored() { } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Lji;B)I", - garbageValue = "8" + signature = "(Lji;I)I", + garbageValue = "-463772537" ) @Export("compareTo_ignored") int compareTo_ignored(Ignored var1) { return this.id - var1.id; } - @ObfuscatedName("av") + @ObfuscatedName("v") @ObfuscatedSignature( - signature = "(Ljg;I)I", - garbageValue = "105019827" + signature = "(Ljr;B)I", + garbageValue = "41" ) @Export("compareTo_user") public int compareTo_user(User var1) { @@ -43,27 +42,4 @@ public class Ignored extends User { public int compareTo(Object var1) { return this.compareTo_ignored((Ignored)var1); } - - @ObfuscatedName("q") - @ObfuscatedSignature( - signature = "(BI)C", - garbageValue = "-1328701707" - ) - public static char method5284(byte var0) { - int var1 = var0 & 255; - if (var1 == 0) { - throw new IllegalArgumentException("" + Integer.toString(var1, 16)); - } else { - if (var1 >= 128 && var1 < 160) { - char var2 = class287.cp1252AsciiExtension[var1 - 128]; - if (var2 == 0) { - var2 = '?'; - } - - var1 = var2; - } - - return (char)var1; - } - } } diff --git a/runescape-client/src/main/java/IndexedSprite.java b/runescape-client/src/main/java/IndexedSprite.java index 04252de118..c2a9dd212b 100644 --- a/runescape-client/src/main/java/IndexedSprite.java +++ b/runescape-client/src/main/java/IndexedSprite.java @@ -2,35 +2,38 @@ import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; -@ObfuscatedName("lw") +@ObfuscatedName("lm") @Implements("IndexedSprite") public final class IndexedSprite extends Rasterizer2D { - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("pixels") public byte[] pixels; - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("palette") public int[] palette; - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("subWidth") public int subWidth; - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("subHeight") public int subHeight; - @ObfuscatedName("v") + @ObfuscatedName("z") @Export("xOffset") public int xOffset; - @ObfuscatedName("l") + @ObfuscatedName("p") @Export("yOffset") public int yOffset; - @ObfuscatedName("c") + @ObfuscatedName("h") @Export("width") public int width; - @ObfuscatedName("o") + @ObfuscatedName("y") @Export("height") public int height; - @ObfuscatedName("a") + IndexedSprite() { + } + + @ObfuscatedName("u") @Export("normalize") public void normalize() { if (this.subWidth != this.width || this.subHeight != this.height) { @@ -51,7 +54,7 @@ public final class IndexedSprite extends Rasterizer2D { } } - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("shiftColors") public void shiftColors(int var1, int var2, int var3) { for (int var4 = 0; var4 < this.palette.length; ++var4) { @@ -84,7 +87,7 @@ public final class IndexedSprite extends Rasterizer2D { } - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("drawAt") public void drawAt(int var1, int var2) { var1 += this.xOffset; @@ -130,8 +133,8 @@ public final class IndexedSprite extends Rasterizer2D { } } - @ObfuscatedName("v") - public void method6212(int var1, int var2, int var3, int var4) { + @ObfuscatedName("z") + public void method6182(int var1, int var2, int var3, int var4) { int var5 = this.subWidth; int var6 = this.subHeight; int var7 = 0; @@ -192,7 +195,7 @@ public final class IndexedSprite extends Rasterizer2D { IndexedSprite_something(Rasterizer2D.Rasterizer2D_pixels, this.pixels, this.palette, var7, var8, var13, var14, var3, var4, var11, var12, var5); } - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("IndexedSprite_two") static void IndexedSprite_two(int[] var0, byte[] var1, int[] var2, int var3, int var4, int var5, int var6, int var7, int var8) { int var9 = -(var5 >> 2); @@ -246,7 +249,7 @@ public final class IndexedSprite extends Rasterizer2D { } - @ObfuscatedName("l") + @ObfuscatedName("p") @Export("IndexedSprite_something") static void IndexedSprite_something(int[] var0, byte[] var1, int[] var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10, int var11) { int var12 = var3; diff --git a/runescape-client/src/main/java/Instrument.java b/runescape-client/src/main/java/Instrument.java index 06e7c263aa..5ef5007f04 100644 --- a/runescape-client/src/main/java/Instrument.java +++ b/runescape-client/src/main/java/Instrument.java @@ -4,112 +4,112 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("da") +@ObfuscatedName("dr") @Implements("Instrument") public class Instrument { - @ObfuscatedName("e") + @ObfuscatedName("a") @Export("Instrument_samples") static int[] Instrument_samples; - @ObfuscatedName("s") + @ObfuscatedName("d") @Export("Instrument_noise") static int[] Instrument_noise; - @ObfuscatedName("b") + @ObfuscatedName("s") @Export("Instrument_sine") static int[] Instrument_sine; - @ObfuscatedName("f") + @ObfuscatedName("m") @Export("Instrument_phases") static int[] Instrument_phases; - @ObfuscatedName("g") + @ObfuscatedName("v") @Export("Instrument_delays") static int[] Instrument_delays; - @ObfuscatedName("w") + @ObfuscatedName("q") @Export("Instrument_volumeSteps") static int[] Instrument_volumeSteps; - @ObfuscatedName("u") + @ObfuscatedName("l") @Export("Instrument_pitchSteps") static int[] Instrument_pitchSteps; - @ObfuscatedName("y") + @ObfuscatedName("j") @Export("Instrument_pitchBaseSteps") static int[] Instrument_pitchBaseSteps; - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Ldd;" + signature = "Ldx;" ) @Export("pitch") SoundEnvelope pitch; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Ldd;" + signature = "Ldx;" ) @Export("volume") SoundEnvelope volume; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Ldd;" + signature = "Ldx;" ) @Export("pitchModifier") SoundEnvelope pitchModifier; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Ldd;" + signature = "Ldx;" ) @Export("pitchModifierAmplitude") SoundEnvelope pitchModifierAmplitude; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "Ldd;" + signature = "Ldx;" ) @Export("volumeMultiplier") SoundEnvelope volumeMultiplier; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "Ldd;" + signature = "Ldx;" ) @Export("volumeMultiplierAmplitude") SoundEnvelope volumeMultiplierAmplitude; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "Ldd;" + signature = "Ldx;" ) @Export("release") SoundEnvelope release; - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "Ldd;" + signature = "Ldx;" ) @Export("attack") SoundEnvelope attack; - @ObfuscatedName("i") + @ObfuscatedName("w") @Export("oscillatorVolume") int[] oscillatorVolume; - @ObfuscatedName("d") + @ObfuscatedName("i") @Export("oscillatorPitch") int[] oscillatorPitch; - @ObfuscatedName("m") + @ObfuscatedName("k") @Export("oscillatorDelays") int[] oscillatorDelays; - @ObfuscatedName("p") + @ObfuscatedName("x") @Export("delayTime") int delayTime; - @ObfuscatedName("h") + @ObfuscatedName("o") @Export("delayDecay") int delayDecay; - @ObfuscatedName("k") + @ObfuscatedName("e") @ObfuscatedSignature( - signature = "Ldz;" + signature = "Ldh;" ) @Export("filter") AudioFilter filter; - @ObfuscatedName("x") + @ObfuscatedName("n") @ObfuscatedSignature( - signature = "Ldd;" + signature = "Ldx;" ) @Export("filterEnvelope") SoundEnvelope filterEnvelope; - @ObfuscatedName("j") + @ObfuscatedName("r") @Export("duration") int duration; - @ObfuscatedName("r") + @ObfuscatedName("c") @Export("offset") int offset; @@ -146,7 +146,7 @@ public class Instrument { this.offset = 0; } - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("synthesize") final int[] synthesize(int var1, int var2) { class300.clearIntArray(Instrument_samples, 0, var1); @@ -353,7 +353,7 @@ public class Instrument { } } - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("evaluateWave") final int evaluateWave(int var1, int var2, int var3) { if (var3 == 1) { @@ -367,9 +367,9 @@ public class Instrument { } } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Lkc;)V" + signature = "(Lkg;)V" ) @Export("decode") final void decode(Buffer var1) { @@ -421,6 +421,6 @@ public class Instrument { this.offset = var1.readUnsignedShort(); this.filter = new AudioFilter(); this.filterEnvelope = new SoundEnvelope(); - this.filter.method2852(var1, this.filterEnvelope); + this.filter.method2729(var1, this.filterEnvelope); } } diff --git a/runescape-client/src/main/java/IntHashTable.java b/runescape-client/src/main/java/IntHashTable.java index 0ad15f6f41..eb2721587f 100644 --- a/runescape-client/src/main/java/IntHashTable.java +++ b/runescape-client/src/main/java/IntHashTable.java @@ -3,10 +3,10 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("le") +@ObfuscatedName("la") @Implements("IntHashTable") public class IntHashTable { - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("array") int[] array; @@ -32,10 +32,10 @@ public class IntHashTable { } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "(II)I", - garbageValue = "464057567" + garbageValue = "1209776810" ) @Export("get") public int get(int var1) { diff --git a/runescape-client/src/main/java/IntegerNode.java b/runescape-client/src/main/java/IntegerNode.java index a3e82dda4a..84dea09b46 100644 --- a/runescape-client/src/main/java/IntegerNode.java +++ b/runescape-client/src/main/java/IntegerNode.java @@ -2,10 +2,10 @@ import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; -@ObfuscatedName("fb") +@ObfuscatedName("ft") @Implements("IntegerNode") public class IntegerNode extends Node { - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("integer") public int integer; diff --git a/runescape-client/src/main/java/InterfaceParent.java b/runescape-client/src/main/java/InterfaceParent.java index 01ec8016e2..e9a910693a 100644 --- a/runescape-client/src/main/java/InterfaceParent.java +++ b/runescape-client/src/main/java/InterfaceParent.java @@ -1,159 +1,92 @@ +import java.io.IOException; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("bq") +@ObfuscatedName("bf") @Implements("InterfaceParent") public class InterfaceParent extends Node { - @ObfuscatedName("l") - @Export("PcmPlayer_stereo") - public static boolean PcmPlayer_stereo; - @ObfuscatedName("a") + @ObfuscatedName("pe") + @ObfuscatedSignature( + signature = "Ljg;" + ) + @Export("clanChat") + static ClanChat clanChat; + @ObfuscatedName("k") + @ObfuscatedSignature( + signature = "Llm;" + ) + @Export("options_buttons_0Sprite") + static IndexedSprite options_buttons_0Sprite; + @ObfuscatedName("u") @ObfuscatedGetter( - intValue = 637338159 + intValue = -827675327 ) @Export("group") int group; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = 1813492197 + intValue = -207646309 ) @Export("type") int type; - @ObfuscatedName("n") - boolean field545; + @ObfuscatedName("b") + boolean field561; InterfaceParent() { - this.field545 = false; + this.field561 = false; } - @ObfuscatedName("t") + @ObfuscatedName("fr") @ObfuscatedSignature( - signature = "(IILfc;Lfm;I)Z", - garbageValue = "467802894" + signature = "(Liy;IIIB)V", + garbageValue = "-6" ) - static final boolean method1262(int var0, int var1, RouteStrategy var2, CollisionMap var3) { - int var4 = var0; - int var5 = var1; - byte var6 = 64; - byte var7 = 64; - int var8 = var0 - var6; - int var9 = var1 - var7; - class173.directions[var6][var7] = 99; - class173.distances[var6][var7] = 0; - byte var10 = 0; - int var11 = 0; - class173.bufferX[var10] = var0; - byte var10001 = var10; - int var18 = var10 + 1; - class173.bufferY[var10001] = var1; - int[][] var12 = var3.flags; - - while (var18 != var11) { - var4 = class173.bufferX[var11]; - var5 = class173.bufferY[var11]; - var11 = var11 + 1 & 4095; - int var16 = var4 - var8; - int var17 = var5 - var9; - int var13 = var4 - var3.xInset; - int var14 = var5 - var3.yInset; - if (var2.hasArrived(2, var4, var5, var3)) { - class173.field2070 = var4; - LoginScreenAnimation.field1029 = var5; - return true; - } - - int var15 = class173.distances[var16][var17] + 1; - if (var16 > 0 && class173.directions[var16 - 1][var17] == 0 && (var12[var13 - 1][var14] & 19136782) == 0 && (var12[var13 - 1][var14 + 1] & 19136824) == 0) { - class173.bufferX[var18] = var4 - 1; - class173.bufferY[var18] = var5; - var18 = var18 + 1 & 4095; - class173.directions[var16 - 1][var17] = 2; - class173.distances[var16 - 1][var17] = var15; - } - - if (var16 < 126 && class173.directions[var16 + 1][var17] == 0 && (var12[var13 + 2][var14] & 19136899) == 0 && (var12[var13 + 2][var14 + 1] & 19136992) == 0) { - class173.bufferX[var18] = var4 + 1; - class173.bufferY[var18] = var5; - var18 = var18 + 1 & 4095; - class173.directions[var16 + 1][var17] = 8; - class173.distances[var16 + 1][var17] = var15; - } - - if (var17 > 0 && class173.directions[var16][var17 - 1] == 0 && (var12[var13][var14 - 1] & 19136782) == 0 && (var12[var13 + 1][var14 - 1] & 19136899) == 0) { - class173.bufferX[var18] = var4; - class173.bufferY[var18] = var5 - 1; - var18 = var18 + 1 & 4095; - class173.directions[var16][var17 - 1] = 1; - class173.distances[var16][var17 - 1] = var15; - } - - if (var17 < 126 && class173.directions[var16][var17 + 1] == 0 && (var12[var13][var14 + 2] & 19136824) == 0 && (var12[var13 + 1][var14 + 2] & 19136992) == 0) { - class173.bufferX[var18] = var4; - class173.bufferY[var18] = var5 + 1; - var18 = var18 + 1 & 4095; - class173.directions[var16][var17 + 1] = 4; - class173.distances[var16][var17 + 1] = var15; - } - - if (var16 > 0 && var17 > 0 && class173.directions[var16 - 1][var17 - 1] == 0 && (var12[var13 - 1][var14] & 19136830) == 0 && (var12[var13 - 1][var14 - 1] & 19136782) == 0 && (var12[var13][var14 - 1] & 19136911) == 0) { - class173.bufferX[var18] = var4 - 1; - class173.bufferY[var18] = var5 - 1; - var18 = var18 + 1 & 4095; - class173.directions[var16 - 1][var17 - 1] = 3; - class173.distances[var16 - 1][var17 - 1] = var15; - } - - if (var16 < 126 && var17 > 0 && class173.directions[var16 + 1][var17 - 1] == 0 && (var12[var13 + 1][var14 - 1] & 19136911) == 0 && (var12[var13 + 2][var14 - 1] & 19136899) == 0 && (var12[var13 + 2][var14] & 19136995) == 0) { - class173.bufferX[var18] = var4 + 1; - class173.bufferY[var18] = var5 - 1; - var18 = var18 + 1 & 4095; - class173.directions[var16 + 1][var17 - 1] = 9; - class173.distances[var16 + 1][var17 - 1] = var15; - } - - if (var16 > 0 && var17 < 126 && class173.directions[var16 - 1][var17 + 1] == 0 && (var12[var13 - 1][var14 + 1] & 19136830) == 0 && (var12[var13 - 1][var14 + 2] & 19136824) == 0 && (var12[var13][var14 + 2] & 19137016) == 0) { - class173.bufferX[var18] = var4 - 1; - class173.bufferY[var18] = var5 + 1; - var18 = var18 + 1 & 4095; - class173.directions[var16 - 1][var17 + 1] = 6; - class173.distances[var16 - 1][var17 + 1] = var15; - } - - if (var16 < 126 && var17 < 126 && class173.directions[var16 + 1][var17 + 1] == 0 && (var12[var13 + 1][var14 + 2] & 19137016) == 0 && (var12[var13 + 2][var14 + 2] & 19136992) == 0 && (var12[var13 + 2][var14 + 1] & 19136995) == 0) { - class173.bufferX[var18] = var4 + 1; - class173.bufferY[var18] = var5 + 1; - var18 = var18 + 1 & 4095; - class173.directions[var16 + 1][var17 + 1] = 12; - class173.distances[var16 + 1][var17 + 1] = var15; + @Export("addSequenceSoundEffect") + static void addSequenceSoundEffect(SequenceDefinition var0, int var1, int var2, int var3) { + if (Client.soundEffectCount < 50 && Client.areaSoundEffectVolume != 0) { + if (var0.soundEffects != null && var1 < var0.soundEffects.length) { + int var4 = var0.soundEffects[var1]; + if (var4 != 0) { + int var5 = var4 >> 8; + int var6 = var4 >> 4 & 7; + int var7 = var4 & 15; + Client.soundEffectIds[Client.soundEffectCount] = var5; + Client.queuedSoundEffectLoops[Client.soundEffectCount] = var6; + Client.queuedSoundEffectDelays[Client.soundEffectCount] = 0; + Client.soundEffects[Client.soundEffectCount] = null; + int var8 = (var2 - 64) / 128; + int var9 = (var3 - 64) / 128; + Client.soundLocations[Client.soundEffectCount] = var7 + (var9 << 8) + (var8 << 16); + ++Client.soundEffectCount; + } } } - - class173.field2070 = var4; - LoginScreenAnimation.field1029 = var5; - return false; } - @ObfuscatedName("ib") + @ObfuscatedName("hn") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "91" + signature = "(ZI)V", + garbageValue = "1179821355" ) - @Export("Widget_runOnTargetLeave") - static void Widget_runOnTargetLeave() { - if (Client.isSpellSelected) { - Widget var0 = ArchiveLoader.getWidgetChild(Clock.selectedSpellWidget, Client.selectedSpellChildIndex); - if (var0 != null && var0.onTargetLeave != null) { - ScriptEvent var1 = new ScriptEvent(); - var1.widget = var0; - var1.args = var0.onTargetLeave; - GrandExchangeOfferAgeComparator.runScriptEvent(var1); + static final void method1197(boolean var0) { + Tiles.playPcmPlayers(); + ++Client.packetWriter.pendingWrites; + if (Client.packetWriter.pendingWrites >= 50 || var0) { + Client.packetWriter.pendingWrites = 0; + if (!Client.field691 && Client.packetWriter.getSocket() != null) { + PacketBufferNode var1 = ModelData0.getPacketBufferNode(ClientPacket.field2278, Client.packetWriter.isaacCipher); + Client.packetWriter.addNode(var1); + + try { + Client.packetWriter.flush(); + } catch (IOException var3) { + Client.field691 = true; + } } - Client.isSpellSelected = false; - GrandExchangeOfferAgeComparator.invalidateWidget(var0); } } } diff --git a/runescape-client/src/main/java/Interpreter.java b/runescape-client/src/main/java/Interpreter.java index e45757a498..417e956df2 100644 --- a/runescape-client/src/main/java/Interpreter.java +++ b/runescape-client/src/main/java/Interpreter.java @@ -3,76 +3,75 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; +import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("by") +@ObfuscatedName("bh") @Implements("Interpreter") public class Interpreter { - @ObfuscatedName("qg") - @ObfuscatedGetter( - intValue = 596908915 + @ObfuscatedName("ps") + @ObfuscatedSignature( + signature = "Lln;" ) - static int field1068; - @ObfuscatedName("q") - @Export("Interpreter_stringLocals") - static String[] Interpreter_stringLocals; - @ObfuscatedName("v") + @Export("sceneMinimapSprite") + static Sprite sceneMinimapSprite; + @ObfuscatedName("z") @Export("Interpreter_arrayLengths") static int[] Interpreter_arrayLengths; - @ObfuscatedName("l") + @ObfuscatedName("p") @Export("Interpreter_arrays") static int[][] Interpreter_arrays; - @ObfuscatedName("c") + @ObfuscatedName("h") @Export("Interpreter_intStack") static int[] Interpreter_intStack; - @ObfuscatedName("o") - @ObfuscatedGetter( - intValue = -548793337 - ) - @Export("Interpreter_intStackSize") - static int Interpreter_intStackSize; - @ObfuscatedName("i") + @ObfuscatedName("w") @Export("Interpreter_stringStack") static String[] Interpreter_stringStack; - @ObfuscatedName("d") + @ObfuscatedName("k") @ObfuscatedGetter( - intValue = -36200349 - ) - static int field1063; - @ObfuscatedName("m") - @ObfuscatedGetter( - intValue = -1766816567 + intValue = 1012398359 ) @Export("Interpreter_frameDepth") static int Interpreter_frameDepth; - @ObfuscatedName("p") + @ObfuscatedName("x") @ObfuscatedSignature( - signature = "[Lbx;" + signature = "[Lbd;" ) @Export("Interpreter_frames") static ScriptFrame[] Interpreter_frames; - @ObfuscatedName("x") + @ObfuscatedName("o") + @ObfuscatedSignature( + signature = "Lcf;" + ) + @Export("pcmPlayerProvider") + static class99 pcmPlayerProvider; + @ObfuscatedName("e") + @ObfuscatedSignature( + signature = "Lhl;" + ) + static Widget field1090; + @ObfuscatedName("n") @Export("Interpreter_calendar") static java.util.Calendar Interpreter_calendar; - @ObfuscatedName("j") + @ObfuscatedName("r") @Export("Interpreter_MONTHS") static final String[] Interpreter_MONTHS; - @ObfuscatedName("e") - static boolean field1075; + @ObfuscatedName("a") + static boolean field1093; + @ObfuscatedName("d") + static boolean field1087; @ObfuscatedName("s") - static boolean field1076; - @ObfuscatedName("b") @ObfuscatedGetter( - intValue = 1096350801 + intValue = -185993069 ) - static int field1080; - @ObfuscatedName("w") - static final double field1078; - @ObfuscatedName("bi") + static int field1095; + @ObfuscatedName("q") + static final double field1082; + @ObfuscatedName("dk") @ObfuscatedSignature( - signature = "[Llw;" + signature = "Lkn;" ) - @Export("worldSelectStars") - static IndexedSprite[] worldSelectStars; + @Export("js5Socket") + static AbstractSocket js5Socket; static { Interpreter_arrayLengths = new int[5]; @@ -83,9 +82,174 @@ public class Interpreter { Interpreter_frames = new ScriptFrame[50]; Interpreter_calendar = java.util.Calendar.getInstance(); Interpreter_MONTHS = new String[]{"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; - field1075 = false; - field1076 = false; - field1080 = 0; - field1078 = Math.log(2.0D); + field1093 = false; + field1087 = false; + field1095 = 0; + field1082 = Math.log(2.0D); + } + + @ObfuscatedName("f") + @ObfuscatedSignature( + signature = "(II)Liu;", + garbageValue = "-1932320530" + ) + @Export("ItemDefinition_get") + public static ItemDefinition ItemDefinition_get(int var0) { + ItemDefinition var1 = (ItemDefinition)ItemDefinition.ItemDefinition_cached.get((long)var0); + if (var1 != null) { + return var1; + } else { + byte[] var2 = ItemDefinition.ItemDefinition_archive.takeFile(10, var0); + var1 = new ItemDefinition(); + var1.id = var0; + if (var2 != null) { + var1.decode(new Buffer(var2)); + } + + var1.post(); + if (var1.noteTemplate != -1) { + var1.genCert(ItemDefinition_get(var1.noteTemplate), ItemDefinition_get(var1.note)); + } + + if (var1.notedId != -1) { + var1.genBought(ItemDefinition_get(var1.notedId), ItemDefinition_get(var1.unnotedId)); + } + + if (var1.placeholderTemplate != -1) { + var1.genPlaceholder(ItemDefinition_get(var1.placeholderTemplate), ItemDefinition_get(var1.placeholder)); + } + + if (!ItemDefinition.ItemDefinition_inMembersWorld && var1.isMembersOnly) { + var1.name = "Members object"; + var1.isTradable = false; + var1.groundActions = null; + var1.inventoryActions = null; + var1.shiftClickIndex = -1; + var1.team = 0; + if (var1.params != null) { + boolean var3 = false; + + for (Node var4 = var1.params.first(); var4 != null; var4 = var1.params.next()) { + ParamDefinition var5 = MusicPatchNode.getParamDefinition((int)var4.key); + if (var5.autoDisable) { + var4.remove(); + } else { + var3 = true; + } + } + + if (!var3) { + var1.params = null; + } + } + } + + ItemDefinition.ItemDefinition_cached.put(var1, (long)var0); + return var1; + } + } + + @ObfuscatedName("f") + @ObfuscatedSignature( + signature = "(Ljava/lang/CharSequence;I)Z", + garbageValue = "-1540204759" + ) + @Export("isNumber") + public static boolean isNumber(CharSequence var0) { + return SpriteMask.method4039(var0, 10, true); + } + + @ObfuscatedName("h") + @ObfuscatedSignature( + signature = "(ILci;ZI)I", + garbageValue = "1948301704" + ) + static int method1995(int var0, Script var1, boolean var2) { + Widget var3; + if (var0 >= 2000) { + var0 -= 1000; + var3 = Language.getWidget(Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]); + } else { + var3 = var2 ? field1090 : class188.field2352; + } + + ScriptEvent.invalidateWidget(var3); + if (var0 != ScriptOpcodes.CC_SETOBJECT && var0 != ScriptOpcodes.CC_SETOBJECT_NONUM && var0 != ScriptOpcodes.CC_SETOBJECT_ALWAYS_NUM) { + if (var0 == ScriptOpcodes.CC_SETNPCHEAD) { + var3.modelType = 2; + var3.modelId = Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + return 1; + } else if (var0 == ScriptOpcodes.CC_SETPLAYERHEAD_SELF) { + var3.modelType = 3; + var3.modelId = class215.localPlayer.appearance.getChatHeadId(); + return 1; + } else { + return 2; + } + } else { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + int var4 = Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + int var5 = Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + var3.itemId = var4; + var3.itemQuantity = var5; + ItemDefinition var6 = ItemDefinition_get(var4); + var3.modelAngleX = var6.xan2d; + var3.modelAngleY = var6.yan2d; + var3.modelAngleZ = var6.zan2d; + var3.modelOffsetX = var6.offsetX2d; + var3.modelOffsetY = var6.offsetY2d; + var3.modelZoom = var6.zoom2d; + if (var0 == ScriptOpcodes.CC_SETOBJECT_NONUM) { + var3.itemQuantityMode = 0; + } else if (var0 == ScriptOpcodes.CC_SETOBJECT_ALWAYS_NUM | 1 == var6.isStackable) { + var3.itemQuantityMode = 1; + } else { + var3.itemQuantityMode = 2; + } + + if (var3.field2711 > 0) { + var3.modelZoom = var3.modelZoom * 32 / var3.field2711; + } else if (var3.rawWidth > 0) { + var3.modelZoom = var3.modelZoom * 32 / var3.rawWidth; + } + + return 1; + } + } + + @ObfuscatedName("o") + @ObfuscatedSignature( + signature = "(Ldf;IIIB)Z", + garbageValue = "-22" + ) + static final boolean method1969(Model var0, int var1, int var2, int var3) { + boolean var4 = ViewportMouse.ViewportMouse_isInViewport; + if (!var4) { + return false; + } else { + class96.method2307(); + int var5 = var0.xMid + var1; + int var6 = var2 + var0.yMid; + int var7 = var3 + var0.zMid; + int var8 = var0.xMidOffset; + int var9 = var0.yMidOffset; + int var10 = var0.zMidOffset; + int var11 = class30.field261 - var5; + int var12 = class2.field5 - var6; + int var13 = GrandExchangeEvents.field36 - var7; + if (Math.abs(var11) > var8 + Frames.field1880) { + return false; + } else if (Math.abs(var12) > var9 + class189.field2355) { + return false; + } else if (Math.abs(var13) > var10 + class65.field603) { + return false; + } else if (Math.abs(var13 * ViewportMouse.field1739 - var12 * class288.field3652) > var9 * class65.field603 + var10 * class189.field2355) { + return false; + } else if (Math.abs(var11 * class288.field3652 - var13 * ViewportMouse.field1737) > var8 * class65.field603 + var10 * Frames.field1880) { + return false; + } else { + return Math.abs(var12 * ViewportMouse.field1737 - var11 * ViewportMouse.field1739) <= var9 * Frames.field1880 + var8 * class189.field2355; + } + } } } diff --git a/runescape-client/src/main/java/InvDefinition.java b/runescape-client/src/main/java/InvDefinition.java index 643439eaf0..23e409bf53 100644 --- a/runescape-client/src/main/java/InvDefinition.java +++ b/runescape-client/src/main/java/InvDefinition.java @@ -4,18 +4,35 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("iq") +@ObfuscatedName("it") @Implements("InvDefinition") public class InvDefinition extends DualNode { - @ObfuscatedName("t") + @ObfuscatedName("sy") @ObfuscatedSignature( - signature = "Leb;" + signature = "Lif;" + ) + public static class237 field3210; + @ObfuscatedName("u") + @ObfuscatedSignature( + signature = "Lhf;" + ) + @Export("InvDefinition_archive") + public static AbstractArchive InvDefinition_archive; + @ObfuscatedName("f") + @ObfuscatedSignature( + signature = "Lef;" ) @Export("InvDefinition_cached") static EvictingDualNodeHashTable InvDefinition_cached; - @ObfuscatedName("n") + @ObfuscatedName("w") + @ObfuscatedSignature( + signature = "Lhf;" + ) + @Export("Widget_archive") + public static AbstractArchive Widget_archive; + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = -1300111967 + intValue = 1331007469 ) @Export("size") public int size; @@ -28,10 +45,10 @@ public class InvDefinition extends DualNode { this.size = 0; } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Lkc;B)V", - garbageValue = "-57" + signature = "(Lkg;B)V", + garbageValue = "-67" ) @Export("decode") void decode(Buffer var1) { @@ -45,10 +62,10 @@ public class InvDefinition extends DualNode { } } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Lkc;IB)V", - garbageValue = "-64" + signature = "(Lkg;II)V", + garbageValue = "63686644" ) @Export("decodeNext") void decodeNext(Buffer var1, int var2) { @@ -57,4 +74,23 @@ public class InvDefinition extends DualNode { } } + + @ObfuscatedName("z") + @ObfuscatedSignature( + signature = "(B)Z", + garbageValue = "-77" + ) + @Export("isKeyDown") + public static final boolean isKeyDown() { + synchronized(KeyHandler.KeyHandler_instance) { + if (KeyHandler.field399 == KeyHandler.field384) { + return false; + } else { + class49.field418 = KeyHandler.field396[KeyHandler.field399]; + class297.field3699 = KeyHandler.field395[KeyHandler.field399]; + KeyHandler.field399 = KeyHandler.field399 + 1 & 127; + return true; + } + } + } } diff --git a/runescape-client/src/main/java/IsaacCipher.java b/runescape-client/src/main/java/IsaacCipher.java index 08e55e2ed3..44c218983e 100644 --- a/runescape-client/src/main/java/IsaacCipher.java +++ b/runescape-client/src/main/java/IsaacCipher.java @@ -4,36 +4,36 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("lm") +@ObfuscatedName("ld") @Implements("IsaacCipher") public final class IsaacCipher { - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = 1041384153 + intValue = -1571057455 ) @Export("valuesRemaining") int valuesRemaining; - @ObfuscatedName("v") + @ObfuscatedName("z") @Export("results") int[] results; - @ObfuscatedName("l") + @ObfuscatedName("p") @Export("mm") int[] mm; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedGetter( - intValue = 386499495 + intValue = -1397727627 ) @Export("aa") int aa; - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedGetter( - intValue = -1628464269 + intValue = -1547439877 ) @Export("bb") int bb; - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedGetter( - intValue = 1923641591 + intValue = 1834697375 ) @Export("cc") int cc; @@ -46,13 +46,13 @@ public final class IsaacCipher { this.results[var2] = var1[var2]; } - this.method6377(); + this.method6332(); } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "(I)I", - garbageValue = "-1848840340" + garbageValue = "-1791712529" ) @Export("nextInt") public final int nextInt() { @@ -64,12 +64,12 @@ public final class IsaacCipher { return this.results[--this.valuesRemaining]; } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( signature = "(I)I", - garbageValue = "-2138100218" + garbageValue = "1109117945" ) - public final int method6378() { + public final int method6331() { if (this.valuesRemaining == 0) { this.generateMoreResults(); this.valuesRemaining = 256; @@ -78,10 +78,10 @@ public final class IsaacCipher { return this.results[this.valuesRemaining - 1]; } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "111234133" + garbageValue = "-1602632803" ) @Export("generateMoreResults") final void generateMoreResults() { @@ -103,18 +103,18 @@ public final class IsaacCipher { this.aa += this.mm[128 + var1 & 255]; int var3; - this.mm[var1] = var3 = this.mm[(var2 & 1020) >> 2] + this.aa + this.bb; + this.mm[var1] = var3 = this.mm[(var2 & 1020) >> 2] + this.bb + this.aa; this.results[var1] = this.bb = this.mm[(var3 >> 8 & 1020) >> 2] + var2; } } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "1" + signature = "(I)V", + garbageValue = "-660697769" ) - final void method6377() { + final void method6332() { int var9 = -1640531527; int var8 = -1640531527; int var7 = -1640531527; diff --git a/runescape-client/src/main/java/ItemContainer.java b/runescape-client/src/main/java/ItemContainer.java index 7ac981b079..2aa67f0eb2 100644 --- a/runescape-client/src/main/java/ItemContainer.java +++ b/runescape-client/src/main/java/ItemContainer.java @@ -1,21 +1,40 @@ import net.runelite.mapping.Export; import net.runelite.mapping.Implements; +import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("bu") +@ObfuscatedName("bm") @Implements("ItemContainer") public class ItemContainer extends Node { - @ObfuscatedName("a") + @ObfuscatedName("oc") @ObfuscatedSignature( - signature = "Llh;" + signature = "Lfk;" + ) + @Export("mouseWheel") + static MouseWheel mouseWheel; + @ObfuscatedName("u") + @ObfuscatedSignature( + signature = "Lle;" ) @Export("itemContainers") static NodeHashTable itemContainers; - @ObfuscatedName("t") + @ObfuscatedName("bq") + @ObfuscatedSignature( + signature = "[Llm;" + ) + @Export("worldSelectFlagSprites") + static IndexedSprite[] worldSelectFlagSprites; + @ObfuscatedName("hs") + @ObfuscatedGetter( + intValue = 778957861 + ) + @Export("cameraPitch") + static int cameraPitch; + @ObfuscatedName("f") @Export("ids") int[] ids; - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("quantities") int[] quantities; @@ -28,49 +47,19 @@ public class ItemContainer extends Node { this.quantities = new int[]{0}; } - @ObfuscatedName("a") - @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "4" - ) - static void method1250() { - synchronized(ArchiveDiskActionHandler.ArchiveDiskActionHandler_lock) { - if (ArchiveDiskActionHandler.field3132 == 0) { - ArchiveDiskActionHandler.ArchiveDiskActionHandler_thread = new Thread(new ArchiveDiskActionHandler()); - ArchiveDiskActionHandler.ArchiveDiskActionHandler_thread.setDaemon(true); - ArchiveDiskActionHandler.ArchiveDiskActionHandler_thread.start(); - ArchiveDiskActionHandler.ArchiveDiskActionHandler_thread.setPriority(5); - } - - ArchiveDiskActionHandler.field3132 = 600; - } + @ObfuscatedName("h") + @Export("Entity_unpackID") + public static int Entity_unpackID(long var0) { + return (int)(var0 >>> 17 & 4294967295L); } - @ObfuscatedName("a") + @ObfuscatedName("gp") @ObfuscatedSignature( - signature = "([BIII)Ljava/lang/String;", - garbageValue = "2029003644" + signature = "(Lbt;II)V", + garbageValue = "1416714498" ) - public static String method1252(byte[] var0, int var1, int var2) { - StringBuilder var3 = new StringBuilder(); - - for (int var4 = var1; var4 < var2 + var1; var4 += 3) { - int var5 = var0[var4] & 255; - var3.append(class289.field3636[var5 >>> 2]); - if (var4 < var2 - 1) { - int var6 = var0[var4 + 1] & 255; - var3.append(class289.field3636[(var5 & 3) << 4 | var6 >>> 4]); - if (var4 < var2 - 2) { - int var7 = var0[var4 + 2] & 255; - var3.append(class289.field3636[(var6 & 15) << 2 | var7 >>> 6]).append(class289.field3636[var7 & 63]); - } else { - var3.append(class289.field3636[(var6 & 15) << 2]).append("="); - } - } else { - var3.append(class289.field3636[(var5 & 3) << 4]).append("=="); - } - } - - return var3.toString(); + @Export("getActorScreenLocation") + static final void getActorScreenLocation(Actor var0, int var1) { + TextureProvider.worldToScreen(var0.x, var0.y, var1); } } diff --git a/runescape-client/src/main/java/ItemDefinition.java b/runescape-client/src/main/java/ItemDefinition.java index 32334a1112..26f876ca13 100644 --- a/runescape-client/src/main/java/ItemDefinition.java +++ b/runescape-client/src/main/java/ItemDefinition.java @@ -4,294 +4,282 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("iw") +@ObfuscatedName("iu") @Implements("ItemDefinition") public class ItemDefinition extends DualNode { - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "Lhq;" + signature = "Lhf;" ) @Export("ItemDefinition_archive") - public static AbstractArchive ItemDefinition_archive; - @ObfuscatedName("c") - @ObfuscatedSignature( - signature = "Lhq;" - ) - @Export("ItemDefinition_modelArchive") - public static AbstractArchive ItemDefinition_modelArchive; - @ObfuscatedName("o") + static AbstractArchive ItemDefinition_archive; + @ObfuscatedName("y") @Export("ItemDefinition_inMembersWorld") - public static boolean ItemDefinition_inMembersWorld; + static boolean ItemDefinition_inMembersWorld; @ObfuscatedName("i") - @ObfuscatedGetter( - intValue = -917450963 - ) - @Export("ItemDefinition_fileCount") - public static int ItemDefinition_fileCount; - @ObfuscatedName("d") @ObfuscatedSignature( - signature = "Leb;" + signature = "Lef;" ) @Export("ItemDefinition_cached") static EvictingDualNodeHashTable ItemDefinition_cached; - @ObfuscatedName("m") + @ObfuscatedName("k") @ObfuscatedSignature( - signature = "Leb;" + signature = "Lef;" ) @Export("ItemDefinition_cachedModels") static EvictingDualNodeHashTable ItemDefinition_cachedModels; - @ObfuscatedName("p") + @ObfuscatedName("x") @ObfuscatedSignature( - signature = "Leb;" + signature = "Lef;" ) @Export("ItemDefinition_cachedSprites") - public static EvictingDualNodeHashTable ItemDefinition_cachedSprites; - @ObfuscatedName("k") + static EvictingDualNodeHashTable ItemDefinition_cachedSprites; + @ObfuscatedName("e") @ObfuscatedGetter( - intValue = 1655552733 + intValue = -1707758529 ) @Export("id") public int id; - @ObfuscatedName("x") + @ObfuscatedName("n") @ObfuscatedGetter( - intValue = -547612395 + intValue = 1053221347 ) @Export("model") int model; - @ObfuscatedName("j") + @ObfuscatedName("r") @Export("name") public String name; - @ObfuscatedName("r") + @ObfuscatedName("c") @Export("recolorFrom") short[] recolorFrom; - @ObfuscatedName("e") + @ObfuscatedName("a") @Export("recolorTo") short[] recolorTo; - @ObfuscatedName("s") + @ObfuscatedName("d") @Export("retextureFrom") short[] retextureFrom; - @ObfuscatedName("b") + @ObfuscatedName("s") @Export("retextureTo") short[] retextureTo; - @ObfuscatedName("z") + @ObfuscatedName("t") @ObfuscatedGetter( - intValue = -1315103765 + intValue = -2055958697 ) @Export("zoom2d") public int zoom2d; - @ObfuscatedName("f") + @ObfuscatedName("m") @ObfuscatedGetter( - intValue = -1143032297 + intValue = 1816614305 ) @Export("xan2d") public int xan2d; - @ObfuscatedName("g") + @ObfuscatedName("v") @ObfuscatedGetter( - intValue = 1607504109 + intValue = 1526001809 ) @Export("yan2d") public int yan2d; - @ObfuscatedName("w") + @ObfuscatedName("q") @ObfuscatedGetter( - intValue = -116977677 + intValue = -539889481 ) @Export("zan2d") public int zan2d; - @ObfuscatedName("u") + @ObfuscatedName("l") @ObfuscatedGetter( - intValue = -2042292023 + intValue = 322028541 ) @Export("offsetX2d") public int offsetX2d; - @ObfuscatedName("y") + @ObfuscatedName("j") @ObfuscatedGetter( - intValue = 234867639 + intValue = -2088965279 ) @Export("offsetY2d") public int offsetY2d; - @ObfuscatedName("aa") + @ObfuscatedName("af") @ObfuscatedGetter( - intValue = -1650503273 + intValue = -1815571439 ) @Export("isStackable") public int isStackable; - @ObfuscatedName("aw") + @ObfuscatedName("ad") @ObfuscatedGetter( - intValue = -1059176385 + intValue = -552662655 ) @Export("price") public int price; - @ObfuscatedName("ar") + @ObfuscatedName("am") @Export("isMembersOnly") public boolean isMembersOnly; - @ObfuscatedName("aq") + @ObfuscatedName("ai") @Export("groundActions") public String[] groundActions; - @ObfuscatedName("ad") + @ObfuscatedName("ag") @Export("inventoryActions") public String[] inventoryActions; - @ObfuscatedName("ak") + @ObfuscatedName("aw") @ObfuscatedGetter( - intValue = -908004017 + intValue = -1971378651 ) @Export("shiftClickIndex") int shiftClickIndex; - @ObfuscatedName("av") + @ObfuscatedName("ak") @ObfuscatedGetter( - intValue = 1119226973 + intValue = -1773729327 ) @Export("maleModel") int maleModel; - @ObfuscatedName("am") + @ObfuscatedName("aa") @ObfuscatedGetter( - intValue = 87988501 + intValue = -455750453 ) @Export("maleModel1") int maleModel1; @ObfuscatedName("ab") @ObfuscatedGetter( - intValue = 1276760375 + intValue = -1417938545 ) @Export("maleOffset") int maleOffset; - @ObfuscatedName("ax") + @ObfuscatedName("ar") @ObfuscatedGetter( - intValue = 375502763 + intValue = -1824818731 ) @Export("femaleModel") int femaleModel; - @ObfuscatedName("al") + @ObfuscatedName("av") @ObfuscatedGetter( - intValue = 1319608041 + intValue = 1505112135 ) @Export("femaleModel1") int femaleModel1; - @ObfuscatedName("ap") + @ObfuscatedName("aq") @ObfuscatedGetter( - intValue = -510888703 + intValue = -1323922583 ) @Export("femaleOffset") int femaleOffset; - @ObfuscatedName("aj") + @ObfuscatedName("ac") @ObfuscatedGetter( - intValue = -88424051 + intValue = -601368135 ) @Export("maleModel2") int maleModel2; - @ObfuscatedName("ae") + @ObfuscatedName("az") @ObfuscatedGetter( - intValue = -733154665 + intValue = 2064429329 ) @Export("femaleModel2") int femaleModel2; - @ObfuscatedName("au") + @ObfuscatedName("at") @ObfuscatedGetter( - intValue = 197107887 + intValue = -304223391 ) @Export("maleHeadModel") int maleHeadModel; - @ObfuscatedName("ah") + @ObfuscatedName("ae") @ObfuscatedGetter( - intValue = 844874933 + intValue = -1381797739 ) @Export("maleHeadModel2") int maleHeadModel2; - @ObfuscatedName("an") + @ObfuscatedName("aj") @ObfuscatedGetter( - intValue = 458940691 + intValue = -1901611229 ) @Export("femaleHeadModel") int femaleHeadModel; - @ObfuscatedName("af") + @ObfuscatedName("ap") @ObfuscatedGetter( - intValue = -25035873 + intValue = 1400619091 ) @Export("femaleHeadModel2") int femaleHeadModel2; - @ObfuscatedName("ay") + @ObfuscatedName("an") @Export("countobj") int[] countobj; - @ObfuscatedName("az") + @ObfuscatedName("al") @Export("countco") int[] countco; - @ObfuscatedName("ao") + @ObfuscatedName("ay") @ObfuscatedGetter( - intValue = 1406408801 + intValue = 787629621 ) @Export("note") public int note; - @ObfuscatedName("ai") + @ObfuscatedName("ax") @ObfuscatedGetter( - intValue = 1823216111 + intValue = 518109657 ) @Export("noteTemplate") public int noteTemplate; - @ObfuscatedName("ac") + @ObfuscatedName("au") @ObfuscatedGetter( - intValue = 520393867 + intValue = 321486963 ) @Export("resizeX") int resizeX; - @ObfuscatedName("at") + @ObfuscatedName("as") @ObfuscatedGetter( - intValue = -979555913 + intValue = 1993733329 ) @Export("resizeY") int resizeY; - @ObfuscatedName("as") + @ObfuscatedName("ah") @ObfuscatedGetter( - intValue = 1214416487 + intValue = 129289269 ) @Export("resizeZ") int resizeZ; - @ObfuscatedName("ba") + @ObfuscatedName("bi") @ObfuscatedGetter( - intValue = -411723185 + intValue = -577437457 ) @Export("ambient") public int ambient; - @ObfuscatedName("bg") + @ObfuscatedName("bo") @ObfuscatedGetter( - intValue = -1454093755 + intValue = 1778876649 ) @Export("contrast") public int contrast; - @ObfuscatedName("bc") + @ObfuscatedName("bx") @ObfuscatedGetter( - intValue = 209054149 + intValue = -1174290321 ) @Export("team") public int team; - @ObfuscatedName("bd") + @ObfuscatedName("bu") @ObfuscatedSignature( - signature = "Llr;" + signature = "Llb;" ) @Export("params") IterableNodeHashTable params; - @ObfuscatedName("bx") + @ObfuscatedName("bd") @Export("isTradable") public boolean isTradable; - @ObfuscatedName("bl") + @ObfuscatedName("bn") @ObfuscatedGetter( - intValue = 1627267757 + intValue = 867687465 ) @Export("unnotedId") int unnotedId; - @ObfuscatedName("bh") + @ObfuscatedName("bj") @ObfuscatedGetter( - intValue = -1264367263 + intValue = 16133681 ) @Export("notedId") int notedId; - @ObfuscatedName("bu") + @ObfuscatedName("bm") @ObfuscatedGetter( - intValue = -233747953 + intValue = -10172209 ) @Export("placeholder") public int placeholder; - @ObfuscatedName("br") + @ObfuscatedName("bq") @ObfuscatedGetter( - intValue = -1266476401 + intValue = 2111064913 ) @Export("placeholderTemplate") public int placeholderTemplate; @@ -343,19 +331,19 @@ public class ItemDefinition extends DualNode { this.placeholderTemplate = -1; } - @ObfuscatedName("t") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(S)V", - garbageValue = "3136" + signature = "(I)V", + garbageValue = "1502929201" ) @Export("post") void post() { } - @ObfuscatedName("n") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(Lkc;I)V", - garbageValue = "-1200001770" + signature = "(Lkg;I)V", + garbageValue = "348104513" ) @Export("decode") void decode(Buffer var1) { @@ -369,10 +357,10 @@ public class ItemDefinition extends DualNode { } } - @ObfuscatedName("q") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(Lkc;II)V", - garbageValue = "-1546966172" + signature = "(Lkg;II)V", + garbageValue = "1444708655" ) @Export("decodeNext") void decodeNext(Buffer var1, int var2) { @@ -479,7 +467,7 @@ public class ItemDefinition extends DualNode { } else if (var2 == 113) { this.ambient = var1.readByte(); } else if (var2 == 114) { - this.contrast = var1.readByte(); + this.contrast = var1.readByte() * 5; } else if (var2 == 115) { this.team = var1.readUnsignedByte(); } else if (var2 == 139) { @@ -491,16 +479,16 @@ public class ItemDefinition extends DualNode { } else if (var2 == 149) { this.placeholderTemplate = var1.readUnsignedShort(); } else if (var2 == 249) { - this.params = UserComparator10.readStringIntParameters(var1, this.params); + this.params = ModelData0.readStringIntParameters(var1, this.params); } } } - @ObfuscatedName("v") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(Liw;Liw;I)V", - garbageValue = "-320255470" + signature = "(Liu;Liu;I)V", + garbageValue = "1697277685" ) @Export("genCert") void genCert(ItemDefinition var1, ItemDefinition var2) { @@ -521,10 +509,10 @@ public class ItemDefinition extends DualNode { this.isStackable = 1; } - @ObfuscatedName("l") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "(Liw;Liw;B)V", - garbageValue = "58" + signature = "(Liu;Liu;S)V", + garbageValue = "23631" ) @Export("genBought") void genBought(ItemDefinition var1, ItemDefinition var2) { @@ -565,10 +553,10 @@ public class ItemDefinition extends DualNode { this.price = 0; } - @ObfuscatedName("c") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "(Liw;Liw;B)V", - garbageValue = "-82" + signature = "(Liu;Liu;I)V", + garbageValue = "217032543" ) @Export("genPlaceholder") void genPlaceholder(ItemDefinition var1, ItemDefinition var2) { @@ -590,10 +578,10 @@ public class ItemDefinition extends DualNode { this.isTradable = false; } - @ObfuscatedName("o") + @ObfuscatedName("w") @ObfuscatedSignature( - signature = "(II)Ldu;", - garbageValue = "-671168801" + signature = "(II)Ldq;", + garbageValue = "1977010468" ) @Export("getModelData") public final ModelData getModelData(int var1) { @@ -608,11 +596,11 @@ public class ItemDefinition extends DualNode { } if (var2 != -1) { - return class222.ItemDefinition_get(var2).getModelData(1); + return Interpreter.ItemDefinition_get(var2).getModelData(1); } } - ModelData var4 = ModelData.ModelData_get(ItemDefinition_modelArchive, this.model, 0); + ModelData var4 = ModelData.ModelData_get(class266.ItemDefinition_modelArchive, this.model, 0); if (var4 == null) { return null; } else { @@ -638,8 +626,8 @@ public class ItemDefinition extends DualNode { @ObfuscatedName("i") @ObfuscatedSignature( - signature = "(IB)Ldv;", - garbageValue = "1" + signature = "(II)Ldf;", + garbageValue = "-438694006" ) @Export("getModel") public final Model getModel(int var1) { @@ -653,7 +641,7 @@ public class ItemDefinition extends DualNode { } if (var2 != -1) { - return class222.ItemDefinition_get(var2).getModel(1); + return Interpreter.ItemDefinition_get(var2).getModel(1); } } @@ -661,7 +649,7 @@ public class ItemDefinition extends DualNode { if (var5 != null) { return var5; } else { - ModelData var6 = ModelData.ModelData_get(ItemDefinition_modelArchive, this.model, 0); + ModelData var6 = ModelData.ModelData_get(class266.ItemDefinition_modelArchive, this.model, 0); if (var6 == null) { return null; } else { @@ -682,7 +670,7 @@ public class ItemDefinition extends DualNode { } } - var5 = var6.toModel(this.ambient + 64, this.contrast * 5 + 768, -50, -10, -50); + var5 = var6.toModel(this.ambient + 64, this.contrast + 768, -50, -10, -50); var5.isSingleTile = true; ItemDefinition_cachedModels.put(var5, (long)this.id); return var5; @@ -690,10 +678,10 @@ public class ItemDefinition extends DualNode { } } - @ObfuscatedName("d") + @ObfuscatedName("k") @ObfuscatedSignature( - signature = "(II)Liw;", - garbageValue = "709794134" + signature = "(IB)Liu;", + garbageValue = "56" ) @Export("getCountObj") public ItemDefinition getCountObj(int var1) { @@ -707,17 +695,17 @@ public class ItemDefinition extends DualNode { } if (var2 != -1) { - return class222.ItemDefinition_get(var2); + return Interpreter.ItemDefinition_get(var2); } } return this; } - @ObfuscatedName("p") + @ObfuscatedName("e") @ObfuscatedSignature( signature = "(ZI)Z", - garbageValue = "1539305914" + garbageValue = "311572900" ) @Export("hasNoValidModel") public final boolean hasNoValidModel(boolean var1) { @@ -734,15 +722,15 @@ public class ItemDefinition extends DualNode { return true; } else { boolean var5 = true; - if (!ItemDefinition_modelArchive.tryLoadFile(var2, 0)) { + if (!class266.ItemDefinition_modelArchive.tryLoadFile(var2, 0)) { var5 = false; } - if (var3 != -1 && !ItemDefinition_modelArchive.tryLoadFile(var3, 0)) { + if (var3 != -1 && !class266.ItemDefinition_modelArchive.tryLoadFile(var3, 0)) { var5 = false; } - if (var4 != -1 && !ItemDefinition_modelArchive.tryLoadFile(var4, 0)) { + if (var4 != -1 && !class266.ItemDefinition_modelArchive.tryLoadFile(var4, 0)) { var5 = false; } @@ -750,12 +738,12 @@ public class ItemDefinition extends DualNode { } } - @ObfuscatedName("h") + @ObfuscatedName("n") @ObfuscatedSignature( - signature = "(ZI)Ldu;", - garbageValue = "-1635392002" + signature = "(ZI)Ldq;", + garbageValue = "292190899" ) - public final ModelData method4790(boolean var1) { + public final ModelData method4746(boolean var1) { int var2 = this.maleModel; int var3 = this.maleModel1; int var4 = this.maleModel2; @@ -768,11 +756,11 @@ public class ItemDefinition extends DualNode { if (var2 == -1) { return null; } else { - ModelData var5 = ModelData.ModelData_get(ItemDefinition_modelArchive, var2, 0); + ModelData var5 = ModelData.ModelData_get(class266.ItemDefinition_modelArchive, var2, 0); if (var3 != -1) { - ModelData var6 = ModelData.ModelData_get(ItemDefinition_modelArchive, var3, 0); + ModelData var6 = ModelData.ModelData_get(class266.ItemDefinition_modelArchive, var3, 0); if (var4 != -1) { - ModelData var7 = ModelData.ModelData_get(ItemDefinition_modelArchive, var4, 0); + ModelData var7 = ModelData.ModelData_get(class266.ItemDefinition_modelArchive, var4, 0); ModelData[] var8 = new ModelData[]{var5, var6, var7}; var5 = new ModelData(var8, 3); } else { @@ -806,12 +794,12 @@ public class ItemDefinition extends DualNode { } } - @ObfuscatedName("k") + @ObfuscatedName("c") @ObfuscatedSignature( signature = "(ZI)Z", - garbageValue = "-2104705818" + garbageValue = "1230085198" ) - public final boolean method4791(boolean var1) { + public final boolean method4754(boolean var1) { int var2 = this.maleHeadModel; int var3 = this.maleHeadModel2; if (var1) { @@ -823,11 +811,11 @@ public class ItemDefinition extends DualNode { return true; } else { boolean var4 = true; - if (!ItemDefinition_modelArchive.tryLoadFile(var2, 0)) { + if (!class266.ItemDefinition_modelArchive.tryLoadFile(var2, 0)) { var4 = false; } - if (var3 != -1 && !ItemDefinition_modelArchive.tryLoadFile(var3, 0)) { + if (var3 != -1 && !class266.ItemDefinition_modelArchive.tryLoadFile(var3, 0)) { var4 = false; } @@ -835,12 +823,12 @@ public class ItemDefinition extends DualNode { } } - @ObfuscatedName("x") + @ObfuscatedName("s") @ObfuscatedSignature( - signature = "(ZI)Ldu;", - garbageValue = "1595698517" + signature = "(ZI)Ldq;", + garbageValue = "-1698197859" ) - public final ModelData method4792(boolean var1) { + public final ModelData method4755(boolean var1) { int var2 = this.maleHeadModel; int var3 = this.maleHeadModel2; if (var1) { @@ -851,9 +839,9 @@ public class ItemDefinition extends DualNode { if (var2 == -1) { return null; } else { - ModelData var4 = ModelData.ModelData_get(ItemDefinition_modelArchive, var2, 0); + ModelData var4 = ModelData.ModelData_get(class266.ItemDefinition_modelArchive, var2, 0); if (var3 != -1) { - ModelData var5 = ModelData.ModelData_get(ItemDefinition_modelArchive, var3, 0); + ModelData var5 = ModelData.ModelData_get(class266.ItemDefinition_modelArchive, var3, 0); ModelData[] var6 = new ModelData[]{var4, var5}; var4 = new ModelData(var6, 2); } @@ -875,43 +863,43 @@ public class ItemDefinition extends DualNode { } } - @ObfuscatedName("j") + @ObfuscatedName("t") @ObfuscatedSignature( - signature = "(IIB)I", - garbageValue = "125" + signature = "(III)I", + garbageValue = "1826497561" ) @Export("getIntParam") public int getIntParam(int var1, int var2) { - return FriendsList.method5306(this.params, var1, var2); - } - - @ObfuscatedName("r") - @ObfuscatedSignature( - signature = "(ILjava/lang/String;B)Ljava/lang/String;", - garbageValue = "48" - ) - @Export("getStringParam") - public String getStringParam(int var1, String var2) { IterableNodeHashTable var4 = this.params; - String var3; + int var3; if (var4 == null) { var3 = var2; } else { - ObjectNode var5 = (ObjectNode)var4.get((long)var1); + IntegerNode var5 = (IntegerNode)var4.get((long)var1); if (var5 == null) { var3 = var2; } else { - var3 = (String)var5.obj; + var3 = var5.integer; } } return var3; } - @ObfuscatedName("e") + @ObfuscatedName("m") @ObfuscatedSignature( - signature = "(I)I", - garbageValue = "1695709278" + signature = "(ILjava/lang/String;I)Ljava/lang/String;", + garbageValue = "-1305262203" + ) + @Export("getStringParam") + public String getStringParam(int var1, String var2) { + return ServerBuild.method4214(this.params, var1, var2); + } + + @ObfuscatedName("v") + @ObfuscatedSignature( + signature = "(B)I", + garbageValue = "83" ) @Export("getShiftClickIndex") public int getShiftClickIndex() { diff --git a/runescape-client/src/main/java/IterableDualNodeQueue.java b/runescape-client/src/main/java/IterableDualNodeQueue.java index c56d783f26..9a13a52953 100644 --- a/runescape-client/src/main/java/IterableDualNodeQueue.java +++ b/runescape-client/src/main/java/IterableDualNodeQueue.java @@ -4,18 +4,18 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("jq") +@ObfuscatedName("jz") @Implements("IterableDualNodeQueue") public class IterableDualNodeQueue implements Iterable { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lfa;" + signature = "Lfn;" ) @Export("sentinel") public DualNode sentinel; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lfa;" + signature = "Lfn;" ) @Export("head") DualNode head; @@ -26,7 +26,7 @@ public class IterableDualNodeQueue implements Iterable { this.sentinel.nextDual = this.sentinel; } - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("clear") public void clear() { while (this.sentinel.previousDual != this.sentinel) { @@ -35,9 +35,9 @@ public class IterableDualNodeQueue implements Iterable { } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Lfa;)V" + signature = "(Lfn;)V" ) @Export("add") public void add(DualNode var1) { @@ -51,9 +51,9 @@ public class IterableDualNodeQueue implements Iterable { var1.previousDual.nextDual = var1; } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "()Lfa;" + signature = "()Lfn;" ) @Export("removeLast") public DualNode removeLast() { @@ -66,18 +66,18 @@ public class IterableDualNodeQueue implements Iterable { } } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "()Lfa;" + signature = "()Lfn;" ) @Export("last") public DualNode last() { return this.previousOrLast((DualNode)null); } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(Lfa;)Lfa;" + signature = "(Lfn;)Lfn;" ) @Export("previousOrLast") DualNode previousOrLast(DualNode var1) { @@ -97,9 +97,9 @@ public class IterableDualNodeQueue implements Iterable { } } - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "()Lfa;" + signature = "()Lfn;" ) @Export("previous") public DualNode previous() { @@ -117,9 +117,9 @@ public class IterableDualNodeQueue implements Iterable { return new IterableDualNodeQueueIterator(this); } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Lfa;Lfa;)V" + signature = "(Lfn;Lfn;)V" ) @Export("DualNodeDeque_addBefore") public static void DualNodeDeque_addBefore(DualNode var0, DualNode var1) { diff --git a/runescape-client/src/main/java/IterableDualNodeQueueIterator.java b/runescape-client/src/main/java/IterableDualNodeQueueIterator.java index 22310ad3b9..5c76b38610 100644 --- a/runescape-client/src/main/java/IterableDualNodeQueueIterator.java +++ b/runescape-client/src/main/java/IterableDualNodeQueueIterator.java @@ -4,30 +4,30 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("jd") +@ObfuscatedName("jw") @Implements("IterableDualNodeQueueIterator") public class IterableDualNodeQueueIterator implements Iterator { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Ljq;" + signature = "Ljz;" ) @Export("queue") IterableDualNodeQueue queue; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lfa;" + signature = "Lfn;" ) @Export("head") DualNode head; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Lfa;" + signature = "Lfn;" ) @Export("last") DualNode last; @ObfuscatedSignature( - signature = "(Ljq;)V" + signature = "(Ljz;)V" ) IterableDualNodeQueueIterator(IterableDualNodeQueue var1) { this.last = null; @@ -36,15 +36,6 @@ public class IterableDualNodeQueueIterator implements Iterator { this.last = null; } - public void remove() { - this.last.removeDual(); - this.last = null; - } - - public boolean hasNext() { - return this.queue.sentinel != this.head; - } - public Object next() { DualNode var1 = this.head; if (var1 == this.queue.sentinel) { @@ -57,4 +48,13 @@ public class IterableDualNodeQueueIterator implements Iterator { this.last = var1; return var1; } + + public boolean hasNext() { + return this.queue.sentinel != this.head; + } + + public void remove() { + this.last.removeDual(); + this.last = null; + } } diff --git a/runescape-client/src/main/java/IterableNodeDeque.java b/runescape-client/src/main/java/IterableNodeDeque.java index 2836ebba48..a30d7901a4 100644 --- a/runescape-client/src/main/java/IterableNodeDeque.java +++ b/runescape-client/src/main/java/IterableNodeDeque.java @@ -8,17 +8,17 @@ import net.runelite.mapping.ObfuscatedSignature; @ObfuscatedName("jm") @Implements("IterableNodeDeque") public class IterableNodeDeque implements Iterable, Collection { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lfd;" + signature = "Lfb;" ) @Export("sentinel") Node sentinel; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lfd;" + signature = "Lfb;" ) - Node field3524; + Node field3537; public IterableNodeDeque() { this.sentinel = new Node(); @@ -26,7 +26,7 @@ public class IterableNodeDeque implements Iterable, Collection { this.sentinel.next = this.sentinel; } - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("rsClear") public void rsClear() { while (this.sentinel.previous != this.sentinel) { @@ -35,9 +35,9 @@ public class IterableNodeDeque implements Iterable, Collection { } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Lfd;)V" + signature = "(Lfb;)V" ) @Export("addFirst") public void addFirst(Node var1) { @@ -51,9 +51,9 @@ public class IterableNodeDeque implements Iterable, Collection { var1.previous.next = var1; } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Lfd;)V" + signature = "(Lfb;)V" ) @Export("addLast") public void addLast(Node var1) { @@ -67,20 +67,20 @@ public class IterableNodeDeque implements Iterable, Collection { var1.previous.next = var1; } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "()Lfd;" + signature = "()Lfb;" ) @Export("last") public Node last() { - return this.method4954((Node)null); + return this.method4902((Node)null); } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(Lfd;)Lfd;" + signature = "(Lfb;)Lfb;" ) - Node method4954(Node var1) { + Node method4902(Node var1) { Node var2; if (var1 == null) { var2 = this.sentinel.previous; @@ -89,32 +89,32 @@ public class IterableNodeDeque implements Iterable, Collection { } if (var2 == this.sentinel) { - this.field3524 = null; + this.field3537 = null; return null; } else { - this.field3524 = var2.previous; + this.field3537 = var2.previous; return var2; } } - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "()Lfd;" + signature = "()Lfb;" ) @Export("previous") public Node previous() { - Node var1 = this.field3524; + Node var1 = this.field3537; if (var1 == this.sentinel) { - this.field3524 = null; + this.field3537 = null; return null; } else { - this.field3524 = var1.previous; + this.field3537 = var1.previous; return var1; } } - @ObfuscatedName("o") - int method4956() { + @ObfuscatedName("y") + int method4904() { int var1 = 0; for (Node var2 = this.sentinel.previous; var2 != this.sentinel; var2 = var2.previous) { @@ -124,17 +124,17 @@ public class IterableNodeDeque implements Iterable, Collection { return var1; } - @ObfuscatedName("i") - public boolean method5004() { + @ObfuscatedName("w") + public boolean method4911() { return this.sentinel.previous == this.sentinel; } - @ObfuscatedName("d") + @ObfuscatedName("i") @ObfuscatedSignature( - signature = "()[Lfd;" + signature = "()[Lfb;" ) - Node[] method4961() { - Node[] var1 = new Node[this.method4956()]; + Node[] method4906() { + Node[] var1 = new Node[this.method4904()]; int var2 = 0; for (Node var3 = this.sentinel.previous; var3 != this.sentinel; var3 = var3.previous) { @@ -144,25 +144,29 @@ public class IterableNodeDeque implements Iterable, Collection { return var1; } - @ObfuscatedName("m") + @ObfuscatedName("k") @ObfuscatedSignature( - signature = "(Lfd;)Z" + signature = "(Lfb;)Z" ) - boolean method4963(Node var1) { + boolean method4909(Node var1) { this.addFirst(var1); return true; } - public int size() { - return this.method4956(); + public void clear() { + this.rsClear(); } public boolean isEmpty() { - return this.method5004(); + return this.method4911(); + } + + public boolean contains(Object var1) { + throw new RuntimeException(); } public Object[] toArray() { - return this.method4961(); + return this.method4906(); } public Object[] toArray(Object[] var1) { @@ -175,7 +179,7 @@ public class IterableNodeDeque implements Iterable, Collection { return var1; } - public boolean containsAll(Collection var1) { + public boolean remove(Object var1) { throw new RuntimeException(); } @@ -183,45 +187,41 @@ public class IterableNodeDeque implements Iterable, Collection { throw new RuntimeException(); } - public boolean removeAll(Collection var1) { - throw new RuntimeException(); - } - - public boolean retainAll(Collection var1) { - throw new RuntimeException(); - } - - public int hashCode() { - return super.hashCode(); - } - - public boolean contains(Object var1) { - throw new RuntimeException(); - } - - public boolean remove(Object var1) { - throw new RuntimeException(); - } - - public void clear() { - this.rsClear(); - } - public boolean add(Object var1) { - return this.method4963((Node)var1); - } - - public Iterator iterator() { - return new IterableNodeDequeDescendingIterator(this); + return this.method4909((Node)var1); } public boolean equals(Object var1) { return super.equals(var1); } - @ObfuscatedName("q") + public int hashCode() { + return super.hashCode(); + } + + public boolean retainAll(Collection var1) { + throw new RuntimeException(); + } + + public boolean removeAll(Collection var1) { + throw new RuntimeException(); + } + + public int size() { + return this.method4904(); + } + + public boolean containsAll(Collection var1) { + throw new RuntimeException(); + } + + public Iterator iterator() { + return new IterableNodeDequeDescendingIterator(this); + } + + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(Lfd;Lfd;)V" + signature = "(Lfb;Lfb;)V" ) @Export("IterableNodeDeque_addBefore") public static void IterableNodeDeque_addBefore(Node var0, Node var1) { diff --git a/runescape-client/src/main/java/IterableNodeDequeDescendingIterator.java b/runescape-client/src/main/java/IterableNodeDequeDescendingIterator.java index 2ead8f581b..33c80d3139 100644 --- a/runescape-client/src/main/java/IterableNodeDequeDescendingIterator.java +++ b/runescape-client/src/main/java/IterableNodeDequeDescendingIterator.java @@ -4,23 +4,23 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("jk") +@ObfuscatedName("jp") @Implements("IterableNodeDequeDescendingIterator") public class IterableNodeDequeDescendingIterator implements Iterator { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "Ljm;" ) @Export("deque") IterableNodeDeque deque; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lfd;" + signature = "Lfb;" ) - Node field3535; - @ObfuscatedName("n") + Node field3545; + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Lfd;" + signature = "Lfb;" ) @Export("last") Node last; @@ -33,7 +33,7 @@ public class IterableNodeDequeDescendingIterator implements Iterator { this.setDeque(var1); } - @ObfuscatedName("d") + @ObfuscatedName("y") @ObfuscatedSignature( signature = "(Ljm;)V" ) @@ -43,33 +43,29 @@ public class IterableNodeDequeDescendingIterator implements Iterator { this.start(); } - @ObfuscatedName("m") + @ObfuscatedName("w") @Export("start") void start() { - this.field3535 = this.deque != null ? this.deque.sentinel.previous : null; + this.field3545 = this.deque != null ? this.deque.sentinel.previous : null; + this.last = null; + } + + public void remove() { + this.last.remove(); this.last = null; } public boolean hasNext() { - return this.deque.sentinel != this.field3535; - } - - public void remove() { - if (this.last == null) { - throw new IllegalStateException(); - } else { - this.last.remove(); - this.last = null; - } + return this.deque.sentinel != this.field3545; } public Object next() { - Node var1 = this.field3535; + Node var1 = this.field3545; if (var1 == this.deque.sentinel) { var1 = null; - this.field3535 = null; + this.field3545 = null; } else { - this.field3535 = var1.previous; + this.field3545 = var1.previous; } this.last = var1; diff --git a/runescape-client/src/main/java/IterableNodeHashTable.java b/runescape-client/src/main/java/IterableNodeHashTable.java index a7dd868937..a4777853fd 100644 --- a/runescape-client/src/main/java/IterableNodeHashTable.java +++ b/runescape-client/src/main/java/IterableNodeHashTable.java @@ -4,31 +4,31 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("lr") +@ObfuscatedName("lb") @Implements("IterableNodeHashTable") public final class IterableNodeHashTable implements Iterable { - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("size") int size; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "[Lfd;" + signature = "[Lfb;" ) @Export("buckets") Node[] buckets; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Lfd;" + signature = "Lfb;" ) @Export("currentGet") Node currentGet; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Lfd;" + signature = "Lfb;" ) @Export("current") Node current; - @ObfuscatedName("v") + @ObfuscatedName("z") @Export("index") int index; @@ -45,9 +45,9 @@ public final class IterableNodeHashTable implements Iterable { } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(J)Lfd;" + signature = "(J)Lfb;" ) @Export("get") public Node get(long var1) { @@ -65,9 +65,9 @@ public final class IterableNodeHashTable implements Iterable { return null; } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Lfd;J)V" + signature = "(Lfb;J)V" ) @Export("put") public void put(Node var1, long var2) { @@ -83,7 +83,7 @@ public final class IterableNodeHashTable implements Iterable { var1.key = var2; } - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("clear") public void clear() { for (int var1 = 0; var1 < this.size; ++var1) { @@ -103,9 +103,9 @@ public final class IterableNodeHashTable implements Iterable { this.current = null; } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "()Lfd;" + signature = "()Lfb;" ) @Export("first") public Node first() { @@ -113,9 +113,9 @@ public final class IterableNodeHashTable implements Iterable { return this.next(); } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "()Lfd;" + signature = "()Lfb;" ) @Export("next") public Node next() { diff --git a/runescape-client/src/main/java/IterableNodeHashTableIterator.java b/runescape-client/src/main/java/IterableNodeHashTableIterator.java index a65474f662..f183e67850 100644 --- a/runescape-client/src/main/java/IterableNodeHashTableIterator.java +++ b/runescape-client/src/main/java/IterableNodeHashTableIterator.java @@ -7,30 +7,30 @@ import net.runelite.mapping.ObfuscatedSignature; @ObfuscatedName("ll") @Implements("IterableNodeHashTableIterator") public class IterableNodeHashTableIterator implements Iterator { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Llr;" + signature = "Llb;" ) @Export("hashTable") IterableNodeHashTable hashTable; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lfd;" + signature = "Lfb;" ) @Export("head") Node head; - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("index") int index; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Lfd;" + signature = "Lfb;" ) @Export("last") Node last; @ObfuscatedSignature( - signature = "(Llr;)V" + signature = "(Llb;)V" ) IterableNodeHashTableIterator(IterableNodeHashTable var1) { this.last = null; @@ -38,7 +38,7 @@ public class IterableNodeHashTableIterator implements Iterator { this.start(); } - @ObfuscatedName("d") + @ObfuscatedName("y") @Export("start") void start() { this.head = this.hashTable.buckets[0].previous; @@ -46,6 +46,23 @@ public class IterableNodeHashTableIterator implements Iterator { this.last = null; } + public boolean hasNext() { + if (this.hashTable.buckets[this.index - 1] != this.head) { + return true; + } else { + while (this.index < this.hashTable.size) { + if (this.hashTable.buckets[this.index++].previous != this.hashTable.buckets[this.index - 1]) { + this.head = this.hashTable.buckets[this.index - 1].previous; + return true; + } + + this.head = this.hashTable.buckets[this.index - 1]; + } + + return false; + } + } + public Object next() { Node var1; if (this.hashTable.buckets[this.index - 1] != this.head) { @@ -68,23 +85,6 @@ public class IterableNodeHashTableIterator implements Iterator { } } - public boolean hasNext() { - if (this.hashTable.buckets[this.index - 1] != this.head) { - return true; - } else { - while (this.index < this.hashTable.size) { - if (this.hashTable.buckets[this.index++].previous != this.hashTable.buckets[this.index - 1]) { - this.head = this.hashTable.buckets[this.index - 1].previous; - return true; - } - - this.head = this.hashTable.buckets[this.index - 1]; - } - - return false; - } - } - public void remove() { if (this.last == null) { throw new IllegalStateException(); diff --git a/runescape-client/src/main/java/JagexCache.java b/runescape-client/src/main/java/JagexCache.java index 0debb0a49b..9ca764084f 100644 --- a/runescape-client/src/main/java/JagexCache.java +++ b/runescape-client/src/main/java/JagexCache.java @@ -5,47 +5,56 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("fh") +@ObfuscatedName("fs") @Implements("JagexCache") public class JagexCache { - @ObfuscatedName("v") - @Export("cacheDir") - static File cacheDir; - @ObfuscatedName("l") + @ObfuscatedName("g") + @Export("JagexCache_locationFile") + public static File JagexCache_locationFile; + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = 642051021 + intValue = 618561373 ) @Export("idxCount") - static int idxCount; - @ObfuscatedName("m") - @ObfuscatedGetter( - intValue = 1587061671 - ) - static int field2030; - @ObfuscatedName("p") + public static int idxCount; + @ObfuscatedName("x") @ObfuscatedSignature( - signature = "Lmz;" + signature = "Lmb;" ) @Export("JagexCache_randomDat") public static BufferedFile JagexCache_randomDat; - @ObfuscatedName("h") + @ObfuscatedName("o") @ObfuscatedSignature( - signature = "Lmz;" + signature = "Lmb;" ) @Export("JagexCache_dat2File") public static BufferedFile JagexCache_dat2File; - @ObfuscatedName("k") + @ObfuscatedName("e") @ObfuscatedSignature( - signature = "Lmz;" + signature = "Lmb;" ) @Export("JagexCache_idx255File") public static BufferedFile JagexCache_idx255File; - @ObfuscatedName("br") + @ObfuscatedName("c") + public static String[] field2046; + @ObfuscatedName("v") + @Export("userHomeDirectory") + public static String userHomeDirectory; + @ObfuscatedName("ct") + @Export("mouseCam") + static boolean mouseCam; + @ObfuscatedName("fq") @ObfuscatedSignature( - signature = "[Llw;" + signature = "Lky;" ) - @Export("worldSelectFlagSprites") - static IndexedSprite[] worldSelectFlagSprites; + @Export("fontBold12") + static Font fontBold12; + @ObfuscatedName("ji") + @ObfuscatedSignature( + signature = "Ldb;" + ) + @Export("textureProvider") + static TextureProvider textureProvider; static { JagexCache_randomDat = null; @@ -53,15 +62,113 @@ public class JagexCache { JagexCache_idx255File = null; } - @ObfuscatedName("gy") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "1986411014" + signature = "(IIB)V", + garbageValue = "87" ) - static void method3624() { - if (Login.worldMap != null) { - Login.worldMap.method6437(Player.Client_plane, UserComparator8.baseX * 64 + (class215.localPlayer.x >> 7), HealthBar.baseY * 64 + (class215.localPlayer.y >> 7), false); - Login.worldMap.loadCache(); + public static void method3540(int var0, int var1) { + VarbitDefinition var3 = (VarbitDefinition)VarbitDefinition.VarbitDefinition_cached.get((long)var0); + VarbitDefinition var2; + if (var3 != null) { + var2 = var3; + } else { + byte[] var8 = VarbitDefinition.VarbitDefinition_archive.takeFile(14, var0); + var3 = new VarbitDefinition(); + if (var8 != null) { + var3.decode(new Buffer(var8)); + } + + VarbitDefinition.VarbitDefinition_cached.put(var3, (long)var0); + var2 = var3; + } + + int var4 = var2.baseVar; + int var5 = var2.startBit; + int var6 = var2.endBit; + int var7 = Varps.Varps_masks[var6 - var5]; + if (var1 < 0 || var1 > var7) { + var1 = 0; + } + + var7 <<= var5; + Varps.Varps_main[var4] = Varps.Varps_main[var4] & ~var7 | var1 << var5 & var7; + } + + @ObfuscatedName("b") + @ObfuscatedSignature( + signature = "(IIIB)I", + garbageValue = "12" + ) + static int method3531(int var0, int var1, int var2) { + if (var2 > 179) { + var1 /= 2; + } + + if (var2 > 192) { + var1 /= 2; + } + + if (var2 > 217) { + var1 /= 2; + } + + if (var2 > 243) { + var1 /= 2; + } + + int var3 = (var1 / 32 << 7) + (var0 / 4 << 10) + var2 / 2; + return var3; + } + + @ObfuscatedName("jd") + @ObfuscatedSignature( + signature = "(IIIIIB)V", + garbageValue = "11" + ) + @Export("drawScrollBar") + static final void drawScrollBar(int var0, int var1, int var2, int var3, int var4) { + GrandExchangeOfferTotalQuantityComparator.scrollBarSprites[0].drawAt(var0, var1); + GrandExchangeOfferTotalQuantityComparator.scrollBarSprites[1].drawAt(var0, var3 + var1 - 16); + Rasterizer2D.Rasterizer2D_fillRectangle(var0, var1 + 16, 16, var3 - 32, Client.field705); + int var5 = var3 * (var3 - 32) / var4; + if (var5 < 8) { + var5 = 8; + } + + int var6 = (var3 - 32 - var5) * var2 / (var4 - var3); + Rasterizer2D.Rasterizer2D_fillRectangle(var0, var6 + var1 + 16, 16, var5, Client.field706); + Rasterizer2D.Rasterizer2D_drawVerticalLine(var0, var6 + var1 + 16, var5, Client.field708); + Rasterizer2D.Rasterizer2D_drawVerticalLine(var0 + 1, var6 + var1 + 16, var5, Client.field708); + Rasterizer2D.Rasterizer2D_drawHorizontalLine(var0, var6 + var1 + 16, 16, Client.field708); + Rasterizer2D.Rasterizer2D_drawHorizontalLine(var0, var6 + var1 + 17, 16, Client.field708); + Rasterizer2D.Rasterizer2D_drawVerticalLine(var0 + 15, var6 + var1 + 16, var5, Client.field707); + Rasterizer2D.Rasterizer2D_drawVerticalLine(var0 + 14, var6 + var1 + 17, var5 - 1, Client.field707); + Rasterizer2D.Rasterizer2D_drawHorizontalLine(var0, var6 + var5 + var1 + 15, 16, Client.field707); + Rasterizer2D.Rasterizer2D_drawHorizontalLine(var0 + 1, var6 + var5 + var1 + 14, 15, Client.field707); + } + + @ObfuscatedName("lq") + @ObfuscatedSignature( + signature = "(B)V", + garbageValue = "66" + ) + static void method3539() { + if (Client.field826 && class215.localPlayer != null) { + int var0 = class215.localPlayer.pathX[0]; + int var1 = class215.localPlayer.pathY[0]; + if (var0 < 0 || var1 < 0 || var0 >= 104 || var1 >= 104) { + return; + } + + class80.oculusOrbFocalPointX = class215.localPlayer.x; + int var2 = class195.getTileHeight(class215.localPlayer.x, class215.localPlayer.y, ClientPacket.Client_plane) - Client.camFollowHeight; + if (var2 < GrandExchangeOfferAgeComparator.field78) { + GrandExchangeOfferAgeComparator.field78 = var2; + } + + class81.oculusOrbFocalPointY = class215.localPlayer.y; + Client.field826 = false; } } diff --git a/runescape-client/src/main/java/KeyHandler.java b/runescape-client/src/main/java/KeyHandler.java index 3bae8c6157..65736aaf76 100644 --- a/runescape-client/src/main/java/KeyHandler.java +++ b/runescape-client/src/main/java/KeyHandler.java @@ -1,102 +1,98 @@ -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.Field; -import java.lang.reflect.Method; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -import net.runelite.rs.Reflection; -@ObfuscatedName("ay") +@ObfuscatedName("an") @Implements("KeyHandler") public final class KeyHandler implements KeyListener, FocusListener { - @ObfuscatedName("oa") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lfl;" - ) - @Export("mouseWheel") - static MouseWheel mouseWheel; - @ObfuscatedName("a") - @ObfuscatedSignature( - signature = "Lay;" + signature = "Lan;" ) @Export("KeyHandler_instance") public static KeyHandler KeyHandler_instance; - @ObfuscatedName("cl") + @ObfuscatedName("cb") @Export("KeyHandler_pressedKeys") public static boolean[] KeyHandler_pressedKeys; - @ObfuscatedName("cz") - public static int[] field378; + @ObfuscatedName("cj") + public static int[] field394; @ObfuscatedName("cq") @ObfuscatedGetter( - intValue = -2036425657 + intValue = -1692685617 ) - public static int field379; - @ObfuscatedName("cj") + public static int field393; + @ObfuscatedName("ci") @ObfuscatedGetter( - intValue = -900076009 + intValue = 1179821355 ) - public static int field380; - @ObfuscatedName("cm") - static char[] field381; - @ObfuscatedName("cb") - static int[] field382; - @ObfuscatedName("cp") - public static int[] field383; + public static int field397; + @ObfuscatedName("cu") + static char[] field395; @ObfuscatedName("cs") + static int[] field396; + @ObfuscatedName("cc") + public static int[] field378; + @ObfuscatedName("cp") @ObfuscatedGetter( - intValue = 1760182155 + intValue = -157249247 + ) + public static int field398; + @ObfuscatedName("ce") + @ObfuscatedGetter( + intValue = -1356974525 + ) + public static int field399; + @ObfuscatedName("ca") + @ObfuscatedGetter( + intValue = -632301517 + ) + public static int field400; + @ObfuscatedName("cf") + @ObfuscatedGetter( + intValue = 731449573 ) public static int field384; - @ObfuscatedName("ck") + @ObfuscatedName("cx") @ObfuscatedGetter( - intValue = -1088731015 - ) - public static int field385; - @ObfuscatedName("ct") - @ObfuscatedGetter( - intValue = -1306175843 - ) - public static int field387; - @ObfuscatedName("cc") - @ObfuscatedGetter( - intValue = 1559093381 - ) - public static int field370; - @ObfuscatedName("ch") - @ObfuscatedGetter( - intValue = 1888243371 + intValue = -1978604411 ) @Export("KeyHandler_idleCycles") public static volatile int KeyHandler_idleCycles; - @ObfuscatedName("cg") + @ObfuscatedName("cz") @Export("KeyHandler_keyCodes") static int[] KeyHandler_keyCodes; - @ObfuscatedName("km") - @ObfuscatedGetter( - intValue = 166190927 + @ObfuscatedName("dc") + @ObfuscatedSignature( + signature = "Lfo;" ) - @Export("menuWidth") - static int menuWidth; + @Export("js5SocketTask") + static Task js5SocketTask; + @ObfuscatedName("gi") + @ObfuscatedSignature( + signature = "[Lln;" + ) + @Export("crossSprites") + static Sprite[] crossSprites; static { KeyHandler_instance = new KeyHandler(); KeyHandler_pressedKeys = new boolean[112]; + field394 = new int[128]; + field393 = 0; + field397 = 0; + field395 = new char[128]; + field396 = new int[128]; field378 = new int[128]; - field379 = 0; - field380 = 0; - field381 = new char[128]; - field382 = new int[128]; - field383 = new int[128]; + field398 = 0; + field399 = 0; + field400 = 0; field384 = 0; - field385 = 0; - field387 = 0; - field370 = 0; KeyHandler_idleCycles = 0; KeyHandler_keyCodes = new int[]{-1, -1, -1, -1, -1, -1, -1, -1, 85, 80, 84, -1, 91, -1, -1, -1, 81, 82, 86, -1, -1, -1, -1, -1, -1, -1, -1, 13, -1, -1, -1, -1, 83, 104, 105, 103, 102, 96, 98, 97, 99, -1, -1, -1, -1, -1, -1, -1, 25, 16, 17, 18, 19, 20, 21, 22, 23, 24, -1, -1, -1, -1, -1, -1, -1, 48, 68, 66, 50, 34, 51, 52, 53, 39, 54, 55, 56, 70, 69, 40, 41, 32, 35, 49, 36, 38, 67, 33, 65, 37, 64, -1, -1, -1, -1, -1, 228, 231, 227, 233, 224, 219, 225, 230, 226, 232, 89, 87, -1, 88, 229, 90, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, -1, -1, -1, 101, -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, 100, -1, 87, -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, -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, -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, -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, -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, -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, -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, -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, -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, -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, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}; } @@ -104,30 +100,6 @@ public final class KeyHandler implements KeyListener, FocusListener { KeyHandler() { } - public final synchronized void keyReleased(KeyEvent var1) { - if (KeyHandler_instance != null) { - int var2 = var1.getKeyCode(); - if (var2 >= 0 && var2 < KeyHandler_keyCodes.length) { - var2 = KeyHandler_keyCodes[var2] & -129; - } else { - var2 = -1; - } - - if (field380 >= 0 && var2 >= 0) { - field378[field380] = ~var2; - field380 = field380 + 1 & 127; - if (field380 == field379) { - field380 = -1; - } - } - } - - var1.consume(); - } - - public final void focusGained(FocusEvent var1) { - } - public final synchronized void keyPressed(KeyEvent var1) { if (KeyHandler_instance != null) { int var2 = var1.getKeyCode(); @@ -140,21 +112,21 @@ public final class KeyHandler implements KeyListener, FocusListener { var2 = -1; } - if (field380 >= 0 && var2 >= 0) { - field378[field380] = var2; - field380 = field380 + 1 & 127; - if (field379 == field380) { - field380 = -1; + if (field397 >= 0 && var2 >= 0) { + field394[field397] = var2; + field397 = field397 + 1 & 127; + if (field397 == field393) { + field397 = -1; } } int var3; if (var2 >= 0) { - var3 = field387 + 1 & 127; - if (var3 != field385) { - field382[field387] = var2; - field381[field387] = 0; - field387 = var3; + var3 = field400 + 1 & 127; + if (var3 != field399) { + field396[field400] = var2; + field395[field400] = 0; + field400 = var3; } } @@ -166,11 +138,25 @@ public final class KeyHandler implements KeyListener, FocusListener { } - public final synchronized void focusLost(FocusEvent var1) { + public final synchronized void keyReleased(KeyEvent var1) { if (KeyHandler_instance != null) { - field380 = -1; + int var2 = var1.getKeyCode(); + if (var2 >= 0 && var2 < KeyHandler_keyCodes.length) { + var2 = KeyHandler_keyCodes[var2] & -129; + } else { + var2 = -1; + } + + if (field397 >= 0 && var2 >= 0) { + field394[field397] = ~var2; + field397 = field397 + 1 & 127; + if (field393 == field397) { + field397 = -1; + } + } } + var1.consume(); } public final void keyTyped(KeyEvent var1) { @@ -181,7 +167,7 @@ public final class KeyHandler implements KeyListener, FocusListener { if (var2 > 0 && var2 < 128 || var2 >= 160 && var2 <= 255) { var3 = true; } else { - label58: { + label63: { if (var2 != 0) { char[] var7 = class287.cp1252AsciiExtension; @@ -189,7 +175,7 @@ public final class KeyHandler implements KeyListener, FocusListener { char var6 = var7[var5]; if (var6 == var2) { var3 = true; - break label58; + break label63; } } } @@ -199,11 +185,11 @@ public final class KeyHandler implements KeyListener, FocusListener { } if (var3) { - int var4 = field387 + 1 & 127; - if (var4 != field385) { - field382[field387] = -1; - field381[field387] = var2; - field387 = var4; + int var4 = field400 + 1 & 127; + if (var4 != field399) { + field396[field400] = -1; + field395[field400] = var2; + field400 = var4; } } } @@ -212,162 +198,37 @@ public final class KeyHandler implements KeyListener, FocusListener { var1.consume(); } - @ObfuscatedName("a") - @ObfuscatedSignature( - signature = "(Ljava/awt/Component;I)V", - garbageValue = "1986559270" - ) - static void method914(Component var0) { - var0.removeMouseListener(MouseHandler.MouseHandler_instance); - var0.removeMouseMotionListener(MouseHandler.MouseHandler_instance); - var0.removeFocusListener(MouseHandler.MouseHandler_instance); - MouseHandler.MouseHandler_currentButtonVolatile = 0; + public final synchronized void focusLost(FocusEvent var1) { + if (KeyHandler_instance != null) { + field397 = -1; + } + } - @ObfuscatedName("n") - @ObfuscatedSignature( - signature = "(Lkc;II)V", - garbageValue = "290450764" - ) - @Export("readReflectionCheck") - public static void readReflectionCheck(Buffer var0, int var1) { - ReflectionCheck var2 = new ReflectionCheck(); - var2.size = var0.readUnsignedByte(); - var2.id = var0.readInt(); - var2.operations = new int[var2.size]; - var2.creationErrors = new int[var2.size]; - var2.fields = new Field[var2.size]; - var2.intReplaceValues = new int[var2.size]; - var2.methods = new Method[var2.size]; - var2.arguments = new byte[var2.size][][]; - - for (int var3 = 0; var3 < var2.size; ++var3) { - try { - int var4 = var0.readUnsignedByte(); - String var5; - String var6; - int var7; - if (var4 != 0 && var4 != 1 && var4 != 2) { - if (var4 == 3 || var4 == 4) { - var5 = var0.readStringCp1252NullTerminated(); - var6 = var0.readStringCp1252NullTerminated(); - var7 = var0.readUnsignedByte(); - String[] var8 = new String[var7]; - - for (int var9 = 0; var9 < var7; ++var9) { - var8[var9] = var0.readStringCp1252NullTerminated(); - } - - String var20 = var0.readStringCp1252NullTerminated(); - byte[][] var10 = new byte[var7][]; - int var12; - if (var4 == 3) { - for (int var11 = 0; var11 < var7; ++var11) { - var12 = var0.readInt(); - var10[var11] = new byte[var12]; - var0.readBytes(var10[var11], 0, var12); - } - } - - var2.operations[var3] = var4; - Class[] var21 = new Class[var7]; - - for (var12 = 0; var12 < var7; ++var12) { - var21[var12] = FontName.loadClassFromDescriptor(var8[var12]); - } - - Class var22 = FontName.loadClassFromDescriptor(var20); - if (FontName.loadClassFromDescriptor(var5).getClassLoader() == null) { - throw new SecurityException(); - } - - Method[] var13 = FontName.loadClassFromDescriptor(var5).getDeclaredMethods(); - Method[] var14 = var13; - - for (int var15 = 0; var15 < var14.length; ++var15) { - Method var16 = var14[var15]; - if (Reflection.getMethodName(var16).equals(var6)) { - Class[] var17 = Reflection.getParameterTypes(var16); - if (var21.length == var17.length) { - boolean var18 = true; - - for (int var19 = 0; var19 < var21.length; ++var19) { - if (var21[var19] != var17[var19]) { - var18 = false; - break; - } - } - - if (var18 && var22 == var16.getReturnType()) { - var2.methods[var3] = var16; - } - } - } - } - - var2.arguments[var3] = var10; - } - } else { - var5 = var0.readStringCp1252NullTerminated(); - var6 = var0.readStringCp1252NullTerminated(); - var7 = 0; - if (var4 == 1) { - var7 = var0.readInt(); - } - - var2.operations[var3] = var4; - var2.intReplaceValues[var3] = var7; - if (FontName.loadClassFromDescriptor(var5).getClassLoader() == null) { - throw new SecurityException(); - } - - var2.fields[var3] = Reflection.findField(FontName.loadClassFromDescriptor(var5), var6); - } - } catch (ClassNotFoundException var24) { - var2.creationErrors[var3] = -1; - } catch (SecurityException var25) { - var2.creationErrors[var3] = -2; - } catch (NullPointerException var26) { - var2.creationErrors[var3] = -3; - } catch (Exception var27) { - var2.creationErrors[var3] = -4; - } catch (Throwable var28) { - var2.creationErrors[var3] = -5; - } - } - - class96.reflectionChecks.addFirst(var2); + public final void focusGained(FocusEvent var1) { } - @ObfuscatedName("gu") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "1922573072" + signature = "(III)I", + garbageValue = "-1842902018" ) - static final void method913() { - int[] var0 = Players.Players_indices; - - int var1; - for (var1 = 0; var1 < Players.Players_count; ++var1) { - Player var2 = Client.players[var0[var1]]; - if (var2 != null && var2.overheadTextCyclesRemaining > 0) { - --var2.overheadTextCyclesRemaining; - if (var2.overheadTextCyclesRemaining == 0) { - var2.overheadText = null; - } - } + public static int method843(int var0, int var1) { + int var2; + for (var2 = 0; var1 > 0; --var1) { + var2 = var2 << 1 | var0 & 1; + var0 >>>= 1; } - for (var1 = 0; var1 < Client.npcCount; ++var1) { - int var4 = Client.npcIndices[var1]; - NPC var3 = Client.npcs[var4]; - if (var3 != null && var3.overheadTextCyclesRemaining > 0) { - --var3.overheadTextCyclesRemaining; - if (var3.overheadTextCyclesRemaining == 0) { - var3.overheadText = null; - } - } - } + return var2; + } + @ObfuscatedName("gi") + @ObfuscatedSignature( + signature = "(IIIII)V", + garbageValue = "1035079634" + ) + static final void method837(int var0, int var1, int var2, int var3) { + class2.method31(); } } diff --git a/runescape-client/src/main/java/KitDefinition.java b/runescape-client/src/main/java/KitDefinition.java index 7717b75653..e01f50147c 100644 --- a/runescape-client/src/main/java/KitDefinition.java +++ b/runescape-client/src/main/java/KitDefinition.java @@ -4,52 +4,58 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("io") +@ObfuscatedName("ie") @Implements("KitDefinition") public class KitDefinition extends DualNode { - @ObfuscatedName("a") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lhq;" + signature = "Lhf;" ) - @Export("KitDefinition_archive") - public static AbstractArchive KitDefinition_archive; - @ObfuscatedName("n") + @Export("KitDefinition_modelsArchive") + static AbstractArchive KitDefinition_modelsArchive; + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = 582717835 + intValue = 469619503 ) @Export("KitDefinition_fileCount") public static int KitDefinition_fileCount; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Leb;" + signature = "Lef;" ) @Export("KitDefinition_cached") static EvictingDualNodeHashTable KitDefinition_cached; - @ObfuscatedName("v") + @ObfuscatedName("bb") + @ObfuscatedSignature( + signature = "Llm;" + ) + @Export("worldSelectRightSprite") + static IndexedSprite worldSelectRightSprite; + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = -846711719 + intValue = 404247585 ) @Export("bodypartID") public int bodypartID; - @ObfuscatedName("l") + @ObfuscatedName("p") @Export("models2") int[] models2; - @ObfuscatedName("c") + @ObfuscatedName("h") @Export("recolorFrom") short[] recolorFrom; - @ObfuscatedName("o") + @ObfuscatedName("y") @Export("recolorTo") short[] recolorTo; - @ObfuscatedName("i") + @ObfuscatedName("w") @Export("retextureFrom") short[] retextureFrom; - @ObfuscatedName("d") + @ObfuscatedName("i") @Export("retextureTo") short[] retextureTo; - @ObfuscatedName("m") + @ObfuscatedName("k") @Export("models") int[] models; - @ObfuscatedName("p") + @ObfuscatedName("x") @Export("nonSelectable") public boolean nonSelectable; @@ -63,10 +69,10 @@ public class KitDefinition extends DualNode { this.nonSelectable = false; } - @ObfuscatedName("t") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Lkc;I)V", - garbageValue = "-1072389484" + signature = "(Lkg;I)V", + garbageValue = "-888948213" ) @Export("decode") void decode(Buffer var1) { @@ -80,10 +86,10 @@ public class KitDefinition extends DualNode { } } - @ObfuscatedName("n") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(Lkc;II)V", - garbageValue = "1034745229" + signature = "(Lkg;II)V", + garbageValue = "-1758313973" ) @Export("decodeNext") void decodeNext(Buffer var1, int var2) { @@ -126,10 +132,10 @@ public class KitDefinition extends DualNode { } - @ObfuscatedName("q") + @ObfuscatedName("z") @ObfuscatedSignature( signature = "(I)Z", - garbageValue = "2037455287" + garbageValue = "-1861944698" ) @Export("ready") public boolean ready() { @@ -139,7 +145,7 @@ public class KitDefinition extends DualNode { boolean var1 = true; for (int var2 = 0; var2 < this.models2.length; ++var2) { - if (!class43.KitDefinition_modelsArchive.tryLoadFile(this.models2[var2], 0)) { + if (!KitDefinition_modelsArchive.tryLoadFile(this.models2[var2], 0)) { var1 = false; } } @@ -148,10 +154,10 @@ public class KitDefinition extends DualNode { } } - @ObfuscatedName("v") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(I)Ldu;", - garbageValue = "1847415813" + signature = "(B)Ldq;", + garbageValue = "20" ) @Export("getModelData") public ModelData getModelData() { @@ -161,7 +167,7 @@ public class KitDefinition extends DualNode { ModelData[] var1 = new ModelData[this.models2.length]; for (int var2 = 0; var2 < this.models2.length; ++var2) { - var1[var2] = ModelData.ModelData_get(class43.KitDefinition_modelsArchive, this.models2[var2], 0); + var1[var2] = ModelData.ModelData_get(KitDefinition_modelsArchive, this.models2[var2], 0); } ModelData var4; @@ -188,16 +194,16 @@ public class KitDefinition extends DualNode { } } - @ObfuscatedName("l") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "(I)Z", - garbageValue = "1557117338" + signature = "(B)Z", + garbageValue = "1" ) - public boolean method4602() { + public boolean method4535() { boolean var1 = true; for (int var2 = 0; var2 < 5; ++var2) { - if (this.models[var2] != -1 && !class43.KitDefinition_modelsArchive.tryLoadFile(this.models[var2], 0)) { + if (this.models[var2] != -1 && !KitDefinition_modelsArchive.tryLoadFile(this.models[var2], 0)) { var1 = false; } } @@ -205,10 +211,10 @@ public class KitDefinition extends DualNode { return var1; } - @ObfuscatedName("c") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "(I)Ldu;", - garbageValue = "1574535853" + signature = "(B)Ldq;", + garbageValue = "-19" ) @Export("getKitDefinitionModels") public ModelData getKitDefinitionModels() { @@ -217,7 +223,7 @@ public class KitDefinition extends DualNode { for (int var3 = 0; var3 < 5; ++var3) { if (this.models[var3] != -1) { - var1[var2++] = ModelData.ModelData_get(class43.KitDefinition_modelsArchive, this.models[var3], 0); + var1[var2++] = ModelData.ModelData_get(KitDefinition_modelsArchive, this.models[var3], 0); } } diff --git a/runescape-client/src/main/java/Language.java b/runescape-client/src/main/java/Language.java index a03058a45d..0137cf4523 100644 --- a/runescape-client/src/main/java/Language.java +++ b/runescape-client/src/main/java/Language.java @@ -1,94 +1,84 @@ -import java.security.SecureRandom; +import java.util.Iterator; import java.util.Locale; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; +import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("gw") +@ObfuscatedName("gc") @Implements("Language") public class Language implements Enumerated { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lgw;" + signature = "Lgc;" ) @Export("Language_EN") public static final Language Language_EN; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lgw;" + signature = "Lgc;" ) @Export("Language_DE") static final Language Language_DE; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Lgw;" + signature = "Lgc;" ) @Export("Language_FR") public static final Language Language_FR; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Lgw;" + signature = "Lgc;" ) @Export("Language_PT") static final Language Language_PT; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "Lgw;" + signature = "Lgc;" ) @Export("Language_NL") static final Language Language_NL; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "Lgw;" + signature = "Lgc;" ) @Export("Language_ES") public static final Language Language_ES; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "Lgw;" + signature = "Lgc;" ) @Export("Language_ES_MX") static final Language Language_ES_MX; - @ObfuscatedName("m") + @ObfuscatedName("k") @ObfuscatedSignature( - signature = "[Lgw;" + signature = "[Lgc;" ) @Export("Language_valuesOrdered") public static final Language[] Language_valuesOrdered; - @ObfuscatedName("ai") - @ObfuscatedGetter( - intValue = -252727609 - ) - static int field2328; - @ObfuscatedName("dp") - @ObfuscatedSignature( - signature = "Lij;" - ) - @Export("archive7") - static Archive archive7; - @ObfuscatedName("o") - final String field2325; - @ObfuscatedName("i") + @ObfuscatedName("y") + final String field2364; + @ObfuscatedName("w") @Export("language") final String language; - @ObfuscatedName("d") + @ObfuscatedName("i") @ObfuscatedGetter( - intValue = -367223779 + intValue = -936078223 ) @Export("id") final int id; static { - Language_EN = new Language("EN", "en", "English", class192.field2345, 0, "GB"); - Language_DE = new Language("DE", "de", "German", class192.field2345, 1, "DE"); - Language_FR = new Language("FR", "fr", "French", class192.field2345, 2, "FR"); - Language_PT = new Language("PT", "pt", "Portuguese", class192.field2345, 3, "BR"); - Language_NL = new Language("NL", "nl", "Dutch", class192.field2341, 4, "NL"); - Language_ES = new Language("ES", "es", "Spanish", class192.field2341, 5, "ES"); - Language_ES_MX = new Language("ES_MX", "es-mx", "Spanish (Latin American)", class192.field2345, 6, "MX"); - Language[] var0 = method3808(); + Language_EN = new Language("EN", "en", "English", class192.field2381, 0, "GB"); + Language_DE = new Language("DE", "de", "German", class192.field2381, 1, "DE"); + Language_FR = new Language("FR", "fr", "French", class192.field2381, 2, "FR"); + Language_PT = new Language("PT", "pt", "Portuguese", class192.field2381, 3, "BR"); + Language_NL = new Language("NL", "nl", "Dutch", class192.field2392, 4, "NL"); + Language_ES = new Language("ES", "es", "Spanish", class192.field2392, 5, "ES"); + Language_ES_MX = new Language("ES_MX", "es-mx", "Spanish (Latin American)", class192.field2381, 6, "MX"); + Language[] var0 = method3703(); Language_valuesOrdered = new Language[var0.length]; Language[] var1 = var0; @@ -104,10 +94,10 @@ public class Language implements Enumerated { } @ObfuscatedSignature( - signature = "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lgm;ILjava/lang/String;)V" + signature = "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lgo;ILjava/lang/String;)V" ) Language(String var1, String var2, String var3, class192 var4, int var5, String var6) { - this.field2325 = var1; + this.field2364 = var1; this.language = var2; this.id = var5; if (var6 != null) { @@ -118,20 +108,20 @@ public class Language implements Enumerated { } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( signature = "(I)Ljava/lang/String;", - garbageValue = "-2063741998" + garbageValue = "786287735" ) @Export("getLanguage") String getLanguage() { return this.language; } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(I)I", - garbageValue = "-1993081102" + signature = "(B)I", + garbageValue = "7" ) @Export("rsOrdinal") public int rsOrdinal() { @@ -142,37 +132,275 @@ public class Language implements Enumerated { return this.getLanguage().toLowerCase(Locale.ENGLISH); } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(I)Ljava/security/SecureRandom;", - garbageValue = "810839825" + signature = "(II)Lhl;", + garbageValue = "-673897758" ) - static SecureRandom method3800() { - SecureRandom var0 = new SecureRandom(); - var0.nextInt(); - return var0; + @Export("getWidget") + public static Widget getWidget(int var0) { + int var1 = var0 >> 16; + int var2 = var0 & 65535; + if (FloorDecoration.Widget_interfaceComponents[var1] == null || FloorDecoration.Widget_interfaceComponents[var1][var2] == null) { + boolean var3 = UserComparator3.loadInterface(var1); + if (!var3) { + return null; + } + } + + return FloorDecoration.Widget_interfaceComponents[var1][var2]; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(I)[Lgw;", - garbageValue = "165302960" + signature = "(I)[Lgc;", + garbageValue = "-2103702236" ) - static Language[] method3808() { - return new Language[]{Language_NL, Language_ES, Language_PT, Language_DE, Language_ES_MX, Language_FR, Language_EN}; + static Language[] method3703() { + return new Language[]{Language_DE, Language_ES_MX, Language_FR, Language_ES, Language_PT, Language_EN, Language_NL}; } - @ObfuscatedName("ai") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(ILhf;ZI)V", - garbageValue = "-294923905" + signature = "(II)Lin;", + garbageValue = "-1669366533" ) - static void method3810(int var0, Coord var1, boolean var2) { - WorldMapArea var3 = UserComparator4.getWorldMap().getMapArea(var0); - int var4 = class215.localPlayer.Client_plane; - int var5 = UserComparator8.baseX * 64 + (class215.localPlayer.x >> 7); - int var6 = HealthBar.baseY * 64 + (class215.localPlayer.y >> 7); - Coord var7 = new Coord(var4, var5, var6); - UserComparator4.getWorldMap().method6443(var3, var7, var1, var2); + @Export("getEnum") + public static EnumDefinition getEnum(int var0) { + EnumDefinition var1 = (EnumDefinition)EnumDefinition.EnumDefinition_cached.get((long)var0); + if (var1 != null) { + return var1; + } else { + byte[] var2 = EnumDefinition.EnumDefinition_archive.takeFile(8, var0); + var1 = new EnumDefinition(); + if (var2 != null) { + var1.decode(new Buffer(var2)); + } + + EnumDefinition.EnumDefinition_cached.put(var1, (long)var0); + return var1; + } + } + + @ObfuscatedName("t") + @ObfuscatedSignature( + signature = "(ILci;ZS)I", + garbageValue = "32581" + ) + static int method3710(int var0, Script var1, boolean var2) { + Widget var3 = getWidget(Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]); + if (var0 == ScriptOpcodes.IF_GETX) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.x; + return 1; + } else if (var0 == ScriptOpcodes.IF_GETY) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.y; + return 1; + } else if (var0 == ScriptOpcodes.IF_GETWIDTH) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.width; + return 1; + } else if (var0 == ScriptOpcodes.IF_GETHEIGHT) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.height; + return 1; + } else if (var0 == ScriptOpcodes.IF_GETHIDE) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.isHidden ? 1 : 0; + return 1; + } else if (var0 == ScriptOpcodes.IF_GETLAYER) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.parentId; + return 1; + } else { + return 2; + } + } + + @ObfuscatedName("hi") + @ObfuscatedSignature( + signature = "(Lcg;IIB)V", + garbageValue = "24" + ) + static final void method3705(MenuAction var0, int var1, int var2) { + class32.menuAction(var0.param0, var0.param1, var0.opcode, var0.identifier, var0.action, var0.action, var1, var2); + } + + @ObfuscatedName("jw") + @ObfuscatedSignature( + signature = "(Lhl;II)I", + garbageValue = "1435184999" + ) + static final int method3719(Widget var0, int var1) { + if (var0.cs1Instructions != null && var1 < var0.cs1Instructions.length) { + try { + int[] var2 = var0.cs1Instructions[var1]; + int var3 = 0; + int var4 = 0; + byte var5 = 0; + + while (true) { + int var6 = var2[var4++]; + int var7 = 0; + byte var8 = 0; + if (var6 == 0) { + return var3; + } + + if (var6 == 1) { + var7 = Client.currentLevels[var2[var4++]]; + } + + if (var6 == 2) { + var7 = Client.levels[var2[var4++]]; + } + + if (var6 == 3) { + var7 = Client.experience[var2[var4++]]; + } + + int var9; + Widget var10; + int var11; + int var12; + if (var6 == 4) { + var9 = var2[var4++] << 16; + var9 += var2[var4++]; + var10 = getWidget(var9); + var11 = var2[var4++]; + if (var11 != -1 && (!Interpreter.ItemDefinition_get(var11).isMembersOnly || Client.isMembersWorld)) { + for (var12 = 0; var12 < var10.itemIds.length; ++var12) { + if (var11 + 1 == var10.itemIds[var12]) { + var7 += var10.itemQuantities[var12]; + } + } + } + } + + if (var6 == 5) { + var7 = Varps.Varps_main[var2[var4++]]; + } + + if (var6 == 6) { + var7 = Skills.Skills_experienceTable[Client.levels[var2[var4++]] - 1]; + } + + if (var6 == 7) { + var7 = Varps.Varps_main[var2[var4++]] * 100 / 46875; + } + + if (var6 == 8) { + var7 = class215.localPlayer.combatLevel; + } + + if (var6 == 9) { + for (var9 = 0; var9 < 25; ++var9) { + if (Skills.Skills_enabled[var9]) { + var7 += Client.levels[var9]; + } + } + } + + if (var6 == 10) { + var9 = var2[var4++] << 16; + var9 += var2[var4++]; + var10 = getWidget(var9); + var11 = var2[var4++]; + if (var11 != -1 && (!Interpreter.ItemDefinition_get(var11).isMembersOnly || Client.isMembersWorld)) { + for (var12 = 0; var12 < var10.itemIds.length; ++var12) { + if (var11 + 1 == var10.itemIds[var12]) { + var7 = 999999999; + break; + } + } + } + } + + if (var6 == 11) { + var7 = Client.runEnergy; + } + + if (var6 == 12) { + var7 = Client.weight; + } + + if (var6 == 13) { + var9 = Varps.Varps_main[var2[var4++]]; + int var13 = var2[var4++]; + var7 = (var9 & 1 << var13) != 0 ? 1 : 0; + } + + if (var6 == 14) { + var9 = var2[var4++]; + var7 = FileSystem.getVarbit(var9); + } + + if (var6 == 15) { + var8 = 1; + } + + if (var6 == 16) { + var8 = 2; + } + + if (var6 == 17) { + var8 = 3; + } + + if (var6 == 18) { + var7 = class51.baseX * 64 + (class215.localPlayer.x >> 7); + } + + if (var6 == 19) { + var7 = VarcInt.baseY * 64 + (class215.localPlayer.y >> 7); + } + + if (var6 == 20) { + var7 = var2[var4++]; + } + + if (var8 == 0) { + if (var5 == 0) { + var3 += var7; + } + + if (var5 == 1) { + var3 -= var7; + } + + if (var5 == 2 && var7 != 0) { + var3 /= var7; + } + + if (var5 == 3) { + var3 *= var7; + } + + var5 = 0; + } else { + var5 = var8; + } + } + } catch (Exception var14) { + return -1; + } + } else { + return -2; + } + } + + @ObfuscatedName("ks") + @ObfuscatedSignature( + signature = "(I)V", + garbageValue = "808353188" + ) + @Export("FriendSystem_invalidateIgnoreds") + static final void FriendSystem_invalidateIgnoreds() { + Iterator var0 = Messages.Messages_hashTable.iterator(); + + while (var0.hasNext()) { + Message var1 = (Message)var0.next(); + var1.clearIsFromIgnored(); + } + + if (InterfaceParent.clanChat != null) { + InterfaceParent.clanChat.invalidateIgnoreds(); + } + } } diff --git a/runescape-client/src/main/java/Link.java b/runescape-client/src/main/java/Link.java index f89d60b8d2..b4bf1a951a 100644 --- a/runescape-client/src/main/java/Link.java +++ b/runescape-client/src/main/java/Link.java @@ -3,23 +3,23 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("fz") +@ObfuscatedName("fd") @Implements("Link") public class Link { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lfz;" + signature = "Lfd;" ) @Export("previous") public Link previous; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lfz;" + signature = "Lfd;" ) @Export("next") public Link next; - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("remove") public void remove() { if (this.next != null) { diff --git a/runescape-client/src/main/java/LinkDeque.java b/runescape-client/src/main/java/LinkDeque.java index 66d3fadbd2..c9182483f1 100644 --- a/runescape-client/src/main/java/LinkDeque.java +++ b/runescape-client/src/main/java/LinkDeque.java @@ -3,18 +3,18 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ja") +@ObfuscatedName("jj") @Implements("LinkDeque") public class LinkDeque { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lfz;" + signature = "Lfd;" ) @Export("sentinel") Link sentinel; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lfz;" + signature = "Lfd;" ) @Export("current") Link current; @@ -25,9 +25,9 @@ public class LinkDeque { this.sentinel.next = this.sentinel; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Lfz;)V" + signature = "(Lfd;)V" ) @Export("addFirst") public void addFirst(Link var1) { @@ -41,9 +41,9 @@ public class LinkDeque { var1.previous.next = var1; } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "()Lfz;" + signature = "()Lfd;" ) @Export("last") public Link last() { @@ -57,9 +57,9 @@ public class LinkDeque { } } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "()Lfz;" + signature = "()Lfd;" ) @Export("previous") public Link previous() { diff --git a/runescape-client/src/main/java/Login.java b/runescape-client/src/main/java/Login.java index 4bb16bfd18..254534c8c0 100644 --- a/runescape-client/src/main/java/Login.java +++ b/runescape-client/src/main/java/Login.java @@ -5,157 +5,142 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ci") +@ObfuscatedName("cr") @Implements("Login") public class Login { - @ObfuscatedName("se") - @ObfuscatedSignature( - signature = "Llo;" - ) - @Export("worldMap") - static WorldMap worldMap; - @ObfuscatedName("t") - static boolean field1188; - @ObfuscatedName("n") + @ObfuscatedName("f") + static boolean field1194; + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = 1763315451 + intValue = -690855735 ) @Export("xPadding") static int xPadding; - @ObfuscatedName("c") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "Llx;" + signature = "Llm;" ) - @Export("leftTitleSprite") - static Sprite leftTitleSprite; - @ObfuscatedName("h") + @Export("titleboxSprite") + static IndexedSprite titleboxSprite; + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "Llw;" + signature = "Llm;" ) - @Export("options_buttons_2Sprite") - static IndexedSprite options_buttons_2Sprite; + @Export("titlebuttonSprite") + static IndexedSprite titlebuttonSprite; + @ObfuscatedName("w") + static int[][] field1207; + @ObfuscatedName("i") + @ObfuscatedSignature( + signature = "[Llm;" + ) + @Export("title_muteSprite") + static IndexedSprite[] title_muteSprite; @ObfuscatedName("x") @ObfuscatedSignature( - signature = "Lbv;" + signature = "Llm;" ) - @Export("loginScreenRunesAnimation") - static LoginScreenAnimation loginScreenRunesAnimation; - @ObfuscatedName("b") + static IndexedSprite field1179; + @ObfuscatedName("s") @ObfuscatedGetter( - intValue = -2059277113 + intValue = -848328951 ) @Export("loginBoxX") static int loginBoxX; - @ObfuscatedName("f") + @ObfuscatedName("m") @ObfuscatedGetter( - intValue = 1978997765 + intValue = 718703291 ) @Export("Login_loadingPercent") static int Login_loadingPercent; - @ObfuscatedName("g") + @ObfuscatedName("v") @Export("Login_loadingText") static String Login_loadingText; - @ObfuscatedName("aq") + @ObfuscatedName("ai") @ObfuscatedGetter( - intValue = 1768123277 + intValue = 287436993 ) - static int field1156; - @ObfuscatedName("ak") + static int field1185; + @ObfuscatedName("aw") @ObfuscatedGetter( - intValue = -1622828931 + intValue = 1502422869 ) - static int field1166; - @ObfuscatedName("ax") + static int field1186; + @ObfuscatedName("ar") @ObfuscatedGetter( - intValue = -750997095 + intValue = -748182157 ) @Export("loginIndex") static int loginIndex; - @ObfuscatedName("al") + @ObfuscatedName("av") @Export("Login_response0") static String Login_response0; - @ObfuscatedName("ap") + @ObfuscatedName("aq") @Export("Login_response1") static String Login_response1; - @ObfuscatedName("aj") + @ObfuscatedName("ac") @Export("Login_response2") static String Login_response2; - @ObfuscatedName("ae") + @ObfuscatedName("az") @Export("Login_response3") static String Login_response3; - @ObfuscatedName("au") + @ObfuscatedName("at") @Export("Login_username") static String Login_username; - @ObfuscatedName("ah") + @ObfuscatedName("ae") @Export("Login_password") static String Login_password; - @ObfuscatedName("ao") + @ObfuscatedName("au") + static boolean field1173; + @ObfuscatedName("as") + static boolean field1195; + @ObfuscatedName("bo") + static boolean field1196; + @ObfuscatedName("bx") @ObfuscatedGetter( - intValue = -557990001 - ) - static int field1174; - @ObfuscatedName("ac") - static boolean field1159; - @ObfuscatedName("at") - static boolean field1175; - @ObfuscatedName("bg") - static boolean field1177; - @ObfuscatedName("bc") - @ObfuscatedGetter( - intValue = -255503835 + intValue = 942896695 ) @Export("currentLoginField") static int currentLoginField; - @ObfuscatedName("bh") + @ObfuscatedName("bj") @Export("worldSelectOpen") static boolean worldSelectOpen; - @ObfuscatedName("bj") + @ObfuscatedName("bg") @ObfuscatedGetter( - intValue = -236759579 + intValue = 417919885 ) @Export("hoveredWorldIndex") static int hoveredWorldIndex; - @ObfuscatedName("bm") + @ObfuscatedName("bw") @ObfuscatedGetter( - intValue = -1991064971 + intValue = -505554321 ) @Export("worldSelectPage") static int worldSelectPage; - @ObfuscatedName("bn") + @ObfuscatedName("be") @ObfuscatedGetter( - intValue = -1550903987 + intValue = 1487083195 ) @Export("worldSelectPagesCount") static int worldSelectPagesCount; - @ObfuscatedName("bo") + @ObfuscatedName("bl") @ObfuscatedGetter( - longValue = -6046220397950701943L + longValue = -5043018622497011003L ) - static long field1185; - @ObfuscatedName("bk") + static long field1205; + @ObfuscatedName("bp") @ObfuscatedGetter( - longValue = -7219619967505319403L + longValue = -8955113663343183185L ) - static long field1186; - @ObfuscatedName("gz") - @ObfuscatedSignature( - signature = "[Llx;" - ) - @Export("headIconPrayerSprites") - static Sprite[] headIconPrayerSprites; - @ObfuscatedName("jq") - @ObfuscatedSignature( - signature = "Lhi;" - ) - static Widget field1165; + static long field1206; static { xPadding = 0; loginBoxX = xPadding + 202; Login_loadingPercent = 10; Login_loadingText = ""; - field1156 = -1; - field1166 = 1; + field1185 = -1; + field1186 = 1; loginIndex = 0; Login_response0 = ""; Login_response1 = ""; @@ -163,9 +148,9 @@ public class Login { Login_response3 = ""; Login_username = ""; Login_password = ""; - field1159 = false; - field1175 = false; - field1177 = true; + field1173 = false; + field1195 = false; + field1196 = true; currentLoginField = 0; worldSelectOpen = false; hoveredWorldIndex = -1; @@ -173,25 +158,48 @@ public class Login { worldSelectPagesCount = 0; new DecimalFormat("##0.00"); new class162(); - field1185 = -1L; - field1186 = -1L; + field1205 = -1L; + field1206 = -1L; } - @ObfuscatedName("l") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "-1795095420" + signature = "(B)V", + garbageValue = "84" ) - public static void method2258() { - FloorUnderlayDefinition.FloorUnderlayDefinition_cached.clear(); + public static void method2125() { + try { + JagexCache.JagexCache_dat2File.close(); + + for (int var0 = 0; var0 < JagexCache.idxCount; ++var0) { + WorldMapSection1.JagexCache_idxFiles[var0].close(); + } + + JagexCache.JagexCache_idx255File.close(); + JagexCache.JagexCache_randomDat.close(); + } catch (Exception var2) { + } + } - @ObfuscatedName("c") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(I)Z", - garbageValue = "-722020095" + signature = "(Lkj;I)I", + garbageValue = "-1079578182" ) - public static boolean method2256() { - return class197.field2377 != 0 ? true : class197.midiPcmStream.isReady(); + static int method2124(PacketBuffer var0) { + int var1 = var0.readBits(2); + int var2; + if (var1 == 0) { + var2 = 0; + } else if (var1 == 1) { + var2 = var0.readBits(5); + } else if (var1 == 2) { + var2 = var0.readBits(8); + } else { + var2 = var0.readBits(11); + } + + return var2; } } diff --git a/runescape-client/src/main/java/LoginPacket.java b/runescape-client/src/main/java/LoginPacket.java index 699df12dec..688f5e35ce 100644 --- a/runescape-client/src/main/java/LoginPacket.java +++ b/runescape-client/src/main/java/LoginPacket.java @@ -4,64 +4,59 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("gs") +@ObfuscatedName("gn") @Implements("LoginPacket") public class LoginPacket implements class181 { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lgs;" + signature = "Lgn;" ) - public static final LoginPacket field2283; - @ObfuscatedName("t") + public static final LoginPacket field2324; + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lgs;" + signature = "Lgn;" ) - static final LoginPacket field2284; - @ObfuscatedName("n") + static final LoginPacket field2325; + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Lgs;" + signature = "Lgn;" ) - public static final LoginPacket field2285; - @ObfuscatedName("q") + public static final LoginPacket field2326; + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Lgs;" + signature = "Lgn;" ) - public static final LoginPacket field2286; - @ObfuscatedName("v") + public static final LoginPacket field2328; + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "Lgs;" + signature = "Lgn;" ) - static final LoginPacket field2287; - @ObfuscatedName("c") + static final LoginPacket field2327; + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "[Lgs;" + signature = "[Lgn;" ) @Export("LoginPacket_indexedValues") static final LoginPacket[] LoginPacket_indexedValues; - @ObfuscatedName("ds") - @ObfuscatedSignature( - signature = "Lij;" - ) - @Export("archive1") - static Archive archive1; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = -975966301 + intValue = 213981161 ) @Export("id") public final int id; static { - field2283 = new LoginPacket(14, 0); - field2284 = new LoginPacket(15, 4); - field2285 = new LoginPacket(16, -2); - field2286 = new LoginPacket(18, -2); - field2287 = new LoginPacket(27, 0); + field2324 = new LoginPacket(14, 0); + field2325 = new LoginPacket(15, 4); + field2326 = new LoginPacket(16, -2); + field2328 = new LoginPacket(18, -2); + field2327 = new LoginPacket(27, 0); LoginPacket_indexedValues = new LoginPacket[32]; - LoginPacket[] var0 = GrandExchangeOfferWorldComparator.method105(); + LoginPacket[] var0 = new LoginPacket[]{field2325, field2326, field2328, field2327, field2324}; + LoginPacket[] var1 = var0; - for (int var1 = 0; var1 < var0.length; ++var1) { - LoginPacket_indexedValues[var0[var1].id] = var0[var1]; + for (int var2 = 0; var2 < var1.length; ++var2) { + LoginPacket_indexedValues[var1[var2].id] = var1[var2]; } } @@ -74,13 +69,127 @@ public class LoginPacket implements class181 { this.id = var1; } - @ObfuscatedName("lb") + @ObfuscatedName("ie") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "19" + signature = "(Lih;IIII)V", + garbageValue = "2018798075" ) - static void method3767() { - Client.packetWriter.addNode(SoundSystem.getPacketBufferNode(ClientPacket.field2210, Client.packetWriter.isaacCipher)); - Client.oculusOrbState = 0; + @Export("addNpcToMenu") + static final void addNpcToMenu(NPCDefinition var0, int var1, int var2, int var3) { + if (Client.menuOptionsCount < 400) { + if (var0.transforms != null) { + var0 = var0.transform(); + } + + if (var0 != null) { + if (var0.isInteractable) { + if (!var0.isFollower || Client.followerIndex == var1) { + String var4 = var0.name; + if (var0.combatLevel != 0) { + var4 = var4 + GrandExchangeOfferWorldComparator.method77(var0.combatLevel, class215.localPlayer.combatLevel) + " " + " (" + "level-" + var0.combatLevel + ")"; + } + + if (var0.isFollower && Client.followerOpsLowPriority) { + WorldMapSprite.insertMenuItemNoShift("Examine", class222.colorStartTag(16776960) + var4, 1003, var1, var2, var3); + } + + if (Client.isItemSelected == 1) { + WorldMapSprite.insertMenuItemNoShift("Use", Client.selectedItemName + " " + "->" + " " + class222.colorStartTag(16776960) + var4, 7, var1, var2, var3); + } else if (Client.isSpellSelected) { + if ((Actor.selectedSpellFlags & 2) == 2) { + WorldMapSprite.insertMenuItemNoShift(Client.selectedSpellActionName, Client.selectedSpellName + " " + "->" + " " + class222.colorStartTag(16776960) + var4, 8, var1, var2, var3); + } + } else { + int var5 = var0.isFollower && Client.followerOpsLowPriority ? 2000 : 0; + String[] var6 = var0.actions; + int var7; + int var8; + if (var6 != null) { + for (var7 = 4; var7 >= 0; --var7) { + if (var6[var7] != null && !var6[var7].equalsIgnoreCase("Attack")) { + var8 = 0; + if (var7 == 0) { + var8 = var5 + 9; + } + + if (var7 == 1) { + var8 = var5 + 10; + } + + if (var7 == 2) { + var8 = var5 + 11; + } + + if (var7 == 3) { + var8 = var5 + 12; + } + + if (var7 == 4) { + var8 = var5 + 13; + } + + WorldMapSprite.insertMenuItemNoShift(var6[var7], class222.colorStartTag(16776960) + var4, var8, var1, var2, var3); + } + } + } + + if (var6 != null) { + for (var7 = 4; var7 >= 0; --var7) { + if (var6[var7] != null && var6[var7].equalsIgnoreCase("Attack")) { + short var9 = 0; + if (Client.npcAttackOption != AttackOption.AttackOption_hidden) { + if (Client.npcAttackOption == AttackOption.AttackOption_alwaysRightClick || Client.npcAttackOption == AttackOption.AttackOption_dependsOnCombatLevels && var0.combatLevel > class215.localPlayer.combatLevel) { + var9 = 2000; + } + + var8 = 0; + if (var7 == 0) { + var8 = var9 + 9; + } + + if (var7 == 1) { + var8 = var9 + 10; + } + + if (var7 == 2) { + var8 = var9 + 11; + } + + if (var7 == 3) { + var8 = var9 + 12; + } + + if (var7 == 4) { + var8 = var9 + 13; + } + + WorldMapSprite.insertMenuItemNoShift(var6[var7], class222.colorStartTag(16776960) + var4, var8, var1, var2, var3); + } + } + } + } + + if (!var0.isFollower || !Client.followerOpsLowPriority) { + WorldMapSprite.insertMenuItemNoShift("Examine", class222.colorStartTag(16776960) + var4, 1003, var1, var2, var3); + } + } + + } + } + } + } + } + + @ObfuscatedName("kv") + @ObfuscatedSignature( + signature = "(Lhl;I)Ljava/lang/String;", + garbageValue = "646735317" + ) + static String method3662(Widget var0) { + if (Client.method1655(MenuAction.getWidgetClickMask(var0)) == 0) { + return null; + } else { + return var0.spellActionName != null && var0.spellActionName.trim().length() != 0 ? var0.spellActionName : null; + } } } diff --git a/runescape-client/src/main/java/LoginScreenAnimation.java b/runescape-client/src/main/java/LoginScreenAnimation.java index dcd5990b66..96a9310f63 100644 --- a/runescape-client/src/main/java/LoginScreenAnimation.java +++ b/runescape-client/src/main/java/LoginScreenAnimation.java @@ -7,210 +7,214 @@ import net.runelite.mapping.ObfuscatedSignature; @ObfuscatedName("bv") @Implements("LoginScreenAnimation") public class LoginScreenAnimation { - @ObfuscatedName("l") - @ObfuscatedGetter( - intValue = 1863023515 - ) - static int field1029; - @ObfuscatedName("a") + @ObfuscatedName("qo") @ObfuscatedSignature( - signature = "[Llw;" + signature = "Ldn;" + ) + @Export("decimator") + static Decimator decimator; + @ObfuscatedName("g") + @Export("Interpreter_stringLocals") + static String[] Interpreter_stringLocals; + @ObfuscatedName("u") + @ObfuscatedSignature( + signature = "[Llm;" ) @Export("sprites") IndexedSprite[] sprites; - @ObfuscatedName("c") - int[] field1013; - @ObfuscatedName("o") - @ObfuscatedGetter( - intValue = 816842913 - ) - int field1011; - @ObfuscatedName("i") - int[] field1015; - @ObfuscatedName("d") - int[] field1016; - @ObfuscatedName("m") - int[] field1010; - @ObfuscatedName("p") - int[] field1019; @ObfuscatedName("h") - @ObfuscatedGetter( - intValue = 462290829 - ) - int field1030; - @ObfuscatedName("k") - @ObfuscatedGetter( - intValue = 945230157 - ) - int field1020; - @ObfuscatedName("x") - int[] field1021; - @ObfuscatedName("j") - int[] field1022; - @ObfuscatedName("r") - int[] field1014; - @ObfuscatedName("e") int[] field1024; - @ObfuscatedName("s") + @ObfuscatedName("y") @ObfuscatedGetter( - intValue = -1611011869 + intValue = -522038553 ) int field1025; - @ObfuscatedName("b") + @ObfuscatedName("w") + int[] field1026; + @ObfuscatedName("i") + int[] field1042; + @ObfuscatedName("k") + int[] field1028; + @ObfuscatedName("x") + int[] field1043; + @ObfuscatedName("o") @ObfuscatedGetter( - intValue = -180087120 + intValue = 1610876241 ) - int field1026; - @ObfuscatedName("z") + int field1030; + @ObfuscatedName("e") @ObfuscatedGetter( - intValue = -151698419 + intValue = 2082958971 ) - int field1018; + int field1031; + @ObfuscatedName("n") + int[] field1036; + @ObfuscatedName("r") + int[] field1033; + @ObfuscatedName("c") + int[] field1029; + @ObfuscatedName("a") + int[] field1035; + @ObfuscatedName("d") + @ObfuscatedGetter( + intValue = -127865793 + ) + int field1020; + @ObfuscatedName("s") + @ObfuscatedGetter( + intValue = 256294268 + ) + int field1037; + @ObfuscatedName("t") + @ObfuscatedGetter( + intValue = 81915263 + ) + int field1034; @ObfuscatedSignature( - signature = "([Llw;)V" + signature = "([Llm;)V" ) LoginScreenAnimation(IndexedSprite[] var1) { - this.field1013 = new int[256]; - this.field1011 = 0; - this.field1030 = 0; - this.field1020 = 0; + this.field1024 = new int[256]; this.field1025 = 0; - this.field1026 = 0; - this.field1018 = 0; + this.field1030 = 0; + this.field1031 = 0; + this.field1020 = 0; + this.field1037 = 0; + this.field1034 = 0; this.sprites = var1; this.initColors(); } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "-1417087240" + garbageValue = "1296235514" ) @Export("initColors") void initColors() { - this.field1016 = new int[256]; + this.field1042 = new int[256]; int var1; for (var1 = 0; var1 < 64; ++var1) { - this.field1016[var1] = var1 * 262144; + this.field1042[var1] = var1 * 262144; } for (var1 = 0; var1 < 64; ++var1) { - this.field1016[var1 + 64] = var1 * 1024 + 16711680; + this.field1042[var1 + 64] = var1 * 1024 + 16711680; } for (var1 = 0; var1 < 64; ++var1) { - this.field1016[var1 + 128] = var1 * 4 + 16776960; + this.field1042[var1 + 128] = var1 * 4 + 16776960; } for (var1 = 0; var1 < 64; ++var1) { - this.field1016[var1 + 192] = 16777215; + this.field1042[var1 + 192] = 16777215; } - this.field1010 = new int[256]; + this.field1028 = new int[256]; for (var1 = 0; var1 < 64; ++var1) { - this.field1010[var1] = var1 * 1024; + this.field1028[var1] = var1 * 1024; } for (var1 = 0; var1 < 64; ++var1) { - this.field1010[var1 + 64] = var1 * 4 + 65280; + this.field1028[var1 + 64] = var1 * 4 + 65280; } for (var1 = 0; var1 < 64; ++var1) { - this.field1010[var1 + 128] = var1 * 262144 + 65535; + this.field1028[var1 + 128] = var1 * 262144 + 65535; } for (var1 = 0; var1 < 64; ++var1) { - this.field1010[var1 + 192] = 16777215; + this.field1028[var1 + 192] = 16777215; } - this.field1019 = new int[256]; + this.field1043 = new int[256]; for (var1 = 0; var1 < 64; ++var1) { - this.field1019[var1] = var1 * 4; + this.field1043[var1] = var1 * 4; } for (var1 = 0; var1 < 64; ++var1) { - this.field1019[var1 + 64] = var1 * 262144 + 255; + this.field1043[var1 + 64] = var1 * 262144 + 255; } for (var1 = 0; var1 < 64; ++var1) { - this.field1019[var1 + 128] = var1 * 1024 + 16711935; + this.field1043[var1 + 128] = var1 * 1024 + 16711935; } for (var1 = 0; var1 < 64; ++var1) { - this.field1019[var1 + 192] = 16777215; + this.field1043[var1 + 192] = 16777215; } - this.field1015 = new int[256]; - this.field1025 = 0; - this.field1014 = new int[32768]; - this.field1024 = new int[32768]; - this.method1932((IndexedSprite)null); - this.field1021 = new int[32768]; - this.field1022 = new int[32768]; + this.field1026 = new int[256]; + this.field1020 = 0; + this.field1029 = new int[32768]; + this.field1035 = new int[32768]; + this.method1834((IndexedSprite)null); + this.field1036 = new int[32768]; + this.field1033 = new int[32768]; } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( signature = "(B)V", - garbageValue = "-89" + garbageValue = "9" ) - void method1955() { - this.field1016 = null; - this.field1010 = null; - this.field1019 = null; - this.field1015 = null; - this.field1014 = null; - this.field1024 = null; - this.field1021 = null; - this.field1022 = null; - this.field1025 = 0; - this.field1026 = 0; + void method1828() { + this.field1042 = null; + this.field1028 = null; + this.field1043 = null; + this.field1026 = null; + this.field1029 = null; + this.field1035 = null; + this.field1036 = null; + this.field1033 = null; + this.field1020 = 0; + this.field1037 = 0; } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( signature = "(III)V", - garbageValue = "664773191" + garbageValue = "2116799811" ) @Export("draw") void draw(int var1, int var2) { - if (this.field1021 == null) { + if (this.field1036 == null) { this.initColors(); } - if (this.field1018 == 0) { - this.field1018 = var2; + if (this.field1034 == 0) { + this.field1034 = var2; } - int var3 = var2 - this.field1018; + int var3 = var2 - this.field1034; if (var3 >= 256) { var3 = 0; } - this.field1018 = var2; + this.field1034 = var2; if (var3 > 0) { - this.method1927(var3); + this.method1830(var3); } - this.method1929(var1); + this.method1839(var1); } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(IB)V", - garbageValue = "-50" + signature = "(II)V", + garbageValue = "1116780854" ) - final void method1927(int var1) { - this.field1025 += var1 * 128; + final void method1830(int var1) { + this.field1020 += 128 * var1; int var2; - if (this.field1025 > this.field1014.length) { - this.field1025 -= this.field1014.length; + if (this.field1020 > this.field1029.length) { + this.field1020 -= this.field1029.length; var2 = (int)(Math.random() * 12.0D); - this.method1932(this.sprites[var2]); + this.method1834(this.sprites[var2]); } var2 = 0; @@ -219,12 +223,12 @@ public class LoginScreenAnimation { int var6; for (int var5 = 0; var5 < var4; ++var5) { - var6 = this.field1021[var2 + var3] - this.field1014[var2 + this.field1025 & this.field1014.length - 1] * var1 / 6; + var6 = this.field1036[var3 + var2] - this.field1029[var2 + this.field1020 & this.field1029.length - 1] * var1 / 6; if (var6 < 0) { var6 = 0; } - this.field1021[var2++] = var6; + this.field1036[var2++] = var6; } byte var15 = 10; @@ -238,9 +242,9 @@ public class LoginScreenAnimation { for (int var9 = 0; var9 < 128; ++var9) { var10 = (int)(Math.random() * 100.0D); if (var10 < 50 && var9 > var15 && var9 < var6) { - this.field1021[var9 + var8] = 255; + this.field1036[var8 + var9] = 255; } else { - this.field1021[var9 + var8] = 0; + this.field1036[var8 + var9] = 0; } } } @@ -249,31 +253,31 @@ public class LoginScreenAnimation { this.field1030 = this.field1030 * 16 - var1 * 4; } - if (this.field1020 * 16 > 0) { - this.field1020 = this.field1020 * 16 - var1 * 4; + if (this.field1031 * 16 > 0) { + this.field1031 = this.field1031 * 16 - var1 * 4; } - if (this.field1030 * 16 == 0 && this.field1020 * 16 == 0) { + if (this.field1030 * 16 == 0 && this.field1031 * 16 == 0) { var7 = (int)(Math.random() * (double)(2000 / var1)); if (var7 == 0) { this.field1030 = 1024; } if (var7 == 1) { - this.field1020 = 1024; + this.field1031 = 1024; } } for (var7 = 0; var7 < 256 - var1; ++var7) { - this.field1013[var7] = this.field1013[var7 + var1]; + this.field1024[var7] = this.field1024[var7 + var1]; } for (var7 = 256 - var1; var7 < 256; ++var7) { - this.field1013[var7] = (int)(Math.sin((double)this.field1011 / 14.0D) * 16.0D + Math.sin((double)this.field1011 / 15.0D) * 14.0D + Math.sin((double)this.field1011 / 16.0D) * 12.0D); - ++this.field1011; + this.field1024[var7] = (int)(Math.sin((double)this.field1025 / 14.0D) * 16.0D + Math.sin((double)this.field1025 / 15.0D) * 14.0D + Math.sin((double)this.field1025 / 16.0D) * 12.0D); + ++this.field1025; } - this.field1026 = this.field1026 * 10000 + 10000 * var1; + this.field1037 = this.field1037 * 10000 + var1 * 100; var7 = ((Client.cycle & 1) + var1) / 2; if (var7 > 0) { short var16 = 128; @@ -283,13 +287,13 @@ public class LoginScreenAnimation { int var11; int var12; int var13; - for (var11 = 0; var11 < this.field1026 * 100; ++var11) { + for (var11 = 0; var11 < this.field1037 * 10000; ++var11) { var12 = (int)(Math.random() * (double)var10) + var17; var13 = (int)(Math.random() * (double)var16) + var16; - this.field1021[var12 + (var13 << 7)] = 192; + this.field1036[var12 + (var13 << 7)] = 192; } - this.field1026 = 0; + this.field1037 = 0; int var14; for (var11 = 0; var11 < 256; ++var11) { @@ -297,16 +301,16 @@ public class LoginScreenAnimation { var13 = var11 * 128; for (var14 = -var7; var14 < 128; ++var14) { - if (var14 + var7 < 128) { - var12 += this.field1021[var7 + var13 + var14]; + if (var7 + var14 < 128) { + var12 += this.field1036[var14 + var13 + var7]; } if (var14 - (var7 + 1) >= 0) { - var12 -= this.field1021[var14 + var13 - (var7 + 1)]; + var12 -= this.field1036[var13 + var14 - (var7 + 1)]; } if (var14 >= 0) { - this.field1022[var13 + var14] = var12 / (var7 * 2 + 1); + this.field1033[var13 + var14] = var12 / (var7 * 2 + 1); } } } @@ -316,16 +320,16 @@ public class LoginScreenAnimation { for (var13 = -var7; var13 < 256; ++var13) { var14 = var13 * 128; - if (var7 + var13 < 256) { - var12 += this.field1022[var7 * 128 + var11 + var14]; + if (var13 + var7 < 256) { + var12 += this.field1033[var7 * 128 + var14 + var11]; } if (var13 - (var7 + 1) >= 0) { - var12 -= this.field1022[var11 + var14 - (var7 + 1) * 128]; + var12 -= this.field1033[var14 + var11 - (var7 + 1) * 128]; } if (var13 >= 0) { - this.field1021[var14 + var11] = var12 / (var7 * 2 + 1); + this.field1036[var11 + var14] = var12 / (var7 * 2 + 1); } } } @@ -333,66 +337,66 @@ public class LoginScreenAnimation { } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( signature = "(IIII)I", - garbageValue = "-805696454" + garbageValue = "-2144632316" ) - final int method1928(int var1, int var2, int var3) { + final int method1831(int var1, int var2, int var3) { int var4 = 256 - var3; - return (var4 * (var1 & 16711935) + var3 * (var2 & 16711935) & -16711936) + (var3 * (var2 & 65280) + var4 * (var1 & 65280) & 16711680) >> 8; + return (var3 * (var2 & 65280) + var4 * (var1 & 65280) & 16711680) + (var3 * (var2 & 16711935) + var4 * (var1 & 16711935) & -16711936) >> 8; } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(IS)V", - garbageValue = "25374" + signature = "(II)V", + garbageValue = "1401250939" ) - final void method1929(int var1) { - int var2 = this.field1015.length; + final void method1839(int var1) { + int var2 = this.field1026.length; if (this.field1030 * 16 > 0) { - this.method1930(this.field1030 * 16, this.field1010); - } else if (this.field1020 * 16 > 0) { - this.method1930(this.field1020 * 16, this.field1019); + this.method1844(this.field1030 * 16, this.field1028); + } else if (this.field1031 * 16 > 0) { + this.method1844(this.field1031 * 16, this.field1043); } else { for (int var3 = 0; var3 < var2; ++var3) { - this.field1015[var3] = this.field1016[var3]; + this.field1026[var3] = this.field1042[var3]; } } - this.method1931(var1); + this.method1833(var1); } - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "(I[II)V", - garbageValue = "-1624613392" + signature = "(I[IS)V", + garbageValue = "732" ) - final void method1930(int var1, int[] var2) { - int var3 = this.field1015.length; + final void method1844(int var1, int[] var2) { + int var3 = this.field1026.length; for (int var4 = 0; var4 < var3; ++var4) { if (var1 > 768) { - this.field1015[var4] = this.method1928(this.field1016[var4], var2[var4], 1024 - var1); + this.field1026[var4] = this.method1831(this.field1042[var4], var2[var4], 1024 - var1); } else if (var1 > 256) { - this.field1015[var4] = var2[var4]; + this.field1026[var4] = var2[var4]; } else { - this.field1015[var4] = this.method1928(var2[var4], this.field1016[var4], 256 - var1); + this.field1026[var4] = this.method1831(var2[var4], this.field1042[var4], 256 - var1); } } } - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedSignature( signature = "(II)V", - garbageValue = "-782964305" + garbageValue = "-1303353921" ) - final void method1931(int var1) { + final void method1833(int var1) { int var2 = 0; for (int var3 = 1; var3 < 255; ++var3) { - int var4 = (256 - var3) * this.field1013[var3] / 256; + int var4 = (256 - var3) * this.field1024[var3] / 256; int var5 = var4 + var1; int var6 = 0; int var7 = 128; @@ -401,22 +405,22 @@ public class LoginScreenAnimation { var5 = 0; } - if (var5 + 128 >= AbstractWorldMapData.rasterProvider.width) { - var7 = AbstractWorldMapData.rasterProvider.width - var5; + if (var5 + 128 >= DirectByteArrayCopier.rasterProvider.width) { + var7 = DirectByteArrayCopier.rasterProvider.width - var5; } - int var8 = var5 + (var3 + 8) * AbstractWorldMapData.rasterProvider.width; + int var8 = var5 + (var3 + 8) * DirectByteArrayCopier.rasterProvider.width; var2 += var6; for (int var9 = var6; var9 < var7; ++var9) { - int var10 = this.field1021[var2++]; + int var10 = this.field1036[var2++]; int var11 = var8 % Rasterizer2D.Rasterizer2D_width; if (var10 != 0 && var11 >= Rasterizer2D.Rasterizer2D_xClipStart && var11 < Rasterizer2D.Rasterizer2D_xClipEnd) { int var12 = var10; int var13 = 256 - var10; - var10 = this.field1015[var10]; - int var14 = AbstractWorldMapData.rasterProvider.pixels[var8]; - AbstractWorldMapData.rasterProvider.pixels[var8++] = -16777216 | (var12 * (var10 & 65280) + var13 * (var14 & 65280) & 16711680) + ((var14 & 16711935) * var13 + (var10 & 16711935) * var12 & -16711936) >> 8; + var10 = this.field1026[var10]; + int var14 = DirectByteArrayCopier.rasterProvider.pixels[var8]; + DirectByteArrayCopier.rasterProvider.pixels[var8++] = -16777216 | (var12 * (var10 & 65280) + var13 * (var14 & 65280) & 16711680) + ((var10 & 16711935) * var12 + (var14 & 16711935) * var13 & -16711936) >> 8; } else { ++var8; } @@ -427,21 +431,21 @@ public class LoginScreenAnimation { } - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedSignature( - signature = "(Llw;I)V", - garbageValue = "2025756403" + signature = "(Llm;I)V", + garbageValue = "545275077" ) - final void method1932(IndexedSprite var1) { + final void method1834(IndexedSprite var1) { int var2; - for (var2 = 0; var2 < this.field1014.length; ++var2) { - this.field1014[var2] = 0; + for (var2 = 0; var2 < this.field1029.length; ++var2) { + this.field1029[var2] = 0; } int var3; for (var2 = 0; var2 < 5000; ++var2) { var3 = (int)(Math.random() * 128.0D * 256.0D); - this.field1014[var3] = (int)(Math.random() * 256.0D); + this.field1029[var3] = (int)(Math.random() * 256.0D); } int var4; @@ -450,13 +454,13 @@ public class LoginScreenAnimation { for (var3 = 1; var3 < 255; ++var3) { for (var4 = 1; var4 < 127; ++var4) { var5 = var4 + (var3 << 7); - this.field1024[var5] = (this.field1014[var5 - 128] + this.field1014[var5 + 1] + this.field1014[var5 + 128] + this.field1014[var5 - 1]) / 4; + this.field1035[var5] = (this.field1029[var5 + 128] + this.field1029[var5 - 128] + this.field1029[var5 + 1] + this.field1029[var5 - 1]) / 4; } } - int[] var8 = this.field1014; - this.field1014 = this.field1024; - this.field1024 = var8; + int[] var8 = this.field1029; + this.field1029 = this.field1035; + this.field1035 = var8; } if (var1 != null) { @@ -468,11 +472,39 @@ public class LoginScreenAnimation { var5 = var4 + var1.xOffset + 16; int var6 = var3 + var1.yOffset + 16; int var7 = var5 + (var6 << 7); - this.field1014[var7] = 0; + this.field1029[var7] = 0; } } } } } + + @ObfuscatedName("n") + @ObfuscatedSignature( + signature = "(III)I", + garbageValue = "925097007" + ) + static final int method1832(int var0, int var1) { + if (var0 == -2) { + return 12345678; + } else if (var0 == -1) { + if (var1 < 2) { + var1 = 2; + } else if (var1 > 126) { + var1 = 126; + } + + return var1; + } else { + var1 = (var0 & 127) * var1 / 128; + if (var1 < 2) { + var1 = 2; + } else if (var1 > 126) { + var1 = 126; + } + + return (var0 & 65408) + var1; + } + } } diff --git a/runescape-client/src/main/java/LoginType.java b/runescape-client/src/main/java/LoginType.java index 7e4eb6d952..489faa2172 100644 --- a/runescape-client/src/main/java/LoginType.java +++ b/runescape-client/src/main/java/LoginType.java @@ -4,89 +4,89 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ln") +@ObfuscatedName("lg") @Implements("LoginType") public class LoginType { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lln;" + signature = "Llg;" ) @Export("oldscape") public static final LoginType oldscape; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lln;" + signature = "Llg;" + ) + static final LoginType field4024; + @ObfuscatedName("b") + @ObfuscatedSignature( + signature = "Llg;" ) static final LoginType field4025; - @ObfuscatedName("n") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Lln;" - ) - static final LoginType field4031; - @ObfuscatedName("q") - @ObfuscatedSignature( - signature = "Lln;" - ) - static final LoginType field4029; - @ObfuscatedName("v") - @ObfuscatedSignature( - signature = "Lln;" - ) - static final LoginType field4028; - @ObfuscatedName("l") - @ObfuscatedSignature( - signature = "Lln;" - ) - static final LoginType field4027; - @ObfuscatedName("c") - @ObfuscatedSignature( - signature = "Lln;" - ) - static final LoginType field4030; - @ObfuscatedName("o") - @ObfuscatedSignature( - signature = "Lln;" + signature = "Llg;" ) static final LoginType field4026; - @ObfuscatedName("i") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "Lln;" + signature = "Llg;" ) - public static final LoginType field4032; - @ObfuscatedName("d") + static final LoginType field4027; + @ObfuscatedName("p") + @ObfuscatedSignature( + signature = "Llg;" + ) + static final LoginType field4028; + @ObfuscatedName("h") + @ObfuscatedSignature( + signature = "Llg;" + ) + static final LoginType field4029; + @ObfuscatedName("y") + @ObfuscatedSignature( + signature = "Llg;" + ) + static final LoginType field4030; + @ObfuscatedName("w") + @ObfuscatedSignature( + signature = "Llg;" + ) + public static final LoginType field4031; + @ObfuscatedName("i") @ObfuscatedGetter( - intValue = -812459159 + intValue = 1453765621 ) - final int field4033; - @ObfuscatedName("m") - final String field4034; + final int field4032; + @ObfuscatedName("k") + final String field4033; static { - oldscape = new LoginType(4, 0, "", ""); - field4025 = new LoginType(1, 1, "", ""); - field4031 = new LoginType(2, 2, "", ""); - field4029 = new LoginType(5, 3, "", ""); - field4028 = new LoginType(0, 4, "", ""); - field4027 = new LoginType(8, 5, "", ""); - field4030 = new LoginType(6, 6, "", ""); - field4026 = new LoginType(7, 7, "", ""); - field4032 = new LoginType(3, -1, "", "", true, new LoginType[]{oldscape, field4025, field4031, field4028, field4029}); + oldscape = new LoginType(5, 0, "", ""); + field4024 = new LoginType(1, 1, "", ""); + field4025 = new LoginType(7, 2, "", ""); + field4026 = new LoginType(0, 3, "", ""); + field4027 = new LoginType(4, 4, "", ""); + field4028 = new LoginType(6, 5, "", ""); + field4029 = new LoginType(3, 6, "", ""); + field4030 = new LoginType(2, 7, "", ""); + field4031 = new LoginType(8, -1, "", "", true, new LoginType[]{oldscape, field4024, field4025, field4027, field4026}); } LoginType(int var1, int var2, String var3, String var4) { - this.field4033 = var1; - this.field4034 = var4; + this.field4032 = var1; + this.field4033 = var4; } @ObfuscatedSignature( - signature = "(IILjava/lang/String;Ljava/lang/String;Z[Lln;)V" + signature = "(IILjava/lang/String;Ljava/lang/String;Z[Llg;)V" ) LoginType(int var1, int var2, String var3, String var4, boolean var5, LoginType[] var6) { - this.field4033 = var1; - this.field4034 = var4; + this.field4032 = var1; + this.field4033 = var4; } public String toString() { - return this.field4034; + return this.field4033; } } diff --git a/runescape-client/src/main/java/MenuAction.java b/runescape-client/src/main/java/MenuAction.java index c0e0c13a4d..59d3bddcaf 100644 --- a/runescape-client/src/main/java/MenuAction.java +++ b/runescape-client/src/main/java/MenuAction.java @@ -4,76 +4,281 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("cd") +@ObfuscatedName("cg") @Implements("MenuAction") public class MenuAction { - @ObfuscatedName("qj") + @ObfuscatedName("qp") @ObfuscatedSignature( - signature = "Ldq;" + signature = "Lde;" ) - @Export("pcmPlayer1") - static PcmPlayer pcmPlayer1; - @ObfuscatedName("a") + @Export("pcmPlayer0") + static PcmPlayer pcmPlayer0; + @ObfuscatedName("u") @ObfuscatedGetter( - intValue = -1613868885 + intValue = 727455553 ) @Export("param0") int param0; - @ObfuscatedName("t") - @Export("action") - String action; - @ObfuscatedName("n") + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = -872703787 + intValue = -2069898041 ) @Export("param1") int param1; - @ObfuscatedName("q") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = 553279575 + intValue = -444090723 ) @Export("opcode") int opcode; - @ObfuscatedName("v") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = -1804422619 + intValue = -1960849141 ) @Export("identifier") int identifier; + @ObfuscatedName("z") + @Export("action") + String action; MenuAction() { } - @ObfuscatedName("t") + @ObfuscatedName("s") @ObfuscatedSignature( - signature = "(II)Lim;", - garbageValue = "-2086805733" + signature = "(IIIIIIILel;Lfh;I)V", + garbageValue = "-285019446" ) - @Export("SpotAnimationDefinition_get") - public static SpotAnimationDefinition SpotAnimationDefinition_get(int var0) { - SpotAnimationDefinition var1 = (SpotAnimationDefinition)SpotAnimationDefinition.SpotAnimationDefinition_cached.get((long)var0); - if (var1 != null) { - return var1; + static final void method2088(int var0, int var1, int var2, int var3, int var4, int var5, int var6, Scene var7, CollisionMap var8) { + ObjectDefinition var9 = Occluder.getObjectDefinition(var4); + int var10; + int var11; + if (var5 != 1 && var5 != 3) { + var10 = var9.sizeX; + var11 = var9.sizeY; } else { - byte[] var2 = SpotAnimationDefinition.SpotAnimationDefinition_archive.takeFile(13, var0); - var1 = new SpotAnimationDefinition(); - var1.id = var0; - if (var2 != null) { - var1.decode(new Buffer(var2)); + var10 = var9.sizeY; + var11 = var9.sizeX; + } + + int var12; + int var13; + if (var10 + var2 <= 104) { + var12 = (var10 >> 1) + var2; + var13 = var2 + (var10 + 1 >> 1); + } else { + var12 = var2; + var13 = var2 + 1; + } + + int var14; + int var15; + if (var3 + var11 <= 104) { + var14 = var3 + (var11 >> 1); + var15 = var3 + (var11 + 1 >> 1); + } else { + var14 = var3; + var15 = var3 + 1; + } + + int[][] var16 = Tiles.Tiles_heights[var1]; + int var17 = var16[var13][var14] + var16[var12][var14] + var16[var12][var15] + var16[var13][var15] >> 2; + int var18 = (var2 << 7) + (var10 << 6); + int var19 = (var3 << 7) + (var11 << 6); + long var20 = MouseHandler.calculateTag(var2, var3, 2, var9.int1 == 0, var4); + int var22 = (var5 << 6) + var6; + if (var9.int3 == 1) { + var22 += 256; + } + + Object var23; + if (var6 == 22) { + if (var9.animationId == -1 && var9.transforms == null) { + var23 = var9.getModel(22, var5, var16, var18, var17, var19); + } else { + var23 = new DynamicObject(var4, 22, var5, var1, var2, var3, var9.animationId, true, (Entity)null); + } + + var7.newFloorDecoration(var0, var2, var3, var17, (Entity)var23, var20, var22); + if (var9.interactType == 1) { + var8.setBlockedByFloorDec(var2, var3); + } + + } else if (var6 != 10 && var6 != 11) { + if (var6 >= 12) { + if (var9.animationId == -1 && var9.transforms == null) { + var23 = var9.getModel(var6, var5, var16, var18, var17, var19); + } else { + var23 = new DynamicObject(var4, var6, var5, var1, var2, var3, var9.animationId, true, (Entity)null); + } + + var7.method3242(var0, var2, var3, var17, 1, 1, (Entity)var23, 0, var20, var22); + if (var9.interactType != 0) { + var8.addGameObject(var2, var3, var10, var11, var9.boolean1); + } + + } else if (var6 == 0) { + if (var9.animationId == -1 && var9.transforms == null) { + var23 = var9.getModel(0, var5, var16, var18, var17, var19); + } else { + var23 = new DynamicObject(var4, 0, var5, var1, var2, var3, var9.animationId, true, (Entity)null); + } + + var7.newBoundaryObject(var0, var2, var3, var17, (Entity)var23, (Entity)null, Tiles.field505[var5], 0, var20, var22); + if (var9.interactType != 0) { + var8.method3614(var2, var3, var6, var5, var9.boolean1); + } + + } else if (var6 == 1) { + if (var9.animationId == -1 && var9.transforms == null) { + var23 = var9.getModel(1, var5, var16, var18, var17, var19); + } else { + var23 = new DynamicObject(var4, 1, var5, var1, var2, var3, var9.animationId, true, (Entity)null); + } + + var7.newBoundaryObject(var0, var2, var3, var17, (Entity)var23, (Entity)null, Tiles.field506[var5], 0, var20, var22); + if (var9.interactType != 0) { + var8.method3614(var2, var3, var6, var5, var9.boolean1); + } + + } else { + int var29; + if (var6 == 2) { + var29 = var5 + 1 & 3; + Object var24; + Object var25; + if (var9.animationId == -1 && var9.transforms == null) { + var24 = var9.getModel(2, var5 + 4, var16, var18, var17, var19); + var25 = var9.getModel(2, var29, var16, var18, var17, var19); + } else { + var24 = new DynamicObject(var4, 2, var5 + 4, var1, var2, var3, var9.animationId, true, (Entity)null); + var25 = new DynamicObject(var4, 2, var29, var1, var2, var3, var9.animationId, true, (Entity)null); + } + + var7.newBoundaryObject(var0, var2, var3, var17, (Entity)var24, (Entity)var25, Tiles.field505[var5], Tiles.field505[var29], var20, var22); + if (var9.interactType != 0) { + var8.method3614(var2, var3, var6, var5, var9.boolean1); + } + + } else if (var6 == 3) { + if (var9.animationId == -1 && var9.transforms == null) { + var23 = var9.getModel(3, var5, var16, var18, var17, var19); + } else { + var23 = new DynamicObject(var4, 3, var5, var1, var2, var3, var9.animationId, true, (Entity)null); + } + + var7.newBoundaryObject(var0, var2, var3, var17, (Entity)var23, (Entity)null, Tiles.field506[var5], 0, var20, var22); + if (var9.interactType != 0) { + var8.method3614(var2, var3, var6, var5, var9.boolean1); + } + + } else if (var6 == 9) { + if (var9.animationId == -1 && var9.transforms == null) { + var23 = var9.getModel(var6, var5, var16, var18, var17, var19); + } else { + var23 = new DynamicObject(var4, var6, var5, var1, var2, var3, var9.animationId, true, (Entity)null); + } + + var7.method3242(var0, var2, var3, var17, 1, 1, (Entity)var23, 0, var20, var22); + if (var9.interactType != 0) { + var8.addGameObject(var2, var3, var10, var11, var9.boolean1); + } + + } else if (var6 == 4) { + if (var9.animationId == -1 && var9.transforms == null) { + var23 = var9.getModel(4, var5, var16, var18, var17, var19); + } else { + var23 = new DynamicObject(var4, 4, var5, var1, var2, var3, var9.animationId, true, (Entity)null); + } + + var7.newWallDecoration(var0, var2, var3, var17, (Entity)var23, (Entity)null, Tiles.field505[var5], 0, 0, 0, var20, var22); + } else { + Object var26; + long var30; + if (var6 == 5) { + var29 = 16; + var30 = var7.getBoundaryObjectTag(var0, var2, var3); + if (0L != var30) { + var29 = Occluder.getObjectDefinition(ItemContainer.Entity_unpackID(var30)).int2; + } + + if (var9.animationId == -1 && var9.transforms == null) { + var26 = var9.getModel(4, var5, var16, var18, var17, var19); + } else { + var26 = new DynamicObject(var4, 4, var5, var1, var2, var3, var9.animationId, true, (Entity)null); + } + + var7.newWallDecoration(var0, var2, var3, var17, (Entity)var26, (Entity)null, Tiles.field505[var5], 0, var29 * Tiles.field507[var5], var29 * Tiles.field508[var5], var20, var22); + } else if (var6 == 6) { + var29 = 8; + var30 = var7.getBoundaryObjectTag(var0, var2, var3); + if (var30 != 0L) { + var29 = Occluder.getObjectDefinition(ItemContainer.Entity_unpackID(var30)).int2 / 2; + } + + if (var9.animationId == -1 && var9.transforms == null) { + var26 = var9.getModel(4, var5 + 4, var16, var18, var17, var19); + } else { + var26 = new DynamicObject(var4, 4, var5 + 4, var1, var2, var3, var9.animationId, true, (Entity)null); + } + + var7.newWallDecoration(var0, var2, var3, var17, (Entity)var26, (Entity)null, 256, var5, var29 * Tiles.field509[var5], var29 * Tiles.field513[var5], var20, var22); + } else if (var6 == 7) { + int var32 = var5 + 2 & 3; + if (var9.animationId == -1 && var9.transforms == null) { + var23 = var9.getModel(4, var32 + 4, var16, var18, var17, var19); + } else { + var23 = new DynamicObject(var4, 4, var32 + 4, var1, var2, var3, var9.animationId, true, (Entity)null); + } + + var7.newWallDecoration(var0, var2, var3, var17, (Entity)var23, (Entity)null, 256, var32, 0, 0, var20, var22); + } else if (var6 == 8) { + var29 = 8; + var30 = var7.getBoundaryObjectTag(var0, var2, var3); + if (var30 != 0L) { + var29 = Occluder.getObjectDefinition(ItemContainer.Entity_unpackID(var30)).int2 / 2; + } + + int var28 = var5 + 2 & 3; + Object var27; + if (var9.animationId == -1 && var9.transforms == null) { + var26 = var9.getModel(4, var5 + 4, var16, var18, var17, var19); + var27 = var9.getModel(4, var28 + 4, var16, var18, var17, var19); + } else { + var26 = new DynamicObject(var4, 4, var5 + 4, var1, var2, var3, var9.animationId, true, (Entity)null); + var27 = new DynamicObject(var4, 4, var28 + 4, var1, var2, var3, var9.animationId, true, (Entity)null); + } + + var7.newWallDecoration(var0, var2, var3, var17, (Entity)var26, (Entity)var27, 256, var5, var29 * Tiles.field509[var5], var29 * Tiles.field513[var5], var20, var22); + } + } + } + } else { + if (var9.animationId == -1 && var9.transforms == null) { + var23 = var9.getModel(10, var5, var16, var18, var17, var19); + } else { + var23 = new DynamicObject(var4, 10, var5, var1, var2, var3, var9.animationId, true, (Entity)null); + } + + if (var23 != null) { + var7.method3242(var0, var2, var3, var17, var10, var11, (Entity)var23, var6 == 11 ? 256 : 0, var20, var22); + } + + if (var9.interactType != 0) { + var8.addGameObject(var2, var3, var10, var11, var9.boolean1); } - SpotAnimationDefinition.SpotAnimationDefinition_cached.put(var1, (long)var0); - return var1; } } - @ObfuscatedName("n") + @ObfuscatedName("kj") @ObfuscatedSignature( - signature = "(Lhq;III)Llx;", - garbageValue = "1380862020" + signature = "(Lhl;I)I", + garbageValue = "1738654029" ) - @Export("SpriteBuffer_getSprite") - public static Sprite SpriteBuffer_getSprite(AbstractArchive var0, int var1, int var2) { - return !class32.method618(var0, var1, var2) ? null : Username.method5338(); + @Export("getWidgetClickMask") + static int getWidgetClickMask(Widget var0) { + IntegerNode var1 = (IntegerNode)Client.widgetClickMasks.get((long)var0.childIndex + ((long)var0.id << 32)); + return var1 != null ? var1.integer : var0.clickMask; } } diff --git a/runescape-client/src/main/java/Message.java b/runescape-client/src/main/java/Message.java index b5c4275c2d..33b267c7bf 100644 --- a/runescape-client/src/main/java/Message.java +++ b/runescape-client/src/main/java/Message.java @@ -3,69 +3,53 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("bt") +@ObfuscatedName("ba") @Implements("Message") public class Message extends DualNode { - @ObfuscatedName("sb") + @ObfuscatedName("u") @ObfuscatedGetter( - longValue = -680699599489496797L - ) - static long field584; - @ObfuscatedName("be") - @ObfuscatedSignature( - signature = "Llw;" - ) - static IndexedSprite field587; - @ObfuscatedName("fi") - @ObfuscatedGetter( - longValue = 9196175446999067947L - ) - static long field577; - @ObfuscatedName("a") - @ObfuscatedGetter( - intValue = 911828469 + intValue = 1109124741 ) @Export("count") int count; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = -1904084765 + intValue = 1203211479 ) @Export("cycle") int cycle; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = 1353192455 + intValue = 1935064875 ) @Export("type") int type; - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("sender") String sender; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "Lju;" + signature = "Ljb;" ) @Export("senderUsername") Username senderUsername; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "Ljs;" + signature = "Lja;" ) @Export("isFromFriend0") TriBool isFromFriend0; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "Ljs;" + signature = "Lja;" ) @Export("isFromIgnored0") TriBool isFromIgnored0; - @ObfuscatedName("o") + @ObfuscatedName("y") @Export("prefix") String prefix; - @ObfuscatedName("i") + @ObfuscatedName("w") @Export("text") String text; @@ -75,15 +59,14 @@ public class Message extends DualNode { this.set(var1, var2, var3, var4); } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;S)V", - garbageValue = "-16257" + signature = "(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V", + garbageValue = "1827197731" ) @Export("set") void set(int var1, String var2, String var3, String var4) { - int var5 = ++Messages.Messages_count - 1; - this.count = var5; + this.count = TileItem.method2142(); this.cycle = Client.cycle; this.type = var1; this.sender = var2; @@ -94,20 +77,20 @@ public class Message extends DualNode { this.clearIsFromIgnored(); } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "2091066977" + garbageValue = "-565259576" ) @Export("clearIsFromFriend") void clearIsFromFriend() { this.isFromFriend0 = TriBool.TriBool_unknown; } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(B)Z", - garbageValue = "-112" + signature = "(I)Z", + garbageValue = "-285390523" ) @Export("isFromFriend") final boolean isFromFriend() { @@ -118,30 +101,30 @@ public class Message extends DualNode { return this.isFromFriend0 == TriBool.TriBool_true; } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "-327157913" + signature = "(B)V", + garbageValue = "-28" ) @Export("fillIsFromFriend") void fillIsFromFriend() { - this.isFromFriend0 = PacketWriter.friendSystem.friendsList.contains(this.senderUsername) ? TriBool.TriBool_true : TriBool.TriBool_false; + this.isFromFriend0 = VertexNormal.friendSystem.friendsList.contains(this.senderUsername) ? TriBool.TriBool_true : TriBool.TriBool_false; } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "63" + signature = "(I)V", + garbageValue = "-1848382853" ) @Export("clearIsFromIgnored") void clearIsFromIgnored() { this.isFromIgnored0 = TriBool.TriBool_unknown; } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( signature = "(I)Z", - garbageValue = "694631904" + garbageValue = "1891538421" ) @Export("isFromIgnored") final boolean isFromIgnored() { @@ -152,551 +135,74 @@ public class Message extends DualNode { return this.isFromIgnored0 == TriBool.TriBool_true; } - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "-1904334547" + garbageValue = "-1953664490" ) @Export("fillIsFromIgnored") void fillIsFromIgnored() { - this.isFromIgnored0 = PacketWriter.friendSystem.ignoreList.contains(this.senderUsername) ? TriBool.TriBool_true : TriBool.TriBool_false; + this.isFromIgnored0 = VertexNormal.friendSystem.ignoreList.contains(this.senderUsername) ? TriBool.TriBool_true : TriBool.TriBool_false; } - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "-452155961" + garbageValue = "-324543817" ) @Export("fillSenderUsername") final void fillSenderUsername() { if (this.sender != null) { - this.senderUsername = new Username(class186.method3776(this.sender), class60.loginType); + this.senderUsername = new Username(VertexNormal.method3017(this.sender), WorldMapLabelSize.loginType); } else { this.senderUsername = null; } } - @ObfuscatedName("a") - @ObfuscatedSignature( - signature = "(IIILfc;Lfm;Z[I[IB)I", - garbageValue = "-128" - ) - public static int method1311(int var0, int var1, int var2, RouteStrategy var3, CollisionMap var4, boolean var5, int[] var6, int[] var7) { - int var9; - for (int var8 = 0; var8 < 128; ++var8) { - for (var9 = 0; var9 < 128; ++var9) { - class173.directions[var8][var9] = 0; - class173.distances[var8][var9] = 99999999; - } - } - - int var10; - int var11; - byte var13; - int var14; - int var15; - int var17; - int var19; - int var20; - int var21; - boolean var28; - int var30; - int var31; - int var33; - if (var2 == 1) { - var10 = var0; - var11 = var1; - byte var12 = 64; - var13 = 64; - var14 = var0 - var12; - var15 = var1 - var13; - class173.directions[var12][var13] = 99; - class173.distances[var12][var13] = 0; - byte var16 = 0; - var17 = 0; - class173.bufferX[var16] = var0; - var33 = var16 + 1; - class173.bufferY[var16] = var1; - int[][] var18 = var4.flags; - - boolean var29; - while (true) { - if (var33 == var17) { - class173.field2070 = var10; - LoginScreenAnimation.field1029 = var11; - var29 = false; - break; - } - - var10 = class173.bufferX[var17]; - var11 = class173.bufferY[var17]; - var17 = var17 + 1 & 4095; - var30 = var10 - var14; - var31 = var11 - var15; - var19 = var10 - var4.xInset; - var20 = var11 - var4.yInset; - if (var3.hasArrived(1, var10, var11, var4)) { - class173.field2070 = var10; - LoginScreenAnimation.field1029 = var11; - var29 = true; - break; - } - - var21 = class173.distances[var30][var31] + 1; - if (var30 > 0 && class173.directions[var30 - 1][var31] == 0 && (var18[var19 - 1][var20] & 19136776) == 0) { - class173.bufferX[var33] = var10 - 1; - class173.bufferY[var33] = var11; - var33 = var33 + 1 & 4095; - class173.directions[var30 - 1][var31] = 2; - class173.distances[var30 - 1][var31] = var21; - } - - if (var30 < 127 && class173.directions[var30 + 1][var31] == 0 && (var18[var19 + 1][var20] & 19136896) == 0) { - class173.bufferX[var33] = var10 + 1; - class173.bufferY[var33] = var11; - var33 = var33 + 1 & 4095; - class173.directions[var30 + 1][var31] = 8; - class173.distances[var30 + 1][var31] = var21; - } - - if (var31 > 0 && class173.directions[var30][var31 - 1] == 0 && (var18[var19][var20 - 1] & 19136770) == 0) { - class173.bufferX[var33] = var10; - class173.bufferY[var33] = var11 - 1; - var33 = var33 + 1 & 4095; - class173.directions[var30][var31 - 1] = 1; - class173.distances[var30][var31 - 1] = var21; - } - - if (var31 < 127 && class173.directions[var30][var31 + 1] == 0 && (var18[var19][var20 + 1] & 19136800) == 0) { - class173.bufferX[var33] = var10; - class173.bufferY[var33] = var11 + 1; - var33 = var33 + 1 & 4095; - class173.directions[var30][var31 + 1] = 4; - class173.distances[var30][var31 + 1] = var21; - } - - if (var30 > 0 && var31 > 0 && class173.directions[var30 - 1][var31 - 1] == 0 && (var18[var19 - 1][var20 - 1] & 19136782) == 0 && (var18[var19 - 1][var20] & 19136776) == 0 && (var18[var19][var20 - 1] & 19136770) == 0) { - class173.bufferX[var33] = var10 - 1; - class173.bufferY[var33] = var11 - 1; - var33 = var33 + 1 & 4095; - class173.directions[var30 - 1][var31 - 1] = 3; - class173.distances[var30 - 1][var31 - 1] = var21; - } - - if (var30 < 127 && var31 > 0 && class173.directions[var30 + 1][var31 - 1] == 0 && (var18[var19 + 1][var20 - 1] & 19136899) == 0 && (var18[var19 + 1][var20] & 19136896) == 0 && (var18[var19][var20 - 1] & 19136770) == 0) { - class173.bufferX[var33] = var10 + 1; - class173.bufferY[var33] = var11 - 1; - var33 = var33 + 1 & 4095; - class173.directions[var30 + 1][var31 - 1] = 9; - class173.distances[var30 + 1][var31 - 1] = var21; - } - - if (var30 > 0 && var31 < 127 && class173.directions[var30 - 1][var31 + 1] == 0 && (var18[var19 - 1][var20 + 1] & 19136824) == 0 && (var18[var19 - 1][var20] & 19136776) == 0 && (var18[var19][var20 + 1] & 19136800) == 0) { - class173.bufferX[var33] = var10 - 1; - class173.bufferY[var33] = var11 + 1; - var33 = var33 + 1 & 4095; - class173.directions[var30 - 1][var31 + 1] = 6; - class173.distances[var30 - 1][var31 + 1] = var21; - } - - if (var30 < 127 && var31 < 127 && class173.directions[var30 + 1][var31 + 1] == 0 && (var18[var19 + 1][var20 + 1] & 19136992) == 0 && (var18[var19 + 1][var20] & 19136896) == 0 && (var18[var19][var20 + 1] & 19136800) == 0) { - class173.bufferX[var33] = var10 + 1; - class173.bufferY[var33] = var11 + 1; - var33 = var33 + 1 & 4095; - class173.directions[var30 + 1][var31 + 1] = 12; - class173.distances[var30 + 1][var31 + 1] = var21; - } - } - - var28 = var29; - } else if (var2 == 2) { - var28 = InterfaceParent.method1262(var0, var1, var3, var4); - } else { - var28 = WorldMapLabelSize.method236(var0, var1, var2, var3, var4); - } - - var9 = var0 - 64; - var10 = var1 - 64; - var11 = class173.field2070; - var30 = LoginScreenAnimation.field1029; - if (!var28) { - var31 = Integer.MAX_VALUE; - var14 = Integer.MAX_VALUE; - byte var32 = 10; - var33 = var3.approxDestinationX; - var17 = var3.approxDestinationY; - int var27 = var3.approxDestinationSizeX; - var19 = var3.approxDestinationSizeY; - - for (var20 = var33 - var32; var20 <= var32 + var33; ++var20) { - for (var21 = var17 - var32; var21 <= var17 + var32; ++var21) { - int var22 = var20 - var9; - int var23 = var21 - var10; - if (var22 >= 0 && var23 >= 0 && var22 < 128 && var23 < 128 && class173.distances[var22][var23] < 100) { - int var24 = 0; - if (var20 < var33) { - var24 = var33 - var20; - } else if (var20 > var33 + var27 - 1) { - var24 = var20 - (var33 + var27 - 1); - } - - int var25 = 0; - if (var21 < var17) { - var25 = var17 - var21; - } else if (var21 > var17 + var19 - 1) { - var25 = var21 - (var17 + var19 - 1); - } - - int var26 = var24 * var24 + var25 * var25; - if (var26 < var31 || var31 == var26 && class173.distances[var22][var23] < var14) { - var31 = var26; - var14 = class173.distances[var22][var23]; - var11 = var20; - var30 = var21; - } - } - } - } - - if (var31 == Integer.MAX_VALUE) { - return -1; - } - } - - if (var0 == var11 && var30 == var1) { - return 0; - } else { - var13 = 0; - class173.bufferX[var13] = var11; - var31 = var13 + 1; - class173.bufferY[var13] = var30; - - for (var14 = var15 = class173.directions[var11 - var9][var30 - var10]; var0 != var11 || var30 != var1; var14 = class173.directions[var11 - var9][var30 - var10]) { - if (var15 != var14) { - var15 = var14; - class173.bufferX[var31] = var11; - class173.bufferY[var31++] = var30; - } - - if ((var14 & 2) != 0) { - ++var11; - } else if ((var14 & 8) != 0) { - --var11; - } - - if ((var14 & 1) != 0) { - ++var30; - } else if ((var14 & 4) != 0) { - --var30; - } - } - - var33 = 0; - - while (var31-- > 0) { - var6[var33] = class173.bufferX[var31]; - var7[var33++] = class173.bufferY[var31]; - if (var33 >= var6.length) { - break; - } - } - - return var33; - } - } - - @ObfuscatedName("t") - @ObfuscatedSignature( - signature = "(IIB)V", - garbageValue = "18" - ) - public static void method1299(int var0, int var1) { - VarbitDefinition var3 = (VarbitDefinition)VarbitDefinition.VarbitDefinition_cached.get((long)var0); - VarbitDefinition var2; - if (var3 != null) { - var2 = var3; - } else { - byte[] var8 = VarbitDefinition.VarbitDefinition_archive.takeFile(14, var0); - var3 = new VarbitDefinition(); - if (var8 != null) { - var3.decode(new Buffer(var8)); - } - - VarbitDefinition.VarbitDefinition_cached.put(var3, (long)var0); - var2 = var3; - } - - int var4 = var2.baseVar; - int var5 = var2.startBit; - int var6 = var2.endBit; - int var7 = Varps.Varps_masks[var6 - var5]; - if (var1 < 0 || var1 > var7) { - var1 = 0; - } - - var7 <<= var5; - Varps.Varps_main[var4] = Varps.Varps_main[var4] & ~var7 | var1 << var5 & var7; - } - - @ObfuscatedName("n") - @ObfuscatedSignature( - signature = "([BI)[B", - garbageValue = "-2141353592" - ) - static byte[] method1312(byte[] var0) { - int var1 = var0.length; - byte[] var2 = new byte[var1]; - System.arraycopy(var0, 0, var2, 0, var1); - return var2; - } - - @ObfuscatedName("p") - @ObfuscatedSignature( - signature = "([BI)V", - garbageValue = "1623096265" - ) - @Export("SpriteBuffer_decode") - static void SpriteBuffer_decode(byte[] var0) { - Buffer var1 = new Buffer(var0); - var1.offset = var0.length - 2; - class325.SpriteBuffer_spriteCount = var1.readUnsignedShort(); - SecureRandomFuture.SpriteBuffer_xOffsets = new int[class325.SpriteBuffer_spriteCount]; - HealthBar.SpriteBuffer_yOffsets = new int[class325.SpriteBuffer_spriteCount]; - SecureRandomCallable.SpriteBuffer_spriteWidths = new int[class325.SpriteBuffer_spriteCount]; - AttackOption.SpriteBuffer_spriteHeights = new int[class325.SpriteBuffer_spriteCount]; - class325.SpriteBuffer_pixels = new byte[class325.SpriteBuffer_spriteCount][]; - var1.offset = var0.length - 7 - class325.SpriteBuffer_spriteCount * 8; - class325.SpriteBuffer_spriteWidth = var1.readUnsignedShort(); - class325.SpriteBuffer_spriteHeight = var1.readUnsignedShort(); - int var2 = (var1.readUnsignedByte() & 255) + 1; - - int var3; - for (var3 = 0; var3 < class325.SpriteBuffer_spriteCount; ++var3) { - SecureRandomFuture.SpriteBuffer_xOffsets[var3] = var1.readUnsignedShort(); - } - - for (var3 = 0; var3 < class325.SpriteBuffer_spriteCount; ++var3) { - HealthBar.SpriteBuffer_yOffsets[var3] = var1.readUnsignedShort(); - } - - for (var3 = 0; var3 < class325.SpriteBuffer_spriteCount; ++var3) { - SecureRandomCallable.SpriteBuffer_spriteWidths[var3] = var1.readUnsignedShort(); - } - - for (var3 = 0; var3 < class325.SpriteBuffer_spriteCount; ++var3) { - AttackOption.SpriteBuffer_spriteHeights[var3] = var1.readUnsignedShort(); - } - - var1.offset = var0.length - 7 - class325.SpriteBuffer_spriteCount * 8 - (var2 - 1) * 3; - class325.SpriteBuffer_spritePalette = new int[var2]; - - for (var3 = 1; var3 < var2; ++var3) { - class325.SpriteBuffer_spritePalette[var3] = var1.readMedium(); - if (class325.SpriteBuffer_spritePalette[var3] == 0) { - class325.SpriteBuffer_spritePalette[var3] = 1; - } - } - - var1.offset = 0; - - for (var3 = 0; var3 < class325.SpriteBuffer_spriteCount; ++var3) { - int var4 = SecureRandomCallable.SpriteBuffer_spriteWidths[var3]; - int var5 = AttackOption.SpriteBuffer_spriteHeights[var3]; - int var6 = var4 * var5; - byte[] var7 = new byte[var6]; - class325.SpriteBuffer_pixels[var3] = var7; - int var8 = var1.readUnsignedByte(); - int var9; - if (var8 == 0) { - for (var9 = 0; var9 < var6; ++var9) { - var7[var9] = var1.readByte(); - } - } else if (var8 == 1) { - for (var9 = 0; var9 < var4; ++var9) { - for (int var10 = 0; var10 < var5; ++var10) { - var7[var9 + var4 * var10] = var1.readByte(); - } - } - } - } - - } - - @ObfuscatedName("ak") - @ObfuscatedSignature( - signature = "(ILcj;ZI)I", - garbageValue = "-1500417983" - ) - static int method1310(int var0, Script var1, boolean var2) { - int var3; - int var4; - int var6; - if (var0 == ScriptOpcodes.ENUM_STRING) { - Interpreter.Interpreter_intStackSize -= 2; - var3 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var4 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - EnumDefinition var5 = Coord.getEnum(var3); - if (var5.outputType != 's') { - } - - for (var6 = 0; var6 < var5.outputCount; ++var6) { - if (var4 == var5.keys[var6]) { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var5.strVals[var6]; - var5 = null; - break; - } - } - - if (var5 != null) { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var5.defaultStr; - } - - return 1; - } else if (var0 != ScriptOpcodes.ENUM) { - if (var0 == ScriptOpcodes.ENUM_GETOUTPUTCOUNT) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - EnumDefinition var10 = Coord.getEnum(var3); - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var10.size(); - return 1; - } else { - return 2; - } - } else { - Interpreter.Interpreter_intStackSize -= 4; - var3 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var4 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - int var9 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 2]; - var6 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 3]; - EnumDefinition var7 = Coord.getEnum(var9); - if (var3 == var7.inputType && var4 == var7.outputType) { - for (int var8 = 0; var8 < var7.outputCount; ++var8) { - if (var6 == var7.keys[var8]) { - if (var4 == 115) { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var7.strVals[var8]; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var7.intVals[var8]; - } - - var7 = null; - break; - } - } - - if (var7 != null) { - if (var4 == 115) { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var7.defaultStr; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var7.defaultInt; - } - } - - return 1; - } else { - if (var4 == 115) { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = "null"; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - } - - return 1; - } - } - } - - @ObfuscatedName("jz") - @ObfuscatedSignature( - signature = "([Lhi;IIIZI)V", - garbageValue = "-548793337" - ) - @Export("resizeInterface") - static void resizeInterface(Widget[] var0, int var1, int var2, int var3, boolean var4) { - for (int var5 = 0; var5 < var0.length; ++var5) { - Widget var6 = var0[var5]; - if (var6 != null && var6.parentId == var1) { - TriBool.alignWidgetSize(var6, var2, var3, var4); - ObjectDefinition.alignWidgetPosition(var6, var2, var3); - if (var6.scrollX > var6.scrollWidth - var6.width) { - var6.scrollX = var6.scrollWidth - var6.width; - } - - if (var6.scrollX < 0) { - var6.scrollX = 0; - } - - if (var6.scrollY > var6.scrollHeight - var6.height) { - var6.scrollY = var6.scrollHeight - var6.height; - } - - if (var6.scrollY < 0) { - var6.scrollY = 0; - } - - if (var6.type == 0) { - class43.revalidateWidgetScroll(var0, var6, var4); - } - } - } - - } - - @ObfuscatedName("ji") - @ObfuscatedSignature( - signature = "(Lhi;Liw;IIZS)V", - garbageValue = "4095" - ) - @Export("addWidgetItemMenuItem") - static final void addWidgetItemMenuItem(Widget var0, ItemDefinition var1, int var2, int var3, boolean var4) { - String[] var5 = var1.inventoryActions; - byte var6 = -1; - String var7 = null; - if (var5 != null && var5[var3] != null) { - if (var3 == 0) { - var6 = 33; - } else if (var3 == 1) { - var6 = 34; - } else if (var3 == 2) { - var6 = 35; - } else if (var3 == 3) { - var6 = 36; - } else { - var6 = 37; - } - - var7 = var5[var3]; - } else if (var3 == 4) { - var6 = 37; - var7 = "Drop"; - } - - if (var6 != -1 && var7 != null) { - ArchiveDiskAction.insertMenuItem(var7, AbstractArchive.colorStartTag(16748608) + var1.name, var6, var1.id, var2, var0.id, var4); - } - - } - @ObfuscatedName("kn") @ObfuscatedSignature( - signature = "(IIIILlx;Lhn;B)V", - garbageValue = "40" + signature = "(Ljava/lang/String;ZI)V", + garbageValue = "432259312" ) - @Export("drawSpriteOnMinimap") - static final void drawSpriteOnMinimap(int var0, int var1, int var2, int var3, Sprite var4, SpriteMask var5) { - if (var4 != null) { - int var6 = Client.camAngleY & 2047; - int var7 = var3 * var3 + var2 * var2; - if (var7 <= 6400) { - int var8 = Rasterizer3D.Rasterizer3D_sine[var6]; - int var9 = Rasterizer3D.Rasterizer3D_cosine[var6]; - int var10 = var9 * var2 + var3 * var8 >> 16; - int var11 = var3 * var9 - var8 * var2 >> 16; - if (var7 > 2500) { - var4.method6263(var10 + var5.width / 2 - var4.width / 2, var5.height / 2 - var11 - var4.height / 2, var0, var1, var5.width, var5.height, var5.xStarts, var5.xWidths); - } else { - var4.drawTransBgAt(var0 + var10 + var5.width / 2 - var4.width / 2, var5.height / 2 + var1 - var11 - var4.height / 2); + @Export("findItemDefinitions") + static void findItemDefinitions(String var0, boolean var1) { + var0 = var0.toLowerCase(); + short[] var2 = new short[16]; + int var3 = 0; + + for (int var4 = 0; var4 < class81.ItemDefinition_fileCount; ++var4) { + ItemDefinition var5 = Interpreter.ItemDefinition_get(var4); + if ((!var1 || var5.isTradable) && var5.noteTemplate == -1 && var5.name.toLowerCase().indexOf(var0) != -1) { + if (var3 >= 250) { + UserComparator10.foundItemIdCount = -1; + MusicPatch.foundItemIds = null; + return; } + if (var3 >= var2.length) { + short[] var6 = new short[var2.length * 2]; + + for (int var7 = 0; var7 < var3; ++var7) { + var6[var7] = var2[var7]; + } + + var2 = var6; + } + + var2[var3++] = (short)var4; } } + + MusicPatch.foundItemIds = var2; + GrandExchangeOfferAgeComparator.foundItemIndex = 0; + UserComparator10.foundItemIdCount = var3; + String[] var8 = new String[UserComparator10.foundItemIdCount]; + + for (int var9 = 0; var9 < UserComparator10.foundItemIdCount; ++var9) { + var8[var9] = Interpreter.ItemDefinition_get(var2[var9]).name; + } + + class3.method42(var8, MusicPatch.foundItemIds); } } diff --git a/runescape-client/src/main/java/Messages.java b/runescape-client/src/main/java/Messages.java index 4242368e7e..7ce65fc1f4 100644 --- a/runescape-client/src/main/java/Messages.java +++ b/runescape-client/src/main/java/Messages.java @@ -5,37 +5,44 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; +import net.runelite.rs.ScriptOpcodes; @ObfuscatedName("cq") @Implements("Messages") public class Messages { - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("Messages_channels") static final Map Messages_channels; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Llr;" + signature = "Llb;" ) @Export("Messages_hashTable") static final IterableNodeHashTable Messages_hashTable; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Ljq;" + signature = "Ljz;" ) @Export("Messages_queue") static final IterableDualNodeQueue Messages_queue; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = -34471415 + intValue = 2018287287 ) @Export("Messages_count") static int Messages_count; - @ObfuscatedName("k") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = 93041405 + intValue = -1088425627 ) - @Export("graphicsTickTimeIdx") - static int graphicsTickTimeIdx; + @Export("PcmPlayer_sampleRate") + public static int PcmPlayer_sampleRate; + @ObfuscatedName("c") + @ObfuscatedSignature( + signature = "Lat;" + ) + @Export("worldMapEvent") + static WorldMapEvent worldMapEvent; static { Messages_channels = new HashMap(); @@ -43,4 +50,48 @@ public class Messages { Messages_queue = new IterableDualNodeQueue(); Messages_count = 0; } + + @ObfuscatedName("u") + @ObfuscatedSignature( + signature = "(Lhg;I)V", + garbageValue = "-1903945924" + ) + public static void method2230(Huffman var0) { + class210.huffman = var0; + } + + @ObfuscatedName("c") + @ObfuscatedSignature( + signature = "(ILci;ZI)I", + garbageValue = "-1564166931" + ) + static int method2241(int var0, Script var1, boolean var2) { + Widget var3 = var2 ? Interpreter.field1090 : class188.field2352; + if (var0 == ScriptOpcodes.CC_GETTARGETMASK) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Client.method1655(MenuAction.getWidgetClickMask(var3)); + return 1; + } else if (var0 != ScriptOpcodes.CC_GETOP) { + if (var0 == ScriptOpcodes.CC_GETOPBASE) { + if (var3.dataText == null) { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = ""; + } else { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var3.dataText; + } + + return 1; + } else { + return 2; + } + } else { + int var4 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + --var4; + if (var3.actions != null && var4 < var3.actions.length && var3.actions[var4] != null) { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var3.actions[var4]; + } else { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = ""; + } + + return 1; + } + } } diff --git a/runescape-client/src/main/java/MidiFileReader.java b/runescape-client/src/main/java/MidiFileReader.java index 1b7ec6752d..34a0c50528 100644 --- a/runescape-client/src/main/java/MidiFileReader.java +++ b/runescape-client/src/main/java/MidiFileReader.java @@ -3,38 +3,38 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("gr") +@ObfuscatedName("gg") @Implements("MidiFileReader") public class MidiFileReader { - @ObfuscatedName("d") - static final byte[] field2439; - @ObfuscatedName("a") + @ObfuscatedName("i") + static final byte[] field2478; + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lkc;" + signature = "Lkg;" ) @Export("buffer") Buffer buffer; - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("division") int division; - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("trackStarts") int[] trackStarts; - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("trackPositions") int[] trackPositions; - @ObfuscatedName("v") + @ObfuscatedName("z") @Export("trackLengths") int[] trackLengths; - @ObfuscatedName("l") - int[] field2444; - @ObfuscatedName("c") - int field2445; - @ObfuscatedName("i") - long field2448; + @ObfuscatedName("p") + int[] field2474; + @ObfuscatedName("h") + int field2475; + @ObfuscatedName("w") + long field2482; static { - field2439 = 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}; + field2478 = 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}; } MidiFileReader(byte[] var1) { @@ -46,14 +46,14 @@ public class MidiFileReader { this.buffer = new Buffer((byte[])null); } - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("parse") void parse(byte[] var1) { this.buffer.array = var1; this.buffer.offset = 10; int var2 = this.buffer.readUnsignedShort(); this.division = this.buffer.readUnsignedShort(); - this.field2445 = 500000; + this.field2475 = 500000; this.trackStarts = new int[var2]; Buffer var10000; @@ -70,7 +70,7 @@ public class MidiFileReader { var10000 = this.buffer; } - this.field2448 = 0L; + this.field2482 = 0L; this.trackPositions = new int[var2]; for (var3 = 0; var3 < var2; ++var3) { @@ -78,50 +78,50 @@ public class MidiFileReader { } this.trackLengths = new int[var2]; - this.field2444 = new int[var2]; + this.field2474 = new int[var2]; } - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("clear") void clear() { this.buffer.array = null; this.trackStarts = null; this.trackPositions = null; this.trackLengths = null; - this.field2444 = null; + this.field2474 = null; } - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("isReady") boolean isReady() { return this.buffer.array != null; } - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("trackCount") int trackCount() { return this.trackPositions.length; } - @ObfuscatedName("v") + @ObfuscatedName("z") @Export("gotoTrack") void gotoTrack(int var1) { this.buffer.offset = this.trackPositions[var1]; } - @ObfuscatedName("l") + @ObfuscatedName("p") @Export("markTrackPosition") void markTrackPosition(int var1) { this.trackPositions[var1] = this.buffer.offset; } - @ObfuscatedName("c") + @ObfuscatedName("h") @Export("setTrackDone") void setTrackDone() { this.buffer.offset = -1; } - @ObfuscatedName("o") + @ObfuscatedName("y") @Export("readTrackLength") void readTrackLength(int var1) { int var2 = this.buffer.readVarInt(); @@ -129,36 +129,36 @@ public class MidiFileReader { var10000[var1] += var2; } - @ObfuscatedName("i") + @ObfuscatedName("w") @Export("readMessage") int readMessage(int var1) { int var2 = this.readMessage0(var1); return var2; } - @ObfuscatedName("d") + @ObfuscatedName("i") @Export("readMessage0") int readMessage0(int var1) { byte var2 = this.buffer.array[this.buffer.offset]; int var5; if (var2 < 0) { var5 = var2 & 255; - this.field2444[var1] = var5; + this.field2474[var1] = var5; ++this.buffer.offset; } else { - var5 = this.field2444[var1]; + var5 = this.field2474[var1]; } if (var5 != 240 && var5 != 247) { - return this.method3997(var1, var5); + return this.method3895(var1, var5); } else { int var3 = this.buffer.readVarInt(); if (var5 == 247 && var3 > 0) { int var4 = this.buffer.array[this.buffer.offset] & 255; if (var4 >= 241 && var4 <= 243 || var4 == 246 || var4 == 248 || var4 >= 250 && var4 <= 252 || var4 == 254) { ++this.buffer.offset; - this.field2444[var1] = var4; - return this.method3997(var1, var4); + this.field2474[var1] = var4; + return this.method3895(var1, var4); } } @@ -168,8 +168,8 @@ public class MidiFileReader { } } - @ObfuscatedName("m") - int method3997(int var1, int var2) { + @ObfuscatedName("k") + int method3895(int var1, int var2) { int var4; if (var2 == 255) { int var7 = this.buffer.readUnsignedByte(); @@ -183,8 +183,8 @@ public class MidiFileReader { int var5 = this.buffer.readMedium(); var4 -= 3; int var6 = this.trackLengths[var1]; - this.field2448 += (long)var6 * (long)(this.field2445 - var5); - this.field2445 = var5; + this.field2482 += (long)var6 * (long)(this.field2475 - var5); + this.field2475 = var5; var10000 = this.buffer; var10000.offset += var4; return 2; @@ -194,7 +194,7 @@ public class MidiFileReader { return 3; } } else { - byte var3 = field2439[var2 - 128]; + byte var3 = field2478[var2 - 128]; var4 = var2; if (var3 >= 1) { var4 = var2 | this.buffer.readUnsignedByte() << 8; @@ -208,12 +208,12 @@ public class MidiFileReader { } } - @ObfuscatedName("p") - long method3987(int var1) { - return this.field2448 + (long)var1 * (long)this.field2445; + @ObfuscatedName("x") + long method3906(int var1) { + return this.field2482 + (long)var1 * (long)this.field2475; } - @ObfuscatedName("h") + @ObfuscatedName("o") @Export("getPrioritizedTrack") int getPrioritizedTrack() { int var1 = this.trackPositions.length; @@ -230,7 +230,7 @@ public class MidiFileReader { return var2; } - @ObfuscatedName("k") + @ObfuscatedName("e") @Export("isDone") boolean isDone() { int var1 = this.trackPositions.length; @@ -244,15 +244,15 @@ public class MidiFileReader { return true; } - @ObfuscatedName("x") + @ObfuscatedName("n") @Export("reset") void reset(long var1) { - this.field2448 = var1; + this.field2482 = var1; int var3 = this.trackPositions.length; for (int var4 = 0; var4 < var3; ++var4) { this.trackLengths[var4] = 0; - this.field2444[var4] = 0; + this.field2474[var4] = 0; this.buffer.offset = this.trackStarts[var4]; this.readTrackLength(var4); this.trackPositions[var4] = this.buffer.offset; diff --git a/runescape-client/src/main/java/MidiPcmStream.java b/runescape-client/src/main/java/MidiPcmStream.java index c057da15ec..6aca87810b 100644 --- a/runescape-client/src/main/java/MidiPcmStream.java +++ b/runescape-client/src/main/java/MidiPcmStream.java @@ -4,161 +4,155 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("gg") +@ObfuscatedName("gz") @Implements("MidiPcmStream") public class MidiPcmStream extends PcmStream { - @ObfuscatedName("ix") - @ObfuscatedGetter( - intValue = -1186569365 - ) - @Export("selectedItemWidget") - static int selectedItemWidget; - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Llh;" + signature = "Lle;" ) @Export("musicPatches") NodeHashTable musicPatches; - @ObfuscatedName("t") - @ObfuscatedGetter( - intValue = -969808631 - ) - int field2399; - @ObfuscatedName("n") - @ObfuscatedGetter( - intValue = 1268396736 - ) - int field2387; - @ObfuscatedName("q") - int[] field2388; - @ObfuscatedName("v") - int[] field2398; - @ObfuscatedName("l") - int[] field2390; - @ObfuscatedName("c") - int[] field2391; - @ObfuscatedName("o") - int[] field2413; - @ObfuscatedName("i") - int[] field2393; - @ObfuscatedName("d") - int[] field2396; - @ObfuscatedName("m") - int[] field2395; - @ObfuscatedName("p") - int[] field2389; - @ObfuscatedName("b") - int[] field2386; - @ObfuscatedName("z") - int[] field2394; @ObfuscatedName("f") - int[] field2400; + @ObfuscatedGetter( + intValue = -1040348167 + ) + int field2417; + @ObfuscatedName("b") + @ObfuscatedGetter( + intValue = -618997033 + ) + int field2419; @ObfuscatedName("g") - int[] field2401; - @ObfuscatedName("w") - int[] field2392; - @ObfuscatedName("u") - int[] field2403; + int[] field2437; + @ObfuscatedName("z") + int[] field2420; + @ObfuscatedName("p") + int[] field2442; + @ObfuscatedName("h") + int[] field2422; @ObfuscatedName("y") + int[] field2421; + @ObfuscatedName("i") + int[] field2424; + @ObfuscatedName("k") + int[] field2425; + @ObfuscatedName("x") + int[] field2443; + @ObfuscatedName("o") + int[] field2427; + @ObfuscatedName("s") + int[] field2428; + @ObfuscatedName("t") + int[] field2440; + @ObfuscatedName("m") + int[] field2430; + @ObfuscatedName("v") + int[] field2441; + @ObfuscatedName("q") + int[] field2432; + @ObfuscatedName("l") + int[] field2433; + @ObfuscatedName("j") @ObfuscatedSignature( - signature = "[[Lgq;" + signature = "[[Lge;" ) - MusicPatchNode[][] field2409; - @ObfuscatedName("aa") + MusicPatchNode[][] field2434; + @ObfuscatedName("af") @ObfuscatedSignature( - signature = "[[Lgq;" + signature = "[[Lge;" ) - MusicPatchNode[][] field2385; - @ObfuscatedName("aw") + MusicPatchNode[][] field2435; + @ObfuscatedName("ad") @ObfuscatedSignature( - signature = "Lgr;" + signature = "Lgg;" ) @Export("midiFile") MidiFileReader midiFile; - @ObfuscatedName("ar") - boolean field2407; - @ObfuscatedName("aq") + @ObfuscatedName("am") + boolean field2426; + @ObfuscatedName("ai") @ObfuscatedGetter( - intValue = -1908280461 + intValue = -664864555 ) @Export("track") int track; - @ObfuscatedName("ad") + @ObfuscatedName("ag") @ObfuscatedGetter( - intValue = 1604575573 + intValue = -1177592685 ) @Export("trackLength") int trackLength; - @ObfuscatedName("ag") + @ObfuscatedName("ao") @ObfuscatedGetter( - longValue = -5934484016518299703L + longValue = -3140797067045383129L ) - long field2410; + long field2431; + @ObfuscatedName("aw") + @ObfuscatedGetter( + longValue = 7928451830395047815L + ) + long field2416; @ObfuscatedName("ak") - @ObfuscatedGetter( - longValue = 6514613664969707015L - ) - long field2411; - @ObfuscatedName("av") @ObfuscatedSignature( - signature = "Lgd;" + signature = "Lgr;" ) @Export("patchStream") MusicPatchPcmStream patchStream; public MidiPcmStream() { - this.field2399 = 256; - this.field2387 = -727379968; - this.field2388 = new int[16]; - this.field2398 = new int[16]; - this.field2390 = new int[16]; - this.field2391 = new int[16]; - this.field2413 = new int[16]; - this.field2393 = new int[16]; - this.field2396 = new int[16]; - this.field2395 = new int[16]; - this.field2389 = new int[16]; - this.field2386 = new int[16]; - this.field2394 = new int[16]; - this.field2400 = new int[16]; - this.field2401 = new int[16]; - this.field2392 = new int[16]; - this.field2403 = new int[16]; - this.field2409 = new MusicPatchNode[16][128]; - this.field2385 = new MusicPatchNode[16][128]; + this.field2417 = 256; + this.field2419 = 1000000; + this.field2437 = new int[16]; + this.field2420 = new int[16]; + this.field2442 = new int[16]; + this.field2422 = new int[16]; + this.field2421 = new int[16]; + this.field2424 = new int[16]; + this.field2425 = new int[16]; + this.field2443 = new int[16]; + this.field2427 = new int[16]; + this.field2428 = new int[16]; + this.field2440 = new int[16]; + this.field2430 = new int[16]; + this.field2441 = new int[16]; + this.field2432 = new int[16]; + this.field2433 = new int[16]; + this.field2434 = new MusicPatchNode[16][128]; + this.field2435 = new MusicPatchNode[16][128]; this.midiFile = new MidiFileReader(); this.patchStream = new MusicPatchPcmStream(this); this.musicPatches = new NodeHashTable(128); - this.method3866(); + this.method3787(); } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(II)V", - garbageValue = "636798046" + signature = "(IB)V", + garbageValue = "31" ) @Export("setPcmStreamVolume") public synchronized void setPcmStreamVolume(int var1) { - this.field2399 = var1; + this.field2417 = var1; } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(B)I", - garbageValue = "13" + signature = "(I)I", + garbageValue = "-847322953" ) - public int method3848() { - return this.field2399; + int method3769() { + return this.field2417; } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Lgb;Lhq;Ldm;II)Z", - garbageValue = "220322847" + signature = "(Lgt;Lhf;Ldk;II)Z", + garbageValue = "612802869" ) @Export("loadMusicTrack") public synchronized boolean loadMusicTrack(MusicTrack var1, AbstractArchive var2, SoundCache var3, int var4) { - var1.method4072(); + var1.method3987(); boolean var5 = true; int[] var6 = null; if (var4 > 0) { @@ -186,7 +180,7 @@ public class MidiPcmStream extends PcmStream { this.musicPatches.put(var10, (long)var8); } - if (!var9.method4034(var3, var7.byteArray, var6)) { + if (!var9.method3952(var3, var7.byteArray, var6)) { var5 = false; } } @@ -198,10 +192,10 @@ public class MidiPcmStream extends PcmStream { return var5; } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "893329353" + signature = "(B)V", + garbageValue = "34" ) @Export("clearAll") public synchronized void clearAll() { @@ -211,78 +205,78 @@ public class MidiPcmStream extends PcmStream { } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "1692689357" + garbageValue = "-1987681948" ) @Export("removeAll") - public synchronized void removeAll() { + synchronized void removeAll() { for (MusicPatch var1 = (MusicPatch)this.musicPatches.first(); var1 != null; var1 = (MusicPatch)this.musicPatches.next()) { var1.remove(); } } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "()Ldj;" + signature = "()Ldt;" ) @Export("firstSubStream") protected synchronized PcmStream firstSubStream() { return this.patchStream; } - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "()Ldj;" + signature = "()Ldt;" ) @Export("nextSubStream") protected synchronized PcmStream nextSubStream() { return null; } - @ObfuscatedName("o") - protected synchronized int vmethod4063() { + @ObfuscatedName("y") + protected synchronized int vmethod3963() { return 0; } - @ObfuscatedName("i") + @ObfuscatedName("w") @Export("fill") protected synchronized void fill(int[] var1, int var2, int var3) { if (this.midiFile.isReady()) { - int var4 = this.midiFile.division * this.field2387 * 1000000 / (PcmPlayer.PcmPlayer_sampleRate * 22050); + int var4 = this.midiFile.division * this.field2419 * -727379968 / Messages.PcmPlayer_sampleRate; do { - long var5 = this.field2410 + (long)var3 * (long)var4; - if (this.field2411 - var5 >= 0L) { - this.field2410 = var5; + long var5 = this.field2431 + (long)var4 * (long)var3; + if (this.field2416 - var5 >= 0L) { + this.field2431 = var5; break; } - int var7 = (int)(((long)var4 + (this.field2411 - this.field2410) - 1L) / (long)var4); - this.field2410 += (long)var4 * (long)var7; + int var7 = (int)((this.field2416 - this.field2431 + (long)var4 - 1L) / (long)var4); + this.field2431 += (long)var4 * (long)var7; this.patchStream.fill(var1, var2, var7); var2 += var7; var3 -= var7; - this.method3945(); + this.method3800(); } while(this.midiFile.isReady()); } this.patchStream.fill(var1, var2, var3); } - @ObfuscatedName("d") + @ObfuscatedName("i") @ObfuscatedSignature( - signature = "(Lgb;ZI)V", - garbageValue = "-369065525" + signature = "(Lgt;ZI)V", + garbageValue = "1137691865" ) @Export("setMusicTrack") public synchronized void setMusicTrack(MusicTrack var1, boolean var2) { this.clear(); this.midiFile.parse(var1.midi); - this.field2407 = var2; - this.field2410 = 0L; + this.field2426 = var2; + this.field2431 = 0L; int var3 = this.midiFile.trackCount(); for (int var4 = 0; var4 < var3; ++var4) { @@ -293,248 +287,248 @@ public class MidiPcmStream extends PcmStream { this.track = this.midiFile.getPrioritizedTrack(); this.trackLength = this.midiFile.trackLengths[this.track]; - this.field2411 = this.midiFile.method3987(this.trackLength); + this.field2416 = this.midiFile.method3906(this.trackLength); } - @ObfuscatedName("m") + @ObfuscatedName("k") @Export("skip") protected synchronized void skip(int var1) { if (this.midiFile.isReady()) { - int var2 = this.midiFile.division * this.field2387 * 1000000 / (PcmPlayer.PcmPlayer_sampleRate * 22050); + int var2 = this.midiFile.division * this.field2419 * -727379968 / Messages.PcmPlayer_sampleRate; do { - long var3 = (long)var2 * (long)var1 + this.field2410; - if (this.field2411 - var3 >= 0L) { - this.field2410 = var3; + long var3 = this.field2431 + (long)var2 * (long)var1; + if (this.field2416 - var3 >= 0L) { + this.field2431 = var3; break; } - int var5 = (int)(((long)var2 + (this.field2411 - this.field2410) - 1L) / (long)var2); - this.field2410 += (long)var5 * (long)var2; + int var5 = (int)(((long)var2 + (this.field2416 - this.field2431) - 1L) / (long)var2); + this.field2431 += (long)var5 * (long)var2; this.patchStream.skip(var5); var1 -= var5; - this.method3945(); + this.method3800(); } while(this.midiFile.isReady()); } this.patchStream.skip(var1); } - @ObfuscatedName("p") + @ObfuscatedName("x") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "54" + signature = "(I)V", + garbageValue = "-196539834" ) @Export("clear") public synchronized void clear() { this.midiFile.clear(); - this.method3866(); + this.method3787(); } - @ObfuscatedName("h") + @ObfuscatedName("o") @ObfuscatedSignature( signature = "(I)Z", - garbageValue = "-1270364746" + garbageValue = "2105523598" ) @Export("isReady") public synchronized boolean isReady() { return this.midiFile.isReady(); } - @ObfuscatedName("k") - @ObfuscatedSignature( - signature = "(III)V", - garbageValue = "1705668679" - ) - public synchronized void method3899(int var1, int var2) { - this.method3856(var1, var2); - } - - @ObfuscatedName("x") - @ObfuscatedSignature( - signature = "(III)V", - garbageValue = "1521021753" - ) - void method3856(int var1, int var2) { - this.field2391[var1] = var2; - this.field2393[var1] = var2 & -128; - this.method3968(var1, var2); - } - - @ObfuscatedName("j") - @ObfuscatedSignature( - signature = "(III)V", - garbageValue = "1482867334" - ) - void method3968(int var1, int var2) { - if (var2 != this.field2413[var1]) { - this.field2413[var1] = var2; - - for (int var3 = 0; var3 < 128; ++var3) { - this.field2385[var1][var3] = null; - } - } - - } - - @ObfuscatedName("r") - @ObfuscatedSignature( - signature = "(IIII)V", - garbageValue = "-1390676014" - ) - void method3858(int var1, int var2, int var3) { - this.method3860(var1, var2, 64); - if ((this.field2386[var1] & 2) != 0) { - for (MusicPatchNode var4 = (MusicPatchNode)this.patchStream.queue.first(); var4 != null; var4 = (MusicPatchNode)this.patchStream.queue.next()) { - if (var4.field2425 == var1 && var4.field2428 < 0) { - this.field2409[var1][var4.field2419] = null; - this.field2409[var1][var2] = var4; - int var5 = (var4.field2424 * var4.field2423 >> 12) + var4.field2416; - var4.field2416 += var2 - var4.field2419 << 8; - var4.field2423 = var5 - var4.field2416; - var4.field2424 = 4096; - var4.field2419 = var2; - return; - } - } - } - - MusicPatch var9 = (MusicPatch)this.musicPatches.get((long)this.field2413[var1]); - if (var9 != null) { - RawSound var8 = var9.rawSounds[var2]; - if (var8 != null) { - MusicPatchNode var6 = new MusicPatchNode(); - var6.field2425 = var1; - var6.patch = var9; - var6.rawSound = var8; - var6.field2417 = var9.field2458[var2]; - var6.field2422 = var9.field2459[var2]; - var6.field2419 = var2; - var6.field2430 = var3 * var3 * var9.field2453[var2] * var9.field2454 + 1024 >> 11; - var6.field2421 = var9.field2457[var2] & 255; - var6.field2416 = (var2 << 8) - (var9.field2460[var2] & 32767); - var6.field2420 = 0; - var6.field2431 = 0; - var6.field2427 = 0; - var6.field2428 = -1; - var6.field2429 = 0; - if (this.field2401[var1] == 0) { - var6.stream = RawPcmStream.method2767(var8, this.method3934(var6), this.method3875(var6), this.method3873(var6)); - } else { - var6.stream = RawPcmStream.method2767(var8, this.method3934(var6), 0, this.method3873(var6)); - this.method3885(var6, var9.field2460[var2] < 0); - } - - if (var9.field2460[var2] < 0) { - var6.stream.setNumLoops(-1); - } - - if (var6.field2422 >= 0) { - MusicPatchNode var7 = this.field2385[var1][var6.field2422]; - if (var7 != null && var7.field2428 < 0) { - this.field2409[var1][var7.field2419] = null; - var7.field2428 = 0; - } - - this.field2385[var1][var6.field2422] = var6; - } - - this.patchStream.queue.addFirst(var6); - this.field2409[var1][var2] = var6; - } - } - } - @ObfuscatedName("e") @ObfuscatedSignature( - signature = "(Lgq;ZI)V", - garbageValue = "-1702436335" + signature = "(III)V", + garbageValue = "2056390451" ) - void method3885(MusicPatchNode var1, boolean var2) { - int var3 = var1.rawSound.samples.length; - int var4; - if (var2 && var1.rawSound.field1363) { - int var5 = var3 + var3 - var1.rawSound.start; - var4 = (int)((long)var5 * (long)this.field2401[var1.field2425] >> 6); - var3 <<= 8; - if (var4 >= var3) { - var4 = var3 + var3 - 1 - var4; - var1.stream.method2708(); + public synchronized void method3775(int var1, int var2) { + this.method3817(var1, var2); + } + + @ObfuscatedName("n") + @ObfuscatedSignature( + signature = "(III)V", + garbageValue = "-1275355891" + ) + void method3817(int var1, int var2) { + this.field2422[var1] = var2; + this.field2424[var1] = var2 & -128; + this.method3777(var1, var2); + } + + @ObfuscatedName("c") + @ObfuscatedSignature( + signature = "(III)V", + garbageValue = "-1314090559" + ) + void method3777(int var1, int var2) { + if (var2 != this.field2421[var1]) { + this.field2421[var1] = var2; + + for (int var3 = 0; var3 < 128; ++var3) { + this.field2435[var1][var3] = null; } - } else { - var4 = (int)((long)this.field2401[var1.field2425] * (long)var3 >> 6); } - var1.stream.method2707(var4); } @ObfuscatedName("s") @ObfuscatedSignature( signature = "(IIII)V", - garbageValue = "-493444967" + garbageValue = "1833290175" ) - void method3860(int var1, int var2, int var3) { - MusicPatchNode var4 = this.field2409[var1][var2]; + void method3778(int var1, int var2, int var3) { + this.method3816(var1, var2, 64); + if ((this.field2428[var1] & 2) != 0) { + for (MusicPatchNode var4 = (MusicPatchNode)this.patchStream.queue.first(); var4 != null; var4 = (MusicPatchNode)this.patchStream.queue.next()) { + if (var4.field2449 == var1 && var4.field2459 < 0) { + this.field2434[var1][var4.field2450] = null; + this.field2434[var1][var2] = var4; + int var5 = (var4.field2455 * var4.field2454 >> 12) + var4.field2465; + var4.field2465 += var2 - var4.field2450 << 8; + var4.field2454 = var5 - var4.field2465; + var4.field2455 = 4096; + var4.field2450 = var2; + return; + } + } + } + + MusicPatch var9 = (MusicPatch)this.musicPatches.get((long)this.field2421[var1]); + if (var9 != null) { + RawSound var8 = var9.rawSounds[var2]; + if (var8 != null) { + MusicPatchNode var6 = new MusicPatchNode(); + var6.field2449 = var1; + var6.patch = var9; + var6.rawSound = var8; + var6.field2448 = var9.field2488[var2]; + var6.field2445 = var9.field2487[var2]; + var6.field2450 = var2; + var6.field2451 = var3 * var3 * var9.field2486[var2] * var9.field2489 + 1024 >> 11; + var6.field2452 = var9.field2483[var2] & 255; + var6.field2465 = (var2 << 8) - (var9.field2485[var2] & 32767); + var6.field2456 = 0; + var6.field2457 = 0; + var6.field2458 = 0; + var6.field2459 = -1; + var6.field2460 = 0; + if (this.field2441[var1] == 0) { + var6.stream = RawPcmStream.method2568(var8, this.method3862(var6), this.method3793(var6), this.method3794(var6)); + } else { + var6.stream = RawPcmStream.method2568(var8, this.method3862(var6), 0, this.method3794(var6)); + this.method3779(var6, var9.field2485[var2] < 0); + } + + if (var9.field2485[var2] < 0) { + var6.stream.setNumLoops(-1); + } + + if (var6.field2445 >= 0) { + MusicPatchNode var7 = this.field2435[var1][var6.field2445]; + if (var7 != null && var7.field2459 < 0) { + this.field2434[var1][var7.field2450] = null; + var7.field2459 = 0; + } + + this.field2435[var1][var6.field2445] = var6; + } + + this.patchStream.queue.addFirst(var6); + this.field2434[var1][var2] = var6; + } + } + } + + @ObfuscatedName("t") + @ObfuscatedSignature( + signature = "(Lge;ZI)V", + garbageValue = "-1090319556" + ) + void method3779(MusicPatchNode var1, boolean var2) { + int var3 = var1.rawSound.samples.length; + int var4; + if (var2 && var1.rawSound.field1378) { + int var5 = var3 + var3 - var1.rawSound.start; + var4 = (int)((long)this.field2441[var1.field2449] * (long)var5 >> 6); + var3 <<= 8; + if (var4 >= var3) { + var4 = var3 + var3 - 1 - var4; + var1.stream.method2578(); + } + } else { + var4 = (int)((long)var3 * (long)this.field2441[var1.field2449] >> 6); + } + + var1.stream.method2722(var4); + } + + @ObfuscatedName("m") + @ObfuscatedSignature( + signature = "(IIIB)V", + garbageValue = "-33" + ) + void method3816(int var1, int var2, int var3) { + MusicPatchNode var4 = this.field2434[var1][var2]; if (var4 != null) { - this.field2409[var1][var2] = null; - if ((this.field2386[var1] & 2) != 0) { + this.field2434[var1][var2] = null; + if ((this.field2428[var1] & 2) != 0) { for (MusicPatchNode var5 = (MusicPatchNode)this.patchStream.queue.last(); var5 != null; var5 = (MusicPatchNode)this.patchStream.queue.previous()) { - if (var4.field2425 == var5.field2425 && var5.field2428 < 0 && var4 != var5) { - var4.field2428 = 0; + if (var5.field2449 == var4.field2449 && var5.field2459 < 0 && var5 != var4) { + var4.field2459 = 0; break; } } } else { - var4.field2428 = 0; + var4.field2459 = 0; } } } - @ObfuscatedName("b") + @ObfuscatedName("v") @ObfuscatedSignature( - signature = "(IIII)V", - garbageValue = "1280416212" + signature = "(IIIB)V", + garbageValue = "-115" ) - void method3943(int var1, int var2, int var3) { + void method3781(int var1, int var2, int var3) { } - @ObfuscatedName("w") - @ObfuscatedSignature( - signature = "(IIB)V", - garbageValue = "-122" - ) - void method3862(int var1, int var2) { - } - - @ObfuscatedName("u") + @ObfuscatedName("q") @ObfuscatedSignature( signature = "(III)V", - garbageValue = "1364823347" + garbageValue = "-1083073471" ) - void method3949(int var1, int var2) { - this.field2396[var1] = var2; + void method3782(int var1, int var2) { } - @ObfuscatedName("ad") + @ObfuscatedName("l") + @ObfuscatedSignature( + signature = "(III)V", + garbageValue = "683649842" + ) + void method3783(int var1, int var2) { + this.field2425[var1] = var2; + } + + @ObfuscatedName("aa") @ObfuscatedSignature( signature = "(II)V", - garbageValue = "948298750" + garbageValue = "41766095" ) - void method3864(int var1) { + void method3784(int var1) { for (MusicPatchNode var2 = (MusicPatchNode)this.patchStream.queue.last(); var2 != null; var2 = (MusicPatchNode)this.patchStream.queue.previous()) { - if (var1 < 0 || var2.field2425 == var1) { + if (var1 < 0 || var2.field2449 == var1) { if (var2.stream != null) { - var2.stream.method2722(PcmPlayer.PcmPlayer_sampleRate * 22050 / 100); - if (var2.stream.method2716()) { + var2.stream.method2582(Messages.PcmPlayer_sampleRate / 100); + if (var2.stream.method2686()) { this.patchStream.mixer.addSubStream(var2.stream); } - var2.method3974(); + var2.method3893(); } - if (var2.field2428 < 0) { - this.field2409[var2.field2425][var2.field2419] = null; + if (var2.field2459 < 0) { + this.field2434[var2.field2449][var2.field2450] = null; } var2.remove(); @@ -543,80 +537,44 @@ public class MidiPcmStream extends PcmStream { } - @ObfuscatedName("ah") + @ObfuscatedName("ab") @ObfuscatedSignature( - signature = "(II)V", - garbageValue = "996018902" + signature = "(IB)V", + garbageValue = "54" ) - void method3865(int var1) { + void method3820(int var1) { if (var1 >= 0) { - this.field2388[var1] = 12800; - this.field2398[var1] = 8192; - this.field2390[var1] = 16383; - this.field2396[var1] = 8192; - this.field2395[var1] = 0; - this.field2389[var1] = 8192; - this.method3898(var1); - this.method3868(var1); - this.field2386[var1] = 0; - this.field2394[var1] = 32767; - this.field2400[var1] = 256; - this.field2401[var1] = 0; - this.method3870(var1, 8192); + this.field2437[var1] = 12800; + this.field2420[var1] = 8192; + this.field2442[var1] = 16383; + this.field2425[var1] = 8192; + this.field2443[var1] = 0; + this.field2427[var1] = 8192; + this.method3837(var1); + this.method3789(var1); + this.field2428[var1] = 0; + this.field2440[var1] = 32767; + this.field2430[var1] = 256; + this.field2441[var1] = 0; + this.method3791(var1, 8192); } else { for (var1 = 0; var1 < 16; ++var1) { - this.method3865(var1); + this.method3820(var1); } } } - @ObfuscatedName("an") + @ObfuscatedName("ar") @ObfuscatedSignature( - signature = "(II)V", - garbageValue = "-1405411261" + signature = "(IB)V", + garbageValue = "122" ) - void method3908(int var1) { + void method3786(int var1) { for (MusicPatchNode var2 = (MusicPatchNode)this.patchStream.queue.last(); var2 != null; var2 = (MusicPatchNode)this.patchStream.queue.previous()) { - if ((var1 < 0 || var2.field2425 == var1) && var2.field2428 < 0) { - this.field2409[var2.field2425][var2.field2419] = null; - var2.field2428 = 0; - } - } - - } - - @ObfuscatedName("af") - @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "1685703107" - ) - void method3866() { - this.method3864(-1); - this.method3865(-1); - - int var1; - for (var1 = 0; var1 < 16; ++var1) { - this.field2413[var1] = this.field2391[var1]; - } - - for (var1 = 0; var1 < 16; ++var1) { - this.field2393[var1] = this.field2391[var1] & -128; - } - - } - - @ObfuscatedName("ai") - @ObfuscatedSignature( - signature = "(II)V", - garbageValue = "-2123052342" - ) - void method3898(int var1) { - if ((this.field2386[var1] & 2) != 0) { - for (MusicPatchNode var2 = (MusicPatchNode)this.patchStream.queue.last(); var2 != null; var2 = (MusicPatchNode)this.patchStream.queue.previous()) { - if (var2.field2425 == var1 && this.field2409[var1][var2.field2419] == null && var2.field2428 < 0) { - var2.field2428 = 0; - } + if ((var1 < 0 || var2.field2449 == var1) && var2.field2459 < 0) { + this.field2434[var2.field2449][var2.field2450] = null; + var2.field2459 = 0; } } @@ -624,26 +582,62 @@ public class MidiPcmStream extends PcmStream { @ObfuscatedName("ac") @ObfuscatedSignature( - signature = "(II)V", - garbageValue = "1415970764" + signature = "(B)V", + garbageValue = "-18" ) - void method3868(int var1) { - if ((this.field2386[var1] & 4) != 0) { + void method3787() { + this.method3784(-1); + this.method3820(-1); + + int var1; + for (var1 = 0; var1 < 16; ++var1) { + this.field2421[var1] = this.field2422[var1]; + } + + for (var1 = 0; var1 < 16; ++var1) { + this.field2424[var1] = this.field2422[var1] & -128; + } + + } + + @ObfuscatedName("az") + @ObfuscatedSignature( + signature = "(II)V", + garbageValue = "1524706833" + ) + void method3837(int var1) { + if ((this.field2428[var1] & 2) != 0) { for (MusicPatchNode var2 = (MusicPatchNode)this.patchStream.queue.last(); var2 != null; var2 = (MusicPatchNode)this.patchStream.queue.previous()) { - if (var2.field2425 == var1) { - var2.field2434 = 0; + if (var2.field2449 == var1 && this.field2434[var1][var2.field2450] == null && var2.field2459 < 0) { + var2.field2459 = 0; } } } } - @ObfuscatedName("at") + @ObfuscatedName("ae") @ObfuscatedSignature( signature = "(II)V", - garbageValue = "-1364540347" + garbageValue = "-339945953" ) - void method3869(int var1) { + void method3789(int var1) { + if ((this.field2428[var1] & 4) != 0) { + for (MusicPatchNode var2 = (MusicPatchNode)this.patchStream.queue.last(); var2 != null; var2 = (MusicPatchNode)this.patchStream.queue.previous()) { + if (var2.field2449 == var1) { + var2.field2463 = 0; + } + } + } + + } + + @ObfuscatedName("aj") + @ObfuscatedSignature( + signature = "(II)V", + garbageValue = "640708386" + ) + void method3770(int var1) { int var2 = var1 & 240; int var3; int var4; @@ -652,260 +646,260 @@ public class MidiPcmStream extends PcmStream { var3 = var1 & 15; var4 = var1 >> 8 & 127; var5 = var1 >> 16 & 127; - this.method3860(var3, var4, var5); + this.method3816(var3, var4, var5); } else if (var2 == 144) { var3 = var1 & 15; var4 = var1 >> 8 & 127; var5 = var1 >> 16 & 127; if (var5 > 0) { - this.method3858(var3, var4, var5); + this.method3778(var3, var4, var5); } else { - this.method3860(var3, var4, 64); + this.method3816(var3, var4, 64); } } else if (var2 == 160) { var3 = var1 & 15; var4 = var1 >> 8 & 127; var5 = var1 >> 16 & 127; - this.method3943(var3, var4, var5); + this.method3781(var3, var4, var5); } else if (var2 == 176) { var3 = var1 & 15; var4 = var1 >> 8 & 127; var5 = var1 >> 16 & 127; if (var4 == 0) { - this.field2393[var3] = (var5 << 14) + (this.field2393[var3] & -2080769); + this.field2424[var3] = (var5 << 14) + (this.field2424[var3] & -2080769); } if (var4 == 32) { - this.field2393[var3] = (var5 << 7) + (this.field2393[var3] & -16257); + this.field2424[var3] = (var5 << 7) + (this.field2424[var3] & -16257); } if (var4 == 1) { - this.field2395[var3] = (var5 << 7) + (this.field2395[var3] & -16257); + this.field2443[var3] = (var5 << 7) + (this.field2443[var3] & -16257); } if (var4 == 33) { - this.field2395[var3] = var5 + (this.field2395[var3] & -128); + this.field2443[var3] = var5 + (this.field2443[var3] & -128); } if (var4 == 5) { - this.field2389[var3] = (var5 << 7) + (this.field2389[var3] & -16257); + this.field2427[var3] = (var5 << 7) + (this.field2427[var3] & -16257); } if (var4 == 37) { - this.field2389[var3] = var5 + (this.field2389[var3] & -128); + this.field2427[var3] = var5 + (this.field2427[var3] & -128); } if (var4 == 7) { - this.field2388[var3] = (var5 << 7) + (this.field2388[var3] & -16257); + this.field2437[var3] = (var5 << 7) + (this.field2437[var3] & -16257); } if (var4 == 39) { - this.field2388[var3] = var5 + (this.field2388[var3] & -128); + this.field2437[var3] = var5 + (this.field2437[var3] & -128); } if (var4 == 10) { - this.field2398[var3] = (var5 << 7) + (this.field2398[var3] & -16257); + this.field2420[var3] = (var5 << 7) + (this.field2420[var3] & -16257); } if (var4 == 42) { - this.field2398[var3] = var5 + (this.field2398[var3] & -128); + this.field2420[var3] = var5 + (this.field2420[var3] & -128); } if (var4 == 11) { - this.field2390[var3] = (var5 << 7) + (this.field2390[var3] & -16257); + this.field2442[var3] = (var5 << 7) + (this.field2442[var3] & -16257); } if (var4 == 43) { - this.field2390[var3] = var5 + (this.field2390[var3] & -128); + this.field2442[var3] = var5 + (this.field2442[var3] & -128); } int[] var10000; if (var4 == 64) { if (var5 >= 64) { - var10000 = this.field2386; + var10000 = this.field2428; var10000[var3] |= 1; } else { - var10000 = this.field2386; + var10000 = this.field2428; var10000[var3] &= -2; } } if (var4 == 65) { if (var5 >= 64) { - var10000 = this.field2386; + var10000 = this.field2428; var10000[var3] |= 2; } else { - this.method3898(var3); - var10000 = this.field2386; + this.method3837(var3); + var10000 = this.field2428; var10000[var3] &= -3; } } if (var4 == 99) { - this.field2394[var3] = (var5 << 7) + (this.field2394[var3] & 127); + this.field2440[var3] = (var5 << 7) + (this.field2440[var3] & 127); } if (var4 == 98) { - this.field2394[var3] = (this.field2394[var3] & 16256) + var5; + this.field2440[var3] = (this.field2440[var3] & 16256) + var5; } if (var4 == 101) { - this.field2394[var3] = (var5 << 7) + (this.field2394[var3] & 127) + 16384; + this.field2440[var3] = (var5 << 7) + (this.field2440[var3] & 127) + 16384; } if (var4 == 100) { - this.field2394[var3] = (this.field2394[var3] & 16256) + var5 + 16384; + this.field2440[var3] = (this.field2440[var3] & 16256) + var5 + 16384; } if (var4 == 120) { - this.method3864(var3); + this.method3784(var3); } if (var4 == 121) { - this.method3865(var3); + this.method3820(var3); } if (var4 == 123) { - this.method3908(var3); + this.method3786(var3); } int var6; if (var4 == 6) { - var6 = this.field2394[var3]; + var6 = this.field2440[var3]; if (var6 == 16384) { - this.field2400[var3] = (var5 << 7) + (this.field2400[var3] & -16257); + this.field2430[var3] = (var5 << 7) + (this.field2430[var3] & -16257); } } if (var4 == 38) { - var6 = this.field2394[var3]; + var6 = this.field2440[var3]; if (var6 == 16384) { - this.field2400[var3] = var5 + (this.field2400[var3] & -128); + this.field2430[var3] = var5 + (this.field2430[var3] & -128); } } if (var4 == 16) { - this.field2401[var3] = (var5 << 7) + (this.field2401[var3] & -16257); + this.field2441[var3] = (var5 << 7) + (this.field2441[var3] & -16257); } if (var4 == 48) { - this.field2401[var3] = var5 + (this.field2401[var3] & -128); + this.field2441[var3] = var5 + (this.field2441[var3] & -128); } if (var4 == 81) { if (var5 >= 64) { - var10000 = this.field2386; + var10000 = this.field2428; var10000[var3] |= 4; } else { - this.method3868(var3); - var10000 = this.field2386; + this.method3789(var3); + var10000 = this.field2428; var10000[var3] &= -5; } } if (var4 == 17) { - this.method3870(var3, (var5 << 7) + (this.field2392[var3] & -16257)); + this.method3791(var3, (var5 << 7) + (this.field2432[var3] & -16257)); } if (var4 == 49) { - this.method3870(var3, var5 + (this.field2392[var3] & -128)); + this.method3791(var3, var5 + (this.field2432[var3] & -128)); } } else if (var2 == 192) { var3 = var1 & 15; var4 = var1 >> 8 & 127; - this.method3968(var3, var4 + this.field2393[var3]); + this.method3777(var3, var4 + this.field2424[var3]); } else if (var2 == 208) { var3 = var1 & 15; var4 = var1 >> 8 & 127; - this.method3862(var3, var4); + this.method3782(var3, var4); } else if (var2 == 224) { var3 = var1 & 15; var4 = (var1 >> 8 & 127) + (var1 >> 9 & 16256); - this.method3949(var3, var4); + this.method3783(var3, var4); } else { var2 = var1 & 255; if (var2 == 255) { - this.method3866(); + this.method3787(); } } } - @ObfuscatedName("ba") + @ObfuscatedName("ap") @ObfuscatedSignature( signature = "(III)V", - garbageValue = "-1849310694" + garbageValue = "-2102724080" ) - void method3870(int var1, int var2) { - this.field2392[var1] = var2; - this.field2403[var1] = (int)(2097152.0D * Math.pow(2.0D, 5.4931640625E-4D * (double)var2) + 0.5D); + void method3791(int var1, int var2) { + this.field2432[var1] = var2; + this.field2433[var1] = (int)(2097152.0D * Math.pow(2.0D, 5.4931640625E-4D * (double)var2) + 0.5D); } - @ObfuscatedName("bg") + @ObfuscatedName("an") @ObfuscatedSignature( - signature = "(Lgq;I)I", - garbageValue = "-1843561" + signature = "(Lge;B)I", + garbageValue = "1" ) - int method3934(MusicPatchNode var1) { - int var2 = (var1.field2423 * var1.field2424 >> 12) + var1.field2416; - var2 += (this.field2396[var1.field2425] - 8192) * this.field2400[var1.field2425] >> 12; - MusicPatchNode2 var3 = var1.field2417; + int method3862(MusicPatchNode var1) { + int var2 = (var1.field2455 * var1.field2454 >> 12) + var1.field2465; + var2 += (this.field2425[var1.field2449] - 8192) * this.field2430[var1.field2449] >> 12; + MusicPatchNode2 var3 = var1.field2448; int var4; - if (var3.field2367 > 0 && (var3.field2360 > 0 || this.field2395[var1.field2425] > 0)) { - var4 = var3.field2360 << 2; - int var5 = var3.field2368 << 1; - if (var1.field2426 < var5) { - var4 = var4 * var1.field2426 / var5; + if (var3.field2405 > 0 && (var3.field2401 > 0 || this.field2443[var1.field2449] > 0)) { + var4 = var3.field2401 << 2; + int var5 = var3.field2402 << 1; + if (var1.field2461 < var5) { + var4 = var4 * var1.field2461 / var5; } - var4 += this.field2395[var1.field2425] >> 7; - double var6 = Math.sin(0.01227184630308513D * (double)(var1.field2414 & 511)); - var2 += (int)((double)var4 * var6); + var4 += this.field2443[var1.field2449] >> 7; + double var6 = Math.sin(0.01227184630308513D * (double)(var1.field2462 & 511)); + var2 += (int)(var6 * (double)var4); } - var4 = (int)((double)(var1.rawSound.sampleRate * 256) * Math.pow(2.0D, (double)var2 * 3.255208333333333E-4D) / (double)(PcmPlayer.PcmPlayer_sampleRate * 22050) + 0.5D); + var4 = (int)((double)(var1.rawSound.sampleRate * 256) * Math.pow(2.0D, (double)var2 * 3.255208333333333E-4D) / (double)Messages.PcmPlayer_sampleRate + 0.5D); return var4 < 1 ? 1 : var4; } - @ObfuscatedName("bc") + @ObfuscatedName("al") @ObfuscatedSignature( - signature = "(Lgq;B)I", - garbageValue = "-86" + signature = "(Lge;B)I", + garbageValue = "7" ) - int method3875(MusicPatchNode var1) { - MusicPatchNode2 var2 = var1.field2417; - int var3 = this.field2390[var1.field2425] * this.field2388[var1.field2425] + 4096 >> 13; + int method3793(MusicPatchNode var1) { + MusicPatchNode2 var2 = var1.field2448; + int var3 = this.field2442[var1.field2449] * this.field2437[var1.field2449] + 4096 >> 13; var3 = var3 * var3 + 16384 >> 15; - var3 = var3 * var1.field2430 + 16384 >> 15; - var3 = var3 * this.field2399 + 128 >> 8; - if (var2.field2371 > 0) { - var3 = (int)((double)var3 * Math.pow(0.5D, (double)var2.field2371 * (double)var1.field2420 * 1.953125E-5D) + 0.5D); + var3 = var3 * var1.field2451 + 16384 >> 15; + var3 = var3 * this.field2417 + 128 >> 8; + if (var2.field2400 > 0) { + var3 = (int)((double)var3 * Math.pow(0.5D, 1.953125E-5D * (double)var1.field2456 * (double)var2.field2400) + 0.5D); } int var4; int var5; int var6; int var7; - if (var2.field2364 != null) { - var4 = var1.field2431; - var5 = var2.field2364[var1.field2427 * 4 + 1]; - if (var1.field2427 * 4 < var2.field2364.length - 2) { - var6 = (var2.field2364[var1.field2427 * 4] & 255) << 8; - var7 = (var2.field2364[var1.field2427 * 4 + 2] & 255) << 8; - var5 += (var2.field2364[var1.field2427 * 4 + 3] - var5) * (var4 - var6) / (var7 - var6); + if (var2.field2404 != null) { + var4 = var1.field2457; + var5 = var2.field2404[var1.field2458 * 4 + 1]; + if (var1.field2458 * 4 < var2.field2404.length - 2) { + var6 = (var2.field2404[var1.field2458 * 4] & 255) << 8; + var7 = (var2.field2404[var1.field2458 * 4 + 2] & 255) << 8; + var5 += (var2.field2404[var1.field2458 * 4 + 3] - var5) * (var4 - var6) / (var7 - var6); } - var3 = var3 * var5 + 32 >> 6; + var3 = var5 * var3 + 32 >> 6; } - if (var1.field2428 > 0 && var2.field2361 != null) { - var4 = var1.field2428; - var5 = var2.field2361[var1.field2429 * 4 + 1]; - if (var1.field2429 * 4 < var2.field2361.length - 2) { - var6 = (var2.field2361[var1.field2429 * 4] & 255) << 8; - var7 = (var2.field2361[var1.field2429 * 4 + 2] & 255) << 8; - var5 += (var2.field2361[var1.field2429 * 4 + 3] - var5) * (var4 - var6) / (var7 - var6); + if (var1.field2459 > 0 && var2.field2399 != null) { + var4 = var1.field2459; + var5 = var2.field2399[var1.field2460 * 4 + 1]; + if (var1.field2460 * 4 < var2.field2399.length - 2) { + var6 = (var2.field2399[var1.field2460 * 4] & 255) << 8; + var7 = (var2.field2399[var1.field2460 * 4 + 2] & 255) << 8; + var5 += (var2.field2399[var1.field2460 * 4 + 3] - var5) * (var4 - var6) / (var7 - var6); } var3 = var5 * var3 + 32 >> 6; @@ -914,27 +908,27 @@ public class MidiPcmStream extends PcmStream { return var3; } - @ObfuscatedName("bd") + @ObfuscatedName("ay") @ObfuscatedSignature( - signature = "(Lgq;B)I", - garbageValue = "22" + signature = "(Lge;I)I", + garbageValue = "1924101342" ) - int method3873(MusicPatchNode var1) { - int var2 = this.field2398[var1.field2425]; - return var2 < 8192 ? var2 * var1.field2421 + 32 >> 6 : 16384 - ((128 - var1.field2421) * (16384 - var2) + 32 >> 6); + int method3794(MusicPatchNode var1) { + int var2 = this.field2420[var1.field2449]; + return var2 < 8192 ? var2 * var1.field2452 + 32 >> 6 : 16384 - ((128 - var1.field2452) * (16384 - var2) + 32 >> 6); } - @ObfuscatedName("bx") + @ObfuscatedName("ax") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "-1715674660" + garbageValue = "869204676" ) - void method3945() { + void method3800() { int var1 = this.track; int var2 = this.trackLength; long var3; - for (var3 = this.field2411; var2 == this.trackLength; var3 = this.midiFile.method3987(var2)) { + for (var3 = this.field2416; var2 == this.trackLength; var3 = this.midiFile.method3906(var2)) { while (var2 == this.midiFile.trackLengths[var1]) { this.midiFile.gotoTrack(var1); int var5 = this.midiFile.readMessage(var1); @@ -942,8 +936,8 @@ public class MidiPcmStream extends PcmStream { this.midiFile.setTrackDone(); this.midiFile.markTrackPosition(var1); if (this.midiFile.isDone()) { - if (!this.field2407 || var2 == 0) { - this.method3866(); + if (!this.field2426 || var2 == 0) { + this.method3787(); this.midiFile.clear(); return; } @@ -954,7 +948,7 @@ public class MidiPcmStream extends PcmStream { } if ((var5 & 128) != 0) { - this.method3869(var5); + this.method3770(var5); } this.midiFile.readTrackLength(var1); @@ -967,20 +961,20 @@ public class MidiPcmStream extends PcmStream { this.track = var1; this.trackLength = var2; - this.field2411 = var3; + this.field2416 = var3; } - @ObfuscatedName("bl") + @ObfuscatedName("au") @ObfuscatedSignature( - signature = "(Lgq;I)Z", - garbageValue = "-1707560993" + signature = "(Lge;B)Z", + garbageValue = "0" ) - boolean method3880(MusicPatchNode var1) { + boolean method3801(MusicPatchNode var1) { if (var1.stream == null) { - if (var1.field2428 >= 0) { + if (var1.field2459 >= 0) { var1.remove(); - if (var1.field2422 > 0 && var1 == this.field2385[var1.field2425][var1.field2422]) { - this.field2385[var1.field2425][var1.field2422] = null; + if (var1.field2445 > 0 && var1 == this.field2435[var1.field2449][var1.field2445]) { + this.field2435[var1.field2449][var1.field2445] = null; } } @@ -990,164 +984,103 @@ public class MidiPcmStream extends PcmStream { } } - @ObfuscatedName("bh") + @ObfuscatedName("as") @ObfuscatedSignature( - signature = "(Lgq;[IIII)Z", - garbageValue = "-1765185106" + signature = "(Lge;[IIII)Z", + garbageValue = "178317578" ) - boolean method3881(MusicPatchNode var1, int[] var2, int var3, int var4) { - var1.field2433 = PcmPlayer.PcmPlayer_sampleRate * 22050 / 100; - if (var1.field2428 < 0 || var1.stream != null && !var1.stream.method2789()) { - int var5 = var1.field2424; + boolean method3802(MusicPatchNode var1, int[] var2, int var3, int var4) { + var1.field2464 = Messages.PcmPlayer_sampleRate / 100; + if (var1.field2459 < 0 || var1.stream != null && !var1.stream.method2585()) { + int var5 = var1.field2455; if (var5 > 0) { - var5 -= (int)(16.0D * Math.pow(2.0D, (double)this.field2389[var1.field2425] * 4.921259842519685E-4D) + 0.5D); + var5 -= (int)(16.0D * Math.pow(2.0D, (double)this.field2427[var1.field2449] * 4.921259842519685E-4D) + 0.5D); if (var5 < 0) { var5 = 0; } - var1.field2424 = var5; + var1.field2455 = var5; } - var1.stream.method2743(this.method3934(var1)); - MusicPatchNode2 var6 = var1.field2417; + var1.stream.method2679(this.method3862(var1)); + MusicPatchNode2 var6 = var1.field2448; boolean var7 = false; - ++var1.field2426; - var1.field2414 += var6.field2367; - double var8 = 5.086263020833333E-6D * (double)((var1.field2419 - 60 << 8) + (var1.field2423 * var1.field2424 >> 12)); - if (var6.field2371 > 0) { - if (var6.field2365 > 0) { - var1.field2420 = var1.field2420 * -308789248 + (int)(128.0D * Math.pow(2.0D, var8 * (double)var6.field2365) + 0.5D) * -308789248; + ++var1.field2461; + var1.field2462 += var6.field2405; + double var8 = 5.086263020833333E-6D * (double)((var1.field2450 - 60 << 8) + (var1.field2454 * var1.field2455 >> 12)); + if (var6.field2400 > 0) { + if (var6.field2403 > 0) { + var1.field2456 += (int)(128.0D * Math.pow(2.0D, (double)var6.field2403 * var8) + 0.5D); } else { - var1.field2420 = var1.field2420 * -308789248 + -870318080; + var1.field2456 += 128; } } - if (var6.field2364 != null) { - if (var6.field2366 > 0) { - var1.field2431 += (int)(128.0D * Math.pow(2.0D, (double)var6.field2366 * var8) + 0.5D); + if (var6.field2404 != null) { + if (var6.field2398 > 0) { + var1.field2457 += (int)(128.0D * Math.pow(2.0D, var8 * (double)var6.field2398) + 0.5D); } else { - var1.field2431 += 128; + var1.field2457 += 128; } - while (var1.field2427 * 4 < var6.field2364.length - 2 && var1.field2431 > (var6.field2364[var1.field2427 * 4 + 2] & 255) << 8) { - var1.field2427 = var1.field2427 * 4 + 2; + while (var1.field2458 * 4 < var6.field2404.length - 2 && var1.field2457 > (var6.field2404[var1.field2458 * 4 + 2] & 255) << 8) { + var1.field2458 = var1.field2458 * 4 + 2; } - if (var1.field2427 * 4 == var6.field2364.length - 2 && var6.field2364[var1.field2427 * 4 + 1] == 0) { + if (var1.field2458 * 4 == var6.field2404.length - 2 && var6.field2404[var1.field2458 * 4 + 1] == 0) { var7 = true; } } - if (var1.field2428 >= 0 && var6.field2361 != null && (this.field2386[var1.field2425] & 1) == 0 && (var1.field2422 < 0 || var1 != this.field2385[var1.field2425][var1.field2422])) { - if (var6.field2363 > 0) { - var1.field2428 += (int)(128.0D * Math.pow(2.0D, (double)var6.field2363 * var8) + 0.5D); + if (var1.field2459 >= 0 && var6.field2399 != null && (this.field2428[var1.field2449] & 1) == 0 && (var1.field2445 < 0 || var1 != this.field2435[var1.field2449][var1.field2445])) { + if (var6.field2407 > 0) { + var1.field2459 += (int)(128.0D * Math.pow(2.0D, (double)var6.field2407 * var8) + 0.5D); } else { - var1.field2428 += 128; + var1.field2459 += 128; } - while (var1.field2429 * 4 < var6.field2361.length - 2 && var1.field2428 > (var6.field2361[var1.field2429 * 4 + 2] & 255) << 8) { - var1.field2429 = var1.field2429 * 4 + 2; + while (var1.field2460 * 4 < var6.field2399.length - 2 && var1.field2459 > (var6.field2399[var1.field2460 * 4 + 2] & 255) << 8) { + var1.field2460 = var1.field2460 * 4 + 2; } - if (var1.field2429 * 4 == var6.field2361.length - 2) { + if (var1.field2460 * 4 == var6.field2399.length - 2) { var7 = true; } } if (var7) { - var1.stream.method2722(var1.field2433); + var1.stream.method2582(var1.field2464); if (var2 != null) { var1.stream.fill(var2, var3, var4); } else { var1.stream.skip(var4); } - if (var1.stream.method2716()) { + if (var1.stream.method2686()) { this.patchStream.mixer.addSubStream(var1.stream); } - var1.method3974(); - if (var1.field2428 >= 0) { + var1.method3893(); + if (var1.field2459 >= 0) { var1.remove(); - if (var1.field2422 > 0 && var1 == this.field2385[var1.field2425][var1.field2422]) { - this.field2385[var1.field2425][var1.field2422] = null; + if (var1.field2445 > 0 && var1 == this.field2435[var1.field2449][var1.field2445]) { + this.field2435[var1.field2449][var1.field2445] = null; } } return true; } else { - var1.stream.method2711(var1.field2433, this.method3875(var1), this.method3873(var1)); + var1.stream.method2581(var1.field2464, this.method3793(var1), this.method3794(var1)); return false; } } else { - var1.method3974(); + var1.method3893(); var1.remove(); - if (var1.field2422 > 0 && var1 == this.field2385[var1.field2425][var1.field2422]) { - this.field2385[var1.field2425][var1.field2422] = null; + if (var1.field2445 > 0 && var1 == this.field2435[var1.field2449][var1.field2445]) { + this.field2435[var1.field2449][var1.field2445] = null; } return true; } } - - @ObfuscatedName("gk") - @ObfuscatedSignature( - signature = "(Ljava/lang/String;B)V", - garbageValue = "-75" - ) - @Export("doCheat") - static final void doCheat(String var0) { - if (var0.equalsIgnoreCase("toggleroof")) { - ScriptEvent.clientPreferences.roofsHidden = !ScriptEvent.clientPreferences.roofsHidden; - HitSplatDefinition.savePreferences(); - if (ScriptEvent.clientPreferences.roofsHidden) { - class30.addGameMessage(99, "", "Roofs are now all hidden"); - } else { - class30.addGameMessage(99, "", "Roofs will only be removed selectively"); - } - } - - if (var0.equalsIgnoreCase("displayfps")) { - Client.displayFps = !Client.displayFps; - } - - if (var0.equalsIgnoreCase("renderself")) { - Client.renderSelf = !Client.renderSelf; - } - - if (var0.equalsIgnoreCase("mouseovertext")) { - Client.showMouseOverText = !Client.showMouseOverText; - } - - if (Client.staffModLevel >= 2) { - if (var0.equalsIgnoreCase("errortest")) { - throw new RuntimeException(); - } - - if (var0.equalsIgnoreCase("showcoord")) { - Login.worldMap.showCoord = !Login.worldMap.showCoord; - } - - if (var0.equalsIgnoreCase("fpson")) { - Client.displayFps = true; - } - - if (var0.equalsIgnoreCase("fpsoff")) { - Client.displayFps = false; - } - - if (var0.equalsIgnoreCase("gc")) { - System.gc(); - } - - if (var0.equalsIgnoreCase("clientdrop")) { - AbstractWorldMapIcon.method652(); - } - } - - PacketBufferNode var1 = SoundSystem.getPacketBufferNode(ClientPacket.field2213, Client.packetWriter.isaacCipher); - var1.packetBuffer.writeByte(var0.length() + 1); - var1.packetBuffer.writeStringCp1252NullTerminated(var0); - Client.packetWriter.addNode(var1); - } } diff --git a/runescape-client/src/main/java/MilliClock.java b/runescape-client/src/main/java/MilliClock.java index 06b93bc138..735625cd05 100644 --- a/runescape-client/src/main/java/MilliClock.java +++ b/runescape-client/src/main/java/MilliClock.java @@ -4,128 +4,161 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("fg") +@ObfuscatedName("fi") @Implements("MilliClock") public class MilliClock extends Clock { - @ObfuscatedName("bi") - static String field1994; - @ObfuscatedName("a") - long[] field1998; - @ObfuscatedName("t") + @ObfuscatedName("u") + long[] field2017; + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = -1886190585 + intValue = 90836153 ) - int field1995; - @ObfuscatedName("n") + int field2018; + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = 741454683 + intValue = 878139607 ) - int field1996; - @ObfuscatedName("q") + int field2019; + @ObfuscatedName("g") @ObfuscatedGetter( - longValue = 1567518656598544647L + longValue = -4513558875816337439L ) - long field1997; - @ObfuscatedName("v") + long field2022; + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = -1704132259 + intValue = -1976068769 ) - int field1999; - @ObfuscatedName("l") + int field2021; + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = -1589265453 + intValue = 1447162639 ) - int field2000; + int field2020; public MilliClock() { - this.field1998 = new long[10]; - this.field1995 = 256; - this.field1996 = 1; - this.field1999 = 0; - this.field1997 = PlayerAppearance.currentTimeMillis(); + this.field2017 = new long[10]; + this.field2018 = 256; + this.field2019 = 1; + this.field2021 = 0; + this.field2022 = TaskHandler.currentTimeMillis(); for (int var1 = 0; var1 < 10; ++var1) { - this.field1998[var1] = this.field1997; + this.field2017[var1] = this.field2022; } } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "1605126906" + garbageValue = "-26166053" ) @Export("mark") public void mark() { for (int var1 = 0; var1 < 10; ++var1) { - this.field1998[var1] = 0L; + this.field2017[var1] = 0L; } } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(III)I", - garbageValue = "432238723" + signature = "(IIB)I", + garbageValue = "6" ) @Export("wait") public int wait(int var1, int var2) { - int var3 = this.field1995; - int var4 = this.field1996; - this.field1995 = 300; - this.field1996 = 1; - this.field1997 = PlayerAppearance.currentTimeMillis(); - if (this.field1998[this.field2000] == 0L) { - this.field1995 = var3; - this.field1996 = var4; - } else if (this.field1997 > this.field1998[this.field2000]) { - this.field1995 = (int)((long)(var1 * 2560) / (this.field1997 - this.field1998[this.field2000])); + int var3 = this.field2018; + int var4 = this.field2019; + this.field2018 = 300; + this.field2019 = 1; + this.field2022 = TaskHandler.currentTimeMillis(); + if (0L == this.field2017[this.field2020]) { + this.field2018 = var3; + this.field2019 = var4; + } else if (this.field2022 > this.field2017[this.field2020]) { + this.field2018 = (int)((long)(var1 * 2560) / (this.field2022 - this.field2017[this.field2020])); } - if (this.field1995 < 25) { - this.field1995 = 25; + if (this.field2018 < 25) { + this.field2018 = 25; } - if (this.field1995 > 256) { - this.field1995 = 256; - this.field1996 = (int)((long)var1 - (this.field1997 - this.field1998[this.field2000]) / 10L); + if (this.field2018 > 256) { + this.field2018 = 256; + this.field2019 = (int)((long)var1 - (this.field2022 - this.field2017[this.field2020]) / 10L); } - if (this.field1996 > var1) { - this.field1996 = var1; + if (this.field2019 > var1) { + this.field2019 = var1; } - this.field1998[this.field2000] = this.field1997; - this.field2000 = (this.field2000 + 1) % 10; - int var5; - if (this.field1996 > 1) { - for (var5 = 0; var5 < 10; ++var5) { - if (this.field1998[var5] != 0L) { - this.field1998[var5] += (long)this.field1996; + this.field2017[this.field2020] = this.field2022; + this.field2020 = (this.field2020 + 1) % 10; + if (this.field2019 > 1) { + for (int var5 = 0; var5 < 10; ++var5) { + if (this.field2017[var5] != 0L) { + this.field2017[var5] += (long)this.field2019; } } } - if (this.field1996 < var2) { - this.field1996 = var2; + if (this.field2019 < var2) { + this.field2019 = var2; } - ClanChat.method5367((long)this.field1996); + long var10 = (long)this.field2019; + if (var10 > 0L) { + if (0L == var10 % 10L) { + long var7 = var10 - 1L; - for (var5 = 0; this.field1999 < 256; this.field1999 += this.field1995) { - ++var5; + try { + Thread.sleep(var7); + } catch (InterruptedException var16) { + } + + try { + Thread.sleep(1L); + } catch (InterruptedException var15) { + } + } else { + try { + Thread.sleep(var10); + } catch (InterruptedException var14) { + } + } } - this.field1999 &= 255; - return var5; + int var13; + for (var13 = 0; this.field2021 < 256; this.field2021 += this.field2018) { + ++var13; + } + + this.field2021 &= 255; + return var13; } - @ObfuscatedName("km") + @ObfuscatedName("ip") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "436263166" + signature = "([Lhl;Lhl;ZB)V", + garbageValue = "115" ) - static final void method3604() { - Client.field824 = Client.cycleCntr; + @Export("revalidateWidgetScroll") + static void revalidateWidgetScroll(Widget[] var0, Widget var1, boolean var2) { + int var3 = var1.scrollWidth != 0 ? var1.scrollWidth : var1.width; + int var4 = var1.scrollHeight != 0 ? var1.scrollHeight : var1.height; + class225.resizeInterface(var0, var1.id, var3, var4, var2); + if (var1.children != null) { + class225.resizeInterface(var1.children, var1.id, var3, var4, var2); + } + + InterfaceParent var5 = (InterfaceParent)Client.interfaceParents.get((long)var1.id); + if (var5 != null) { + WorldMapSectionType.method272(var5.group, var3, var4, var2); + } + + if (var1.contentType == 1337) { + } + } } diff --git a/runescape-client/src/main/java/Model.java b/runescape-client/src/main/java/Model.java index 5576d47112..e80cad8b66 100644 --- a/runescape-client/src/main/java/Model.java +++ b/runescape-client/src/main/java/Model.java @@ -3,180 +3,180 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("dv") +@ObfuscatedName("df") @Implements("Model") public class Model extends Entity { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Ldv;" + signature = "Ldf;" ) @Export("Model_sharedSequenceModel") static Model Model_sharedSequenceModel; - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("Model_sharedSequenceModelFaceAlphas") static byte[] Model_sharedSequenceModelFaceAlphas; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Ldv;" + signature = "Ldf;" ) @Export("Model_sharedSpotAnimationModel") static Model Model_sharedSpotAnimationModel; - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("Model_sharedSpotAnimationModelFaceAlphas") static byte[] Model_sharedSpotAnimationModelFaceAlphas; - @ObfuscatedName("aj") - static boolean[] field1682; - @ObfuscatedName("ae") - static boolean[] field1683; - @ObfuscatedName("au") + @ObfuscatedName("ac") + static boolean[] field1698; + @ObfuscatedName("az") + static boolean[] field1706; + @ObfuscatedName("at") @Export("modelViewportXs") static int[] modelViewportXs; - @ObfuscatedName("ah") + @ObfuscatedName("ae") @Export("modelViewportYs") static int[] modelViewportYs; + @ObfuscatedName("aj") + static int[] field1681; + @ObfuscatedName("ap") + static int[] field1703; @ObfuscatedName("an") - static int[] field1686; - @ObfuscatedName("af") - static int[] field1674; - @ObfuscatedName("ay") - static int[] field1702; - @ObfuscatedName("az") - static int[] field1689; - @ObfuscatedName("ai") - static int[] field1691; - @ObfuscatedName("ac") - static int[][] field1692; - @ObfuscatedName("at") - static int[] field1693; - @ObfuscatedName("as") - static int[][] field1645; - @ObfuscatedName("ba") - static int[] field1667; - @ObfuscatedName("bg") - static int[] field1696; - @ObfuscatedName("bc") - static int[] field1697; - @ObfuscatedName("bd") - static int[] field1698; - @ObfuscatedName("bx") static int[] field1699; - @ObfuscatedName("bl") - static int[] field1700; - @ObfuscatedName("bh") + @ObfuscatedName("al") + static int[] field1673; + @ObfuscatedName("ax") + static int[] field1684; + @ObfuscatedName("au") + static int[][] field1708; + @ObfuscatedName("as") + static int[] field1709; + @ObfuscatedName("ah") + static int[][] field1710; + @ObfuscatedName("bi") + static int[] field1724; + @ObfuscatedName("bo") + static int[] field1712; + @ObfuscatedName("bx") + static int[] field1713; + @ObfuscatedName("bu") + static int[] field1714; + @ObfuscatedName("bd") + static int[] field1715; + @ObfuscatedName("bn") + static int[] field1707; + @ObfuscatedName("bj") @Export("Model_transformTempX") static int Model_transformTempX; - @ObfuscatedName("bu") + @ObfuscatedName("bm") @Export("Model_transformTempY") static int Model_transformTempY; - @ObfuscatedName("br") + @ObfuscatedName("bq") @Export("Model_transformTempZ") static int Model_transformTempZ; - @ObfuscatedName("bq") - static boolean field1704; - @ObfuscatedName("bt") + @ObfuscatedName("bf") + static boolean field1720; + @ObfuscatedName("ba") @Export("Model_sine") static int[] Model_sine; - @ObfuscatedName("bs") + @ObfuscatedName("bb") @Export("Model_cosine") static int[] Model_cosine; - @ObfuscatedName("bj") - static int[] field1709; - @ObfuscatedName("bm") - static int[] field1688; - @ObfuscatedName("v") + @ObfuscatedName("bg") + static int[] field1725; + @ObfuscatedName("bw") + static int[] field1726; + @ObfuscatedName("z") @Export("verticesCount") int verticesCount; - @ObfuscatedName("l") + @ObfuscatedName("p") @Export("verticesX") int[] verticesX; - @ObfuscatedName("c") + @ObfuscatedName("h") @Export("verticesY") int[] verticesY; - @ObfuscatedName("o") + @ObfuscatedName("y") @Export("verticesZ") int[] verticesZ; - @ObfuscatedName("i") + @ObfuscatedName("w") @Export("indicesCount") int indicesCount; - @ObfuscatedName("d") + @ObfuscatedName("i") @Export("indices1") int[] indices1; - @ObfuscatedName("m") + @ObfuscatedName("k") @Export("indices2") int[] indices2; - @ObfuscatedName("p") + @ObfuscatedName("x") @Export("indices3") int[] indices3; - @ObfuscatedName("h") + @ObfuscatedName("o") @Export("faceColors1") int[] faceColors1; - @ObfuscatedName("k") + @ObfuscatedName("e") @Export("faceColors2") int[] faceColors2; - @ObfuscatedName("x") + @ObfuscatedName("n") @Export("faceColors3") int[] faceColors3; - @ObfuscatedName("j") + @ObfuscatedName("r") @Export("faceRenderPriorities") byte[] faceRenderPriorities; - @ObfuscatedName("r") + @ObfuscatedName("c") @Export("faceAlphas") byte[] faceAlphas; - @ObfuscatedName("e") - byte[] field1644; - @ObfuscatedName("s") + @ObfuscatedName("a") + byte[] field1676; + @ObfuscatedName("d") @Export("faceTextures") short[] faceTextures; - @ObfuscatedName("b") - byte field1662; - @ObfuscatedName("z") - int field1663; - @ObfuscatedName("f") - int[] field1664; - @ObfuscatedName("g") - int[] field1665; - @ObfuscatedName("w") - int[] field1666; - @ObfuscatedName("u") + @ObfuscatedName("s") + byte field1678; + @ObfuscatedName("t") + int field1679; + @ObfuscatedName("m") + int[] field1680; + @ObfuscatedName("v") + int[] field1705; + @ObfuscatedName("q") + int[] field1682; + @ObfuscatedName("l") @Export("vertexLabels") int[][] vertexLabels; - @ObfuscatedName("y") + @ObfuscatedName("j") @Export("faceLabelsAlpha") int[][] faceLabelsAlpha; - @ObfuscatedName("aa") + @ObfuscatedName("af") @Export("isSingleTile") public boolean isSingleTile; - @ObfuscatedName("aw") + @ObfuscatedName("ad") @Export("boundsType") int boundsType; - @ObfuscatedName("ar") + @ObfuscatedName("am") @Export("bottomY") int bottomY; - @ObfuscatedName("aq") + @ObfuscatedName("ai") @Export("xzRadius") int xzRadius; - @ObfuscatedName("ad") + @ObfuscatedName("ag") @Export("diameter") int diameter; - @ObfuscatedName("ag") + @ObfuscatedName("ao") @Export("radius") int radius; - @ObfuscatedName("ak") + @ObfuscatedName("aw") @Export("xMid") int xMid; - @ObfuscatedName("av") + @ObfuscatedName("ak") @Export("yMid") int yMid; - @ObfuscatedName("am") + @ObfuscatedName("aa") @Export("zMid") int zMid; @ObfuscatedName("ab") @Export("xMidOffset") int xMidOffset; - @ObfuscatedName("ax") + @ObfuscatedName("ar") @Export("yMidOffset") int yMidOffset; - @ObfuscatedName("al") + @ObfuscatedName("av") @Export("zMidOffset") int zMidOffset; @@ -185,36 +185,36 @@ public class Model extends Entity { Model_sharedSequenceModelFaceAlphas = new byte[1]; Model_sharedSpotAnimationModel = new Model(); Model_sharedSpotAnimationModelFaceAlphas = new byte[1]; - field1682 = new boolean[4700]; - field1683 = new boolean[4700]; + field1698 = new boolean[4700]; + field1706 = new boolean[4700]; modelViewportXs = new int[4700]; modelViewportYs = new int[4700]; - field1686 = new int[4700]; - field1674 = new int[4700]; - field1702 = new int[4700]; - field1689 = new int[4700]; - field1691 = new int[1600]; - field1692 = new int[1600][512]; - field1693 = new int[12]; - field1645 = new int[12][2000]; - field1667 = new int[2000]; - field1696 = new int[2000]; - field1697 = new int[12]; - field1698 = new int[10]; - field1699 = new int[10]; - field1700 = new int[10]; - field1704 = true; + field1681 = new int[4700]; + field1703 = new int[4700]; + field1699 = new int[4700]; + field1673 = new int[4700]; + field1684 = new int[1600]; + field1708 = new int[1600][512]; + field1709 = new int[12]; + field1710 = new int[12][2000]; + field1724 = new int[2000]; + field1712 = new int[2000]; + field1713 = new int[12]; + field1714 = new int[10]; + field1715 = new int[10]; + field1707 = new int[10]; + field1720 = true; Model_sine = Rasterizer3D.Rasterizer3D_sine; Model_cosine = Rasterizer3D.Rasterizer3D_cosine; - field1709 = Rasterizer3D.Rasterizer3D_colorPalette; - field1688 = Rasterizer3D.field1760; + field1725 = Rasterizer3D.Rasterizer3D_colorPalette; + field1726 = Rasterizer3D.field1771; } Model() { this.verticesCount = 0; this.indicesCount = 0; - this.field1662 = 0; - this.field1663 = 0; + this.field1678 = 0; + this.field1679 = 0; this.isSingleTile = false; this.xMidOffset = -1; this.yMidOffset = -1; @@ -222,13 +222,13 @@ public class Model extends Entity { } @ObfuscatedSignature( - signature = "([Ldv;I)V" + signature = "([Ldf;I)V" ) public Model(Model[] var1, int var2) { this.verticesCount = 0; this.indicesCount = 0; - this.field1662 = 0; - this.field1663 = 0; + this.field1678 = 0; + this.field1679 = 0; this.isSingleTile = false; this.xMidOffset = -1; this.yMidOffset = -1; @@ -239,8 +239,8 @@ public class Model extends Entity { boolean var6 = false; this.verticesCount = 0; this.indicesCount = 0; - this.field1663 = 0; - this.field1662 = -1; + this.field1679 = 0; + this.field1678 = -1; int var7; Model var8; @@ -249,22 +249,22 @@ public class Model extends Entity { if (var8 != null) { this.verticesCount += var8.verticesCount; this.indicesCount += var8.indicesCount; - this.field1663 += var8.field1663; + this.field1679 += var8.field1679; if (var8.faceRenderPriorities != null) { var3 = true; } else { - if (this.field1662 == -1) { - this.field1662 = var8.field1662; + if (this.field1678 == -1) { + this.field1678 = var8.field1678; } - if (this.field1662 != var8.field1662) { + if (this.field1678 != var8.field1678) { var3 = true; } } var4 |= var8.faceAlphas != null; var5 |= var8.faceTextures != null; - var6 |= var8.field1644 != null; + var6 |= var8.field1676 != null; } } @@ -290,18 +290,18 @@ public class Model extends Entity { } if (var6) { - this.field1644 = new byte[this.indicesCount]; + this.field1676 = new byte[this.indicesCount]; } - if (this.field1663 > 0) { - this.field1664 = new int[this.field1663]; - this.field1665 = new int[this.field1663]; - this.field1666 = new int[this.field1663]; + if (this.field1679 > 0) { + this.field1680 = new int[this.field1679]; + this.field1705 = new int[this.field1679]; + this.field1682 = new int[this.field1679]; } this.verticesCount = 0; this.indicesCount = 0; - this.field1663 = 0; + this.field1679 = 0; for (var7 = 0; var7 < var2; ++var7) { var8 = var1[var7]; @@ -318,7 +318,7 @@ public class Model extends Entity { if (var8.faceRenderPriorities != null) { this.faceRenderPriorities[this.indicesCount] = var8.faceRenderPriorities[var9]; } else { - this.faceRenderPriorities[this.indicesCount] = var8.field1662; + this.faceRenderPriorities[this.indicesCount] = var8.field1678; } } @@ -335,21 +335,21 @@ public class Model extends Entity { } if (var6) { - if (var8.field1644 != null && var8.field1644[var9] != -1) { - this.field1644[this.indicesCount] = (byte)(this.field1663 + var8.field1644[var9]); + if (var8.field1676 != null && var8.field1676[var9] != -1) { + this.field1676[this.indicesCount] = (byte)(this.field1679 + var8.field1676[var9]); } else { - this.field1644[this.indicesCount] = -1; + this.field1676[this.indicesCount] = -1; } } ++this.indicesCount; } - for (var9 = 0; var9 < var8.field1663; ++var9) { - this.field1664[this.field1663] = this.verticesCount + var8.field1664[var9]; - this.field1665[this.field1663] = this.verticesCount + var8.field1665[var9]; - this.field1666[this.field1663] = this.verticesCount + var8.field1666[var9]; - ++this.field1663; + for (var9 = 0; var9 < var8.field1679; ++var9) { + this.field1680[this.field1679] = this.verticesCount + var8.field1680[var9]; + this.field1705[this.field1679] = this.verticesCount + var8.field1705[var9]; + this.field1682[this.field1679] = this.verticesCount + var8.field1682[var9]; + ++this.field1679; } for (var9 = 0; var9 < var8.verticesCount; ++var9) { @@ -363,9 +363,9 @@ public class Model extends Entity { } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "([[IIIIZI)Ldv;" + signature = "([[IIIIZI)Ldf;" ) @Export("contourGround") public Model contourGround(int[][] var1, int var2, int var3, int var4, boolean var5, int var6) { @@ -387,7 +387,7 @@ public class Model extends Entity { var11 = new Model(); var11.verticesCount = this.verticesCount; var11.indicesCount = this.indicesCount; - var11.field1663 = this.field1663; + var11.field1679 = this.field1679; var11.verticesX = this.verticesX; var11.verticesZ = this.verticesZ; var11.indices1 = this.indices1; @@ -398,12 +398,12 @@ public class Model extends Entity { var11.faceColors3 = this.faceColors3; var11.faceRenderPriorities = this.faceRenderPriorities; var11.faceAlphas = this.faceAlphas; - var11.field1644 = this.field1644; + var11.field1676 = this.field1676; var11.faceTextures = this.faceTextures; - var11.field1662 = this.field1662; - var11.field1664 = this.field1664; - var11.field1665 = this.field1665; - var11.field1666 = this.field1666; + var11.field1678 = this.field1678; + var11.field1680 = this.field1680; + var11.field1705 = this.field1705; + var11.field1682 = this.field1682; var11.vertexLabels = this.vertexLabels; var11.faceLabelsAlpha = this.faceLabelsAlpha; var11.isSingleTile = this.isSingleTile; @@ -461,9 +461,9 @@ public class Model extends Entity { } } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Z)Ldv;" + signature = "(Z)Ldf;" ) @Export("toSharedSequenceModel") public Model toSharedSequenceModel(boolean var1) { @@ -474,9 +474,9 @@ public class Model extends Entity { return this.buildSharedModel(var1, Model_sharedSequenceModel, Model_sharedSequenceModelFaceAlphas); } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Z)Ldv;" + signature = "(Z)Ldf;" ) @Export("toSharedSpotAnimationModel") public Model toSharedSpotAnimationModel(boolean var1) { @@ -487,15 +487,15 @@ public class Model extends Entity { return this.buildSharedModel(var1, Model_sharedSpotAnimationModel, Model_sharedSpotAnimationModelFaceAlphas); } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(ZLdv;[B)Ldv;" + signature = "(ZLdf;[B)Ldf;" ) @Export("buildSharedModel") Model buildSharedModel(boolean var1, Model var2, byte[] var3) { var2.verticesCount = this.verticesCount; var2.indicesCount = this.indicesCount; - var2.field1663 = this.field1663; + var2.field1679 = this.field1679; if (var2.verticesX == null || var2.verticesX.length < this.verticesCount) { var2.verticesX = new int[this.verticesCount + 100]; var2.verticesY = new int[this.verticesCount + 100]; @@ -531,12 +531,12 @@ public class Model extends Entity { var2.faceColors2 = this.faceColors2; var2.faceColors3 = this.faceColors3; var2.faceRenderPriorities = this.faceRenderPriorities; - var2.field1644 = this.field1644; + var2.field1676 = this.field1676; var2.faceTextures = this.faceTextures; - var2.field1662 = this.field1662; - var2.field1664 = this.field1664; - var2.field1665 = this.field1665; - var2.field1666 = this.field1666; + var2.field1678 = this.field1678; + var2.field1680 = this.field1680; + var2.field1705 = this.field1705; + var2.field1682 = this.field1682; var2.vertexLabels = this.vertexLabels; var2.faceLabelsAlpha = this.faceLabelsAlpha; var2.isSingleTile = this.isSingleTile; @@ -544,7 +544,7 @@ public class Model extends Entity { return var2; } - @ObfuscatedName("v") + @ObfuscatedName("z") @Export("calculateBoundingBox") void calculateBoundingBox(int var1) { if (this.xMidOffset == -1) { @@ -558,9 +558,9 @@ public class Model extends Entity { int var9 = Model_sine[var1]; for (int var10 = 0; var10 < this.verticesCount; ++var10) { - int var11 = Rasterizer3D.method3141(this.verticesX[var10], this.verticesZ[var10], var8, var9); + int var11 = Rasterizer3D.method3039(this.verticesX[var10], this.verticesZ[var10], var8, var9); int var12 = this.verticesY[var10]; - int var13 = Rasterizer3D.method3142(this.verticesX[var10], this.verticesZ[var10], var8, var9); + int var13 = Rasterizer3D.method3081(this.verticesX[var10], this.verticesZ[var10], var8, var9); if (var11 < var2) { var2 = var11; } @@ -608,7 +608,7 @@ public class Model extends Entity { } } - @ObfuscatedName("l") + @ObfuscatedName("p") @Export("calculateBoundsCylinder") public void calculateBoundsCylinder() { if (this.boundsType != 1) { @@ -641,8 +641,8 @@ public class Model extends Entity { } } - @ObfuscatedName("c") - void method3032() { + @ObfuscatedName("h") + void method2960() { if (this.boundsType != 2) { this.boundsType = 2; this.xzRadius = 0; @@ -663,22 +663,22 @@ public class Model extends Entity { } } - @ObfuscatedName("o") - public int method3027() { + @ObfuscatedName("y") + public int method2907() { this.calculateBoundsCylinder(); return this.xzRadius; } - @ObfuscatedName("d") + @ObfuscatedName("i") @Export("resetBounds") void resetBounds() { this.boundsType = 0; this.xMidOffset = -1; } - @ObfuscatedName("m") + @ObfuscatedName("k") @ObfuscatedSignature( - signature = "(Lem;I)V" + signature = "(Ler;I)V" ) @Export("animate") public void animate(Frames var1, int var2) { @@ -700,9 +700,9 @@ public class Model extends Entity { } } - @ObfuscatedName("p") + @ObfuscatedName("x") @ObfuscatedSignature( - signature = "(Lem;ILem;I[I)V" + signature = "(Ler;ILer;I[I)V" ) @Export("animate2") public void animate2(Frames var1, int var2, Frames var3, int var4, int[] var5) { @@ -752,7 +752,7 @@ public class Model extends Entity { } } - @ObfuscatedName("h") + @ObfuscatedName("o") @Export("transform") void transform(int var1, int[] var2, int var3, int var4, int var5) { int var6 = var2.length; @@ -920,7 +920,7 @@ public class Model extends Entity { } } - @ObfuscatedName("k") + @ObfuscatedName("e") @Export("rotateY90Ccw") public void rotateY90Ccw() { for (int var1 = 0; var1 < this.verticesCount; ++var1) { @@ -932,7 +932,7 @@ public class Model extends Entity { this.resetBounds(); } - @ObfuscatedName("x") + @ObfuscatedName("n") @Export("rotateY180") public void rotateY180() { for (int var1 = 0; var1 < this.verticesCount; ++var1) { @@ -943,7 +943,7 @@ public class Model extends Entity { this.resetBounds(); } - @ObfuscatedName("j") + @ObfuscatedName("c") @Export("rotateY270Ccw") public void rotateY270Ccw() { for (int var1 = 0; var1 < this.verticesCount; ++var1) { @@ -955,7 +955,7 @@ public class Model extends Entity { this.resetBounds(); } - @ObfuscatedName("r") + @ObfuscatedName("s") @Export("rotateZ") public void rotateZ(int var1) { int var2 = Model_sine[var1]; @@ -970,7 +970,7 @@ public class Model extends Entity { this.resetBounds(); } - @ObfuscatedName("e") + @ObfuscatedName("t") @Export("offsetBy") public void offsetBy(int var1, int var2, int var3) { for (int var4 = 0; var4 < this.verticesCount; ++var4) { @@ -985,7 +985,7 @@ public class Model extends Entity { this.resetBounds(); } - @ObfuscatedName("s") + @ObfuscatedName("m") @Export("scale") public void scale(int var1, int var2, int var3) { for (int var4 = 0; var4 < this.verticesCount; ++var4) { @@ -997,11 +997,11 @@ public class Model extends Entity { this.resetBounds(); } - @ObfuscatedName("b") - public final void method3044(int var1, int var2, int var3, int var4, int var5, int var6, int var7) { - field1691[0] = -1; + @ObfuscatedName("v") + public final void method2958(int var1, int var2, int var3, int var4, int var5, int var6, int var7) { + field1684[0] = -1; if (this.boundsType != 2 && this.boundsType != 1) { - this.method3032(); + this.method2960(); } int var8 = Rasterizer3D.Rasterizer3D_clipMidX; @@ -1044,13 +1044,13 @@ public class Model extends Entity { var22 += var7; var23 = var21 * var17 - var22 * var16 >> 16; var22 = var21 * var16 + var22 * var17 >> 16; - field1686[var19] = var22 - var18; + field1681[var19] = var22 - var18; modelViewportXs[var19] = var20 * Rasterizer3D.Rasterizer3D_zoom / var22 + var8; modelViewportYs[var19] = var23 * Rasterizer3D.Rasterizer3D_zoom / var22 + var9; - if (this.field1663 > 0) { - field1674[var19] = var20; - field1702[var19] = var23; - field1689[var19] = var22; + if (this.field1679 > 0) { + field1703[var19] = var20; + field1699[var19] = var23; + field1673[var19] = var22; } } @@ -1061,11 +1061,11 @@ public class Model extends Entity { } - @ObfuscatedName("w") - public final void method3046(int var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8) { - field1691[0] = -1; + @ObfuscatedName("q") + public final void method2918(int var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8) { + field1684[0] = -1; if (this.boundsType != 2 && this.boundsType != 1) { - this.method3032(); + this.method2960(); } int var9 = Rasterizer3D.Rasterizer3D_clipMidX; @@ -1108,13 +1108,13 @@ public class Model extends Entity { var23 += var7; var24 = var22 * var18 - var23 * var17 >> 16; var23 = var22 * var17 + var23 * var18 >> 16; - field1686[var20] = var23 - var19; + field1681[var20] = var23 - var19; modelViewportXs[var20] = var9 + var21 * Rasterizer3D.Rasterizer3D_zoom / var8; modelViewportYs[var20] = var10 + var24 * Rasterizer3D.Rasterizer3D_zoom / var8; - if (this.field1663 > 0) { - field1674[var20] = var21; - field1702[var20] = var24; - field1689[var20] = var23; + if (this.field1679 > 0) { + field1703[var20] = var21; + field1699[var20] = var24; + field1673[var20] = var23; } } @@ -1125,19 +1125,20 @@ public class Model extends Entity { } - @ObfuscatedName("u") + @ObfuscatedName("l") @Export("draw0") final void draw0(boolean var1, boolean var2, boolean var3, long var4) { if (this.diameter < 1600) { int var6; for (var6 = 0; var6 < this.diameter; ++var6) { - field1691[var6] = 0; + field1684[var6] = 0; } var6 = var3 ? 20 : 5; int var7; int var8; + int var9; int var10; int var11; int var12; @@ -1145,21 +1146,20 @@ public class Model extends Entity { int var15; int var16; int var18; - int var27; for (var7 = 0; var7 < this.indicesCount; ++var7) { if (this.faceColors3[var7] != -2) { var8 = this.indices1[var7]; - var27 = this.indices2[var7]; + var9 = this.indices2[var7]; var10 = this.indices3[var7]; var11 = modelViewportXs[var8]; - var12 = modelViewportXs[var27]; + var12 = modelViewportXs[var9]; var13 = modelViewportXs[var10]; int var14; int var17; if (!var1 || var11 != -5000 && var12 != -5000 && var13 != -5000) { if (var2) { var15 = modelViewportYs[var8]; - var16 = modelViewportYs[var27]; + var16 = modelViewportYs[var9]; var17 = modelViewportYs[var10]; var18 = var6 + ViewportMouse.ViewportMouse_y; boolean var34; @@ -1190,27 +1190,27 @@ public class Model extends Entity { } } - if ((var11 - var12) * (modelViewportYs[var10] - modelViewportYs[var27]) - (var13 - var12) * (modelViewportYs[var8] - modelViewportYs[var27]) > 0) { - field1683[var7] = false; + if ((var11 - var12) * (modelViewportYs[var10] - modelViewportYs[var9]) - (var13 - var12) * (modelViewportYs[var8] - modelViewportYs[var9]) > 0) { + field1706[var7] = false; if (var11 >= 0 && var12 >= 0 && var13 >= 0 && var11 <= Rasterizer3D.Rasterizer3D_clipWidth && var12 <= Rasterizer3D.Rasterizer3D_clipWidth && var13 <= Rasterizer3D.Rasterizer3D_clipWidth) { - field1682[var7] = false; + field1698[var7] = false; } else { - field1682[var7] = true; + field1698[var7] = true; } - var14 = (field1686[var8] + field1686[var27] + field1686[var10]) / 3 + this.radius; - field1692[var14][field1691[var14]++] = var7; + var14 = (field1681[var8] + field1681[var9] + field1681[var10]) / 3 + this.radius; + field1708[var14][field1684[var14]++] = var7; } } else { - var14 = field1674[var8]; - var15 = field1674[var27]; - var16 = field1674[var10]; - var17 = field1702[var8]; - var18 = field1702[var27]; - int var19 = field1702[var10]; - int var20 = field1689[var8]; - int var21 = field1689[var27]; - int var22 = field1689[var10]; + var14 = field1703[var8]; + var15 = field1703[var9]; + var16 = field1703[var10]; + var17 = field1699[var8]; + var18 = field1699[var9]; + int var19 = field1699[var10]; + int var20 = field1673[var8]; + int var21 = field1673[var9]; + int var22 = field1673[var10]; var14 -= var15; var16 -= var15; var17 -= var18; @@ -1221,79 +1221,79 @@ public class Model extends Entity { int var24 = var20 * var16 - var14 * var22; int var25 = var14 * var19 - var17 * var16; if (var15 * var23 + var18 * var24 + var21 * var25 > 0) { - field1683[var7] = true; - int var26 = (field1686[var8] + field1686[var27] + field1686[var10]) / 3 + this.radius; - field1692[var26][field1691[var26]++] = var7; + field1706[var7] = true; + int var26 = (field1681[var8] + field1681[var9] + field1681[var10]) / 3 + this.radius; + field1708[var26][field1684[var26]++] = var7; } } } } - int[] var9; + int[] var27; if (this.faceRenderPriorities == null) { for (var7 = this.diameter - 1; var7 >= 0; --var7) { - var8 = field1691[var7]; + var8 = field1684[var7]; if (var8 > 0) { - var9 = field1692[var7]; + var27 = field1708[var7]; for (var10 = 0; var10 < var8; ++var10) { - this.method3048(var9[var10]); + this.method2972(var27[var10]); } } } } else { for (var7 = 0; var7 < 12; ++var7) { - field1693[var7] = 0; - field1697[var7] = 0; + field1709[var7] = 0; + field1713[var7] = 0; } for (var7 = this.diameter - 1; var7 >= 0; --var7) { - var8 = field1691[var7]; + var8 = field1684[var7]; if (var8 > 0) { - var9 = field1692[var7]; + var27 = field1708[var7]; for (var10 = 0; var10 < var8; ++var10) { - var11 = var9[var10]; + var11 = var27[var10]; byte var33 = this.faceRenderPriorities[var11]; - var13 = field1693[var33]++; - field1645[var33][var13] = var11; + var13 = field1709[var33]++; + field1710[var33][var13] = var11; if (var33 < 10) { - int[] var10000 = field1697; + int[] var10000 = field1713; var10000[var33] += var7; } else if (var33 == 10) { - field1667[var13] = var7; + field1724[var13] = var7; } else { - field1696[var13] = var7; + field1712[var13] = var7; } } } } var7 = 0; - if (field1693[1] > 0 || field1693[2] > 0) { - var7 = (field1697[1] + field1697[2]) / (field1693[1] + field1693[2]); + if (field1709[1] > 0 || field1709[2] > 0) { + var7 = (field1713[1] + field1713[2]) / (field1709[1] + field1709[2]); } var8 = 0; - if (field1693[3] > 0 || field1693[4] > 0) { - var8 = (field1697[3] + field1697[4]) / (field1693[3] + field1693[4]); + if (field1709[3] > 0 || field1709[4] > 0) { + var8 = (field1713[3] + field1713[4]) / (field1709[3] + field1709[4]); } - var27 = 0; - if (field1693[6] > 0 || field1693[8] > 0) { - var27 = (field1697[8] + field1697[6]) / (field1693[8] + field1693[6]); + var9 = 0; + if (field1709[6] > 0 || field1709[8] > 0) { + var9 = (field1713[8] + field1713[6]) / (field1709[8] + field1709[6]); } var11 = 0; - var12 = field1693[10]; - int[] var30 = field1645[10]; - int[] var31 = field1667; + var12 = field1709[10]; + int[] var30 = field1710[10]; + int[] var31 = field1724; if (var11 == var12) { var11 = 0; - var12 = field1693[11]; - var30 = field1645[11]; - var31 = field1696; + var12 = field1709[11]; + var30 = field1710[11]; + var31 = field1712; } if (var11 < var12) { @@ -1304,12 +1304,12 @@ public class Model extends Entity { for (var15 = 0; var15 < 10; ++var15) { while (var15 == 0 && var10 > var7) { - this.method3048(var30[var11++]); - if (var11 == var12 && var30 != field1645[11]) { + this.method2972(var30[var11++]); + if (var11 == var12 && var30 != field1710[11]) { var11 = 0; - var12 = field1693[11]; - var30 = field1645[11]; - var31 = field1696; + var12 = field1709[11]; + var30 = field1710[11]; + var31 = field1712; } if (var11 < var12) { @@ -1320,12 +1320,12 @@ public class Model extends Entity { } while (var15 == 3 && var10 > var8) { - this.method3048(var30[var11++]); - if (var11 == var12 && var30 != field1645[11]) { + this.method2972(var30[var11++]); + if (var11 == var12 && var30 != field1710[11]) { var11 = 0; - var12 = field1693[11]; - var30 = field1645[11]; - var31 = field1696; + var12 = field1709[11]; + var30 = field1710[11]; + var31 = field1712; } if (var11 < var12) { @@ -1335,13 +1335,13 @@ public class Model extends Entity { } } - while (var15 == 5 && var10 > var27) { - this.method3048(var30[var11++]); - if (var11 == var12 && var30 != field1645[11]) { + while (var15 == 5 && var10 > var9) { + this.method2972(var30[var11++]); + if (var11 == var12 && var30 != field1710[11]) { var11 = 0; - var12 = field1693[11]; - var30 = field1645[11]; - var31 = field1696; + var12 = field1709[11]; + var30 = field1710[11]; + var31 = field1712; } if (var11 < var12) { @@ -1351,21 +1351,21 @@ public class Model extends Entity { } } - var16 = field1693[var15]; - int[] var32 = field1645[var15]; + var16 = field1709[var15]; + int[] var32 = field1710[var15]; for (var18 = 0; var18 < var16; ++var18) { - this.method3048(var32[var18]); + this.method2972(var32[var18]); } } while (var10 != -1000) { - this.method3048(var30[var11++]); - if (var11 == var12 && var30 != field1645[11]) { + this.method2972(var30[var11++]); + if (var11 == var12 && var30 != field1710[11]) { var11 = 0; - var30 = field1645[11]; - var12 = field1693[11]; - var31 = field1696; + var30 = field1710[11]; + var12 = field1709[11]; + var31 = field1712; } if (var11 < var12) { @@ -1379,15 +1379,15 @@ public class Model extends Entity { } } - @ObfuscatedName("ad") - final void method3048(int var1) { - if (field1683[var1]) { - this.method3049(var1); + @ObfuscatedName("j") + final void method2972(int var1) { + if (field1706[var1]) { + this.method2925(var1); } else { int var2 = this.indices1[var1]; int var3 = this.indices2[var1]; int var4 = this.indices3[var1]; - Rasterizer3D.field1745 = field1682[var1]; + Rasterizer3D.field1757 = field1698[var1]; if (this.faceAlphas == null) { Rasterizer3D.Rasterizer3D_alpha = 0; } else { @@ -1398,11 +1398,11 @@ public class Model extends Entity { int var5; int var6; int var7; - if (this.field1644 != null && this.field1644[var1] != -1) { - int var8 = this.field1644[var1] & 255; - var5 = this.field1664[var8]; - var6 = this.field1665[var8]; - var7 = this.field1666[var8]; + if (this.field1676 != null && this.field1676[var1] != -1) { + int var8 = this.field1676[var1] & 255; + var5 = this.field1680[var8]; + var6 = this.field1705[var8]; + var7 = this.field1682[var8]; } else { var5 = var2; var6 = var3; @@ -1410,30 +1410,30 @@ public class Model extends Entity { } if (this.faceColors3[var1] == -1) { - Rasterizer3D.method3187(modelViewportYs[var2], modelViewportYs[var3], modelViewportYs[var4], modelViewportXs[var2], modelViewportXs[var3], modelViewportXs[var4], this.faceColors1[var1], this.faceColors1[var1], this.faceColors1[var1], field1674[var5], field1674[var6], field1674[var7], field1702[var5], field1702[var6], field1702[var7], field1689[var5], field1689[var6], field1689[var7], this.faceTextures[var1]); + Rasterizer3D.method3034(modelViewportYs[var2], modelViewportYs[var3], modelViewportYs[var4], modelViewportXs[var2], modelViewportXs[var3], modelViewportXs[var4], this.faceColors1[var1], this.faceColors1[var1], this.faceColors1[var1], field1703[var5], field1703[var6], field1703[var7], field1699[var5], field1699[var6], field1699[var7], field1673[var5], field1673[var6], field1673[var7], this.faceTextures[var1]); } else { - Rasterizer3D.method3187(modelViewportYs[var2], modelViewportYs[var3], modelViewportYs[var4], modelViewportXs[var2], modelViewportXs[var3], modelViewportXs[var4], this.faceColors1[var1], this.faceColors2[var1], this.faceColors3[var1], field1674[var5], field1674[var6], field1674[var7], field1702[var5], field1702[var6], field1702[var7], field1689[var5], field1689[var6], field1689[var7], this.faceTextures[var1]); + Rasterizer3D.method3034(modelViewportYs[var2], modelViewportYs[var3], modelViewportYs[var4], modelViewportXs[var2], modelViewportXs[var3], modelViewportXs[var4], this.faceColors1[var1], this.faceColors2[var1], this.faceColors3[var1], field1703[var5], field1703[var6], field1703[var7], field1699[var5], field1699[var6], field1699[var7], field1673[var5], field1673[var6], field1673[var7], this.faceTextures[var1]); } } else if (this.faceColors3[var1] == -1) { - Rasterizer3D.method3134(modelViewportYs[var2], modelViewportYs[var3], modelViewportYs[var4], modelViewportXs[var2], modelViewportXs[var3], modelViewportXs[var4], field1709[this.faceColors1[var1]]); + Rasterizer3D.method3055(modelViewportYs[var2], modelViewportYs[var3], modelViewportYs[var4], modelViewportXs[var2], modelViewportXs[var3], modelViewportXs[var4], field1725[this.faceColors1[var1]]); } else { - Rasterizer3D.method3132(modelViewportYs[var2], modelViewportYs[var3], modelViewportYs[var4], modelViewportXs[var2], modelViewportXs[var3], modelViewportXs[var4], this.faceColors1[var1], this.faceColors2[var1], this.faceColors3[var1]); + Rasterizer3D.method3030(modelViewportYs[var2], modelViewportYs[var3], modelViewportYs[var4], modelViewportXs[var2], modelViewportXs[var3], modelViewportXs[var4], this.faceColors1[var1], this.faceColors2[var1], this.faceColors3[var1]); } } } - @ObfuscatedName("ag") - final void method3049(int var1) { + @ObfuscatedName("ad") + final void method2925(int var1) { int var2 = Rasterizer3D.Rasterizer3D_clipMidX; int var3 = Rasterizer3D.Rasterizer3D_clipMidY; int var4 = 0; int var5 = this.indices1[var1]; int var6 = this.indices2[var1]; int var7 = this.indices3[var1]; - int var8 = field1689[var5]; - int var9 = field1689[var6]; - int var10 = field1689[var7]; + int var8 = field1673[var5]; + int var9 = field1673[var6]; + int var10 = field1673[var7]; if (this.faceAlphas == null) { Rasterizer3D.Rasterizer3D_alpha = 0; } else { @@ -1445,96 +1445,96 @@ public class Model extends Entity { int var13; int var14; if (var8 >= 50) { - field1698[var4] = modelViewportXs[var5]; - field1699[var4] = modelViewportYs[var5]; - field1700[var4++] = this.faceColors1[var1]; + field1714[var4] = modelViewportXs[var5]; + field1715[var4] = modelViewportYs[var5]; + field1707[var4++] = this.faceColors1[var1]; } else { - var11 = field1674[var5]; - var12 = field1702[var5]; + var11 = field1703[var5]; + var12 = field1699[var5]; var13 = this.faceColors1[var1]; if (var10 >= 50) { - var14 = field1688[var10 - var8] * (50 - var8); - field1698[var4] = var2 + Rasterizer3D.Rasterizer3D_zoom * (var11 + ((field1674[var7] - var11) * var14 >> 16)) / 50; - field1699[var4] = var3 + Rasterizer3D.Rasterizer3D_zoom * (var12 + ((field1702[var7] - var12) * var14 >> 16)) / 50; - field1700[var4++] = var13 + ((this.faceColors3[var1] - var13) * var14 >> 16); + var14 = field1726[var10 - var8] * (50 - var8); + field1714[var4] = var2 + Rasterizer3D.Rasterizer3D_zoom * (var11 + ((field1703[var7] - var11) * var14 >> 16)) / 50; + field1715[var4] = var3 + Rasterizer3D.Rasterizer3D_zoom * (var12 + ((field1699[var7] - var12) * var14 >> 16)) / 50; + field1707[var4++] = var13 + ((this.faceColors3[var1] - var13) * var14 >> 16); } if (var9 >= 50) { - var14 = field1688[var9 - var8] * (50 - var8); - field1698[var4] = var2 + Rasterizer3D.Rasterizer3D_zoom * (var11 + ((field1674[var6] - var11) * var14 >> 16)) / 50; - field1699[var4] = var3 + Rasterizer3D.Rasterizer3D_zoom * (var12 + ((field1702[var6] - var12) * var14 >> 16)) / 50; - field1700[var4++] = var13 + ((this.faceColors2[var1] - var13) * var14 >> 16); + var14 = field1726[var9 - var8] * (50 - var8); + field1714[var4] = var2 + Rasterizer3D.Rasterizer3D_zoom * (var11 + ((field1703[var6] - var11) * var14 >> 16)) / 50; + field1715[var4] = var3 + Rasterizer3D.Rasterizer3D_zoom * (var12 + ((field1699[var6] - var12) * var14 >> 16)) / 50; + field1707[var4++] = var13 + ((this.faceColors2[var1] - var13) * var14 >> 16); } } if (var9 >= 50) { - field1698[var4] = modelViewportXs[var6]; - field1699[var4] = modelViewportYs[var6]; - field1700[var4++] = this.faceColors2[var1]; + field1714[var4] = modelViewportXs[var6]; + field1715[var4] = modelViewportYs[var6]; + field1707[var4++] = this.faceColors2[var1]; } else { - var11 = field1674[var6]; - var12 = field1702[var6]; + var11 = field1703[var6]; + var12 = field1699[var6]; var13 = this.faceColors2[var1]; if (var8 >= 50) { - var14 = field1688[var8 - var9] * (50 - var9); - field1698[var4] = var2 + Rasterizer3D.Rasterizer3D_zoom * (var11 + ((field1674[var5] - var11) * var14 >> 16)) / 50; - field1699[var4] = var3 + Rasterizer3D.Rasterizer3D_zoom * (var12 + ((field1702[var5] - var12) * var14 >> 16)) / 50; - field1700[var4++] = var13 + ((this.faceColors1[var1] - var13) * var14 >> 16); + var14 = field1726[var8 - var9] * (50 - var9); + field1714[var4] = var2 + Rasterizer3D.Rasterizer3D_zoom * (var11 + ((field1703[var5] - var11) * var14 >> 16)) / 50; + field1715[var4] = var3 + Rasterizer3D.Rasterizer3D_zoom * (var12 + ((field1699[var5] - var12) * var14 >> 16)) / 50; + field1707[var4++] = var13 + ((this.faceColors1[var1] - var13) * var14 >> 16); } if (var10 >= 50) { - var14 = field1688[var10 - var9] * (50 - var9); - field1698[var4] = var2 + Rasterizer3D.Rasterizer3D_zoom * (var11 + ((field1674[var7] - var11) * var14 >> 16)) / 50; - field1699[var4] = var3 + Rasterizer3D.Rasterizer3D_zoom * (var12 + ((field1702[var7] - var12) * var14 >> 16)) / 50; - field1700[var4++] = var13 + ((this.faceColors3[var1] - var13) * var14 >> 16); + var14 = field1726[var10 - var9] * (50 - var9); + field1714[var4] = var2 + Rasterizer3D.Rasterizer3D_zoom * (var11 + ((field1703[var7] - var11) * var14 >> 16)) / 50; + field1715[var4] = var3 + Rasterizer3D.Rasterizer3D_zoom * (var12 + ((field1699[var7] - var12) * var14 >> 16)) / 50; + field1707[var4++] = var13 + ((this.faceColors3[var1] - var13) * var14 >> 16); } } if (var10 >= 50) { - field1698[var4] = modelViewportXs[var7]; - field1699[var4] = modelViewportYs[var7]; - field1700[var4++] = this.faceColors3[var1]; + field1714[var4] = modelViewportXs[var7]; + field1715[var4] = modelViewportYs[var7]; + field1707[var4++] = this.faceColors3[var1]; } else { - var11 = field1674[var7]; - var12 = field1702[var7]; + var11 = field1703[var7]; + var12 = field1699[var7]; var13 = this.faceColors3[var1]; if (var9 >= 50) { - var14 = field1688[var9 - var10] * (50 - var10); - field1698[var4] = var2 + Rasterizer3D.Rasterizer3D_zoom * (var11 + ((field1674[var6] - var11) * var14 >> 16)) / 50; - field1699[var4] = var3 + Rasterizer3D.Rasterizer3D_zoom * (var12 + ((field1702[var6] - var12) * var14 >> 16)) / 50; - field1700[var4++] = var13 + ((this.faceColors2[var1] - var13) * var14 >> 16); + var14 = field1726[var9 - var10] * (50 - var10); + field1714[var4] = var2 + Rasterizer3D.Rasterizer3D_zoom * (var11 + ((field1703[var6] - var11) * var14 >> 16)) / 50; + field1715[var4] = var3 + Rasterizer3D.Rasterizer3D_zoom * (var12 + ((field1699[var6] - var12) * var14 >> 16)) / 50; + field1707[var4++] = var13 + ((this.faceColors2[var1] - var13) * var14 >> 16); } if (var8 >= 50) { - var14 = field1688[var8 - var10] * (50 - var10); - field1698[var4] = var2 + Rasterizer3D.Rasterizer3D_zoom * (var11 + ((field1674[var5] - var11) * var14 >> 16)) / 50; - field1699[var4] = var3 + Rasterizer3D.Rasterizer3D_zoom * (var12 + ((field1702[var5] - var12) * var14 >> 16)) / 50; - field1700[var4++] = var13 + ((this.faceColors1[var1] - var13) * var14 >> 16); + var14 = field1726[var8 - var10] * (50 - var10); + field1714[var4] = var2 + Rasterizer3D.Rasterizer3D_zoom * (var11 + ((field1703[var5] - var11) * var14 >> 16)) / 50; + field1715[var4] = var3 + Rasterizer3D.Rasterizer3D_zoom * (var12 + ((field1699[var5] - var12) * var14 >> 16)) / 50; + field1707[var4++] = var13 + ((this.faceColors1[var1] - var13) * var14 >> 16); } } - var11 = field1698[0]; - var12 = field1698[1]; - var13 = field1698[2]; - var14 = field1699[0]; - int var15 = field1699[1]; - int var16 = field1699[2]; - Rasterizer3D.field1745 = false; + var11 = field1714[0]; + var12 = field1714[1]; + var13 = field1714[2]; + var14 = field1715[0]; + int var15 = field1715[1]; + int var16 = field1715[2]; + Rasterizer3D.field1757 = false; int var17; int var18; int var19; int var20; if (var4 == 3) { if (var11 < 0 || var12 < 0 || var13 < 0 || var11 > Rasterizer3D.Rasterizer3D_clipWidth || var12 > Rasterizer3D.Rasterizer3D_clipWidth || var13 > Rasterizer3D.Rasterizer3D_clipWidth) { - Rasterizer3D.field1745 = true; + Rasterizer3D.field1757 = true; } if (this.faceTextures != null && this.faceTextures[var1] != -1) { - if (this.field1644 != null && this.field1644[var1] != -1) { - var20 = this.field1644[var1] & 255; - var17 = this.field1664[var20]; - var18 = this.field1665[var20]; - var19 = this.field1666[var20]; + if (this.field1676 != null && this.field1676[var1] != -1) { + var20 = this.field1676[var1] & 255; + var17 = this.field1680[var20]; + var18 = this.field1705[var20]; + var19 = this.field1682[var20]; } else { var17 = var5; var18 = var6; @@ -1542,28 +1542,28 @@ public class Model extends Entity { } if (this.faceColors3[var1] == -1) { - Rasterizer3D.method3187(var14, var15, var16, var11, var12, var13, this.faceColors1[var1], this.faceColors1[var1], this.faceColors1[var1], field1674[var17], field1674[var18], field1674[var19], field1702[var17], field1702[var18], field1702[var19], field1689[var17], field1689[var18], field1689[var19], this.faceTextures[var1]); + Rasterizer3D.method3034(var14, var15, var16, var11, var12, var13, this.faceColors1[var1], this.faceColors1[var1], this.faceColors1[var1], field1703[var17], field1703[var18], field1703[var19], field1699[var17], field1699[var18], field1699[var19], field1673[var17], field1673[var18], field1673[var19], this.faceTextures[var1]); } else { - Rasterizer3D.method3187(var14, var15, var16, var11, var12, var13, field1700[0], field1700[1], field1700[2], field1674[var17], field1674[var18], field1674[var19], field1702[var17], field1702[var18], field1702[var19], field1689[var17], field1689[var18], field1689[var19], this.faceTextures[var1]); + Rasterizer3D.method3034(var14, var15, var16, var11, var12, var13, field1707[0], field1707[1], field1707[2], field1703[var17], field1703[var18], field1703[var19], field1699[var17], field1699[var18], field1699[var19], field1673[var17], field1673[var18], field1673[var19], this.faceTextures[var1]); } } else if (this.faceColors3[var1] == -1) { - Rasterizer3D.method3134(var14, var15, var16, var11, var12, var13, field1709[this.faceColors1[var1]]); + Rasterizer3D.method3055(var14, var15, var16, var11, var12, var13, field1725[this.faceColors1[var1]]); } else { - Rasterizer3D.method3132(var14, var15, var16, var11, var12, var13, field1700[0], field1700[1], field1700[2]); + Rasterizer3D.method3030(var14, var15, var16, var11, var12, var13, field1707[0], field1707[1], field1707[2]); } } if (var4 == 4) { - if (var11 < 0 || var12 < 0 || var13 < 0 || var11 > Rasterizer3D.Rasterizer3D_clipWidth || var12 > Rasterizer3D.Rasterizer3D_clipWidth || var13 > Rasterizer3D.Rasterizer3D_clipWidth || field1698[3] < 0 || field1698[3] > Rasterizer3D.Rasterizer3D_clipWidth) { - Rasterizer3D.field1745 = true; + if (var11 < 0 || var12 < 0 || var13 < 0 || var11 > Rasterizer3D.Rasterizer3D_clipWidth || var12 > Rasterizer3D.Rasterizer3D_clipWidth || var13 > Rasterizer3D.Rasterizer3D_clipWidth || field1714[3] < 0 || field1714[3] > Rasterizer3D.Rasterizer3D_clipWidth) { + Rasterizer3D.field1757 = true; } if (this.faceTextures != null && this.faceTextures[var1] != -1) { - if (this.field1644 != null && this.field1644[var1] != -1) { - var20 = this.field1644[var1] & 255; - var17 = this.field1664[var20]; - var18 = this.field1665[var20]; - var19 = this.field1666[var20]; + if (this.field1676 != null && this.field1676[var1] != -1) { + var20 = this.field1676[var1] & 255; + var17 = this.field1680[var20]; + var18 = this.field1705[var20]; + var19 = this.field1682[var20]; } else { var17 = var5; var18 = var6; @@ -1572,28 +1572,28 @@ public class Model extends Entity { short var21 = this.faceTextures[var1]; if (this.faceColors3[var1] == -1) { - Rasterizer3D.method3187(var14, var15, var16, var11, var12, var13, this.faceColors1[var1], this.faceColors1[var1], this.faceColors1[var1], field1674[var17], field1674[var18], field1674[var19], field1702[var17], field1702[var18], field1702[var19], field1689[var17], field1689[var18], field1689[var19], var21); - Rasterizer3D.method3187(var14, var16, field1699[3], var11, var13, field1698[3], this.faceColors1[var1], this.faceColors1[var1], this.faceColors1[var1], field1674[var17], field1674[var18], field1674[var19], field1702[var17], field1702[var18], field1702[var19], field1689[var17], field1689[var18], field1689[var19], var21); + Rasterizer3D.method3034(var14, var15, var16, var11, var12, var13, this.faceColors1[var1], this.faceColors1[var1], this.faceColors1[var1], field1703[var17], field1703[var18], field1703[var19], field1699[var17], field1699[var18], field1699[var19], field1673[var17], field1673[var18], field1673[var19], var21); + Rasterizer3D.method3034(var14, var16, field1715[3], var11, var13, field1714[3], this.faceColors1[var1], this.faceColors1[var1], this.faceColors1[var1], field1703[var17], field1703[var18], field1703[var19], field1699[var17], field1699[var18], field1699[var19], field1673[var17], field1673[var18], field1673[var19], var21); } else { - Rasterizer3D.method3187(var14, var15, var16, var11, var12, var13, field1700[0], field1700[1], field1700[2], field1674[var17], field1674[var18], field1674[var19], field1702[var17], field1702[var18], field1702[var19], field1689[var17], field1689[var18], field1689[var19], var21); - Rasterizer3D.method3187(var14, var16, field1699[3], var11, var13, field1698[3], field1700[0], field1700[2], field1700[3], field1674[var17], field1674[var18], field1674[var19], field1702[var17], field1702[var18], field1702[var19], field1689[var17], field1689[var18], field1689[var19], var21); + Rasterizer3D.method3034(var14, var15, var16, var11, var12, var13, field1707[0], field1707[1], field1707[2], field1703[var17], field1703[var18], field1703[var19], field1699[var17], field1699[var18], field1699[var19], field1673[var17], field1673[var18], field1673[var19], var21); + Rasterizer3D.method3034(var14, var16, field1715[3], var11, var13, field1714[3], field1707[0], field1707[2], field1707[3], field1703[var17], field1703[var18], field1703[var19], field1699[var17], field1699[var18], field1699[var19], field1673[var17], field1673[var18], field1673[var19], var21); } } else if (this.faceColors3[var1] == -1) { - var17 = field1709[this.faceColors1[var1]]; - Rasterizer3D.method3134(var14, var15, var16, var11, var12, var13, var17); - Rasterizer3D.method3134(var14, var16, field1699[3], var11, var13, field1698[3], var17); + var17 = field1725[this.faceColors1[var1]]; + Rasterizer3D.method3055(var14, var15, var16, var11, var12, var13, var17); + Rasterizer3D.method3055(var14, var16, field1715[3], var11, var13, field1714[3], var17); } else { - Rasterizer3D.method3132(var14, var15, var16, var11, var12, var13, field1700[0], field1700[1], field1700[2]); - Rasterizer3D.method3132(var14, var16, field1699[3], var11, var13, field1698[3], field1700[0], field1700[2], field1700[3]); + Rasterizer3D.method3030(var14, var15, var16, var11, var12, var13, field1707[0], field1707[1], field1707[2]); + Rasterizer3D.method3030(var14, var16, field1715[3], var11, var13, field1714[3], field1707[0], field1707[2], field1707[3]); } } } - @ObfuscatedName("ci") + @ObfuscatedName("ch") @Export("draw") void draw(int var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, long var9) { - field1691[0] = -1; + field1684[0] = -1; if (this.boundsType != 1) { this.calculateBoundsCylinder(); } @@ -1623,174 +1623,104 @@ public class Model extends Entity { var25 = true; } - boolean var26 = var25 || this.field1663 > 0; - int var27 = Calendar.method4102(); - int var28 = ViewportMouse.ViewportMouse_y; - boolean var30 = GrandExchangeOfferOwnWorldComparator.method1376(); - boolean var31 = GraphicsObject.method2155(var9); - boolean var32 = false; + boolean var26 = var25 || this.field1679 > 0; + int var27 = ViewportMouse.ViewportMouse_x; + int var29 = class192.method3730(); + boolean var30 = ViewportMouse.ViewportMouse_isInViewport; + boolean var32 = WallDecoration.method3340(var9); + boolean var33 = false; + int var35; int var36; int var37; - int var38; - int var39; - int var47; - int var53; - int var54; - int var55; - if (var31 && var30) { - boolean var33 = false; - if (field1704) { - boolean var34; - if (!GrandExchangeOfferOwnWorldComparator.method1376()) { - var34 = false; - } else { - int var42; - int var43; - int var44; - if (!ViewportMouse.ViewportMouse_false0) { - var36 = Scene.Scene_cameraPitchSine; - var37 = Scene.Scene_cameraPitchCosine; - var38 = Scene.Scene_cameraYawSine; - var39 = Scene.Scene_cameraYawCosine; - byte var40 = 50; - short var41 = 3500; - var42 = (ViewportMouse.ViewportMouse_x - Rasterizer3D.Rasterizer3D_clipMidX) * var40 / Rasterizer3D.Rasterizer3D_zoom; - var43 = (ViewportMouse.ViewportMouse_y - Rasterizer3D.Rasterizer3D_clipMidY) * var40 / Rasterizer3D.Rasterizer3D_zoom; - var44 = (ViewportMouse.ViewportMouse_x - Rasterizer3D.Rasterizer3D_clipMidX) * var41 / Rasterizer3D.Rasterizer3D_zoom; - int var45 = (ViewportMouse.ViewportMouse_y - Rasterizer3D.Rasterizer3D_clipMidY) * var41 / Rasterizer3D.Rasterizer3D_zoom; - int var46 = Rasterizer3D.method3145(var43, var40, var37, var36); - var54 = Rasterizer3D.method3122(var43, var40, var37, var36); - var43 = var46; - var46 = Rasterizer3D.method3145(var45, var41, var37, var36); - var55 = Rasterizer3D.method3122(var45, var41, var37, var36); - var45 = var46; - var46 = Rasterizer3D.method3148(var42, var54, var39, var38); - var54 = Rasterizer3D.method3144(var42, var54, var39, var38); - var42 = var46; - var46 = Rasterizer3D.method3148(var44, var55, var39, var38); - var55 = Rasterizer3D.method3144(var44, var55, var39, var38); - ViewportMouse.field1717 = (var42 + var46) / 2; - ViewportMouse.field1718 = (var43 + var45) / 2; - ArchiveDiskActionHandler.field3133 = (var55 + var54) / 2; - ViewportMouse.field1719 = (var46 - var42) / 2; - WorldMapID.field260 = (var45 - var43) / 2; - Interpreter.field1063 = (var55 - var54) / 2; - JagexCache.field2030 = Math.abs(ViewportMouse.field1719); - class83.field1146 = Math.abs(WorldMapID.field260); - ViewportMouse.field1720 = Math.abs(Interpreter.field1063); - } - - var36 = this.xMid + var6; - var37 = var7 + this.yMid; - var38 = var8 + this.zMid; - var39 = this.xMidOffset; - var54 = this.yMidOffset; - var55 = this.zMidOffset; - var42 = ViewportMouse.field1717 - var36; - var43 = ViewportMouse.field1718 - var37; - var44 = ArchiveDiskActionHandler.field3133 - var38; - if (Math.abs(var42) > var39 + JagexCache.field2030) { - var34 = false; - } else if (Math.abs(var43) > var54 + class83.field1146) { - var34 = false; - } else if (Math.abs(var44) > var55 + ViewportMouse.field1720) { - var34 = false; - } else if (Math.abs(var44 * WorldMapID.field260 - var43 * Interpreter.field1063) > var54 * ViewportMouse.field1720 + var55 * class83.field1146) { - var34 = false; - } else if (Math.abs(var42 * Interpreter.field1063 - var44 * ViewportMouse.field1719) > var39 * ViewportMouse.field1720 + var55 * JagexCache.field2030) { - var34 = false; - } else if (Math.abs(var43 * ViewportMouse.field1719 - var42 * WorldMapID.field260) > var39 * class83.field1146 + var54 * JagexCache.field2030) { - var34 = false; - } else { - var34 = true; - } - } - - var33 = var34; + if (var32 && var30) { + boolean var34 = false; + if (field1720) { + var34 = Interpreter.method1969(this, var6, var7, var8); } else { - var53 = var12 - var13; - if (var53 <= 50) { - var53 = 50; + var35 = var12 - var13; + if (var35 <= 50) { + var35 = 50; } if (var15 > 0) { var16 /= var14; - var17 /= var53; + var17 /= var35; } else { var17 /= var14; - var16 /= var53; + var16 /= var35; } if (var18 > 0) { var22 /= var14; - var20 /= var53; + var20 /= var35; } else { var20 /= var14; - var22 /= var53; + var22 /= var35; } - var47 = var27 - Rasterizer3D.Rasterizer3D_clipMidX; - var36 = var28 - Rasterizer3D.Rasterizer3D_clipMidY; - if (var47 > var16 && var47 < var17 && var36 > var22 && var36 < var20) { - var33 = true; + var36 = var27 - Rasterizer3D.Rasterizer3D_clipMidX; + var37 = var29 - Rasterizer3D.Rasterizer3D_clipMidY; + if (var36 > var16 && var36 < var17 && var37 > var22 && var37 < var20) { + var34 = true; } } - if (var33) { + if (var34) { if (this.isSingleTile) { ViewportMouse.ViewportMouse_entityTags[++ViewportMouse.ViewportMouse_entityCount - 1] = var9; } else { - var32 = true; + var33 = true; } } } - int var52 = Rasterizer3D.Rasterizer3D_clipMidX; - var53 = Rasterizer3D.Rasterizer3D_clipMidY; - var47 = 0; + int var47 = Rasterizer3D.Rasterizer3D_clipMidX; + var35 = Rasterizer3D.Rasterizer3D_clipMidY; var36 = 0; + var37 = 0; if (var1 != 0) { - var47 = Model_sine[var1]; - var36 = Model_cosine[var1]; + var36 = Model_sine[var1]; + var37 = Model_cosine[var1]; } - for (var37 = 0; var37 < this.verticesCount; ++var37) { - var38 = this.verticesX[var37]; - var39 = this.verticesY[var37]; - var54 = this.verticesZ[var37]; + for (int var38 = 0; var38 < this.verticesCount; ++var38) { + int var39 = this.verticesX[var38]; + int var40 = this.verticesY[var38]; + int var41 = this.verticesZ[var38]; + int var42; if (var1 != 0) { - var55 = var54 * var47 + var38 * var36 >> 16; - var54 = var54 * var36 - var38 * var47 >> 16; - var38 = var55; + var42 = var41 * var36 + var39 * var37 >> 16; + var41 = var41 * var37 - var39 * var36 >> 16; + var39 = var42; } - var38 += var6; - var39 += var7; - var54 += var8; - var55 = var54 * var4 + var5 * var38 >> 16; - var54 = var5 * var54 - var38 * var4 >> 16; - var38 = var55; - var55 = var3 * var39 - var54 * var2 >> 16; - var54 = var39 * var2 + var3 * var54 >> 16; - field1686[var37] = var54 - var12; - if (var54 >= 50) { - modelViewportXs[var37] = var38 * Rasterizer3D.Rasterizer3D_zoom / var54 + var52; - modelViewportYs[var37] = var55 * Rasterizer3D.Rasterizer3D_zoom / var54 + var53; + var39 += var6; + var40 += var7; + var41 += var8; + var42 = var41 * var4 + var5 * var39 >> 16; + var41 = var5 * var41 - var39 * var4 >> 16; + var39 = var42; + var42 = var3 * var40 - var41 * var2 >> 16; + var41 = var40 * var2 + var3 * var41 >> 16; + field1681[var38] = var41 - var12; + if (var41 >= 50) { + modelViewportXs[var38] = var39 * Rasterizer3D.Rasterizer3D_zoom / var41 + var47; + modelViewportYs[var38] = var42 * Rasterizer3D.Rasterizer3D_zoom / var41 + var35; } else { - modelViewportXs[var37] = -5000; + modelViewportXs[var38] = -5000; var24 = true; } if (var26) { - field1674[var37] = var38; - field1702[var37] = var55; - field1689[var37] = var54; + field1703[var38] = var39; + field1699[var38] = var42; + field1673[var38] = var41; } } try { - this.draw0(var24, var32, this.isSingleTile, var9); - } catch (Exception var51) { + this.draw0(var24, var33, this.isSingleTile, var9); + } catch (Exception var46) { } } diff --git a/runescape-client/src/main/java/ModelData.java b/runescape-client/src/main/java/ModelData.java index 0b90e31efd..29677df475 100644 --- a/runescape-client/src/main/java/ModelData.java +++ b/runescape-client/src/main/java/ModelData.java @@ -3,134 +3,134 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("du") +@ObfuscatedName("dq") @Implements("ModelData") public class ModelData extends Entity { @ObfuscatedName("ab") - static int[] field1557; - @ObfuscatedName("ax") - static int[] field1558; - @ObfuscatedName("al") - static int field1522; - @ObfuscatedName("ap") + static int[] field1576; + @ObfuscatedName("ar") + static int[] field1543; + @ObfuscatedName("av") + static int field1552; + @ObfuscatedName("aq") @Export("ModelData_sine") static int[] ModelData_sine; - @ObfuscatedName("aj") + @ObfuscatedName("ac") @Export("ModelData_cosine") static int[] ModelData_cosine; - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("verticesCount") int verticesCount; - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("verticesX") int[] verticesX; - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("verticesY") int[] verticesY; - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("verticesZ") int[] verticesZ; - @ObfuscatedName("v") + @ObfuscatedName("z") @Export("faceCount") int faceCount; - @ObfuscatedName("l") + @ObfuscatedName("p") @Export("indices1") int[] indices1; - @ObfuscatedName("c") + @ObfuscatedName("h") @Export("indices2") int[] indices2; - @ObfuscatedName("o") + @ObfuscatedName("y") @Export("indices3") int[] indices3; - @ObfuscatedName("i") + @ObfuscatedName("w") @Export("faceRenderTypes") byte[] faceRenderTypes; - @ObfuscatedName("d") + @ObfuscatedName("i") @Export("faceRenderPriorities") byte[] faceRenderPriorities; - @ObfuscatedName("m") + @ObfuscatedName("k") @Export("faceAlphas") byte[] faceAlphas; - @ObfuscatedName("p") + @ObfuscatedName("x") @Export("textureCoords") byte[] textureCoords; - @ObfuscatedName("h") + @ObfuscatedName("o") @Export("faceColors") short[] faceColors; - @ObfuscatedName("k") + @ObfuscatedName("e") @Export("faceTextures") short[] faceTextures; - @ObfuscatedName("x") + @ObfuscatedName("n") @Export("priority") byte priority; - @ObfuscatedName("j") + @ObfuscatedName("r") @Export("textureTriangleCount") int textureTriangleCount; - @ObfuscatedName("r") + @ObfuscatedName("c") @Export("textureRenderTypes") byte[] textureRenderTypes; - @ObfuscatedName("e") + @ObfuscatedName("a") @Export("texTriangleX") short[] texTriangleX; - @ObfuscatedName("s") + @ObfuscatedName("d") @Export("texTriangleY") short[] texTriangleY; - @ObfuscatedName("b") + @ObfuscatedName("s") @Export("texTriangleZ") short[] texTriangleZ; - @ObfuscatedName("z") + @ObfuscatedName("t") @Export("vertexSkins") int[] vertexSkins; - @ObfuscatedName("f") + @ObfuscatedName("m") @Export("faceSkins") int[] faceSkins; - @ObfuscatedName("g") + @ObfuscatedName("v") @Export("vertexLabels") int[][] vertexLabels; - @ObfuscatedName("w") + @ObfuscatedName("q") @Export("faceLabelsAlpha") int[][] faceLabelsAlpha; - @ObfuscatedName("u") + @ObfuscatedName("l") @ObfuscatedSignature( - signature = "[Leq;" + signature = "[Lea;" ) @Export("faceNormals") FaceNormal[] faceNormals; - @ObfuscatedName("y") + @ObfuscatedName("j") @ObfuscatedSignature( - signature = "[Lde;" + signature = "[Ldy;" ) @Export("vertexNormals") VertexNormal[] vertexNormals; - @ObfuscatedName("aa") + @ObfuscatedName("af") @ObfuscatedSignature( - signature = "[Lde;" + signature = "[Ldy;" ) - VertexNormal[] field1524; - @ObfuscatedName("aw") + VertexNormal[] field1565; + @ObfuscatedName("ad") @Export("ambient") public short ambient; - @ObfuscatedName("ar") + @ObfuscatedName("am") @Export("contrast") public short contrast; - @ObfuscatedName("aq") + @ObfuscatedName("ai") @Export("isBoundsCalculated") boolean isBoundsCalculated; - @ObfuscatedName("ad") - int field1545; @ObfuscatedName("ag") - int field1553; + int field1569; + @ObfuscatedName("ao") + int field1570; + @ObfuscatedName("aw") + int field1559; @ObfuscatedName("ak") int field1554; - @ObfuscatedName("av") - int field1555; - @ObfuscatedName("am") - int field1556; + @ObfuscatedName("aa") + int field1573; static { - field1557 = new int[10000]; - field1558 = new int[10000]; - field1522 = 0; + field1576 = new int[10000]; + field1543 = new int[10000]; + field1552 = 0; ModelData_sine = Rasterizer3D.Rasterizer3D_sine; ModelData_cosine = Rasterizer3D.Rasterizer3D_cosine; } @@ -143,7 +143,7 @@ public class ModelData extends Entity { } @ObfuscatedSignature( - signature = "([Ldu;I)V" + signature = "([Ldq;I)V" ) public ModelData(ModelData[] var1, int var2) { this.verticesCount = 0; @@ -274,18 +274,18 @@ public class ModelData extends Entity { } this.faceColors[this.faceCount] = var10.faceColors[var11]; - this.indices1[this.faceCount] = this.method2944(var10, var10.indices1[var11]); - this.indices2[this.faceCount] = this.method2944(var10, var10.indices2[var11]); - this.indices3[this.faceCount] = this.method2944(var10, var10.indices3[var11]); + this.indices1[this.faceCount] = this.method2817(var10, var10.indices1[var11]); + this.indices2[this.faceCount] = this.method2817(var10, var10.indices2[var11]); + this.indices3[this.faceCount] = this.method2817(var10, var10.indices3[var11]); ++this.faceCount; } for (var11 = 0; var11 < var10.textureTriangleCount; ++var11) { byte var12 = this.textureRenderTypes[this.textureTriangleCount] = var10.textureRenderTypes[var11]; if (var12 == 0) { - this.texTriangleX[this.textureTriangleCount] = (short)this.method2944(var10, var10.texTriangleX[var11]); - this.texTriangleY[this.textureTriangleCount] = (short)this.method2944(var10, var10.texTriangleY[var11]); - this.texTriangleZ[this.textureTriangleCount] = (short)this.method2944(var10, var10.texTriangleZ[var11]); + this.texTriangleX[this.textureTriangleCount] = (short)this.method2817(var10, var10.texTriangleX[var11]); + this.texTriangleY[this.textureTriangleCount] = (short)this.method2817(var10, var10.texTriangleY[var11]); + this.texTriangleZ[this.textureTriangleCount] = (short)this.method2817(var10, var10.texTriangleZ[var11]); } ++this.textureTriangleCount; @@ -301,15 +301,15 @@ public class ModelData extends Entity { this.priority = 0; this.isBoundsCalculated = false; if (var1[var1.length - 1] == -1 && var1[var1.length - 2] == -1) { - this.method2938(var1); + this.method2814(var1); } else { - this.method2954(var1); + this.method2815(var1); } } @ObfuscatedSignature( - signature = "(Ldu;ZZZZ)V", + signature = "(Ldq;ZZZZ)V", garbageValue = "1" ) public ModelData(ModelData var1, boolean var2, boolean var3, boolean var4, boolean var5) { @@ -375,13 +375,13 @@ public class ModelData extends Entity { this.faceLabelsAlpha = var1.faceLabelsAlpha; this.vertexNormals = var1.vertexNormals; this.faceNormals = var1.faceNormals; - this.field1524 = var1.field1524; + this.field1565 = var1.field1565; this.ambient = var1.ambient; this.contrast = var1.contrast; } - @ObfuscatedName("t") - void method2938(byte[] var1) { + @ObfuscatedName("f") + void method2814(byte[] var1) { Buffer var2 = new Buffer(var1); Buffer var3 = new Buffer(var1); Buffer var4 = new Buffer(var1); @@ -686,8 +686,8 @@ public class ModelData extends Entity { } - @ObfuscatedName("n") - void method2954(byte[] var1) { + @ObfuscatedName("b") + void method2815(byte[] var1) { boolean var2 = false; boolean var3 = false; Buffer var4 = new Buffer(var1); @@ -963,11 +963,11 @@ public class ModelData extends Entity { } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(Ldu;I)I" + signature = "(Ldq;I)I" ) - final int method2944(ModelData var1, int var2) { + final int method2817(ModelData var1, int var2) { int var3 = -1; int var4 = var1.verticesX[var2]; int var5 = var1.verticesY[var2]; @@ -994,11 +994,11 @@ public class ModelData extends Entity { return var3; } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "()Ldu;" + signature = "()Ldq;" ) - public ModelData method2942() { + public ModelData method2839() { ModelData var1 = new ModelData(); if (this.faceRenderTypes != null) { var1.faceRenderTypes = new byte[this.faceCount]; @@ -1038,16 +1038,16 @@ public class ModelData extends Entity { return var1; } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "([[IIIIZI)Ldu;" + signature = "([[IIIIZI)Ldq;" ) - public ModelData method2943(int[][] var1, int var2, int var3, int var4, boolean var5, int var6) { + public ModelData method2819(int[][] var1, int var2, int var3, int var4, boolean var5, int var6) { this.calculateBounds(); - int var7 = var2 + this.field1553; - int var8 = var2 + this.field1554; - int var9 = var4 + this.field1556; - int var10 = var4 + this.field1555; + int var7 = var2 + this.field1570; + int var8 = var2 + this.field1559; + int var9 = var4 + this.field1573; + int var10 = var4 + this.field1554; if (var7 >= 0 && var8 + 128 >> 7 < var1.length && var9 >= 0 && var10 + 128 >> 7 < var1[0].length) { var7 >>= 7; var8 = var8 + 127 >> 7; @@ -1132,8 +1132,8 @@ public class ModelData extends Entity { } } - @ObfuscatedName("c") - void method2939() { + @ObfuscatedName("h") + void method2820() { int[] var1; int var2; int var10002; @@ -1193,8 +1193,8 @@ public class ModelData extends Entity { } - @ObfuscatedName("o") - public void method2940() { + @ObfuscatedName("y") + public void method2884() { for (int var1 = 0; var1 < this.verticesCount; ++var1) { int var2 = this.verticesX[var1]; this.verticesX[var1] = this.verticesZ[var1]; @@ -1204,8 +1204,8 @@ public class ModelData extends Entity { this.invalidate(); } - @ObfuscatedName("d") - public void method2946() { + @ObfuscatedName("i") + public void method2872() { for (int var1 = 0; var1 < this.verticesCount; ++var1) { this.verticesX[var1] = -this.verticesX[var1]; this.verticesZ[var1] = -this.verticesZ[var1]; @@ -1214,8 +1214,8 @@ public class ModelData extends Entity { this.invalidate(); } - @ObfuscatedName("m") - public void method2947() { + @ObfuscatedName("k") + public void method2823() { for (int var1 = 0; var1 < this.verticesCount; ++var1) { int var2 = this.verticesZ[var1]; this.verticesZ[var1] = this.verticesX[var1]; @@ -1225,8 +1225,8 @@ public class ModelData extends Entity { this.invalidate(); } - @ObfuscatedName("p") - public void method2948(int var1) { + @ObfuscatedName("x") + public void method2822(int var1) { int var2 = ModelData_sine[var1]; int var3 = ModelData_cosine[var1]; @@ -1239,7 +1239,7 @@ public class ModelData extends Entity { this.invalidate(); } - @ObfuscatedName("h") + @ObfuscatedName("o") @Export("changeOffset") public void changeOffset(int var1, int var2, int var3) { for (int var4 = 0; var4 < this.verticesCount; ++var4) { @@ -1254,7 +1254,7 @@ public class ModelData extends Entity { this.invalidate(); } - @ObfuscatedName("k") + @ObfuscatedName("e") @Export("recolor") public void recolor(short var1, short var2) { for (int var3 = 0; var3 < this.faceCount; ++var3) { @@ -1265,7 +1265,7 @@ public class ModelData extends Entity { } - @ObfuscatedName("x") + @ObfuscatedName("n") @Export("retexture") public void retexture(short var1, short var2) { if (this.faceTextures != null) { @@ -1278,8 +1278,8 @@ public class ModelData extends Entity { } } - @ObfuscatedName("j") - public void method2951() { + @ObfuscatedName("c") + public void method2878() { int var1; for (var1 = 0; var1 < this.verticesCount; ++var1) { this.verticesZ[var1] = -this.verticesZ[var1]; @@ -1294,7 +1294,7 @@ public class ModelData extends Entity { this.invalidate(); } - @ObfuscatedName("r") + @ObfuscatedName("s") @Export("resize") public void resize(int var1, int var2, int var3) { for (int var4 = 0; var4 < this.verticesCount; ++var4) { @@ -1306,7 +1306,7 @@ public class ModelData extends Entity { this.invalidate(); } - @ObfuscatedName("e") + @ObfuscatedName("t") @Export("calculateVertexNormals") public void calculateVertexNormals() { if (this.vertexNormals == null) { @@ -1382,52 +1382,52 @@ public class ModelData extends Entity { } } - @ObfuscatedName("s") + @ObfuscatedName("m") @Export("invalidate") void invalidate() { this.vertexNormals = null; - this.field1524 = null; + this.field1565 = null; this.faceNormals = null; this.isBoundsCalculated = false; } - @ObfuscatedName("b") + @ObfuscatedName("v") @Export("calculateBounds") void calculateBounds() { if (!this.isBoundsCalculated) { super.height = 0; - this.field1545 = 0; - this.field1553 = 999999; - this.field1554 = -999999; - this.field1555 = -99999; - this.field1556 = 99999; + this.field1569 = 0; + this.field1570 = 999999; + this.field1559 = -999999; + this.field1554 = -99999; + this.field1573 = 99999; for (int var1 = 0; var1 < this.verticesCount; ++var1) { int var2 = this.verticesX[var1]; int var3 = this.verticesY[var1]; int var4 = this.verticesZ[var1]; - if (var2 < this.field1553) { - this.field1553 = var2; + if (var2 < this.field1570) { + this.field1570 = var2; } - if (var2 > this.field1554) { - this.field1554 = var2; + if (var2 > this.field1559) { + this.field1559 = var2; } - if (var4 < this.field1556) { - this.field1556 = var4; + if (var4 < this.field1573) { + this.field1573 = var4; } - if (var4 > this.field1555) { - this.field1555 = var4; + if (var4 > this.field1554) { + this.field1554 = var4; } if (-var3 > super.height) { super.height = -var3; } - if (var3 > this.field1545) { - this.field1545 = var3; + if (var3 > this.field1569) { + this.field1569 = var3; } } @@ -1435,9 +1435,9 @@ public class ModelData extends Entity { } } - @ObfuscatedName("u") + @ObfuscatedName("l") @ObfuscatedSignature( - signature = "(IIIII)Ldv;" + signature = "(IIIII)Ldf;" ) @Export("toModel") public final Model toModel(int var1, int var2, int var3, int var4, int var5) { @@ -1458,38 +1458,38 @@ public class ModelData extends Entity { } } - var8.field1663 = 0; + var8.field1679 = 0; for (var10 = 0; var10 < this.textureTriangleCount; ++var10) { if (var9[var10] > 0 && this.textureRenderTypes[var10] == 0) { - ++var8.field1663; + ++var8.field1679; } } - var8.field1664 = new int[var8.field1663]; - var8.field1665 = new int[var8.field1663]; - var8.field1666 = new int[var8.field1663]; + var8.field1680 = new int[var8.field1679]; + var8.field1705 = new int[var8.field1679]; + var8.field1682 = new int[var8.field1679]; var10 = 0; int var11; for (var11 = 0; var11 < this.textureTriangleCount; ++var11) { if (var9[var11] > 0 && this.textureRenderTypes[var11] == 0) { - var8.field1664[var10] = this.texTriangleX[var11] & '\uffff'; - var8.field1665[var10] = this.texTriangleY[var11] & '\uffff'; - var8.field1666[var10] = this.texTriangleZ[var11] & '\uffff'; + var8.field1680[var10] = this.texTriangleX[var11] & '\uffff'; + var8.field1705[var10] = this.texTriangleY[var11] & '\uffff'; + var8.field1682[var10] = this.texTriangleZ[var11] & '\uffff'; var9[var11] = var10++; } else { var9[var11] = -1; } } - var8.field1644 = new byte[this.faceCount]; + var8.field1676 = new byte[this.faceCount]; for (var11 = 0; var11 < this.faceCount; ++var11) { if (this.textureCoords[var11] != -1) { - var8.field1644[var11] = (byte)var9[this.textureCoords[var11] & 255]; + var8.field1676[var11] = (byte)var9[this.textureCoords[var11] & 255]; } else { - var8.field1644[var11] = -1; + var8.field1676[var11] = -1; } } } @@ -1532,7 +1532,7 @@ public class ModelData extends Entity { if (var17 == 1) { var19 = this.faceNormals[var16]; var14 = (var4 * var19.y + var5 * var19.z + var3 * var19.x) / (var7 / 2 + var7) + var1; - var8.faceColors1[var16] = method2996(this.faceColors[var16] & '\uffff', var14); + var8.faceColors1[var16] = method2834(this.faceColors[var16] & '\uffff', var14); var8.faceColors3[var16] = -1; } else if (var17 == 3) { var8.faceColors1[var16] = 128; @@ -1542,69 +1542,69 @@ public class ModelData extends Entity { } } else { int var15 = this.faceColors[var16] & '\uffff'; - if (this.field1524 != null && this.field1524[this.indices1[var16]] != null) { - var13 = this.field1524[this.indices1[var16]]; + if (this.field1565 != null && this.field1565[this.indices1[var16]] != null) { + var13 = this.field1565[this.indices1[var16]]; } else { var13 = this.vertexNormals[this.indices1[var16]]; } var14 = (var4 * var13.y + var5 * var13.z + var3 * var13.x) / (var7 * var13.magnitude) + var1; - var8.faceColors1[var16] = method2996(var15, var14); - if (this.field1524 != null && this.field1524[this.indices2[var16]] != null) { - var13 = this.field1524[this.indices2[var16]]; + var8.faceColors1[var16] = method2834(var15, var14); + if (this.field1565 != null && this.field1565[this.indices2[var16]] != null) { + var13 = this.field1565[this.indices2[var16]]; } else { var13 = this.vertexNormals[this.indices2[var16]]; } var14 = (var4 * var13.y + var5 * var13.z + var3 * var13.x) / (var7 * var13.magnitude) + var1; - var8.faceColors2[var16] = method2996(var15, var14); - if (this.field1524 != null && this.field1524[this.indices3[var16]] != null) { - var13 = this.field1524[this.indices3[var16]]; + var8.faceColors2[var16] = method2834(var15, var14); + if (this.field1565 != null && this.field1565[this.indices3[var16]] != null) { + var13 = this.field1565[this.indices3[var16]]; } else { var13 = this.vertexNormals[this.indices3[var16]]; } var14 = (var4 * var13.y + var5 * var13.z + var3 * var13.x) / (var7 * var13.magnitude) + var1; - var8.faceColors3[var16] = method2996(var15, var14); + var8.faceColors3[var16] = method2834(var15, var14); } } else if (var17 != 0) { if (var17 == 1) { var19 = this.faceNormals[var16]; var14 = (var4 * var19.y + var5 * var19.z + var3 * var19.x) / (var7 / 2 + var7) + var1; - var8.faceColors1[var16] = method2985(var14); + var8.faceColors1[var16] = method2835(var14); var8.faceColors3[var16] = -1; } else { var8.faceColors3[var16] = -2; } } else { - if (this.field1524 != null && this.field1524[this.indices1[var16]] != null) { - var13 = this.field1524[this.indices1[var16]]; + if (this.field1565 != null && this.field1565[this.indices1[var16]] != null) { + var13 = this.field1565[this.indices1[var16]]; } else { var13 = this.vertexNormals[this.indices1[var16]]; } var14 = (var4 * var13.y + var5 * var13.z + var3 * var13.x) / (var7 * var13.magnitude) + var1; - var8.faceColors1[var16] = method2985(var14); - if (this.field1524 != null && this.field1524[this.indices2[var16]] != null) { - var13 = this.field1524[this.indices2[var16]]; + var8.faceColors1[var16] = method2835(var14); + if (this.field1565 != null && this.field1565[this.indices2[var16]] != null) { + var13 = this.field1565[this.indices2[var16]]; } else { var13 = this.vertexNormals[this.indices2[var16]]; } var14 = (var4 * var13.y + var5 * var13.z + var3 * var13.x) / (var7 * var13.magnitude) + var1; - var8.faceColors2[var16] = method2985(var14); - if (this.field1524 != null && this.field1524[this.indices3[var16]] != null) { - var13 = this.field1524[this.indices3[var16]]; + var8.faceColors2[var16] = method2835(var14); + if (this.field1565 != null && this.field1565[this.indices3[var16]] != null) { + var13 = this.field1565[this.indices3[var16]]; } else { var13 = this.vertexNormals[this.indices3[var16]]; } var14 = (var4 * var13.y + var5 * var13.z + var3 * var13.x) / (var7 * var13.magnitude) + var1; - var8.faceColors3[var16] = method2985(var14); + var8.faceColors3[var16] = method2835(var14); } } - this.method2939(); + this.method2820(); var8.verticesCount = this.verticesCount; var8.verticesX = this.verticesX; var8.verticesY = this.verticesY; @@ -1615,16 +1615,16 @@ public class ModelData extends Entity { var8.indices3 = this.indices3; var8.faceRenderPriorities = this.faceRenderPriorities; var8.faceAlphas = this.faceAlphas; - var8.field1662 = this.priority; + var8.field1678 = this.priority; var8.vertexLabels = this.vertexLabels; var8.faceLabelsAlpha = this.faceLabelsAlpha; var8.faceTextures = this.faceTextures; return var8; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Lhq;II)Ldu;" + signature = "(Lhf;II)Ldq;" ) @Export("ModelData_get") public static ModelData ModelData_get(AbstractArchive var0, int var1, int var2) { @@ -1632,16 +1632,16 @@ public class ModelData extends Entity { return var3 == null ? null : new ModelData(var3); } - @ObfuscatedName("w") + @ObfuscatedName("q") @ObfuscatedSignature( - signature = "(Ldu;Ldu;IIIZ)V" + signature = "(Ldq;Ldq;IIIZ)V" ) - static void method2956(ModelData var0, ModelData var1, int var2, int var3, int var4, boolean var5) { + static void method2828(ModelData var0, ModelData var1, int var2, int var3, int var4, boolean var5) { var0.calculateBounds(); var0.calculateVertexNormals(); var1.calculateBounds(); var1.calculateVertexNormals(); - ++field1522; + ++field1552; int var6 = 0; int[] var7 = var1.verticesX; int var8 = var1.verticesCount; @@ -1651,30 +1651,30 @@ public class ModelData extends Entity { VertexNormal var10 = var0.vertexNormals[var9]; if (var10.magnitude != 0) { int var11 = var0.verticesY[var9] - var3; - if (var11 <= var1.field1545) { + if (var11 <= var1.field1569) { int var12 = var0.verticesX[var9] - var2; - if (var12 >= var1.field1553 && var12 <= var1.field1554) { + if (var12 >= var1.field1570 && var12 <= var1.field1559) { int var13 = var0.verticesZ[var9] - var4; - if (var13 >= var1.field1556 && var13 <= var1.field1555) { + if (var13 >= var1.field1573 && var13 <= var1.field1554) { for (int var14 = 0; var14 < var8; ++var14) { VertexNormal var15 = var1.vertexNormals[var14]; if (var12 == var7[var14] && var13 == var1.verticesZ[var14] && var11 == var1.verticesY[var14] && var15.magnitude != 0) { - if (var0.field1524 == null) { - var0.field1524 = new VertexNormal[var0.verticesCount]; + if (var0.field1565 == null) { + var0.field1565 = new VertexNormal[var0.verticesCount]; } - if (var1.field1524 == null) { - var1.field1524 = new VertexNormal[var8]; + if (var1.field1565 == null) { + var1.field1565 = new VertexNormal[var8]; } - VertexNormal var16 = var0.field1524[var9]; + VertexNormal var16 = var0.field1565[var9]; if (var16 == null) { - var16 = var0.field1524[var9] = new VertexNormal(var10); + var16 = var0.field1565[var9] = new VertexNormal(var10); } - VertexNormal var17 = var1.field1524[var14]; + VertexNormal var17 = var1.field1565[var14]; if (var17 == null) { - var17 = var1.field1524[var14] = new VertexNormal(var15); + var17 = var1.field1565[var14] = new VertexNormal(var15); } var16.x += var15.x; @@ -1686,8 +1686,8 @@ public class ModelData extends Entity { var17.z += var10.z; var17.magnitude += var10.magnitude; ++var6; - field1557[var9] = field1522; - field1558[var14] = field1522; + field1576[var9] = field1552; + field1543[var14] = field1552; } } } @@ -1698,7 +1698,7 @@ public class ModelData extends Entity { if (var6 >= 3 && var5) { for (var9 = 0; var9 < var0.faceCount; ++var9) { - if (field1557[var0.indices1[var9]] == field1522 && field1557[var0.indices2[var9]] == field1522 && field1557[var0.indices3[var9]] == field1522) { + if (field1576[var0.indices1[var9]] == field1552 && field1576[var0.indices2[var9]] == field1552 && field1576[var0.indices3[var9]] == field1552) { if (var0.faceRenderTypes == null) { var0.faceRenderTypes = new byte[var0.faceCount]; } @@ -1708,7 +1708,7 @@ public class ModelData extends Entity { } for (var9 = 0; var9 < var1.faceCount; ++var9) { - if (field1522 == field1558[var1.indices1[var9]] && field1522 == field1558[var1.indices2[var9]] && field1522 == field1558[var1.indices3[var9]]) { + if (field1552 == field1543[var1.indices1[var9]] && field1552 == field1543[var1.indices2[var9]] && field1552 == field1543[var1.indices3[var9]]) { if (var1.faceRenderTypes == null) { var1.faceRenderTypes = new byte[var1.faceCount]; } @@ -1720,8 +1720,8 @@ public class ModelData extends Entity { } } - @ObfuscatedName("ad") - static final int method2996(int var0, int var1) { + @ObfuscatedName("j") + static final int method2834(int var0, int var1) { var1 = (var0 & 127) * var1 >> 7; if (var1 < 2) { var1 = 2; @@ -1732,8 +1732,8 @@ public class ModelData extends Entity { return (var0 & 65408) + var1; } - @ObfuscatedName("ag") - static final int method2985(int var0) { + @ObfuscatedName("ad") + static final int method2835(int var0) { if (var0 < 2) { var0 = 2; } else if (var0 > 126) { diff --git a/runescape-client/src/main/java/ModelData0.java b/runescape-client/src/main/java/ModelData0.java index 3ca5ef0604..ddd6167143 100644 --- a/runescape-client/src/main/java/ModelData0.java +++ b/runescape-client/src/main/java/ModelData0.java @@ -2,264 +2,274 @@ import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; +import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("ef") +@ObfuscatedName("em") @Implements("ModelData0") public class ModelData0 { - @ObfuscatedName("fl") - @ObfuscatedSignature( - signature = "Lko;" - ) - @Export("WorldMapElement_fonts") - static Fonts WorldMapElement_fonts; - ModelData0() { } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(III)Z", - garbageValue = "1770861677" + signature = "(Lkg;Llb;B)Llb;", + garbageValue = "38" ) - public static boolean method3379(int var0, int var1) { - return (var0 >> var1 + 1 & 1) != 0; - } - - @ObfuscatedName("v") - @ObfuscatedSignature( - signature = "(IIIZIZI)V", - garbageValue = "1985291940" - ) - @Export("doWorldSorting") - static void doWorldSorting(int var0, int var1, int var2, boolean var3, int var4, boolean var5) { - if (var0 < var1) { - int var6 = (var0 + var1) / 2; - int var7 = var0; - World var8 = Username.World_worlds[var6]; - Username.World_worlds[var6] = Username.World_worlds[var1]; - Username.World_worlds[var1] = var8; - - for (int var9 = var0; var9 < var1; ++var9) { - World var11 = Username.World_worlds[var9]; - int var12 = ScriptFrame.compareWorlds(var11, var8, var2, var3); - int var10; - if (var12 != 0) { - if (var3) { - var10 = -var12; - } else { - var10 = var12; - } - } else if (var4 == -1) { - var10 = 0; - } else { - int var13 = ScriptFrame.compareWorlds(var11, var8, var4, var5); - if (var5) { - var10 = -var13; - } else { - var10 = var13; - } - } - - if (var10 <= 0) { - World var14 = Username.World_worlds[var9]; - Username.World_worlds[var9] = Username.World_worlds[var7]; - Username.World_worlds[var7++] = var14; - } - } - - Username.World_worlds[var1] = Username.World_worlds[var7]; - Username.World_worlds[var7] = var8; - doWorldSorting(var0, var7 - 1, var2, var3, var4, var5); - doWorldSorting(var7 + 1, var1, var2, var3, var4, var5); + @Export("readStringIntParameters") + static final IterableNodeHashTable readStringIntParameters(Buffer var0, IterableNodeHashTable var1) { + int var2 = var0.readUnsignedByte(); + int var3; + if (var1 == null) { + int var4 = var2 - 1; + var4 |= var4 >>> 1; + var4 |= var4 >>> 2; + var4 |= var4 >>> 4; + var4 |= var4 >>> 8; + var4 |= var4 >>> 16; + var3 = var4 + 1; + var1 = new IterableNodeHashTable(var3); } - } - - @ObfuscatedName("k") - @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "1344492505" - ) - static final void method3380() { - Object var10000 = null; - String var0 = "Your ignore list is full. Max of 100 for free users, and 400 for members"; - class30.addGameMessage(30, "", var0); - } - - @ObfuscatedName("gx") - @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "-39" - ) - static final void method3378() { - if (Ignored.ClanChat_inClanChat) { - if (class4.clanChat != null) { - class4.clanChat.sort(); - } - - WorldMapSectionType.method294(); - Ignored.ClanChat_inClanChat = false; - } - - } - - @ObfuscatedName("gm") - @ObfuscatedSignature( - signature = "(Lbz;I)V", - garbageValue = "-1736230875" - ) - static final void method3377(Actor var0) { - var0.movementSequence = var0.readySequence; - if (var0.pathLength == 0) { - var0.field982 = 0; - } else { - if (var0.sequence != -1 && var0.sequenceDelay == 0) { - SequenceDefinition var1 = PlayerType.SequenceDefinition_get(var0.sequence); - if (var0.field983 > 0 && var1.field3504 == 0) { - ++var0.field982; - return; - } - - if (var0.field983 <= 0 && var1.field3513 == 0) { - ++var0.field982; - return; - } - } - - int var10 = var0.x; - int var2 = var0.y; - int var3 = var0.pathX[var0.pathLength - 1] * 128 + var0.field927 * 64; - int var4 = var0.pathY[var0.pathLength - 1] * 128 + var0.field927 * 64; - if (var10 < var3) { - if (var2 < var4) { - var0.orientation = 1280; - } else if (var2 > var4) { - var0.orientation = 1792; - } else { - var0.orientation = 1536; - } - } else if (var10 > var3) { - if (var2 < var4) { - var0.orientation = 768; - } else if (var2 > var4) { - var0.orientation = 256; - } else { - var0.orientation = 512; - } - } else if (var2 < var4) { - var0.orientation = 1024; - } else if (var2 > var4) { - var0.orientation = 0; - } - - byte var5 = var0.pathTraversed[var0.pathLength - 1]; - if (var3 - var10 <= 256 && var3 - var10 >= -256 && var4 - var2 <= 256 && var4 - var2 >= -256) { - int var6 = var0.orientation - var0.rotation & 2047; - if (var6 > 1024) { - var6 -= 2048; - } - - int var7 = var0.walkBackSequence; - if (var6 >= -256 && var6 <= 256) { - var7 = var0.walkSequence; - } else if (var6 >= 256 && var6 < 768) { - var7 = var0.walkRightSequence; - } else if (var6 >= -768 && var6 <= -256) { - var7 = var0.walkLeftSequence; - } - - if (var7 == -1) { - var7 = var0.walkSequence; - } - - var0.movementSequence = var7; - int var8 = 4; - boolean var9 = true; - if (var0 instanceof NPC) { - var9 = ((NPC)var0).definition.isClickable; - } - - if (var9) { - if (var0.orientation != var0.rotation && var0.targetIndex == -1 && var0.field977 != 0) { - var8 = 2; - } - - if (var0.pathLength > 2) { - var8 = 6; - } - - if (var0.pathLength > 3) { - var8 = 8; - } - - if (var0.field982 > 0 && var0.pathLength > 1) { - var8 = 8; - --var0.field982; - } - } else { - if (var0.pathLength > 1) { - var8 = 6; - } - - if (var0.pathLength > 2) { - var8 = 8; - } - - if (var0.field982 > 0 && var0.pathLength > 1) { - var8 = 8; - --var0.field982; - } - } - - if (var5 == 2) { - var8 <<= 1; - } - - if (var8 >= 8 && var0.movementSequence == var0.walkSequence && var0.runSequence != -1) { - var0.movementSequence = var0.runSequence; - } - - if (var10 != var3 || var4 != var2) { - if (var10 < var3) { - var0.x += var8; - if (var0.x > var3) { - var0.x = var3; - } - } else if (var10 > var3) { - var0.x -= var8; - if (var0.x < var3) { - var0.x = var3; - } - } - - if (var2 < var4) { - var0.y += var8; - if (var0.y > var4) { - var0.y = var4; - } - } else if (var2 > var4) { - var0.y -= var8; - if (var0.y < var4) { - var0.y = var4; - } - } - } - - if (var3 == var0.x && var4 == var0.y) { - --var0.pathLength; - if (var0.field983 > 0) { - --var0.field983; - } - } - + for (var3 = 0; var3 < var2; ++var3) { + boolean var7 = var0.readUnsignedByte() == 1; + int var5 = var0.readMedium(); + Object var6; + if (var7) { + var6 = new ObjectNode(var0.readStringCp1252NullTerminated()); } else { - var0.x = var3; - var0.y = var4; - --var0.pathLength; - if (var0.field983 > 0) { - --var0.field983; + var6 = new IntegerNode(var0.readInt()); + } + + var1.put((Node)var6, (long)var5); + } + + return var1; + } + + @ObfuscatedName("f") + @ObfuscatedSignature( + signature = "(Lgj;Lld;I)Lgx;", + garbageValue = "280522015" + ) + @Export("getPacketBufferNode") + public static PacketBufferNode getPacketBufferNode(ClientPacket var0, IsaacCipher var1) { + PacketBufferNode var2 = StudioGame.method4225(); + var2.clientPacket = var0; + var2.clientPacketLength = var0.length; + if (var2.clientPacketLength == -1) { + var2.packetBuffer = new PacketBuffer(260); + } else if (var2.clientPacketLength == -2) { + var2.packetBuffer = new PacketBuffer(10000); + } else if (var2.clientPacketLength <= 18) { + var2.packetBuffer = new PacketBuffer(20); + } else if (var2.clientPacketLength <= 98) { + var2.packetBuffer = new PacketBuffer(100); + } else { + var2.packetBuffer = new PacketBuffer(260); + } + + var2.packetBuffer.setIsaacCipher(var1); + var2.packetBuffer.writeByteIsaac(var2.clientPacket.id); + var2.index = 0; + return var2; + } + + @ObfuscatedName("at") + @ObfuscatedSignature( + signature = "(ILci;ZI)I", + garbageValue = "1140897416" + ) + static int method3299(int var0, Script var1, boolean var2) { + if (var0 == ScriptOpcodes.WORLDLIST_FETCH) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Canvas.loadWorlds() ? 1 : 0; + return 1; + } else { + World var3; + if (var0 == ScriptOpcodes.WORLDLIST_START) { + var3 = class215.worldListStart(); + if (var3 != null) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.id; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.properties; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var3.activity; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.location; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.population; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var3.host; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = -1; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = ""; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = ""; } + return 1; + } else if (var0 == ScriptOpcodes.WORLDLIST_NEXT) { + var3 = class1.getNextWorldListWorld(); + if (var3 != null) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.id; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.properties; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var3.activity; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.location; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.population; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var3.host; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = -1; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = ""; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = ""; + } + + return 1; + } else { + World var4; + int var5; + int var7; + if (var0 == ScriptOpcodes.WORLDLIST_SPECIFIC) { + var7 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var4 = null; + + for (var5 = 0; var5 < World.World_count; ++var5) { + if (var7 == Skills.World_worlds[var5].id) { + var4 = Skills.World_worlds[var5]; + break; + } + } + + if (var4 != null) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var4.id; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var4.properties; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var4.activity; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var4.location; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var4.population; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var4.host; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = -1; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = ""; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = ""; + } + + return 1; + } else if (var0 == ScriptOpcodes.WORLDLIST_SORT) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 4; + var7 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + boolean var10 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1] == 1; + var5 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 2]; + boolean var6 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 3] == 1; + class42.sortWorldList(var7, var10, var5, var6); + return 1; + } else if (var0 != ScriptOpcodes.GETWORLDINFO) { + if (var0 == ScriptOpcodes.SETFOLLOWEROPSLOWPRIORITY) { + Client.followerOpsLowPriority = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + return 1; + } else { + int var8; + ParamDefinition var9; + if (var0 == ScriptOpcodes.NC_PARAM) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var7 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var8 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + var9 = MusicPatchNode.getParamDefinition(var8); + if (var9.isString()) { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = VarcInt.getNpcDefinition(var7).getStringParam(var8, var9.defaultStr); + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = VarcInt.getNpcDefinition(var7).getIntParam(var8, var9.defaultInt); + } + + return 1; + } else if (var0 == ScriptOpcodes.LC_PARAM) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var7 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var8 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + var9 = MusicPatchNode.getParamDefinition(var8); + if (var9.isString()) { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = Occluder.getObjectDefinition(var7).getStringParam(var8, var9.defaultStr); + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Occluder.getObjectDefinition(var7).getIntParam(var8, var9.defaultInt); + } + + return 1; + } else if (var0 == ScriptOpcodes.OC_PARAM) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var7 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var8 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + var9 = MusicPatchNode.getParamDefinition(var8); + if (var9.isString()) { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = Interpreter.ItemDefinition_get(var7).getStringParam(var8, var9.defaultStr); + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Interpreter.ItemDefinition_get(var7).getIntParam(var8, var9.defaultInt); + } + + return 1; + } else if (var0 == ScriptOpcodes.STRUCT_PARAM) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var7 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var8 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + var9 = MusicPatchNode.getParamDefinition(var8); + if (var9.isString()) { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = class96.StructDefinition_getStructDefinition(var7).getStringParam(var8, var9.defaultStr); + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = class96.StructDefinition_getStructDefinition(var7).getIntParam(var8, var9.defaultInt); + } + + return 1; + } else if (var0 == ScriptOpcodes.ON_MOBILE) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Client.onMobile ? 1 : 0; + return 1; + } else if (var0 == ScriptOpcodes.CLIENTTYPE) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Client.clientType & 3; + return 1; + } else if (var0 == 6520) { + return 1; + } else if (var0 == ScriptOpcodes.MOBILE_KEYBOARDHIDE) { + return 1; + } else if (var0 == 6522) { + --class43.Interpreter_stringStackSize; + --GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize; + return 1; + } else if (var0 == 6523) { + --class43.Interpreter_stringStackSize; + --GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize; + return 1; + } else if (var0 == ScriptOpcodes.BATTERYLEVEL) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = -1; + return 1; + } else if (var0 == ScriptOpcodes.BATTERYCHARGING) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 1; + return 1; + } else if (var0 == ScriptOpcodes.WIFIAVAILABLE) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 1; + return 1; + } else { + return 2; + } + } + } else { + var7 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + if (var7 >= 0 && var7 < World.World_count) { + var4 = Skills.World_worlds[var7]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var4.id; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var4.properties; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var4.activity; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var4.location; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var4.population; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var4.host; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = -1; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = ""; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = ""; + } + + return 1; + } } } } diff --git a/runescape-client/src/main/java/MouseHandler.java b/runescape-client/src/main/java/MouseHandler.java index d2053d0fff..43f00cd53d 100644 --- a/runescape-client/src/main/java/MouseHandler.java +++ b/runescape-client/src/main/java/MouseHandler.java @@ -3,135 +3,128 @@ import java.awt.event.FocusListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; +import java.awt.image.BufferedImage; +import java.awt.image.PixelGrabber; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import javax.imageio.ImageIO; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("bc") +@ObfuscatedName("bx") @Implements("MouseHandler") public class MouseHandler implements MouseListener, MouseMotionListener, FocusListener { - @ObfuscatedName("sz") - @ObfuscatedGetter( - intValue = 1607868689 - ) - @Export("foundItemIdCount") - static int foundItemIdCount; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Lbc;" + signature = "Lbx;" ) @Export("MouseHandler_instance") public static MouseHandler MouseHandler_instance; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = -1338190935 + intValue = 1490415365 ) @Export("MouseHandler_idleCycles") public static volatile int MouseHandler_idleCycles; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = 252420693 + intValue = 1217324239 ) @Export("MouseHandler_currentButtonVolatile") public static volatile int MouseHandler_currentButtonVolatile; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedGetter( - intValue = -1728347419 + intValue = -311378261 ) @Export("MouseHandler_xVolatile") public static volatile int MouseHandler_xVolatile; - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedGetter( - intValue = 890239403 + longValue = 5498807514871953223L + ) + @Export("MouseHandler_millis") + public static long MouseHandler_millis; + @ObfuscatedName("w") + @ObfuscatedGetter( + intValue = -269629863 ) @Export("MouseHandler_yVolatile") public static volatile int MouseHandler_yVolatile; @ObfuscatedName("i") @ObfuscatedGetter( - longValue = 3750789225615290729L + longValue = -3394492836733746113L ) @Export("MouseHandler_lastMovedVolatile") public static volatile long MouseHandler_lastMovedVolatile; - @ObfuscatedName("d") + @ObfuscatedName("k") @ObfuscatedGetter( - intValue = -1269401967 - ) - @Export("MouseHandler_currentButton") - public static int MouseHandler_currentButton; - @ObfuscatedName("m") - @ObfuscatedGetter( - intValue = 811280401 + intValue = 1058751747 ) @Export("MouseHandler_x") public static int MouseHandler_x; - @ObfuscatedName("p") + @ObfuscatedName("x") @ObfuscatedGetter( - intValue = 1526824115 + intValue = 1891385579 ) @Export("MouseHandler_y") public static int MouseHandler_y; - @ObfuscatedName("h") + @ObfuscatedName("o") @ObfuscatedGetter( - longValue = -8173787367368651405L + intValue = 2023684605 ) - @Export("MouseHandler_millis") - public static long MouseHandler_millis; - @ObfuscatedName("k") + @Export("MouseHandler_currentButton") + public static int MouseHandler_currentButton; + @ObfuscatedName("e") @ObfuscatedGetter( - intValue = -2004292417 + intValue = -1519290605 ) @Export("MouseHandler_lastButtonVolatile") public static volatile int MouseHandler_lastButtonVolatile; - @ObfuscatedName("x") + @ObfuscatedName("n") @ObfuscatedGetter( - intValue = 587328271 + intValue = 2092487579 ) @Export("MouseHandler_lastPressedXVolatile") public static volatile int MouseHandler_lastPressedXVolatile; - @ObfuscatedName("j") + @ObfuscatedName("r") @ObfuscatedGetter( - intValue = -1352074073 + intValue = 543803129 ) @Export("MouseHandler_lastPressedYVolatile") public static volatile int MouseHandler_lastPressedYVolatile; - @ObfuscatedName("r") + @ObfuscatedName("c") @ObfuscatedGetter( - longValue = -4279926973257874399L + longValue = -709521929383780473L ) @Export("MouseHandler_lastPressedTimeMillisVolatile") public static volatile long MouseHandler_lastPressedTimeMillisVolatile; - @ObfuscatedName("e") + @ObfuscatedName("a") @ObfuscatedGetter( - intValue = 268486097 + intValue = 2081048445 ) @Export("MouseHandler_lastButton") public static int MouseHandler_lastButton; - @ObfuscatedName("s") + @ObfuscatedName("d") @ObfuscatedGetter( - intValue = -209058807 + intValue = 1936188057 ) @Export("MouseHandler_lastPressedX") public static int MouseHandler_lastPressedX; - @ObfuscatedName("b") + @ObfuscatedName("s") @ObfuscatedGetter( - intValue = -775281431 + intValue = -1648942289 ) @Export("MouseHandler_lastPressedY") public static int MouseHandler_lastPressedY; - @ObfuscatedName("z") + @ObfuscatedName("t") @ObfuscatedGetter( - longValue = -7966461350873745939L + longValue = -6127281793723747947L ) @Export("MouseHandler_lastPressedTimeMillis") public static long MouseHandler_lastPressedTimeMillis; - @ObfuscatedName("bx") - @ObfuscatedSignature( - signature = "Lhp;" - ) - static StudioGame field458; static { MouseHandler_instance = new MouseHandler(); @@ -157,10 +150,10 @@ public class MouseHandler implements MouseListener, MouseMotionListener, FocusLi MouseHandler() { } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(Ljava/awt/event/MouseEvent;B)I", - garbageValue = "-1" + signature = "(Ljava/awt/event/MouseEvent;I)I", + garbageValue = "-1600778879" ) @Export("getButton") final int getButton(MouseEvent var1) { @@ -182,16 +175,12 @@ public class MouseHandler implements MouseListener, MouseMotionListener, FocusLi } - public final synchronized void mouseDragged(MouseEvent var1) { - this.mouseMoved(var1); - } - public final synchronized void mousePressed(MouseEvent var1) { if (MouseHandler_instance != null) { MouseHandler_idleCycles = 0; MouseHandler_lastPressedXVolatile = var1.getX(); MouseHandler_lastPressedYVolatile = var1.getY(); - MouseHandler_lastPressedTimeMillisVolatile = PlayerAppearance.currentTimeMillis(); + MouseHandler_lastPressedTimeMillisVolatile = TaskHandler.currentTimeMillis(); MouseHandler_lastButtonVolatile = this.getButton(var1); if (MouseHandler_lastButtonVolatile != 0) { MouseHandler_currentButtonVolatile = MouseHandler_lastButtonVolatile; @@ -220,16 +209,6 @@ public class MouseHandler implements MouseListener, MouseMotionListener, FocusLi this.mouseMoved(var1); } - public final void focusGained(FocusEvent var1) { - } - - public final synchronized void focusLost(FocusEvent var1) { - if (MouseHandler_instance != null) { - MouseHandler_currentButtonVolatile = 0; - } - - } - public final synchronized void mouseExited(MouseEvent var1) { if (MouseHandler_instance != null) { MouseHandler_idleCycles = 0; @@ -240,6 +219,20 @@ public class MouseHandler implements MouseListener, MouseMotionListener, FocusLi } + public final synchronized void mouseDragged(MouseEvent var1) { + this.mouseMoved(var1); + } + + public final void focusGained(FocusEvent var1) { + } + + public final synchronized void focusLost(FocusEvent var1) { + if (MouseHandler_instance != null) { + MouseHandler_currentButtonVolatile = 0; + } + + } + public final void mouseClicked(MouseEvent var1) { if (var1.isPopupTrigger()) { var1.consume(); @@ -247,138 +240,139 @@ public class MouseHandler implements MouseListener, MouseMotionListener, FocusLi } - @ObfuscatedName("af") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(ILcj;ZB)I", - garbageValue = "-21" + signature = "([BI)Lln;", + garbageValue = "1946440209" ) - static int method1176(int var0, Script var1, boolean var2) { - if (var0 == ScriptOpcodes.VIEWPORT_SETFOV) { - Interpreter.Interpreter_intStackSize -= 2; - Client.field881 = (short)Buddy.method5298(Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]); - if (Client.field881 <= 0) { - Client.field881 = 256; - } + @Export("convertJpgToSprite") + public static final Sprite convertJpgToSprite(byte[] var0) { + BufferedImage var1 = null; - Client.field882 = (short)Buddy.method5298(Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]); - if (Client.field882 <= 0) { - Client.field882 = 256; - } - - return 1; - } else if (var0 == ScriptOpcodes.VIEWPORT_SETZOOM) { - Interpreter.Interpreter_intStackSize -= 2; - Client.zoomHeight = (short)Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - if (Client.zoomHeight <= 0) { - Client.zoomHeight = 256; - } - - Client.zoomWidth = (short)Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - if (Client.zoomWidth <= 0) { - Client.zoomWidth = 320; - } - - return 1; - } else if (var0 == ScriptOpcodes.VIEWPORT_CLAMPFOV) { - Interpreter.Interpreter_intStackSize -= 4; - Client.field885 = (short)Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - if (Client.field885 <= 0) { - Client.field885 = 1; - } - - Client.field886 = (short)Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - if (Client.field886 <= 0) { - Client.field886 = 32767; - } else if (Client.field886 < Client.field885) { - Client.field886 = Client.field885; - } - - Client.field844 = (short)Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 2]; - if (Client.field844 <= 0) { - Client.field844 = 1; - } - - Client.field888 = (short)Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 3]; - if (Client.field888 <= 0) { - Client.field888 = 32767; - } else if (Client.field888 < Client.field844) { - Client.field888 = Client.field844; - } - - return 1; - } else if (var0 == ScriptOpcodes.VIEWPORT_GETEFFECTIVESIZE) { - if (Client.viewportWidget != null) { - Calendar.setViewportShape(0, 0, Client.viewportWidget.width, Client.viewportWidget.height, false); - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = Client.viewportWidth; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = Client.viewportHeight; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = -1; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = -1; - } - - return 1; - } else if (var0 == ScriptOpcodes.VIEWPORT_GETZOOM) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = Client.zoomHeight; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = Client.zoomWidth; - return 1; - } else if (var0 == ScriptOpcodes.VIEWPORT_GETFOV) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = class30.method608(Client.field881); - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = class30.method608(Client.field882); - return 1; - } else if (var0 == 6220) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - return 1; - } else if (var0 == 6221) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - return 1; - } else if (var0 == 6222) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = class286.canvasWidth; - return 1; - } else if (var0 == 6223) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = FloorUnderlayDefinition.canvasHeight; - return 1; - } else { - return 2; + try { + var1 = ImageIO.read(new ByteArrayInputStream(var0)); + int var2 = var1.getWidth(); + int var3 = var1.getHeight(); + int[] var4 = new int[var3 * var2]; + PixelGrabber var5 = new PixelGrabber(var1, 0, 0, var2, var3, var4, 0, var2); + var5.grabPixels(); + return new Sprite(var4, var2, var3); + } catch (IOException var7) { + } catch (InterruptedException var8) { } + + return new Sprite(0, 0); } - @ObfuscatedName("hx") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "790198016" + signature = "(IIIZII)J", + garbageValue = "-1903712375" ) - static final void method1172() { - for (Projectile var0 = (Projectile)Client.projectiles.last(); var0 != null; var0 = (Projectile)Client.projectiles.previous()) { - if (var0.plane == Player.Client_plane && Client.cycle <= var0.cycleEnd) { - if (Client.cycle >= var0.cycleStart) { - if (var0.targetIndex > 0) { - NPC var1 = Client.npcs[var0.targetIndex - 1]; - if (var1 != null && var1.x >= 0 && var1.x < 13312 && var1.y >= 0 && var1.y < 13312) { - var0.setDestination(var1.x, var1.y, GraphicsObject.getTileHeight(var1.x, var1.y, var0.plane) - var0.endHeight, Client.cycle); - } - } + @Export("calculateTag") + public static long calculateTag(int var0, int var1, int var2, boolean var3, int var4) { + long var5 = (long)((var0 & 127) << 0 | (var1 & 127) << 7 | (var2 & 3) << 14) | ((long)var4 & 4294967295L) << 17; + if (var3) { + var5 |= 65536L; + } - if (var0.targetIndex < 0) { - int var2 = -var0.targetIndex - 1; - Player var3; - if (var2 == Client.localPlayerIndex) { - var3 = class215.localPlayer; - } else { - var3 = Client.players[var2]; - } + return var5; + } - if (var3 != null && var3.x >= 0 && var3.x < 13312 && var3.y >= 0 && var3.y < 13312) { - var0.setDestination(var3.x, var3.y, GraphicsObject.getTileHeight(var3.x, var3.y, var0.plane) - var0.endHeight, Client.cycle); - } - } + @ObfuscatedName("fh") + @ObfuscatedSignature( + signature = "(III)V", + garbageValue = "927465818" + ) + @Export("playSoundJingle") + static void playSoundJingle(int var0, int var1) { + if (Client.musicVolume != 0 && var0 != -1) { + class65.playMusicTrack(ScriptFrame.archive11, var0, 0, Client.musicVolume, false); + Client.field742 = true; + } - var0.advance(Client.field693); - WorldMapArea.scene.drawEntity(Player.Client_plane, (int)var0.x, (int)var0.y, (int)var0.z, 60, var0, var0.yaw, -1L, false); - } + } + + @ObfuscatedName("gn") + @ObfuscatedSignature( + signature = "(II)V", + garbageValue = "-1069270710" + ) + @Export("setWindowedMode") + static void setWindowedMode(int var0) { + Client.field652 = 0L; + if (var0 >= 2) { + Client.isResizable = true; + } else { + Client.isResizable = false; + } + + if (class43.getWindowedMode() == 1) { + AbstractWorldMapIcon.client.setMaxCanvasSize(765, 503); + } else { + AbstractWorldMapIcon.client.setMaxCanvasSize(7680, 2160); + } + + if (Client.gameState >= 25) { + PacketBufferNode var1 = ModelData0.getPacketBufferNode(ClientPacket.field2218, Client.packetWriter.isaacCipher); + var1.packetBuffer.writeByte(class43.getWindowedMode()); + var1.packetBuffer.writeShort(BoundaryObject.canvasWidth); + var1.packetBuffer.writeShort(WorldMapCacheName.canvasHeight); + Client.packetWriter.addNode(var1); + } + + } + + @ObfuscatedName("he") + @ObfuscatedSignature( + signature = "(III)V", + garbageValue = "590231719" + ) + @Export("calculateMenuBounds") + static void calculateMenuBounds(int var0, int var1) { + int var2 = JagexCache.fontBold12.stringWidth("Choose Option"); + + int var3; + for (var3 = 0; var3 < Client.menuOptionsCount; ++var3) { + Font var4 = JagexCache.fontBold12; + String var5; + if (var3 < 0) { + var5 = ""; + } else if (Client.menuTargets[var3].length() > 0) { + var5 = Client.menuActions[var3] + " " + Client.menuTargets[var3]; } else { - var0.remove(); + var5 = Client.menuActions[var3]; + } + + int var6 = var4.stringWidth(var5); + if (var6 > var2) { + var2 = var6; } } + var2 += 8; + var3 = Client.menuOptionsCount * 15 + 22; + int var7 = var0 - var2 / 2; + if (var7 + var2 > BoundaryObject.canvasWidth) { + var7 = BoundaryObject.canvasWidth - var2; + } + + if (var7 < 0) { + var7 = 0; + } + + int var8 = var1; + if (var1 + var3 > WorldMapCacheName.canvasHeight) { + var8 = WorldMapCacheName.canvasHeight - var3; + } + + if (var8 < 0) { + var8 = 0; + } + + HealthBar.menuX = var7; + class191.menuY = var8; + TileItemPile.menuWidth = var2; + SoundSystem.menuHeight = Client.menuOptionsCount * 15 + 22; } } diff --git a/runescape-client/src/main/java/MouseRecorder.java b/runescape-client/src/main/java/MouseRecorder.java index 7a6756f10f..49964ebef9 100644 --- a/runescape-client/src/main/java/MouseRecorder.java +++ b/runescape-client/src/main/java/MouseRecorder.java @@ -4,34 +4,30 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("be") +@ObfuscatedName("br") @Implements("MouseRecorder") public class MouseRecorder implements Runnable { - @ObfuscatedName("le") - @ObfuscatedGetter( - intValue = 640967809 - ) - @Export("selectedItemSlot") - static int selectedItemSlot; - @ObfuscatedName("a") + @ObfuscatedName("e") + static int[] field588; + @ObfuscatedName("u") @Export("isRunning") boolean isRunning; - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("lock") Object lock; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = -1581840103 + intValue = -499559501 ) @Export("index") int index; - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("xs") int[] xs; - @ObfuscatedName("v") + @ObfuscatedName("z") @Export("ys") int[] ys; - @ObfuscatedName("l") + @ObfuscatedName("p") @Export("millis") long[] millis; @@ -45,7 +41,7 @@ public class MouseRecorder implements Runnable { } public void run() { - for (; this.isRunning; ClanChat.method5367(50L)) { + while (this.isRunning) { synchronized(this.lock) { if (this.index < 500) { this.xs[this.index] = MouseHandler.MouseHandler_x; @@ -54,61 +50,29 @@ public class MouseRecorder implements Runnable { ++this.index; } } + + long var4 = 49L; + + try { + Thread.sleep(var4); + } catch (InterruptedException var7) { + } + + try { + Thread.sleep(1L); + } catch (InterruptedException var6) { + } } } - @ObfuscatedName("k") + @ObfuscatedName("jc") @ObfuscatedSignature( - signature = "(Lbk;I)V", - garbageValue = "1813919369" + signature = "(B)Z", + garbageValue = "42" ) - @Export("changeWorld") - static void changeWorld(World var0) { - if (var0.isMembersOnly() != Client.isMembersWorld) { - Client.isMembersWorld = var0.isMembersOnly(); - boolean var1 = var0.isMembersOnly(); - if (var1 != ItemDefinition.ItemDefinition_inMembersWorld) { - FriendSystem.method2038(); - ItemDefinition.ItemDefinition_inMembersWorld = var1; - } - } - - WorldMapAreaData.worldHost = var0.host; - Client.worldId = var0.id; - Client.worldProperties = var0.properties; - class222.port1 = Client.gameBuild == 0 ? 43594 : var0.id + 40000; - Decimator.port2 = Client.gameBuild == 0 ? 443 : var0.id + 50000; - GrandExchangeOfferUnitPriceComparator.port3 = class222.port1; - } - - @ObfuscatedName("go") - @ObfuscatedSignature( - signature = "(Lbj;IIB)V", - garbageValue = "-6" - ) - @Export("performPlayerAnimation") - static void performPlayerAnimation(Player var0, int var1, int var2) { - if (var0.sequence == var1 && var1 != -1) { - int var3 = PlayerType.SequenceDefinition_get(var1).field3521; - if (var3 == 1) { - var0.sequenceFrame = 0; - var0.sequenceFrameCycle = 0; - var0.sequenceDelay = var2; - var0.field960 = 0; - } - - if (var3 == 2) { - var0.field960 = 0; - } - } else if (var1 == -1 || var0.sequence == -1 || PlayerType.SequenceDefinition_get(var1).field3519 >= PlayerType.SequenceDefinition_get(var0.sequence).field3519) { - var0.sequence = var1; - var0.sequenceFrame = 0; - var0.sequenceFrameCycle = 0; - var0.sequenceDelay = var2; - var0.field960 = 0; - var0.field983 = var0.pathLength; - } - + @Export("getTapToDrop") + static boolean getTapToDrop() { + return Client.tapToDrop; } } diff --git a/runescape-client/src/main/java/MouseWheel.java b/runescape-client/src/main/java/MouseWheel.java index 4fc958281b..d8420503a1 100644 --- a/runescape-client/src/main/java/MouseWheel.java +++ b/runescape-client/src/main/java/MouseWheel.java @@ -3,13 +3,13 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("fl") +@ObfuscatedName("fk") @Implements("MouseWheel") public interface MouseWheel { - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( signature = "(I)I", - garbageValue = "888914952" + garbageValue = "1495571934" ) @Export("useRotation") int useRotation(); diff --git a/runescape-client/src/main/java/MouseWheelHandler.java b/runescape-client/src/main/java/MouseWheelHandler.java index 3baf588175..da27b33582 100644 --- a/runescape-client/src/main/java/MouseWheelHandler.java +++ b/runescape-client/src/main/java/MouseWheelHandler.java @@ -7,12 +7,12 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("af") +@ObfuscatedName("ap") @Implements("MouseWheelHandler") public final class MouseWheelHandler implements MouseWheel, MouseWheelListener { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedGetter( - intValue = -834317935 + intValue = 190374331 ) @Export("rotation") int rotation; @@ -21,30 +21,30 @@ public final class MouseWheelHandler implements MouseWheel, MouseWheelListener { this.rotation = 0; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Ljava/awt/Component;I)V", - garbageValue = "1303554661" + signature = "(Ljava/awt/Component;S)V", + garbageValue = "-24898" ) @Export("addTo") void addTo(Component var1) { var1.addMouseWheelListener(this); } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Ljava/awt/Component;B)V", - garbageValue = "31" + signature = "(Ljava/awt/Component;I)V", + garbageValue = "-1909851609" ) @Export("removeFrom") void removeFrom(Component var1) { var1.removeMouseWheelListener(this); } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( signature = "(I)I", - garbageValue = "888914952" + garbageValue = "1495571934" ) @Export("useRotation") public synchronized int useRotation() { diff --git a/runescape-client/src/main/java/MusicPatch.java b/runescape-client/src/main/java/MusicPatch.java index 0d486c5be9..fbef2dd30c 100644 --- a/runescape-client/src/main/java/MusicPatch.java +++ b/runescape-client/src/main/java/MusicPatch.java @@ -4,44 +4,47 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("gz") +@ObfuscatedName("gv") @Implements("MusicPatch") public class MusicPatch extends Node { - @ObfuscatedName("a") + @ObfuscatedName("so") + @Export("foundItemIds") + static short[] foundItemIds; + @ObfuscatedName("u") @ObfuscatedGetter( - intValue = -741608303 + intValue = -2129505551 ) - int field2454; - @ObfuscatedName("t") + int field2489; + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "[Lca;" + signature = "[Lcw;" ) @Export("rawSounds") RawSound[] rawSounds; - @ObfuscatedName("n") - short[] field2460; - @ObfuscatedName("q") - byte[] field2453; - @ObfuscatedName("v") - byte[] field2457; - @ObfuscatedName("l") + @ObfuscatedName("b") + short[] field2485; + @ObfuscatedName("g") + byte[] field2486; + @ObfuscatedName("z") + byte[] field2483; + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "[Lgp;" + signature = "[Lgl;" ) - MusicPatchNode2[] field2458; - @ObfuscatedName("c") - byte[] field2459; - @ObfuscatedName("o") - int[] field2455; + MusicPatchNode2[] field2488; + @ObfuscatedName("h") + byte[] field2487; + @ObfuscatedName("y") + int[] field2492; MusicPatch(byte[] var1) { this.rawSounds = new RawSound[128]; - this.field2460 = new short[128]; - this.field2453 = new byte[128]; - this.field2457 = new byte[128]; - this.field2458 = new MusicPatchNode2[128]; - this.field2459 = new byte[128]; - this.field2455 = new int[128]; + this.field2485 = new short[128]; + this.field2486 = new byte[128]; + this.field2483 = new byte[128]; + this.field2488 = new MusicPatchNode2[128]; + this.field2487 = new byte[128]; + this.field2492 = new int[128]; Buffer var2 = new Buffer(var1); int var3; @@ -121,13 +124,13 @@ public class MusicPatch extends Node { var40 = var39[var14] = new MusicPatchNode2(); int var16 = var2.readUnsignedByte(); if (var16 > 0) { - var40.field2364 = new byte[var16 * 2]; + var40.field2404 = new byte[var16 * 2]; } var16 = var2.readUnsignedByte(); if (var16 > 0) { - var40.field2361 = new byte[var16 * 2 + 2]; - var40.field2361[1] = 64; + var40.field2399 = new byte[var16 * 2 + 2]; + var40.field2399[1] = 64; } } @@ -154,7 +157,7 @@ public class MusicPatch extends Node { int var20; for (var20 = 0; var20 < 128; ++var20) { var19 += var2.readUnsignedByte(); - this.field2460[var20] = (short)var19; + this.field2485[var20] = (short)var19; } var19 = 0; @@ -162,7 +165,7 @@ public class MusicPatch extends Node { short[] var50; for (var20 = 0; var20 < 128; ++var20) { var19 += var2.readUnsignedByte(); - var50 = this.field2460; + var50 = this.field2485; var50[var20] = (short)(var50[var20] + (var19 << 8)); } @@ -182,9 +185,9 @@ public class MusicPatch extends Node { var22 = var2.readVarInt(); } - var50 = this.field2460; + var50 = this.field2485; var50[var23] = (short)(var50[var23] + ((var22 - 1 & 2) << 14)); - this.field2455[var23] = var22; + this.field2492[var23] = var22; --var20; } @@ -194,7 +197,7 @@ public class MusicPatch extends Node { int var24; for (var24 = 0; var24 < 128; ++var24) { - if (this.field2455[var24] != 0) { + if (this.field2492[var24] != 0) { if (var20 == 0) { if (var21 < var4.length) { var20 = var4[var21++]; @@ -205,7 +208,7 @@ public class MusicPatch extends Node { var23 = var2.array[var5++] - 1; } - this.field2459[var24] = (byte)var23; + this.field2487[var24] = (byte)var23; --var20; } } @@ -215,7 +218,7 @@ public class MusicPatch extends Node { var24 = 0; for (int var25 = 0; var25 < 128; ++var25) { - if (this.field2455[var25] != 0) { + if (this.field2492[var25] != 0) { if (var20 == 0) { if (var21 < var7.length) { var20 = var7[var21++]; @@ -226,7 +229,7 @@ public class MusicPatch extends Node { var24 = var2.array[var8++] + 16 << 2; } - this.field2457[var25] = (byte)var24; + this.field2483[var25] = (byte)var24; --var20; } } @@ -237,7 +240,7 @@ public class MusicPatch extends Node { int var26; for (var26 = 0; var26 < 128; ++var26) { - if (this.field2455[var26] != 0) { + if (this.field2492[var26] != 0) { if (var20 == 0) { var42 = var39[var38[var21]]; if (var21 < var10.length) { @@ -247,7 +250,7 @@ public class MusicPatch extends Node { } } - this.field2458[var26] = var42; + this.field2488[var26] = var42; --var20; } } @@ -265,30 +268,30 @@ public class MusicPatch extends Node { var20 = -1; } - if (this.field2455[var27] > 0) { + if (this.field2492[var27] > 0) { var26 = var2.readUnsignedByte() + 1; } } - this.field2453[var27] = (byte)var26; + this.field2486[var27] = (byte)var26; --var20; } - this.field2454 = var2.readUnsignedByte() + 1; + this.field2489 = var2.readUnsignedByte() + 1; MusicPatchNode2 var28; int var29; for (var27 = 0; var27 < var12; ++var27) { var28 = var39[var27]; - if (var28.field2364 != null) { - for (var29 = 1; var29 < var28.field2364.length; var29 += 2) { - var28.field2364[var29] = var2.readByte(); + if (var28.field2404 != null) { + for (var29 = 1; var29 < var28.field2404.length; var29 += 2) { + var28.field2404[var29] = var2.readByte(); } } - if (var28.field2361 != null) { - for (var29 = 3; var29 < var28.field2361.length - 2; var29 += 2) { - var28.field2361[var29] = var2.readByte(); + if (var28.field2399 != null) { + for (var29 = 3; var29 < var28.field2399.length - 2; var29 += 2) { + var28.field2399[var29] = var2.readByte(); } } } @@ -307,24 +310,24 @@ public class MusicPatch extends Node { for (var27 = 0; var27 < var12; ++var27) { var28 = var39[var27]; - if (var28.field2361 != null) { + if (var28.field2399 != null) { var19 = 0; - for (var29 = 2; var29 < var28.field2361.length; var29 += 2) { + for (var29 = 2; var29 < var28.field2399.length; var29 += 2) { var19 = 1 + var19 + var2.readUnsignedByte(); - var28.field2361[var29] = (byte)var19; + var28.field2399[var29] = (byte)var19; } } } for (var27 = 0; var27 < var12; ++var27) { var28 = var39[var27]; - if (var28.field2364 != null) { + if (var28.field2404 != null) { var19 = 0; - for (var29 = 2; var29 < var28.field2364.length; var29 += 2) { + for (var29 = 2; var29 < var28.field2404.length; var29 += 2) { var19 = 1 + var19 + var2.readUnsignedByte(); - var28.field2364[var29] = (byte)var19; + var28.field2404[var29] = (byte)var19; } } } @@ -350,7 +353,7 @@ public class MusicPatch extends Node { byte var43 = var47[1]; for (var29 = 0; var29 < var46; ++var29) { - this.field2453[var29] = (byte)(var43 * this.field2453[var29] + 32 >> 6); + this.field2486[var29] = (byte)(var43 * this.field2486[var29] + 32 >> 6); } for (var29 = 2; var29 < var47.length; var29 += 2) { @@ -361,8 +364,8 @@ public class MusicPatch extends Node { for (var33 = var46; var33 < var30; ++var33) { var35 = var30 - var46; var36 = var32 >>> 31; - var34 = (var32 + var36) / var35 - var36; - this.field2453[var33] = (byte)(var34 * this.field2453[var33] + 32 >> 6); + var34 = (var36 + var32) / var35 - var36; + this.field2486[var33] = (byte)(var34 * this.field2486[var33] + 32 >> 6); var32 += var31 - var43; } @@ -371,7 +374,7 @@ public class MusicPatch extends Node { } for (var44 = var46; var44 < 128; ++var44) { - this.field2453[var44] = (byte)(var43 * this.field2453[var44] + 32 >> 6); + this.field2486[var44] = (byte)(var43 * this.field2486[var44] + 32 >> 6); } var40 = null; @@ -390,7 +393,7 @@ public class MusicPatch extends Node { int var49 = var41[1] << 1; for (var29 = 0; var29 < var46; ++var29) { - var44 = var49 + (this.field2457[var29] & 255); + var44 = var49 + (this.field2483[var29] & 255); if (var44 < 0) { var44 = 0; } @@ -399,7 +402,7 @@ public class MusicPatch extends Node { var44 = 128; } - this.field2457[var29] = (byte)var44; + this.field2483[var29] = (byte)var44; } int var45; @@ -411,8 +414,8 @@ public class MusicPatch extends Node { for (var33 = var46; var33 < var30; ++var33) { var35 = var30 - var46; var36 = var32 >>> 31; - var34 = (var32 + var36) / var35 - var36; - int var37 = var34 + (this.field2457[var33] & 255); + var34 = (var36 + var32) / var35 - var36; + int var37 = var34 + (this.field2483[var33] & 255); if (var37 < 0) { var37 = 0; } @@ -421,7 +424,7 @@ public class MusicPatch extends Node { var37 = 128; } - this.field2457[var33] = (byte)var37; + this.field2483[var33] = (byte)var37; var32 += var45 - var49; } @@ -430,7 +433,7 @@ public class MusicPatch extends Node { } for (var44 = var46; var44 < 128; ++var44) { - var45 = var49 + (this.field2457[var44] & 255); + var45 = var49 + (this.field2483[var44] & 255); if (var45 < 0) { var45 = 0; } @@ -439,66 +442,66 @@ public class MusicPatch extends Node { var45 = 128; } - this.field2457[var44] = (byte)var45; + this.field2483[var44] = (byte)var45; } Object var48 = null; } for (var27 = 0; var27 < var12; ++var27) { - var39[var27].field2371 = var2.readUnsignedByte(); + var39[var27].field2400 = var2.readUnsignedByte(); } for (var27 = 0; var27 < var12; ++var27) { var28 = var39[var27]; - if (var28.field2364 != null) { - var28.field2366 = var2.readUnsignedByte(); + if (var28.field2404 != null) { + var28.field2398 = var2.readUnsignedByte(); } - if (var28.field2361 != null) { - var28.field2363 = var2.readUnsignedByte(); + if (var28.field2399 != null) { + var28.field2407 = var2.readUnsignedByte(); } - if (var28.field2371 > 0) { - var28.field2365 = var2.readUnsignedByte(); + if (var28.field2400 > 0) { + var28.field2403 = var2.readUnsignedByte(); } } for (var27 = 0; var27 < var12; ++var27) { - var39[var27].field2367 = var2.readUnsignedByte(); + var39[var27].field2405 = var2.readUnsignedByte(); } for (var27 = 0; var27 < var12; ++var27) { var28 = var39[var27]; - if (var28.field2367 > 0) { - var28.field2360 = var2.readUnsignedByte(); + if (var28.field2405 > 0) { + var28.field2401 = var2.readUnsignedByte(); } } for (var27 = 0; var27 < var12; ++var27) { var28 = var39[var27]; - if (var28.field2360 > 0) { - var28.field2368 = var2.readUnsignedByte(); + if (var28.field2401 > 0) { + var28.field2402 = var2.readUnsignedByte(); } } } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Ldm;[B[II)Z", - garbageValue = "1918163087" + signature = "(Ldk;[B[II)Z", + garbageValue = "-1839137697" ) - boolean method4034(SoundCache var1, byte[] var2, int[] var3) { + boolean method3952(SoundCache var1, byte[] var2, int[] var3) { boolean var4 = true; int var5 = 0; RawSound var6 = null; for (int var7 = 0; var7 < 128; ++var7) { if (var2 == null || var2[var7] != 0) { - int var8 = this.field2455[var7]; + int var8 = this.field2492[var7]; if (var8 != 0) { - if (var8 != var5) { + if (var5 != var8) { var5 = var8--; if ((var8 & 1) == 0) { var6 = var1.getSoundEffect(var8 >> 2, var3); @@ -513,7 +516,7 @@ public class MusicPatch extends Node { if (var6 != null) { this.rawSounds[var7] = var6; - this.field2455[var7] = 0; + this.field2492[var7] = 0; } } } @@ -522,22 +525,13 @@ public class MusicPatch extends Node { return var4; } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "21882100" + garbageValue = "-1390506407" ) @Export("clear") void clear() { - this.field2455 = null; - } - - @ObfuscatedName("t") - @ObfuscatedSignature( - signature = "(S)I", - garbageValue = "13081" - ) - static int method4037() { - return 12; + this.field2492 = null; } } diff --git a/runescape-client/src/main/java/MusicPatchNode.java b/runescape-client/src/main/java/MusicPatchNode.java index fb5ef126ff..f3be798276 100644 --- a/runescape-client/src/main/java/MusicPatchNode.java +++ b/runescape-client/src/main/java/MusicPatchNode.java @@ -4,145 +4,159 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("gq") +@ObfuscatedName("ge") @Implements("MusicPatchNode") public class MusicPatchNode extends Node { - @ObfuscatedName("kl") - @ObfuscatedGetter( - intValue = -1634536661 - ) - @Export("menuX") - static int menuX; - @ObfuscatedName("a") - @ObfuscatedGetter( - intValue = 830928495 - ) - int field2425; - @ObfuscatedName("t") + @ObfuscatedName("pr") @ObfuscatedSignature( - signature = "Lgz;" + signature = "Lkc;" + ) + @Export("privateChatMode") + static PrivateChatMode privateChatMode; + @ObfuscatedName("u") + @ObfuscatedGetter( + intValue = 58684745 + ) + int field2449; + @ObfuscatedName("f") + @ObfuscatedSignature( + signature = "Lgv;" ) @Export("patch") MusicPatch patch; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Lca;" + signature = "Lcw;" ) @Export("rawSound") RawSound rawSound; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Lgp;" + signature = "Lgl;" ) - MusicPatchNode2 field2417; - @ObfuscatedName("v") + MusicPatchNode2 field2448; + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = -1191451859 + intValue = -554118983 ) - int field2422; - @ObfuscatedName("l") - @ObfuscatedGetter( - intValue = 157095745 - ) - int field2419; - @ObfuscatedName("c") - @ObfuscatedGetter( - intValue = -1068242143 - ) - int field2430; - @ObfuscatedName("o") - @ObfuscatedGetter( - intValue = 747760665 - ) - int field2421; - @ObfuscatedName("i") - @ObfuscatedGetter( - intValue = 2032697643 - ) - int field2416; - @ObfuscatedName("d") - @ObfuscatedGetter( - intValue = 910822609 - ) - int field2423; - @ObfuscatedName("m") - @ObfuscatedGetter( - intValue = -233419885 - ) - int field2424; + int field2445; @ObfuscatedName("p") @ObfuscatedGetter( - intValue = 1986379776 + intValue = 964723385 ) - int field2420; + int field2450; @ObfuscatedName("h") @ObfuscatedGetter( - intValue = -1890707239 + intValue = -1158780531 ) - int field2431; + int field2451; + @ObfuscatedName("y") + @ObfuscatedGetter( + intValue = 1961661549 + ) + int field2452; + @ObfuscatedName("w") + @ObfuscatedGetter( + intValue = -1743896361 + ) + int field2465; + @ObfuscatedName("i") + @ObfuscatedGetter( + intValue = -1656176453 + ) + int field2454; @ObfuscatedName("k") @ObfuscatedGetter( - intValue = -1386699845 + intValue = -146534819 ) - int field2427; + int field2455; @ObfuscatedName("x") @ObfuscatedGetter( - intValue = -1121905843 + intValue = 671001671 ) - int field2428; - @ObfuscatedName("j") + int field2456; + @ObfuscatedName("o") @ObfuscatedGetter( - intValue = 40924709 + intValue = 1362014437 ) - int field2429; - @ObfuscatedName("r") - @ObfuscatedGetter( - intValue = -141158297 - ) - int field2426; + int field2457; @ObfuscatedName("e") @ObfuscatedGetter( - intValue = -964518569 + intValue = -1068746099 ) - int field2414; - @ObfuscatedName("s") + int field2458; + @ObfuscatedName("n") + @ObfuscatedGetter( + intValue = -362402475 + ) + int field2459; + @ObfuscatedName("r") + @ObfuscatedGetter( + intValue = 1829652009 + ) + int field2460; + @ObfuscatedName("c") + @ObfuscatedGetter( + intValue = -1900705041 + ) + int field2461; + @ObfuscatedName("a") + @ObfuscatedGetter( + intValue = 1048414071 + ) + int field2462; + @ObfuscatedName("d") @ObfuscatedSignature( signature = "Lds;" ) @Export("stream") RawPcmStream stream; - @ObfuscatedName("b") + @ObfuscatedName("s") @ObfuscatedGetter( - intValue = -312260617 + intValue = 871159735 ) - int field2433; - @ObfuscatedName("f") + int field2464; + @ObfuscatedName("m") @ObfuscatedGetter( - intValue = -2047299569 + intValue = 809397821 ) - int field2434; + int field2463; MusicPatchNode() { } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "1779627042" + garbageValue = "786622629" ) - void method3974() { + void method3893() { this.patch = null; this.rawSound = null; - this.field2417 = null; + this.field2448 = null; this.stream = null; } - @ObfuscatedName("o") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "428887942" + signature = "(II)Lio;", + garbageValue = "1955258484" ) - public static void method3973() { - WorldMapElement.WorldMapElement_cachedSprites.clear(); + @Export("getParamDefinition") + public static ParamDefinition getParamDefinition(int var0) { + ParamDefinition var1 = (ParamDefinition)ParamDefinition.ParamDefinition_cached.get((long)var0); + if (var1 != null) { + return var1; + } else { + byte[] var2 = ParamDefinition.ParamDefinition_archive.takeFile(11, var0); + var1 = new ParamDefinition(); + if (var2 != null) { + var1.decode(new Buffer(var2)); + } + + var1.postDecode(); + ParamDefinition.ParamDefinition_cached.put(var1, (long)var0); + return var1; + } } } diff --git a/runescape-client/src/main/java/MusicPatchNode2.java b/runescape-client/src/main/java/MusicPatchNode2.java index 7a705e9181..090aa7762f 100644 --- a/runescape-client/src/main/java/MusicPatchNode2.java +++ b/runescape-client/src/main/java/MusicPatchNode2.java @@ -3,104 +3,476 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; +import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("gp") +@ObfuscatedName("gl") @Implements("MusicPatchNode2") public class MusicPatchNode2 { - @ObfuscatedName("a") - byte[] field2364; - @ObfuscatedName("t") - byte[] field2361; - @ObfuscatedName("n") + @ObfuscatedName("u") + byte[] field2404; + @ObfuscatedName("f") + byte[] field2399; + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = -269057751 + intValue = 961983705 ) - int field2371; - @ObfuscatedName("q") + int field2400; + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = -390074671 + intValue = -1534544583 ) - int field2366; - @ObfuscatedName("v") + int field2398; + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = -1385616309 + intValue = 1071717921 ) - int field2363; - @ObfuscatedName("l") + int field2407; + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = 1962896855 + intValue = -461234171 ) - int field2365; - @ObfuscatedName("c") + int field2403; + @ObfuscatedName("h") @ObfuscatedGetter( - intValue = 353135561 + intValue = -1881467047 ) - int field2360; - @ObfuscatedName("o") + int field2401; + @ObfuscatedName("y") @ObfuscatedGetter( - intValue = -538931737 + intValue = 972491085 ) - int field2367; - @ObfuscatedName("i") + int field2405; + @ObfuscatedName("w") @ObfuscatedGetter( - intValue = 1418952589 + intValue = 381719823 ) - int field2368; + int field2402; MusicPatchNode2() { } - @ObfuscatedName("a") + @ObfuscatedName("g") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "-1508520519" + garbageValue = "1982714060" ) - static void method3829() { - class237.field3174 = new int[2000]; - int var0 = 0; - int var1 = 240; - - int var3; - for (byte var2 = 12; var0 < 16; var1 -= var2) { - var3 = WorldMapSprite.method472((double)((float)var1 / 360.0F), 0.9998999834060669D, (double)((float)var0 * 0.425F / 16.0F + 0.075F)); - class237.field3174[var0] = var3; - ++var0; - } - - var1 = 48; - - for (int var5 = var1 / 6; var0 < class237.field3174.length; var1 -= var5) { - var3 = var0 * 2; - - for (int var4 = WorldMapSprite.method472((double)((float)var1 / 360.0F), 0.9998999834060669D, 0.5D); var0 < var3 && var0 < class237.field3174.length; ++var0) { - class237.field3174[var0] = var4; + public static void method3750() { + if (KeyHandler.KeyHandler_instance != null) { + synchronized(KeyHandler.KeyHandler_instance) { + KeyHandler.KeyHandler_instance = null; } } } - @ObfuscatedName("a") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(Lhq;I)V", - garbageValue = "-1954771173" + signature = "(II)I", + garbageValue = "-847322953" ) - public static void method3831(AbstractArchive var0) { - FloorUnderlayDefinition.FloorUnderlayDefinition_archive = var0; + @Export("Messages_getHistorySize") + static int Messages_getHistorySize(int var0) { + ChatChannel var1 = (ChatChannel)Messages.Messages_channels.get(var0); + return var1 == null ? 0 : var1.size(); } - @ObfuscatedName("n") + @ObfuscatedName("aa") @ObfuscatedSignature( - signature = "(Lhq;IIIZI)V", - garbageValue = "1856110966" + signature = "(ILci;ZI)I", + garbageValue = "1322591078" ) - @Export("playMusicTrack") - public static void playMusicTrack(AbstractArchive var0, int var1, int var2, int var3, boolean var4) { - class197.field2377 = 1; - class247.musicTrackArchive = var0; - class189.musicTrackGroupId = var1; - class197.musicTrackFileId = var2; - class197.musicTrackVolume = var3; - ScriptFrame.musicTrackBoolean = var4; - class197.field2384 = 10000; + static int method3747(int var0, Script var1, boolean var2) { + if (var0 == ScriptOpcodes.CHAT_GETFILTER_PUBLIC) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Client.publicChatMode; + return 1; + } else if (var0 == ScriptOpcodes.CHAT_SETFILTER) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 3; + Client.publicChatMode = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + MusicPatchNode.privateChatMode = User.method5131(Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]); + if (MusicPatchNode.privateChatMode == null) { + MusicPatchNode.privateChatMode = PrivateChatMode.field3792; + } + + Client.tradeChatMode = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 2]; + PacketBufferNode var18 = ModelData0.getPacketBufferNode(ClientPacket.field2270, Client.packetWriter.isaacCipher); + var18.packetBuffer.writeByte(Client.publicChatMode); + var18.packetBuffer.writeByte(MusicPatchNode.privateChatMode.field3795); + var18.packetBuffer.writeByte(Client.tradeChatMode); + Client.packetWriter.addNode(var18); + return 1; + } else { + String var3; + int var4; + if (var0 == ScriptOpcodes.CHAT_SENDABUSEREPORT) { + var3 = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]; + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var4 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + int var5 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + PacketBufferNode var6 = ModelData0.getPacketBufferNode(ClientPacket.field2312, Client.packetWriter.isaacCipher); + var6.packetBuffer.writeByte(class173.stringCp1252NullTerminatedByteSize(var3) + 2); + var6.packetBuffer.writeStringCp1252NullTerminated(var3); + var6.packetBuffer.writeByte(var4 - 1); + var6.packetBuffer.writeByte(var5); + Client.packetWriter.addNode(var6); + return 1; + } else { + int var10; + if (var0 == ScriptOpcodes.CHAT_GETHISTORY_BYTYPEANDLINE) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var10 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var4 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + Message var15 = class197.Messages_getByChannelAndID(var10, var4); + if (var15 != null) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var15.count; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var15.cycle; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var15.sender != null ? var15.sender : ""; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var15.prefix != null ? var15.prefix : ""; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var15.text != null ? var15.text : ""; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var15.isFromFriend() ? 1 : (var15.isFromIgnored() ? 2 : 0); + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = -1; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = ""; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = ""; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = ""; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + } + + return 1; + } else if (var0 == ScriptOpcodes.CHAT_GETHISTORY_BYUID) { + var10 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Message var16 = class286.Messages_getMessage(var10); + if (var16 != null) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var16.type; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var16.cycle; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var16.sender != null ? var16.sender : ""; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var16.prefix != null ? var16.prefix : ""; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var16.text != null ? var16.text : ""; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var16.isFromFriend() ? 1 : (var16.isFromIgnored() ? 2 : 0); + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = -1; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = ""; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = ""; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = ""; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + } + + return 1; + } else if (var0 == ScriptOpcodes.CHAT_GETFILTER_PRIVATE) { + if (MusicPatchNode.privateChatMode == null) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = -1; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = MusicPatchNode.privateChatMode.field3795; + } + + return 1; + } else if (var0 == ScriptOpcodes.CHAT_SENDPUBLIC) { + var3 = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]; + var4 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + String var14 = var3.toLowerCase(); + byte var17 = 0; + if (var14.startsWith("yellow:")) { + var17 = 0; + var3 = var3.substring("yellow:".length()); + } else if (var14.startsWith("red:")) { + var17 = 1; + var3 = var3.substring("red:".length()); + } else if (var14.startsWith("green:")) { + var17 = 2; + var3 = var3.substring("green:".length()); + } else if (var14.startsWith("cyan:")) { + var17 = 3; + var3 = var3.substring("cyan:".length()); + } else if (var14.startsWith("purple:")) { + var17 = 4; + var3 = var3.substring("purple:".length()); + } else if (var14.startsWith("white:")) { + var17 = 5; + var3 = var3.substring("white:".length()); + } else if (var14.startsWith("flash1:")) { + var17 = 6; + var3 = var3.substring("flash1:".length()); + } else if (var14.startsWith("flash2:")) { + var17 = 7; + var3 = var3.substring("flash2:".length()); + } else if (var14.startsWith("flash3:")) { + var17 = 8; + var3 = var3.substring("flash3:".length()); + } else if (var14.startsWith("glow1:")) { + var17 = 9; + var3 = var3.substring("glow1:".length()); + } else if (var14.startsWith("glow2:")) { + var17 = 10; + var3 = var3.substring("glow2:".length()); + } else if (var14.startsWith("glow3:")) { + var17 = 11; + var3 = var3.substring("glow3:".length()); + } else if (VarbitDefinition.clientLanguage != Language.Language_EN) { + if (var14.startsWith("yellow:")) { + var17 = 0; + var3 = var3.substring("yellow:".length()); + } else if (var14.startsWith("red:")) { + var17 = 1; + var3 = var3.substring("red:".length()); + } else if (var14.startsWith("green:")) { + var17 = 2; + var3 = var3.substring("green:".length()); + } else if (var14.startsWith("cyan:")) { + var17 = 3; + var3 = var3.substring("cyan:".length()); + } else if (var14.startsWith("purple:")) { + var17 = 4; + var3 = var3.substring("purple:".length()); + } else if (var14.startsWith("white:")) { + var17 = 5; + var3 = var3.substring("white:".length()); + } else if (var14.startsWith("flash1:")) { + var17 = 6; + var3 = var3.substring("flash1:".length()); + } else if (var14.startsWith("flash2:")) { + var17 = 7; + var3 = var3.substring("flash2:".length()); + } else if (var14.startsWith("flash3:")) { + var17 = 8; + var3 = var3.substring("flash3:".length()); + } else if (var14.startsWith("glow1:")) { + var17 = 9; + var3 = var3.substring("glow1:".length()); + } else if (var14.startsWith("glow2:")) { + var17 = 10; + var3 = var3.substring("glow2:".length()); + } else if (var14.startsWith("glow3:")) { + var17 = 11; + var3 = var3.substring("glow3:".length()); + } + } + + var14 = var3.toLowerCase(); + byte var7 = 0; + if (var14.startsWith("wave:")) { + var7 = 1; + var3 = var3.substring("wave:".length()); + } else if (var14.startsWith("wave2:")) { + var7 = 2; + var3 = var3.substring("wave2:".length()); + } else if (var14.startsWith("shake:")) { + var7 = 3; + var3 = var3.substring("shake:".length()); + } else if (var14.startsWith("scroll:")) { + var7 = 4; + var3 = var3.substring("scroll:".length()); + } else if (var14.startsWith("slide:")) { + var7 = 5; + var3 = var3.substring("slide:".length()); + } else if (VarbitDefinition.clientLanguage != Language.Language_EN) { + if (var14.startsWith("wave:")) { + var7 = 1; + var3 = var3.substring("wave:".length()); + } else if (var14.startsWith("wave2:")) { + var7 = 2; + var3 = var3.substring("wave2:".length()); + } else if (var14.startsWith("shake:")) { + var7 = 3; + var3 = var3.substring("shake:".length()); + } else if (var14.startsWith("scroll:")) { + var7 = 4; + var3 = var3.substring("scroll:".length()); + } else if (var14.startsWith("slide:")) { + var7 = 5; + var3 = var3.substring("slide:".length()); + } + } + + PacketBufferNode var8 = ModelData0.getPacketBufferNode(ClientPacket.field2305, Client.packetWriter.isaacCipher); + var8.packetBuffer.writeByte(0); + int var9 = var8.packetBuffer.offset; + var8.packetBuffer.writeByte(var4); + var8.packetBuffer.writeByte(var17); + var8.packetBuffer.writeByte(var7); + class289.method5388(var8.packetBuffer, var3); + var8.packetBuffer.writeLengthByte(var8.packetBuffer.offset - var9); + Client.packetWriter.addNode(var8); + return 1; + } else if (var0 == ScriptOpcodes.CHAT_SENDPRIVATE) { + class43.Interpreter_stringStackSize -= 2; + var3 = Interpreter.Interpreter_stringStack[class43.Interpreter_stringStackSize]; + String var12 = Interpreter.Interpreter_stringStack[class43.Interpreter_stringStackSize + 1]; + PacketBufferNode var11 = ModelData0.getPacketBufferNode(ClientPacket.field2229, Client.packetWriter.isaacCipher); + var11.packetBuffer.writeShort(0); + int var13 = var11.packetBuffer.offset; + var11.packetBuffer.writeStringCp1252NullTerminated(var3); + class289.method5388(var11.packetBuffer, var12); + var11.packetBuffer.writeLengthShort(var11.packetBuffer.offset - var13); + Client.packetWriter.addNode(var11); + return 1; + } else if (var0 != ScriptOpcodes.CHAT_PLAYERNAME) { + if (var0 == ScriptOpcodes.CHAT_GETFILTER_TRADE) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Client.tradeChatMode; + return 1; + } else if (var0 == ScriptOpcodes.CHAT_GETHISTORYLENGTH) { + var10 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Messages_getHistorySize(var10); + return 1; + } else if (var0 == ScriptOpcodes.CHAT_GETNEXTUID) { + var10 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = class40.Messages_getNextChatID(var10); + return 1; + } else if (var0 == ScriptOpcodes.CHAT_GETPREVUID) { + var10 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = CollisionMap.Messages_getLastChatID(var10); + return 1; + } else if (var0 == ScriptOpcodes.DOCHEAT) { + var3 = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]; + class13.doCheat(var3); + return 1; + } else if (var0 == ScriptOpcodes.CHAT_SETMESSAGEFILTER) { + Client.field860 = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize].toLowerCase().trim(); + return 1; + } else if (var0 == ScriptOpcodes.CHAT_GETMESSAGEFILTER) { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = Client.field860; + return 1; + } else if (var0 == ScriptOpcodes.DEBUGMES) { + var3 = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]; + System.out.println(var3); + return 1; + } else { + return 2; + } + } else { + if (class215.localPlayer != null && class215.localPlayer.username != null) { + var3 = class215.localPlayer.username.getName(); + } else { + var3 = ""; + } + + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var3; + return 1; + } + } + } + } + + @ObfuscatedName("kh") + @ObfuscatedSignature( + signature = "(Lhl;IIII)V", + garbageValue = "1306895592" + ) + @Export("drawMinimap") + static final void drawMinimap(Widget var0, int var1, int var2, int var3) { + Tiles.playPcmPlayers(); + SpriteMask var4 = var0.getSpriteMask(false); + if (var4 != null) { + Rasterizer2D.Rasterizer2D_setClip(var1, var2, var4.width + var1, var2 + var4.height); + if (Client.minimapState != 2 && Client.minimapState != 5) { + int var5 = Client.camAngleY & 2047; + int var6 = class215.localPlayer.x / 32 + 48; + int var7 = 464 - class215.localPlayer.y / 32; + Interpreter.sceneMinimapSprite.drawRotatedMaskedCenteredAround(var1, var2, var4.width, var4.height, var6, var7, var5, 256, var4.xStarts, var4.xWidths); + + int var8; + int var9; + int var10; + for (var8 = 0; var8 < Client.mapIconCount; ++var8) { + var9 = Client.mapIconXs[var8] * 4 + 2 - class215.localPlayer.x / 32; + var10 = Client.mapIconYs[var8] * 4 + 2 - class215.localPlayer.y / 32; + class185.drawSpriteOnMinimap(var1, var2, var9, var10, Client.mapIcons[var8], var4); + } + + int var11; + int var12; + for (var8 = 0; var8 < 104; ++var8) { + for (var9 = 0; var9 < 104; ++var9) { + NodeDeque var15 = Client.groundItems[ClientPacket.Client_plane][var8][var9]; + if (var15 != null) { + var11 = var8 * 4 + 2 - class215.localPlayer.x / 32; + var12 = var9 * 4 + 2 - class215.localPlayer.y / 32; + class185.drawSpriteOnMinimap(var1, var2, var11, var12, WorldMapData_0.mapDotSprites[0], var4); + } + } + } + + for (var8 = 0; var8 < Client.npcCount; ++var8) { + NPC var16 = Client.npcs[Client.npcIndices[var8]]; + if (var16 != null && var16.isVisible()) { + NPCDefinition var18 = var16.definition; + if (var18 != null && var18.transforms != null) { + var18 = var18.transform(); + } + + if (var18 != null && var18.drawMapDot && var18.isInteractable) { + var11 = var16.x / 32 - class215.localPlayer.x / 32; + var12 = var16.y / 32 - class215.localPlayer.y / 32; + class185.drawSpriteOnMinimap(var1, var2, var11, var12, WorldMapData_0.mapDotSprites[1], var4); + } + } + } + + var8 = Players.Players_count; + int[] var19 = Players.Players_indices; + + for (var10 = 0; var10 < var8; ++var10) { + Player var17 = Client.players[var19[var10]]; + if (var17 != null && var17.isVisible() && !var17.isHidden && var17 != class215.localPlayer) { + var12 = var17.x / 32 - class215.localPlayer.x / 32; + int var13 = var17.y / 32 - class215.localPlayer.y / 32; + boolean var14 = false; + if (class215.localPlayer.team != 0 && var17.team != 0 && var17.team == class215.localPlayer.team) { + var14 = true; + } + + if (var17.isFriend()) { + class185.drawSpriteOnMinimap(var1, var2, var12, var13, WorldMapData_0.mapDotSprites[3], var4); + } else if (var14) { + class185.drawSpriteOnMinimap(var1, var2, var12, var13, WorldMapData_0.mapDotSprites[4], var4); + } else if (var17.isClanMember()) { + class185.drawSpriteOnMinimap(var1, var2, var12, var13, WorldMapData_0.mapDotSprites[5], var4); + } else { + class185.drawSpriteOnMinimap(var1, var2, var12, var13, WorldMapData_0.mapDotSprites[2], var4); + } + } + } + + if (Client.hintArrowType != 0 && Client.cycle % 20 < 10) { + if (Client.hintArrowType == 1 && Client.hintArrowNpcIndex >= 0 && Client.hintArrowNpcIndex < Client.npcs.length) { + NPC var20 = Client.npcs[Client.hintArrowNpcIndex]; + if (var20 != null) { + var11 = var20.x / 32 - class215.localPlayer.x / 32; + var12 = var20.y / 32 - class215.localPlayer.y / 32; + WorldMapIcon_0.worldToMinimap(var1, var2, var11, var12, AttackOption.mapMarkerSprites[1], var4); + } + } + + if (Client.hintArrowType == 2) { + var10 = Client.hintArrowX * 4 - class51.baseX * 256 + 2 - class215.localPlayer.x / 32; + var11 = Client.hintArrowY * 4 - VarcInt.baseY * 256 + 2 - class215.localPlayer.y / 32; + WorldMapIcon_0.worldToMinimap(var1, var2, var10, var11, AttackOption.mapMarkerSprites[1], var4); + } + + if (Client.hintArrowType == 10 && Client.hintArrowPlayerIndex >= 0 && Client.hintArrowPlayerIndex < Client.players.length) { + Player var21 = Client.players[Client.hintArrowPlayerIndex]; + if (var21 != null) { + var11 = var21.x / 32 - class215.localPlayer.x / 32; + var12 = var21.y / 32 - class215.localPlayer.y / 32; + WorldMapIcon_0.worldToMinimap(var1, var2, var11, var12, AttackOption.mapMarkerSprites[1], var4); + } + } + } + + if (Client.destinationX != 0) { + var10 = Client.destinationX * 4 + 2 - class215.localPlayer.x / 32; + var11 = Client.destinationY * 4 + 2 - class215.localPlayer.y / 32; + class185.drawSpriteOnMinimap(var1, var2, var10, var11, AttackOption.mapMarkerSprites[0], var4); + } + + if (!class215.localPlayer.isHidden) { + Rasterizer2D.Rasterizer2D_fillRectangle(var4.width / 2 + var1 - 1, var4.height / 2 + var2 - 1, 3, 3, 16777215); + } + } else { + Rasterizer2D.Rasterizer2D_fillMaskedRectangle(var1, var2, 0, var4.xStarts, var4.xWidths); + } + + Client.field837[var3] = true; + } } } diff --git a/runescape-client/src/main/java/MusicPatchPcmStream.java b/runescape-client/src/main/java/MusicPatchPcmStream.java index 66d6035683..912620735c 100644 --- a/runescape-client/src/main/java/MusicPatchPcmStream.java +++ b/runescape-client/src/main/java/MusicPatchPcmStream.java @@ -3,33 +3,30 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("gd") +@ObfuscatedName("gr") @Implements("MusicPatchPcmStream") public class MusicPatchPcmStream extends PcmStream { - @ObfuscatedName("aj") - @Export("null_string") - protected static String null_string; - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lgg;" + signature = "Lgz;" ) @Export("superStream") MidiPcmStream superStream; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Ljb;" + signature = "Ljd;" ) @Export("queue") NodeDeque queue; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Lct;" + signature = "Lca;" ) @Export("mixer") PcmStreamMixer mixer; @ObfuscatedSignature( - signature = "(Lgg;)V" + signature = "(Lgz;)V" ) MusicPatchPcmStream(MidiPcmStream var1) { this.queue = new NodeDeque(); @@ -37,48 +34,48 @@ public class MusicPatchPcmStream extends PcmStream { this.superStream = var1; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Lgq;[IIIII)V", - garbageValue = "1620688263" + signature = "(Lge;[IIIII)V", + garbageValue = "71906833" ) - void method4044(MusicPatchNode var1, int[] var2, int var3, int var4, int var5) { - if ((this.superStream.field2386[var1.field2425] & 4) != 0 && var1.field2428 < 0) { - int var6 = this.superStream.field2403[var1.field2425] / (PcmPlayer.PcmPlayer_sampleRate * 22050); + void method3962(MusicPatchNode var1, int[] var2, int var3, int var4, int var5) { + if ((this.superStream.field2428[var1.field2449] & 4) != 0 && var1.field2459 < 0) { + int var6 = this.superStream.field2433[var1.field2449] / Messages.PcmPlayer_sampleRate; while (true) { - int var7 = (var6 + 1048575 - var1.field2434) / var6; + int var7 = (var6 + 1048575 - var1.field2463) / var6; if (var7 > var4) { - var1.field2434 += var4 * var6; + var1.field2463 += var6 * var4; break; } var1.stream.fill(var2, var3, var7); var3 += var7; var4 -= var7; - var1.field2434 += var7 * var6 - 1048576; - int var8 = PcmPlayer.PcmPlayer_sampleRate * 22050 / 100; + var1.field2463 += var7 * var6 - 1048576; + int var8 = Messages.PcmPlayer_sampleRate / 100; int var9 = 262144 / var6; if (var9 < var8) { var8 = var9; } RawPcmStream var10 = var1.stream; - if (this.superStream.field2401[var1.field2425] == 0) { - var1.stream = RawPcmStream.method2767(var1.rawSound, var10.method2714(), var10.method2705(), var10.method2844()); + if (this.superStream.field2441[var1.field2449] == 0) { + var1.stream = RawPcmStream.method2568(var1.rawSound, var10.method2701(), var10.method2575(), var10.method2576()); } else { - var1.stream = RawPcmStream.method2767(var1.rawSound, var10.method2714(), 0, var10.method2844()); - this.superStream.method3885(var1, var1.patch.field2460[var1.field2419] < 0); - var1.stream.method2706(var8, var10.method2705()); + var1.stream = RawPcmStream.method2568(var1.rawSound, var10.method2701(), 0, var10.method2576()); + this.superStream.method3779(var1, var1.patch.field2485[var1.field2450] < 0); + var1.stream.method2580(var8, var10.method2575()); } - if (var1.patch.field2460[var1.field2419] < 0) { + if (var1.patch.field2485[var1.field2450] < 0) { var1.stream.setNumLoops(-1); } - var10.method2722(var8); + var10.method2582(var8); var10.fill(var2, var3, var5 - var3); - if (var10.method2716()) { + if (var10.method2686()) { this.mixer.addSubStream(var10); } } @@ -87,38 +84,38 @@ public class MusicPatchPcmStream extends PcmStream { var1.stream.fill(var2, var3, var4); } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Lgq;IB)V", - garbageValue = "115" + signature = "(Lge;II)V", + garbageValue = "-1756065596" ) - void method4045(MusicPatchNode var1, int var2) { - if ((this.superStream.field2386[var1.field2425] & 4) != 0 && var1.field2428 < 0) { - int var3 = this.superStream.field2403[var1.field2425] / (PcmPlayer.PcmPlayer_sampleRate * 22050); - int var4 = (var3 + 1048575 - var1.field2434) / var3; - var1.field2434 = var3 * var2 + var1.field2434 & 1048575; + void method3959(MusicPatchNode var1, int var2) { + if ((this.superStream.field2428[var1.field2449] & 4) != 0 && var1.field2459 < 0) { + int var3 = this.superStream.field2433[var1.field2449] / Messages.PcmPlayer_sampleRate; + int var4 = (var3 + 1048575 - var1.field2463) / var3; + var1.field2463 = var3 * var2 + var1.field2463 & 1048575; if (var4 <= var2) { - if (this.superStream.field2401[var1.field2425] == 0) { - var1.stream = RawPcmStream.method2767(var1.rawSound, var1.stream.method2714(), var1.stream.method2705(), var1.stream.method2844()); + if (this.superStream.field2441[var1.field2449] == 0) { + var1.stream = RawPcmStream.method2568(var1.rawSound, var1.stream.method2701(), var1.stream.method2575(), var1.stream.method2576()); } else { - var1.stream = RawPcmStream.method2767(var1.rawSound, var1.stream.method2714(), 0, var1.stream.method2844()); - this.superStream.method3885(var1, var1.patch.field2460[var1.field2419] < 0); + var1.stream = RawPcmStream.method2568(var1.rawSound, var1.stream.method2701(), 0, var1.stream.method2576()); + this.superStream.method3779(var1, var1.patch.field2485[var1.field2450] < 0); } - if (var1.patch.field2460[var1.field2419] < 0) { + if (var1.patch.field2485[var1.field2450] < 0) { var1.stream.setNumLoops(-1); } - var2 = var1.field2434 / var3; + var2 = var1.field2463 / var3; } } var1.stream.skip(var2); } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "()Ldj;" + signature = "()Ldt;" ) @Export("firstSubStream") protected PcmStream firstSubStream() { @@ -130,9 +127,9 @@ public class MusicPatchPcmStream extends PcmStream { } } - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "()Ldj;" + signature = "()Ldt;" ) @Export("nextSubStream") protected PcmStream nextSubStream() { @@ -147,96 +144,134 @@ public class MusicPatchPcmStream extends PcmStream { return var1.stream; } - @ObfuscatedName("o") - protected int vmethod4063() { + @ObfuscatedName("y") + protected int vmethod3963() { return 0; } - @ObfuscatedName("i") + @ObfuscatedName("w") @Export("fill") protected void fill(int[] var1, int var2, int var3) { this.mixer.fill(var1, var2, var3); for (MusicPatchNode var6 = (MusicPatchNode)this.queue.last(); var6 != null; var6 = (MusicPatchNode)this.queue.previous()) { - if (!this.superStream.method3880(var6)) { + if (!this.superStream.method3801(var6)) { int var4 = var2; int var5 = var3; do { - if (var5 <= var6.field2433) { - this.method4044(var6, var1, var4, var5, var5 + var4); - var6.field2433 -= var5; + if (var5 <= var6.field2464) { + this.method3962(var6, var1, var4, var5, var4 + var5); + var6.field2464 -= var5; break; } - this.method4044(var6, var1, var4, var6.field2433, var4 + var5); - var4 += var6.field2433; - var5 -= var6.field2433; - } while(!this.superStream.method3881(var6, var1, var4, var5)); + this.method3962(var6, var1, var4, var6.field2464, var5 + var4); + var4 += var6.field2464; + var5 -= var6.field2464; + } while(!this.superStream.method3802(var6, var1, var4, var5)); } } } - @ObfuscatedName("m") + @ObfuscatedName("k") @Export("skip") protected void skip(int var1) { this.mixer.skip(var1); for (MusicPatchNode var3 = (MusicPatchNode)this.queue.last(); var3 != null; var3 = (MusicPatchNode)this.queue.previous()) { - if (!this.superStream.method3880(var3)) { + if (!this.superStream.method3801(var3)) { int var2 = var1; do { - if (var2 <= var3.field2433) { - this.method4045(var3, var2); - var3.field2433 -= var2; + if (var2 <= var3.field2464) { + this.method3959(var3, var2); + var3.field2464 -= var2; break; } - this.method4045(var3, var3.field2433); - var2 -= var3.field2433; - } while(!this.superStream.method3881(var3, (int[])null, 0, var2)); + this.method3959(var3, var3.field2464); + var2 -= var3.field2464; + } while(!this.superStream.method3802(var3, (int[])null, 0, var2)); } } } - @ObfuscatedName("a") - @ObfuscatedSignature( - signature = "([BZB)Ljava/lang/Object;", - garbageValue = "25" - ) - public static Object method4064(byte[] var0, boolean var1) { - if (var0 == null) { - return null; - } else if (var0.length > 136) { - DirectByteArrayCopier var2 = new DirectByteArrayCopier(); - var2.set(var0); - return var2; - } else { - return var0; - } - } - - @ObfuscatedName("a") + @ObfuscatedName("i") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "57344" + garbageValue = "2088292857" ) - static void method4038() { - Tiles.Tiles_minPlane = 99; - SoundSystem.field1414 = new byte[4][104][104]; - Tiles.field485 = new byte[4][104][104]; - Tiles.field482 = new byte[4][104][104]; - Tiles.field483 = new byte[4][104][104]; - Tiles.field488 = new int[4][105][105]; - class96.field1300 = new byte[4][105][105]; - UserComparator10.field1964 = new int[105][105]; - Tiles.Tiles_hue = new int[104]; - Tiles.Tiles_saturation = new int[104]; - Tiles.Tiles_lightness = new int[104]; - Tiles.Tiles_hueMultiplier = new int[104]; - PlayerType.field3083 = new int[104]; + public static void method3970() { + PlayerAppearance.PlayerAppearance_cachedModels.clear(); + } + + @ObfuscatedName("jh") + @ObfuscatedSignature( + signature = "([Lhl;II)V", + garbageValue = "1264481635" + ) + @Export("drawModelComponents") + static final void drawModelComponents(Widget[] var0, int var1) { + for (int var2 = 0; var2 < var0.length; ++var2) { + Widget var3 = var0[var2]; + if (var3 != null && var3.parentId == var1 && (!var3.isIf3 || !AbstractByteArrayCopier.isComponentHidden(var3))) { + if (var3.type == 0) { + if (!var3.isIf3 && AbstractByteArrayCopier.isComponentHidden(var3) && var3 != class185.mousedOverWidgetIf1) { + continue; + } + + drawModelComponents(var0, var3.id); + if (var3.children != null) { + drawModelComponents(var3.children, var3.id); + } + + InterfaceParent var4 = (InterfaceParent)Client.interfaceParents.get((long)var3.id); + if (var4 != null) { + class160.method3494(var4.group); + } + } + + if (var3.type == 6) { + int var5; + if (var3.sequenceId != -1 || var3.sequenceId2 != -1) { + boolean var7 = WorldMapArea.runCs1(var3); + if (var7) { + var5 = var3.sequenceId2; + } else { + var5 = var3.sequenceId; + } + + if (var5 != -1) { + SequenceDefinition var6 = GrandExchangeOfferAgeComparator.SequenceDefinition_get(var5); + + for (var3.modelFrameCycle += Client.field704; var3.modelFrameCycle > var6.frameLengths[var3.modelFrame]; ScriptEvent.invalidateWidget(var3)) { + var3.modelFrameCycle -= var6.frameLengths[var3.modelFrame]; + ++var3.modelFrame; + if (var3.modelFrame >= var6.frameIds.length) { + var3.modelFrame -= var6.frameCount; + if (var3.modelFrame < 0 || var3.modelFrame >= var6.frameIds.length) { + var3.modelFrame = 0; + } + } + } + } + } + + if (var3.field2633 != 0 && !var3.isIf3) { + int var8 = var3.field2633 >> 16; + var5 = var3.field2633 << 16 >> 16; + var8 *= Client.field704; + var5 *= Client.field704; + var3.modelAngleX = var8 + var3.modelAngleX & 2047; + var3.modelAngleY = var5 + var3.modelAngleY & 2047; + ScriptEvent.invalidateWidget(var3); + } + } + } + } + } } diff --git a/runescape-client/src/main/java/MusicTrack.java b/runescape-client/src/main/java/MusicTrack.java index 22af7e20ef..6b6a84523d 100644 --- a/runescape-client/src/main/java/MusicTrack.java +++ b/runescape-client/src/main/java/MusicTrack.java @@ -3,21 +3,21 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("gb") +@ObfuscatedName("gt") @Implements("MusicTrack") public class MusicTrack extends Node { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Llh;" + signature = "Lle;" ) @Export("table") NodeHashTable table; - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("midi") byte[] midi; @ObfuscatedSignature( - signature = "(Lkc;)V" + signature = "(Lkg;)V" ) MusicTrack(Buffer var1) { var1.offset = var1.array.length - 3; @@ -196,7 +196,7 @@ public class MusicTrack extends Node { int[] var59 = new int[128]; var28 = 0; - label220: + label227: for (int var60 = 0; var60 < var2; ++var60) { var51.writeInt(1297379947); var51.offset += 4; @@ -218,7 +218,7 @@ public class MusicTrack extends Node { var51.writeByte(47); var51.writeByte(0); var51.writeLengthInt(var51.offset - var61); - continue label220; + continue label227; } if (var64 == 23) { @@ -335,8 +335,8 @@ public class MusicTrack extends Node { } - @ObfuscatedName("t") - void method4072() { + @ObfuscatedName("f") + void method3987() { if (this.table == null) { this.table = new NodeHashTable(16); int[] var1 = new int[16]; @@ -416,15 +416,15 @@ public class MusicTrack extends Node { } } - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("clear") void clear() { this.table = null; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Lhq;II)Lgb;" + signature = "(Lhf;II)Lgt;" ) @Export("readTrack") public static MusicTrack readTrack(AbstractArchive var0, int var1, int var2) { diff --git a/runescape-client/src/main/java/NPC.java b/runescape-client/src/main/java/NPC.java index 081ad5f4e6..1fae83f47d 100644 --- a/runescape-client/src/main/java/NPC.java +++ b/runescape-client/src/main/java/NPC.java @@ -3,18 +3,24 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("cv") +@ObfuscatedName("cd") @Implements("NPC") public final class NPC extends Actor { - @ObfuscatedName("v") + @ObfuscatedName("se") @ObfuscatedSignature( - signature = "Llw;" + signature = "Llj;" ) - @Export("titleboxSprite") - static IndexedSprite titleboxSprite; - @ObfuscatedName("a") + @Export("platformInfo") + static PlatformInfo platformInfo; + @ObfuscatedName("o") @ObfuscatedSignature( - signature = "Lit;" + signature = "Ldk;" + ) + @Export("soundCache") + public static SoundCache soundCache; + @ObfuscatedName("u") + @ObfuscatedSignature( + signature = "Lih;" ) @Export("definition") NPCDefinition definition; @@ -22,12 +28,12 @@ public final class NPC extends Actor { NPC() { } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "(IBI)V", - garbageValue = "9999999" + garbageValue = "1878117955" ) - final void method2174(int var1, byte var2) { + final void method2058(int var1, byte var2) { int var3 = super.pathX[0]; int var4 = super.pathY[0]; if (var1 == 0) { @@ -66,7 +72,7 @@ public final class NPC extends Actor { --var4; } - if (super.sequence != -1 && PlayerType.SequenceDefinition_get(super.sequence).field3513 == 1) { + if (super.sequence != -1 && GrandExchangeOfferAgeComparator.SequenceDefinition_get(super.sequence).field3515 == 1) { super.sequence = -1; } @@ -85,13 +91,13 @@ public final class NPC extends Actor { super.pathTraversed[0] = var2; } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( signature = "(IIZB)V", - garbageValue = "111" + garbageValue = "79" ) - final void method2178(int var1, int var2, boolean var3) { - if (super.sequence != -1 && PlayerType.SequenceDefinition_get(super.sequence).field3513 == 1) { + final void method2059(int var1, int var2, boolean var3) { + if (super.sequence != -1 && GrandExchangeOfferAgeComparator.SequenceDefinition_get(super.sequence).field3515 == 1) { super.sequence = -1; } @@ -117,26 +123,26 @@ public final class NPC extends Actor { } super.pathLength = 0; - super.field983 = 0; - super.field982 = 0; + super.field994 = 0; + super.field976 = 0; super.pathX[0] = var1; super.pathY[0] = var2; - super.x = super.field927 * 64 + super.pathX[0] * 128; - super.y = super.field927 * 64 + super.pathY[0] * 128; + super.x = super.field938 * 64 + super.pathX[0] * 128; + super.y = super.field938 * 64 + super.pathY[0] * 128; } - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedSignature( - signature = "(B)Ldv;", - garbageValue = "-40" + signature = "(I)Ldf;", + garbageValue = "-174129419" ) @Export("getModel") protected final Model getModel() { if (this.definition == null) { return null; } else { - SequenceDefinition var1 = super.sequence != -1 && super.sequenceDelay == 0 ? PlayerType.SequenceDefinition_get(super.sequence) : null; - SequenceDefinition var2 = super.movementSequence != -1 && (super.readySequence != super.movementSequence || var1 == null) ? PlayerType.SequenceDefinition_get(super.movementSequence) : null; + SequenceDefinition var1 = super.sequence != -1 && super.sequenceDelay == 0 ? GrandExchangeOfferAgeComparator.SequenceDefinition_get(super.sequence) : null; + SequenceDefinition var2 = super.movementSequence != -1 && (super.readySequence != super.movementSequence || var1 == null) ? GrandExchangeOfferAgeComparator.SequenceDefinition_get(super.movementSequence) : null; Model var3 = this.definition.getModel(var1, super.sequenceFrame, var2, super.movementFrame); if (var3 == null) { return null; @@ -144,9 +150,9 @@ public final class NPC extends Actor { var3.calculateBoundsCylinder(); super.defaultHeight = var3.height; if (super.spotAnimation != -1 && super.spotAnimationFrame != -1) { - Model var4 = MenuAction.SpotAnimationDefinition_get(super.spotAnimation).getModel(super.spotAnimationFrame); + Model var4 = WorldMapRegion.SpotAnimationDefinition_get(super.spotAnimation).getModel(super.spotAnimationFrame); if (var4 != null) { - var4.offsetBy(0, -super.field965, 0); + var4.offsetBy(0, -super.field996, 0); Model[] var5 = new Model[]{var3, var4}; var3 = new Model(var5, 2); } @@ -161,10 +167,10 @@ public final class NPC extends Actor { } } - @ObfuscatedName("h") + @ObfuscatedName("o") @ObfuscatedSignature( - signature = "(B)Z", - garbageValue = "-25" + signature = "(I)Z", + garbageValue = "-968027489" ) @Export("isVisible") final boolean isVisible() { diff --git a/runescape-client/src/main/java/NPCDefinition.java b/runescape-client/src/main/java/NPCDefinition.java index e6deb60185..997fcfc524 100644 --- a/runescape-client/src/main/java/NPCDefinition.java +++ b/runescape-client/src/main/java/NPCDefinition.java @@ -4,185 +4,185 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("it") +@ObfuscatedName("ih") @Implements("NPCDefinition") public class NPCDefinition extends DualNode { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lhq;" + signature = "Lhf;" ) @Export("NpcDefinition_archive") - static AbstractArchive NpcDefinition_archive; - @ObfuscatedName("t") + public static AbstractArchive NpcDefinition_archive; + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lhq;" + signature = "Lhf;" ) @Export("NpcDefinition_modelArchive") - static AbstractArchive NpcDefinition_modelArchive; - @ObfuscatedName("n") + public static AbstractArchive NpcDefinition_modelArchive; + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Leb;" + signature = "Lef;" ) @Export("NpcDefinition_cached") - public static EvictingDualNodeHashTable NpcDefinition_cached; - @ObfuscatedName("q") + static EvictingDualNodeHashTable NpcDefinition_cached; + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Leb;" + signature = "Lef;" ) @Export("NpcDefinition_cachedModels") - public static EvictingDualNodeHashTable NpcDefinition_cachedModels; - @ObfuscatedName("v") + static EvictingDualNodeHashTable NpcDefinition_cachedModels; + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = -1672011881 + intValue = 164501927 ) @Export("id") public int id; - @ObfuscatedName("l") + @ObfuscatedName("p") @Export("name") public String name; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedGetter( - intValue = -974449841 + intValue = -462322575 ) @Export("size") public int size; - @ObfuscatedName("o") + @ObfuscatedName("y") @Export("models") int[] models; + @ObfuscatedName("w") + int[] field3473; @ObfuscatedName("i") - int[] field3476; - @ObfuscatedName("d") @ObfuscatedGetter( - intValue = -1219183499 + intValue = 176836605 ) @Export("readySequence") public int readySequence; - @ObfuscatedName("m") + @ObfuscatedName("k") @ObfuscatedGetter( - intValue = 898691697 + intValue = -1998294477 ) @Export("turnLeftSequence") public int turnLeftSequence; - @ObfuscatedName("p") + @ObfuscatedName("x") @ObfuscatedGetter( - intValue = -125318447 + intValue = 814959013 ) @Export("turnRightSequence") public int turnRightSequence; - @ObfuscatedName("h") + @ObfuscatedName("o") @ObfuscatedGetter( - intValue = 638028449 + intValue = 1138584261 ) @Export("walkSequence") public int walkSequence; - @ObfuscatedName("k") + @ObfuscatedName("e") @ObfuscatedGetter( - intValue = 645048551 + intValue = -700991039 ) @Export("walkBackSequence") public int walkBackSequence; - @ObfuscatedName("x") + @ObfuscatedName("n") @ObfuscatedGetter( - intValue = -1214563023 + intValue = -1373986667 ) @Export("walkLeftSequence") public int walkLeftSequence; - @ObfuscatedName("j") + @ObfuscatedName("r") @ObfuscatedGetter( - intValue = -1718781665 + intValue = 196461725 ) @Export("walkRightSequence") public int walkRightSequence; - @ObfuscatedName("r") + @ObfuscatedName("c") @Export("recolorFrom") short[] recolorFrom; - @ObfuscatedName("e") + @ObfuscatedName("a") @Export("recolorTo") short[] recolorTo; - @ObfuscatedName("s") + @ObfuscatedName("d") @Export("retextureFrom") short[] retextureFrom; - @ObfuscatedName("b") + @ObfuscatedName("s") @Export("retextureTo") short[] retextureTo; - @ObfuscatedName("z") + @ObfuscatedName("t") @Export("actions") public String[] actions; - @ObfuscatedName("f") + @ObfuscatedName("m") @Export("drawMapDot") public boolean drawMapDot; - @ObfuscatedName("g") + @ObfuscatedName("v") @ObfuscatedGetter( - intValue = 1902455939 + intValue = 578089375 ) @Export("combatLevel") public int combatLevel; - @ObfuscatedName("w") + @ObfuscatedName("q") @ObfuscatedGetter( - intValue = -177695131 + intValue = -237386169 ) @Export("widthScale") int widthScale; - @ObfuscatedName("u") + @ObfuscatedName("l") @ObfuscatedGetter( - intValue = 1085992245 + intValue = 610202011 ) @Export("heightScale") int heightScale; - @ObfuscatedName("y") + @ObfuscatedName("j") @Export("isVisible") public boolean isVisible; - @ObfuscatedName("aa") + @ObfuscatedName("af") @ObfuscatedGetter( - intValue = 1272817411 + intValue = 660350725 ) @Export("ambient") int ambient; - @ObfuscatedName("aw") + @ObfuscatedName("ad") @ObfuscatedGetter( - intValue = -430923911 + intValue = 1399735857 ) @Export("contrast") int contrast; - @ObfuscatedName("ar") + @ObfuscatedName("am") @ObfuscatedGetter( - intValue = -222453249 + intValue = -1851898055 ) @Export("headIconPrayer") public int headIconPrayer; - @ObfuscatedName("aq") + @ObfuscatedName("ai") @ObfuscatedGetter( - intValue = -1317382483 + intValue = 361763773 ) @Export("rotation") public int rotation; - @ObfuscatedName("ad") + @ObfuscatedName("ag") @Export("transforms") public int[] transforms; - @ObfuscatedName("ag") + @ObfuscatedName("ao") @ObfuscatedGetter( - intValue = 1215151999 + intValue = 1802442643 ) @Export("transformVarbit") int transformVarbit; - @ObfuscatedName("ak") + @ObfuscatedName("aw") @ObfuscatedGetter( - intValue = 1120874317 + intValue = 1667734657 ) @Export("transformVarp") int transformVarp; - @ObfuscatedName("av") + @ObfuscatedName("ak") @Export("isInteractable") public boolean isInteractable; - @ObfuscatedName("am") + @ObfuscatedName("aa") @Export("isClickable") public boolean isClickable; @ObfuscatedName("ab") @Export("isFollower") public boolean isFollower; - @ObfuscatedName("ax") + @ObfuscatedName("ar") @ObfuscatedSignature( - signature = "Llr;" + signature = "Llb;" ) @Export("params") IterableNodeHashTable params; @@ -219,19 +219,19 @@ public class NPCDefinition extends DualNode { this.isFollower = false; } - @ObfuscatedName("n") + @ObfuscatedName("f") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "-1100218543" + garbageValue = "-1815650362" ) @Export("postDecode") void postDecode() { } - @ObfuscatedName("q") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Lkc;I)V", - garbageValue = "-942023250" + signature = "(Lkg;I)V", + garbageValue = "-724164994" ) @Export("decode") void decode(Buffer var1) { @@ -245,10 +245,10 @@ public class NPCDefinition extends DualNode { } } - @ObfuscatedName("v") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(Lkc;II)V", - garbageValue = "1669409378" + signature = "(Lkg;II)V", + garbageValue = "636611329" ) @Export("decodeNext") void decodeNext(Buffer var1, int var2) { @@ -303,10 +303,10 @@ public class NPCDefinition extends DualNode { } } else if (var2 == 60) { var3 = var1.readUnsignedByte(); - this.field3476 = new int[var3]; + this.field3473 = new int[var3]; for (var4 = 0; var4 < var3; ++var4) { - this.field3476[var4] = var1.readUnsignedShort(); + this.field3473[var4] = var1.readUnsignedShort(); } } else if (var2 == 93) { this.drawMapDot = false; @@ -321,7 +321,7 @@ public class NPCDefinition extends DualNode { } else if (var2 == 100) { this.ambient = var1.readByte(); } else if (var2 == 101) { - this.contrast = var1.readByte() * 5; + this.contrast = var1.readByte(); } else if (var2 == 102) { this.headIconPrayer = var1.readUnsignedShort(); } else if (var2 == 103) { @@ -334,7 +334,7 @@ public class NPCDefinition extends DualNode { } else if (var2 == 111) { this.isFollower = true; } else if (var2 == 249) { - this.params = UserComparator10.readStringIntParameters(var1, this.params); + this.params = ModelData0.readStringIntParameters(var1, this.params); } } else { this.transformVarbit = var1.readUnsignedShort(); @@ -370,10 +370,10 @@ public class NPCDefinition extends DualNode { } - @ObfuscatedName("l") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(Liv;ILiv;II)Ldv;", - garbageValue = "445516226" + signature = "(Liy;ILiy;II)Ldf;", + garbageValue = "226641417" ) @Export("getModel") public final Model getModel(SequenceDefinition var1, int var2, SequenceDefinition var3, int var4) { @@ -421,7 +421,7 @@ public class NPCDefinition extends DualNode { } } - var5 = var11.toModel(this.ambient + 64, this.contrast + 850, -30, -50, -30); + var5 = var11.toModel(this.ambient + 64, this.contrast * 5 + 850, -30, -50, -30); NpcDefinition_cachedModels.put(var5, (long)this.id); } @@ -444,23 +444,23 @@ public class NPCDefinition extends DualNode { } } - @ObfuscatedName("c") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(B)Ldu;", - garbageValue = "4" + signature = "(B)Ldq;", + garbageValue = "126" ) @Export("getModelData") public final ModelData getModelData() { if (this.transforms != null) { NPCDefinition var1 = this.transform(); return var1 == null ? null : var1.getModelData(); - } else if (this.field3476 == null) { + } else if (this.field3473 == null) { return null; } else { boolean var5 = false; - for (int var2 = 0; var2 < this.field3476.length; ++var2) { - if (!NpcDefinition_modelArchive.tryLoadFile(this.field3476[var2], 0)) { + for (int var2 = 0; var2 < this.field3473.length; ++var2) { + if (!NpcDefinition_modelArchive.tryLoadFile(this.field3473[var2], 0)) { var5 = true; } } @@ -468,10 +468,10 @@ public class NPCDefinition extends DualNode { if (var5) { return null; } else { - ModelData[] var6 = new ModelData[this.field3476.length]; + ModelData[] var6 = new ModelData[this.field3473.length]; - for (int var3 = 0; var3 < this.field3476.length; ++var3) { - var6[var3] = ModelData.ModelData_get(NpcDefinition_modelArchive, this.field3476[var3], 0); + for (int var3 = 0; var3 < this.field3473.length; ++var3) { + var6[var3] = ModelData.ModelData_get(NpcDefinition_modelArchive, this.field3473[var3], 0); } ModelData var7; @@ -499,16 +499,16 @@ public class NPCDefinition extends DualNode { } } - @ObfuscatedName("o") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "(B)Lit;", - garbageValue = "73" + signature = "(I)Lih;", + garbageValue = "986756631" ) @Export("transform") public final NPCDefinition transform() { int var1 = -1; if (this.transformVarbit != -1) { - var1 = UserComparator9.getVarbit(this.transformVarbit); + var1 = FileSystem.getVarbit(this.transformVarbit); } else if (this.transformVarp != -1) { var1 = Varps.Varps_main[this.transformVarp]; } @@ -520,13 +520,13 @@ public class NPCDefinition extends DualNode { var2 = this.transforms[this.transforms.length - 1]; } - return var2 != -1 ? SecureRandomCallable.getNpcDefinition(var2) : null; + return var2 != -1 ? VarcInt.getNpcDefinition(var2) : null; } - @ObfuscatedName("i") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "(B)Z", - garbageValue = "101" + signature = "(I)Z", + garbageValue = "-1773162778" ) @Export("transformIsVisible") public boolean transformIsVisible() { @@ -535,7 +535,7 @@ public class NPCDefinition extends DualNode { } else { int var1 = -1; if (this.transformVarbit != -1) { - var1 = UserComparator9.getVarbit(this.transformVarbit); + var1 = FileSystem.getVarbit(this.transformVarbit); } else if (this.transformVarp != -1) { var1 = Varps.Varps_main[this.transformVarp]; } @@ -548,69 +548,36 @@ public class NPCDefinition extends DualNode { } } - @ObfuscatedName("d") + @ObfuscatedName("w") @ObfuscatedSignature( signature = "(III)I", - garbageValue = "-955776181" + garbageValue = "1256288867" ) @Export("getIntParam") public int getIntParam(int var1, int var2) { - return FriendsList.method5306(this.params, var1, var2); - } - - @ObfuscatedName("m") - @ObfuscatedSignature( - signature = "(ILjava/lang/String;B)Ljava/lang/String;", - garbageValue = "-81" - ) - @Export("getStringParam") - public String getStringParam(int var1, String var2) { IterableNodeHashTable var4 = this.params; - String var3; + int var3; if (var4 == null) { var3 = var2; } else { - ObjectNode var5 = (ObjectNode)var4.get((long)var1); + IntegerNode var5 = (IntegerNode)var4.get((long)var1); if (var5 == null) { var3 = var2; } else { - var3 = (String)var5.obj; + var3 = var5.integer; } } return var3; } - @ObfuscatedName("a") + @ObfuscatedName("i") @ObfuscatedSignature( - signature = "(II)Lkt;", - garbageValue = "287929847" + signature = "(ILjava/lang/String;I)Ljava/lang/String;", + garbageValue = "-933407818" ) - public static PrivateChatMode method4881(int var0) { - PrivateChatMode[] var1 = new PrivateChatMode[]{PrivateChatMode.field3778, PrivateChatMode.field3782, PrivateChatMode.field3779}; - PrivateChatMode[] var2 = var1; - - for (int var3 = 0; var3 < var2.length; ++var3) { - PrivateChatMode var4 = var2[var3]; - if (var0 == var4.field3781) { - return var4; - } - } - - return null; - } - - @ObfuscatedName("t") - @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "-2" - ) - public static void method4880() { - if (MouseHandler.MouseHandler_instance != null) { - synchronized(MouseHandler.MouseHandler_instance) { - MouseHandler.MouseHandler_instance = null; - } - } - + @Export("getStringParam") + public String getStringParam(int var1, String var2) { + return ServerBuild.method4214(this.params, var1, var2); } } diff --git a/runescape-client/src/main/java/NanoClock.java b/runescape-client/src/main/java/NanoClock.java index 60200a9d65..950a43d368 100644 --- a/runescape-client/src/main/java/NanoClock.java +++ b/runescape-client/src/main/java/NanoClock.java @@ -4,12 +4,12 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("fn") +@ObfuscatedName("fz") @Implements("NanoClock") public class NanoClock extends Clock { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedGetter( - longValue = 3388451480976067985L + longValue = 1210621623438616379L ) @Export("lastTimeNano") long lastTimeNano; @@ -18,41 +18,63 @@ public class NanoClock extends Clock { this.lastTimeNano = System.nanoTime(); } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "1605126906" + garbageValue = "-26166053" ) @Export("mark") public void mark() { this.lastTimeNano = System.nanoTime(); } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(III)I", - garbageValue = "432238723" + signature = "(IIB)I", + garbageValue = "6" ) @Export("wait") public int wait(int var1, int var2) { - long var3 = 1000000L * (long)var2; + long var3 = (long)var2 * 1000000L; long var5 = this.lastTimeNano - System.nanoTime(); if (var5 < var3) { var5 = var3; } - ClanChat.method5367(var5 / 1000000L); - long var7 = System.nanoTime(); + long var7 = var5 / 1000000L; + long var9; + if (var7 > 0L) { + if (var7 % 10L == 0L) { + var9 = var7 - 1L; - int var9; - for (var9 = 0; var9 < 10 && (var9 < 1 || this.lastTimeNano < var7); this.lastTimeNano += 1000000L * (long)var1) { - ++var9; + try { + Thread.sleep(var9); + } catch (InterruptedException var16) { + } + + try { + Thread.sleep(1L); + } catch (InterruptedException var15) { + } + } else { + try { + Thread.sleep(var7); + } catch (InterruptedException var14) { + } + } } - if (this.lastTimeNano < var7) { - this.lastTimeNano = var7; + var9 = System.nanoTime(); + + int var13; + for (var13 = 0; var13 < 10 && (var13 < 1 || this.lastTimeNano < var9); this.lastTimeNano += 1000000L * (long)var1) { + ++var13; } - return var9; + if (this.lastTimeNano < var9) { + this.lastTimeNano = var9; + } + + return var13; } } diff --git a/runescape-client/src/main/java/NetCache.java b/runescape-client/src/main/java/NetCache.java index a0cc3920a8..efd376035b 100644 --- a/runescape-client/src/main/java/NetCache.java +++ b/runescape-client/src/main/java/NetCache.java @@ -1,4 +1,4 @@ -import java.applet.Applet; +import java.security.SecureRandom; import java.util.zip.CRC32; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; @@ -6,111 +6,119 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ip") +@ObfuscatedName("im") @Implements("NetCache") public class NetCache { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lku;" + signature = "Lkn;" ) @Export("NetCache_socket") public static AbstractSocket NetCache_socket; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = 2131672897 + intValue = 264322769 ) @Export("NetCache_loadTime") - public static int NetCache_loadTime; - @ObfuscatedName("n") + static int NetCache_loadTime; + @ObfuscatedName("b") @ObfuscatedGetter( - longValue = -9118761504647630833L + longValue = 5787144864761896795L ) - public static long field3149; - @ObfuscatedName("q") + static long field3171; + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Llh;" + signature = "Lle;" ) @Export("NetCache_pendingPriorityWrites") - public static NodeHashTable NetCache_pendingPriorityWrites; - @ObfuscatedName("v") + static NodeHashTable NetCache_pendingPriorityWrites; + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = 2036501335 + intValue = -889206253 ) @Export("NetCache_pendingPriorityWritesCount") - public static int NetCache_pendingPriorityWritesCount; - @ObfuscatedName("l") + static int NetCache_pendingPriorityWritesCount; + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "Llh;" + signature = "Lle;" ) @Export("NetCache_pendingPriorityResponses") - public static NodeHashTable NetCache_pendingPriorityResponses; - @ObfuscatedName("c") + static NodeHashTable NetCache_pendingPriorityResponses; + @ObfuscatedName("h") @ObfuscatedGetter( - intValue = -158120331 + intValue = -837346681 ) @Export("NetCache_pendingPriorityResponsesCount") - public static int NetCache_pendingPriorityResponsesCount; - @ObfuscatedName("o") + static int NetCache_pendingPriorityResponsesCount; + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "Lia;" + signature = "Liw;" ) @Export("NetCache_pendingWritesQueue") - public static DualNodeDeque NetCache_pendingWritesQueue; - @ObfuscatedName("i") + static DualNodeDeque NetCache_pendingWritesQueue; + @ObfuscatedName("w") @ObfuscatedSignature( - signature = "Llh;" + signature = "Lle;" ) @Export("NetCache_pendingWrites") static NodeHashTable NetCache_pendingWrites; - @ObfuscatedName("d") + @ObfuscatedName("i") @ObfuscatedGetter( - intValue = -1944921257 + intValue = -1003289655 ) @Export("NetCache_pendingWritesCount") - public static int NetCache_pendingWritesCount; - @ObfuscatedName("m") + static int NetCache_pendingWritesCount; + @ObfuscatedName("k") @ObfuscatedSignature( - signature = "Llh;" + signature = "Lle;" ) @Export("NetCache_pendingResponses") - public static NodeHashTable NetCache_pendingResponses; - @ObfuscatedName("p") + static NodeHashTable NetCache_pendingResponses; + @ObfuscatedName("x") @ObfuscatedGetter( - intValue = -2059126107 + intValue = -798851663 ) @Export("NetCache_pendingResponsesCount") - public static int NetCache_pendingResponsesCount; - @ObfuscatedName("x") + static int NetCache_pendingResponsesCount; + @ObfuscatedName("o") + static boolean field3181; + @ObfuscatedName("e") @ObfuscatedSignature( - signature = "Lkc;" + signature = "Lhi;" + ) + @Export("NetCache_currentResponse") + static NetFileRequest NetCache_currentResponse; + @ObfuscatedName("n") + @ObfuscatedSignature( + signature = "Lkg;" ) @Export("NetCache_responseHeaderBuffer") - public static Buffer NetCache_responseHeaderBuffer; - @ObfuscatedName("r") + static Buffer NetCache_responseHeaderBuffer; + @ObfuscatedName("c") @ObfuscatedGetter( - intValue = 1307039295 + intValue = -1164709819 ) - public static int field3161; - @ObfuscatedName("s") + static int field3188; + @ObfuscatedName("d") @Export("NetCache_crc") - public static CRC32 NetCache_crc; - @ObfuscatedName("z") + static CRC32 NetCache_crc; + @ObfuscatedName("t") @ObfuscatedSignature( signature = "[Lij;" ) @Export("NetCache_archives") - public static Archive[] NetCache_archives; - @ObfuscatedName("f") - public static byte field3165; - @ObfuscatedName("g") + static Archive[] NetCache_archives; + @ObfuscatedName("m") + static byte field3184; + @ObfuscatedName("v") @ObfuscatedGetter( - intValue = 1710765987 + intValue = -1730449229 ) @Export("NetCache_crcMismatches") public static int NetCache_crcMismatches; - @ObfuscatedName("w") + @ObfuscatedName("q") @ObfuscatedGetter( - intValue = 685821675 + intValue = -1846767251 ) @Export("NetCache_ioExceptions") public static int NetCache_ioExceptions; @@ -127,469 +135,176 @@ public class NetCache { NetCache_pendingResponses = new NodeHashTable(4096); NetCache_pendingResponsesCount = 0; NetCache_responseHeaderBuffer = new Buffer(8); - field3161 = 0; + field3188 = 0; NetCache_crc = new CRC32(); NetCache_archives = new Archive[256]; - field3165 = 0; + field3184 = 0; NetCache_crcMismatches = 0; NetCache_ioExceptions = 0; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Ljava/applet/Applet;Ljava/lang/String;I)V", - garbageValue = "2000682989" + signature = "(I)Ljava/security/SecureRandom;", + garbageValue = "967007361" ) - public static void method4472(Applet var0, String var1) { - class51.applet = var0; - if (var1 != null) { - class51.field416 = var1; - } - + static SecureRandom method4394() { + SecureRandom var0 = new SecureRandom(); + var0.nextInt(); + return var0; } - @ObfuscatedName("fl") + @ObfuscatedName("u") + @ObfuscatedSignature( + signature = "(II)Lib;", + garbageValue = "1375057388" + ) + @Export("VarpDefinition_get") + public static VarpDefinition VarpDefinition_get(int var0) { + VarpDefinition var1 = (VarpDefinition)VarpDefinition.VarpDefinition_cached.get((long)var0); + if (var1 != null) { + return var1; + } else { + byte[] var2 = VarpDefinition.VarpDefinition_archive.takeFile(16, var0); + var1 = new VarpDefinition(); + if (var2 != null) { + var1.decode(new Buffer(var2)); + } + + VarpDefinition.VarpDefinition_cached.put(var1, (long)var0); + return var1; + } + } + + @ObfuscatedName("b") + @ObfuscatedSignature( + signature = "(ILci;ZI)I", + garbageValue = "1873047599" + ) + static int method4397(int var0, Script var1, boolean var2) { + if (var0 < 1000) { + return ServerPacket.method3657(var0, var1, var2); + } else if (var0 < 1100) { + return GameShell.method952(var0, var1, var2); + } else if (var0 < 1200) { + return SecureRandomCallable.method1171(var0, var1, var2); + } else if (var0 < 1300) { + return Interpreter.method1995(var0, var1, var2); + } else if (var0 < 1400) { + return class189.method3698(var0, var1, var2); + } else if (var0 < 1500) { + return Varcs.method2201(var0, var1, var2); + } else if (var0 < 1600) { + return Canvas.method873(var0, var1, var2); + } else if (var0 < 1700) { + return Varcs.method2220(var0, var1, var2); + } else if (var0 < 1800) { + return Decimator.method2564(var0, var1, var2); + } else if (var0 < 1900) { + return Messages.method2241(var0, var1, var2); + } else if (var0 < 2000) { + return Actor.method1774(var0, var1, var2); + } else if (var0 < 2100) { + return GameShell.method952(var0, var1, var2); + } else if (var0 < 2200) { + return SecureRandomCallable.method1171(var0, var1, var2); + } else if (var0 < 2300) { + return Interpreter.method1995(var0, var1, var2); + } else if (var0 < 2400) { + return class189.method3698(var0, var1, var2); + } else if (var0 < 2500) { + return Varcs.method2201(var0, var1, var2); + } else if (var0 < 2600) { + return Language.method3710(var0, var1, var2); + } else if (var0 < 2700) { + return AbstractWorldMapIcon.method618(var0, var1, var2); + } else if (var0 < 2800) { + return class267.method5067(var0, var1, var2); + } else if (var0 < 2900) { + return WorldMapDecoration.method355(var0, var1, var2); + } else if (var0 < 3000) { + return Actor.method1774(var0, var1, var2); + } else if (var0 < 3200) { + return Timer.method5098(var0, var1, var2); + } else if (var0 < 3300) { + return Skeleton.method3107(var0, var1, var2); + } else if (var0 < 3400) { + return WorldMapSection1.method608(var0, var1, var2); + } else if (var0 < 3500) { + return class83.method2091(var0, var1, var2); + } else if (var0 < 3700) { + return class16.method195(var0, var1, var2); + } else if (var0 < 4000) { + return SoundSystem.method2530(var0, var1, var2); + } else if (var0 < 4100) { + return BoundaryObject.method3313(var0, var1, var2); + } else if (var0 < 4200) { + return WorldMapArea.method396(var0, var1, var2); + } else if (var0 < 4300) { + return class4.method66(var0, var1, var2); + } else if (var0 < 5100) { + return MusicPatchNode2.method3747(var0, var1, var2); + } else if (var0 < 5400) { + return WorldMapData_0.method193(var0, var1, var2); + } else if (var0 < 5600) { + return class16.method196(var0, var1, var2); + } else if (var0 < 5700) { + return Varcs.method2194(var0, var1, var2); + } else if (var0 < 6300) { + return class16.method197(var0, var1, var2); + } else if (var0 < 6600) { + return ModelData0.method3299(var0, var1, var2); + } else { + return var0 < 6700 ? GrandExchangeOfferWorldComparator.method78(var0, var1, var2) : 2; + } + } + + @ObfuscatedName("g") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "1138314742" + garbageValue = "-2033375403" ) - @Export("load") - static void load() { - int var0; - if (Client.titleLoadingStage == 0) { - WorldMapArea.scene = new Scene(4, 104, 104, Tiles.Tiles_heights); - - for (var0 = 0; var0 < 4; ++var0) { - Client.collisionMaps[var0] = new CollisionMap(104, 104); + public static void method4399() { + while (true) { + ArchiveDiskAction var0; + synchronized(ArchiveDiskActionHandler.ArchiveDiskActionHandler_requestQueue) { + var0 = (ArchiveDiskAction)ArchiveDiskActionHandler.ArchiveDiskActionHandler_responseQueue.removeLast(); } - FloorDecoration.sceneMinimapSprite = new Sprite(512, 512); - Login.Login_loadingText = "Starting game engine..."; - Login.Login_loadingPercent = 5; - Client.titleLoadingStage = 20; - } else if (Client.titleLoadingStage == 20) { - Login.Login_loadingText = "Prepared visibility map"; - Login.Login_loadingPercent = 10; - Client.titleLoadingStage = 30; - } else if (Client.titleLoadingStage == 30) { - BuddyRankComparator.archive0 = WorldMapSectionType.newArchive(0, false, true, true); - LoginPacket.archive1 = WorldMapSectionType.newArchive(1, false, true, true); - AbstractWorldMapIcon.archive2 = WorldMapSectionType.newArchive(2, true, false, true); - SpriteMask.archive3 = WorldMapSectionType.newArchive(3, false, true, true); - NetFileRequest.archive4 = WorldMapSectionType.newArchive(4, false, true, true); - WorldMapRectangle.archive5 = WorldMapSectionType.newArchive(5, true, true, true); - class216.archive6 = WorldMapSectionType.newArchive(6, true, true, true); - Language.archive7 = WorldMapSectionType.newArchive(7, false, true, true); - GrandExchangeOfferUnitPriceComparator.archive8 = WorldMapSectionType.newArchive(8, false, true, true); - WorldMapSprite.archive9 = WorldMapSectionType.newArchive(9, false, true, true); - WorldMapID.archive10 = WorldMapSectionType.newArchive(10, false, true, true); - Decimator.archive11 = WorldMapSectionType.newArchive(11, false, true, true); - Occluder.archive12 = WorldMapSectionType.newArchive(12, false, true, true); - UrlRequest.archive13 = WorldMapSectionType.newArchive(13, true, false, true); - class192.archive14 = WorldMapSectionType.newArchive(14, false, true, true); - Coord.archive15 = WorldMapSectionType.newArchive(15, false, true, true); - DesktopPlatformInfoProvider.archive17 = WorldMapSectionType.newArchive(17, true, true, true); - WorldMapDecoration.archive18 = WorldMapSectionType.newArchive(18, false, true, true); - ReflectionCheck.archive19 = WorldMapSectionType.newArchive(19, false, true, true); - Actor.archive20 = WorldMapSectionType.newArchive(20, false, true, true); - Login.Login_loadingText = "Connecting to update server"; - Login.Login_loadingPercent = 20; - Client.titleLoadingStage = 40; - } else if (Client.titleLoadingStage == 40) { - byte var33 = 0; - var0 = var33 + BuddyRankComparator.archive0.percentage() * 4 / 100; - var0 += LoginPacket.archive1.percentage() * 4 / 100; - var0 += AbstractWorldMapIcon.archive2.percentage() * 2 / 100; - var0 += SpriteMask.archive3.percentage() * 2 / 100; - var0 += NetFileRequest.archive4.percentage() * 6 / 100; - var0 += WorldMapRectangle.archive5.percentage() * 4 / 100; - var0 += class216.archive6.percentage() * 2 / 100; - var0 += Language.archive7.percentage() * 56 / 100; - var0 += GrandExchangeOfferUnitPriceComparator.archive8.percentage() * 2 / 100; - var0 += WorldMapSprite.archive9.percentage() * 2 / 100; - var0 += WorldMapID.archive10.percentage() * 2 / 100; - var0 += Decimator.archive11.percentage() * 2 / 100; - var0 += Occluder.archive12.percentage() * 2 / 100; - var0 += UrlRequest.archive13.percentage() * 2 / 100; - var0 += class192.archive14.percentage() * 2 / 100; - var0 += Coord.archive15.percentage() * 2 / 100; - var0 += ReflectionCheck.archive19.percentage() / 100; - var0 += WorldMapDecoration.archive18.percentage() / 100; - var0 += Actor.archive20.percentage() / 100; - var0 += DesktopPlatformInfoProvider.archive17.method4409() && DesktopPlatformInfoProvider.archive17.isFullyLoaded() ? 1 : 0; - if (var0 != 100) { - if (var0 != 0) { - Login.Login_loadingText = "Checking for updates - " + var0 + "%"; - } - - Login.Login_loadingPercent = 30; - } else { - WorldMapID.method610(BuddyRankComparator.archive0, "Animations"); - WorldMapID.method610(LoginPacket.archive1, "Skeletons"); - WorldMapID.method610(NetFileRequest.archive4, "Sound FX"); - WorldMapID.method610(WorldMapRectangle.archive5, "Maps"); - WorldMapID.method610(class216.archive6, "Music Tracks"); - WorldMapID.method610(Language.archive7, "Models"); - WorldMapID.method610(GrandExchangeOfferUnitPriceComparator.archive8, "Sprites"); - WorldMapID.method610(Decimator.archive11, "Music Jingles"); - WorldMapID.method610(class192.archive14, "Music Samples"); - WorldMapID.method610(Coord.archive15, "Music Patches"); - WorldMapID.method610(ReflectionCheck.archive19, "World Map"); - WorldMapID.method610(WorldMapDecoration.archive18, "World Map Geography"); - WorldMapID.method610(Actor.archive20, "World Map Ground"); - class192.spriteIds = new GraphicsDefaults(); - class192.spriteIds.decode(DesktopPlatformInfoProvider.archive17); - Login.Login_loadingText = "Loaded update list"; - Login.Login_loadingPercent = 30; - Client.titleLoadingStage = 45; + if (var0 == null) { + return; } - } else if (Client.titleLoadingStage == 45) { - boolean var32 = !Client.isLowDetail; - PcmPlayer.PcmPlayer_sampleRate = 486202500; - InterfaceParent.PcmPlayer_stereo = var32; - ParamDefinition.PcmPlayer_count = 2; - MidiPcmStream var28 = new MidiPcmStream(); - var28.method3899(9, 128); - class80.pcmPlayer0 = PendingSpawn.method1856(GameShell.taskHandler, 0, 22050); - class80.pcmPlayer0.setStream(var28); - Clock.method3641(Coord.archive15, class192.archive14, NetFileRequest.archive4, var28); - MenuAction.pcmPlayer1 = PendingSpawn.method1856(GameShell.taskHandler, 1, 2048); - FloorUnderlayDefinition.pcmStreamMixer = new PcmStreamMixer(); - MenuAction.pcmPlayer1.setStream(FloorUnderlayDefinition.pcmStreamMixer); - AbstractWorldMapIcon.decimator = new Decimator(22050, PcmPlayer.PcmPlayer_sampleRate * 22050); - Login.Login_loadingText = "Prepared sound engine"; - Login.Login_loadingPercent = 35; - Client.titleLoadingStage = 50; - ModelData0.WorldMapElement_fonts = new Fonts(GrandExchangeOfferUnitPriceComparator.archive8, UrlRequest.archive13); - } else { - int var20; - if (Client.titleLoadingStage == 50) { - FontName[] var35 = new FontName[]{FontName.FontName_verdana15, FontName.FontName_verdana13, FontName.FontName_verdana11, FontName.FontName_bold12, FontName.FontName_plain11, FontName.FontName_plain12}; - var20 = var35.length; - Fonts var25 = ModelData0.WorldMapElement_fonts; - FontName[] var26 = new FontName[]{FontName.FontName_verdana15, FontName.FontName_verdana13, FontName.FontName_verdana11, FontName.FontName_bold12, FontName.FontName_plain11, FontName.FontName_plain12}; - Client.fontsMap = var25.createMap(var26); - if (Client.fontsMap.size() < var20) { - Login.Login_loadingText = "Loading fonts - " + Client.fontsMap.size() * 100 / var20 + "%"; - Login.Login_loadingPercent = 40; - } else { - class51.fontPlain11 = (Font)Client.fontsMap.get(FontName.FontName_plain11); - ArchiveDiskActionHandler.fontPlain12 = (Font)Client.fontsMap.get(FontName.FontName_plain12); - class43.fontBold12 = (Font)Client.fontsMap.get(FontName.FontName_bold12); - class216.platformInfo = Client.platformInfoProvider.get(); - Login.Login_loadingText = "Loaded fonts"; - Login.Login_loadingPercent = 40; - Client.titleLoadingStage = 60; - } - } else if (Client.titleLoadingStage == 60) { - var0 = GrandExchangeOfferNameComparator.method182(WorldMapID.archive10, GrandExchangeOfferUnitPriceComparator.archive8); - var20 = MusicPatch.method4037(); - if (var0 < var20) { - Login.Login_loadingText = "Loading title screen - " + var0 * 100 / var20 + "%"; - Login.Login_loadingPercent = 50; - } else { - Login.Login_loadingText = "Loaded title screen"; - Login.Login_loadingPercent = 50; - Tile.updateGameState(5); - Client.titleLoadingStage = 70; - } - } else { - Archive var2; - if (Client.titleLoadingStage == 70) { - if (!AbstractWorldMapIcon.archive2.isFullyLoaded()) { - Login.Login_loadingText = "Loading config - " + AbstractWorldMapIcon.archive2.loadPercent() + "%"; - Login.Login_loadingPercent = 60; - } else { - ArchiveLoader.method1235(AbstractWorldMapIcon.archive2); - MusicPatchNode2.method3831(AbstractWorldMapIcon.archive2); - Archive var34 = AbstractWorldMapIcon.archive2; - Archive var27 = Language.archive7; - KitDefinition.KitDefinition_archive = var34; - class43.KitDefinition_modelsArchive = var27; - KitDefinition.KitDefinition_fileCount = KitDefinition.KitDefinition_archive.getGroupFileCount(3); - var2 = AbstractWorldMapIcon.archive2; - Archive var3 = Language.archive7; - boolean var29 = Client.isLowDetail; - ObjectDefinition.ObjectDefinition_archive = var2; - ObjectDefinition.ObjectDefinition_modelsArchive = var3; - ObjectDefinition.ObjectDefinition_isLowDetail = var29; - Script.method2373(AbstractWorldMapIcon.archive2, Language.archive7); - Archive var30 = AbstractWorldMapIcon.archive2; - StructDefinition.StructDefinition_archive = var30; - Archive var6 = AbstractWorldMapIcon.archive2; - Archive var31 = Language.archive7; - boolean var8 = Client.isMembersWorld; - Font var9 = class51.fontPlain11; - ItemDefinition.ItemDefinition_archive = var6; - ItemDefinition.ItemDefinition_modelArchive = var31; - ItemDefinition.ItemDefinition_inMembersWorld = var8; - ItemDefinition.ItemDefinition_fileCount = ItemDefinition.ItemDefinition_archive.getGroupFileCount(10); - class30.ItemDefinition_fontPlain11 = var9; - class197.method3845(AbstractWorldMapIcon.archive2, BuddyRankComparator.archive0, LoginPacket.archive1); - PacketWriter.method2419(AbstractWorldMapIcon.archive2, Language.archive7); - AttackOption.method2221(AbstractWorldMapIcon.archive2); - WorldMapSection0.method263(AbstractWorldMapIcon.archive2); - TileItemPile.Widget_setArchives(SpriteMask.archive3, Language.archive7, GrandExchangeOfferUnitPriceComparator.archive8, UrlRequest.archive13); - Archive var10 = AbstractWorldMapIcon.archive2; - class1.InvDefinition_archive = var10; - class30.method607(AbstractWorldMapIcon.archive2); - Archive var11 = AbstractWorldMapIcon.archive2; - VarcInt.VarcInt_archive = var11; - Archive var12 = AbstractWorldMapIcon.archive2; - ParamDefinition.ParamDefinition_archive = var12; - class1.varcs = new Varcs(); - TaskHandler.method3622(AbstractWorldMapIcon.archive2, GrandExchangeOfferUnitPriceComparator.archive8, UrlRequest.archive13); - Archive var13 = AbstractWorldMapIcon.archive2; - Archive var14 = GrandExchangeOfferUnitPriceComparator.archive8; - HealthBarDefinition.HealthBarDefinition_archive = var13; - HealthBarDefinition.HitSplatDefinition_spritesArchive = var14; - Archive var15 = AbstractWorldMapIcon.archive2; - Archive var16 = GrandExchangeOfferUnitPriceComparator.archive8; - WorldMapElement.WorldMapElement_archive = var16; - if (var15.isFullyLoaded()) { - AbstractByteArrayCopier.WorldMapElement_count = var15.getGroupFileCount(35); - GrandExchangeOfferTotalQuantityComparator.WorldMapElement_cached = new WorldMapElement[AbstractByteArrayCopier.WorldMapElement_count]; - for (int var17 = 0; var17 < AbstractByteArrayCopier.WorldMapElement_count; ++var17) { - byte[] var18 = var15.takeFile(35, var17); - GrandExchangeOfferTotalQuantityComparator.WorldMapElement_cached[var17] = new WorldMapElement(var17); - if (var18 != null) { - GrandExchangeOfferTotalQuantityComparator.WorldMapElement_cached[var17].decode(new Buffer(var18)); - GrandExchangeOfferTotalQuantityComparator.WorldMapElement_cached[var17].method4533(); - } - } - } - - Login.Login_loadingText = "Loaded config"; - Login.Login_loadingPercent = 60; - Client.titleLoadingStage = 80; - } - } else if (Client.titleLoadingStage == 80) { - var0 = 0; - if (class1.compass == null) { - class1.compass = MenuAction.SpriteBuffer_getSprite(GrandExchangeOfferUnitPriceComparator.archive8, class192.spriteIds.compass, 0); - } else { - ++var0; - } - - if (class4.redHintArrowSprite == null) { - class4.redHintArrowSprite = MenuAction.SpriteBuffer_getSprite(GrandExchangeOfferUnitPriceComparator.archive8, class192.spriteIds.field3787, 0); - } else { - ++var0; - } - - IndexedSprite[] var1; - IndexedSprite[] var5; - IndexedSprite var7; - int var21; - int var22; - if (GrandExchangeOfferWorldComparator.mapSceneSprites == null) { - var2 = GrandExchangeOfferUnitPriceComparator.archive8; - var21 = class192.spriteIds.mapScenes; - if (!class32.method618(var2, var21, 0)) { - var1 = null; - } else { - var5 = new IndexedSprite[class325.SpriteBuffer_spriteCount]; - - for (var22 = 0; var22 < class325.SpriteBuffer_spriteCount; ++var22) { - var7 = var5[var22] = new IndexedSprite(); - var7.width = class325.SpriteBuffer_spriteWidth; - var7.height = class325.SpriteBuffer_spriteHeight; - var7.xOffset = SecureRandomFuture.SpriteBuffer_xOffsets[var22]; - var7.yOffset = HealthBar.SpriteBuffer_yOffsets[var22]; - var7.subWidth = SecureRandomCallable.SpriteBuffer_spriteWidths[var22]; - var7.subHeight = AttackOption.SpriteBuffer_spriteHeights[var22]; - var7.palette = class325.SpriteBuffer_spritePalette; - var7.pixels = class325.SpriteBuffer_pixels[var22]; - } - - WorldMapData_1.method787(); - var1 = var5; - } - - GrandExchangeOfferWorldComparator.mapSceneSprites = var1; - } else { - ++var0; - } - - if (FriendLoginUpdate.headIconPkSprites == null) { - FriendLoginUpdate.headIconPkSprites = class83.SpriteBuffer_getSpriteArray(GrandExchangeOfferUnitPriceComparator.archive8, class192.spriteIds.headIconsPk, 0); - } else { - ++var0; - } - - if (Login.headIconPrayerSprites == null) { - Login.headIconPrayerSprites = class83.SpriteBuffer_getSpriteArray(GrandExchangeOfferUnitPriceComparator.archive8, class192.spriteIds.field3790, 0); - } else { - ++var0; - } - - if (class14.headIconHintSprites == null) { - class14.headIconHintSprites = class83.SpriteBuffer_getSpriteArray(GrandExchangeOfferUnitPriceComparator.archive8, class192.spriteIds.field3786, 0); - } else { - ++var0; - } - - if (GrandExchangeOfferOwnWorldComparator.mapMarkerSprites == null) { - GrandExchangeOfferOwnWorldComparator.mapMarkerSprites = class83.SpriteBuffer_getSpriteArray(GrandExchangeOfferUnitPriceComparator.archive8, class192.spriteIds.field3791, 0); - } else { - ++var0; - } - - if (TextureProvider.crossSprites == null) { - TextureProvider.crossSprites = class83.SpriteBuffer_getSpriteArray(GrandExchangeOfferUnitPriceComparator.archive8, class192.spriteIds.field3793, 0); - } else { - ++var0; - } - - if (class42.mapDotSprites == null) { - class42.mapDotSprites = class83.SpriteBuffer_getSpriteArray(GrandExchangeOfferUnitPriceComparator.archive8, class192.spriteIds.field3794, 0); - } else { - ++var0; - } - - if (NetSocket.scrollBarSprites == null) { - var2 = GrandExchangeOfferUnitPriceComparator.archive8; - var21 = class192.spriteIds.field3795; - if (!class32.method618(var2, var21, 0)) { - var1 = null; - } else { - var5 = new IndexedSprite[class325.SpriteBuffer_spriteCount]; - - for (var22 = 0; var22 < class325.SpriteBuffer_spriteCount; ++var22) { - var7 = var5[var22] = new IndexedSprite(); - var7.width = class325.SpriteBuffer_spriteWidth; - var7.height = class325.SpriteBuffer_spriteHeight; - var7.xOffset = SecureRandomFuture.SpriteBuffer_xOffsets[var22]; - var7.yOffset = HealthBar.SpriteBuffer_yOffsets[var22]; - var7.subWidth = SecureRandomCallable.SpriteBuffer_spriteWidths[var22]; - var7.subHeight = AttackOption.SpriteBuffer_spriteHeights[var22]; - var7.palette = class325.SpriteBuffer_spritePalette; - var7.pixels = class325.SpriteBuffer_pixels[var22]; - } - - WorldMapData_1.method787(); - var1 = var5; - } - - NetSocket.scrollBarSprites = var1; - } else { - ++var0; - } - - if (VarcInt.modIconSprites == null) { - var2 = GrandExchangeOfferUnitPriceComparator.archive8; - var21 = class192.spriteIds.field3796; - if (!class32.method618(var2, var21, 0)) { - var1 = null; - } else { - var5 = new IndexedSprite[class325.SpriteBuffer_spriteCount]; - - for (var22 = 0; var22 < class325.SpriteBuffer_spriteCount; ++var22) { - var7 = var5[var22] = new IndexedSprite(); - var7.width = class325.SpriteBuffer_spriteWidth; - var7.height = class325.SpriteBuffer_spriteHeight; - var7.xOffset = SecureRandomFuture.SpriteBuffer_xOffsets[var22]; - var7.yOffset = HealthBar.SpriteBuffer_yOffsets[var22]; - var7.subWidth = SecureRandomCallable.SpriteBuffer_spriteWidths[var22]; - var7.subHeight = AttackOption.SpriteBuffer_spriteHeights[var22]; - var7.palette = class325.SpriteBuffer_spritePalette; - var7.pixels = class325.SpriteBuffer_pixels[var22]; - } - - WorldMapData_1.method787(); - var1 = var5; - } - - VarcInt.modIconSprites = var1; - } else { - ++var0; - } - - if (var0 < 11) { - Login.Login_loadingText = "Loading sprites - " + var0 * 100 / 12 + "%"; - Login.Login_loadingPercent = 70; - } else { - AbstractFont.AbstractFont_modIconSprites = VarcInt.modIconSprites; - class4.redHintArrowSprite.normalize(); - var20 = (int)(Math.random() * 21.0D) - 10; - int var24 = (int)(Math.random() * 21.0D) - 10; - var21 = (int)(Math.random() * 21.0D) - 10; - int var4 = (int)(Math.random() * 41.0D) - 20; - GrandExchangeOfferWorldComparator.mapSceneSprites[0].shiftColors(var4 + var20, var24 + var4, var4 + var21); - Login.Login_loadingText = "Loaded sprites"; - Login.Login_loadingPercent = 70; - Client.titleLoadingStage = 90; - } - } else if (Client.titleLoadingStage == 90) { - if (!WorldMapSprite.archive9.isFullyLoaded()) { - Login.Login_loadingText = "Loading textures - " + "0%"; - Login.Login_loadingPercent = 90; - } else { - WorldMapArea.textureProvider = new TextureProvider(WorldMapSprite.archive9, GrandExchangeOfferUnitPriceComparator.archive8, 20, 0.8D, Client.isLowDetail ? 64 : 128); - Rasterizer3D.Rasterizer3D_setTextureLoader(WorldMapArea.textureProvider); - Rasterizer3D.Rasterizer3D_setBrightness(0.8D); - Client.titleLoadingStage = 100; - } - } else if (Client.titleLoadingStage == 100) { - var0 = WorldMapArea.textureProvider.getLoadedPercentage(); - if (var0 < 100) { - Login.Login_loadingText = "Loading textures - " + var0 + "%"; - Login.Login_loadingPercent = 90; - } else { - Login.Login_loadingText = "Loaded textures"; - Login.Login_loadingPercent = 90; - Client.titleLoadingStage = 110; - } - } else if (Client.titleLoadingStage == 110) { - class3.mouseRecorder = new MouseRecorder(); - GameShell.taskHandler.newThreadTask(class3.mouseRecorder, 10); - Login.Login_loadingText = "Loaded input handler"; - Login.Login_loadingPercent = 92; - Client.titleLoadingStage = 120; - } else if (Client.titleLoadingStage == 120) { - if (!WorldMapID.archive10.tryLoadFileByNames("huffman", "")) { - Login.Login_loadingText = "Loading wordpack - " + 0 + "%"; - Login.Login_loadingPercent = 94; - } else { - Huffman var19 = new Huffman(WorldMapID.archive10.takeFileByNames("huffman", "")); - VerticalAlignment.method4504(var19); - Login.Login_loadingText = "Loaded wordpack"; - Login.Login_loadingPercent = 94; - Client.titleLoadingStage = 130; - } - } else if (Client.titleLoadingStage == 130) { - if (!SpriteMask.archive3.isFullyLoaded()) { - Login.Login_loadingText = "Loading interfaces - " + SpriteMask.archive3.loadPercent() * 4 / 5 + "%"; - Login.Login_loadingPercent = 96; - } else if (!Occluder.archive12.isFullyLoaded()) { - Login.Login_loadingText = "Loading interfaces - " + (80 + Occluder.archive12.loadPercent() / 6) + "%"; - Login.Login_loadingPercent = 96; - } else if (!UrlRequest.archive13.isFullyLoaded()) { - Login.Login_loadingText = "Loading interfaces - " + (96 + UrlRequest.archive13.loadPercent() / 50) + "%"; - Login.Login_loadingPercent = 96; - } else { - Login.Login_loadingText = "Loaded interfaces"; - Login.Login_loadingPercent = 98; - Client.titleLoadingStage = 140; - } - } else if (Client.titleLoadingStage == 140) { - Login.Login_loadingPercent = 100; - if (!ReflectionCheck.archive19.tryLoadGroupByName(WorldMapCacheName.field288.name)) { - Login.Login_loadingText = "Loading world map - " + ReflectionCheck.archive19.groupLoadPercentByName(WorldMapCacheName.field288.name) / 10 + "%"; - } else { - if (Login.worldMap == null) { - Login.worldMap = new WorldMap(); - Login.worldMap.init(ReflectionCheck.archive19, WorldMapDecoration.archive18, Actor.archive20, class43.fontBold12, Client.fontsMap, GrandExchangeOfferWorldComparator.mapSceneSprites); - } - - Login.Login_loadingText = "Loaded world map"; - Client.titleLoadingStage = 150; - } - } else if (Client.titleLoadingStage == 150) { - Tile.updateGameState(10); - } - } + var0.archive.load(var0.archiveDisk, (int)var0.key, var0.data, false); } } + + @ObfuscatedName("g") + @ObfuscatedSignature( + signature = "([BIIB)Ljava/lang/String;", + garbageValue = "-77" + ) + @Export("decodeStringCp1252") + public static String decodeStringCp1252(byte[] var0, int var1, int var2) { + char[] var3 = new char[var2]; + int var4 = 0; + + for (int var5 = 0; var5 < var2; ++var5) { + int var6 = var0[var5 + var1] & 255; + if (var6 != 0) { + if (var6 >= 128 && var6 < 160) { + char var7 = class287.cp1252AsciiExtension[var6 - 128]; + if (var7 == 0) { + var7 = '?'; + } + + var6 = var7; + } + + var3[var4++] = (char)var6; + } + } + + return new String(var3, 0, var4); + } } diff --git a/runescape-client/src/main/java/NetFileRequest.java b/runescape-client/src/main/java/NetFileRequest.java index c1fb875d03..7e8ea0d32d 100644 --- a/runescape-client/src/main/java/NetFileRequest.java +++ b/runescape-client/src/main/java/NetFileRequest.java @@ -4,52 +4,34 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ho") +@ObfuscatedName("hi") @Implements("NetFileRequest") public class NetFileRequest extends DualNode { - @ObfuscatedName("df") - @ObfuscatedSignature( - signature = "Lij;" - ) - @Export("archive4") - static Archive archive4; - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "Lij;" ) @Export("archive") - public Archive archive; - @ObfuscatedName("t") + Archive archive; + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = 925703943 + intValue = -1722853761 ) @Export("crc") - public int crc; - @ObfuscatedName("n") + int crc; + @ObfuscatedName("b") @Export("padding") - public byte padding; + byte padding; NetFileRequest() { } - @ObfuscatedName("t") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(II)Lii;", - garbageValue = "-2050258581" + signature = "(Lhf;I)V", + garbageValue = "-568024441" ) - public static HitSplatDefinition method4298(int var0) { - HitSplatDefinition var1 = (HitSplatDefinition)HitSplatDefinition.HitSplatDefinition_cached.get((long)var0); - if (var1 != null) { - return var1; - } else { - byte[] var2 = HitSplatDefinition.HitSplatDefinition_archive.takeFile(32, var0); - var1 = new HitSplatDefinition(); - if (var2 != null) { - var1.decode(new Buffer(var2)); - } - - HitSplatDefinition.HitSplatDefinition_cached.put(var1, (long)var0); - return var1; - } + public static void method4230(AbstractArchive var0) { + StructDefinition.StructDefinition_archive = var0; } } diff --git a/runescape-client/src/main/java/NetSocket.java b/runescape-client/src/main/java/NetSocket.java index 23fcd5115b..a90637febd 100644 --- a/runescape-client/src/main/java/NetSocket.java +++ b/runescape-client/src/main/java/NetSocket.java @@ -9,72 +9,66 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("fr") +@ObfuscatedName("fq") @Implements("NetSocket") public final class NetSocket extends AbstractSocket implements Runnable { - @ObfuscatedName("gv") - @ObfuscatedSignature( - signature = "[Llw;" - ) - @Export("scrollBarSprites") - static IndexedSprite[] scrollBarSprites; - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("inputStream") InputStream inputStream; - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("outputStream") OutputStream outputStream; - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("socket") Socket socket; - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("isClosed") boolean isClosed; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "Lff;" + signature = "Lfu;" ) @Export("taskHandler") TaskHandler taskHandler; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "Lfw;" + signature = "Lfo;" ) @Export("task") Task task; - @ObfuscatedName("c") + @ObfuscatedName("h") @Export("outBuffer") byte[] outBuffer; - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedGetter( - intValue = -1560599267 + intValue = -802191953 ) @Export("outLength") int outLength; - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedGetter( - intValue = -1803415659 + intValue = -2034803765 ) @Export("outOffset") int outOffset; - @ObfuscatedName("d") + @ObfuscatedName("i") @Export("exceptionWriting") boolean exceptionWriting; - @ObfuscatedName("m") + @ObfuscatedName("k") @ObfuscatedGetter( - intValue = 1815160735 + intValue = 1614956345 ) @Export("bufferLength") final int bufferLength; - @ObfuscatedName("p") + @ObfuscatedName("x") @ObfuscatedGetter( - intValue = 123096351 + intValue = 881888213 ) @Export("maxPacketLength") final int maxPacketLength; @ObfuscatedSignature( - signature = "(Ljava/net/Socket;Lff;I)V" + signature = "(Ljava/net/Socket;Lfu;I)V" ) public NetSocket(Socket var1, TaskHandler var2, int var3) throws IOException { this.isClosed = false; @@ -93,10 +87,10 @@ public final class NetSocket extends AbstractSocket implements Runnable { this.outputStream = this.socket.getOutputStream(); } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "1632517280" + signature = "(B)V", + garbageValue = "-29" ) @Export("close") public void close() { @@ -108,7 +102,10 @@ public final class NetSocket extends AbstractSocket implements Runnable { if (this.task != null) { while (this.task.status == 0) { - ClanChat.method5367(1L); + try { + Thread.sleep(1L); + } catch (InterruptedException var4) { + } } if (this.task.status == 1) { @@ -123,30 +120,30 @@ public final class NetSocket extends AbstractSocket implements Runnable { } } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( signature = "(B)I", - garbageValue = "0" + garbageValue = "27" ) @Export("readUnsignedByte") public int readUnsignedByte() throws IOException { return this.isClosed ? 0 : this.inputStream.read(); } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( signature = "(B)I", - garbageValue = "-1" + garbageValue = "-53" ) @Export("available") public int available() throws IOException { return this.isClosed ? 0 : this.inputStream.available(); } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( signature = "(II)Z", - garbageValue = "1174929907" + garbageValue = "-1591428004" ) @Export("isAvailable") public boolean isAvailable(int var1) throws IOException { @@ -157,10 +154,10 @@ public final class NetSocket extends AbstractSocket implements Runnable { } } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "([BIII)I", - garbageValue = "1681485484" + signature = "([BIIB)I", + garbageValue = "29" ) @Export("read") public int read(byte[] var1, int var2, int var3) throws IOException { @@ -182,10 +179,10 @@ public final class NetSocket extends AbstractSocket implements Runnable { } } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "([BIII)V", - garbageValue = "-340790701" + signature = "([BIIB)V", + garbageValue = "118" ) @Export("write0") void write0(byte[] var1, int var2, int var3) throws IOException { @@ -217,16 +214,20 @@ public final class NetSocket extends AbstractSocket implements Runnable { } } - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( signature = "([BIII)V", - garbageValue = "1989353375" + garbageValue = "-543253817" ) @Export("write") public void write(byte[] var1, int var2, int var3) throws IOException { this.write0(var1, var2, var3); } + protected void finalize() { + this.close(); + } + public void run() { try { while (true) { @@ -234,7 +235,7 @@ public final class NetSocket extends AbstractSocket implements Runnable { int var1; int var2; synchronized(this) { - if (this.outOffset == this.outLength) { + if (this.outLength == this.outOffset) { if (this.isClosed) { break label84; } @@ -266,7 +267,7 @@ public final class NetSocket extends AbstractSocket implements Runnable { this.outLength = (var1 + this.outLength) % this.bufferLength; try { - if (this.outLength == this.outOffset) { + if (this.outOffset == this.outLength) { this.outputStream.flush(); } } catch (IOException var8) { @@ -294,12 +295,8 @@ public final class NetSocket extends AbstractSocket implements Runnable { break; } } catch (Exception var12) { - User.RunException_sendStackTrace((String)null, var12); + Calendar.RunException_sendStackTrace((String)null, var12); } } - - protected void finalize() { - this.close(); - } } diff --git a/runescape-client/src/main/java/Node.java b/runescape-client/src/main/java/Node.java index 7a056ea011..9af8f1d659 100644 --- a/runescape-client/src/main/java/Node.java +++ b/runescape-client/src/main/java/Node.java @@ -3,26 +3,26 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("fd") +@ObfuscatedName("fb") @Implements("Node") public class Node { - @ObfuscatedName("cp") + @ObfuscatedName("cc") @Export("key") public long key; - @ObfuscatedName("cs") + @ObfuscatedName("cp") @ObfuscatedSignature( - signature = "Lfd;" + signature = "Lfb;" ) @Export("previous") public Node previous; - @ObfuscatedName("ck") + @ObfuscatedName("ce") @ObfuscatedSignature( - signature = "Lfd;" + signature = "Lfb;" ) @Export("next") public Node next; - @ObfuscatedName("fv") + @ObfuscatedName("fs") @Export("remove") public void remove() { if (this.next != null) { diff --git a/runescape-client/src/main/java/NodeDeque.java b/runescape-client/src/main/java/NodeDeque.java index 50f89db756..b528e29d70 100644 --- a/runescape-client/src/main/java/NodeDeque.java +++ b/runescape-client/src/main/java/NodeDeque.java @@ -3,18 +3,18 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("jb") +@ObfuscatedName("jd") @Implements("NodeDeque") public class NodeDeque { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lfd;" + signature = "Lfb;" ) @Export("sentinel") public Node sentinel; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lfd;" + signature = "Lfb;" ) @Export("current") Node current; @@ -25,7 +25,7 @@ public class NodeDeque { this.sentinel.next = this.sentinel; } - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("clear") public void clear() { while (true) { @@ -39,9 +39,9 @@ public class NodeDeque { } } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Lfd;)V" + signature = "(Lfb;)V" ) @Export("addFirst") public void addFirst(Node var1) { @@ -55,9 +55,9 @@ public class NodeDeque { var1.previous.next = var1; } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Lfd;)V" + signature = "(Lfb;)V" ) @Export("addLast") public void addLast(Node var1) { @@ -71,9 +71,9 @@ public class NodeDeque { var1.previous.next = var1; } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "()Lfd;" + signature = "()Lfb;" ) @Export("removeLast") public Node removeLast() { @@ -86,9 +86,9 @@ public class NodeDeque { } } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "()Lfd;" + signature = "()Lfb;" ) @Export("removeFirst") public Node removeFirst() { @@ -101,9 +101,9 @@ public class NodeDeque { } } - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "()Lfd;" + signature = "()Lfb;" ) @Export("last") public Node last() { @@ -117,9 +117,9 @@ public class NodeDeque { } } - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "()Lfd;" + signature = "()Lfb;" ) @Export("first") public Node first() { @@ -133,9 +133,9 @@ public class NodeDeque { } } - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedSignature( - signature = "()Lfd;" + signature = "()Lfb;" ) @Export("previous") public Node previous() { @@ -149,9 +149,9 @@ public class NodeDeque { } } - @ObfuscatedName("d") + @ObfuscatedName("i") @ObfuscatedSignature( - signature = "()Lfd;" + signature = "()Lfb;" ) @Export("next") public Node next() { @@ -165,9 +165,9 @@ public class NodeDeque { } } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(Lfd;Lfd;)V" + signature = "(Lfb;Lfb;)V" ) @Export("NodeDeque_addBefore") public static void NodeDeque_addBefore(Node var0, Node var1) { diff --git a/runescape-client/src/main/java/NodeHashTable.java b/runescape-client/src/main/java/NodeHashTable.java index a25a05cde2..4957bce8fe 100644 --- a/runescape-client/src/main/java/NodeHashTable.java +++ b/runescape-client/src/main/java/NodeHashTable.java @@ -3,31 +3,31 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("lh") +@ObfuscatedName("le") @Implements("NodeHashTable") public final class NodeHashTable { - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("size") int size; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "[Lfd;" + signature = "[Lfb;" ) @Export("buckets") Node[] buckets; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Lfd;" + signature = "Lfb;" ) @Export("currentGet") Node currentGet; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Lfd;" + signature = "Lfb;" ) @Export("current") Node current; - @ObfuscatedName("v") + @ObfuscatedName("z") @Export("index") int index; @@ -44,9 +44,9 @@ public final class NodeHashTable { } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(J)Lfd;" + signature = "(J)Lfb;" ) @Export("get") public Node get(long var1) { @@ -64,9 +64,9 @@ public final class NodeHashTable { return null; } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Lfd;J)V" + signature = "(Lfb;J)V" ) @Export("put") public void put(Node var1, long var2) { @@ -82,9 +82,9 @@ public final class NodeHashTable { var1.key = var2; } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "()Lfd;" + signature = "()Lfb;" ) @Export("first") public Node first() { @@ -92,9 +92,9 @@ public final class NodeHashTable { return this.next(); } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "()Lfd;" + signature = "()Lfb;" ) @Export("next") public Node next() { diff --git a/runescape-client/src/main/java/ObjectDefinition.java b/runescape-client/src/main/java/ObjectDefinition.java index 7dada48640..a8ae11fcda 100644 --- a/runescape-client/src/main/java/ObjectDefinition.java +++ b/runescape-client/src/main/java/ObjectDefinition.java @@ -1,260 +1,266 @@ +import java.awt.Toolkit; +import java.awt.datatransfer.Clipboard; +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.Transferable; +import java.awt.datatransfer.UnsupportedFlavorException; +import java.io.IOException; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ix") +@ObfuscatedName("il") @Implements("ObjectDefinition") public class ObjectDefinition extends DualNode { - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("ObjectDefinition_isLowDetail") - public static boolean ObjectDefinition_isLowDetail; - @ObfuscatedName("t") + static boolean ObjectDefinition_isLowDetail; + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lhq;" + signature = "Lhf;" ) @Export("ObjectDefinition_archive") - public static AbstractArchive ObjectDefinition_archive; - @ObfuscatedName("n") + static AbstractArchive ObjectDefinition_archive; + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Lhq;" + signature = "Lhf;" ) @Export("ObjectDefinition_modelsArchive") - public static AbstractArchive ObjectDefinition_modelsArchive; - @ObfuscatedName("q") + static AbstractArchive ObjectDefinition_modelsArchive; + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Leb;" + signature = "Lef;" ) @Export("ObjectDefinition_cached") - public static EvictingDualNodeHashTable ObjectDefinition_cached; - @ObfuscatedName("v") + static EvictingDualNodeHashTable ObjectDefinition_cached; + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "Leb;" + signature = "Lef;" ) @Export("ObjectDefinition_cachedModelData") public static EvictingDualNodeHashTable ObjectDefinition_cachedModelData; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "Leb;" + signature = "Lef;" ) @Export("ObjectDefinition_cachedEntities") - public static EvictingDualNodeHashTable ObjectDefinition_cachedEntities; - @ObfuscatedName("c") + static EvictingDualNodeHashTable ObjectDefinition_cachedEntities; + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "Leb;" + signature = "Lef;" ) @Export("ObjectDefinition_cachedModels") - public static EvictingDualNodeHashTable ObjectDefinition_cachedModels; - @ObfuscatedName("o") + static EvictingDualNodeHashTable ObjectDefinition_cachedModels; + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "[Ldu;" + signature = "[Ldq;" ) - static ModelData[] field3343; - @ObfuscatedName("i") + static ModelData[] field3359; + @ObfuscatedName("w") @ObfuscatedGetter( - intValue = -1993900589 + intValue = 1224047329 ) @Export("id") public int id; - @ObfuscatedName("d") + @ObfuscatedName("i") @Export("modelIds") int[] modelIds; - @ObfuscatedName("m") + @ObfuscatedName("k") @Export("models") int[] models; - @ObfuscatedName("p") + @ObfuscatedName("x") @Export("name") public String name; - @ObfuscatedName("h") + @ObfuscatedName("o") @Export("recolorFrom") short[] recolorFrom; - @ObfuscatedName("k") + @ObfuscatedName("e") @Export("recolorTo") short[] recolorTo; - @ObfuscatedName("x") + @ObfuscatedName("n") @Export("retextureFrom") short[] retextureFrom; - @ObfuscatedName("j") + @ObfuscatedName("r") @Export("retextureTo") short[] retextureTo; - @ObfuscatedName("r") + @ObfuscatedName("c") @ObfuscatedGetter( - intValue = 422386915 + intValue = 1491775379 ) @Export("sizeX") public int sizeX; - @ObfuscatedName("e") + @ObfuscatedName("a") @ObfuscatedGetter( - intValue = -344442861 + intValue = 1523535533 ) @Export("sizeY") public int sizeY; - @ObfuscatedName("s") + @ObfuscatedName("d") @ObfuscatedGetter( - intValue = 1570722017 + intValue = -497299079 ) @Export("interactType") public int interactType; - @ObfuscatedName("b") + @ObfuscatedName("s") @Export("boolean1") public boolean boolean1; - @ObfuscatedName("z") + @ObfuscatedName("t") @ObfuscatedGetter( - intValue = -1786719331 + intValue = -902316801 ) @Export("int1") public int int1; - @ObfuscatedName("f") + @ObfuscatedName("m") @ObfuscatedGetter( - intValue = 1182575987 + intValue = 1874021809 ) @Export("clipType") int clipType; - @ObfuscatedName("g") + @ObfuscatedName("v") @Export("nonFlatShading") boolean nonFlatShading; - @ObfuscatedName("w") + @ObfuscatedName("q") @Export("modelClipped") public boolean modelClipped; - @ObfuscatedName("u") + @ObfuscatedName("l") @ObfuscatedGetter( - intValue = -1591486693 + intValue = 560318425 ) @Export("animationId") public int animationId; - @ObfuscatedName("y") + @ObfuscatedName("j") @ObfuscatedGetter( - intValue = 1214501493 + intValue = -1161238399 ) @Export("int2") public int int2; - @ObfuscatedName("aa") + @ObfuscatedName("af") @ObfuscatedGetter( - intValue = 1736897731 + intValue = -1664759947 ) @Export("ambient") int ambient; - @ObfuscatedName("aw") + @ObfuscatedName("ad") @ObfuscatedGetter( - intValue = 1030392427 + intValue = -740378647 ) @Export("contrast") int contrast; - @ObfuscatedName("ar") + @ObfuscatedName("am") @Export("actions") public String[] actions; - @ObfuscatedName("aq") + @ObfuscatedName("ai") @ObfuscatedGetter( - intValue = -1056926649 + intValue = -1328345039 ) @Export("mapIconId") public int mapIconId; - @ObfuscatedName("ad") + @ObfuscatedName("ag") @ObfuscatedGetter( - intValue = -136330365 + intValue = 114604009 ) @Export("mapSceneId") public int mapSceneId; - @ObfuscatedName("ag") + @ObfuscatedName("ao") @Export("isRotated") boolean isRotated; - @ObfuscatedName("ak") + @ObfuscatedName("aw") @Export("clipped") public boolean clipped; - @ObfuscatedName("av") + @ObfuscatedName("ak") @ObfuscatedGetter( - intValue = -86408231 + intValue = 1275317383 ) @Export("modelSizeX") int modelSizeX; - @ObfuscatedName("am") + @ObfuscatedName("aa") @ObfuscatedGetter( - intValue = -2043356087 + intValue = 561892729 ) @Export("modelHeight") int modelHeight; @ObfuscatedName("ab") @ObfuscatedGetter( - intValue = 972016097 + intValue = -830571783 ) @Export("modelSizeY") int modelSizeY; - @ObfuscatedName("ax") + @ObfuscatedName("ar") @ObfuscatedGetter( - intValue = -1041382713 + intValue = 1415912703 ) @Export("offsetX") int offsetX; - @ObfuscatedName("al") + @ObfuscatedName("av") @ObfuscatedGetter( - intValue = -1733868633 + intValue = 1898203577 ) @Export("offsetHeight") int offsetHeight; - @ObfuscatedName("ap") + @ObfuscatedName("aq") @ObfuscatedGetter( - intValue = 74915989 + intValue = -1849368413 ) @Export("offsetY") int offsetY; - @ObfuscatedName("aj") + @ObfuscatedName("ac") @Export("boolean2") public boolean boolean2; - @ObfuscatedName("ae") + @ObfuscatedName("az") @Export("isSolid") boolean isSolid; - @ObfuscatedName("au") + @ObfuscatedName("at") @ObfuscatedGetter( - intValue = -395487905 + intValue = -1008945237 ) @Export("int3") public int int3; - @ObfuscatedName("ah") + @ObfuscatedName("ae") @Export("transforms") public int[] transforms; - @ObfuscatedName("an") + @ObfuscatedName("aj") @ObfuscatedGetter( - intValue = 955915521 + intValue = -1651874633 ) @Export("transformVarbit") int transformVarbit; - @ObfuscatedName("af") + @ObfuscatedName("ap") @ObfuscatedGetter( - intValue = -712370683 + intValue = -1197064613 ) @Export("transformVarp") int transformVarp; - @ObfuscatedName("ay") + @ObfuscatedName("an") @ObfuscatedGetter( - intValue = 176060935 + intValue = 635324039 ) @Export("ambientSoundId") public int ambientSoundId; - @ObfuscatedName("az") + @ObfuscatedName("al") @ObfuscatedGetter( - intValue = 1665197725 + intValue = -133480475 ) @Export("int4") public int int4; - @ObfuscatedName("ao") + @ObfuscatedName("ay") @ObfuscatedGetter( - intValue = -370053387 + intValue = 1751772739 ) @Export("int5") public int int5; - @ObfuscatedName("ai") + @ObfuscatedName("ax") @ObfuscatedGetter( - intValue = -307838615 + intValue = -2030067949 ) @Export("int6") public int int6; - @ObfuscatedName("ac") + @ObfuscatedName("au") @Export("soundEffectIds") public int[] soundEffectIds; - @ObfuscatedName("at") + @ObfuscatedName("as") @ObfuscatedSignature( - signature = "Llr;" + signature = "Llb;" ) @Export("params") IterableNodeHashTable params; @@ -265,7 +271,7 @@ public class ObjectDefinition extends DualNode { ObjectDefinition_cachedModelData = new EvictingDualNodeHashTable(500); ObjectDefinition_cachedEntities = new EvictingDualNodeHashTable(30); ObjectDefinition_cachedModels = new EvictingDualNodeHashTable(30); - field3343 = new ModelData[4]; + field3359 = new ModelData[4]; } ObjectDefinition() { @@ -304,10 +310,10 @@ public class ObjectDefinition extends DualNode { this.int6 = 0; } - @ObfuscatedName("t") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "1701315891" + signature = "(S)V", + garbageValue = "-21114" ) @Export("postDecode") void postDecode() { @@ -330,10 +336,10 @@ public class ObjectDefinition extends DualNode { } - @ObfuscatedName("n") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(Lkc;I)V", - garbageValue = "-420175476" + signature = "(Lkg;I)V", + garbageValue = "-1870971162" ) @Export("decode") void decode(Buffer var1) { @@ -347,10 +353,10 @@ public class ObjectDefinition extends DualNode { } } - @ObfuscatedName("q") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(Lkc;IB)V", - garbageValue = "-2" + signature = "(Lkg;II)V", + garbageValue = "896131991" ) @Export("decodeNext") void decodeNext(Buffer var1, int var2) { @@ -360,7 +366,7 @@ public class ObjectDefinition extends DualNode { var3 = var1.readUnsignedByte(); if (var3 > 0) { if (this.modelIds != null && !ObjectDefinition_isLowDetail) { - var1.offset += 3 * var3; + var1.offset += var3 * 3; } else { this.models = new int[var3]; this.modelIds = new int[var3]; @@ -485,7 +491,7 @@ public class ObjectDefinition extends DualNode { } else if (var2 == 82) { this.mapIconId = var1.readUnsignedShort(); } else if (var2 == 249) { - this.params = UserComparator10.readStringIntParameters(var1, this.params); + this.params = ModelData0.readStringIntParameters(var1, this.params); } } else { this.transformVarbit = var1.readUnsignedShort(); @@ -521,12 +527,12 @@ public class ObjectDefinition extends DualNode { } - @ObfuscatedName("v") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(IB)Z", - garbageValue = "27" + signature = "(II)Z", + garbageValue = "2054916988" ) - public final boolean method4737(int var1) { + public final boolean method4691(int var1) { if (this.models != null) { for (int var4 = 0; var4 < this.models.length; ++var4) { if (this.models[var4] == var1) { @@ -550,10 +556,10 @@ public class ObjectDefinition extends DualNode { } } - @ObfuscatedName("l") + @ObfuscatedName("h") @ObfuscatedSignature( signature = "(B)Z", - garbageValue = "-46" + garbageValue = "0" ) @Export("needsModelFiles") public final boolean needsModelFiles() { @@ -570,10 +576,10 @@ public class ObjectDefinition extends DualNode { } } - @ObfuscatedName("c") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "(II[[IIIII)Lep;", - garbageValue = "-500081982" + signature = "(II[[IIIII)Lee;", + garbageValue = "554507629" ) @Export("getEntity") public final Entity getEntity(int var1, int var2, int[][] var3, int var4, int var5, int var6) { @@ -604,24 +610,24 @@ public class ObjectDefinition extends DualNode { } if (this.nonFlatShading) { - var9 = ((ModelData)var9).method2942(); + var9 = ((ModelData)var9).method2839(); } if (this.clipType * 65536 >= 0) { if (var9 instanceof Model) { var9 = ((Model)var9).contourGround(var3, var4, var5, var6, true, this.clipType * 65536); } else if (var9 instanceof ModelData) { - var9 = ((ModelData)var9).method2943(var3, var4, var5, var6, true, this.clipType * 65536); + var9 = ((ModelData)var9).method2819(var3, var4, var5, var6, true, this.clipType * 65536); } } return (Entity)var9; } - @ObfuscatedName("o") + @ObfuscatedName("w") @ObfuscatedSignature( - signature = "(II[[IIIIB)Ldv;", - garbageValue = "107" + signature = "(II[[IIIIS)Ldf;", + garbageValue = "17896" ) @Export("getModel") public final Model getModel(int var1, int var2, int[][] var3, int var4, int var5, int var6) { @@ -652,8 +658,8 @@ public class ObjectDefinition extends DualNode { @ObfuscatedName("i") @ObfuscatedSignature( - signature = "(II[[IIIILiv;II)Ldv;", - garbageValue = "-1457023019" + signature = "(II[[IIIILiy;IB)Ldf;", + garbageValue = "49" ) @Export("getModelDynamic") public final Model getModelDynamic(int var1, int var2, int[][] var3, int var4, int var5, int var6, SequenceDefinition var7, int var8) { @@ -692,10 +698,10 @@ public class ObjectDefinition extends DualNode { } } - @ObfuscatedName("d") + @ObfuscatedName("k") @ObfuscatedSignature( - signature = "(III)Ldu;", - garbageValue = "-1568760566" + signature = "(III)Ldq;", + garbageValue = "-391634342" ) @Export("getModelData") final ModelData getModelData(int var1, int var2) { @@ -733,19 +739,19 @@ public class ObjectDefinition extends DualNode { } if (var4) { - var3.method2951(); + var3.method2878(); } ObjectDefinition_cachedModelData.put(var3, (long)var7); } if (var5 > 1) { - field3343[var6] = var3; + field3359[var6] = var3; } } if (var5 > 1) { - var3 = new ModelData(field3343, var5); + var3 = new ModelData(field3359, var5); } } else { int var9 = -1; @@ -775,7 +781,7 @@ public class ObjectDefinition extends DualNode { } if (var10) { - var3.method2951(); + var3.method2878(); } ObjectDefinition_cachedModelData.put(var3, (long)var5); @@ -795,19 +801,19 @@ public class ObjectDefinition extends DualNode { var11 = true; } - ModelData var8 = new ModelData(var3, var2 == 0 && !var4 && !var11, this.recolorFrom == null, this.retextureFrom == null, true); + ModelData var8 = new ModelData(var3, var2 == 0 && !var4 && !var11, null == this.recolorFrom, this.retextureFrom == null, true); if (var1 == 4 && var2 > 3) { - var8.method2948(256); + var8.method2822(256); var8.changeOffset(45, 0, -45); } var2 &= 3; if (var2 == 1) { - var8.method2940(); + var8.method2884(); } else if (var2 == 2) { - var8.method2946(); + var8.method2872(); } else if (var2 == 3) { - var8.method2947(); + var8.method2823(); } if (this.recolorFrom != null) { @@ -833,16 +839,16 @@ public class ObjectDefinition extends DualNode { return var8; } - @ObfuscatedName("m") + @ObfuscatedName("x") @ObfuscatedSignature( - signature = "(I)Lix;", - garbageValue = "-971549373" + signature = "(I)Lil;", + garbageValue = "1137642576" ) @Export("transform") public final ObjectDefinition transform() { int var1 = -1; if (this.transformVarbit != -1) { - var1 = UserComparator9.getVarbit(this.transformVarbit); + var1 = FileSystem.getVarbit(this.transformVarbit); } else if (this.transformVarp != -1) { var1 = Varps.Varps_main[this.transformVarp]; } @@ -854,46 +860,46 @@ public class ObjectDefinition extends DualNode { var2 = this.transforms[this.transforms.length - 1]; } - return var2 != -1 ? WorldMapDecorationType.getObjectDefinition(var2) : null; + return var2 != -1 ? Occluder.getObjectDefinition(var2) : null; } - @ObfuscatedName("p") + @ObfuscatedName("o") @ObfuscatedSignature( - signature = "(III)I", - garbageValue = "222142374" + signature = "(IIB)I", + garbageValue = "1" ) @Export("getIntParam") public int getIntParam(int var1, int var2) { - return FriendsList.method5306(this.params, var1, var2); - } - - @ObfuscatedName("h") - @ObfuscatedSignature( - signature = "(ILjava/lang/String;I)Ljava/lang/String;", - garbageValue = "894744637" - ) - @Export("getStringParam") - public String getStringParam(int var1, String var2) { IterableNodeHashTable var4 = this.params; - String var3; + int var3; if (var4 == null) { var3 = var2; } else { - ObjectNode var5 = (ObjectNode)var4.get((long)var1); + IntegerNode var5 = (IntegerNode)var4.get((long)var1); if (var5 == null) { var3 = var2; } else { - var3 = (String)var5.obj; + var3 = var5.integer; } } return var3; } - @ObfuscatedName("k") + @ObfuscatedName("e") + @ObfuscatedSignature( + signature = "(ILjava/lang/String;B)Ljava/lang/String;", + garbageValue = "1" + ) + @Export("getStringParam") + public String getStringParam(int var1, String var2) { + return ServerBuild.method4214(this.params, var1, var2); + } + + @ObfuscatedName("c") @ObfuscatedSignature( signature = "(I)Z", - garbageValue = "2082133096" + garbageValue = "-422498348" ) @Export("hasSound") public boolean hasSound() { @@ -902,7 +908,7 @@ public class ObjectDefinition extends DualNode { } else { for (int var1 = 0; var1 < this.transforms.length; ++var1) { if (this.transforms[var1] != -1) { - ObjectDefinition var2 = WorldMapDecorationType.getObjectDefinition(this.transforms[var1]); + ObjectDefinition var2 = Occluder.getObjectDefinition(this.transforms[var1]); if (var2.ambientSoundId != -1 || var2.soundEffectIds != null) { return true; } @@ -913,40 +919,875 @@ public class ObjectDefinition extends DualNode { } } - @ObfuscatedName("jt") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(Lhi;III)V", - garbageValue = "1536796270" + signature = "(Lbo;I)V", + garbageValue = "-1368226174" ) - @Export("alignWidgetPosition") - static void alignWidgetPosition(Widget var0, int var1, int var2) { - if (var0.xAlignment == 0) { - var0.x = var0.rawX; - } else if (var0.xAlignment == 1) { - var0.x = var0.rawX + (var1 - var0.width) / 2; - } else if (var0.xAlignment == 2) { - var0.x = var1 - var0.width - var0.rawX; - } else if (var0.xAlignment == 3) { - var0.x = var0.rawX * var1 >> 14; - } else if (var0.xAlignment == 4) { - var0.x = (var0.rawX * var1 >> 14) + (var1 - var0.width) / 2; + @Export("doCycleTitle") + static void doCycleTitle(GameShell var0) { + int var3; + int var31; + if (Login.worldSelectOpen) { + while (true) { + if (!InvDefinition.isKeyDown()) { + if (MouseHandler.MouseHandler_lastButton != 1 && (JagexCache.mouseCam || MouseHandler.MouseHandler_lastButton != 4)) { + break; + } + + int var1 = Login.xPadding + 280; + if (MouseHandler.MouseHandler_lastPressedX >= var1 && MouseHandler.MouseHandler_lastPressedX <= var1 + 14 && MouseHandler.MouseHandler_lastPressedY >= 4 && MouseHandler.MouseHandler_lastPressedY <= 18) { + class270.changeWorldSelectSorting(0, 0); + break; + } + + if (MouseHandler.MouseHandler_lastPressedX >= var1 + 15 && MouseHandler.MouseHandler_lastPressedX <= var1 + 80 && MouseHandler.MouseHandler_lastPressedY >= 4 && MouseHandler.MouseHandler_lastPressedY <= 18) { + class270.changeWorldSelectSorting(0, 1); + break; + } + + int var2 = Login.xPadding + 390; + if (MouseHandler.MouseHandler_lastPressedX >= var2 && MouseHandler.MouseHandler_lastPressedX <= var2 + 14 && MouseHandler.MouseHandler_lastPressedY >= 4 && MouseHandler.MouseHandler_lastPressedY <= 18) { + class270.changeWorldSelectSorting(1, 0); + break; + } + + if (MouseHandler.MouseHandler_lastPressedX >= var2 + 15 && MouseHandler.MouseHandler_lastPressedX <= var2 + 80 && MouseHandler.MouseHandler_lastPressedY >= 4 && MouseHandler.MouseHandler_lastPressedY <= 18) { + class270.changeWorldSelectSorting(1, 1); + break; + } + + var3 = Login.xPadding + 500; + if (MouseHandler.MouseHandler_lastPressedX >= var3 && MouseHandler.MouseHandler_lastPressedX <= var3 + 14 && MouseHandler.MouseHandler_lastPressedY >= 4 && MouseHandler.MouseHandler_lastPressedY <= 18) { + class270.changeWorldSelectSorting(2, 0); + break; + } + + if (MouseHandler.MouseHandler_lastPressedX >= var3 + 15 && MouseHandler.MouseHandler_lastPressedX <= var3 + 80 && MouseHandler.MouseHandler_lastPressedY >= 4 && MouseHandler.MouseHandler_lastPressedY <= 18) { + class270.changeWorldSelectSorting(2, 1); + break; + } + + var31 = Login.xPadding + 610; + if (MouseHandler.MouseHandler_lastPressedX >= var31 && MouseHandler.MouseHandler_lastPressedX <= var31 + 14 && MouseHandler.MouseHandler_lastPressedY >= 4 && MouseHandler.MouseHandler_lastPressedY <= 18) { + class270.changeWorldSelectSorting(3, 0); + break; + } + + if (MouseHandler.MouseHandler_lastPressedX >= var31 + 15 && MouseHandler.MouseHandler_lastPressedX <= var31 + 80 && MouseHandler.MouseHandler_lastPressedY >= 4 && MouseHandler.MouseHandler_lastPressedY <= 18) { + class270.changeWorldSelectSorting(3, 1); + break; + } + + if (MouseHandler.MouseHandler_lastPressedX >= Login.xPadding + 708 && MouseHandler.MouseHandler_lastPressedY >= 4 && MouseHandler.MouseHandler_lastPressedX <= Login.xPadding + 708 + 50 && MouseHandler.MouseHandler_lastPressedY <= 20) { + Login.worldSelectOpen = false; + AbstractByteArrayCopier.leftTitleSprite.drawAt(Login.xPadding, 0); + class319.rightTitleSprite.drawAt(Login.xPadding + 382, 0); + Decimator.logoSprite.drawAt(Login.xPadding + 382 - Decimator.logoSprite.subWidth / 2, 18); + break; + } + + if (Login.hoveredWorldIndex != -1) { + World var5 = Skills.World_worlds[Login.hoveredWorldIndex]; + GrandExchangeOfferAgeComparator.changeWorld(var5); + Login.worldSelectOpen = false; + AbstractByteArrayCopier.leftTitleSprite.drawAt(Login.xPadding, 0); + class319.rightTitleSprite.drawAt(Login.xPadding + 382, 0); + Decimator.logoSprite.drawAt(Login.xPadding + 382 - Decimator.logoSprite.subWidth / 2, 18); + } else { + if (Login.worldSelectPage > 0 && Skills.worldSelectLeftSprite != null && MouseHandler.MouseHandler_lastPressedX >= 0 && MouseHandler.MouseHandler_lastPressedX <= Skills.worldSelectLeftSprite.subWidth && MouseHandler.MouseHandler_lastPressedY >= WorldMapCacheName.canvasHeight / 2 - 50 && MouseHandler.MouseHandler_lastPressedY <= WorldMapCacheName.canvasHeight / 2 + 50) { + --Login.worldSelectPage; + } + + if (Login.worldSelectPage < Login.worldSelectPagesCount && KitDefinition.worldSelectRightSprite != null && MouseHandler.MouseHandler_lastPressedX >= BoundaryObject.canvasWidth - KitDefinition.worldSelectRightSprite.subWidth - 5 && MouseHandler.MouseHandler_lastPressedX <= BoundaryObject.canvasWidth && MouseHandler.MouseHandler_lastPressedY >= WorldMapCacheName.canvasHeight / 2 - 50 && MouseHandler.MouseHandler_lastPressedY <= WorldMapCacheName.canvasHeight / 2 + 50) { + ++Login.worldSelectPage; + } + } + break; + } + + if (class49.field418 == 13) { + Login.worldSelectOpen = false; + AbstractByteArrayCopier.leftTitleSprite.drawAt(Login.xPadding, 0); + class319.rightTitleSprite.drawAt(Login.xPadding + 382, 0); + Decimator.logoSprite.drawAt(Login.xPadding + 382 - Decimator.logoSprite.subWidth / 2, 18); + break; + } + + if (class49.field418 == 96) { + if (Login.worldSelectPage > 0 && Skills.worldSelectLeftSprite != null) { + --Login.worldSelectPage; + } + } else if (class49.field418 == 97 && Login.worldSelectPage < Login.worldSelectPagesCount && KitDefinition.worldSelectRightSprite != null) { + ++Login.worldSelectPage; + } + } + } else { - var0.x = var1 - var0.width - (var0.rawX * var1 >> 14); + if ((MouseHandler.MouseHandler_lastButton == 1 || !JagexCache.mouseCam && MouseHandler.MouseHandler_lastButton == 4) && MouseHandler.MouseHandler_lastPressedX >= Login.xPadding + 765 - 50 && MouseHandler.MouseHandler_lastPressedY >= 453) { + UserComparator10.clientPreferences.titleMusicDisabled = !UserComparator10.clientPreferences.titleMusicDisabled; + class40.savePreferences(); + if (!UserComparator10.clientPreferences.titleMusicDisabled) { + WorldMapData_0.method191(AbstractWorldMapData.archive6, "scape main", "", 255, false); + } else { + TileItemPile.method2811(); + } + } + + if (Client.gameState != 5) { + if (-1L == Login.field1205) { + Login.field1205 = TaskHandler.currentTimeMillis() + 1000L; + } + + long var20 = TaskHandler.currentTimeMillis(); + if (class4.method63() && -1L == Login.field1206) { + Login.field1206 = var20; + if (Login.field1206 > Login.field1205) { + Login.field1205 = Login.field1206; + } + } + + if (Client.gameState == 10 || Client.gameState == 11) { + if (Language.Language_EN == VarbitDefinition.clientLanguage) { + if (MouseHandler.MouseHandler_lastButton == 1 || !JagexCache.mouseCam && MouseHandler.MouseHandler_lastButton == 4) { + var3 = Login.xPadding + 5; + short var4 = 463; + byte var22 = 100; + byte var6 = 35; + if (MouseHandler.MouseHandler_lastPressedX >= var3 && MouseHandler.MouseHandler_lastPressedX <= var22 + var3 && MouseHandler.MouseHandler_lastPressedY >= var4 && MouseHandler.MouseHandler_lastPressedY <= var6 + var4) { + WorldMapData_0.method187(); + return; + } + } + + if (GrandExchangeOfferOwnWorldComparator.World_request != null) { + WorldMapData_0.method187(); + } + } + + var3 = MouseHandler.MouseHandler_lastButton; + var31 = MouseHandler.MouseHandler_lastPressedX; + int var42 = MouseHandler.MouseHandler_lastPressedY; + if (var3 == 0) { + var31 = MouseHandler.MouseHandler_x; + var42 = MouseHandler.MouseHandler_y; + } + + if (!JagexCache.mouseCam && var3 == 4) { + var3 = 1; + } + + short var34; + int var35; + if (Login.loginIndex == 0) { + boolean var39 = false; + + while (InvDefinition.isKeyDown()) { + if (class49.field418 == 84) { + var39 = true; + } + } + + var35 = GrandExchangeOfferOwnWorldComparator.loginBoxCenter - 80; + var34 = 291; + if (var3 == 1 && var31 >= var35 - 75 && var31 <= var35 + 75 && var42 >= var34 - 20 && var42 <= var34 + 20) { + WorldMapAreaData.openURL(PacketBuffer.method5582("secure", true) + "m=account-creation/g=oldscape/create_account_funnel.ws", true, false); + } + + var35 = GrandExchangeOfferOwnWorldComparator.loginBoxCenter + 80; + if (var3 == 1 && var31 >= var35 - 75 && var31 <= var35 + 75 && var42 >= var34 - 20 && var42 <= var34 + 20 || var39) { + if ((Client.worldProperties & 33554432) != 0) { + Login.Login_response0 = ""; + Login.Login_response1 = "This is a Beta world."; + Login.Login_response2 = "Your normal account will not be affected."; + Login.Login_response3 = ""; + Login.loginIndex = 1; + Buddy.method5251(); + } else if ((Client.worldProperties & 4) != 0) { + if ((Client.worldProperties & 1024) != 0) { + Login.Login_response1 = "This is a High Risk PvP world."; + Login.Login_response2 = "Players can attack each other almost everywhere"; + Login.Login_response3 = "and the Protect Item prayer won't work."; + } else { + Login.Login_response1 = "This is a PvP world."; + Login.Login_response2 = "Players can attack each other"; + Login.Login_response3 = "almost everywhere."; + } + + Login.Login_response0 = "Warning!"; + Login.loginIndex = 1; + Buddy.method5251(); + } else if ((Client.worldProperties & 1024) != 0) { + Login.Login_response1 = "This is a High Risk world."; + Login.Login_response2 = "The Protect Item prayer will"; + Login.Login_response3 = "not work on this world."; + Login.Login_response0 = "Warning!"; + Login.loginIndex = 1; + Buddy.method5251(); + } else { + class222.Login_promptCredentials(false); + } + } + } else { + short var7; + int var32; + if (Login.loginIndex == 1) { + while (true) { + if (!InvDefinition.isKeyDown()) { + var32 = GrandExchangeOfferOwnWorldComparator.loginBoxCenter - 80; + var7 = 321; + if (var3 == 1 && var31 >= var32 - 75 && var31 <= var32 + 75 && var42 >= var7 - 20 && var42 <= var7 + 20) { + class222.Login_promptCredentials(false); + } + + var32 = GrandExchangeOfferOwnWorldComparator.loginBoxCenter + 80; + if (var3 == 1 && var31 >= var32 - 75 && var31 <= var32 + 75 && var42 >= var7 - 20 && var42 <= var7 + 20) { + Login.loginIndex = 0; + } + break; + } + + if (class49.field418 == 84) { + class222.Login_promptCredentials(false); + } else if (class49.field418 == 13) { + Login.loginIndex = 0; + } + } + } else { + short var33; + boolean var36; + if (Login.loginIndex == 2) { + var33 = 201; + var32 = var33 + 52; + if (var3 == 1 && var42 >= var32 - 12 && var42 < var32 + 2) { + Login.currentLoginField = 0; + } + + var32 += 15; + if (var3 == 1 && var42 >= var32 - 12 && var42 < var32 + 2) { + Login.currentLoginField = 1; + } + + var32 += 15; + var33 = 361; + if (GrandExchangeOfferOwnWorldComparator.field638 != null) { + var35 = GrandExchangeOfferOwnWorldComparator.field638.highX / 2; + if (var3 == 1 && var31 >= GrandExchangeOfferOwnWorldComparator.field638.lowX - var35 && var31 <= var35 + GrandExchangeOfferOwnWorldComparator.field638.lowX && var42 >= var33 - 15 && var42 < var33) { + switch(Login.field1186) { + case 1: + PacketWriter.setLoginResponseString("Please enter your username.", "If you created your account after November", "2010, this will be the creation email address."); + Login.loginIndex = 5; + return; + case 2: + WorldMapAreaData.openURL("https://support.runescape.com/hc/en-gb", true, false); + } + } + } + + var35 = GrandExchangeOfferOwnWorldComparator.loginBoxCenter - 80; + var34 = 321; + if (var3 == 1 && var31 >= var35 - 75 && var31 <= var35 + 75 && var42 >= var34 - 20 && var42 <= var34 + 20) { + Login.Login_username = Login.Login_username.trim(); + if (Login.Login_username.length() == 0) { + PacketWriter.setLoginResponseString("", "Please enter your username/email address.", ""); + return; + } + + if (Login.Login_password.length() == 0) { + PacketWriter.setLoginResponseString("", "Please enter your password.", ""); + return; + } + + PacketWriter.setLoginResponseString("", "Connecting to server...", ""); + Canvas.method872(false); + class81.updateGameState(20); + return; + } + + var35 = Login.loginBoxX + 180 + 80; + if (var3 == 1 && var31 >= var35 - 75 && var31 <= var35 + 75 && var42 >= var34 - 20 && var42 <= var34 + 20) { + Login.loginIndex = 0; + Login.Login_username = ""; + Login.Login_password = ""; + class192.field2395 = 0; + WorldMapSection0.otp = ""; + Login.field1196 = true; + } + + var35 = GrandExchangeOfferOwnWorldComparator.loginBoxCenter + -117; + var34 = 277; + Login.field1173 = var31 >= var35 && var31 < var35 + HealthBar.field1115 && var42 >= var34 && var42 < var34 + class40.field348; + if (var3 == 1 && Login.field1173) { + Client.Login_isUsernameRemembered = !Client.Login_isUsernameRemembered; + if (!Client.Login_isUsernameRemembered && UserComparator10.clientPreferences.rememberedUsername != null) { + UserComparator10.clientPreferences.rememberedUsername = null; + class40.savePreferences(); + } + } + + var35 = GrandExchangeOfferOwnWorldComparator.loginBoxCenter + 24; + var34 = 277; + Login.field1195 = var31 >= var35 && var31 < var35 + HealthBar.field1115 && var42 >= var34 && var42 < var34 + class40.field348; + if (var3 == 1 && Login.field1195) { + UserComparator10.clientPreferences.hideUsername = !UserComparator10.clientPreferences.hideUsername; + if (!UserComparator10.clientPreferences.hideUsername) { + Login.Login_username = ""; + UserComparator10.clientPreferences.rememberedUsername = null; + Buddy.method5251(); + } + + class40.savePreferences(); + } + + label1235: + while (true) { + Transferable var24; + int var38; + do { + while (true) { + char var37; + label1149: + do { + while (true) { + while (InvDefinition.isKeyDown()) { + if (class49.field418 != 13) { + if (Login.currentLoginField != 0) { + continue label1149; + } + + DirectByteArrayCopier.method4010(class297.field3699); + if (class49.field418 == 85 && Login.Login_username.length() > 0) { + Login.Login_username = Login.Login_username.substring(0, Login.Login_username.length() - 1); + } + + if (class49.field418 == 84 || class49.field418 == 80) { + Login.currentLoginField = 1; + } + + var37 = class297.field3699; + var36 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!\"£$%^&*()-_=+[{]};:'@#~,<.>/?\\| ".indexOf(var37) != -1; + if (var36 && Login.Login_username.length() < 320) { + Login.Login_username = Login.Login_username + class297.field3699; + } + } else { + Login.loginIndex = 0; + Login.Login_username = ""; + Login.Login_password = ""; + class192.field2395 = 0; + WorldMapSection0.otp = ""; + Login.field1196 = true; + } + } + + return; + } + } while(Login.currentLoginField != 1); + + if (class49.field418 == 85 && Login.Login_password.length() > 0) { + Login.Login_password = Login.Login_password.substring(0, Login.Login_password.length() - 1); + } else if (class49.field418 == 84 || class49.field418 == 80) { + Login.currentLoginField = 0; + if (class49.field418 == 84) { + Login.Login_username = Login.Login_username.trim(); + if (Login.Login_username.length() == 0) { + PacketWriter.setLoginResponseString("", "Please enter your username/email address.", ""); + return; + } + + if (Login.Login_password.length() == 0) { + PacketWriter.setLoginResponseString("", "Please enter your password.", ""); + return; + } + + PacketWriter.setLoginResponseString("", "Connecting to server...", ""); + Canvas.method872(false); + class81.updateGameState(20); + return; + } + } + + if ((KeyHandler.KeyHandler_pressedKeys[82] || KeyHandler.KeyHandler_pressedKeys[87]) && class49.field418 == 67) { + Clipboard var23 = Toolkit.getDefaultToolkit().getSystemClipboard(); + var24 = var23.getContents(AbstractWorldMapIcon.client); + var38 = 20 - Login.Login_password.length(); + break; + } + + var37 = class297.field3699; + if (var37 >= ' ' && var37 < 127 || var37 > 127 && var37 < 160 || var37 > 160 && var37 <= 255) { + var36 = true; + } else { + label1362: { + if (var37 != 0) { + char[] var26 = class287.cp1252AsciiExtension; + + for (int var27 = 0; var27 < var26.length; ++var27) { + char var13 = var26[var27]; + if (var37 == var13) { + var36 = true; + break label1362; + } + } + } + + var36 = false; + } + } + + if (var36) { + char var43 = class297.field3699; + boolean var11 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!\"£$%^&*()-_=+[{]};:'@#~,<.>/?\\| ".indexOf(var43) != -1; + if (var11 && Login.Login_password.length() < 20) { + Login.Login_password = Login.Login_password + class297.field3699; + } + } + } + } while(var38 <= 0); + + try { + String var12 = (String)var24.getTransferData(DataFlavor.stringFlavor); + int var40 = Math.min(var38, var12.length()); + int var14 = 0; + + while (true) { + if (var14 >= var40) { + Login.Login_password = Login.Login_password + var12.substring(0, var40); + continue label1235; + } + + char var16 = var12.charAt(var14); + boolean var15; + if (var16 >= ' ' && var16 < 127 || var16 > 127 && var16 < 160 || var16 > 160 && var16 <= 255) { + var15 = true; + } else { + label1363: { + if (var16 != 0) { + char[] var17 = class287.cp1252AsciiExtension; + + for (int var18 = 0; var18 < var17.length; ++var18) { + char var19 = var17[var18]; + if (var16 == var19) { + var15 = true; + break label1363; + } + } + } + + var15 = false; + } + } + + if (!var15) { + break; + } + + char var41 = var12.charAt(var14); + boolean var25 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!\"£$%^&*()-_=+[{]};:'@#~,<.>/?\\| ".indexOf(var41) != -1; + if (!var25) { + break; + } + + ++var14; + } + + Login.loginIndex = 3; + return; + } catch (UnsupportedFlavorException var29) { + } catch (IOException var30) { + } + } + } else if (Login.loginIndex == 3) { + var32 = Login.loginBoxX + 180; + var7 = 276; + if (var3 == 1 && var31 >= var32 - 75 && var31 <= var32 + 75 && var42 >= var7 - 20 && var42 <= var7 + 20) { + class222.Login_promptCredentials(false); + } + + var32 = Login.loginBoxX + 180; + var7 = 326; + if (var3 == 1 && var31 >= var32 - 75 && var31 <= var32 + 75 && var42 >= var7 - 20 && var42 <= var7 + 20) { + PacketWriter.setLoginResponseString("Please enter your username.", "If you created your account after November", "2010, this will be the creation email address."); + Login.loginIndex = 5; + return; + } + } else { + int var9; + if (Login.loginIndex == 4) { + var32 = Login.loginBoxX + 180 - 80; + var7 = 321; + if (var3 == 1 && var31 >= var32 - 75 && var31 <= var32 + 75 && var42 >= var7 - 20 && var42 <= var7 + 20) { + WorldMapSection0.otp.trim(); + if (WorldMapSection0.otp.length() != 6) { + PacketWriter.setLoginResponseString("", "Please enter a 6-digit PIN.", ""); + return; + } + + class192.field2395 = Integer.parseInt(WorldMapSection0.otp); + WorldMapSection0.otp = ""; + Canvas.method872(true); + PacketWriter.setLoginResponseString("", "Connecting to server...", ""); + class81.updateGameState(20); + return; + } + + if (var3 == 1 && var31 >= Login.loginBoxX + 180 - 9 && var31 <= Login.loginBoxX + 180 + 130 && var42 >= 263 && var42 <= 296) { + Login.field1196 = !Login.field1196; + } + + if (var3 == 1 && var31 >= Login.loginBoxX + 180 - 34 && var31 <= Login.loginBoxX + 34 + 180 && var42 >= 351 && var42 <= 363) { + WorldMapAreaData.openURL(PacketBuffer.method5582("secure", true) + "m=totp-authenticator/disableTOTPRequest", true, false); + } + + var32 = Login.loginBoxX + 180 + 80; + if (var3 == 1 && var31 >= var32 - 75 && var31 <= var32 + 75 && var42 >= var7 - 20 && var42 <= var7 + 20) { + Login.loginIndex = 0; + Login.Login_username = ""; + Login.Login_password = ""; + class192.field2395 = 0; + WorldMapSection0.otp = ""; + } + + while (InvDefinition.isKeyDown()) { + boolean var8 = false; + + for (var9 = 0; var9 < "1234567890".length(); ++var9) { + if (class297.field3699 == "1234567890".charAt(var9)) { + var8 = true; + break; + } + } + + if (class49.field418 == 13) { + Login.loginIndex = 0; + Login.Login_username = ""; + Login.Login_password = ""; + class192.field2395 = 0; + WorldMapSection0.otp = ""; + } else { + if (class49.field418 == 85 && WorldMapSection0.otp.length() > 0) { + WorldMapSection0.otp = WorldMapSection0.otp.substring(0, WorldMapSection0.otp.length() - 1); + } + + if (class49.field418 == 84) { + WorldMapSection0.otp.trim(); + if (WorldMapSection0.otp.length() != 6) { + PacketWriter.setLoginResponseString("", "Please enter a 6-digit PIN.", ""); + return; + } + + class192.field2395 = Integer.parseInt(WorldMapSection0.otp); + WorldMapSection0.otp = ""; + Canvas.method872(true); + PacketWriter.setLoginResponseString("", "Connecting to server...", ""); + class81.updateGameState(20); + return; + } + + if (var8 && WorldMapSection0.otp.length() < 6) { + WorldMapSection0.otp = WorldMapSection0.otp + class297.field3699; + } + } + } + } else if (Login.loginIndex == 5) { + var32 = Login.loginBoxX + 180 - 80; + var7 = 321; + if (var3 == 1 && var31 >= var32 - 75 && var31 <= var32 + 75 && var42 >= var7 - 20 && var42 <= var7 + 20) { + ScriptFrame.method1163(); + return; + } + + var32 = Login.loginBoxX + 180 + 80; + if (var3 == 1 && var31 >= var32 - 75 && var31 <= var32 + 75 && var42 >= var7 - 20 && var42 <= var7 + 20) { + class222.Login_promptCredentials(true); + } + + var34 = 361; + if (class186.field2342 != null) { + var9 = class186.field2342.highX / 2; + if (var3 == 1 && var31 >= class186.field2342.lowX - var9 && var31 <= var9 + class186.field2342.lowX && var42 >= var34 - 15 && var42 < var34) { + WorldMapAreaData.openURL(PacketBuffer.method5582("secure", true) + "m=weblogin/g=oldscape/cant_log_in", true, false); + } + } + + while (InvDefinition.isKeyDown()) { + var36 = false; + + for (int var10 = 0; var10 < "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!\"£$%^&*()-_=+[{]};:'@#~,<.>/?\\| ".length(); ++var10) { + if (class297.field3699 == "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!\"£$%^&*()-_=+[{]};:'@#~,<.>/?\\| ".charAt(var10)) { + var36 = true; + break; + } + } + + if (class49.field418 == 13) { + class222.Login_promptCredentials(true); + } else { + if (class49.field418 == 85 && Login.Login_username.length() > 0) { + Login.Login_username = Login.Login_username.substring(0, Login.Login_username.length() - 1); + } + + if (class49.field418 == 84) { + ScriptFrame.method1163(); + return; + } + + if (var36 && Login.Login_username.length() < 320) { + Login.Login_username = Login.Login_username + class297.field3699; + } + } + } + } else if (Login.loginIndex != 6) { + if (Login.loginIndex == 7) { + var32 = Login.loginBoxX + 180 - 80; + var7 = 321; + if (var3 == 1 && var31 >= var32 - 75 && var31 <= var32 + 75 && var42 >= var7 - 20 && var42 <= var7 + 20) { + WorldMapAreaData.openURL(PacketBuffer.method5582("secure", true) + "m=dob/set_dob.ws", true, false); + PacketWriter.setLoginResponseString("", "Page has opened in a new window.", "(Please check your popup blocker.)"); + Login.loginIndex = 6; + return; + } + + var32 = Login.loginBoxX + 180 + 80; + if (var3 == 1 && var31 >= var32 - 75 && var31 <= var32 + 75 && var42 >= var7 - 20 && var42 <= var7 + 20) { + class222.Login_promptCredentials(true); + } + } else if (Login.loginIndex == 8) { + var32 = Login.loginBoxX + 180 - 80; + var7 = 321; + if (var3 == 1 && var31 >= var32 - 75 && var31 <= var32 + 75 && var42 >= var7 - 20 && var42 <= var7 + 20) { + WorldMapAreaData.openURL("https://www.jagex.com/terms/privacy/#eight", true, false); + PacketWriter.setLoginResponseString("", "Page has opened in a new window.", "(Please check your popup blocker.)"); + Login.loginIndex = 6; + return; + } + + var32 = Login.loginBoxX + 180 + 80; + if (var3 == 1 && var31 >= var32 - 75 && var31 <= var32 + 75 && var42 >= var7 - 20 && var42 <= var7 + 20) { + class222.Login_promptCredentials(true); + } + } else if (Login.loginIndex == 12) { + String var28 = ""; + switch(Login.field1185) { + case 0: + var28 = "https://support.runescape.com/hc/en-gb/articles/115002238729-Account-Bans"; + break; + case 1: + var28 = "https://support.runescape.com/hc/en-gb/articles/206103939-My-account-is-locked"; + break; + default: + class222.Login_promptCredentials(false); + } + + var35 = Login.loginBoxX + 180; + var34 = 276; + if (var3 == 1 && var31 >= var35 - 75 && var31 <= var35 + 75 && var42 >= var34 - 20 && var42 <= var34 + 20) { + WorldMapAreaData.openURL(var28, true, false); + PacketWriter.setLoginResponseString("", "Page has opened in a new window.", "(Please check your popup blocker.)"); + Login.loginIndex = 6; + return; + } + + var35 = Login.loginBoxX + 180; + var34 = 326; + if (var3 == 1 && var31 >= var35 - 75 && var31 <= var35 + 75 && var42 >= var34 - 20 && var42 <= var34 + 20) { + class222.Login_promptCredentials(false); + } + } else if (Login.loginIndex == 24) { + var32 = Login.loginBoxX + 180; + var7 = 301; + if (var3 == 1 && var31 >= var32 - 75 && var31 <= var32 + 75 && var42 >= var7 - 20 && var42 <= var7 + 20) { + class222.Login_promptCredentials(false); + } + } + } else { + while (true) { + do { + if (!InvDefinition.isKeyDown()) { + var33 = 321; + if (var3 == 1 && var42 >= var33 - 20 && var42 <= var33 + 20) { + class222.Login_promptCredentials(true); + } + + return; + } + } while(class49.field418 != 84 && class49.field418 != 13); + + class222.Login_promptCredentials(true); + } + } + } + } + } + + } + } + } + } + + @ObfuscatedName("jb") + @ObfuscatedSignature( + signature = "(II)V", + garbageValue = "-256216527" + ) + @Export("changeGameOptions") + static final void changeGameOptions(int var0) { + class312.method6006(); + + for (ObjectSound var1 = (ObjectSound)ObjectSound.objectSounds.last(); var1 != null; var1 = (ObjectSound)ObjectSound.objectSounds.previous()) { + if (var1.obj != null) { + var1.set(); + } } - if (var0.yAlignment == 0) { - var0.y = var0.rawY; - } else if (var0.yAlignment == 1) { - var0.y = (var2 - var0.height) / 2 + var0.rawY; - } else if (var0.yAlignment == 2) { - var0.y = var2 - var0.height - var0.rawY; - } else if (var0.yAlignment == 3) { - var0.y = var2 * var0.rawY >> 14; - } else if (var0.yAlignment == 4) { - var0.y = (var2 - var0.height) / 2 + (var2 * var0.rawY >> 14); - } else { - var0.y = var2 - var0.height - (var2 * var0.rawY >> 14); - } + int var4 = NetCache.VarpDefinition_get(var0).type; + if (var4 != 0) { + int var2 = Varps.Varps_main[var0]; + if (var4 == 1) { + if (var2 == 1) { + Rasterizer3D.Rasterizer3D_setBrightness(0.9D); + ((TextureProvider)Rasterizer3D.Rasterizer3D_textureLoader).setBrightness(0.9D); + } + if (var2 == 2) { + Rasterizer3D.Rasterizer3D_setBrightness(0.8D); + ((TextureProvider)Rasterizer3D.Rasterizer3D_textureLoader).setBrightness(0.8D); + } + + if (var2 == 3) { + Rasterizer3D.Rasterizer3D_setBrightness(0.7D); + ((TextureProvider)Rasterizer3D.Rasterizer3D_textureLoader).setBrightness(0.7D); + } + + if (var2 == 4) { + Rasterizer3D.Rasterizer3D_setBrightness(0.6D); + ((TextureProvider)Rasterizer3D.Rasterizer3D_textureLoader).setBrightness(0.6D); + } + + class60.method1194(); + } + + if (var4 == 3) { + short var3 = 0; + if (var2 == 0) { + var3 = 255; + } + + if (var2 == 1) { + var3 = 192; + } + + if (var2 == 2) { + var3 = 128; + } + + if (var2 == 3) { + var3 = 64; + } + + if (var2 == 4) { + var3 = 0; + } + + if (var3 != Client.musicVolume) { + if (Client.musicVolume == 0 && Client.currentTrackGroupId != -1) { + class65.playMusicTrack(AbstractWorldMapData.archive6, Client.currentTrackGroupId, 0, var3, false); + Client.field742 = false; + } else if (var3 == 0) { + TileItemPile.method2811(); + Client.field742 = false; + } else { + TilePaint.method3103(var3); + } + + Client.musicVolume = var3; + } + } + + if (var4 == 4) { + if (var2 == 0) { + Client.soundEffectVolume = 127; + } + + if (var2 == 1) { + Client.soundEffectVolume = 96; + } + + if (var2 == 2) { + Client.soundEffectVolume = 64; + } + + if (var2 == 3) { + Client.soundEffectVolume = 32; + } + + if (var2 == 4) { + Client.soundEffectVolume = 0; + } + } + + if (var4 == 5) { + Client.leftClickOpensMenu = var2; + } + + if (var4 == 6) { + Client.chatEffects = var2; + } + + if (var4 == 9) { + Client.field807 = var2; + } + + if (var4 == 10) { + if (var2 == 0) { + Client.areaSoundEffectVolume = 127; + } + + if (var2 == 1) { + Client.areaSoundEffectVolume = 96; + } + + if (var2 == 2) { + Client.areaSoundEffectVolume = 64; + } + + if (var2 == 3) { + Client.areaSoundEffectVolume = 32; + } + + if (var2 == 4) { + Client.areaSoundEffectVolume = 0; + } + } + + if (var4 == 17) { + Client.followerIndex = var2 & 65535; + } + + AttackOption[] var5; + if (var4 == 18) { + var5 = new AttackOption[]{AttackOption.AttackOption_dependsOnCombatLevels, AttackOption.AttackOption_hidden, AttackOption.AttackOption_alwaysRightClick, AttackOption.AttackOption_leftClickWhereAvailable}; + Client.playerAttackOption = (AttackOption)CollisionMap.findEnumerated(var5, var2); + if (Client.playerAttackOption == null) { + Client.playerAttackOption = AttackOption.AttackOption_dependsOnCombatLevels; + } + } + + if (var4 == 19) { + if (var2 == -1) { + Client.combatTargetPlayerIndex = -1; + } else { + Client.combatTargetPlayerIndex = var2 & 2047; + } + } + + if (var4 == 22) { + var5 = new AttackOption[]{AttackOption.AttackOption_dependsOnCombatLevels, AttackOption.AttackOption_hidden, AttackOption.AttackOption_alwaysRightClick, AttackOption.AttackOption_leftClickWhereAvailable}; + Client.npcAttackOption = (AttackOption)CollisionMap.findEnumerated(var5, var2); + if (Client.npcAttackOption == null) { + Client.npcAttackOption = AttackOption.AttackOption_dependsOnCombatLevels; + } + } + + } } } diff --git a/runescape-client/src/main/java/ObjectNode.java b/runescape-client/src/main/java/ObjectNode.java index 10f75a289b..2d1ed5b976 100644 --- a/runescape-client/src/main/java/ObjectNode.java +++ b/runescape-client/src/main/java/ObjectNode.java @@ -2,10 +2,10 @@ import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; -@ObfuscatedName("fj") +@ObfuscatedName("fa") @Implements("ObjectNode") public class ObjectNode extends Node { - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("obj") public final Object obj; diff --git a/runescape-client/src/main/java/ObjectSound.java b/runescape-client/src/main/java/ObjectSound.java index e58ee234fe..7dad55c6ad 100644 --- a/runescape-client/src/main/java/ObjectSound.java +++ b/runescape-client/src/main/java/ObjectSound.java @@ -4,87 +4,87 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("bf") +@ObfuscatedName("bc") @Implements("ObjectSound") public final class ObjectSound extends Node { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Ljb;" + signature = "Ljd;" ) @Export("objectSounds") static NodeDeque objectSounds; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = 1227010727 + intValue = -284752301 ) @Export("plane") int plane; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = -286465655 + intValue = -320634943 ) @Export("x") int x; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = -1852994176 + intValue = 351853767 ) @Export("y") int y; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = 451765888 + intValue = 1257144143 ) - int field1060; - @ObfuscatedName("l") + int field1074; + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = -1453778816 + intValue = -889892259 ) - int field1053; - @ObfuscatedName("c") + int field1071; + @ObfuscatedName("h") @ObfuscatedGetter( - intValue = -186868357 + intValue = -919807871 ) - int field1052; - @ObfuscatedName("o") + int field1072; + @ObfuscatedName("y") @ObfuscatedGetter( - intValue = 1676549815 + intValue = -1412550033 ) @Export("soundEffectId") int soundEffectId; - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedSignature( signature = "Lds;" ) @Export("stream1") RawPcmStream stream1; - @ObfuscatedName("d") + @ObfuscatedName("i") @ObfuscatedGetter( - intValue = 180162911 + intValue = 851722869 ) - int field1057; - @ObfuscatedName("m") + int field1075; + @ObfuscatedName("k") @ObfuscatedGetter( - intValue = -648009507 + intValue = 1188723059 ) - int field1058; - @ObfuscatedName("p") + int field1076; + @ObfuscatedName("x") @Export("soundEffectIds") int[] soundEffectIds; - @ObfuscatedName("h") + @ObfuscatedName("o") @ObfuscatedGetter( - intValue = 423706127 + intValue = 1209496197 ) - int field1054; - @ObfuscatedName("k") + int field1078; + @ObfuscatedName("e") @ObfuscatedSignature( signature = "Lds;" ) @Export("stream2") RawPcmStream stream2; - @ObfuscatedName("x") + @ObfuscatedName("n") @ObfuscatedSignature( - signature = "Lix;" + signature = "Lil;" ) @Export("obj") ObjectDefinition obj; @@ -96,10 +96,10 @@ public final class ObjectSound extends Node { ObjectSound() { } - @ObfuscatedName("t") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "-23" + signature = "(I)V", + garbageValue = "-1485735851" ) @Export("set") void set() { @@ -107,37 +107,44 @@ public final class ObjectSound extends Node { ObjectDefinition var2 = this.obj.transform(); if (var2 != null) { this.soundEffectId = var2.ambientSoundId; - this.field1052 = var2.int4 * 128; - this.field1057 = var2.int5; - this.field1058 = var2.int6; + this.field1072 = var2.int4 * 128; + this.field1075 = var2.int5; + this.field1076 = var2.int6; this.soundEffectIds = var2.soundEffectIds; } else { this.soundEffectId = -1; - this.field1052 = 0; - this.field1057 = 0; - this.field1058 = 0; + this.field1072 = 0; + this.field1075 = 0; + this.field1076 = 0; this.soundEffectIds = null; } if (var1 != this.soundEffectId && this.stream1 != null) { - FloorUnderlayDefinition.pcmStreamMixer.removeSubStream(this.stream1); + ClientPacket.pcmStreamMixer.removeSubStream(this.stream1); this.stream1 = null; } } - @ObfuscatedName("d") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Lhi;IIII)V", - garbageValue = "1790951666" + signature = "([BI)[B", + garbageValue = "-359888333" ) - @Export("Widget_setKeyRate") - static final void Widget_setKeyRate(Widget var0, int var1, int var2, int var3) { - if (var0.field2628 == null) { - throw new RuntimeException(); - } else { - var0.field2628[var1] = var2; - var0.field2626[var1] = var3; - } + public static byte[] method1935(byte[] var0) { + int var1 = var0.length; + byte[] var2 = new byte[var1]; + System.arraycopy(var0, 0, var2, 0, var1); + return var2; + } + + @ObfuscatedName("ky") + @ObfuscatedSignature( + signature = "(B)V", + garbageValue = "7" + ) + static final void method1936() { + Client.field836 = Client.cycleCntr; + WorldMapID.ClanChat_inClanChat = true; } } diff --git a/runescape-client/src/main/java/Occluder.java b/runescape-client/src/main/java/Occluder.java index e867d15a72..047de36993 100644 --- a/runescape-client/src/main/java/Occluder.java +++ b/runescape-client/src/main/java/Occluder.java @@ -4,182 +4,174 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("eh") +@ObfuscatedName("ej") @Implements("Occluder") public final class Occluder { - @ObfuscatedName("dt") - @ObfuscatedSignature( - signature = "Lij;" - ) - @Export("archive12") - static Archive archive12; - @ObfuscatedName("iz") + @ObfuscatedName("u") @ObfuscatedGetter( - intValue = 1014742579 - ) - @Export("selectedItemId") - static int selectedItemId; - @ObfuscatedName("a") - @ObfuscatedGetter( - intValue = 2096461427 + intValue = -868680993 ) @Export("minTileX") int minTileX; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = 658025365 + intValue = -78813791 ) @Export("maxTileX") int maxTileX; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = -423718345 + intValue = -307237447 ) @Export("minTileY") int minTileY; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = 1740624753 + intValue = -772985783 ) @Export("maxTileY") int maxTileY; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = 954528249 + intValue = 1542494109 ) @Export("type") int type; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = 1732339879 + intValue = -291894415 ) @Export("minX") int minX; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedGetter( - intValue = 1301635755 + intValue = -724655561 ) @Export("maxX") int maxX; - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedGetter( - intValue = -258867493 + intValue = 686060305 ) @Export("minZ") int minZ; - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedGetter( - intValue = 1337393049 + intValue = 2092987209 ) @Export("maxZ") int maxZ; - @ObfuscatedName("d") + @ObfuscatedName("i") @ObfuscatedGetter( - intValue = 1306653599 + intValue = -264626047 ) @Export("minY") int minY; - @ObfuscatedName("m") + @ObfuscatedName("k") @ObfuscatedGetter( - intValue = 1760102387 + intValue = -1980036159 ) @Export("maxY") int maxY; - @ObfuscatedName("p") - @ObfuscatedGetter( - intValue = 1764224557 - ) - int field1869; - @ObfuscatedName("h") - @ObfuscatedGetter( - intValue = -1705634243 - ) - int field1887; - @ObfuscatedName("k") - @ObfuscatedGetter( - intValue = -682629895 - ) - int field1880; @ObfuscatedName("x") @ObfuscatedGetter( - intValue = -1219807155 + intValue = -1409166921 ) - int field1883; - @ObfuscatedName("j") + int field1896; + @ObfuscatedName("o") @ObfuscatedGetter( - intValue = 168844503 + intValue = -307213361 ) - int field1884; - @ObfuscatedName("r") - @ObfuscatedGetter( - intValue = -1533789259 - ) - int field1882; + int field1897; @ObfuscatedName("e") @ObfuscatedGetter( - intValue = 1431077503 + intValue = -1941150605 ) - int field1885; + int field1898; + @ObfuscatedName("n") + @ObfuscatedGetter( + intValue = 1179191271 + ) + int field1900; + @ObfuscatedName("r") + @ObfuscatedGetter( + intValue = -1336984119 + ) + int field1890; + @ObfuscatedName("c") + @ObfuscatedGetter( + intValue = -863399609 + ) + int field1901; + @ObfuscatedName("a") + @ObfuscatedGetter( + intValue = -1653375525 + ) + int field1902; Occluder() { } - @ObfuscatedName("ir") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(II)Z", - garbageValue = "-1093183807" + signature = "(II)Lil;", + garbageValue = "513049272" ) - static final boolean method3415(int var0) { - if (var0 < 0) { - return false; + @Export("getObjectDefinition") + public static ObjectDefinition getObjectDefinition(int var0) { + ObjectDefinition var1 = (ObjectDefinition)ObjectDefinition.ObjectDefinition_cached.get((long)var0); + if (var1 != null) { + return var1; } else { - int var1 = Client.menuOpcodes[var0]; - if (var1 >= 2000) { - var1 -= 2000; + byte[] var2 = ObjectDefinition.ObjectDefinition_archive.takeFile(6, var0); + var1 = new ObjectDefinition(); + var1.id = var0; + if (var2 != null) { + var1.decode(new Buffer(var2)); } - return var1 == 1007; + var1.postDecode(); + if (var1.isSolid) { + var1.interactType = 0; + var1.boolean1 = false; + } + + ObjectDefinition.ObjectDefinition_cached.put(var1, (long)var0); + return var1; } } - @ObfuscatedName("ih") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "(B)V", + signature = "(I)V", + garbageValue = "-1792672505" + ) + public static void method3336() { + WorldMapElement.WorldMapElement_cachedSprites.clear(); + } + + @ObfuscatedName("i") + @ObfuscatedSignature( + signature = "(B)Lln;", garbageValue = "0" ) - static final void method3416() { - boolean var0 = false; + static Sprite method3338() { + Sprite var0 = new Sprite(); + var0.width = class325.SpriteBuffer_spriteWidth; + var0.height = UserComparator9.SpriteBuffer_spriteHeight; + var0.xOffset = UrlRequester.SpriteBuffer_xOffsets[0]; + var0.yOffset = class216.SpriteBuffer_yOffsets[0]; + var0.subWidth = class325.SpriteBuffer_spriteWidths[0]; + var0.subHeight = VarcInt.SpriteBuffer_spriteHeights[0]; + int var1 = var0.subHeight * var0.subWidth; + byte[] var2 = FillMode.SpriteBuffer_pixels[0]; + var0.pixels = new int[var1]; - while (!var0) { - var0 = true; - - for (int var1 = 0; var1 < Client.menuOptionsCount - 1; ++var1) { - if (Client.menuOpcodes[var1] < 1000 && Client.menuOpcodes[var1 + 1] > 1000) { - String var2 = Client.menuTargets[var1]; - Client.menuTargets[var1] = Client.menuTargets[var1 + 1]; - Client.menuTargets[var1 + 1] = var2; - String var3 = Client.menuActions[var1]; - Client.menuActions[var1] = Client.menuActions[var1 + 1]; - Client.menuActions[var1 + 1] = var3; - int var4 = Client.menuOpcodes[var1]; - Client.menuOpcodes[var1] = Client.menuOpcodes[var1 + 1]; - Client.menuOpcodes[var1 + 1] = var4; - var4 = Client.menuArguments1[var1]; - Client.menuArguments1[var1] = Client.menuArguments1[var1 + 1]; - Client.menuArguments1[var1 + 1] = var4; - var4 = Client.menuArguments2[var1]; - Client.menuArguments2[var1] = Client.menuArguments2[var1 + 1]; - Client.menuArguments2[var1 + 1] = var4; - var4 = Client.menuIdentifiers[var1]; - Client.menuIdentifiers[var1] = Client.menuIdentifiers[var1 + 1]; - Client.menuIdentifiers[var1 + 1] = var4; - boolean var5 = Client.menuShiftClick[var1]; - Client.menuShiftClick[var1] = Client.menuShiftClick[var1 + 1]; - Client.menuShiftClick[var1 + 1] = var5; - var0 = false; - } - } + for (int var3 = 0; var3 < var1; ++var3) { + var0.pixels[var3] = class325.SpriteBuffer_spritePalette[var2[var3] & 255]; } + PcmPlayer.method2510(); + return var0; } } diff --git a/runescape-client/src/main/java/PacketBuffer.java b/runescape-client/src/main/java/PacketBuffer.java index 8a52d0e150..adfdba6efa 100644 --- a/runescape-client/src/main/java/PacketBuffer.java +++ b/runescape-client/src/main/java/PacketBuffer.java @@ -4,86 +4,86 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("kf") +@ObfuscatedName("kj") @Implements("PacketBuffer") public class PacketBuffer extends Buffer { - @ObfuscatedName("t") - static final int[] field3688; - @ObfuscatedName("a") + @ObfuscatedName("f") + static final int[] field3701; + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Llm;" + signature = "Lld;" ) @Export("isaacCipher") IsaacCipher isaacCipher; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = 1939783175 + intValue = 477467837 ) @Export("bitIndex") int bitIndex; static { - field3688 = 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}; + field3701 = 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}; } public PacketBuffer(int var1) { super(var1); } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "([IS)V", - garbageValue = "-26147" + signature = "([II)V", + garbageValue = "-1040500949" ) @Export("newIsaacCipher") public void newIsaacCipher(int[] var1) { this.isaacCipher = new IsaacCipher(var1); } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Llm;I)V", - garbageValue = "-514086463" + signature = "(Lld;I)V", + garbageValue = "-1849401074" ) @Export("setIsaacCipher") public void setIsaacCipher(IsaacCipher var1) { this.isaacCipher = var1; } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( signature = "(II)V", - garbageValue = "-509998000" + garbageValue = "230891954" ) @Export("writeByteIsaac") public void writeByteIsaac(int var1) { super.array[++super.offset - 1] = (byte)(var1 + this.isaacCipher.nextInt()); } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( signature = "(I)I", - garbageValue = "1442543055" + garbageValue = "1535940248" ) @Export("readByteIsaac") public int readByteIsaac() { return super.array[++super.offset - 1] - this.isaacCipher.nextInt() & 255; } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( signature = "(I)Z", - garbageValue = "387005570" + garbageValue = "-1671006897" ) - public boolean method5586() { - int var1 = super.array[super.offset] - this.isaacCipher.method6378() & 255; + public boolean method5581() { + int var1 = super.array[super.offset] - this.isaacCipher.method6331() & 255; return var1 >= 128; } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(B)I", - garbageValue = "-68" + signature = "(S)I", + garbageValue = "8240" ) @Export("readSmartByteShortIsaac") public int readSmartByteShortIsaac() { @@ -91,32 +91,32 @@ public class PacketBuffer extends Buffer { return var1 < 128 ? var1 : (var1 - 128 << 8) + (super.array[++super.offset - 1] - this.isaacCipher.nextInt() & 255); } - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "([BIIB)V", - garbageValue = "1" + signature = "([BIII)V", + garbageValue = "-739226773" ) - public void method5558(byte[] var1, int var2, int var3) { + public void method5551(byte[] var1, int var2, int var3) { for (int var4 = 0; var4 < var3; ++var4) { var1[var4 + var2] = (byte)(super.array[++super.offset - 1] - this.isaacCipher.nextInt()); } } - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "-168692906" + garbageValue = "-1010448885" ) @Export("importIndex") public void importIndex() { this.bitIndex = super.offset * 8; } - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedSignature( signature = "(II)I", - garbageValue = "431119758" + garbageValue = "-1257473008" ) @Export("readBits") public int readBits(int var1) { @@ -125,36 +125,64 @@ public class PacketBuffer extends Buffer { int var4 = 0; for (this.bitIndex += var1; var1 > var3; var3 = 8) { - var4 += (super.array[var2++] & field3688[var3]) << var1 - var3; + var4 += (super.array[var2++] & field3701[var3]) << var1 - var3; var1 -= var3; } if (var3 == var1) { - var4 += super.array[var2] & field3688[var3]; + var4 += super.array[var2] & field3701[var3]; } else { - var4 += super.array[var2] >> var3 - var1 & field3688[var1]; + var4 += super.array[var2] >> var3 - var1 & field3701[var1]; } return var4; } - @ObfuscatedName("d") + @ObfuscatedName("i") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "-1200645632" + garbageValue = "-1450699347" ) @Export("exportIndex") public void exportIndex() { super.offset = (this.bitIndex + 7) / 8; } - @ObfuscatedName("m") + @ObfuscatedName("k") @ObfuscatedSignature( signature = "(II)I", - garbageValue = "-2087325437" + garbageValue = "1950209579" ) @Export("bitsRemaining") public int bitsRemaining(int var1) { return var1 * 8 - this.bitIndex; } + + @ObfuscatedName("ko") + @ObfuscatedSignature( + signature = "(Ljava/lang/String;ZI)Ljava/lang/String;", + garbageValue = "-117055056" + ) + static String method5582(String var0, boolean var1) { + String var2 = var1 ? "https://" : "http://"; + if (Client.gameBuild == 1) { + var0 = var0 + "-wtrc"; + } else if (Client.gameBuild == 2) { + var0 = var0 + "-wtqa"; + } else if (Client.gameBuild == 3) { + var0 = var0 + "-wtwip"; + } else if (Client.gameBuild == 5) { + var0 = var0 + "-wti"; + } else if (Client.gameBuild == 4) { + var0 = "local"; + } + + String var3 = ""; + if (WorldMapManager.field327 != null) { + var3 = "/p=" + WorldMapManager.field327; + } + + String var4 = "runescape.com"; + return var2 + var0 + "." + var4 + "/l=" + VarbitDefinition.clientLanguage + "/a=" + class13.field91 + var3 + "/"; + } } diff --git a/runescape-client/src/main/java/PacketBufferNode.java b/runescape-client/src/main/java/PacketBufferNode.java index 9419d17d5f..32399fc37b 100644 --- a/runescape-client/src/main/java/PacketBufferNode.java +++ b/runescape-client/src/main/java/PacketBufferNode.java @@ -3,44 +3,43 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("gk") +@ObfuscatedName("gx") @Implements("PacketBufferNode") public class PacketBufferNode extends Node { - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "[Lgk;" + signature = "[Lgx;" ) @Export("PacketBufferNode_packetBufferNodes") - public static PacketBufferNode[] PacketBufferNode_packetBufferNodes; - @ObfuscatedName("l") + static PacketBufferNode[] PacketBufferNode_packetBufferNodes; + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = -2062667101 + intValue = 1218907641 ) @Export("PacketBufferNode_packetBufferNodeCount") - public static int PacketBufferNode_packetBufferNodeCount; - @ObfuscatedName("a") + static int PacketBufferNode_packetBufferNodeCount; + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lgx;" + signature = "Lgj;" ) @Export("clientPacket") - public ClientPacket clientPacket; - @ObfuscatedName("t") + ClientPacket clientPacket; + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = 1560309835 + intValue = 328924249 ) @Export("clientPacketLength") - public int clientPacketLength; - @ObfuscatedName("n") + int clientPacketLength; + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Lkf;" + signature = "Lkj;" ) @Export("packetBuffer") public PacketBuffer packetBuffer; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = -1326769375 + intValue = -1715023791 ) @Export("index") public int index; @@ -50,10 +49,13 @@ public class PacketBufferNode extends Node { PacketBufferNode_packetBufferNodeCount = 0; } - @ObfuscatedName("t") + PacketBufferNode() { + } + + @ObfuscatedName("g") @ObfuscatedSignature( signature = "(B)V", - garbageValue = "2" + garbageValue = "13" ) @Export("release") public void release() { @@ -62,158 +64,21 @@ public class PacketBufferNode extends Node { } } - @ObfuscatedName("t") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(IB)Lhi;", - garbageValue = "56" + signature = "(Lhf;I)V", + garbageValue = "-628490328" ) - @Export("getWidget") - public static Widget getWidget(int var0) { - int var1 = var0 >> 16; - int var2 = var0 & 65535; - if (Widget.Widget_interfaceComponents[var1] == null || Widget.Widget_interfaceComponents[var1][var2] == null) { - boolean var3 = TextureProvider.loadInterface(var1); - if (!var3) { - return null; - } - } - - return Widget.Widget_interfaceComponents[var1][var2]; + public static void method3679(AbstractArchive var0) { + EnumDefinition.EnumDefinition_archive = var0; } - @ObfuscatedName("o") + @ObfuscatedName("i") @ObfuscatedSignature( - signature = "(ILcj;ZI)I", - garbageValue = "1332418089" + signature = "(I)V", + garbageValue = "-380587936" ) - static int method3784(int var0, Script var1, boolean var2) { - boolean var3 = true; - Widget var4; - if (var0 >= 2000) { - var0 -= 1000; - var4 = getWidget(Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]); - var3 = false; - } else { - var4 = var2 ? class96.field1301 : ReflectionCheck.field1310; - } - - int var11; - if (var0 == ScriptOpcodes.CC_SETOP) { - var11 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] - 1; - if (var11 >= 0 && var11 <= 9) { - var4.setAction(var11, Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]); - return 1; - } else { - --WorldMapDecoration.Interpreter_stringStackSize; - return 1; - } - } else { - int var6; - if (var0 == ScriptOpcodes.CC_SETDRAGGABLE) { - Interpreter.Interpreter_intStackSize -= 2; - var11 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var6 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - var4.parent = ArchiveLoader.getWidgetChild(var11, var6); - return 1; - } else if (var0 == ScriptOpcodes.CC_SETDRAGGABLEBEHAVIOR) { - var4.isScrollBar = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - return 1; - } else if (var0 == ScriptOpcodes.CC_SETDRAGDEADZONE) { - var4.dragZoneSize = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - return 1; - } else if (var0 == ScriptOpcodes.CC_SETDRAGDEADTIME) { - var4.dragThreshold = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - return 1; - } else if (var0 == ScriptOpcodes.CC_SETOPBASE) { - var4.dataText = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]; - return 1; - } else if (var0 == ScriptOpcodes.CC_SETTARGETVERB) { - var4.spellActionName = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]; - return 1; - } else if (var0 == ScriptOpcodes.CC_CLEAROPS) { - var4.actions = null; - return 1; - } else if (var0 == 1308) { - var4.field2690 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - return 1; - } else { - int var7; - byte[] var9; - if (var0 != ScriptOpcodes.CC_SETOPKEY) { - byte var5; - if (var0 == ScriptOpcodes.CC_SETOPTKEY) { - Interpreter.Interpreter_intStackSize -= 2; - var5 = 10; - var9 = new byte[]{(byte)Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]}; - byte[] var10 = new byte[]{(byte)Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]}; - GameObject.Widget_setKey(var4, var5, var9, var10); - return 1; - } else if (var0 == ScriptOpcodes.CC_SETOPKEYRATE) { - Interpreter.Interpreter_intStackSize -= 3; - var11 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize] - 1; - var6 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - var7 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 2]; - if (var11 >= 0 && var11 <= 9) { - ObjectSound.Widget_setKeyRate(var4, var11, var6, var7); - return 1; - } else { - throw new RuntimeException(); - } - } else if (var0 == ScriptOpcodes.CC_SETOPTKEYRATE) { - var5 = 10; - var6 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - var7 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - ObjectSound.Widget_setKeyRate(var4, var5, var6, var7); - return 1; - } else if (var0 == ScriptOpcodes.CC_SETOPKEYIGNOREHELD) { - --Interpreter.Interpreter_intStackSize; - var11 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize] - 1; - if (var11 >= 0 && var11 <= 9) { - WorldMapCacheName.Widget_setKeyIgnoreHeld(var4, var11); - return 1; - } else { - throw new RuntimeException(); - } - } else if (var0 == ScriptOpcodes.CC_SETOPTKEYIGNOREHELD) { - var5 = 10; - WorldMapCacheName.Widget_setKeyIgnoreHeld(var4, var5); - return 1; - } else { - return 2; - } - } else { - byte[] var8 = null; - var9 = null; - if (var3) { - Interpreter.Interpreter_intStackSize -= 10; - - for (var7 = 0; var7 < 10 && Interpreter.Interpreter_intStack[var7 + Interpreter.Interpreter_intStackSize] >= 0; var7 += 2) { - } - - if (var7 > 0) { - var8 = new byte[var7 / 2]; - var9 = new byte[var7 / 2]; - - for (var7 -= 2; var7 >= 0; var7 -= 2) { - var8[var7 / 2] = (byte)Interpreter.Interpreter_intStack[var7 + Interpreter.Interpreter_intStackSize]; - var9[var7 / 2] = (byte)Interpreter.Interpreter_intStack[var7 + Interpreter.Interpreter_intStackSize + 1]; - } - } - } else { - Interpreter.Interpreter_intStackSize -= 2; - var8 = new byte[]{(byte)Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]}; - var9 = new byte[]{(byte)Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]}; - } - - var7 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] - 1; - if (var7 >= 0 && var7 <= 9) { - GameObject.Widget_setKey(var4, var7, var8, var9); - return 1; - } else { - throw new RuntimeException(); - } - } - } - } + static final void method3670() { + WorldMapSection2.method347("Your friend list is full. Max of 200 for free users, and 400 for members"); } } diff --git a/runescape-client/src/main/java/PacketWriter.java b/runescape-client/src/main/java/PacketWriter.java index deebebd579..7c4efa89e1 100644 --- a/runescape-client/src/main/java/PacketWriter.java +++ b/runescape-client/src/main/java/PacketWriter.java @@ -1,99 +1,89 @@ -import java.awt.Desktop; -import java.awt.Desktop.Action; import java.io.IOException; -import java.net.URI; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("cp") +@ObfuscatedName("cc") @Implements("PacketWriter") public class PacketWriter { - @ObfuscatedName("ry") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lbb;" - ) - @Export("friendSystem") - public static FriendSystem friendSystem; - @ObfuscatedName("a") - @ObfuscatedSignature( - signature = "Lku;" + signature = "Lkn;" ) @Export("socket") AbstractSocket socket; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( signature = "Ljm;" ) @Export("packetBufferNodes") IterableNodeDeque packetBufferNodes; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = 150566237 + intValue = 521861757 ) @Export("bufferSize") int bufferSize; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Lkc;" + signature = "Lkg;" ) @Export("buffer") Buffer buffer; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "Llm;" + signature = "Lld;" ) @Export("isaacCipher") public IsaacCipher isaacCipher; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "Lkf;" + signature = "Lkj;" ) @Export("packetBuffer") PacketBuffer packetBuffer; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "Lga;" + signature = "Lgm;" ) @Export("serverPacket") ServerPacket serverPacket; - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedGetter( - intValue = 969841253 + intValue = 710985365 ) @Export("serverPacketLength") int serverPacketLength; + @ObfuscatedName("w") + boolean field1307; @ObfuscatedName("i") - boolean field1287; - @ObfuscatedName("d") @ObfuscatedGetter( - intValue = 1257964487 + intValue = -931864145 ) - int field1291; - @ObfuscatedName("m") + int field1305; + @ObfuscatedName("k") @ObfuscatedGetter( - intValue = 34585799 + intValue = -1482623051 ) @Export("pendingWrites") int pendingWrites; - @ObfuscatedName("p") + @ObfuscatedName("x") @ObfuscatedSignature( - signature = "Lga;" + signature = "Lgm;" ) - ServerPacket field1290; - @ObfuscatedName("h") + ServerPacket field1299; + @ObfuscatedName("o") @ObfuscatedSignature( - signature = "Lga;" + signature = "Lgm;" ) - ServerPacket field1286; - @ObfuscatedName("k") + ServerPacket field1311; + @ObfuscatedName("e") @ObfuscatedSignature( - signature = "Lga;" + signature = "Lgm;" ) - ServerPacket field1292; + ServerPacket field1312; PacketWriter() { this.packetBufferNodes = new IterableNodeDeque(); @@ -102,15 +92,15 @@ public class PacketWriter { this.packetBuffer = new PacketBuffer(40000); this.serverPacket = null; this.serverPacketLength = 0; - this.field1287 = true; - this.field1291 = 0; + this.field1307 = true; + this.field1305 = 0; this.pendingWrites = 0; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "(B)V", - garbageValue = "47" + garbageValue = "-2" ) @Export("clearBuffer") final void clearBuffer() { @@ -118,10 +108,10 @@ public class PacketWriter { this.bufferSize = 0; } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "-1645356656" + garbageValue = "-2064967142" ) @Export("flush") final void flush() throws IOException { @@ -146,10 +136,10 @@ public class PacketWriter { } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Lgk;B)V", - garbageValue = "-19" + signature = "(Lgx;B)V", + garbageValue = "3" ) @Export("addNode") public final void addNode(PacketBufferNode var1) { @@ -159,20 +149,20 @@ public class PacketWriter { this.bufferSize += var1.index; } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(Lku;B)V", - garbageValue = "4" + signature = "(Lkn;I)V", + garbageValue = "-1959151046" ) @Export("setSocket") void setSocket(AbstractSocket var1) { this.socket = var1; } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "-1408755030" + garbageValue = "1017159330" ) @Export("close") void close() { @@ -183,95 +173,145 @@ public class PacketWriter { } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "906651954" + signature = "(B)V", + garbageValue = "-90" ) @Export("removeSocket") void removeSocket() { this.socket = null; } - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "(I)Lku;", - garbageValue = "-814852778" + signature = "(B)Lkn;", + garbageValue = "115" ) @Export("getSocket") AbstractSocket getSocket() { return this.socket; } - @ObfuscatedName("a") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Lhq;Lhq;I)V", - garbageValue = "1551523322" + signature = "(IIIIIII)I", + garbageValue = "62079839" ) - public static void method2419(AbstractArchive var0, AbstractArchive var1) { - SpotAnimationDefinition.SpotAnimationDefinition_archive = var0; - SpotAnimationDefinition.SpotAnimationDefinition_modelArchive = var1; - } - - @ObfuscatedName("n") - @ObfuscatedSignature( - signature = "(Ljava/lang/String;ZLjava/lang/String;ZI)V", - garbageValue = "762135204" - ) - static void method2421(String var0, boolean var1, String var2, boolean var3) { - if (var1) { - if (!var3 && Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Action.BROWSE)) { - try { - Desktop.getDesktop().browse(new URI(var0)); - return; - } catch (Exception var5) { - } - } - - if (class51.field416.startsWith("win") && !var3) { - class226.method4275(var0, 0, "openjs"); - return; - } - - if (class51.field416.startsWith("mac")) { - class226.method4275(var0, 1, var2); - return; - } - - class226.method4275(var0, 2, "openjs"); - } else { - class226.method4275(var0, 3, "openjs"); + public static int method2292(int var0, int var1, int var2, int var3, int var4, int var5) { + if ((var5 & 1) == 1) { + int var6 = var3; + var3 = var4; + var4 = var6; } + var2 &= 3; + if (var2 == 0) { + return var0; + } else if (var2 == 1) { + return var1; + } else { + return var2 == 2 ? 7 - var0 - (var3 - 1) : 7 - var1 - (var4 - 1); + } } - @ObfuscatedName("e") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(ILcj;ZI)I", - garbageValue = "-1319808417" + signature = "(CLgc;B)C", + garbageValue = "-6" ) - static int method2426(int var0, Script var1, boolean var2) { - Widget var3 = PacketBufferNode.getWidget(Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]); - if (var0 == ScriptOpcodes.IF_GETX) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.x; - return 1; - } else if (var0 == ScriptOpcodes.IF_GETY) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.y; - return 1; - } else if (var0 == ScriptOpcodes.IF_GETWIDTH) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.width; - return 1; - } else if (var0 == ScriptOpcodes.IF_GETHEIGHT) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.height; - return 1; - } else if (var0 == ScriptOpcodes.IF_GETHIDE) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.isHidden ? 1 : 0; - return 1; - } else if (var0 == ScriptOpcodes.IF_GETLAYER) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.parentId; - return 1; - } else { - return 2; + @Export("standardizeChar") + static char standardizeChar(char var0, Language var1) { + if (var0 >= 192 && var0 <= 255) { + if (var0 >= 192 && var0 <= 198) { + return 'A'; + } + + if (var0 == 199) { + return 'C'; + } + + if (var0 >= 200 && var0 <= 203) { + return 'E'; + } + + if (var0 >= 204 && var0 <= 207) { + return 'I'; + } + + if (var0 == 209 && var1 != Language.Language_ES) { + return 'N'; + } + + if (var0 >= 210 && var0 <= 214) { + return 'O'; + } + + if (var0 >= 217 && var0 <= 220) { + return 'U'; + } + + if (var0 == 221) { + return 'Y'; + } + + if (var0 == 223) { + return 's'; + } + + if (var0 >= 224 && var0 <= 230) { + return 'a'; + } + + if (var0 == 231) { + return 'c'; + } + + if (var0 >= 232 && var0 <= 235) { + return 'e'; + } + + if (var0 >= 236 && var0 <= 239) { + return 'i'; + } + + if (var0 == 241 && var1 != Language.Language_ES) { + return 'n'; + } + + if (var0 >= 242 && var0 <= 246) { + return 'o'; + } + + if (var0 >= 249 && var0 <= 252) { + return 'u'; + } + + if (var0 == 253 || var0 == 255) { + return 'y'; + } } + + if (var0 == 338) { + return 'O'; + } else if (var0 == 339) { + return 'o'; + } else if (var0 == 376) { + return 'Y'; + } else { + return var0; + } + } + + @ObfuscatedName("i") + @ObfuscatedSignature( + signature = "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;S)V", + garbageValue = "11034" + ) + @Export("setLoginResponseString") + static void setLoginResponseString(String var0, String var1, String var2) { + Login.Login_response1 = var0; + Login.Login_response2 = var1; + Login.Login_response3 = var2; } } diff --git a/runescape-client/src/main/java/ParamDefinition.java b/runescape-client/src/main/java/ParamDefinition.java index 9cd4450046..0f347cd3ae 100644 --- a/runescape-client/src/main/java/ParamDefinition.java +++ b/runescape-client/src/main/java/ParamDefinition.java @@ -4,40 +4,34 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("iy") +@ObfuscatedName("io") @Implements("ParamDefinition") public class ParamDefinition extends DualNode { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lhq;" + signature = "Lhf;" ) @Export("ParamDefinition_archive") public static AbstractArchive ParamDefinition_archive; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Leb;" + signature = "Lef;" ) @Export("ParamDefinition_cached") - public static EvictingDualNodeHashTable ParamDefinition_cached; - @ObfuscatedName("i") - @ObfuscatedGetter( - intValue = -508885991 - ) - @Export("PcmPlayer_count") - public static int PcmPlayer_count; - @ObfuscatedName("n") + static EvictingDualNodeHashTable ParamDefinition_cached; + @ObfuscatedName("b") @Export("type") char type; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = -1697387683 + intValue = -1135873659 ) @Export("defaultInt") public int defaultInt; - @ObfuscatedName("v") + @ObfuscatedName("z") @Export("defaultStr") public String defaultStr; - @ObfuscatedName("l") + @ObfuscatedName("p") @Export("autoDisable") boolean autoDisable; @@ -49,19 +43,19 @@ public class ParamDefinition extends DualNode { this.autoDisable = true; } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "-767348576" + signature = "(B)V", + garbageValue = "127" ) @Export("postDecode") void postDecode() { } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Lkc;I)V", - garbageValue = "95444095" + signature = "(Lkg;B)V", + garbageValue = "17" ) @Export("decode") void decode(Buffer var1) { @@ -75,15 +69,31 @@ public class ParamDefinition extends DualNode { } } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(Lkc;II)V", - garbageValue = "130264768" + signature = "(Lkg;II)V", + garbageValue = "-1607275245" ) @Export("decodeNext") void decodeNext(Buffer var1, int var2) { if (var2 == 1) { - this.type = Ignored.method5284(var1.readByte()); + byte var4 = var1.readByte(); + int var5 = var4 & 255; + if (var5 == 0) { + throw new IllegalArgumentException("" + Integer.toString(var5, 16)); + } + + if (var5 >= 128 && var5 < 160) { + char var6 = class287.cp1252AsciiExtension[var5 - 128]; + if (var6 == 0) { + var6 = '?'; + } + + var5 = var6; + } + + char var3 = (char)var5; + this.type = var3; } else if (var2 == 2) { this.defaultInt = var1.readInt(); } else if (var2 == 4) { @@ -94,13 +104,354 @@ public class ParamDefinition extends DualNode { } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( signature = "(I)Z", - garbageValue = "1179619328" + garbageValue = "-1761356775" ) @Export("isString") public boolean isString() { return this.type == 's'; } + + @ObfuscatedName("u") + @ObfuscatedSignature( + signature = "(IIILfg;Lfh;Z[I[II)I", + garbageValue = "1370585226" + ) + public static int method4612(int var0, int var1, int var2, RouteStrategy var3, CollisionMap var4, boolean var5, int[] var6, int[] var7) { + int var9; + for (int var8 = 0; var8 < 128; ++var8) { + for (var9 = 0; var9 < 128; ++var9) { + class173.directions[var8][var9] = 0; + class173.distances[var8][var9] = 99999999; + } + } + + int var10; + int var11; + byte var13; + int var14; + int var15; + int var17; + int var19; + int var20; + int var21; + int var22; + boolean var28; + int var30; + int var31; + int var33; + if (var2 == 1) { + var28 = WorldMapLabel.method434(var0, var1, var3, var4); + } else if (var2 == 2) { + var28 = GameObject.method3342(var0, var1, var3, var4); + } else { + var10 = var0; + var11 = var1; + byte var12 = 64; + var13 = 64; + var14 = var0 - var12; + var15 = var1 - var13; + class173.directions[var12][var13] = 99; + class173.distances[var12][var13] = 0; + byte var16 = 0; + var17 = 0; + class173.bufferX[var16] = var0; + var33 = var16 + 1; + class173.bufferY[var16] = var1; + int[][] var27 = var4.flags; + + boolean var29; + label454: + while (true) { + label452: + while (true) { + do { + do { + do { + label429: + do { + if (var33 == var17) { + class173.field2103 = var10; + class173.field2100 = var11; + var29 = false; + break label454; + } + + var10 = class173.bufferX[var17]; + var11 = class173.bufferY[var17]; + var17 = var17 + 1 & 4095; + var30 = var10 - var14; + var31 = var11 - var15; + var19 = var10 - var4.xInset; + var20 = var11 - var4.yInset; + if (var3.hasArrived(var2, var10, var11, var4)) { + class173.field2103 = var10; + class173.field2100 = var11; + var29 = true; + break label454; + } + + var21 = class173.distances[var30][var31] + 1; + if (var30 > 0 && class173.directions[var30 - 1][var31] == 0 && (var27[var19 - 1][var20] & 19136782) == 0 && (var27[var19 - 1][var20 + var2 - 1] & 19136824) == 0) { + var22 = 1; + + while (true) { + if (var22 >= var2 - 1) { + class173.bufferX[var33] = var10 - 1; + class173.bufferY[var33] = var11; + var33 = var33 + 1 & 4095; + class173.directions[var30 - 1][var31] = 2; + class173.distances[var30 - 1][var31] = var21; + break; + } + + if ((var27[var19 - 1][var20 + var22] & 19136830) != 0) { + break; + } + + ++var22; + } + } + + if (var30 < 128 - var2 && class173.directions[var30 + 1][var31] == 0 && (var27[var19 + var2][var20] & 19136899) == 0 && (var27[var19 + var2][var20 + var2 - 1] & 19136992) == 0) { + var22 = 1; + + while (true) { + if (var22 >= var2 - 1) { + class173.bufferX[var33] = var10 + 1; + class173.bufferY[var33] = var11; + var33 = var33 + 1 & 4095; + class173.directions[var30 + 1][var31] = 8; + class173.distances[var30 + 1][var31] = var21; + break; + } + + if ((var27[var19 + var2][var22 + var20] & 19136995) != 0) { + break; + } + + ++var22; + } + } + + if (var31 > 0 && class173.directions[var30][var31 - 1] == 0 && (var27[var19][var20 - 1] & 19136782) == 0 && (var27[var19 + var2 - 1][var20 - 1] & 19136899) == 0) { + var22 = 1; + + while (true) { + if (var22 >= var2 - 1) { + class173.bufferX[var33] = var10; + class173.bufferY[var33] = var11 - 1; + var33 = var33 + 1 & 4095; + class173.directions[var30][var31 - 1] = 1; + class173.distances[var30][var31 - 1] = var21; + break; + } + + if ((var27[var19 + var22][var20 - 1] & 19136911) != 0) { + break; + } + + ++var22; + } + } + + if (var31 < 128 - var2 && class173.directions[var30][var31 + 1] == 0 && (var27[var19][var20 + var2] & 19136824) == 0 && (var27[var19 + var2 - 1][var20 + var2] & 19136992) == 0) { + var22 = 1; + + while (true) { + if (var22 >= var2 - 1) { + class173.bufferX[var33] = var10; + class173.bufferY[var33] = var11 + 1; + var33 = var33 + 1 & 4095; + class173.directions[var30][var31 + 1] = 4; + class173.distances[var30][var31 + 1] = var21; + break; + } + + if ((var27[var19 + var22][var20 + var2] & 19137016) != 0) { + break; + } + + ++var22; + } + } + + if (var30 > 0 && var31 > 0 && class173.directions[var30 - 1][var31 - 1] == 0 && (var27[var19 - 1][var20 - 1] & 19136782) == 0) { + var22 = 1; + + while (true) { + if (var22 >= var2) { + class173.bufferX[var33] = var10 - 1; + class173.bufferY[var33] = var11 - 1; + var33 = var33 + 1 & 4095; + class173.directions[var30 - 1][var31 - 1] = 3; + class173.distances[var30 - 1][var31 - 1] = var21; + break; + } + + if ((var27[var19 - 1][var22 + (var20 - 1)] & 19136830) != 0 || (var27[var22 + (var19 - 1)][var20 - 1] & 19136911) != 0) { + break; + } + + ++var22; + } + } + + if (var30 < 128 - var2 && var31 > 0 && class173.directions[var30 + 1][var31 - 1] == 0 && (var27[var19 + var2][var20 - 1] & 19136899) == 0) { + var22 = 1; + + while (true) { + if (var22 >= var2) { + class173.bufferX[var33] = var10 + 1; + class173.bufferY[var33] = var11 - 1; + var33 = var33 + 1 & 4095; + class173.directions[var30 + 1][var31 - 1] = 9; + class173.distances[var30 + 1][var31 - 1] = var21; + break; + } + + if ((var27[var19 + var2][var22 + (var20 - 1)] & 19136995) != 0 || (var27[var19 + var22][var20 - 1] & 19136911) != 0) { + break; + } + + ++var22; + } + } + + if (var30 > 0 && var31 < 128 - var2 && class173.directions[var30 - 1][var31 + 1] == 0 && (var27[var19 - 1][var20 + var2] & 19136824) == 0) { + for (var22 = 1; var22 < var2; ++var22) { + if ((var27[var19 - 1][var20 + var22] & 19136830) != 0 || (var27[var22 + (var19 - 1)][var20 + var2] & 19137016) != 0) { + continue label429; + } + } + + class173.bufferX[var33] = var10 - 1; + class173.bufferY[var33] = var11 + 1; + var33 = var33 + 1 & 4095; + class173.directions[var30 - 1][var31 + 1] = 6; + class173.distances[var30 - 1][var31 + 1] = var21; + } + } while(var30 >= 128 - var2); + } while(var31 >= 128 - var2); + } while(class173.directions[var30 + 1][var31 + 1] != 0); + } while((var27[var19 + var2][var20 + var2] & 19136992) != 0); + + for (var22 = 1; var22 < var2; ++var22) { + if ((var27[var22 + var19][var20 + var2] & 19137016) != 0 || (var27[var19 + var2][var22 + var20] & 19136995) != 0) { + continue label452; + } + } + + class173.bufferX[var33] = var10 + 1; + class173.bufferY[var33] = var11 + 1; + var33 = var33 + 1 & 4095; + class173.directions[var30 + 1][var31 + 1] = 12; + class173.distances[var30 + 1][var31 + 1] = var21; + } + } + + var28 = var29; + } + + var9 = var0 - 64; + var10 = var1 - 64; + var11 = class173.field2103; + var30 = class173.field2100; + if (!var28) { + var31 = Integer.MAX_VALUE; + var14 = Integer.MAX_VALUE; + byte var32 = 10; + var33 = var3.approxDestinationX; + var17 = var3.approxDestinationY; + int var18 = var3.approxDestinationSizeX; + var19 = var3.approxDestinationSizeY; + + for (var20 = var33 - var32; var20 <= var33 + var32; ++var20) { + for (var21 = var17 - var32; var21 <= var32 + var17; ++var21) { + var22 = var20 - var9; + int var23 = var21 - var10; + if (var22 >= 0 && var23 >= 0 && var22 < 128 && var23 < 128 && class173.distances[var22][var23] < 100) { + int var24 = 0; + if (var20 < var33) { + var24 = var33 - var20; + } else if (var20 > var18 + var33 - 1) { + var24 = var20 - (var18 + var33 - 1); + } + + int var25 = 0; + if (var21 < var17) { + var25 = var17 - var21; + } else if (var21 > var17 + var19 - 1) { + var25 = var21 - (var19 + var17 - 1); + } + + int var26 = var24 * var24 + var25 * var25; + if (var26 < var31 || var26 == var31 && class173.distances[var22][var23] < var14) { + var31 = var26; + var14 = class173.distances[var22][var23]; + var11 = var20; + var30 = var21; + } + } + } + } + + if (var31 == Integer.MAX_VALUE) { + return -1; + } + } + + if (var0 == var11 && var30 == var1) { + return 0; + } else { + var13 = 0; + class173.bufferX[var13] = var11; + var31 = var13 + 1; + class173.bufferY[var13] = var30; + + for (var14 = var15 = class173.directions[var11 - var9][var30 - var10]; var0 != var11 || var30 != var1; var14 = class173.directions[var11 - var9][var30 - var10]) { + if (var14 != var15) { + var15 = var14; + class173.bufferX[var31] = var11; + class173.bufferY[var31++] = var30; + } + + if ((var14 & 2) != 0) { + ++var11; + } else if ((var14 & 8) != 0) { + --var11; + } + + if ((var14 & 1) != 0) { + ++var30; + } else if ((var14 & 4) != 0) { + --var30; + } + } + + var33 = 0; + + while (var31-- > 0) { + var6[var33] = class173.bufferX[var31]; + var7[var33++] = class173.bufferY[var31]; + if (var33 >= var6.length) { + break; + } + } + + return var33; + } + } + + @ObfuscatedName("i") + @ObfuscatedSignature( + signature = "(I)V", + garbageValue = "1049391968" + ) + public static final void method4611() { + ViewportMouse.ViewportMouse_isInViewport = false; + ViewportMouse.ViewportMouse_entityCount = 0; + } } diff --git a/runescape-client/src/main/java/PcmPlayer.java b/runescape-client/src/main/java/PcmPlayer.java index 3a78ecf989..064f71c6ce 100644 --- a/runescape-client/src/main/java/PcmPlayer.java +++ b/runescape-client/src/main/java/PcmPlayer.java @@ -1,199 +1,211 @@ +import java.util.concurrent.ScheduledExecutorService; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("dq") +@ObfuscatedName("de") @Implements("PcmPlayer") public class PcmPlayer { - @ObfuscatedName("v") - @ObfuscatedGetter( - intValue = -326357542 + @ObfuscatedName("p") + @Export("PcmPlayer_stereo") + protected static boolean PcmPlayer_stereo; + @ObfuscatedName("y") + @Export("soundSystemExecutor") + static ScheduledExecutorService soundSystemExecutor; + @ObfuscatedName("i") + @ObfuscatedSignature( + signature = "Ldc;" ) - @Export("PcmPlayer_sampleRate") - public static int PcmPlayer_sampleRate; - @ObfuscatedName("k") + @Export("soundSystem") + static SoundSystem soundSystem; + @ObfuscatedName("fc") + @ObfuscatedSignature( + signature = "Lkn;" + ) + static AbstractSocket field1413; + @ObfuscatedName("e") @Export("samples") protected int[] samples; - @ObfuscatedName("x") + @ObfuscatedName("n") @ObfuscatedSignature( - signature = "Ldj;" + signature = "Ldt;" ) @Export("stream") PcmStream stream; - @ObfuscatedName("j") - @ObfuscatedGetter( - intValue = 1561038713 - ) - int field1394; @ObfuscatedName("r") @ObfuscatedGetter( - longValue = -4392841547696202379L + intValue = 78939647 + ) + int field1396; + @ObfuscatedName("c") + @ObfuscatedGetter( + longValue = -143263282379705379L ) @Export("timeMs") long timeMs; - @ObfuscatedName("e") + @ObfuscatedName("a") @ObfuscatedGetter( - intValue = 1043621473 + intValue = 519126893 ) @Export("capacity") int capacity; + @ObfuscatedName("d") + @ObfuscatedGetter( + intValue = 1108114601 + ) + int field1401; @ObfuscatedName("s") @ObfuscatedGetter( - intValue = 87415669 + intValue = -1542098097 ) - int field1388; - @ObfuscatedName("b") + int field1402; + @ObfuscatedName("t") @ObfuscatedGetter( - intValue = 692811819 + longValue = -5404263653312830565L ) - int field1389; - @ObfuscatedName("z") + long field1405; + @ObfuscatedName("m") @ObfuscatedGetter( - longValue = -5109190258343752079L + intValue = 1907349045 ) - long field1390; - @ObfuscatedName("f") + int field1406; + @ObfuscatedName("v") @ObfuscatedGetter( - intValue = -728002027 + intValue = 850216769 ) - int field1384; - @ObfuscatedName("g") + int field1404; + @ObfuscatedName("q") @ObfuscatedGetter( - intValue = 1330759581 - ) - int field1380; - @ObfuscatedName("w") - @ObfuscatedGetter( - intValue = -1355026859 + intValue = -1870292623 ) int field1393; - @ObfuscatedName("u") + @ObfuscatedName("l") @ObfuscatedGetter( - longValue = 8313708391947362675L + longValue = 8086263838612894667L ) - long field1396; - @ObfuscatedName("y") - boolean field1395; - @ObfuscatedName("ag") + long field1407; + @ObfuscatedName("j") + boolean field1398; + @ObfuscatedName("ao") @ObfuscatedGetter( - intValue = 232307999 + intValue = 657489915 ) - int field1392; + int field1409; + @ObfuscatedName("aw") + @ObfuscatedSignature( + signature = "[Ldt;" + ) + PcmStream[] field1410; @ObfuscatedName("ak") @ObfuscatedSignature( - signature = "[Ldj;" + signature = "[Ldt;" ) - PcmStream[] field1397; - @ObfuscatedName("av") - @ObfuscatedSignature( - signature = "[Ldj;" - ) - PcmStream[] field1398; + PcmStream[] field1411; protected PcmPlayer() { - this.field1394 = 32; - this.timeMs = PlayerAppearance.currentTimeMillis(); - this.field1390 = 0L; - this.field1384 = 0; - this.field1380 = 0; + this.field1396 = 32; + this.timeMs = TaskHandler.currentTimeMillis(); + this.field1405 = 0L; + this.field1406 = 0; + this.field1404 = 0; this.field1393 = 0; - this.field1396 = 0L; - this.field1395 = true; - this.field1392 = 0; - this.field1397 = new PcmStream[8]; - this.field1398 = new PcmStream[8]; + this.field1407 = 0L; + this.field1398 = true; + this.field1409 = 0; + this.field1410 = new PcmStream[8]; + this.field1411 = new PcmStream[8]; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "-122" + signature = "(I)V", + garbageValue = "347893346" ) @Export("init") protected void init() throws Exception { } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(II)V", - garbageValue = "1329305761" + signature = "(IB)V", + garbageValue = "25" ) @Export("open") protected void open(int var1) throws Exception { } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(I)I", - garbageValue = "-2053382901" + signature = "(B)I", + garbageValue = "80" ) @Export("position") protected int position() throws Exception { return this.capacity; } - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("write") protected void write() throws Exception { } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "-359946727" + garbageValue = "-1441503616" ) @Export("close") protected void close() { } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "47548316" + signature = "(B)V", + garbageValue = "45" ) @Export("discard") protected void discard() throws Exception { } - @ObfuscatedName("av") + @ObfuscatedName("am") @ObfuscatedSignature( - signature = "(Ldj;S)V", - garbageValue = "2001" + signature = "(Ldt;B)V", + garbageValue = "-11" ) @Export("setStream") public final synchronized void setStream(PcmStream var1) { this.stream = var1; } - @ObfuscatedName("am") + @ObfuscatedName("ai") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "-162724995" + garbageValue = "344107964" ) @Export("run") public final synchronized void run() { if (this.samples != null) { - long var1 = PlayerAppearance.currentTimeMillis(); + long var1 = TaskHandler.currentTimeMillis(); try { - if (0L != this.field1390) { - if (var1 < this.field1390) { + if (this.field1405 != 0L) { + if (var1 < this.field1405) { return; } this.open(this.capacity); - this.field1390 = 0L; - this.field1395 = true; + this.field1405 = 0L; + this.field1398 = true; } int var3 = this.position(); - if (this.field1393 - var3 > this.field1384) { - this.field1384 = this.field1393 - var3; + if (this.field1393 - var3 > this.field1406) { + this.field1406 = this.field1393 - var3; } - int var4 = this.field1389 + this.field1388; + int var4 = this.field1401 + this.field1402; if (var4 + 256 > 16384) { var4 = 16128; } @@ -207,10 +219,10 @@ public class PcmPlayer { this.close(); this.open(this.capacity); var3 = 0; - this.field1395 = true; + this.field1398 = true; if (var4 + 256 > this.capacity) { var4 = this.capacity - 256; - this.field1389 = var4 - this.field1388; + this.field1402 = var4 - this.field1401; } } @@ -220,38 +232,38 @@ public class PcmPlayer { var3 += 256; } - if (var1 > this.field1396) { - if (!this.field1395) { - if (this.field1384 == 0 && this.field1380 == 0) { + if (var1 > this.field1407) { + if (!this.field1398) { + if (this.field1406 == 0 && this.field1404 == 0) { this.close(); - this.field1390 = var1 + 2000L; + this.field1405 = var1 + 2000L; return; } - this.field1389 = Math.min(this.field1380, this.field1384); - this.field1380 = this.field1384; + this.field1402 = Math.min(this.field1404, this.field1406); + this.field1404 = this.field1406; } else { - this.field1395 = false; + this.field1398 = false; } - this.field1384 = 0; - this.field1396 = 2000L + var1; + this.field1406 = 0; + this.field1407 = 2000L + var1; } this.field1393 = var3; } catch (Exception var7) { this.close(); - this.field1390 = var1 + 2000L; + this.field1405 = 2000L + var1; } try { - if (var1 > this.timeMs + 500000L) { + if (var1 > 500000L + this.timeMs) { var1 = this.timeMs; } while (var1 > 5000L + this.timeMs) { this.skip(256); - this.timeMs += (long)(256000 / (PcmPlayer_sampleRate * 22050)); + this.timeMs += (long)(256000 / Messages.PcmPlayer_sampleRate); } } catch (Exception var6) { this.timeMs = var1; @@ -260,57 +272,57 @@ public class PcmPlayer { } } - @ObfuscatedName("ab") + @ObfuscatedName("ag") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "-2122185925" + signature = "(S)V", + garbageValue = "-4762" ) - public final void method2581() { - this.field1395 = true; + public final void method2458() { + this.field1398 = true; } - @ObfuscatedName("ax") + @ObfuscatedName("ao") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "-855034369" + signature = "(B)V", + garbageValue = "1" ) @Export("tryDiscard") public final synchronized void tryDiscard() { - this.field1395 = true; + this.field1398 = true; try { this.discard(); } catch (Exception var2) { this.close(); - this.field1390 = PlayerAppearance.currentTimeMillis() + 2000L; + this.field1405 = TaskHandler.currentTimeMillis() + 2000L; } } - @ObfuscatedName("al") + @ObfuscatedName("aw") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "-1045839525" + garbageValue = "-1132905799" ) @Export("shutdown") public final synchronized void shutdown() { - if (VerticalAlignment.soundSystem != null) { + if (soundSystem != null) { boolean var1 = true; for (int var2 = 0; var2 < 2; ++var2) { - if (this == VerticalAlignment.soundSystem.players[var2]) { - VerticalAlignment.soundSystem.players[var2] = null; + if (this == soundSystem.players[var2]) { + soundSystem.players[var2] = null; } - if (VerticalAlignment.soundSystem.players[var2] != null) { + if (soundSystem.players[var2] != null) { var1 = false; } } if (var1) { - SecureRandomCallable.soundSystemExecutor.shutdownNow(); - SecureRandomCallable.soundSystemExecutor = null; - VerticalAlignment.soundSystem = null; + soundSystemExecutor.shutdownNow(); + soundSystemExecutor = null; + soundSystem = null; } } @@ -318,16 +330,16 @@ public class PcmPlayer { this.samples = null; } - @ObfuscatedName("ap") + @ObfuscatedName("ak") @ObfuscatedSignature( - signature = "(II)V", - garbageValue = "-1485075672" + signature = "(IB)V", + garbageValue = "8" ) @Export("skip") final void skip(int var1) { - this.field1392 -= var1; - if (this.field1392 < 0) { - this.field1392 = 0; + this.field1409 -= var1; + if (this.field1409 < 0) { + this.field1409 = 0; } if (this.stream != null) { @@ -336,20 +348,20 @@ public class PcmPlayer { } - @ObfuscatedName("aj") + @ObfuscatedName("aa") @Export("fill") final void fill(int[] var1, int var2) { int var3 = var2; - if (InterfaceParent.PcmPlayer_stereo) { + if (PcmPlayer_stereo) { var3 = var2 << 1; } class300.clearIntArray(var1, 0, var3); - this.field1392 -= var2; - if (this.stream != null && this.field1392 <= 0) { - this.field1392 += PcmPlayer_sampleRate * 22050 >> 4; - PlayerAppearance.PcmStream_disable(this.stream); - this.method2586(this.stream, this.stream.vmethod2868()); + this.field1409 -= var2; + if (this.stream != null && this.field1409 <= 0) { + this.field1409 += Messages.PcmPlayer_sampleRate >> 4; + class1.PcmStream_disable(this.stream); + this.method2452(this.stream, this.stream.vmethod2741()); int var4 = 0; int var5 = 255; @@ -371,7 +383,7 @@ public class PcmPlayer { if ((var9 & 1) != 0) { var5 &= ~(1 << var7); var10 = null; - PcmStream var11 = this.field1397[var7]; + PcmStream var11 = this.field1410[var7]; label98: while (true) { @@ -387,33 +399,33 @@ public class PcmPlayer { var11 = var11.after; } else { var11.active = true; - int var13 = var11.vmethod4063(); + int var13 = var11.vmethod3963(); var4 += var13; if (var12 != null) { var12.position += var13; } - if (var4 >= this.field1394) { + if (var4 >= this.field1396) { break label104; } PcmStream var14 = var11.firstSubStream(); if (var14 != null) { - for (int var15 = var11.field1467; var14 != null; var14 = var11.nextSubStream()) { - this.method2586(var14, var15 * var14.vmethod2868() >> 8); + for (int var15 = var11.field1483; var14 != null; var14 = var11.nextSubStream()) { + this.method2452(var14, var15 * var14.vmethod2741() >> 8); } } PcmStream var18 = var11.after; var11.after = null; if (var10 == null) { - this.field1397[var7] = var18; + this.field1410[var7] = var18; } else { var10.after = var18; } if (var18 == null) { - this.field1398[var7] = var10; + this.field1411[var7] = var10; } var11 = var18; @@ -428,9 +440,9 @@ public class PcmPlayer { } for (var6 = 0; var6 < 8; ++var6) { - PcmStream var16 = this.field1397[var6]; - PcmStream[] var17 = this.field1397; - this.field1398[var6] = null; + PcmStream var16 = this.field1410[var6]; + PcmStream[] var17 = this.field1410; + this.field1411[var6] = null; for (var17[var6] = null; var16 != null; var16 = var10) { var10 = var16.after; @@ -439,83 +451,87 @@ public class PcmPlayer { } } - if (this.field1392 < 0) { - this.field1392 = 0; + if (this.field1409 < 0) { + this.field1409 = 0; } if (this.stream != null) { this.stream.fill(var1, 0, var2); } - this.timeMs = PlayerAppearance.currentTimeMillis(); + this.timeMs = TaskHandler.currentTimeMillis(); } - @ObfuscatedName("au") + @ObfuscatedName("ar") @ObfuscatedSignature( - signature = "(Ldj;IB)V", - garbageValue = "113" + signature = "(Ldt;II)V", + garbageValue = "1065299389" ) - final void method2586(PcmStream var1, int var2) { + final void method2452(PcmStream var1, int var2) { int var3 = var2 >> 5; - PcmStream var4 = this.field1398[var3]; + PcmStream var4 = this.field1411[var3]; if (var4 == null) { - this.field1397[var3] = var1; + this.field1410[var3] = var1; } else { var4.after = var1; } - this.field1398[var3] = var1; - var1.field1467 = var2; + this.field1411[var3] = var1; + var1.field1483 = var2; } - @ObfuscatedName("t") + @ObfuscatedName("e") @ObfuscatedSignature( - signature = "(CI)Z", - garbageValue = "1251726708" + signature = "(S)V", + garbageValue = "180" ) - public static boolean method2639(char var0) { - if (var0 > ' ' && var0 < 127 || var0 > 127 && var0 < 160 || var0 > 160 && var0 <= 255) { - return true; - } else { - if (var0 != 0) { - char[] var1 = class287.cp1252AsciiExtension; + static void method2510() { + UrlRequester.SpriteBuffer_xOffsets = null; + class216.SpriteBuffer_yOffsets = null; + class325.SpriteBuffer_spriteWidths = null; + VarcInt.SpriteBuffer_spriteHeights = null; + class325.SpriteBuffer_spritePalette = null; + FillMode.SpriteBuffer_pixels = null; + } - for (int var2 = 0; var2 < var1.length; ++var2) { - char var3 = var1[var2]; - if (var0 == var3) { - return true; - } + @ObfuscatedName("it") + @ObfuscatedSignature( + signature = "(I)V", + garbageValue = "264863950" + ) + static final void method2509() { + boolean var0 = false; + + while (!var0) { + var0 = true; + + for (int var1 = 0; var1 < Client.menuOptionsCount - 1; ++var1) { + if (Client.menuOpcodes[var1] < 1000 && Client.menuOpcodes[var1 + 1] > 1000) { + String var2 = Client.menuTargets[var1]; + Client.menuTargets[var1] = Client.menuTargets[var1 + 1]; + Client.menuTargets[var1 + 1] = var2; + String var3 = Client.menuActions[var1]; + Client.menuActions[var1] = Client.menuActions[var1 + 1]; + Client.menuActions[var1 + 1] = var3; + int var4 = Client.menuOpcodes[var1]; + Client.menuOpcodes[var1] = Client.menuOpcodes[var1 + 1]; + Client.menuOpcodes[var1 + 1] = var4; + var4 = Client.menuArguments1[var1]; + Client.menuArguments1[var1] = Client.menuArguments1[var1 + 1]; + Client.menuArguments1[var1 + 1] = var4; + var4 = Client.menuArguments2[var1]; + Client.menuArguments2[var1] = Client.menuArguments2[var1 + 1]; + Client.menuArguments2[var1 + 1] = var4; + var4 = Client.menuIdentifiers[var1]; + Client.menuIdentifiers[var1] = Client.menuIdentifiers[var1 + 1]; + Client.menuIdentifiers[var1 + 1] = var4; + boolean var5 = Client.menuShiftClick[var1]; + Client.menuShiftClick[var1] = Client.menuShiftClick[var1 + 1]; + Client.menuShiftClick[var1 + 1] = var5; + var0 = false; } } - - return false; - } - } - - @ObfuscatedName("v") - @ObfuscatedSignature( - signature = "(III)I", - garbageValue = "1581886582" - ) - static int method2638(int var0, int var1) { - long var2 = (long)((var0 << 16) + var1); - return UserComparator6.NetCache_currentResponse != null && var2 == UserComparator6.NetCache_currentResponse.key ? Frames.NetCache_responseArchiveBuffer.offset * 99 / (Frames.NetCache_responseArchiveBuffer.array.length - UserComparator6.NetCache_currentResponse.padding) + 1 : 0; - } - - @ObfuscatedName("hk") - @ObfuscatedSignature( - signature = "(IIB)I", - garbageValue = "-14" - ) - static int method2637(int var0, int var1) { - int var2 = var1 - 334; - if (var2 < 0) { - var2 = 0; - } else if (var2 > 100) { - var2 = 100; } - int var3 = (Client.zoomWidth - Client.zoomHeight) * var2 / 100 + Client.zoomHeight; - return var0 * var3 / 256; } } diff --git a/runescape-client/src/main/java/PcmStream.java b/runescape-client/src/main/java/PcmStream.java index 04e9494aac..c3b8afbae3 100644 --- a/runescape-client/src/main/java/PcmStream.java +++ b/runescape-client/src/main/java/PcmStream.java @@ -3,62 +3,62 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("dj") +@ObfuscatedName("dt") @Implements("PcmStream") public abstract class PcmStream extends Node { - @ObfuscatedName("j") + @ObfuscatedName("w") + @Export("active") + volatile boolean active; + @ObfuscatedName("c") @ObfuscatedSignature( - signature = "Ldj;" + signature = "Ldt;" ) @Export("after") PcmStream after; - @ObfuscatedName("r") - int field1467; - @ObfuscatedName("e") + @ObfuscatedName("a") + int field1483; + @ObfuscatedName("d") @ObfuscatedSignature( - signature = "Ldg;" + signature = "Ldl;" ) @Export("sound") AbstractSound sound; - @ObfuscatedName("s") - @Export("active") - volatile boolean active; protected PcmStream() { this.active = true; } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "()Ldj;" + signature = "()Ldt;" ) @Export("firstSubStream") protected abstract PcmStream firstSubStream(); - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "()Ldj;" + signature = "()Ldt;" ) @Export("nextSubStream") protected abstract PcmStream nextSubStream(); - @ObfuscatedName("o") - protected abstract int vmethod4063(); + @ObfuscatedName("y") + protected abstract int vmethod3963(); - @ObfuscatedName("i") + @ObfuscatedName("w") @Export("fill") protected abstract void fill(int[] var1, int var2, int var3); - @ObfuscatedName("m") + @ObfuscatedName("k") @Export("skip") protected abstract void skip(int var1); - @ObfuscatedName("as") - int vmethod2868() { + @ObfuscatedName("at") + int vmethod2741() { return 255; } - @ObfuscatedName("fw") + @ObfuscatedName("fz") @Export("update") final void update(int[] var1, int var2, int var3) { if (this.active) { diff --git a/runescape-client/src/main/java/PcmStreamMixer.java b/runescape-client/src/main/java/PcmStreamMixer.java index 7d8a750401..9dd1d5e891 100644 --- a/runescape-client/src/main/java/PcmStreamMixer.java +++ b/runescape-client/src/main/java/PcmStreamMixer.java @@ -3,152 +3,152 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ct") +@ObfuscatedName("ca") @Implements("PcmStreamMixer") public class PcmStreamMixer extends PcmStream { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Ljb;" + signature = "Ljd;" ) @Export("subStreams") NodeDeque subStreams; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Ljb;" + signature = "Ljd;" ) - NodeDeque field1316; - @ObfuscatedName("n") - int field1317; - @ObfuscatedName("q") - int field1315; + NodeDeque field1326; + @ObfuscatedName("b") + int field1328; + @ObfuscatedName("g") + int field1329; public PcmStreamMixer() { this.subStreams = new NodeDeque(); - this.field1316 = new NodeDeque(); - this.field1317 = 0; - this.field1315 = -1; + this.field1326 = new NodeDeque(); + this.field1328 = 0; + this.field1329 = -1; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Ldj;)V" + signature = "(Ldt;)V" ) @Export("addSubStream") public final synchronized void addSubStream(PcmStream var1) { this.subStreams.addLast(var1); } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Ldj;)V" + signature = "(Ldt;)V" ) @Export("removeSubStream") public final synchronized void removeSubStream(PcmStream var1) { var1.remove(); } - @ObfuscatedName("n") - void method2439() { - if (this.field1317 > 0) { - for (PcmStreamMixerListener var1 = (PcmStreamMixerListener)this.field1316.last(); var1 != null; var1 = (PcmStreamMixerListener)this.field1316.previous()) { - var1.field1420 -= this.field1317; + @ObfuscatedName("b") + void method2332() { + if (this.field1328 > 0) { + for (PcmStreamMixerListener var1 = (PcmStreamMixerListener)this.field1326.last(); var1 != null; var1 = (PcmStreamMixerListener)this.field1326.previous()) { + var1.field1440 -= this.field1328; } - this.field1315 -= this.field1317; - this.field1317 = 0; + this.field1329 -= this.field1328; + this.field1328 = 0; } } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(Lfd;Ldn;)V" + signature = "(Lfb;Ldp;)V" ) - void method2443(Node var1, PcmStreamMixerListener var2) { - while (this.field1316.sentinel != var1 && ((PcmStreamMixerListener)var1).field1420 <= var2.field1420) { + void method2330(Node var1, PcmStreamMixerListener var2) { + while (this.field1326.sentinel != var1 && ((PcmStreamMixerListener)var1).field1440 <= var2.field1440) { var1 = var1.previous; } NodeDeque.NodeDeque_addBefore(var2, var1); - this.field1315 = ((PcmStreamMixerListener)this.field1316.sentinel.previous).field1420; + this.field1329 = ((PcmStreamMixerListener)this.field1326.sentinel.previous).field1440; } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(Ldn;)V" + signature = "(Ldp;)V" ) - void method2478(PcmStreamMixerListener var1) { + void method2322(PcmStreamMixerListener var1) { var1.remove(); var1.remove2(); - Node var2 = this.field1316.sentinel.previous; - if (var2 == this.field1316.sentinel) { - this.field1315 = -1; + Node var2 = this.field1326.sentinel.previous; + if (var2 == this.field1326.sentinel) { + this.field1329 = -1; } else { - this.field1315 = ((PcmStreamMixerListener)var2).field1420; + this.field1329 = ((PcmStreamMixerListener)var2).field1440; } } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "()Ldj;" + signature = "()Ldt;" ) @Export("firstSubStream") protected PcmStream firstSubStream() { return (PcmStream)this.subStreams.last(); } - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "()Ldj;" + signature = "()Ldt;" ) @Export("nextSubStream") protected PcmStream nextSubStream() { return (PcmStream)this.subStreams.previous(); } - @ObfuscatedName("o") - protected int vmethod4063() { + @ObfuscatedName("y") + protected int vmethod3963() { return 0; } - @ObfuscatedName("i") + @ObfuscatedName("w") @Export("fill") public final synchronized void fill(int[] var1, int var2, int var3) { do { - if (this.field1315 < 0) { + if (this.field1329 < 0) { this.updateSubStreams(var1, var2, var3); return; } - if (var3 + this.field1317 < this.field1315) { - this.field1317 += var3; + if (var3 + this.field1328 < this.field1329) { + this.field1328 += var3; this.updateSubStreams(var1, var2, var3); return; } - int var4 = this.field1315 - this.field1317; + int var4 = this.field1329 - this.field1328; this.updateSubStreams(var1, var2, var4); var2 += var4; var3 -= var4; - this.field1317 += var4; - this.method2439(); - PcmStreamMixerListener var5 = (PcmStreamMixerListener)this.field1316.last(); + this.field1328 += var4; + this.method2332(); + PcmStreamMixerListener var5 = (PcmStreamMixerListener)this.field1326.last(); synchronized(var5) { int var7 = var5.update(); if (var7 < 0) { - var5.field1420 = 0; - this.method2478(var5); + var5.field1440 = 0; + this.method2322(var5); } else { - var5.field1420 = var7; - this.method2443(var5.previous, var5); + var5.field1440 = var7; + this.method2330(var5.previous, var5); } } } while(var3 != 0); } - @ObfuscatedName("d") + @ObfuscatedName("i") @Export("updateSubStreams") void updateSubStreams(int[] var1, int var2, int var3) { for (PcmStream var4 = (PcmStream)this.subStreams.last(); var4 != null; var4 = (PcmStream)this.subStreams.previous()) { @@ -157,42 +157,42 @@ public class PcmStreamMixer extends PcmStream { } - @ObfuscatedName("m") + @ObfuscatedName("k") @Export("skip") public final synchronized void skip(int var1) { do { - if (this.field1315 < 0) { + if (this.field1329 < 0) { this.skipSubStreams(var1); return; } - if (this.field1317 + var1 < this.field1315) { - this.field1317 += var1; + if (this.field1328 + var1 < this.field1329) { + this.field1328 += var1; this.skipSubStreams(var1); return; } - int var2 = this.field1315 - this.field1317; + int var2 = this.field1329 - this.field1328; this.skipSubStreams(var2); var1 -= var2; - this.field1317 += var2; - this.method2439(); - PcmStreamMixerListener var3 = (PcmStreamMixerListener)this.field1316.last(); + this.field1328 += var2; + this.method2332(); + PcmStreamMixerListener var3 = (PcmStreamMixerListener)this.field1326.last(); synchronized(var3) { int var5 = var3.update(); if (var5 < 0) { - var3.field1420 = 0; - this.method2478(var3); + var3.field1440 = 0; + this.method2322(var3); } else { - var3.field1420 = var5; - this.method2443(var3.previous, var3); + var3.field1440 = var5; + this.method2330(var3.previous, var3); } } } while(var1 != 0); } - @ObfuscatedName("p") + @ObfuscatedName("x") @Export("skipSubStreams") void skipSubStreams(int var1) { for (PcmStream var2 = (PcmStream)this.subStreams.last(); var2 != null; var2 = (PcmStream)this.subStreams.previous()) { diff --git a/runescape-client/src/main/java/PcmStreamMixerListener.java b/runescape-client/src/main/java/PcmStreamMixerListener.java index dd519bb4b1..925ce21db4 100644 --- a/runescape-client/src/main/java/PcmStreamMixerListener.java +++ b/runescape-client/src/main/java/PcmStreamMixerListener.java @@ -3,19 +3,19 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("dn") +@ObfuscatedName("dp") @Implements("PcmStreamMixerListener") public abstract class PcmStreamMixerListener extends Node { - @ObfuscatedName("a") - int field1420; + @ObfuscatedName("u") + int field1440; - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("remove2") abstract void remove2(); - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Lct;)I" + signature = "(Lca;)I" ) @Export("update") abstract int update(); diff --git a/runescape-client/src/main/java/PendingSpawn.java b/runescape-client/src/main/java/PendingSpawn.java index 6453656836..165c78a184 100644 --- a/runescape-client/src/main/java/PendingSpawn.java +++ b/runescape-client/src/main/java/PendingSpawn.java @@ -1,82 +1,89 @@ -import java.io.File; -import java.io.RandomAccessFile; -import java.util.concurrent.Executors; -import java.util.concurrent.TimeUnit; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("bn") +@ObfuscatedName("be") @Implements("PendingSpawn") public final class PendingSpawn extends Node { - @ObfuscatedName("a") + @ObfuscatedName("qu") @ObfuscatedGetter( - intValue = -1584679065 + intValue = 756269056 + ) + static int field925; + @ObfuscatedName("r") + @ObfuscatedGetter( + intValue = 2040420297 + ) + @Export("cacheGamebuild") + public static int cacheGamebuild; + @ObfuscatedName("u") + @ObfuscatedGetter( + intValue = 842281271 ) @Export("plane") int plane; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = -1530621461 + intValue = -1195330125 ) @Export("type") int type; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = -1386695055 + intValue = -521000553 ) @Export("x") int x; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = -1902286249 + intValue = -156944661 ) @Export("y") int y; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = 1162414355 + intValue = 2076612057 ) @Export("objectId") int objectId; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = 1880086587 + intValue = 1798753117 ) - int field913; - @ObfuscatedName("c") + int field929; + @ObfuscatedName("h") @ObfuscatedGetter( - intValue = 1367998823 + intValue = 1153270233 ) - int field914; - @ObfuscatedName("o") + int field924; + @ObfuscatedName("y") @ObfuscatedGetter( - intValue = 1222529831 + intValue = 37593595 ) @Export("id") int id; - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedGetter( - intValue = 235222743 + intValue = -87951589 ) @Export("orientation") int orientation; - @ObfuscatedName("d") + @ObfuscatedName("i") @ObfuscatedGetter( - intValue = 2005302789 + intValue = 894134175 ) - int field917; - @ObfuscatedName("m") + int field927; + @ObfuscatedName("k") @ObfuscatedGetter( - intValue = -1677449417 + intValue = 1990017955 ) @Export("delay") int delay; - @ObfuscatedName("p") + @ObfuscatedName("x") @ObfuscatedGetter( - intValue = 2086246849 + intValue = 458330281 ) @Export("hitpoints") int hitpoints; @@ -86,105 +93,58 @@ public final class PendingSpawn extends Node { this.hitpoints = -1; } - @ObfuscatedName("a") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Ljava/lang/String;I)Ljava/io/File;", - garbageValue = "1594273687" - ) - @Export("getFile") - static File getFile(String var0) { - if (!FileSystem.FileSystem_hasPermissions) { - throw new RuntimeException(""); - } else { - File var1 = (File)FileSystem.FileSystem_cacheFiles.get(var0); - if (var1 != null) { - return var1; - } else { - File var2 = new File(FileSystem.FileSystem_cacheDir, var0); - RandomAccessFile var3 = null; - - try { - File var4 = new File(var2.getParent()); - if (!var4.exists()) { - throw new RuntimeException(""); - } else { - var3 = new RandomAccessFile(var2, "rw"); - int var5 = var3.read(); - var3.seek(0L); - var3.write(var5); - var3.seek(0L); - var3.close(); - FileSystem.FileSystem_cacheFiles.put(var0, var2); - return var2; - } - } catch (Exception var8) { - try { - if (var3 != null) { - var3.close(); - var3 = null; - } - } catch (Exception var7) { - } - - throw new RuntimeException(); - } - } - } - } - - @ObfuscatedName("ak") - @ObfuscatedSignature( - signature = "(Lff;IIB)Ldq;", + signature = "(ZZB)Llm;", garbageValue = "0" ) - public static final PcmPlayer method1856(TaskHandler var0, int var1, int var2) { - if (PcmPlayer.PcmPlayer_sampleRate * 22050 == 0) { - throw new IllegalStateException(); - } else if (var1 >= 0 && var1 < 2) { - if (var2 < 256) { - var2 = 256; - } - - try { - PcmPlayer var3 = class188.pcmPlayerProvider.player(); - var3.samples = new int[256 * (InterfaceParent.PcmPlayer_stereo ? 2 : 1)]; - var3.field1388 = var2; - var3.init(); - var3.capacity = (var2 & -1024) + 1024; - if (var3.capacity > 16384) { - var3.capacity = 16384; - } - - var3.open(var3.capacity); - if (ParamDefinition.PcmPlayer_count > 0 && VerticalAlignment.soundSystem == null) { - VerticalAlignment.soundSystem = new SoundSystem(); - SecureRandomCallable.soundSystemExecutor = Executors.newScheduledThreadPool(1); - SecureRandomCallable.soundSystemExecutor.scheduleAtFixedRate(VerticalAlignment.soundSystem, 0L, 10L, TimeUnit.MILLISECONDS); - } - - if (VerticalAlignment.soundSystem != null) { - if (VerticalAlignment.soundSystem.players[var1] != null) { - throw new IllegalArgumentException(); - } - - VerticalAlignment.soundSystem.players[var1] = var3; - } - - return var3; - } catch (Throwable var4) { - return new PcmPlayer(); - } - } else { - throw new IllegalArgumentException(); - } + static IndexedSprite method1753(boolean var0, boolean var1) { + return var0 ? (var1 ? StructDefinition.field3315 : Varps.options_buttons_2Sprite) : (var1 ? Login.field1179 : InterfaceParent.options_buttons_0Sprite); } - @ObfuscatedName("lm") + @ObfuscatedName("iw") @ObfuscatedSignature( - signature = "(B)Z", - garbageValue = "92" + signature = "(Lhl;III)V", + garbageValue = "648761441" ) - public static boolean method1854() { - return Client.staffModLevel >= 2; + @Export("alignWidgetPosition") + static void alignWidgetPosition(Widget var0, int var1, int var2) { + if (var0.xAlignment == 0) { + var0.x = var0.rawX; + } else if (var0.xAlignment == 1) { + var0.x = var0.rawX + (var1 - var0.width) / 2; + } else if (var0.xAlignment == 2) { + var0.x = var1 - var0.width - var0.rawX; + } else if (var0.xAlignment == 3) { + var0.x = var0.rawX * var1 >> 14; + } else if (var0.xAlignment == 4) { + var0.x = (var1 - var0.width) / 2 + (var0.rawX * var1 >> 14); + } else { + var0.x = var1 - var0.width - (var0.rawX * var1 >> 14); + } + + if (var0.yAlignment == 0) { + var0.y = var0.rawY; + } else if (var0.yAlignment == 1) { + var0.y = (var2 - var0.height) / 2 + var0.rawY; + } else if (var0.yAlignment == 2) { + var0.y = var2 - var0.height - var0.rawY; + } else if (var0.yAlignment == 3) { + var0.y = var2 * var0.rawY >> 14; + } else if (var0.yAlignment == 4) { + var0.y = (var2 * var0.rawY >> 14) + (var2 - var0.height) / 2; + } else { + var0.y = var2 - var0.height - (var2 * var0.rawY >> 14); + } + + } + + @ObfuscatedName("jx") + @ObfuscatedSignature( + signature = "(I)Z", + garbageValue = "-547734374" + ) + static boolean method1751() { + return Client.tapToDrop || KeyHandler.KeyHandler_pressedKeys[81]; } } diff --git a/runescape-client/src/main/java/PlatformInfo.java b/runescape-client/src/main/java/PlatformInfo.java index 00a5f89629..149d39c379 100644 --- a/runescape-client/src/main/java/PlatformInfo.java +++ b/runescape-client/src/main/java/PlatformInfo.java @@ -4,188 +4,202 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("lk") +@ObfuscatedName("lj") @Implements("PlatformInfo") public class PlatformInfo extends Node { - @ObfuscatedName("ak") + @ObfuscatedName("aw") @ObfuscatedGetter( - intValue = 1353612323 - ) - int field3922; - @ObfuscatedName("av") - boolean field3911; - @ObfuscatedName("am") - @ObfuscatedGetter( - intValue = 1724945833 - ) - int field3927; - @ObfuscatedName("ab") - @ObfuscatedGetter( - intValue = -1892503757 - ) - int field3913; - @ObfuscatedName("ax") - @ObfuscatedGetter( - intValue = -769451899 - ) - int field3914; - @ObfuscatedName("al") - @ObfuscatedGetter( - intValue = -2046511239 + intValue = -319995609 ) int field3917; - @ObfuscatedName("ap") + @ObfuscatedName("ak") + boolean field3909; + @ObfuscatedName("aa") @ObfuscatedGetter( - intValue = -1112004663 + intValue = 689449567 + ) + int field3904; + @ObfuscatedName("ab") + @ObfuscatedGetter( + intValue = 508729537 + ) + int field3911; + @ObfuscatedName("ar") + @ObfuscatedGetter( + intValue = -42607037 + ) + int field3912; + @ObfuscatedName("av") + @ObfuscatedGetter( + intValue = -624534927 + ) + int field3907; + @ObfuscatedName("aq") + @ObfuscatedGetter( + intValue = 1257010089 + ) + int field3914; + @ObfuscatedName("ac") + boolean field3915; + @ObfuscatedName("az") + @ObfuscatedGetter( + intValue = 1031009357 ) int field3916; - @ObfuscatedName("aj") - boolean field3912; - @ObfuscatedName("ae") - @ObfuscatedGetter( - intValue = -864167753 - ) - int field3918; - @ObfuscatedName("au") - @ObfuscatedGetter( - intValue = 1103652803 - ) - int field3929; - @ObfuscatedName("an") - @ObfuscatedGetter( - intValue = 43977127 - ) - int field3921; - @ObfuscatedName("af") - @ObfuscatedGetter( - intValue = 634727617 - ) - int field3915; - @ObfuscatedName("ay") - String field3923; - @ObfuscatedName("az") - String field3924; - @ObfuscatedName("ao") - String field3925; - @ObfuscatedName("ai") - String field3926; - @ObfuscatedName("ac") - @ObfuscatedGetter( - intValue = -1691055317 - ) - int field3931; @ObfuscatedName("at") @ObfuscatedGetter( - intValue = 598634221 + intValue = 1719417791 ) - int field3933; - @ObfuscatedName("as") + int field3910; + @ObfuscatedName("aj") @ObfuscatedGetter( - intValue = 953656517 - ) - int field3908; - @ObfuscatedName("ba") - @ObfuscatedGetter( - intValue = 1818308125 + intValue = -62226837 ) int field3930; - @ObfuscatedName("bg") - String field3928; - @ObfuscatedName("bc") - String field3932; - @ObfuscatedName("bd") - int[] field3905; - @ObfuscatedName("bx") + @ObfuscatedName("ap") @ObfuscatedGetter( - intValue = 2080789709 + intValue = 364104521 ) - int field3934; - @ObfuscatedName("bl") - String field3901; + int field3906; + @ObfuscatedName("an") + String field3920; + @ObfuscatedName("al") + String field3921; + @ObfuscatedName("ay") + String field3913; + @ObfuscatedName("ax") + String field3923; + @ObfuscatedName("au") + @ObfuscatedGetter( + intValue = -1064226031 + ) + int field3924; + @ObfuscatedName("as") + @ObfuscatedGetter( + intValue = 1565693073 + ) + int field3925; + @ObfuscatedName("ah") + @ObfuscatedGetter( + intValue = 1111257325 + ) + int field3919; + @ObfuscatedName("bi") + @ObfuscatedGetter( + intValue = -1835106139 + ) + int field3927; + @ObfuscatedName("bo") + String field3928; + @ObfuscatedName("bx") + String field3929; + @ObfuscatedName("bu") + int[] field3902; + @ObfuscatedName("bd") + @ObfuscatedGetter( + intValue = -1505377963 + ) + int field3931; + @ObfuscatedName("bn") + String field3932; PlatformInfo(int var1, boolean var2, int var3, int var4, int var5, int var6, int var7, boolean var8, int var9, int var10, int var11, int var12, String var13, String var14, String var15, String var16, int var17, int var18, int var19, int var20, String var21, String var22, int[] var23, int var24, String var25) { - this.field3905 = new int[3]; - this.field3922 = var1; - this.field3911 = var2; - this.field3927 = var3; - this.field3913 = var4; - this.field3914 = var5; - this.field3917 = var6; - this.field3916 = var7; - this.field3912 = var8; - this.field3918 = var9; - this.field3929 = var10; - this.field3921 = var11; - this.field3915 = var12; - this.field3923 = var13; - this.field3924 = var14; - this.field3925 = var15; - this.field3926 = var16; - this.field3931 = var17; - this.field3933 = var18; - this.field3908 = var19; - this.field3930 = var20; + this.field3902 = new int[3]; + this.field3917 = var1; + this.field3909 = var2; + this.field3904 = var3; + this.field3911 = var4; + this.field3912 = var5; + this.field3907 = var6; + this.field3914 = var7; + this.field3915 = var8; + this.field3916 = var9; + this.field3910 = var10; + this.field3930 = var11; + this.field3906 = var12; + this.field3920 = var13; + this.field3921 = var14; + this.field3913 = var15; + this.field3923 = var16; + this.field3924 = var17; + this.field3925 = var18; + this.field3919 = var19; + this.field3927 = var20; this.field3928 = var21; - this.field3932 = var22; - this.field3905 = var23; - this.field3934 = var24; - this.field3901 = var25; + this.field3929 = var22; + this.field3902 = var23; + this.field3931 = var24; + this.field3932 = var25; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Lkc;I)V", - garbageValue = "-2033458104" + signature = "(Lkg;B)V", + garbageValue = "0" ) @Export("write") public void write(Buffer var1) { var1.writeByte(8); - var1.writeByte(this.field3922); - var1.writeByte(this.field3911 ? 1 : 0); - var1.writeShort(this.field3927); - var1.writeByte(this.field3913); - var1.writeByte(this.field3914); var1.writeByte(this.field3917); - var1.writeByte(this.field3916); - var1.writeByte(this.field3912 ? 1 : 0); - var1.writeShort(this.field3918); - var1.writeByte(this.field3929); - var1.writeMedium(this.field3921); - var1.writeShort(this.field3915); + var1.writeByte(this.field3909 ? 1 : 0); + var1.writeShort(this.field3904); + var1.writeByte(this.field3911); + var1.writeByte(this.field3912); + var1.writeByte(this.field3907); + var1.writeByte(this.field3914); + var1.writeByte(this.field3915 ? 1 : 0); + var1.writeShort(this.field3916); + var1.writeByte(this.field3910); + var1.writeMedium(this.field3930); + var1.writeShort(this.field3906); + var1.writeStringCp1252NullCircumfixed(this.field3920); + var1.writeStringCp1252NullCircumfixed(this.field3921); + var1.writeStringCp1252NullCircumfixed(this.field3913); var1.writeStringCp1252NullCircumfixed(this.field3923); - var1.writeStringCp1252NullCircumfixed(this.field3924); - var1.writeStringCp1252NullCircumfixed(this.field3925); - var1.writeStringCp1252NullCircumfixed(this.field3926); - var1.writeByte(this.field3933); - var1.writeShort(this.field3931); + var1.writeByte(this.field3925); + var1.writeShort(this.field3924); var1.writeStringCp1252NullCircumfixed(this.field3928); - var1.writeStringCp1252NullCircumfixed(this.field3932); - var1.writeByte(this.field3908); - var1.writeByte(this.field3930); + var1.writeStringCp1252NullCircumfixed(this.field3929); + var1.writeByte(this.field3919); + var1.writeByte(this.field3927); - for (int var2 = 0; var2 < this.field3905.length; ++var2) { - var1.writeInt(this.field3905[var2]); + for (int var2 = 0; var2 < this.field3902.length; ++var2) { + var1.writeInt(this.field3902[var2]); } - var1.writeInt(this.field3934); - var1.writeStringCp1252NullCircumfixed(this.field3901); + var1.writeInt(this.field3931); + var1.writeStringCp1252NullCircumfixed(this.field3932); } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( signature = "(I)I", - garbageValue = "-963267335" + garbageValue = "-1694197282" ) @Export("size") public int size() { byte var1 = 39; - int var2 = var1 + Buddy.method5297(this.field3923); - var2 += Buddy.method5297(this.field3924); - var2 += Buddy.method5297(this.field3925); - var2 += Buddy.method5297(this.field3926); - var2 += Buddy.method5297(this.field3928); - var2 += Buddy.method5297(this.field3932); - var2 += Buddy.method5297(this.field3901); - return var2; + String var4 = this.field3920; + int var3 = var4.length() + 2; + int var23 = var3 + var1; + String var7 = this.field3921; + int var6 = var7.length() + 2; + var23 += var6; + String var10 = this.field3913; + int var9 = var10.length() + 2; + var23 += var9; + String var13 = this.field3923; + int var12 = var13.length() + 2; + var23 += var12; + String var16 = this.field3928; + int var15 = var16.length() + 2; + var23 += var15; + String var19 = this.field3929; + int var18 = var19.length() + 2; + var23 += var18; + String var22 = this.field3932; + int var21 = var22.length() + 2; + var23 += var21; + return var23; } } diff --git a/runescape-client/src/main/java/PlatformInfoProvider.java b/runescape-client/src/main/java/PlatformInfoProvider.java index cd657862f4..2b9b3eeb1c 100644 --- a/runescape-client/src/main/java/PlatformInfoProvider.java +++ b/runescape-client/src/main/java/PlatformInfoProvider.java @@ -3,13 +3,13 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("lb") +@ObfuscatedName("lh") @Implements("PlatformInfoProvider") public interface PlatformInfoProvider { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(I)Llk;", - garbageValue = "-1540970685" + signature = "(B)Llj;", + garbageValue = "-40" ) @Export("get") PlatformInfo get(); diff --git a/runescape-client/src/main/java/Player.java b/runescape-client/src/main/java/Player.java index 92d20e8128..69cf3fe95d 100644 --- a/runescape-client/src/main/java/Player.java +++ b/runescape-client/src/main/java/Player.java @@ -4,161 +4,161 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("bj") +@ObfuscatedName("bg") @Implements("Player") public final class Player extends Actor { - @ObfuscatedName("jh") - @ObfuscatedGetter( - intValue = 302709599 - ) - @Export("Client_plane") - static int Client_plane; - @ObfuscatedName("a") + @ObfuscatedName("fp") @ObfuscatedSignature( - signature = "Lju;" + signature = "Lky;" + ) + @Export("fontPlain12") + static Font fontPlain12; + @ObfuscatedName("u") + @ObfuscatedSignature( + signature = "Ljb;" ) @Export("username") Username username; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lhe;" + signature = "Lhd;" ) @Export("appearance") PlayerAppearance appearance; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = -1452773485 + intValue = 668256771 ) @Export("headIconPk") int headIconPk; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = 543277395 + intValue = 334440827 ) @Export("headIconPrayer") int headIconPrayer; - @ObfuscatedName("l") + @ObfuscatedName("p") @Export("actions") String[] actions; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedGetter( - intValue = -1482937775 + intValue = 274943013 ) @Export("combatLevel") int combatLevel; - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedGetter( - intValue = -1894325429 + intValue = 1410660801 ) @Export("skillLevel") int skillLevel; - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedGetter( - intValue = -910871753 + intValue = -1809943585 ) @Export("tileHeight") int tileHeight; - @ObfuscatedName("d") + @ObfuscatedName("i") @ObfuscatedGetter( - intValue = -1047722297 + intValue = 59496057 ) @Export("animationCycleStart") int animationCycleStart; - @ObfuscatedName("m") + @ObfuscatedName("k") @ObfuscatedGetter( - intValue = -1520700303 + intValue = -1958828963 ) @Export("animationCycleEnd") int animationCycleEnd; - @ObfuscatedName("p") + @ObfuscatedName("x") @ObfuscatedGetter( - intValue = -1427757385 + intValue = -97527251 ) - int field620; - @ObfuscatedName("h") + int field623; + @ObfuscatedName("o") @ObfuscatedGetter( - intValue = 1927324771 + intValue = 452166125 ) @Export("tileHeight2") int tileHeight2; - @ObfuscatedName("k") + @ObfuscatedName("e") @ObfuscatedGetter( - intValue = 1667324247 + intValue = -1739722177 ) - int field613; - @ObfuscatedName("x") + int field617; + @ObfuscatedName("n") @ObfuscatedSignature( - signature = "Ldv;" + signature = "Ldf;" ) @Export("model0") Model model0; - @ObfuscatedName("j") - @ObfuscatedGetter( - intValue = -259291277 - ) - int field595; @ObfuscatedName("r") @ObfuscatedGetter( - intValue = -1041408825 + intValue = -2105768533 ) - int field611; - @ObfuscatedName("e") + int field618; + @ObfuscatedName("c") @ObfuscatedGetter( - intValue = 1183898211 + intValue = -845670421 ) - int field612; + int field620; + @ObfuscatedName("a") + @ObfuscatedGetter( + intValue = -460372187 + ) + int field621; + @ObfuscatedName("d") + @ObfuscatedGetter( + intValue = 73836445 + ) + int field622; @ObfuscatedName("s") - @ObfuscatedGetter( - intValue = 1592139531 - ) - int field604; - @ObfuscatedName("b") @Export("isUnanimated") boolean isUnanimated; - @ObfuscatedName("z") + @ObfuscatedName("t") @ObfuscatedGetter( - intValue = -118673171 + intValue = -1020180477 ) @Export("team") int team; - @ObfuscatedName("f") + @ObfuscatedName("m") @Export("isHidden") boolean isHidden; - @ObfuscatedName("g") + @ObfuscatedName("v") @ObfuscatedGetter( - intValue = -1409701989 + intValue = -1146584027 ) @Export("plane") int plane; - @ObfuscatedName("w") + @ObfuscatedName("q") @ObfuscatedGetter( - intValue = -1262555149 + intValue = 37577883 ) @Export("index") int index; - @ObfuscatedName("u") + @ObfuscatedName("l") @ObfuscatedSignature( - signature = "Ljs;" + signature = "Lja;" ) @Export("isFriendTriBool") TriBool isFriendTriBool; - @ObfuscatedName("y") + @ObfuscatedName("j") @ObfuscatedSignature( - signature = "Ljs;" + signature = "Lja;" ) @Export("isInClanChat") TriBool isInClanChat; - @ObfuscatedName("aa") - boolean field606; - @ObfuscatedName("aw") + @ObfuscatedName("af") + boolean field630; + @ObfuscatedName("ad") @ObfuscatedGetter( - intValue = -655940439 + intValue = -1213220739 ) @Export("tileX") int tileX; - @ObfuscatedName("ar") + @ObfuscatedName("am") @ObfuscatedGetter( - intValue = 2119390623 + intValue = -516890813 ) @Export("tileY") int tileY; @@ -181,13 +181,13 @@ public final class Player extends Actor { this.isHidden = false; this.isFriendTriBool = TriBool.TriBool_unknown; this.isInClanChat = TriBool.TriBool_unknown; - this.field606 = false; + this.field630 = false; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Lkc;B)V", - garbageValue = "-1" + signature = "(Lkg;I)V", + garbageValue = "-1611293437" ) @Export("read") final void read(Buffer var1) { @@ -214,7 +214,7 @@ public final class Player extends Actor { } if (var4[var5] >= 512) { - int var8 = class222.ItemDefinition_get(var4[var5] - 512).team; + int var8 = Interpreter.ItemDefinition_get(var4[var5] - 512).team; if (var8 != 0) { this.team = var8; } @@ -226,7 +226,7 @@ public final class Player extends Actor { for (var6 = 0; var6 < 5; ++var6) { var7 = var1.readUnsignedByte(); - if (var7 < 0 || var7 >= PlayerAppearance.field2520[var6].length) { + if (var7 < 0 || var7 >= ArchiveLoader.field533[var6].length) { var7 = 0; } @@ -269,7 +269,7 @@ public final class Player extends Actor { super.runSequence = -1; } - this.username = new Username(var1.readStringCp1252NullTerminated(), class60.loginType); + this.username = new Username(var1.readStringCp1252NullTerminated(), WorldMapLabelSize.loginType); this.clearIsFriend(); this.clearIsInClanChat(); if (this == class215.localPlayer) { @@ -290,10 +290,10 @@ public final class Player extends Actor { this.appearance.update(var4, var9, var2 == 1, var3); } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(S)Z", - garbageValue = "-6206" + signature = "(B)Z", + garbageValue = "57" ) @Export("isFriend") boolean isFriend() { @@ -304,30 +304,30 @@ public final class Player extends Actor { return this.isFriendTriBool == TriBool.TriBool_true; } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( signature = "(B)V", - garbageValue = "68" + garbageValue = "1" ) @Export("clearIsFriend") void clearIsFriend() { this.isFriendTriBool = TriBool.TriBool_unknown; } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "-51176527" + garbageValue = "-1426797155" ) @Export("checkIsFriend") void checkIsFriend() { - this.isFriendTriBool = PacketWriter.friendSystem.isFriendAndHasWorld(this.username) ? TriBool.TriBool_true : TriBool.TriBool_false; + this.isFriendTriBool = VertexNormal.friendSystem.isFriendAndHasWorld(this.username) ? TriBool.TriBool_true : TriBool.TriBool_false; } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( signature = "(I)Z", - garbageValue = "-184998769" + garbageValue = "1498117074" ) @Export("isClanMember") boolean isClanMember() { @@ -338,48 +338,48 @@ public final class Player extends Actor { return this.isInClanChat == TriBool.TriBool_true; } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "1691080178" + garbageValue = "-1542877638" ) @Export("clearIsInClanChat") void clearIsInClanChat() { this.isInClanChat = TriBool.TriBool_unknown; } - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "(S)V", - garbageValue = "1126" + signature = "(I)V", + garbageValue = "14697600" ) @Export("updateIsInClanChat") void updateIsInClanChat() { - this.isInClanChat = class4.clanChat != null && class4.clanChat.contains(this.username) ? TriBool.TriBool_true : TriBool.TriBool_false; + this.isInClanChat = InterfaceParent.clanChat != null && InterfaceParent.clanChat.contains(this.username) ? TriBool.TriBool_true : TriBool.TriBool_false; } - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "(S)I", - garbageValue = "11776" + signature = "(B)I", + garbageValue = "86" ) @Export("transformedSize") int transformedSize() { - return this.appearance != null && this.appearance.npcTransformId != -1 ? SecureRandomCallable.getNpcDefinition(this.appearance.npcTransformId).size : 1; + return this.appearance != null && this.appearance.npcTransformId != -1 ? VarcInt.getNpcDefinition(this.appearance.npcTransformId).size : 1; } - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedSignature( - signature = "(B)Ldv;", - garbageValue = "-40" + signature = "(I)Ldf;", + garbageValue = "-174129419" ) @Export("getModel") protected final Model getModel() { if (this.appearance == null) { return null; } else { - SequenceDefinition var1 = super.sequence != -1 && super.sequenceDelay == 0 ? PlayerType.SequenceDefinition_get(super.sequence) : null; - SequenceDefinition var2 = super.movementSequence == -1 || this.isUnanimated || super.movementSequence == super.readySequence && var1 != null ? null : PlayerType.SequenceDefinition_get(super.movementSequence); + SequenceDefinition var1 = super.sequence != -1 && super.sequenceDelay == 0 ? GrandExchangeOfferAgeComparator.SequenceDefinition_get(super.sequence) : null; + SequenceDefinition var2 = super.movementSequence == -1 || this.isUnanimated || super.readySequence == super.movementSequence && var1 != null ? null : GrandExchangeOfferAgeComparator.SequenceDefinition_get(super.movementSequence); Model var3 = this.appearance.getModel(var1, super.sequenceFrame, var2, super.movementFrame); if (var3 == null) { return null; @@ -389,9 +389,9 @@ public final class Player extends Actor { Model var4; Model[] var5; if (!this.isUnanimated && super.spotAnimation != -1 && super.spotAnimationFrame != -1) { - var4 = MenuAction.SpotAnimationDefinition_get(super.spotAnimation).getModel(super.spotAnimationFrame); + var4 = WorldMapRegion.SpotAnimationDefinition_get(super.spotAnimation).getModel(super.spotAnimationFrame); if (var4 != null) { - var4.offsetBy(0, -super.field965, 0); + var4.offsetBy(0, -super.field996, 0); var5 = new Model[]{var3, var4}; var3 = new Model(var5, 2); } @@ -404,7 +404,7 @@ public final class Player extends Actor { if (Client.cycle >= this.animationCycleStart && Client.cycle < this.animationCycleEnd) { var4 = this.model0; - var4.offsetBy(this.field620 * 4096 - super.x, this.tileHeight2 - this.tileHeight, this.field613 * 4096 - super.y); + var4.offsetBy(this.field623 * 4096 - super.x, this.tileHeight2 - this.tileHeight, this.field617 * 4096 - super.y); if (super.orientation == 512) { var4.rotateY90Ccw(); var4.rotateY90Ccw(); @@ -429,7 +429,7 @@ public final class Player extends Actor { var4.rotateY90Ccw(); } - var4.offsetBy(super.x - this.field620 * 4096, this.tileHeight - this.tileHeight2, super.y - this.field613 * 4096); + var4.offsetBy(super.x - this.field623 * 4096, this.tileHeight - this.tileHeight2, super.y - this.field617 * 4096); } } @@ -439,17 +439,17 @@ public final class Player extends Actor { } } - @ObfuscatedName("d") + @ObfuscatedName("i") @ObfuscatedSignature( signature = "(IIBI)V", - garbageValue = "-1935410968" + garbageValue = "968915391" ) - final void method1334(int var1, int var2, byte var3) { - if (super.sequence != -1 && PlayerType.SequenceDefinition_get(super.sequence).field3513 == 1) { + final void method1255(int var1, int var2, byte var3) { + if (super.sequence != -1 && GrandExchangeOfferAgeComparator.SequenceDefinition_get(super.sequence).field3515 == 1) { super.sequence = -1; } - super.field934 = -1; + super.field965 = -1; if (var1 >= 0 && var1 < 104 && var2 >= 0 && var2 < 104) { if (super.pathX[0] >= 0 && super.pathX[0] < 104 && super.pathY[0] >= 0 && super.pathY[0] < 104) { if (var3 == 2) { @@ -458,16 +458,16 @@ public final class Player extends Actor { int var6 = super.pathY[0]; int var7 = this.transformedSize(); if (var5 >= var7 && var5 < 104 - var7 && var6 >= var7 && var6 < 104 - var7 && var1 >= var7 && var1 < 104 - var7 && var2 >= var7 && var2 < 104 - var7) { - int var8 = Message.method1311(var5, var6, this.transformedSize(), WorldMapCacheName.method685(var1, var2), Client.collisionMaps[this.Client_plane], true, Client.field890, Client.field906); + int var8 = ParamDefinition.method4612(var5, var6, this.transformedSize(), WorldMapIcon_1.method321(var1, var2), Client.collisionMaps[this.plane], true, Client.field916, Client.field862); if (var8 >= 1) { for (int var9 = 0; var9 < var8 - 1; ++var9) { - var4.method1352(Client.field890[var9], Client.field906[var9], (byte)2); + var4.method1250(Client.field916[var9], Client.field862[var9], (byte)2); } } } } - this.method1352(var1, var2, var3); + this.method1250(var1, var2, var3); } else { this.resetPath(var1, var2); } @@ -477,29 +477,29 @@ public final class Player extends Actor { } - @ObfuscatedName("m") + @ObfuscatedName("k") @ObfuscatedSignature( signature = "(III)V", - garbageValue = "1427222618" + garbageValue = "1311656261" ) @Export("resetPath") void resetPath(int var1, int var2) { super.pathLength = 0; - super.field983 = 0; - super.field982 = 0; + super.field994 = 0; + super.field976 = 0; super.pathX[0] = var1; super.pathY[0] = var2; int var3 = this.transformedSize(); - super.x = super.pathX[0] * 128 + var3 * 64; + super.x = var3 * 64 + super.pathX[0] * 128; super.y = super.pathY[0] * 128 + var3 * 64; } - @ObfuscatedName("p") + @ObfuscatedName("x") @ObfuscatedSignature( signature = "(IIBI)V", - garbageValue = "-2040004615" + garbageValue = "2140265482" ) - final void method1352(int var1, int var2, byte var3) { + final void method1250(int var1, int var2, byte var3) { if (super.pathLength < 9) { ++super.pathLength; } @@ -515,53 +515,23 @@ public final class Player extends Actor { super.pathTraversed[0] = var3; } - @ObfuscatedName("h") + @ObfuscatedName("o") @ObfuscatedSignature( - signature = "(B)Z", - garbageValue = "-25" + signature = "(I)Z", + garbageValue = "-968027489" ) @Export("isVisible") final boolean isVisible() { return this.appearance != null; } - @ObfuscatedName("gi") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Lbj;ZI)V", - garbageValue = "1425328760" + signature = "(Lhf;Lhf;I)V", + garbageValue = "2087560410" ) - @Export("addPlayerToScene") - static void addPlayerToScene(Player var0, boolean var1) { - if (var0 != null && var0.isVisible() && !var0.isHidden) { - var0.isUnanimated = false; - if ((Client.isLowDetail && Players.Players_count > 50 || Players.Players_count > 200) && var1 && var0.readySequence == var0.movementSequence) { - var0.isUnanimated = true; - } - - int var2 = var0.x >> 7; - int var3 = var0.y >> 7; - if (var2 >= 0 && var2 < 104 && var3 >= 0 && var3 < 104) { - long var4 = class160.calculateTag(0, 0, 0, false, var0.index); - if (var0.model0 != null && Client.cycle >= var0.animationCycleStart && Client.cycle < var0.animationCycleEnd) { - var0.isUnanimated = false; - var0.tileHeight = GraphicsObject.getTileHeight(var0.x, var0.y, Client_plane); - var0.playerCycle = Client.cycle; - WorldMapArea.scene.addNullableObject(Client_plane, var0.x, var0.y, var0.tileHeight, 60, var0, var0.rotation, var4, var0.field595, var0.field611, var0.field612, var0.field604); - } else { - if ((var0.x & 127) == 64 && (var0.y & 127) == 64) { - if (Client.tileLastDrawnActor[var2][var3] == Client.viewportDrawCount) { - return; - } - - Client.tileLastDrawnActor[var2][var3] = Client.viewportDrawCount; - } - - var0.tileHeight = GraphicsObject.getTileHeight(var0.x, var0.y, Client_plane); - var0.playerCycle = Client.cycle; - WorldMapArea.scene.drawEntity(Client_plane, var0.x, var0.y, var0.tileHeight, 60, var0, var0.rotation, var4, var0.isWalking); - } - } - } - + public static void method1285(AbstractArchive var0, AbstractArchive var1) { + HealthBarDefinition.HealthBarDefinition_archive = var0; + HealthBarDefinition.HitSplatDefinition_spritesArchive = var1; } } diff --git a/runescape-client/src/main/java/PlayerAppearance.java b/runescape-client/src/main/java/PlayerAppearance.java index 5ff3ffeeb2..dfaab89733 100644 --- a/runescape-client/src/main/java/PlayerAppearance.java +++ b/runescape-client/src/main/java/PlayerAppearance.java @@ -4,57 +4,60 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("he") +@ObfuscatedName("hd") @Implements("PlayerAppearance") public class PlayerAppearance { - @ObfuscatedName("c") - public static short[] field2519; - @ObfuscatedName("o") - public static short[][] field2520; - @ObfuscatedName("m") + @ObfuscatedName("h") + public static short[] field2548; + @ObfuscatedName("w") + public static short[] field2542; + @ObfuscatedName("k") @Export("equipmentIndices") static final int[] equipmentIndices; - @ObfuscatedName("p") + @ObfuscatedName("x") @ObfuscatedSignature( - signature = "Leb;" + signature = "Lef;" ) @Export("PlayerAppearance_cachedModels") static EvictingDualNodeHashTable PlayerAppearance_cachedModels; - @ObfuscatedName("a") + @ObfuscatedName("eo") + static int[] field2552; + @ObfuscatedName("u") @Export("equipment") int[] equipment; - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("bodyColors") int[] bodyColors; - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("isFemale") public boolean isFemale; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = -1447721329 + intValue = -1659743431 ) @Export("npcTransformId") public int npcTransformId; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - longValue = 3547676045736653443L + longValue = 8570520165784208047L ) - long field2517; - @ObfuscatedName("l") + @Export("hash") + long hash; + @ObfuscatedName("p") @ObfuscatedGetter( - longValue = 826558689471794127L + longValue = -3088053679670010611L ) - long field2518; + long field2546; static { equipmentIndices = new int[]{8, 11, 4, 6, 9, 7, 10}; PlayerAppearance_cachedModels = new EvictingDualNodeHashTable(260); } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "([I[IZII)V", - garbageValue = "2098683582" + garbageValue = "-1744492323" ) @Export("update") public void update(int[] var1, int[] var2, boolean var3, int var4) { @@ -63,7 +66,7 @@ public class PlayerAppearance { for (int var5 = 0; var5 < 7; ++var5) { for (int var6 = 0; var6 < KitDefinition.KitDefinition_fileCount; ++var6) { - KitDefinition var7 = BufferedSource.KitDefinition_get(var6); + KitDefinition var7 = Players.KitDefinition_get(var6); if (var7 != null && !var7.nonSelectable && var7.bodypartID == (var3 ? 7 : 0) + var5) { var1[equipmentIndices[var5]] = var6 + 256; break; @@ -79,10 +82,10 @@ public class PlayerAppearance { this.setHash(); } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(IZI)V", - garbageValue = "429844211" + signature = "(IZB)V", + garbageValue = "7" ) @Export("changeAppearance") public void changeAppearance(int var1, boolean var2) { @@ -105,8 +108,8 @@ public class PlayerAppearance { } } - var4 = BufferedSource.KitDefinition_get(var3); - } while(var4 == null || var4.nonSelectable || var1 + (this.isFemale ? 7 : 0) != var4.bodypartID); + var4 = Players.KitDefinition_get(var3); + } while(var4 == null || var4.nonSelectable || var4.bodypartID != var1 + (this.isFemale ? 7 : 0)); this.equipment[equipmentIndices[var1]] = var3 + 256; this.setHash(); @@ -114,50 +117,37 @@ public class PlayerAppearance { } } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(IZB)V", - garbageValue = "1" + signature = "(IZI)V", + garbageValue = "1401975523" ) - public void method4156(int var1, boolean var2) { + public void method4068(int var1, boolean var2) { int var3 = this.bodyColors[var1]; - boolean var4; if (!var2) { do { --var3; if (var3 < 0) { - var3 = field2520[var1].length - 1; + var3 = ArchiveLoader.field533[var1].length - 1; } - - if (var1 == 4 && var3 >= 8) { - var4 = false; - } else { - var4 = true; - } - } while(!var4); + } while(!RouteStrategy.method3638(var1, var3)); } else { do { ++var3; - if (var3 >= field2520[var1].length) { + if (var3 >= ArchiveLoader.field533[var1].length) { var3 = 0; } - - if (var1 == 4 && var3 >= 8) { - var4 = false; - } else { - var4 = true; - } - } while(!var4); + } while(!RouteStrategy.method3638(var1, var3)); } this.bodyColors[var1] = var3; this.setHash(); } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(ZI)V", - garbageValue = "864833529" + signature = "(ZB)V", + garbageValue = "18" ) @Export("changeSex") public void changeSex(boolean var1) { @@ -166,10 +156,10 @@ public class PlayerAppearance { } } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(Lkc;I)V", - garbageValue = "65280" + signature = "(Lkg;B)V", + garbageValue = "-112" ) @Export("write") public void write(Buffer var1) { @@ -191,72 +181,83 @@ public class PlayerAppearance { } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "1536337357" + garbageValue = "1306042907" ) @Export("setHash") - void setHash() { - long var1 = this.field2517; + void setHash() + { + long var1 = this.hash; int var3 = this.equipment[5]; int var4 = this.equipment[9]; this.equipment[5] = var4; this.equipment[9] = var3; - this.field2517 = 0L; + this.hash = 0L; int var5; - for (var5 = 0; var5 < 12; ++var5) { - this.field2517 <<= 4; - if (this.equipment[var5] >= 256) { - this.field2517 += (long)(this.equipment[var5] - 256); + for (var5 = 0; var5 < 12; ++var5) + { + this.hash <<= 4; + if (this.equipment[var5] >= 256) + { + this.hash += (long) (this.equipment[var5] - 256); } } - if (this.equipment[0] >= 256) { - this.field2517 += (long)(this.equipment[0] - 256 >> 4); + if (this.equipment[0] >= 256) + { + this.hash += (long) (this.equipment[0] - 256 >> 4); } - if (this.equipment[1] >= 256) { - this.field2517 += (long)(this.equipment[1] - 256 >> 8); + if (this.equipment[1] >= 256) + { + this.hash += (long) (this.equipment[1] - 256 >> 8); } - for (var5 = 0; var5 < 5; ++var5) { - this.field2517 <<= 3; - this.field2517 += (long)this.bodyColors[var5]; + for (var5 = 0; var5 < 5; ++var5) + { + this.hash <<= 3; + this.hash += (long) this.bodyColors[var5]; } - this.field2517 <<= 1; - this.field2517 += (long)(this.isFemale ? 1 : 0); + this.hash <<= 1; + this.hash += (long) (this.isFemale ? 1 : 0); this.equipment[5] = var3; this.equipment[9] = var4; - if (var1 != 0L && var1 != this.field2517) { + if (0L != var1 && this.hash != var1) + { PlayerAppearance_cachedModels.remove(var1); } } - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "(Liv;ILiv;II)Ldv;", - garbageValue = "-1006380079" + signature = "(Liy;ILiy;IB)Ldf;", + garbageValue = "20" ) @Export("getModel") public Model getModel(SequenceDefinition var1, int var2, SequenceDefinition var3, int var4) { if (this.npcTransformId != -1) { - return SecureRandomCallable.getNpcDefinition(this.npcTransformId).getModel(var1, var2, var3, var4); - } else { - long var5 = this.field2517; + return VarcInt.getNpcDefinition(this.npcTransformId).getModel(var1, var2, var3, var4); + } else + { + long var5 = this.hash; int[] var7 = this.equipment; - if (var1 != null && (var1.shield >= 0 || var1.weapon >= 0)) { + if (var1 != null && (var1.shield >= 0 || var1.weapon >= 0)) + { var7 = new int[12]; - for (int var15 = 0; var15 < 12; ++var15) { + for (int var15 = 0; var15 < 12; ++var15) + { var7[var15] = this.equipment[var15]; } - if (var1.shield >= 0) { - var5 += (long)(var1.shield - this.equipment[5] << 40); + if (var1.shield >= 0) + { + var5 += (long) (var1.shield - this.equipment[5] << 40); var7[5] = var1.shield; } @@ -273,18 +274,18 @@ public class PlayerAppearance { int var11; for (int var10 = 0; var10 < 12; ++var10) { var11 = var7[var10]; - if (var11 >= 256 && var11 < 512 && !BufferedSource.KitDefinition_get(var11 - 256).ready()) { + if (var11 >= 256 && var11 < 512 && !Players.KitDefinition_get(var11 - 256).ready()) { var9 = true; } - if (var11 >= 512 && !class222.ItemDefinition_get(var11 - 512).hasNoValidModel(this.isFemale)) { + if (var11 >= 512 && !Interpreter.ItemDefinition_get(var11 - 512).hasNoValidModel(this.isFemale)) { var9 = true; } } if (var9) { - if (-1L != this.field2518) { - var8 = (Model)PlayerAppearance_cachedModels.get(this.field2518); + if (this.field2546 != -1L) { + var8 = (Model)PlayerAppearance_cachedModels.get(this.field2546); } if (var8 == null) { @@ -301,14 +302,14 @@ public class PlayerAppearance { var13 = var7[var12]; ModelData var14; if (var13 >= 256 && var13 < 512) { - var14 = BufferedSource.KitDefinition_get(var13 - 256).getModelData(); + var14 = Players.KitDefinition_get(var13 - 256).getModelData(); if (var14 != null) { var16[var11++] = var14; } } if (var13 >= 512) { - var14 = class222.ItemDefinition_get(var13 - 512).method4790(this.isFemale); + var14 = Interpreter.ItemDefinition_get(var13 - 512).method4746(this.isFemale); if (var14 != null) { var16[var11++] = var14; } @@ -318,18 +319,18 @@ public class PlayerAppearance { ModelData var18 = new ModelData(var16, var11); for (var13 = 0; var13 < 5; ++var13) { - if (this.bodyColors[var13] < field2520[var13].length) { - var18.recolor(field2519[var13], field2520[var13][this.bodyColors[var13]]); + if (this.bodyColors[var13] < ArchiveLoader.field533[var13].length) { + var18.recolor(field2548[var13], ArchiveLoader.field533[var13][this.bodyColors[var13]]); } - if (this.bodyColors[var13] < class195.field2359[var13].length) { - var18.recolor(class326.field3881[var13], class195.field2359[var13][this.bodyColors[var13]]); + if (this.bodyColors[var13] < TileItemPile.field1537[var13].length) { + var18.recolor(field2542[var13], TileItemPile.field1537[var13][this.bodyColors[var13]]); } } var8 = var18.toModel(64, 850, -30, -50, -30); PlayerAppearance_cachedModels.put(var8, var5); - this.field2518 = var5; + this.field2546 = var5; } } @@ -350,26 +351,26 @@ public class PlayerAppearance { } } - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "(B)Ldu;", - garbageValue = "-58" + signature = "(I)Ldq;", + garbageValue = "1920849023" ) @Export("getModelData") ModelData getModelData() { if (this.npcTransformId != -1) { - return SecureRandomCallable.getNpcDefinition(this.npcTransformId).getModelData(); + return VarcInt.getNpcDefinition(this.npcTransformId).getModelData(); } else { boolean var1 = false; int var3; for (int var2 = 0; var2 < 12; ++var2) { var3 = this.equipment[var2]; - if (var3 >= 256 && var3 < 512 && !BufferedSource.KitDefinition_get(var3 - 256).method4602()) { + if (var3 >= 256 && var3 < 512 && !Players.KitDefinition_get(var3 - 256).method4535()) { var1 = true; } - if (var3 >= 512 && !class222.ItemDefinition_get(var3 - 512).method4791(this.isFemale)) { + if (var3 >= 512 && !Interpreter.ItemDefinition_get(var3 - 512).method4754(this.isFemale)) { var1 = true; } } @@ -385,14 +386,14 @@ public class PlayerAppearance { var5 = this.equipment[var4]; ModelData var6; if (var5 >= 256 && var5 < 512) { - var6 = BufferedSource.KitDefinition_get(var5 - 256).getKitDefinitionModels(); + var6 = Players.KitDefinition_get(var5 - 256).getKitDefinitionModels(); if (var6 != null) { var7[var3++] = var6; } } if (var5 >= 512) { - var6 = class222.ItemDefinition_get(var5 - 512).method4792(this.isFemale); + var6 = Interpreter.ItemDefinition_get(var5 - 512).method4755(this.isFemale); if (var6 != null) { var7[var3++] = var6; } @@ -402,12 +403,12 @@ public class PlayerAppearance { ModelData var8 = new ModelData(var7, var3); for (var5 = 0; var5 < 5; ++var5) { - if (this.bodyColors[var5] < field2520[var5].length) { - var8.recolor(field2519[var5], field2520[var5][this.bodyColors[var5]]); + if (this.bodyColors[var5] < ArchiveLoader.field533[var5].length) { + var8.recolor(field2548[var5], ArchiveLoader.field533[var5][this.bodyColors[var5]]); } - if (this.bodyColors[var5] < class195.field2359[var5].length) { - var8.recolor(class326.field3881[var5], class195.field2359[var5][this.bodyColors[var5]]); + if (this.bodyColors[var5] < TileItemPile.field1537[var5].length) { + var8.recolor(field2542[var5], TileItemPile.field1537[var5][this.bodyColors[var5]]); } } @@ -416,121 +417,201 @@ public class PlayerAppearance { } } - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedSignature( - signature = "(I)I", - garbageValue = "2091261693" + signature = "(B)I", + garbageValue = "-123" ) @Export("getChatHeadId") public int getChatHeadId() { - return this.npcTransformId == -1 ? (this.equipment[0] << 15) + this.equipment[1] + (this.equipment[11] << 5) + (this.equipment[8] << 10) + (this.bodyColors[0] << 25) + (this.bodyColors[4] << 20) : 305419896 + SecureRandomCallable.getNpcDefinition(this.npcTransformId).id; + return this.npcTransformId == -1 ? (this.equipment[0] << 15) + this.equipment[1] + (this.equipment[11] << 5) + (this.equipment[8] << 10) + (this.bodyColors[0] << 25) + (this.bodyColors[4] << 20) : 305419896 + VarcInt.getNpcDefinition(this.npcTransformId).id; } - @ObfuscatedName("a") + @ObfuscatedName("jz") @ObfuscatedSignature( - signature = "(I)J", - garbageValue = "100440409" + signature = "(Lhl;III)V", + garbageValue = "1826770393" ) - @Export("currentTimeMillis") - public static final synchronized long currentTimeMillis() { - long var0 = System.currentTimeMillis(); - if (var0 < class296.field3684) { - class296.field3683 += class296.field3684 - var0; + static final void method4079(Widget var0, int var1, int var2) { + if (var0.buttonType == 1) { + WorldMapSprite.insertMenuItemNoShift(var0.buttonText, "", 24, 0, 0, var0.id); } - class296.field3684 = var0; - return var0 + class296.field3683; - } - - @ObfuscatedName("a") - @ObfuscatedSignature( - signature = "(II)Z", - garbageValue = "-994897132" - ) - @Export("isWorldMapEvent") - public static boolean isWorldMapEvent(int var0) { - return var0 == 10 || var0 == 11 || var0 == 12 || var0 == 13 || var0 == 14 || var0 == 15 || var0 == 16 || var0 == 17; - } - - @ObfuscatedName("v") - @ObfuscatedSignature( - signature = "(Lhq;Ljava/lang/String;Ljava/lang/String;I)[Llw;", - garbageValue = "-1961704142" - ) - public static IndexedSprite[] method4160(AbstractArchive var0, String var1, String var2) { - int var3 = var0.getGroupId(var1); - int var4 = var0.getFileId(var3, var2); - IndexedSprite[] var5; - if (!class32.method618(var0, var3, var4)) { - var5 = null; - } else { - IndexedSprite[] var7 = new IndexedSprite[class325.SpriteBuffer_spriteCount]; - - for (int var8 = 0; var8 < class325.SpriteBuffer_spriteCount; ++var8) { - IndexedSprite var9 = var7[var8] = new IndexedSprite(); - var9.width = class325.SpriteBuffer_spriteWidth; - var9.height = class325.SpriteBuffer_spriteHeight; - var9.xOffset = SecureRandomFuture.SpriteBuffer_xOffsets[var8]; - var9.yOffset = HealthBar.SpriteBuffer_yOffsets[var8]; - var9.subWidth = SecureRandomCallable.SpriteBuffer_spriteWidths[var8]; - var9.subHeight = AttackOption.SpriteBuffer_spriteHeights[var8]; - var9.palette = class325.SpriteBuffer_spritePalette; - var9.pixels = class325.SpriteBuffer_pixels[var8]; + String var3; + if (var0.buttonType == 2 && !Client.isSpellSelected) { + var3 = LoginPacket.method3662(var0); + if (var3 != null) { + WorldMapSprite.insertMenuItemNoShift(var3, class222.colorStartTag(65280) + var0.spellName, 25, 0, -1, var0.id); } - - WorldMapData_1.method787(); - var5 = var7; } - return var5; - } + if (var0.buttonType == 3) { + WorldMapSprite.insertMenuItemNoShift("Close", "", 26, 0, 0, var0.id); + } - @ObfuscatedName("v") - @ObfuscatedSignature( - signature = "(IB)V", - garbageValue = "103" - ) - public static void method4191(int var0) { - if (var0 != -1) { - if (class215.Widget_loadedInterfaces[var0]) { - Coord.Widget_archive.clearFilesGroup(var0); - if (Widget.Widget_interfaceComponents[var0] != null) { - boolean var1 = true; + if (var0.buttonType == 4) { + WorldMapSprite.insertMenuItemNoShift(var0.buttonText, "", 28, 0, 0, var0.id); + } - for (int var2 = 0; var2 < Widget.Widget_interfaceComponents[var0].length; ++var2) { - if (Widget.Widget_interfaceComponents[var0][var2] != null) { - if (Widget.Widget_interfaceComponents[var0][var2].type != 2) { - Widget.Widget_interfaceComponents[var0][var2] = null; - } else { - var1 = false; + if (var0.buttonType == 5) { + WorldMapSprite.insertMenuItemNoShift(var0.buttonText, "", 29, 0, 0, var0.id); + } + + if (var0.buttonType == 6 && Client.meslayerContinueWidget == null) { + WorldMapSprite.insertMenuItemNoShift(var0.buttonText, "", 30, 0, -1, var0.id); + } + + int var4; + int var17; + if (var0.type == 2) { + var17 = 0; + + for (var4 = 0; var4 < var0.height; ++var4) { + for (int var5 = 0; var5 < var0.width; ++var5) { + int var6 = (var0.paddingX + 32) * var5; + int var7 = (var0.paddingY + 32) * var4; + if (var17 < 20) { + var6 += var0.inventoryXOffsets[var17]; + var7 += var0.inventoryYOffsets[var17]; + } + + if (var1 >= var6 && var2 >= var7 && var1 < var6 + 32 && var2 < var7 + 32) { + Client.dragItemSlotDestination = var17; + FloorOverlayDefinition.field3507 = var0; + if (var0.itemIds[var17] > 0) { + label318: { + ItemDefinition var8 = Interpreter.ItemDefinition_get(var0.itemIds[var17] - 1); + boolean var9; + int var10; + if (Client.isItemSelected == 1) { + var10 = MenuAction.getWidgetClickMask(var0); + var9 = (var10 >> 30 & 1) != 0; + if (var9) { + if (var0.id != class1.selectedItemWidget || var17 != class43.selectedItemSlot) { + WorldMapSprite.insertMenuItemNoShift("Use", Client.selectedItemName + " " + "->" + " " + class222.colorStartTag(16748608) + var8.name, 31, var8.id, var17, var0.id); + } + break label318; + } + } + + if (Client.isSpellSelected) { + var10 = MenuAction.getWidgetClickMask(var0); + var9 = (var10 >> 30 & 1) != 0; + if (var9) { + if ((Actor.selectedSpellFlags & 16) == 16) { + WorldMapSprite.insertMenuItemNoShift(Client.selectedSpellActionName, Client.selectedSpellName + " " + "->" + " " + class222.colorStartTag(16748608) + var8.name, 32, var8.id, var17, var0.id); + } + break label318; + } + } + + String[] var18 = var8.inventoryActions; + var10 = -1; + if (Client.shiftClickDrop && PendingSpawn.method1751()) { + var10 = var8.getShiftClickIndex(); + } + + int var12 = MenuAction.getWidgetClickMask(var0); + boolean var11 = (var12 >> 30 & 1) != 0; + if (var11) { + for (int var13 = 4; var13 >= 3; --var13) { + if (var13 != var10) { + WorldMapRegion.addWidgetItemMenuItem(var0, var8, var17, var13, false); + } + } + } + + Object var10000 = null; + if (class189.method3699(MenuAction.getWidgetClickMask(var0))) { + WorldMapSprite.insertMenuItemNoShift("Use", class222.colorStartTag(16748608) + var8.name, 38, var8.id, var17, var0.id); + } + + int var14 = MenuAction.getWidgetClickMask(var0); + boolean var21 = (var14 >> 30 & 1) != 0; + int var15; + if (var21) { + for (var15 = 2; var15 >= 0; --var15) { + if (var10 != var15) { + WorldMapRegion.addWidgetItemMenuItem(var0, var8, var17, var15, false); + } + } + + if (var10 >= 0) { + WorldMapRegion.addWidgetItemMenuItem(var0, var8, var17, var10, true); + } + } + + var18 = var0.itemActions; + if (var18 != null) { + for (var15 = 4; var15 >= 0; --var15) { + if (var18[var15] != null) { + byte var16 = 0; + if (var15 == 0) { + var16 = 39; + } + + if (var15 == 1) { + var16 = 40; + } + + if (var15 == 2) { + var16 = 41; + } + + if (var15 == 3) { + var16 = 42; + } + + if (var15 == 4) { + var16 = 43; + } + + WorldMapSprite.insertMenuItemNoShift(var18[var15], class222.colorStartTag(16748608) + var8.name, var16, var8.id, var17, var0.id); + } + } + } + + WorldMapSprite.insertMenuItemNoShift("Examine", class222.colorStartTag(16748608) + var8.name, 1005, var8.id, var17, var0.id); } } } - if (var1) { - Widget.Widget_interfaceComponents[var0] = null; - } - - class215.Widget_loadedInterfaces[var0] = false; + ++var17; } } } - } - @ObfuscatedName("ae") - @ObfuscatedSignature( - signature = "(Ldj;B)V", - garbageValue = "11" - ) - @Export("PcmStream_disable") - static final void PcmStream_disable(PcmStream var0) { - var0.active = false; - if (var0.sound != null) { - var0.sound.position = 0; - } + if (var0.isIf3) { + if (Client.isSpellSelected) { + var4 = MenuAction.getWidgetClickMask(var0); + boolean var22 = (var4 >> 21 & 1) != 0; + if (var22 && (Actor.selectedSpellFlags & 32) == 32) { + WorldMapSprite.insertMenuItemNoShift(Client.selectedSpellActionName, Client.selectedSpellName + " " + "->" + " " + var0.dataText, 58, 0, var0.childIndex, var0.id); + } + } else { + for (var17 = 9; var17 >= 5; --var17) { + String var19 = UrlRequest.method3361(var0, var17); + if (var19 != null) { + WorldMapSprite.insertMenuItemNoShift(var19, var0.dataText, 1007, var17 + 1, var0.childIndex, var0.id); + } + } - for (PcmStream var1 = var0.firstSubStream(); var1 != null; var1 = var0.nextSubStream()) { - PcmStream_disable(var1); + var3 = LoginPacket.method3662(var0); + if (var3 != null) { + WorldMapSprite.insertMenuItemNoShift(var3, var0.dataText, 25, 0, var0.childIndex, var0.id); + } + + for (var4 = 4; var4 >= 0; --var4) { + String var20 = UrlRequest.method3361(var0, var4); + if (var20 != null) { + class14.insertMenuItem(var20, var0.dataText, 57, var4 + 1, var0.childIndex, var0.id, var0.field2719); + } + } + + if (SoundCache.method2544(MenuAction.getWidgetClickMask(var0))) { + WorldMapSprite.insertMenuItemNoShift("Continue", "", 30, 0, var0.childIndex, var0.id); + } + } } } diff --git a/runescape-client/src/main/java/PlayerType.java b/runescape-client/src/main/java/PlayerType.java index de53e0478a..e529f18bd1 100644 --- a/runescape-client/src/main/java/PlayerType.java +++ b/runescape-client/src/main/java/PlayerType.java @@ -4,64 +4,62 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("hy") +@ObfuscatedName("hb") @Implements("PlayerType") public enum PlayerType implements Enumerated { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lhy;" + signature = "Lhb;" ) @Export("PlayerType_normal") PlayerType_normal(0, -1, true, false, true), - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lhy;" + signature = "Lhb;" ) @Export("PlayerType_playerModerator") PlayerType_playerModerator(1, 0, true, true, true), - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Lhy;" + signature = "Lhb;" ) @Export("PlayerType_jagexModerator") PlayerType_jagexModerator(2, 1, true, true, false), - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Lhy;" + signature = "Lhb;" ) @Export("PlayerType_ironman") PlayerType_ironman(3, 2, false, false, true), - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "Lhy;" + signature = "Lhb;" ) @Export("PlayerType_ultimateIronman") PlayerType_ultimateIronman(4, 3, false, false, true), - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "Lhy;" + signature = "Lhb;" ) @Export("PlayerType_hardcoreIronman") PlayerType_hardcoreIronman(5, 10, false, false, true); - @ObfuscatedName("k") - static int[] field3083; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedGetter( - intValue = 28008263 + intValue = 519677779 ) @Export("id") final int id; - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedGetter( - intValue = -573652869 + intValue = 2036327739 ) @Export("modIcon") public final int modIcon; - @ObfuscatedName("i") + @ObfuscatedName("w") @Export("isPrivileged") public final boolean isPrivileged; - @ObfuscatedName("d") + @ObfuscatedName("i") @Export("isUser") public final boolean isUser; @@ -72,65 +70,54 @@ public enum PlayerType implements Enumerated { this.isUser = var7; } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(I)I", - garbageValue = "-1993081102" + signature = "(B)I", + garbageValue = "7" ) @Export("rsOrdinal") public int rsOrdinal() { return this.id; } - @ObfuscatedName("a") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Llx;IIII)V", - garbageValue = "-964423468" + signature = "(ILke;Lij;I)V", + garbageValue = "1224063547" ) - static void method4285(Sprite var0, int var1, int var2, int var3) { - DemotingHashTable var4 = WorldMapRegion.WorldMapRegion_cachedSprites; - long var6 = (long)(var3 << 16 | var1 << 8 | var2); - var4.put(var0, var6, var0.pixels.length * 4); - } + static void method4210(int var0, ArchiveDisk var1, Archive var2) { + byte[] var3 = null; + synchronized(ArchiveDiskActionHandler.ArchiveDiskActionHandler_requestQueue) { + for (ArchiveDiskAction var5 = (ArchiveDiskAction)ArchiveDiskActionHandler.ArchiveDiskActionHandler_requestQueue.last(); var5 != null; var5 = (ArchiveDiskAction)ArchiveDiskActionHandler.ArchiveDiskActionHandler_requestQueue.previous()) { + if (var5.key == (long)var0 && var1 == var5.archiveDisk && var5.type == 0) { + var3 = var5.data; + break; + } + } + } - @ObfuscatedName("t") - @ObfuscatedSignature( - signature = "(II)Liv;", - garbageValue = "-872663018" - ) - @Export("SequenceDefinition_get") - public static SequenceDefinition SequenceDefinition_get(int var0) { - SequenceDefinition var1 = (SequenceDefinition)SequenceDefinition.SequenceDefinition_cached.get((long)var0); - if (var1 != null) { - return var1; + if (var3 != null) { + var2.load(var1, var0, var3, true); } else { - byte[] var2 = SequenceDefinition.SequenceDefinition_archive.takeFile(12, var0); - var1 = new SequenceDefinition(); - if (var2 != null) { - var1.decode(new Buffer(var2)); - } - - var1.postDecode(); - SequenceDefinition.SequenceDefinition_cached.put(var1, (long)var0); - return var1; + byte[] var4 = var1.read(var0); + var2.load(var1, var0, var4, true); } } - @ObfuscatedName("ku") + @ObfuscatedName("x") @ObfuscatedSignature( - signature = "(Lhi;IIII)V", - garbageValue = "-1541837446" + signature = "(Ljava/lang/CharSequence;I)Ljava/lang/String;", + garbageValue = "1655356407" ) - @Export("drawCompass") - static final void drawCompass(Widget var0, int var1, int var2, int var3) { - SpriteMask var4 = var0.getSpriteMask(false); - if (var4 != null) { - if (Client.minimapState < 3) { - class1.compass.drawRotatedMaskedCenteredAround(var1, var2, var4.width, var4.height, 25, 25, Client.camAngleY, 256, var4.xStarts, var4.xWidths); - } else { - Rasterizer2D.Rasterizer2D_fillMaskedRectangle(var1, var2, 0, var4.xStarts, var4.xWidths); - } + public static String method4212(CharSequence var0) { + int var2 = var0.length(); + char[] var3 = new char[var2]; + for (int var4 = 0; var4 < var2; ++var4) { + var3[var4] = '*'; } + + String var1 = new String(var3); + return var1; } } diff --git a/runescape-client/src/main/java/Players.java b/runescape-client/src/main/java/Players.java index d107441f6e..8097daa920 100644 --- a/runescape-client/src/main/java/Players.java +++ b/runescape-client/src/main/java/Players.java @@ -4,64 +4,67 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("cu") +@ObfuscatedName("cn") @Implements("Players") public class Players { - @ObfuscatedName("n") - static byte[] field1227; - @ObfuscatedName("q") - static byte[] field1228; - @ObfuscatedName("v") + @ObfuscatedName("b") + static byte[] field1246; + @ObfuscatedName("g") + static byte[] field1247; + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "[Lkc;" + signature = "[Lkg;" ) - static Buffer[] field1229; - @ObfuscatedName("l") + static Buffer[] field1248; + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = -1057935815 + intValue = 695859649 ) @Export("Players_count") static int Players_count; - @ObfuscatedName("c") + @ObfuscatedName("h") @Export("Players_indices") static int[] Players_indices; - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedGetter( - intValue = 1503324563 + intValue = -1613986531 ) @Export("Players_emptyIdxCount") static int Players_emptyIdxCount; - @ObfuscatedName("i") + @ObfuscatedName("w") @Export("Players_emptyIndices") static int[] Players_emptyIndices; - @ObfuscatedName("d") + @ObfuscatedName("i") @Export("Players_regions") static int[] Players_regions; - @ObfuscatedName("m") + @ObfuscatedName("k") @Export("Players_orientations") static int[] Players_orientations; - @ObfuscatedName("p") + @ObfuscatedName("x") @Export("Players_targetIndices") static int[] Players_targetIndices; - @ObfuscatedName("h") + @ObfuscatedName("o") @ObfuscatedGetter( - intValue = -1083709183 + intValue = 1909363063 ) @Export("Players_pendingUpdateCount") static int Players_pendingUpdateCount; - @ObfuscatedName("k") + @ObfuscatedName("e") @Export("Players_pendingUpdateIndices") static int[] Players_pendingUpdateIndices; - @ObfuscatedName("x") + @ObfuscatedName("n") @ObfuscatedSignature( - signature = "Lkc;" + signature = "Lkg;" ) - static Buffer field1238; + static Buffer field1252; + @ObfuscatedName("ac") + @Export("null_string") + protected static String null_string; static { - field1227 = new byte[2048]; - field1228 = new byte[2048]; - field1229 = new Buffer[2048]; + field1246 = new byte[2048]; + field1247 = new byte[2048]; + field1248 = new Buffer[2048]; Players_count = 0; Players_indices = new int[2048]; Players_emptyIdxCount = 0; @@ -71,30 +74,245 @@ public class Players { Players_targetIndices = new int[2048]; Players_pendingUpdateCount = 0; Players_pendingUpdateIndices = new int[2048]; - field1238 = new Buffer(new byte[5000]); + field1252 = new Buffer(new byte[5000]); } - @ObfuscatedName("i") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Ljava/lang/String;I)V", - garbageValue = "1609837921" + signature = "(II)Lie;", + garbageValue = "2117062492" ) - static final void method2308(String var0) { - StringBuilder var10000 = new StringBuilder(); - Object var10001 = null; - var10000 = var10000.append("Please remove ").append(var0); - var10001 = null; - String var1 = var10000.append(" from your ignore list first").toString(); - class30.addGameMessage(30, "", var1); + @Export("KitDefinition_get") + public static KitDefinition KitDefinition_get(int var0) { + KitDefinition var1 = (KitDefinition)KitDefinition.KitDefinition_cached.get((long)var0); + if (var1 != null) { + return var1; + } else { + byte[] var2 = class14.KitDefinition_archive.takeFile(3, var0); + var1 = new KitDefinition(); + if (var2 != null) { + var1.decode(new Buffer(var2)); + } + + KitDefinition.KitDefinition_cached.put(var1, (long)var0); + return var1; + } } - @ObfuscatedName("j") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "108" + signature = "(Lkj;ILbg;II)V", + garbageValue = "237761948" ) - static void method2298() { - Login.loginIndex = 24; - GrandExchangeOffer.setLoginResponseString("The game servers are currently being updated.", "Please wait a few minutes and try again.", ""); + static final void method2167(PacketBuffer var0, int var1, Player var2, int var3) { + byte var4 = -1; + if ((var3 & 512) != 0) { + var2.field946 = var0.method5633(); + var2.field979 = var0.method5772(); + var2.field978 = var0.method5633(); + var2.field980 = var0.method5637(); + var2.field934 = var0.method5719() + Client.cycle; + var2.field982 = var0.method5640() + Client.cycle; + var2.field983 = var0.method5719(); + if (var2.field630) { + var2.field946 += var2.tileX; + var2.field979 += var2.tileY; + var2.field978 += var2.tileX; + var2.field980 += var2.tileY; + var2.pathLength = 0; + } else { + var2.field946 += var2.pathX[0]; + var2.field979 += var2.pathY[0]; + var2.field978 += var2.pathX[0]; + var2.field980 += var2.pathY[0]; + var2.pathLength = 1; + } + + var2.field994 = 0; + } + + int var5; + if ((var3 & 2048) != 0) { + var2.spotAnimation = var0.method5719(); + var5 = var0.method5649(); + var2.field996 = var5 >> 16; + var2.field975 = (var5 & 65535) + Client.cycle; + var2.spotAnimationFrame = 0; + var2.spotAnimationFrameCycle = 0; + if (var2.field975 > Client.cycle) { + var2.spotAnimationFrame = -1; + } + + if (var2.spotAnimation == 65535) { + var2.spotAnimation = -1; + } + } + + if ((var3 & 1024) != 0) { + var4 = var0.readByte(); + } + + if ((var3 & 4096) != 0) { + field1247[var1] = var0.method5633(); + } + + if ((var3 & 128) != 0) { + var5 = var0.method5728(); + byte[] var6 = new byte[var5]; + Buffer var7 = new Buffer(var6); + var0.readBytes(var6, 0, var5); + field1248[var1] = var7; + var2.read(var7); + } + + if ((var3 & 256) != 0) { + for (var5 = 0; var5 < 3; ++var5) { + var2.actions[var5] = var0.readStringCp1252NullTerminated(); + } + } + + if ((var3 & 2) != 0) { + var2.overheadText = var0.readStringCp1252NullTerminated(); + if (var2.overheadText.charAt(0) == '~') { + var2.overheadText = var2.overheadText.substring(1); + GrandExchangeOfferAgeComparator.addGameMessage(2, var2.username.getName(), var2.overheadText); + } else if (var2 == class215.localPlayer) { + GrandExchangeOfferAgeComparator.addGameMessage(2, var2.username.getName(), var2.overheadText); + } + + var2.isAutoChatting = false; + var2.overheadTextColor = 0; + var2.overheadTextEffect = 0; + var2.overheadTextCyclesRemaining = 150; + } + + if ((var3 & 1) != 0) { + var2.targetIndex = var0.method5719(); + if (var2.targetIndex == 65535) { + var2.targetIndex = -1; + } + } + + if ((var3 & 32) != 0) { + var2.field965 = var0.method5640(); + if (var2.pathLength == 0) { + var2.orientation = var2.field965; + var2.field965 = -1; + } + } + + int var13; + if ((var3 & 16) != 0) { + var5 = var0.method5719(); + if (var5 == 65535) { + var5 = -1; + } + + var13 = var0.method5689(); + WorldMapRectangle.performPlayerAnimation(var2, var5, var13); + } + + int var8; + int var9; + int var12; + if ((var3 & 8) != 0) { + var5 = var0.readUnsignedByte(); + int var10; + int var11; + int var14; + if (var5 > 0) { + for (var13 = 0; var13 < var5; ++var13) { + var8 = -1; + var9 = -1; + var10 = -1; + var14 = var0.readUShortSmart(); + if (var14 == 32767) { + var14 = var0.readUShortSmart(); + var9 = var0.readUShortSmart(); + var8 = var0.readUShortSmart(); + var10 = var0.readUShortSmart(); + } else if (var14 != 32766) { + var9 = var0.readUShortSmart(); + } else { + var14 = -1; + } + + var11 = var0.readUShortSmart(); + var2.addHitSplat(var14, var9, var8, var10, Client.cycle, var11); + } + } + + var13 = var0.method5631(); + if (var13 > 0) { + for (var14 = 0; var14 < var13; ++var14) { + var8 = var0.readUShortSmart(); + var9 = var0.readUShortSmart(); + if (var9 != 32767) { + var10 = var0.readUShortSmart(); + var11 = var0.method5631(); + var12 = var9 > 0 ? var0.method5728() : var11; + var2.addHealthBar(var8, Client.cycle, var9, var10, var11, var12); + } else { + var2.removeHealthBar(var8); + } + } + } + } + + if ((var3 & 64) != 0) { + var5 = var0.method5719(); + PlayerType var16 = (PlayerType)CollisionMap.findEnumerated(class2.PlayerType_values(), var0.method5728()); + boolean var19 = var0.method5631() == 1; + var8 = var0.readUnsignedByte(); + var9 = var0.offset; + if (var2.username != null && var2.appearance != null) { + boolean var18 = false; + if (var16.isUser && VertexNormal.friendSystem.isIgnored(var2.username)) { + var18 = true; + } + + if (!var18 && Client.field756 == 0 && !var2.isHidden) { + field1252.offset = 0; + var0.readBytes(field1252.array, 0, var8); + field1252.offset = 0; + String var15 = AbstractFont.escapeBrackets(class191.method3720(GrandExchangeOfferUnitPriceComparator.method142(field1252))); + var2.overheadText = var15.trim(); + var2.overheadTextColor = var5 >> 8; + var2.overheadTextEffect = var5 & 255; + var2.overheadTextCyclesRemaining = 150; + var2.isAutoChatting = var19; + var2.field950 = var2 != class215.localPlayer && var16.isUser && "" != Client.field860 && var15.toLowerCase().indexOf(Client.field860) == -1; + if (var16.isPrivileged) { + var12 = var19 ? 91 : 1; + } else { + var12 = var19 ? 90 : 2; + } + + if (var16.modIcon != -1) { + GrandExchangeOfferAgeComparator.addGameMessage(var12, Client.method1749(var16.modIcon) + var2.username.getName(), var15); + } else { + GrandExchangeOfferAgeComparator.addGameMessage(var12, var2.username.getName(), var15); + } + } + } + + var0.offset = var9 + var8; + } + + if (var2.field630) { + if (var4 == 127) { + var2.resetPath(var2.tileX, var2.tileY); + } else { + byte var17; + if (var4 != -1) { + var17 = var4; + } else { + var17 = field1247[var1]; + } + + var2.method1255(var2.tileX, var2.tileY, var17); + } + } + } } diff --git a/runescape-client/src/main/java/PrivateChatMode.java b/runescape-client/src/main/java/PrivateChatMode.java index e9a18f3fe4..58c31f8a14 100644 --- a/runescape-client/src/main/java/PrivateChatMode.java +++ b/runescape-client/src/main/java/PrivateChatMode.java @@ -3,37 +3,37 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("kt") +@ObfuscatedName("kc") @Implements("PrivateChatMode") public class PrivateChatMode { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lkt;" + signature = "Lkc;" ) - static final PrivateChatMode field3778; - @ObfuscatedName("t") + static final PrivateChatMode field3794; + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lkt;" + signature = "Lkc;" ) - public static final PrivateChatMode field3779; - @ObfuscatedName("n") + public static final PrivateChatMode field3792; + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Lkt;" + signature = "Lkc;" ) - static final PrivateChatMode field3782; - @ObfuscatedName("q") + static final PrivateChatMode field3793; + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = 1472825575 + intValue = 749453675 ) - public final int field3781; + public final int field3795; static { - field3778 = new PrivateChatMode(0); - field3779 = new PrivateChatMode(1); - field3782 = new PrivateChatMode(2); + field3794 = new PrivateChatMode(0); + field3792 = new PrivateChatMode(1); + field3793 = new PrivateChatMode(2); } PrivateChatMode(int var1) { - this.field3781 = var1; + this.field3795 = var1; } } diff --git a/runescape-client/src/main/java/Projectile.java b/runescape-client/src/main/java/Projectile.java index cb4ab38fb3..fd5a77289b 100644 --- a/runescape-client/src/main/java/Projectile.java +++ b/runescape-client/src/main/java/Projectile.java @@ -1,132 +1,135 @@ +import java.lang.management.GarbageCollectorMXBean; +import java.lang.management.ManagementFactory; +import java.util.Iterator; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("cy") +@ObfuscatedName("ck") @Implements("Projectile") public final class Projectile extends Entity { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedGetter( - intValue = -464791279 + intValue = -305289079 ) @Export("id") int id; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = 458201439 + intValue = 1537056881 ) @Export("plane") int plane; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = -2076592615 + intValue = -337393941 ) @Export("sourceX") int sourceX; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = 623427875 + intValue = 2147267957 ) @Export("sourceY") int sourceY; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = -2041358603 + intValue = -428397397 ) @Export("sourceZ") int sourceZ; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = -10892035 + intValue = -590668105 ) @Export("endHeight") int endHeight; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedGetter( - intValue = -2134033129 + intValue = -849991729 ) @Export("cycleStart") int cycleStart; - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedGetter( - intValue = 1813713909 + intValue = -2024894323 ) @Export("cycleEnd") int cycleEnd; - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedGetter( - intValue = -580647449 + intValue = 565117017 ) @Export("slope") int slope; - @ObfuscatedName("d") + @ObfuscatedName("i") @ObfuscatedGetter( - intValue = -1691147323 + intValue = 1041468425 ) @Export("startHeight") int startHeight; - @ObfuscatedName("m") + @ObfuscatedName("k") @ObfuscatedGetter( - intValue = 1840141045 + intValue = -2008070407 ) @Export("targetIndex") int targetIndex; - @ObfuscatedName("p") + @ObfuscatedName("x") @Export("isMoving") boolean isMoving; - @ObfuscatedName("h") + @ObfuscatedName("o") @Export("x") double x; - @ObfuscatedName("k") + @ObfuscatedName("e") @Export("y") double y; - @ObfuscatedName("x") + @ObfuscatedName("n") @Export("z") double z; - @ObfuscatedName("j") + @ObfuscatedName("r") @Export("speedX") double speedX; - @ObfuscatedName("r") + @ObfuscatedName("c") @Export("speedY") double speedY; - @ObfuscatedName("e") + @ObfuscatedName("a") @Export("speed") double speed; - @ObfuscatedName("s") + @ObfuscatedName("d") @Export("speedZ") double speedZ; - @ObfuscatedName("b") + @ObfuscatedName("s") @Export("accelerationZ") double accelerationZ; - @ObfuscatedName("z") + @ObfuscatedName("t") @ObfuscatedGetter( - intValue = -893857759 + intValue = 1946189475 ) @Export("yaw") int yaw; - @ObfuscatedName("f") + @ObfuscatedName("m") @ObfuscatedGetter( - intValue = 915982703 + intValue = -2107591311 ) @Export("pitch") int pitch; - @ObfuscatedName("g") + @ObfuscatedName("v") @ObfuscatedSignature( - signature = "Liv;" + signature = "Liy;" ) @Export("sequenceDefinition") SequenceDefinition sequenceDefinition; - @ObfuscatedName("w") + @ObfuscatedName("q") @ObfuscatedGetter( - intValue = 83831929 + intValue = 1753493809 ) @Export("frame") int frame; - @ObfuscatedName("u") + @ObfuscatedName("l") @ObfuscatedGetter( - intValue = 324172471 + intValue = 339364237 ) @Export("frameCycle") int frameCycle; @@ -147,19 +150,19 @@ public final class Projectile extends Entity { this.targetIndex = var10; this.endHeight = var11; this.isMoving = false; - int var12 = MenuAction.SpotAnimationDefinition_get(this.id).sequence; + int var12 = WorldMapRegion.SpotAnimationDefinition_get(this.id).sequence; if (var12 != -1) { - this.sequenceDefinition = PlayerType.SequenceDefinition_get(var12); + this.sequenceDefinition = GrandExchangeOfferAgeComparator.SequenceDefinition_get(var12); } else { this.sequenceDefinition = null; } } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "(IIIII)V", - garbageValue = "-1390758796" + garbageValue = "1065266514" ) @Export("setDestination") final void setDestination(int var1, int var2, int var3, int var4) { @@ -168,8 +171,8 @@ public final class Projectile extends Entity { var5 = (double)(var1 - this.sourceX); double var7 = (double)(var2 - this.sourceY); double var9 = Math.sqrt(var5 * var5 + var7 * var7); - this.x = (double)this.sourceX + (double)this.startHeight * var5 / var9; - this.y = (double)this.sourceY + (double)this.startHeight * var7 / var9; + this.x = var5 * (double)this.startHeight / var9 + (double)this.sourceX; + this.y = (double)this.sourceY + var7 * (double)this.startHeight / var9; this.z = (double)this.sourceZ; } @@ -181,21 +184,21 @@ public final class Projectile extends Entity { this.speedZ = -this.speed * Math.tan(0.02454369D * (double)this.slope); } - this.accelerationZ = 2.0D * ((double)var3 - this.z - var5 * this.speedZ) / (var5 * var5); + this.accelerationZ = ((double)var3 - this.z - var5 * this.speedZ) * 2.0D / (var5 * var5); } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(II)V", - garbageValue = "931373856" + signature = "(IB)V", + garbageValue = "-67" ) @Export("advance") final void advance(int var1) { this.isMoving = true; - this.x += this.speedX * (double)var1; - this.y += (double)var1 * this.speedY; - this.z += this.accelerationZ * 0.5D * (double)var1 * (double)var1 + this.speedZ * (double)var1; - this.speedZ += this.accelerationZ * (double)var1; + this.x += (double)var1 * this.speedX; + this.y += this.speedY * (double)var1; + this.z += (double)var1 * this.accelerationZ * 0.5D * (double)var1 + (double)var1 * this.speedZ; + this.speedZ += (double)var1 * this.accelerationZ; this.yaw = (int)(Math.atan2(this.speedX, this.speedY) * 325.949D) + 1024 & 2047; this.pitch = (int)(Math.atan2(this.speedZ, this.speed) * 325.949D) & 2047; if (this.sequenceDefinition != null) { @@ -220,14 +223,14 @@ public final class Projectile extends Entity { } } - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedSignature( - signature = "(B)Ldv;", - garbageValue = "-40" + signature = "(I)Ldf;", + garbageValue = "-174129419" ) @Export("getModel") protected final Model getModel() { - SpotAnimationDefinition var1 = MenuAction.SpotAnimationDefinition_get(this.id); + SpotAnimationDefinition var1 = WorldMapRegion.SpotAnimationDefinition_get(this.id); Model var2 = var1.getModel(this.frame); if (var2 == null) { return null; @@ -237,26 +240,61 @@ public final class Projectile extends Entity { } } - @ObfuscatedName("a") + @ObfuscatedName("ap") @ObfuscatedSignature( - signature = "(Ljava/lang/CharSequence;I)I", - garbageValue = "1093152418" + signature = "(I)I", + garbageValue = "-118702125" ) - public static int method2268(CharSequence var0) { - int var1 = var0.length(); - int var2 = 0; + @Export("getGcDuration") + protected static int getGcDuration() { + int var0 = 0; + if (UserComparator9.garbageCollector == null || !UserComparator9.garbageCollector.isValid()) { + try { + Iterator var1 = ManagementFactory.getGarbageCollectorMXBeans().iterator(); - for (int var3 = 0; var3 < var1; ++var3) { - char var4 = var0.charAt(var3); - if (var4 <= 127) { - ++var2; - } else if (var4 <= 2047) { - var2 += 2; - } else { - var2 += 3; + while (var1.hasNext()) { + GarbageCollectorMXBean var2 = (GarbageCollectorMXBean)var1.next(); + if (var2.isValid()) { + UserComparator9.garbageCollector = var2; + GameShell.garbageCollectorLastCheckTimeMs = -1L; + GameShell.garbageCollectorLastCollectionTime = -1L; + } + } + } catch (Throwable var11) { } } - return var2; + if (UserComparator9.garbageCollector != null) { + long var9 = TaskHandler.currentTimeMillis(); + long var3 = UserComparator9.garbageCollector.getCollectionTime(); + if (GameShell.garbageCollectorLastCollectionTime != -1L) { + long var5 = var3 - GameShell.garbageCollectorLastCollectionTime; + long var7 = var9 - GameShell.garbageCollectorLastCheckTimeMs; + if (var7 != 0L) { + var0 = (int)(100L * var5 / var7); + } + } + + GameShell.garbageCollectorLastCollectionTime = var3; + GameShell.garbageCollectorLastCheckTimeMs = var9; + } + + return var0; + } + + @ObfuscatedName("fi") + @ObfuscatedSignature( + signature = "(I)V", + garbageValue = "1897306098" + ) + static final void method2137() { + if (Client.logoutTimer > 0) { + class40.logOut(); + } else { + Client.timer.method5072(); + class81.updateGameState(40); + PcmPlayer.field1413 = Client.packetWriter.getSocket(); + Client.packetWriter.removeSocket(); + } } } diff --git a/runescape-client/src/main/java/RasterProvider.java b/runescape-client/src/main/java/RasterProvider.java index 9c7460447b..39a3daddf3 100644 --- a/runescape-client/src/main/java/RasterProvider.java +++ b/runescape-client/src/main/java/RasterProvider.java @@ -14,13 +14,13 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ba") +@ObfuscatedName("bi") @Implements("RasterProvider") public final class RasterProvider extends AbstractRasterProvider { - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("component") Component component; - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("image") Image image; @@ -36,40 +36,40 @@ public final class RasterProvider extends AbstractRasterProvider { this.apply(); } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "(Ljava/awt/Component;I)V", - garbageValue = "-434500602" + garbageValue = "-1673763486" ) @Export("setComponent") final void setComponent(Component var1) { this.component = var1; } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( signature = "(IIB)V", - garbageValue = "3" + garbageValue = "0" ) @Export("drawFull") public final void drawFull(int var1, int var2) { this.drawFull0(this.component.getGraphics(), var1, var2); } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( signature = "(IIIII)V", - garbageValue = "-2086134046" + garbageValue = "-787999204" ) @Export("draw") public final void draw(int var1, int var2, int var3, int var4) { this.draw0(this.component.getGraphics(), var1, var2, var3, var4); } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( signature = "(Ljava/awt/Graphics;III)V", - garbageValue = "-1961186393" + garbageValue = "251368234" ) @Export("drawFull0") final void drawFull0(Graphics var1, int var2, int var3) { @@ -81,10 +81,10 @@ public final class RasterProvider extends AbstractRasterProvider { } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(Ljava/awt/Graphics;IIIII)V", - garbageValue = "-2057417095" + signature = "(Ljava/awt/Graphics;IIIIB)V", + garbageValue = "-67" ) @Export("draw0") final void draw0(Graphics var1, int var2, int var3, int var4, int var5) { diff --git a/runescape-client/src/main/java/Rasterizer2D.java b/runescape-client/src/main/java/Rasterizer2D.java index 3aa66387be..66431760a4 100644 --- a/runescape-client/src/main/java/Rasterizer2D.java +++ b/runescape-client/src/main/java/Rasterizer2D.java @@ -3,28 +3,28 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("lv") +@ObfuscatedName("ly") @Implements("Rasterizer2D") public class Rasterizer2D extends DualNode { - @ObfuscatedName("aw") + @ObfuscatedName("ad") @Export("Rasterizer2D_pixels") public static int[] Rasterizer2D_pixels; - @ObfuscatedName("ar") + @ObfuscatedName("am") @Export("Rasterizer2D_width") public static int Rasterizer2D_width; - @ObfuscatedName("aq") + @ObfuscatedName("ai") @Export("Rasterizer2D_height") public static int Rasterizer2D_height; - @ObfuscatedName("ad") + @ObfuscatedName("ag") @Export("Rasterizer2D_yClipStart") public static int Rasterizer2D_yClipStart; - @ObfuscatedName("ag") + @ObfuscatedName("ao") @Export("Rasterizer2D_yClipEnd") public static int Rasterizer2D_yClipEnd; - @ObfuscatedName("ak") + @ObfuscatedName("aw") @Export("Rasterizer2D_xClipStart") public static int Rasterizer2D_xClipStart; - @ObfuscatedName("av") + @ObfuscatedName("ak") @Export("Rasterizer2D_xClipEnd") public static int Rasterizer2D_xClipEnd; @@ -38,7 +38,7 @@ public class Rasterizer2D extends DualNode { protected Rasterizer2D() { } - @ObfuscatedName("ch") + @ObfuscatedName("dn") @Export("Rasterizer2D_replace") public static void Rasterizer2D_replace(int[] var0, int var1, int var2) { Rasterizer2D_pixels = var0; @@ -47,7 +47,7 @@ public class Rasterizer2D extends DualNode { Rasterizer2D_setClip(0, 0, var1, var2); } - @ObfuscatedName("cg") + @ObfuscatedName("ds") @Export("Rasterizer2D_resetClip") public static void Rasterizer2D_resetClip() { Rasterizer2D_xClipStart = 0; @@ -56,7 +56,7 @@ public class Rasterizer2D extends DualNode { Rasterizer2D_yClipEnd = Rasterizer2D_height; } - @ObfuscatedName("cf") + @ObfuscatedName("dh") @Export("Rasterizer2D_setClip") public static void Rasterizer2D_setClip(int var0, int var1, int var2, int var3) { if (var0 < 0) { @@ -81,7 +81,7 @@ public class Rasterizer2D extends DualNode { Rasterizer2D_yClipEnd = var3; } - @ObfuscatedName("ca") + @ObfuscatedName("dt") @Export("Rasterizer2D_expandClip") public static void Rasterizer2D_expandClip(int var0, int var1, int var2, int var3) { if (Rasterizer2D_xClipStart < var0) { @@ -102,7 +102,7 @@ public class Rasterizer2D extends DualNode { } - @ObfuscatedName("db") + @ObfuscatedName("dz") @Export("Rasterizer2D_getClipArray") public static void Rasterizer2D_getClipArray(int[] var0) { var0[0] = Rasterizer2D_xClipStart; @@ -111,7 +111,7 @@ public class Rasterizer2D extends DualNode { var0[3] = Rasterizer2D_yClipEnd; } - @ObfuscatedName("dq") + @ObfuscatedName("dr") @Export("Rasterizer2D_setClipArray") public static void Rasterizer2D_setClipArray(int[] var0) { Rasterizer2D_xClipStart = var0[0]; @@ -120,7 +120,7 @@ public class Rasterizer2D extends DualNode { Rasterizer2D_yClipEnd = var0[3]; } - @ObfuscatedName("dd") + @ObfuscatedName("dl") @Export("Rasterizer2D_clear") public static void Rasterizer2D_clear() { int var0 = 0; @@ -141,7 +141,7 @@ public class Rasterizer2D extends DualNode { } - @ObfuscatedName("dl") + @ObfuscatedName("db") @Export("drawCircle") static void drawCircle(int var0, int var1, int var2, int var3) { if (var2 == 0) { @@ -236,7 +236,7 @@ public class Rasterizer2D extends DualNode { } } - @ObfuscatedName("dm") + @ObfuscatedName("da") @Export("Rasterizer2D_drawCircleAlpha") public static void Rasterizer2D_drawCircleAlpha(int var0, int var1, int var2, int var3, int var4) { if (var4 != 0) { @@ -349,7 +349,7 @@ public class Rasterizer2D extends DualNode { } } - @ObfuscatedName("di") + @ObfuscatedName("dq") @Export("Rasterizer2D_fillRectangleAlpha") public static void Rasterizer2D_fillRectangleAlpha(int var0, int var1, int var2, int var3, int var4, int var5) { if (var0 < Rasterizer2D_xClipStart) { @@ -387,7 +387,7 @@ public class Rasterizer2D extends DualNode { } - @ObfuscatedName("dn") + @ObfuscatedName("do") @Export("Rasterizer2D_fillRectangle") public static void Rasterizer2D_fillRectangle(int var0, int var1, int var2, int var3, int var4) { if (var0 < Rasterizer2D_xClipStart) { @@ -421,7 +421,7 @@ public class Rasterizer2D extends DualNode { } - @ObfuscatedName("dr") + @ObfuscatedName("du") @Export("Rasterizer2D_fillRectangleGradient") public static void Rasterizer2D_fillRectangleGradient(int var0, int var1, int var2, int var3, int var4, int var5) { if (var2 > 0 && var3 > 0) { @@ -465,7 +465,7 @@ public class Rasterizer2D extends DualNode { } } - @ObfuscatedName("do") + @ObfuscatedName("dv") @Export("Rasterizer2D_fillRectangleGradientAlpha") public static void Rasterizer2D_fillRectangleGradientAlpha(int var0, int var1, int var2, int var3, int var4, int var5, int var6, int var7) { if (var2 > 0 && var3 > 0) { @@ -523,7 +523,7 @@ public class Rasterizer2D extends DualNode { } } - @ObfuscatedName("ds") + @ObfuscatedName("dg") @ObfuscatedSignature( signature = "(IIIIII[BIZ)V", garbageValue = "1" @@ -604,7 +604,7 @@ public class Rasterizer2D extends DualNode { } } - @ObfuscatedName("dz") + @ObfuscatedName("dm") @Export("Rasterizer2D_drawRectangle") public static void Rasterizer2D_drawRectangle(int var0, int var1, int var2, int var3, int var4) { Rasterizer2D_drawHorizontalLine(var0, var1, var2, var4); @@ -613,7 +613,7 @@ public class Rasterizer2D extends DualNode { Rasterizer2D_drawVerticalLine(var0 + var2 - 1, var1, var3, var4); } - @ObfuscatedName("dj") + @ObfuscatedName("df") @Export("Rasterizer2D_drawRectangleAlpha") public static void Rasterizer2D_drawRectangleAlpha(int var0, int var1, int var2, int var3, int var4, int var5) { Rasterizer2D_drawHorizontalLineAlpha(var0, var1, var2, var4, var5); @@ -625,7 +625,7 @@ public class Rasterizer2D extends DualNode { } - @ObfuscatedName("df") + @ObfuscatedName("dd") @Export("Rasterizer2D_drawHorizontalLine") public static void Rasterizer2D_drawHorizontalLine(int var0, int var1, int var2, int var3) { if (var1 >= Rasterizer2D_yClipStart && var1 < Rasterizer2D_yClipEnd) { @@ -647,7 +647,7 @@ public class Rasterizer2D extends DualNode { } } - @ObfuscatedName("da") + @ObfuscatedName("dy") @Export("Rasterizer2D_drawHorizontalLineAlpha") static void Rasterizer2D_drawHorizontalLineAlpha(int var0, int var1, int var2, int var3, int var4) { if (var1 >= Rasterizer2D_yClipStart && var1 < Rasterizer2D_yClipEnd) { @@ -677,7 +677,7 @@ public class Rasterizer2D extends DualNode { } } - @ObfuscatedName("dg") + @ObfuscatedName("eg") @Export("Rasterizer2D_drawVerticalLine") public static void Rasterizer2D_drawVerticalLine(int var0, int var1, int var2, int var3) { if (var0 >= Rasterizer2D_xClipStart && var0 < Rasterizer2D_xClipEnd) { @@ -699,7 +699,7 @@ public class Rasterizer2D extends DualNode { } } - @ObfuscatedName("dp") + @ObfuscatedName("ey") @Export("Rasterizer2D_drawVerticalLineAlpha") static void Rasterizer2D_drawVerticalLineAlpha(int var0, int var1, int var2, int var3, int var4) { if (var0 >= Rasterizer2D_xClipStart && var0 < Rasterizer2D_xClipEnd) { @@ -730,7 +730,7 @@ public class Rasterizer2D extends DualNode { } } - @ObfuscatedName("dy") + @ObfuscatedName("ec") @Export("Rasterizer2D_drawLine") public static void Rasterizer2D_drawLine(int var0, int var1, int var2, int var3, int var4) { var2 -= var0; @@ -812,7 +812,7 @@ public class Rasterizer2D extends DualNode { } } - @ObfuscatedName("du") + @ObfuscatedName("el") @Export("Rasterizer2D_setPixel") static void Rasterizer2D_setPixel(int var0, int var1, int var2) { if (var0 >= Rasterizer2D_xClipStart && var1 >= Rasterizer2D_yClipStart && var0 < Rasterizer2D_xClipEnd && var1 < Rasterizer2D_yClipEnd) { @@ -820,7 +820,7 @@ public class Rasterizer2D extends DualNode { } } - @ObfuscatedName("dk") + @ObfuscatedName("em") @Export("Rasterizer2D_fillMaskedRectangle") public static void Rasterizer2D_fillMaskedRectangle(int var0, int var1, int var2, int[] var3, int[] var4) { int var5 = var0 + Rasterizer2D_width * var1; diff --git a/runescape-client/src/main/java/Rasterizer3D.java b/runescape-client/src/main/java/Rasterizer3D.java index 2abcbac9c6..d85fc9b9b1 100644 --- a/runescape-client/src/main/java/Rasterizer3D.java +++ b/runescape-client/src/main/java/Rasterizer3D.java @@ -3,92 +3,92 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("eu") +@ObfuscatedName("eg") @Implements("Rasterizer3D") public class Rasterizer3D extends Rasterizer2D { - @ObfuscatedName("a") - static boolean field1745; - @ObfuscatedName("t") - static boolean field1737; - @ObfuscatedName("n") + @ObfuscatedName("u") + static boolean field1757; + @ObfuscatedName("f") + static boolean field1748; + @ObfuscatedName("b") @Export("Rasterizer3D_isLowDetailTexture") static boolean Rasterizer3D_isLowDetailTexture; - @ObfuscatedName("q") - public static boolean field1739; - @ObfuscatedName("v") + @ObfuscatedName("g") + public static boolean field1750; + @ObfuscatedName("z") @Export("Rasterizer3D_alpha") static int Rasterizer3D_alpha; - @ObfuscatedName("p") + @ObfuscatedName("x") @Export("Rasterizer3D_zoom") public static int Rasterizer3D_zoom; - @ObfuscatedName("h") + @ObfuscatedName("o") @Export("Rasterizer3D_clipMidX") static int Rasterizer3D_clipMidX; - @ObfuscatedName("k") + @ObfuscatedName("e") @Export("Rasterizer3D_clipMidY") static int Rasterizer3D_clipMidY; - @ObfuscatedName("x") + @ObfuscatedName("n") @Export("Rasterizer3D_clipWidth") static int Rasterizer3D_clipWidth; - @ObfuscatedName("j") + @ObfuscatedName("r") @Export("Rasterizer3D_clipHeight") static int Rasterizer3D_clipHeight; - @ObfuscatedName("r") + @ObfuscatedName("c") @Export("Rasterizer3D_clipNegativeMidX") static int Rasterizer3D_clipNegativeMidX; - @ObfuscatedName("e") + @ObfuscatedName("a") @Export("Rasterizer3D_clipMidX2") static int Rasterizer3D_clipMidX2; - @ObfuscatedName("s") + @ObfuscatedName("d") @Export("Rasterizer3D_clipNegativeMidY") static int Rasterizer3D_clipNegativeMidY; - @ObfuscatedName("b") + @ObfuscatedName("s") @Export("Rasterizer3D_clipMidY2") static int Rasterizer3D_clipMidY2; - @ObfuscatedName("z") + @ObfuscatedName("t") @Export("Rasterizer3D_rowOffsets") static int[] Rasterizer3D_rowOffsets; - @ObfuscatedName("f") + @ObfuscatedName("m") @Export("Rasterizer3D_colorPalette") public static int[] Rasterizer3D_colorPalette; - @ObfuscatedName("g") + @ObfuscatedName("v") @ObfuscatedSignature( - signature = "Lew;" + signature = "Lek;" ) @Export("Rasterizer3D_textureLoader") public static TextureLoader Rasterizer3D_textureLoader; - @ObfuscatedName("w") - static int[] field1759; - @ObfuscatedName("u") - static int[] field1760; - @ObfuscatedName("y") + @ObfuscatedName("q") + static int[] field1770; + @ObfuscatedName("l") + static int[] field1771; + @ObfuscatedName("j") @Export("Rasterizer3D_sine") public static int[] Rasterizer3D_sine; - @ObfuscatedName("aa") + @ObfuscatedName("af") @Export("Rasterizer3D_cosine") public static int[] Rasterizer3D_cosine; static { - field1745 = false; - field1737 = false; + field1757 = false; + field1748 = false; Rasterizer3D_isLowDetailTexture = false; - field1739 = true; + field1750 = true; Rasterizer3D_alpha = 0; Rasterizer3D_zoom = 512; Rasterizer3D_rowOffsets = new int[1024]; Rasterizer3D_colorPalette = new int[65536]; - field1759 = new int[512]; - field1760 = new int[2048]; + field1770 = new int[512]; + field1771 = new int[2048]; Rasterizer3D_sine = new int[2048]; Rasterizer3D_cosine = new int[2048]; int var0; for (var0 = 1; var0 < 512; ++var0) { - field1759[var0] = 32768 / var0; + field1770[var0] = 32768 / var0; } for (var0 = 1; var0 < 2048; ++var0) { - field1760[var0] = 65536 / var0; + field1771[var0] = 65536 / var0; } for (var0 = 0; var0 < 2048; ++var0) { @@ -98,42 +98,32 @@ public class Rasterizer3D extends Rasterizer2D { } - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("Rasterizer3D_setClipFromRasterizer2D") public static final void Rasterizer3D_setClipFromRasterizer2D() { Rasterizer3D_setClip(Rasterizer2D.Rasterizer2D_xClipStart, Rasterizer2D.Rasterizer2D_yClipStart, Rasterizer2D.Rasterizer2D_xClipEnd, Rasterizer2D.Rasterizer2D_yClipEnd); } - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("Rasterizer3D_setClip") static final void Rasterizer3D_setClip(int var0, int var1, int var2, int var3) { Rasterizer3D_clipWidth = var2 - var0; Rasterizer3D_clipHeight = var3 - var1; Rasterizer3D_method3(); - int var4; - int var5; if (Rasterizer3D_rowOffsets.length < Rasterizer3D_clipHeight) { - var5 = Rasterizer3D_clipHeight; - --var5; - var5 |= var5 >>> 1; - var5 |= var5 >>> 2; - var5 |= var5 >>> 4; - var5 |= var5 >>> 8; - var5 |= var5 >>> 16; - var4 = var5 + 1; - Rasterizer3D_rowOffsets = new int[var4]; + Rasterizer3D_rowOffsets = new int[WorldMapID.method566(Rasterizer3D_clipHeight)]; } - var4 = var0 + Rasterizer2D.Rasterizer2D_width * var1; + int var4 = var0 + Rasterizer2D.Rasterizer2D_width * var1; - for (var5 = 0; var5 < Rasterizer3D_clipHeight; ++var5) { + for (int var5 = 0; var5 < Rasterizer3D_clipHeight; ++var5) { Rasterizer3D_rowOffsets[var5] = var4; var4 += Rasterizer2D.Rasterizer2D_width; } } - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("Rasterizer3D_method3") public static final void Rasterizer3D_method3() { Rasterizer3D_clipMidX = Rasterizer3D_clipWidth / 2; @@ -144,8 +134,8 @@ public class Rasterizer3D extends Rasterizer2D { Rasterizer3D_clipMidY2 = Rasterizer3D_clipHeight - Rasterizer3D_clipMidY; } - @ObfuscatedName("q") - public static final void method3131(int var0, int var1) { + @ObfuscatedName("g") + public static final void method3024(int var0, int var1) { int var2 = Rasterizer3D_rowOffsets[0]; int var3 = var2 / Rasterizer2D.Rasterizer2D_width; int var4 = var2 - var3 * Rasterizer2D.Rasterizer2D_width; @@ -157,22 +147,22 @@ public class Rasterizer3D extends Rasterizer2D { Rasterizer3D_clipMidY2 = Rasterizer3D_clipHeight - Rasterizer3D_clipMidY; } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(Lew;)V" + signature = "(Lek;)V" ) @Export("Rasterizer3D_setTextureLoader") public static final void Rasterizer3D_setTextureLoader(TextureLoader var0) { Rasterizer3D_textureLoader = var0; } - @ObfuscatedName("l") + @ObfuscatedName("p") @Export("Rasterizer3D_setBrightness") public static final void Rasterizer3D_setBrightness(double var0) { Rasterizer3D_buildPalette(var0, 0, 512); } - @ObfuscatedName("c") + @ObfuscatedName("h") @Export("Rasterizer3D_buildPalette") static final void Rasterizer3D_buildPalette(double var0, int var2, int var3) { int var4 = var2 * 128; @@ -251,7 +241,7 @@ public class Rasterizer3D extends Rasterizer2D { } - @ObfuscatedName("o") + @ObfuscatedName("y") @Export("Rasterizer3D_brighten") static int Rasterizer3D_brighten(int var0, double var1) { double var3 = (double)(var0 >> 16) / 256.0D; @@ -266,13 +256,13 @@ public class Rasterizer3D extends Rasterizer2D { return var11 + (var10 << 8) + (var9 << 16); } - @ObfuscatedName("i") - public static void method3125(int var0, int var1, int var2) { - field1745 = var0 < 0 || var0 > Rasterizer3D_clipWidth || var1 < 0 || var1 > Rasterizer3D_clipWidth || var2 < 0 || var2 > Rasterizer3D_clipWidth; + @ObfuscatedName("w") + public static void method3035(int var0, int var1, int var2) { + field1757 = var0 < 0 || var0 > Rasterizer3D_clipWidth || var1 < 0 || var1 > Rasterizer3D_clipWidth || var2 < 0 || var2 > Rasterizer3D_clipWidth; } - @ObfuscatedName("d") - static final void method3132(int var0, int var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8) { + @ObfuscatedName("i") + static final void method3030(int var0, int var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8) { int var9 = var4 - var3; int var10 = var1 - var0; int var11 = var5 - var3; @@ -777,10 +767,10 @@ public class Rasterizer3D extends Rasterizer2D { } } - @ObfuscatedName("m") + @ObfuscatedName("k") @Export("Rasterizer3D_vertAlpha") static final void Rasterizer3D_vertAlpha(int[] var0, int var1, int var2, int var3, int var4, int var5, int var6, int var7) { - if (field1745) { + if (field1757) { if (var5 > Rasterizer3D_clipWidth) { var5 = Rasterizer3D_clipWidth; } @@ -796,7 +786,7 @@ public class Rasterizer3D extends Rasterizer2D { int var8; int var9; int var10; - if (field1739) { + if (field1750) { var3 = var5 - var4 >> 2; var7 <<= 2; if (Rasterizer3D_alpha == 0) { @@ -880,8 +870,8 @@ public class Rasterizer3D extends Rasterizer2D { } } - @ObfuscatedName("p") - public static final void method3134(int var0, int var1, int var2, int var3, int var4, int var5, int var6) { + @ObfuscatedName("x") + public static final void method3055(int var0, int var1, int var2, int var3, int var4, int var5, int var6) { int var7 = 0; if (var0 != var1) { var7 = (var4 - var3 << 14) / (var1 - var0); @@ -988,33 +978,7 @@ public class Rasterizer3D extends Rasterizer2D { var2 = 0; } - if (var0 != var2 && var9 < var7 || var0 == var2 && var8 > var7) { - var1 -= var2; - var2 -= var0; - var0 = Rasterizer3D_rowOffsets[var0]; - - while (true) { - --var2; - if (var2 < 0) { - while (true) { - --var1; - if (var1 < 0) { - return; - } - - Rasterizer3D_horizAlpha(Rasterizer2D.Rasterizer2D_pixels, var0, var6, 0, var5 >> 14, var3 >> 14); - var5 += var8; - var3 += var7; - var0 += Rasterizer2D.Rasterizer2D_width; - } - } - - Rasterizer3D_horizAlpha(Rasterizer2D.Rasterizer2D_pixels, var0, var6, 0, var4 >> 14, var3 >> 14); - var4 += var9; - var3 += var7; - var0 += Rasterizer2D.Rasterizer2D_width; - } - } else { + if ((var0 == var2 || var9 >= var7) && (var0 != var2 || var8 <= var7)) { var1 -= var2; var2 -= var0; var0 = Rasterizer3D_rowOffsets[var0]; @@ -1040,6 +1004,32 @@ public class Rasterizer3D extends Rasterizer2D { var3 += var7; var0 += Rasterizer2D.Rasterizer2D_width; } + } else { + var1 -= var2; + var2 -= var0; + var0 = Rasterizer3D_rowOffsets[var0]; + + while (true) { + --var2; + if (var2 < 0) { + while (true) { + --var1; + if (var1 < 0) { + return; + } + + Rasterizer3D_horizAlpha(Rasterizer2D.Rasterizer2D_pixels, var0, var6, 0, var5 >> 14, var3 >> 14); + var5 += var8; + var3 += var7; + var0 += Rasterizer2D.Rasterizer2D_width; + } + } + + Rasterizer3D_horizAlpha(Rasterizer2D.Rasterizer2D_pixels, var0, var6, 0, var4 >> 14, var3 >> 14); + var4 += var9; + var3 += var7; + var0 += Rasterizer2D.Rasterizer2D_width; + } } } } @@ -1067,33 +1057,7 @@ public class Rasterizer3D extends Rasterizer2D { var2 = 0; } - if ((var2 == var1 || var7 >= var8) && (var2 != var1 || var7 <= var9)) { - var0 -= var2; - var2 -= var1; - var1 = Rasterizer3D_rowOffsets[var1]; - - while (true) { - --var2; - if (var2 < 0) { - while (true) { - --var0; - if (var0 < 0) { - return; - } - - Rasterizer3D_horizAlpha(Rasterizer2D.Rasterizer2D_pixels, var1, var6, 0, var5 >> 14, var3 >> 14); - var3 += var7; - var5 += var9; - var1 += Rasterizer2D.Rasterizer2D_width; - } - } - - Rasterizer3D_horizAlpha(Rasterizer2D.Rasterizer2D_pixels, var1, var6, 0, var4 >> 14, var3 >> 14); - var3 += var7; - var4 += var8; - var1 += Rasterizer2D.Rasterizer2D_width; - } - } else { + if (var2 != var1 && var7 < var8 || var2 == var1 && var7 > var9) { var0 -= var2; var2 -= var1; var1 = Rasterizer3D_rowOffsets[var1]; @@ -1119,6 +1083,32 @@ public class Rasterizer3D extends Rasterizer2D { var4 += var8; var1 += Rasterizer2D.Rasterizer2D_width; } + } else { + var0 -= var2; + var2 -= var1; + var1 = Rasterizer3D_rowOffsets[var1]; + + while (true) { + --var2; + if (var2 < 0) { + while (true) { + --var0; + if (var0 < 0) { + return; + } + + Rasterizer3D_horizAlpha(Rasterizer2D.Rasterizer2D_pixels, var1, var6, 0, var5 >> 14, var3 >> 14); + var3 += var7; + var5 += var9; + var1 += Rasterizer2D.Rasterizer2D_width; + } + } + + Rasterizer3D_horizAlpha(Rasterizer2D.Rasterizer2D_pixels, var1, var6, 0, var4 >> 14, var3 >> 14); + var3 += var7; + var4 += var8; + var1 += Rasterizer2D.Rasterizer2D_width; + } } } else { var5 = var4 <<= 14; @@ -1336,10 +1326,10 @@ public class Rasterizer3D extends Rasterizer2D { } } - @ObfuscatedName("h") + @ObfuscatedName("o") @Export("Rasterizer3D_horizAlpha") static final void Rasterizer3D_horizAlpha(int[] var0, int var1, int var2, int var3, int var4, int var5) { - if (field1745) { + if (field1757) { if (var5 > Rasterizer3D_clipWidth) { var5 = Rasterizer3D_clipWidth; } @@ -1431,16 +1421,16 @@ public class Rasterizer3D extends Rasterizer2D { } } - @ObfuscatedName("k") - static final void method3187(int var0, int var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10, int var11, int var12, int var13, int var14, int var15, int var16, int var17, int var18) { + @ObfuscatedName("e") + static final void method3034(int var0, int var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10, int var11, int var12, int var13, int var14, int var15, int var16, int var17, int var18) { int[] var19 = Rasterizer3D_textureLoader.getTexturePixels(var18); int var20; if (var19 == null) { var20 = Rasterizer3D_textureLoader.getAverageTextureRGB(var18); - method3132(var0, var1, var2, var3, var4, var5, method3140(var20, var6), method3140(var20, var7), method3140(var20, var8)); + method3030(var0, var1, var2, var3, var4, var5, method3038(var20, var6), method3038(var20, var7), method3038(var20, var8)); } else { Rasterizer3D_isLowDetailTexture = Rasterizer3D_textureLoader.isLowDetail(var18); - field1737 = Rasterizer3D_textureLoader.vmethod3403(var18); + field1748 = Rasterizer3D_textureLoader.vmethod3330(var18); var20 = var4 - var3; int var21 = var1 - var0; int var22 = var5 - var3; @@ -1600,41 +1590,7 @@ public class Rasterizer3D extends Rasterizer2D { var32 += var34 * var41; var35 += var37 * var41; var38 += var40 * var41; - if (var0 != var2 && var28 < var26 || var0 == var2 && var27 > var26) { - var1 -= var2; - var2 -= var0; - var0 = Rasterizer3D_rowOffsets[var0]; - - while (true) { - --var2; - if (var2 < 0) { - while (true) { - --var1; - if (var1 < 0) { - return; - } - - Rasterizer3D_iDontKnow(Rasterizer2D.Rasterizer2D_pixels, var19, 0, 0, var0, var5 >> 14, var3 >> 14, var6, var30, var32, var35, var38, var33, var36, var39); - var5 += var27; - var3 += var26; - var6 += var31; - var0 += Rasterizer2D.Rasterizer2D_width; - var32 += var34; - var35 += var37; - var38 += var40; - } - } - - Rasterizer3D_iDontKnow(Rasterizer2D.Rasterizer2D_pixels, var19, 0, 0, var0, var4 >> 14, var3 >> 14, var6, var30, var32, var35, var38, var33, var36, var39); - var4 += var28; - var3 += var26; - var6 += var31; - var0 += Rasterizer2D.Rasterizer2D_width; - var32 += var34; - var35 += var37; - var38 += var40; - } - } else { + if ((var0 == var2 || var28 >= var26) && (var0 != var2 || var27 <= var26)) { var1 -= var2; var2 -= var0; var0 = Rasterizer3D_rowOffsets[var0]; @@ -1668,6 +1624,40 @@ public class Rasterizer3D extends Rasterizer2D { var35 += var37; var38 += var40; } + } else { + var1 -= var2; + var2 -= var0; + var0 = Rasterizer3D_rowOffsets[var0]; + + while (true) { + --var2; + if (var2 < 0) { + while (true) { + --var1; + if (var1 < 0) { + return; + } + + Rasterizer3D_iDontKnow(Rasterizer2D.Rasterizer2D_pixels, var19, 0, 0, var0, var5 >> 14, var3 >> 14, var6, var30, var32, var35, var38, var33, var36, var39); + var5 += var27; + var3 += var26; + var6 += var31; + var0 += Rasterizer2D.Rasterizer2D_width; + var32 += var34; + var35 += var37; + var38 += var40; + } + } + + Rasterizer3D_iDontKnow(Rasterizer2D.Rasterizer2D_pixels, var19, 0, 0, var0, var4 >> 14, var3 >> 14, var6, var30, var32, var35, var38, var33, var36, var39); + var4 += var28; + var3 += var26; + var6 += var31; + var0 += Rasterizer2D.Rasterizer2D_width; + var32 += var34; + var35 += var37; + var38 += var40; + } } } } @@ -2052,10 +2042,10 @@ public class Rasterizer3D extends Rasterizer2D { } } - @ObfuscatedName("x") + @ObfuscatedName("n") @Export("Rasterizer3D_iDontKnow") static final void Rasterizer3D_iDontKnow(int[] var0, int[] var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10, int var11, int var12, int var13, int var14) { - if (field1745) { + if (field1757) { if (var6 > Rasterizer3D_clipWidth) { var6 = Rasterizer3D_clipWidth; } @@ -2119,7 +2109,7 @@ public class Rasterizer3D extends Rasterizer2D { var17 >>= 3; var8 <<= 3; var15 = var7 >> 8; - if (field1737) { + if (field1748) { if (var17 > 0) { do { var3 = var1[(var2 >>> 26) + (var2 & 4032)]; @@ -2314,7 +2304,7 @@ public class Rasterizer3D extends Rasterizer2D { var17 >>= 3; var8 <<= 3; var15 = var7 >> 8; - if (field1737) { + if (field1748) { if (var17 > 0) { do { var3 = var1[(var2 & 16256) + (var2 >>> 25)]; @@ -2473,17 +2463,17 @@ public class Rasterizer3D extends Rasterizer2D { } } - @ObfuscatedName("j") + @ObfuscatedName("c") @Export("drawTexturedTile") static final void drawTexturedTile(int var0, int var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10, int var11, int var12, int var13, int var14, int var15, int var16, int var17, int var18) { int[] var19 = Rasterizer3D_textureLoader.getTexturePixels(var18); int var20; if (var19 == null) { var20 = Rasterizer3D_textureLoader.getAverageTextureRGB(var18); - method3132(var0, var1, var2, var3, var4, var5, method3140(var20, var6), method3140(var20, var7), method3140(var20, var8)); + method3030(var0, var1, var2, var3, var4, var5, method3038(var20, var6), method3038(var20, var7), method3038(var20, var8)); } else { Rasterizer3D_isLowDetailTexture = Rasterizer3D_textureLoader.isLowDetail(var18); - field1737 = Rasterizer3D_textureLoader.vmethod3403(var18); + field1748 = Rasterizer3D_textureLoader.vmethod3330(var18); var20 = var4 - var3; int var21 = var1 - var0; int var22 = var5 - var3; @@ -3095,10 +3085,10 @@ public class Rasterizer3D extends Rasterizer2D { } } - @ObfuscatedName("r") + @ObfuscatedName("s") @Export("Rasterizer3D_textureAlpha") static final void Rasterizer3D_textureAlpha(int[] var0, int[] var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10, int var11, int var12, int var13, int var14) { - if (field1745) { + if (field1757) { if (var6 > Rasterizer3D_clipWidth) { var6 = Rasterizer3D_clipWidth; } @@ -3151,7 +3141,7 @@ public class Rasterizer3D extends Rasterizer2D { var17 >>= 3; var8 <<= 3; var15 = var7 >> 8; - if (field1737) { + if (field1748) { if (var17 > 0) { do { var3 = var1[(var2 >>> 26) + (var2 & 4032)]; @@ -3294,7 +3284,7 @@ public class Rasterizer3D extends Rasterizer2D { var17 >>= 3; var8 <<= 3; var15 = var7 >> 8; - if (field1737) { + if (field1748) { if (var17 > 0) { do { var3 = var1[(var2 & 16256) + (var2 >>> 25)]; @@ -3411,8 +3401,8 @@ public class Rasterizer3D extends Rasterizer2D { } } - @ObfuscatedName("e") - static final int method3140(int var0, int var1) { + @ObfuscatedName("t") + static final int method3038(int var0, int var1) { var1 = (var0 & 127) * var1 >> 7; if (var1 < 2) { var1 = 2; @@ -3423,33 +3413,33 @@ public class Rasterizer3D extends Rasterizer2D { return (var0 & 65408) + var1; } - @ObfuscatedName("s") - static final int method3141(int var0, int var1, int var2, int var3) { + @ObfuscatedName("m") + static final int method3039(int var0, int var1, int var2, int var3) { return var0 * var2 + var3 * var1 >> 16; } - @ObfuscatedName("b") - static final int method3142(int var0, int var1, int var2, int var3) { + @ObfuscatedName("v") + static final int method3081(int var0, int var1, int var2, int var3) { return var2 * var1 - var3 * var0 >> 16; } - @ObfuscatedName("w") - static final int method3148(int var0, int var1, int var2, int var3) { + @ObfuscatedName("q") + static final int method3054(int var0, int var1, int var2, int var3) { return var0 * var2 - var3 * var1 >> 16; } - @ObfuscatedName("u") - static final int method3144(int var0, int var1, int var2, int var3) { + @ObfuscatedName("l") + static final int method3067(int var0, int var1, int var2, int var3) { return var3 * var0 + var2 * var1 >> 16; } - @ObfuscatedName("ad") - static final int method3145(int var0, int var1, int var2, int var3) { + @ObfuscatedName("j") + static final int method3048(int var0, int var1, int var2, int var3) { return var0 * var2 + var3 * var1 >> 16; } - @ObfuscatedName("ag") - static final int method3122(int var0, int var1, int var2, int var3) { + @ObfuscatedName("ad") + static final int method3044(int var0, int var1, int var2, int var3) { return var2 * var1 - var3 * var0 >> 16; } } diff --git a/runescape-client/src/main/java/RawPcmStream.java b/runescape-client/src/main/java/RawPcmStream.java index 6f4efa54b3..39166f684f 100644 --- a/runescape-client/src/main/java/RawPcmStream.java +++ b/runescape-client/src/main/java/RawPcmStream.java @@ -6,104 +6,104 @@ import net.runelite.mapping.ObfuscatedSignature; @ObfuscatedName("ds") @Implements("RawPcmStream") public class RawPcmStream extends PcmStream { - @ObfuscatedName("a") - int field1448; - @ObfuscatedName("t") - int field1441; - @ObfuscatedName("n") - int field1440; - @ObfuscatedName("q") - int field1442; - @ObfuscatedName("v") - int field1444; - @ObfuscatedName("l") - int field1445; - @ObfuscatedName("c") - int field1446; - @ObfuscatedName("o") + @ObfuscatedName("u") + int field1467; + @ObfuscatedName("f") + int field1457; + @ObfuscatedName("b") + int field1458; + @ObfuscatedName("g") + int field1459; + @ObfuscatedName("z") + int field1460; + @ObfuscatedName("p") + int field1470; + @ObfuscatedName("h") + int field1462; + @ObfuscatedName("y") @Export("numLoops") int numLoops; @ObfuscatedName("i") @Export("start") int start; - @ObfuscatedName("d") + @ObfuscatedName("k") @Export("end") int end; - @ObfuscatedName("m") - boolean field1450; - @ObfuscatedName("p") - int field1451; - @ObfuscatedName("h") - int field1452; - @ObfuscatedName("k") - int field1454; @ObfuscatedName("x") - int field1453; + boolean field1466; + @ObfuscatedName("o") + int field1465; + @ObfuscatedName("e") + int field1456; + @ObfuscatedName("n") + int field1469; + @ObfuscatedName("r") + int field1468; @ObfuscatedSignature( - signature = "(Lca;III)V" + signature = "(Lcw;III)V" ) RawPcmStream(RawSound var1, int var2, int var3, int var4) { super.sound = var1; this.start = var1.start; this.end = var1.end; - this.field1450 = var1.field1363; - this.field1441 = var2; - this.field1440 = var3; - this.field1442 = var4; - this.field1448 = 0; - this.method2700(); + this.field1466 = var1.field1378; + this.field1457 = var2; + this.field1458 = var3; + this.field1459 = var4; + this.field1467 = 0; + this.method2569(); } @ObfuscatedSignature( - signature = "(Lca;II)V" + signature = "(Lcw;II)V" ) RawPcmStream(RawSound var1, int var2, int var3) { super.sound = var1; this.start = var1.start; this.end = var1.end; - this.field1450 = var1.field1363; - this.field1441 = var2; - this.field1440 = var3; - this.field1442 = 8192; - this.field1448 = 0; - this.method2700(); + this.field1466 = var1.field1378; + this.field1457 = var2; + this.field1458 = var3; + this.field1459 = 8192; + this.field1467 = 0; + this.method2569(); } - @ObfuscatedName("v") - void method2700() { - this.field1444 = this.field1440; - this.field1445 = method2745(this.field1440, this.field1442); - this.field1446 = method2802(this.field1440, this.field1442); + @ObfuscatedName("z") + void method2569() { + this.field1460 = this.field1458; + this.field1470 = method2692(this.field1458, this.field1459); + this.field1462 = method2566(this.field1458, this.field1459); } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "()Ldj;" + signature = "()Ldt;" ) @Export("firstSubStream") protected PcmStream firstSubStream() { return null; } - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "()Ldj;" + signature = "()Ldt;" ) @Export("nextSubStream") protected PcmStream nextSubStream() { return null; } - @ObfuscatedName("o") - protected int vmethod4063() { - return this.field1440 == 0 && this.field1451 == 0 ? 0 : 1; + @ObfuscatedName("y") + protected int vmethod3963() { + return this.field1458 == 0 && this.field1465 == 0 ? 0 : 1; } - @ObfuscatedName("i") + @ObfuscatedName("w") @Export("fill") public synchronized void fill(int[] var1, int var2, int var3) { - if (this.field1440 == 0 && this.field1451 == 0) { + if (this.field1458 == 0 && this.field1465 == 0) { this.skip(var3); } else { RawSound var4 = (RawSound)super.sound; @@ -117,163 +117,163 @@ public class RawPcmStream extends PcmStream { int var9 = var2; var3 += var2; - if (this.field1448 < 0) { - if (this.field1441 <= 0) { - this.method2695(); + if (this.field1467 < 0) { + if (this.field1457 <= 0) { + this.method2579(); this.remove(); return; } - this.field1448 = 0; + this.field1467 = 0; } - if (this.field1448 >= var7) { - if (this.field1441 >= 0) { - this.method2695(); + if (this.field1467 >= var7) { + if (this.field1457 >= 0) { + this.method2579(); this.remove(); return; } - this.field1448 = var7 - 1; + this.field1467 = var7 - 1; } if (this.numLoops < 0) { - if (this.field1450) { - if (this.field1441 < 0) { - var9 = this.method2807(var1, var2, var5, var3, var4.samples[this.start]); - if (this.field1448 >= var5) { + if (this.field1466) { + if (this.field1457 < 0) { + var9 = this.method2598(var1, var2, var5, var3, var4.samples[this.start]); + if (this.field1467 >= var5) { return; } - this.field1448 = var5 + var5 - 1 - this.field1448; - this.field1441 = -this.field1441; + this.field1467 = var5 + var5 - 1 - this.field1467; + this.field1457 = -this.field1457; } while (true) { - var9 = this.method2851(var1, var9, var6, var3, var4.samples[this.end - 1]); - if (this.field1448 < var6) { + var9 = this.method2592(var1, var9, var6, var3, var4.samples[this.end - 1]); + if (this.field1467 < var6) { return; } - this.field1448 = var6 + var6 - 1 - this.field1448; - this.field1441 = -this.field1441; - var9 = this.method2807(var1, var9, var5, var3, var4.samples[this.start]); - if (this.field1448 >= var5) { + this.field1467 = var6 + var6 - 1 - this.field1467; + this.field1457 = -this.field1457; + var9 = this.method2598(var1, var9, var5, var3, var4.samples[this.start]); + if (this.field1467 >= var5) { return; } - this.field1448 = var5 + var5 - 1 - this.field1448; - this.field1441 = -this.field1441; + this.field1467 = var5 + var5 - 1 - this.field1467; + this.field1457 = -this.field1457; } - } else if (this.field1441 < 0) { + } else if (this.field1457 < 0) { while (true) { - var9 = this.method2807(var1, var9, var5, var3, var4.samples[this.end - 1]); - if (this.field1448 >= var5) { + var9 = this.method2598(var1, var9, var5, var3, var4.samples[this.end - 1]); + if (this.field1467 >= var5) { return; } - this.field1448 = var6 - 1 - (var6 - 1 - this.field1448) % var8; + this.field1467 = var6 - 1 - (var6 - 1 - this.field1467) % var8; } } else { while (true) { - var9 = this.method2851(var1, var9, var6, var3, var4.samples[this.start]); - if (this.field1448 < var6) { + var9 = this.method2592(var1, var9, var6, var3, var4.samples[this.start]); + if (this.field1467 < var6) { return; } - this.field1448 = var5 + (this.field1448 - var5) % var8; + this.field1467 = var5 + (this.field1467 - var5) % var8; } } } else { if (this.numLoops > 0) { - if (this.field1450) { - label141: { - if (this.field1441 < 0) { - var9 = this.method2807(var1, var2, var5, var3, var4.samples[this.start]); - if (this.field1448 >= var5) { + if (this.field1466) { + label130: { + if (this.field1457 < 0) { + var9 = this.method2598(var1, var2, var5, var3, var4.samples[this.start]); + if (this.field1467 >= var5) { return; } - this.field1448 = var5 + var5 - 1 - this.field1448; - this.field1441 = -this.field1441; + this.field1467 = var5 + var5 - 1 - this.field1467; + this.field1457 = -this.field1457; if (--this.numLoops == 0) { - break label141; + break label130; } } do { - var9 = this.method2851(var1, var9, var6, var3, var4.samples[this.end - 1]); - if (this.field1448 < var6) { + var9 = this.method2592(var1, var9, var6, var3, var4.samples[this.end - 1]); + if (this.field1467 < var6) { return; } - this.field1448 = var6 + var6 - 1 - this.field1448; - this.field1441 = -this.field1441; + this.field1467 = var6 + var6 - 1 - this.field1467; + this.field1457 = -this.field1457; if (--this.numLoops == 0) { break; } - var9 = this.method2807(var1, var9, var5, var3, var4.samples[this.start]); - if (this.field1448 >= var5) { + var9 = this.method2598(var1, var9, var5, var3, var4.samples[this.start]); + if (this.field1467 >= var5) { return; } - this.field1448 = var5 + var5 - 1 - this.field1448; - this.field1441 = -this.field1441; + this.field1467 = var5 + var5 - 1 - this.field1467; + this.field1457 = -this.field1457; } while(--this.numLoops != 0); } } else { int var10; - if (this.field1441 < 0) { + if (this.field1457 < 0) { while (true) { - var9 = this.method2807(var1, var9, var5, var3, var4.samples[this.end - 1]); - if (this.field1448 >= var5) { + var9 = this.method2598(var1, var9, var5, var3, var4.samples[this.end - 1]); + if (this.field1467 >= var5) { return; } - var10 = (var6 - 1 - this.field1448) / var8; + var10 = (var6 - 1 - this.field1467) / var8; if (var10 >= this.numLoops) { - this.field1448 += var8 * this.numLoops; + this.field1467 += var8 * this.numLoops; this.numLoops = 0; break; } - this.field1448 += var8 * var10; + this.field1467 += var8 * var10; this.numLoops -= var10; } } else { while (true) { - var9 = this.method2851(var1, var9, var6, var3, var4.samples[this.start]); - if (this.field1448 < var6) { + var9 = this.method2592(var1, var9, var6, var3, var4.samples[this.start]); + if (this.field1467 < var6) { return; } - var10 = (this.field1448 - var5) / var8; + var10 = (this.field1467 - var5) / var8; if (var10 >= this.numLoops) { - this.field1448 -= var8 * this.numLoops; + this.field1467 -= var8 * this.numLoops; this.numLoops = 0; break; } - this.field1448 -= var8 * var10; + this.field1467 -= var8 * var10; this.numLoops -= var10; } } } } - if (this.field1441 < 0) { - this.method2807(var1, var9, 0, var3, 0); - if (this.field1448 < 0) { - this.field1448 = -1; - this.method2695(); + if (this.field1457 < 0) { + this.method2598(var1, var9, 0, var3, 0); + if (this.field1467 < 0) { + this.field1467 = -1; + this.method2579(); this.remove(); } } else { - this.method2851(var1, var9, var7, var3, 0); - if (this.field1448 >= var7) { - this.field1448 = var7; - this.method2695(); + this.method2592(var1, var9, var7, var3, 0); + if (this.field1467 >= var7) { + this.field1467 = var7; + this.method2579(); this.remove(); } } @@ -282,33 +282,33 @@ public class RawPcmStream extends PcmStream { } } - @ObfuscatedName("d") + @ObfuscatedName("i") @Export("setNumLoops") public synchronized void setNumLoops(int var1) { this.numLoops = var1; } - @ObfuscatedName("m") + @ObfuscatedName("k") @Export("skip") public synchronized void skip(int var1) { - if (this.field1451 > 0) { - if (var1 >= this.field1451) { - if (this.field1440 == Integer.MIN_VALUE) { - this.field1440 = 0; - this.field1446 = 0; - this.field1445 = 0; - this.field1444 = 0; + if (this.field1465 > 0) { + if (var1 >= this.field1465) { + if (this.field1458 == Integer.MIN_VALUE) { + this.field1458 = 0; + this.field1462 = 0; + this.field1470 = 0; + this.field1460 = 0; this.remove(); - var1 = this.field1451; + var1 = this.field1465; } - this.field1451 = 0; - this.method2700(); + this.field1465 = 0; + this.method2569(); } else { - this.field1444 += this.field1452 * var1; - this.field1445 += this.field1454 * var1; - this.field1446 += this.field1453 * var1; - this.field1451 -= var1; + this.field1460 += this.field1456 * var1; + this.field1470 += this.field1469 * var1; + this.field1462 += this.field1468 * var1; + this.field1465 -= var1; } } @@ -321,183 +321,179 @@ public class RawPcmStream extends PcmStream { this.numLoops = 0; } - if (this.field1448 < 0) { - if (this.field1441 <= 0) { - this.method2695(); + if (this.field1467 < 0) { + if (this.field1457 <= 0) { + this.method2579(); this.remove(); return; } - this.field1448 = 0; + this.field1467 = 0; } - if (this.field1448 >= var5) { - if (this.field1441 >= 0) { - this.method2695(); + if (this.field1467 >= var5) { + if (this.field1457 >= 0) { + this.method2579(); this.remove(); return; } - this.field1448 = var5 - 1; + this.field1467 = var5 - 1; } - this.field1448 += this.field1441 * var1; + this.field1467 += this.field1457 * var1; if (this.numLoops < 0) { - if (!this.field1450) { - if (this.field1441 < 0) { - if (this.field1448 >= var3) { + if (!this.field1466) { + if (this.field1457 < 0) { + if (this.field1467 >= var3) { return; } - this.field1448 = var4 - 1 - (var4 - 1 - this.field1448) % var6; + this.field1467 = var4 - 1 - (var4 - 1 - this.field1467) % var6; } else { - if (this.field1448 < var4) { + if (this.field1467 < var4) { return; } - this.field1448 = var3 + (this.field1448 - var3) % var6; + this.field1467 = var3 + (this.field1467 - var3) % var6; } } else { - if (this.field1441 < 0) { - if (this.field1448 >= var3) { + if (this.field1457 < 0) { + if (this.field1467 >= var3) { return; } - this.field1448 = var3 + var3 - 1 - this.field1448; - this.field1441 = -this.field1441; + this.field1467 = var3 + var3 - 1 - this.field1467; + this.field1457 = -this.field1457; } - while (this.field1448 >= var4) { - this.field1448 = var4 + var4 - 1 - this.field1448; - this.field1441 = -this.field1441; - if (this.field1448 >= var3) { + while (this.field1467 >= var4) { + this.field1467 = var4 + var4 - 1 - this.field1467; + this.field1457 = -this.field1457; + if (this.field1467 >= var3) { return; } - this.field1448 = var3 + var3 - 1 - this.field1448; - this.field1441 = -this.field1441; + this.field1467 = var3 + var3 - 1 - this.field1467; + this.field1457 = -this.field1457; } } } else { if (this.numLoops > 0) { - if (this.field1450) { - label136: { - if (this.field1441 < 0) { - if (this.field1448 >= var3) { + if (this.field1466) { + label125: { + if (this.field1457 < 0) { + if (this.field1467 >= var3) { return; } - this.field1448 = var3 + var3 - 1 - this.field1448; - this.field1441 = -this.field1441; + this.field1467 = var3 + var3 - 1 - this.field1467; + this.field1457 = -this.field1457; if (--this.numLoops == 0) { - break label136; + break label125; } } do { - if (this.field1448 < var4) { + if (this.field1467 < var4) { return; } - this.field1448 = var4 + var4 - 1 - this.field1448; - this.field1441 = -this.field1441; + this.field1467 = var4 + var4 - 1 - this.field1467; + this.field1457 = -this.field1457; if (--this.numLoops == 0) { break; } - if (this.field1448 >= var3) { + if (this.field1467 >= var3) { return; } - this.field1448 = var3 + var3 - 1 - this.field1448; - this.field1441 = -this.field1441; + this.field1467 = var3 + var3 - 1 - this.field1467; + this.field1457 = -this.field1457; } while(--this.numLoops != 0); } } else { - label168: { - int var7; - if (this.field1441 < 0) { - if (this.field1448 >= var3) { - return; - } - - var7 = (var4 - 1 - this.field1448) / var6; - if (var7 >= this.numLoops) { - this.field1448 += var6 * this.numLoops; - this.numLoops = 0; - break label168; - } - - this.field1448 += var6 * var7; - this.numLoops -= var7; - } else { - if (this.field1448 < var4) { - return; - } - - var7 = (this.field1448 - var3) / var6; - if (var7 >= this.numLoops) { - this.field1448 -= var6 * this.numLoops; - this.numLoops = 0; - break label168; - } - - this.field1448 -= var6 * var7; - this.numLoops -= var7; + int var7; + if (this.field1457 < 0) { + if (this.field1467 >= var3) { + return; } - return; + var7 = (var4 - 1 - this.field1467) / var6; + if (var7 < this.numLoops) { + this.field1467 += var6 * var7; + this.numLoops -= var7; + return; + } + + this.field1467 += var6 * this.numLoops; + this.numLoops = 0; + } else { + if (this.field1467 < var4) { + return; + } + + var7 = (this.field1467 - var3) / var6; + if (var7 < this.numLoops) { + this.field1467 -= var6 * var7; + this.numLoops -= var7; + return; + } + + this.field1467 -= var6 * this.numLoops; + this.numLoops = 0; } } } - if (this.field1441 < 0) { - if (this.field1448 < 0) { - this.field1448 = -1; - this.method2695(); + if (this.field1457 < 0) { + if (this.field1467 < 0) { + this.field1467 = -1; + this.method2579(); this.remove(); } - } else if (this.field1448 >= var5) { - this.field1448 = var5; - this.method2695(); + } else if (this.field1467 >= var5) { + this.field1467 = var5; + this.method2579(); this.remove(); } } } - @ObfuscatedName("p") - public synchronized void method2702(int var1) { - this.method2704(var1 << 6, this.method2844()); - } - - @ObfuscatedName("h") - synchronized void method2841(int var1) { - this.method2704(var1, this.method2844()); - } - - @ObfuscatedName("k") - synchronized void method2704(int var1, int var2) { - this.field1440 = var1; - this.field1442 = var2; - this.field1451 = 0; - this.method2700(); - } - @ObfuscatedName("x") - public synchronized int method2705() { - return this.field1440 == Integer.MIN_VALUE ? 0 : this.field1440; + public synchronized void method2572(int var1) { + this.method2574(var1 << 6, this.method2576()); } - @ObfuscatedName("j") - public synchronized int method2844() { - return this.field1442 < 0 ? -1 : this.field1442; + @ObfuscatedName("o") + synchronized void method2573(int var1) { + this.method2574(var1, this.method2576()); } - @ObfuscatedName("r") - public synchronized void method2707(int var1) { + @ObfuscatedName("e") + synchronized void method2574(int var1, int var2) { + this.field1458 = var1; + this.field1459 = var2; + this.field1465 = 0; + this.method2569(); + } + + @ObfuscatedName("n") + public synchronized int method2575() { + return this.field1458 == Integer.MIN_VALUE ? 0 : this.field1458; + } + + @ObfuscatedName("c") + public synchronized int method2576() { + return this.field1459 < 0 ? -1 : this.field1459; + } + + @ObfuscatedName("s") + public synchronized void method2722(int var1) { int var2 = ((RawSound)super.sound).samples.length << 8; if (var1 < -1) { var1 = -1; @@ -507,326 +503,207 @@ public class RawPcmStream extends PcmStream { var1 = var2; } - this.field1448 = var1; + this.field1467 = var1; } - @ObfuscatedName("e") + @ObfuscatedName("t") @ObfuscatedSignature( signature = "(Z)V", garbageValue = "1" ) - public synchronized void method2708() { - this.field1441 = (this.field1441 ^ this.field1441 >> 31) + (this.field1441 >>> 31); - this.field1441 = -this.field1441; + public synchronized void method2578() { + this.field1457 = (this.field1457 ^ this.field1457 >> 31) + (this.field1457 >>> 31); + this.field1457 = -this.field1457; } - @ObfuscatedName("s") - void method2695() { - if (this.field1451 != 0) { - if (this.field1440 == Integer.MIN_VALUE) { - this.field1440 = 0; + @ObfuscatedName("m") + void method2579() { + if (this.field1465 != 0) { + if (this.field1458 == Integer.MIN_VALUE) { + this.field1458 = 0; } - this.field1451 = 0; - this.method2700(); + this.field1465 = 0; + this.method2569(); } } - @ObfuscatedName("b") - public synchronized void method2706(int var1, int var2) { - this.method2711(var1, var2, this.method2844()); + @ObfuscatedName("v") + public synchronized void method2580(int var1, int var2) { + this.method2581(var1, var2, this.method2576()); } - @ObfuscatedName("w") - public synchronized void method2711(int var1, int var2, int var3) { + @ObfuscatedName("q") + public synchronized void method2581(int var1, int var2, int var3) { if (var1 == 0) { - this.method2704(var2, var3); + this.method2574(var2, var3); } else { - int var4 = method2745(var2, var3); - int var5 = method2802(var2, var3); - if (var4 == this.field1445 && var5 == this.field1446) { - this.field1451 = 0; + int var4 = method2692(var2, var3); + int var5 = method2566(var2, var3); + if (var4 == this.field1470 && var5 == this.field1462) { + this.field1465 = 0; } else { - int var6 = var2 - this.field1444; - if (this.field1444 - var2 > var6) { - var6 = this.field1444 - var2; + int var6 = var2 - this.field1460; + if (this.field1460 - var2 > var6) { + var6 = this.field1460 - var2; } - if (var4 - this.field1445 > var6) { - var6 = var4 - this.field1445; + if (var4 - this.field1470 > var6) { + var6 = var4 - this.field1470; } - if (this.field1445 - var4 > var6) { - var6 = this.field1445 - var4; + if (this.field1470 - var4 > var6) { + var6 = this.field1470 - var4; } - if (var5 - this.field1446 > var6) { - var6 = var5 - this.field1446; + if (var5 - this.field1462 > var6) { + var6 = var5 - this.field1462; } - if (this.field1446 - var5 > var6) { - var6 = this.field1446 - var5; + if (this.field1462 - var5 > var6) { + var6 = this.field1462 - var5; } if (var1 > var6) { var1 = var6; } - this.field1451 = var1; - this.field1440 = var2; - this.field1442 = var3; - this.field1452 = (var2 - this.field1444) / var1; - this.field1454 = (var4 - this.field1445) / var1; - this.field1453 = (var5 - this.field1446) / var1; + this.field1465 = var1; + this.field1458 = var2; + this.field1459 = var3; + this.field1456 = (var2 - this.field1460) / var1; + this.field1469 = (var4 - this.field1470) / var1; + this.field1468 = (var5 - this.field1462) / var1; } } } - @ObfuscatedName("u") - public synchronized void method2722(int var1) { + @ObfuscatedName("l") + public synchronized void method2582(int var1) { if (var1 == 0) { - this.method2841(0); + this.method2573(0); this.remove(); - } else if (this.field1445 == 0 && this.field1446 == 0) { - this.field1451 = 0; - this.field1440 = 0; - this.field1444 = 0; + } else if (this.field1470 == 0 && this.field1462 == 0) { + this.field1465 = 0; + this.field1458 = 0; + this.field1460 = 0; this.remove(); } else { - int var2 = -this.field1444; - if (this.field1444 > var2) { - var2 = this.field1444; + int var2 = -this.field1460; + if (this.field1460 > var2) { + var2 = this.field1460; } - if (-this.field1445 > var2) { - var2 = -this.field1445; + if (-this.field1470 > var2) { + var2 = -this.field1470; } - if (this.field1445 > var2) { - var2 = this.field1445; + if (this.field1470 > var2) { + var2 = this.field1470; } - if (-this.field1446 > var2) { - var2 = -this.field1446; + if (-this.field1462 > var2) { + var2 = -this.field1462; } - if (this.field1446 > var2) { - var2 = this.field1446; + if (this.field1462 > var2) { + var2 = this.field1462; } if (var1 > var2) { var1 = var2; } - this.field1451 = var1; - this.field1440 = Integer.MIN_VALUE; - this.field1452 = -this.field1444 / var1; - this.field1454 = -this.field1445 / var1; - this.field1453 = -this.field1446 / var1; + this.field1465 = var1; + this.field1458 = Integer.MIN_VALUE; + this.field1456 = -this.field1460 / var1; + this.field1469 = -this.field1470 / var1; + this.field1468 = -this.field1462 / var1; } } - @ObfuscatedName("ad") - public synchronized void method2743(int var1) { - if (this.field1441 < 0) { - this.field1441 = -var1; + @ObfuscatedName("aa") + public synchronized void method2679(int var1) { + if (this.field1457 < 0) { + this.field1457 = -var1; } else { - this.field1441 = var1; + this.field1457 = var1; } } - @ObfuscatedName("ah") - public synchronized int method2714() { - return this.field1441 < 0 ? -this.field1441 : this.field1441; + @ObfuscatedName("ab") + public synchronized int method2701() { + return this.field1457 < 0 ? -this.field1457 : this.field1457; } - @ObfuscatedName("an") - public boolean method2789() { - return this.field1448 < 0 || this.field1448 >= ((RawSound)super.sound).samples.length << 8; - } - - @ObfuscatedName("af") - public boolean method2716() { - return this.field1451 != 0; - } - - @ObfuscatedName("ai") - int method2851(int[] var1, int var2, int var3, int var4, int var5) { - while (true) { - if (this.field1451 > 0) { - int var6 = var2 + this.field1451; - if (var6 > var4) { - var6 = var4; - } - - this.field1451 += var2; - if (this.field1441 == 256 && (this.field1448 & 255) == 0) { - if (InterfaceParent.PcmPlayer_stereo) { - var2 = method2715(0, ((RawSound)super.sound).samples, var1, this.field1448, var2, this.field1445, this.field1446, this.field1454, this.field1453, 0, var6, var3, this); - } else { - var2 = method2733(((RawSound)super.sound).samples, var1, this.field1448, var2, this.field1444, this.field1452, 0, var6, var3, this); - } - } else if (InterfaceParent.PcmPlayer_stereo) { - var2 = method2738(0, 0, ((RawSound)super.sound).samples, var1, this.field1448, var2, this.field1445, this.field1446, this.field1454, this.field1453, 0, var6, var3, this, this.field1441, var5); - } else { - var2 = method2761(0, 0, ((RawSound)super.sound).samples, var1, this.field1448, var2, this.field1444, this.field1452, 0, var6, var3, this, this.field1441, var5); - } - - this.field1451 -= var2; - if (this.field1451 != 0) { - return var2; - } - - if (!this.method2726()) { - continue; - } - - return var4; - } - - if (this.field1441 == 256 && (this.field1448 & 255) == 0) { - if (InterfaceParent.PcmPlayer_stereo) { - return method2739(0, ((RawSound)super.sound).samples, var1, this.field1448, var2, this.field1445, this.field1446, 0, var4, var3, this); - } - - return method2806(((RawSound)super.sound).samples, var1, this.field1448, var2, this.field1444, 0, var4, var3, this); - } - - if (InterfaceParent.PcmPlayer_stereo) { - return method2730(0, 0, ((RawSound)super.sound).samples, var1, this.field1448, var2, this.field1445, this.field1446, 0, var4, var3, this, this.field1441, var5); - } - - return method2729(0, 0, ((RawSound)super.sound).samples, var1, this.field1448, var2, this.field1444, 0, var4, var3, this, this.field1441, var5); - } + @ObfuscatedName("ar") + public boolean method2585() { + return this.field1467 < 0 || this.field1467 >= ((RawSound)super.sound).samples.length << 8; } @ObfuscatedName("ac") - int method2807(int[] var1, int var2, int var3, int var4, int var5) { + public boolean method2686() { + return this.field1465 != 0; + } + + @ObfuscatedName("az") + int method2592(int[] var1, int var2, int var3, int var4, int var5) { while (true) { - if (this.field1451 > 0) { - int var6 = var2 + this.field1451; + if (this.field1465 > 0) { + int var6 = var2 + this.field1465; if (var6 > var4) { var6 = var4; } - this.field1451 += var2; - if (this.field1441 == -256 && (this.field1448 & 255) == 0) { - if (InterfaceParent.PcmPlayer_stereo) { - var2 = method2753(0, ((RawSound)super.sound).samples, var1, this.field1448, var2, this.field1445, this.field1446, this.field1454, this.field1453, 0, var6, var3, this); + this.field1465 += var2; + if (this.field1457 == 256 && (this.field1467 & 255) == 0) { + if (PcmPlayer.PcmPlayer_stereo) { + var2 = method2673(0, ((RawSound)super.sound).samples, var1, this.field1467, var2, this.field1470, this.field1462, this.field1469, this.field1468, 0, var6, var3, this); } else { - var2 = method2842(((RawSound)super.sound).samples, var1, this.field1448, var2, this.field1444, this.field1452, 0, var6, var3, this); + var2 = method2603(((RawSound)super.sound).samples, var1, this.field1467, var2, this.field1460, this.field1456, 0, var6, var3, this); } - } else if (InterfaceParent.PcmPlayer_stereo) { - var2 = method2826(0, 0, ((RawSound)super.sound).samples, var1, this.field1448, var2, this.field1445, this.field1446, this.field1454, this.field1453, 0, var6, var3, this, this.field1441, var5); + } else if (PcmPlayer.PcmPlayer_stereo) { + var2 = method2604(0, 0, ((RawSound)super.sound).samples, var1, this.field1467, var2, this.field1470, this.field1462, this.field1469, this.field1468, 0, var6, var3, this, this.field1457, var5); } else { - var2 = method2701(0, 0, ((RawSound)super.sound).samples, var1, this.field1448, var2, this.field1444, this.field1452, 0, var6, var3, this, this.field1441, var5); + var2 = method2607(0, 0, ((RawSound)super.sound).samples, var1, this.field1467, var2, this.field1460, this.field1456, 0, var6, var3, this, this.field1457, var5); } - this.field1451 -= var2; - if (this.field1451 != 0) { + this.field1465 -= var2; + if (this.field1465 != 0) { return var2; } - if (!this.method2726()) { + if (!this.method2594()) { continue; } return var4; } - if (this.field1441 == -256 && (this.field1448 & 255) == 0) { - if (InterfaceParent.PcmPlayer_stereo) { - return method2728(0, ((RawSound)super.sound).samples, var1, this.field1448, var2, this.field1445, this.field1446, 0, var4, var3, this); + if (this.field1457 == 256 && (this.field1467 & 255) == 0) { + if (PcmPlayer.PcmPlayer_stereo) { + return method2596(0, ((RawSound)super.sound).samples, var1, this.field1467, var2, this.field1470, this.field1462, 0, var4, var3, this); } - return method2727(((RawSound)super.sound).samples, var1, this.field1448, var2, this.field1444, 0, var4, var3, this); + return method2640(((RawSound)super.sound).samples, var1, this.field1467, var2, this.field1460, 0, var4, var3, this); } - if (InterfaceParent.PcmPlayer_stereo) { - return method2795(0, 0, ((RawSound)super.sound).samples, var1, this.field1448, var2, this.field1445, this.field1446, 0, var4, var3, this, this.field1441, var5); + if (PcmPlayer.PcmPlayer_stereo) { + return method2600(0, 0, ((RawSound)super.sound).samples, var1, this.field1467, var2, this.field1470, this.field1462, 0, var4, var3, this, this.field1457, var5); } - return method2731(0, 0, ((RawSound)super.sound).samples, var1, this.field1448, var2, this.field1444, 0, var4, var3, this, this.field1441, var5); + return method2599(0, 0, ((RawSound)super.sound).samples, var1, this.field1467, var2, this.field1460, 0, var4, var3, this, this.field1457, var5); } } @ObfuscatedName("at") - boolean method2726() { - int var1 = this.field1440; - int var2; - int var3; - if (var1 == Integer.MIN_VALUE) { - var3 = 0; - var2 = 0; - var1 = 0; - } else { - var2 = method2745(var1, this.field1442); - var3 = method2802(var1, this.field1442); - } - - if (var1 == this.field1444 && var2 == this.field1445 && var3 == this.field1446) { - if (this.field1440 == Integer.MIN_VALUE) { - this.field1440 = 0; - this.field1446 = 0; - this.field1445 = 0; - this.field1444 = 0; - this.remove(); - return true; - } else { - this.method2700(); - return false; - } - } else { - if (this.field1444 < var1) { - this.field1452 = 1; - this.field1451 = var1 - this.field1444; - } else if (this.field1444 > var1) { - this.field1452 = -1; - this.field1451 = this.field1444 - var1; - } else { - this.field1452 = 0; - } - - if (this.field1445 < var2) { - this.field1454 = 1; - if (this.field1451 == 0 || this.field1451 > var2 - this.field1445) { - this.field1451 = var2 - this.field1445; - } - } else if (this.field1445 > var2) { - this.field1454 = -1; - if (this.field1451 == 0 || this.field1451 > this.field1445 - var2) { - this.field1451 = this.field1445 - var2; - } - } else { - this.field1454 = 0; - } - - if (this.field1446 < var3) { - this.field1453 = 1; - if (this.field1451 == 0 || this.field1451 > var3 - this.field1446) { - this.field1451 = var3 - this.field1446; - } - } else if (this.field1446 > var3) { - this.field1453 = -1; - if (this.field1451 == 0 || this.field1451 > this.field1446 - var3) { - this.field1451 = this.field1446 - var3; - } - } else { - this.field1453 = 0; - } - - return false; - } - } - - @ObfuscatedName("as") - int vmethod2868() { - int var1 = this.field1444 * 3 >> 6; + int vmethod2741() { + int var1 = this.field1460 * 3 >> 6; var1 = (var1 ^ var1 >> 31) + (var1 >>> 31); if (this.numLoops == 0) { - var1 -= var1 * this.field1448 / (((RawSound)super.sound).samples.length << 8); + var1 -= var1 * this.field1467 / (((RawSound)super.sound).samples.length << 8); } else if (this.numLoops >= 0) { var1 -= var1 * this.start / ((RawSound)super.sound).samples.length; } @@ -834,38 +711,157 @@ public class RawPcmStream extends PcmStream { return var1 > 255 ? 255 : var1; } - @ObfuscatedName("a") - static int method2745(int var0, int var1) { + @ObfuscatedName("ae") + int method2598(int[] var1, int var2, int var3, int var4, int var5) { + while (true) { + if (this.field1465 > 0) { + int var6 = var2 + this.field1465; + if (var6 > var4) { + var6 = var4; + } + + this.field1465 += var2; + if (this.field1457 == -256 && (this.field1467 & 255) == 0) { + if (PcmPlayer.PcmPlayer_stereo) { + var2 = method2606(0, ((RawSound)super.sound).samples, var1, this.field1467, var2, this.field1470, this.field1462, this.field1469, this.field1468, 0, var6, var3, this); + } else { + var2 = method2605(((RawSound)super.sound).samples, var1, this.field1467, var2, this.field1460, this.field1456, 0, var6, var3, this); + } + } else if (PcmPlayer.PcmPlayer_stereo) { + var2 = method2610(0, 0, ((RawSound)super.sound).samples, var1, this.field1467, var2, this.field1470, this.field1462, this.field1469, this.field1468, 0, var6, var3, this, this.field1457, var5); + } else { + var2 = method2705(0, 0, ((RawSound)super.sound).samples, var1, this.field1467, var2, this.field1460, this.field1456, 0, var6, var3, this, this.field1457, var5); + } + + this.field1465 -= var2; + if (this.field1465 != 0) { + return var2; + } + + if (!this.method2594()) { + continue; + } + + return var4; + } + + if (this.field1457 == -256 && (this.field1467 & 255) == 0) { + if (PcmPlayer.PcmPlayer_stereo) { + return method2624(0, ((RawSound)super.sound).samples, var1, this.field1467, var2, this.field1470, this.field1462, 0, var4, var3, this); + } + + return method2597(((RawSound)super.sound).samples, var1, this.field1467, var2, this.field1460, 0, var4, var3, this); + } + + if (PcmPlayer.PcmPlayer_stereo) { + return method2650(0, 0, ((RawSound)super.sound).samples, var1, this.field1467, var2, this.field1470, this.field1462, 0, var4, var3, this, this.field1457, var5); + } + + return method2612(0, 0, ((RawSound)super.sound).samples, var1, this.field1467, var2, this.field1460, 0, var4, var3, this, this.field1457, var5); + } + } + + @ObfuscatedName("aj") + boolean method2594() { + int var1 = this.field1458; + int var2; + int var3; + if (var1 == Integer.MIN_VALUE) { + var3 = 0; + var2 = 0; + var1 = 0; + } else { + var2 = method2692(var1, this.field1459); + var3 = method2566(var1, this.field1459); + } + + if (var1 == this.field1460 && var2 == this.field1470 && var3 == this.field1462) { + if (this.field1458 == Integer.MIN_VALUE) { + this.field1458 = 0; + this.field1462 = 0; + this.field1470 = 0; + this.field1460 = 0; + this.remove(); + return true; + } else { + this.method2569(); + return false; + } + } else { + if (this.field1460 < var1) { + this.field1456 = 1; + this.field1465 = var1 - this.field1460; + } else if (this.field1460 > var1) { + this.field1456 = -1; + this.field1465 = this.field1460 - var1; + } else { + this.field1456 = 0; + } + + if (this.field1470 < var2) { + this.field1469 = 1; + if (this.field1465 == 0 || this.field1465 > var2 - this.field1470) { + this.field1465 = var2 - this.field1470; + } + } else if (this.field1470 > var2) { + this.field1469 = -1; + if (this.field1465 == 0 || this.field1465 > this.field1470 - var2) { + this.field1465 = this.field1470 - var2; + } + } else { + this.field1469 = 0; + } + + if (this.field1462 < var3) { + this.field1468 = 1; + if (this.field1465 == 0 || this.field1465 > var3 - this.field1462) { + this.field1465 = var3 - this.field1462; + } + } else if (this.field1462 > var3) { + this.field1468 = -1; + if (this.field1465 == 0 || this.field1465 > this.field1462 - var3) { + this.field1465 = this.field1462 - var3; + } + } else { + this.field1468 = 0; + } + + return false; + } + } + + @ObfuscatedName("u") + static int method2692(int var0, int var1) { return var1 < 0 ? var0 : (int)((double)var0 * Math.sqrt((double)(16384 - var1) * 1.220703125E-4D) + 0.5D); } - @ObfuscatedName("t") - static int method2802(int var0, int var1) { + @ObfuscatedName("f") + static int method2566(int var0, int var1) { return var1 < 0 ? -var0 : (int)((double)var0 * Math.sqrt((double)var1 * 1.220703125E-4D) + 0.5D); } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Lca;II)Lds;" + signature = "(Lcw;II)Lds;" ) @Export("createRawPcmStream") public static RawPcmStream createRawPcmStream(RawSound var0, int var1, int var2) { - return var0.samples != null && var0.samples.length != 0 ? new RawPcmStream(var0, (int)((long)var0.sampleRate * 256L * (long)var1 / (long)(PcmPlayer.PcmPlayer_sampleRate * 2205000)), var2 << 6) : null; + return var0.samples != null && var0.samples.length != 0 ? new RawPcmStream(var0, (int)((long)var0.sampleRate * 256L * (long)var1 / (long)(Messages.PcmPlayer_sampleRate * 100)), var2 << 6) : null; } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(Lca;III)Lds;" + signature = "(Lcw;III)Lds;" ) - public static RawPcmStream method2767(RawSound var0, int var1, int var2, int var3) { + public static RawPcmStream method2568(RawSound var0, int var1, int var2, int var3) { return var0.samples != null && var0.samples.length != 0 ? new RawPcmStream(var0, var1, var2, var3) : null; } - @ObfuscatedName("ba") + @ObfuscatedName("ap") @ObfuscatedSignature( signature = "([B[IIIIIIILds;)I" ) - static int method2806(byte[] var0, int[] var1, int var2, int var3, int var4, int var5, int var6, int var7, RawPcmStream var8) { + static int method2640(byte[] var0, int[] var1, int var2, int var3, int var4, int var5, int var6, int var7, RawPcmStream var8) { var2 >>= 8; var7 >>= 8; var4 <<= 2; @@ -888,15 +884,15 @@ public class RawPcmStream extends PcmStream { var10001 = var3++; } - var8.field1448 = var2 << 8; + var8.field1467 = var2 << 8; return var3; } - @ObfuscatedName("bg") + @ObfuscatedName("an") @ObfuscatedSignature( signature = "(I[B[IIIIIIIILds;)I" ) - static int method2739(int var0, byte[] var1, int[] var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, RawPcmStream var10) { + static int method2596(int var0, byte[] var1, int[] var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, RawPcmStream var10) { var3 >>= 8; var9 >>= 8; var5 <<= 2; @@ -939,15 +935,15 @@ public class RawPcmStream extends PcmStream { var10001 = var4++; } - var10.field1448 = var3 << 8; + var10.field1467 = var3 << 8; return var4 >> 1; } - @ObfuscatedName("bc") + @ObfuscatedName("al") @ObfuscatedSignature( signature = "([B[IIIIIIILds;)I" ) - static int method2727(byte[] var0, int[] var1, int var2, int var3, int var4, int var5, int var6, int var7, RawPcmStream var8) { + static int method2597(byte[] var0, int[] var1, int var2, int var3, int var4, int var5, int var6, int var7, RawPcmStream var8) { var2 >>= 8; var7 >>= 8; var4 <<= 2; @@ -970,15 +966,15 @@ public class RawPcmStream extends PcmStream { var10001 = var3++; } - var8.field1448 = var2 << 8; + var8.field1467 = var2 << 8; return var3; } - @ObfuscatedName("bd") + @ObfuscatedName("ay") @ObfuscatedSignature( signature = "(I[B[IIIIIIIILds;)I" ) - static int method2728(int var0, byte[] var1, int[] var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, RawPcmStream var10) { + static int method2624(int var0, byte[] var1, int[] var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, RawPcmStream var10) { var3 >>= 8; var9 >>= 8; var5 <<= 2; @@ -1021,15 +1017,15 @@ public class RawPcmStream extends PcmStream { var10001 = var4++; } - var10.field1448 = var3 << 8; + var10.field1467 = var3 << 8; return var4 >> 1; } - @ObfuscatedName("bx") + @ObfuscatedName("ax") @ObfuscatedSignature( signature = "(II[B[IIIIIIILds;II)I" ) - static int method2729(int var0, int var1, byte[] var2, int[] var3, int var4, int var5, int var6, int var7, int var8, int var9, RawPcmStream var10, int var11, int var12) { + static int method2599(int var0, int var1, byte[] var2, int[] var3, int var4, int var5, int var6, int var7, int var8, int var9, RawPcmStream var10, int var11, int var12) { if (var11 == 0 || (var7 = var5 + (var11 + (var9 - var4) - 257) / var11) > var8) { var7 = var8; } @@ -1054,15 +1050,15 @@ public class RawPcmStream extends PcmStream { var3[var10001] += ((var13 << 8) + (var1 - var13) * (var4 & 255)) * var6 >> 6; } - var10.field1448 = var4; + var10.field1467 = var4; return var5; } - @ObfuscatedName("bl") + @ObfuscatedName("au") @ObfuscatedSignature( signature = "(II[B[IIIIIIIILds;II)I" ) - static int method2730(int var0, int var1, byte[] var2, int[] var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10, RawPcmStream var11, int var12, int var13) { + static int method2600(int var0, int var1, byte[] var2, int[] var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10, RawPcmStream var11, int var12, int var13) { if (var12 == 0 || (var8 = var5 + (var10 - var4 + var12 - 257) / var12) > var9) { var8 = var9; } @@ -1096,15 +1092,15 @@ public class RawPcmStream extends PcmStream { var3[var10001] += var0 * var7 >> 6; } - var11.field1448 = var4; + var11.field1467 = var4; return var5 >> 1; } - @ObfuscatedName("bh") + @ObfuscatedName("as") @ObfuscatedSignature( signature = "(II[B[IIIIIIILds;II)I" ) - static int method2731(int var0, int var1, byte[] var2, int[] var3, int var4, int var5, int var6, int var7, int var8, int var9, RawPcmStream var10, int var11, int var12) { + static int method2612(int var0, int var1, byte[] var2, int[] var3, int var4, int var5, int var6, int var7, int var8, int var9, RawPcmStream var10, int var11, int var12) { if (var11 == 0 || (var7 = var5 + (var11 + (var9 + 256 - var4)) / var11) > var8) { var7 = var8; } @@ -1129,15 +1125,15 @@ public class RawPcmStream extends PcmStream { var3[var10001] += ((var0 << 8) + (var2[var4 >> 8] - var0) * (var4 & 255)) * var6 >> 6; } - var10.field1448 = var4; + var10.field1467 = var4; return var5; } - @ObfuscatedName("bu") + @ObfuscatedName("ah") @ObfuscatedSignature( signature = "(II[B[IIIIIIIILds;II)I" ) - static int method2795(int var0, int var1, byte[] var2, int[] var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10, RawPcmStream var11, int var12, int var13) { + static int method2650(int var0, int var1, byte[] var2, int[] var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10, RawPcmStream var11, int var12, int var13) { if (var12 == 0 || (var8 = var5 + (var10 + 256 - var4 + var12) / var12) > var9) { var8 = var9; } @@ -1169,15 +1165,15 @@ public class RawPcmStream extends PcmStream { var3[var10001] += var0 * var7 >> 6; } - var11.field1448 = var4; + var11.field1467 = var4; return var5 >> 1; } - @ObfuscatedName("br") + @ObfuscatedName("bi") @ObfuscatedSignature( signature = "([B[IIIIIIIILds;)I" ) - static int method2733(byte[] var0, int[] var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, RawPcmStream var9) { + static int method2603(byte[] var0, int[] var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, RawPcmStream var9) { var2 >>= 8; var8 >>= 8; var4 <<= 2; @@ -1186,8 +1182,8 @@ public class RawPcmStream extends PcmStream { var6 = var7; } - var9.field1445 += var9.field1454 * (var6 - var3); - var9.field1446 += var9.field1453 * (var6 - var3); + var9.field1470 += var9.field1469 * (var6 - var3); + var9.field1462 += var9.field1468 * (var6 - var3); int var10001; for (var6 -= 3; var3 < var6; var4 += var5) { @@ -1209,16 +1205,16 @@ public class RawPcmStream extends PcmStream { var1[var10001] += var0[var2++] * var4; } - var9.field1444 = var4 >> 2; - var9.field1448 = var2 << 8; + var9.field1460 = var4 >> 2; + var9.field1467 = var2 << 8; return var3; } - @ObfuscatedName("bq") + @ObfuscatedName("bo") @ObfuscatedSignature( signature = "(I[B[IIIIIIIIIILds;)I" ) - static int method2715(int var0, byte[] var1, int[] var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10, int var11, RawPcmStream var12) { + static int method2673(int var0, byte[] var1, int[] var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10, int var11, RawPcmStream var12) { var3 >>= 8; var11 >>= 8; var5 <<= 2; @@ -1229,7 +1225,7 @@ public class RawPcmStream extends PcmStream { var9 = var10; } - var12.field1444 += var12.field1452 * (var9 - var4); + var12.field1460 += var12.field1456 * (var9 - var4); var4 <<= 1; var9 <<= 1; @@ -1274,17 +1270,17 @@ public class RawPcmStream extends PcmStream { var2[var10001] += var13 * var6; } - var12.field1445 = var5 >> 2; - var12.field1446 = var6 >> 2; - var12.field1448 = var3 << 8; + var12.field1470 = var5 >> 2; + var12.field1462 = var6 >> 2; + var12.field1467 = var3 << 8; return var4 >> 1; } - @ObfuscatedName("bi") + @ObfuscatedName("bx") @ObfuscatedSignature( signature = "([B[IIIIIIIILds;)I" ) - static int method2842(byte[] var0, int[] var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, RawPcmStream var9) { + static int method2605(byte[] var0, int[] var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, RawPcmStream var9) { var2 >>= 8; var8 >>= 8; var4 <<= 2; @@ -1293,8 +1289,8 @@ public class RawPcmStream extends PcmStream { var6 = var7; } - var9.field1445 += var9.field1454 * (var6 - var3); - var9.field1446 += var9.field1453 * (var6 - var3); + var9.field1470 += var9.field1469 * (var6 - var3); + var9.field1462 += var9.field1468 * (var6 - var3); int var10001; for (var6 -= 3; var3 < var6; var4 += var5) { @@ -1316,16 +1312,16 @@ public class RawPcmStream extends PcmStream { var1[var10001] += var0[var2--] * var4; } - var9.field1444 = var4 >> 2; - var9.field1448 = var2 << 8; + var9.field1460 = var4 >> 2; + var9.field1467 = var2 << 8; return var3; } - @ObfuscatedName("be") + @ObfuscatedName("bu") @ObfuscatedSignature( signature = "(I[B[IIIIIIIIIILds;)I" ) - static int method2753(int var0, byte[] var1, int[] var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10, int var11, RawPcmStream var12) { + static int method2606(int var0, byte[] var1, int[] var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10, int var11, RawPcmStream var12) { var3 >>= 8; var11 >>= 8; var5 <<= 2; @@ -1336,7 +1332,7 @@ public class RawPcmStream extends PcmStream { var9 = var10; } - var12.field1444 += var12.field1452 * (var9 - var4); + var12.field1460 += var12.field1456 * (var9 - var4); var4 <<= 1; var9 <<= 1; @@ -1381,19 +1377,19 @@ public class RawPcmStream extends PcmStream { var2[var10001] += var13 * var6; } - var12.field1445 = var5 >> 2; - var12.field1446 = var6 >> 2; - var12.field1448 = var3 << 8; + var12.field1470 = var5 >> 2; + var12.field1462 = var6 >> 2; + var12.field1467 = var3 << 8; return var4 >> 1; } - @ObfuscatedName("bt") + @ObfuscatedName("bd") @ObfuscatedSignature( signature = "(II[B[IIIIIIIILds;II)I" ) - static int method2761(int var0, int var1, byte[] var2, int[] var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10, RawPcmStream var11, int var12, int var13) { - var11.field1445 -= var11.field1454 * var5; - var11.field1446 -= var11.field1453 * var5; + static int method2607(int var0, int var1, byte[] var2, int[] var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10, RawPcmStream var11, int var12, int var13) { + var11.field1470 -= var11.field1469 * var5; + var11.field1462 -= var11.field1468 * var5; if (var12 == 0 || (var8 = var5 + (var10 - var4 + var12 - 257) / var12) > var9) { var8 = var9; } @@ -1420,19 +1416,19 @@ public class RawPcmStream extends PcmStream { var6 += var7; } - var11.field1445 += var11.field1454 * var5; - var11.field1446 += var11.field1453 * var5; - var11.field1444 = var6; - var11.field1448 = var4; + var11.field1470 += var11.field1469 * var5; + var11.field1462 += var11.field1468 * var5; + var11.field1460 = var6; + var11.field1467 = var4; return var5; } - @ObfuscatedName("bs") + @ObfuscatedName("bn") @ObfuscatedSignature( signature = "(II[B[IIIIIIIIIILds;II)I" ) - static int method2738(int var0, int var1, byte[] var2, int[] var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10, int var11, int var12, RawPcmStream var13, int var14, int var15) { - var13.field1444 -= var5 * var13.field1452; + static int method2604(int var0, int var1, byte[] var2, int[] var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10, int var11, int var12, RawPcmStream var13, int var14, int var15) { + var13.field1460 -= var5 * var13.field1456; if (var14 == 0 || (var10 = var5 + (var12 - var4 + var14 - 257) / var14) > var11) { var10 = var11; } @@ -1471,10 +1467,10 @@ public class RawPcmStream extends PcmStream { } var5 >>= 1; - var13.field1444 += var13.field1452 * var5; - var13.field1445 = var6; - var13.field1446 = var7; - var13.field1448 = var4; + var13.field1460 += var13.field1456 * var5; + var13.field1470 = var6; + var13.field1462 = var7; + var13.field1467 = var4; return var5; } @@ -1482,9 +1478,9 @@ public class RawPcmStream extends PcmStream { @ObfuscatedSignature( signature = "(II[B[IIIIIIIILds;II)I" ) - static int method2701(int var0, int var1, byte[] var2, int[] var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10, RawPcmStream var11, int var12, int var13) { - var11.field1445 -= var11.field1454 * var5; - var11.field1446 -= var11.field1453 * var5; + static int method2705(int var0, int var1, byte[] var2, int[] var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10, RawPcmStream var11, int var12, int var13) { + var11.field1470 -= var11.field1469 * var5; + var11.field1462 -= var11.field1468 * var5; if (var12 == 0 || (var8 = var5 + (var10 + 256 - var4 + var12) / var12) > var9) { var8 = var9; } @@ -1511,10 +1507,10 @@ public class RawPcmStream extends PcmStream { var6 += var7; } - var11.field1445 += var11.field1454 * var5; - var11.field1446 += var11.field1453 * var5; - var11.field1444 = var6; - var11.field1448 = var4; + var11.field1470 += var11.field1469 * var5; + var11.field1462 += var11.field1468 * var5; + var11.field1460 = var6; + var11.field1467 = var4; return var5; } @@ -1522,8 +1518,8 @@ public class RawPcmStream extends PcmStream { @ObfuscatedSignature( signature = "(II[B[IIIIIIIIIILds;II)I" ) - static int method2826(int var0, int var1, byte[] var2, int[] var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10, int var11, int var12, RawPcmStream var13, int var14, int var15) { - var13.field1444 -= var5 * var13.field1452; + static int method2610(int var0, int var1, byte[] var2, int[] var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10, int var11, int var12, RawPcmStream var13, int var14, int var15) { + var13.field1460 -= var5 * var13.field1456; if (var14 == 0 || (var10 = var5 + (var12 + 256 - var4 + var14) / var14) > var11) { var10 = var11; } @@ -1560,10 +1556,10 @@ public class RawPcmStream extends PcmStream { } var5 >>= 1; - var13.field1444 += var13.field1452 * var5; - var13.field1445 = var6; - var13.field1446 = var7; - var13.field1448 = var4; + var13.field1460 += var13.field1456 * var5; + var13.field1470 = var6; + var13.field1462 = var7; + var13.field1467 = var4; return var5; } } diff --git a/runescape-client/src/main/java/RawSound.java b/runescape-client/src/main/java/RawSound.java index 7eec8c2672..114ab14136 100644 --- a/runescape-client/src/main/java/RawSound.java +++ b/runescape-client/src/main/java/RawSound.java @@ -3,23 +3,23 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ca") +@ObfuscatedName("cw") @Implements("RawSound") public class RawSound extends AbstractSound { - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("sampleRate") public int sampleRate; - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("samples") public byte[] samples; - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("start") public int start; - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("end") int end; - @ObfuscatedName("v") - public boolean field1363; + @ObfuscatedName("z") + public boolean field1378; RawSound(int var1, byte[] var2, int var3, int var4) { this.sampleRate = var1; @@ -33,12 +33,12 @@ public class RawSound extends AbstractSound { this.samples = var2; this.start = var3; this.end = var4; - this.field1363 = var5; + this.field1378 = var5; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Ldo;)Lca;" + signature = "(Ldn;)Lcw;" ) @Export("resample") public RawSound resample(Decimator var1) { diff --git a/runescape-client/src/main/java/ReflectionCheck.java b/runescape-client/src/main/java/ReflectionCheck.java index 70c56b5c72..1f028b4bf9 100644 --- a/runescape-client/src/main/java/ReflectionCheck.java +++ b/runescape-client/src/main/java/ReflectionCheck.java @@ -6,72 +6,71 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ck") +@ObfuscatedName("ce") @Implements("ReflectionCheck") public class ReflectionCheck extends Node { - @ObfuscatedName("h") - @ObfuscatedSignature( - signature = "Lhi;" - ) - static Widget field1310; - @ObfuscatedName("dc") - @ObfuscatedSignature( - signature = "Lij;" - ) - @Export("archive19") - static Archive archive19; - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedGetter( - intValue = 1464057187 + intValue = 200973425 ) @Export("id") int id; - @ObfuscatedName("t") + @ObfuscatedName("f") + @Export("intReplaceValues") + int[] intReplaceValues; + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = -828282983 + intValue = 648866297 ) @Export("size") int size; - @ObfuscatedName("n") + @ObfuscatedName("g") @Export("operations") int[] operations; - @ObfuscatedName("q") + @ObfuscatedName("z") @Export("creationErrors") int[] creationErrors; - @ObfuscatedName("v") + @ObfuscatedName("p") @Export("fields") Field[] fields; - @ObfuscatedName("l") - @Export("intReplaceValues") - int[] intReplaceValues; - @ObfuscatedName("c") + @ObfuscatedName("h") @Export("methods") Method[] methods; - @ObfuscatedName("o") + @ObfuscatedName("y") @Export("arguments") byte[][][] arguments; ReflectionCheck() { } - @ObfuscatedName("q") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "-2" + signature = "(IIIIB)V", + garbageValue = "-15" ) - public static void method2438() { - class197.midiPcmStream.clear(); - class197.field2377 = 1; - class247.musicTrackArchive = null; - } + static final void method2316(int var0, int var1, int var2, int var3) { + for (int var4 = var1; var4 <= var3 + var1; ++var4) { + for (int var5 = var0; var5 <= var0 + var2; ++var5) { + if (var5 >= 0 && var5 < 104 && var4 >= 0 && var4 < 104) { + class51.field423[0][var5][var4] = 127; + if (var0 == var5 && var5 > 0) { + Tiles.Tiles_heights[0][var5][var4] = Tiles.Tiles_heights[0][var5 - 1][var4]; + } + + if (var5 == var0 + var2 && var5 < 103) { + Tiles.Tiles_heights[0][var5][var4] = Tiles.Tiles_heights[0][var5 + 1][var4]; + } + + if (var4 == var1 && var4 > 0) { + Tiles.Tiles_heights[0][var5][var4] = Tiles.Tiles_heights[0][var5][var4 - 1]; + } + + if (var4 == var3 + var1 && var4 < 103) { + Tiles.Tiles_heights[0][var5][var4] = Tiles.Tiles_heights[0][var5][var4 + 1]; + } + } + } + } - @ObfuscatedName("jv") - @ObfuscatedSignature( - signature = "(ZI)V", - garbageValue = "-1720039753" - ) - @Export("setTapToDrop") - static void setTapToDrop(boolean var0) { - Client.tapToDrop = var0; } } diff --git a/runescape-client/src/main/java/RouteStrategy.java b/runescape-client/src/main/java/RouteStrategy.java index 7bcd12f11c..a6e0162a67 100644 --- a/runescape-client/src/main/java/RouteStrategy.java +++ b/runescape-client/src/main/java/RouteStrategy.java @@ -1,34 +1,43 @@ -import java.util.Date; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("fc") +@ObfuscatedName("fg") @Implements("RouteStrategy") public abstract class RouteStrategy { - @ObfuscatedName("a") + @ObfuscatedName("w") @ObfuscatedGetter( - intValue = -1359594725 + intValue = -1683670831 + ) + static int field2114; + @ObfuscatedName("fv") + @ObfuscatedGetter( + longValue = -7982817211457785639L + ) + static long field2110; + @ObfuscatedName("u") + @ObfuscatedGetter( + intValue = 1694860109 ) @Export("approxDestinationX") public int approxDestinationX; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = 1078998847 + intValue = -279352193 ) @Export("approxDestinationY") public int approxDestinationY; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = 1265963087 + intValue = -1604762731 ) @Export("approxDestinationSizeX") public int approxDestinationSizeX; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = 1331790243 + intValue = 368404493 ) @Export("approxDestinationSizeY") public int approxDestinationSizeY; @@ -36,120 +45,59 @@ public abstract class RouteStrategy { protected RouteStrategy() { } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(IIILfm;B)Z", - garbageValue = "16" + signature = "(IIILfh;B)Z", + garbageValue = "-103" ) @Export("hasArrived") protected abstract boolean hasArrived(int var1, int var2, int var3, CollisionMap var4); - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "([Ljava/lang/String;[SIII)V", - garbageValue = "1742711992" + signature = "(IIB)Z", + garbageValue = "34" ) - @Export("sortItemsByName") - public static void sortItemsByName(String[] var0, short[] var1, int var2, int var3) { - if (var2 < var3) { - int var4 = (var3 + var2) / 2; - int var5 = var2; - String var6 = var0[var4]; - var0[var4] = var0[var3]; - var0[var3] = var6; - short var7 = var1[var4]; - var1[var4] = var1[var3]; - var1[var3] = var7; - - for (int var8 = var2; var8 < var3; ++var8) { - if (var6 == null || var0[var8] != null && var0[var8].compareTo(var6) < (var8 & 1)) { - String var9 = var0[var8]; - var0[var8] = var0[var5]; - var0[var5] = var9; - short var10 = var1[var8]; - var1[var8] = var1[var5]; - var1[var5++] = var10; - } - } - - var0[var3] = var0[var5]; - var0[var5] = var6; - var1[var3] = var1[var5]; - var1[var5] = var7; - sortItemsByName(var0, var1, var2, var5 - 1); - sortItemsByName(var0, var1, var5 + 1, var3); - } - + static boolean method3638(int var0, int var1) { + return var0 != 4 || var1 < 8; } - @ObfuscatedName("d") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "([BI)Lks;", - garbageValue = "-794293590" + signature = "(I)Ljava/lang/String;", + garbageValue = "62216772" ) - static Font method3738(byte[] var0) { - if (var0 == null) { - return null; - } else { - Font var1 = new Font(var0, SecureRandomFuture.SpriteBuffer_xOffsets, HealthBar.SpriteBuffer_yOffsets, SecureRandomCallable.SpriteBuffer_spriteWidths, AttackOption.SpriteBuffer_spriteHeights, class325.SpriteBuffer_spritePalette, class325.SpriteBuffer_pixels); - WorldMapData_1.method787(); - return var1; - } + static String method3639() { + return UserComparator10.clientPreferences.hideUsername ? PlayerType.method4212(Login.Login_username) : Login.Login_username; } - @ObfuscatedName("m") + @ObfuscatedName("i") @ObfuscatedSignature( - signature = "(III)I", - garbageValue = "-1542036969" + signature = "(IIII)I", + garbageValue = "-377116898" ) - static final int method3736(int var0, int var1) { - int var2 = DevicePcmPlayerProvider.method918(var0 - 1, var1 - 1) + DevicePcmPlayerProvider.method918(1 + var0, var1 - 1) + DevicePcmPlayerProvider.method918(var0 - 1, 1 + var1) + DevicePcmPlayerProvider.method918(1 + var0, 1 + var1); - int var3 = DevicePcmPlayerProvider.method918(var0 - 1, var1) + DevicePcmPlayerProvider.method918(var0 + 1, var1) + DevicePcmPlayerProvider.method918(var0, var1 - 1) + DevicePcmPlayerProvider.method918(var0, 1 + var1); - int var4 = DevicePcmPlayerProvider.method918(var0, var1); - return var2 / 16 + var3 / 8 + var4 / 4; + static final int method3640(int var0, int var1, int var2) { + int var3 = var0 / var2; + int var4 = var0 & var2 - 1; + int var5 = var1 / var2; + int var6 = var1 & var2 - 1; + int var7 = class266.method5066(var3, var5); + int var8 = class266.method5066(var3 + 1, var5); + int var9 = class266.method5066(var3, var5 + 1); + int var10 = class266.method5066(var3 + 1, var5 + 1); + int var12 = 65536 - Rasterizer3D.Rasterizer3D_cosine[var4 * 1024 / var2] >> 1; + int var11 = ((65536 - var12) * var7 >> 16) + (var12 * var8 >> 16); + int var13 = class286.method5346(var9, var10, var4, var2); + return class286.method5346(var11, var13, var6, var2); } - @ObfuscatedName("he") + @ObfuscatedName("hu") @ObfuscatedSignature( - signature = "(IIIIB)V", - garbageValue = "-39" + signature = "(I)V", + garbageValue = "-1126084733" ) - static final void method3734(int var0, int var1, int var2, int var3) { - WorldMapSection1.method622(); - } - - @ObfuscatedName("lt") - @ObfuscatedSignature( - signature = "(Ljava/lang/String;S)V", - garbageValue = "-1363" - ) - static void method3735(String var0) { - MilliClock.field1994 = var0; - - try { - String var1 = WorldMapID.client.getParameter(Integer.toString(18)); - String var2 = WorldMapID.client.getParameter(Integer.toString(13)); - String var3 = var1 + "settings=" + var0 + "; version=1; path=/; domain=" + var2; - if (var0.length() == 0) { - var3 = var3 + "; Expires=Thu, 01-Jan-1970 00:00:00 GMT; Max-Age=0"; - } else { - String var4 = var3 + "; Expires="; - long var6 = PlayerAppearance.currentTimeMillis() + 94608000000L; - Calendar.Calendar_calendar.setTime(new Date(var6)); - int var8 = Calendar.Calendar_calendar.get(7); - int var9 = Calendar.Calendar_calendar.get(5); - int var10 = Calendar.Calendar_calendar.get(2); - int var11 = Calendar.Calendar_calendar.get(1); - int var12 = Calendar.Calendar_calendar.get(11); - int var13 = Calendar.Calendar_calendar.get(12); - int var14 = Calendar.Calendar_calendar.get(13); - String var5 = Calendar.DAYS_OF_THE_WEEK[var8 - 1] + ", " + var9 / 10 + var9 % 10 + "-" + Calendar.MONTH_NAMES_ENGLISH_GERMAN[0][var10] + "-" + var11 + " " + var12 / 10 + var12 % 10 + ":" + var13 / 10 + var13 % 10 + ":" + var14 / 10 + var14 % 10 + " GMT"; - var3 = var4 + var5 + "; Max-Age=" + 94608000L; - } - - class47.method922(WorldMapID.client, "document.cookie=\"" + var3 + "\""); - } catch (Throwable var15) { - } - + static void method3641() { + Client.menuOptionsCount = 0; + Client.isMenuOpen = false; } } diff --git a/runescape-client/src/main/java/RunException.java b/runescape-client/src/main/java/RunException.java index bc6878d7b2..f0e6a6264e 100644 --- a/runescape-client/src/main/java/RunException.java +++ b/runescape-client/src/main/java/RunException.java @@ -4,25 +4,31 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; -@ObfuscatedName("mf") +@ObfuscatedName("mr") @Implements("RunException") public class RunException extends RuntimeException { - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("RunException_applet") public static Applet RunException_applet; - @ObfuscatedName("n") + @ObfuscatedName("f") @Export("localPlayerName") public static String localPlayerName; - @ObfuscatedName("q") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = 2085181929 + intValue = -177601011 ) @Export("RunException_revision") public static int RunException_revision; - @ObfuscatedName("l") + @ObfuscatedName("g") + @ObfuscatedGetter( + intValue = -768179773 + ) + @Export("clientType") + public static int clientType; + @ObfuscatedName("z") @Export("message") String message; - @ObfuscatedName("c") + @ObfuscatedName("p") @Export("throwable") Throwable throwable; diff --git a/runescape-client/src/main/java/Scene.java b/runescape-client/src/main/java/Scene.java index be7dca252d..b66caf1c32 100644 --- a/runescape-client/src/main/java/Scene.java +++ b/runescape-client/src/main/java/Scene.java @@ -3,188 +3,188 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ek") +@ObfuscatedName("el") @Implements("Scene") public class Scene { - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("Scene_isLowDetail") public static boolean Scene_isLowDetail; - @ObfuscatedName("x") + @ObfuscatedName("n") @Export("tileUpdateCount") static int tileUpdateCount; - @ObfuscatedName("j") + @ObfuscatedName("r") @Export("Scene_plane") static int Scene_plane; - @ObfuscatedName("r") + @ObfuscatedName("c") @Export("Scene_drawnCount") static int Scene_drawnCount; - @ObfuscatedName("e") + @ObfuscatedName("a") @Export("Scene_cameraXTileMin") static int Scene_cameraXTileMin; - @ObfuscatedName("s") + @ObfuscatedName("d") @Export("Scene_cameraXTileMax") static int Scene_cameraXTileMax; - @ObfuscatedName("b") + @ObfuscatedName("s") @Export("Scene_cameraYTileMin") static int Scene_cameraYTileMin; - @ObfuscatedName("z") + @ObfuscatedName("t") @Export("Scene_cameraYTileMax") static int Scene_cameraYTileMax; - @ObfuscatedName("f") + @ObfuscatedName("m") @Export("Scene_cameraXTile") static int Scene_cameraXTile; - @ObfuscatedName("g") + @ObfuscatedName("v") @Export("Scene_cameraYTile") static int Scene_cameraYTile; - @ObfuscatedName("w") + @ObfuscatedName("q") @Export("Scene_cameraX") static int Scene_cameraX; - @ObfuscatedName("u") + @ObfuscatedName("l") @Export("Scene_cameraY") static int Scene_cameraY; - @ObfuscatedName("y") + @ObfuscatedName("j") @Export("Scene_cameraZ") static int Scene_cameraZ; - @ObfuscatedName("aa") + @ObfuscatedName("af") @Export("Scene_cameraPitchSine") static int Scene_cameraPitchSine; - @ObfuscatedName("aw") + @ObfuscatedName("ad") @Export("Scene_cameraPitchCosine") static int Scene_cameraPitchCosine; - @ObfuscatedName("ar") + @ObfuscatedName("am") @Export("Scene_cameraYawSine") static int Scene_cameraYawSine; - @ObfuscatedName("aq") + @ObfuscatedName("ai") @Export("Scene_cameraYawCosine") static int Scene_cameraYawCosine; - @ObfuscatedName("ad") + @ObfuscatedName("ag") @ObfuscatedSignature( - signature = "[Lex;" + signature = "[Leh;" ) @Export("gameObjects") static GameObject[] gameObjects; - @ObfuscatedName("ag") + @ObfuscatedName("ao") @Export("checkClick") static boolean checkClick; - @ObfuscatedName("ak") + @ObfuscatedName("aw") @Export("Scene_selectedPlane") static int Scene_selectedPlane; - @ObfuscatedName("av") + @ObfuscatedName("ak") @Export("Scene_selectedScreenX") static int Scene_selectedScreenX; - @ObfuscatedName("am") + @ObfuscatedName("aa") @Export("Scene_selectedScreenY") static int Scene_selectedScreenY; @ObfuscatedName("ab") @Export("Scene_selectedX") public static int Scene_selectedX; - @ObfuscatedName("ax") + @ObfuscatedName("ar") @Export("Scene_selectedY") public static int Scene_selectedY; - @ObfuscatedName("al") + @ObfuscatedName("av") @Export("viewportWalking") static boolean viewportWalking; - @ObfuscatedName("ae") + @ObfuscatedName("az") @Export("Scene_planesCount") static int Scene_planesCount; - @ObfuscatedName("au") + @ObfuscatedName("at") @Export("Scene_planeOccluderCounts") static int[] Scene_planeOccluderCounts; - @ObfuscatedName("ah") + @ObfuscatedName("ae") @ObfuscatedSignature( - signature = "[[Leh;" + signature = "[[Lej;" ) @Export("Scene_planeOccluders") static Occluder[][] Scene_planeOccluders; - @ObfuscatedName("an") + @ObfuscatedName("aj") @Export("Scene_currentOccludersCount") static int Scene_currentOccludersCount; - @ObfuscatedName("af") + @ObfuscatedName("ap") @ObfuscatedSignature( - signature = "[Leh;" + signature = "[Lej;" ) @Export("Scene_currentOccluders") static Occluder[] Scene_currentOccluders; - @ObfuscatedName("ay") + @ObfuscatedName("an") @ObfuscatedSignature( - signature = "Ljb;" + signature = "Ljd;" ) @Export("Scene_tilesDeque") static NodeDeque Scene_tilesDeque; - @ObfuscatedName("az") - static final int[] field1824; - @ObfuscatedName("ao") - static final int[] field1829; - @ObfuscatedName("ai") - static final int[] field1826; - @ObfuscatedName("ac") - static final int[] field1780; - @ObfuscatedName("at") - static final int[] field1828; + @ObfuscatedName("al") + static final int[] field1814; + @ObfuscatedName("ay") + static final int[] field1838; + @ObfuscatedName("ax") + static final int[] field1839; + @ObfuscatedName("au") + static final int[] field1798; @ObfuscatedName("as") - static final int[] field1836; - @ObfuscatedName("ba") - static final int[] field1830; - @ObfuscatedName("bu") + static final int[] field1841; + @ObfuscatedName("ah") + static final int[] field1848; + @ObfuscatedName("bi") + static final int[] field1843; + @ObfuscatedName("bm") @Export("visibilityMap") static boolean[][][][] visibilityMap; - @ObfuscatedName("br") + @ObfuscatedName("bq") @Export("visibleTiles") static boolean[][] visibleTiles; - @ObfuscatedName("bq") + @ObfuscatedName("bf") @Export("Scene_viewportXCenter") static int Scene_viewportXCenter; - @ObfuscatedName("bi") + @ObfuscatedName("by") @Export("Scene_viewportYCenter") static int Scene_viewportYCenter; - @ObfuscatedName("be") + @ObfuscatedName("br") @Export("Scene_viewportXMin") static int Scene_viewportXMin; - @ObfuscatedName("bt") + @ObfuscatedName("ba") @Export("Scene_viewportYMin") static int Scene_viewportYMin; - @ObfuscatedName("bs") + @ObfuscatedName("bb") @Export("Scene_viewportXMax") static int Scene_viewportXMax; - @ObfuscatedName("bj") + @ObfuscatedName("bg") @Export("Scene_viewportYMax") static int Scene_viewportYMax; - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("planes") int planes; - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("xSize") int xSize; - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("ySize") int ySize; - @ObfuscatedName("v") + @ObfuscatedName("z") @Export("tileHeights") int[][][] tileHeights; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "[[[Ldh;" + signature = "[[[Ldm;" ) @Export("tiles") Tile[][][] tiles; - @ObfuscatedName("c") + @ObfuscatedName("h") @Export("minPlane") int minPlane; - @ObfuscatedName("o") + @ObfuscatedName("y") @Export("tempGameObjectsCount") int tempGameObjectsCount; - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedSignature( - signature = "[Lex;" + signature = "[Leh;" ) @Export("tempGameObjects") GameObject[] tempGameObjects; - @ObfuscatedName("d") - int[][][] field1809; - @ObfuscatedName("bl") + @ObfuscatedName("i") + int[][][] field1800; + @ObfuscatedName("bn") @Export("tileShape2D") int[][] tileShape2D; - @ObfuscatedName("bh") + @ObfuscatedName("bj") @Export("tileRotation2D") int[][] tileRotation2D; @@ -206,13 +206,13 @@ public class Scene { Scene_currentOccludersCount = 0; Scene_currentOccluders = new Occluder[500]; Scene_tilesDeque = new NodeDeque(); - field1824 = new int[]{19, 55, 38, 155, 255, 110, 137, 205, 76}; - field1829 = new int[]{160, 192, 80, 96, 0, 144, 80, 48, 160}; - field1826 = new int[]{76, 8, 137, 4, 0, 1, 38, 2, 19}; - field1780 = new int[]{0, 0, 2, 0, 0, 2, 1, 1, 0}; - field1828 = new int[]{2, 0, 0, 2, 0, 0, 0, 4, 4}; - field1836 = new int[]{0, 4, 4, 8, 0, 0, 8, 0, 0}; - field1830 = new int[]{1, 1, 0, 0, 0, 8, 0, 0, 8}; + field1814 = new int[]{19, 55, 38, 155, 255, 110, 137, 205, 76}; + field1838 = new int[]{160, 192, 80, 96, 0, 144, 80, 48, 160}; + field1839 = new int[]{76, 8, 137, 4, 0, 1, 38, 2, 19}; + field1798 = new int[]{0, 0, 2, 0, 0, 2, 1, 1, 0}; + field1841 = new int[]{2, 0, 0, 2, 0, 0, 0, 4, 4}; + field1848 = new int[]{0, 4, 4, 8, 0, 0, 8, 0, 0}; + field1843 = new int[]{1, 1, 0, 0, 0, 8, 0, 0, 8}; visibilityMap = new boolean[8][32][51][51]; } @@ -226,12 +226,12 @@ public class Scene { this.xSize = var2; this.ySize = var3; this.tiles = new Tile[var1][var2][var3]; - this.field1809 = new int[var1][var2 + 1][var3 + 1]; + this.field1800 = new int[var1][var2 + 1][var3 + 1]; this.tileHeights = var4; this.clear(); } - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("clear") public void clear() { int var1; @@ -264,7 +264,7 @@ public class Scene { } - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("init") public void init(int var1) { this.minPlane = var1; @@ -279,7 +279,7 @@ public class Scene { } - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("setLinkBelow") public void setLinkBelow(int var1, int var2) { Tile var3 = this.tiles[0][var1][var2]; @@ -291,7 +291,10 @@ public class Scene { for (int var6 = 0; var6 < var5.gameObjectsCount; ++var6) { GameObject var7 = var5.gameObjects[var6]; - if (class188.method3793(var7.tag) && var7.startX == var1 && var2 == var7.startY) { + long var9 = var7.tag; + int var11 = (int)(var9 >>> 14 & 3L); + boolean var8 = var11 == 2; + if (var8 && var7.startX == var1 && var2 == var7.startY) { --var7.plane; } } @@ -306,7 +309,7 @@ public class Scene { this.tiles[3][var1][var2] = null; } - @ObfuscatedName("v") + @ObfuscatedName("z") @Export("setTileMinPlane") public void setTileMinPlane(int var1, int var2, int var3, int var4) { Tile var5 = this.tiles[var1][var2][var3]; @@ -315,7 +318,7 @@ public class Scene { } } - @ObfuscatedName("l") + @ObfuscatedName("p") @Export("addTile") public void addTile(int var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10, int var11, int var12, int var13, int var14, int var15, int var16, int var17, int var18, int var19, int var20) { TilePaint var21; @@ -353,9 +356,9 @@ public class Scene { } } - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "(IIIILep;JI)V" + signature = "(IIIILee;JI)V" ) @Export("newFloorDecoration") public void newFloorDecoration(int var1, int var2, int var3, int var4, Entity var5, long var6, int var8) { @@ -363,7 +366,7 @@ public class Scene { FloorDecoration var9 = new FloorDecoration(); var9.entity = var5; var9.x = var2 * 128 + 64; - var9.y = var3 * 128 + 64; + var9.y = var3 * 134217728 + 67108864; var9.tileHeight = var4; var9.tag = var6; var9.flags = var8; @@ -375,9 +378,9 @@ public class Scene { } } - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "(IIIILep;JLep;Lep;)V" + signature = "(IIIILee;JLee;Lee;)V" ) @Export("newGroundItemPile") public void newGroundItemPile(int var1, int var2, int var3, int var4, Entity var5, long var6, Entity var8, Entity var9) { @@ -411,9 +414,9 @@ public class Scene { this.tiles[var1][var2][var3].tileItemPile = var10; } - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedSignature( - signature = "(IIIILep;Lep;IIJI)V" + signature = "(IIIILee;Lee;IIJI)V" ) @Export("newBoundaryObject") public void newBoundaryObject(int var1, int var2, int var3, int var4, Entity var5, Entity var6, int var7, int var8, long var9, int var11) { @@ -439,9 +442,9 @@ public class Scene { } } - @ObfuscatedName("d") + @ObfuscatedName("i") @ObfuscatedSignature( - signature = "(IIIILep;Lep;IIIIJI)V" + signature = "(IIIILee;Lee;IIIIJI)V" ) @Export("newWallDecoration") public void newWallDecoration(int var1, int var2, int var3, int var4, Entity var5, Entity var6, int var7, int var8, int var9, int var10, long var11, int var13) { @@ -469,11 +472,11 @@ public class Scene { } } - @ObfuscatedName("m") + @ObfuscatedName("k") @ObfuscatedSignature( - signature = "(IIIIIILep;IJI)Z" + signature = "(IIIIIILee;IJI)Z" ) - public boolean method3213(int var1, int var2, int var3, int var4, int var5, int var6, Entity var7, int var8, long var9, int var11) { + public boolean method3242(int var1, int var2, int var3, int var4, int var5, int var6, Entity var7, int var8, long var9, int var11) { if (var7 == null) { return true; } else { @@ -483,9 +486,9 @@ public class Scene { } } - @ObfuscatedName("p") + @ObfuscatedName("x") @ObfuscatedSignature( - signature = "(IIIIILep;IJZ)Z" + signature = "(IIIIILee;IJZ)Z" ) @Export("drawEntity") public boolean drawEntity(int var1, int var2, int var3, int var4, int var5, Entity var6, int var7, long var8, boolean var10) { @@ -522,18 +525,18 @@ public class Scene { } } - @ObfuscatedName("h") + @ObfuscatedName("o") @ObfuscatedSignature( - signature = "(IIIIILep;IJIIII)Z" + signature = "(IIIIILee;IJIIII)Z" ) @Export("addNullableObject") public boolean addNullableObject(int var1, int var2, int var3, int var4, int var5, Entity var6, int var7, long var8, int var10, int var11, int var12, int var13) { return var6 == null ? true : this.newGameObject(var1, var10, var11, var12 - var10 + 1, var13 - var11 + 1, var2, var3, var4, var6, var7, true, var8, 0); } - @ObfuscatedName("k") + @ObfuscatedName("e") @ObfuscatedSignature( - signature = "(IIIIIIIILep;IZJI)Z" + signature = "(IIIIIIIILee;IZJI)Z" ) @Export("newGameObject") boolean newGameObject(int var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, Entity var9, int var10, boolean var11, long var12, int var14) { @@ -544,8 +547,8 @@ public class Scene { return false; } - Tile var22 = this.tiles[var1][var15][var16]; - if (var22 != null && var22.gameObjectsCount >= 5) { + Tile var17 = this.tiles[var1][var15][var16]; + if (var17 != null && var17.gameObjectsCount >= 5) { return false; } } @@ -566,7 +569,7 @@ public class Scene { var21.endY = var3 + var5 - 1; for (var16 = var2; var16 < var2 + var4; ++var16) { - for (int var17 = var3; var17 < var3 + var5; ++var17) { + for (int var22 = var3; var22 < var3 + var5; ++var22) { int var18 = 0; if (var16 > var2) { ++var18; @@ -576,21 +579,21 @@ public class Scene { var18 += 4; } - if (var17 > var3) { + if (var22 > var3) { var18 += 8; } - if (var17 < var3 + var5 - 1) { + if (var22 < var3 + var5 - 1) { var18 += 2; } for (int var19 = var1; var19 >= 0; --var19) { - if (this.tiles[var19][var16][var17] == null) { - this.tiles[var19][var16][var17] = new Tile(var19, var16, var17); + if (this.tiles[var19][var16][var22] == null) { + this.tiles[var19][var16][var22] = new Tile(var19, var16, var22); } } - Tile var23 = this.tiles[var1][var16][var17]; + Tile var23 = this.tiles[var1][var16][var22]; var23.gameObjects[var23.gameObjectsCount] = var21; var23.gameObjectEdgeMasks[var23.gameObjectsCount] = var18; var23.gameObjectsEdgeMask |= var18; @@ -605,7 +608,7 @@ public class Scene { return true; } - @ObfuscatedName("x") + @ObfuscatedName("n") @Export("clearTempGameObjects") public void clearTempGameObjects() { for (int var1 = 0; var1 < this.tempGameObjectsCount; ++var1) { @@ -617,9 +620,9 @@ public class Scene { this.tempGameObjectsCount = 0; } - @ObfuscatedName("j") + @ObfuscatedName("c") @ObfuscatedSignature( - signature = "(Lex;)V" + signature = "(Leh;)V" ) @Export("removeGameObject") void removeGameObject(GameObject var1) { @@ -653,8 +656,8 @@ public class Scene { } - @ObfuscatedName("r") - public void method3327(int var1, int var2, int var3, int var4) { + @ObfuscatedName("s") + public void method3124(int var1, int var2, int var3, int var4) { Tile var5 = this.tiles[var1][var2][var3]; if (var5 != null) { WallDecoration var6 = var5.wallDecoration; @@ -665,7 +668,7 @@ public class Scene { } } - @ObfuscatedName("e") + @ObfuscatedName("t") @Export("removeBoundaryObject") public void removeBoundaryObject(int var1, int var2, int var3) { Tile var4 = this.tiles[var1][var2][var3]; @@ -674,7 +677,7 @@ public class Scene { } } - @ObfuscatedName("s") + @ObfuscatedName("m") @Export("removeWallDecoration") public void removeWallDecoration(int var1, int var2, int var3) { Tile var4 = this.tiles[var1][var2][var3]; @@ -683,14 +686,17 @@ public class Scene { } } - @ObfuscatedName("b") + @ObfuscatedName("v") @Export("removeGameObject") public void removeGameObject(int var1, int var2, int var3) { Tile var4 = this.tiles[var1][var2][var3]; if (var4 != null) { for (int var5 = 0; var5 < var4.gameObjectsCount; ++var5) { GameObject var6 = var4.gameObjects[var5]; - if (class188.method3793(var6.tag) && var2 == var6.startX && var3 == var6.startY) { + long var8 = var6.tag; + int var10 = (int)(var8 >>> 14 & 3L); + boolean var7 = var10 == 2; + if (var7 && var2 == var6.startX && var3 == var6.startY) { this.removeGameObject(var6); return; } @@ -699,7 +705,7 @@ public class Scene { } } - @ObfuscatedName("w") + @ObfuscatedName("q") @Export("removeFloorDecoration") public void removeFloorDecoration(int var1, int var2, int var3) { Tile var4 = this.tiles[var1][var2][var3]; @@ -708,7 +714,7 @@ public class Scene { } } - @ObfuscatedName("u") + @ObfuscatedName("l") @Export("removeGroundItemPile") public void removeGroundItemPile(int var1, int var2, int var3) { Tile var4 = this.tiles[var1][var2][var3]; @@ -717,36 +723,36 @@ public class Scene { } } - @ObfuscatedName("ad") + @ObfuscatedName("j") @ObfuscatedSignature( - signature = "(III)Let;" + signature = "(III)Leu;" ) - public BoundaryObject method3225(int var1, int var2, int var3) { + public BoundaryObject method3130(int var1, int var2, int var3) { Tile var4 = this.tiles[var1][var2][var3]; return var4 == null ? null : var4.boundaryObject; } - @ObfuscatedName("ag") + @ObfuscatedName("ad") @ObfuscatedSignature( - signature = "(III)Lei;" + signature = "(III)Let;" ) - public WallDecoration method3339(int var1, int var2, int var3) { + public WallDecoration method3131(int var1, int var2, int var3) { Tile var4 = this.tiles[var1][var2][var3]; return var4 == null ? null : var4.wallDecoration; } - @ObfuscatedName("ak") + @ObfuscatedName("am") @ObfuscatedSignature( - signature = "(III)Lex;" + signature = "(III)Leh;" ) - public GameObject method3227(int var1, int var2, int var3) { + public GameObject method3253(int var1, int var2, int var3) { Tile var4 = this.tiles[var1][var2][var3]; if (var4 == null) { return null; } else { for (int var5 = 0; var5 < var4.gameObjectsCount; ++var5) { GameObject var6 = var4.gameObjects[var5]; - if (class188.method3793(var6.tag) && var2 == var6.startX && var3 == var6.startY) { + if (class247.method4577(var6.tag) && var2 == var6.startX && var3 == var6.startY) { return var6; } } @@ -755,9 +761,9 @@ public class Scene { } } - @ObfuscatedName("av") + @ObfuscatedName("ai") @ObfuscatedSignature( - signature = "(III)Ldx;" + signature = "(III)Ldu;" ) @Export("getFloorDecoration") public FloorDecoration getFloorDecoration(int var1, int var2, int var3) { @@ -765,21 +771,21 @@ public class Scene { return var4 != null && var4.floorDecoration != null ? var4.floorDecoration : null; } - @ObfuscatedName("am") + @ObfuscatedName("ag") @Export("getBoundaryObjectTag") public long getBoundaryObjectTag(int var1, int var2, int var3) { Tile var4 = this.tiles[var1][var2][var3]; return var4 != null && var4.boundaryObject != null ? var4.boundaryObject.tag : 0L; } - @ObfuscatedName("ab") + @ObfuscatedName("ao") @Export("getWallDecorationTag") public long getWallDecorationTag(int var1, int var2, int var3) { Tile var4 = this.tiles[var1][var2][var3]; return var4 != null && var4.wallDecoration != null ? var4.wallDecoration.tag : 0L; } - @ObfuscatedName("ax") + @ObfuscatedName("aw") @Export("getGameObjectTag") public long getGameObjectTag(int var1, int var2, int var3) { Tile var4 = this.tiles[var1][var2][var3]; @@ -788,7 +794,10 @@ public class Scene { } else { for (int var5 = 0; var5 < var4.gameObjectsCount; ++var5) { GameObject var6 = var4.gameObjects[var5]; - if (class188.method3793(var6.tag) && var2 == var6.startX && var3 == var6.startY) { + long var8 = var6.tag; + int var10 = (int)(var8 >>> 14 & 3L); + boolean var7 = var10 == 2; + if (var7 && var2 == var6.startX && var3 == var6.startY) { return var6.tag; } } @@ -797,14 +806,14 @@ public class Scene { } } - @ObfuscatedName("al") + @ObfuscatedName("ak") @Export("getFloorDecorationTag") public long getFloorDecorationTag(int var1, int var2, int var3) { Tile var4 = this.tiles[var1][var2][var3]; return var4 != null && var4.floorDecoration != null ? var4.floorDecoration.tag : 0L; } - @ObfuscatedName("ap") + @ObfuscatedName("aa") @Export("getObjectFlags") public int getObjectFlags(int var1, int var2, int var3, long var4) { Tile var6 = this.tiles[var1][var2][var3]; @@ -827,8 +836,8 @@ public class Scene { } } - @ObfuscatedName("aj") - public void method3234(int var1, int var2, int var3) { + @ObfuscatedName("ab") + public void method3165(int var1, int var2, int var3) { for (int var4 = 0; var4 < this.planes; ++var4) { for (int var5 = 0; var5 < this.xSize; ++var5) { for (int var6 = 0; var6 < this.ySize; ++var6) { @@ -838,11 +847,11 @@ public class Scene { ModelData var10; if (var8 != null && var8.entity1 instanceof ModelData) { ModelData var9 = (ModelData)var8.entity1; - this.method3236(var9, var4, var5, var6, 1, 1); + this.method3141(var9, var4, var5, var6, 1, 1); if (var8.entity2 instanceof ModelData) { var10 = (ModelData)var8.entity2; - this.method3236(var10, var4, var5, var6, 1, 1); - ModelData.method2956(var9, var10, 0, 0, 0, false); + this.method3141(var10, var4, var5, var6, 1, 1); + ModelData.method2828(var9, var10, 0, 0, 0, false); var8.entity2 = var10.toModel(var10.ambient, var10.contrast, var1, var2, var3); } @@ -853,7 +862,7 @@ public class Scene { GameObject var14 = var7.gameObjects[var12]; if (var14 != null && var14.entity instanceof ModelData) { ModelData var11 = (ModelData)var14.entity; - this.method3236(var11, var4, var5, var6, var14.endX - var14.startX + 1, var14.endY - var14.startY + 1); + this.method3141(var11, var4, var5, var6, var14.endX - var14.startX + 1, var14.endY - var14.startY + 1); var14.entity = var11.toModel(var11.ambient, var11.contrast, var1, var2, var3); } } @@ -861,7 +870,7 @@ public class Scene { FloorDecoration var13 = var7.floorDecoration; if (var13 != null && var13.entity instanceof ModelData) { var10 = (ModelData)var13.entity; - this.method3235(var10, var4, var5, var6); + this.method3140(var10, var4, var5, var6); var13.entity = var10.toModel(var10.ambient, var10.contrast, var1, var2, var3); } } @@ -871,18 +880,18 @@ public class Scene { } - @ObfuscatedName("ae") + @ObfuscatedName("ar") @ObfuscatedSignature( - signature = "(Ldu;III)V" + signature = "(Ldq;III)V" ) - void method3235(ModelData var1, int var2, int var3, int var4) { + void method3140(ModelData var1, int var2, int var3, int var4) { Tile var5; ModelData var6; if (var3 < this.xSize) { var5 = this.tiles[var2][var3 + 1][var4]; if (var5 != null && var5.floorDecoration != null && var5.floorDecoration.entity instanceof ModelData) { var6 = (ModelData)var5.floorDecoration.entity; - ModelData.method2956(var1, var6, 128, 0, 0, true); + ModelData.method2828(var1, var6, 128, 0, 0, true); } } @@ -890,7 +899,7 @@ public class Scene { var5 = this.tiles[var2][var3][var4 + 1]; if (var5 != null && var5.floorDecoration != null && var5.floorDecoration.entity instanceof ModelData) { var6 = (ModelData)var5.floorDecoration.entity; - ModelData.method2956(var1, var6, 0, 0, 128, true); + ModelData.method2828(var1, var6, 0, 0, 128, true); } } @@ -898,7 +907,7 @@ public class Scene { var5 = this.tiles[var2][var3 + 1][var4 + 1]; if (var5 != null && var5.floorDecoration != null && var5.floorDecoration.entity instanceof ModelData) { var6 = (ModelData)var5.floorDecoration.entity; - ModelData.method2956(var1, var6, 128, 0, 128, true); + ModelData.method2828(var1, var6, 128, 0, 128, true); } } @@ -906,17 +915,17 @@ public class Scene { var5 = this.tiles[var2][var3 + 1][var4 - 1]; if (var5 != null && var5.floorDecoration != null && var5.floorDecoration.entity instanceof ModelData) { var6 = (ModelData)var5.floorDecoration.entity; - ModelData.method2956(var1, var6, 128, 0, -128, true); + ModelData.method2828(var1, var6, 128, 0, -128, true); } } } - @ObfuscatedName("au") + @ObfuscatedName("av") @ObfuscatedSignature( - signature = "(Ldu;IIIII)V" + signature = "(Ldq;IIIII)V" ) - void method3236(ModelData var1, int var2, int var3, int var4, int var5, int var6) { + void method3141(ModelData var1, int var2, int var3, int var4, int var5, int var6) { boolean var7 = true; int var8 = var3; int var9 = var3 + var5; @@ -937,12 +946,12 @@ public class Scene { ModelData var18; if (var17.entity1 instanceof ModelData) { var18 = (ModelData)var17.entity1; - ModelData.method2956(var1, var18, (1 - var5) * 64 + (var13 - var3) * 128, var16, (var14 - var4) * 128 + (1 - var6) * 64, var7); + ModelData.method2828(var1, var18, (1 - var5) * 64 + (var13 - var3) * 128, var16, (var14 - var4) * 128 + (1 - var6) * 64, var7); } if (var17.entity2 instanceof ModelData) { var18 = (ModelData)var17.entity2; - ModelData.method2956(var1, var18, (1 - var5) * 64 + (var13 - var3) * 128, var16, (var14 - var4) * 128 + (1 - var6) * 64, var7); + ModelData.method2828(var1, var18, (1 - var5) * 64 + (var13 - var3) * 128, var16, (var14 - var4) * 128 + (1 - var6) * 64, var7); } } @@ -952,7 +961,7 @@ public class Scene { ModelData var20 = (ModelData)var19.entity; int var21 = var19.endX - var19.startX + 1; int var22 = var19.endY - var19.startY + 1; - ModelData.method2956(var1, var20, (var21 - var5) * 64 + (var19.startX - var3) * 128, var16, (var19.startY - var4) * 128 + (var22 - var6) * 64, var7); + ModelData.method2828(var1, var20, (var21 - var5) * 64 + (var19.startX - var3) * 128, var16, (var19.startY - var4) * 128 + (var22 - var6) * 64, var7); } } } @@ -968,7 +977,7 @@ public class Scene { } - @ObfuscatedName("ah") + @ObfuscatedName("aq") @Export("drawTileMinimap") public void drawTileMinimap(int[] var1, int var2, int var3, int var4, int var5, int var6) { Tile var7 = this.tiles[var4][var5][var6]; @@ -1033,10 +1042,10 @@ public class Scene { } } - @ObfuscatedName("ay") + @ObfuscatedName("at") @Export("menuOpen") public void menuOpen(int var1, int var2, int var3, boolean var4) { - if (!method3252() || var4) { + if (!method3146() || var4) { checkClick = true; viewportWalking = var4; Scene_selectedPlane = var1; @@ -1047,13 +1056,13 @@ public class Scene { } } - @ObfuscatedName("az") + @ObfuscatedName("ae") @Export("setViewportWalking") public void setViewportWalking() { viewportWalking = true; } - @ObfuscatedName("ac") + @ObfuscatedName("an") @Export("draw") public void draw(int var1, int var2, int var3, int var4, int var5, int var6) { if (var1 < 0) { @@ -1120,11 +1129,7 @@ public class Scene { for (var10 = Scene_cameraYTileMin; var10 < Scene_cameraYTileMax; ++var10) { Tile var11 = var8[var9][var10]; if (var11 != null) { - if (var11.minPlane > var6 || !visibleTiles[var9 - Scene_cameraXTile + 25][var10 - Scene_cameraYTile + 25] && this.tileHeights[var7][var9][var10] - var2 < 2000) { - var11.drawPrimary = false; - var11.drawSecondary = false; - var11.drawGameObjectEdges = 0; - } else { + if (var11.minPlane <= var6 && (visibleTiles[var9 - Scene_cameraXTile + 25][var10 - Scene_cameraYTile + 25] || this.tileHeights[var7][var9][var10] - var2 >= 2000)) { var11.drawPrimary = true; var11.drawSecondary = true; if (var11.gameObjectsCount > 0) { @@ -1134,6 +1139,10 @@ public class Scene { } ++tileUpdateCount; + } else { + var11.drawPrimary = false; + var11.drawSecondary = false; + var11.drawGameObjectEdges = 0; } } } @@ -1250,9 +1259,9 @@ public class Scene { checkClick = false; } - @ObfuscatedName("at") + @ObfuscatedName("al") @ObfuscatedSignature( - signature = "(Ldh;Z)V" + signature = "(Ldm;Z)V" ) @Export("drawTile") void drawTile(Tile var1, boolean var2) { @@ -1346,10 +1355,10 @@ public class Scene { if (var3.linkedBelowTile != null) { var9 = var3.linkedBelowTile; if (var9.paint != null) { - if (!this.method3251(0, var4, var5)) { + if (!this.method3216(0, var4, var5)) { this.drawTileUnderlay(var9.paint, 0, Scene_cameraPitchSine, Scene_cameraPitchCosine, Scene_cameraYawSine, Scene_cameraYawCosine, var4, var5); } - } else if (var9.model != null && !this.method3251(0, var4, var5)) { + } else if (var9.model != null && !this.method3216(0, var4, var5)) { this.drawTileOverlay(var9.model, Scene_cameraPitchSine, Scene_cameraPitchCosine, Scene_cameraYawSine, Scene_cameraYawCosine, var4, var5); } @@ -1368,13 +1377,13 @@ public class Scene { var20 = false; if (var3.paint != null) { - if (!this.method3251(var7, var4, var5)) { + if (!this.method3216(var7, var4, var5)) { var20 = true; if (var3.paint.neColor != 12345678 || checkClick && var6 <= Scene_selectedPlane) { this.drawTileUnderlay(var3.paint, var7, Scene_cameraPitchSine, Scene_cameraPitchCosine, Scene_cameraYawSine, Scene_cameraYawCosine, var4, var5); } } - } else if (var3.model != null && !this.method3251(var7, var4, var5)) { + } else if (var3.model != null && !this.method3216(var7, var4, var5)) { var20 = true; this.drawTileOverlay(var3.model, Scene_cameraPitchSine, Scene_cameraPitchCosine, Scene_cameraYawSine, Scene_cameraYawCosine, var4, var5); } @@ -1396,43 +1405,43 @@ public class Scene { var21 += 6; } - var11 = field1824[var21]; - var3.field1637 = field1826[var21]; + var11 = field1814[var21]; + var3.field1650 = field1839[var21]; } if (var31 != null) { - if ((var31.orientationA & field1829[var21]) != 0) { + if ((var31.orientationA & field1838[var21]) != 0) { if (var31.orientationA == 16) { var3.drawGameObjectEdges = 3; - var3.field1638 = field1780[var21]; - var3.field1639 = 3 - var3.field1638; + var3.field1655 = field1798[var21]; + var3.field1656 = 3 - var3.field1655; } else if (var31.orientationA == 32) { var3.drawGameObjectEdges = 6; - var3.field1638 = field1828[var21]; - var3.field1639 = 6 - var3.field1638; + var3.field1655 = field1841[var21]; + var3.field1656 = 6 - var3.field1655; } else if (var31.orientationA == 64) { var3.drawGameObjectEdges = 12; - var3.field1638 = field1836[var21]; - var3.field1639 = 12 - var3.field1638; + var3.field1655 = field1848[var21]; + var3.field1656 = 12 - var3.field1655; } else { var3.drawGameObjectEdges = 9; - var3.field1638 = field1830[var21]; - var3.field1639 = 9 - var3.field1638; + var3.field1655 = field1843[var21]; + var3.field1656 = 9 - var3.field1655; } } else { var3.drawGameObjectEdges = 0; } - if ((var31.orientationA & var11) != 0 && !this.method3272(var7, var4, var5, var31.orientationA)) { + if ((var31.orientationA & var11) != 0 && !this.method3224(var7, var4, var5, var31.orientationA)) { var31.entity1.draw(0, Scene_cameraPitchSine, Scene_cameraPitchCosine, Scene_cameraYawSine, Scene_cameraYawCosine, var31.x * 4096 - Scene_cameraX, var31.tileHeight - Scene_cameraY, var31.y * 4096 - Scene_cameraZ, var31.tag); } - if ((var31.orientationB & var11) != 0 && !this.method3272(var7, var4, var5, var31.orientationB)) { + if ((var31.orientationB & var11) != 0 && !this.method3224(var7, var4, var5, var31.orientationB)) { var31.entity2.draw(0, Scene_cameraPitchSine, Scene_cameraPitchCosine, Scene_cameraYawSine, Scene_cameraYawCosine, var31.x * 4096 - Scene_cameraX, var31.tileHeight - Scene_cameraY, var31.y * 4096 - Scene_cameraZ, var31.tag); } } - if (var13 != null && !this.method3244(var7, var4, var5, var13.entity1.height)) { + if (var13 != null && !this.method3157(var7, var4, var5, var13.entity1.height)) { if ((var13.orientation & var11) != 0) { var13.entity1.draw(0, Scene_cameraPitchSine, Scene_cameraPitchCosine, Scene_cameraYawSine, Scene_cameraYawCosine, var13.xOffset + (var13.x * 4096 - Scene_cameraX), var13.tileHeight - Scene_cameraY, var13.yOffset + (var13.y * 4096 - Scene_cameraZ), var13.tag); } else if (var13.orientation == 256) { @@ -1464,7 +1473,7 @@ public class Scene { if (var20) { FloorDecoration var22 = var3.floorDecoration; if (var22 != null) { - var22.entity.draw(0, Scene_cameraPitchSine, Scene_cameraPitchCosine, Scene_cameraYawSine, Scene_cameraYawCosine, var22.x * 4096 - Scene_cameraX, var22.tileHeight - Scene_cameraY, var22.y * 4096 - Scene_cameraZ, var22.tag); + var22.entity.draw(0, Scene_cameraPitchSine, Scene_cameraPitchCosine, Scene_cameraYawSine, Scene_cameraYawCosine, var22.x * 4096 - Scene_cameraX, var22.tileHeight - Scene_cameraY, var22.y * 64 - Scene_cameraZ, var22.tag); } TileItemPile var23 = var3.tileItemPile; @@ -1520,7 +1529,7 @@ public class Scene { var20 = true; for (var21 = 0; var21 < var3.gameObjectsCount; ++var21) { - if (var3.gameObjects[var21].lastDrawn != Scene_drawnCount && (var3.gameObjectEdgeMasks[var21] & var3.drawGameObjectEdges) == var3.field1638) { + if (var3.gameObjects[var21].lastDrawn != Scene_drawnCount && (var3.gameObjectEdgeMasks[var21] & var3.drawGameObjectEdges) == var3.field1655) { var20 = false; break; } @@ -1528,7 +1537,7 @@ public class Scene { if (var20) { var10 = var3.boundaryObject; - if (!this.method3272(var7, var4, var5, var10.orientationA)) { + if (!this.method3224(var7, var4, var5, var10.orientationA)) { var10.entity1.draw(0, Scene_cameraPitchSine, Scene_cameraPitchCosine, Scene_cameraYawSine, Scene_cameraYawCosine, var10.x * 4096 - Scene_cameraX, var10.tileHeight - Scene_cameraY, var10.y * 4096 - Scene_cameraZ, var10.tag); } @@ -1575,7 +1584,7 @@ public class Scene { var16 += 2; } - if ((var16 & var36.drawGameObjectEdges) == var3.field1639) { + if ((var16 & var36.drawGameObjectEdges) == var3.field1656) { var3.drawGameObjects = true; continue label563; } @@ -1593,9 +1602,9 @@ public class Scene { var15 = Scene_cameraYTile - var12.startY; var16 = var12.endY - Scene_cameraYTile; if (var16 > var15) { - var12.field1912 = var24 + var16; + var12.field1925 = var24 + var16; } else { - var12.field1912 = var24 + var15; + var12.field1925 = var24 + var15; } } } @@ -1607,10 +1616,10 @@ public class Scene { for (var24 = 0; var24 < var21; ++var24) { GameObject var35 = gameObjects[var24]; if (var35.lastDrawn != Scene_drawnCount) { - if (var35.field1912 > var11) { - var11 = var35.field1912; + if (var35.field1925 > var11) { + var11 = var35.field1925; var25 = var24; - } else if (var11 == var35.field1912) { + } else if (var11 == var35.field1925) { var15 = var35.centerX - Scene_cameraX; var16 = var35.centerY - Scene_cameraZ; var17 = gameObjects[var25].centerX - Scene_cameraX; @@ -1628,7 +1637,7 @@ public class Scene { GameObject var33 = gameObjects[var25]; var33.lastDrawn = Scene_drawnCount; - if (!this.method3240(var7, var33.startX, var33.endX, var33.startY, var33.endY, var33.entity.height)) { + if (!this.method3158(var7, var33.startX, var33.endX, var33.startY, var33.endY, var33.entity.height)) { var33.entity.draw(var33.orientation, Scene_cameraPitchSine, Scene_cameraPitchCosine, Scene_cameraYawSine, Scene_cameraYawCosine, var33.centerX - Scene_cameraX, var33.height - Scene_cameraY, var33.centerY - Scene_cameraZ, var33.tag); } @@ -1700,10 +1709,10 @@ public class Scene { } } - if (var3.field1637 != 0) { + if (var3.field1650 != 0) { WallDecoration var29 = var3.wallDecoration; - if (var29 != null && !this.method3244(var7, var4, var5, var29.entity1.height)) { - if ((var29.orientation & var3.field1637) != 0) { + if (var29 != null && !this.method3157(var7, var4, var5, var29.entity1.height)) { + if ((var29.orientation & var3.field1650) != 0) { var29.entity1.draw(0, Scene_cameraPitchSine, Scene_cameraPitchCosine, Scene_cameraYawSine, Scene_cameraYawCosine, var29.xOffset + (var29.x * 4096 - Scene_cameraX), var29.tileHeight - Scene_cameraY, var29.yOffset + (var29.y * 4096 - Scene_cameraZ), var29.tag); } else if (var29.orientation == 256) { var11 = var29.x * 4096 - Scene_cameraX; @@ -1732,11 +1741,11 @@ public class Scene { BoundaryObject var27 = var3.boundaryObject; if (var27 != null) { - if ((var27.orientationB & var3.field1637) != 0 && !this.method3272(var7, var4, var5, var27.orientationB)) { + if ((var27.orientationB & var3.field1650) != 0 && !this.method3224(var7, var4, var5, var27.orientationB)) { var27.entity2.draw(0, Scene_cameraPitchSine, Scene_cameraPitchCosine, Scene_cameraYawSine, Scene_cameraYawCosine, var27.x * 4096 - Scene_cameraX, var27.tileHeight - Scene_cameraY, var27.y * 4096 - Scene_cameraZ, var27.tag); } - if ((var27.orientationA & var3.field1637) != 0 && !this.method3272(var7, var4, var5, var27.orientationA)) { + if ((var27.orientationA & var3.field1650) != 0 && !this.method3224(var7, var4, var5, var27.orientationA)) { var27.entity1.draw(0, Scene_cameraPitchSine, Scene_cameraPitchCosine, Scene_cameraYawSine, Scene_cameraYawCosine, var27.x * 4096 - Scene_cameraX, var27.tileHeight - Scene_cameraY, var27.y * 4096 - Scene_cameraZ, var27.tag); } } @@ -1780,9 +1789,9 @@ public class Scene { } } - @ObfuscatedName("as") + @ObfuscatedName("ay") @ObfuscatedSignature( - signature = "(Leg;IIIIIII)V" + signature = "(Ley;IIIIIII)V" ) @Export("drawTileUnderlay") void drawTileUnderlay(TilePaint var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8) { @@ -1836,9 +1845,9 @@ public class Scene { Rasterizer3D.Rasterizer3D_alpha = 0; int var30; if ((var26 - var28) * (var25 - var29) - (var27 - var29) * (var24 - var28) > 0) { - Rasterizer3D.field1745 = false; + Rasterizer3D.field1757 = false; if (var26 < 0 || var28 < 0 || var24 < 0 || var26 > Rasterizer3D.Rasterizer3D_clipWidth || var28 > Rasterizer3D.Rasterizer3D_clipWidth || var24 > Rasterizer3D.Rasterizer3D_clipWidth) { - Rasterizer3D.field1745 = true; + Rasterizer3D.field1757 = true; } if (checkClick && containsBounds(Scene_selectedScreenX, Scene_selectedScreenY, var27, var29, var25, var26, var28, var24)) { @@ -1848,7 +1857,7 @@ public class Scene { if (var1.texture == -1) { if (var1.neColor != 12345678) { - Rasterizer3D.method3132(var27, var29, var25, var26, var28, var24, var1.neColor, var1.nwColor, var1.seColor); + Rasterizer3D.method3030(var27, var29, var25, var26, var28, var24, var1.neColor, var1.nwColor, var1.seColor); } } else if (!Scene_isLowDetail) { if (var1.isFlat) { @@ -1858,14 +1867,14 @@ public class Scene { } } else { var30 = Rasterizer3D.Rasterizer3D_textureLoader.getAverageTextureRGB(var1.texture); - Rasterizer3D.method3132(var27, var29, var25, var26, var28, var24, method3357(var30, var1.neColor), method3357(var30, var1.nwColor), method3357(var30, var1.seColor)); + Rasterizer3D.method3030(var27, var29, var25, var26, var28, var24, method3152(var30, var1.neColor), method3152(var30, var1.nwColor), method3152(var30, var1.seColor)); } } if ((var22 - var24) * (var29 - var25) - (var23 - var25) * (var28 - var24) > 0) { - Rasterizer3D.field1745 = false; + Rasterizer3D.field1757 = false; if (var22 < 0 || var24 < 0 || var28 < 0 || var22 > Rasterizer3D.Rasterizer3D_clipWidth || var24 > Rasterizer3D.Rasterizer3D_clipWidth || var28 > Rasterizer3D.Rasterizer3D_clipWidth) { - Rasterizer3D.field1745 = true; + Rasterizer3D.field1757 = true; } if (checkClick && containsBounds(Scene_selectedScreenX, Scene_selectedScreenY, var23, var25, var29, var22, var24, var28)) { @@ -1875,13 +1884,13 @@ public class Scene { if (var1.texture == -1) { if (var1.swColor != 12345678) { - Rasterizer3D.method3132(var23, var25, var29, var22, var24, var28, var1.swColor, var1.seColor, var1.nwColor); + Rasterizer3D.method3030(var23, var25, var29, var22, var24, var28, var1.swColor, var1.seColor, var1.nwColor); } } else if (!Scene_isLowDetail) { Rasterizer3D.drawTexturedTile(var23, var25, var29, var22, var24, var28, var1.swColor, var1.seColor, var1.nwColor, var10, var14, var9, var17, var18, var21, var12, var11, var15, var1.texture); } else { var30 = Rasterizer3D.Rasterizer3D_textureLoader.getAverageTextureRGB(var1.texture); - Rasterizer3D.method3132(var23, var25, var29, var22, var24, var28, method3357(var30, var1.swColor), method3357(var30, var1.seColor), method3357(var30, var1.nwColor)); + Rasterizer3D.method3030(var23, var25, var29, var22, var24, var28, method3152(var30, var1.swColor), method3152(var30, var1.seColor), method3152(var30, var1.nwColor)); } } @@ -1891,9 +1900,9 @@ public class Scene { } } - @ObfuscatedName("ba") + @ObfuscatedName("ax") @ObfuscatedSignature( - signature = "(Ldk;IIIIII)V" + signature = "(Ldo;IIIIII)V" ) @Export("drawTileOverlay") void drawTileOverlay(TileModel var1, int var2, int var3, int var4, int var5, int var6, int var7) { @@ -1918,13 +1927,13 @@ public class Scene { } if (var1.triangleTextureId != null) { - TileModel.field1562[var9] = var10; - TileModel.field1580[var9] = var13; - TileModel.field1573[var9] = var12; + TileModel.field1596[var9] = var10; + TileModel.field1599[var9] = var13; + TileModel.field1598[var9] = var12; } - TileModel.field1577[var9] = var10 * Rasterizer3D.Rasterizer3D_zoom / var12 + Rasterizer3D.Rasterizer3D_clipMidX; - TileModel.field1578[var9] = var13 * Rasterizer3D.Rasterizer3D_zoom / var12 + Rasterizer3D.Rasterizer3D_clipMidY; + TileModel.field1594[var9] = var10 * Rasterizer3D.Rasterizer3D_zoom / var12 + Rasterizer3D.Rasterizer3D_clipMidX; + TileModel.field1595[var9] = var13 * Rasterizer3D.Rasterizer3D_zoom / var12 + Rasterizer3D.Rasterizer3D_clipMidY; } Rasterizer3D.Rasterizer3D_alpha = 0; @@ -1934,16 +1943,16 @@ public class Scene { var10 = var1.faceX[var9]; var11 = var1.faceY[var9]; var12 = var1.faceZ[var9]; - var13 = TileModel.field1577[var10]; - int var14 = TileModel.field1577[var11]; - int var15 = TileModel.field1577[var12]; - int var16 = TileModel.field1578[var10]; - int var17 = TileModel.field1578[var11]; - int var18 = TileModel.field1578[var12]; + var13 = TileModel.field1594[var10]; + int var14 = TileModel.field1594[var11]; + int var15 = TileModel.field1594[var12]; + int var16 = TileModel.field1595[var10]; + int var17 = TileModel.field1595[var11]; + int var18 = TileModel.field1595[var12]; if ((var13 - var14) * (var18 - var17) - (var16 - var17) * (var15 - var14) > 0) { - Rasterizer3D.field1745 = false; + Rasterizer3D.field1757 = false; if (var13 < 0 || var14 < 0 || var15 < 0 || var13 > Rasterizer3D.Rasterizer3D_clipWidth || var14 > Rasterizer3D.Rasterizer3D_clipWidth || var15 > Rasterizer3D.Rasterizer3D_clipWidth) { - Rasterizer3D.field1745 = true; + Rasterizer3D.field1757 = true; } if (checkClick && containsBounds(Scene_selectedScreenX, Scene_selectedScreenY, var16, var17, var18, var13, var14, var15)) { @@ -1954,23 +1963,23 @@ public class Scene { if (var1.triangleTextureId != null && var1.triangleTextureId[var9] != -1) { if (!Scene_isLowDetail) { if (var1.isFlat) { - Rasterizer3D.drawTexturedTile(var16, var17, var18, var13, var14, var15, var1.triangleColorA[var9], var1.triangleColorB[var9], var1.triangleColorC[var9], TileModel.field1562[0], TileModel.field1562[1], TileModel.field1562[3], TileModel.field1580[0], TileModel.field1580[1], TileModel.field1580[3], TileModel.field1573[0], TileModel.field1573[1], TileModel.field1573[3], var1.triangleTextureId[var9]); + Rasterizer3D.drawTexturedTile(var16, var17, var18, var13, var14, var15, var1.triangleColorA[var9], var1.triangleColorB[var9], var1.triangleColorC[var9], TileModel.field1596[0], TileModel.field1596[1], TileModel.field1596[3], TileModel.field1599[0], TileModel.field1599[1], TileModel.field1599[3], TileModel.field1598[0], TileModel.field1598[1], TileModel.field1598[3], var1.triangleTextureId[var9]); } else { - Rasterizer3D.drawTexturedTile(var16, var17, var18, var13, var14, var15, var1.triangleColorA[var9], var1.triangleColorB[var9], var1.triangleColorC[var9], TileModel.field1562[var10], TileModel.field1562[var11], TileModel.field1562[var12], TileModel.field1580[var10], TileModel.field1580[var11], TileModel.field1580[var12], TileModel.field1573[var10], TileModel.field1573[var11], TileModel.field1573[var12], var1.triangleTextureId[var9]); + Rasterizer3D.drawTexturedTile(var16, var17, var18, var13, var14, var15, var1.triangleColorA[var9], var1.triangleColorB[var9], var1.triangleColorC[var9], TileModel.field1596[var10], TileModel.field1596[var11], TileModel.field1596[var12], TileModel.field1599[var10], TileModel.field1599[var11], TileModel.field1599[var12], TileModel.field1598[var10], TileModel.field1598[var11], TileModel.field1598[var12], var1.triangleTextureId[var9]); } } else { int var19 = Rasterizer3D.Rasterizer3D_textureLoader.getAverageTextureRGB(var1.triangleTextureId[var9]); - Rasterizer3D.method3132(var16, var17, var18, var13, var14, var15, method3357(var19, var1.triangleColorA[var9]), method3357(var19, var1.triangleColorB[var9]), method3357(var19, var1.triangleColorC[var9])); + Rasterizer3D.method3030(var16, var17, var18, var13, var14, var15, method3152(var19, var1.triangleColorA[var9]), method3152(var19, var1.triangleColorB[var9]), method3152(var19, var1.triangleColorC[var9])); } } else if (var1.triangleColorA[var9] != 12345678) { - Rasterizer3D.method3132(var16, var17, var18, var13, var14, var15, var1.triangleColorA[var9], var1.triangleColorB[var9], var1.triangleColorC[var9]); + Rasterizer3D.method3030(var16, var17, var18, var13, var14, var15, var1.triangleColorA[var9], var1.triangleColorB[var9], var1.triangleColorC[var9]); } } } } - @ObfuscatedName("bd") + @ObfuscatedName("ah") @Export("occlude") void occlude() { int var1 = Scene_planeOccluderCounts[Scene_plane]; @@ -2009,20 +2018,20 @@ public class Scene { if (var13) { var9 = Scene_cameraX - var4.minX; if (var9 > 32) { - var4.field1869 = 1; + var4.field1896 = 1; } else { if (var9 >= -32) { continue; } - var4.field1869 = 2; + var4.field1896 = 2; var9 = -var9; } - var4.field1883 = (var4.minZ - Scene_cameraZ << 8) / var9; - var4.field1884 = (var4.maxZ - Scene_cameraZ << 8) / var9; - var4.field1882 = (var4.minY - Scene_cameraY << 8) / var9; - var4.field1885 = (var4.maxY - Scene_cameraY << 8) / var9; + var4.field1900 = (var4.minZ - Scene_cameraZ << 8) / var9; + var4.field1890 = (var4.maxZ - Scene_cameraZ << 8) / var9; + var4.field1901 = (var4.minY - Scene_cameraY << 8) / var9; + var4.field1902 = (var4.maxY - Scene_cameraY << 8) / var9; Scene_currentOccluders[Scene_currentOccludersCount++] = var4; } } @@ -2051,20 +2060,20 @@ public class Scene { if (var13) { var9 = Scene_cameraZ - var4.minZ; if (var9 > 32) { - var4.field1869 = 3; + var4.field1896 = 3; } else { if (var9 >= -32) { continue; } - var4.field1869 = 4; + var4.field1896 = 4; var9 = -var9; } - var4.field1887 = (var4.minX - Scene_cameraX << 8) / var9; - var4.field1880 = (var4.maxX - Scene_cameraX << 8) / var9; - var4.field1882 = (var4.minY - Scene_cameraY << 8) / var9; - var4.field1885 = (var4.maxY - Scene_cameraY << 8) / var9; + var4.field1897 = (var4.minX - Scene_cameraX << 8) / var9; + var4.field1898 = (var4.maxX - Scene_cameraX << 8) / var9; + var4.field1901 = (var4.minY - Scene_cameraY << 8) / var9; + var4.field1902 = (var4.maxY - Scene_cameraY << 8) / var9; Scene_currentOccluders[Scene_currentOccludersCount++] = var4; } } @@ -2094,22 +2103,22 @@ public class Scene { boolean var10 = false; - label146: + label144: for (int var11 = var8; var11 <= var9; ++var11) { for (int var12 = var6; var12 <= var7; ++var12) { if (visibleTiles[var11][var12]) { var10 = true; - break label146; + break label144; } } } if (var10) { - var4.field1869 = 5; - var4.field1887 = (var4.minX - Scene_cameraX << 8) / var5; - var4.field1880 = (var4.maxX - Scene_cameraX << 8) / var5; - var4.field1883 = (var4.minZ - Scene_cameraZ << 8) / var5; - var4.field1884 = (var4.maxZ - Scene_cameraZ << 8) / var5; + var4.field1896 = 5; + var4.field1897 = (var4.minX - Scene_cameraX << 8) / var5; + var4.field1898 = (var4.maxX - Scene_cameraX << 8) / var5; + var4.field1900 = (var4.minZ - Scene_cameraZ << 8) / var5; + var4.field1890 = (var4.maxZ - Scene_cameraZ << 8) / var5; Scene_currentOccluders[Scene_currentOccludersCount++] = var4; } } @@ -2119,9 +2128,9 @@ public class Scene { } - @ObfuscatedName("bx") - boolean method3251(int var1, int var2, int var3) { - int var4 = this.field1809[var1][var2][var3]; + @ObfuscatedName("bi") + boolean method3216(int var1, int var2, int var3) { + int var4 = this.field1800[var1][var2][var3]; if (var4 == -Scene_drawnCount) { return false; } else if (var4 == Scene_drawnCount) { @@ -2129,19 +2138,19 @@ public class Scene { } else { int var5 = var2 << 7; int var6 = var3 << 7; - if (this.method3237(var5 + 1, this.tileHeights[var1][var2][var3], var6 + 1) && this.method3237(var5 + 128 - 1, this.tileHeights[var1][var2 + 1][var3], var6 + 1) && this.method3237(var5 + 128 - 1, this.tileHeights[var1][var2 + 1][var3 + 1], var6 + 128 - 1) && this.method3237(var5 + 1, this.tileHeights[var1][var2][var3 + 1], var6 + 128 - 1)) { - this.field1809[var1][var2][var3] = Scene_drawnCount; + if (this.method3159(var5 + 1, this.tileHeights[var1][var2][var3], var6 + 1) && this.method3159(var5 + 128 - 1, this.tileHeights[var1][var2 + 1][var3], var6 + 1) && this.method3159(var5 + 128 - 1, this.tileHeights[var1][var2 + 1][var3 + 1], var6 + 128 - 1) && this.method3159(var5 + 1, this.tileHeights[var1][var2][var3 + 1], var6 + 128 - 1)) { + this.field1800[var1][var2][var3] = Scene_drawnCount; return true; } else { - this.field1809[var1][var2][var3] = -Scene_drawnCount; + this.field1800[var1][var2][var3] = -Scene_drawnCount; return false; } } } - @ObfuscatedName("bl") - boolean method3272(int var1, int var2, int var3, int var4) { - if (!this.method3251(var1, var2, var3)) { + @ObfuscatedName("bo") + boolean method3224(int var1, int var2, int var3, int var4) { + if (!this.method3216(var1, var2, var3)) { return false; } else { int var5 = var2 << 7; @@ -2153,30 +2162,30 @@ public class Scene { if (var4 < 16) { if (var4 == 1) { if (var5 > Scene_cameraX) { - if (!this.method3237(var5, var7, var6)) { + if (!this.method3159(var5, var7, var6)) { return false; } - if (!this.method3237(var5, var7, var6 + 128)) { + if (!this.method3159(var5, var7, var6 + 128)) { return false; } } if (var1 > 0) { - if (!this.method3237(var5, var8, var6)) { + if (!this.method3159(var5, var8, var6)) { return false; } - if (!this.method3237(var5, var8, var6 + 128)) { + if (!this.method3159(var5, var8, var6 + 128)) { return false; } } - if (!this.method3237(var5, var9, var6)) { + if (!this.method3159(var5, var9, var6)) { return false; } - if (!this.method3237(var5, var9, var6 + 128)) { + if (!this.method3159(var5, var9, var6 + 128)) { return false; } @@ -2185,30 +2194,30 @@ public class Scene { if (var4 == 2) { if (var6 < Scene_cameraZ) { - if (!this.method3237(var5, var7, var6 + 128)) { + if (!this.method3159(var5, var7, var6 + 128)) { return false; } - if (!this.method3237(var5 + 128, var7, var6 + 128)) { + if (!this.method3159(var5 + 128, var7, var6 + 128)) { return false; } } if (var1 > 0) { - if (!this.method3237(var5, var8, var6 + 128)) { + if (!this.method3159(var5, var8, var6 + 128)) { return false; } - if (!this.method3237(var5 + 128, var8, var6 + 128)) { + if (!this.method3159(var5 + 128, var8, var6 + 128)) { return false; } } - if (!this.method3237(var5, var9, var6 + 128)) { + if (!this.method3159(var5, var9, var6 + 128)) { return false; } - if (!this.method3237(var5 + 128, var9, var6 + 128)) { + if (!this.method3159(var5 + 128, var9, var6 + 128)) { return false; } @@ -2217,30 +2226,30 @@ public class Scene { if (var4 == 4) { if (var5 < Scene_cameraX) { - if (!this.method3237(var5 + 128, var7, var6)) { + if (!this.method3159(var5 + 128, var7, var6)) { return false; } - if (!this.method3237(var5 + 128, var7, var6 + 128)) { + if (!this.method3159(var5 + 128, var7, var6 + 128)) { return false; } } if (var1 > 0) { - if (!this.method3237(var5 + 128, var8, var6)) { + if (!this.method3159(var5 + 128, var8, var6)) { return false; } - if (!this.method3237(var5 + 128, var8, var6 + 128)) { + if (!this.method3159(var5 + 128, var8, var6 + 128)) { return false; } } - if (!this.method3237(var5 + 128, var9, var6)) { + if (!this.method3159(var5 + 128, var9, var6)) { return false; } - if (!this.method3237(var5 + 128, var9, var6 + 128)) { + if (!this.method3159(var5 + 128, var9, var6 + 128)) { return false; } @@ -2249,30 +2258,30 @@ public class Scene { if (var4 == 8) { if (var6 > Scene_cameraZ) { - if (!this.method3237(var5, var7, var6)) { + if (!this.method3159(var5, var7, var6)) { return false; } - if (!this.method3237(var5 + 128, var7, var6)) { + if (!this.method3159(var5 + 128, var7, var6)) { return false; } } if (var1 > 0) { - if (!this.method3237(var5, var8, var6)) { + if (!this.method3159(var5, var8, var6)) { return false; } - if (!this.method3237(var5 + 128, var8, var6)) { + if (!this.method3159(var5 + 128, var8, var6)) { return false; } } - if (!this.method3237(var5, var9, var6)) { + if (!this.method3159(var5, var9, var6)) { return false; } - if (!this.method3237(var5 + 128, var9, var6)) { + if (!this.method3159(var5 + 128, var9, var6)) { return false; } @@ -2280,49 +2289,49 @@ public class Scene { } } - if (!this.method3237(var5 + 64, var10, var6 + 64)) { + if (!this.method3159(var5 + 64, var10, var6 + 64)) { return false; } else if (var4 == 16) { - return this.method3237(var5, var9, var6 + 128); + return this.method3159(var5, var9, var6 + 128); } else if (var4 == 32) { - return this.method3237(var5 + 128, var9, var6 + 128); + return this.method3159(var5 + 128, var9, var6 + 128); } else if (var4 == 64) { - return this.method3237(var5 + 128, var9, var6); + return this.method3159(var5 + 128, var9, var6); } else if (var4 == 128) { - return this.method3237(var5, var9, var6); + return this.method3159(var5, var9, var6); } else { return true; } } } - @ObfuscatedName("bh") - boolean method3244(int var1, int var2, int var3, int var4) { - if (!this.method3251(var1, var2, var3)) { + @ObfuscatedName("bx") + boolean method3157(int var1, int var2, int var3, int var4) { + if (!this.method3216(var1, var2, var3)) { return false; } else { int var5 = var2 << 7; int var6 = var3 << 7; - return this.method3237(var5 + 1, this.tileHeights[var1][var2][var3] - var4, var6 + 1) && this.method3237(var5 + 128 - 1, this.tileHeights[var1][var2 + 1][var3] - var4, var6 + 1) && this.method3237(var5 + 128 - 1, this.tileHeights[var1][var2 + 1][var3 + 1] - var4, var6 + 128 - 1) && this.method3237(var5 + 1, this.tileHeights[var1][var2][var3 + 1] - var4, var6 + 128 - 1); + return this.method3159(var5 + 1, this.tileHeights[var1][var2][var3] - var4, var6 + 1) && this.method3159(var5 + 128 - 1, this.tileHeights[var1][var2 + 1][var3] - var4, var6 + 1) && this.method3159(var5 + 128 - 1, this.tileHeights[var1][var2 + 1][var3 + 1] - var4, var6 + 128 - 1) && this.method3159(var5 + 1, this.tileHeights[var1][var2][var3 + 1] - var4, var6 + 128 - 1); } } @ObfuscatedName("bu") - boolean method3240(int var1, int var2, int var3, int var4, int var5, int var6) { + boolean method3158(int var1, int var2, int var3, int var4, int var5, int var6) { int var7; int var8; if (var3 == var2 && var5 == var4) { - if (!this.method3251(var1, var2, var4)) { + if (!this.method3216(var1, var2, var4)) { return false; } else { var7 = var2 << 7; var8 = var4 << 7; - return this.method3237(var7 + 1, this.tileHeights[var1][var2][var4] - var6, var8 + 1) && this.method3237(var7 + 128 - 1, this.tileHeights[var1][var2 + 1][var4] - var6, var8 + 1) && this.method3237(var7 + 128 - 1, this.tileHeights[var1][var2 + 1][var4 + 1] - var6, var8 + 128 - 1) && this.method3237(var7 + 1, this.tileHeights[var1][var2][var4 + 1] - var6, var8 + 128 - 1); + return this.method3159(var7 + 1, this.tileHeights[var1][var2][var4] - var6, var8 + 1) && this.method3159(var7 + 128 - 1, this.tileHeights[var1][var2 + 1][var4] - var6, var8 + 1) && this.method3159(var7 + 128 - 1, this.tileHeights[var1][var2 + 1][var4 + 1] - var6, var8 + 128 - 1) && this.method3159(var7 + 1, this.tileHeights[var1][var2][var4 + 1] - var6, var8 + 128 - 1); } } else { for (var7 = var2; var7 <= var3; ++var7) { for (var8 = var4; var8 <= var5; ++var8) { - if (this.field1809[var1][var7][var8] == -Scene_drawnCount) { + if (this.field1800[var1][var7][var8] == -Scene_drawnCount) { return false; } } @@ -2331,17 +2340,17 @@ public class Scene { var7 = (var2 << 7) + 1; var8 = (var4 << 7) + 2; int var9 = this.tileHeights[var1][var2][var4] - var6; - if (!this.method3237(var7, var9, var8)) { + if (!this.method3159(var7, var9, var8)) { return false; } else { int var10 = (var3 << 7) - 1; - if (!this.method3237(var10, var9, var8)) { + if (!this.method3159(var10, var9, var8)) { return false; } else { int var11 = (var5 << 7) - 1; - if (!this.method3237(var7, var9, var11)) { + if (!this.method3159(var7, var9, var11)) { return false; - } else if (!this.method3237(var10, var9, var11)) { + } else if (!this.method3159(var10, var9, var11)) { return false; } else { return true; @@ -2351,8 +2360,8 @@ public class Scene { } } - @ObfuscatedName("br") - boolean method3237(int var1, int var2, int var3) { + @ObfuscatedName("bd") + boolean method3159(int var1, int var2, int var3) { for (int var4 = 0; var4 < Scene_currentOccludersCount; ++var4) { Occluder var5 = Scene_currentOccluders[var4]; int var6; @@ -2360,57 +2369,57 @@ public class Scene { int var8; int var9; int var10; - if (var5.field1869 == 1) { + if (var5.field1896 == 1) { var6 = var5.minX - var1; if (var6 > 0) { - var7 = (var6 * var5.field1883 >> 8) + var5.minZ; - var8 = (var6 * var5.field1884 >> 8) + var5.maxZ; - var9 = (var6 * var5.field1882 >> 8) + var5.minY; - var10 = (var6 * var5.field1885 >> 8) + var5.maxY; + var7 = (var6 * var5.field1900 >> 8) + var5.minZ; + var8 = (var6 * var5.field1890 >> 8) + var5.maxZ; + var9 = (var6 * var5.field1901 >> 8) + var5.minY; + var10 = (var6 * var5.field1902 >> 8) + var5.maxY; if (var3 >= var7 && var3 <= var8 && var2 >= var9 && var2 <= var10) { return true; } } - } else if (var5.field1869 == 2) { + } else if (var5.field1896 == 2) { var6 = var1 - var5.minX; if (var6 > 0) { - var7 = (var6 * var5.field1883 >> 8) + var5.minZ; - var8 = (var6 * var5.field1884 >> 8) + var5.maxZ; - var9 = (var6 * var5.field1882 >> 8) + var5.minY; - var10 = (var6 * var5.field1885 >> 8) + var5.maxY; + var7 = (var6 * var5.field1900 >> 8) + var5.minZ; + var8 = (var6 * var5.field1890 >> 8) + var5.maxZ; + var9 = (var6 * var5.field1901 >> 8) + var5.minY; + var10 = (var6 * var5.field1902 >> 8) + var5.maxY; if (var3 >= var7 && var3 <= var8 && var2 >= var9 && var2 <= var10) { return true; } } - } else if (var5.field1869 == 3) { + } else if (var5.field1896 == 3) { var6 = var5.minZ - var3; if (var6 > 0) { - var7 = (var6 * var5.field1887 >> 8) + var5.minX; - var8 = (var6 * var5.field1880 >> 8) + var5.maxX; - var9 = (var6 * var5.field1882 >> 8) + var5.minY; - var10 = (var6 * var5.field1885 >> 8) + var5.maxY; + var7 = (var6 * var5.field1897 >> 8) + var5.minX; + var8 = (var6 * var5.field1898 >> 8) + var5.maxX; + var9 = (var6 * var5.field1901 >> 8) + var5.minY; + var10 = (var6 * var5.field1902 >> 8) + var5.maxY; if (var1 >= var7 && var1 <= var8 && var2 >= var9 && var2 <= var10) { return true; } } - } else if (var5.field1869 == 4) { + } else if (var5.field1896 == 4) { var6 = var3 - var5.minZ; if (var6 > 0) { - var7 = (var6 * var5.field1887 >> 8) + var5.minX; - var8 = (var6 * var5.field1880 >> 8) + var5.maxX; - var9 = (var6 * var5.field1882 >> 8) + var5.minY; - var10 = (var6 * var5.field1885 >> 8) + var5.maxY; + var7 = (var6 * var5.field1897 >> 8) + var5.minX; + var8 = (var6 * var5.field1898 >> 8) + var5.maxX; + var9 = (var6 * var5.field1901 >> 8) + var5.minY; + var10 = (var6 * var5.field1902 >> 8) + var5.maxY; if (var1 >= var7 && var1 <= var8 && var2 >= var9 && var2 <= var10) { return true; } } - } else if (var5.field1869 == 5) { + } else if (var5.field1896 == 5) { var6 = var2 - var5.minY; if (var6 > 0) { - var7 = (var6 * var5.field1887 >> 8) + var5.minX; - var8 = (var6 * var5.field1880 >> 8) + var5.maxX; - var9 = (var6 * var5.field1883 >> 8) + var5.minZ; - var10 = (var6 * var5.field1884 >> 8) + var5.maxZ; + var7 = (var6 * var5.field1897 >> 8) + var5.minX; + var8 = (var6 * var5.field1898 >> 8) + var5.maxX; + var9 = (var6 * var5.field1900 >> 8) + var5.minZ; + var10 = (var6 * var5.field1890 >> 8) + var5.maxZ; if (var1 >= var7 && var1 <= var8 && var3 >= var9 && var3 <= var10) { return true; } @@ -2421,7 +2430,7 @@ public class Scene { return false; } - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("Scene_addOccluder") public static void Scene_addOccluder(int var0, int var1, int var2, int var3, int var4, int var5, int var6, int var7) { Occluder var8 = new Occluder(); @@ -2439,7 +2448,7 @@ public class Scene { Scene_planeOccluders[var0][Scene_planeOccluderCounts[var0]++] = var8; } - @ObfuscatedName("an") + @ObfuscatedName("ac") @Export("Scene_buildVisiblityMap") public static void Scene_buildVisiblityMap(int[] var0, int var1, int var2, int var3, int var4) { Scene_viewportXMin = 0; @@ -2472,7 +2481,7 @@ public class Scene { boolean var14 = false; for (int var15 = -var1; var15 <= var2; var15 += 128) { - if (method3239(var12, var0[var8] + var15, var13)) { + if (method3284(var12, var0[var8] + var15, var13)) { var14 = true; break; } @@ -2523,8 +2532,8 @@ public class Scene { } - @ObfuscatedName("af") - static boolean method3239(int var0, int var1, int var2) { + @ObfuscatedName("az") + static boolean method3284(int var0, int var1, int var2) { int var3 = var0 * Scene_cameraYawCosine + var2 * Scene_cameraYawSine >> 16; int var4 = var2 * Scene_cameraYawCosine - var0 * Scene_cameraYawSine >> 16; int var5 = var4 * Scene_cameraPitchCosine + Scene_cameraPitchSine * var1 >> 16; @@ -2538,19 +2547,19 @@ public class Scene { } } - @ObfuscatedName("ao") - public static boolean method3252() { + @ObfuscatedName("aj") + public static boolean method3146() { return viewportWalking && Scene_selectedX != -1; } - @ObfuscatedName("ai") - public static void method3281() { + @ObfuscatedName("ap") + public static void method3147() { Scene_selectedX = -1; viewportWalking = false; } - @ObfuscatedName("bg") - static final int method3357(int var0, int var1) { + @ObfuscatedName("au") + static final int method3152(int var0, int var1) { var1 = (var0 & 127) * var1 >> 7; if (var1 < 2) { var1 = 2; @@ -2561,7 +2570,7 @@ public class Scene { return (var0 & 65408) + var1; } - @ObfuscatedName("bc") + @ObfuscatedName("as") @Export("containsBounds") static boolean containsBounds(int var0, int var1, int var2, int var3, int var4, int var5, int var6, int var7) { if (var1 < var2 && var1 < var3 && var1 < var4) { diff --git a/runescape-client/src/main/java/Script.java b/runescape-client/src/main/java/Script.java index f22e0abd23..063dae3e0a 100644 --- a/runescape-client/src/main/java/Script.java +++ b/runescape-client/src/main/java/Script.java @@ -4,51 +4,51 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("cj") +@ObfuscatedName("ci") @Implements("Script") public class Script extends DualNode { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Leb;" + signature = "Lef;" ) @Export("Script_cached") static EvictingDualNodeHashTable Script_cached; - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("opcodes") int[] opcodes; - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("intOperands") int[] intOperands; - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("stringOperands") String[] stringOperands; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = -435727749 + intValue = 1633620765 ) @Export("localIntCount") int localIntCount; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = -291180187 + intValue = 212878753 ) @Export("localStringCount") int localStringCount; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedGetter( - intValue = 970489761 + intValue = -133776919 ) @Export("intArgumentCount") int intArgumentCount; - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedGetter( - intValue = 1827947623 + intValue = 329828895 ) @Export("stringArgumentCount") int stringArgumentCount; - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedSignature( - signature = "[Llr;" + signature = "[Llb;" ) @Export("switches") IterableNodeHashTable[] switches; @@ -60,153 +60,83 @@ public class Script extends DualNode { Script() { } - @ObfuscatedName("q") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(IB)[Llr;", - garbageValue = "-39" + signature = "(II)[Llb;", + garbageValue = "-135060615" ) @Export("newIterableNodeHashTable") IterableNodeHashTable[] newIterableNodeHashTable(int var1) { return new IterableNodeHashTable[var1]; } - @ObfuscatedName("a") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(Lhq;Lhq;I)V", - garbageValue = "-1167924124" + signature = "([BIIB)Z", + garbageValue = "27" ) - public static void method2373(AbstractArchive var0, AbstractArchive var1) { - NPCDefinition.NpcDefinition_archive = var0; - NPCDefinition.NpcDefinition_modelArchive = var1; + static final boolean method2257(byte[] var0, int var1, int var2) { + boolean var3 = true; + Buffer var4 = new Buffer(var0); + int var5 = -1; + + label69: + while (true) { + int var6 = var4.method5710(); + if (var6 == 0) { + return var3; + } + + var5 += var6; + int var7 = 0; + boolean var8 = false; + + while (true) { + int var9; + while (!var8) { + var9 = var4.readUShortSmart(); + if (var9 == 0) { + continue label69; + } + + var7 += var9 - 1; + int var10 = var7 & 63; + int var11 = var7 >> 6 & 63; + int var12 = var4.readUnsignedByte() >> 2; + int var13 = var11 + var1; + int var14 = var10 + var2; + if (var13 > 0 && var14 > 0 && var13 < 103 && var14 < 103) { + ObjectDefinition var15 = Occluder.getObjectDefinition(var5); + if (var12 != 22 || !Client.isLowDetail || var15.int1 != 0 || var15.interactType == 1 || var15.boolean2) { + if (!var15.needsModelFiles()) { + ++Client.field850; + var3 = false; + } + + var8 = true; + } + } + } + + var9 = var4.readUShortSmart(); + if (var9 == 0) { + break; + } + + var4.readUnsignedByte(); + } + } } - @ObfuscatedName("gn") + @ObfuscatedName("jk") @ObfuscatedSignature( - signature = "(S)V", - garbageValue = "3316" + signature = "(IIIIIIII)V", + garbageValue = "-1415762573" ) - static final void method2383() { - int var0 = class14.field88 * 128 + 64; - int var1 = class42.field360 * 128 + 64; - int var2 = GraphicsObject.getTileHeight(var0, var1, Player.Client_plane) - WorldMapLabel.field231; - if (UrlRequester.cameraX < var0) { - UrlRequester.cameraX = (var0 - UrlRequester.cameraX) * Interpreter.field1068 / 1000 + UrlRequester.cameraX + WorldMapAreaData.field323; - if (UrlRequester.cameraX > var0) { - UrlRequester.cameraX = var0; - } + @Export("updateRootInterface") + static final void updateRootInterface(int var0, int var1, int var2, int var3, int var4, int var5, int var6) { + if (UserComparator3.loadInterface(var0)) { + UserComparator9.updateInterface(FloorDecoration.Widget_interfaceComponents[var0], -1, var1, var2, var3, var4, var5, var6); } - - if (UrlRequester.cameraX > var0) { - UrlRequester.cameraX -= Interpreter.field1068 * (UrlRequester.cameraX - var0) / 1000 + WorldMapAreaData.field323; - if (UrlRequester.cameraX < var0) { - UrlRequester.cameraX = var0; - } - } - - if (class16.cameraY < var2) { - class16.cameraY = (var2 - class16.cameraY) * Interpreter.field1068 / 1000 + class16.cameraY + WorldMapAreaData.field323; - if (class16.cameraY > var2) { - class16.cameraY = var2; - } - } - - if (class16.cameraY > var2) { - class16.cameraY -= Interpreter.field1068 * (class16.cameraY - var2) / 1000 + WorldMapAreaData.field323; - if (class16.cameraY < var2) { - class16.cameraY = var2; - } - } - - if (GrandExchangeOfferAgeComparator.cameraZ < var1) { - GrandExchangeOfferAgeComparator.cameraZ = (var1 - GrandExchangeOfferAgeComparator.cameraZ) * Interpreter.field1068 / 1000 + GrandExchangeOfferAgeComparator.cameraZ + WorldMapAreaData.field323; - if (GrandExchangeOfferAgeComparator.cameraZ > var1) { - GrandExchangeOfferAgeComparator.cameraZ = var1; - } - } - - if (GrandExchangeOfferAgeComparator.cameraZ > var1) { - GrandExchangeOfferAgeComparator.cameraZ -= Interpreter.field1068 * (GrandExchangeOfferAgeComparator.cameraZ - var1) / 1000 + WorldMapAreaData.field323; - if (GrandExchangeOfferAgeComparator.cameraZ < var1) { - GrandExchangeOfferAgeComparator.cameraZ = var1; - } - } - - var0 = AbstractUserComparator.field3583 * 16384 + 64; - var1 = class49.field401 * 128 + 64; - var2 = GraphicsObject.getTileHeight(var0, var1, Player.Client_plane) - ViewportMouse.field1713; - int var3 = var0 - UrlRequester.cameraX; - int var4 = var2 - class16.cameraY; - int var5 = var1 - GrandExchangeOfferAgeComparator.cameraZ; - int var6 = (int)Math.sqrt((double)(var5 * var5 + var3 * var3)); - int var7 = (int)(Math.atan2((double)var4, (double)var6) * 325.949D) & 2047; - int var8 = (int)(Math.atan2((double)var3, (double)var5) * -325.949D) & 2047; - if (var7 < 128) { - var7 = 128; - } - - if (var7 > 383) { - var7 = 383; - } - - if (class247.cameraPitch < var7) { - class247.cameraPitch = (var7 - class247.cameraPitch) * SecureRandomCallable.field510 / 1000 + class247.cameraPitch + Clock.field2036; - if (class247.cameraPitch > var7) { - class247.cameraPitch = var7; - } - } - - if (class247.cameraPitch > var7) { - class247.cameraPitch -= SecureRandomCallable.field510 * (class247.cameraPitch - var7) / 1000 + Clock.field2036; - if (class247.cameraPitch < var7) { - class247.cameraPitch = var7; - } - } - - int var9 = var8 - WorldMapData_1.cameraYaw; - if (var9 > 1024) { - var9 -= 2048; - } - - if (var9 < -1024) { - var9 += 2048; - } - - if (var9 > 0) { - WorldMapData_1.cameraYaw = var9 * SecureRandomCallable.field510 / 1000 + WorldMapData_1.cameraYaw + Clock.field2036; - WorldMapData_1.cameraYaw &= 2047; - } - - if (var9 < 0) { - WorldMapData_1.cameraYaw -= Clock.field2036 + -var9 * SecureRandomCallable.field510 / 1000; - WorldMapData_1.cameraYaw &= 2047; - } - - int var10 = var8 - WorldMapData_1.cameraYaw; - if (var10 > 1024) { - var10 -= 2048; - } - - if (var10 < -1024) { - var10 += 2048; - } - - if (var10 < 0 && var9 > 0 || var10 > 0 && var9 < 0) { - WorldMapData_1.cameraYaw = var8; - } - - } - - @ObfuscatedName("kh") - @ObfuscatedSignature( - signature = "(II)V", - garbageValue = "-1862071000" - ) - static void method2384(int var0) { - StudioGame.tempMenuAction = new MenuAction(); - StudioGame.tempMenuAction.param0 = Client.menuArguments1[var0]; - StudioGame.tempMenuAction.param1 = Client.menuArguments2[var0]; - StudioGame.tempMenuAction.opcode = Client.menuOpcodes[var0]; - StudioGame.tempMenuAction.identifier = Client.menuIdentifiers[var0]; - StudioGame.tempMenuAction.action = Client.menuActions[var0]; } } diff --git a/runescape-client/src/main/java/ScriptEvent.java b/runescape-client/src/main/java/ScriptEvent.java index e88e8ba8e7..fb38b0dd31 100644 --- a/runescape-client/src/main/java/ScriptEvent.java +++ b/runescape-client/src/main/java/ScriptEvent.java @@ -3,81 +3,69 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("bi") +@ObfuscatedName("by") @Implements("ScriptEvent") public class ScriptEvent extends Node { - @ObfuscatedName("sc") - @ObfuscatedSignature( - signature = "Lbw;" - ) - @Export("clientPreferences") - static ClientPreferences clientPreferences; - @ObfuscatedName("fz") - @ObfuscatedGetter( - intValue = -1497740127 - ) - static int field563; - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("args") Object[] args; - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("isMouseInputEvent") boolean isMouseInputEvent; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Lhi;" + signature = "Lhl;" ) @Export("widget") Widget widget; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = -2022022571 + intValue = -1134113153 ) @Export("mouseX") int mouseX; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = 2109741703 + intValue = 1207275519 ) @Export("mouseY") int mouseY; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = -668858451 + intValue = -1547508789 ) @Export("opIndex") int opIndex; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "Lhi;" + signature = "Lhl;" ) @Export("dragTarget") Widget dragTarget; - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedGetter( - intValue = -649087669 + intValue = 74638955 ) @Export("keyTyped") int keyTyped; - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedGetter( - intValue = -1510622969 + intValue = 1612924995 ) @Export("keyPressed") int keyPressed; - @ObfuscatedName("d") + @ObfuscatedName("i") @Export("targetName") String targetName; - @ObfuscatedName("m") + @ObfuscatedName("k") @ObfuscatedGetter( - intValue = -1448697707 + intValue = -618805579 ) - int field550; - @ObfuscatedName("p") + int field577; + @ObfuscatedName("x") @ObfuscatedGetter( - intValue = 251797665 + intValue = 684866193 ) @Export("type") int type; @@ -86,307 +74,77 @@ public class ScriptEvent extends Node { this.type = 76; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "([Ljava/lang/Object;B)V", - garbageValue = "0" + signature = "([Ljava/lang/Object;I)V", + garbageValue = "1989616138" ) @Export("setArgs") public void setArgs(Object[] var1) { this.args = var1; } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( signature = "(II)V", - garbageValue = "-1079010061" + garbageValue = "-1172076159" ) @Export("setType") public void setType(int var1) { this.type = var1; } - @ObfuscatedName("n") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "(IIILix;IB)V", - garbageValue = "24" + signature = "(I)V", + garbageValue = "1502841158" ) - static void method1274(int var0, int var1, int var2, ObjectDefinition var3, int var4) { - ObjectSound var5 = new ObjectSound(); - var5.plane = var0; - var5.x = var1 * 128; - var5.y = var2 * 16384; - int var6 = var3.sizeX; - int var7 = var3.sizeY; - if (var4 == 1 || var4 == 3) { - var6 = var3.sizeY; - var7 = var3.sizeX; - } + public static void method1198() { + try { + if (class197.field2411 == 1) { + int var0 = FaceNormal.midiPcmStream.method3769(); + if (var0 > 0 && FaceNormal.midiPcmStream.isReady()) { + var0 -= class335.field4014; + if (var0 < 0) { + var0 = 0; + } - var5.field1060 = (var6 + var1) * 16384; - var5.field1053 = (var7 + var2) * 16384; - var5.soundEffectId = var3.ambientSoundId; - var5.field1052 = var3.int4 * 128; - var5.field1057 = var3.int5; - var5.field1058 = var3.int6; - var5.soundEffectIds = var3.soundEffectIds; - if (var3.transforms != null) { - var5.obj = var3; - var5.set(); - } - - ObjectSound.objectSounds.addFirst(var5); - if (var5.soundEffectIds != null) { - var5.field1054 = var5.field1057 + (int)(Math.random() * (double)(var5.field1058 - var5.field1057)); - } - - } - - @ObfuscatedName("q") - @ObfuscatedSignature( - signature = "(I)Ljava/lang/String;", - garbageValue = "-1199782761" - ) - static String method1277() { - String var0; - if (clientPreferences.hideUsername) { - String var2 = Login.Login_username; - int var4 = var2.length(); - char[] var5 = new char[var4]; - - for (int var6 = 0; var6 < var4; ++var6) { - var5[var6] = '*'; - } - - String var3 = new String(var5); - var0 = var3; - } else { - var0 = Login.Login_username; - } - - return var0; - } - - @ObfuscatedName("q") - @ObfuscatedSignature( - signature = "(CLgw;B)I", - garbageValue = "86" - ) - @Export("lowercaseChar") - static int lowercaseChar(char var0, Language var1) { - int var2 = var0 << 4; - if (Character.isUpperCase(var0) || Character.isTitleCase(var0)) { - var0 = Character.toLowerCase(var0); - var2 = (var0 << 4) + 1; - } - - if (var0 == 241 && var1 == Language.Language_ES) { - var2 = 1762; - } - - return var2; - } - - @ObfuscatedName("l") - @ObfuscatedSignature( - signature = "(II)I", - garbageValue = "-1588093923" - ) - public static int method1272(int var0) { - return UserComparator8.Entity_unpackID(ViewportMouse.ViewportMouse_entityTags[var0]); - } - - @ObfuscatedName("m") - @ObfuscatedSignature( - signature = "(IIIIIZB)Llx;", - garbageValue = "1" - ) - @Export("getItemSprite") - public static final Sprite getItemSprite(int var0, int var1, int var2, int var3, int var4, boolean var5) { - if (var1 == -1) { - var4 = 0; - } else if (var4 == 2 && var1 != 1) { - var4 = 1; - } - - long var6 = ((long)var3 << 42) + ((long)var4 << 40) + ((long)var1 << 16) + (long)var0 + ((long)var2 << 38); - Sprite var8; - if (!var5) { - var8 = (Sprite)ItemDefinition.ItemDefinition_cachedSprites.get(var6); - if (var8 != null) { - return var8; - } - } - - ItemDefinition var9 = class222.ItemDefinition_get(var0); - if (var1 > 1 && var9.countobj != null) { - int var10 = -1; - - for (int var11 = 0; var11 < 10; ++var11) { - if (var1 >= var9.countco[var11] && var9.countco[var11] != 0) { - var10 = var9.countobj[var11]; + FaceNormal.midiPcmStream.setPcmStreamVolume(var0); + return; } - } - if (var10 != -1) { - var9 = class222.ItemDefinition_get(var10); - } - } - - Model var21 = var9.getModel(1); - if (var21 == null) { - return null; - } else { - Sprite var22 = null; - if (var9.noteTemplate != -1) { - var22 = getItemSprite(var9.note, 10, 1, 0, 0, true); - if (var22 == null) { - return null; - } - } else if (var9.notedId != -1) { - var22 = getItemSprite(var9.unnotedId, var1, var2, var3, 0, false); - if (var22 == null) { - return null; - } - } else if (var9.placeholderTemplate != -1) { - var22 = getItemSprite(var9.placeholder, var1, 0, 0, 0, false); - if (var22 == null) { - return null; - } - } - - int[] var12 = Rasterizer2D.Rasterizer2D_pixels; - int var13 = Rasterizer2D.Rasterizer2D_width; - int var14 = Rasterizer2D.Rasterizer2D_height; - int[] var15 = new int[4]; - Rasterizer2D.Rasterizer2D_getClipArray(var15); - var8 = new Sprite(36, 32); - Rasterizer2D.Rasterizer2D_replace(var8.pixels, 36, 32); - Rasterizer2D.Rasterizer2D_clear(); - Rasterizer3D.Rasterizer3D_setClipFromRasterizer2D(); - Rasterizer3D.method3131(16, 16); - Rasterizer3D.field1739 = false; - if (var9.placeholderTemplate != -1) { - var22.drawTransBgAt(0, 0); - } - - int var16 = var9.zoom2d; - if (var5) { - var16 = (int)(1.5D * (double)var16); - } else if (var2 == 2) { - var16 = (int)(1.04D * (double)var16); - } - - int var17 = var16 * Rasterizer3D.Rasterizer3D_sine[var9.xan2d] >> 16; - int var18 = var16 * Rasterizer3D.Rasterizer3D_cosine[var9.xan2d] >> 16; - var21.calculateBoundsCylinder(); - var21.method3044(0, var9.yan2d, var9.zan2d, var9.xan2d, var9.offsetX2d, var21.height / 2 + var17 + var9.offsetY2d, var18 + var9.offsetY2d); - if (var9.notedId != -1) { - var22.drawTransBgAt(0, 0); - } - - if (var2 >= 1) { - var8.outline(1); - } - - if (var2 >= 2) { - var8.outline(16777215); - } - - if (var3 != 0) { - var8.shadow(var3); - } - - Rasterizer2D.Rasterizer2D_replace(var8.pixels, 36, 32); - if (var9.noteTemplate != -1) { - var22.drawTransBgAt(0, 0); - } - - if (var4 == 1 || var4 == 2 && var9.isStackable == 1) { - Font var19 = class30.ItemDefinition_fontPlain11; - String var20; - if (var1 < 100000) { - var20 = "" + var1 + ""; - } else if (var1 < 10000000) { - var20 = "" + var1 / 1000 + "K" + ""; + FaceNormal.midiPcmStream.clear(); + FaceNormal.midiPcmStream.removeAll(); + if (class197.musicTrackArchive != null) { + class197.field2411 = 2; } else { - var20 = "" + var1 / 1000000 + "M" + ""; + class197.field2411 = 0; } - var19.draw(var20, 0, 9, 16776960, 1); + WorldMapSprite.musicTrack = null; + NPC.soundCache = null; } - - if (!var5) { - ItemDefinition.ItemDefinition_cachedSprites.put(var8, var6); - } - - Rasterizer2D.Rasterizer2D_replace(var12, var13, var14); - Rasterizer2D.Rasterizer2D_setClipArray(var15); - Rasterizer3D.Rasterizer3D_setClipFromRasterizer2D(); - Rasterizer3D.field1739 = true; - return var8; + } catch (Exception var2) { + var2.printStackTrace(); + FaceNormal.midiPcmStream.clear(); + class197.field2411 = 0; + WorldMapSprite.musicTrack = null; + NPC.soundCache = null; + class197.musicTrackArchive = null; } + } - @ObfuscatedName("j") + @ObfuscatedName("ji") @ObfuscatedSignature( - signature = "(ILcj;ZB)I", - garbageValue = "-66" + signature = "(Lhl;B)V", + garbageValue = "-95" ) - static int method1263(int var0, Script var1, boolean var2) { - Widget var3 = var2 ? class96.field1301 : ReflectionCheck.field1310; - if (var0 == ScriptOpcodes.CC_GETTARGETMASK) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = UserComparator5.method3551(class195.getWidgetClickMask(var3)); - return 1; - } else if (var0 != ScriptOpcodes.CC_GETOP) { - if (var0 == ScriptOpcodes.CC_GETOPBASE) { - if (var3.dataText == null) { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = ""; - } else { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var3.dataText; - } - - return 1; - } else { - return 2; - } - } else { - int var4 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - --var4; - if (var3.actions != null && var4 < var3.actions.length && var3.actions[var4] != null) { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var3.actions[var4]; - } else { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = ""; - } - - return 1; + @Export("invalidateWidget") + static void invalidateWidget(Widget var0) { + if (var0.cycle == Client.field690) { + Client.field847[var0.rootIndex] = true; } - } - @ObfuscatedName("jb") - @ObfuscatedSignature( - signature = "(IIIIIIIII)V", - garbageValue = "-1558725091" - ) - @Export("drawWidgets") - static final void drawWidgets(int var0, int var1, int var2, int var3, int var4, int var5, int var6, int var7) { - if (TextureProvider.loadInterface(var0)) { - VarcInt.field3218 = null; - IgnoreList.drawInterface(Widget.Widget_interfaceComponents[var0], -1, var1, var2, var3, var4, var5, var6, var7); - if (VarcInt.field3218 != null) { - IgnoreList.drawInterface(VarcInt.field3218, -1412584499, var1, var2, var3, var4, TriBool.field3600, GrandExchangeEvent.field46, var7); - VarcInt.field3218 = null; - } - - } else { - if (var7 != -1) { - Client.field842[var7] = true; - } else { - for (int var8 = 0; var8 < 100; ++var8) { - Client.field842[var8] = true; - } - } - - } } } diff --git a/runescape-client/src/main/java/ScriptFrame.java b/runescape-client/src/main/java/ScriptFrame.java index a86f6325fe..1f86994ee2 100644 --- a/runescape-client/src/main/java/ScriptFrame.java +++ b/runescape-client/src/main/java/ScriptFrame.java @@ -1,32 +1,41 @@ +import java.io.File; +import java.io.InputStream; +import java.io.OutputStreamWriter; +import java.io.RandomAccessFile; +import java.net.URL; +import java.net.URLConnection; +import java.util.Random; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("bx") +@ObfuscatedName("bd") @Implements("ScriptFrame") public class ScriptFrame { - @ObfuscatedName("m") - @Export("musicTrackBoolean") - public static boolean musicTrackBoolean; - @ObfuscatedName("a") + @ObfuscatedName("du") @ObfuscatedSignature( - signature = "Lcj;" + signature = "Lij;" + ) + @Export("archive11") + static Archive archive11; + @ObfuscatedName("u") + @ObfuscatedSignature( + signature = "Lci;" ) @Export("script") Script script; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = -692629101 + intValue = 1054193233 ) @Export("pc") int pc; - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("intLocals") int[] intLocals; - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("stringLocals") String[] stringLocals; @@ -34,327 +43,299 @@ public class ScriptFrame { this.pc = -1; } - @ObfuscatedName("n") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(ILcj;ZB)I", - garbageValue = "2" + signature = "(Ljava/lang/String;B)Ljava/io/File;", + garbageValue = "16" ) - static int method1218(int var0, Script var1, boolean var2) { - if (var0 < 1000) { - return class65.method1321(var0, var1, var2); - } else if (var0 < 1100) { - return GrandExchangeOfferTotalQuantityComparator.method134(var0, var1, var2); - } else if (var0 < 1200) { - return class185.method3772(var0, var1, var2); - } else if (var0 < 1300) { - return TaskHandler.method3605(var0, var1, var2); - } else if (var0 < 1400) { - return PacketBufferNode.method3784(var0, var1, var2); - } else if (var0 < 1500) { - return class42.method873(var0, var1, var2); - } else if (var0 < 1600) { - return class185.method3773(var0, var1, var2); - } else if (var0 < 1700) { - return WorldMapRegion.method574(var0, var1, var2); - } else if (var0 < 1800) { - return AbstractByteArrayCopier.method4093(var0, var1, var2); - } else if (var0 < 1900) { - return ScriptEvent.method1263(var0, var1, var2); - } else if (var0 < 2000) { - return GameShell.method1142(var0, var1, var2); - } else if (var0 < 2100) { - return GrandExchangeOfferTotalQuantityComparator.method134(var0, var1, var2); - } else if (var0 < 2200) { - return class185.method3772(var0, var1, var2); - } else if (var0 < 2300) { - return TaskHandler.method3605(var0, var1, var2); - } else if (var0 < 2400) { - return PacketBufferNode.method3784(var0, var1, var2); - } else if (var0 < 2500) { - return class42.method873(var0, var1, var2); - } else if (var0 < 2600) { - return PacketWriter.method2426(var0, var1, var2); - } else if (var0 < 2700) { - return class49.method938(var0, var1, var2); - } else if (var0 < 2800) { - return class2.method32(var0, var1, var2); - } else if (var0 < 2900) { - return SoundCache.method2673(var0, var1, var2); - } else if (var0 < 3000) { - return GameShell.method1142(var0, var1, var2); - } else if (var0 < 3200) { - return class189.method3796(var0, var1, var2); - } else if (var0 < 3300) { - return class16.method224(var0, var1, var2); - } else if (var0 < 3400) { - return DevicePcmPlayerProvider.method916(var0, var1, var2); - } else if (var0 < 3500) { - return Message.method1310(var0, var1, var2); - } else if (var0 < 3700) { - return class30.method605(var0, var1, var2); - } else if (var0 < 4000) { - return class216.method4196(var0, var1, var2); - } else if (var0 < 4100) { - return SecureRandomCallable.method1226(var0, var1, var2); - } else if (var0 < 4200) { - return GrandExchangeOfferAgeComparator.method196(var0, var1, var2); - } else if (var0 < 4300) { - return method1217(var0, var1, var2); - } else if (var0 < 5100) { - return class40.method837(var0, var1, var2); - } else if (var0 < 5400) { - return ArchiveLoader.method1245(var0, var1, var2); - } else if (var0 < 5600) { - return Tiles.method1215(var0, var1, var2); - } else if (var0 < 5700) { - return GraphicsDefaults.method6006(var0, var1, var2); - } else if (var0 < 6300) { - return MouseHandler.method1176(var0, var1, var2); - } else if (var0 < 6600) { - return ArchiveDiskAction.method4296(var0, var1, var2); + @Export("getFile") + public static File getFile(String var0) { + if (!FileSystem.FileSystem_hasPermissions) { + throw new RuntimeException(""); } else { - return var0 < 6700 ? class43.method877(var0, var1, var2) : 2; + File var1 = (File)FileSystem.FileSystem_cacheFiles.get(var0); + if (var1 != null) { + return var1; + } else { + File var2 = new File(FileSystem.FileSystem_cacheDir, var0); + RandomAccessFile var3 = null; + + try { + File var4 = new File(var2.getParent()); + if (!var4.exists()) { + throw new RuntimeException(""); + } else { + var3 = new RandomAccessFile(var2, "rw"); + int var5 = var3.read(); + var3.seek(0L); + var3.write(var5); + var3.seek(0L); + var3.close(); + FileSystem.FileSystem_cacheFiles.put(var0, var2); + return var2; + } + } catch (Exception var8) { + try { + if (var3 != null) { + var3.close(); + var3 = null; + } + } catch (Exception var7) { + } + + throw new RuntimeException(); + } + } } } - @ObfuscatedName("l") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Lbk;Lbk;IZI)I", - garbageValue = "697850759" + signature = "(B)J", + garbageValue = "0" ) - @Export("compareWorlds") - static int compareWorlds(World var0, World var1, int var2, boolean var3) { - if (var2 == 1) { - int var4 = var0.population; - int var5 = var1.population; - if (!var3) { - if (var4 == -1) { - var4 = 2001; - } + static long method1162() { + try { + URL var0 = new URL(PacketBuffer.method5582("services", false) + "m=accountappeal/login.ws"); + URLConnection var1 = var0.openConnection(); + var1.setRequestProperty("connection", "close"); + var1.setDoInput(true); + var1.setDoOutput(true); + var1.setConnectTimeout(5000); + OutputStreamWriter var2 = new OutputStreamWriter(var1.getOutputStream()); + var2.write("data1=req"); + var2.flush(); + InputStream var3 = var1.getInputStream(); + Buffer var4 = new Buffer(new byte[1000]); + do { + int var5 = var3.read(var4.array, var4.offset, 1000 - var4.offset); if (var5 == -1) { - var5 = 2001; + var4.offset = 0; + long var7 = var4.readLong(); + return var7; } - } - return var4 - var5; - } else if (var2 == 2) { - return var0.location - var1.location; - } else if (var2 == 3) { - if (var0.activity.equals("-")) { - if (var1.activity.equals("-")) { - return 0; - } else { - return var3 ? -1 : 1; - } - } else if (var1.activity.equals("-")) { - return var3 ? 1 : -1; - } else { - return var0.activity.compareTo(var1.activity); - } - } else if (var2 == 4) { - return var0.method1885() ? (var1.method1885() ? 0 : 1) : (var1.method1885() ? -1 : 0); - } else if (var2 == 5) { - return var0.method1917() ? (var1.method1917() ? 0 : 1) : (var1.method1917() ? -1 : 0); - } else if (var2 == 6) { - return var0.isPvp() ? (var1.isPvp() ? 0 : 1) : (var1.isPvp() ? -1 : 0); - } else if (var2 == 7) { - return var0.isMembersOnly() ? (var1.isMembersOnly() ? 0 : 1) : (var1.isMembersOnly() ? -1 : 0); - } else { - return var0.id - var1.id; + var4.offset += var5; + } while(var4.offset < 1000); + + return 0L; + } catch (Exception var9) { + return 0L; } } - @ObfuscatedName("al") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "(ILcj;ZI)I", - garbageValue = "-1066655429" + signature = "(I)V", + garbageValue = "1620036213" ) - static int method1217(int var0, Script var1, boolean var2) { - int var3; - if (var0 == ScriptOpcodes.OC_NAME) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = class222.ItemDefinition_get(var3).name; - return 1; + static void method1163() { + Login.Login_username = Login.Login_username.trim(); + if (Login.Login_username.length() == 0) { + PacketWriter.setLoginResponseString("Please enter your username.", "If you created your account after November", "2010, this will be the creation email address."); } else { - int var4; - ItemDefinition var5; - if (var0 == ScriptOpcodes.OC_OP) { - Interpreter.Interpreter_intStackSize -= 2; - var3 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var4 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - var5 = class222.ItemDefinition_get(var3); - if (var4 >= 1 && var4 <= 5 && var5.groundActions[var4 - 1] != null) { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var5.groundActions[var4 - 1]; - } else { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = ""; - } - - return 1; - } else if (var0 == ScriptOpcodes.OC_IOP) { - Interpreter.Interpreter_intStackSize -= 2; - var3 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var4 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - var5 = class222.ItemDefinition_get(var3); - if (var4 >= 1 && var4 <= 5 && var5.inventoryActions[var4 - 1] != null) { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var5.inventoryActions[var4 - 1]; - } else { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = ""; - } - - return 1; - } else if (var0 == ScriptOpcodes.OC_COST) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = class222.ItemDefinition_get(var3).price; - return 1; - } else if (var0 == ScriptOpcodes.OC_STACKABLE) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = class222.ItemDefinition_get(var3).isStackable == 1 ? 1 : 0; - return 1; + long var1 = method1162(); + byte var0; + if (var1 == 0L) { + var0 = 5; } else { - ItemDefinition var6; - if (var0 == ScriptOpcodes.OC_CERT) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - var6 = class222.ItemDefinition_get(var3); - if (var6.noteTemplate == -1 && var6.note >= 0) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var6.note; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3; - } + String var4 = Login.Login_username; + Random var5 = new Random(); + Buffer var6 = new Buffer(128); + Buffer var7 = new Buffer(128); + int[] var8 = new int[]{var5.nextInt(), var5.nextInt(), (int)(var1 >> 32), (int)var1}; + var6.writeByte(10); - return 1; - } else if (var0 == ScriptOpcodes.OC_UNCERT) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - var6 = class222.ItemDefinition_get(var3); - if (var6.noteTemplate >= 0 && var6.note >= 0) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var6.note; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3; - } - - return 1; - } else if (var0 == ScriptOpcodes.OC_MEMBERS) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = class222.ItemDefinition_get(var3).isMembersOnly ? 1 : 0; - return 1; - } else if (var0 == ScriptOpcodes.OC_PLACEHOLDER) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - var6 = class222.ItemDefinition_get(var3); - if (var6.placeholderTemplate == -1 && var6.placeholder >= 0) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var6.placeholder; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3; - } - - return 1; - } else if (var0 == ScriptOpcodes.OC_UNPLACEHOLDER) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - var6 = class222.ItemDefinition_get(var3); - if (var6.placeholderTemplate >= 0 && var6.placeholder >= 0) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var6.placeholder; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3; - } - - return 1; - } else if (var0 == ScriptOpcodes.OC_FIND) { - String var7 = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]; - var4 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - BoundaryObject.findItemDefinitions(var7, var4 == 1); - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = MouseHandler.foundItemIdCount; - return 1; - } else if (var0 != ScriptOpcodes.OC_FINDNEXT) { - if (var0 == ScriptOpcodes.OC_FINDRESET) { - WorldMapManager.foundItemIndex = 0; - return 1; - } else { - return 2; - } - } else { - if (UserComparator4.foundItemIds != null && WorldMapManager.foundItemIndex < MouseHandler.foundItemIdCount) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = UserComparator4.foundItemIds[++WorldMapManager.foundItemIndex - 1] & '\uffff'; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = -1; - } - - return 1; + int var9; + for (var9 = 0; var9 < 4; ++var9) { + var6.writeInt(var5.nextInt()); } - } - } - } - @ObfuscatedName("gs") - @ObfuscatedSignature( - signature = "(S)V", - garbageValue = "256" - ) - static final void method1219() { - if (Player.Client_plane != Client.field856) { - Client.field856 = Player.Client_plane; - int var0 = Player.Client_plane; - int[] var1 = FloorDecoration.sceneMinimapSprite.pixels; - int var2 = var1.length; + var6.writeInt(var8[0]); + var6.writeInt(var8[1]); + var6.writeLong(var1); + var6.writeLong(0L); - int var3; - for (var3 = 0; var3 < var2; ++var3) { - var1[var3] = 0; - } - - int var4; - int var5; - for (var3 = 1; var3 < 103; ++var3) { - var4 = (103 - var3) * 2048 + 24628; - - for (var5 = 1; var5 < 103; ++var5) { - if ((Tiles.Tiles_renderFlags[var0][var5][var3] & 24) == 0) { - WorldMapArea.scene.drawTileMinimap(var1, var4, 512, var0, var5, var3); - } - - if (var0 < 3 && (Tiles.Tiles_renderFlags[var0 + 1][var5][var3] & 8) != 0) { - WorldMapArea.scene.drawTileMinimap(var1, var4, 512, var0 + 1, var5, var3); - } - - var4 += 4; + for (var9 = 0; var9 < 4; ++var9) { + var6.writeInt(var5.nextInt()); } - } - var3 = (238 + (int)(Math.random() * 20.0D) - 10 << 16) + (238 + (int)(Math.random() * 20.0D) - 10 << 8) + (238 + (int)(Math.random() * 20.0D) - 10); - var4 = 238 + (int)(Math.random() * 20.0D) - 10 << 16; - FloorDecoration.sceneMinimapSprite.setRaster(); + var6.encryptRsa(class80.field1129, class80.field1130); + var7.writeByte(10); - int var6; - for (var5 = 1; var5 < 103; ++var5) { - for (var6 = 1; var6 < 103; ++var6) { - if ((Tiles.Tiles_renderFlags[var0][var6][var5] & 24) == 0) { - WorldMapLabel.drawObject(var0, var6, var5, var3, var4); - } - - if (var0 < 3 && (Tiles.Tiles_renderFlags[var0 + 1][var6][var5] & 8) != 0) { - WorldMapLabel.drawObject(var0 + 1, var6, var5, var3, var4); - } + for (var9 = 0; var9 < 3; ++var9) { + var7.writeInt(var5.nextInt()); } - } - Client.mapIconCount = 0; + var7.writeLong(var5.nextLong()); + var7.writeLongMedium(var5.nextLong()); + GrandExchangeOfferTotalQuantityComparator.method104(var7); + var7.writeLong(var5.nextLong()); + var7.encryptRsa(class80.field1129, class80.field1130); + var9 = class173.stringCp1252NullTerminatedByteSize(var4); + if (var9 % 8 != 0) { + var9 += 8 - var9 % 8; + } - for (var5 = 0; var5 < 104; ++var5) { - for (var6 = 0; var6 < 104; ++var6) { - long var7 = WorldMapArea.scene.getFloorDecorationTag(Player.Client_plane, var5, var6); - if (0L != var7) { - int var9 = UserComparator8.Entity_unpackID(var7); - int var10 = WorldMapDecorationType.getObjectDefinition(var9).mapIconId; - if (var10 >= 0) { - Client.mapIcons[Client.mapIconCount] = class65.WorldMapElement_get(var10).getSpriteBool(false); - Client.mapIconXs[Client.mapIconCount] = var5; - Client.mapIconYs[Client.mapIconCount] = var6; - ++Client.mapIconCount; + Buffer var10 = new Buffer(var9); + var10.writeStringCp1252NullTerminated(var4); + var10.offset = var9; + var10.xteaEncryptAll(var8); + Buffer var11 = new Buffer(var7.offset + var6.offset + var10.offset + 5); + var11.writeByte(2); + var11.writeByte(var6.offset); + var11.writeBytes(var6.array, 0, var6.offset); + var11.writeByte(var7.offset); + var11.writeBytes(var7.array, 0, var7.offset); + var11.writeShort(var10.offset); + var11.writeBytes(var10.array, 0, var10.offset); + String var12 = StudioGame.method4220(var11.array); + + byte var3; + try { + URL var13 = new URL(PacketBuffer.method5582("services", false) + "m=accountappeal/login.ws"); + URLConnection var14 = var13.openConnection(); + var14.setDoInput(true); + var14.setDoOutput(true); + var14.setConnectTimeout(5000); + OutputStreamWriter var15 = new OutputStreamWriter(var14.getOutputStream()); + int var18 = var12.length(); + StringBuilder var19 = new StringBuilder(var18); + + int var20; + for (var20 = 0; var20 < var18; ++var20) { + char var21 = var12.charAt(var20); + if ((var21 < 'a' || var21 > 'z') && (var21 < 'A' || var21 > 'Z') && (var21 < '0' || var21 > '9') && var21 != '.' && var21 != '-' && var21 != '*' && var21 != '_') { + if (var21 == ' ') { + var19.append('+'); + } else { + byte var22 = Skills.charToByteCp1252(var21); + var19.append('%'); + int var23 = var22 >> 4 & 15; + if (var23 >= 10) { + var19.append((char)(var23 + 55)); + } else { + var19.append((char)(var23 + 48)); + } + + var23 = var22 & 15; + if (var23 >= 10) { + var19.append((char)(var23 + 55)); + } else { + var19.append((char)(var23 + 48)); + } + } + } else { + var19.append(var21); } } + + String var17 = var19.toString(); + String var26 = "data2=" + var17 + "&dest="; + var20 = "passwordchoice.ws".length(); + StringBuilder var27 = new StringBuilder(var20); + + for (int var32 = 0; var32 < var20; ++var32) { + char var33 = "passwordchoice.ws".charAt(var32); + if ((var33 < 'a' || var33 > 'z') && (var33 < 'A' || var33 > 'Z') && (var33 < '0' || var33 > '9') && var33 != '.' && var33 != '-' && var33 != '*' && var33 != '_') { + if (var33 == ' ') { + var27.append('+'); + } else { + byte var24 = Skills.charToByteCp1252(var33); + var27.append('%'); + int var25 = var24 >> 4 & 15; + if (var25 >= 10) { + var27.append((char)(var25 + 55)); + } else { + var27.append((char)(var25 + 48)); + } + + var25 = var24 & 15; + if (var25 >= 10) { + var27.append((char)(var25 + 55)); + } else { + var27.append((char)(var25 + 48)); + } + } + } else { + var27.append(var33); + } + } + + String var30 = var27.toString(); + var15.write(var26 + var30); + var15.flush(); + InputStream var28 = var14.getInputStream(); + var11 = new Buffer(new byte[1000]); + + while (true) { + int var31 = var28.read(var11.array, var11.offset, 1000 - var11.offset); + if (var31 == -1) { + var15.close(); + var28.close(); + String var34 = new String(var11.array); + if (var34.startsWith("OFFLINE")) { + var3 = 4; + } else if (var34.startsWith("WRONG")) { + var3 = 7; + } else if (var34.startsWith("RELOAD")) { + var3 = 3; + } else if (var34.startsWith("Not permitted for social network accounts.")) { + var3 = 6; + } else { + var11.xteaDecryptAll(var8); + + while (var11.offset > 0 && var11.array[var11.offset - 1] == 0) { + --var11.offset; + } + + var34 = new String(var11.array, 0, var11.offset); + if (WorldMapLabel.isValidURL(var34)) { + WorldMapAreaData.openURL(var34, true, false); + var3 = 2; + } else { + var3 = 5; + } + } + break; + } + + var11.offset += var31; + if (var11.offset >= 1000) { + var3 = 5; + break; + } + } + } catch (Throwable var29) { + var29.printStackTrace(); + var3 = 5; } + + var0 = var3; } - AbstractWorldMapData.rasterProvider.apply(); - } + switch(var0) { + case 2: + PacketWriter.setLoginResponseString(Strings.field2912, Strings.field3039, Strings.field2786); + Login.loginIndex = 6; + break; + case 3: + PacketWriter.setLoginResponseString("", "Error connecting to server.", ""); + break; + case 4: + PacketWriter.setLoginResponseString("The part of the website you are trying", "to connect to is offline at the moment.", "Please try again later."); + break; + case 5: + PacketWriter.setLoginResponseString("Sorry, there was an error trying to", "log you in to this part of the website.", "Please try again later."); + break; + case 6: + PacketWriter.setLoginResponseString("", "Error connecting to server.", ""); + break; + case 7: + PacketWriter.setLoginResponseString("You must enter a valid login to proceed. For accounts", "created after 24th November 2010, please use your", "email address. Otherwise please use your username."); + } + } } } diff --git a/runescape-client/src/main/java/SecureRandomCallable.java b/runescape-client/src/main/java/SecureRandomCallable.java index b58888ffe6..f6f119c240 100644 --- a/runescape-client/src/main/java/SecureRandomCallable.java +++ b/runescape-client/src/main/java/SecureRandomCallable.java @@ -1,10 +1,4 @@ -import java.io.File; -import java.io.InputStream; -import java.io.OutputStreamWriter; -import java.net.URL; -import java.net.URLConnection; import java.util.concurrent.Callable; -import java.util.concurrent.ScheduledExecutorService; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; @@ -12,354 +6,228 @@ import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("bl") +@ObfuscatedName("bn") @Implements("SecureRandomCallable") public class SecureRandomCallable implements Callable { - @ObfuscatedName("rw") + @ObfuscatedName("ej") @ObfuscatedGetter( - intValue = 693781825 + intValue = -276415833 ) - static int field510; - @ObfuscatedName("q") - @Export("JagexCache_locationFile") - static File JagexCache_locationFile; - @ObfuscatedName("l") - @Export("SpriteBuffer_spriteWidths") - public static int[] SpriteBuffer_spriteWidths; - @ObfuscatedName("o") - @Export("soundSystemExecutor") - static ScheduledExecutorService soundSystemExecutor; + @Export("port1") + static int port1; SecureRandomCallable() { } public Object call() { - return Language.method3800(); + return NetCache.method4394(); } - @ObfuscatedName("a") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(I)[Lga;", - garbageValue = "-1086153483" + signature = "(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V", + garbageValue = "-2092975703" ) - @Export("ServerPacket_values") - public static ServerPacket[] ServerPacket_values() { - return new ServerPacket[]{ServerPacket.field2146, ServerPacket.field2172, ServerPacket.field2093, ServerPacket.field2113, ServerPacket.field2095, ServerPacket.field2096, ServerPacket.field2156, ServerPacket.field2173, ServerPacket.field2091, ServerPacket.field2174, ServerPacket.field2101, ServerPacket.field2126, ServerPacket.field2103, ServerPacket.field2104, ServerPacket.field2105, ServerPacket.field2147, ServerPacket.field2107, ServerPacket.field2102, ServerPacket.field2099, ServerPacket.field2110, ServerPacket.field2111, ServerPacket.field2112, ServerPacket.field2123, ServerPacket.field2114, ServerPacket.field2115, ServerPacket.field2116, ServerPacket.field2117, ServerPacket.field2106, ServerPacket.field2119, ServerPacket.field2120, ServerPacket.field2108, ServerPacket.field2122, ServerPacket.field2092, ServerPacket.field2124, ServerPacket.field2125, ServerPacket.field2097, ServerPacket.field2137, ServerPacket.field2128, ServerPacket.field2129, ServerPacket.field2130, ServerPacket.field2131, ServerPacket.field2135, ServerPacket.field2142, ServerPacket.field2134, ServerPacket.field2118, ServerPacket.field2136, ServerPacket.field2167, ServerPacket.field2094, ServerPacket.field2158, ServerPacket.field2140, ServerPacket.field2141, ServerPacket.field2166, ServerPacket.field2143, ServerPacket.field2144, ServerPacket.field2145, ServerPacket.field2154, ServerPacket.field2098, ServerPacket.field2148, ServerPacket.field2149, ServerPacket.field2109, ServerPacket.field2155, ServerPacket.field2152, ServerPacket.field2153, ServerPacket.field2133, ServerPacket.field2162, ServerPacket.field2150, ServerPacket.field2157, ServerPacket.field2139, ServerPacket.field2159, ServerPacket.field2160, ServerPacket.field2161, ServerPacket.field2127, ServerPacket.field2163, ServerPacket.field2164, ServerPacket.field2165, ServerPacket.field2121, ServerPacket.field2151, ServerPacket.field2168, ServerPacket.field2169, ServerPacket.field2170, ServerPacket.field2171, ServerPacket.field2138, ServerPacket.field2100, ServerPacket.field2132, ServerPacket.field2175, ServerPacket.field2176}; - } - - @ObfuscatedName("a") - @ObfuscatedSignature( - signature = "(I)J", - garbageValue = "-1989467818" - ) - static long method1225() { - try { - URL var0 = new URL(WorldMapElement.method4547("services", false) + "m=accountappeal/login.ws"); - URLConnection var1 = var0.openConnection(); - var1.setRequestProperty("connection", "close"); - var1.setDoInput(true); - var1.setDoOutput(true); - var1.setConnectTimeout(5000); - OutputStreamWriter var2 = new OutputStreamWriter(var1.getOutputStream()); - var2.write("data1=req"); - var2.flush(); - InputStream var3 = var1.getInputStream(); - Buffer var4 = new Buffer(new byte[1000]); - - do { - int var5 = var3.read(var4.array, var4.offset, 1000 - var4.offset); - if (var5 == -1) { - var4.offset = 0; - long var7 = var4.readLong(); - return var7; - } - - var4.offset += var5; - } while(var4.offset < 1000); - - return 0L; - } catch (Exception var9) { - return 0L; + @Export("addChatMessage") + static void addChatMessage(int var0, String var1, String var2, String var3) { + ChatChannel var4 = (ChatChannel)Messages.Messages_channels.get(var0); + if (var4 == null) { + var4 = new ChatChannel(); + Messages.Messages_channels.put(var0, var4); } + + Message var5 = var4.addMessage(var0, var1, var2, var3); + Messages.Messages_hashTable.put(var5, (long)var5.count); + Messages.Messages_queue.add(var5); + Client.chatCycle = Client.cycleCntr; } - @ObfuscatedName("t") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(II)Lit;", - garbageValue = "-1052410200" + signature = "(ILci;ZI)I", + garbageValue = "-1914029993" ) - @Export("getNpcDefinition") - public static NPCDefinition getNpcDefinition(int var0) { - NPCDefinition var1 = (NPCDefinition)NPCDefinition.NpcDefinition_cached.get((long)var0); - if (var1 != null) { - return var1; + static int method1171(int var0, Script var1, boolean var2) { + int var4 = -1; + Widget var3; + if (var0 >= 2000) { + var0 -= 1000; + var4 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var3 = Language.getWidget(var4); } else { - byte[] var2 = NPCDefinition.NpcDefinition_archive.takeFile(9, var0); - var1 = new NPCDefinition(); - var1.id = var0; - if (var2 != null) { - var1.decode(new Buffer(var2)); - } - - var1.postDecode(); - NPCDefinition.NpcDefinition_cached.put(var1, (long)var0); - return var1; - } - } - - @ObfuscatedName("t") - @ObfuscatedSignature( - signature = "(Lkc;Ljava/lang/String;B)I", - garbageValue = "15" - ) - public static int method1229(Buffer var0, String var1) { - int var2 = var0.offset; - int var4 = var1.length(); - byte[] var5 = new byte[var4]; - - for (int var6 = 0; var6 < var4; ++var6) { - char var7 = var1.charAt(var6); - if (var7 > 0 && var7 < 128 || var7 >= 160 && var7 <= 255) { - var5[var6] = (byte)var7; - } else if (var7 == 8364) { - var5[var6] = -128; - } else if (var7 == 8218) { - var5[var6] = -126; - } else if (var7 == 402) { - var5[var6] = -125; - } else if (var7 == 8222) { - var5[var6] = -124; - } else if (var7 == 8230) { - var5[var6] = -123; - } else if (var7 == 8224) { - var5[var6] = -122; - } else if (var7 == 8225) { - var5[var6] = -121; - } else if (var7 == 710) { - var5[var6] = -120; - } else if (var7 == 8240) { - var5[var6] = -119; - } else if (var7 == 352) { - var5[var6] = -118; - } else if (var7 == 8249) { - var5[var6] = -117; - } else if (var7 == 338) { - var5[var6] = -116; - } else if (var7 == 381) { - var5[var6] = -114; - } else if (var7 == 8216) { - var5[var6] = -111; - } else if (var7 == 8217) { - var5[var6] = -110; - } else if (var7 == 8220) { - var5[var6] = -109; - } else if (var7 == 8221) { - var5[var6] = -108; - } else if (var7 == 8226) { - var5[var6] = -107; - } else if (var7 == 8211) { - var5[var6] = -106; - } else if (var7 == 8212) { - var5[var6] = -105; - } else if (var7 == 732) { - var5[var6] = -104; - } else if (var7 == 8482) { - var5[var6] = -103; - } else if (var7 == 353) { - var5[var6] = -102; - } else if (var7 == 8250) { - var5[var6] = -101; - } else if (var7 == 339) { - var5[var6] = -100; - } else if (var7 == 382) { - var5[var6] = -98; - } else if (var7 == 376) { - var5[var6] = -97; - } else { - var5[var6] = 63; - } + var3 = var2 ? Interpreter.field1090 : class188.field2352; } - var0.writeSmartByteShort(var5.length); - var0.offset += class210.huffman.compress(var5, 0, var5.length, var0.array, var0.offset); - return var0.offset - var2; - } - - @ObfuscatedName("ab") - @ObfuscatedSignature( - signature = "(ILcj;ZB)I", - garbageValue = "90" - ) - static int method1226(int var0, Script var1, boolean var2) { - int var3; - int var4; - if (var0 == ScriptOpcodes.ADD) { - Interpreter.Interpreter_intStackSize -= 2; - var3 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var4 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var4 + var3; - return 1; - } else if (var0 == ScriptOpcodes.SUB) { - Interpreter.Interpreter_intStackSize -= 2; - var3 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var4 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3 - var4; - return 1; - } else if (var0 == ScriptOpcodes.MULTIPLY) { - Interpreter.Interpreter_intStackSize -= 2; - var3 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var4 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3 * var4; - return 1; - } else if (var0 == ScriptOpcodes.DIV) { - Interpreter.Interpreter_intStackSize -= 2; - var3 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var4 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3 / var4; - return 1; - } else if (var0 == ScriptOpcodes.RANDOM) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = (int)(Math.random() * (double)var3); - return 1; - } else if (var0 == ScriptOpcodes.RANDOMINC) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = (int)(Math.random() * (double)(var3 + 1)); - return 1; - } else if (var0 == ScriptOpcodes.INTERPOLATE) { - Interpreter.Interpreter_intStackSize -= 5; - var3 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var4 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - int var5 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 2]; - int var6 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 3]; - int var7 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 4]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3 + (var7 - var5) * (var4 - var3) / (var6 - var5); - return 1; - } else if (var0 == ScriptOpcodes.ADDPERCENT) { - Interpreter.Interpreter_intStackSize -= 2; - var3 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var4 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3 + var4 * var3 / 100; - return 1; - } else if (var0 == ScriptOpcodes.SETBIT) { - Interpreter.Interpreter_intStackSize -= 2; - var3 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var4 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3 | 1 << var4; - return 1; - } else if (var0 == ScriptOpcodes.CLEARBIT) { - Interpreter.Interpreter_intStackSize -= 2; - var3 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var4 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3 & -1 - (1 << var4); - return 1; - } else if (var0 == ScriptOpcodes.TESTBIT) { - Interpreter.Interpreter_intStackSize -= 2; - var3 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var4 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = (var3 & 1 << var4) != 0 ? 1 : 0; - return 1; - } else if (var0 == ScriptOpcodes.MOD) { - Interpreter.Interpreter_intStackSize -= 2; - var3 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var4 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3 % var4; - return 1; - } else if (var0 == ScriptOpcodes.POW) { - Interpreter.Interpreter_intStackSize -= 2; - var3 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var4 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - if (var3 == 0) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = (int)Math.pow((double)var3, (double)var4); + if (var0 == ScriptOpcodes.CC_SETSCROLLPOS) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var3.scrollX = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + if (var3.scrollX > var3.scrollWidth - var3.width) { + var3.scrollX = var3.scrollWidth - var3.width; } + if (var3.scrollX < 0) { + var3.scrollX = 0; + } + + var3.scrollY = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + if (var3.scrollY > var3.scrollHeight - var3.height) { + var3.scrollY = var3.scrollHeight - var3.height; + } + + if (var3.scrollY < 0) { + var3.scrollY = 0; + } + + ScriptEvent.invalidateWidget(var3); return 1; - } else if (var0 == ScriptOpcodes.INVPOW) { - Interpreter.Interpreter_intStackSize -= 2; - var3 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var4 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - if (var3 == 0) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - return 1; - } else { - switch(var4) { - case 0: - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = Integer.MAX_VALUE; - break; - case 1: - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3; - break; - case 2: - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = (int)Math.sqrt((double)var3); - break; - case 3: - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = (int)Math.cbrt((double)var3); - break; - case 4: - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = (int)Math.sqrt(Math.sqrt((double)var3)); - break; - default: - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = (int)Math.pow((double)var3, 1.0D / (double)var4); + } else if (var0 == ScriptOpcodes.CC_SETCOLOUR) { + var3.color = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + ScriptEvent.invalidateWidget(var3); + return 1; + } else if (var0 == ScriptOpcodes.CC_SETFILL) { + var3.fill = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + ScriptEvent.invalidateWidget(var3); + return 1; + } else if (var0 == ScriptOpcodes.CC_SETTRANS) { + var3.transparencyTop = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + ScriptEvent.invalidateWidget(var3); + return 1; + } else if (var0 == ScriptOpcodes.CC_SETLINEWID) { + var3.lineWid = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + ScriptEvent.invalidateWidget(var3); + return 1; + } else if (var0 == ScriptOpcodes.CC_SETGRAPHIC) { + var3.spriteId2 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + ScriptEvent.invalidateWidget(var3); + return 1; + } else if (var0 == ScriptOpcodes.CC_SET2DANGLE) { + var3.spriteAngle = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + ScriptEvent.invalidateWidget(var3); + return 1; + } else if (var0 == ScriptOpcodes.CC_SETTILING) { + var3.spriteTiling = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + ScriptEvent.invalidateWidget(var3); + return 1; + } else if (var0 == ScriptOpcodes.CC_SETMODEL) { + var3.modelType = 1; + var3.modelId = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + ScriptEvent.invalidateWidget(var3); + return 1; + } else if (var0 == ScriptOpcodes.CC_SETMODELANGLE) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 6; + var3.modelOffsetX = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var3.modelOffsetY = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + var3.modelAngleX = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 2]; + var3.modelAngleY = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 3]; + var3.modelAngleZ = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 4]; + var3.modelZoom = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 5]; + ScriptEvent.invalidateWidget(var3); + return 1; + } else { + int var8; + if (var0 == ScriptOpcodes.CC_SETMODELANIM) { + var8 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + if (var8 != var3.sequenceId) { + var3.sequenceId = var8; + var3.modelFrame = 0; + var3.modelFrameCycle = 0; + ScriptEvent.invalidateWidget(var3); } return 1; - } - } else if (var0 == ScriptOpcodes.AND) { - Interpreter.Interpreter_intStackSize -= 2; - var3 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var4 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3 & var4; - return 1; - } else if (var0 == ScriptOpcodes.OR) { - Interpreter.Interpreter_intStackSize -= 2; - var3 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var4 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3 | var4; - return 1; - } else if (var0 == ScriptOpcodes.SCALE) { - Interpreter.Interpreter_intStackSize -= 3; - long var9 = (long)Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - long var11 = (long)Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - long var13 = (long)Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 2]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = (int)(var13 * var9 / var11); - return 1; - } else { - return 2; - } - } + } else if (var0 == ScriptOpcodes.CC_SETMODELORTHOG) { + var3.modelOrthog = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + ScriptEvent.invalidateWidget(var3); + return 1; + } else if (var0 == ScriptOpcodes.CC_SETTEXT) { + String var7 = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]; + if (!var7.equals(var3.text)) { + var3.text = var7; + ScriptEvent.invalidateWidget(var3); + } - @ObfuscatedName("je") - @ObfuscatedSignature( - signature = "(Lhi;S)Z", - garbageValue = "9365" - ) - @Export("runCs1") - static final boolean runCs1(Widget var0) { - if (var0.cs1Comparisons == null) { - return false; - } else { - for (int var1 = 0; var1 < var0.cs1Comparisons.length; ++var1) { - int var2 = class4.method73(var0, var1); - int var3 = var0.cs1ComparisonValues[var1]; - if (var0.cs1Comparisons[var1] == 2) { - if (var2 >= var3) { - return false; - } - } else if (var0.cs1Comparisons[var1] == 3) { - if (var2 <= var3) { - return false; - } - } else if (var0.cs1Comparisons[var1] == 4) { - if (var3 == var2) { - return false; - } - } else if (var2 != var3) { - return false; + return 1; + } else if (var0 == ScriptOpcodes.CC_SETTEXTFONT) { + var3.fontId = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + ScriptEvent.invalidateWidget(var3); + return 1; + } else if (var0 == ScriptOpcodes.CC_SETTEXTALIGN) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 3; + var3.textXAlignment = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var3.textYAlignment = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + var3.textLineHeight = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 2]; + ScriptEvent.invalidateWidget(var3); + return 1; + } else if (var0 == ScriptOpcodes.CC_SETTEXTSHADOW) { + var3.textShadowed = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + ScriptEvent.invalidateWidget(var3); + return 1; + } else if (var0 == ScriptOpcodes.CC_SETOUTLINE) { + var3.outline = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + ScriptEvent.invalidateWidget(var3); + return 1; + } else if (var0 == ScriptOpcodes.CC_SETGRAPHICSHADOW) { + var3.spriteShadow = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + ScriptEvent.invalidateWidget(var3); + return 1; + } else if (var0 == ScriptOpcodes.CC_SETVFLIP) { + var3.spriteFlipV = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + ScriptEvent.invalidateWidget(var3); + return 1; + } else if (var0 == ScriptOpcodes.CC_SETHFLIP) { + var3.spriteFlipH = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + ScriptEvent.invalidateWidget(var3); + return 1; + } else if (var0 == ScriptOpcodes.CC_SETSCROLLSIZE) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var3.scrollWidth = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var3.scrollHeight = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + ScriptEvent.invalidateWidget(var3); + if (var4 != -1 && var3.type == 0) { + MilliClock.revalidateWidgetScroll(FloorDecoration.Widget_interfaceComponents[var4 >> 16], var3, false); + } + + return 1; + } else if (var0 == ScriptOpcodes.CC_RESUME_PAUSEBUTTON) { + WorldMapCacheName.resumePauseWidget(var3.id, var3.childIndex); + Client.meslayerContinueWidget = var3; + ScriptEvent.invalidateWidget(var3); + return 1; + } else if (var0 == 1122) { + var3.spriteId = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + ScriptEvent.invalidateWidget(var3); + return 1; + } else if (var0 == ScriptOpcodes.CC_SETFILLCOLOUR) { + var3.color2 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + ScriptEvent.invalidateWidget(var3); + return 1; + } else if (var0 == 1124) { + var3.transparencyBot = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + ScriptEvent.invalidateWidget(var3); + return 1; + } else if (var0 == ScriptOpcodes.CC_SETFILLMODE) { + var8 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + FillMode var6 = (FillMode)CollisionMap.findEnumerated(TileItem.FillMode_values(), var8); + if (var6 != null) { + var3.fillMode = var6; + ScriptEvent.invalidateWidget(var3); + } + + return 1; + } else { + boolean var5; + if (var0 == ScriptOpcodes.CC_SETLINEDIRECTION) { + var5 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + var3.field2709 = var5; + return 1; + } else if (var0 == ScriptOpcodes.CC_SETMODELTRANSPARENT) { + var5 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + var3.modelTransparency = var5; + return 1; + } else { + return 2; } } - - return true; } } } diff --git a/runescape-client/src/main/java/SecureRandomFuture.java b/runescape-client/src/main/java/SecureRandomFuture.java index 0b241bacf7..3c9a2e3161 100644 --- a/runescape-client/src/main/java/SecureRandomFuture.java +++ b/runescape-client/src/main/java/SecureRandomFuture.java @@ -4,19 +4,28 @@ import java.util.concurrent.Executors; import java.util.concurrent.Future; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; +import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("co") +@ObfuscatedName("cy") @Implements("SecureRandomFuture") public class SecureRandomFuture { - @ObfuscatedName("q") - @Export("SpriteBuffer_xOffsets") - public static int[] SpriteBuffer_xOffsets; - @ObfuscatedName("a") + @ObfuscatedName("rh") + @ObfuscatedGetter( + intValue = 1810494336 + ) + static int field1242; + @ObfuscatedName("fx") + @ObfuscatedSignature( + signature = "Lfo;" + ) + @Export("socketTask") + static Task socketTask; + @ObfuscatedName("u") @Export("executor") ExecutorService executor; - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("future") Future future; @@ -25,10 +34,10 @@ public class SecureRandomFuture { this.future = this.executor.submit(new SecureRandomCallable()); } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "824065163" + signature = "(B)V", + garbageValue = "3" ) @Export("shutdown") void shutdown() { @@ -36,27 +45,27 @@ public class SecureRandomFuture { this.executor = null; } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(B)Z", - garbageValue = "-58" + signature = "(I)Z", + garbageValue = "583924598" ) @Export("isDone") boolean isDone() { return this.future.isDone(); } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(I)Ljava/security/SecureRandom;", - garbageValue = "2107000562" + signature = "(B)Ljava/security/SecureRandom;", + garbageValue = "117" ) @Export("get") SecureRandom get() { try { return (SecureRandom)this.future.get(); } catch (Exception var2) { - return Language.method3800(); + return NetCache.method4394(); } } } diff --git a/runescape-client/src/main/java/SequenceDefinition.java b/runescape-client/src/main/java/SequenceDefinition.java index d5971116cf..c6613e1a98 100644 --- a/runescape-client/src/main/java/SequenceDefinition.java +++ b/runescape-client/src/main/java/SequenceDefinition.java @@ -1,97 +1,107 @@ -import java.net.MalformedURLException; -import java.net.URL; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("iv") +@ObfuscatedName("iy") @Implements("SequenceDefinition") public class SequenceDefinition extends DualNode { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lhq;" + signature = "Lhf;" ) @Export("SequenceDefinition_archive") static AbstractArchive SequenceDefinition_archive; - @ObfuscatedName("n") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lhq;" + signature = "Lhf;" + ) + @Export("SequenceDefinition_animationsArchive") + static AbstractArchive SequenceDefinition_animationsArchive; + @ObfuscatedName("b") + @ObfuscatedSignature( + signature = "Lhf;" ) @Export("SequenceDefinition_skeletonsArchive") static AbstractArchive SequenceDefinition_skeletonsArchive; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Leb;" + signature = "Lef;" ) @Export("SequenceDefinition_cached") - static EvictingDualNodeHashTable SequenceDefinition_cached; - @ObfuscatedName("v") + public static EvictingDualNodeHashTable SequenceDefinition_cached; + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "Leb;" + signature = "Lef;" ) @Export("SequenceDefinition_cachedFrames") - static EvictingDualNodeHashTable SequenceDefinition_cachedFrames; - @ObfuscatedName("l") + public static EvictingDualNodeHashTable SequenceDefinition_cachedFrames; + @ObfuscatedName("gr") + @ObfuscatedSignature( + signature = "[Lln;" + ) + @Export("headIconHintSprites") + static Sprite[] headIconHintSprites; + @ObfuscatedName("p") @Export("frameIds") public int[] frameIds; - @ObfuscatedName("c") + @ObfuscatedName("h") @Export("chatFrameIds") int[] chatFrameIds; - @ObfuscatedName("o") + @ObfuscatedName("y") @Export("frameLengths") public int[] frameLengths; - @ObfuscatedName("i") + @ObfuscatedName("w") @Export("soundEffects") public int[] soundEffects; - @ObfuscatedName("d") + @ObfuscatedName("i") @ObfuscatedGetter( - intValue = 1066613153 + intValue = -1382390397 ) @Export("frameCount") public int frameCount; - @ObfuscatedName("m") - int[] field3505; - @ObfuscatedName("p") - public boolean field3514; - @ObfuscatedName("h") - @ObfuscatedGetter( - intValue = 400808599 - ) - public int field3519; @ObfuscatedName("k") + int[] field3525; + @ObfuscatedName("x") + public boolean field3523; + @ObfuscatedName("o") @ObfuscatedGetter( - intValue = 1898265591 + intValue = -1226148923 + ) + public int field3527; + @ObfuscatedName("e") + @ObfuscatedGetter( + intValue = 1315195187 ) @Export("shield") public int shield; - @ObfuscatedName("x") + @ObfuscatedName("n") @ObfuscatedGetter( - intValue = -1958425001 + intValue = -756969187 ) @Export("weapon") public int weapon; - @ObfuscatedName("j") - @ObfuscatedGetter( - intValue = -1319479105 - ) - public int field3518; @ObfuscatedName("r") @ObfuscatedGetter( - intValue = 1982462933 + intValue = -651997909 ) - public int field3504; - @ObfuscatedName("e") + public int field3516; + @ObfuscatedName("c") @ObfuscatedGetter( - intValue = -1529465451 + intValue = 613007297 ) - public int field3513; - @ObfuscatedName("s") + public int field3531; + @ObfuscatedName("a") @ObfuscatedGetter( - intValue = -769081211 + intValue = 1604806417 ) - public int field3521; + public int field3515; + @ObfuscatedName("d") + @ObfuscatedGetter( + intValue = -441641943 + ) + public int field3533; static { SequenceDefinition_cached = new EvictingDualNodeHashTable(64); @@ -100,20 +110,20 @@ public class SequenceDefinition extends DualNode { SequenceDefinition() { this.frameCount = -1; - this.field3514 = false; - this.field3519 = 5; + this.field3523 = false; + this.field3527 = 5; this.shield = -1; this.weapon = -1; - this.field3518 = 99; - this.field3504 = -1; - this.field3513 = -1; - this.field3521 = 2; + this.field3516 = 99; + this.field3531 = -1; + this.field3515 = -1; + this.field3533 = 2; } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Lkc;I)V", - garbageValue = "2146822130" + signature = "(Lkg;B)V", + garbageValue = "-2" ) @Export("decode") void decode(Buffer var1) { @@ -127,10 +137,10 @@ public class SequenceDefinition extends DualNode { } } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(Lkc;IB)V", - garbageValue = "-43" + signature = "(Lkg;II)V", + garbageValue = "-474728171" ) @Export("decodeNext") void decodeNext(Buffer var1, int var2) { @@ -157,29 +167,29 @@ public class SequenceDefinition extends DualNode { this.frameCount = var1.readUnsignedShort(); } else if (var2 == 3) { var3 = var1.readUnsignedByte(); - this.field3505 = new int[var3 + 1]; + this.field3525 = new int[var3 + 1]; for (var4 = 0; var4 < var3; ++var4) { - this.field3505[var4] = var1.readUnsignedByte(); + this.field3525[var4] = var1.readUnsignedByte(); } - this.field3505[var3] = 9999999; + this.field3525[var3] = 9999999; } else if (var2 == 4) { - this.field3514 = true; + this.field3523 = true; } else if (var2 == 5) { - this.field3519 = var1.readUnsignedByte(); + this.field3527 = var1.readUnsignedByte(); } else if (var2 == 6) { this.shield = var1.readUnsignedShort(); } else if (var2 == 7) { this.weapon = var1.readUnsignedShort(); } else if (var2 == 8) { - this.field3518 = var1.readUnsignedByte(); + this.field3516 = var1.readUnsignedByte(); } else if (var2 == 9) { - this.field3504 = var1.readUnsignedByte(); + this.field3531 = var1.readUnsignedByte(); } else if (var2 == 10) { - this.field3513 = var1.readUnsignedByte(); + this.field3515 = var1.readUnsignedByte(); } else if (var2 == 11) { - this.field3521 = var1.readUnsignedByte(); + this.field3533 = var1.readUnsignedByte(); } else if (var2 == 12) { var3 = var1.readUnsignedByte(); this.chatFrameIds = new int[var3]; @@ -202,40 +212,40 @@ public class SequenceDefinition extends DualNode { } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(S)V", - garbageValue = "-31863" + signature = "(B)V", + garbageValue = "-12" ) @Export("postDecode") void postDecode() { - if (this.field3504 == -1) { - if (this.field3505 != null) { - this.field3504 = 2; + if (this.field3531 == -1) { + if (this.field3525 != null) { + this.field3531 = 2; } else { - this.field3504 = 0; + this.field3531 = 0; } } - if (this.field3513 == -1) { - if (this.field3505 != null) { - this.field3513 = 2; + if (this.field3515 == -1) { + if (this.field3525 != null) { + this.field3515 = 2; } else { - this.field3513 = 0; + this.field3515 = 0; } } } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(Ldv;IB)Ldv;", - garbageValue = "-48" + signature = "(Ldf;IB)Ldf;", + garbageValue = "33" ) @Export("transformActorModel") public Model transformActorModel(Model var1, int var2) { var2 = this.frameIds[var2]; - Frames var3 = GrandExchangeEvents.getFrames(var2 >> 16); + Frames var3 = Canvas.getFrames(var2 >> 16); var2 &= 65535; if (var3 == null) { return var1.toSharedSequenceModel(true); @@ -246,15 +256,15 @@ public class SequenceDefinition extends DualNode { } } - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "(Ldv;IIS)Ldv;", - garbageValue = "180" + signature = "(Ldf;III)Ldf;", + garbageValue = "-551635617" ) @Export("transformObjectModel") Model transformObjectModel(Model var1, int var2, int var3) { var2 = this.frameIds[var2]; - Frames var4 = GrandExchangeEvents.getFrames(var2 >> 16); + Frames var4 = Canvas.getFrames(var2 >> 16); var2 &= 65535; if (var4 == null) { return var1.toSharedSequenceModel(true); @@ -282,15 +292,15 @@ public class SequenceDefinition extends DualNode { } } - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "(Ldv;II)Ldv;", - garbageValue = "-1153349389" + signature = "(Ldf;II)Ldf;", + garbageValue = "1568692010" ) @Export("transformSpotAnimationModel") Model transformSpotAnimationModel(Model var1, int var2) { var2 = this.frameIds[var2]; - Frames var3 = GrandExchangeEvents.getFrames(var2 >> 16); + Frames var3 = Canvas.getFrames(var2 >> 16); var2 &= 65535; if (var3 == null) { return var1.toSharedSpotAnimationModel(true); @@ -301,21 +311,21 @@ public class SequenceDefinition extends DualNode { } } - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedSignature( - signature = "(Ldv;ILiv;II)Ldv;", - garbageValue = "1587697769" + signature = "(Ldf;ILiy;IS)Ldf;", + garbageValue = "-1911" ) @Export("applyTransformations") public Model applyTransformations(Model var1, int var2, SequenceDefinition var3, int var4) { var2 = this.frameIds[var2]; - Frames var5 = GrandExchangeEvents.getFrames(var2 >> 16); + Frames var5 = Canvas.getFrames(var2 >> 16); var2 &= 65535; if (var5 == null) { return var3.transformActorModel(var1, var4); } else { var4 = var3.frameIds[var4]; - Frames var6 = GrandExchangeEvents.getFrames(var4 >> 16); + Frames var6 = Canvas.getFrames(var4 >> 16); var4 &= 65535; Model var7; if (var6 == null) { @@ -324,21 +334,21 @@ public class SequenceDefinition extends DualNode { return var7; } else { var7 = var1.toSharedSequenceModel(!var5.hasAlphaTransform(var2) & !var6.hasAlphaTransform(var4)); - var7.animate2(var5, var2, var6, var4, this.field3505); + var7.animate2(var5, var2, var6, var4, this.field3525); return var7; } } } - @ObfuscatedName("d") + @ObfuscatedName("i") @ObfuscatedSignature( - signature = "(Ldv;II)Ldv;", - garbageValue = "-916013843" + signature = "(Ldf;II)Ldf;", + garbageValue = "1087252773" ) @Export("transformWidgetModel") public Model transformWidgetModel(Model var1, int var2) { int var3 = this.frameIds[var2]; - Frames var4 = GrandExchangeEvents.getFrames(var3 >> 16); + Frames var4 = Canvas.getFrames(var3 >> 16); var3 &= 65535; if (var4 == null) { return var1.toSharedSequenceModel(true); @@ -347,7 +357,7 @@ public class SequenceDefinition extends DualNode { int var6 = 0; if (this.chatFrameIds != null && var2 < this.chatFrameIds.length) { var6 = this.chatFrameIds[var2]; - var5 = GrandExchangeEvents.getFrames(var6 >> 16); + var5 = Canvas.getFrames(var6 >> 16); var6 &= 65535; } @@ -365,22 +375,13 @@ public class SequenceDefinition extends DualNode { } } - @ObfuscatedName("t") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "(Ljava/lang/String;I)Z", - garbageValue = "1272275521" + signature = "(CI)Z", + garbageValue = "-816742084" ) - @Export("isValidURL") - static boolean isValidURL(String var0) { - if (var0 == null) { - return false; - } else { - try { - new URL(var0); - return true; - } catch (MalformedURLException var2) { - return false; - } - } + @Export("isCharAlphabetic") + public static boolean isCharAlphabetic(char var0) { + return var0 >= 'A' && var0 <= 'Z' || var0 >= 'a' && var0 <= 'z'; } } diff --git a/runescape-client/src/main/java/ServerBuild.java b/runescape-client/src/main/java/ServerBuild.java index 2b85284c89..eb566da7cb 100644 --- a/runescape-client/src/main/java/ServerBuild.java +++ b/runescape-client/src/main/java/ServerBuild.java @@ -4,41 +4,41 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("hr") +@ObfuscatedName("hz") @Implements("ServerBuild") public class ServerBuild { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lhr;" + signature = "Lhz;" ) @Export("LIVE") - public static final ServerBuild LIVE; - @ObfuscatedName("t") + static final ServerBuild LIVE; + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lhr;" + signature = "Lhz;" ) @Export("BUILDLIVE") - public static final ServerBuild BUILDLIVE; - @ObfuscatedName("n") + static final ServerBuild BUILDLIVE; + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Lhr;" + signature = "Lhz;" ) @Export("RC") - public static final ServerBuild RC; - @ObfuscatedName("q") + static final ServerBuild RC; + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Lhr;" + signature = "Lhz;" ) @Export("WIP") - public static final ServerBuild WIP; - @ObfuscatedName("v") + static final ServerBuild WIP; + @ObfuscatedName("z") @Export("name") public final String name; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = -96016129 + intValue = -832726311 ) - public final int field3088; + public final int field3109; static { LIVE = new ServerBuild("LIVE", 0); @@ -49,18 +49,20 @@ public class ServerBuild { ServerBuild(String var1, int var2) { this.name = var1; - this.field3088 = var2; + this.field3109 = var2; } - @ObfuscatedName("ju") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(IIIIIIII)V", - garbageValue = "1070520785" + signature = "(Llb;ILjava/lang/String;I)Ljava/lang/String;", + garbageValue = "-88537768" ) - @Export("updateRootInterface") - static final void updateRootInterface(int var0, int var1, int var2, int var3, int var4, int var5, int var6) { - if (TextureProvider.loadInterface(var0)) { - ArchiveLoader.updateInterface(Widget.Widget_interfaceComponents[var0], -1, var1, var2, var3, var4, var5, var6); + static String method4214(IterableNodeHashTable var0, int var1, String var2) { + if (var0 == null) { + return var2; + } else { + ObjectNode var3 = (ObjectNode)var0.get((long)var1); + return var3 == null ? var2 : (String)var3.obj; } } } diff --git a/runescape-client/src/main/java/ServerPacket.java b/runescape-client/src/main/java/ServerPacket.java index 7247d0a917..20489d966b 100644 --- a/runescape-client/src/main/java/ServerPacket.java +++ b/runescape-client/src/main/java/ServerPacket.java @@ -3,544 +3,647 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; +import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("ga") +@ObfuscatedName("gm") @Implements("ServerPacket") public class ServerPacket { - @ObfuscatedName("a") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2146; - @ObfuscatedName("t") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2172; - @ObfuscatedName("n") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2093; - @ObfuscatedName("q") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2113; - @ObfuscatedName("v") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2095; - @ObfuscatedName("l") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2096; - @ObfuscatedName("c") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2156; - @ObfuscatedName("o") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2173; - @ObfuscatedName("i") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2091; - @ObfuscatedName("d") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2174; - @ObfuscatedName("m") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2101; - @ObfuscatedName("p") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2126; - @ObfuscatedName("h") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2103; - @ObfuscatedName("k") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2104; - @ObfuscatedName("x") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2105; - @ObfuscatedName("j") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2147; - @ObfuscatedName("r") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2107; - @ObfuscatedName("e") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2102; - @ObfuscatedName("s") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2099; - @ObfuscatedName("b") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2110; - @ObfuscatedName("z") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2111; - @ObfuscatedName("f") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2112; - @ObfuscatedName("g") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2123; - @ObfuscatedName("w") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2114; @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2115; - @ObfuscatedName("y") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2116; - @ObfuscatedName("aa") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2117; - @ObfuscatedName("aw") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2106; - @ObfuscatedName("ar") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2119; - @ObfuscatedName("aq") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2120; - @ObfuscatedName("ad") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2108; - @ObfuscatedName("ag") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2122; - @ObfuscatedName("ak") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2092; - @ObfuscatedName("av") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2124; - @ObfuscatedName("am") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2125; - @ObfuscatedName("ab") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2097; - @ObfuscatedName("ax") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2137; - @ObfuscatedName("al") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2128; - @ObfuscatedName("ap") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2129; - @ObfuscatedName("aj") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2130; - @ObfuscatedName("ae") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2131; - @ObfuscatedName("au") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2135; - @ObfuscatedName("ah") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2142; - @ObfuscatedName("an") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2134; - @ObfuscatedName("af") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2118; - @ObfuscatedName("ay") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2136; - @ObfuscatedName("az") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2167; - @ObfuscatedName("ao") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2094; - @ObfuscatedName("ai") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2158; - @ObfuscatedName("ac") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2140; - @ObfuscatedName("at") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2141; - @ObfuscatedName("as") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2166; - @ObfuscatedName("ba") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2143; - @ObfuscatedName("bg") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2144; - @ObfuscatedName("bc") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2145; - @ObfuscatedName("bd") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2154; - @ObfuscatedName("bx") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2098; - @ObfuscatedName("bl") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2148; - @ObfuscatedName("bh") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2149; - @ObfuscatedName("bu") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2109; - @ObfuscatedName("br") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2155; - @ObfuscatedName("bq") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2152; - @ObfuscatedName("bi") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2153; - @ObfuscatedName("be") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2133; - @ObfuscatedName("bt") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2162; - @ObfuscatedName("bs") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2150; - @ObfuscatedName("bj") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2157; - @ObfuscatedName("bm") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2139; - @ObfuscatedName("bn") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2159; - @ObfuscatedName("bz") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2160; - @ObfuscatedName("bo") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2161; - @ObfuscatedName("bk") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2127; - @ObfuscatedName("bv") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2163; - @ObfuscatedName("bw") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2164; - @ObfuscatedName("bb") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2165; - @ObfuscatedName("bf") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2121; - @ObfuscatedName("by") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2151; - @ObfuscatedName("bp") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2168; - @ObfuscatedName("cx") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2169; - @ObfuscatedName("cv") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2170; - @ObfuscatedName("ce") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2171; - @ObfuscatedName("cw") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2138; - @ObfuscatedName("cd") - @ObfuscatedSignature( - signature = "Lga;" - ) - public static final ServerPacket field2100; - @ObfuscatedName("cn") - @ObfuscatedSignature( - signature = "Lga;" + signature = "Lgm;" ) public static final ServerPacket field2132; - @ObfuscatedName("cr") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lga;" + signature = "Lgm;" + ) + public static final ServerPacket field2185; + @ObfuscatedName("b") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2193; + @ObfuscatedName("g") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2134; + @ObfuscatedName("z") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2129; + @ObfuscatedName("p") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2156; + @ObfuscatedName("h") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2173; + @ObfuscatedName("y") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2135; + @ObfuscatedName("w") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2138; + @ObfuscatedName("i") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2137; + @ObfuscatedName("k") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2155; + @ObfuscatedName("x") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2163; + @ObfuscatedName("o") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2133; + @ObfuscatedName("e") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2151; + @ObfuscatedName("n") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2142; + @ObfuscatedName("r") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2143; + @ObfuscatedName("c") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2130; + @ObfuscatedName("a") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2145; + @ObfuscatedName("d") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2146; + @ObfuscatedName("s") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2199; + @ObfuscatedName("t") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2148; + @ObfuscatedName("m") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2149; + @ObfuscatedName("v") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2150; + @ObfuscatedName("q") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2141; + @ObfuscatedName("l") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2144; + @ObfuscatedName("j") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2153; + @ObfuscatedName("af") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2154; + @ObfuscatedName("ad") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2198; + @ObfuscatedName("am") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2140; + @ObfuscatedName("ai") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2157; + @ObfuscatedName("ag") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2158; + @ObfuscatedName("ao") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2159; + @ObfuscatedName("aw") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2160; + @ObfuscatedName("ak") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2161; + @ObfuscatedName("aa") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2162; + @ObfuscatedName("ab") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2184; + @ObfuscatedName("ar") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2164; + @ObfuscatedName("av") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2192; + @ObfuscatedName("aq") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2166; + @ObfuscatedName("ac") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2167; + @ObfuscatedName("az") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2168; + @ObfuscatedName("at") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2212; + @ObfuscatedName("ae") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2170; + @ObfuscatedName("aj") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2171; + @ObfuscatedName("ap") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2169; + @ObfuscatedName("an") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2136; + @ObfuscatedName("al") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2174; + @ObfuscatedName("ay") + @ObfuscatedSignature( + signature = "Lgm;" ) public static final ServerPacket field2175; - @ObfuscatedName("ci") + @ObfuscatedName("ax") @ObfuscatedSignature( - signature = "Lga;" + signature = "Lgm;" ) public static final ServerPacket field2176; - @ObfuscatedName("cy") + @ObfuscatedName("au") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2177; + @ObfuscatedName("as") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2178; + @ObfuscatedName("ah") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2179; + @ObfuscatedName("bi") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2180; + @ObfuscatedName("bo") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2181; + @ObfuscatedName("bx") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2182; + @ObfuscatedName("bu") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2183; + @ObfuscatedName("bd") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2204; + @ObfuscatedName("bn") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2152; + @ObfuscatedName("bj") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2196; + @ObfuscatedName("bm") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2187; + @ObfuscatedName("bq") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2188; + @ObfuscatedName("bf") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2128; + @ObfuscatedName("by") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2190; + @ObfuscatedName("br") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2191; + @ObfuscatedName("ba") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2131; + @ObfuscatedName("bb") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2139; + @ObfuscatedName("bg") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2194; + @ObfuscatedName("bw") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2165; + @ObfuscatedName("be") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2147; + @ObfuscatedName("bt") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2197; + @ObfuscatedName("bl") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2202; + @ObfuscatedName("bp") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2172; + @ObfuscatedName("bv") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2200; + @ObfuscatedName("bs") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2201; + @ObfuscatedName("bz") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2189; + @ObfuscatedName("bc") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2203; + @ObfuscatedName("bh") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2205; + @ObfuscatedName("bk") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2186; + @ObfuscatedName("cm") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2206; + @ObfuscatedName("cd") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2207; + @ObfuscatedName("cv") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2208; + @ObfuscatedName("cl") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2209; + @ObfuscatedName("cg") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2210; + @ObfuscatedName("ch") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2211; + @ObfuscatedName("co") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2213; + @ObfuscatedName("cr") + @ObfuscatedSignature( + signature = "Lgm;" + ) + public static final ServerPacket field2195; + @ObfuscatedName("ck") @ObfuscatedGetter( - intValue = 2057045205 + intValue = -1299957985 ) @Export("id") public final int id; - @ObfuscatedName("cl") + @ObfuscatedName("cb") @ObfuscatedGetter( - intValue = -157348015 + intValue = -2018536081 ) @Export("length") public final int length; static { - field2146 = new ServerPacket(0, 2); - field2172 = new ServerPacket(1, -2); - field2093 = new ServerPacket(2, 0); - field2113 = new ServerPacket(3, 10); - field2095 = new ServerPacket(4, -2); - field2096 = new ServerPacket(5, 4); - field2156 = new ServerPacket(6, -1); - field2173 = new ServerPacket(7, -2); - field2091 = new ServerPacket(8, 2); - field2174 = new ServerPacket(9, -2); - field2101 = new ServerPacket(10, 3); - field2126 = new ServerPacket(11, 2); - field2103 = new ServerPacket(12, 0); - field2104 = new ServerPacket(13, -2); - field2105 = new ServerPacket(14, -1); - field2147 = new ServerPacket(15, -2); - field2107 = new ServerPacket(16, 4); - field2102 = new ServerPacket(17, -2); - field2099 = new ServerPacket(18, 4); - field2110 = new ServerPacket(19, -2); - field2111 = new ServerPacket(20, -2); - field2112 = new ServerPacket(21, 0); - field2123 = new ServerPacket(22, 5); - field2114 = new ServerPacket(23, 6); - field2115 = new ServerPacket(24, 3); - field2116 = new ServerPacket(25, 6); - field2117 = new ServerPacket(26, 6); - field2106 = new ServerPacket(27, 1); - field2119 = new ServerPacket(28, -2); - field2120 = new ServerPacket(29, 6); - field2108 = new ServerPacket(30, -1); - field2122 = new ServerPacket(31, -2); - field2092 = new ServerPacket(32, 1); - field2124 = new ServerPacket(33, 5); - field2125 = new ServerPacket(34, 6); - field2097 = new ServerPacket(35, 6); - field2137 = new ServerPacket(36, 2); - field2128 = new ServerPacket(37, 6); - field2129 = new ServerPacket(38, 20); - field2130 = new ServerPacket(39, 6); - field2131 = new ServerPacket(40, -2); - field2135 = new ServerPacket(41, -2); - field2142 = new ServerPacket(42, -1); - field2134 = new ServerPacket(43, 6); - field2118 = new ServerPacket(44, 1); - field2136 = new ServerPacket(45, 2); - field2167 = new ServerPacket(46, 4); - field2094 = new ServerPacket(47, -2); - field2158 = new ServerPacket(48, 4); - field2140 = new ServerPacket(49, 6); - field2141 = new ServerPacket(50, 10); - field2166 = new ServerPacket(51, -1); - field2143 = new ServerPacket(52, 7); - field2144 = new ServerPacket(53, 8); - field2145 = new ServerPacket(54, 4); - field2154 = new ServerPacket(55, 1); - field2098 = new ServerPacket(56, -2); - field2148 = new ServerPacket(57, -1); - field2149 = new ServerPacket(58, 2); - field2109 = new ServerPacket(59, 0); - field2155 = new ServerPacket(60, 8); - field2152 = new ServerPacket(61, 6); - field2153 = new ServerPacket(62, -2); - field2133 = new ServerPacket(63, 2); - field2162 = new ServerPacket(64, -2); - field2150 = new ServerPacket(65, 15); - field2157 = new ServerPacket(66, 5); - field2139 = new ServerPacket(67, 8); - field2159 = new ServerPacket(68, 7); - field2160 = new ServerPacket(69, 1); - field2161 = new ServerPacket(70, 2); - field2127 = new ServerPacket(71, 4); - field2163 = new ServerPacket(72, 28); - field2164 = new ServerPacket(73, -2); - field2165 = new ServerPacket(74, 2); - field2121 = new ServerPacket(75, 1); - field2151 = new ServerPacket(76, 14); - field2168 = new ServerPacket(77, 5); - field2169 = new ServerPacket(78, 8); - field2170 = new ServerPacket(79, 0); - field2171 = new ServerPacket(80, 5); - field2138 = new ServerPacket(81, 2); - field2100 = new ServerPacket(82, 0); - field2132 = new ServerPacket(83, -2); - field2175 = new ServerPacket(84, 0); - field2176 = new ServerPacket(85, 12); + field2132 = new ServerPacket(0, 1); + field2185 = new ServerPacket(1, 6); + field2193 = new ServerPacket(2, -2); + field2134 = new ServerPacket(3, 1); + field2129 = new ServerPacket(4, 6); + field2156 = new ServerPacket(5, -2); + field2173 = new ServerPacket(6, -2); + field2135 = new ServerPacket(7, 5); + field2138 = new ServerPacket(8, -2); + field2137 = new ServerPacket(9, 8); + field2155 = new ServerPacket(10, -2); + field2163 = new ServerPacket(11, 8); + field2133 = new ServerPacket(12, -1); + field2151 = new ServerPacket(13, 1); + field2142 = new ServerPacket(14, 2); + field2143 = new ServerPacket(15, -1); + field2130 = new ServerPacket(16, -2); + field2145 = new ServerPacket(17, 2); + field2146 = new ServerPacket(18, -2); + field2199 = new ServerPacket(19, 0); + field2148 = new ServerPacket(20, -2); + field2149 = new ServerPacket(21, 0); + field2150 = new ServerPacket(22, 3); + field2141 = new ServerPacket(23, 6); + field2144 = new ServerPacket(24, 6); + field2153 = new ServerPacket(25, -2); + field2154 = new ServerPacket(26, 2); + field2198 = new ServerPacket(27, -2); + field2140 = new ServerPacket(28, -2); + field2157 = new ServerPacket(29, 3); + field2158 = new ServerPacket(30, 10); + field2159 = new ServerPacket(31, 20); + field2160 = new ServerPacket(32, -2); + field2161 = new ServerPacket(33, 5); + field2162 = new ServerPacket(34, 4); + field2184 = new ServerPacket(35, 1); + field2164 = new ServerPacket(36, 28); + field2192 = new ServerPacket(37, 5); + field2166 = new ServerPacket(38, 4); + field2167 = new ServerPacket(39, 2); + field2168 = new ServerPacket(40, 7); + field2212 = new ServerPacket(41, 4); + field2170 = new ServerPacket(42, -1); + field2171 = new ServerPacket(43, 2); + field2169 = new ServerPacket(44, 1); + field2136 = new ServerPacket(45, 12); + field2174 = new ServerPacket(46, 2); + field2175 = new ServerPacket(47, 0); + field2176 = new ServerPacket(48, 6); + field2177 = new ServerPacket(49, -2); + field2178 = new ServerPacket(50, 15); + field2179 = new ServerPacket(51, 2); + field2180 = new ServerPacket(52, -2); + field2181 = new ServerPacket(53, 14); + field2182 = new ServerPacket(54, -2); + field2183 = new ServerPacket(55, 2); + field2204 = new ServerPacket(56, 2); + field2152 = new ServerPacket(57, 5); + field2196 = new ServerPacket(58, -1); + field2187 = new ServerPacket(59, -2); + field2188 = new ServerPacket(60, -1); + field2128 = new ServerPacket(61, 6); + field2190 = new ServerPacket(62, 6); + field2191 = new ServerPacket(63, 6); + field2131 = new ServerPacket(64, 6); + field2139 = new ServerPacket(65, 8); + field2194 = new ServerPacket(66, 6); + field2165 = new ServerPacket(67, 2); + field2147 = new ServerPacket(68, -1); + field2197 = new ServerPacket(69, 4); + field2202 = new ServerPacket(70, 4); + field2172 = new ServerPacket(71, 8); + field2200 = new ServerPacket(72, 0); + field2201 = new ServerPacket(73, 6); + field2189 = new ServerPacket(74, 0); + field2203 = new ServerPacket(75, -2); + field2205 = new ServerPacket(76, 0); + field2186 = new ServerPacket(77, -2); + field2206 = new ServerPacket(78, -2); + field2207 = new ServerPacket(79, 0); + field2208 = new ServerPacket(80, 4); + field2209 = new ServerPacket(81, 5); + field2210 = new ServerPacket(82, 4); + field2211 = new ServerPacket(83, 7); + field2213 = new ServerPacket(84, 1); + field2195 = new ServerPacket(85, 10); } ServerPacket(int var1, int var2) { this.id = var1; this.length = var2; } + + @ObfuscatedName("g") + @ObfuscatedSignature( + signature = "(ILci;ZI)I", + garbageValue = "2083616637" + ) + static int method3657(int var0, Script var1, boolean var2) { + int var3; + int var4; + if (var0 == ScriptOpcodes.CC_CREATE) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 3; + var3 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var4 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + int var5 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 2]; + if (var4 == 0) { + throw new RuntimeException(); + } else { + Widget var6 = Language.getWidget(var3); + if (var6.children == null) { + var6.children = new Widget[var5 + 1]; + } + + if (var6.children.length <= var5) { + Widget[] var7 = new Widget[var5 + 1]; + + for (int var8 = 0; var8 < var6.children.length; ++var8) { + var7[var8] = var6.children[var8]; + } + + var6.children = var7; + } + + if (var5 > 0 && var6.children[var5 - 1] == null) { + throw new RuntimeException("" + (var5 - 1)); + } else { + Widget var12 = new Widget(); + var12.type = var4; + var12.parentId = var12.id = var6.id; + var12.childIndex = var5; + var12.isIf3 = true; + var6.children[var5] = var12; + if (var2) { + Interpreter.field1090 = var12; + } else { + class188.field2352 = var12; + } + + ScriptEvent.invalidateWidget(var6); + return 1; + } + } + } else { + Widget var9; + if (var0 == ScriptOpcodes.CC_DELETE) { + var9 = var2 ? Interpreter.field1090 : class188.field2352; + Widget var10 = Language.getWidget(var9.id); + var10.children[var9.childIndex] = null; + ScriptEvent.invalidateWidget(var10); + return 1; + } else if (var0 == ScriptOpcodes.CC_DELETEALL) { + var9 = Language.getWidget(Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]); + var9.children = null; + ScriptEvent.invalidateWidget(var9); + return 1; + } else if (var0 != ScriptOpcodes.CC_FIND) { + if (var0 == ScriptOpcodes.IF_FIND) { + var9 = Language.getWidget(Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]); + if (var9 != null) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 1; + if (var2) { + Interpreter.field1090 = var9; + } else { + class188.field2352 = var9; + } + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + } + + return 1; + } else { + return 2; + } + } else { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var3 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var4 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + Widget var11 = UserComparator3.getWidgetChild(var3, var4); + if (var11 != null && var4 != -1) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 1; + if (var2) { + Interpreter.field1090 = var11; + } else { + class188.field2352 = var11; + } + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + } + + return 1; + } + } + } } diff --git a/runescape-client/src/main/java/Skeleton.java b/runescape-client/src/main/java/Skeleton.java index 7546d7f2d4..d050ad3d26 100644 --- a/runescape-client/src/main/java/Skeleton.java +++ b/runescape-client/src/main/java/Skeleton.java @@ -1,29 +1,31 @@ -import java.io.IOException; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; +import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("ee") +@ObfuscatedName("ec") @Implements("Skeleton") public class Skeleton extends Node { - @ObfuscatedName("a") + @ObfuscatedName("w") + static int[] field1788; + @ObfuscatedName("u") @ObfuscatedGetter( - intValue = -567509563 + intValue = -1887621735 ) @Export("id") int id; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = 774941897 + intValue = 1674197883 ) @Export("count") int count; - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("transformTypes") int[] transformTypes; - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("labels") int[][] labels; @@ -51,38 +53,51 @@ public class Skeleton extends Node { } - @ObfuscatedName("n") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(I)Lbw;", - garbageValue = "25013403" + signature = "([BI)V", + garbageValue = "870610960" ) - static ClientPreferences method3201() { - AccessFile var0 = null; - ClientPreferences var1 = new ClientPreferences(); - - try { - var0 = CollisionMap.getPreferencesFile("", MouseHandler.field458.name, false); - byte[] var2 = new byte[(int)var0.length()]; - - int var4; - for (int var3 = 0; var3 < var2.length; var3 += var4) { - var4 = var0.read(var2, var3, var2.length - var3); - if (var4 == -1) { - throw new IOException(); + @Export("ByteArrayPool_release") + public static synchronized void ByteArrayPool_release(byte[] var0) { + if (var0.length == 100 && ByteArrayPool.ByteArrayPool_smallCount < 1000) { + ByteArrayPool.ByteArrayPool_small[++ByteArrayPool.ByteArrayPool_smallCount - 1] = var0; + } else if (var0.length == 5000 && ByteArrayPool.ByteArrayPool_mediumCount < 250) { + ByteArrayPool.ByteArrayPool_medium[++ByteArrayPool.ByteArrayPool_mediumCount - 1] = var0; + } else if (var0.length == 30000 && ByteArrayPool.ByteArrayPool_largeCount < 50) { + ByteArrayPool.ByteArrayPool_large[++ByteArrayPool.ByteArrayPool_largeCount - 1] = var0; + } else { + if (ByteArrayPool.ByteArrayPool_arrays != null) { + for (int var1 = 0; var1 < WorldMapSprite.ByteArrayPool_alternativeSizes.length; ++var1) { + if (var0.length == WorldMapSprite.ByteArrayPool_alternativeSizes[var1] && class216.ByteArrayPool_altSizeArrayCounts[var1] < ByteArrayPool.ByteArrayPool_arrays[var1].length) { + ByteArrayPool.ByteArrayPool_arrays[var1][class216.ByteArrayPool_altSizeArrayCounts[var1]++] = var0; + return; + } } } - var1 = new ClientPreferences(new Buffer(var2)); - } catch (Exception var6) { } + } - try { - if (var0 != null) { - var0.close(); - } - } catch (Exception var5) { + @ObfuscatedName("j") + @ObfuscatedSignature( + signature = "(ILci;ZI)I", + garbageValue = "-1324781775" + ) + static int method3107(int var0, Script var1, boolean var2) { + if (var0 == ScriptOpcodes.SOUND_SYNTH) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 3; + FileSystem.queueSoundEffect(Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize], Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1], Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 2]); + return 1; + } else if (var0 == ScriptOpcodes.SOUND_SONG) { + AttackOption.playSong(Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]); + return 1; + } else if (var0 == ScriptOpcodes.SOUND_JINGLE) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + MouseHandler.playSoundJingle(Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize], Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]); + return 1; + } else { + return 2; } - - return var1; } } diff --git a/runescape-client/src/main/java/Skills.java b/runescape-client/src/main/java/Skills.java index d26720b804..93d32013d6 100644 --- a/runescape-client/src/main/java/Skills.java +++ b/runescape-client/src/main/java/Skills.java @@ -3,21 +3,27 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("hd") +@ObfuscatedName("hk") @Implements("Skills") public class Skills { - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("Skills_enabled") public static final boolean[] Skills_enabled; - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("Skills_experienceTable") public static int[] Skills_experienceTable; - @ObfuscatedName("fh") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "Lev;" + signature = "[Lbp;" ) - @Export("urlRequester") - static UrlRequester urlRequester; + @Export("World_worlds") + static World[] World_worlds; + @ObfuscatedName("ba") + @ObfuscatedSignature( + signature = "Llm;" + ) + @Export("worldSelectLeftSprite") + static IndexedSprite worldSelectLeftSprite; static { Skills_enabled = 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, false, false}; @@ -33,25 +39,74 @@ public class Skills { } - @ObfuscatedName("kc") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "3031310" + signature = "(CB)B", + garbageValue = "11" ) - static final void method4271() { - PacketBufferNode var0 = SoundSystem.getPacketBufferNode(ClientPacket.field2265, Client.packetWriter.isaacCipher); - Client.packetWriter.addNode(var0); - - for (InterfaceParent var1 = (InterfaceParent)Client.interfaceParents.first(); var1 != null; var1 = (InterfaceParent)Client.interfaceParents.next()) { - if (var1.type == 0 || var1.type == 3) { - GrandExchangeOfferOwnWorldComparator.closeInterface(var1, true); - } - } - - if (Client.meslayerContinueWidget != null) { - GrandExchangeOfferAgeComparator.invalidateWidget(Client.meslayerContinueWidget); - Client.meslayerContinueWidget = null; + @Export("charToByteCp1252") + public static byte charToByteCp1252(char var0) { + byte var1; + if (var0 > 0 && var0 < 128 || var0 >= 160 && var0 <= 255) { + var1 = (byte)var0; + } else if (var0 == 8364) { + var1 = -128; + } else if (var0 == 8218) { + var1 = -126; + } else if (var0 == 402) { + var1 = -125; + } else if (var0 == 8222) { + var1 = -124; + } else if (var0 == 8230) { + var1 = -123; + } else if (var0 == 8224) { + var1 = -122; + } else if (var0 == 8225) { + var1 = -121; + } else if (var0 == 710) { + var1 = -120; + } else if (var0 == 8240) { + var1 = -119; + } else if (var0 == 352) { + var1 = -118; + } else if (var0 == 8249) { + var1 = -117; + } else if (var0 == 338) { + var1 = -116; + } else if (var0 == 381) { + var1 = -114; + } else if (var0 == 8216) { + var1 = -111; + } else if (var0 == 8217) { + var1 = -110; + } else if (var0 == 8220) { + var1 = -109; + } else if (var0 == 8221) { + var1 = -108; + } else if (var0 == 8226) { + var1 = -107; + } else if (var0 == 8211) { + var1 = -106; + } else if (var0 == 8212) { + var1 = -105; + } else if (var0 == 732) { + var1 = -104; + } else if (var0 == 8482) { + var1 = -103; + } else if (var0 == 353) { + var1 = -102; + } else if (var0 == 8250) { + var1 = -101; + } else if (var0 == 339) { + var1 = -100; + } else if (var0 == 382) { + var1 = -98; + } else if (var0 == 376) { + var1 = -97; + } else { + var1 = 63; } + return var1; } } diff --git a/runescape-client/src/main/java/SoftWrapper.java b/runescape-client/src/main/java/SoftWrapper.java index b720628866..37f88e2140 100644 --- a/runescape-client/src/main/java/SoftWrapper.java +++ b/runescape-client/src/main/java/SoftWrapper.java @@ -3,10 +3,10 @@ import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; -@ObfuscatedName("ea") +@ObfuscatedName("ei") @Implements("SoftWrapper") public class SoftWrapper extends Wrapper { - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("ref") SoftReference ref; @@ -15,13 +15,13 @@ public class SoftWrapper extends Wrapper { this.ref = new SoftReference(var1); } - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("get") Object get() { return this.ref.get(); } - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("isSoft") boolean isSoft() { return true; diff --git a/runescape-client/src/main/java/SoundCache.java b/runescape-client/src/main/java/SoundCache.java index 7a215c993e..1b1cfa76f2 100644 --- a/runescape-client/src/main/java/SoundCache.java +++ b/runescape-client/src/main/java/SoundCache.java @@ -1,39 +1,50 @@ import net.runelite.mapping.Export; import net.runelite.mapping.Implements; +import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("dm") +@ObfuscatedName("dk") @Implements("SoundCache") public class SoundCache { - @ObfuscatedName("a") + @ObfuscatedName("sr") @ObfuscatedSignature( - signature = "Lhq;" + signature = "Lh;" + ) + @Export("grandExchangeEvents") + static GrandExchangeEvents grandExchangeEvents; + @ObfuscatedName("fd") + @ObfuscatedGetter( + intValue = -1460777927 + ) + static int field1438; + @ObfuscatedName("u") + @ObfuscatedSignature( + signature = "Lhf;" ) @Export("soundEffectIndex") AbstractArchive soundEffectIndex; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lhq;" + signature = "Lhf;" ) @Export("musicSampleIndex") AbstractArchive musicSampleIndex; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Llh;" + signature = "Lle;" ) @Export("musicSamples") NodeHashTable musicSamples; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Llh;" + signature = "Lle;" ) @Export("rawSounds") NodeHashTable rawSounds; @ObfuscatedSignature( - signature = "(Lhq;Lhq;)V" + signature = "(Lhf;Lhf;)V" ) public SoundCache(AbstractArchive var1, AbstractArchive var2) { this.musicSamples = new NodeHashTable(256); @@ -42,10 +53,10 @@ public class SoundCache { this.musicSampleIndex = var2; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(II[II)Lca;", - garbageValue = "-33690704" + signature = "(II[II)Lcw;", + garbageValue = "1674765898" ) @Export("getSoundEffect0") RawSound getSoundEffect0(int var1, int var2, int[] var3) { @@ -73,10 +84,10 @@ public class SoundCache { } } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(II[II)Lca;", - garbageValue = "393198324" + signature = "(II[IB)Lcw;", + garbageValue = "-43" ) @Export("getMusicSample0") RawSound getMusicSample0(int var1, int var2, int[] var3) { @@ -110,10 +121,10 @@ public class SoundCache { } } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(I[II)Lca;", - garbageValue = "-1954377322" + signature = "(I[II)Lcw;", + garbageValue = "1055604971" ) @Export("getSoundEffect") public RawSound getSoundEffect(int var1, int[] var2) { @@ -126,10 +137,10 @@ public class SoundCache { } } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(I[II)Lca;", - garbageValue = "-1912109066" + signature = "(I[IB)Lcw;", + garbageValue = "93" ) @Export("getMusicSample") public RawSound getMusicSample(int var1, int[] var2) { @@ -142,51 +153,31 @@ public class SoundCache { } } - @ObfuscatedName("w") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(ILcj;ZI)I", - garbageValue = "-1732258105" + signature = "(II)Z", + garbageValue = "851722270" ) - static int method2673(int var0, Script var1, boolean var2) { - Widget var3 = PacketBufferNode.getWidget(Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]); - if (var0 == ScriptOpcodes.IF_GETTARGETMASK) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = UserComparator5.method3551(class195.getWidgetClickMask(var3)); - return 1; - } else if (var0 != ScriptOpcodes.IF_GETOP) { - if (var0 == ScriptOpcodes.IF_GETOPBASE) { - if (var3.dataText == null) { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = ""; - } else { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var3.dataText; - } - - return 1; - } else { - return 2; - } - } else { - int var4 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - --var4; - if (var3.actions != null && var4 < var3.actions.length && var3.actions[var4] != null) { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var3.actions[var4]; - } else { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = ""; - } - - return 1; - } + public static boolean method2544(int var0) { + return (var0 & 1) != 0; } - @ObfuscatedName("lv") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Lhi;B)Ljava/lang/String;", - garbageValue = "1" + signature = "(II)J", + garbageValue = "-1448942759" ) - static String method2666(Widget var0) { - if (UserComparator5.method3551(class195.getWidgetClickMask(var0)) == 0) { - return null; - } else { - return var0.spellActionName != null && var0.spellActionName.trim().length() != 0 ? var0.spellActionName : null; - } + public static long method2531(int var0) { + return ViewportMouse.ViewportMouse_entityTags[var0]; + } + + @ObfuscatedName("g") + @ObfuscatedSignature( + signature = "(Ljava/lang/CharSequence;I)I", + garbageValue = "-1986305068" + ) + @Export("parseInt") + public static int parseInt(CharSequence var0) { + return UserComparator8.parseIntCustomRadix(var0, 10, true); } } diff --git a/runescape-client/src/main/java/SoundEffect.java b/runescape-client/src/main/java/SoundEffect.java index 51a1119d2d..ad92f89929 100644 --- a/runescape-client/src/main/java/SoundEffect.java +++ b/runescape-client/src/main/java/SoundEffect.java @@ -3,24 +3,24 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("cg") +@ObfuscatedName("cz") @Implements("SoundEffect") public class SoundEffect { - @ObfuscatedName("t") - @Export("start") - int start; - @ObfuscatedName("n") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "[Lda;" + signature = "[Ldr;" ) @Export("instruments") Instrument[] instruments; - @ObfuscatedName("q") + @ObfuscatedName("b") + @Export("start") + int start; + @ObfuscatedName("g") @Export("end") int end; @ObfuscatedSignature( - signature = "(Lkc;)V" + signature = "(Lkg;)V" ) SoundEffect(Buffer var1) { this.instruments = new Instrument[10]; @@ -38,9 +38,9 @@ public class SoundEffect { this.end = var1.readUnsignedShort(); } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "()Lca;" + signature = "()Lcw;" ) @Export("toRawSound") public RawSound toRawSound() { @@ -48,7 +48,7 @@ public class SoundEffect { return new RawSound(22050, var1, this.start * 22050 / 1000, this.end * 22050 / 1000); } - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("calculateDelay") public final int calculateDelay() { int var1 = 9999999; @@ -83,7 +83,7 @@ public class SoundEffect { } } - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("mix") final byte[] mix() { int var1 = 0; @@ -122,9 +122,9 @@ public class SoundEffect { } } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Lhq;II)Lcg;" + signature = "(Lhf;II)Lcz;" ) @Export("readSoundEffect") public static SoundEffect readSoundEffect(AbstractArchive var0, int var1, int var2) { diff --git a/runescape-client/src/main/java/SoundEnvelope.java b/runescape-client/src/main/java/SoundEnvelope.java index cd11bf28df..af6d01807c 100644 --- a/runescape-client/src/main/java/SoundEnvelope.java +++ b/runescape-client/src/main/java/SoundEnvelope.java @@ -3,42 +3,42 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("dd") +@ObfuscatedName("dx") @Implements("SoundEnvelope") public class SoundEnvelope { - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("segments") int segments; - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("durations") int[] durations; - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("phases") int[] phases; - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("start") int start; - @ObfuscatedName("v") + @ObfuscatedName("z") @Export("end") int end; - @ObfuscatedName("l") + @ObfuscatedName("p") @Export("form") int form; - @ObfuscatedName("c") + @ObfuscatedName("h") @Export("ticks") int ticks; - @ObfuscatedName("o") + @ObfuscatedName("y") + @Export("max") + int max; + @ObfuscatedName("w") @Export("phaseIndex") int phaseIndex; @ObfuscatedName("i") @Export("step") int step; - @ObfuscatedName("d") + @ObfuscatedName("k") @Export("amplitude") int amplitude; - @ObfuscatedName("m") - @Export("max") - int max; SoundEnvelope() { this.segments = 2; @@ -50,9 +50,9 @@ public class SoundEnvelope { this.phases[1] = 65535; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Lkc;)V" + signature = "(Lkg;)V" ) @Export("decode") final void decode(Buffer var1) { @@ -62,9 +62,9 @@ public class SoundEnvelope { this.decodeSegments(var1); } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Lkc;)V" + signature = "(Lkg;)V" ) @Export("decodeSegments") final void decodeSegments(Buffer var1) { @@ -79,7 +79,7 @@ public class SoundEnvelope { } - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("reset") final void reset() { this.ticks = 0; @@ -89,7 +89,7 @@ public class SoundEnvelope { this.max = 0; } - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("doStep") final int doStep(int var1) { if (this.max >= this.ticks) { diff --git a/runescape-client/src/main/java/SoundSystem.java b/runescape-client/src/main/java/SoundSystem.java index b8d5536017..e8c66d80ba 100644 --- a/runescape-client/src/main/java/SoundSystem.java +++ b/runescape-client/src/main/java/SoundSystem.java @@ -1,16 +1,22 @@ import net.runelite.mapping.Export; import net.runelite.mapping.Implements; +import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; +import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("dl") +@ObfuscatedName("dc") @Implements("SoundSystem") public class SoundSystem implements Runnable { - @ObfuscatedName("q") - static byte[][][] field1414; - @ObfuscatedName("a") + @ObfuscatedName("ku") + @ObfuscatedGetter( + intValue = -73888697 + ) + @Export("menuHeight") + static int menuHeight; + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "[Ldq;" + signature = "[Lde;" ) @Export("players") volatile PcmPlayer[] players; @@ -28,42 +34,167 @@ public class SoundSystem implements Runnable { } } } catch (Exception var4) { - User.RunException_sendStackTrace((String)null, var4); + Calendar.RunException_sendStackTrace((String)null, var4); } } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Lgx;Llm;I)Lgk;", - garbageValue = "-1503020688" + signature = "(Lhf;Lhf;ZLky;I)V", + garbageValue = "-1163192511" ) - @Export("getPacketBufferNode") - public static PacketBufferNode getPacketBufferNode(ClientPacket var0, IsaacCipher var1) { - PacketBufferNode var2; - if (PacketBufferNode.PacketBufferNode_packetBufferNodeCount == 0) { - var2 = new PacketBufferNode(); - } else { - var2 = PacketBufferNode.PacketBufferNode_packetBufferNodes[--PacketBufferNode.PacketBufferNode_packetBufferNodeCount]; - } + public static void method2529(AbstractArchive var0, AbstractArchive var1, boolean var2, Font var3) { + ItemDefinition.ItemDefinition_archive = var0; + class266.ItemDefinition_modelArchive = var1; + ItemDefinition.ItemDefinition_inMembersWorld = var2; + class81.ItemDefinition_fileCount = ItemDefinition.ItemDefinition_archive.getGroupFileCount(10); + class335.ItemDefinition_fontPlain11 = var3; + } - var2.clientPacket = var0; - var2.clientPacketLength = var0.length; - if (var2.clientPacketLength == -1) { - var2.packetBuffer = new PacketBuffer(260); - } else if (var2.clientPacketLength == -2) { - var2.packetBuffer = new PacketBuffer(10000); - } else if (var2.clientPacketLength <= 18) { - var2.packetBuffer = new PacketBuffer(20); - } else if (var2.clientPacketLength <= 98) { - var2.packetBuffer = new PacketBuffer(100); + @ObfuscatedName("ag") + @ObfuscatedSignature( + signature = "(ILci;ZI)I", + garbageValue = "-107397374" + ) + static int method2530(int var0, Script var1, boolean var2) { + int var3; + if (var0 == ScriptOpcodes.STOCKMARKET_GETOFFERTYPE) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Client.grandExchangeOffers[var3].type(); + return 1; + } else if (var0 == ScriptOpcodes.STOCKMARKET_GETOFFERITEM) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Client.grandExchangeOffers[var3].id; + return 1; + } else if (var0 == ScriptOpcodes.STOCKMARKET_GETOFFERPRICE) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Client.grandExchangeOffers[var3].unitPrice; + return 1; + } else if (var0 == ScriptOpcodes.STOCKMARKET_GETOFFERCOUNT) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Client.grandExchangeOffers[var3].totalQuantity; + return 1; + } else if (var0 == ScriptOpcodes.STOCKMARKET_GETOFFERCOMPLETEDCOUNT) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Client.grandExchangeOffers[var3].currentQuantity; + return 1; + } else if (var0 == ScriptOpcodes.STOCKMARKET_GETOFFERCOMPLETEDGOLD) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Client.grandExchangeOffers[var3].currentPrice; + return 1; } else { - var2.packetBuffer = new PacketBuffer(260); - } + int var12; + if (var0 == ScriptOpcodes.STOCKMARKET_ISOFFEREMPTY) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var12 = Client.grandExchangeOffers[var3].status(); + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var12 == 0 ? 1 : 0; + return 1; + } else if (var0 == ScriptOpcodes.STOCKMARKET_ISOFFERSTABLE) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var12 = Client.grandExchangeOffers[var3].status(); + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var12 == 2 ? 1 : 0; + return 1; + } else if (var0 == ScriptOpcodes.STOCKMARKET_ISOFFERFINISHED) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var12 = Client.grandExchangeOffers[var3].status(); + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var12 == 5 ? 1 : 0; + return 1; + } else if (var0 == ScriptOpcodes.STOCKMARKET_ISOFFERADDING) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var12 = Client.grandExchangeOffers[var3].status(); + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var12 == 1 ? 1 : 0; + return 1; + } else { + boolean var13; + if (var0 == ScriptOpcodes.TRADINGPOST_SORTBY_NAME) { + var13 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + if (SoundCache.grandExchangeEvents != null) { + SoundCache.grandExchangeEvents.sort(GrandExchangeEvents.GrandExchangeEvents_nameComparator, var13); + } - var2.packetBuffer.setIsaacCipher(var1); - var2.packetBuffer.writeByteIsaac(var2.clientPacket.id); - var2.index = 0; - return var2; + return 1; + } else if (var0 == ScriptOpcodes.TRADINGPOST_SORTBY_PRICE) { + var13 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + if (SoundCache.grandExchangeEvents != null) { + SoundCache.grandExchangeEvents.sort(GrandExchangeEvents.GrandExchangeEvents_priceComparator, var13); + } + + return 1; + } else if (var0 == ScriptOpcodes.TRADINGPOST_SORTFILTERBY_WORLD) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var13 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + boolean var4 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1] == 1; + if (SoundCache.grandExchangeEvents != null) { + Client.GrandExchangeEvents_worldComparator.filterWorlds = var4; + SoundCache.grandExchangeEvents.sort(Client.GrandExchangeEvents_worldComparator, var13); + } + + return 1; + } else if (var0 == ScriptOpcodes.TRADINGPOST_SORTBY_AGE) { + var13 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + if (SoundCache.grandExchangeEvents != null) { + SoundCache.grandExchangeEvents.sort(GrandExchangeEvents.GrandExchangeEvents_ageComparator, var13); + } + + return 1; + } else if (var0 == ScriptOpcodes.TRADINGPOST_SORTBY_COUNT) { + var13 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + if (SoundCache.grandExchangeEvents != null) { + SoundCache.grandExchangeEvents.sort(GrandExchangeEvents.GrandExchangeEvents_quantityComparator, var13); + } + + return 1; + } else if (var0 == ScriptOpcodes.TRADINGPOST_GETTOTALOFFERS) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = SoundCache.grandExchangeEvents == null ? 0 : SoundCache.grandExchangeEvents.events.size(); + return 1; + } else { + GrandExchangeEvent var11; + if (var0 == ScriptOpcodes.TRADINGPOST_GETOFFERWORLD) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var11 = (GrandExchangeEvent)SoundCache.grandExchangeEvents.events.get(var3); + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var11.world; + return 1; + } else if (var0 == ScriptOpcodes.TRADINGPOST_GETOFFERNAME) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var11 = (GrandExchangeEvent)SoundCache.grandExchangeEvents.events.get(var3); + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var11.getOfferName(); + return 1; + } else if (var0 == ScriptOpcodes.TRADINGPOST_GETOFFERPREVIOUSNAME) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var11 = (GrandExchangeEvent)SoundCache.grandExchangeEvents.events.get(var3); + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var11.getPreviousOfferName(); + return 1; + } else if (var0 == ScriptOpcodes.TRADINGPOST_GETOFFERAGE) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var11 = (GrandExchangeEvent)SoundCache.grandExchangeEvents.events.get(var3); + long var5 = TaskHandler.currentTimeMillis() - class65.field604 - var11.age; + int var7 = (int)(var5 / 3600000L); + int var8 = (int)((var5 - (long)(var7 * 3600000)) / 60000L); + int var9 = (int)((var5 - (long)(var7 * 3600000) - (long)(var8 * 60000)) / 1000L); + String var10 = var7 + ":" + var8 / 10 + var8 % 10 + ":" + var9 / 10 + var9 % 10; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var10; + return 1; + } else if (var0 == ScriptOpcodes.TRADINGPOST_GETOFFERCOUNT) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var11 = (GrandExchangeEvent)SoundCache.grandExchangeEvents.events.get(var3); + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var11.grandExchangeOffer.totalQuantity; + return 1; + } else if (var0 == ScriptOpcodes.TRADINGPOST_GETOFFERPRICE) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var11 = (GrandExchangeEvent)SoundCache.grandExchangeEvents.events.get(var3); + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var11.grandExchangeOffer.unitPrice; + return 1; + } else if (var0 == ScriptOpcodes.TRADINGPOST_GETOFFERITEM) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var11 = (GrandExchangeEvent)SoundCache.grandExchangeEvents.events.get(var3); + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var11.grandExchangeOffer.id; + return 1; + } else { + return 2; + } + } + } + } } } diff --git a/runescape-client/src/main/java/SpotAnimationDefinition.java b/runescape-client/src/main/java/SpotAnimationDefinition.java index e9696456c3..bf0cac97cd 100644 --- a/runescape-client/src/main/java/SpotAnimationDefinition.java +++ b/runescape-client/src/main/java/SpotAnimationDefinition.java @@ -4,90 +4,90 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("im") +@ObfuscatedName("ir") @Implements("SpotAnimationDefinition") public class SpotAnimationDefinition extends DualNode { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lhq;" + signature = "Lhf;" ) @Export("SpotAnimationDefinition_archive") - static AbstractArchive SpotAnimationDefinition_archive; - @ObfuscatedName("t") + public static AbstractArchive SpotAnimationDefinition_archive; + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lhq;" + signature = "Lhf;" ) @Export("SpotAnimationDefinition_modelArchive") - static AbstractArchive SpotAnimationDefinition_modelArchive; - @ObfuscatedName("n") + public static AbstractArchive SpotAnimationDefinition_modelArchive; + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Leb;" + signature = "Lef;" ) @Export("SpotAnimationDefinition_cached") - static EvictingDualNodeHashTable SpotAnimationDefinition_cached; - @ObfuscatedName("q") + public static EvictingDualNodeHashTable SpotAnimationDefinition_cached; + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Leb;" + signature = "Lef;" ) @Export("SpotAnimationDefinition_cachedModels") - static EvictingDualNodeHashTable SpotAnimationDefinition_cachedModels; - @ObfuscatedName("v") + public static EvictingDualNodeHashTable SpotAnimationDefinition_cachedModels; + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = 817901855 + intValue = 1268468577 ) @Export("id") int id; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = 1625414499 + intValue = -52885791 ) @Export("archive") int archive; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedGetter( - intValue = 1447664197 + intValue = 142429503 ) @Export("sequence") public int sequence; - @ObfuscatedName("o") + @ObfuscatedName("y") @Export("recolorFrom") short[] recolorFrom; - @ObfuscatedName("i") + @ObfuscatedName("w") @Export("recolorTo") short[] recolorTo; - @ObfuscatedName("d") + @ObfuscatedName("i") @Export("retextureFrom") short[] retextureFrom; - @ObfuscatedName("m") + @ObfuscatedName("k") @Export("retextureTo") short[] retextureTo; - @ObfuscatedName("p") + @ObfuscatedName("x") @ObfuscatedGetter( - intValue = -159508529 + intValue = -102258765 ) @Export("widthScale") int widthScale; - @ObfuscatedName("h") + @ObfuscatedName("o") @ObfuscatedGetter( - intValue = 806285961 + intValue = 1241628367 ) @Export("heightScale") int heightScale; - @ObfuscatedName("k") + @ObfuscatedName("e") @ObfuscatedGetter( - intValue = 925047499 + intValue = 1943149367 ) @Export("orientation") int orientation; - @ObfuscatedName("x") + @ObfuscatedName("n") @ObfuscatedGetter( - intValue = -721394247 + intValue = 587546705 ) @Export("ambient") int ambient; - @ObfuscatedName("j") + @ObfuscatedName("r") @ObfuscatedGetter( - intValue = 1574201613 + intValue = -1349692519 ) @Export("contrast") int contrast; @@ -106,10 +106,10 @@ public class SpotAnimationDefinition extends DualNode { this.contrast = 0; } - @ObfuscatedName("n") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Lkc;B)V", - garbageValue = "14" + signature = "(Lkg;I)V", + garbageValue = "1557437802" ) @Export("decode") void decode(Buffer var1) { @@ -123,10 +123,10 @@ public class SpotAnimationDefinition extends DualNode { } } - @ObfuscatedName("q") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Lkc;II)V", - garbageValue = "706058515" + signature = "(Lkg;II)V", + garbageValue = "-1153531300" ) @Export("decodeNext") void decodeNext(Buffer var1, int var2) { @@ -170,10 +170,10 @@ public class SpotAnimationDefinition extends DualNode { } - @ObfuscatedName("v") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(II)Ldv;", - garbageValue = "1144333144" + signature = "(IB)Ldf;", + garbageValue = "67" ) @Export("getModel") public final Model getModel(int var1) { @@ -203,7 +203,7 @@ public class SpotAnimationDefinition extends DualNode { Model var5; if (this.sequence != -1 && var1 != -1) { - var5 = PlayerType.SequenceDefinition_get(this.sequence).transformSpotAnimationModel(var2, var1); + var5 = GrandExchangeOfferAgeComparator.SequenceDefinition_get(this.sequence).transformSpotAnimationModel(var2, var1); } else { var5 = var2.toSharedSpotAnimationModel(true); } @@ -232,20 +232,22 @@ public class SpotAnimationDefinition extends DualNode { return var5; } - @ObfuscatedName("o") + @ObfuscatedName("eq") @ObfuscatedSignature( - signature = "(IIB)I", - garbageValue = "-102" + signature = "(I)I", + garbageValue = "150195420" ) - static final int method4582(int var0, int var1) { - int var2 = class42.method856(45365 + var0, var1 + 91923, 4) - 128 + (class42.method856(10294 + var0, var1 + 37821, 2) - 128 >> 1) + (class42.method856(var0, var1, 1) - 128 >> 2); - var2 = (int)((double)var2 * 0.3D) + 35; - if (var2 < 10) { - var2 = 10; - } else if (var2 > 60) { - var2 = 60; - } + static int method4509() { + if (Client.archiveLoaders != null && Client.archiveLoadersDone < Client.archiveLoaders.size()) { + int var0 = 0; - return var2; + for (int var1 = 0; var1 <= Client.archiveLoadersDone; ++var1) { + var0 += ((ArchiveLoader)Client.archiveLoaders.get(var1)).loadedCount; + } + + return var0 * 10000 / Client.field914; + } else { + return 10000; + } } } diff --git a/runescape-client/src/main/java/Sprite.java b/runescape-client/src/main/java/Sprite.java index 0034c28968..bec45a26ef 100644 --- a/runescape-client/src/main/java/Sprite.java +++ b/runescape-client/src/main/java/Sprite.java @@ -3,28 +3,28 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("lx") +@ObfuscatedName("ln") @Implements("Sprite") public final class Sprite extends Rasterizer2D { - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("pixels") public int[] pixels; - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("subWidth") public int subWidth; - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("subHeight") public int subHeight; - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("xOffset") public int xOffset; - @ObfuscatedName("v") + @ObfuscatedName("z") @Export("yOffset") int yOffset; - @ObfuscatedName("l") + @ObfuscatedName("p") @Export("width") public int width; - @ObfuscatedName("c") + @ObfuscatedName("h") @Export("height") public int height; @@ -43,9 +43,9 @@ public final class Sprite extends Rasterizer2D { Sprite() { } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "()Llx;" + signature = "()Lln;" ) @Export("mirrorHorizontally") public Sprite mirrorHorizontally() { @@ -64,9 +64,9 @@ public final class Sprite extends Rasterizer2D { return var1; } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "()Llx;" + signature = "()Lln;" ) @Export("copyNormalized") public Sprite copyNormalized() { @@ -81,13 +81,13 @@ public final class Sprite extends Rasterizer2D { return var1; } - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("setRaster") public void setRaster() { Rasterizer2D.Rasterizer2D_replace(this.pixels, this.subWidth, this.subHeight); } - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("normalize") public void normalize() { if (this.subWidth != this.width || this.subHeight != this.height) { @@ -107,7 +107,7 @@ public final class Sprite extends Rasterizer2D { } } - @ObfuscatedName("v") + @ObfuscatedName("z") @Export("pad") public void pad(int var1) { if (this.subWidth != this.width || this.subHeight != this.height) { @@ -149,7 +149,7 @@ public final class Sprite extends Rasterizer2D { } } - @ObfuscatedName("l") + @ObfuscatedName("p") @Export("flipHorizontally") public void flipHorizontally() { int[] var1 = new int[this.subWidth * this.subHeight]; @@ -165,7 +165,7 @@ public final class Sprite extends Rasterizer2D { this.xOffset = this.width - this.subWidth - this.xOffset; } - @ObfuscatedName("c") + @ObfuscatedName("h") @Export("flipVertically") public void flipVertically() { int[] var1 = new int[this.subWidth * this.subHeight]; @@ -181,7 +181,7 @@ public final class Sprite extends Rasterizer2D { this.yOffset = this.height - this.subHeight - this.yOffset; } - @ObfuscatedName("o") + @ObfuscatedName("y") @Export("outline") public void outline(int var1) { int[] var2 = new int[this.subWidth * this.subHeight]; @@ -209,7 +209,7 @@ public final class Sprite extends Rasterizer2D { this.pixels = var2; } - @ObfuscatedName("i") + @ObfuscatedName("w") @Export("shadow") public void shadow(int var1) { for (int var2 = this.subHeight - 1; var2 > 0; --var2) { @@ -224,7 +224,7 @@ public final class Sprite extends Rasterizer2D { } - @ObfuscatedName("d") + @ObfuscatedName("i") @Export("drawAt") public void drawAt(int var1, int var2) { var1 += this.xOffset; @@ -270,7 +270,7 @@ public final class Sprite extends Rasterizer2D { } } - @ObfuscatedName("p") + @ObfuscatedName("x") @Export("drawTransBgAt") public void drawTransBgAt(int var1, int var2) { var1 += this.xOffset; @@ -316,7 +316,7 @@ public final class Sprite extends Rasterizer2D { } } - @ObfuscatedName("k") + @ObfuscatedName("e") @Export("drawScaledAt") public void drawScaledAt(int var1, int var2, int var3, int var4) { if (var3 > 0 && var4 > 0) { @@ -381,7 +381,7 @@ public final class Sprite extends Rasterizer2D { } } - @ObfuscatedName("j") + @ObfuscatedName("c") @Export("drawTransOverlayAt") public void drawTransOverlayAt(int var1, int var2, int var3, int var4) { if (var3 == 256) { @@ -431,7 +431,7 @@ public final class Sprite extends Rasterizer2D { } } - @ObfuscatedName("e") + @ObfuscatedName("t") @Export("drawTransAt") public void drawTransAt(int var1, int var2, int var3) { var1 += this.xOffset; @@ -477,7 +477,7 @@ public final class Sprite extends Rasterizer2D { } } - @ObfuscatedName("b") + @ObfuscatedName("v") @Export("drawTransScaledAt") public void drawTransScaledAt(int var1, int var2, int var3, int var4, int var5) { if (var3 > 0 && var4 > 0) { @@ -542,8 +542,8 @@ public final class Sprite extends Rasterizer2D { } } - @ObfuscatedName("u") - public void method6257(int var1, int var2, int var3) { + @ObfuscatedName("l") + public void method6217(int var1, int var2, int var3) { var1 += this.xOffset; var2 += this.yOffset; int var4 = var1 + var2 * Rasterizer2D.Rasterizer2D_width; @@ -584,16 +584,16 @@ public final class Sprite extends Rasterizer2D { if (var7 > 0 && var6 > 0) { if (var3 == 256) { - method6258(0, 0, 0, Rasterizer2D.Rasterizer2D_pixels, this.pixels, var5, 0, var4, 0, var7, var6, var8, var9); + method6218(0, 0, 0, Rasterizer2D.Rasterizer2D_pixels, this.pixels, var5, 0, var4, 0, var7, var6, var8, var9); } else { - method6259(0, 0, 0, Rasterizer2D.Rasterizer2D_pixels, this.pixels, var5, 0, var4, 0, var7, var6, var8, var9, var3); + method6225(0, 0, 0, Rasterizer2D.Rasterizer2D_pixels, this.pixels, var5, 0, var4, 0, var7, var6, var8, var9, var3); } } } - @ObfuscatedName("ak") - public void method6260(int var1, int var2, int var3, int var4, int var5) { + @ObfuscatedName("am") + public void method6220(int var1, int var2, int var3, int var4, int var5) { if (var3 > 0 && var4 > 0) { int var6 = this.subWidth; int var7 = this.subHeight; @@ -653,16 +653,16 @@ public final class Sprite extends Rasterizer2D { } if (var5 == 256) { - method6261(0, 0, 0, var8, this.pixels, Rasterizer2D.Rasterizer2D_pixels, 0, 0, -var4, var9, var14, var15, var3, var12, var13, var6); + method6221(0, 0, 0, var8, this.pixels, Rasterizer2D.Rasterizer2D_pixels, 0, 0, -var4, var9, var14, var15, var3, var12, var13, var6); } else { - method6262(0, 0, 0, var8, this.pixels, Rasterizer2D.Rasterizer2D_pixels, 0, 0, -var4, var9, var14, var15, var3, var12, var13, var6, var5); + method6222(0, 0, 0, var8, this.pixels, Rasterizer2D.Rasterizer2D_pixels, 0, 0, -var4, var9, var14, var15, var3, var12, var13, var6, var5); } } } - @ObfuscatedName("ab") - public void method6263(int var1, int var2, int var3, int var4, int var5, int var6, int[] var7, int[] var8) { + @ObfuscatedName("ao") + public void method6223(int var1, int var2, int var3, int var4, int var5, int var6, int[] var7, int[] var8) { int var9 = var2 < 0 ? -var2 : 0; int var10 = var2 + this.subHeight <= var6 ? this.subHeight : var6 - var2; int var11 = var1 < 0 ? -var1 : 0; @@ -709,7 +709,7 @@ public final class Sprite extends Rasterizer2D { } - @ObfuscatedName("ax") + @ObfuscatedName("aw") @Export("drawRotatedMaskedCenteredAround") public void drawRotatedMaskedCenteredAround(int var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, int[] var9, int[] var10) { try { @@ -744,8 +744,8 @@ public final class Sprite extends Rasterizer2D { } - @ObfuscatedName("al") - public void method6331(int var1, int var2, int var3, int var4, int var5, int var6, double var7, int var9) { + @ObfuscatedName("ak") + public void method6200(int var1, int var2, int var3, int var4, int var5, int var6, double var7, int var9) { try { int var10 = -var3 / 2; int var11 = -var4 / 2; @@ -783,13 +783,13 @@ public final class Sprite extends Rasterizer2D { } - @ObfuscatedName("ap") - public void method6266(int var1, int var2, int var3, int var4) { - this.method6267(this.width << 3, this.height << 3, var1 << 4, var2 << 4, var3, var4); + @ObfuscatedName("aa") + public void method6226(int var1, int var2, int var3, int var4) { + this.method6227(this.width << 3, this.height << 3, var1 << 4, var2 << 4, var3, var4); } - @ObfuscatedName("aj") - void method6267(int var1, int var2, int var3, int var4, int var5, int var6) { + @ObfuscatedName("ab") + void method6227(int var1, int var2, int var3, int var4, int var5, int var6) { if (var6 != 0) { var1 -= this.xOffset << 4; var2 -= this.yOffset << 4; @@ -1257,7 +1257,7 @@ public final class Sprite extends Rasterizer2D { } } - @ObfuscatedName("ae") + @ObfuscatedName("ar") @Export("drawScaledWorldmap") public void drawScaledWorldmap(int var1, int var2, int var3, int var4) { if (var3 <= this.width && var4 <= this.height) { @@ -1380,7 +1380,7 @@ public final class Sprite extends Rasterizer2D { } } - @ObfuscatedName("m") + @ObfuscatedName("k") @Export("Sprite_draw") static void Sprite_draw(int[] var0, int[] var1, int var2, int var3, int var4, int var5, int var6, int var7) { for (int var8 = -var5; var8 < 0; ++var8) { @@ -1400,7 +1400,7 @@ public final class Sprite extends Rasterizer2D { } - @ObfuscatedName("h") + @ObfuscatedName("o") @Export("Sprite_drawTransBg") static void Sprite_drawTransBg(int[] var0, int[] var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8) { int var9 = -(var5 >> 2); @@ -1453,7 +1453,7 @@ public final class Sprite extends Rasterizer2D { } - @ObfuscatedName("x") + @ObfuscatedName("n") @Export("Sprite_drawScaled") static void Sprite_drawScaled(int[] var0, int[] var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10, int var11) { int var12 = var3; @@ -1479,7 +1479,7 @@ public final class Sprite extends Rasterizer2D { } - @ObfuscatedName("r") + @ObfuscatedName("s") @Export("Sprite_drawTransOverlay") static void Sprite_drawTransOverlay(int[] var0, int[] var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10) { int var11 = 256 - var9; @@ -1505,7 +1505,7 @@ public final class Sprite extends Rasterizer2D { } - @ObfuscatedName("s") + @ObfuscatedName("m") @Export("Sprite_drawTransparent") static void Sprite_drawTransparent(int[] var0, int[] var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9) { int var10 = 256 - var9; @@ -1527,7 +1527,7 @@ public final class Sprite extends Rasterizer2D { } - @ObfuscatedName("w") + @ObfuscatedName("q") @Export("Sprite_drawTransScaled") static void Sprite_drawTransScaled(int[] var0, int[] var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10, int var11, int var12) { int var13 = 256 - var12; @@ -1555,8 +1555,8 @@ public final class Sprite extends Rasterizer2D { } - @ObfuscatedName("ad") - static void method6258(int var0, int var1, int var2, int[] var3, int[] var4, int var5, int var6, int var7, int var8, int var9, int var10, int var11, int var12) { + @ObfuscatedName("j") + static void method6218(int var0, int var1, int var2, int[] var3, int[] var4, int var5, int var6, int var7, int var8, int var9, int var10, int var11, int var12) { for (var8 = -var10; var8 < 0; ++var8) { for (var6 = -var9; var6 < 0; ++var6) { var0 = var4[var5++]; @@ -1577,8 +1577,8 @@ public final class Sprite extends Rasterizer2D { } - @ObfuscatedName("ag") - static void method6259(int var0, int var1, int var2, int[] var3, int[] var4, int var5, int var6, int var7, int var8, int var9, int var10, int var11, int var12, int var13) { + @ObfuscatedName("ad") + static void method6225(int var0, int var1, int var2, int[] var3, int[] var4, int var5, int var6, int var7, int var8, int var9, int var10, int var11, int var12, int var13) { for (var8 = -var10; var8 < 0; ++var8) { for (var6 = -var9; var6 < 0; ++var6) { var0 = var4[var5++]; @@ -1601,8 +1601,8 @@ public final class Sprite extends Rasterizer2D { } - @ObfuscatedName("av") - static void method6261(int var0, int var1, int var2, int var3, int[] var4, int[] var5, int var6, int var7, int var8, int var9, int var10, int var11, int var12, int var13, int var14, int var15) { + @ObfuscatedName("ai") + static void method6221(int var0, int var1, int var2, int var3, int[] var4, int[] var5, int var6, int var7, int var8, int var9, int var10, int var11, int var12, int var13, int var14, int var15) { for (int var16 = var3; var8 < 0; ++var8) { var7 = var15 * (var9 >> 16); @@ -1628,8 +1628,8 @@ public final class Sprite extends Rasterizer2D { } - @ObfuscatedName("am") - static void method6262(int var0, int var1, int var2, int var3, int[] var4, int[] var5, int var6, int var7, int var8, int var9, int var10, int var11, int var12, int var13, int var14, int var15, int var16) { + @ObfuscatedName("ag") + static void method6222(int var0, int var1, int var2, int var3, int[] var4, int[] var5, int var6, int var7, int var8, int var9, int var10, int var11, int var12, int var13, int var14, int var15, int var16) { for (int var17 = var3; var8 < 0; ++var8) { var7 = var15 * (var9 >> 16); diff --git a/runescape-client/src/main/java/SpriteMask.java b/runescape-client/src/main/java/SpriteMask.java index 84602a3ea3..76a00564d7 100644 --- a/runescape-client/src/main/java/SpriteMask.java +++ b/runescape-client/src/main/java/SpriteMask.java @@ -1,3 +1,8 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.PrintWriter; +import java.io.StringReader; +import java.io.StringWriter; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; @@ -7,33 +12,34 @@ import net.runelite.mapping.ObfuscatedSignature; @ObfuscatedName("hn") @Implements("SpriteMask") public class SpriteMask extends DualNode { - @ObfuscatedName("dj") + @ObfuscatedName("dz") @ObfuscatedSignature( signature = "Lij;" ) - @Export("archive3") - static Archive archive3; - @ObfuscatedName("gy") - @ObfuscatedGetter( - intValue = 1141179073 + @Export("archive4") + static Archive archive4; + @ObfuscatedName("fs") + @ObfuscatedSignature( + signature = "Lew;" ) - static int field2501; - @ObfuscatedName("a") + @Export("urlRequester") + static UrlRequester urlRequester; + @ObfuscatedName("u") @ObfuscatedGetter( - intValue = 2130033561 + intValue = 913794949 ) @Export("width") public final int width; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = 395939847 + intValue = -396623099 ) @Export("height") public final int height; - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("xWidths") public final int[] xWidths; - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("xStarts") public final int[] xStarts; @@ -44,10 +50,10 @@ public class SpriteMask extends DualNode { this.xStarts = var4; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "(III)Z", - garbageValue = "-337520284" + garbageValue = "-253214096" ) @Export("contains") public boolean contains(int var1, int var2) { @@ -60,4 +66,159 @@ public class SpriteMask extends DualNode { return false; } + + @ObfuscatedName("f") + public static String method4038(long var0) { + if (var0 > 0L && var0 < 6582952005840035281L) { + if (0L == var0 % 37L) { + return null; + } else { + int var2 = 0; + + for (long var3 = var0; var3 != 0L; var3 /= 37L) { + ++var2; + } + + StringBuilder var5 = new StringBuilder(var2); + + while (0L != var0) { + long var6 = var0; + var0 /= 37L; + var5.append(class288.base37Table[(int)(var6 - 37L * var0)]); + } + + return var5.reverse().toString(); + } + } else { + return null; + } + } + + @ObfuscatedName("f") + @ObfuscatedSignature( + signature = "(B)V", + garbageValue = "87" + ) + public static void method4040() { + if (MouseHandler.MouseHandler_instance != null) { + synchronized(MouseHandler.MouseHandler_instance) { + MouseHandler.MouseHandler_instance = null; + } + } + + } + + @ObfuscatedName("b") + @ObfuscatedSignature( + signature = "(Ljava/lang/Throwable;I)Ljava/lang/String;", + garbageValue = "467734351" + ) + static String method4035(Throwable var0) throws IOException { + String var1; + if (var0 instanceof RunException) { + RunException var2 = (RunException)var0; + var1 = var2.message + " | "; + var0 = var2.throwable; + } else { + var1 = ""; + } + + StringWriter var12 = new StringWriter(); + PrintWriter var3 = new PrintWriter(var12); + var0.printStackTrace(var3); + var3.close(); + String var4 = var12.toString(); + BufferedReader var5 = new BufferedReader(new StringReader(var4)); + String var6 = var5.readLine(); + + while (true) { + while (true) { + String var7 = var5.readLine(); + if (var7 == null) { + var1 = var1 + "| " + var6; + return var1; + } + + int var8 = var7.indexOf(40); + int var9 = var7.indexOf(41, var8 + 1); + if (var8 >= 0 && var9 >= 0) { + String var10 = var7.substring(var8 + 1, var9); + int var11 = var10.indexOf(".java:"); + if (var11 >= 0) { + var10 = var10.substring(0, var11) + var10.substring(var11 + 5); + var1 = var1 + var10 + ' '; + continue; + } + + var7 = var7.substring(0, var8); + } + + var7 = var7.trim(); + var7 = var7.substring(var7.lastIndexOf(32) + 1); + var7 = var7.substring(var7.lastIndexOf(9) + 1); + var1 = var1 + var7 + ' '; + } + } + } + + @ObfuscatedName("b") + @ObfuscatedSignature( + signature = "(Ljava/lang/CharSequence;IZB)Z", + garbageValue = "25" + ) + static boolean method4039(CharSequence var0, int var1, boolean var2) { + if (var1 >= 2 && var1 <= 36) { + boolean var3 = false; + boolean var4 = false; + int var5 = 0; + int var6 = var0.length(); + + for (int var7 = 0; var7 < var6; ++var7) { + char var8 = var0.charAt(var7); + if (var7 == 0) { + if (var8 == '-') { + var3 = true; + continue; + } + + if (var8 == '+') { + continue; + } + } + + int var10; + if (var8 >= '0' && var8 <= '9') { + var10 = var8 - '0'; + } else if (var8 >= 'A' && var8 <= 'Z') { + var10 = var8 - '7'; + } else { + if (var8 < 'a' || var8 > 'z') { + return false; + } + + var10 = var8 - 'W'; + } + + if (var10 >= var1) { + return false; + } + + if (var3) { + var10 = -var10; + } + + int var9 = var5 * var1 + var10; + if (var9 / var1 != var5) { + return false; + } + + var5 = var9; + var4 = true; + } + + return var4; + } else { + throw new IllegalArgumentException("" + var1); + } + } } diff --git a/runescape-client/src/main/java/Strings.java b/runescape-client/src/main/java/Strings.java index 5cfb0f0920..7e780f5c10 100644 --- a/runescape-client/src/main/java/Strings.java +++ b/runescape-client/src/main/java/Strings.java @@ -1,25 +1,25 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; -@ObfuscatedName("hm") +@ObfuscatedName("hy") @Implements("Strings") public class Strings { - @ObfuscatedName("bd") - public static String field2797; - @ObfuscatedName("cb") - public static String field3006; - @ObfuscatedName("jw") - public static String field2894; - @ObfuscatedName("jt") - public static String field3013; - @ObfuscatedName("jn") - public static String field3014; + @ObfuscatedName("bu") + public static String field2823; + @ObfuscatedName("cs") + public static String field2862; + @ObfuscatedName("jo") + public static String field2912; + @ObfuscatedName("jl") + public static String field3039; + @ObfuscatedName("js") + public static String field2786; static { - field2797 = "Please visit the support page for assistance."; - field3006 = "Please visit the support page for assistance."; - field2894 = ""; - field3013 = "Page has opened in a new window."; - field3014 = "(Please check your popup blocker.)"; + field2823 = "Please visit the support page for assistance."; + field2862 = "Please visit the support page for assistance."; + field2912 = ""; + field3039 = "Page has opened in a new window."; + field2786 = "(Please check your popup blocker.)"; } } diff --git a/runescape-client/src/main/java/StructDefinition.java b/runescape-client/src/main/java/StructDefinition.java index bf2027f49d..0dec27d980 100644 --- a/runescape-client/src/main/java/StructDefinition.java +++ b/runescape-client/src/main/java/StructDefinition.java @@ -6,27 +6,32 @@ import net.runelite.mapping.ObfuscatedSignature; @ObfuscatedName("id") @Implements("StructDefinition") public class StructDefinition extends DualNode { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lhq;" + signature = "Lhf;" ) @Export("StructDefinition_archive") - public static AbstractArchive StructDefinition_archive; - @ObfuscatedName("t") + static AbstractArchive StructDefinition_archive; + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Leb;" + signature = "Lef;" ) @Export("StructDefinition_cached") - public static EvictingDualNodeHashTable StructDefinition_cached; - @ObfuscatedName("d") + static EvictingDualNodeHashTable StructDefinition_cached; + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Lhq;" + signature = "[Llm;" ) - @Export("Widget_modelsArchive") - static AbstractArchive Widget_modelsArchive; - @ObfuscatedName("n") + @Export("runesSprite") + static IndexedSprite[] runesSprite; + @ObfuscatedName("e") @ObfuscatedSignature( - signature = "Llr;" + signature = "Llm;" + ) + static IndexedSprite field3315; + @ObfuscatedName("b") + @ObfuscatedSignature( + signature = "Llb;" ) @Export("params") IterableNodeHashTable params; @@ -38,19 +43,19 @@ public class StructDefinition extends DualNode { StructDefinition() { } - @ObfuscatedName("t") + @ObfuscatedName("b") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "1931013228" + garbageValue = "592046740" ) @Export("postDecode") void postDecode() { } - @ObfuscatedName("n") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(Lkc;I)V", - garbageValue = "-2132322358" + signature = "(Lkg;I)V", + garbageValue = "-303940438" ) @Export("decode") void decode(Buffer var1) { @@ -64,49 +69,49 @@ public class StructDefinition extends DualNode { } } - @ObfuscatedName("q") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(Lkc;II)V", - garbageValue = "2038227165" + signature = "(Lkg;II)V", + garbageValue = "1709382073" ) @Export("decodeNext") void decodeNext(Buffer var1, int var2) { if (var2 == 249) { - this.params = UserComparator10.readStringIntParameters(var1, this.params); + this.params = ModelData0.readStringIntParameters(var1, this.params); } } - @ObfuscatedName("v") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(III)I", - garbageValue = "65535" + signature = "(IIB)I", + garbageValue = "48" ) @Export("getIntParam") public int getIntParam(int var1, int var2) { - return FriendsList.method5306(this.params, var1, var2); - } - - @ObfuscatedName("l") - @ObfuscatedSignature( - signature = "(ILjava/lang/String;I)Ljava/lang/String;", - garbageValue = "1822507613" - ) - @Export("getStringParam") - public String getStringParam(int var1, String var2) { IterableNodeHashTable var4 = this.params; - String var3; + int var3; if (var4 == null) { var3 = var2; } else { - ObjectNode var5 = (ObjectNode)var4.get((long)var1); + IntegerNode var5 = (IntegerNode)var4.get((long)var1); if (var5 == null) { var3 = var2; } else { - var3 = (String)var5.obj; + var3 = var5.integer; } } return var3; } + + @ObfuscatedName("h") + @ObfuscatedSignature( + signature = "(ILjava/lang/String;I)Ljava/lang/String;", + garbageValue = "1804535212" + ) + @Export("getStringParam") + public String getStringParam(int var1, String var2) { + return ServerBuild.method4214(this.params, var1, var2); + } } diff --git a/runescape-client/src/main/java/StudioGame.java b/runescape-client/src/main/java/StudioGame.java index a4fed2ce99..740f9cdbe9 100644 --- a/runescape-client/src/main/java/StudioGame.java +++ b/runescape-client/src/main/java/StudioGame.java @@ -4,64 +4,52 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("hp") +@ObfuscatedName("he") @Implements("StudioGame") public enum StudioGame implements Enumerated { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lhp;" + signature = "Lhe;" ) @Export("runescape") runescape("runescape", "RuneScape", 0), - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lhp;" + signature = "Lhe;" ) @Export("stellardawn") stellardawn("stellardawn", "Stellar Dawn", 1), - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Lhp;" + signature = "Lhe;" ) @Export("game3") game3("game3", "Game 3", 2), - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Lhp;" + signature = "Lhe;" ) @Export("game4") game4("game4", "Game 4", 3), - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "Lhp;" + signature = "Lhe;" ) @Export("game5") game5("game5", "Game 5", 4), - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "Lhp;" + signature = "Lhe;" ) @Export("oldscape") oldscape("oldscape", "RuneScape 2007", 5); - @ObfuscatedName("bq") - @ObfuscatedSignature( - signature = "[Llw;" - ) - @Export("worldSelectArrows") - static IndexedSprite[] worldSelectArrows; - @ObfuscatedName("lf") - @ObfuscatedSignature( - signature = "Lcd;" - ) - @Export("tempMenuAction") - static MenuAction tempMenuAction; - @ObfuscatedName("c") + @ObfuscatedName("h") @Export("name") public final String name; - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedGetter( - intValue = 1841699431 + intValue = 366525809 ) @Export("id") final int id; @@ -71,13 +59,243 @@ public enum StudioGame implements Enumerated { this.id = var5; } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(I)I", - garbageValue = "-1993081102" + signature = "(B)I", + garbageValue = "7" ) @Export("rsOrdinal") public int rsOrdinal() { return this.id; } + + @ObfuscatedName("u") + @ObfuscatedSignature( + signature = "(Ljava/lang/CharSequence;Llg;I)Ljava/lang/String;", + garbageValue = "-1208620842" + ) + public static String method4228(CharSequence var0, LoginType var1) { + if (var0 == null) { + return null; + } else { + int var2 = 0; + + int var3; + boolean var4; + char var5; + for (var3 = var0.length(); var2 < var3; ++var2) { + var5 = var0.charAt(var2); + var4 = var5 == 160 || var5 == ' ' || var5 == '_' || var5 == '-'; + if (!var4) { + break; + } + } + + while (var3 > var2) { + var5 = var0.charAt(var3 - 1); + var4 = var5 == 160 || var5 == ' ' || var5 == '_' || var5 == '-'; + if (!var4) { + break; + } + + --var3; + } + + int var14 = var3 - var2; + if (var14 >= 1) { + byte var6; + if (var1 == null) { + var6 = 12; + } else { + switch(var1.field4032) { + case 6: + var6 = 20; + break; + default: + var6 = 12; + } + } + + if (var14 <= var6) { + StringBuilder var12 = new StringBuilder(var14); + + for (int var15 = var2; var15 < var3; ++var15) { + char var7 = var0.charAt(var15); + boolean var8; + if (Character.isISOControl(var7)) { + var8 = false; + } else if (Varcs.isAlphaNumeric(var7)) { + var8 = true; + } else { + char[] var13 = class338.field4034; + int var10 = 0; + + label117: + while (true) { + char var11; + if (var10 >= var13.length) { + var13 = class338.field4037; + + for (var10 = 0; var10 < var13.length; ++var10) { + var11 = var13[var10]; + if (var11 == var7) { + var8 = true; + break label117; + } + } + + var8 = false; + break; + } + + var11 = var13[var10]; + if (var7 == var11) { + var8 = true; + break; + } + + ++var10; + } + } + + if (var8) { + char var9; + switch(var7) { + case ' ': + case '-': + case '_': + case ' ': + var9 = '_'; + break; + case '#': + case '[': + case ']': + var9 = var7; + break; + case 'À': + case 'Á': + case 'Â': + case 'Ã': + case 'Ä': + case 'à': + case 'á': + case 'â': + case 'ã': + case 'ä': + var9 = 'a'; + break; + case 'Ç': + case 'ç': + var9 = 'c'; + break; + case 'È': + case 'É': + case 'Ê': + case 'Ë': + case 'è': + case 'é': + case 'ê': + case 'ë': + var9 = 'e'; + break; + case 'Í': + case 'Î': + case 'Ï': + case 'í': + case 'î': + case 'ï': + var9 = 'i'; + break; + case 'Ñ': + case 'ñ': + var9 = 'n'; + break; + case 'Ò': + case 'Ó': + case 'Ô': + case 'Õ': + case 'Ö': + case 'ò': + case 'ó': + case 'ô': + case 'õ': + case 'ö': + var9 = 'o'; + break; + case 'Ù': + case 'Ú': + case 'Û': + case 'Ü': + case 'ù': + case 'ú': + case 'û': + case 'ü': + var9 = 'u'; + break; + case 'ß': + var9 = 'b'; + break; + case 'ÿ': + case 'Ÿ': + var9 = 'y'; + break; + default: + var9 = Character.toLowerCase(var7); + } + + if (var9 != 0) { + var12.append(var9); + } + } + } + + if (var12.length() == 0) { + return null; + } + + return var12.toString(); + } + } + + return null; + } + } + + @ObfuscatedName("u") + @ObfuscatedSignature( + signature = "(I)Lgx;", + garbageValue = "233010468" + ) + static PacketBufferNode method4225() { + return PacketBufferNode.PacketBufferNode_packetBufferNodeCount == 0 ? new PacketBufferNode() : PacketBufferNode.PacketBufferNode_packetBufferNodes[--PacketBufferNode.PacketBufferNode_packetBufferNodeCount]; + } + + @ObfuscatedName("u") + @ObfuscatedSignature( + signature = "([BB)Ljava/lang/String;", + garbageValue = "117" + ) + public static String method4220(byte[] var0) { + return class195.method3739(var0, 0, var0.length); + } + + @ObfuscatedName("b") + @ObfuscatedSignature( + signature = "(CLgc;I)I", + garbageValue = "-85765138" + ) + @Export("lowercaseChar") + static int lowercaseChar(char var0, Language var1) { + int var2 = var0 << 4; + if (Character.isUpperCase(var0) || Character.isTitleCase(var0)) { + var0 = Character.toLowerCase(var0); + var2 = (var0 << 4) + 1; + } + + if (var0 == 241 && var1 == Language.Language_ES) { + var2 = 1762; + } + + return var2; + } } diff --git a/runescape-client/src/main/java/Task.java b/runescape-client/src/main/java/Task.java index 099c42fd2f..98f53cf1c1 100644 --- a/runescape-client/src/main/java/Task.java +++ b/runescape-client/src/main/java/Task.java @@ -4,31 +4,31 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("fw") +@ObfuscatedName("fo") @Implements("Task") public class Task { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lfw;" + signature = "Lfo;" ) @Export("next") Task next; - @ObfuscatedName("v") + @ObfuscatedName("z") @Export("status") public volatile int status; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = 1457841363 + intValue = 400750529 ) @Export("type") int type; - @ObfuscatedName("c") + @ObfuscatedName("h") @Export("intArgument") public int intArgument; - @ObfuscatedName("o") + @ObfuscatedName("y") @Export("objectArgument") Object objectArgument; - @ObfuscatedName("i") + @ObfuscatedName("w") @Export("result") public volatile Object result; diff --git a/runescape-client/src/main/java/TaskHandler.java b/runescape-client/src/main/java/TaskHandler.java index 84b26b5f99..b663bfb37a 100644 --- a/runescape-client/src/main/java/TaskHandler.java +++ b/runescape-client/src/main/java/TaskHandler.java @@ -6,33 +6,32 @@ import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("ff") +@ObfuscatedName("fu") @Implements("TaskHandler") public class TaskHandler implements Runnable { - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("javaVendor") public static String javaVendor; - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("javaVersion") public static String javaVersion; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Lfw;" + signature = "Lfo;" ) @Export("current") Task current; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Lfw;" + signature = "Lfo;" ) @Export("task") Task task; - @ObfuscatedName("v") + @ObfuscatedName("z") @Export("thread") Thread thread; - @ObfuscatedName("l") + @ObfuscatedName("p") @Export("isClosed") boolean isClosed; @@ -56,10 +55,10 @@ public class TaskHandler implements Runnable { this.thread.start(); } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "6934376" + garbageValue = "1951824555" ) @Export("close") public final void close() { @@ -75,10 +74,10 @@ public class TaskHandler implements Runnable { } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(IIILjava/lang/Object;I)Lfw;", - garbageValue = "635480058" + signature = "(IIILjava/lang/Object;B)Lfo;", + garbageValue = "1" ) @Export("newTask") final Task newTask(int var1, int var2, int var3, Object var4) { @@ -99,20 +98,20 @@ public class TaskHandler implements Runnable { } } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Ljava/lang/String;II)Lfw;", - garbageValue = "540532004" + signature = "(Ljava/lang/String;II)Lfo;", + garbageValue = "456195098" ) @Export("newSocketTask") public final Task newSocketTask(String var1, int var2) { return this.newTask(1, var2, 0, var1); } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(Ljava/lang/Runnable;II)Lfw;", - garbageValue = "129890916" + signature = "(Ljava/lang/Runnable;II)Lfo;", + garbageValue = "1003656831" ) @Export("newThreadTask") public final Task newThreadTask(Runnable var1, int var2) { @@ -167,183 +166,19 @@ public class TaskHandler implements Runnable { } } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Lhq;Lhq;Lhq;B)V", - garbageValue = "48" + signature = "(I)J", + garbageValue = "-1924215879" ) - public static void method3622(AbstractArchive var0, AbstractArchive var1, AbstractArchive var2) { - HitSplatDefinition.HitSplatDefinition_archive = var0; - HitSplatDefinition.field3316 = var1; - class2.HitSplatDefinition_fontsArchive = var2; - } - - @ObfuscatedName("c") - @ObfuscatedSignature( - signature = "(ILcj;ZI)I", - garbageValue = "-1691185784" - ) - static int method3605(int var0, Script var1, boolean var2) { - Widget var3; - if (var0 >= 2000) { - var0 -= 1000; - var3 = PacketBufferNode.getWidget(Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]); - } else { - var3 = var2 ? class96.field1301 : ReflectionCheck.field1310; + @Export("currentTimeMillis") + public static final synchronized long currentTimeMillis() { + long var0 = System.currentTimeMillis(); + if (var0 < class296.field3695) { + class296.field3696 += class296.field3695 - var0; } - GrandExchangeOfferAgeComparator.invalidateWidget(var3); - if (var0 != ScriptOpcodes.CC_SETOBJECT && var0 != ScriptOpcodes.CC_SETOBJECT_NONUM && var0 != ScriptOpcodes.CC_SETOBJECT_ALWAYS_NUM) { - if (var0 == ScriptOpcodes.CC_SETNPCHEAD) { - var3.modelType = 2; - var3.modelId = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - return 1; - } else if (var0 == ScriptOpcodes.CC_SETPLAYERHEAD_SELF) { - var3.modelType = 3; - var3.modelId = class215.localPlayer.appearance.getChatHeadId(); - return 1; - } else { - return 2; - } - } else { - Interpreter.Interpreter_intStackSize -= 2; - int var4 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - int var5 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - var3.itemId = var4; - var3.itemQuantity = var5; - ItemDefinition var6 = class222.ItemDefinition_get(var4); - var3.modelAngleX = var6.xan2d; - var3.modelAngleY = var6.yan2d; - var3.modelAngleZ = var6.zan2d; - var3.modelOffsetX = var6.offsetX2d; - var3.modelOffsetY = var6.offsetY2d; - var3.modelZoom = var6.zoom2d; - if (var0 == ScriptOpcodes.CC_SETOBJECT_NONUM) { - var3.itemQuantityMode = 0; - } else if (var0 == ScriptOpcodes.CC_SETOBJECT_ALWAYS_NUM | var6.isStackable == 1) { - var3.itemQuantityMode = 1; - } else { - var3.itemQuantityMode = 2; - } - - if (var3.field2577 > 0) { - var3.modelZoom = var3.modelZoom * 32 / var3.field2577; - } else if (var3.rawWidth > 0) { - var3.modelZoom = var3.modelZoom * 32 / var3.rawWidth; - } - - return 1; - } - } - - @ObfuscatedName("iv") - @ObfuscatedSignature( - signature = "(Lit;IIII)V", - garbageValue = "890434158" - ) - @Export("addNpcToMenu") - static final void addNpcToMenu(NPCDefinition var0, int var1, int var2, int var3) { - if (Client.menuOptionsCount < 400) { - if (var0.transforms != null) { - var0 = var0.transform(); - } - - if (var0 != null) { - if (var0.isInteractable) { - if (!var0.isFollower || Client.followerIndex == var1) { - String var4 = var0.name; - if (var0.combatLevel != 0) { - var4 = var4 + GrandExchangeOffer.method159(var0.combatLevel, class215.localPlayer.combatLevel) + " " + " (" + "level-" + var0.combatLevel + ")"; - } - - if (var0.isFollower && Client.followerOpsLowPriority) { - GameObject.insertMenuItemNoShift("Examine", AbstractArchive.colorStartTag(16776960) + var4, 1003, var1, var2, var3); - } - - if (Client.isItemSelected == 1) { - GameObject.insertMenuItemNoShift("Use", Client.selectedItemName + " " + "->" + " " + AbstractArchive.colorStartTag(16776960) + var4, 7, var1, var2, var3); - } else if (Client.isSpellSelected) { - if ((class81.selectedSpellFlags & 2) == 2) { - GameObject.insertMenuItemNoShift(Client.selectedSpellActionName, Client.selectedSpellName + " " + "->" + " " + AbstractArchive.colorStartTag(16776960) + var4, 8, var1, var2, var3); - } - } else { - int var5 = var0.isFollower && Client.followerOpsLowPriority ? 2000 : 0; - String[] var6 = var0.actions; - int var7; - int var8; - if (var6 != null) { - for (var7 = 4; var7 >= 0; --var7) { - if (var6[var7] != null && !var6[var7].equalsIgnoreCase("Attack")) { - var8 = 0; - if (var7 == 0) { - var8 = var5 + 9; - } - - if (var7 == 1) { - var8 = var5 + 10; - } - - if (var7 == 2) { - var8 = var5 + 11; - } - - if (var7 == 3) { - var8 = var5 + 12; - } - - if (var7 == 4) { - var8 = var5 + 13; - } - - GameObject.insertMenuItemNoShift(var6[var7], AbstractArchive.colorStartTag(16776960) + var4, var8, var1, var2, var3); - } - } - } - - if (var6 != null) { - for (var7 = 4; var7 >= 0; --var7) { - if (var6[var7] != null && var6[var7].equalsIgnoreCase("Attack")) { - short var9 = 0; - if (AttackOption.AttackOption_hidden != Client.npcAttackOption) { - if (AttackOption.AttackOption_alwaysRightClick == Client.npcAttackOption || Client.npcAttackOption == AttackOption.AttackOption_dependsOnCombatLevels && var0.combatLevel > class215.localPlayer.combatLevel) { - var9 = 2000; - } - - var8 = 0; - if (var7 == 0) { - var8 = var9 + 9; - } - - if (var7 == 1) { - var8 = var9 + 10; - } - - if (var7 == 2) { - var8 = var9 + 11; - } - - if (var7 == 3) { - var8 = var9 + 12; - } - - if (var7 == 4) { - var8 = var9 + 13; - } - - GameObject.insertMenuItemNoShift(var6[var7], AbstractArchive.colorStartTag(16776960) + var4, var8, var1, var2, var3); - } - } - } - } - - if (!var0.isFollower || !Client.followerOpsLowPriority) { - GameObject.insertMenuItemNoShift("Examine", AbstractArchive.colorStartTag(16776960) + var4, 1003, var1, var2, var3); - } - } - - } - } - } - } + class296.field3695 = var0; + return class296.field3696 + var0; } } diff --git a/runescape-client/src/main/java/Texture.java b/runescape-client/src/main/java/Texture.java index 57efe2908e..e781f821d7 100644 --- a/runescape-client/src/main/java/Texture.java +++ b/runescape-client/src/main/java/Texture.java @@ -3,46 +3,46 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("dt") +@ObfuscatedName("dv") @Implements("Texture") public class Texture extends Node { - @ObfuscatedName("x") + @ObfuscatedName("n") @Export("Texture_animatedPixels") static int[] Texture_animatedPixels; - @ObfuscatedName("v") + @ObfuscatedName("z") @Export("averageRGB") int averageRGB; - @ObfuscatedName("l") - boolean field1593; - @ObfuscatedName("c") + @ObfuscatedName("p") + boolean field1615; + @ObfuscatedName("h") @Export("fileIds") int[] fileIds; - @ObfuscatedName("o") - int[] field1598; + @ObfuscatedName("y") + int[] field1621; + @ObfuscatedName("w") + int[] field1618; @ObfuscatedName("i") - int[] field1601; - @ObfuscatedName("d") - int[] field1602; - @ObfuscatedName("m") + int[] field1619; + @ObfuscatedName("k") @Export("animationDirection") int animationDirection; - @ObfuscatedName("p") + @ObfuscatedName("x") @Export("animationSpeed") int animationSpeed; - @ObfuscatedName("h") + @ObfuscatedName("o") @Export("pixels") int[] pixels; - @ObfuscatedName("k") + @ObfuscatedName("e") @Export("isLoaded") boolean isLoaded; @ObfuscatedSignature( - signature = "(Lkc;)V" + signature = "(Lkg;)V" ) Texture(Buffer var1) { this.isLoaded = false; this.averageRGB = var1.readUnsignedShort(); - this.field1593 = var1.readUnsignedByte() == 1; + this.field1615 = var1.readUnsignedByte() == 1; int var2 = var1.readUnsignedByte(); if (var2 >= 1 && var2 <= 4) { this.fileIds = new int[var2]; @@ -53,25 +53,25 @@ public class Texture extends Node { } if (var2 > 1) { - this.field1598 = new int[var2 - 1]; + this.field1621 = new int[var2 - 1]; for (var3 = 0; var3 < var2 - 1; ++var3) { - this.field1598[var3] = var1.readUnsignedByte(); + this.field1621[var3] = var1.readUnsignedByte(); } } if (var2 > 1) { - this.field1601 = new int[var2 - 1]; + this.field1618 = new int[var2 - 1]; for (var3 = 0; var3 < var2 - 1; ++var3) { - this.field1601[var3] = var1.readUnsignedByte(); + this.field1618[var3] = var1.readUnsignedByte(); } } - this.field1602 = new int[var2]; + this.field1619 = new int[var2]; for (var3 = 0; var3 < var2; ++var3) { - this.field1602[var3] = var1.readInt(); + this.field1619[var3] = var1.readInt(); } this.animationDirection = var1.readUnsignedByte(); @@ -82,9 +82,9 @@ public class Texture extends Node { } } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(DILhq;)Z" + signature = "(DILhf;)Z" ) @Export("load") boolean load(double var1, int var3, AbstractArchive var4) { @@ -99,11 +99,11 @@ public class Texture extends Node { this.pixels = new int[var5]; for (int var6 = 0; var6 < this.fileIds.length; ++var6) { - IndexedSprite var7 = VertexNormal.method3121(var4, this.fileIds[var6]); + IndexedSprite var7 = class185.method3669(var4, this.fileIds[var6]); var7.normalize(); byte[] var8 = var7.pixels; int[] var9 = var7.palette; - int var10 = this.field1602[var6]; + int var10 = this.field1619[var6]; if ((var10 & -16777216) == 16777216) { } @@ -134,7 +134,7 @@ public class Texture extends Node { if (var6 == 0) { var11 = 0; } else { - var11 = this.field1598[var6 - 1]; + var11 = this.field1621[var6 - 1]; } if (var11 == 0) { @@ -178,13 +178,13 @@ public class Texture extends Node { return true; } - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("reset") void reset() { this.pixels = null; } - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("animate") void animate(int var1) { if (this.pixels != null) { diff --git a/runescape-client/src/main/java/TextureLoader.java b/runescape-client/src/main/java/TextureLoader.java index fe74728717..54944405d2 100644 --- a/runescape-client/src/main/java/TextureLoader.java +++ b/runescape-client/src/main/java/TextureLoader.java @@ -3,36 +3,36 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ew") +@ObfuscatedName("ek") @Implements("TextureLoader") public interface TextureLoader { - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(II)[I", - garbageValue = "-1956127937" + signature = "(IB)[I", + garbageValue = "-64" ) @Export("getTexturePixels") int[] getTexturePixels(int var1); - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(IB)I", - garbageValue = "-57" + signature = "(II)I", + garbageValue = "298398688" ) @Export("getAverageTextureRGB") int getAverageTextureRGB(int var1); - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( signature = "(II)Z", - garbageValue = "1875777180" + garbageValue = "561655524" ) - boolean vmethod3403(int var1); + boolean vmethod3330(int var1); - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( signature = "(II)Z", - garbageValue = "-1105399782" + garbageValue = "-959544558" ) @Export("isLowDetail") boolean isLowDetail(int var1); diff --git a/runescape-client/src/main/java/TextureProvider.java b/runescape-client/src/main/java/TextureProvider.java index 604fce5ff9..e877cab509 100644 --- a/runescape-client/src/main/java/TextureProvider.java +++ b/runescape-client/src/main/java/TextureProvider.java @@ -4,63 +4,54 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("dp") +@ObfuscatedName("db") @Implements("TextureProvider") public class TextureProvider implements TextureLoader { - @ObfuscatedName("gl") + @ObfuscatedName("an") + @Export("hasFocus") + protected static boolean hasFocus; + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "[Llx;" - ) - @Export("crossSprites") - static Sprite[] crossSprites; - @ObfuscatedName("kt") - @ObfuscatedGetter( - intValue = 831989681 - ) - @Export("menuY") - static int menuY; - @ObfuscatedName("a") - @ObfuscatedSignature( - signature = "[Ldt;" + signature = "[Ldv;" ) @Export("textures") Texture[] textures; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Ljb;" + signature = "Ljd;" ) @Export("deque") NodeDeque deque; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = -1515025837 + intValue = 913401883 ) @Export("capacity") int capacity; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = -684430177 + intValue = -793022159 ) @Export("remaining") int remaining; - @ObfuscatedName("v") + @ObfuscatedName("z") @Export("brightness") double brightness; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = -113629701 + intValue = 1514204273 ) @Export("textureSize") int textureSize; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "Lhq;" + signature = "Lhf;" ) @Export("archive") AbstractArchive archive; @ObfuscatedSignature( - signature = "(Lhq;Lhq;IDI)V" + signature = "(Lhf;Lhf;IDI)V" ) public TextureProvider(AbstractArchive var1, AbstractArchive var2, int var3, double var4, int var6) { this.deque = new NodeDeque(); @@ -83,10 +74,10 @@ public class TextureProvider implements TextureLoader { } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "(I)I", - garbageValue = "-723881921" + garbageValue = "-1516350248" ) @Export("getLoadedPercentage") public int getLoadedPercentage() { @@ -102,7 +93,7 @@ public class TextureProvider implements TextureLoader { for (int var7 = 0; var7 < var6.length; ++var7) { int var8 = var6[var7]; - if (this.archive.method4327(var8)) { + if (this.archive.method4237(var8)) { ++var2; } } @@ -116,17 +107,17 @@ public class TextureProvider implements TextureLoader { } } - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("setBrightness") public void setBrightness(double var1) { this.brightness = var1; this.clear(); } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(II)[I", - garbageValue = "-1956127937" + signature = "(IB)[I", + garbageValue = "-64" ) @Export("getTexturePixels") public int[] getTexturePixels(int var1) { @@ -156,39 +147,39 @@ public class TextureProvider implements TextureLoader { return null; } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(IB)I", - garbageValue = "-57" + signature = "(II)I", + garbageValue = "298398688" ) @Export("getAverageTextureRGB") public int getAverageTextureRGB(int var1) { return this.textures[var1] != null ? this.textures[var1].averageRGB : 0; } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( signature = "(II)Z", - garbageValue = "1875777180" + garbageValue = "561655524" ) - public boolean vmethod3403(int var1) { - return this.textures[var1].field1593; + public boolean vmethod3330(int var1) { + return this.textures[var1].field1615; } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( signature = "(II)Z", - garbageValue = "-1105399782" + garbageValue = "-959544558" ) @Export("isLowDetail") public boolean isLowDetail(int var1) { return this.textureSize == 64; } - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "-519543522" + garbageValue = "1449865056" ) @Export("clear") public void clear() { @@ -202,10 +193,10 @@ public class TextureProvider implements TextureLoader { this.remaining = this.capacity; } - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedSignature( signature = "(II)V", - garbageValue = "456735268" + garbageValue = "248051597" ) @Export("animate") public void animate(int var1) { @@ -219,77 +210,83 @@ public class TextureProvider implements TextureLoader { } - @ObfuscatedName("n") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(II)Z", - garbageValue = "1911421748" + signature = "(II)Lit;", + garbageValue = "1399456300" ) - public static boolean method2931(int var0) { - return (var0 >> 20 & 1) != 0; + @Export("getInvDefinition") + public static InvDefinition getInvDefinition(int var0) { + InvDefinition var1 = (InvDefinition)InvDefinition.InvDefinition_cached.get((long)var0); + if (var1 != null) { + return var1; + } else { + byte[] var2 = InvDefinition.InvDefinition_archive.takeFile(5, var0); + var1 = new InvDefinition(); + if (var2 != null) { + var1.decode(new Buffer(var2)); + } + + InvDefinition.InvDefinition_cached.put(var1, (long)var0); + return var1; + } } - @ObfuscatedName("q") + @ObfuscatedName("gu") @ObfuscatedSignature( - signature = "(II)Z", - garbageValue = "828807862" + signature = "(IIIB)V", + garbageValue = "14" ) - @Export("loadInterface") - public static boolean loadInterface(int var0) { - if (class215.Widget_loadedInterfaces[var0]) { - return true; - } else if (!Coord.Widget_archive.tryLoadGroup(var0)) { - return false; - } else { - int var1 = Coord.Widget_archive.getGroupFileCount(var0); - if (var1 == 0) { - class215.Widget_loadedInterfaces[var0] = true; - return true; + @Export("worldToScreen") + static final void worldToScreen(int var0, int var1, int var2) { + if (var0 >= 128 && var1 >= 128 && var0 <= 13056 && var1 <= 13056) { + int var3 = class195.getTileHeight(var0, var1, ClientPacket.Client_plane) - var2; + var0 -= class30.cameraX; + var3 -= GameObject.cameraY; + var1 -= FloorDecoration.cameraZ; + int var4 = Rasterizer3D.Rasterizer3D_sine[ItemContainer.cameraPitch]; + int var5 = Rasterizer3D.Rasterizer3D_cosine[ItemContainer.cameraPitch]; + int var6 = Rasterizer3D.Rasterizer3D_sine[Decimator.cameraYaw]; + int var7 = Rasterizer3D.Rasterizer3D_cosine[Decimator.cameraYaw]; + int var8 = var6 * var1 + var0 * var7 >> 16; + var1 = var7 * var1 - var0 * var6 >> 16; + var0 = var8; + var8 = var3 * var5 - var4 * var1 >> 16; + var1 = var5 * var1 + var4 * var3 >> 16; + if (var1 >= 50) { + Client.viewportTempX = var0 * Client.viewportZoom / var1 + Client.viewportWidth / 2; + Client.viewportTempY = Client.viewportHeight / 2 + var8 * Client.viewportZoom / var1; } else { - if (Widget.Widget_interfaceComponents[var0] == null) { - Widget.Widget_interfaceComponents[var0] = new Widget[var1]; - } - - for (int var2 = 0; var2 < var1; ++var2) { - if (Widget.Widget_interfaceComponents[var0][var2] == null) { - byte[] var3 = Coord.Widget_archive.takeFile(var0, var2); - if (var3 != null) { - Widget.Widget_interfaceComponents[var0][var2] = new Widget(); - Widget.Widget_interfaceComponents[var0][var2].id = var2 + (var0 << 16); - if (var3[0] == -1) { - Widget.Widget_interfaceComponents[var0][var2].decode(new Buffer(var3)); - } else { - Widget.Widget_interfaceComponents[var0][var2].decodeLegacy(new Buffer(var3)); - } - } - } - } - - class215.Widget_loadedInterfaces[var0] = true; - return true; + Client.viewportTempX = -1; + Client.viewportTempY = -1; } + + } else { + Client.viewportTempX = -1; + Client.viewportTempY = -1; } } - @ObfuscatedName("lh") + @ObfuscatedName("ij") @ObfuscatedSignature( - signature = "(Lhi;B)Lhi;", - garbageValue = "7" + signature = "(IIIIB)V", + garbageValue = "-94" ) - static Widget method2909(Widget var0) { - int var2 = class195.getWidgetClickMask(var0); - int var1 = var2 >> 17 & 7; - int var3 = var1; - if (var1 == 0) { - return null; - } else { - for (int var4 = 0; var4 < var3; ++var4) { - var0 = PacketBufferNode.getWidget(var0.parentId); - if (var0 == null) { - return null; - } - } - - return var0; + @Export("selectSpell") + static void selectSpell(int var0, int var1, int var2, int var3) { + Widget var4 = UserComparator3.getWidgetChild(var0, var1); + if (var4 != null && var4.onTargetEnter != null) { + ScriptEvent var5 = new ScriptEvent(); + var5.widget = var4; + var5.args = var4.onTargetEnter; + WorldMapLabel.runScriptEvent(var5); } + + Client.field799 = var3; + Client.isSpellSelected = true; + WorldMapAreaData.selectedSpellWidget = var0; + Client.selectedSpellChildIndex = var1; + Actor.selectedSpellFlags = var2; + ScriptEvent.invalidateWidget(var4); } } diff --git a/runescape-client/src/main/java/Tile.java b/runescape-client/src/main/java/Tile.java index a80edb6a55..c006152f1d 100644 --- a/runescape-client/src/main/java/Tile.java +++ b/runescape-client/src/main/java/Tile.java @@ -4,129 +4,129 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("dh") +@ObfuscatedName("dm") @Implements("Tile") public final class Tile extends Node { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedGetter( - intValue = -1309939485 + intValue = 193606079 ) @Export("plane") int plane; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = 2038032895 + intValue = 1934572627 ) @Export("x") int x; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = -1013860717 + intValue = 1222614809 ) @Export("y") int y; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = -371358755 + intValue = -1168297541 ) @Export("originalPlane") int originalPlane; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "Leg;" + signature = "Ley;" ) @Export("paint") TilePaint paint; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "Ldk;" + signature = "Ldo;" ) @Export("model") TileModel model; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "Let;" + signature = "Leu;" ) @Export("boundaryObject") BoundaryObject boundaryObject; - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "Lei;" + signature = "Let;" ) @Export("wallDecoration") WallDecoration wallDecoration; - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedSignature( - signature = "Ldx;" + signature = "Ldu;" ) @Export("floorDecoration") FloorDecoration floorDecoration; - @ObfuscatedName("d") + @ObfuscatedName("i") @ObfuscatedSignature( - signature = "Ldy;" + signature = "Lda;" ) @Export("tileItemPile") TileItemPile tileItemPile; - @ObfuscatedName("m") + @ObfuscatedName("k") @ObfuscatedGetter( - intValue = -1638075719 + intValue = 595796379 ) @Export("gameObjectsCount") int gameObjectsCount; - @ObfuscatedName("p") + @ObfuscatedName("x") @ObfuscatedSignature( - signature = "[Lex;" + signature = "[Leh;" ) @Export("gameObjects") GameObject[] gameObjects; - @ObfuscatedName("h") + @ObfuscatedName("o") @Export("gameObjectEdgeMasks") int[] gameObjectEdgeMasks; - @ObfuscatedName("k") + @ObfuscatedName("e") @ObfuscatedGetter( - intValue = -2114693013 + intValue = 1728330701 ) @Export("gameObjectsEdgeMask") int gameObjectsEdgeMask; - @ObfuscatedName("x") + @ObfuscatedName("n") @ObfuscatedGetter( - intValue = -1476239689 + intValue = -882274027 ) @Export("minPlane") int minPlane; - @ObfuscatedName("j") + @ObfuscatedName("r") @Export("drawPrimary") boolean drawPrimary; - @ObfuscatedName("r") + @ObfuscatedName("c") @Export("drawSecondary") boolean drawSecondary; - @ObfuscatedName("e") + @ObfuscatedName("a") @Export("drawGameObjects") boolean drawGameObjects; - @ObfuscatedName("s") + @ObfuscatedName("d") @ObfuscatedGetter( - intValue = 1357741969 + intValue = 1788905093 ) @Export("drawGameObjectEdges") int drawGameObjectEdges; - @ObfuscatedName("b") + @ObfuscatedName("s") @ObfuscatedGetter( - intValue = 1034029719 + intValue = 177937909 ) - int field1638; - @ObfuscatedName("z") + int field1655; + @ObfuscatedName("t") @ObfuscatedGetter( - intValue = 772889311 + intValue = 672389787 ) - int field1639; - @ObfuscatedName("f") + int field1656; + @ObfuscatedName("m") @ObfuscatedGetter( - intValue = 1173456745 + intValue = 1739431401 ) - int field1637; - @ObfuscatedName("g") + int field1650; + @ObfuscatedName("v") @ObfuscatedSignature( - signature = "Ldh;" + signature = "Ldm;" ) @Export("linkedBelowTile") Tile linkedBelowTile; @@ -139,115 +139,4 @@ public final class Tile extends Node { this.x = var2; this.y = var3; } - - @ObfuscatedName("q") - @ObfuscatedSignature( - signature = "(III)V", - garbageValue = "59620731" - ) - static void method3021(int var0, int var1) { - long var2 = (long)((var0 << 16) + var1); - NetFileRequest var4 = (NetFileRequest)NetCache.NetCache_pendingWrites.get(var2); - if (var4 != null) { - NetCache.NetCache_pendingWritesQueue.addLast(var4); - } - } - - @ObfuscatedName("v") - @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "-2" - ) - public static void method3023() { - try { - JagexCache.JagexCache_dat2File.close(); - - for (int var0 = 0; var0 < JagexCache.idxCount; ++var0) { - ArchiveLoader.JagexCache_idxFiles[var0].close(); - } - - JagexCache.JagexCache_idx255File.close(); - JagexCache.JagexCache_randomDat.close(); - } catch (Exception var2) { - } - - } - - @ObfuscatedName("fp") - @ObfuscatedSignature( - signature = "(IB)V", - garbageValue = "104" - ) - @Export("updateGameState") - static void updateGameState(int var0) { - if (var0 != Client.gameState) { - if (Client.gameState == 0) { - WorldMapID.client.method1029(); - } - - if (var0 == 20 || var0 == 40 || var0 == 45) { - Client.loginState = 0; - Client.field666 = 0; - Client.field667 = 0; - Client.timer.method5118(var0); - if (var0 != 20) { - WorldMapLabelSize.method235(false); - } - } - - if (var0 != 20 && var0 != 40 && Tiles.field499 != null) { - Tiles.field499.close(); - Tiles.field499 = null; - } - - if (Client.gameState == 25) { - Client.field688 = 0; - Client.field684 = 0; - Client.field685 = 1; - Client.field686 = 0; - Client.field687 = 1; - } - - if (var0 != 5 && var0 != 10) { - if (var0 == 20) { - AttackOption.method2218(WorldMapID.archive10, GrandExchangeOfferUnitPriceComparator.archive8, true, Client.gameState == 11 ? 4 : 0); - } else if (var0 == 11) { - AttackOption.method2218(WorldMapID.archive10, GrandExchangeOfferUnitPriceComparator.archive8, false, 4); - } else { - Coord.method4144(); - } - } else { - AttackOption.method2218(WorldMapID.archive10, GrandExchangeOfferUnitPriceComparator.archive8, true, 0); - } - - Client.gameState = var0; - } - } - - @ObfuscatedName("fb") - @ObfuscatedSignature( - signature = "(Liv;IIII)V", - garbageValue = "-723801001" - ) - @Export("addSequenceSoundEffect") - static void addSequenceSoundEffect(SequenceDefinition var0, int var1, int var2, int var3) { - if (Client.soundEffectCount < 50 && Client.areaSoundEffectVolume != 0) { - if (var0.soundEffects != null && var1 < var0.soundEffects.length) { - int var4 = var0.soundEffects[var1]; - if (var4 != 0) { - int var5 = var4 >> 8; - int var6 = var4 >> 4 & 7; - int var7 = var4 & 15; - Client.soundEffectIds[Client.soundEffectCount] = var5; - Client.queuedSoundEffectLoops[Client.soundEffectCount] = var6; - Client.queuedSoundEffectDelays[Client.soundEffectCount] = 0; - Client.soundEffects[Client.soundEffectCount] = null; - int var8 = (var2 - 64) / 128; - int var9 = (var3 - 64) / 128; - Client.soundLocations[Client.soundEffectCount] = var7 + (var9 << 8) + (var8 << 16); - ++Client.soundEffectCount; - } - } - } - } } diff --git a/runescape-client/src/main/java/TileItem.java b/runescape-client/src/main/java/TileItem.java index 54d1a9c80e..aed8722402 100644 --- a/runescape-client/src/main/java/TileItem.java +++ b/runescape-client/src/main/java/TileItem.java @@ -4,24 +4,18 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("cl") +@ObfuscatedName("cb") @Implements("TileItem") public final class TileItem extends Entity { - @ObfuscatedName("v") + @ObfuscatedName("u") @ObfuscatedGetter( - intValue = 731743959 - ) - @Export("clientType") - public static int clientType; - @ObfuscatedName("a") - @ObfuscatedGetter( - intValue = -1432392447 + intValue = -1378813027 ) @Export("id") int id; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = -423063441 + intValue = -744056543 ) @Export("quantity") int quantity; @@ -29,13 +23,77 @@ public final class TileItem extends Entity { TileItem() { } - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedSignature( - signature = "(B)Ldv;", - garbageValue = "-40" + signature = "(I)Ldf;", + garbageValue = "-174129419" ) @Export("getModel") protected final Model getModel() { - return class222.ItemDefinition_get(this.id).getModel(this.quantity); + return Interpreter.ItemDefinition_get(this.id).getModel(this.quantity); + } + + @ObfuscatedName("u") + @ObfuscatedSignature( + signature = "(I)I", + garbageValue = "-657071617" + ) + static int method2142() { + return ++Messages.Messages_count - 1; + } + + @ObfuscatedName("u") + @ObfuscatedSignature( + signature = "(I[BLke;I)V", + garbageValue = "261282715" + ) + static void method2144(int var0, byte[] var1, ArchiveDisk var2) { + ArchiveDiskAction var3 = new ArchiveDiskAction(); + var3.type = 0; + var3.key = (long)var0; + var3.data = var1; + var3.archiveDisk = var2; + synchronized(ArchiveDiskActionHandler.ArchiveDiskActionHandler_requestQueue) { + ArchiveDiskActionHandler.ArchiveDiskActionHandler_requestQueue.addFirst(var3); + } + + synchronized(ArchiveDiskActionHandler.ArchiveDiskActionHandler_lock) { + if (ArchiveDiskActionHandler.field3155 == 0) { + ArchiveDiskActionHandler.ArchiveDiskActionHandler_thread = new Thread(new ArchiveDiskActionHandler()); + ArchiveDiskActionHandler.ArchiveDiskActionHandler_thread.setDaemon(true); + ArchiveDiskActionHandler.ArchiveDiskActionHandler_thread.start(); + ArchiveDiskActionHandler.ArchiveDiskActionHandler_thread.setPriority(5); + } + + ArchiveDiskActionHandler.field3155 = 600; + } + } + + @ObfuscatedName("u") + @ObfuscatedSignature( + signature = "(I)[Llz;", + garbageValue = "1567603779" + ) + @Export("FillMode_values") + public static FillMode[] FillMode_values() { + return new FillMode[]{FillMode.field3854, FillMode.SOLID, FillMode.field3855}; + } + + @ObfuscatedName("km") + @ObfuscatedSignature( + signature = "(Lhl;IIIB)V", + garbageValue = "123" + ) + @Export("drawCompass") + static final void drawCompass(Widget var0, int var1, int var2, int var3) { + SpriteMask var4 = var0.getSpriteMask(false); + if (var4 != null) { + if (Client.minimapState < 3) { + class40.compass.drawRotatedMaskedCenteredAround(var1, var2, var4.width, var4.height, 25, 25, Client.camAngleY, 256, var4.xStarts, var4.xWidths); + } else { + Rasterizer2D.Rasterizer2D_fillMaskedRectangle(var1, var2, 0, var4.xStarts, var4.xWidths); + } + + } } } diff --git a/runescape-client/src/main/java/TileItemPile.java b/runescape-client/src/main/java/TileItemPile.java index 7fc49a0331..f59cac9b0e 100644 --- a/runescape-client/src/main/java/TileItemPile.java +++ b/runescape-client/src/main/java/TileItemPile.java @@ -4,54 +4,62 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("dy") +@ObfuscatedName("da") @Implements("TileItemPile") public final class TileItemPile { - @ObfuscatedName("a") + @ObfuscatedName("i") + public static short[][] field1537; + @ObfuscatedName("kd") @ObfuscatedGetter( - intValue = 960185027 + intValue = -495854777 + ) + @Export("menuWidth") + static int menuWidth; + @ObfuscatedName("u") + @ObfuscatedGetter( + intValue = -811612081 ) @Export("tileHeight") int tileHeight; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = 518288239 + intValue = -1672040969 ) @Export("x") int x; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = 1518597633 + intValue = -951728925 ) @Export("y") int y; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Lep;" + signature = "Lee;" ) @Export("first") Entity first; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "Lep;" + signature = "Lee;" ) @Export("second") Entity second; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "Lep;" + signature = "Lee;" ) @Export("third") Entity third; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedGetter( - longValue = 1765844833924880689L + longValue = 4343367721480266293L ) @Export("tag") long tag; - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedGetter( - intValue = -483031039 + intValue = -311771117 ) @Export("height") int height; @@ -59,18 +67,23 @@ public final class TileItemPile { TileItemPile() { } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Lhq;Lhq;Lhq;Lhq;I)V", - garbageValue = "320810810" + signature = "(B)[Lkc;", + garbageValue = "-76" ) - @Export("Widget_setArchives") - public static void Widget_setArchives(AbstractArchive var0, AbstractArchive var1, AbstractArchive var2, AbstractArchive var3) { - Coord.Widget_archive = var0; - StructDefinition.Widget_modelsArchive = var1; - Widget.Widget_spritesArchive = var2; - Widget.Widget_fontsArchive = var3; - Widget.Widget_interfaceComponents = new Widget[Coord.Widget_archive.getGroupCount()][]; - class215.Widget_loadedInterfaces = new boolean[Coord.Widget_archive.getGroupCount()]; + static PrivateChatMode[] method2810() { + return new PrivateChatMode[]{PrivateChatMode.field3793, PrivateChatMode.field3792, PrivateChatMode.field3794}; + } + + @ObfuscatedName("z") + @ObfuscatedSignature( + signature = "(I)V", + garbageValue = "-1881198055" + ) + public static void method2811() { + FaceNormal.midiPcmStream.clear(); + class197.field2411 = 1; + class197.musicTrackArchive = null; } } diff --git a/runescape-client/src/main/java/TileModel.java b/runescape-client/src/main/java/TileModel.java index 9918a59a4d..629eefa156 100644 --- a/runescape-client/src/main/java/TileModel.java +++ b/runescape-client/src/main/java/TileModel.java @@ -2,77 +2,77 @@ import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; -@ObfuscatedName("dk") +@ObfuscatedName("do") @Implements("TileModel") public final class TileModel { - @ObfuscatedName("j") - static int[] field1577; @ObfuscatedName("r") - static int[] field1578; - @ObfuscatedName("e") - static int[] field1562; - @ObfuscatedName("s") - static int[] field1580; - @ObfuscatedName("b") - static int[] field1573; - @ObfuscatedName("z") - static final int[][] field1582; - @ObfuscatedName("f") - static final int[][] field1583; + static int[] field1594; + @ObfuscatedName("c") + static int[] field1595; @ObfuscatedName("a") + static int[] field1596; + @ObfuscatedName("d") + static int[] field1599; + @ObfuscatedName("s") + static int[] field1598; + @ObfuscatedName("t") + static final int[][] field1579; + @ObfuscatedName("m") + static final int[][] field1591; + @ObfuscatedName("u") @Export("vertexX") int[] vertexX; - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("vertexY") int[] vertexY; - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("vertexZ") int[] vertexZ; - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("triangleColorA") int[] triangleColorA; - @ObfuscatedName("v") + @ObfuscatedName("z") @Export("triangleColorB") int[] triangleColorB; - @ObfuscatedName("l") + @ObfuscatedName("p") @Export("triangleColorC") int[] triangleColorC; - @ObfuscatedName("c") + @ObfuscatedName("h") @Export("faceX") int[] faceX; - @ObfuscatedName("o") + @ObfuscatedName("y") @Export("faceY") int[] faceY; - @ObfuscatedName("i") + @ObfuscatedName("w") @Export("faceZ") int[] faceZ; - @ObfuscatedName("d") + @ObfuscatedName("i") @Export("triangleTextureId") int[] triangleTextureId; - @ObfuscatedName("m") + @ObfuscatedName("k") @Export("isFlat") boolean isFlat; - @ObfuscatedName("p") + @ObfuscatedName("x") @Export("shape") int shape; - @ObfuscatedName("h") + @ObfuscatedName("o") @Export("rotation") int rotation; - @ObfuscatedName("k") + @ObfuscatedName("e") @Export("underlayRgb") int underlayRgb; - @ObfuscatedName("x") + @ObfuscatedName("n") @Export("overlayRgb") int overlayRgb; static { - field1577 = new int[6]; - field1578 = new int[6]; - field1562 = new int[6]; - field1580 = new int[6]; - field1573 = new int[6]; - field1582 = 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}}; - field1583 = 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}}; + field1594 = new int[6]; + field1595 = new int[6]; + field1596 = new int[6]; + field1599 = new int[6]; + field1598 = new int[6]; + field1579 = 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}}; + field1591 = 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}}; } TileModel(int var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10, int var11, int var12, int var13, int var14, int var15, int var16, int var17, int var18, int var19) { @@ -89,7 +89,7 @@ public final class TileModel { int var21 = var20 / 2; int var22 = var20 / 4; int var23 = var20 * 3 / 4; - int[] var24 = field1582[var1]; + int[] var24 = field1579[var1]; int var25 = var24.length; this.vertexX = new int[var25]; this.vertexY = new int[var25]; @@ -224,7 +224,7 @@ public final class TileModel { var27[var30] = var36; } - int[] var38 = field1583[var1]; + int[] var38 = field1591[var1]; var31 = var38.length / 4; this.faceX = new int[var31]; this.faceY = new int[var31]; diff --git a/runescape-client/src/main/java/TilePaint.java b/runescape-client/src/main/java/TilePaint.java index 7635aaad24..8711d8eb06 100644 --- a/runescape-client/src/main/java/TilePaint.java +++ b/runescape-client/src/main/java/TilePaint.java @@ -4,45 +4,50 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("eg") +@ObfuscatedName("ey") @Implements("TilePaint") public final class TilePaint { - @ObfuscatedName("a") + @ObfuscatedName("ns") @ObfuscatedGetter( - intValue = -1607728329 + intValue = -1788868487 + ) + static int field1782; + @ObfuscatedName("u") + @ObfuscatedGetter( + intValue = -94402457 ) @Export("swColor") int swColor; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = -293038201 + intValue = 1565892331 ) @Export("seColor") int seColor; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = -1492739509 + intValue = 813293965 ) @Export("neColor") int neColor; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = 276503717 + intValue = -1163969349 ) @Export("nwColor") int nwColor; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = -1272946255 + intValue = 1857222665 ) @Export("texture") int texture; - @ObfuscatedName("l") + @ObfuscatedName("p") @Export("isFlat") boolean isFlat; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedGetter( - intValue = 609514679 + intValue = -1506842685 ) @Export("rgb") int rgb; @@ -58,34 +63,81 @@ public final class TilePaint { this.isFlat = var7; } - @ObfuscatedName("n") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "([BIIII[Lfm;I)V", - garbageValue = "1145128419" + signature = "(IIB)I", + garbageValue = "82" ) - static final void method3200(byte[] var0, int var1, int var2, int var3, int var4, CollisionMap[] var5) { - int var7; - int var8; - for (int var6 = 0; var6 < 4; ++var6) { - for (var7 = 0; var7 < 64; ++var7) { - for (var8 = 0; var8 < 64; ++var8) { - if (var7 + var1 > 0 && var7 + var1 < 103 && var8 + var2 > 0 && var8 + var2 < 103) { - int[] var10000 = var5[var6].flags[var7 + var1]; - var10000[var8 + var2] &= -16777217; - } - } + static int method3104(int var0, int var1) { + if (var0 == -2) { + return 12345678; + } else if (var0 == -1) { + if (var1 < 0) { + var1 = 0; + } else if (var1 > 127) { + var1 = 127; + } + + var1 = 127 - var1; + return var1; + } else { + var1 = (var0 & 127) * var1 / 128; + if (var1 < 2) { + var1 = 2; + } else if (var1 > 126) { + var1 = 126; + } + + return (var0 & 65408) + var1; + } + } + + @ObfuscatedName("b") + @ObfuscatedSignature( + signature = "(IIII)V", + garbageValue = "606674318" + ) + static final void method3105(int var0, int var1, int var2) { + int var3; + for (var3 = 0; var3 < 8; ++var3) { + for (int var4 = 0; var4 < 8; ++var4) { + Tiles.Tiles_heights[var0][var3 + var1][var4 + var2] = 0; } } - Buffer var10 = new Buffer(var0); - - for (var7 = 0; var7 < 4; ++var7) { - for (var8 = 0; var8 < 64; ++var8) { - for (int var9 = 0; var9 < 64; ++var9) { - class312.loadTerrain(var10, var7, var8 + var1, var9 + var2, var3, var4, 0); - } + if (var1 > 0) { + for (var3 = 1; var3 < 8; ++var3) { + Tiles.Tiles_heights[var0][var1][var3 + var2] = Tiles.Tiles_heights[var0][var1 - 1][var3 + var2]; } } + if (var2 > 0) { + for (var3 = 1; var3 < 8; ++var3) { + Tiles.Tiles_heights[var0][var3 + var1][var2] = Tiles.Tiles_heights[var0][var3 + var1][var2 - 1]; + } + } + + if (var1 > 0 && Tiles.Tiles_heights[var0][var1 - 1][var2] != 0) { + Tiles.Tiles_heights[var0][var1][var2] = Tiles.Tiles_heights[var0][var1 - 1][var2]; + } else if (var2 > 0 && Tiles.Tiles_heights[var0][var1][var2 - 1] != 0) { + Tiles.Tiles_heights[var0][var1][var2] = Tiles.Tiles_heights[var0][var1][var2 - 1]; + } else if (var1 > 0 && var2 > 0 && Tiles.Tiles_heights[var0][var1 - 1][var2 - 1] != 0) { + Tiles.Tiles_heights[var0][var1][var2] = Tiles.Tiles_heights[var0][var1 - 1][var2 - 1]; + } + + } + + @ObfuscatedName("g") + @ObfuscatedSignature( + signature = "(II)V", + garbageValue = "-770375157" + ) + public static void method3103(int var0) { + if (class197.field2411 != 0) { + class197.musicTrackVolume = var0; + } else { + FaceNormal.midiPcmStream.setPcmStreamVolume(var0); + } + } } diff --git a/runescape-client/src/main/java/Tiles.java b/runescape-client/src/main/java/Tiles.java index 2c111f49ef..8e229594a5 100644 --- a/runescape-client/src/main/java/Tiles.java +++ b/runescape-client/src/main/java/Tiles.java @@ -3,181 +3,125 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("bd") +@ObfuscatedName("bu") @Implements("Tiles") public final class Tiles { - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("Tiles_heights") static int[][][] Tiles_heights; - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("Tiles_renderFlags") static byte[][][] Tiles_renderFlags; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = -1836761935 + intValue = -777969823 ) @Export("Tiles_minPlane") static int Tiles_minPlane; - @ObfuscatedName("v") - static byte[][][] field485; - @ObfuscatedName("l") - static byte[][][] field482; - @ObfuscatedName("c") - static byte[][][] field483; + @ObfuscatedName("g") + static byte[][][] field498; + @ObfuscatedName("z") + static byte[][][] field499; + @ObfuscatedName("p") + static byte[][][] field500; + @ObfuscatedName("h") + static byte[][][] field501; @ObfuscatedName("i") - @ObfuscatedSignature( - signature = "Llw;" - ) - @Export("logoSprite") - static IndexedSprite logoSprite; - @ObfuscatedName("d") @Export("Tiles_hue") static int[] Tiles_hue; - @ObfuscatedName("m") + @ObfuscatedName("k") @Export("Tiles_saturation") static int[] Tiles_saturation; - @ObfuscatedName("p") + @ObfuscatedName("x") @Export("Tiles_lightness") static int[] Tiles_lightness; - @ObfuscatedName("h") - @Export("Tiles_hueMultiplier") - static int[] Tiles_hueMultiplier; - @ObfuscatedName("x") - static int[][][] field488; + @ObfuscatedName("d") + static final int[] field505; @ObfuscatedName("s") - static final int[] field489; - @ObfuscatedName("b") - static final int[] field490; - @ObfuscatedName("z") - static final int[] field491; - @ObfuscatedName("f") - static final int[] field498; - @ObfuscatedName("g") - static final int[] field493; - @ObfuscatedName("w") - static final int[] field494; - @ObfuscatedName("u") + static final int[] field506; + @ObfuscatedName("t") + static final int[] field507; + @ObfuscatedName("m") + static final int[] field508; + @ObfuscatedName("v") + static final int[] field509; + @ObfuscatedName("q") + static final int[] field513; + @ObfuscatedName("l") @ObfuscatedGetter( - intValue = 1357513063 + intValue = 1093475595 ) - static int field495; - @ObfuscatedName("y") + static int field511; + @ObfuscatedName("j") @ObfuscatedGetter( - intValue = -1661743101 + intValue = 1317954869 ) - static int field496; - @ObfuscatedName("fy") + static int field503; + @ObfuscatedName("li") @ObfuscatedSignature( - signature = "Lku;" + signature = "Lcg;" ) - static AbstractSocket field499; - @ObfuscatedName("hp") - @ObfuscatedGetter( - intValue = 194676221 - ) - static int field497; + @Export("tempMenuAction") + static MenuAction tempMenuAction; static { Tiles_heights = new int[4][105][105]; Tiles_renderFlags = new byte[4][104][104]; Tiles_minPlane = 99; - field489 = new int[]{1, 2, 4, 8}; - field490 = new int[]{16, 32, 64, 128}; - field491 = new int[]{1, 0, -1, 0}; - field498 = new int[]{0, -1, 0, 1}; - field493 = new int[]{1, -1, -1, 1}; - field494 = new int[]{-1, -1, 1, 1}; - field495 = (int)(Math.random() * 17.0D) - 8; - field496 = (int)(Math.random() * 33.0D) - 16; + field505 = new int[]{1, 2, 4, 8}; + field506 = new int[]{16, 32, 64, 128}; + field507 = new int[]{1, 0, -1, 0}; + field508 = new int[]{0, -1, 0, 1}; + field509 = new int[]{1, -1, -1, 1}; + field513 = new int[]{-1, -1, 1, 1}; + field511 = (int)(Math.random() * 17.0D) - 8; + field503 = (int)(Math.random() * 33.0D) - 16; } - @ObfuscatedName("t") + @ObfuscatedName("fs") @ObfuscatedSignature( - signature = "(IB)I", - garbageValue = "4" + signature = "(I)V", + garbageValue = "1584331485" ) - @Export("iLog") - public static int iLog(int var0) { - int var1 = 0; - if (var0 < 0 || var0 >= 65536) { - var0 >>>= 16; - var1 += 16; + @Export("playPcmPlayers") + static final void playPcmPlayers() { + if (class60.pcmPlayer1 != null) { + class60.pcmPlayer1.run(); } - if (var0 >= 256) { - var0 >>>= 8; - var1 += 8; + if (MenuAction.pcmPlayer0 != null) { + MenuAction.pcmPlayer0.run(); } - if (var0 >= 16) { - var0 >>>= 4; - var1 += 4; - } - - if (var0 >= 4) { - var0 >>>= 2; - var1 += 2; - } - - if (var0 >= 1) { - var0 >>>= 1; - ++var1; - } - - return var0 + var1; } - @ObfuscatedName("ae") + @ObfuscatedName("gc") @ObfuscatedSignature( - signature = "(ILcj;ZI)I", - garbageValue = "-1896878651" + signature = "(I)V", + garbageValue = "-1685874862" ) - static int method1215(int var0, Script var1, boolean var2) { - int var3; - if (var0 == ScriptOpcodes.CAM_FORCEANGLE) { - Interpreter.Interpreter_intStackSize -= 2; - var3 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - int var4 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - if (!Client.isCameraLocked) { - Client.camAngleX = var3; - Client.camAngleY = var4; + static void method1161() { + if (Client.renderSelf) { + Varcs.addPlayerToScene(class215.localPlayer, false); + } + + } + + @ObfuscatedName("go") + @ObfuscatedSignature( + signature = "(I)V", + garbageValue = "2106789037" + ) + static void method1160() { + int var0 = Players.Players_count; + int[] var1 = Players.Players_indices; + + for (int var2 = 0; var2 < var0; ++var2) { + if (var1[var2] != Client.combatTargetPlayerIndex && var1[var2] != Client.localPlayerIndex) { + Varcs.addPlayerToScene(Client.players[var1[var2]], true); } - - return 1; - } else if (var0 == ScriptOpcodes.CAM_GETANGLE_XA) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = Client.camAngleX; - return 1; - } else if (var0 == ScriptOpcodes.CAM_GETANGLE_YA) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = Client.camAngleY; - return 1; - } else if (var0 == ScriptOpcodes.CAM_SETFOLLOWHEIGHT) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - if (var3 < 0) { - var3 = 0; - } - - Client.camFollowHeight = var3; - return 1; - } else if (var0 == ScriptOpcodes.CAM_GETFOLLOWHEIGHT) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = Client.camFollowHeight; - return 1; - } else { - return 2; } - } - @ObfuscatedName("iy") - @ObfuscatedSignature( - signature = "(IIB)V", - garbageValue = "15" - ) - @Export("resumePauseWidget") - static void resumePauseWidget(int var0, int var1) { - PacketBufferNode var2 = SoundSystem.getPacketBufferNode(ClientPacket.field2277, Client.packetWriter.isaacCipher); - var2.packetBuffer.method5643(var1); - var2.packetBuffer.writeIntME(var0); - Client.packetWriter.addNode(var2); } } diff --git a/runescape-client/src/main/java/Timer.java b/runescape-client/src/main/java/Timer.java index 4f61bf40de..3d21d60b45 100644 --- a/runescape-client/src/main/java/Timer.java +++ b/runescape-client/src/main/java/Timer.java @@ -3,150 +3,514 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; +import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("jt") +@ObfuscatedName("jl") @Implements("Timer") public class Timer { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedGetter( - longValue = -5009265909251557427L + longValue = -6240024942986878869L ) - long field3567; - @ObfuscatedName("t") + long field3584; + @ObfuscatedName("f") @ObfuscatedGetter( - longValue = 3656163850803388837L + longValue = 5318083601212368839L ) - long field3569; - @ObfuscatedName("n") - public boolean field3568; - @ObfuscatedName("q") + long field3580; + @ObfuscatedName("b") + public boolean field3581; + @ObfuscatedName("g") @ObfuscatedGetter( - longValue = -5484170024319161763L + longValue = 2061112075128540571L ) - long field3570; - @ObfuscatedName("v") + long field3582; + @ObfuscatedName("z") @ObfuscatedGetter( - longValue = -1992086956533447559L + longValue = 2026371982134208439L ) - long field3571; - @ObfuscatedName("l") + long field3583; + @ObfuscatedName("p") @ObfuscatedGetter( - longValue = 5115114623583473447L + longValue = 689838132485395985L ) - long field3572; - @ObfuscatedName("c") + long field3579; + @ObfuscatedName("h") @ObfuscatedGetter( - intValue = -1585759455 + intValue = 84967575 ) - int field3573; - @ObfuscatedName("o") + int field3585; + @ObfuscatedName("y") @ObfuscatedGetter( - intValue = 1782421563 + intValue = 1608958001 ) - int field3574; + int field3586; + @ObfuscatedName("w") + @ObfuscatedGetter( + intValue = -1078604545 + ) + int field3588; @ObfuscatedName("i") @ObfuscatedGetter( - intValue = 303521947 + intValue = 1631657249 ) - int field3575; - @ObfuscatedName("d") - @ObfuscatedGetter( - intValue = 19440131 - ) - int field3576; + int field3587; public Timer() { - this.field3567 = -1L; - this.field3569 = -1L; - this.field3568 = false; - this.field3570 = 0L; - this.field3571 = 0L; - this.field3572 = 0L; - this.field3573 = 0; - this.field3574 = 0; - this.field3575 = 0; - this.field3576 = 0; + this.field3584 = -1L; + this.field3580 = -1L; + this.field3581 = false; + this.field3582 = 0L; + this.field3583 = 0L; + this.field3579 = 0L; + this.field3585 = 0; + this.field3586 = 0; + this.field3588 = 0; + this.field3587 = 0; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "-1653711688" + garbageValue = "233565560" ) - public void method5115() { - this.field3567 = PlayerAppearance.currentTimeMillis(); + public void method5071() { + this.field3584 = TaskHandler.currentTimeMillis(); } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "2049281372" + garbageValue = "2022402966" ) - public void method5123() { - if (this.field3567 != -1L) { - this.field3571 = PlayerAppearance.currentTimeMillis() - this.field3567; - this.field3567 = -1L; + public void method5072() { + if (-1L != this.field3584) { + this.field3583 = TaskHandler.currentTimeMillis() - this.field3584; + this.field3584 = -1L; } } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( signature = "(II)V", - garbageValue = "-1105909109" + garbageValue = "-290587074" ) - public void method5118(int var1) { - this.field3569 = PlayerAppearance.currentTimeMillis(); - this.field3573 = var1; + public void method5073(int var1) { + this.field3580 = TaskHandler.currentTimeMillis(); + this.field3585 = var1; } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "-1135526321" + garbageValue = "1294932031" ) - public void method5119() { - if (-1L != this.field3569) { - this.field3570 = PlayerAppearance.currentTimeMillis() - this.field3569; - this.field3569 = -1L; + public void method5079() { + if (this.field3580 != -1L) { + this.field3582 = TaskHandler.currentTimeMillis() - this.field3580; + this.field3580 = -1L; } - ++this.field3575; - this.field3568 = true; + ++this.field3588; + this.field3581 = true; } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "179505930" + garbageValue = "65408" ) - public void method5120() { - this.field3568 = false; - this.field3574 = 0; + public void method5075() { + this.field3581 = false; + this.field3586 = 0; } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "-287296961" + garbageValue = "1988962701" ) - public void method5121() { - this.method5119(); + public void method5076() { + this.method5079(); } - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "(Lkc;I)V", - garbageValue = "-549220155" + signature = "(Lkg;I)V", + garbageValue = "817324338" ) @Export("write") public void write(Buffer var1) { - WorldMapIcon_1.method354(var1, this.field3571); - WorldMapIcon_1.method354(var1, this.field3570); - WorldMapIcon_1.method354(var1, this.field3572); - var1.writeShort(this.field3573); - var1.writeShort(this.field3574); - var1.writeShort(this.field3575); - var1.writeShort(this.field3576); + VertexNormal.method3019(var1, this.field3583); + VertexNormal.method3019(var1, this.field3582); + VertexNormal.method3019(var1, this.field3579); + var1.writeShort(this.field3585); + var1.writeShort(this.field3586); + var1.writeShort(this.field3588); + var1.writeShort(this.field3587); + } + + @ObfuscatedName("l") + @ObfuscatedSignature( + signature = "(ILci;ZI)I", + garbageValue = "1563555840" + ) + static int method5098(int var0, Script var1, boolean var2) { + String var3; + if (var0 == ScriptOpcodes.MES) { + var3 = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]; + GrandExchangeOfferAgeComparator.addGameMessage(0, "", var3); + return 1; + } else if (var0 == ScriptOpcodes.ANIM) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + WorldMapRectangle.performPlayerAnimation(class215.localPlayer, Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize], Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]); + return 1; + } else if (var0 == ScriptOpcodes.IF_CLOSE) { + if (!Interpreter.field1087) { + Interpreter.field1093 = true; + } + + return 1; + } else { + int var10; + if (var0 == ScriptOpcodes.RESUME_COUNTDIALOG) { + var3 = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]; + var10 = 0; + if (Interpreter.isNumber(var3)) { + var10 = SoundCache.parseInt(var3); + } + + PacketBufferNode var12 = ModelData0.getPacketBufferNode(ClientPacket.field2230, Client.packetWriter.isaacCipher); + var12.packetBuffer.writeInt(var10); + Client.packetWriter.addNode(var12); + return 1; + } else { + PacketBufferNode var14; + if (var0 == ScriptOpcodes.RESUME_NAMEDIALOG) { + var3 = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]; + var14 = ModelData0.getPacketBufferNode(ClientPacket.field2277, Client.packetWriter.isaacCipher); + var14.packetBuffer.writeByte(var3.length() + 1); + var14.packetBuffer.writeStringCp1252NullTerminated(var3); + Client.packetWriter.addNode(var14); + return 1; + } else if (var0 == ScriptOpcodes.RESUME_STRINGDIALOG) { + var3 = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]; + var14 = ModelData0.getPacketBufferNode(ClientPacket.field2256, Client.packetWriter.isaacCipher); + var14.packetBuffer.writeByte(var3.length() + 1); + var14.packetBuffer.writeStringCp1252NullTerminated(var3); + Client.packetWriter.addNode(var14); + return 1; + } else { + String var7; + int var15; + if (var0 == ScriptOpcodes.OPPLAYER) { + var15 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var7 = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]; + UserComparator5.method3466(var15, var7); + return 1; + } else if (var0 == ScriptOpcodes.IF_DRAGPICKUP) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 3; + var15 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var10 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + int var9 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 2]; + Widget var13 = Language.getWidget(var9); + UserComparator3.clickWidget(var13, var15, var10); + return 1; + } else if (var0 == ScriptOpcodes.CC_DRAGPICKUP) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var15 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var10 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + Widget var11 = var2 ? Interpreter.field1090 : class188.field2352; + UserComparator3.clickWidget(var11, var15, var10); + return 1; + } else if (var0 == ScriptOpcodes.MOUSECAM) { + JagexCache.mouseCam = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + return 1; + } else if (var0 == ScriptOpcodes.GETREMOVEROOFS) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = UserComparator10.clientPreferences.roofsHidden ? 1 : 0; + return 1; + } else if (var0 == ScriptOpcodes.SETREMOVEROOFS) { + UserComparator10.clientPreferences.roofsHidden = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + class40.savePreferences(); + return 1; + } else if (var0 == ScriptOpcodes.OPENURL) { + var3 = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]; + boolean var4 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + WorldMapAreaData.openURL(var3, var4, false); + return 1; + } else if (var0 == ScriptOpcodes.RESUME_OBJDIALOG) { + var15 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var14 = ModelData0.getPacketBufferNode(ClientPacket.field2258, Client.packetWriter.isaacCipher); + var14.packetBuffer.writeShort(var15); + Client.packetWriter.addNode(var14); + return 1; + } else if (var0 == ScriptOpcodes.BUG_REPORT) { + var15 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + class43.Interpreter_stringStackSize -= 2; + var7 = Interpreter.Interpreter_stringStack[class43.Interpreter_stringStackSize]; + String var5 = Interpreter.Interpreter_stringStack[class43.Interpreter_stringStackSize + 1]; + if (var7.length() > 500) { + return 1; + } else if (var5.length() > 500) { + return 1; + } else { + PacketBufferNode var6 = ModelData0.getPacketBufferNode(ClientPacket.field2290, Client.packetWriter.isaacCipher); + var6.packetBuffer.writeShort(1 + class173.stringCp1252NullTerminatedByteSize(var7) + class173.stringCp1252NullTerminatedByteSize(var5)); + var6.packetBuffer.writeStringCp1252NullTerminated(var5); + var6.packetBuffer.writeByte(var15); + var6.packetBuffer.writeStringCp1252NullTerminated(var7); + Client.packetWriter.addNode(var6); + return 1; + } + } else if (var0 == ScriptOpcodes.SETSHIFTCLICKDROP) { + Client.shiftClickDrop = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + return 1; + } else if (var0 == ScriptOpcodes.SETSHOWMOUSEOVERTEXT) { + Client.showMouseOverText = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + return 1; + } else if (var0 == ScriptOpcodes.RENDERSELF) { + Client.renderSelf = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + return 1; + } else if (var0 == 3120) { + if (Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1) { + Client.drawPlayerNames |= 1; + } else { + Client.drawPlayerNames &= -2; + } + + return 1; + } else if (var0 == 3121) { + if (Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1) { + Client.drawPlayerNames |= 2; + } else { + Client.drawPlayerNames &= -3; + } + + return 1; + } else if (var0 == 3122) { + if (Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1) { + Client.drawPlayerNames |= 4; + } else { + Client.drawPlayerNames &= -5; + } + + return 1; + } else if (var0 == 3123) { + if (Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1) { + Client.drawPlayerNames |= 8; + } else { + Client.drawPlayerNames &= -9; + } + + return 1; + } else if (var0 == 3124) { + Client.drawPlayerNames = 0; + return 1; + } else if (var0 == ScriptOpcodes.SETSHOWMOUSECROSS) { + Client.showMouseCross = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + return 1; + } else if (var0 == ScriptOpcodes.SETSHOWLOADINGMESSAGES) { + Client.showLoadingMessages = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + return 1; + } else if (var0 == ScriptOpcodes.SETTAPTODROP) { + Friend.setTapToDrop(Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1); + return 1; + } else if (var0 == ScriptOpcodes.GETTAPTODROP) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = MouseRecorder.getTapToDrop() ? 1 : 0; + return 1; + } else if (var0 == ScriptOpcodes.SETOCULUSORBSPEED) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + Client.oculusOrbNormalSpeed = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Client.oculusOrbSlowedSpeed = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + return 1; + } else if (var0 == 3130) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + return 1; + } else if (var0 == 3131) { + --GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize; + return 1; + } else if (var0 == ScriptOpcodes.GETCANVASSIZE) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = BoundaryObject.canvasWidth; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = WorldMapCacheName.canvasHeight; + return 1; + } else if (var0 == ScriptOpcodes.MOBILE_SETFPS) { + --GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize; + return 1; + } else if (var0 == ScriptOpcodes.MOBILE_OPENSTORE) { + return 1; + } else if (var0 == ScriptOpcodes.MOBILE_OPENSTORECATEGORY) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + return 1; + } else if (var0 == 3136) { + Client.field804 = 3; + Client.field805 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + return 1; + } else if (var0 == 3137) { + Client.field804 = 2; + Client.field805 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + return 1; + } else if (var0 == 3138) { + Client.field804 = 0; + return 1; + } else if (var0 == 3139) { + Client.field804 = 1; + return 1; + } else if (var0 == 3140) { + Client.field804 = 3; + Client.field805 = var2 ? Interpreter.field1090.id : class188.field2352.id; + return 1; + } else { + boolean var8; + if (var0 == ScriptOpcodes.SETHIDEUSERNAME) { + var8 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + UserComparator10.clientPreferences.hideUsername = var8; + class40.savePreferences(); + return 1; + } else if (var0 == ScriptOpcodes.GETHIDEUSERNAME) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = UserComparator10.clientPreferences.hideUsername ? 1 : 0; + return 1; + } else if (var0 == ScriptOpcodes.SETREMEMBERUSERNAME) { + var8 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + Client.Login_isUsernameRemembered = var8; + if (!var8) { + UserComparator10.clientPreferences.rememberedUsername = ""; + class40.savePreferences(); + } + + return 1; + } else if (var0 == ScriptOpcodes.GETREMEMBERUSERNAME) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Client.Login_isUsernameRemembered ? 1 : 0; + return 1; + } else if (var0 == 3145) { + return 1; + } else if (var0 == ScriptOpcodes.SETTITLEMUSICENABLED) { + var8 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + if (var8 == UserComparator10.clientPreferences.titleMusicDisabled) { + UserComparator10.clientPreferences.titleMusicDisabled = !var8; + class40.savePreferences(); + } + + return 1; + } else if (var0 == ScriptOpcodes.GETTITLEMUSICENABLED) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = UserComparator10.clientPreferences.titleMusicDisabled ? 0 : 1; + return 1; + } else if (var0 == 3148) { + return 1; + } else if (var0 == 3149) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + return 1; + } else if (var0 == 3150) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + return 1; + } else if (var0 == 3151) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + return 1; + } else if (var0 == 3152) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + return 1; + } else if (var0 == 3153) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Login.Login_loadingPercent; + return 1; + } else if (var0 == 3154) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = SpotAnimationDefinition.method4509(); + return 1; + } else if (var0 == 3155) { + --class43.Interpreter_stringStackSize; + return 1; + } else if (var0 == 3156) { + return 1; + } else if (var0 == 3157) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + return 1; + } else if (var0 == 3158) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + return 1; + } else if (var0 == 3159) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + return 1; + } else if (var0 == 3160) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + return 1; + } else if (var0 == 3161) { + --GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + return 1; + } else if (var0 == 3162) { + --GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + return 1; + } else if (var0 == 3163) { + --class43.Interpreter_stringStackSize; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + return 1; + } else if (var0 == 3164) { + --GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = ""; + return 1; + } else if (var0 == 3165) { + --GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + return 1; + } else if (var0 == 3166) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + return 1; + } else if (var0 == 3167) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + return 1; + } else if (var0 == 3168) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = ""; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = ""; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = ""; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = ""; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = ""; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = ""; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = ""; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = ""; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = ""; + return 1; + } else if (var0 == 3169) { + return 1; + } else if (var0 == 3170) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + return 1; + } else if (var0 == 3171) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + return 1; + } else if (var0 == 3172) { + --GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize; + return 1; + } else if (var0 == 3173) { + --GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + return 1; + } else if (var0 == 3174) { + --GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize; + return 1; + } else if (var0 == 3175) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + return 1; + } else if (var0 == 3176) { + return 1; + } else if (var0 == 3177) { + return 1; + } else if (var0 == 3178) { + --class43.Interpreter_stringStackSize; + return 1; + } else if (var0 == 3179) { + return 1; + } else if (var0 == 3180) { + --class43.Interpreter_stringStackSize; + return 1; + } else { + return 2; + } + } + } + } + } } } diff --git a/runescape-client/src/main/java/TriBool.java b/runescape-client/src/main/java/TriBool.java index 1bb9ffee3d..dde2381490 100644 --- a/runescape-client/src/main/java/TriBool.java +++ b/runescape-client/src/main/java/TriBool.java @@ -1,32 +1,26 @@ import net.runelite.mapping.Export; import net.runelite.mapping.Implements; -import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("js") +@ObfuscatedName("ja") @Implements("TriBool") public class TriBool { - @ObfuscatedName("nq") - @ObfuscatedGetter( - intValue = -1976717039 - ) - static int field3600; - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Ljs;" + signature = "Lja;" ) @Export("TriBool_unknown") public static final TriBool TriBool_unknown; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Ljs;" + signature = "Lja;" ) @Export("TriBool_true") public static final TriBool TriBool_true; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Ljs;" + signature = "Lja;" ) @Export("TriBool_false") public static final TriBool TriBool_false; @@ -40,49 +34,23 @@ public class TriBool { TriBool() { } - @ObfuscatedName("jw") + @ObfuscatedName("e") @ObfuscatedSignature( - signature = "(Lhi;IIZI)V", - garbageValue = "-723705185" + signature = "(III)I", + garbageValue = "-218767973" ) - @Export("alignWidgetSize") - static void alignWidgetSize(Widget var0, int var1, int var2, boolean var3) { - int var4 = var0.width; - int var5 = var0.height; - if (var0.widthAlignment == 0) { - var0.width = var0.rawWidth; - } else if (var0.widthAlignment == 1) { - var0.width = var1 - var0.rawWidth; - } else if (var0.widthAlignment == 2) { - var0.width = var0.rawWidth * var1 >> 14; - } + static final int method5255(int var0, int var1) { + if (var0 == -1) { + return 12345678; + } else { + var1 = (var0 & 127) * var1 / 128; + if (var1 < 2) { + var1 = 2; + } else if (var1 > 126) { + var1 = 126; + } - if (var0.heightAlignment == 0) { - var0.height = var0.rawHeight; - } else if (var0.heightAlignment == 1) { - var0.height = var2 - var0.rawHeight; - } else if (var0.heightAlignment == 2) { - var0.height = var2 * var0.rawHeight >> 14; + return (var0 & 65408) + var1; } - - if (var0.widthAlignment == 4) { - var0.width = var0.field2565 * var0.height / var0.field2566; - } - - if (var0.heightAlignment == 4) { - var0.height = var0.field2566 * var0.width / var0.field2565; - } - - if (var0.contentType == 1337) { - Client.viewportWidget = var0; - } - - if (var3 && var0.onResize != null && (var4 != var0.width || var5 != var0.height)) { - ScriptEvent var6 = new ScriptEvent(); - var6.widget = var0; - var6.args = var0.onResize; - Client.scriptEvents.addFirst(var6); - } - } } diff --git a/runescape-client/src/main/java/UrlRequest.java b/runescape-client/src/main/java/UrlRequest.java index 4224bd5eca..1ffa77d4d1 100644 --- a/runescape-client/src/main/java/UrlRequest.java +++ b/runescape-client/src/main/java/UrlRequest.java @@ -4,22 +4,27 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("er") +@ObfuscatedName("ez") @Implements("UrlRequest") public class UrlRequest { - @ObfuscatedName("dw") + @ObfuscatedName("m") + public static String field1947; + @ObfuscatedName("gb") + @Export("regionMapArchives") + static byte[][] regionMapArchives; + @ObfuscatedName("gv") @ObfuscatedSignature( - signature = "Lij;" + signature = "[Lln;" ) - @Export("archive13") - static Archive archive13; - @ObfuscatedName("a") + @Export("headIconPrayerSprites") + static Sprite[] headIconPrayerSprites; + @ObfuscatedName("u") @Export("url") final URL url; - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("isDone0") volatile boolean isDone0; - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("response0") volatile byte[] response0; @@ -27,23 +32,78 @@ public class UrlRequest { this.url = var1; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "(I)Z", - garbageValue = "-340522486" + garbageValue = "1603935718" ) @Export("isDone") public boolean isDone() { return this.isDone0; } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( signature = "(I)[B", - garbageValue = "-14894560" + garbageValue = "-66601461" ) @Export("getResponse") public byte[] getResponse() { return this.response0; } + + @ObfuscatedName("f") + @ObfuscatedSignature( + signature = "(Lkj;II)V", + garbageValue = "1138294820" + ) + @Export("updatePlayers") + static final void updatePlayers(PacketBuffer var0, int var1) { + int var2 = var0.offset; + Players.Players_pendingUpdateCount = 0; + GraphicsObject.method2041(var0); + + for (int var3 = 0; var3 < Players.Players_pendingUpdateCount; ++var3) { + int var4 = Players.Players_pendingUpdateIndices[var3]; + Player var5 = Client.players[var4]; + int var6 = var0.readUnsignedByte(); + if ((var6 & 4) != 0) { + var6 += var0.readUnsignedByte() << 8; + } + + Players.method2167(var0, var4, var5, var6); + } + + if (var0.offset - var2 != var1) { + throw new RuntimeException(var0.offset - var2 + " " + var1); + } + } + + @ObfuscatedName("h") + @ObfuscatedSignature( + signature = "(II)V", + garbageValue = "-791590790" + ) + public static void method3358(int var0) { + class197.field2411 = 1; + class197.musicTrackArchive = null; + UrlRequester.musicTrackGroupId = -1; + UserComparator7.musicTrackFileId = -1; + class197.musicTrackVolume = 0; + ArchiveLoader.musicTrackBoolean = false; + class335.field4014 = var0; + } + + @ObfuscatedName("kz") + @ObfuscatedSignature( + signature = "(Lhl;II)Ljava/lang/String;", + garbageValue = "-1934633021" + ) + static String method3361(Widget var0, int var1) { + if (!WorldMapManager.method651(MenuAction.getWidgetClickMask(var0), var1) && var0.onOp == null) { + return null; + } else { + return var0.actions != null && var0.actions.length > var1 && var0.actions[var1] != null && var0.actions[var1].trim().length() != 0 ? var0.actions[var1] : null; + } + } } diff --git a/runescape-client/src/main/java/UrlRequester.java b/runescape-client/src/main/java/UrlRequester.java index f260db0196..2e5b04c88b 100644 --- a/runescape-client/src/main/java/UrlRequester.java +++ b/runescape-client/src/main/java/UrlRequester.java @@ -11,25 +11,30 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ev") +@ObfuscatedName("ew") @Implements("UrlRequester") public class UrlRequester implements Runnable { - @ObfuscatedName("gn") - @Export("regionLandArchives") - static byte[][] regionLandArchives; - @ObfuscatedName("hb") + @ObfuscatedName("g") + @Export("SpriteBuffer_xOffsets") + static int[] SpriteBuffer_xOffsets; + @ObfuscatedName("h") @ObfuscatedGetter( - intValue = -65542583 + intValue = 1446688081 ) - @Export("cameraX") - static int cameraX; - @ObfuscatedName("a") + @Export("musicTrackGroupId") + public static int musicTrackGroupId; + @ObfuscatedName("ez") + @ObfuscatedGetter( + intValue = 2240241 + ) + static int field1940; + @ObfuscatedName("u") @Export("thread") final Thread thread; - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("isClosed") volatile boolean isClosed; - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("requests") Queue requests; @@ -40,10 +45,10 @@ public class UrlRequester implements Runnable { this.thread.start(); } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Ljava/net/URL;I)Ler;", - garbageValue = "575867579" + signature = "(Ljava/net/URL;I)Lez;", + garbageValue = "-1482865280" ) @Export("request") public UrlRequest request(URL var1) { @@ -55,10 +60,10 @@ public class UrlRequester implements Runnable { } } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "-1752528799" + garbageValue = "-1184631073" ) @Export("close") public void close() { @@ -121,349 +126,59 @@ public class UrlRequester implements Runnable { } } catch (Exception var17) { - User.RunException_sendStackTrace((String)null, var17); + Calendar.RunException_sendStackTrace((String)null, var17); } } } - @ObfuscatedName("a") + @ObfuscatedName("fn") @ObfuscatedSignature( - signature = "(ZB)V", - garbageValue = "70" + signature = "(Lhl;III)V", + garbageValue = "-311109271" ) - public static void method3428(boolean var0) { - if (NetCache.NetCache_socket != null) { - try { - Buffer var1 = new Buffer(4); - var1.writeByte(var0 ? 2 : 3); - var1.writeMedium(0); - NetCache.NetCache_socket.write(var1.array, 0, 4); - } catch (IOException var4) { - try { - NetCache.NetCache_socket.close(); - } catch (Exception var3) { + @Export("checkIfMinimapClicked") + static final void checkIfMinimapClicked(Widget var0, int var1, int var2) { + if (Client.minimapState == 0 || Client.minimapState == 3) { + if (!Client.isMenuOpen && (MouseHandler.MouseHandler_lastButton == 1 || !JagexCache.mouseCam && MouseHandler.MouseHandler_lastButton == 4)) { + SpriteMask var3 = var0.getSpriteMask(true); + if (var3 == null) { + return; } - ++NetCache.NetCache_ioExceptions; - NetCache.NetCache_socket = null; - } - - } - } - - @ObfuscatedName("t") - @ObfuscatedSignature( - signature = "(III)V", - garbageValue = "693068962" - ) - @Export("changeWorldSelectSorting") - static void changeWorldSelectSorting(int var0, int var1) { - int[] var2 = new int[4]; - int[] var3 = new int[4]; - var2[0] = var0; - var3[0] = var1; - int var4 = 1; - - for (int var5 = 0; var5 < 4; ++var5) { - if (World.World_sortOption1[var5] != var0) { - var2[var4] = World.World_sortOption1[var5]; - var3[var4] = World.World_sortOption2[var5]; - ++var4; - } - } - - World.World_sortOption1 = var2; - World.World_sortOption2 = var3; - class2.sortWorlds(Username.World_worlds, 0, Username.World_worlds.length - 1, World.World_sortOption1, World.World_sortOption2); - } - - @ObfuscatedName("h") - @ObfuscatedSignature( - signature = "(Lks;Lks;I)V", - garbageValue = "149989197" - ) - static void method3430(Font var0, Font var1) { - int var4; - int var5; - if (GrandExchangeEvent.worldSelectBackSprites == null) { - Archive var3 = GrandExchangeOfferUnitPriceComparator.archive8; - var4 = var3.getGroupId("sl_back"); - var5 = var3.getFileId(var4, ""); - Sprite[] var2 = class83.SpriteBuffer_getSpriteArray(var3, var4, var5); - GrandExchangeEvent.worldSelectBackSprites = var2; - } - - if (JagexCache.worldSelectFlagSprites == null) { - JagexCache.worldSelectFlagSprites = PlayerAppearance.method4160(GrandExchangeOfferUnitPriceComparator.archive8, "sl_flags", ""); - } - - if (StudioGame.worldSelectArrows == null) { - StudioGame.worldSelectArrows = PlayerAppearance.method4160(GrandExchangeOfferUnitPriceComparator.archive8, "sl_arrows", ""); - } - - if (Interpreter.worldSelectStars == null) { - Interpreter.worldSelectStars = PlayerAppearance.method4160(GrandExchangeOfferUnitPriceComparator.archive8, "sl_stars", ""); - } - - if (class288.worldSelectLeftSprite == null) { - class288.worldSelectLeftSprite = ClientPacket.SpriteBuffer_getIndexedSpriteByName(GrandExchangeOfferUnitPriceComparator.archive8, "leftarrow", ""); - } - - if (WorldMapSection2.worldSelectRightSprite == null) { - WorldMapSection2.worldSelectRightSprite = ClientPacket.SpriteBuffer_getIndexedSpriteByName(GrandExchangeOfferUnitPriceComparator.archive8, "rightarrow", ""); - } - - Rasterizer2D.Rasterizer2D_fillRectangle(Login.xPadding, 23, 765, 480, 0); - Rasterizer2D.Rasterizer2D_fillRectangleGradient(Login.xPadding, 0, 125, 23, 12425273, 9135624); - Rasterizer2D.Rasterizer2D_fillRectangleGradient(Login.xPadding + 125, 0, 640, 23, 5197647, 2697513); - var0.drawCentered("Select a world", Login.xPadding + 62, 15, 0, -1); - if (Interpreter.worldSelectStars != null) { - Interpreter.worldSelectStars[1].drawAt(Login.xPadding + 140, 1); - var1.draw("Members only world", Login.xPadding + 152, 10, 16777215, -1); - Interpreter.worldSelectStars[0].drawAt(Login.xPadding + 140, 12); - var1.draw("Free world", Login.xPadding + 152, 21, 16777215, -1); - } - - if (StudioGame.worldSelectArrows != null) { - int var22 = Login.xPadding + 280; - if (World.World_sortOption1[0] == 0 && World.World_sortOption2[0] == 0) { - StudioGame.worldSelectArrows[2].drawAt(var22, 4); - } else { - StudioGame.worldSelectArrows[0].drawAt(var22, 4); - } - - if (World.World_sortOption1[0] == 0 && World.World_sortOption2[0] == 1) { - StudioGame.worldSelectArrows[3].drawAt(var22 + 15, 4); - } else { - StudioGame.worldSelectArrows[1].drawAt(var22 + 15, 4); - } - - var0.draw("World", var22 + 32, 17, 16777215, -1); - int var23 = Login.xPadding + 390; - if (World.World_sortOption1[0] == 1 && World.World_sortOption2[0] == 0) { - StudioGame.worldSelectArrows[2].drawAt(var23, 4); - } else { - StudioGame.worldSelectArrows[0].drawAt(var23, 4); - } - - if (World.World_sortOption1[0] == 1 && World.World_sortOption2[0] == 1) { - StudioGame.worldSelectArrows[3].drawAt(var23 + 15, 4); - } else { - StudioGame.worldSelectArrows[1].drawAt(var23 + 15, 4); - } - - var0.draw("Players", var23 + 32, 17, 16777215, -1); - var4 = Login.xPadding + 500; - if (World.World_sortOption1[0] == 2 && World.World_sortOption2[0] == 0) { - StudioGame.worldSelectArrows[2].drawAt(var4, 4); - } else { - StudioGame.worldSelectArrows[0].drawAt(var4, 4); - } - - if (World.World_sortOption1[0] == 2 && World.World_sortOption2[0] == 1) { - StudioGame.worldSelectArrows[3].drawAt(var4 + 15, 4); - } else { - StudioGame.worldSelectArrows[1].drawAt(var4 + 15, 4); - } - - var0.draw("Location", var4 + 32, 17, 16777215, -1); - var5 = Login.xPadding + 610; - if (World.World_sortOption1[0] == 3 && World.World_sortOption2[0] == 0) { - StudioGame.worldSelectArrows[2].drawAt(var5, 4); - } else { - StudioGame.worldSelectArrows[0].drawAt(var5, 4); - } - - if (World.World_sortOption1[0] == 3 && World.World_sortOption2[0] == 1) { - StudioGame.worldSelectArrows[3].drawAt(var5 + 15, 4); - } else { - StudioGame.worldSelectArrows[1].drawAt(var5 + 15, 4); - } - - var0.draw("Type", var5 + 32, 17, 16777215, -1); - } - - Rasterizer2D.Rasterizer2D_fillRectangle(Login.xPadding + 708, 4, 50, 16, 0); - var1.drawCentered("Cancel", Login.xPadding + 708 + 25, 16, 16777215, -1); - Login.hoveredWorldIndex = -1; - if (GrandExchangeEvent.worldSelectBackSprites != null) { - byte var26 = 88; - byte var27 = 19; - var4 = 765 / (var26 + 1) - 1; - var5 = 480 / (var27 + 1); - - int var6; - int var7; - do { - var6 = var5; - var7 = var4; - if (var5 * (var4 - 1) >= World.World_count) { - --var4; - } - - if (var4 * (var5 - 1) >= World.World_count) { - --var5; - } - - if (var4 * (var5 - 1) >= World.World_count) { - --var5; - } - } while(var5 != var6 || var4 != var7); - - var6 = (765 - var26 * var4) / (var4 + 1); - if (var6 > 5) { - var6 = 5; - } - - var7 = (480 - var5 * var27) / (var5 + 1); - if (var7 > 5) { - var7 = 5; - } - - int var8 = (765 - var26 * var4 - var6 * (var4 - 1)) / 2; - int var9 = (480 - var5 * var27 - var7 * (var5 - 1)) / 2; - int var10 = (var5 + World.World_count - 1) / var5; - Login.worldSelectPagesCount = var10 - var4; - if (class288.worldSelectLeftSprite != null && Login.worldSelectPage > 0) { - class288.worldSelectLeftSprite.drawAt(8, FloorUnderlayDefinition.canvasHeight / 2 - class288.worldSelectLeftSprite.subHeight / 2); - } - - if (WorldMapSection2.worldSelectRightSprite != null && Login.worldSelectPage < Login.worldSelectPagesCount) { - WorldMapSection2.worldSelectRightSprite.drawAt(class286.canvasWidth - WorldMapSection2.worldSelectRightSprite.subWidth - 8, FloorUnderlayDefinition.canvasHeight / 2 - WorldMapSection2.worldSelectRightSprite.subHeight / 2); - } - - int var11 = var9 + 23; - int var12 = var8 + Login.xPadding; - int var13 = 0; - boolean var14 = false; - int var15 = Login.worldSelectPage; - - int var16; - for (var16 = var5 * var15; var16 < World.World_count && var15 - Login.worldSelectPage < var4; ++var16) { - World var24 = Username.World_worlds[var16]; - boolean var18 = true; - String var19 = Integer.toString(var24.population); - if (var24.population == -1) { - var19 = "OFF"; - var18 = false; - } else if (var24.population > 1980) { - var19 = "FULL"; - var18 = false; - } - - int var21 = 0; - byte var20; - if (var24.isBeta()) { - if (var24.isMembersOnly()) { - var20 = 7; - } else { - var20 = 6; - } - } else if (var24.isDeadman()) { - var21 = 16711680; - if (var24.isMembersOnly()) { - var20 = 5; - } else { - var20 = 4; - } - } else if (var24.method1887()) { - var20 = 8; - } else if (var24.isPvp()) { - if (var24.isMembersOnly()) { - var20 = 3; - } else { - var20 = 2; - } - } else if (var24.isMembersOnly()) { - var20 = 1; - } else { - var20 = 0; - } - - if (MouseHandler.MouseHandler_x >= var12 && MouseHandler.MouseHandler_y >= var11 && MouseHandler.MouseHandler_x < var12 + var26 && MouseHandler.MouseHandler_y < var27 + var11 && var18) { - Login.hoveredWorldIndex = var16; - GrandExchangeEvent.worldSelectBackSprites[var20].drawTransOverlayAt(var12, var11, 128, 16777215); - var14 = true; - } else { - GrandExchangeEvent.worldSelectBackSprites[var20].drawAt(var12, var11); - } - - if (JagexCache.worldSelectFlagSprites != null) { - JagexCache.worldSelectFlagSprites[(var24.isMembersOnly() ? 8 : 0) + var24.location].drawAt(var12 + 29, var11); - } - - var0.drawCentered(Integer.toString(var24.id), var12 + 15, var27 / 2 + var11 + 5, var21, -1); - var1.drawCentered(var19, var12 + 60, var27 / 2 + var11 + 5, 268435455, -1); - var11 = var11 + var7 + var27; - ++var13; - if (var13 >= var5) { - var11 = var9 + 23; - var12 = var12 + var6 + var26; - var13 = 0; - ++var15; + int var4 = MouseHandler.MouseHandler_lastPressedX - var1; + int var5 = MouseHandler.MouseHandler_lastPressedY - var2; + if (var3.contains(var4, var5)) { + var4 -= var3.width / 2; + var5 -= var3.height / 2; + int var6 = Client.camAngleY & 2047; + int var7 = Rasterizer3D.Rasterizer3D_sine[var6]; + int var8 = Rasterizer3D.Rasterizer3D_cosine[var6]; + int var9 = var7 * var5 + var8 * var4 >> 11; + int var10 = var5 * var8 - var4 * var7 >> 11; + int var11 = var9 + class215.localPlayer.x >> 7; + int var12 = class215.localPlayer.y - var10 >> 7; + PacketBufferNode var13 = ModelData0.getPacketBufferNode(ClientPacket.field2282, Client.packetWriter.isaacCipher); + var13.packetBuffer.writeByte(18); + var13.packetBuffer.method5636(class51.baseX * 64 + var11); + var13.packetBuffer.method5628(KeyHandler.KeyHandler_pressedKeys[82] ? (KeyHandler.KeyHandler_pressedKeys[81] ? 2 : 1) : 0); + var13.packetBuffer.method5636(VarcInt.baseY * 64 + var12); + var13.packetBuffer.writeByte(var4); + var13.packetBuffer.writeByte(var5); + var13.packetBuffer.writeShort(Client.camAngleY); + var13.packetBuffer.writeByte(57); + var13.packetBuffer.writeByte(0); + var13.packetBuffer.writeByte(0); + var13.packetBuffer.writeByte(89); + var13.packetBuffer.writeShort(class215.localPlayer.x); + var13.packetBuffer.writeShort(class215.localPlayer.y); + var13.packetBuffer.writeByte(63); + Client.packetWriter.addNode(var13); + Client.destinationX = var11; + Client.destinationY = var12; } } - if (var14) { - var16 = var1.stringWidth(Username.World_worlds[Login.hoveredWorldIndex].activity) + 6; - int var17 = var1.ascent + 8; - int var25 = MouseHandler.MouseHandler_y + 25; - if (var25 + var17 > 480) { - var25 = MouseHandler.MouseHandler_y - 25 - var17; - } - - Rasterizer2D.Rasterizer2D_fillRectangle(MouseHandler.MouseHandler_x - var16 / 2, var25, var16, var17, 16777120); - Rasterizer2D.Rasterizer2D_drawRectangle(MouseHandler.MouseHandler_x - var16 / 2, var25, var16, var17, 0); - var1.drawCentered(Username.World_worlds[Login.hoveredWorldIndex].activity, MouseHandler.MouseHandler_x, var25 + var1.ascent + 4, 0, -1); - } - } - - AbstractWorldMapData.rasterProvider.drawFull(0, 0); - } - - @ObfuscatedName("jd") - @ObfuscatedSignature( - signature = "(IIIIIII)V", - garbageValue = "710444841" - ) - static final void method3431(int var0, int var1, int var2, int var3, int var4, int var5) { - int var6 = var2 - var0; - int var7 = var3 - var1; - int var8 = var6 >= 0 ? var6 : -var6; - int var9 = var7 >= 0 ? var7 : -var7; - int var10 = var8; - if (var8 < var9) { - var10 = var9; - } - - if (var10 != 0) { - int var11 = (var6 << 16) / var10; - int var12 = (var7 << 16) / var10; - if (var12 <= var11) { - var11 = -var11; - } else { - var12 = -var12; - } - - int var13 = var5 * var12 >> 17; - int var14 = var5 * var12 + 1 >> 17; - int var15 = var5 * var11 >> 17; - int var16 = var5 * var11 + 1 >> 17; - var0 -= Rasterizer2D.Rasterizer2D_xClipStart; - var1 -= Rasterizer2D.Rasterizer2D_yClipStart; - int var17 = var0 + var13; - int var18 = var0 - var14; - int var19 = var0 + var6 - var14; - int var20 = var0 + var6 + var13; - int var21 = var15 + var1; - int var22 = var1 - var16; - int var23 = var7 + var1 - var16; - int var24 = var15 + var7 + var1; - Rasterizer3D.method3125(var17, var18, var19); - Rasterizer3D.method3134(var21, var22, var23, var17, var18, var19, var4); - Rasterizer3D.method3125(var17, var19, var20); - Rasterizer3D.method3134(var21, var23, var24, var17, var19, var20, var4); } } } diff --git a/runescape-client/src/main/java/User.java b/runescape-client/src/main/java/User.java index 322bc173bf..57164c4a6c 100644 --- a/runescape-client/src/main/java/User.java +++ b/runescape-client/src/main/java/User.java @@ -1,26 +1,20 @@ -import java.io.BufferedReader; -import java.io.DataInputStream; -import java.io.PrintWriter; -import java.io.StringReader; -import java.io.StringWriter; -import java.net.URL; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("jg") +@ObfuscatedName("jr") @Implements("User") public class User implements Comparable { - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Lju;" + signature = "Ljb;" ) @Export("username") Username username; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Lju;" + signature = "Ljb;" ) @Export("previousUsername") Username previousUsername; @@ -28,40 +22,40 @@ public class User implements Comparable { User() { } - @ObfuscatedName("u") + @ObfuscatedName("c") @ObfuscatedSignature( - signature = "(B)Lju;", - garbageValue = "-69" + signature = "(I)Ljb;", + garbageValue = "167641861" ) @Export("getUsername") public Username getUsername() { return this.username; } - @ObfuscatedName("ad") + @ObfuscatedName("s") @ObfuscatedSignature( - signature = "(I)Ljava/lang/String;", - garbageValue = "2090791766" + signature = "(B)Ljava/lang/String;", + garbageValue = "-1" ) @Export("getName") public String getName() { return this.username == null ? "" : this.username.getName(); } - @ObfuscatedName("ag") + @ObfuscatedName("t") @ObfuscatedSignature( signature = "(B)Ljava/lang/String;", - garbageValue = "2" + garbageValue = "1" ) @Export("getPreviousName") public String getPreviousName() { return this.previousUsername == null ? "" : this.previousUsername.getName(); } - @ObfuscatedName("ak") + @ObfuscatedName("m") @ObfuscatedSignature( - signature = "(Lju;Lju;I)V", - garbageValue = "-1125908358" + signature = "(Ljb;Ljb;I)V", + garbageValue = "1613117622" ) @Export("set") void set(Username var1, Username var2) { @@ -73,10 +67,10 @@ public class User implements Comparable { } } - @ObfuscatedName("av") + @ObfuscatedName("v") @ObfuscatedSignature( - signature = "(Ljg;I)I", - garbageValue = "105019827" + signature = "(Ljr;B)I", + garbageValue = "41" ) @Export("compareTo_user") public int compareTo_user(User var1) { @@ -87,93 +81,21 @@ public class User implements Comparable { return this.compareTo_user((User)var1); } - @ObfuscatedName("a") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Ljava/lang/String;Ljava/lang/Throwable;I)V", - garbageValue = "711675432" + signature = "(II)Lkc;", + garbageValue = "-1233621276" ) - @Export("RunException_sendStackTrace") - public static void RunException_sendStackTrace(String var0, Throwable var1) { - if (var1 != null) { - var1.printStackTrace(); - } else { - try { - String var2 = ""; - if (var1 != null) { - Throwable var4 = var1; - String var5; - if (var1 instanceof RunException) { - RunException var6 = (RunException)var1; - var5 = var6.message + " | "; - var4 = var6.throwable; - } else { - var5 = ""; - } + public static PrivateChatMode method5131(int var0) { + PrivateChatMode[] var1 = TileItemPile.method2810(); - StringWriter var18 = new StringWriter(); - PrintWriter var7 = new PrintWriter(var18); - var4.printStackTrace(var7); - var7.close(); - String var8 = var18.toString(); - BufferedReader var9 = new BufferedReader(new StringReader(var8)); - String var10 = var9.readLine(); - - label63: - while (true) { - while (true) { - String var11 = var9.readLine(); - if (var11 == null) { - var5 = var5 + "| " + var10; - var2 = var5; - break label63; - } - - int var12 = var11.indexOf(40); - int var13 = var11.indexOf(41, var12 + 1); - if (var12 >= 0 && var13 >= 0) { - String var14 = var11.substring(var12 + 1, var13); - int var15 = var14.indexOf(".java:"); - if (var15 >= 0) { - var14 = var14.substring(0, var15) + var14.substring(var15 + 5); - var5 = var5 + var14 + ' '; - continue; - } - - var11 = var11.substring(0, var12); - } - - var11 = var11.trim(); - var11 = var11.substring(var11.lastIndexOf(32) + 1); - var11 = var11.substring(var11.lastIndexOf(9) + 1); - var5 = var5 + var11 + ' '; - } - } - } - - if (var0 != null) { - if (var1 != null) { - var2 = var2 + " | "; - } - - var2 = var2 + var0; - } - - System.out.println("Error: " + var2); - var2 = var2.replace(':', '.'); - var2 = var2.replace('@', '_'); - var2 = var2.replace('&', '_'); - var2 = var2.replace('#', '_'); - if (RunException.RunException_applet == null) { - return; - } - - URL var3 = new URL(RunException.RunException_applet.getCodeBase(), "clienterror.ws?c=" + RunException.RunException_revision + "&u=" + RunException.localPlayerName + "&v1=" + TaskHandler.javaVendor + "&v2=" + TaskHandler.javaVersion + "&ct=" + TileItem.clientType + "&e=" + var2); - DataInputStream var17 = new DataInputStream(var3.openStream()); - var17.read(); - var17.close(); - } catch (Exception var16) { + for (int var2 = 0; var2 < var1.length; ++var2) { + PrivateChatMode var3 = var1[var2]; + if (var0 == var3.field3795) { + return var3; } - } + + return null; } } diff --git a/runescape-client/src/main/java/UserComparator1.java b/runescape-client/src/main/java/UserComparator1.java index 0ef343d045..434d3b1a3b 100644 --- a/runescape-client/src/main/java/UserComparator1.java +++ b/runescape-client/src/main/java/UserComparator1.java @@ -4,10 +4,10 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("la") +@ObfuscatedName("lu") @Implements("UserComparator1") public class UserComparator1 implements Comparator { - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("reversed") final boolean reversed; @@ -15,10 +15,10 @@ public class UserComparator1 implements Comparator { this.reversed = var1; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Ljg;Ljg;B)I", - garbageValue = "30" + signature = "(Ljr;Ljr;I)I", + garbageValue = "-1890181365" ) @Export("compare_bridged") int compare_bridged(User var1, User var2) { diff --git a/runescape-client/src/main/java/UserComparator10.java b/runescape-client/src/main/java/UserComparator10.java index 106d77c9aa..c05eaa001e 100644 --- a/runescape-client/src/main/java/UserComparator10.java +++ b/runescape-client/src/main/java/UserComparator10.java @@ -1,14 +1,35 @@ +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InvalidClassException; +import java.io.ObjectInputStream; +import java.io.OptionalDataException; +import java.io.StreamCorruptedException; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; +import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; +import net.runelite.rs.Reflection; -@ObfuscatedName("ej") +@ObfuscatedName("ed") @Implements("UserComparator10") public class UserComparator10 extends AbstractUserComparator { - @ObfuscatedName("i") - static int[][] field1964; - @ObfuscatedName("a") + @ObfuscatedName("ss") + @ObfuscatedSignature( + signature = "Lbs;" + ) + @Export("clientPreferences") + static ClientPreferences clientPreferences; + @ObfuscatedName("st") + @ObfuscatedGetter( + intValue = -2089079301 + ) + @Export("foundItemIdCount") + static int foundItemIdCount; + @ObfuscatedName("u") @Export("reversed") final boolean reversed; @@ -16,10 +37,10 @@ public class UserComparator10 extends AbstractUserComparator { this.reversed = var1; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Ljx;Ljx;I)I", - garbageValue = "251102733" + signature = "(Ljt;Ljt;S)I", + garbageValue = "-31573" ) @Export("compareBuddy") int compareBuddy(Buddy var1, Buddy var2) { @@ -34,39 +55,151 @@ public class UserComparator10 extends AbstractUserComparator { return this.compareBuddy((Buddy)var1, (Buddy)var2); } - @ObfuscatedName("a") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Lkc;Llr;B)Llr;", - garbageValue = "0" + signature = "(Lkj;B)V", + garbageValue = "-114" ) - @Export("readStringIntParameters") - static final IterableNodeHashTable readStringIntParameters(Buffer var0, IterableNodeHashTable var1) { - int var2 = var0.readUnsignedByte(); - int var3; - if (var1 == null) { - int var4 = var2 - 1; - var4 |= var4 >>> 1; - var4 |= var4 >>> 2; - var4 |= var4 >>> 4; - var4 |= var4 >>> 8; - var4 |= var4 >>> 16; - var3 = var4 + 1; - var1 = new IterableNodeHashTable(var3); - } + @Export("performReflectionCheck") + public static void performReflectionCheck(PacketBuffer var0) { + ReflectionCheck var1 = (ReflectionCheck)class96.reflectionChecks.last(); + if (var1 != null) { + int var2 = var0.offset; + var0.writeInt(var1.id); - for (var3 = 0; var3 < var2; ++var3) { - boolean var7 = var0.readUnsignedByte() == 1; - int var5 = var0.readMedium(); - Object var6; - if (var7) { - var6 = new ObjectNode(var0.readStringCp1252NullTerminated()); - } else { - var6 = new IntegerNode(var0.readInt()); + for (int var3 = 0; var3 < var1.size; ++var3) { + if (var1.creationErrors[var3] != 0) { + var0.writeByte(var1.creationErrors[var3]); + } else { + try { + int var4 = var1.operations[var3]; + Field var5; + int var6; + if (var4 == 0) { + var5 = var1.fields[var3]; + var6 = Reflection.getInt(var5, (Object)null); + var0.writeByte(0); + var0.writeInt(var6); + } else if (var4 == 1) { + var5 = var1.fields[var3]; + Reflection.setInt(var5, (Object)null, var1.intReplaceValues[var3]); + var0.writeByte(0); + } else if (var4 == 2) { + var5 = var1.fields[var3]; + var6 = var5.getModifiers(); + var0.writeByte(0); + var0.writeInt(var6); + } + + Method var25; + if (var4 != 3) { + if (var4 == 4) { + var25 = var1.methods[var3]; + var6 = var25.getModifiers(); + var0.writeByte(0); + var0.writeInt(var6); + } + } else { + var25 = var1.methods[var3]; + byte[][] var10 = var1.arguments[var3]; + Object[] var7 = new Object[var10.length]; + + for (int var8 = 0; var8 < var10.length; ++var8) { + ObjectInputStream var9 = new ObjectInputStream(new ByteArrayInputStream(var10[var8])); + var7[var8] = var9.readObject(); + } + + Object var11 = Reflection.invoke(var25, (Object)null, var7); + if (var11 == null) { + var0.writeByte(0); + } else if (var11 instanceof Number) { + var0.writeByte(1); + var0.writeLong(((Number)var11).longValue()); + } else if (var11 instanceof String) { + var0.writeByte(2); + var0.writeStringCp1252NullTerminated((String)var11); + } else { + var0.writeByte(4); + } + } + } catch (ClassNotFoundException var13) { + var0.writeByte(-10); + } catch (InvalidClassException var14) { + var0.writeByte(-11); + } catch (StreamCorruptedException var15) { + var0.writeByte(-12); + } catch (OptionalDataException var16) { + var0.writeByte(-13); + } catch (IllegalAccessException var17) { + var0.writeByte(-14); + } catch (IllegalArgumentException var18) { + var0.writeByte(-15); + } catch (InvocationTargetException var19) { + var0.writeByte(-16); + } catch (SecurityException var20) { + var0.writeByte(-17); + } catch (IOException var21) { + var0.writeByte(-18); + } catch (NullPointerException var22) { + var0.writeByte(-19); + } catch (Exception var23) { + var0.writeByte(-20); + } catch (Throwable var24) { + var0.writeByte(-21); + } + } } - var1.put((Node)var6, (long)var5); + var0.writeCrc(var2); + var1.remove(); } + } - return var1; + @ObfuscatedName("h") + @ObfuscatedSignature( + signature = "(Lbp;Lbp;IZB)I", + garbageValue = "12" + ) + @Export("compareWorlds") + static int compareWorlds(World var0, World var1, int var2, boolean var3) { + if (var2 == 1) { + int var4 = var0.population; + int var5 = var1.population; + if (!var3) { + if (var4 == -1) { + var4 = 2001; + } + + if (var5 == -1) { + var5 = 2001; + } + } + + return var4 - var5; + } else if (var2 == 2) { + return var0.location - var1.location; + } else if (var2 == 3) { + if (var0.activity.equals("-")) { + if (var1.activity.equals("-")) { + return 0; + } else { + return var3 ? -1 : 1; + } + } else if (var1.activity.equals("-")) { + return var3 ? 1 : -1; + } else { + return var0.activity.compareTo(var1.activity); + } + } else if (var2 == 4) { + return var0.method1785() ? (var1.method1785() ? 0 : 1) : (var1.method1785() ? -1 : 0); + } else if (var2 == 5) { + return var0.method1802() ? (var1.method1802() ? 0 : 1) : (var1.method1802() ? -1 : 0); + } else if (var2 == 6) { + return var0.isPvp() ? (var1.isPvp() ? 0 : 1) : (var1.isPvp() ? -1 : 0); + } else if (var2 == 7) { + return var0.isMembersOnly() ? (var1.isMembersOnly() ? 0 : 1) : (var1.isMembersOnly() ? -1 : 0); + } else { + return var0.id - var1.id; + } } } diff --git a/runescape-client/src/main/java/UserComparator2.java b/runescape-client/src/main/java/UserComparator2.java index 633b552095..da39273a63 100644 --- a/runescape-client/src/main/java/UserComparator2.java +++ b/runescape-client/src/main/java/UserComparator2.java @@ -1,3 +1,4 @@ +import java.io.File; import java.util.Comparator; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; @@ -7,7 +8,10 @@ import net.runelite.mapping.ObfuscatedSignature; @ObfuscatedName("lq") @Implements("UserComparator2") public class UserComparator2 implements Comparator { - @ObfuscatedName("a") + @ObfuscatedName("z") + @Export("cacheDir") + public static File cacheDir; + @ObfuscatedName("u") @Export("reversed") final boolean reversed; @@ -15,10 +19,10 @@ public class UserComparator2 implements Comparator { this.reversed = var1; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Ljg;Ljg;B)I", - garbageValue = "34" + signature = "(Ljr;Ljr;I)I", + garbageValue = "-583410330" ) @Export("compare_bridged") int compare_bridged(User var1, User var2) { diff --git a/runescape-client/src/main/java/UserComparator3.java b/runescape-client/src/main/java/UserComparator3.java index 06abbea3e1..4b0ea3027e 100644 --- a/runescape-client/src/main/java/UserComparator3.java +++ b/runescape-client/src/main/java/UserComparator3.java @@ -1,15 +1,18 @@ import net.runelite.mapping.Export; import net.runelite.mapping.Implements; +import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("fe") +@ObfuscatedName("fl") @Implements("UserComparator3") public class UserComparator3 extends AbstractUserComparator { - @ObfuscatedName("gf") - @Export("regionMapArchives") - static byte[][] regionMapArchives; - @ObfuscatedName("a") + @ObfuscatedName("qg") + @ObfuscatedGetter( + intValue = -1789609461 + ) + static int field1990; + @ObfuscatedName("u") @Export("reversed") final boolean reversed; @@ -17,10 +20,10 @@ public class UserComparator3 extends AbstractUserComparator { this.reversed = var1; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Ljx;Ljx;B)I", - garbageValue = "8" + signature = "(Ljt;Ljt;I)I", + garbageValue = "81177431" ) @Export("compareBuddy") int compareBuddy(Buddy var1, Buddy var2) { @@ -35,50 +38,185 @@ public class UserComparator3 extends AbstractUserComparator { return this.compareBuddy((Buddy)var1, (Buddy)var2); } - @ObfuscatedName("n") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(III)I", - garbageValue = "-673755666" + signature = "(III)Lhl;", + garbageValue = "2096565459" ) - public static int method3565(int var0, int var1) { - int var2; - for (var2 = 0; var1 > 0; --var1) { - var2 = var2 << 1 | var0 & 1; - var0 >>>= 1; + @Export("getWidgetChild") + public static Widget getWidgetChild(int var0, int var1) { + Widget var2 = Language.getWidget(var0); + if (var1 == -1) { + return var2; + } else { + return var2 != null && var2.children != null && var1 < var2.children.length ? var2.children[var1] : null; } - - return var2; } - @ObfuscatedName("i") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(ZB)V", - garbageValue = "-86" + signature = "(II)Z", + garbageValue = "438202516" ) - @Export("Login_promptCredentials") - static void Login_promptCredentials(boolean var0) { - Login.Login_response1 = ""; - Login.Login_response2 = "Enter your username/email & password."; - Login.Login_response3 = ""; - Login.loginIndex = 2; - if (var0) { - Login.Login_password = ""; - } - - if (Login.Login_username == null || Login.Login_username.length() <= 0) { - if (ScriptEvent.clientPreferences.rememberedUsername != null) { - Login.Login_username = ScriptEvent.clientPreferences.rememberedUsername; - Client.Login_isUsernameRemembered = true; + @Export("loadInterface") + public static boolean loadInterface(int var0) { + if (Widget.Widget_loadedInterfaces[var0]) { + return true; + } else if (!InvDefinition.Widget_archive.tryLoadGroup(var0)) { + return false; + } else { + int var1 = InvDefinition.Widget_archive.getGroupFileCount(var0); + if (var1 == 0) { + Widget.Widget_loadedInterfaces[var0] = true; + return true; } else { - Client.Login_isUsernameRemembered = false; + if (FloorDecoration.Widget_interfaceComponents[var0] == null) { + FloorDecoration.Widget_interfaceComponents[var0] = new Widget[var1]; + } + + for (int var2 = 0; var2 < var1; ++var2) { + if (FloorDecoration.Widget_interfaceComponents[var0][var2] == null) { + byte[] var3 = InvDefinition.Widget_archive.takeFile(var0, var2); + if (var3 != null) { + FloorDecoration.Widget_interfaceComponents[var0][var2] = new Widget(); + FloorDecoration.Widget_interfaceComponents[var0][var2].id = var2 + (var0 << 16); + if (var3[0] == -1) { + FloorDecoration.Widget_interfaceComponents[var0][var2].decode(new Buffer(var3)); + } else { + FloorDecoration.Widget_interfaceComponents[var0][var2].decodeLegacy(new Buffer(var3)); + } + } + } + } + + Widget.Widget_loadedInterfaces[var0] = true; + return true; + } + } + } + + @ObfuscatedName("jl") + @ObfuscatedSignature( + signature = "(II)Z", + garbageValue = "-1508425976" + ) + static boolean method3476(int var0) { + for (int var1 = 0; var1 < Client.field889; ++var1) { + if (Client.field865[var1] == var0) { + return true; } } - if (Client.Login_isUsernameRemembered && Login.Login_username != null && Login.Login_username.length() > 0) { - Login.currentLoginField = 1; - } else { - Login.currentLoginField = 0; - } + return false; + } + @ObfuscatedName("jq") + @ObfuscatedSignature( + signature = "(Lhl;IIB)V", + garbageValue = "13" + ) + @Export("clickWidget") + static final void clickWidget(Widget var0, int var1, int var2) { + if (Client.clickedWidget == null && !Client.isMenuOpen) { + if (var0 != null) { + Widget var5 = var0; + int var7 = MenuAction.getWidgetClickMask(var0); + int var6 = var7 >> 17 & 7; + int var8 = var6; + Widget var4; + int var9; + if (var6 == 0) { + var4 = null; + } else { + var9 = 0; + + while (true) { + if (var9 >= var8) { + var4 = var5; + break; + } + + var5 = Language.getWidget(var5.parentId); + if (var5 == null) { + var4 = null; + break; + } + + ++var9; + } + } + + Widget var10 = var4; + if (var4 == null) { + var10 = var0.parent; + } + + if (var10 != null) { + Client.clickedWidget = var0; + var5 = var0; + var7 = MenuAction.getWidgetClickMask(var0); + var6 = var7 >> 17 & 7; + var8 = var6; + if (var6 == 0) { + var4 = null; + } else { + var9 = 0; + + while (true) { + if (var9 >= var8) { + var4 = var5; + break; + } + + var5 = Language.getWidget(var5.parentId); + if (var5 == null) { + var4 = null; + break; + } + + ++var9; + } + } + + var10 = var4; + if (var4 == null) { + var10 = var0.parent; + } + + Client.clickedWidgetParent = var10; + Client.widgetClickX = var1; + Client.widgetClickY = var2; + class3.widgetDragDuration = 0; + Client.isDraggingWidget = false; + int var11 = Client.menuOptionsCount - 1; + if (var11 != -1) { + Tiles.tempMenuAction = new MenuAction(); + Tiles.tempMenuAction.param0 = Client.menuArguments1[var11]; + Tiles.tempMenuAction.param1 = Client.menuArguments2[var11]; + Tiles.tempMenuAction.opcode = Client.menuOpcodes[var11]; + Tiles.tempMenuAction.identifier = Client.menuIdentifiers[var11]; + Tiles.tempMenuAction.action = Client.menuActions[var11]; + } + + return; + } + } + + } + } + + @ObfuscatedName("kr") + @ObfuscatedSignature( + signature = "(Ljava/lang/String;I)V", + garbageValue = "65535" + ) + @Export("clanKickUser") + static final void clanKickUser(String var0) { + if (InterfaceParent.clanChat != null) { + PacketBufferNode var1 = ModelData0.getPacketBufferNode(ClientPacket.field2296, Client.packetWriter.isaacCipher); + var1.packetBuffer.writeByte(class173.stringCp1252NullTerminatedByteSize(var0)); + var1.packetBuffer.writeStringCp1252NullTerminated(var0); + Client.packetWriter.addNode(var1); + } } } diff --git a/runescape-client/src/main/java/UserComparator4.java b/runescape-client/src/main/java/UserComparator4.java index 9609031010..f2a45008d8 100644 --- a/runescape-client/src/main/java/UserComparator4.java +++ b/runescape-client/src/main/java/UserComparator4.java @@ -4,13 +4,10 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ec") +@ObfuscatedName("en") @Implements("UserComparator4") public class UserComparator4 implements Comparator { - @ObfuscatedName("sj") - @Export("foundItemIds") - static short[] foundItemIds; - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("reversed") final boolean reversed; @@ -18,40 +15,21 @@ public class UserComparator4 implements Comparator { this.reversed = var1; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Ljx;Ljx;I)I", - garbageValue = "1036024151" + signature = "(Ljt;Ljt;I)I", + garbageValue = "-955614748" ) @Export("compare_bridged") int compare_bridged(Buddy var1, Buddy var2) { return this.reversed ? var1.int2 - var2.int2 : var2.int2 - var1.int2; } - public int compare(Object var1, Object var2) { - return this.compare_bridged((Buddy)var1, (Buddy)var2); - } - public boolean equals(Object var1) { return super.equals(var1); } - @ObfuscatedName("n") - @ObfuscatedSignature( - signature = "(I)I", - garbageValue = "-616459830" - ) - public static int method3502() { - return ++MouseHandler.MouseHandler_idleCycles - 1; - } - - @ObfuscatedName("fe") - @ObfuscatedSignature( - signature = "(I)Llo;", - garbageValue = "1928339538" - ) - @Export("getWorldMap") - static WorldMap getWorldMap() { - return Login.worldMap; + public int compare(Object var1, Object var2) { + return this.compare_bridged((Buddy)var1, (Buddy)var2); } } diff --git a/runescape-client/src/main/java/UserComparator5.java b/runescape-client/src/main/java/UserComparator5.java index 077585d5d2..10b42caa4d 100644 --- a/runescape-client/src/main/java/UserComparator5.java +++ b/runescape-client/src/main/java/UserComparator5.java @@ -3,10 +3,10 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ft") +@ObfuscatedName("fe") @Implements("UserComparator5") public class UserComparator5 extends AbstractUserComparator { - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("reversed") final boolean reversed; @@ -14,10 +14,10 @@ public class UserComparator5 extends AbstractUserComparator { this.reversed = var1; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Ljx;Ljx;I)I", - garbageValue = "1570722017" + signature = "(Ljt;Ljt;I)I", + garbageValue = "1252723685" ) @Export("compareBuddy") int compareBuddy(Buddy var1, Buddy var2) { @@ -36,12 +36,116 @@ public class UserComparator5 extends AbstractUserComparator { return this.compareBuddy((Buddy)var1, (Buddy)var2); } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(IB)I", - garbageValue = "-67" + signature = "(Lhf;IIB)[Lln;", + garbageValue = "0" ) - public static int method3551(int var0) { - return var0 >> 11 & 63; + @Export("SpriteBuffer_getSpriteArray") + public static Sprite[] SpriteBuffer_getSpriteArray(AbstractArchive var0, int var1, int var2) { + if (!GraphicsObject.method2030(var0, var1, var2)) { + return null; + } else { + Sprite[] var4 = new Sprite[class325.SpriteBuffer_spriteCount]; + + for (int var5 = 0; var5 < class325.SpriteBuffer_spriteCount; ++var5) { + Sprite var6 = var4[var5] = new Sprite(); + var6.width = class325.SpriteBuffer_spriteWidth; + var6.height = UserComparator9.SpriteBuffer_spriteHeight; + var6.xOffset = UrlRequester.SpriteBuffer_xOffsets[var5]; + var6.yOffset = class216.SpriteBuffer_yOffsets[var5]; + var6.subWidth = class325.SpriteBuffer_spriteWidths[var5]; + var6.subHeight = VarcInt.SpriteBuffer_spriteHeights[var5]; + int var7 = var6.subWidth * var6.subHeight; + byte[] var8 = FillMode.SpriteBuffer_pixels[var5]; + var6.pixels = new int[var7]; + + for (int var9 = 0; var9 < var7; ++var9) { + var6.pixels[var9] = class325.SpriteBuffer_spritePalette[var8[var9] & 255]; + } + } + + PcmPlayer.method2510(); + return var4; + } + } + + @ObfuscatedName("ae") + @ObfuscatedSignature( + signature = "([BIII)I", + garbageValue = "1975760321" + ) + public static int method3467(byte[] var0, int var1, int var2) { + int var3 = -1; + + for (int var4 = var1; var4 < var2; ++var4) { + var3 = var3 >>> 8 ^ Buffer.crc32Table[(var3 ^ var0[var4]) & 255]; + } + + var3 = ~var3; + return var3; + } + + @ObfuscatedName("fb") + @ObfuscatedSignature( + signature = "(Lbt;B)V", + garbageValue = "4" + ) + static final void method3461(Actor var0) { + int var1 = var0.field934 - Client.cycle; + int var2 = var0.field946 * 128 + var0.field938 * 64; + int var3 = var0.field979 * 128 + var0.field938 * 64; + var0.x += (var2 - var0.x) / var1; + var0.y += (var3 - var0.y) / var1; + var0.field976 = 0; + var0.orientation = var0.field983; + } + + @ObfuscatedName("ic") + @ObfuscatedSignature( + signature = "(ILjava/lang/String;I)V", + garbageValue = "-165860818" + ) + static void method3466(int var0, String var1) { + int var2 = Players.Players_count; + int[] var3 = Players.Players_indices; + boolean var4 = false; + Username var5 = new Username(var1, WorldMapLabelSize.loginType); + + for (int var6 = 0; var6 < var2; ++var6) { + Player var7 = Client.players[var3[var6]]; + if (var7 != null && var7 != class215.localPlayer && var7.username != null && var7.username.equals(var5)) { + PacketBufferNode var8; + if (var0 == 1) { + var8 = ModelData0.getPacketBufferNode(ClientPacket.field2231, Client.packetWriter.isaacCipher); + var8.packetBuffer.method5598(0); + var8.packetBuffer.method5613(var3[var6]); + Client.packetWriter.addNode(var8); + } else if (var0 == 4) { + var8 = ModelData0.getPacketBufferNode(ClientPacket.field2267, Client.packetWriter.isaacCipher); + var8.packetBuffer.method5613(var3[var6]); + var8.packetBuffer.writeByte(0); + Client.packetWriter.addNode(var8); + } else if (var0 == 6) { + var8 = ModelData0.getPacketBufferNode(ClientPacket.field2241, Client.packetWriter.isaacCipher); + var8.packetBuffer.method5628(0); + var8.packetBuffer.method5636(var3[var6]); + Client.packetWriter.addNode(var8); + } else if (var0 == 7) { + var8 = ModelData0.getPacketBufferNode(ClientPacket.field2251, Client.packetWriter.isaacCipher); + var8.packetBuffer.writeShort(var3[var6]); + var8.packetBuffer.writeByte(0); + Client.packetWriter.addNode(var8); + } + + var4 = true; + break; + } + } + + if (!var4) { + GrandExchangeOfferAgeComparator.addGameMessage(4, "", "Unable to find " + var1); + } + } } diff --git a/runescape-client/src/main/java/UserComparator6.java b/runescape-client/src/main/java/UserComparator6.java index 6bb63577bd..d31b3371b5 100644 --- a/runescape-client/src/main/java/UserComparator6.java +++ b/runescape-client/src/main/java/UserComparator6.java @@ -3,16 +3,10 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("fi") +@ObfuscatedName("fv") @Implements("UserComparator6") public class UserComparator6 extends AbstractUserComparator { - @ObfuscatedName("k") - @ObfuscatedSignature( - signature = "Lho;" - ) - @Export("NetCache_currentResponse") - public static NetFileRequest NetCache_currentResponse; - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("reversed") final boolean reversed; @@ -20,10 +14,10 @@ public class UserComparator6 extends AbstractUserComparator { this.reversed = var1; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Ljx;Ljx;B)I", - garbageValue = "67" + signature = "(Ljt;Ljt;B)I", + garbageValue = "-50" ) @Export("compareBuddy") int compareBuddy(Buddy var1, Buddy var2) { @@ -38,13 +32,58 @@ public class UserComparator6 extends AbstractUserComparator { return this.compareBuddy((Buddy)var1, (Buddy)var2); } - @ObfuscatedName("bx") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Ljava/lang/String;I)I", - garbageValue = "-1069282044" + signature = "(Lhf;III)Llm;", + garbageValue = "2030832414" ) - @Export("stringCp1252NullTerminatedByteSize") - public static int stringCp1252NullTerminatedByteSize(String var0) { - return var0.length() + 1; + static IndexedSprite method3491(AbstractArchive var0, int var1, int var2) { + return !GraphicsObject.method2030(var0, var1, var2) ? null : GrandExchangeOfferAgeComparator.method172(); + } + + @ObfuscatedName("u") + @ObfuscatedSignature( + signature = "(Lkj;I)V", + garbageValue = "1502929201" + ) + @Export("updatePlayer") + static final void updatePlayer(PacketBuffer var0) { + var0.importIndex(); + int var1 = Client.localPlayerIndex; + Player var2 = class215.localPlayer = Client.players[var1] = new Player(); + var2.index = var1; + int var3 = var0.readBits(30); + byte var4 = (byte)(var3 >> 28); + int var5 = var3 >> 14 & 16383; + int var6 = var3 & 16383; + var2.pathX[0] = var5 - class51.baseX * 64; + var2.x = (var2.pathX[0] << 7) + (var2.transformedSize() << 6); + var2.pathY[0] = var6 - VarcInt.baseY * 64; + var2.y = (var2.pathY[0] << 7) + (var2.transformedSize() << 6); + ClientPacket.Client_plane = var2.plane = var4; + if (Players.field1248[var1] != null) { + var2.read(Players.field1248[var1]); + } + + Players.Players_count = 0; + Players.Players_indices[++Players.Players_count - 1] = var1; + Players.field1246[var1] = 0; + Players.Players_emptyIdxCount = 0; + + for (int var7 = 1; var7 < 2048; ++var7) { + if (var1 != var7) { + int var8 = var0.readBits(18); + int var9 = var8 >> 16; + int var10 = var8 >> 8 & 597; + int var11 = var8 & 597; + Players.Players_regions[var7] = (var10 << 14) + var11 + (var9 << 28); + Players.Players_orientations[var7] = 0; + Players.Players_targetIndices[var7] = -1; + Players.Players_emptyIndices[++Players.Players_emptyIdxCount - 1] = var7; + Players.field1246[var7] = 0; + } + } + + var0.exportIndex(); } } diff --git a/runescape-client/src/main/java/UserComparator7.java b/runescape-client/src/main/java/UserComparator7.java index ed05849b80..27f9022833 100644 --- a/runescape-client/src/main/java/UserComparator7.java +++ b/runescape-client/src/main/java/UserComparator7.java @@ -1,12 +1,19 @@ import net.runelite.mapping.Export; import net.runelite.mapping.Implements; +import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("el") +@ObfuscatedName("eq") @Implements("UserComparator7") public class UserComparator7 extends AbstractUserComparator { - @ObfuscatedName("a") + @ObfuscatedName("y") + @ObfuscatedGetter( + intValue = 1896521377 + ) + @Export("musicTrackFileId") + public static int musicTrackFileId; + @ObfuscatedName("u") @Export("reversed") final boolean reversed; @@ -14,10 +21,10 @@ public class UserComparator7 extends AbstractUserComparator { this.reversed = var1; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Ljx;Ljx;I)I", - garbageValue = "249143808" + signature = "(Ljt;Ljt;I)I", + garbageValue = "2133624016" ) @Export("compareBuddy") int compareBuddy(Buddy var1, Buddy var2) { diff --git a/runescape-client/src/main/java/UserComparator8.java b/runescape-client/src/main/java/UserComparator8.java index e44ed007ea..1bababc293 100644 --- a/runescape-client/src/main/java/UserComparator8.java +++ b/runescape-client/src/main/java/UserComparator8.java @@ -1,25 +1,17 @@ import net.runelite.mapping.Export; import net.runelite.mapping.Implements; -import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ez") +@ObfuscatedName("es") @Implements("UserComparator8") public class UserComparator8 extends AbstractUserComparator { - @ObfuscatedName("m") + @ObfuscatedName("bd") @ObfuscatedSignature( - signature = "Llw;" + signature = "Lhe;" ) - @Export("options_buttons_0Sprite") - static IndexedSprite options_buttons_0Sprite; - @ObfuscatedName("fa") - @ObfuscatedGetter( - intValue = 1075800505 - ) - @Export("baseX") - static int baseX; - @ObfuscatedName("a") + static StudioGame field1973; + @ObfuscatedName("u") @Export("reversed") final boolean reversed; @@ -27,10 +19,10 @@ public class UserComparator8 extends AbstractUserComparator { this.reversed = var1; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Ljx;Ljx;I)I", - garbageValue = "-2099102147" + signature = "(Ljt;Ljt;B)I", + garbageValue = "115" ) @Export("compareBuddy") int compareBuddy(Buddy var1, Buddy var2) { @@ -49,19 +41,69 @@ public class UserComparator8 extends AbstractUserComparator { return this.compareBuddy((Buddy)var1, (Buddy)var2); } - @ObfuscatedName("c") - @Export("Entity_unpackID") - public static int Entity_unpackID(long var0) { - return (int)(var0 >>> 17 & 4294967295L); - } - - @ObfuscatedName("d") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(CI)Z", - garbageValue = "-1252421563" + signature = "(Ljava/lang/CharSequence;IZB)I", + garbageValue = "69" ) - @Export("isAlphaNumeric") - public static boolean isAlphaNumeric(char var0) { - return var0 >= '0' && var0 <= '9' || var0 >= 'A' && var0 <= 'Z' || var0 >= 'a' && var0 <= 'z'; + @Export("parseIntCustomRadix") + public static int parseIntCustomRadix(CharSequence var0, int var1, boolean var2) { + if (var1 >= 2 && var1 <= 36) { + boolean var3 = false; + boolean var4 = false; + int var5 = 0; + int var6 = var0.length(); + + for (int var7 = 0; var7 < var6; ++var7) { + char var8 = var0.charAt(var7); + if (var7 == 0) { + if (var8 == '-') { + var3 = true; + continue; + } + + if (var8 == '+') { + continue; + } + } + + int var10; + if (var8 >= '0' && var8 <= '9') { + var10 = var8 - '0'; + } else if (var8 >= 'A' && var8 <= 'Z') { + var10 = var8 - '7'; + } else { + if (var8 < 'a' || var8 > 'z') { + throw new NumberFormatException(); + } + + var10 = var8 - 'W'; + } + + if (var10 >= var1) { + throw new NumberFormatException(); + } + + if (var3) { + var10 = -var10; + } + + int var9 = var10 + var5 * var1; + if (var9 / var1 != var5) { + throw new NumberFormatException(); + } + + var5 = var9; + var4 = true; + } + + if (!var4) { + throw new NumberFormatException(); + } else { + return var5; + } + } else { + throw new IllegalArgumentException("" + var1); + } } } diff --git a/runescape-client/src/main/java/UserComparator9.java b/runescape-client/src/main/java/UserComparator9.java index 9fa8b510e9..face8252b5 100644 --- a/runescape-client/src/main/java/UserComparator9.java +++ b/runescape-client/src/main/java/UserComparator9.java @@ -1,18 +1,30 @@ +import java.io.IOException; +import java.lang.management.GarbageCollectorMXBean; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; +import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ey") +@ObfuscatedName("eb") @Implements("UserComparator9") public class UserComparator9 extends AbstractUserComparator { - @ObfuscatedName("l") - @ObfuscatedSignature( - signature = "Llw;" + @ObfuscatedName("b") + @ObfuscatedGetter( + intValue = -614413985 ) - @Export("titlebuttonSprite") - static IndexedSprite titlebuttonSprite; - @ObfuscatedName("a") + @Export("SpriteBuffer_spriteHeight") + static int SpriteBuffer_spriteHeight; + @ObfuscatedName("al") + @Export("garbageCollector") + static GarbageCollectorMXBean garbageCollector; + @ObfuscatedName("dy") + @ObfuscatedSignature( + signature = "Lij;" + ) + @Export("archive18") + static Archive archive18; + @ObfuscatedName("u") @Export("reversed") final boolean reversed; @@ -20,10 +32,10 @@ public class UserComparator9 extends AbstractUserComparator { this.reversed = var1; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Ljx;Ljx;B)I", - garbageValue = "-80" + signature = "(Ljt;Ljt;B)I", + garbageValue = "-1" ) @Export("compareBuddy") int compareBuddy(Buddy var1, Buddy var2) { @@ -38,47 +50,670 @@ public class UserComparator9 extends AbstractUserComparator { return this.compareBuddy((Buddy)var1, (Buddy)var2); } - @ObfuscatedName("a") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(II)I", - garbageValue = "-728098315" + signature = "(Lkn;ZB)V", + garbageValue = "-115" ) - @Export("getVarbit") - public static int getVarbit(int var0) { - VarbitDefinition var2 = (VarbitDefinition)VarbitDefinition.VarbitDefinition_cached.get((long)var0); - VarbitDefinition var1; - if (var2 != null) { - var1 = var2; - } else { - byte[] var7 = VarbitDefinition.VarbitDefinition_archive.takeFile(14, var0); - var2 = new VarbitDefinition(); - if (var7 != null) { - var2.decode(new Buffer(var7)); + public static void method3436(AbstractSocket var0, boolean var1) { + if (NetCache.NetCache_socket != null) { + try { + NetCache.NetCache_socket.close(); + } catch (Exception var8) { } - VarbitDefinition.VarbitDefinition_cached.put(var2, (long)var0); - var1 = var2; + NetCache.NetCache_socket = null; } - int var3 = var1.baseVar; - int var4 = var1.startBit; - int var5 = var1.endBit; - int var6 = Varps.Varps_masks[var5 - var4]; - return Varps.Varps_main[var3] >> var4 & var6; + NetCache.NetCache_socket = var0; + Buffer var2; + if (NetCache.NetCache_socket != null) { + try { + var2 = new Buffer(4); + var2.writeByte(var1 ? 2 : 3); + var2.writeMedium(0); + NetCache.NetCache_socket.write(var2.array, 0, 4); + } catch (IOException var7) { + try { + NetCache.NetCache_socket.close(); + } catch (Exception var6) { + } + + ++NetCache.NetCache_ioExceptions; + NetCache.NetCache_socket = null; + } + } + + NetCache.NetCache_responseHeaderBuffer.offset = 0; + NetCache.NetCache_currentResponse = null; + class32.NetCache_responseArchiveBuffer = null; + NetCache.field3188 = 0; + + while (true) { + NetFileRequest var9 = (NetFileRequest)NetCache.NetCache_pendingPriorityResponses.first(); + if (var9 == null) { + while (true) { + var9 = (NetFileRequest)NetCache.NetCache_pendingResponses.first(); + if (var9 == null) { + if (NetCache.field3184 != 0) { + try { + var2 = new Buffer(4); + var2.writeByte(4); + var2.writeByte(NetCache.field3184); + var2.writeShort(0); + NetCache.NetCache_socket.write(var2.array, 0, 4); + } catch (IOException var5) { + try { + NetCache.NetCache_socket.close(); + } catch (Exception var4) { + } + + ++NetCache.NetCache_ioExceptions; + NetCache.NetCache_socket = null; + } + } + + NetCache.NetCache_loadTime = 0; + NetCache.field3171 = TaskHandler.currentTimeMillis(); + return; + } + + NetCache.NetCache_pendingWritesQueue.addLast(var9); + NetCache.NetCache_pendingWrites.put(var9, var9.key); + ++NetCache.NetCache_pendingWritesCount; + --NetCache.NetCache_pendingResponsesCount; + } + } + + NetCache.NetCache_pendingPriorityWrites.put(var9, var9.key); + ++NetCache.NetCache_pendingPriorityWritesCount; + --NetCache.NetCache_pendingPriorityResponsesCount; + } } - @ObfuscatedName("lc") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Ljava/lang/String;S)V", - garbageValue = "11607" + signature = "(II)[B", + garbageValue = "1705481710" ) - @Export("clanKickUser") - static final void clanKickUser(String var0) { - if (class4.clanChat != null) { - PacketBufferNode var1 = SoundSystem.getPacketBufferNode(ClientPacket.field2195, Client.packetWriter.isaacCipher); - var1.packetBuffer.writeByte(UserComparator6.stringCp1252NullTerminatedByteSize(var0)); - var1.packetBuffer.writeStringCp1252NullTerminated(var0); - Client.packetWriter.addNode(var1); + @Export("ByteArrayPool_getArray") + public static synchronized byte[] ByteArrayPool_getArray(int var0) { + return ByteArrayPool.ByteArrayPool_getArrayBool(var0, false); + } + + @ObfuscatedName("aj") + @ObfuscatedSignature( + signature = "(IB)V", + garbageValue = "33" + ) + @Export("runWidgetOnLoadListener") + static void runWidgetOnLoadListener(int var0) { + if (var0 != -1) { + if (UserComparator3.loadInterface(var0)) { + Widget[] var1 = FloorDecoration.Widget_interfaceComponents[var0]; + + for (int var2 = 0; var2 < var1.length; ++var2) { + Widget var3 = var1[var2]; + if (var3.onLoad != null) { + ScriptEvent var4 = new ScriptEvent(); + var4.widget = var3; + var4.args = var3.onLoad; + GrandExchangeOfferNameComparator.runScript(var4, 5000000); + } + } + + } } } + + @ObfuscatedName("jo") + @ObfuscatedSignature( + signature = "([Lhl;IIIIIIIB)V", + garbageValue = "-75" + ) + @Export("updateInterface") + static final void updateInterface(Widget[] var0, int var1, int var2, int var3, int var4, int var5, int var6, int var7) { + for (int var8 = 0; var8 < var0.length; ++var8) { + Widget var9 = var0[var8]; + if (var9 != null && var9.parentId == var1 && (!var9.isIf3 || var9.type == 0 || var9.hasListener || MenuAction.getWidgetClickMask(var9) != 0 || var9 == Client.clickedWidgetParent || var9.contentType == 1338)) { + if (var9.isIf3) { + if (AbstractByteArrayCopier.isComponentHidden(var9)) { + continue; + } + } else if (var9.type == 0 && var9 != class185.mousedOverWidgetIf1 && AbstractByteArrayCopier.isComponentHidden(var9)) { + continue; + } + + int var10 = var9.x + var6; + int var11 = var7 + var9.y; + int var12; + int var13; + int var14; + int var15; + int var17; + int var18; + if (var9.type == 2) { + var12 = var2; + var13 = var3; + var14 = var4; + var15 = var5; + } else { + int var16; + if (var9.type == 9) { + var16 = var10; + var17 = var11; + var18 = var10 + var9.width; + int var19 = var11 + var9.height; + if (var18 < var10) { + var16 = var18; + var18 = var10; + } + + if (var19 < var11) { + var17 = var19; + var19 = var11; + } + + ++var18; + ++var19; + var12 = var16 > var2 ? var16 : var2; + var13 = var17 > var3 ? var17 : var3; + var14 = var18 < var4 ? var18 : var4; + var15 = var19 < var5 ? var19 : var5; + } else { + var16 = var10 + var9.width; + var17 = var11 + var9.height; + var12 = var10 > var2 ? var10 : var2; + var13 = var11 > var3 ? var11 : var3; + var14 = var16 < var4 ? var16 : var4; + var15 = var17 < var5 ? var17 : var5; + } + } + + if (var9 == Client.clickedWidget) { + Client.field823 = true; + Client.field808 = var10; + Client.field825 = var11; + } + + boolean var32 = false; + if (var9.field2651) { + switch(Client.field804) { + case 0: + var32 = true; + case 1: + default: + break; + case 2: + if (Client.field805 == var9.id >>> 16) { + var32 = true; + } + break; + case 3: + if (var9.id == Client.field805) { + var32 = true; + } + } + } + + if (var32 || !var9.isIf3 || var12 < var14 && var13 < var15) { + if (var9.isIf3) { + ScriptEvent var26; + if (var9.noClickThrough) { + if (MouseHandler.MouseHandler_x >= var12 && MouseHandler.MouseHandler_y >= var13 && MouseHandler.MouseHandler_x < var14 && MouseHandler.MouseHandler_y < var15) { + for (var26 = (ScriptEvent)Client.scriptEvents.last(); var26 != null; var26 = (ScriptEvent)Client.scriptEvents.previous()) { + if (var26.isMouseInputEvent) { + var26.remove(); + var26.widget.containsMouse = false; + } + } + + if (class3.widgetDragDuration == 0) { + Client.clickedWidget = null; + Client.clickedWidgetParent = null; + } + + if (!Client.isMenuOpen) { + class2.addCancelMenuEntry(); + } + } + } else if (var9.noScrollThrough && MouseHandler.MouseHandler_x >= var12 && MouseHandler.MouseHandler_y >= var13 && MouseHandler.MouseHandler_x < var14 && MouseHandler.MouseHandler_y < var15) { + for (var26 = (ScriptEvent)Client.scriptEvents.last(); var26 != null; var26 = (ScriptEvent)Client.scriptEvents.previous()) { + if (var26.isMouseInputEvent && var26.widget.onScroll == var26.args) { + var26.remove(); + } + } + } + } + + var17 = MouseHandler.MouseHandler_x; + var18 = MouseHandler.MouseHandler_y; + if (MouseHandler.MouseHandler_lastButton != 0) { + var17 = MouseHandler.MouseHandler_lastPressedX; + var18 = MouseHandler.MouseHandler_lastPressedY; + } + + boolean var33 = var17 >= var12 && var18 >= var13 && var17 < var14 && var18 < var15; + if (var9.contentType == 1337) { + if (!Client.isLoading && !Client.isMenuOpen && var33) { + Varcs.addSceneMenuOptions(var17, var18, var12, var13); + } + } else if (var9.contentType == 1338) { + UrlRequester.checkIfMinimapClicked(var9, var10, var11); + } else { + if (var9.contentType == 1400) { + WorldMapRegion.worldMap.onCycle(MouseHandler.MouseHandler_x, MouseHandler.MouseHandler_y, var33, var10, var11, var9.width, var9.height); + } + + if (!Client.isMenuOpen && var33) { + if (var9.contentType == 1400) { + WorldMapRegion.worldMap.addElementMenuOptions(var10, var11, var9.width, var9.height, var17, var18); + } else { + PlayerAppearance.method4079(var9, var17 - var10, var18 - var11); + } + } + + boolean var21; + int var23; + if (var32) { + for (int var20 = 0; var20 < var9.field2592.length; ++var20) { + var21 = false; + boolean var22 = false; + if (!var21 && var9.field2592[var20] != null) { + for (var23 = 0; var23 < var9.field2592[var20].length; ++var23) { + boolean var24 = false; + if (var9.field2695 != null) { + var24 = KeyHandler.KeyHandler_pressedKeys[var9.field2592[var20][var23]]; + } + + if (UserComparator3.method3476(var9.field2592[var20][var23]) || var24) { + var21 = true; + if (var9.field2695 != null && var9.field2695[var20] > Client.cycle) { + break; + } + + byte var25 = var9.field2653[var20][var23]; + if (var25 == 0 || ((var25 & 8) == 0 || !KeyHandler.KeyHandler_pressedKeys[86] && !KeyHandler.KeyHandler_pressedKeys[82] && !KeyHandler.KeyHandler_pressedKeys[81]) && ((var25 & 2) == 0 || KeyHandler.KeyHandler_pressedKeys[86]) && ((var25 & 1) == 0 || KeyHandler.KeyHandler_pressedKeys[82]) && ((var25 & 4) == 0 || KeyHandler.KeyHandler_pressedKeys[81])) { + var22 = true; + break; + } + } + } + } + + if (var22) { + if (var20 < 10) { + WorldMapData_1.widgetDefaultMenuAction(var20 + 1, var9.id, var9.childIndex, var9.itemId, ""); + } else if (var20 == 10) { + Actor.Widget_runOnTargetLeave(); + TextureProvider.selectSpell(var9.id, var9.childIndex, Client.method1655(MenuAction.getWidgetClickMask(var9)), var9.itemId); + Client.selectedSpellActionName = LoginPacket.method3662(var9); + if (Client.selectedSpellActionName == null) { + Client.selectedSpellActionName = "null"; + } + + Client.selectedSpellName = var9.dataText + class222.colorStartTag(16777215); + } + + var23 = var9.field2654[var20]; + if (var9.field2695 == null) { + var9.field2695 = new int[var9.field2592.length]; + } + + if (var9.field2655 == null) { + var9.field2655 = new int[var9.field2592.length]; + } + + if (var23 != 0) { + if (var9.field2695[var20] == 0) { + var9.field2695[var20] = var23 + Client.cycle + var9.field2655[var20]; + } else { + var9.field2695[var20] = var23 + Client.cycle; + } + } else { + var9.field2695[var20] = Integer.MAX_VALUE; + } + } + + if (!var21 && var9.field2695 != null) { + var9.field2695[var20] = 0; + } + } + } + + if (var9.isIf3) { + if (MouseHandler.MouseHandler_x >= var12 && MouseHandler.MouseHandler_y >= var13 && MouseHandler.MouseHandler_x < var14 && MouseHandler.MouseHandler_y < var15) { + var33 = true; + } else { + var33 = false; + } + + boolean var34 = false; + if ((MouseHandler.MouseHandler_currentButton == 1 || !JagexCache.mouseCam && MouseHandler.MouseHandler_currentButton == 4) && var33) { + var34 = true; + } + + var21 = false; + if ((MouseHandler.MouseHandler_lastButton == 1 || !JagexCache.mouseCam && MouseHandler.MouseHandler_lastButton == 4) && MouseHandler.MouseHandler_lastPressedX >= var12 && MouseHandler.MouseHandler_lastPressedY >= var13 && MouseHandler.MouseHandler_lastPressedX < var14 && MouseHandler.MouseHandler_lastPressedY < var15) { + var21 = true; + } + + if (var21) { + UserComparator3.clickWidget(var9, MouseHandler.MouseHandler_lastPressedX - var10, MouseHandler.MouseHandler_lastPressedY - var11); + } + + if (var9.contentType == 1400) { + WorldMapRegion.worldMap.method6378(var17, var18, var33 & var34, var33 & var21); + } + + if (Client.clickedWidget != null && var9 != Client.clickedWidget && var33 && WorldMapData_0.method192(MenuAction.getWidgetClickMask(var9))) { + Client.draggedOnWidget = var9; + } + + if (var9 == Client.clickedWidgetParent) { + Client.field820 = true; + Client.field698 = var10; + Client.field822 = var11; + } + + if (var9.hasListener) { + ScriptEvent var29; + if (var33 && Client.mouseWheelRotation != 0 && var9.onScroll != null) { + var29 = new ScriptEvent(); + var29.isMouseInputEvent = true; + var29.widget = var9; + var29.mouseY = Client.mouseWheelRotation; + var29.args = var9.onScroll; + Client.scriptEvents.addFirst(var29); + } + + if (Client.clickedWidget != null || DevicePcmPlayerProvider.dragInventoryWidget != null || Client.isMenuOpen) { + var21 = false; + var34 = false; + var33 = false; + } + + if (!var9.isClicked && var21) { + var9.isClicked = true; + if (var9.onClick != null) { + var29 = new ScriptEvent(); + var29.isMouseInputEvent = true; + var29.widget = var9; + var29.mouseX = MouseHandler.MouseHandler_lastPressedX - var10; + var29.mouseY = MouseHandler.MouseHandler_lastPressedY - var11; + var29.args = var9.onClick; + Client.scriptEvents.addFirst(var29); + } + } + + if (var9.isClicked && var34 && var9.onClickRepeat != null) { + var29 = new ScriptEvent(); + var29.isMouseInputEvent = true; + var29.widget = var9; + var29.mouseX = MouseHandler.MouseHandler_x - var10; + var29.mouseY = MouseHandler.MouseHandler_y - var11; + var29.args = var9.onClickRepeat; + Client.scriptEvents.addFirst(var29); + } + + if (var9.isClicked && !var34) { + var9.isClicked = false; + if (var9.onRelease != null) { + var29 = new ScriptEvent(); + var29.isMouseInputEvent = true; + var29.widget = var9; + var29.mouseX = MouseHandler.MouseHandler_x - var10; + var29.mouseY = MouseHandler.MouseHandler_y - var11; + var29.args = var9.onRelease; + Client.field843.addFirst(var29); + } + } + + if (var34 && var9.onHold != null) { + var29 = new ScriptEvent(); + var29.isMouseInputEvent = true; + var29.widget = var9; + var29.mouseX = MouseHandler.MouseHandler_x - var10; + var29.mouseY = MouseHandler.MouseHandler_y - var11; + var29.args = var9.onHold; + Client.scriptEvents.addFirst(var29); + } + + if (!var9.containsMouse && var33) { + var9.containsMouse = true; + if (var9.onMouseOver != null) { + var29 = new ScriptEvent(); + var29.isMouseInputEvent = true; + var29.widget = var9; + var29.mouseX = MouseHandler.MouseHandler_x - var10; + var29.mouseY = MouseHandler.MouseHandler_y - var11; + var29.args = var9.onMouseOver; + Client.scriptEvents.addFirst(var29); + } + } + + if (var9.containsMouse && var33 && var9.onMouseRepeat != null) { + var29 = new ScriptEvent(); + var29.isMouseInputEvent = true; + var29.widget = var9; + var29.mouseX = MouseHandler.MouseHandler_x - var10; + var29.mouseY = MouseHandler.MouseHandler_y - var11; + var29.args = var9.onMouseRepeat; + Client.scriptEvents.addFirst(var29); + } + + if (var9.containsMouse && !var33) { + var9.containsMouse = false; + if (var9.onMouseLeave != null) { + var29 = new ScriptEvent(); + var29.isMouseInputEvent = true; + var29.widget = var9; + var29.mouseX = MouseHandler.MouseHandler_x - var10; + var29.mouseY = MouseHandler.MouseHandler_y - var11; + var29.args = var9.onMouseLeave; + Client.field843.addFirst(var29); + } + } + + if (var9.onTimer != null) { + var29 = new ScriptEvent(); + var29.widget = var9; + var29.args = var9.onTimer; + Client.field900.addFirst(var29); + } + + ScriptEvent var30; + int var35; + int var36; + if (var9.onVarTransmit != null && Client.field829 > var9.field2652) { + if (var9.varTransmitTriggers != null && Client.field829 - var9.field2652 <= 32) { + label880: + for (var35 = var9.field2652; var35 < Client.field829; ++var35) { + var23 = Client.field828[var35 & 31]; + + for (var36 = 0; var36 < var9.varTransmitTriggers.length; ++var36) { + if (var23 == var9.varTransmitTriggers[var36]) { + var30 = new ScriptEvent(); + var30.widget = var9; + var30.args = var9.onVarTransmit; + Client.scriptEvents.addFirst(var30); + break label880; + } + } + } + } else { + var29 = new ScriptEvent(); + var29.widget = var9; + var29.args = var9.onVarTransmit; + Client.scriptEvents.addFirst(var29); + } + + var9.field2652 = Client.field829; + } + + if (var9.onInvTransmit != null && Client.field898 > var9.field2585) { + if (var9.invTransmitTriggers != null && Client.field898 - var9.field2585 <= 32) { + label856: + for (var35 = var9.field2585; var35 < Client.field898; ++var35) { + var23 = Client.changedItemContainers[var35 & 31]; + + for (var36 = 0; var36 < var9.invTransmitTriggers.length; ++var36) { + if (var23 == var9.invTransmitTriggers[var36]) { + var30 = new ScriptEvent(); + var30.widget = var9; + var30.args = var9.onInvTransmit; + Client.scriptEvents.addFirst(var30); + break label856; + } + } + } + } else { + var29 = new ScriptEvent(); + var29.widget = var9; + var29.args = var9.onInvTransmit; + Client.scriptEvents.addFirst(var29); + } + + var9.field2585 = Client.field898; + } + + if (var9.onStatTransmit != null && Client.changedSkillsCount > var9.field2565) { + if (var9.statTransmitTriggers != null && Client.changedSkillsCount - var9.field2565 <= 32) { + label832: + for (var35 = var9.field2565; var35 < Client.changedSkillsCount; ++var35) { + var23 = Client.changedSkills[var35 & 31]; + + for (var36 = 0; var36 < var9.statTransmitTriggers.length; ++var36) { + if (var23 == var9.statTransmitTriggers[var36]) { + var30 = new ScriptEvent(); + var30.widget = var9; + var30.args = var9.onStatTransmit; + Client.scriptEvents.addFirst(var30); + break label832; + } + } + } + } else { + var29 = new ScriptEvent(); + var29.widget = var9; + var29.args = var9.onStatTransmit; + Client.scriptEvents.addFirst(var29); + } + + var9.field2565 = Client.changedSkillsCount; + } + + if (Client.chatCycle > var9.field2631 && var9.onChatTransmit != null) { + var29 = new ScriptEvent(); + var29.widget = var9; + var29.args = var9.onChatTransmit; + Client.scriptEvents.addFirst(var29); + } + + if (Client.field833 > var9.field2631 && var9.onFriendTransmit != null) { + var29 = new ScriptEvent(); + var29.widget = var9; + var29.args = var9.onFriendTransmit; + Client.scriptEvents.addFirst(var29); + } + + if (Client.field836 > var9.field2631 && var9.onClanTransmit != null) { + var29 = new ScriptEvent(); + var29.widget = var9; + var29.args = var9.onClanTransmit; + Client.scriptEvents.addFirst(var29); + } + + if (Client.field645 > var9.field2631 && var9.onStockTransmit != null) { + var29 = new ScriptEvent(); + var29.widget = var9; + var29.args = var9.onStockTransmit; + Client.scriptEvents.addFirst(var29); + } + + if (Client.field734 > var9.field2631 && var9.field2689 != null) { + var29 = new ScriptEvent(); + var29.widget = var9; + var29.args = var9.field2689; + Client.scriptEvents.addFirst(var29); + } + + if (Client.field834 > var9.field2631 && var9.onMiscTransmit != null) { + var29 = new ScriptEvent(); + var29.widget = var9; + var29.args = var9.onMiscTransmit; + Client.scriptEvents.addFirst(var29); + } + + var9.field2631 = Client.cycleCntr; + if (var9.onKey != null) { + for (var35 = 0; var35 < Client.field889; ++var35) { + ScriptEvent var31 = new ScriptEvent(); + var31.widget = var9; + var31.keyTyped = Client.field865[var35]; + var31.keyPressed = Client.field864[var35]; + var31.args = var9.onKey; + Client.scriptEvents.addFirst(var31); + } + } + } + } + + if (!var9.isIf3) { + if (Client.clickedWidget != null || DevicePcmPlayerProvider.dragInventoryWidget != null || Client.isMenuOpen) { + continue; + } + + if ((var9.mouseOverRedirect >= 0 || var9.mouseOverColor != 0) && MouseHandler.MouseHandler_x >= var12 && MouseHandler.MouseHandler_y >= var13 && MouseHandler.MouseHandler_x < var14 && MouseHandler.MouseHandler_y < var15) { + if (var9.mouseOverRedirect >= 0) { + class185.mousedOverWidgetIf1 = var0[var9.mouseOverRedirect]; + } else { + class185.mousedOverWidgetIf1 = var9; + } + } + + if (var9.type == 8 && MouseHandler.MouseHandler_x >= var12 && MouseHandler.MouseHandler_y >= var13 && MouseHandler.MouseHandler_x < var14 && MouseHandler.MouseHandler_y < var15) { + GrandExchangeOfferWorldComparator.field31 = var9; + } + + if (var9.scrollHeight > var9.height) { + GrandExchangeEvents.method82(var9, var10 + var9.width, var11, var9.height, var9.scrollHeight, MouseHandler.MouseHandler_x, MouseHandler.MouseHandler_y); + } + } + + if (var9.type == 0) { + updateInterface(var0, var9.id, var12, var13, var14, var15, var10 - var9.scrollX, var11 - var9.scrollY); + if (var9.children != null) { + updateInterface(var9.children, var9.id, var12, var13, var14, var15, var10 - var9.scrollX, var11 - var9.scrollY); + } + + InterfaceParent var27 = (InterfaceParent)Client.interfaceParents.get((long)var9.id); + if (var27 != null) { + if (var27.type == 0 && MouseHandler.MouseHandler_x >= var12 && MouseHandler.MouseHandler_y >= var13 && MouseHandler.MouseHandler_x < var14 && MouseHandler.MouseHandler_y < var15 && !Client.isMenuOpen) { + for (ScriptEvent var28 = (ScriptEvent)Client.scriptEvents.last(); var28 != null; var28 = (ScriptEvent)Client.scriptEvents.previous()) { + if (var28.isMouseInputEvent) { + var28.remove(); + var28.widget.containsMouse = false; + } + } + + if (class3.widgetDragDuration == 0) { + Client.clickedWidget = null; + Client.clickedWidgetParent = null; + } + + if (!Client.isMenuOpen) { + class2.addCancelMenuEntry(); + } + } + + Script.updateRootInterface(var27.group, var12, var13, var14, var15, var10, var11); + } + } + } + } + } + } + + } } diff --git a/runescape-client/src/main/java/UserList.java b/runescape-client/src/main/java/UserList.java index 0353c43a4d..2a7b724112 100644 --- a/runescape-client/src/main/java/UserList.java +++ b/runescape-client/src/main/java/UserList.java @@ -7,34 +7,34 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("jc") +@ObfuscatedName("je") @Implements("UserList") public abstract class UserList { - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = 251345775 + intValue = -1586707149 ) @Export("capacity") final int capacity; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = 15871715 + intValue = -1996430119 ) @Export("size") int size; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "[Ljg;" + signature = "[Ljr;" ) @Export("array") User[] array; - @ObfuscatedName("c") + @ObfuscatedName("h") @Export("usernamesMap") HashMap usernamesMap; - @ObfuscatedName("o") + @ObfuscatedName("y") @Export("previousUsernamesMap") HashMap previousUsernamesMap; - @ObfuscatedName("i") + @ObfuscatedName("w") @Export("comparator") Comparator comparator; @@ -47,26 +47,26 @@ public abstract class UserList { this.previousUsernamesMap = new HashMap(var1 / 8); } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(I)Ljg;", - garbageValue = "-706396611" + signature = "(I)Ljr;", + garbageValue = "-1592540968" ) @Export("newInstance") abstract User newInstance(); - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(II)[Ljg;", - garbageValue = "1510983955" + signature = "(IB)[Ljr;", + garbageValue = "-122" ) @Export("newTypedArray") abstract User[] newTypedArray(int var1); - @ObfuscatedName("c") + @ObfuscatedName("n") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "71" + signature = "(I)V", + garbageValue = "-1907320088" ) @Export("clear") public void clear() { @@ -76,30 +76,30 @@ public abstract class UserList { this.previousUsernamesMap.clear(); } - @ObfuscatedName("o") + @ObfuscatedName("c") @ObfuscatedSignature( signature = "(I)I", - garbageValue = "-523583503" + garbageValue = "-375744774" ) @Export("getSize") public int getSize() { return this.size; } - @ObfuscatedName("i") + @ObfuscatedName("s") @ObfuscatedSignature( signature = "(I)Z", - garbageValue = "1719086415" + garbageValue = "-1219500573" ) @Export("isFull") public boolean isFull() { - return this.size == this.capacity; + return this.capacity == this.size; } - @ObfuscatedName("d") + @ObfuscatedName("t") @ObfuscatedSignature( - signature = "(Lju;I)Z", - garbageValue = "-1236926402" + signature = "(Ljb;I)Z", + garbageValue = "-149111552" ) @Export("contains") public boolean contains(Username var1) { @@ -112,8 +112,8 @@ public abstract class UserList { @ObfuscatedName("m") @ObfuscatedSignature( - signature = "(Lju;I)Ljg;", - garbageValue = "-261322515" + signature = "(Ljb;I)Ljr;", + garbageValue = "1256071424" ) @Export("getByUsername") public User getByUsername(Username var1) { @@ -121,30 +121,30 @@ public abstract class UserList { return var2 != null ? var2 : this.getByPreviousUsername(var1); } - @ObfuscatedName("p") + @ObfuscatedName("v") @ObfuscatedSignature( - signature = "(Lju;B)Ljg;", - garbageValue = "-41" + signature = "(Ljb;I)Ljr;", + garbageValue = "1486275589" ) @Export("getByCurrentUsername") User getByCurrentUsername(Username var1) { return !var1.hasCleanName() ? null : (User)this.usernamesMap.get(var1); } - @ObfuscatedName("h") + @ObfuscatedName("q") @ObfuscatedSignature( - signature = "(Lju;I)Ljg;", - garbageValue = "208205834" + signature = "(Ljb;I)Ljr;", + garbageValue = "-434760429" ) @Export("getByPreviousUsername") User getByPreviousUsername(Username var1) { return !var1.hasCleanName() ? null : (User)this.previousUsernamesMap.get(var1); } - @ObfuscatedName("k") + @ObfuscatedName("l") @ObfuscatedSignature( - signature = "(Lju;I)Z", - garbageValue = "-794450034" + signature = "(Ljb;I)Z", + garbageValue = "1488829277" ) @Export("removeByUsername") public final boolean removeByUsername(Username var1) { @@ -157,10 +157,10 @@ public abstract class UserList { } } - @ObfuscatedName("x") + @ObfuscatedName("j") @ObfuscatedSignature( - signature = "(Ljg;I)V", - garbageValue = "2098286912" + signature = "(Ljr;I)V", + garbageValue = "-23502299" ) @Export("remove") final void remove(User var1) { @@ -171,20 +171,20 @@ public abstract class UserList { } } - @ObfuscatedName("j") + @ObfuscatedName("ad") @ObfuscatedSignature( - signature = "(Lju;B)Ljg;", - garbageValue = "0" + signature = "(Ljb;I)Ljr;", + garbageValue = "16711680" ) @Export("addLastNoPreviousUsername") User addLastNoPreviousUsername(Username var1) { return this.addLast(var1, (Username)null); } - @ObfuscatedName("r") + @ObfuscatedName("am") @ObfuscatedSignature( - signature = "(Lju;Lju;I)Ljg;", - garbageValue = "-1291980201" + signature = "(Ljb;Ljb;I)Ljr;", + garbageValue = "-1408051568" ) @Export("addLast") User addLast(Username var1, Username var2) { @@ -199,10 +199,10 @@ public abstract class UserList { } } - @ObfuscatedName("e") + @ObfuscatedName("ai") @ObfuscatedSignature( - signature = "(II)Ljg;", - garbageValue = "1933268633" + signature = "(II)Ljr;", + garbageValue = "1364470025" ) @Export("get") public final User get(int var1) { @@ -213,10 +213,10 @@ public abstract class UserList { } } - @ObfuscatedName("s") + @ObfuscatedName("ag") @ObfuscatedSignature( signature = "(B)V", - garbageValue = "1" + garbageValue = "-23" ) @Export("sort") public final void sort() { @@ -228,10 +228,10 @@ public abstract class UserList { } - @ObfuscatedName("b") + @ObfuscatedName("ao") @ObfuscatedSignature( - signature = "(Ljg;Lju;Lju;I)V", - garbageValue = "-952068239" + signature = "(Ljr;Ljb;Ljb;B)V", + garbageValue = "48" ) @Export("changeName") final void changeName(User var1, Username var2, Username var3) { @@ -240,10 +240,10 @@ public abstract class UserList { this.mapPut(var1); } - @ObfuscatedName("w") + @ObfuscatedName("aw") @ObfuscatedSignature( - signature = "(Ljg;I)I", - garbageValue = "-749364555" + signature = "(Ljr;I)I", + garbageValue = "790634054" ) @Export("indexOf") final int indexOf(User var1) { @@ -256,10 +256,10 @@ public abstract class UserList { return -1; } - @ObfuscatedName("u") + @ObfuscatedName("ak") @ObfuscatedSignature( - signature = "(Ljg;I)V", - garbageValue = "-288832782" + signature = "(Ljr;I)V", + garbageValue = "-1688950859" ) @Export("mapRemove") final void mapRemove(User var1) { @@ -273,20 +273,20 @@ public abstract class UserList { } } - @ObfuscatedName("ad") + @ObfuscatedName("aa") @ObfuscatedSignature( - signature = "(Ljg;B)V", - garbageValue = "-74" + signature = "(Ljr;B)V", + garbageValue = "-92" ) @Export("arrayAddLast") final void arrayAddLast(User var1) { this.array[++this.size - 1] = var1; } - @ObfuscatedName("ag") + @ObfuscatedName("ab") @ObfuscatedSignature( - signature = "(Ljg;I)V", - garbageValue = "243996394" + signature = "(Ljr;I)V", + garbageValue = "314346043" ) @Export("mapPut") final void mapPut(User var1) { @@ -300,10 +300,10 @@ public abstract class UserList { } - @ObfuscatedName("ak") + @ObfuscatedName("ar") @ObfuscatedSignature( signature = "(II)V", - garbageValue = "344038656" + garbageValue = "602871517" ) @Export("arrayRemove") final void arrayRemove(int var1) { @@ -316,18 +316,18 @@ public abstract class UserList { @ObfuscatedName("av") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "594153756" + signature = "(B)V", + garbageValue = "67" ) @Export("removeComparator") public final void removeComparator() { this.comparator = null; } - @ObfuscatedName("am") + @ObfuscatedName("aq") @ObfuscatedSignature( signature = "(Ljava/util/Comparator;B)V", - garbageValue = "1" + garbageValue = "99" ) @Export("addComparator") public final void addComparator(Comparator var1) { @@ -338,4 +338,48 @@ public abstract class UserList { } } + + @ObfuscatedName("jn") + @ObfuscatedSignature( + signature = "(Lhl;I)V", + garbageValue = "1273300851" + ) + static final void method5233(Widget var0) { + int var1 = var0.contentType; + if (var1 == 324) { + if (Client.field906 == -1) { + Client.field906 = var0.spriteId2; + Client.field907 = var0.spriteId; + } + + if (Client.playerAppearance.isFemale) { + var0.spriteId2 = Client.field906; + } else { + var0.spriteId2 = Client.field907; + } + + } else if (var1 == 325) { + if (Client.field906 == -1) { + Client.field906 = var0.spriteId2; + Client.field907 = var0.spriteId; + } + + if (Client.playerAppearance.isFemale) { + var0.spriteId2 = Client.field907; + } else { + var0.spriteId2 = Client.field906; + } + + } else if (var1 == 327) { + var0.modelAngleX = 150; + var0.modelAngleY = (int)(Math.sin((double)Client.cycle / 40.0D) * 256.0D) & 2047; + var0.modelType = 5; + var0.modelId = 0; + } else if (var1 == 328) { + var0.modelAngleX = 150; + var0.modelAngleY = (int)(Math.sin((double)Client.cycle / 40.0D) * 256.0D) & 2047; + var0.modelType = 5; + var0.modelId = 1; + } + } } diff --git a/runescape-client/src/main/java/Username.java b/runescape-client/src/main/java/Username.java index 2e6ced708d..118c481e1d 100644 --- a/runescape-client/src/main/java/Username.java +++ b/runescape-client/src/main/java/Username.java @@ -3,92 +3,48 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ju") +@ObfuscatedName("jb") @Implements("Username") public class Username implements Comparable { - @ObfuscatedName("v") - @ObfuscatedSignature( - signature = "[Lbk;" - ) - @Export("World_worlds") - static World[] World_worlds; - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("name") String name; - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("cleanName") String cleanName; @ObfuscatedSignature( - signature = "(Ljava/lang/String;Lln;)V" + signature = "(Ljava/lang/String;Llg;)V" ) public Username(String var1, LoginType var2) { this.name = var1; - String var4; - if (var1 == null) { - var4 = null; - } else { - int var5 = 0; - - int var6; - for (var6 = var1.length(); var5 < var6 && class13.method200(var1.charAt(var5)); ++var5) { - } - - while (var6 > var5 && class13.method200(var1.charAt(var6 - 1))) { - --var6; - } - - int var7 = var6 - var5; - if (var7 >= 1 && var7 <= WorldMapDecoration.method388(var2)) { - StringBuilder var8 = new StringBuilder(var7); - - for (int var9 = var5; var9 < var6; ++var9) { - char var10 = var1.charAt(var9); - if (WallDecoration.method3420(var10)) { - char var11 = Buddy.method5286(var10); - if (var11 != 0) { - var8.append(var11); - } - } - } - - if (var8.length() == 0) { - var4 = null; - } else { - var4 = var8.toString(); - } - } else { - var4 = null; - } - } - - this.cleanName = var4; + this.cleanName = StudioGame.method4228(var1, var2); } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(I)Ljava/lang/String;", - garbageValue = "-1911798816" + signature = "(B)Ljava/lang/String;", + garbageValue = "70" ) @Export("getName") public String getName() { return this.name; } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( signature = "(B)Z", - garbageValue = "121" + garbageValue = "-102" ) @Export("hasCleanName") public boolean hasCleanName() { return this.cleanName != null; } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Lju;S)I", - garbageValue = "-11004" + signature = "(Ljb;I)I", + garbageValue = "1816661585" ) @Export("compareToTyped") public int compareToTyped(Username var1) { @@ -118,48 +74,11 @@ public class Username implements Comparable { return this.cleanName == null ? 0 : this.cleanName.hashCode(); } - public String toString() { - return this.getName(); - } - public int compareTo(Object var1) { return this.compareToTyped((Username)var1); } - @ObfuscatedName("v") - @ObfuscatedSignature( - signature = "(II)I", - garbageValue = "-300654930" - ) - @Export("ViewportMouse_unpackX") - public static int ViewportMouse_unpackX(int var0) { - long var2 = ViewportMouse.ViewportMouse_entityTags[var0]; - int var1 = (int)(var2 >>> 14 & 3L); - return var1; - } - - @ObfuscatedName("i") - @ObfuscatedSignature( - signature = "(I)Llx;", - garbageValue = "-2059953793" - ) - static Sprite method5338() { - Sprite var0 = new Sprite(); - var0.width = class325.SpriteBuffer_spriteWidth; - var0.height = class325.SpriteBuffer_spriteHeight; - var0.xOffset = SecureRandomFuture.SpriteBuffer_xOffsets[0]; - var0.yOffset = HealthBar.SpriteBuffer_yOffsets[0]; - var0.subWidth = SecureRandomCallable.SpriteBuffer_spriteWidths[0]; - var0.subHeight = AttackOption.SpriteBuffer_spriteHeights[0]; - int var1 = var0.subHeight * var0.subWidth; - byte[] var2 = class325.SpriteBuffer_pixels[0]; - var0.pixels = new int[var1]; - - for (int var3 = 0; var3 < var1; ++var3) { - var0.pixels[var3] = class325.SpriteBuffer_spritePalette[var2[var3] & 255]; - } - - WorldMapData_1.method787(); - return var0; + public String toString() { + return this.getName(); } } diff --git a/runescape-client/src/main/java/Usernamed.java b/runescape-client/src/main/java/Usernamed.java index 16bc5c1fa3..c190d7a1a0 100644 --- a/runescape-client/src/main/java/Usernamed.java +++ b/runescape-client/src/main/java/Usernamed.java @@ -6,10 +6,10 @@ import net.runelite.mapping.ObfuscatedSignature; @ObfuscatedName("jv") @Implements("Usernamed") public interface Usernamed { - @ObfuscatedName("lz") + @ObfuscatedName("kt") @ObfuscatedSignature( - signature = "(S)Lju;", - garbageValue = "1353" + signature = "(B)Ljb;", + garbageValue = "70" ) @Export("username") Username username(); diff --git a/runescape-client/src/main/java/VarbitDefinition.java b/runescape-client/src/main/java/VarbitDefinition.java index ce754e1c40..b01a79e48f 100644 --- a/runescape-client/src/main/java/VarbitDefinition.java +++ b/runescape-client/src/main/java/VarbitDefinition.java @@ -4,38 +4,42 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ib") +@ObfuscatedName("iq") @Implements("VarbitDefinition") public class VarbitDefinition extends DualNode { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lhq;" + signature = "Lhf;" ) @Export("VarbitDefinition_archive") public static AbstractArchive VarbitDefinition_archive; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Leb;" + signature = "Lef;" ) @Export("VarbitDefinition_cached") public static EvictingDualNodeHashTable VarbitDefinition_cached; - @ObfuscatedName("av") - static String field3288; - @ObfuscatedName("n") + @ObfuscatedName("bq") + @ObfuscatedSignature( + signature = "Lgc;" + ) + @Export("clientLanguage") + static Language clientLanguage; + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = 928721065 + intValue = 1459744961 ) @Export("baseVar") public int baseVar; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = 92662329 + intValue = -1129400401 ) @Export("startBit") public int startBit; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = 2061625257 + intValue = -1232429709 ) @Export("endBit") public int endBit; @@ -44,10 +48,10 @@ public class VarbitDefinition extends DualNode { VarbitDefinition_cached = new EvictingDualNodeHashTable(64); } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Lkc;I)V", - garbageValue = "-1741375018" + signature = "(Lkg;I)V", + garbageValue = "1116015657" ) @Export("decode") public void decode(Buffer var1) { @@ -61,10 +65,10 @@ public class VarbitDefinition extends DualNode { } } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Lkc;II)V", - garbageValue = "1555734488" + signature = "(Lkg;II)V", + garbageValue = "-1963892164" ) @Export("decodeNext") void decodeNext(Buffer var1, int var2) { @@ -76,15 +80,45 @@ public class VarbitDefinition extends DualNode { } - @ObfuscatedName("x") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(Ljava/lang/String;B)V", - garbageValue = "-49" + signature = "(IZI)Ljava/lang/String;", + garbageValue = "-1033924108" ) - static final void method4651(String var0) { - StringBuilder var10000 = (new StringBuilder()).append(var0); - Object var10001 = null; - String var1 = var10000.append(" is already on your ignore list").toString(); - class30.addGameMessage(30, "", var1); + @Export("intToString") + public static String intToString(int var0, boolean var1) { + if (var1 && var0 >= 0) { + int var3 = var0; + String var2; + if (var1 && var0 >= 0) { + int var4 = 2; + + for (int var5 = var0 / 10; var5 != 0; ++var4) { + var5 /= 10; + } + + char[] var6 = new char[var4]; + var6[0] = '+'; + + for (int var7 = var4 - 1; var7 > 0; --var7) { + int var8 = var3; + var3 /= 10; + int var9 = var8 - var3 * 10; + if (var9 >= 10) { + var6[var7] = (char)(var9 + 87); + } else { + var6[var7] = (char)(var9 + 48); + } + } + + var2 = new String(var6); + } else { + var2 = Integer.toString(var0, 10); + } + + return var2; + } else { + return Integer.toString(var0); + } } } diff --git a/runescape-client/src/main/java/VarcInt.java b/runescape-client/src/main/java/VarcInt.java index 2257218d4d..fff5e7d3f4 100644 --- a/runescape-client/src/main/java/VarcInt.java +++ b/runescape-client/src/main/java/VarcInt.java @@ -1,35 +1,36 @@ +import java.awt.Component; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; +import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; +import net.runelite.rs.Reflection; -@ObfuscatedName("iz") +@ObfuscatedName("ia") @Implements("VarcInt") public class VarcInt extends DualNode { - @ObfuscatedName("ns") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "[Lhi;" - ) - static Widget[] field3218; - @ObfuscatedName("a") - @ObfuscatedSignature( - signature = "Lhq;" + signature = "Lhf;" ) @Export("VarcInt_archive") public static AbstractArchive VarcInt_archive; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Leb;" + signature = "Lef;" ) @Export("VarcInt_cached") static EvictingDualNodeHashTable VarcInt_cached; - @ObfuscatedName("gi") - @ObfuscatedSignature( - signature = "[Llw;" + @ObfuscatedName("h") + @Export("SpriteBuffer_spriteHeights") + static int[] SpriteBuffer_spriteHeights; + @ObfuscatedName("fa") + @ObfuscatedGetter( + intValue = -1499248159 ) - @Export("modIconSprites") - static IndexedSprite[] modIconSprites; - @ObfuscatedName("n") + @Export("baseY") + static int baseY; + @ObfuscatedName("b") @Export("persist") public boolean persist; @@ -41,43 +42,94 @@ public class VarcInt extends DualNode { this.persist = false; } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Lkc;I)V", - garbageValue = "-542237401" + signature = "(Lkg;I)V", + garbageValue = "-407905796" ) - void method4549(Buffer var1) { + void method4485(Buffer var1) { while (true) { int var2 = var1.readUnsignedByte(); if (var2 == 0) { return; } - this.method4550(var1, var2); + this.method4486(var1, var2); } } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Lkc;II)V", - garbageValue = "-1028868558" + signature = "(Lkg;IB)V", + garbageValue = "-67" ) - void method4550(Buffer var1, int var2) { + void method4486(Buffer var1, int var2) { if (var2 == 2) { this.persist = true; } } - @ObfuscatedName("gc") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "-1686094781" + signature = "(Ljava/awt/Component;B)V", + garbageValue = "85" ) - static void method4548() { - if (Client.combatTargetPlayerIndex >= 0 && Client.players[Client.combatTargetPlayerIndex] != null) { - Player.addPlayerToScene(Client.players[Client.combatTargetPlayerIndex], false); - } + static void method4484(Component var0) { + var0.addMouseListener(MouseHandler.MouseHandler_instance); + var0.addMouseMotionListener(MouseHandler.MouseHandler_instance); + var0.addFocusListener(MouseHandler.MouseHandler_instance); + } + @ObfuscatedName("u") + @ObfuscatedSignature( + signature = "(II)Lih;", + garbageValue = "1798735547" + ) + @Export("getNpcDefinition") + public static NPCDefinition getNpcDefinition(int var0) { + NPCDefinition var1 = (NPCDefinition)NPCDefinition.NpcDefinition_cached.get((long)var0); + if (var1 != null) { + return var1; + } else { + byte[] var2 = NPCDefinition.NpcDefinition_archive.takeFile(9, var0); + var1 = new NPCDefinition(); + var1.id = var0; + if (var2 != null) { + var1.decode(new Buffer(var2)); + } + + var1.postDecode(); + NPCDefinition.NpcDefinition_cached.put(var1, (long)var0); + return var1; + } + } + + @ObfuscatedName("z") + @ObfuscatedSignature( + signature = "(Ljava/lang/String;S)Ljava/lang/Class;", + garbageValue = "2623" + ) + @Export("loadClassFromDescriptor") + static Class loadClassFromDescriptor(String var0) throws ClassNotFoundException { + if (var0.equals("B")) { + return Byte.TYPE; + } else if (var0.equals("I")) { + return Integer.TYPE; + } else if (var0.equals("S")) { + return Short.TYPE; + } else if (var0.equals("J")) { + return Long.TYPE; + } else if (var0.equals("Z")) { + return Boolean.TYPE; + } else if (var0.equals("F")) { + return Float.TYPE; + } else if (var0.equals("D")) { + return Double.TYPE; + } else if (var0.equals("C")) { + return Character.TYPE; + } else { + return var0.equals("void") ? Void.TYPE : Reflection.findClass(var0); + } } } diff --git a/runescape-client/src/main/java/Varcs.java b/runescape-client/src/main/java/Varcs.java index d278ce3196..4bb6ebfb93 100644 --- a/runescape-client/src/main/java/Varcs.java +++ b/runescape-client/src/main/java/Varcs.java @@ -8,53 +8,54 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; +import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("cz") +@ObfuscatedName("cj") @Implements("Varcs") public class Varcs { - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("intsPersistence") boolean[] intsPersistence; - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("map") Map map; - @ObfuscatedName("v") + @ObfuscatedName("z") @Export("strings") String[] strings; - @ObfuscatedName("l") + @ObfuscatedName("p") @Export("unwrittenChanges") boolean unwrittenChanges; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedGetter( - longValue = 4894374485782924843L + longValue = 1873182540653835357L ) - long field1246; + long field1267; Varcs() { this.unwrittenChanges = false; - int var1 = AbstractWorldMapIcon.archive2.getGroupFileCount(19); + int var1 = class288.archive2.getGroupFileCount(19); this.map = new HashMap(); this.intsPersistence = new boolean[var1]; int var2; for (var2 = 0; var2 < var1; ++var2) { - VarcInt var3 = Decimator.method2694(var2); + VarcInt var3 = class40.method778(var2); this.intsPersistence[var2] = var3.persist; } var2 = 0; - if (AbstractWorldMapIcon.archive2.method4436(15)) { - var2 = AbstractWorldMapIcon.archive2.getGroupFileCount(15); + if (class288.archive2.method4355(15)) { + var2 = class288.archive2.getGroupFileCount(15); } this.strings = new String[var2]; this.read(); } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "(III)V", - garbageValue = "878961648" + garbageValue = "1927566504" ) @Export("setInt") void setInt(int var1, int var2) { @@ -65,10 +66,10 @@ public class Varcs { } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( signature = "(II)I", - garbageValue = "1218722234" + garbageValue = "-1918389063" ) @Export("getInt") int getInt(int var1) { @@ -76,20 +77,20 @@ public class Varcs { return var2 instanceof Integer ? (Integer)var2 : -1; } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( signature = "(ILjava/lang/String;I)V", - garbageValue = "-1237376058" + garbageValue = "1529993264" ) @Export("setString") void setString(int var1, String var2) { this.map.put(var1, var2); } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( signature = "(II)Ljava/lang/String;", - garbageValue = "-1479997522" + garbageValue = "-2052988602" ) @Export("getString") String getString(int var1) { @@ -97,30 +98,30 @@ public class Varcs { return var2 instanceof String ? (String)var2 : ""; } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( signature = "(ILjava/lang/String;B)V", - garbageValue = "64" + garbageValue = "-38" ) @Export("setStringOld") void setStringOld(int var1, String var2) { this.strings[var1] = var2; } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(II)Ljava/lang/String;", - garbageValue = "1714600398" + signature = "(IB)Ljava/lang/String;", + garbageValue = "-34" ) @Export("getStringOld") String getStringOld(int var1) { return this.strings[var1]; } - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "526123607" + garbageValue = "996581962" ) @Export("clearTransient") void clearTransient() { @@ -137,20 +138,20 @@ public class Varcs { } - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "(ZB)Lmh;", - garbageValue = "1" + signature = "(ZB)Lmd;", + garbageValue = "59" ) @Export("getPreferencesFile") AccessFile getPreferencesFile(boolean var1) { - return CollisionMap.getPreferencesFile("2", MouseHandler.field458.name, var1); + return class191.getPreferencesFile("2", UserComparator8.field1973.name, var1); } - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "2015022450" + garbageValue = "-1542947318" ) @Export("write") void write() { @@ -170,54 +171,80 @@ public class Varcs { if (var7 instanceof Integer) { var2 += 4; } else if (var7 instanceof String) { - var2 += UserComparator6.stringCp1252NullTerminatedByteSize((String)var7); + var2 += class173.stringCp1252NullTerminatedByteSize((String)var7); } ++var3; } } - Buffer var23 = new Buffer(var2); - var23.writeByte(2); - var23.writeShort(var3); - Iterator var24 = this.map.entrySet().iterator(); + Buffer var27 = new Buffer(var2); + var27.writeByte(2); + var27.writeShort(var3); + Iterator var28 = this.map.entrySet().iterator(); - while (var24.hasNext()) { - Entry var12 = (Entry)var24.next(); - int var13 = (Integer)var12.getKey(); - if (this.intsPersistence[var13]) { - var23.writeShort(var13); - Object var8 = var12.getValue(); - class3 var9 = class3.method51(var8.getClass()); - var23.writeByte(var9.field14); - class3.method52(var8, var23); + label148: + while (true) { + Entry var16; + int var17; + do { + if (!var28.hasNext()) { + var1.write(var27.array, 0, var27.offset); + break label148; + } + + var16 = (Entry)var28.next(); + var17 = (Integer)var16.getKey(); + } while(!this.intsPersistence[var17]); + + var27.writeShort(var17); + Object var8 = var16.getValue(); + Class var10 = var8.getClass(); + class3[] var11 = class3.method45(); + int var12 = 0; + + class3 var9; + while (true) { + if (var12 >= var11.length) { + var9 = null; + break; + } + + class3 var13 = var11[var12]; + if (var10 == var13.field16) { + var9 = var13; + break; + } + + ++var12; } - } - var1.write(var23.array, 0, var23.offset); - } catch (Exception var21) { + var27.writeByte(var9.field19); + class3.method37(var8, var27); + } + } catch (Exception var25) { } finally { try { var1.close(); - } catch (Exception var20) { + } catch (Exception var24) { } } this.unwrittenChanges = false; - this.field1246 = PlayerAppearance.currentTimeMillis(); + this.field1267 = TaskHandler.currentTimeMillis(); } - @ObfuscatedName("d") + @ObfuscatedName("i") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "37" + signature = "(S)V", + garbageValue = "-21829" ) @Export("read") void read() { AccessFile var1 = this.getPreferencesFile(false); - label225: { + label224: { try { byte[] var2 = new byte[(int)var1.length()]; @@ -229,68 +256,67 @@ public class Varcs { } } - Buffer var15 = new Buffer(var2); - if (var15.array.length - var15.offset < 1) { + Buffer var14 = new Buffer(var2); + if (var14.array.length - var14.offset < 1) { return; } - int var16 = var15.readUnsignedByte(); - if (var16 >= 0 && var16 <= 2) { + int var15 = var14.readUnsignedByte(); + if (var15 >= 0 && var15 <= 2) { int var7; int var8; int var9; - int var17; - if (var16 >= 2) { - var17 = var15.readUnsignedShort(); + int var16; + if (var15 >= 2) { + var16 = var14.readUnsignedShort(); var7 = 0; while (true) { - if (var7 >= var17) { - break label225; + if (var7 >= var16) { + break label224; } - var8 = var15.readUnsignedShort(); - var9 = var15.readUnsignedByte(); - class3[] var10 = new class3[]{class3.field13, class3.field18, class3.field17}; - class3 var11 = (class3)WorldMapIcon_1.findEnumerated(var10, var9); - Object var12 = var11.method55(var15); + var8 = var14.readUnsignedShort(); + var9 = var14.readUnsignedByte(); + class3 var10 = (class3)CollisionMap.findEnumerated(class3.method45(), var9); + Object var11 = var10.method40(var14); if (this.intsPersistence[var8]) { - this.map.put(var8, var12); + this.map.put(var8, var11); } ++var7; } } else { - var17 = var15.readUnsignedShort(); + var16 = var14.readUnsignedShort(); - for (var7 = 0; var7 < var17; ++var7) { - var8 = var15.readUnsignedShort(); - var9 = var15.readInt(); + for (var7 = 0; var7 < var16; ++var7) { + var8 = var14.readUnsignedShort(); + var9 = var14.readInt(); if (this.intsPersistence[var8]) { this.map.put(var8, var9); } } - var7 = var15.readUnsignedShort(); + var7 = var14.readUnsignedShort(); var8 = 0; while (true) { if (var8 >= var7) { - break label225; + break label224; } - var15.readUnsignedShort(); - var15.readStringCp1252NullTerminated(); + var14.readUnsignedShort(); + var14.readStringCp1252NullTerminated(); ++var8; } } } - } catch (Exception var26) { - break label225; + } catch (Exception var25) { + break label224; } finally { try { var1.close(); - } catch (Exception var25) { + } catch (Exception var24) { } } @@ -301,48 +327,490 @@ public class Varcs { this.unwrittenChanges = false; } - @ObfuscatedName("m") + @ObfuscatedName("k") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "-53918442" + garbageValue = "-1047394064" ) @Export("tryWrite") void tryWrite() { - if (this.unwrittenChanges && this.field1246 < PlayerAppearance.currentTimeMillis() - 60000L) { + if (this.unwrittenChanges && this.field1267 < TaskHandler.currentTimeMillis() - 60000L) { this.write(); } } - @ObfuscatedName("p") + @ObfuscatedName("x") @ObfuscatedSignature( - signature = "(B)Z", - garbageValue = "4" + signature = "(I)Z", + garbageValue = "229746516" ) @Export("hasUnwrittenChanges") boolean hasUnwrittenChanges() { return this.unwrittenChanges; } - @ObfuscatedName("t") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(II)Liu;", - garbageValue = "-1999284157" + signature = "(IS)Lis;", + garbageValue = "200" ) - @Export("VarpDefinition_get") - public static VarpDefinition VarpDefinition_get(int var0) { - VarpDefinition var1 = (VarpDefinition)VarpDefinition.VarpDefinition_cached.get((long)var0); - if (var1 != null) { - return var1; + @Export("WorldMapElement_get") + public static WorldMapElement WorldMapElement_get(int var0) { + return var0 >= 0 && var0 < WorldMapElement.WorldMapElement_cached.length && WorldMapElement.WorldMapElement_cached[var0] != null ? WorldMapElement.WorldMapElement_cached[var0] : new WorldMapElement(var0); + } + + @ObfuscatedName("b") + @ObfuscatedSignature( + signature = "(I)Lgx;", + garbageValue = "2098158571" + ) + public static PacketBufferNode method2221() { + PacketBufferNode var0 = StudioGame.method4225(); + var0.clientPacket = null; + var0.clientPacketLength = 0; + var0.packetBuffer = new PacketBuffer(5000); + return var0; + } + + @ObfuscatedName("i") + @ObfuscatedSignature( + signature = "(CI)Z", + garbageValue = "898966718" + ) + @Export("isAlphaNumeric") + public static boolean isAlphaNumeric(char var0) { + return var0 >= '0' && var0 <= '9' || var0 >= 'A' && var0 <= 'Z' || var0 >= 'a' && var0 <= 'z'; + } + + @ObfuscatedName("x") + @ObfuscatedSignature( + signature = "(ILci;ZI)I", + garbageValue = "2145599306" + ) + static int method2201(int var0, Script var1, boolean var2) { + Widget var3; + if (var0 >= 2000) { + var0 -= 1000; + var3 = Language.getWidget(Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]); } else { - byte[] var2 = VarpDefinition.VarpDefinition_archive.takeFile(16, var0); - var1 = new VarpDefinition(); - if (var2 != null) { - var1.decode(new Buffer(var2)); + var3 = var2 ? Interpreter.field1090 : class188.field2352; + } + + String var4 = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]; + int[] var5 = null; + if (var4.length() > 0 && var4.charAt(var4.length() - 1) == 'Y') { + int var6 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + if (var6 > 0) { + for (var5 = new int[var6]; var6-- > 0; var5[var6] = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]) { + } } - VarpDefinition.VarpDefinition_cached.put(var1, (long)var0); - return var1; + var4 = var4.substring(0, var4.length() - 1); + } + + Object[] var8 = new Object[var4.length() + 1]; + + int var7; + for (var7 = var8.length - 1; var7 >= 1; --var7) { + if (var4.charAt(var7 - 1) == 's') { + var8[var7] = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]; + } else { + var8[var7] = new Integer(Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]); + } + } + + var7 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + if (var7 != -1) { + var8[0] = new Integer(var7); + } else { + var8 = null; + } + + if (var0 == ScriptOpcodes.CC_SETONCLICK) { + var3.onClick = var8; + } else if (var0 == ScriptOpcodes.CC_SETONHOLD) { + var3.onHold = var8; + } else if (var0 == ScriptOpcodes.CC_SETONRELEASE) { + var3.onRelease = var8; + } else if (var0 == ScriptOpcodes.CC_SETONMOUSEOVER) { + var3.onMouseOver = var8; + } else if (var0 == ScriptOpcodes.CC_SETONMOUSELEAVE) { + var3.onMouseLeave = var8; + } else if (var0 == ScriptOpcodes.CC_SETONDRAG) { + var3.onDrag = var8; + } else if (var0 == ScriptOpcodes.CC_SETONTARGETLEAVE) { + var3.onTargetLeave = var8; + } else if (var0 == ScriptOpcodes.CC_SETONVARTRANSMIT) { + var3.onVarTransmit = var8; + var3.varTransmitTriggers = var5; + } else if (var0 == ScriptOpcodes.CC_SETONTIMER) { + var3.onTimer = var8; + } else if (var0 == ScriptOpcodes.CC_SETONOP) { + var3.onOp = var8; + } else if (var0 == ScriptOpcodes.CC_SETONDRAGCOMPLETE) { + var3.onDragComplete = var8; + } else if (var0 == ScriptOpcodes.CC_SETONCLICKREPEAT) { + var3.onClickRepeat = var8; + } else if (var0 == ScriptOpcodes.CC_SETONMOUSEREPEAT) { + var3.onMouseRepeat = var8; + } else if (var0 == ScriptOpcodes.CC_SETONINVTRANSMIT) { + var3.onInvTransmit = var8; + var3.invTransmitTriggers = var5; + } else if (var0 == ScriptOpcodes.CC_SETONSTATTRANSMIT) { + var3.onStatTransmit = var8; + var3.statTransmitTriggers = var5; + } else if (var0 == ScriptOpcodes.CC_SETONTARGETENTER) { + var3.onTargetEnter = var8; + } else if (var0 == ScriptOpcodes.CC_SETONSCROLLWHEEL) { + var3.onScroll = var8; + } else if (var0 == ScriptOpcodes.CC_SETONCHATTRANSMIT) { + var3.onChatTransmit = var8; + } else if (var0 == ScriptOpcodes.CC_SETONKEY) { + var3.onKey = var8; + } else if (var0 == ScriptOpcodes.CC_SETONFRIENDTRANSMIT) { + var3.onFriendTransmit = var8; + } else if (var0 == ScriptOpcodes.CC_SETONCLANTRANSMIT) { + var3.onClanTransmit = var8; + } else if (var0 == ScriptOpcodes.CC_SETONMISCTRANSMIT) { + var3.onMiscTransmit = var8; + } else if (var0 == ScriptOpcodes.CC_SETONDIALOGABORT) { + var3.onDialogAbort = var8; + } else if (var0 == ScriptOpcodes.CC_SETONSUBCHANGE) { + var3.onSubChange = var8; + } else if (var0 == ScriptOpcodes.CC_SETONSTOCKTRANSMIT) { + var3.onStockTransmit = var8; + } else if (var0 == 1426) { + var3.field2689 = var8; + } else { + if (var0 != ScriptOpcodes.CC_SETONRESIZE) { + return 2; + } + + var3.onResize = var8; + } + + var3.hasListener = true; + return 1; + } + + @ObfuscatedName("e") + @ObfuscatedSignature( + signature = "(ILci;ZB)I", + garbageValue = "-3" + ) + static int method2220(int var0, Script var1, boolean var2) { + Widget var3 = var2 ? Interpreter.field1090 : class188.field2352; + if (var0 == ScriptOpcodes.CC_GETSCROLLX) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.scrollX; + return 1; + } else if (var0 == ScriptOpcodes.CC_GETSCROLLY) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.scrollY; + return 1; + } else if (var0 == ScriptOpcodes.CC_GETTEXT) { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var3.text; + return 1; + } else if (var0 == ScriptOpcodes.CC_GETSCROLLWIDTH) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.scrollWidth; + return 1; + } else if (var0 == ScriptOpcodes.CC_GETSCROLLHEIGHT) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.scrollHeight; + return 1; + } else if (var0 == ScriptOpcodes.CC_GETMODELZOOM) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.modelZoom; + return 1; + } else if (var0 == ScriptOpcodes.CC_GETMODELANGLE_X) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.modelAngleX; + return 1; + } else if (var0 == ScriptOpcodes.CC_GETMODELANGLE_Z) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.modelAngleZ; + return 1; + } else if (var0 == ScriptOpcodes.CC_GETMODELANGLE_Y) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.modelAngleY; + return 1; + } else if (var0 == ScriptOpcodes.CC_GETTRANSTOP) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.transparencyTop; + return 1; + } else if (var0 == ScriptOpcodes.CC_GETTRANSBOT) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.transparencyBot; + return 1; + } else if (var0 == ScriptOpcodes.CC_GETCOLOUR) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.color; + return 1; + } else if (var0 == ScriptOpcodes.CC_GETFILLCOLOUR) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.color2; + return 1; + } else if (var0 == ScriptOpcodes.CC_GETFILLMODE) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.fillMode.rsOrdinal(); + return 1; + } else if (var0 == ScriptOpcodes.CC_GETMODELTRANSPARENT) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.modelTransparency ? 1 : 0; + return 1; + } else { + return 2; + } + } + + @ObfuscatedName("av") + @ObfuscatedSignature( + signature = "(ILci;ZB)I", + garbageValue = "-27" + ) + static int method2194(int var0, Script var1, boolean var2) { + if (var0 == ScriptOpcodes.LOGOUT) { + Client.logoutTimer = 250; + return 1; + } else { + return 2; + } + } + + @ObfuscatedName("ga") + @ObfuscatedSignature( + signature = "(Lbg;ZI)V", + garbageValue = "-1731011436" + ) + @Export("addPlayerToScene") + static void addPlayerToScene(Player var0, boolean var1) { + if (var0 != null && var0.isVisible() && !var0.isHidden) { + var0.isUnanimated = false; + if ((Client.isLowDetail && Players.Players_count > 50 || Players.Players_count > 200) && var1 && var0.readySequence == var0.movementSequence) { + var0.isUnanimated = true; + } + + int var2 = var0.x >> 7; + int var3 = var0.y >> 7; + if (var2 >= 0 && var2 < 104 && var3 >= 0 && var3 < 104) { + long var4 = MouseHandler.calculateTag(0, 0, 0, false, var0.index); + if (var0.model0 != null && Client.cycle >= var0.animationCycleStart && Client.cycle < var0.animationCycleEnd) { + var0.isUnanimated = false; + var0.tileHeight = class195.getTileHeight(var0.x, var0.y, ClientPacket.Client_plane); + var0.playerCycle = Client.cycle; + class2.scene.addNullableObject(ClientPacket.Client_plane, var0.x, var0.y, var0.tileHeight, 60, var0, var0.rotation, var4, var0.field618, var0.field620, var0.field621, var0.field622); + } else { + if ((var0.x & 127) == 64 && (var0.y & 127) == 64) { + if (Client.tileLastDrawnActor[var2][var3] == Client.viewportDrawCount) { + return; + } + + Client.tileLastDrawnActor[var2][var3] = Client.viewportDrawCount; + } + + var0.tileHeight = class195.getTileHeight(var0.x, var0.y, ClientPacket.Client_plane); + var0.playerCycle = Client.cycle; + class2.scene.drawEntity(ClientPacket.Client_plane, var0.x, var0.y, var0.tileHeight, 60, var0, var0.rotation, var4, var0.isWalking); + } + } + } + + } + + @ObfuscatedName("ig") + @ObfuscatedSignature( + signature = "(IIIIB)V", + garbageValue = "-19" + ) + @Export("addSceneMenuOptions") + static final void addSceneMenuOptions(int var0, int var1, int var2, int var3) { + if (Client.isItemSelected == 0 && !Client.isSpellSelected) { + WorldMapSprite.insertMenuItemNoShift("Walk here", "", 23, 0, var0 - var2, var1 - var3); + } + + long var4 = -1L; + long var6 = -1L; + int var8 = 0; + + while (true) { + int var10 = ViewportMouse.ViewportMouse_entityCount; + if (var8 >= var10) { + if (-1L != var4) { + var8 = (int)(var4 >>> 0 & 127L); + var10 = WorldMapSectionType.method271(var4); + Player var11 = Client.players[Client.combatTargetPlayerIndex]; + Entity.addPlayerToMenu(var11, Client.combatTargetPlayerIndex, var8, var10); + } + + return; + } + + long var25 = SoundCache.method2531(var8); + if (var25 != var6) { + label333: { + var6 = var25; + int var13 = HealthBarUpdate.ViewportMouse_unpackX(var8); + int var14 = GrandExchangeOfferUnitPriceComparator.method143(var8); + long var17 = ViewportMouse.ViewportMouse_entityTags[var8]; + int var16 = (int)(var17 >>> 14 & 3L); + int var27 = ItemContainer.Entity_unpackID(ViewportMouse.ViewportMouse_entityTags[var8]); + int var18 = var27; + if (var16 == 2 && class2.scene.getObjectFlags(ClientPacket.Client_plane, var13, var14, var25) >= 0) { + ObjectDefinition var19 = Occluder.getObjectDefinition(var27); + if (var19.transforms != null) { + var19 = var19.transform(); + } + + if (var19 == null) { + break label333; + } + + if (Client.isItemSelected == 1) { + WorldMapSprite.insertMenuItemNoShift("Use", Client.selectedItemName + " " + "->" + " " + class222.colorStartTag(65535) + var19.name, 1, var27, var13, var14); + } else if (Client.isSpellSelected) { + if ((Actor.selectedSpellFlags & 4) == 4) { + WorldMapSprite.insertMenuItemNoShift(Client.selectedSpellActionName, Client.selectedSpellName + " " + "->" + " " + class222.colorStartTag(65535) + var19.name, 2, var27, var13, var14); + } + } else { + String[] var28 = var19.actions; + if (var28 != null) { + for (int var31 = 4; var31 >= 0; --var31) { + if (var28[var31] != null) { + short var22 = 0; + if (var31 == 0) { + var22 = 3; + } + + if (var31 == 1) { + var22 = 4; + } + + if (var31 == 2) { + var22 = 5; + } + + if (var31 == 3) { + var22 = 6; + } + + if (var31 == 4) { + var22 = 1001; + } + + WorldMapSprite.insertMenuItemNoShift(var28[var31], class222.colorStartTag(65535) + var19.name, var22, var18, var13, var14); + } + } + } + + WorldMapSprite.insertMenuItemNoShift("Examine", class222.colorStartTag(65535) + var19.name, 1002, var19.id, var13, var14); + } + } + + int var20; + NPC var21; + Player var23; + int[] var35; + int var37; + if (var16 == 1) { + NPC var32 = Client.npcs[var18]; + if (var32 == null) { + break label333; + } + + if (var32.definition.size == 1 && (var32.x & 127) == 64 && (var32.y & 127) == 64) { + for (var20 = 0; var20 < Client.npcCount; ++var20) { + var21 = Client.npcs[Client.npcIndices[var20]]; + if (var21 != null && var21 != var32 && var21.definition.size == 1 && var21.x == var32.x && var32.y == var21.y) { + LoginPacket.addNpcToMenu(var21.definition, Client.npcIndices[var20], var13, var14); + } + } + + var20 = Players.Players_count; + var35 = Players.Players_indices; + + for (var37 = 0; var37 < var20; ++var37) { + var23 = Client.players[var35[var37]]; + if (var23 != null && var23.x == var32.x && var23.y == var32.y) { + Entity.addPlayerToMenu(var23, var35[var37], var13, var14); + } + } + } + + LoginPacket.addNpcToMenu(var32.definition, var18, var13, var14); + } + + if (var16 == 0) { + Player var33 = Client.players[var18]; + if (var33 == null) { + break label333; + } + + if ((var33.x & 127) == 64 && (var33.y & 127) == 64) { + for (var20 = 0; var20 < Client.npcCount; ++var20) { + var21 = Client.npcs[Client.npcIndices[var20]]; + if (var21 != null && var21.definition.size == 1 && var33.x == var21.x && var21.y == var33.y) { + LoginPacket.addNpcToMenu(var21.definition, Client.npcIndices[var20], var13, var14); + } + } + + var20 = Players.Players_count; + var35 = Players.Players_indices; + + for (var37 = 0; var37 < var20; ++var37) { + var23 = Client.players[var35[var37]]; + if (var23 != null && var33 != var23 && var33.x == var23.x && var23.y == var33.y) { + Entity.addPlayerToMenu(var23, var35[var37], var13, var14); + } + } + } + + if (var18 != Client.combatTargetPlayerIndex) { + Entity.addPlayerToMenu(var33, var18, var13, var14); + } else { + var4 = var25; + } + } + + if (var16 == 3) { + NodeDeque var34 = Client.groundItems[ClientPacket.Client_plane][var13][var14]; + if (var34 != null) { + for (TileItem var38 = (TileItem)var34.first(); var38 != null; var38 = (TileItem)var34.next()) { + ItemDefinition var36 = Interpreter.ItemDefinition_get(var38.id); + if (Client.isItemSelected == 1) { + WorldMapSprite.insertMenuItemNoShift("Use", Client.selectedItemName + " " + "->" + " " + class222.colorStartTag(16748608) + var36.name, 16, var38.id, var13, var14); + } else if (Client.isSpellSelected) { + if ((Actor.selectedSpellFlags & 1) == 1) { + WorldMapSprite.insertMenuItemNoShift(Client.selectedSpellActionName, Client.selectedSpellName + " " + "->" + " " + class222.colorStartTag(16748608) + var36.name, 17, var38.id, var13, var14); + } + } else { + String[] var29 = var36.groundActions; + + for (int var30 = 4; var30 >= 0; --var30) { + if (var29 != null && var29[var30] != null) { + byte var24 = 0; + if (var30 == 0) { + var24 = 18; + } + + if (var30 == 1) { + var24 = 19; + } + + if (var30 == 2) { + var24 = 20; + } + + if (var30 == 3) { + var24 = 21; + } + + if (var30 == 4) { + var24 = 22; + } + + WorldMapSprite.insertMenuItemNoShift(var29[var30], class222.colorStartTag(16748608) + var36.name, var24, var38.id, var13, var14); + } else if (var30 == 2) { + WorldMapSprite.insertMenuItemNoShift("Take", class222.colorStartTag(16748608) + var36.name, 20, var38.id, var13, var14); + } + } + + WorldMapSprite.insertMenuItemNoShift("Examine", class222.colorStartTag(16748608) + var36.name, 1004, var38.id, var13, var14); + } + } + } + } + } + } + + ++var8; } } } diff --git a/runescape-client/src/main/java/VarpDefinition.java b/runescape-client/src/main/java/VarpDefinition.java index 84fb8b60fe..9185693830 100644 --- a/runescape-client/src/main/java/VarpDefinition.java +++ b/runescape-client/src/main/java/VarpDefinition.java @@ -4,30 +4,30 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("iu") +@ObfuscatedName("ib") @Implements("VarpDefinition") public class VarpDefinition extends DualNode { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lhq;" + signature = "Lhf;" ) @Export("VarpDefinition_archive") - static AbstractArchive VarpDefinition_archive; - @ObfuscatedName("t") + public static AbstractArchive VarpDefinition_archive; + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = -444432513 + intValue = -1363987461 ) @Export("VarpDefinition_fileCount") public static int VarpDefinition_fileCount; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Leb;" + signature = "Lef;" ) @Export("VarpDefinition_cached") static EvictingDualNodeHashTable VarpDefinition_cached; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = 1197454389 + intValue = 2147120887 ) @Export("type") public int type; @@ -40,10 +40,10 @@ public class VarpDefinition extends DualNode { this.type = 0; } - @ObfuscatedName("n") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Lkc;B)V", - garbageValue = "-86" + signature = "(Lkg;I)V", + garbageValue = "1343549927" ) @Export("decode") void decode(Buffer var1) { @@ -57,10 +57,10 @@ public class VarpDefinition extends DualNode { } } - @ObfuscatedName("q") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Lkc;II)V", - garbageValue = "735169328" + signature = "(Lkg;II)V", + garbageValue = "1561569314" ) @Export("decodeNext") void decodeNext(Buffer var1, int var2) { diff --git a/runescape-client/src/main/java/Varps.java b/runescape-client/src/main/java/Varps.java index 7c00a03e1b..e8d522040d 100644 --- a/runescape-client/src/main/java/Varps.java +++ b/runescape-client/src/main/java/Varps.java @@ -1,19 +1,32 @@ import net.runelite.mapping.Export; import net.runelite.mapping.Implements; +import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; +import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("hj") +@ObfuscatedName("hm") @Implements("Varps") public class Varps { - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("Varps_masks") static int[] Varps_masks; - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("Varps_temp") public static int[] Varps_temp; - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("Varps_main") public static int[] Varps_main; + @ObfuscatedName("o") + @ObfuscatedSignature( + signature = "Llm;" + ) + @Export("options_buttons_2Sprite") + static IndexedSprite options_buttons_2Sprite; + @ObfuscatedName("di") + @ObfuscatedGetter( + longValue = 9031860533713930289L + ) + static long field2533; static { Varps_masks = new int[32]; @@ -27,4 +40,65 @@ public class Varps { Varps_temp = new int[4000]; Varps_main = new int[4000]; } + + @ObfuscatedName("hl") + @ObfuscatedSignature( + signature = "(IIIIIIIIII)V", + garbageValue = "1896551427" + ) + @Export("updatePendingSpawn") + static final void updatePendingSpawn(int var0, int var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8) { + PendingSpawn var9 = null; + + for (PendingSpawn var10 = (PendingSpawn)Client.pendingSpawns.last(); var10 != null; var10 = (PendingSpawn)Client.pendingSpawns.previous()) { + if (var0 == var10.plane && var10.x == var1 && var2 == var10.y && var3 == var10.type) { + var9 = var10; + break; + } + } + + if (var9 == null) { + var9 = new PendingSpawn(); + var9.plane = var0; + var9.type = var3; + var9.x = var1; + var9.y = var2; + class215.method4108(var9); + Client.pendingSpawns.addFirst(var9); + } + + var9.id = var4; + var9.field927 = var5; + var9.orientation = var6; + var9.delay = var7; + var9.hitpoints = var8; + } + + @ObfuscatedName("ia") + @ObfuscatedSignature( + signature = "(B)V", + garbageValue = "1" + ) + static void method4043() { + for (int var0 = 0; var0 < Client.menuOptionsCount; ++var0) { + if (class96.method2315(Client.menuOpcodes[var0])) { + if (var0 < Client.menuOptionsCount - 1) { + for (int var1 = var0; var1 < Client.menuOptionsCount - 1; ++var1) { + Client.menuActions[var1] = Client.menuActions[var1 + 1]; + Client.menuTargets[var1] = Client.menuTargets[var1 + 1]; + Client.menuOpcodes[var1] = Client.menuOpcodes[var1 + 1]; + Client.menuIdentifiers[var1] = Client.menuIdentifiers[var1 + 1]; + Client.menuArguments1[var1] = Client.menuArguments1[var1 + 1]; + Client.menuArguments2[var1] = Client.menuArguments2[var1 + 1]; + Client.menuShiftClick[var1] = Client.menuShiftClick[var1 + 1]; + } + } + + --var0; + --Client.menuOptionsCount; + } + } + + MouseHandler.calculateMenuBounds(TileItemPile.menuWidth / 2 + HealthBar.menuX, class191.menuY); + } } diff --git a/runescape-client/src/main/java/VertexNormal.java b/runescape-client/src/main/java/VertexNormal.java index ce68ee5452..602f7f3fd2 100644 --- a/runescape-client/src/main/java/VertexNormal.java +++ b/runescape-client/src/main/java/VertexNormal.java @@ -1,36 +1,39 @@ -import java.io.File; -import java.io.IOException; -import java.io.RandomAccessFile; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("de") +@ObfuscatedName("dy") @Implements("VertexNormal") public class VertexNormal { - @ObfuscatedName("a") + @ObfuscatedName("rp") + @ObfuscatedSignature( + signature = "Lbz;" + ) + @Export("friendSystem") + public static FriendSystem friendSystem; + @ObfuscatedName("u") @ObfuscatedGetter( - intValue = 300716537 + intValue = -1950560399 ) @Export("x") int x; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = -888954877 + intValue = -1465831069 ) @Export("y") int y; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = -284116179 + intValue = 1066205161 ) @Export("z") int z; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = -1281469655 + intValue = -600292875 ) @Export("magnitude") int magnitude; @@ -39,7 +42,7 @@ public class VertexNormal { } @ObfuscatedSignature( - signature = "(Lde;)V" + signature = "(Ldy;)V" ) VertexNormal(VertexNormal var1) { this.x = var1.x; @@ -48,191 +51,159 @@ public class VertexNormal { this.magnitude = var1.magnitude; } - @ObfuscatedName("t") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "(Ljava/lang/String;Ljava/lang/String;II)Ljava/io/File;", - garbageValue = "43195180" + signature = "(Lkg;J)V" ) - @Export("getCacheDir") - static File getCacheDir(String var0, String var1, int var2) { - String var3 = var2 == 0 ? "" : "" + var2; - SecureRandomCallable.JagexCache_locationFile = new File(class30.userHomeDirectory, "jagex_cl_" + var0 + "_" + var1 + var3 + ".dat"); - String var4 = null; - String var5 = null; - boolean var6 = false; - Buffer var8; - int var11; - File var27; - if (SecureRandomCallable.JagexCache_locationFile.exists()) { - try { - AccessFile var7 = new AccessFile(SecureRandomCallable.JagexCache_locationFile, "rw", 10000L); - - int var9; - for (var8 = new Buffer((int)var7.length()); var8.offset < var8.array.length; var8.offset += var9) { - var9 = var7.read(var8.array, var8.offset, var8.array.length - var8.offset); - if (var9 == -1) { - throw new IOException(); - } - } - - var8.offset = 0; - var9 = var8.readUnsignedByte(); - if (var9 < 1 || var9 > 3) { - throw new IOException("" + var9); - } - - int var10 = 0; - if (var9 > 1) { - var10 = var8.readUnsignedByte(); - } - - if (var9 <= 2) { - var4 = var8.readStringCp1252NullCircumfixed(); - if (var10 == 1) { - var5 = var8.readStringCp1252NullCircumfixed(); - } - } else { - var4 = var8.readCESU8(); - if (var10 == 1) { - var5 = var8.readCESU8(); - } - } - - var7.close(); - } catch (IOException var25) { - var25.printStackTrace(); - } - - if (var4 != null) { - var27 = new File(var4); - if (!var27.exists()) { - var4 = null; - } - } - - if (var4 != null) { - var27 = new File(var4, "test.dat"); - - boolean var28; - try { - RandomAccessFile var15 = new RandomAccessFile(var27, "rw"); - var11 = var15.read(); - var15.seek(0L); - var15.write(var11); - var15.seek(0L); - var15.close(); - var27.delete(); - var28 = true; - } catch (Exception var23) { - var28 = false; - } - - if (!var28) { - var4 = null; - } - } + static void method3019(Buffer var0, long var1) { + var1 /= 10L; + if (var1 < 0L) { + var1 = 0L; + } else if (var1 > 65535L) { + var1 = 65535L; } - if (var4 == null && var2 == 0) { - label155: - for (int var16 = 0; var16 < class312.field3803.length; ++var16) { - for (int var17 = 0; var17 < BoundaryObject.field1859.length; ++var17) { - File var18 = new File(BoundaryObject.field1859[var17] + class312.field3803[var16] + File.separatorChar + var0 + File.separatorChar); - if (var18.exists()) { - File var19 = new File(var18, "test.dat"); - - boolean var29; - try { - RandomAccessFile var12 = new RandomAccessFile(var19, "rw"); - int var13 = var12.read(); - var12.seek(0L); - var12.write(var13); - var12.seek(0L); - var12.close(); - var19.delete(); - var29 = true; - } catch (Exception var22) { - var29 = false; - } - - if (var29) { - var4 = var18.toString(); - var6 = true; - break label155; - } - } - } - } - } - - if (var4 == null) { - var4 = class30.userHomeDirectory + File.separatorChar + "jagexcache" + var3 + File.separatorChar + var0 + File.separatorChar + var1 + File.separatorChar; - var6 = true; - } - - File var26; - if (var5 != null) { - var26 = new File(var5); - var27 = new File(var4); - - try { - File[] var33 = var26.listFiles(); - File[] var31 = var33; - - for (var11 = 0; var11 < var31.length; ++var11) { - File var30 = var31[var11]; - File var20 = new File(var27, var30.getName()); - boolean var14 = var30.renameTo(var20); - if (!var14) { - throw new IOException(); - } - } - } catch (Exception var24) { - var24.printStackTrace(); - } - - var6 = true; - } - - if (var6) { - var26 = new File(var4); - var8 = null; - - try { - AccessFile var34 = new AccessFile(SecureRandomCallable.JagexCache_locationFile, "rw", 10000L); - Buffer var32 = new Buffer(500); - var32.writeByte(3); - var32.writeByte(var8 != null ? 1 : 0); - var32.writeCESU8(var26.getPath()); - if (var8 != null) { - var32.writeCESU8(""); - } - - var34.write(var32.array, 0, var32.offset); - var34.close(); - } catch (IOException var21) { - var21.printStackTrace(); - } - } - - return new File(var4); + var0.writeShort((int)var1); } - @ObfuscatedName("c") + @ObfuscatedName("x") @ObfuscatedSignature( - signature = "(Lhq;II)Llw;", - garbageValue = "-1257586004" + signature = "(IIIIIZI)Lln;", + garbageValue = "2136312432" ) - public static IndexedSprite method3121(AbstractArchive var0, int var1) { - byte[] var3 = var0.takeFileFlat(var1); - boolean var2; - if (var3 == null) { - var2 = false; - } else { - Message.SpriteBuffer_decode(var3); - var2 = true; + @Export("getItemSprite") + public static final Sprite getItemSprite(int var0, int var1, int var2, int var3, int var4, boolean var5) { + if (var1 == -1) { + var4 = 0; + } else if (var4 == 2 && var1 != 1) { + var4 = 1; } - return !var2 ? null : class51.method975(); + long var6 = ((long)var3 << 42) + ((long)var4 << 40) + (long)var0 + ((long)var1 << 16) + ((long)var2 << 38); + Sprite var8; + if (!var5) { + var8 = (Sprite)ItemDefinition.ItemDefinition_cachedSprites.get(var6); + if (var8 != null) { + return var8; + } + } + + ItemDefinition var9 = Interpreter.ItemDefinition_get(var0); + if (var1 > 1 && var9.countobj != null) { + int var10 = -1; + + for (int var11 = 0; var11 < 10; ++var11) { + if (var1 >= var9.countco[var11] && var9.countco[var11] != 0) { + var10 = var9.countobj[var11]; + } + } + + if (var10 != -1) { + var9 = Interpreter.ItemDefinition_get(var10); + } + } + + Model var19 = var9.getModel(1); + if (var19 == null) { + return null; + } else { + Sprite var20 = null; + if (var9.noteTemplate != -1) { + var20 = getItemSprite(var9.note, 10, 1, 0, 0, true); + if (var20 == null) { + return null; + } + } else if (var9.notedId != -1) { + var20 = getItemSprite(var9.unnotedId, var1, var2, var3, 0, false); + if (var20 == null) { + return null; + } + } else if (var9.placeholderTemplate != -1) { + var20 = getItemSprite(var9.placeholder, var1, 0, 0, 0, false); + if (var20 == null) { + return null; + } + } + + int[] var12 = Rasterizer2D.Rasterizer2D_pixels; + int var13 = Rasterizer2D.Rasterizer2D_width; + int var14 = Rasterizer2D.Rasterizer2D_height; + int[] var15 = new int[4]; + Rasterizer2D.Rasterizer2D_getClipArray(var15); + var8 = new Sprite(36, 32); + Rasterizer2D.Rasterizer2D_replace(var8.pixels, 36, 32); + Rasterizer2D.Rasterizer2D_clear(); + Rasterizer3D.Rasterizer3D_setClipFromRasterizer2D(); + Rasterizer3D.method3024(16, 16); + Rasterizer3D.field1750 = false; + if (var9.placeholderTemplate != -1) { + var20.drawTransBgAt(0, 0); + } + + int var16 = var9.zoom2d; + if (var5) { + var16 = (int)((double)var16 * 1.5D); + } else if (var2 == 2) { + var16 = (int)(1.04D * (double)var16); + } + + int var17 = var16 * Rasterizer3D.Rasterizer3D_sine[var9.xan2d] >> 16; + int var18 = var16 * Rasterizer3D.Rasterizer3D_cosine[var9.xan2d] >> 16; + var19.calculateBoundsCylinder(); + var19.method2958(0, var9.yan2d, var9.zan2d, var9.xan2d, var9.offsetX2d, var19.height / 2 + var17 + var9.offsetY2d, var18 + var9.offsetY2d); + if (var9.notedId != -1) { + var20.drawTransBgAt(0, 0); + } + + if (var2 >= 1) { + var8.outline(1); + } + + if (var2 >= 2) { + var8.outline(16777215); + } + + if (var3 != 0) { + var8.shadow(var3); + } + + Rasterizer2D.Rasterizer2D_replace(var8.pixels, 36, 32); + if (var9.noteTemplate != -1) { + var20.drawTransBgAt(0, 0); + } + + if (var4 == 1 || var4 == 2 && var9.isStackable == 1) { + class335.ItemDefinition_fontPlain11.draw(WorldMapAreaData.method711(var1), 0, 9, 16776960, 1); + } + + if (!var5) { + ItemDefinition.ItemDefinition_cachedSprites.put(var8, var6); + } + + Rasterizer2D.Rasterizer2D_replace(var12, var13, var14); + Rasterizer2D.Rasterizer2D_setClipArray(var15); + Rasterizer3D.Rasterizer3D_setClipFromRasterizer2D(); + Rasterizer3D.field1750 = true; + return var8; + } + } + + @ObfuscatedName("lb") + @ObfuscatedSignature( + signature = "(Ljava/lang/String;I)Ljava/lang/String;", + garbageValue = "-710411127" + ) + static String method3017(String var0) { + PlayerType[] var1 = class2.PlayerType_values(); + + for (int var2 = 0; var2 < var1.length; ++var2) { + PlayerType var3 = var1[var2]; + if (var3.modIcon != -1 && var0.startsWith(Client.method1749(var3.modIcon))) { + var0 = var0.substring(6 + Integer.toString(var3.modIcon).length()); + break; + } + } + + return var0; } } diff --git a/runescape-client/src/main/java/VerticalAlignment.java b/runescape-client/src/main/java/VerticalAlignment.java index 7f2b04cc15..e3969a4e63 100644 --- a/runescape-client/src/main/java/VerticalAlignment.java +++ b/runescape-client/src/main/java/VerticalAlignment.java @@ -1,4 +1,3 @@ -import java.io.IOException; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; @@ -8,38 +7,35 @@ import net.runelite.mapping.ObfuscatedSignature; @ObfuscatedName("ik") @Implements("VerticalAlignment") public enum VerticalAlignment implements Enumerated { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "Lik;" ) - field3182(0, 0), - @ObfuscatedName("t") + field3201(2, 0), + @ObfuscatedName("f") @ObfuscatedSignature( signature = "Lik;" ) @Export("VerticalAlignment_centered") VerticalAlignment_centered(1, 1), - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( signature = "Lik;" ) - field3183(2, 2); + field3200(0, 2); - @ObfuscatedName("d") - @ObfuscatedSignature( - signature = "Ldl;" - ) - @Export("soundSystem") - static SoundSystem soundSystem; - @ObfuscatedName("q") + @ObfuscatedName("gh") + @Export("regionLandArchives") + static byte[][] regionLandArchives; + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = 190875525 + intValue = 445419169 ) @Export("value") public final int value; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = 1999098453 + intValue = -1195481175 ) @Export("id") final int id; @@ -49,86 +45,13 @@ public enum VerticalAlignment implements Enumerated { this.id = var4; } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(I)I", - garbageValue = "-1993081102" + signature = "(B)I", + garbageValue = "7" ) @Export("rsOrdinal") public int rsOrdinal() { return this.id; } - - @ObfuscatedName("a") - @ObfuscatedSignature( - signature = "(Lhx;B)V", - garbageValue = "-60" - ) - public static void method4504(Huffman var0) { - class210.huffman = var0; - } - - @ObfuscatedName("t") - @ObfuscatedSignature( - signature = "(Lku;ZI)V", - garbageValue = "-239852992" - ) - public static void method4503(AbstractSocket var0, boolean var1) { - if (NetCache.NetCache_socket != null) { - try { - NetCache.NetCache_socket.close(); - } catch (Exception var6) { - } - - NetCache.NetCache_socket = null; - } - - NetCache.NetCache_socket = var0; - UrlRequester.method3428(var1); - NetCache.NetCache_responseHeaderBuffer.offset = 0; - UserComparator6.NetCache_currentResponse = null; - Frames.NetCache_responseArchiveBuffer = null; - NetCache.field3161 = 0; - - while (true) { - NetFileRequest var2 = (NetFileRequest)NetCache.NetCache_pendingPriorityResponses.first(); - if (var2 == null) { - while (true) { - var2 = (NetFileRequest)NetCache.NetCache_pendingResponses.first(); - if (var2 == null) { - if (NetCache.field3165 != 0) { - try { - Buffer var7 = new Buffer(4); - var7.writeByte(4); - var7.writeByte(NetCache.field3165); - var7.writeShort(0); - NetCache.NetCache_socket.write(var7.array, 0, 4); - } catch (IOException var5) { - try { - NetCache.NetCache_socket.close(); - } catch (Exception var4) { - } - - ++NetCache.NetCache_ioExceptions; - NetCache.NetCache_socket = null; - } - } - - NetCache.NetCache_loadTime = 0; - NetCache.field3149 = PlayerAppearance.currentTimeMillis(); - return; - } - - NetCache.NetCache_pendingWritesQueue.addLast(var2); - NetCache.NetCache_pendingWrites.put(var2, var2.key); - ++NetCache.NetCache_pendingWritesCount; - --NetCache.NetCache_pendingResponsesCount; - } - } - - NetCache.NetCache_pendingPriorityWrites.put(var2, var2.key); - ++NetCache.NetCache_pendingPriorityWritesCount; - --NetCache.NetCache_pendingPriorityResponsesCount; - } - } } diff --git a/runescape-client/src/main/java/ViewportMouse.java b/runescape-client/src/main/java/ViewportMouse.java index 8d7cee7e80..049983b8db 100644 --- a/runescape-client/src/main/java/ViewportMouse.java +++ b/runescape-client/src/main/java/ViewportMouse.java @@ -4,59 +4,44 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("dc") +@ObfuscatedName("dd") @Implements("ViewportMouse") public class ViewportMouse { - @ObfuscatedName("rd") - @ObfuscatedGetter( - intValue = -645347533 - ) - static int field1713; - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("ViewportMouse_isInViewport") - public static boolean ViewportMouse_isInViewport; - @ObfuscatedName("t") + static boolean ViewportMouse_isInViewport; + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = -1568349329 + intValue = 2136731005 ) @Export("ViewportMouse_x") - public static int ViewportMouse_x; - @ObfuscatedName("n") + static int ViewportMouse_x; + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = -1582090041 + intValue = -1807081523 ) @Export("ViewportMouse_y") - public static int ViewportMouse_y; - @ObfuscatedName("q") + static int ViewportMouse_y; + @ObfuscatedName("g") @Export("ViewportMouse_false0") - public static boolean ViewportMouse_false0; - @ObfuscatedName("v") + static boolean ViewportMouse_false0; + @ObfuscatedName("y") @ObfuscatedGetter( - intValue = 1490381659 + intValue = 998794847 ) - static int field1717; - @ObfuscatedName("l") + static int field1737; + @ObfuscatedName("w") @ObfuscatedGetter( - intValue = -1887189981 + intValue = 529684695 ) - static int field1718; - @ObfuscatedName("o") + static int field1739; + @ObfuscatedName("e") @ObfuscatedGetter( - intValue = 355686719 - ) - static int field1719; - @ObfuscatedName("h") - @ObfuscatedGetter( - intValue = -1299455817 - ) - static int field1720; - @ObfuscatedName("k") - @ObfuscatedGetter( - intValue = 702740743 + intValue = 421048203 ) @Export("ViewportMouse_entityCount") public static int ViewportMouse_entityCount; - @ObfuscatedName("x") + @ObfuscatedName("n") @Export("ViewportMouse_entityTags") public static long[] ViewportMouse_entityTags; @@ -69,13 +54,23 @@ public class ViewportMouse { ViewportMouse_entityTags = new long[1000]; } - @ObfuscatedName("t") + @ObfuscatedName("z") + @ObfuscatedSignature( + signature = "(ZZI)I", + garbageValue = "-1821844574" + ) + public static int method3015(boolean var0, boolean var1) { + byte var2 = 0; + int var3 = var2 + NetCache.NetCache_pendingPriorityResponsesCount + NetCache.NetCache_pendingPriorityWritesCount; + return var3; + } + + @ObfuscatedName("y") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "-1115855205" + garbageValue = "-950495199" ) - @Export("WorldMapRegion_clearCachedSprites") - static void WorldMapRegion_clearCachedSprites() { - WorldMapRegion.WorldMapRegion_cachedSprites.clear(); + public static void method3012() { + StructDefinition.StructDefinition_cached.clear(); } } diff --git a/runescape-client/src/main/java/VorbisCodebook.java b/runescape-client/src/main/java/VorbisCodebook.java index 596d17901f..102f0b265a 100644 --- a/runescape-client/src/main/java/VorbisCodebook.java +++ b/runescape-client/src/main/java/VorbisCodebook.java @@ -2,23 +2,23 @@ import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; -@ObfuscatedName("ch") +@ObfuscatedName("cx") @Implements("VorbisCodebook") public class VorbisCodebook { - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("dimensions") int dimensions; - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("entries") int entries; - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("lengthMap") int[] lengthMap; - @ObfuscatedName("q") - int[] field1322; - @ObfuscatedName("v") - float[][] field1323; - @ObfuscatedName("l") + @ObfuscatedName("g") + int[] field1333; + @ObfuscatedName("z") + float[][] field1334; + @ObfuscatedName("p") @Export("keys") int[] keys; @@ -35,7 +35,7 @@ public class VorbisCodebook { var2 = 0; for (var3 = VorbisSample.readBits(5) + 1; var2 < this.entries; ++var3) { - int var4 = VorbisSample.readBits(Tiles.iLog(this.entries - var2)); + int var4 = VorbisSample.readBits(class160.iLog(this.entries - var2)); for (var5 = 0; var5 < var4; ++var5) { this.lengthMap[var2++] = var3; @@ -53,7 +53,7 @@ public class VorbisCodebook { } } - this.method2492(); + this.method2358(); var2 = VorbisSample.readBits(4); if (var2 > 0) { float var15 = VorbisSample.float32Unpack(VorbisSample.readBits(32)); @@ -67,14 +67,14 @@ public class VorbisCodebook { var7 = this.entries * this.dimensions; } - this.field1322 = new int[var7]; + this.field1333 = new int[var7]; int var8; for (var8 = 0; var8 < var7; ++var8) { - this.field1322[var8] = VorbisSample.readBits(var5); + this.field1333[var8] = VorbisSample.readBits(var5); } - this.field1323 = new float[this.entries][this.dimensions]; + this.field1334 = new float[this.entries][this.dimensions]; float var9; int var10; int var11; @@ -85,8 +85,8 @@ public class VorbisCodebook { for (var11 = 0; var11 < this.dimensions; ++var11) { int var12 = var8 / var10 % var7; - float var13 = (float)this.field1322[var12] * var16 + var15 + var9; - this.field1323[var8][var11] = var13; + float var13 = (float)this.field1333[var12] * var16 + var15 + var9; + this.field1334[var8][var11] = var13; if (var6) { var9 = var13; } @@ -100,8 +100,8 @@ public class VorbisCodebook { var10 = var8 * this.dimensions; for (var11 = 0; var11 < this.dimensions; ++var11) { - float var17 = (float)this.field1322[var10] * var16 + var15 + var9; - this.field1323[var8][var11] = var17; + float var17 = (float)this.field1333[var10] * var16 + var15 + var9; + this.field1334[var8][var11] = var17; if (var6) { var9 = var17; } @@ -114,8 +114,8 @@ public class VorbisCodebook { } - @ObfuscatedName("t") - void method2492() { + @ObfuscatedName("f") + void method2358() { int[] var1 = new int[this.entries]; int[] var2 = new int[33]; @@ -208,8 +208,8 @@ public class VorbisCodebook { } - @ObfuscatedName("n") - int method2487() { + @ObfuscatedName("b") + int method2356() { int var1; for (var1 = 0; this.keys[var1] >= 0; var1 = VorbisSample.readBit() != 0 ? this.keys[var1] : var1 + 1) { } @@ -217,12 +217,12 @@ public class VorbisCodebook { return ~this.keys[var1]; } - @ObfuscatedName("q") - float[] method2496() { - return this.field1323[this.method2487()]; + @ObfuscatedName("g") + float[] method2357() { + return this.field1334[this.method2356()]; } - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("mapType1QuantValues") static int mapType1QuantValues(int var0, int var1) { int var2 = (int)Math.pow((double)var0, 1.0D / (double)var1) + 1; diff --git a/runescape-client/src/main/java/VorbisFloor.java b/runescape-client/src/main/java/VorbisFloor.java index 1f0a90ef55..1fea908057 100644 --- a/runescape-client/src/main/java/VorbisFloor.java +++ b/runescape-client/src/main/java/VorbisFloor.java @@ -2,43 +2,43 @@ import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; -@ObfuscatedName("db") +@ObfuscatedName("dw") @Implements("VorbisFloor") public class VorbisFloor { - @ObfuscatedName("a") - static final int[] field1372; - @ObfuscatedName("t") + @ObfuscatedName("u") + static final int[] field1381; + @ObfuscatedName("f") @Export("VorbisFloor_decibelStatics") static final float[] VorbisFloor_decibelStatics; - @ObfuscatedName("d") - static int[] field1377; - @ObfuscatedName("m") - static int[] field1376; - @ObfuscatedName("p") - static boolean[] field1379; - @ObfuscatedName("n") - int[] field1370; - @ObfuscatedName("q") + @ObfuscatedName("i") + static int[] field1380; + @ObfuscatedName("k") + static int[] field1389; + @ObfuscatedName("x") + static boolean[] field1390; + @ObfuscatedName("b") + int[] field1388; + @ObfuscatedName("g") @Export("multiplier") int multiplier; - @ObfuscatedName("v") + @ObfuscatedName("z") @Export("partitionClassList") int[] partitionClassList; - @ObfuscatedName("l") + @ObfuscatedName("p") @Export("classDimensions") int[] classDimensions; - @ObfuscatedName("c") + @ObfuscatedName("h") @Export("classSubClasses") int[] classSubClasses; - @ObfuscatedName("o") + @ObfuscatedName("y") @Export("classMasterbooks") int[] classMasterbooks; - @ObfuscatedName("i") + @ObfuscatedName("w") @Export("subclassBooks") int[][] subclassBooks; static { - field1372 = new int[]{256, 128, 86, 64}; + field1381 = new int[]{256, 128, 86, 64}; VorbisFloor_decibelStatics = 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}; } @@ -92,30 +92,30 @@ public class VorbisFloor { var5 += this.classDimensions[this.partitionClassList[var9]]; } - this.field1370 = new int[var5]; - this.field1370[0] = 0; - this.field1370[1] = 1 << var4; + this.field1388 = new int[var5]; + this.field1388[0] = 0; + this.field1388[1] = 1 << var4; var5 = 2; for (var9 = 0; var9 < var2; ++var9) { var7 = this.partitionClassList[var9]; for (int var8 = 0; var8 < this.classDimensions[var7]; ++var8) { - this.field1370[var5++] = VorbisSample.readBits(var4); + this.field1388[var5++] = VorbisSample.readBits(var4); } } - if (field1377 == null || field1377.length < var5) { - field1377 = new int[var5]; - field1376 = new int[var5]; - field1379 = new boolean[var5]; + if (field1380 == null || field1380.length < var5) { + field1380 = new int[var5]; + field1389 = new int[var5]; + field1390 = new boolean[var5]; } } } - @ObfuscatedName("n") - int method2568(int var1, int var2, int var3, int var4, int var5) { + @ObfuscatedName("b") + int method2423(int var1, int var2, int var3, int var4, int var5) { int var6 = var4 - var2; int var7 = var3 - var1; int var8 = var6 < 0 ? -var6 : var6; @@ -124,8 +124,8 @@ public class VorbisFloor { return var6 < 0 ? var2 - var10 : var10 + var2; } - @ObfuscatedName("q") - void method2561(int var1, int var2, int var3, int var4, float[] var5, int var6) { + @ObfuscatedName("g") + void method2424(int var1, int var2, int var3, int var4, float[] var5, int var6) { int var7 = var4 - var2; int var8 = var3 - var1; int var9 = var7 < 0 ? -var7 : var7; @@ -153,54 +153,54 @@ public class VorbisFloor { } - @ObfuscatedName("v") + @ObfuscatedName("z") @Export("VarbisFloor_sort") void VarbisFloor_sort(int var1, int var2) { if (var1 < var2) { int var3 = var1; - int var4 = field1377[var1]; - int var5 = field1376[var1]; - boolean var6 = field1379[var1]; + int var4 = field1380[var1]; + int var5 = field1389[var1]; + boolean var6 = field1390[var1]; for (int var7 = var1 + 1; var7 <= var2; ++var7) { - int var8 = field1377[var7]; + int var8 = field1380[var7]; if (var8 < var4) { - field1377[var3] = var8; - field1376[var3] = field1376[var7]; - field1379[var3] = field1379[var7]; + field1380[var3] = var8; + field1389[var3] = field1389[var7]; + field1390[var3] = field1390[var7]; ++var3; - field1377[var7] = field1377[var3]; - field1376[var7] = field1376[var3]; - field1379[var7] = field1379[var3]; + field1380[var7] = field1380[var3]; + field1389[var7] = field1389[var3]; + field1390[var7] = field1390[var3]; } } - field1377[var3] = var4; - field1376[var3] = var5; - field1379[var3] = var6; + field1380[var3] = var4; + field1389[var3] = var5; + field1390[var3] = var6; this.VarbisFloor_sort(var1, var3 - 1); this.VarbisFloor_sort(var3 + 1, var2); } } - @ObfuscatedName("l") + @ObfuscatedName("p") @Export("readSubmapFloor") boolean readSubmapFloor() { boolean var1 = VorbisSample.readBit() != 0; if (!var1) { return false; } else { - int var2 = this.field1370.length; + int var2 = this.field1388.length; int var3; for (var3 = 0; var3 < var2; ++var3) { - field1377[var3] = this.field1370[var3]; + field1380[var3] = this.field1388[var3]; } - var3 = field1372[this.multiplier - 1]; - int var4 = Tiles.iLog(var3 - 1); - field1376[0] = VorbisSample.readBits(var4); - field1376[1] = VorbisSample.readBits(var4); + var3 = field1381[this.multiplier - 1]; + int var4 = class160.iLog(var3 - 1); + field1389[0] = VorbisSample.readBits(var4); + field1389[1] = VorbisSample.readBits(var4); int var5 = 2; for (int var6 = 0; var6 < this.partitionClassList.length; ++var6) { @@ -210,13 +210,13 @@ public class VorbisFloor { int var10 = (1 << var9) - 1; int var11 = 0; if (var9 > 0) { - var11 = VorbisSample.VorbisSample_codebooks[this.classMasterbooks[var7]].method2487(); + var11 = VorbisSample.VorbisSample_codebooks[this.classMasterbooks[var7]].method2356(); } for (int var12 = 0; var12 < var8; ++var12) { int var13 = this.subclassBooks[var7][var11 & var10]; var11 >>>= var9; - field1376[var5++] = var13 >= 0 ? VorbisSample.VorbisSample_codebooks[var13].method2487() : 0; + field1389[var5++] = var13 >= 0 ? VorbisSample.VorbisSample_codebooks[var13].method2356() : 0; } } @@ -224,12 +224,12 @@ public class VorbisFloor { } } - @ObfuscatedName("c") - void method2564(float[] var1, int var2) { - int var3 = this.field1370.length; - int var4 = field1372[this.multiplier - 1]; - boolean[] var5 = field1379; - field1379[1] = true; + @ObfuscatedName("h") + void method2436(float[] var1, int var2) { + int var3 = this.field1388.length; + int var4 = field1381[this.multiplier - 1]; + boolean[] var5 = field1390; + field1390[1] = true; var5[0] = true; int var6; @@ -238,37 +238,37 @@ public class VorbisFloor { int var9; int var10; for (var6 = 2; var6 < var3; ++var6) { - var7 = method2559(field1377, var6); - var8 = method2575(field1377, var6); - var9 = this.method2568(field1377[var7], field1376[var7], field1377[var8], field1376[var8], field1377[var6]); - var10 = field1376[var6]; + var7 = method2433(field1380, var6); + var8 = method2422(field1380, var6); + var9 = this.method2423(field1380[var7], field1389[var7], field1380[var8], field1389[var8], field1380[var6]); + var10 = field1389[var6]; int var11 = var4 - var9; int var13 = (var11 < var9 ? var11 : var9) << 1; if (var10 != 0) { - boolean[] var14 = field1379; - field1379[var8] = true; + boolean[] var14 = field1390; + field1390[var8] = true; var14[var7] = true; - field1379[var6] = true; + field1390[var6] = true; if (var10 >= var13) { - field1376[var6] = var11 > var9 ? var9 + (var10 - var9) : var11 + (var9 - var10) - 1; + field1389[var6] = var11 > var9 ? var9 + (var10 - var9) : var11 + (var9 - var10) - 1; } else { - field1376[var6] = (var10 & 1) != 0 ? var9 - (var10 + 1) / 2 : var10 / 2 + var9; + field1389[var6] = (var10 & 1) != 0 ? var9 - (var10 + 1) / 2 : var10 / 2 + var9; } } else { - field1379[var6] = false; - field1376[var6] = var9; + field1390[var6] = false; + field1389[var6] = var9; } } this.VarbisFloor_sort(0, var3 - 1); var6 = 0; - var7 = field1376[0] * this.multiplier; + var7 = field1389[0] * this.multiplier; for (var8 = 1; var8 < var3; ++var8) { - if (field1379[var8]) { - var9 = field1377[var8]; - var10 = field1376[var8] * this.multiplier; - this.method2561(var6, var7, var9, var10, var1, var2); + if (field1390[var8]) { + var9 = field1380[var8]; + var10 = field1389[var8] * this.multiplier; + this.method2424(var6, var7, var9, var10, var1, var2); if (var9 >= var2) { return; } @@ -286,8 +286,8 @@ public class VorbisFloor { } - @ObfuscatedName("a") - static int method2559(int[] var0, int var1) { + @ObfuscatedName("u") + static int method2433(int[] var0, int var1) { int var2 = var0[var1]; int var3 = -1; int var4 = Integer.MIN_VALUE; @@ -303,8 +303,8 @@ public class VorbisFloor { return var3; } - @ObfuscatedName("t") - static int method2575(int[] var0, int var1) { + @ObfuscatedName("f") + static int method2422(int[] var0, int var1) { int var2 = var0[var1]; int var3 = -1; int var4 = Integer.MAX_VALUE; diff --git a/runescape-client/src/main/java/VorbisMapping.java b/runescape-client/src/main/java/VorbisMapping.java index 0f2e901195..3a93514b5e 100644 --- a/runescape-client/src/main/java/VorbisMapping.java +++ b/runescape-client/src/main/java/VorbisMapping.java @@ -2,19 +2,19 @@ import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; -@ObfuscatedName("df") +@ObfuscatedName("dz") @Implements("VorbisMapping") public class VorbisMapping { - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("submaps") int submaps; - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("mappingMux") int mappingMux; - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("submapFloor") int[] submapFloor; - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("submapResidue") int[] submapResidue; diff --git a/runescape-client/src/main/java/VorbisResidue.java b/runescape-client/src/main/java/VorbisResidue.java index 1aee490ea2..ca1d7d2e4d 100644 --- a/runescape-client/src/main/java/VorbisResidue.java +++ b/runescape-client/src/main/java/VorbisResidue.java @@ -2,28 +2,28 @@ import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; -@ObfuscatedName("dr") +@ObfuscatedName("di") @Implements("VorbisResidue") public class VorbisResidue { - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("residueType") int residueType; - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("begin") int begin; - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("end") int end; - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("partitionSize") int partitionSize; - @ObfuscatedName("v") + @ObfuscatedName("z") @Export("classifications") int classifications; - @ObfuscatedName("l") + @ObfuscatedName("p") @Export("classbook") int classbook; - @ObfuscatedName("c") + @ObfuscatedName("h") @Export("cascade") int[] cascade; @@ -56,8 +56,8 @@ public class VorbisResidue { } - @ObfuscatedName("a") - void method2682(float[] var1, int var2, boolean var3) { + @ObfuscatedName("u") + void method2554(float[] var1, int var2, boolean var3) { int var4; for (var4 = 0; var4 < var2; ++var4) { var1[var4] = 0.0F; @@ -76,7 +76,7 @@ public class VorbisResidue { int var10; int var11; if (var8 == 0) { - var10 = VorbisSample.VorbisSample_codebooks[this.classbook].method2487(); + var10 = VorbisSample.VorbisSample_codebooks[this.classbook].method2356(); for (var11 = var4 - 1; var11 >= 0; --var11) { if (var9 + var11 < var6) { @@ -98,7 +98,7 @@ public class VorbisResidue { var15 = this.partitionSize / var14.dimensions; for (int var16 = 0; var16 < var15; ++var16) { - float[] var17 = var14.method2496(); + float[] var17 = var14.method2357(); for (int var18 = 0; var18 < var14.dimensions; ++var18) { var1[var13 + var16 + var18 * var15] += var17[var18]; @@ -108,7 +108,7 @@ public class VorbisResidue { var15 = 0; while (var15 < this.partitionSize) { - float[] var19 = var14.method2496(); + float[] var19 = var14.method2357(); for (int var20 = 0; var20 < var14.dimensions; ++var20) { var1[var13 + var15] += var19[var20]; diff --git a/runescape-client/src/main/java/VorbisSample.java b/runescape-client/src/main/java/VorbisSample.java index a7b7813347..237db9439c 100644 --- a/runescape-client/src/main/java/VorbisSample.java +++ b/runescape-client/src/main/java/VorbisSample.java @@ -3,115 +3,115 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("cf") +@ObfuscatedName("ct") @Implements("VorbisSample") public class VorbisSample extends Node { - @ObfuscatedName("c") + @ObfuscatedName("h") @Export("VorbisSample_bytes") static byte[] VorbisSample_bytes; - @ObfuscatedName("o") + @ObfuscatedName("y") @Export("VorbisSample_byteOffset") static int VorbisSample_byteOffset; - @ObfuscatedName("i") + @ObfuscatedName("w") @Export("VorbisSample_bitOffset") static int VorbisSample_bitOffset; - @ObfuscatedName("d") + @ObfuscatedName("i") @Export("VorbisSample_blockSize0") static int VorbisSample_blockSize0; - @ObfuscatedName("m") + @ObfuscatedName("k") @Export("VorbisSample_blockSize1") static int VorbisSample_blockSize1; - @ObfuscatedName("p") + @ObfuscatedName("x") @ObfuscatedSignature( - signature = "[Lch;" + signature = "[Lcx;" ) @Export("VorbisSample_codebooks") static VorbisCodebook[] VorbisSample_codebooks; - @ObfuscatedName("h") + @ObfuscatedName("o") @ObfuscatedSignature( - signature = "[Ldb;" + signature = "[Ldw;" ) @Export("VorbisSample_floors") static VorbisFloor[] VorbisSample_floors; - @ObfuscatedName("k") + @ObfuscatedName("e") @ObfuscatedSignature( - signature = "[Ldr;" + signature = "[Ldi;" ) @Export("VorbisSample_residues") static VorbisResidue[] VorbisSample_residues; - @ObfuscatedName("x") + @ObfuscatedName("n") @ObfuscatedSignature( - signature = "[Ldf;" + signature = "[Ldz;" ) @Export("VorbisSample_mappings") static VorbisMapping[] VorbisSample_mappings; - @ObfuscatedName("j") + @ObfuscatedName("r") @Export("VorbisSample_blockFlags") static boolean[] VorbisSample_blockFlags; - @ObfuscatedName("r") + @ObfuscatedName("c") @Export("VorbisSample_mapping") static int[] VorbisSample_mapping; - @ObfuscatedName("e") - static boolean field1348; - @ObfuscatedName("g") - static float[] field1349; - @ObfuscatedName("w") - static float[] field1345; - @ObfuscatedName("u") - static float[] field1353; - @ObfuscatedName("y") - static float[] field1354; - @ObfuscatedName("aa") - static float[] field1355; - @ObfuscatedName("aw") - static float[] field1346; - @ObfuscatedName("ar") - static float[] field1357; - @ObfuscatedName("aq") - static int[] field1337; - @ObfuscatedName("ad") - static int[] field1359; @ObfuscatedName("a") - byte[][] field1350; - @ObfuscatedName("t") + static boolean field1357; + @ObfuscatedName("v") + static float[] field1362; + @ObfuscatedName("q") + static float[] field1345; + @ObfuscatedName("l") + static float[] field1364; + @ObfuscatedName("j") + static float[] field1365; + @ObfuscatedName("af") + static float[] field1361; + @ObfuscatedName("ad") + static float[] field1367; + @ObfuscatedName("am") + static float[] field1368; + @ObfuscatedName("ai") + static int[] field1369; + @ObfuscatedName("ag") + static int[] field1370; + @ObfuscatedName("u") + byte[][] field1348; + @ObfuscatedName("f") @Export("sampleRate") int sampleRate; - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("sampleCount") int sampleCount; - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("start") int start; - @ObfuscatedName("v") + @ObfuscatedName("z") @Export("end") int end; - @ObfuscatedName("l") - boolean field1334; + @ObfuscatedName("p") + boolean field1340; + @ObfuscatedName("d") + float[] field1358; @ObfuscatedName("s") - float[] field1347; - @ObfuscatedName("b") - int field1344; - @ObfuscatedName("z") - int field1362; - @ObfuscatedName("f") - boolean field1352; - @ObfuscatedName("ag") + int field1359; + @ObfuscatedName("t") + int field1360; + @ObfuscatedName("m") + boolean field1355; + @ObfuscatedName("ao") @Export("samples") byte[] samples; + @ObfuscatedName("aw") + int field1372; @ObfuscatedName("ak") - int field1329; - @ObfuscatedName("av") - int field1360; + int field1371; static { - field1348 = false; + field1357 = false; } VorbisSample(byte[] var1) { this.read(var1); } - @ObfuscatedName("v") + @ObfuscatedName("z") @Export("read") void read(byte[] var1) { Buffer var2 = new Buffer(var1); @@ -121,11 +121,11 @@ public class VorbisSample extends Node { this.end = var2.readInt(); if (this.end < 0) { this.end = ~this.end; - this.field1334 = true; + this.field1340 = true; } int var3 = var2.readInt(); - this.field1350 = new byte[var3][]; + this.field1348 = new byte[var3][]; for (int var4 = 0; var4 < var3; ++var4) { int var5 = 0; @@ -138,16 +138,16 @@ public class VorbisSample extends Node { byte[] var7 = new byte[var5]; var2.readBytes(var7, 0, var5); - this.field1350[var4] = var7; + this.field1348[var4] = var7; } } - @ObfuscatedName("c") - float[] method2521(int var1) { - VorbisSample_setData(this.field1350[var1], 0); + @ObfuscatedName("h") + float[] method2389(int var1) { + VorbisSample_setData(this.field1348[var1], 0); readBit(); - int var2 = readBits(Tiles.iLog(VorbisSample_mapping.length - 1)); + int var2 = readBits(class160.iLog(VorbisSample_mapping.length - 1)); boolean var3 = VorbisSample_blockFlags[var2]; int var4 = var3 ? VorbisSample_blockSize1 : VorbisSample_blockSize0; boolean var5 = false; @@ -192,41 +192,41 @@ public class VorbisSample extends Node { for (var17 = 0; var17 < var14.submaps; ++var17) { VorbisResidue var18 = VorbisSample_residues[var14.submapResidue[var17]]; - float[] var19 = field1349; - var18.method2682(var19, var4 >> 1, var45); + float[] var19 = field1362; + var18.method2554(var19, var4 >> 1, var45); } int var40; if (!var15) { var17 = var14.mappingMux; var40 = var14.submapFloor[var17]; - VorbisSample_floors[var40].method2564(field1349, var4 >> 1); + VorbisSample_floors[var40].method2436(field1362, var4 >> 1); } - int var42; + int var41; if (var15) { for (var17 = var4 >> 1; var17 < var4; ++var17) { - field1349[var17] = 0.0F; + field1362[var17] = 0.0F; } } else { var17 = var4 >> 1; var40 = var4 >> 2; - var42 = var4 >> 3; - float[] var43 = field1349; + var41 = var4 >> 3; + float[] var20 = field1362; int var21; for (var21 = 0; var21 < var17; ++var21) { - var43[var21] *= 0.5F; + var20[var21] *= 0.5F; } for (var21 = var17; var21 < var4; ++var21) { - var43[var21] = -var43[var4 - var21 - 1]; + var20[var21] = -var20[var4 - var21 - 1]; } - float[] var44 = var3 ? field1355 : field1345; - float[] var22 = var3 ? field1346 : field1353; - float[] var23 = var3 ? field1357 : field1354; - int[] var24 = var3 ? field1359 : field1337; + float[] var44 = var3 ? field1361 : field1345; + float[] var22 = var3 ? field1367 : field1364; + float[] var23 = var3 ? field1368 : field1365; + int[] var24 = var3 ? field1370 : field1369; int var25; float var26; @@ -234,30 +234,30 @@ public class VorbisSample extends Node { float var28; float var29; for (var25 = 0; var25 < var40; ++var25) { - var26 = var43[var25 * 4] - var43[var4 - var25 * 4 - 1]; - var27 = var43[var25 * 4 + 2] - var43[var4 - var25 * 4 - 3]; + var26 = var20[var25 * 4] - var20[var4 - var25 * 4 - 1]; + var27 = var20[var25 * 4 + 2] - var20[var4 - var25 * 4 - 3]; var28 = var44[var25 * 2]; var29 = var44[var25 * 2 + 1]; - var43[var4 - var25 * 4 - 1] = var26 * var28 - var27 * var29; - var43[var4 - var25 * 4 - 3] = var26 * var29 + var27 * var28; + var20[var4 - var25 * 4 - 1] = var26 * var28 - var27 * var29; + var20[var4 - var25 * 4 - 3] = var26 * var29 + var27 * var28; } float var30; float var31; - for (var25 = 0; var25 < var42; ++var25) { - var26 = var43[var17 + var25 * 4 + 3]; - var27 = var43[var17 + var25 * 4 + 1]; - var28 = var43[var25 * 4 + 3]; - var29 = var43[var25 * 4 + 1]; - var43[var17 + var25 * 4 + 3] = var26 + var28; - var43[var17 + var25 * 4 + 1] = var27 + var29; + for (var25 = 0; var25 < var41; ++var25) { + var26 = var20[var17 + var25 * 4 + 3]; + var27 = var20[var17 + var25 * 4 + 1]; + var28 = var20[var25 * 4 + 3]; + var29 = var20[var25 * 4 + 1]; + var20[var17 + var25 * 4 + 3] = var26 + var28; + var20[var17 + var25 * 4 + 1] = var27 + var29; var30 = var44[var17 - 4 - var25 * 4]; var31 = var44[var17 - 3 - var25 * 4]; - var43[var25 * 4 + 3] = (var26 - var28) * var30 - (var27 - var29) * var31; - var43[var25 * 4 + 1] = (var27 - var29) * var30 + (var26 - var28) * var31; + var20[var25 * 4 + 3] = (var26 - var28) * var30 - (var27 - var29) * var31; + var20[var25 * 4 + 1] = (var27 - var29) * var30 + (var26 - var28) * var31; } - var25 = Tiles.iLog(var4 - 1); + var25 = class160.iLog(var4 - 1); int var47; int var48; @@ -273,133 +273,133 @@ public class VorbisSample extends Node { for (int var32 = 0; var32 < var4 >> var47 + 4; ++var32) { int var33 = var32 * 4; - float var34 = var43[var51 - 1 - var33]; - float var35 = var43[var51 - 3 - var33]; - float var36 = var43[var52 - 1 - var33]; - float var37 = var43[var52 - 3 - var33]; - var43[var51 - 1 - var33] = var34 + var36; - var43[var51 - 3 - var33] = var35 + var37; + float var34 = var20[var51 - 1 - var33]; + float var35 = var20[var51 - 3 - var33]; + float var36 = var20[var52 - 1 - var33]; + float var37 = var20[var52 - 3 - var33]; + var20[var51 - 1 - var33] = var34 + var36; + var20[var51 - 3 - var33] = var35 + var37; float var38 = var44[var32 * var49]; float var39 = var44[var32 * var49 + 1]; - var43[var52 - 1 - var33] = (var34 - var36) * var38 - (var35 - var37) * var39; - var43[var52 - 3 - var33] = (var35 - var37) * var38 + (var34 - var36) * var39; + var20[var52 - 1 - var33] = (var34 - var36) * var38 - (var35 - var37) * var39; + var20[var52 - 3 - var33] = (var35 - var37) * var38 + (var34 - var36) * var39; } } } - for (var47 = 1; var47 < var42 - 1; ++var47) { + for (var47 = 1; var47 < var41 - 1; ++var47) { var48 = var24[var47]; if (var47 < var48) { var49 = var47 * 8; var50 = var48 * 8; - var30 = var43[var49 + 1]; - var43[var49 + 1] = var43[var50 + 1]; - var43[var50 + 1] = var30; - var30 = var43[var49 + 3]; - var43[var49 + 3] = var43[var50 + 3]; - var43[var50 + 3] = var30; - var30 = var43[var49 + 5]; - var43[var49 + 5] = var43[var50 + 5]; - var43[var50 + 5] = var30; - var30 = var43[var49 + 7]; - var43[var49 + 7] = var43[var50 + 7]; - var43[var50 + 7] = var30; + var30 = var20[var49 + 1]; + var20[var49 + 1] = var20[var50 + 1]; + var20[var50 + 1] = var30; + var30 = var20[var49 + 3]; + var20[var49 + 3] = var20[var50 + 3]; + var20[var50 + 3] = var30; + var30 = var20[var49 + 5]; + var20[var49 + 5] = var20[var50 + 5]; + var20[var50 + 5] = var30; + var30 = var20[var49 + 7]; + var20[var49 + 7] = var20[var50 + 7]; + var20[var50 + 7] = var30; } } for (var47 = 0; var47 < var17; ++var47) { - var43[var47] = var43[var47 * 2 + 1]; + var20[var47] = var20[var47 * 2 + 1]; } - for (var47 = 0; var47 < var42; ++var47) { - var43[var4 - 1 - var47 * 2] = var43[var47 * 4]; - var43[var4 - 2 - var47 * 2] = var43[var47 * 4 + 1]; - var43[var4 - var40 - 1 - var47 * 2] = var43[var47 * 4 + 2]; - var43[var4 - var40 - 2 - var47 * 2] = var43[var47 * 4 + 3]; + for (var47 = 0; var47 < var41; ++var47) { + var20[var4 - 1 - var47 * 2] = var20[var47 * 4]; + var20[var4 - 2 - var47 * 2] = var20[var47 * 4 + 1]; + var20[var4 - var40 - 1 - var47 * 2] = var20[var47 * 4 + 2]; + var20[var4 - var40 - 2 - var47 * 2] = var20[var47 * 4 + 3]; } - for (var47 = 0; var47 < var42; ++var47) { + for (var47 = 0; var47 < var41; ++var47) { var27 = var23[var47 * 2]; var28 = var23[var47 * 2 + 1]; - var29 = var43[var17 + var47 * 2]; - var30 = var43[var17 + var47 * 2 + 1]; - var31 = var43[var4 - 2 - var47 * 2]; - float var53 = var43[var4 - 1 - var47 * 2]; + var29 = var20[var17 + var47 * 2]; + var30 = var20[var17 + var47 * 2 + 1]; + var31 = var20[var4 - 2 - var47 * 2]; + float var53 = var20[var4 - 1 - var47 * 2]; float var54 = var28 * (var29 - var31) + var27 * (var30 + var53); - var43[var17 + var47 * 2] = (var29 + var31 + var54) * 0.5F; - var43[var4 - 2 - var47 * 2] = (var29 + var31 - var54) * 0.5F; + var20[var17 + var47 * 2] = (var29 + var31 + var54) * 0.5F; + var20[var4 - 2 - var47 * 2] = (var29 + var31 - var54) * 0.5F; var54 = var28 * (var30 + var53) - var27 * (var29 - var31); - var43[var17 + var47 * 2 + 1] = (var30 - var53 + var54) * 0.5F; - var43[var4 - 1 - var47 * 2] = (-var30 + var53 + var54) * 0.5F; + var20[var17 + var47 * 2 + 1] = (var30 - var53 + var54) * 0.5F; + var20[var4 - 1 - var47 * 2] = (-var30 + var53 + var54) * 0.5F; } for (var47 = 0; var47 < var40; ++var47) { - var43[var47] = var43[var17 + var47 * 2] * var22[var47 * 2] + var43[var17 + var47 * 2 + 1] * var22[var47 * 2 + 1]; - var43[var17 - 1 - var47] = var43[var17 + var47 * 2] * var22[var47 * 2 + 1] - var43[var17 + var47 * 2 + 1] * var22[var47 * 2]; + var20[var47] = var20[var17 + var47 * 2] * var22[var47 * 2] + var20[var17 + var47 * 2 + 1] * var22[var47 * 2 + 1]; + var20[var17 - 1 - var47] = var20[var17 + var47 * 2] * var22[var47 * 2 + 1] - var20[var17 + var47 * 2 + 1] * var22[var47 * 2]; } for (var47 = 0; var47 < var40; ++var47) { - var43[var47 + (var4 - var40)] = -var43[var47]; + var20[var47 + (var4 - var40)] = -var20[var47]; } for (var47 = 0; var47 < var40; ++var47) { - var43[var47] = var43[var40 + var47]; + var20[var47] = var20[var40 + var47]; } for (var47 = 0; var47 < var40; ++var47) { - var43[var40 + var47] = -var43[var40 - var47 - 1]; + var20[var40 + var47] = -var20[var40 - var47 - 1]; } for (var47 = 0; var47 < var40; ++var47) { - var43[var17 + var47] = var43[var4 - var47 - 1]; + var20[var17 + var47] = var20[var4 - var47 - 1]; } float[] var10000; for (var47 = var8; var47 < var9; ++var47) { var27 = (float)Math.sin(((double)(var47 - var8) + 0.5D) / (double)var10 * 0.5D * 3.141592653589793D); - var10000 = field1349; + var10000 = field1362; var10000[var47] *= (float)Math.sin(1.5707963267948966D * (double)var27 * (double)var27); } for (var47 = var11; var47 < var12; ++var47) { var27 = (float)Math.sin(((double)(var47 - var11) + 0.5D) / (double)var13 * 0.5D * 3.141592653589793D + 1.5707963267948966D); - var10000 = field1349; + var10000 = field1362; var10000[var47] *= (float)Math.sin(1.5707963267948966D * (double)var27 * (double)var27); } } - float[] var41 = null; - if (this.field1344 > 0) { - var40 = var4 + this.field1344 >> 2; - var41 = new float[var40]; - int var20; - if (!this.field1352) { - for (var42 = 0; var42 < this.field1362; ++var42) { - var20 = var42 + (this.field1344 >> 1); - var41[var42] += this.field1347[var20]; + float[] var42 = null; + if (this.field1359 > 0) { + var40 = var4 + this.field1359 >> 2; + var42 = new float[var40]; + int var43; + if (!this.field1355) { + for (var41 = 0; var41 < this.field1360; ++var41) { + var43 = var41 + (this.field1359 >> 1); + var42[var41] += this.field1358[var43]; } } if (!var15) { - for (var42 = var8; var42 < var4 >> 1; ++var42) { - var20 = var41.length - (var4 >> 1) + var42; - var41[var20] += field1349[var42]; + for (var41 = var8; var41 < var4 >> 1; ++var41) { + var43 = var42.length - (var4 >> 1) + var41; + var42[var43] += field1362[var41]; } } } - float[] var46 = this.field1347; - this.field1347 = field1349; - field1349 = var46; - this.field1344 = var4; - this.field1362 = var12 - (var4 >> 1); - this.field1352 = var15; - return var41; + float[] var46 = this.field1358; + this.field1358 = field1362; + field1362 = var46; + this.field1359 = var4; + this.field1360 = var12 - (var4 >> 1); + this.field1355 = var15; + return var42; } - @ObfuscatedName("d") + @ObfuscatedName("i") @ObfuscatedSignature( - signature = "([I)Lca;" + signature = "([I)Lcw;" ) @Export("toRawSound") RawSound toRawSound(int[] var1) { @@ -407,21 +407,21 @@ public class VorbisSample extends Node { return null; } else { if (this.samples == null) { - this.field1344 = 0; - this.field1347 = new float[VorbisSample_blockSize1]; + this.field1359 = 0; + this.field1358 = new float[VorbisSample_blockSize1]; this.samples = new byte[this.sampleCount]; - this.field1329 = 0; - this.field1360 = 0; + this.field1372 = 0; + this.field1371 = 0; } - for (; this.field1360 < this.field1350.length; ++this.field1360) { + for (; this.field1371 < this.field1348.length; ++this.field1371) { if (var1 != null && var1[0] <= 0) { return null; } - float[] var2 = this.method2521(this.field1360); + float[] var2 = this.method2389(this.field1371); if (var2 != null) { - int var3 = this.field1329; + int var3 = this.field1372; int var4 = var2.length; if (var4 > this.sampleCount - var3) { var4 = this.sampleCount - var3; @@ -437,21 +437,21 @@ public class VorbisSample extends Node { } if (var1 != null) { - var1[0] -= var3 - this.field1329; + var1[0] -= var3 - this.field1372; } - this.field1329 = var3; + this.field1372 = var3; } } - this.field1347 = null; + this.field1358 = null; byte[] var7 = this.samples; this.samples = null; - return new RawSound(this.sampleRate, var7, this.start, this.end, this.field1334); + return new RawSound(this.sampleRate, var7, this.start, this.end, this.field1340); } } - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("float32Unpack") static float float32Unpack(int var0) { int var1 = var0 & 2097151; @@ -464,7 +464,7 @@ public class VorbisSample extends Node { return (float)((double)var1 * Math.pow(2.0D, (double)(var3 - 788))); } - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("VorbisSample_setData") static void VorbisSample_setData(byte[] var0, int var1) { VorbisSample_bytes = var0; @@ -472,7 +472,7 @@ public class VorbisSample extends Node { VorbisSample_bitOffset = 0; } - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("readBit") static int readBit() { int var0 = VorbisSample_bytes[VorbisSample_byteOffset] >> VorbisSample_bitOffset & 1; @@ -482,7 +482,7 @@ public class VorbisSample extends Node { return var0; } - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("readBits") static int readBits(int var0) { int var1 = 0; @@ -507,12 +507,12 @@ public class VorbisSample extends Node { return var1; } - @ObfuscatedName("l") - static void method2520(byte[] var0) { + @ObfuscatedName("p") + static void method2392(byte[] var0) { VorbisSample_setData(var0, 0); VorbisSample_blockSize0 = 1 << readBits(4); VorbisSample_blockSize1 = 1 << readBits(4); - field1349 = new float[VorbisSample_blockSize1]; + field1362 = new float[VorbisSample_blockSize1]; int var1; int var2; @@ -546,22 +546,22 @@ public class VorbisSample extends Node { } int[] var14 = new int[var5]; - int var10 = Tiles.iLog(var5 - 1); + int var10 = class160.iLog(var5 - 1); for (int var11 = 0; var11 < var5; ++var11) { - var14[var11] = UserComparator3.method3565(var11, var10); + var14[var11] = KeyHandler.method843(var11, var10); } if (var1 != 0) { - field1355 = var6; - field1346 = var12; - field1357 = var13; - field1359 = var14; + field1361 = var6; + field1367 = var12; + field1368 = var13; + field1370 = var14; } else { field1345 = var6; - field1353 = var12; - field1354 = var13; - field1337 = var14; + field1364 = var12; + field1365 = var13; + field1369 = var14; } } @@ -612,31 +612,31 @@ public class VorbisSample extends Node { } - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "(Lhq;)Z" + signature = "(Lhf;)Z" ) - static boolean method2523(AbstractArchive var0) { - if (!field1348) { + static boolean method2390(AbstractArchive var0) { + if (!field1357) { byte[] var1 = var0.takeFile(0, 0); if (var1 == null) { return false; } - method2520(var1); - field1348 = true; + method2392(var1); + field1357 = true; } return true; } - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedSignature( - signature = "(Lhq;II)Lcf;" + signature = "(Lhf;II)Lct;" ) @Export("readMusicSample") static VorbisSample readMusicSample(AbstractArchive var0, int var1, int var2) { - if (!method2523(var0)) { + if (!method2390(var0)) { var0.tryLoadFile(var1, var2); return null; } else { diff --git a/runescape-client/src/main/java/WallDecoration.java b/runescape-client/src/main/java/WallDecoration.java index 9db0cfef6c..75eb0e2cdb 100644 --- a/runescape-client/src/main/java/WallDecoration.java +++ b/runescape-client/src/main/java/WallDecoration.java @@ -4,72 +4,74 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ei") +@ObfuscatedName("et") @Implements("WallDecoration") public final class WallDecoration { - @ObfuscatedName("a") + @ObfuscatedName("bf") + static String field1914; + @ObfuscatedName("u") @ObfuscatedGetter( - intValue = 423851547 + intValue = 1205113251 ) @Export("tileHeight") int tileHeight; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = -1677824649 + intValue = -271474909 ) @Export("x") int x; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = -538039303 + intValue = -1267605537 ) @Export("y") int y; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = 1526818253 + intValue = -1727501807 ) @Export("orientation") int orientation; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = -53860035 + intValue = 1125268543 ) @Export("orientation2") int orientation2; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = 1526698757 + intValue = -1924743317 ) @Export("xOffset") int xOffset; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedGetter( - intValue = 578545777 + intValue = -2072940953 ) @Export("yOffset") int yOffset; - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "Lep;" + signature = "Lee;" ) @Export("entity1") public Entity entity1; - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedSignature( - signature = "Lep;" + signature = "Lee;" ) @Export("entity2") public Entity entity2; - @ObfuscatedName("d") + @ObfuscatedName("i") @ObfuscatedGetter( - longValue = 6449837147219780293L + longValue = -1256134443736608047L ) @Export("tag") public long tag; - @ObfuscatedName("m") + @ObfuscatedName("k") @ObfuscatedGetter( - intValue = -972053307 + intValue = 1975621391 ) @Export("flags") int flags; @@ -79,480 +81,60 @@ public final class WallDecoration { this.flags = 0; } - @ObfuscatedName("t") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(CI)Z", - garbageValue = "-1053109132" + signature = "(IB)Lig;", + garbageValue = "-81" ) - public static final boolean method3420(char var0) { - if (Character.isISOControl(var0)) { - return false; - } else if (UserComparator8.isAlphaNumeric(var0)) { - return true; + public static FloorUnderlayDefinition method3339(int var0) { + FloorUnderlayDefinition var1 = (FloorUnderlayDefinition)FloorUnderlayDefinition.FloorUnderlayDefinition_cached.get((long)var0); + if (var1 != null) { + return var1; } else { - char[] var1 = class338.field4036; - - int var2; - char var3; - for (var2 = 0; var2 < var1.length; ++var2) { - var3 = var1[var2]; - if (var0 == var3) { - return true; - } + byte[] var2 = FloorUnderlayDefinition.FloorUnderlayDefinition_archive.takeFile(1, var0); + var1 = new FloorUnderlayDefinition(); + if (var2 != null) { + var1.decode(new Buffer(var2), var0); } - var1 = class338.field4038; - - for (var2 = 0; var2 < var1.length; ++var2) { - var3 = var1[var2]; - if (var0 == var3) { - return true; - } - } - - return false; + var1.postDecode(); + FloorUnderlayDefinition.FloorUnderlayDefinition_cached.put(var1, (long)var0); + return var1; } } - @ObfuscatedName("n") - @ObfuscatedSignature( - signature = "(IIB)Lbt;", - garbageValue = "-95" - ) - @Export("Messages_getByChannelAndID") - static Message Messages_getByChannelAndID(int var0, int var1) { - ChatChannel var2 = (ChatChannel)Messages.Messages_channels.get(var0); - return var2.getMessage(var1); + @ObfuscatedName("f") + public static boolean method3340(long var0) { + boolean var2 = var0 != 0L; + if (var2) { + boolean var3 = (int)(var0 >>> 16 & 1L) == 1; + var2 = !var3; + } + + return var2; } - @ObfuscatedName("gp") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "(I)I", - garbageValue = "-441211068" + signature = "(B)[Llm;", + garbageValue = "-38" ) - @Export("getWindowedMode") - static int getWindowedMode() { - return Client.isResizable ? 2 : 1; - } + public static IndexedSprite[] method3341() { + IndexedSprite[] var0 = new IndexedSprite[class325.SpriteBuffer_spriteCount]; - @ObfuscatedName("gz") - @ObfuscatedSignature( - signature = "(IIIII)V", - garbageValue = "-1171525777" - ) - @Export("drawEntities") - static final void drawEntities(int var0, int var1, int var2, int var3) { - ++Client.viewportDrawCount; - Frames.method3397(); - class227.method4276(); - VarcInt.method4548(); - class40.addNpcsToScene(true); - WorldMapSprite.method473(); - class40.addNpcsToScene(false); - MouseHandler.method1172(); - FontName.method5442(); - Calendar.setViewportShape(var0, var1, var2, var3, true); - var0 = Client.viewportOffsetX; - var1 = Client.viewportOffsetY; - var2 = Client.viewportWidth; - var3 = Client.viewportHeight; - Rasterizer2D.Rasterizer2D_setClip(var0, var1, var0 + var2, var3 + var1); - Rasterizer3D.Rasterizer3D_setClipFromRasterizer2D(); - int var4; - int var5; - if (!Client.isCameraLocked) { - var4 = Client.camAngleX; - if (Client.field717 / 256 > var4) { - var4 = Client.field717 / 256; - } - - if (Client.field641[4] && Client.field795[4] + 128 > var4) { - var4 = Client.field795[4] + 128; - } - - var5 = Client.camAngleY & 2047; - GrandExchangeOfferNameComparator.method183(IgnoreList.oculusOrbFocalPointX, Tiles.field497, AbstractArchive.oculusOrbFocalPointY, var4, var5, WorldMapSection0.method285(var4), var3); - } - - int var6; - int var7; - int var8; - int var9; - int var10; - int var11; - int var12; - int var13; - int var14; - if (!Client.isCameraLocked) { - if (ScriptEvent.clientPreferences.roofsHidden) { - var5 = Player.Client_plane; - } else { - label525: { - var6 = 3; - if (class247.cameraPitch < 310) { - if (Client.oculusOrbState == 1) { - var7 = IgnoreList.oculusOrbFocalPointX >> 7; - var8 = AbstractArchive.oculusOrbFocalPointY >> 7; - } else { - var7 = class215.localPlayer.x >> 7; - var8 = class215.localPlayer.y >> 7; - } - - var9 = UrlRequester.cameraX >> 7; - var10 = GrandExchangeOfferAgeComparator.cameraZ >> 7; - if (var9 < 0 || var10 < 0 || var9 >= 104 || var10 >= 104) { - var5 = Player.Client_plane; - break label525; - } - - if (var7 < 0 || var8 < 0 || var7 >= 104 || var8 >= 104) { - var5 = Player.Client_plane; - break label525; - } - - if ((Tiles.Tiles_renderFlags[Player.Client_plane][var9][var10] & 4) != 0) { - var6 = Player.Client_plane; - } - - if (var7 > var9) { - var11 = var7 - var9; - } else { - var11 = var9 - var7; - } - - if (var8 > var10) { - var12 = var8 - var10; - } else { - var12 = var10 - var8; - } - - if (var11 > var12) { - var13 = var12 * 65536 / var11; - var14 = 32768; - - while (var9 != var7) { - if (var9 < var7) { - ++var9; - } else if (var9 > var7) { - --var9; - } - - if ((Tiles.Tiles_renderFlags[Player.Client_plane][var9][var10] & 4) != 0) { - var6 = Player.Client_plane; - } - - var14 += var13; - if (var14 >= 65536) { - var14 -= 65536; - if (var10 < var8) { - ++var10; - } else if (var10 > var8) { - --var10; - } - - if ((Tiles.Tiles_renderFlags[Player.Client_plane][var9][var10] & 4) != 0) { - var6 = Player.Client_plane; - } - } - } - } else if (var12 > 0) { - var13 = var11 * 65536 / var12; - var14 = 32768; - - while (var8 != var10) { - if (var10 < var8) { - ++var10; - } else if (var10 > var8) { - --var10; - } - - if ((Tiles.Tiles_renderFlags[Player.Client_plane][var9][var10] & 4) != 0) { - var6 = Player.Client_plane; - } - - var14 += var13; - if (var14 >= 65536) { - var14 -= 65536; - if (var9 < var7) { - ++var9; - } else if (var9 > var7) { - --var9; - } - - if ((Tiles.Tiles_renderFlags[Player.Client_plane][var9][var10] & 4) != 0) { - var6 = Player.Client_plane; - } - } - } - } - } - - if (class215.localPlayer.x >= 0 && class215.localPlayer.y >= 0 && class215.localPlayer.x < 13312 && class215.localPlayer.y < 13312) { - if ((Tiles.Tiles_renderFlags[Player.Client_plane][class215.localPlayer.x >> 7][class215.localPlayer.y >> 7] & 4) != 0) { - var6 = Player.Client_plane; - } - - var5 = var6; - } else { - var5 = Player.Client_plane; - } - } - } - - var4 = var5; - } else { - if (ScriptEvent.clientPreferences.roofsHidden) { - var5 = Player.Client_plane; - } else { - var6 = GraphicsObject.getTileHeight(UrlRequester.cameraX, GrandExchangeOfferAgeComparator.cameraZ, Player.Client_plane); - if (var6 - class16.cameraY < 800 && (Tiles.Tiles_renderFlags[Player.Client_plane][UrlRequester.cameraX >> 7][GrandExchangeOfferAgeComparator.cameraZ >> 7] & 4) != 0) { - var5 = Player.Client_plane; - } else { - var5 = 3; - } - } - - var4 = var5; - } - - var5 = UrlRequester.cameraX; - var6 = class16.cameraY; - var7 = GrandExchangeOfferAgeComparator.cameraZ; - var8 = class247.cameraPitch; - var9 = WorldMapData_1.cameraYaw; - - for (var10 = 0; var10 < 5; ++var10) { - if (Client.field641[var10]) { - var11 = (int)(Math.random() * (double)(Client.field877[var10] * 2 + 1) - (double)Client.field877[var10] + Math.sin((double)Client.field880[var10] * ((double)Client.field879[var10] / 100.0D)) * (double)Client.field795[var10]); - if (var10 == 0) { - UrlRequester.cameraX += var11; - } - - if (var10 == 1) { - class16.cameraY += var11; - } - - if (var10 == 2) { - GrandExchangeOfferAgeComparator.cameraZ += var11; - } - - if (var10 == 3) { - WorldMapData_1.cameraYaw = var11 + WorldMapData_1.cameraYaw & 2047; - } - - if (var10 == 4) { - class247.cameraPitch += var11; - if (class247.cameraPitch < 128) { - class247.cameraPitch = 128; - } - - if (class247.cameraPitch > 383) { - class247.cameraPitch = 383; - } - } - } - } - - var10 = MouseHandler.MouseHandler_x; - var11 = MouseHandler.MouseHandler_y; - if (MouseHandler.MouseHandler_lastButton != 0) { - var10 = MouseHandler.MouseHandler_lastPressedX; - var11 = MouseHandler.MouseHandler_lastPressedY; - } - - if (var10 >= var0 && var10 < var0 + var2 && var11 >= var1 && var11 < var3 + var1) { - var12 = var10 - var0; - var13 = var11 - var1; - ViewportMouse.ViewportMouse_x = var12; - ViewportMouse.ViewportMouse_y = var13; - ViewportMouse.ViewportMouse_isInViewport = true; - ViewportMouse.ViewportMouse_entityCount = 0; - ViewportMouse.ViewportMouse_false0 = false; - } else { - ViewportMouse.ViewportMouse_isInViewport = false; - ViewportMouse.ViewportMouse_entityCount = 0; - } - - ChatChannel.playPcmPlayers(); - Rasterizer2D.Rasterizer2D_fillRectangle(var0, var1, var2, var3, 0); - ChatChannel.playPcmPlayers(); - var12 = Rasterizer3D.Rasterizer3D_zoom; - Rasterizer3D.Rasterizer3D_zoom = Client.viewportZoom; - WorldMapArea.scene.draw(UrlRequester.cameraX, class16.cameraY, GrandExchangeOfferAgeComparator.cameraZ, class247.cameraPitch, WorldMapData_1.cameraYaw, var4); - Rasterizer3D.Rasterizer3D_zoom = var12; - ChatChannel.playPcmPlayers(); - WorldMapArea.scene.clearTempGameObjects(); - Client.overheadTextCount = 0; - boolean var30 = false; - var14 = -1; - int var15 = -1; - int var16 = Players.Players_count; - int[] var17 = Players.Players_indices; - - int var18; - for (var18 = 0; var18 < var16 + Client.npcCount; ++var18) { - Object var19; - if (var18 < var16) { - var19 = Client.players[var17[var18]]; - if (var17[var18] == Client.combatTargetPlayerIndex) { - var30 = true; - var14 = var18; - continue; - } - - if (var19 == class215.localPlayer) { - var15 = var18; - continue; - } - } else { - var19 = Client.npcs[Client.npcIndices[var18 - var16]]; - } - - AbstractSocket.drawActor2d((Actor)var19, var18, var0, var1, var2, var3); - } - - if (Client.renderSelf && var15 != -1) { - AbstractSocket.drawActor2d(class215.localPlayer, var15, var0, var1, var2, var3); - } - - if (var30) { - AbstractSocket.drawActor2d(Client.players[Client.combatTargetPlayerIndex], var14, var0, var1, var2, var3); - } - - for (var18 = 0; var18 < Client.overheadTextCount; ++var18) { - int var28 = Client.overheadTextXs[var18]; - int var20 = Client.overheadTextYs[var18]; - int var21 = Client.overheadTextXOffsets[var18]; - int var22 = Client.overheadTextAscents[var18]; - boolean var23 = true; - - while (var23) { - var23 = false; - - for (int var24 = 0; var24 < var18; ++var24) { - if (var20 + 2 > Client.overheadTextYs[var24] - Client.overheadTextAscents[var24] && var20 - var22 < Client.overheadTextYs[var24] + 2 && var28 - var21 < Client.overheadTextXOffsets[var24] + Client.overheadTextXs[var24] && var21 + var28 > Client.overheadTextXs[var24] - Client.overheadTextXOffsets[var24] && Client.overheadTextYs[var24] - Client.overheadTextAscents[var24] < var20) { - var20 = Client.overheadTextYs[var24] - Client.overheadTextAscents[var24]; - var23 = true; - } - } - } - - Client.viewportTempX = Client.overheadTextXs[var18]; - Client.viewportTempY = Client.overheadTextYs[var18] = var20; - String var29 = Client.overheadText[var18]; - if (Client.chatEffects == 0) { - int var25 = 16776960; - if (Client.overheadTextColors[var18] < 6) { - var25 = Client.field829[Client.overheadTextColors[var18]]; - } - - if (Client.overheadTextColors[var18] == 6) { - var25 = Client.viewportDrawCount % 20 < 10 ? 16711680 : 16776960; - } - - if (Client.overheadTextColors[var18] == 7) { - var25 = Client.viewportDrawCount % 20 < 10 ? 255 : '\uffff'; - } - - if (Client.overheadTextColors[var18] == 8) { - var25 = Client.viewportDrawCount % 20 < 10 ? '뀀' : 8454016; - } - - int var26; - if (Client.overheadTextColors[var18] == 9) { - var26 = 150 - Client.overheadTextCyclesRemaining[var18]; - if (var26 < 50) { - var25 = var26 * 1280 + 16711680; - } else if (var26 < 100) { - var25 = 16776960 - (var26 - 50) * 327680; - } else if (var26 < 150) { - var25 = (var26 - 100) * 5 + 65280; - } - } - - if (Client.overheadTextColors[var18] == 10) { - var26 = 150 - Client.overheadTextCyclesRemaining[var18]; - if (var26 < 50) { - var25 = var26 * 5 + 16711680; - } else if (var26 < 100) { - var25 = 16711935 - (var26 - 50) * 327680; - } else if (var26 < 150) { - var25 = (var26 - 100) * 327680 + 255 - (var26 - 100) * 5; - } - } - - if (Client.overheadTextColors[var18] == 11) { - var26 = 150 - Client.overheadTextCyclesRemaining[var18]; - if (var26 < 50) { - var25 = 16777215 - var26 * 327685; - } else if (var26 < 100) { - var25 = (var26 - 50) * 327685 + 65280; - } else if (var26 < 150) { - var25 = 16777215 - (var26 - 100) * 327680; - } - } - - if (Client.overheadTextEffects[var18] == 0) { - class43.fontBold12.drawCentered(var29, var0 + Client.viewportTempX, Client.viewportTempY + var1, var25, 0); - } - - if (Client.overheadTextEffects[var18] == 1) { - class43.fontBold12.drawCenteredWave(var29, var0 + Client.viewportTempX, Client.viewportTempY + var1, var25, 0, Client.viewportDrawCount); - } - - if (Client.overheadTextEffects[var18] == 2) { - class43.fontBold12.drawCenteredWave2(var29, var0 + Client.viewportTempX, Client.viewportTempY + var1, var25, 0, Client.viewportDrawCount); - } - - if (Client.overheadTextEffects[var18] == 3) { - class43.fontBold12.drawCenteredShake(var29, var0 + Client.viewportTempX, Client.viewportTempY + var1, var25, 0, Client.viewportDrawCount, 150 - Client.overheadTextCyclesRemaining[var18]); - } - - if (Client.overheadTextEffects[var18] == 4) { - var26 = (150 - Client.overheadTextCyclesRemaining[var18]) * (class43.fontBold12.stringWidth(var29) + 100) / 150; - Rasterizer2D.Rasterizer2D_expandClip(var0 + Client.viewportTempX - 50, var1, var0 + Client.viewportTempX + 50, var3 + var1); - class43.fontBold12.draw(var29, var0 + Client.viewportTempX + 50 - var26, Client.viewportTempY + var1, var25, 0); - Rasterizer2D.Rasterizer2D_setClip(var0, var1, var0 + var2, var3 + var1); - } - - if (Client.overheadTextEffects[var18] == 5) { - var26 = 150 - Client.overheadTextCyclesRemaining[var18]; - int var27 = 0; - if (var26 < 25) { - var27 = var26 - 25; - } else if (var26 > 125) { - var27 = var26 - 125; - } - - Rasterizer2D.Rasterizer2D_expandClip(var0, Client.viewportTempY + var1 - class43.fontBold12.ascent - 1, var0 + var2, Client.viewportTempY + var1 + 5); - class43.fontBold12.drawCentered(var29, var0 + Client.viewportTempX, var27 + Client.viewportTempY + var1, var25, 0); - Rasterizer2D.Rasterizer2D_setClip(var0, var1, var0 + var2, var3 + var1); - } - } else { - class43.fontBold12.drawCentered(var29, var0 + Client.viewportTempX, Client.viewportTempY + var1, 16776960, 0); - } - } - - WorldMapLabel.method475(var0, var1); - ((TextureProvider)Rasterizer3D.Rasterizer3D_textureLoader).animate(Client.field693); - RouteStrategy.method3734(var0, var1, var2, var3); - UrlRequester.cameraX = var5; - class16.cameraY = var6; - GrandExchangeOfferAgeComparator.cameraZ = var7; - class247.cameraPitch = var8; - WorldMapData_1.cameraYaw = var9; - if (Client.isLoading) { - byte var31 = 0; - var14 = var31 + NetCache.NetCache_pendingPriorityResponsesCount + NetCache.NetCache_pendingPriorityWritesCount; - if (var14 == 0) { - Client.isLoading = false; - } - } - - if (Client.isLoading) { - Rasterizer2D.Rasterizer2D_fillRectangle(var0, var1, var2, var3, 0); - GrandExchangeEvents.drawLoadingMessage("Loading - please wait.", false); + for (int var1 = 0; var1 < class325.SpriteBuffer_spriteCount; ++var1) { + IndexedSprite var2 = var0[var1] = new IndexedSprite(); + var2.width = class325.SpriteBuffer_spriteWidth; + var2.height = UserComparator9.SpriteBuffer_spriteHeight; + var2.xOffset = UrlRequester.SpriteBuffer_xOffsets[var1]; + var2.yOffset = class216.SpriteBuffer_yOffsets[var1]; + var2.subWidth = class325.SpriteBuffer_spriteWidths[var1]; + var2.subHeight = VarcInt.SpriteBuffer_spriteHeights[var1]; + var2.palette = class325.SpriteBuffer_spritePalette; + var2.pixels = FillMode.SpriteBuffer_pixels[var1]; } + PcmPlayer.method2510(); + return var0; } } diff --git a/runescape-client/src/main/java/Widget.java b/runescape-client/src/main/java/Widget.java index 9e38f029f1..4c326c4727 100644 --- a/runescape-client/src/main/java/Widget.java +++ b/runescape-client/src/main/java/Widget.java @@ -4,697 +4,694 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("hi") +@ObfuscatedName("hl") @Implements("Widget") public class Widget extends Node { - @ObfuscatedName("c") - @ObfuscatedSignature( - signature = "[[Lhi;" - ) - @Export("Widget_interfaceComponents") - public static Widget[][] Widget_interfaceComponents; - @ObfuscatedName("m") - @ObfuscatedSignature( - signature = "Lhq;" - ) - @Export("Widget_spritesArchive") - static AbstractArchive Widget_spritesArchive; - @ObfuscatedName("p") - @ObfuscatedSignature( - signature = "Lhq;" - ) - @Export("Widget_fontsArchive") - static AbstractArchive Widget_fontsArchive; - @ObfuscatedName("h") - @ObfuscatedSignature( - signature = "Leb;" - ) - @Export("Widget_cachedSprites") - public static EvictingDualNodeHashTable Widget_cachedSprites; + @ObfuscatedName("y") + @Export("Widget_loadedInterfaces") + public static boolean[] Widget_loadedInterfaces; @ObfuscatedName("k") @ObfuscatedSignature( - signature = "Leb;" + signature = "Lhf;" ) - @Export("Widget_cachedModels") - public static EvictingDualNodeHashTable Widget_cachedModels; + @Export("Widget_spritesArchive") + public static AbstractArchive Widget_spritesArchive; @ObfuscatedName("x") @ObfuscatedSignature( - signature = "Leb;" + signature = "Lhf;" + ) + @Export("Widget_fontsArchive") + public static AbstractArchive Widget_fontsArchive; + @ObfuscatedName("o") + @ObfuscatedSignature( + signature = "Lef;" + ) + @Export("Widget_cachedSprites") + static EvictingDualNodeHashTable Widget_cachedSprites; + @ObfuscatedName("e") + @ObfuscatedSignature( + signature = "Lef;" + ) + @Export("Widget_cachedModels") + static EvictingDualNodeHashTable Widget_cachedModels; + @ObfuscatedName("n") + @ObfuscatedSignature( + signature = "Lef;" ) @Export("Widget_cachedFonts") - public static EvictingDualNodeHashTable Widget_cachedFonts; - @ObfuscatedName("j") + static EvictingDualNodeHashTable Widget_cachedFonts; + @ObfuscatedName("r") @ObfuscatedSignature( - signature = "Leb;" + signature = "Lef;" ) @Export("Widget_cachedSpriteMasks") - public static EvictingDualNodeHashTable Widget_cachedSpriteMasks; - @ObfuscatedName("r") - public static boolean field2546; - @ObfuscatedName("e") + static EvictingDualNodeHashTable Widget_cachedSpriteMasks; + @ObfuscatedName("c") + public static boolean field2647; + @ObfuscatedName("a") @Export("isIf3") public boolean isIf3; - @ObfuscatedName("s") + @ObfuscatedName("d") @ObfuscatedGetter( - intValue = -280672731 + intValue = 1682461819 ) @Export("id") public int id; - @ObfuscatedName("b") + @ObfuscatedName("s") @ObfuscatedGetter( - intValue = 1645861549 + intValue = 304580101 ) @Export("childIndex") public int childIndex; - @ObfuscatedName("z") + @ObfuscatedName("t") @ObfuscatedGetter( - intValue = -2128964865 + intValue = -1464178541 ) @Export("type") public int type; - @ObfuscatedName("f") + @ObfuscatedName("m") @ObfuscatedGetter( - intValue = -1250480087 + intValue = -1207146159 ) @Export("buttonType") public int buttonType; - @ObfuscatedName("g") + @ObfuscatedName("v") @ObfuscatedGetter( - intValue = -1066235227 + intValue = -436688561 ) @Export("contentType") public int contentType; - @ObfuscatedName("w") + @ObfuscatedName("q") @ObfuscatedGetter( - intValue = -1730159061 + intValue = 797702061 ) @Export("xAlignment") public int xAlignment; - @ObfuscatedName("u") + @ObfuscatedName("l") @ObfuscatedGetter( - intValue = 1386350927 + intValue = -1839904363 ) @Export("yAlignment") public int yAlignment; - @ObfuscatedName("y") + @ObfuscatedName("j") @ObfuscatedGetter( - intValue = -439179557 + intValue = 932537707 ) @Export("widthAlignment") public int widthAlignment; - @ObfuscatedName("aa") + @ObfuscatedName("af") @ObfuscatedGetter( - intValue = -1461401323 + intValue = -861293309 ) @Export("heightAlignment") public int heightAlignment; - @ObfuscatedName("aw") + @ObfuscatedName("ad") @ObfuscatedGetter( - intValue = 1233899185 + intValue = 1387465487 ) @Export("rawX") public int rawX; - @ObfuscatedName("ar") + @ObfuscatedName("am") @ObfuscatedGetter( - intValue = -890893837 + intValue = 69728839 ) @Export("rawY") public int rawY; - @ObfuscatedName("aq") + @ObfuscatedName("ai") @ObfuscatedGetter( - intValue = -1159275423 + intValue = -1496687489 ) @Export("rawWidth") public int rawWidth; - @ObfuscatedName("ad") + @ObfuscatedName("ag") @ObfuscatedGetter( - intValue = 1892483003 + intValue = -1477852971 ) @Export("rawHeight") public int rawHeight; - @ObfuscatedName("ag") + @ObfuscatedName("ao") @ObfuscatedGetter( - intValue = 48491411 + intValue = -1601823443 ) @Export("x") public int x; - @ObfuscatedName("ak") + @ObfuscatedName("aw") @ObfuscatedGetter( - intValue = -1737418803 + intValue = -543253817 ) @Export("y") public int y; - @ObfuscatedName("av") + @ObfuscatedName("ak") @ObfuscatedGetter( - intValue = -369065525 + intValue = 201590315 ) @Export("width") public int width; - @ObfuscatedName("am") + @ObfuscatedName("aa") @ObfuscatedGetter( - intValue = -977437037 + intValue = -1083073471 ) @Export("height") public int height; @ObfuscatedName("ab") @ObfuscatedGetter( - intValue = -146103693 + intValue = 1082009517 ) - public int field2565; - @ObfuscatedName("ax") + public int field2594; + @ObfuscatedName("ar") @ObfuscatedGetter( - intValue = -1709587935 + intValue = 701840215 ) - public int field2566; - @ObfuscatedName("al") + public int field2694; + @ObfuscatedName("av") @ObfuscatedGetter( - intValue = -952068239 + intValue = -603142629 ) @Export("parentId") public int parentId; - @ObfuscatedName("ap") + @ObfuscatedName("aq") @Export("isHidden") public boolean isHidden; - @ObfuscatedName("aj") + @ObfuscatedName("ac") @ObfuscatedGetter( - intValue = -1718942179 + intValue = 559295079 ) @Export("scrollX") public int scrollX; - @ObfuscatedName("ae") + @ObfuscatedName("az") @ObfuscatedGetter( - intValue = -951483361 + intValue = -1519015545 ) @Export("scrollY") public int scrollY; - @ObfuscatedName("au") + @ObfuscatedName("at") @ObfuscatedGetter( - intValue = -1463139927 + intValue = 1743610313 ) @Export("scrollWidth") public int scrollWidth; - @ObfuscatedName("ah") + @ObfuscatedName("ae") @ObfuscatedGetter( - intValue = -957272581 + intValue = -768640271 ) @Export("scrollHeight") public int scrollHeight; - @ObfuscatedName("an") + @ObfuscatedName("aj") @ObfuscatedGetter( - intValue = 1271206161 + intValue = 875298849 ) @Export("color") public int color; - @ObfuscatedName("af") + @ObfuscatedName("ap") @ObfuscatedGetter( - intValue = -1941262011 + intValue = 1946590123 ) @Export("color2") public int color2; - @ObfuscatedName("ay") + @ObfuscatedName("an") @ObfuscatedGetter( - intValue = 514588633 + intValue = -1868971829 ) @Export("mouseOverColor") public int mouseOverColor; - @ObfuscatedName("az") + @ObfuscatedName("al") @ObfuscatedGetter( - intValue = 2103331161 + intValue = 1913787705 ) @Export("mouseOverColor2") public int mouseOverColor2; - @ObfuscatedName("ao") + @ObfuscatedName("ay") @Export("fill") public boolean fill; - @ObfuscatedName("ai") + @ObfuscatedName("ax") @ObfuscatedSignature( - signature = "Llt;" + signature = "Llz;" ) @Export("fillMode") public FillMode fillMode; - @ObfuscatedName("ac") + @ObfuscatedName("au") @ObfuscatedGetter( - intValue = 980252295 + intValue = -944834953 ) @Export("transparencyTop") public int transparencyTop; - @ObfuscatedName("at") + @ObfuscatedName("as") @ObfuscatedGetter( - intValue = 86266387 + intValue = 565283995 ) @Export("transparencyBot") public int transparencyBot; - @ObfuscatedName("as") + @ObfuscatedName("ah") @ObfuscatedGetter( - intValue = -698709205 + intValue = 1175693173 ) @Export("lineWid") public int lineWid; - @ObfuscatedName("ba") - public boolean field2641; - @ObfuscatedName("bg") + @ObfuscatedName("bi") + public boolean field2709; + @ObfuscatedName("bo") @ObfuscatedGetter( - intValue = 984904481 + intValue = -3923559 ) @Export("spriteId2") public int spriteId2; - @ObfuscatedName("bc") + @ObfuscatedName("bx") @ObfuscatedGetter( - intValue = 2067815265 + intValue = -1169722885 ) @Export("spriteId") public int spriteId; - @ObfuscatedName("bd") + @ObfuscatedName("bu") @ObfuscatedGetter( - intValue = 656330525 + intValue = 1021847911 ) @Export("spriteAngle") public int spriteAngle; - @ObfuscatedName("bx") + @ObfuscatedName("bd") @Export("spriteTiling") public boolean spriteTiling; - @ObfuscatedName("bl") + @ObfuscatedName("bn") @ObfuscatedGetter( - intValue = -1324246855 + intValue = 433329709 ) @Export("outline") public int outline; - @ObfuscatedName("bh") + @ObfuscatedName("bj") @ObfuscatedGetter( - intValue = 1573371851 + intValue = -1127682419 ) @Export("spriteShadow") public int spriteShadow; - @ObfuscatedName("bu") + @ObfuscatedName("bm") @Export("spriteFlipV") public boolean spriteFlipV; - @ObfuscatedName("br") + @ObfuscatedName("bq") @Export("spriteFlipH") public boolean spriteFlipH; - @ObfuscatedName("bq") + @ObfuscatedName("bf") @ObfuscatedGetter( - intValue = -593024897 + intValue = 1709757885 ) @Export("modelType") public int modelType; - @ObfuscatedName("bi") + @ObfuscatedName("by") @ObfuscatedGetter( - intValue = -114763821 + intValue = 1705471533 ) @Export("modelId") public int modelId; - @ObfuscatedName("be") + @ObfuscatedName("br") @ObfuscatedGetter( - intValue = -1742375397 + intValue = 178630707 ) @Export("modelType2") int modelType2; - @ObfuscatedName("bt") + @ObfuscatedName("ba") @ObfuscatedGetter( - intValue = 211034615 + intValue = 1939746225 ) @Export("modelId2") int modelId2; - @ObfuscatedName("bs") + @ObfuscatedName("bb") @ObfuscatedGetter( - intValue = -802962767 + intValue = 29524191 ) @Export("sequenceId") public int sequenceId; - @ObfuscatedName("bj") + @ObfuscatedName("bg") @ObfuscatedGetter( - intValue = 1552321185 + intValue = -540899077 ) @Export("sequenceId2") public int sequenceId2; - @ObfuscatedName("bm") + @ObfuscatedName("bw") @ObfuscatedGetter( - intValue = 932822481 + intValue = -1645734867 ) @Export("modelOffsetX") public int modelOffsetX; - @ObfuscatedName("bn") + @ObfuscatedName("be") @ObfuscatedGetter( - intValue = 869171029 + intValue = -1267088937 ) @Export("modelOffsetY") public int modelOffsetY; - @ObfuscatedName("bz") + @ObfuscatedName("bt") @ObfuscatedGetter( - intValue = -326232143 + intValue = 1658631801 ) @Export("modelAngleX") public int modelAngleX; - @ObfuscatedName("bo") + @ObfuscatedName("bl") @ObfuscatedGetter( - intValue = 445360869 + intValue = 922344031 ) @Export("modelAngleY") public int modelAngleY; - @ObfuscatedName("bk") + @ObfuscatedName("bp") @ObfuscatedGetter( - intValue = 1367930315 + intValue = -1525531675 ) @Export("modelAngleZ") public int modelAngleZ; @ObfuscatedName("bv") @ObfuscatedGetter( - intValue = -1834112819 + intValue = -1852880265 ) @Export("modelZoom") public int modelZoom; - @ObfuscatedName("bw") + @ObfuscatedName("bs") @ObfuscatedGetter( - intValue = -456160553 + intValue = -268605009 ) - public int field2577; - @ObfuscatedName("bb") + public int field2711; + @ObfuscatedName("bz") @ObfuscatedGetter( - intValue = -617398221 + intValue = -751685799 ) - public int field2604; - @ObfuscatedName("bf") + public int field2633; + @ObfuscatedName("bc") @Export("modelOrthog") public boolean modelOrthog; - @ObfuscatedName("by") + @ObfuscatedName("bh") @Export("modelTransparency") public boolean modelTransparency; - @ObfuscatedName("bp") + @ObfuscatedName("bk") @ObfuscatedGetter( - intValue = 864768915 + intValue = -137614795 ) @Export("itemQuantityMode") public int itemQuantityMode; - @ObfuscatedName("cx") + @ObfuscatedName("cm") @ObfuscatedGetter( - intValue = -1260051363 + intValue = -1844014927 ) @Export("fontId") public int fontId; - @ObfuscatedName("cv") + @ObfuscatedName("cd") @Export("text") public String text; - @ObfuscatedName("ce") + @ObfuscatedName("cv") @Export("text2") public String text2; - @ObfuscatedName("cw") + @ObfuscatedName("cl") @ObfuscatedGetter( - intValue = -437750021 + intValue = -1989359281 ) @Export("textLineHeight") public int textLineHeight; - @ObfuscatedName("cd") + @ObfuscatedName("cg") @ObfuscatedGetter( - intValue = 1459879157 + intValue = 19289147 ) @Export("textXAlignment") public int textXAlignment; - @ObfuscatedName("cn") + @ObfuscatedName("ch") @ObfuscatedGetter( - intValue = -1045469939 + intValue = -1956461255 ) @Export("textYAlignment") public int textYAlignment; - @ObfuscatedName("cr") + @ObfuscatedName("co") @Export("textShadowed") public boolean textShadowed; - @ObfuscatedName("ci") + @ObfuscatedName("cr") @ObfuscatedGetter( - intValue = 305602759 + intValue = 604950213 ) @Export("paddingX") public int paddingX; - @ObfuscatedName("cy") + @ObfuscatedName("ck") @ObfuscatedGetter( - intValue = -782099123 + intValue = 2056205059 ) @Export("paddingY") public int paddingY; - @ObfuscatedName("cl") + @ObfuscatedName("cb") @Export("inventoryXOffsets") public int[] inventoryXOffsets; - @ObfuscatedName("co") + @ObfuscatedName("cy") @Export("inventoryYOffsets") public int[] inventoryYOffsets; - @ObfuscatedName("cu") + @ObfuscatedName("cn") @Export("inventorySprites") public int[] inventorySprites; - @ObfuscatedName("cz") + @ObfuscatedName("cj") @Export("itemActions") public String[] itemActions; @ObfuscatedName("cq") @ObfuscatedGetter( - intValue = 1435074299 + intValue = -748818631 ) @Export("clickMask") public int clickMask; - @ObfuscatedName("cj") - public boolean field2606; - @ObfuscatedName("cm") - public byte[][] field2623; - @ObfuscatedName("cb") - public byte[][] field2624; - @ObfuscatedName("ct") - public int[] field2628; - @ObfuscatedName("cc") - public int[] field2626; - @ObfuscatedName("db") + @ObfuscatedName("ci") + public boolean field2651; + @ObfuscatedName("cu") + public byte[][] field2592; + @ObfuscatedName("cs") + public byte[][] field2653; + @ObfuscatedName("ca") + public int[] field2654; + @ObfuscatedName("cf") + public int[] field2655; + @ObfuscatedName("dw") @Export("dataText") public String dataText; - @ObfuscatedName("dq") + @ObfuscatedName("de") @Export("actions") public String[] actions; - @ObfuscatedName("dd") + @ObfuscatedName("dx") @ObfuscatedSignature( - signature = "Lhi;" + signature = "Lhl;" ) @Export("parent") public Widget parent; - @ObfuscatedName("dl") + @ObfuscatedName("dc") @ObfuscatedGetter( - intValue = 1506915571 + intValue = 1585908023 ) @Export("dragZoneSize") public int dragZoneSize; - @ObfuscatedName("dm") + @ObfuscatedName("dk") @ObfuscatedGetter( - intValue = 1786356727 + intValue = -608176245 ) @Export("dragThreshold") public int dragThreshold; - @ObfuscatedName("di") + @ObfuscatedName("dj") @Export("isScrollBar") public boolean isScrollBar; - @ObfuscatedName("dn") + @ObfuscatedName("dp") @Export("spellActionName") public String spellActionName; - @ObfuscatedName("dr") + @ObfuscatedName("di") @Export("hasListener") public boolean hasListener; - @ObfuscatedName("do") + @ObfuscatedName("dn") @Export("onLoad") public Object[] onLoad; @ObfuscatedName("ds") @Export("onClick") public Object[] onClick; - @ObfuscatedName("dz") + @ObfuscatedName("dh") @Export("onClickRepeat") public Object[] onClickRepeat; - @ObfuscatedName("dj") + @ObfuscatedName("dt") @Export("onRelease") public Object[] onRelease; - @ObfuscatedName("df") + @ObfuscatedName("dz") @Export("onHold") public Object[] onHold; - @ObfuscatedName("da") + @ObfuscatedName("dr") @Export("onMouseOver") public Object[] onMouseOver; - @ObfuscatedName("dg") + @ObfuscatedName("dl") @Export("onMouseRepeat") public Object[] onMouseRepeat; - @ObfuscatedName("dp") + @ObfuscatedName("db") @Export("onMouseLeave") public Object[] onMouseLeave; - @ObfuscatedName("dy") + @ObfuscatedName("da") @Export("onDrag") public Object[] onDrag; - @ObfuscatedName("du") + @ObfuscatedName("dq") @Export("onDragComplete") public Object[] onDragComplete; - @ObfuscatedName("dk") + @ObfuscatedName("do") @Export("onTargetEnter") public Object[] onTargetEnter; - @ObfuscatedName("dx") + @ObfuscatedName("du") @Export("onTargetLeave") public Object[] onTargetLeave; - @ObfuscatedName("dt") + @ObfuscatedName("dv") @Export("onVarTransmit") public Object[] onVarTransmit; - @ObfuscatedName("dw") + @ObfuscatedName("dg") @Export("varTransmitTriggers") public int[] varTransmitTriggers; - @ObfuscatedName("dh") + @ObfuscatedName("dm") @Export("onInvTransmit") public Object[] onInvTransmit; - @ObfuscatedName("dv") + @ObfuscatedName("df") @Export("invTransmitTriggers") public int[] invTransmitTriggers; - @ObfuscatedName("dc") + @ObfuscatedName("dd") @Export("onStatTransmit") public Object[] onStatTransmit; - @ObfuscatedName("de") + @ObfuscatedName("dy") @Export("statTransmitTriggers") public int[] statTransmitTriggers; - @ObfuscatedName("eu") + @ObfuscatedName("eg") @Export("onTimer") public Object[] onTimer; - @ObfuscatedName("eg") + @ObfuscatedName("ey") @Export("onOp") public Object[] onOp; - @ObfuscatedName("ee") + @ObfuscatedName("ec") @Export("onScroll") public Object[] onScroll; - @ObfuscatedName("ek") + @ObfuscatedName("el") @Export("onChatTransmit") public Object[] onChatTransmit; - @ObfuscatedName("ef") + @ObfuscatedName("em") @Export("onKey") public Object[] onKey; - @ObfuscatedName("ep") + @ObfuscatedName("ee") @Export("onFriendTransmit") public Object[] onFriendTransmit; - @ObfuscatedName("et") + @ObfuscatedName("eu") @Export("onClanTransmit") public Object[] onClanTransmit; - @ObfuscatedName("eq") + @ObfuscatedName("ea") @Export("onMiscTransmit") public Object[] onMiscTransmit; - @ObfuscatedName("em") + @ObfuscatedName("er") @Export("onDialogAbort") public Object[] onDialogAbort; - @ObfuscatedName("ew") + @ObfuscatedName("ek") @Export("onSubChange") public Object[] onSubChange; - @ObfuscatedName("eh") + @ObfuscatedName("ej") @Export("onResize") public Object[] onResize; - @ObfuscatedName("ei") + @ObfuscatedName("et") @Export("onStockTransmit") public Object[] onStockTransmit; - @ObfuscatedName("ex") - public Object[] field2665; - @ObfuscatedName("ev") + @ObfuscatedName("eh") + public Object[] field2689; + @ObfuscatedName("ew") @Export("cs1Instructions") public int[][] cs1Instructions; - @ObfuscatedName("er") + @ObfuscatedName("ez") @Export("cs1Comparisons") public int[] cs1Comparisons; - @ObfuscatedName("eb") + @ObfuscatedName("ef") @Export("cs1ComparisonValues") public int[] cs1ComparisonValues; - @ObfuscatedName("es") + @ObfuscatedName("ex") @ObfuscatedGetter( - intValue = -2064419495 + intValue = -453666205 ) @Export("mouseOverRedirect") public int mouseOverRedirect; - @ObfuscatedName("en") + @ObfuscatedName("ep") @Export("spellName") public String spellName; - @ObfuscatedName("eo") + @ObfuscatedName("ev") @Export("buttonText") public String buttonText; - @ObfuscatedName("ed") + @ObfuscatedName("eo") @Export("itemIds") public int[] itemIds; - @ObfuscatedName("ea") + @ObfuscatedName("ei") @Export("itemQuantities") public int[] itemQuantities; - @ObfuscatedName("ec") + @ObfuscatedName("en") @ObfuscatedGetter( - intValue = 1669892041 + intValue = -741280037 ) @Export("itemId") public int itemId; - @ObfuscatedName("ey") + @ObfuscatedName("eb") @ObfuscatedGetter( - intValue = 953415941 + intValue = -1517426203 ) @Export("itemQuantity") public int itemQuantity; - @ObfuscatedName("ez") + @ObfuscatedName("es") @ObfuscatedGetter( - intValue = 1038717705 + intValue = 41842763 ) @Export("modelFrame") public int modelFrame; - @ObfuscatedName("ej") + @ObfuscatedName("ed") @ObfuscatedGetter( - intValue = -1473974595 + intValue = -1337602571 ) @Export("modelFrameCycle") public int modelFrameCycle; - @ObfuscatedName("el") + @ObfuscatedName("eq") @ObfuscatedSignature( - signature = "[Lhi;" + signature = "[Lhl;" ) @Export("children") public Widget[] children; - @ObfuscatedName("ft") + @ObfuscatedName("fe") @Export("containsMouse") public boolean containsMouse; - @ObfuscatedName("fe") + @ObfuscatedName("fl") @Export("isClicked") public boolean isClicked; - @ObfuscatedName("fs") + @ObfuscatedName("fj") @ObfuscatedGetter( - intValue = 364825415 + intValue = 1602512459 ) - public int field2681; - @ObfuscatedName("fi") + public int field2631; + @ObfuscatedName("fv") @ObfuscatedGetter( - intValue = -249487125 + intValue = 2143092137 ) - public int field2644; - @ObfuscatedName("fp") + public int field2652; + @ObfuscatedName("fx") @ObfuscatedGetter( - intValue = -1173942703 + intValue = -24022081 ) - public int field2567; - @ObfuscatedName("fu") + public int field2585; + @ObfuscatedName("fm") @ObfuscatedGetter( - intValue = -309907897 + intValue = -620656701 ) - public int field2684; - @ObfuscatedName("fy") + public int field2565; + @ObfuscatedName("fc") @ObfuscatedGetter( - intValue = -1761314171 + intValue = 405715237 ) @Export("rootIndex") public int rootIndex; - @ObfuscatedName("fn") + @ObfuscatedName("fz") @ObfuscatedGetter( - intValue = 31407323 + intValue = -1777882267 ) @Export("cycle") public int cycle; - @ObfuscatedName("fg") - public int[] field2627; - @ObfuscatedName("fw") + @ObfuscatedName("fi") + public int[] field2695; + @ObfuscatedName("fo") @Export("noClickThrough") public boolean noClickThrough; - @ObfuscatedName("ff") + @ObfuscatedName("fu") @Export("noScrollThrough") public boolean noScrollThrough; - @ObfuscatedName("fh") - public boolean field2690; + @ObfuscatedName("fs") + public boolean field2719; static { Widget_cachedSprites = new EvictingDualNodeHashTable(200); Widget_cachedModels = new EvictingDualNodeHashTable(50); Widget_cachedFonts = new EvictingDualNodeHashTable(20); Widget_cachedSpriteMasks = new EvictingDualNodeHashTable(8); - field2546 = false; + field2647 = false; } public Widget() { @@ -715,8 +712,8 @@ public class Widget extends Node { this.y = 0; this.width = 0; this.height = 0; - this.field2565 = 1; - this.field2566 = 1; + this.field2594 = 1; + this.field2694 = 1; this.parentId = -1; this.isHidden = false; this.scrollX = 0; @@ -732,7 +729,7 @@ public class Widget extends Node { this.transparencyTop = 0; this.transparencyBot = 0; this.lineWid = 1; - this.field2641 = false; + this.field2709 = false; this.spriteId2 = -1; this.spriteId = -1; this.spriteAngle = 0; @@ -751,8 +748,8 @@ public class Widget extends Node { this.modelAngleY = 0; this.modelAngleZ = 0; this.modelZoom = 100; - this.field2577 = 0; - this.field2604 = 0; + this.field2711 = 0; + this.field2633 = 0; this.modelOrthog = false; this.modelTransparency = false; this.itemQuantityMode = 2; @@ -766,7 +763,7 @@ public class Widget extends Node { this.paddingX = 0; this.paddingY = 0; this.clickMask = 0; - this.field2606 = false; + this.field2651 = false; this.dataText = ""; this.parent = null; this.dragZoneSize = 0; @@ -783,21 +780,21 @@ public class Widget extends Node { this.modelFrameCycle = 0; this.containsMouse = false; this.isClicked = false; - this.field2681 = -1; - this.field2644 = 0; - this.field2567 = 0; - this.field2684 = 0; + this.field2631 = -1; + this.field2652 = 0; + this.field2585 = 0; + this.field2565 = 0; this.rootIndex = -1; this.cycle = -1; this.noClickThrough = false; this.noScrollThrough = false; - this.field2690 = false; + this.field2719 = false; } - @ObfuscatedName("l") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(Lkc;I)V", - garbageValue = "1429632695" + signature = "(Lkg;B)V", + garbageValue = "39" ) @Export("decodeLegacy") void decodeLegacy(Buffer var1) { @@ -866,7 +863,7 @@ public class Widget extends Node { if (this.type == 2) { this.itemIds = new int[this.rawWidth * this.rawHeight]; - this.itemQuantities = new int[this.rawHeight * this.rawWidth]; + this.itemQuantities = new int[this.rawWidth * this.rawHeight]; var4 = var1.readUnsignedByte(); if (var4 == 1) { this.clickMask |= 268435456; @@ -908,9 +905,9 @@ public class Widget extends Node { this.itemActions = new String[5]; for (var8 = 0; var8 < 5; ++var8) { - String var10 = var1.readStringCp1252NullTerminated(); - if (var10.length() > 0) { - this.itemActions[var8] = var10; + String var11 = var1.readStringCp1252NullTerminated(); + if (var11.length() > 0) { + this.itemActions[var8] = var11; this.clickMask |= 1 << var8 + 23; } } @@ -1001,9 +998,9 @@ public class Widget extends Node { this.itemActions = new String[5]; for (var5 = 0; var5 < 5; ++var5) { - String var11 = var1.readStringCp1252NullTerminated(); - if (var11.length() > 0) { - this.itemActions[var5] = var11; + String var10 = var1.readStringCp1252NullTerminated(); + if (var10.length() > 0) { + this.itemActions[var5] = var10; this.clickMask |= 1 << var5 + 23; } } @@ -1051,10 +1048,10 @@ public class Widget extends Node { } - @ObfuscatedName("c") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(Lkc;I)V", - garbageValue = "2011634679" + signature = "(Lkg;B)V", + garbageValue = "77" ) @Export("decode") void decode(Buffer var1) { @@ -1121,7 +1118,7 @@ public class Widget extends Node { this.modelOrthog = var1.readUnsignedByte() == 1; var1.readUnsignedShort(); if (this.widthAlignment != 0) { - this.field2577 = var1.readUnsignedShort(); + this.field2711 = var1.readUnsignedShort(); } if (this.heightAlignment != 0) { @@ -1152,7 +1149,7 @@ public class Widget extends Node { if (this.type == 9) { this.lineWid = var1.readUnsignedByte(); this.color = var1.readInt(); - this.field2641 = var1.readUnsignedByte() == 1; + this.field2709 = var1.readUnsignedByte() == 1; } this.clickMask = var1.readMedium(); @@ -1193,10 +1190,10 @@ public class Widget extends Node { this.statTransmitTriggers = this.readListenerTriggers(var1); } - @ObfuscatedName("o") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "(Lkc;I)[Ljava/lang/Object;", - garbageValue = "2071602540" + signature = "(Lkg;I)[Ljava/lang/Object;", + garbageValue = "2111872716" ) @Export("readListener") Object[] readListener(Buffer var1) { @@ -1220,10 +1217,10 @@ public class Widget extends Node { } } - @ObfuscatedName("i") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "(Lkc;I)[I", - garbageValue = "-1637703224" + signature = "(Lkg;B)[I", + garbageValue = "-106" ) @Export("readListenerTriggers") int[] readListenerTriggers(Buffer var1) { @@ -1241,10 +1238,10 @@ public class Widget extends Node { } } - @ObfuscatedName("d") + @ObfuscatedName("w") @ObfuscatedSignature( - signature = "(III)V", - garbageValue = "998252428" + signature = "(IIB)V", + garbageValue = "36" ) @Export("swapItems") public void swapItems(int var1, int var2) { @@ -1256,14 +1253,14 @@ public class Widget extends Node { this.itemQuantities[var1] = var3; } - @ObfuscatedName("m") + @ObfuscatedName("i") @ObfuscatedSignature( - signature = "(ZB)Llx;", - garbageValue = "125" + signature = "(ZI)Lln;", + garbageValue = "-988203301" ) @Export("getSprite") public Sprite getSprite(boolean var1) { - field2546 = false; + field2647 = false; int var2; if (var1) { var2 = this.spriteId; @@ -1274,14 +1271,14 @@ public class Widget extends Node { if (var2 == -1) { return null; } else { - long var3 = ((this.spriteFlipH ? 1L : 0L) << 39) + ((this.spriteFlipV ? 1L : 0L) << 38) + ((long)this.outline << 36) + (long)var2 + ((long)this.spriteShadow << 40); + long var3 = ((this.spriteFlipV ? 1L : 0L) << 38) + (long)var2 + ((long)this.outline << 36) + ((this.spriteFlipH ? 1L : 0L) << 39) + ((long)this.spriteShadow << 40); Sprite var5 = (Sprite)Widget_cachedSprites.get(var3); if (var5 != null) { return var5; } else { - var5 = MenuAction.SpriteBuffer_getSprite(Widget_spritesArchive, var2, 0); + var5 = class288.SpriteBuffer_getSprite(Widget_spritesArchive, var2, 0); if (var5 == null) { - field2546 = true; + field2647 = true; return null; } else { if (this.spriteFlipV) { @@ -1315,14 +1312,14 @@ public class Widget extends Node { } } - @ObfuscatedName("p") + @ObfuscatedName("k") @ObfuscatedSignature( - signature = "(B)Lks;", - garbageValue = "21" + signature = "(S)Lky;", + garbageValue = "12527" ) @Export("getFont") public Font getFont() { - field2546 = false; + field2647 = false; if (this.fontId == -1) { return null; } else { @@ -1330,11 +1327,11 @@ public class Widget extends Node { if (var1 != null) { return var1; } else { - var1 = class269.method5114(Widget_spritesArchive, Widget_fontsArchive, this.fontId, 0); + var1 = class60.method1195(Widget_spritesArchive, Widget_fontsArchive, this.fontId, 0); if (var1 != null) { Widget_cachedFonts.put(var1, (long)this.fontId); } else { - field2546 = true; + field2647 = true; } return var1; @@ -1342,14 +1339,14 @@ public class Widget extends Node { } } - @ObfuscatedName("h") + @ObfuscatedName("x") @ObfuscatedSignature( - signature = "(II)Llx;", - garbageValue = "1720917117" + signature = "(II)Lln;", + garbageValue = "-121704848" ) @Export("getInventorySprite") public Sprite getInventorySprite(int var1) { - field2546 = false; + field2647 = false; if (var1 >= 0 && var1 < this.inventorySprites.length) { int var2 = this.inventorySprites[var1]; if (var2 == -1) { @@ -1359,11 +1356,11 @@ public class Widget extends Node { if (var3 != null) { return var3; } else { - var3 = MenuAction.SpriteBuffer_getSprite(Widget_spritesArchive, var2, 0); + var3 = class288.SpriteBuffer_getSprite(Widget_spritesArchive, var2, 0); if (var3 != null) { Widget_cachedSprites.put(var3, (long)var2); } else { - field2546 = true; + field2647 = true; } return var3; @@ -1374,14 +1371,14 @@ public class Widget extends Node { } } - @ObfuscatedName("k") + @ObfuscatedName("o") @ObfuscatedSignature( - signature = "(Liv;IZLhe;I)Ldv;", - garbageValue = "-1533310000" + signature = "(Liy;IZLhd;I)Ldf;", + garbageValue = "-527330743" ) @Export("getModel") public Model getModel(SequenceDefinition var1, int var2, boolean var3, PlayerAppearance var4) { - field2546 = false; + field2647 = false; int var5; int var6; if (var3) { @@ -1401,9 +1398,9 @@ public class Widget extends Node { if (var7 == null) { ModelData var8; if (var5 == 1) { - var8 = ModelData.ModelData_get(StructDefinition.Widget_modelsArchive, var6, 0); + var8 = ModelData.ModelData_get(FriendLoginUpdate.Widget_modelsArchive, var6, 0); if (var8 == null) { - field2546 = true; + field2647 = true; return null; } @@ -1411,9 +1408,9 @@ public class Widget extends Node { } if (var5 == 2) { - var8 = SecureRandomCallable.getNpcDefinition(var6).getModelData(); + var8 = VarcInt.getNpcDefinition(var6).getModelData(); if (var8 == null) { - field2546 = true; + field2647 = true; return null; } @@ -1427,7 +1424,7 @@ public class Widget extends Node { var8 = var4.getModelData(); if (var8 == null) { - field2546 = true; + field2647 = true; return null; } @@ -1435,14 +1432,14 @@ public class Widget extends Node { } if (var5 == 4) { - ItemDefinition var9 = class222.ItemDefinition_get(var6); + ItemDefinition var9 = Interpreter.ItemDefinition_get(var6); var8 = var9.getModelData(10); if (var8 == null) { - field2546 = true; + field2647 = true; return null; } - var7 = var8.toModel(var9.ambient + 64, var9.contrast * 5 + 768, -50, -10, -50); + var7 = var8.toModel(var9.ambient + 64, var9.contrast + 768, -50, -10, -50); } Widget_cachedModels.put(var7, (long)(var6 + (var5 << 16))); @@ -1456,10 +1453,10 @@ public class Widget extends Node { } } - @ObfuscatedName("x") + @ObfuscatedName("e") @ObfuscatedSignature( signature = "(ZI)Lhn;", - garbageValue = "1756032034" + garbageValue = "-92649703" ) @Export("getSpriteMask") public SpriteMask getSpriteMask(boolean var1) { @@ -1471,7 +1468,7 @@ public class Widget extends Node { if (var2 == -1) { return null; } else { - long var3 = ((this.spriteFlipH ? 1L : 0L) << 39) + (long)var2 + ((long)this.outline << 36) + ((this.spriteFlipV ? 1L : 0L) << 38) + ((long)this.spriteShadow << 40); + long var3 = ((this.spriteFlipH ? 1L : 0L) << 39) + ((this.spriteFlipV ? 1L : 0L) << 38) + ((long)this.outline << 36) + (long)var2 + ((long)this.spriteShadow << 40); SpriteMask var5 = (SpriteMask)Widget_cachedSpriteMasks.get(var3); if (var5 != null) { return var5; @@ -1515,10 +1512,10 @@ public class Widget extends Node { } } - @ObfuscatedName("j") + @ObfuscatedName("c") @ObfuscatedSignature( signature = "(ILjava/lang/String;I)V", - garbageValue = "1842763844" + garbageValue = "-663551109" ) @Export("setAction") public void setAction(int var1, String var2) { diff --git a/runescape-client/src/main/java/World.java b/runescape-client/src/main/java/World.java index 7891f78d5b..c2215c0ad2 100644 --- a/runescape-client/src/main/java/World.java +++ b/runescape-client/src/main/java/World.java @@ -1,69 +1,63 @@ -import java.awt.Image; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("bk") +@ObfuscatedName("bp") @Implements("World") public class World { - @ObfuscatedName("n") - @Export("Interpreter_intLocals") - static int[] Interpreter_intLocals; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = 494221483 + intValue = -2124078527 ) @Export("World_count") static int World_count; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedGetter( - intValue = -1998589339 + intValue = -92333775 ) @Export("World_listCount") static int World_listCount; - @ObfuscatedName("o") + @ObfuscatedName("y") @Export("World_sortOption2") static int[] World_sortOption2; - @ObfuscatedName("i") + @ObfuscatedName("w") @Export("World_sortOption1") static int[] World_sortOption1; - @ObfuscatedName("am") - static Image field996; - @ObfuscatedName("m") + @ObfuscatedName("k") @ObfuscatedGetter( - intValue = -962932589 + intValue = 176871977 ) @Export("id") int id; - @ObfuscatedName("p") + @ObfuscatedName("x") @ObfuscatedGetter( - intValue = -932185849 + intValue = 767874413 ) @Export("properties") int properties; - @ObfuscatedName("h") + @ObfuscatedName("o") @ObfuscatedGetter( - intValue = -148659453 + intValue = 1258994719 ) @Export("population") int population; - @ObfuscatedName("k") + @ObfuscatedName("e") @Export("host") String host; - @ObfuscatedName("x") + @ObfuscatedName("n") @Export("activity") String activity; - @ObfuscatedName("j") + @ObfuscatedName("r") @ObfuscatedGetter( - intValue = -1478384809 + intValue = -1182748769 ) @Export("location") int location; - @ObfuscatedName("r") + @ObfuscatedName("c") @ObfuscatedGetter( - intValue = -556966481 + intValue = 1616243125 ) @Export("index") int index; @@ -81,77 +75,232 @@ public class World { @ObfuscatedName("i") @ObfuscatedSignature( signature = "(I)Z", - garbageValue = "1210336025" + garbageValue = "-946882921" ) @Export("isMembersOnly") boolean isMembersOnly() { return (1 & this.properties) != 0; } - @ObfuscatedName("d") + @ObfuscatedName("k") @ObfuscatedSignature( - signature = "(I)Z", - garbageValue = "-293217805" + signature = "(B)Z", + garbageValue = "-32" ) - boolean method1917() { + boolean method1802() { return (2 & this.properties) != 0; } - @ObfuscatedName("m") + @ObfuscatedName("x") @ObfuscatedSignature( signature = "(I)Z", - garbageValue = "726558642" + garbageValue = "-1605869890" ) @Export("isPvp") boolean isPvp() { return (4 & this.properties) != 0; } - @ObfuscatedName("p") + @ObfuscatedName("o") @ObfuscatedSignature( signature = "(I)Z", - garbageValue = "526640456" + garbageValue = "1798300394" ) - boolean method1885() { + boolean method1785() { return (8 & this.properties) != 0; } - @ObfuscatedName("h") + @ObfuscatedName("e") @ObfuscatedSignature( - signature = "(I)Z", - garbageValue = "-771328937" + signature = "(B)Z", + garbageValue = "0" ) @Export("isDeadman") boolean isDeadman() { return (536870912 & this.properties) != 0; } - @ObfuscatedName("k") + @ObfuscatedName("n") @ObfuscatedSignature( signature = "(I)Z", - garbageValue = "-188040655" + garbageValue = "-758716073" ) @Export("isBeta") boolean isBeta() { return (33554432 & this.properties) != 0; } - @ObfuscatedName("x") + @ObfuscatedName("c") @ObfuscatedSignature( - signature = "(I)Z", - garbageValue = "-320413166" + signature = "(B)Z", + garbageValue = "5" ) - boolean method1887() { + boolean method1788() { return (1073741824 & this.properties) != 0; } - @ObfuscatedName("n") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(IB)[B", - garbageValue = "-113" + signature = "(ILhf;IIIZI)V", + garbageValue = "592972731" ) - @Export("ByteArrayPool_getArray") - public static synchronized byte[] ByteArrayPool_getArray(int var0) { - return ByteArrayPool.ByteArrayPool_getArrayBool(var0, false); + public static void method1819(int var0, AbstractArchive var1, int var2, int var3, int var4, boolean var5) { + class197.field2411 = 1; + class197.musicTrackArchive = var1; + UrlRequester.musicTrackGroupId = var2; + UserComparator7.musicTrackFileId = var3; + class197.musicTrackVolume = var4; + ArchiveLoader.musicTrackBoolean = var5; + class335.field4014 = var0; + } + + @ObfuscatedName("hd") + @ObfuscatedSignature( + signature = "(IIIIII)V", + garbageValue = "1377503152" + ) + @Export("drawObject") + static final void drawObject(int var0, int var1, int var2, int var3, int var4) { + long var5 = class2.scene.getBoundaryObjectTag(var0, var1, var2); + int var7; + int var8; + int var9; + int var10; + int var12; + int var13; + if (0L != var5) { + var7 = class2.scene.getObjectFlags(var0, var1, var2, var5); + var8 = var7 >> 6 & 3; + var9 = var7 & 31; + var10 = var3; + if (WallDecoration.method3340(var5)) { + var10 = var4; + } + + int[] var11 = Interpreter.sceneMinimapSprite.pixels; + var12 = var1 * 4 + (103 - var2) * 2048 + 24624; + var13 = ItemContainer.Entity_unpackID(var5); + ObjectDefinition var14 = Occluder.getObjectDefinition(var13); + if (var14.mapSceneId != -1) { + IndexedSprite var15 = GrandExchangeOfferTotalQuantityComparator.mapSceneSprites[var14.mapSceneId]; + if (var15 != null) { + int var16 = (var14.sizeX * 4 - var15.subWidth) / 2; + int var17 = (var14.sizeY * 4 - var15.subHeight) / 2; + var15.drawAt(var1 * 4 + var16 + 48, (104 - var2 - var14.sizeY) * 4 + var17 + 48); + } + } else { + if (var9 == 0 || var9 == 2) { + if (var8 == 0) { + var11[var12] = var10; + var11[var12 + 512] = var10; + var11[var12 + 1024] = var10; + var11[var12 + 1536] = var10; + } else if (var8 == 1) { + var11[var12] = var10; + var11[var12 + 1] = var10; + var11[var12 + 2] = var10; + var11[var12 + 3] = var10; + } else if (var8 == 2) { + var11[var12 + 3] = var10; + var11[var12 + 512 + 3] = var10; + var11[var12 + 1024 + 3] = var10; + var11[var12 + 1536 + 3] = var10; + } else if (var8 == 3) { + var11[var12 + 1536] = var10; + var11[var12 + 1536 + 1] = var10; + var11[var12 + 1536 + 2] = var10; + var11[var12 + 1536 + 3] = var10; + } + } + + if (var9 == 3) { + if (var8 == 0) { + var11[var12] = var10; + } else if (var8 == 1) { + var11[var12 + 3] = var10; + } else if (var8 == 2) { + var11[var12 + 1536 + 3] = var10; + } else if (var8 == 3) { + var11[var12 + 1536] = var10; + } + } + + if (var9 == 2) { + if (var8 == 3) { + var11[var12] = var10; + var11[var12 + 512] = var10; + var11[var12 + 1024] = var10; + var11[var12 + 1536] = var10; + } else if (var8 == 0) { + var11[var12] = var10; + var11[var12 + 1] = var10; + var11[var12 + 2] = var10; + var11[var12 + 3] = var10; + } else if (var8 == 1) { + var11[var12 + 3] = var10; + var11[var12 + 512 + 3] = var10; + var11[var12 + 1024 + 3] = var10; + var11[var12 + 1536 + 3] = var10; + } else if (var8 == 2) { + var11[var12 + 1536] = var10; + var11[var12 + 1536 + 1] = var10; + var11[var12 + 1536 + 2] = var10; + var11[var12 + 1536 + 3] = var10; + } + } + } + } + + var5 = class2.scene.getGameObjectTag(var0, var1, var2); + if (0L != var5) { + var7 = class2.scene.getObjectFlags(var0, var1, var2, var5); + var8 = var7 >> 6 & 3; + var9 = var7 & 31; + var10 = ItemContainer.Entity_unpackID(var5); + ObjectDefinition var24 = Occluder.getObjectDefinition(var10); + int var19; + if (var24.mapSceneId != -1) { + IndexedSprite var18 = GrandExchangeOfferTotalQuantityComparator.mapSceneSprites[var24.mapSceneId]; + if (var18 != null) { + var13 = (var24.sizeX * 4 - var18.subWidth) / 2; + var19 = (var24.sizeY * 4 - var18.subHeight) / 2; + var18.drawAt(var1 * 4 + var13 + 48, var19 + (104 - var2 - var24.sizeY) * 4 + 48); + } + } else if (var9 == 9) { + var12 = 15658734; + if (WallDecoration.method3340(var5)) { + var12 = 15597568; + } + + int[] var23 = Interpreter.sceneMinimapSprite.pixels; + var19 = var1 * 4 + (103 - var2) * 2048 + 24624; + if (var8 != 0 && var8 != 2) { + var23[var19] = var12; + var23[var19 + 1 + 512] = var12; + var23[var19 + 1024 + 2] = var12; + var23[var19 + 1536 + 3] = var12; + } else { + var23[var19 + 1536] = var12; + var23[var19 + 1 + 1024] = var12; + var23[var19 + 512 + 2] = var12; + var23[var19 + 3] = var12; + } + } + } + + var5 = class2.scene.getFloorDecorationTag(var0, var1, var2); + if (0L != var5) { + var7 = ItemContainer.Entity_unpackID(var5); + ObjectDefinition var20 = Occluder.getObjectDefinition(var7); + if (var20.mapSceneId != -1) { + IndexedSprite var21 = GrandExchangeOfferTotalQuantityComparator.mapSceneSprites[var20.mapSceneId]; + if (var21 != null) { + var10 = (var20.sizeX * 4 - var21.subWidth) / 2; + int var22 = (var20.sizeY * 4 - var21.subHeight) / 2; + var21.drawAt(var10 + var1 * 4 + 48, (104 - var2 - var20.sizeY) * 4 + var22 + 48); + } + } + } + } } diff --git a/runescape-client/src/main/java/WorldMap.java b/runescape-client/src/main/java/WorldMap.java index f72eda916b..9535b54151 100644 --- a/runescape-client/src/main/java/WorldMap.java +++ b/runescape-client/src/main/java/WorldMap.java @@ -13,277 +13,277 @@ import net.runelite.mapping.ObfuscatedSignature; @ObfuscatedName("lo") @Implements("WorldMap") public class WorldMap { - @ObfuscatedName("d") + @ObfuscatedName("i") @ObfuscatedSignature( - signature = "Lkq;" + signature = "Lka;" ) @Export("fontNameVerdana11") static final FontName fontNameVerdana11; - @ObfuscatedName("m") + @ObfuscatedName("k") @ObfuscatedSignature( - signature = "Lkq;" + signature = "Lka;" ) @Export("fontNameVerdana13") static final FontName fontNameVerdana13; - @ObfuscatedName("p") + @ObfuscatedName("x") @ObfuscatedSignature( - signature = "Lkq;" + signature = "Lka;" ) @Export("fontNameVerdana15") static final FontName fontNameVerdana15; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "Lhq;" + signature = "Lhf;" ) @Export("WorldMap_archive") AbstractArchive WorldMap_archive; - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "Lhq;" + signature = "Lhf;" ) @Export("WorldMap_geographyArchive") AbstractArchive WorldMap_geographyArchive; - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedSignature( - signature = "Lhq;" + signature = "Lhf;" ) @Export("WorldMap_groundArchive") AbstractArchive WorldMap_groundArchive; - @ObfuscatedName("h") + @ObfuscatedName("o") @ObfuscatedSignature( - signature = "Lks;" + signature = "Lky;" ) @Export("font") Font font; - @ObfuscatedName("k") + @ObfuscatedName("e") @Export("fonts") HashMap fonts; - @ObfuscatedName("x") + @ObfuscatedName("n") @ObfuscatedSignature( - signature = "[Llw;" + signature = "[Llm;" ) @Export("mapSceneSprites") IndexedSprite[] mapSceneSprites; - @ObfuscatedName("j") + @ObfuscatedName("r") @Export("details") HashMap details; - @ObfuscatedName("r") + @ObfuscatedName("c") @ObfuscatedSignature( - signature = "Laa;" + signature = "Laf;" ) @Export("mainMapArea") WorldMapArea mainMapArea; - @ObfuscatedName("e") + @ObfuscatedName("a") @ObfuscatedSignature( - signature = "Laa;" + signature = "Laf;" ) @Export("currentMapArea") WorldMapArea currentMapArea; + @ObfuscatedName("d") + @ObfuscatedSignature( + signature = "Laf;" + ) + WorldMapArea field3985; @ObfuscatedName("s") @ObfuscatedSignature( - signature = "Laa;" - ) - WorldMapArea field3961; - @ObfuscatedName("b") - @ObfuscatedSignature( - signature = "Lax;" + signature = "Lar;" ) @Export("worldMapManager") WorldMapManager worldMapManager; - @ObfuscatedName("z") + @ObfuscatedName("t") @ObfuscatedSignature( - signature = "Llp;" + signature = "Llr;" ) @Export("cacheLoader") WorldMapArchiveLoader cacheLoader; - @ObfuscatedName("f") + @ObfuscatedName("m") @ObfuscatedGetter( - intValue = -1115855205 + intValue = 415581719 ) @Export("centerTileX") int centerTileX; - @ObfuscatedName("g") + @ObfuscatedName("v") @ObfuscatedGetter( - intValue = 1468309867 + intValue = 748843563 ) @Export("centerTileY") int centerTileY; - @ObfuscatedName("w") + @ObfuscatedName("q") @ObfuscatedGetter( - intValue = -2095991867 + intValue = 1376756297 ) @Export("worldMapTargetX") int worldMapTargetX; - @ObfuscatedName("u") + @ObfuscatedName("l") @ObfuscatedGetter( - intValue = 1762147861 + intValue = -1002756295 ) @Export("worldMapTargetY") int worldMapTargetY; - @ObfuscatedName("y") + @ObfuscatedName("j") @Export("zoom") float zoom; - @ObfuscatedName("aa") + @ObfuscatedName("af") @Export("zoomTarget") float zoomTarget; - @ObfuscatedName("aw") + @ObfuscatedName("ad") @ObfuscatedGetter( - intValue = -1569841957 + intValue = 1048089791 ) @Export("worldMapDisplayWidth") int worldMapDisplayWidth; - @ObfuscatedName("ar") + @ObfuscatedName("am") @ObfuscatedGetter( - intValue = -1341545561 + intValue = 1251324601 ) @Export("worldMapDisplayHeight") int worldMapDisplayHeight; - @ObfuscatedName("aq") + @ObfuscatedName("ai") @ObfuscatedGetter( - intValue = -447610921 + intValue = -486711031 ) @Export("worldMapDisplayX") int worldMapDisplayX; - @ObfuscatedName("ad") + @ObfuscatedName("ag") @ObfuscatedGetter( - intValue = -1038703537 + intValue = 638623411 ) @Export("worldMapDisplayY") int worldMapDisplayY; - @ObfuscatedName("ag") + @ObfuscatedName("ao") @ObfuscatedGetter( - intValue = -253795513 + intValue = 1650876741 ) @Export("maxFlashCount") int maxFlashCount; - @ObfuscatedName("ak") + @ObfuscatedName("aw") @ObfuscatedGetter( - intValue = 1556819123 + intValue = -281706079 ) @Export("cyclesPerFlash") int cyclesPerFlash; - @ObfuscatedName("av") + @ObfuscatedName("ak") @Export("perpetualFlash") boolean perpetualFlash; - @ObfuscatedName("am") + @ObfuscatedName("aa") @Export("flashingElements") HashSet flashingElements; @ObfuscatedName("ab") @ObfuscatedGetter( - intValue = 1187879109 + intValue = 2112542559 ) @Export("flashCount") int flashCount; - @ObfuscatedName("ax") + @ObfuscatedName("ar") @ObfuscatedGetter( - intValue = -2119672373 + intValue = -903079399 ) @Export("flashCycle") int flashCycle; - @ObfuscatedName("al") + @ObfuscatedName("av") @ObfuscatedGetter( - intValue = -1814154625 + intValue = -178866611 ) - int field3944; - @ObfuscatedName("ap") + int field3997; + @ObfuscatedName("aq") @ObfuscatedGetter( - intValue = 2100622819 + intValue = 1461367677 + ) + int field3979; + @ObfuscatedName("ac") + @ObfuscatedGetter( + intValue = 992436699 + ) + int field3966; + @ObfuscatedName("az") + @ObfuscatedGetter( + intValue = -912937739 ) int field3981; - @ObfuscatedName("aj") + @ObfuscatedName("at") @ObfuscatedGetter( - intValue = 1563559575 + longValue = -6268204185422691147L ) - int field4004; + long field3982; @ObfuscatedName("ae") @ObfuscatedGetter( - intValue = -1136461167 + intValue = 967500379 ) - int field3978; - @ObfuscatedName("au") + int field3980; + @ObfuscatedName("aj") @ObfuscatedGetter( - longValue = -7919513397896744985L + intValue = -1249817665 ) - long field3984; - @ObfuscatedName("ah") - @ObfuscatedGetter( - intValue = 923626185 - ) - int field3982; - @ObfuscatedName("an") - @ObfuscatedGetter( - intValue = -1186283537 - ) - int field3963; - @ObfuscatedName("af") - boolean field3987; - @ObfuscatedName("ao") + int field3984; + @ObfuscatedName("ap") + boolean field3957; + @ObfuscatedName("ay") @Export("enabledElements") HashSet enabledElements; - @ObfuscatedName("ai") + @ObfuscatedName("ax") @Export("enabledCategories") HashSet enabledCategories; - @ObfuscatedName("ac") + @ObfuscatedName("au") @Export("enabledElementIds") HashSet enabledElementIds; - @ObfuscatedName("at") - HashSet field3992; @ObfuscatedName("as") + HashSet field3989; + @ObfuscatedName("ah") @Export("elementsDisabled") boolean elementsDisabled; - @ObfuscatedName("ba") + @ObfuscatedName("bi") @ObfuscatedGetter( - intValue = -600434803 + intValue = -1272343305 ) - int field3994; - @ObfuscatedName("bc") + int field3991; + @ObfuscatedName("bx") @Export("menuOpcodes") final int[] menuOpcodes; + @ObfuscatedName("bu") + List field3953; @ObfuscatedName("bd") - List field3996; - @ObfuscatedName("bx") @Export("iconIterator") Iterator iconIterator; - @ObfuscatedName("bl") - HashSet field3998; - @ObfuscatedName("bh") + @ObfuscatedName("bn") + HashSet field3995; + @ObfuscatedName("bj") @ObfuscatedSignature( - signature = "Lhf;" + signature = "Lhx;" ) @Export("mouseCoord") Coord mouseCoord; - @ObfuscatedName("bu") + @ObfuscatedName("bm") @Export("showCoord") public boolean showCoord; - @ObfuscatedName("br") + @ObfuscatedName("bq") @ObfuscatedSignature( - signature = "Llx;" + signature = "Lln;" ) @Export("sprite") Sprite sprite; - @ObfuscatedName("bq") + @ObfuscatedName("bf") @ObfuscatedGetter( - intValue = 1135924697 + intValue = -1436249859 ) @Export("cachedPixelsPerTile") int cachedPixelsPerTile; - @ObfuscatedName("bi") + @ObfuscatedName("by") @ObfuscatedGetter( - intValue = 2064695481 + intValue = 1279936485 ) @Export("minCachedTileX") int minCachedTileX; - @ObfuscatedName("be") + @ObfuscatedName("br") @ObfuscatedGetter( - intValue = -211388965 + intValue = -1058135439 ) @Export("minCachedTileY") int minCachedTileY; - @ObfuscatedName("bt") + @ObfuscatedName("ba") @ObfuscatedGetter( - intValue = 1384297183 + intValue = 206636117 ) - int field4005; + int field4002; static { fontNameVerdana11 = FontName.FontName_verdana11; @@ -304,30 +304,30 @@ public class WorldMap { this.flashingElements = null; this.flashCount = -1; this.flashCycle = -1; - this.field3944 = -1; + this.field3997 = -1; + this.field3979 = -1; + this.field3966 = -1; this.field3981 = -1; - this.field4004 = -1; - this.field3978 = -1; - this.field3987 = true; + this.field3957 = true; this.enabledElements = new HashSet(); this.enabledCategories = new HashSet(); this.enabledElementIds = new HashSet(); - this.field3992 = new HashSet(); + this.field3989 = new HashSet(); this.elementsDisabled = false; - this.field3994 = 0; + this.field3991 = 0; this.menuOpcodes = new int[]{1008, 1009, 1010, 1011, 1012}; - this.field3998 = new HashSet(); + this.field3995 = new HashSet(); this.mouseCoord = null; this.showCoord = false; this.minCachedTileX = -1; this.minCachedTileY = -1; - this.field4005 = -1; + this.field4002 = -1; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Lhq;Lhq;Lhq;Lks;Ljava/util/HashMap;[Llw;I)V", - garbageValue = "1155853540" + signature = "(Lhf;Lhf;Lhf;Lky;Ljava/util/HashMap;[Llm;B)V", + garbageValue = "-12" ) @Export("init") public void init(AbstractArchive var1, AbstractArchive var2, AbstractArchive var3, Font var4, HashMap var5, IndexedSprite[] var6) { @@ -341,7 +341,7 @@ public class WorldMap { this.fonts.put(WorldMapLabelSize.WorldMapLabelSize_medium, var5.get(fontNameVerdana13)); this.fonts.put(WorldMapLabelSize.WorldMapLabelSize_large, var5.get(fontNameVerdana15)); this.cacheLoader = new WorldMapArchiveLoader(var1); - int var7 = this.WorldMap_archive.getGroupId(WorldMapCacheName.field288.name); + int var7 = this.WorldMap_archive.getGroupId(WorldMapCacheName.field304.name); int[] var8 = this.WorldMap_archive.getGroupFileIds(var7); this.details = new HashMap(var8.length); @@ -356,22 +356,22 @@ public class WorldMap { } this.setCurrentMapArea(this.mainMapArea); - this.field3961 = null; + this.field3985 = null; } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "-2129173961" + garbageValue = "2075872374" ) - public void method6427() { + public void method6376() { WorldMapRegion.WorldMapRegion_cachedSprites.demote(5); } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( signature = "(IIZIIIII)V", - garbageValue = "1492656677" + garbageValue = "-1854854899" ) @Export("onCycle") public void onCycle(int var1, int var2, boolean var3, int var4, int var5, int var6, int var7) { @@ -381,27 +381,27 @@ public class WorldMap { if (var3) { int var8 = (int)Math.ceil((double)((float)var6 / this.zoom)); int var9 = (int)Math.ceil((double)((float)var7 / this.zoom)); - List var10 = this.worldMapManager.method694(this.centerTileX - var8 / 2 - 1, this.centerTileY - var9 / 2 - 1, var8 / 2 + this.centerTileX + 1, var9 / 2 + this.centerTileY + 1, var4, var5, var6, var7, var1, var2); + List var10 = this.worldMapManager.method645(this.centerTileX - var8 / 2 - 1, this.centerTileY - var9 / 2 - 1, var8 / 2 + this.centerTileX + 1, var9 / 2 + this.centerTileY + 1, var4, var5, var6, var7, var1, var2); HashSet var11 = new HashSet(); Iterator var12; AbstractWorldMapIcon var13; ScriptEvent var14; WorldMapEvent var15; - for (var12 = var10.iterator(); var12.hasNext(); GrandExchangeOfferAgeComparator.runScriptEvent(var14)) { + for (var12 = var10.iterator(); var12.hasNext(); WorldMapLabel.runScriptEvent(var14)) { var13 = (AbstractWorldMapIcon)var12.next(); var11.add(var13); var14 = new ScriptEvent(); var15 = new WorldMapEvent(var13.getElement(), var13.coord1, var13.coord2); var14.setArgs(new Object[]{var15, var1, var2}); - if (this.field3998.contains(var13)) { + if (this.field3995.contains(var13)) { var14.setType(17); } else { var14.setType(15); } } - var12 = this.field3998.iterator(); + var12 = this.field3995.iterator(); while (var12.hasNext()) { var13 = (AbstractWorldMapIcon)var12.next(); @@ -410,82 +410,72 @@ public class WorldMap { var15 = new WorldMapEvent(var13.getElement(), var13.coord1, var13.coord2); var14.setArgs(new Object[]{var15, var1, var2}); var14.setType(16); - GrandExchangeOfferAgeComparator.runScriptEvent(var14); + WorldMapLabel.runScriptEvent(var14); } } - this.field3998 = var11; + this.field3995 = var11; } } } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( signature = "(IIZZI)V", - garbageValue = "-1358986047" + garbageValue = "-788666076" ) - public void method6429(int var1, int var2, boolean var3, boolean var4) { - long var5 = PlayerAppearance.currentTimeMillis(); - this.method6501(var1, var2, var4, var5); + public void method6378(int var1, int var2, boolean var3, boolean var4) { + long var5 = TaskHandler.currentTimeMillis(); + this.method6379(var1, var2, var4, var5); if (!this.hasTarget() && (var4 || var3)) { if (var4) { - this.field4004 = var1; - this.field3978 = var2; - this.field3944 = this.centerTileX; - this.field3981 = this.centerTileY; + this.field3966 = var1; + this.field3981 = var2; + this.field3997 = this.centerTileX; + this.field3979 = this.centerTileY; } - if (this.field3944 != -1) { - int var7 = var1 - this.field4004; - int var8 = var2 - this.field3978; - this.setWorldMapPosition(this.field3944 - (int)((float)var7 / this.zoomTarget), (int)((float)var8 / this.zoomTarget) + this.field3981, false); + if (this.field3997 != -1) { + int var7 = var1 - this.field3966; + int var8 = var2 - this.field3981; + this.setWorldMapPosition(this.field3997 - (int)((float)var7 / this.zoomTarget), (int)((float)var8 / this.zoomTarget) + this.field3979, false); } } else { - this.method6434(); + this.method6383(); } if (var4) { - this.field3984 = var5; - this.field3982 = var1; - this.field3963 = var2; + this.field3982 = var5; + this.field3980 = var1; + this.field3984 = var2; } } - @ObfuscatedName("v") - void method6501(int var1, int var2, boolean var3, long var4) { + @ObfuscatedName("z") + void method6379(int var1, int var2, boolean var3, long var4) { if (this.currentMapArea != null) { int var6 = (int)((float)this.centerTileX + ((float)(var1 - this.worldMapDisplayX) - (float)this.getDisplayWith() * this.zoom / 2.0F) / this.zoom); int var7 = (int)((float)this.centerTileY - ((float)(var2 - this.worldMapDisplayY) - (float)this.getDisplayHeight() * this.zoom / 2.0F) / this.zoom); this.mouseCoord = this.currentMapArea.coord(var6 + this.currentMapArea.getRegionLowX() * 64, var7 + this.currentMapArea.getRegionLowY() * 64); if (this.mouseCoord != null && var3) { - int var9; - int var10; - if (PendingSpawn.method1854() && KeyHandler.KeyHandler_pressedKeys[82] && KeyHandler.KeyHandler_pressedKeys[81]) { - int var13 = this.mouseCoord.x; - var9 = this.mouseCoord.y; - var10 = this.mouseCoord.plane; - PacketBufferNode var11 = SoundSystem.getPacketBufferNode(ClientPacket.field2228, Client.packetWriter.isaacCipher); - var11.packetBuffer.writeIntME(0); - var11.packetBuffer.writeByte(var10); - var11.packetBuffer.method5644(var9); - var11.packetBuffer.writeShortLE(var13); - Client.packetWriter.addNode(var11); + if (WorldMapSection0.method254() && KeyHandler.KeyHandler_pressedKeys[82] && KeyHandler.KeyHandler_pressedKeys[81]) { + Clock.method3555(this.mouseCoord.x, this.mouseCoord.y, this.mouseCoord.plane, false); } else { boolean var8 = true; - if (this.field3987) { - var9 = var1 - this.field3982; - var10 = var2 - this.field3963; - if (var4 - this.field3984 > 500L || var9 < -25 || var9 > 25 || var10 < -25 || var10 > 25) { + if (this.field3957) { + int var9 = var1 - this.field3980; + int var10 = var2 - this.field3984; + if (var4 - this.field3982 > 500L || var9 < -25 || var9 > 25 || var10 < -25 || var10 > 25) { var8 = false; } } if (var8) { - PacketBufferNode var12 = SoundSystem.getPacketBufferNode(ClientPacket.field2239, Client.packetWriter.isaacCipher); - var12.packetBuffer.method5655(this.mouseCoord.packed()); - Client.packetWriter.addNode(var12); - this.field3984 = 0L; + PacketBufferNode var11 = ModelData0.getPacketBufferNode(ClientPacket.field2291, Client.packetWriter.isaacCipher); + var11.packetBuffer.method5647(this.mouseCoord.packed()); + Client.packetWriter.addNode(var11); + this.field3982 = 0L; } } } @@ -495,18 +485,18 @@ public class WorldMap { } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( signature = "(B)V", - garbageValue = "-9" + garbageValue = "-30" ) @Export("smoothZoom") void smoothZoom() { - if (GrandExchangeOfferWorldComparator.field30 != null) { + if (InvDefinition.field3210 != null) { this.zoom = this.zoomTarget; } else { if (this.zoom < this.zoomTarget) { - this.zoom = Math.min(this.zoomTarget, this.zoom / 30.0F + this.zoom); + this.zoom = Math.min(this.zoomTarget, this.zoom + this.zoom / 30.0F); } if (this.zoom > this.zoomTarget) { @@ -516,10 +506,10 @@ public class WorldMap { } } - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "-346297372" + garbageValue = "418852824" ) @Export("scrollToTarget") void scrollToTarget() { @@ -543,48 +533,48 @@ public class WorldMap { } } - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "(IIZI)V", - garbageValue = "-1917059109" + signature = "(IIZB)V", + garbageValue = "-72" ) @Export("setWorldMapPosition") final void setWorldMapPosition(int var1, int var2, boolean var3) { this.centerTileX = var1; this.centerTileY = var2; - PlayerAppearance.currentTimeMillis(); + TaskHandler.currentTimeMillis(); if (var3) { - this.method6434(); + this.method6383(); } } - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "2105912837" + signature = "(B)V", + garbageValue = "-93" ) - final void method6434() { - this.field3978 = -1; - this.field4004 = -1; + final void method6383() { this.field3981 = -1; - this.field3944 = -1; + this.field3966 = -1; + this.field3979 = -1; + this.field3997 = -1; } - @ObfuscatedName("d") + @ObfuscatedName("i") @ObfuscatedSignature( signature = "(I)Z", - garbageValue = "-1225003150" + garbageValue = "-1462551902" ) @Export("hasTarget") boolean hasTarget() { return this.worldMapTargetX != -1 && this.worldMapTargetY != -1; } - @ObfuscatedName("m") + @ObfuscatedName("k") @ObfuscatedSignature( - signature = "(IIII)Laa;", - garbageValue = "507723159" + signature = "(IIII)Laf;", + garbageValue = "250102276" ) @Export("mapAreaAtCoord") public WorldMapArea mapAreaAtCoord(int var1, int var2, int var3) { @@ -602,12 +592,12 @@ public class WorldMap { return var5; } - @ObfuscatedName("p") + @ObfuscatedName("x") @ObfuscatedSignature( signature = "(IIIZB)V", - garbageValue = "0" + garbageValue = "118" ) - public void method6437(int var1, int var2, int var3, boolean var4) { + public void method6381(int var1, int var2, int var3, boolean var4) { WorldMapArea var5 = this.mapAreaAtCoord(var1, var2, var3); if (var5 == null) { if (!var4) { @@ -618,8 +608,8 @@ public class WorldMap { } boolean var6 = false; - if (var5 != this.field3961 || var4) { - this.field3961 = var5; + if (var5 != this.field3985 || var4) { + this.field3985 = var5; this.setCurrentMapArea(var5); var6 = true; } @@ -630,10 +620,10 @@ public class WorldMap { } - @ObfuscatedName("h") + @ObfuscatedName("o") @ObfuscatedSignature( signature = "(II)V", - garbageValue = "1878697498" + garbageValue = "2133824593" ) @Export("setCurrentMapAreaId") public void setCurrentMapAreaId(int var1) { @@ -644,30 +634,30 @@ public class WorldMap { } - @ObfuscatedName("k") + @ObfuscatedName("e") @ObfuscatedSignature( signature = "(I)I", - garbageValue = "-2059451696" + garbageValue = "-116541187" ) @Export("currentMapAreaId") public int currentMapAreaId() { return this.currentMapArea == null ? -1 : this.currentMapArea.getId(); } - @ObfuscatedName("x") + @ObfuscatedName("n") @ObfuscatedSignature( - signature = "(I)Laa;", - garbageValue = "305086771" + signature = "(I)Laf;", + garbageValue = "335674701" ) @Export("getCurrentMapArea") public WorldMapArea getCurrentMapArea() { return this.currentMapArea; } - @ObfuscatedName("j") + @ObfuscatedName("c") @ObfuscatedSignature( - signature = "(Laa;I)V", - garbageValue = "-3278323" + signature = "(Laf;I)V", + garbageValue = "921553646" ) @Export("setCurrentMapArea") void setCurrentMapArea(WorldMapArea var1) { @@ -677,10 +667,10 @@ public class WorldMap { } } - @ObfuscatedName("r") + @ObfuscatedName("s") @ObfuscatedSignature( - signature = "(Laa;B)V", - garbageValue = "1" + signature = "(Laf;I)V", + garbageValue = "1850742503" ) @Export("initializeWorldMapManager") void initializeWorldMapManager(WorldMapArea var1) { @@ -689,12 +679,12 @@ public class WorldMap { this.cacheLoader.reset(this.currentMapArea.getInternalName()); } - @ObfuscatedName("e") + @ObfuscatedName("t") @ObfuscatedSignature( - signature = "(Laa;Lhf;Lhf;ZI)V", - garbageValue = "-1095832709" + signature = "(Laf;Lhx;Lhx;ZI)V", + garbageValue = "1443129955" ) - public void method6443(WorldMapArea var1, Coord var2, Coord var3, boolean var4) { + public void method6453(WorldMapArea var1, Coord var2, Coord var3, boolean var4) { if (var1 != null) { if (this.currentMapArea == null || var1 != this.currentMapArea) { this.initializeWorldMapManager(var1); @@ -709,10 +699,10 @@ public class WorldMap { } } - @ObfuscatedName("s") + @ObfuscatedName("m") @ObfuscatedSignature( - signature = "(IIIB)V", - garbageValue = "29" + signature = "(IIII)V", + garbageValue = "34733782" ) @Export("jump") void jump(int var1, int var2, int var3) { @@ -727,16 +717,16 @@ public class WorldMap { this.worldMapTargetY = -1; this.zoom = this.getZoomFromPercentage(this.currentMapArea.getZoom()); this.zoomTarget = this.zoom; - this.field3996 = null; + this.field3953 = null; this.iconIterator = null; this.worldMapManager.clearIcons(); } } - @ObfuscatedName("b") + @ObfuscatedName("v") @ObfuscatedSignature( signature = "(IIIIII)V", - garbageValue = "1999151785" + garbageValue = "2142283598" ) @Export("draw") public void draw(int var1, int var2, int var3, int var4, int var5) { @@ -770,20 +760,18 @@ public class WorldMap { int var8 = (int)Math.ceil((double)((float)var3 / this.zoom)); int var9 = (int)Math.ceil((double)((float)var4 / this.zoom)); this.worldMapManager.drawTiles(this.centerTileX - var8 / 2, this.centerTileY - var9 / 2, var8 / 2 + this.centerTileX, var9 / 2 + this.centerTileY, var1, var2, var3 + var1, var2 + var4); - boolean var10; if (!this.elementsDisabled) { - var10 = false; - if (var5 - this.field3994 > 100) { - this.field3994 = var5; + boolean var10 = false; + if (var5 - this.field3991 > 100) { + this.field3991 = var5; var10 = true; } - this.worldMapManager.drawElements(this.centerTileX - var8 / 2, this.centerTileY - var9 / 2, var8 / 2 + this.centerTileX, var9 / 2 + this.centerTileY, var1, var2, var3 + var1, var2 + var4, this.field3992, this.flashingElements, this.flashCycle, this.cyclesPerFlash, var10); + this.worldMapManager.drawElements(this.centerTileX - var8 / 2, this.centerTileY - var9 / 2, var8 / 2 + this.centerTileX, var9 / 2 + this.centerTileY, var1, var2, var3 + var1, var2 + var4, this.field3989, this.flashingElements, this.flashCycle, this.cyclesPerFlash, var10); } - this.method6447(var1, var2, var3, var4, var8, var9); - var10 = Client.staffModLevel >= 2; - if (var10 && this.showCoord && this.mouseCoord != null) { + this.method6396(var1, var2, var3, var4, var8, var9); + if (WorldMapSection0.method254() && this.showCoord && this.mouseCoord != null) { this.font.draw("Coord: " + this.mouseCoord, Rasterizer2D.Rasterizer2D_xClipStart + 10, Rasterizer2D.Rasterizer2D_yClipStart + 20, 16776960, -1); } @@ -795,18 +783,18 @@ public class WorldMap { } } - @ObfuscatedName("w") + @ObfuscatedName("q") @ObfuscatedSignature( - signature = "(IIIIIIS)Z", - garbageValue = "-18315" + signature = "(IIIIIII)Z", + garbageValue = "1539911567" ) - boolean method6446(int var1, int var2, int var3, int var4, int var5, int var6) { + boolean method6517(int var1, int var2, int var3, int var4, int var5, int var6) { if (this.sprite == null) { return true; } else if (this.sprite.subWidth == var1 && this.sprite.subHeight == var2) { if (this.worldMapManager.pixelsPerTile != this.cachedPixelsPerTile) { return true; - } else if (this.field4005 != Client.field900) { + } else if (this.field4002 != Client.field863) { return true; } else if (var3 <= 0 && var4 <= 0) { return var3 + var1 < var5 || var2 + var4 < var6; @@ -818,13 +806,13 @@ public class WorldMap { } } - @ObfuscatedName("u") + @ObfuscatedName("l") @ObfuscatedSignature( signature = "(IIIIIIB)V", - garbageValue = "1" + garbageValue = "115" ) - void method6447(int var1, int var2, int var3, int var4, int var5, int var6) { - if (GrandExchangeOfferWorldComparator.field30 != null) { + void method6396(int var1, int var2, int var3, int var4, int var5, int var6) { + if (InvDefinition.field3210 != null) { int var7 = 512 / (this.worldMapManager.pixelsPerTile * 2); int var8 = var3 + 512; int var9 = var4 + 512; @@ -833,9 +821,9 @@ public class WorldMap { var9 = (int)((float)var9 / var10); int var11 = this.getDisplayX() - var5 / 2 - var7; int var12 = this.getDisplayY() - var6 / 2 - var7; - int var13 = var1 - (var11 + var7 - this.minCachedTileX) * this.worldMapManager.pixelsPerTile; + int var13 = var1 - (var7 + var11 - this.minCachedTileX) * this.worldMapManager.pixelsPerTile; int var14 = var2 - this.worldMapManager.pixelsPerTile * (var7 - (var12 - this.minCachedTileY)); - if (this.method6446(var8, var9, var13, var14, var3, var4)) { + if (this.method6517(var8, var9, var13, var14, var3, var4)) { if (this.sprite != null && this.sprite.subWidth == var8 && this.sprite.subHeight == var9) { Arrays.fill(this.sprite.pixels, 0); } else { @@ -845,26 +833,26 @@ public class WorldMap { this.minCachedTileX = this.getDisplayX() - var5 / 2 - var7; this.minCachedTileY = this.getDisplayY() - var6 / 2 - var7; this.cachedPixelsPerTile = this.worldMapManager.pixelsPerTile; - GrandExchangeOfferWorldComparator.field30.method4478(this.minCachedTileX, this.minCachedTileY, this.sprite, (float)this.cachedPixelsPerTile / var10); - this.field4005 = Client.field900; + InvDefinition.field3210.method4408(this.minCachedTileX, this.minCachedTileY, this.sprite, (float)this.cachedPixelsPerTile / var10); + this.field4002 = Client.field863; var13 = var1 - (var11 + var7 - this.minCachedTileX) * this.worldMapManager.pixelsPerTile; var14 = var2 - this.worldMapManager.pixelsPerTile * (var7 - (var12 - this.minCachedTileY)); } Rasterizer2D.Rasterizer2D_fillRectangleAlpha(var1, var2, var3, var4, 0, 128); - if (1.0F == var10) { - this.sprite.method6257(var13, var14, 192); + if (var10 == 1.0F) { + this.sprite.method6217(var13, var14, 192); } else { - this.sprite.method6260(var13, var14, (int)(var10 * (float)var8), (int)((float)var9 * var10), 192); + this.sprite.method6220(var13, var14, (int)(var10 * (float)var8), (int)(var10 * (float)var9), 192); } } } - @ObfuscatedName("ad") + @ObfuscatedName("j") @ObfuscatedSignature( signature = "(IIIII)V", - garbageValue = "2116267919" + garbageValue = "2021601893" ) @Export("drawOverview") public void drawOverview(int var1, int var2, int var3, int var4) { @@ -880,20 +868,20 @@ public class WorldMap { } } - @ObfuscatedName("ag") + @ObfuscatedName("ad") @ObfuscatedSignature( signature = "(II)V", - garbageValue = "-393192636" + garbageValue = "-1654225345" ) @Export("setZoomPercentage") public void setZoomPercentage(int var1) { this.zoomTarget = this.getZoomFromPercentage(var1); } - @ObfuscatedName("ak") + @ObfuscatedName("am") @ObfuscatedSignature( - signature = "(IIIIIB)V", - garbageValue = "126" + signature = "(IIIIII)V", + garbageValue = "-392772529" ) @Export("drawLoading") void drawLoading(int var1, int var2, int var3, int var4, int var5) { @@ -906,10 +894,10 @@ public class WorldMap { this.font.drawCentered("Loading...", var7, var6 + var8, -1, -1); } - @ObfuscatedName("av") + @ObfuscatedName("ai") @ObfuscatedSignature( signature = "(II)F", - garbageValue = "-2137739054" + garbageValue = "2147483647" ) @Export("getZoomFromPercentage") float getZoomFromPercentage(int var1) { @@ -926,10 +914,10 @@ public class WorldMap { } } - @ObfuscatedName("am") + @ObfuscatedName("ag") @ObfuscatedSignature( - signature = "(S)I", - garbageValue = "-25355" + signature = "(I)I", + garbageValue = "1194767053" ) @Export("getZoomLevel") public int getZoomLevel() { @@ -937,39 +925,39 @@ public class WorldMap { return 25; } else if ((double)this.zoomTarget == 1.5D) { return 37; - } else if ((double)this.zoomTarget == 2.0D) { + } else if (2.0D == (double)this.zoomTarget) { return 50; } else if ((double)this.zoomTarget == 3.0D) { return 75; } else { - return (double)this.zoomTarget == 4.0D ? 100 : 200; + return 4.0D == (double)this.zoomTarget ? 100 : 200; } } - @ObfuscatedName("ab") + @ObfuscatedName("ao") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "1442346244" + garbageValue = "1827072202" ) @Export("loadCache") public void loadCache() { this.cacheLoader.load(); } - @ObfuscatedName("ax") + @ObfuscatedName("aw") @ObfuscatedSignature( signature = "(I)Z", - garbageValue = "833800696" + garbageValue = "396230650" ) @Export("isCacheLoaded") public boolean isCacheLoaded() { return this.cacheLoader.isLoaded(); } - @ObfuscatedName("al") + @ObfuscatedName("ak") @ObfuscatedSignature( - signature = "(II)Laa;", - garbageValue = "2121241878" + signature = "(IB)Laf;", + garbageValue = "-7" ) @Export("getMapArea") public WorldMapArea getMapArea(int var1) { @@ -987,10 +975,10 @@ public class WorldMap { return var3; } - @ObfuscatedName("ap") + @ObfuscatedName("aa") @ObfuscatedSignature( - signature = "(III)V", - garbageValue = "-1991378608" + signature = "(IIB)V", + garbageValue = "99" ) @Export("setWorldMapPositionTarget") public void setWorldMapPositionTarget(int var1, int var2) { @@ -1000,10 +988,10 @@ public class WorldMap { } } - @ObfuscatedName("aj") + @ObfuscatedName("ab") @ObfuscatedSignature( signature = "(III)V", - garbageValue = "829538752" + garbageValue = "-728638330" ) @Export("setWorldMapPositionTargetInstant") public void setWorldMapPositionTargetInstant(int var1, int var2) { @@ -1014,10 +1002,10 @@ public class WorldMap { } } - @ObfuscatedName("ae") + @ObfuscatedName("ar") @ObfuscatedSignature( signature = "(IIIB)V", - garbageValue = "1" + garbageValue = "-72" ) @Export("jumpToSourceCoord") public void jumpToSourceCoord(int var1, int var2, int var3) { @@ -1030,10 +1018,10 @@ public class WorldMap { } } - @ObfuscatedName("au") + @ObfuscatedName("av") @ObfuscatedSignature( signature = "(IIII)V", - garbageValue = "512586439" + garbageValue = "87939973" ) @Export("jumpToSourceCoordInstant") public void jumpToSourceCoordInstant(int var1, int var2, int var3) { @@ -1046,60 +1034,60 @@ public class WorldMap { } } - @ObfuscatedName("ah") + @ObfuscatedName("aq") @ObfuscatedSignature( signature = "(B)I", - garbageValue = "56" + garbageValue = "-89" ) @Export("getDisplayX") public int getDisplayX() { return this.currentMapArea == null ? -1 : this.centerTileX + this.currentMapArea.getRegionLowX() * 64; } - @ObfuscatedName("an") + @ObfuscatedName("ac") @ObfuscatedSignature( - signature = "(I)I", - garbageValue = "-1028872941" + signature = "(B)I", + garbageValue = "-67" ) @Export("getDisplayY") public int getDisplayY() { return this.currentMapArea == null ? -1 : this.centerTileY + this.currentMapArea.getRegionLowY() * 64; } - @ObfuscatedName("af") + @ObfuscatedName("az") @ObfuscatedSignature( - signature = "(B)Lhf;", - garbageValue = "47" + signature = "(B)Lhx;", + garbageValue = "101" ) @Export("getDisplayCoord") public Coord getDisplayCoord() { return this.currentMapArea == null ? null : this.currentMapArea.coord(this.getDisplayX(), this.getDisplayY()); } - @ObfuscatedName("ay") + @ObfuscatedName("at") @ObfuscatedSignature( - signature = "(S)I", - garbageValue = "3411" + signature = "(I)I", + garbageValue = "-587716195" ) @Export("getDisplayWith") public int getDisplayWith() { return this.worldMapDisplayWidth; } - @ObfuscatedName("az") + @ObfuscatedName("ae") @ObfuscatedSignature( - signature = "(I)I", - garbageValue = "1238412576" + signature = "(B)I", + garbageValue = "-6" ) @Export("getDisplayHeight") public int getDisplayHeight() { return this.worldMapDisplayHeight; } - @ObfuscatedName("ao") + @ObfuscatedName("aj") @ObfuscatedSignature( signature = "(II)V", - garbageValue = "108171617" + garbageValue = "-776452419" ) @Export("setMaxFlashCount") public void setMaxFlashCount(int var1) { @@ -1109,20 +1097,20 @@ public class WorldMap { } - @ObfuscatedName("ai") + @ObfuscatedName("ap") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "2121545973" + garbageValue = "2112620729" ) @Export("resetMaxFlashCount") public void resetMaxFlashCount() { this.maxFlashCount = 3; } - @ObfuscatedName("ac") + @ObfuscatedName("an") @ObfuscatedSignature( - signature = "(IB)V", - garbageValue = "8" + signature = "(II)V", + garbageValue = "-1674194456" ) @Export("setCyclesPerFlash") public void setCyclesPerFlash(int var1) { @@ -1132,30 +1120,30 @@ public class WorldMap { } - @ObfuscatedName("at") + @ObfuscatedName("al") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "1046981397" + signature = "(B)V", + garbageValue = "29" ) @Export("resetCyclesPerFlash") public void resetCyclesPerFlash() { this.cyclesPerFlash = 50; } - @ObfuscatedName("as") + @ObfuscatedName("ay") @ObfuscatedSignature( signature = "(ZI)V", - garbageValue = "-548793337" + garbageValue = "-2012607233" ) @Export("setPerpetualFlash") public void setPerpetualFlash(boolean var1) { this.perpetualFlash = var1; } - @ObfuscatedName("ba") + @ObfuscatedName("ax") @ObfuscatedSignature( - signature = "(IB)V", - garbageValue = "-17" + signature = "(II)V", + garbageValue = "-1095491529" ) @Export("flashElement") public void flashElement(int var1) { @@ -1165,10 +1153,10 @@ public class WorldMap { this.flashCycle = 0; } - @ObfuscatedName("bg") + @ObfuscatedName("au") @ObfuscatedSignature( signature = "(IB)V", - garbageValue = "-62" + garbageValue = "118" ) @Export("flashCategory") public void flashCategory(int var1) { @@ -1176,38 +1164,38 @@ public class WorldMap { this.flashCount = 0; this.flashCycle = 0; - for (int var2 = 0; var2 < AbstractByteArrayCopier.WorldMapElement_count; ++var2) { - if (class65.WorldMapElement_get(var2) != null && class65.WorldMapElement_get(var2).category == var1) { - this.flashingElements.add(class65.WorldMapElement_get(var2).objectId); + for (int var2 = 0; var2 < WorldMapElement.WorldMapElement_count; ++var2) { + if (Varcs.WorldMapElement_get(var2) != null && Varcs.WorldMapElement_get(var2).category == var1) { + this.flashingElements.add(Varcs.WorldMapElement_get(var2).objectId); } } } - @ObfuscatedName("bc") + @ObfuscatedName("as") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "1280820785" + garbageValue = "-682947928" ) @Export("stopCurrentFlashes") public void stopCurrentFlashes() { this.flashingElements = null; } - @ObfuscatedName("bd") + @ObfuscatedName("ah") @ObfuscatedSignature( signature = "(ZI)V", - garbageValue = "-1680492621" + garbageValue = "810003234" ) @Export("setElementsDisabled") public void setElementsDisabled(boolean var1) { this.elementsDisabled = !var1; } - @ObfuscatedName("bx") + @ObfuscatedName("bi") @ObfuscatedSignature( signature = "(IZI)V", - garbageValue = "-441268139" + garbageValue = "-2063721830" ) @Export("disableElement") public void disableElement(int var1, boolean var2) { @@ -1217,13 +1205,13 @@ public class WorldMap { this.enabledElements.remove(var1); } - this.method6479(); + this.method6428(); } - @ObfuscatedName("bl") + @ObfuscatedName("bo") @ObfuscatedSignature( signature = "(IZI)V", - garbageValue = "67555081" + garbageValue = "-2093321412" ) @Export("setCategoryDisabled") public void setCategoryDisabled(int var1, boolean var2) { @@ -1233,9 +1221,9 @@ public class WorldMap { this.enabledCategories.remove(var1); } - for (int var3 = 0; var3 < AbstractByteArrayCopier.WorldMapElement_count; ++var3) { - if (class65.WorldMapElement_get(var3) != null && class65.WorldMapElement_get(var3).category == var1) { - int var4 = class65.WorldMapElement_get(var3).objectId; + for (int var3 = 0; var3 < WorldMapElement.WorldMapElement_count; ++var3) { + if (Varcs.WorldMapElement_get(var3) != null && Varcs.WorldMapElement_get(var3).category == var1) { + int var4 = Varcs.WorldMapElement_get(var3).objectId; if (!var2) { this.enabledElementIds.add(var4); } else { @@ -1244,13 +1232,13 @@ public class WorldMap { } } - this.method6479(); + this.method6428(); } - @ObfuscatedName("bh") + @ObfuscatedName("bx") @ObfuscatedSignature( - signature = "(I)Z", - garbageValue = "1055531969" + signature = "(B)Z", + garbageValue = "-102" ) @Export("getElementsDisabled") public boolean getElementsDisabled() { @@ -1260,45 +1248,45 @@ public class WorldMap { @ObfuscatedName("bu") @ObfuscatedSignature( signature = "(II)Z", - garbageValue = "-83150813" + garbageValue = "-2079425256" ) @Export("isElementDisabled") public boolean isElementDisabled(int var1) { return !this.enabledElements.contains(var1); } - @ObfuscatedName("br") + @ObfuscatedName("bd") @ObfuscatedSignature( - signature = "(II)Z", - garbageValue = "289990921" + signature = "(IB)Z", + garbageValue = "35" ) @Export("isCategoryDisabled") public boolean isCategoryDisabled(int var1) { return !this.enabledCategories.contains(var1); } - @ObfuscatedName("bq") + @ObfuscatedName("bn") @ObfuscatedSignature( - signature = "(S)V", - garbageValue = "180" + signature = "(B)V", + garbageValue = "122" ) - void method6479() { - this.field3992.clear(); - this.field3992.addAll(this.enabledElements); - this.field3992.addAll(this.enabledElementIds); + void method6428() { + this.field3989.clear(); + this.field3989.addAll(this.enabledElements); + this.field3989.addAll(this.enabledElementIds); } - @ObfuscatedName("bi") + @ObfuscatedName("bj") @ObfuscatedSignature( signature = "(IIIIIII)V", - garbageValue = "-962932589" + garbageValue = "-1575355810" ) @Export("addElementMenuOptions") public void addElementMenuOptions(int var1, int var2, int var3, int var4, int var5, int var6) { if (this.cacheLoader.isLoaded()) { int var7 = (int)Math.ceil((double)((float)var3 / this.zoom)); int var8 = (int)Math.ceil((double)((float)var4 / this.zoom)); - List var9 = this.worldMapManager.method694(this.centerTileX - var7 / 2 - 1, this.centerTileY - var8 / 2 - 1, var7 / 2 + this.centerTileX + 1, var8 / 2 + this.centerTileY + 1, var1, var2, var3, var4, var5, var6); + List var9 = this.worldMapManager.method645(this.centerTileX - var7 / 2 - 1, this.centerTileY - var8 / 2 - 1, var7 / 2 + this.centerTileX + 1, var8 / 2 + this.centerTileY + 1, var1, var2, var3, var4, var5, var6); if (!var9.isEmpty()) { Iterator var10 = var9.iterator(); @@ -1309,12 +1297,12 @@ public class WorldMap { } AbstractWorldMapIcon var11 = (AbstractWorldMapIcon)var10.next(); - WorldMapElement var12 = class65.WorldMapElement_get(var11.getElement()); + WorldMapElement var12 = Varcs.WorldMapElement_get(var11.getElement()); var13 = false; for (int var14 = this.menuOpcodes.length - 1; var14 >= 0; --var14) { if (var12.menuActions[var14] != null) { - GameObject.insertMenuItemNoShift(var12.menuActions[var14], var12.menuTargetName, this.menuOpcodes[var14], var11.getElement(), var11.coord1.packed(), var11.coord2.packed()); + WorldMapSprite.insertMenuItemNoShift(var12.menuActions[var14], var12.menuTargetName, this.menuOpcodes[var14], var11.getElement(), var11.coord1.packed(), var11.coord2.packed()); var13 = true; } } @@ -1324,12 +1312,12 @@ public class WorldMap { } } - @ObfuscatedName("be") + @ObfuscatedName("bm") @ObfuscatedSignature( - signature = "(ILhf;I)Lhf;", - garbageValue = "-744470907" + signature = "(ILhx;B)Lhx;", + garbageValue = "8" ) - public Coord method6481(int var1, Coord var2) { + public Coord method6430(int var1, Coord var2) { if (!this.cacheLoader.isLoaded()) { return null; } else if (!this.worldMapManager.isLoaded()) { @@ -1355,7 +1343,7 @@ public class WorldMap { var8 = (AbstractWorldMapIcon)var7.next(); int var9 = var8.coord2.x - var2.x; int var10 = var8.coord2.y - var2.y; - var11 = var10 * var10 + var9 * var9; + var11 = var9 * var9 + var10 * var10; if (var11 == 0) { return var8.coord2; } @@ -1370,10 +1358,10 @@ public class WorldMap { } } - @ObfuscatedName("bt") + @ObfuscatedName("bq") @ObfuscatedSignature( - signature = "(IILhf;Lhf;B)V", - garbageValue = "0" + signature = "(IILhx;Lhx;I)V", + garbageValue = "-891012179" ) @Export("worldMapMenuAction") public void worldMapMenuAction(int var1, int var2, Coord var3, Coord var4) { @@ -1397,13 +1385,13 @@ public class WorldMap { var5.setType(14); } - GrandExchangeOfferAgeComparator.runScriptEvent(var5); + WorldMapLabel.runScriptEvent(var5); } - @ObfuscatedName("bs") + @ObfuscatedName("bf") @ObfuscatedSignature( - signature = "(I)Lam;", - garbageValue = "-1043988683" + signature = "(I)Laa;", + garbageValue = "-2118416686" ) @Export("iconStart") public AbstractWorldMapIcon iconStart() { @@ -1413,23 +1401,23 @@ public class WorldMap { return null; } else { HashMap var1 = this.worldMapManager.buildIcons(); - this.field3996 = new LinkedList(); + this.field3953 = new LinkedList(); Iterator var2 = var1.values().iterator(); while (var2.hasNext()) { List var3 = (List)var2.next(); - this.field3996.addAll(var3); + this.field3953.addAll(var3); } - this.iconIterator = this.field3996.iterator(); + this.iconIterator = this.field3953.iterator(); return this.iconNext(); } } - @ObfuscatedName("bj") + @ObfuscatedName("by") @ObfuscatedSignature( - signature = "(B)Lam;", - garbageValue = "-116" + signature = "(I)Laa;", + garbageValue = "1972262999" ) @Export("iconNext") public AbstractWorldMapIcon iconNext() { diff --git a/runescape-client/src/main/java/WorldMapArchiveLoader.java b/runescape-client/src/main/java/WorldMapArchiveLoader.java index e08514078a..93cea7096e 100644 --- a/runescape-client/src/main/java/WorldMapArchiveLoader.java +++ b/runescape-client/src/main/java/WorldMapArchiveLoader.java @@ -4,30 +4,30 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("lp") +@ObfuscatedName("lr") @Implements("WorldMapArchiveLoader") public class WorldMapArchiveLoader { - @ObfuscatedName("v") + @ObfuscatedName("z") @Export("cacheName") String cacheName; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "Lhq;" + signature = "Lhf;" ) @Export("archive") AbstractArchive archive; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedGetter( - intValue = -1799315399 + intValue = -1643456433 ) @Export("percentLoaded") int percentLoaded; - @ObfuscatedName("o") + @ObfuscatedName("y") @Export("loaded") boolean loaded; @ObfuscatedSignature( - signature = "(Lhq;)V" + signature = "(Lhf;)V" ) WorldMapArchiveLoader(AbstractArchive var1) { this.percentLoaded = 0; @@ -35,10 +35,10 @@ public class WorldMapArchiveLoader { this.archive = var1; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Ljava/lang/String;I)V", - garbageValue = "926060886" + signature = "(Ljava/lang/String;B)V", + garbageValue = "-102" ) @Export("reset") void reset(String var1) { @@ -52,15 +52,15 @@ public class WorldMapArchiveLoader { } } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( signature = "(I)I", - garbageValue = "-910181849" + garbageValue = "421887253" ) @Export("load") int load() { if (this.percentLoaded < 33) { - if (!this.archive.tryLoadFileByNames(WorldMapCacheName.field289.name, this.cacheName)) { + if (!this.archive.tryLoadFileByNames(WorldMapCacheName.field303.name, this.cacheName)) { return this.percentLoaded; } @@ -68,7 +68,7 @@ public class WorldMapArchiveLoader { } if (this.percentLoaded == 33) { - if (this.archive.isValidFileName(WorldMapCacheName.field290.name, this.cacheName) && !this.archive.tryLoadFileByNames(WorldMapCacheName.field290.name, this.cacheName)) { + if (this.archive.isValidFileName(WorldMapCacheName.field307.name, this.cacheName) && !this.archive.tryLoadFileByNames(WorldMapCacheName.field307.name, this.cacheName)) { return this.percentLoaded; } @@ -76,7 +76,7 @@ public class WorldMapArchiveLoader { } if (this.percentLoaded == 66) { - if (!this.archive.tryLoadFileByNames(this.cacheName, WorldMapCacheName.field292.name)) { + if (!this.archive.tryLoadFileByNames(this.cacheName, WorldMapCacheName.field306.name)) { return this.percentLoaded; } @@ -87,20 +87,20 @@ public class WorldMapArchiveLoader { return this.percentLoaded; } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(B)Z", - garbageValue = "71" + signature = "(I)Z", + garbageValue = "-2116319250" ) @Export("isLoaded") boolean isLoaded() { return this.loaded; } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( signature = "(B)I", - garbageValue = "25" + garbageValue = "-54" ) @Export("getPercentLoaded") int getPercentLoaded() { diff --git a/runescape-client/src/main/java/WorldMapArea.java b/runescape-client/src/main/java/WorldMapArea.java index 22aa1ac3d6..6166d785b8 100644 --- a/runescape-client/src/main/java/WorldMapArea.java +++ b/runescape-client/src/main/java/WorldMapArea.java @@ -1,3 +1,5 @@ +import java.io.IOException; +import java.util.Date; import java.util.Iterator; import java.util.LinkedList; import net.runelite.mapping.Export; @@ -5,80 +7,69 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; +import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("aa") +@ObfuscatedName("af") @Implements("WorldMapArea") public class WorldMapArea { - @ObfuscatedName("gw") - @ObfuscatedSignature( - signature = "Lek;" - ) - @Export("scene") - static Scene scene; - @ObfuscatedName("ji") - @ObfuscatedSignature( - signature = "Ldp;" - ) - @Export("textureProvider") - static TextureProvider textureProvider; - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedGetter( - intValue = 868338681 + intValue = 122238223 ) @Export("id") int id; - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("internalName") String internalName; - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("externalName") String externalName; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = -1095915325 + intValue = 1540917345 ) @Export("backGroundColor") int backGroundColor; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = -320134037 + intValue = 959137413 ) @Export("zoom") int zoom; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "Lhf;" + signature = "Lhx;" ) @Export("origin") Coord origin; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedGetter( - intValue = 1673329643 + intValue = 1713545369 ) @Export("regionLowX") int regionLowX; - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedGetter( - intValue = -693512733 + intValue = 1689268055 ) @Export("regionHighX") int regionHighX; - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedGetter( - intValue = 1263754187 + intValue = 1354478225 ) @Export("regionLowY") int regionLowY; - @ObfuscatedName("d") + @ObfuscatedName("i") @ObfuscatedGetter( - intValue = -1155919979 + intValue = 1917825101 ) @Export("regionHighY") int regionHighY; - @ObfuscatedName("m") + @ObfuscatedName("k") @Export("isMain") boolean isMain; - @ObfuscatedName("p") + @ObfuscatedName("x") @Export("sections") LinkedList sections; @@ -94,10 +85,10 @@ public class WorldMapArea { this.isMain = false; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Lkc;II)V", - garbageValue = "252507218" + signature = "(Lkg;IS)V", + garbageValue = "255" ) @Export("read") public void read(Buffer var1, int var2) { @@ -119,42 +110,41 @@ public class WorldMapArea { this.setBounds(); } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Lkc;I)Lal;", - garbageValue = "-45832181" + signature = "(Lkg;I)Lav;", + garbageValue = "-1936635513" ) @Export("readWorldMapSection") WorldMapSection readWorldMapSection(Buffer var1) { int var2 = var1.readUnsignedByte(); - WorldMapSectionType[] var3 = new WorldMapSectionType[]{WorldMapSectionType.WORLDMAPSECTIONTYPE1, WorldMapSectionType.WORLDMAPSECTIONTYPE3, WorldMapSectionType.WORLDMAPSECTIONTYPE0, WorldMapSectionType.WORLDMAPSECTIONTYPE2}; - WorldMapSectionType var4 = (WorldMapSectionType)WorldMapIcon_1.findEnumerated(var3, var2); - Object var5 = null; - switch(var4.type) { + WorldMapSectionType var3 = (WorldMapSectionType)CollisionMap.findEnumerated(WorldMapSectionType.method262(), var2); + Object var4 = null; + switch(var3.type) { case 0: - var5 = new class42(); + var4 = new WorldMapSection2(); break; case 1: - var5 = new WorldMapSection1(); + var4 = new WorldMapSection0(); break; case 2: - var5 = new WorldMapSection0(); + var4 = new WorldMapSection1(); break; case 3: - var5 = new WorldMapSection2(); + var4 = new class42(); break; default: throw new IllegalStateException(""); } - ((WorldMapSection)var5).read(var1); - return (WorldMapSection)var5; + ((WorldMapSection)var4).read(var1); + return (WorldMapSection)var4; } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( signature = "(IIII)Z", - garbageValue = "1638730005" + garbageValue = "-2105358172" ) @Export("containsCoord") public boolean containsCoord(int var1, int var2, int var3) { @@ -172,10 +162,10 @@ public class WorldMapArea { return true; } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(III)Z", - garbageValue = "-1462177792" + signature = "(IIS)Z", + garbageValue = "2206" ) @Export("containsPosition") public boolean containsPosition(int var1, int var2) { @@ -203,10 +193,10 @@ public class WorldMapArea { } } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(IIIB)[I", - garbageValue = "33" + signature = "(IIII)[I", + garbageValue = "-984592033" ) @Export("position") public int[] position(int var1, int var2, int var3) { @@ -224,10 +214,10 @@ public class WorldMapArea { return var5.getBorderTileLengths(var1, var2, var3); } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(III)Lhf;", - garbageValue = "1597093580" + signature = "(IIB)Lhx;", + garbageValue = "66" ) @Export("coord") public Coord coord(int var1, int var2) { @@ -245,10 +235,10 @@ public class WorldMapArea { return var4.coord(var1, var2); } - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "2134546584" + garbageValue = "2134226031" ) @Export("setBounds") void setBounds() { @@ -261,143 +251,536 @@ public class WorldMapArea { } - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "(B)I", - garbageValue = "-7" + signature = "(I)I", + garbageValue = "-558298236" ) @Export("getId") public int getId() { return this.id; } - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedSignature( - signature = "(B)Z", - garbageValue = "110" + signature = "(I)Z", + garbageValue = "-1980333643" ) @Export("getIsMain") public boolean getIsMain() { return this.isMain; } - @ObfuscatedName("d") + @ObfuscatedName("i") @ObfuscatedSignature( - signature = "(B)Ljava/lang/String;", - garbageValue = "1" + signature = "(I)Ljava/lang/String;", + garbageValue = "986616320" ) @Export("getInternalName") public String getInternalName() { return this.internalName; } - @ObfuscatedName("m") + @ObfuscatedName("k") @ObfuscatedSignature( signature = "(I)Ljava/lang/String;", - garbageValue = "-1041016674" + garbageValue = "2135576042" ) @Export("getExternalName") public String getExternalName() { return this.externalName; } - @ObfuscatedName("p") + @ObfuscatedName("x") @ObfuscatedSignature( - signature = "(I)I", - garbageValue = "1564084979" + signature = "(S)I", + garbageValue = "14931" ) @Export("getBackGroundColor") int getBackGroundColor() { return this.backGroundColor; } - @ObfuscatedName("h") + @ObfuscatedName("o") @ObfuscatedSignature( signature = "(I)I", - garbageValue = "2048902575" + garbageValue = "-2065427390" ) @Export("getZoom") public int getZoom() { return this.zoom; } - @ObfuscatedName("k") + @ObfuscatedName("e") @ObfuscatedSignature( signature = "(I)I", - garbageValue = "1802281108" + garbageValue = "-253398901" ) @Export("getRegionLowX") public int getRegionLowX() { return this.regionLowX; } - @ObfuscatedName("x") + @ObfuscatedName("n") @ObfuscatedSignature( signature = "(I)I", - garbageValue = "-1688302004" + garbageValue = "1831938917" ) @Export("getRegionHighX") public int getRegionHighX() { return this.regionHighX; } - @ObfuscatedName("j") + @ObfuscatedName("c") @ObfuscatedSignature( signature = "(I)I", - garbageValue = "1785466127" + garbageValue = "-847812540" ) @Export("getRegionLowY") public int getRegionLowY() { return this.regionLowY; } - @ObfuscatedName("r") + @ObfuscatedName("s") @ObfuscatedSignature( - signature = "(I)I", - garbageValue = "-254845356" + signature = "(B)I", + garbageValue = "-10" ) @Export("getRegionHighY") public int getRegionHighY() { return this.regionHighY; } - @ObfuscatedName("e") + @ObfuscatedName("t") @ObfuscatedSignature( signature = "(I)I", - garbageValue = "1396103207" + garbageValue = "25027619" ) @Export("getOriginX") public int getOriginX() { return this.origin.x; } - @ObfuscatedName("s") + @ObfuscatedName("m") @ObfuscatedSignature( - signature = "(B)I", - garbageValue = "0" + signature = "(I)I", + garbageValue = "234586297" ) @Export("getOriginPlane") public int getOriginPlane() { return this.origin.plane; } - @ObfuscatedName("b") + @ObfuscatedName("v") @ObfuscatedSignature( - signature = "(B)I", - garbageValue = "1" + signature = "(I)I", + garbageValue = "-554027606" ) @Export("getOriginY") public int getOriginY() { return this.origin.y; } - @ObfuscatedName("w") + @ObfuscatedName("q") @ObfuscatedSignature( - signature = "(I)Lhf;", - garbageValue = "773568512" + signature = "(I)Lhx;", + garbageValue = "1357419323" ) @Export("getOrigin") public Coord getOrigin() { return new Coord(this.origin); } + + @ObfuscatedName("b") + @ObfuscatedSignature( + signature = "(I)Lbs;", + garbageValue = "-1284252548" + ) + static ClientPreferences method422() { + AccessFile var0 = null; + ClientPreferences var1 = new ClientPreferences(); + + try { + var0 = class191.getPreferencesFile("", UserComparator8.field1973.name, false); + byte[] var2 = new byte[(int)var0.length()]; + + int var4; + for (int var3 = 0; var3 < var2.length; var3 += var4) { + var4 = var0.read(var2, var3, var2.length - var3); + if (var4 == -1) { + throw new IOException(); + } + } + + var1 = new ClientPreferences(new Buffer(var2)); + } catch (Exception var6) { + } + + try { + if (var0 != null) { + var0.close(); + } + } catch (Exception var5) { + } + + return var1; + } + + @ObfuscatedName("g") + @ObfuscatedSignature( + signature = "([BI)Lci;", + garbageValue = "-1522510902" + ) + @Export("newScript") + static Script newScript(byte[] var0) { + Script var1 = new Script(); + Buffer var2 = new Buffer(var0); + var2.offset = var2.array.length - 2; + int var3 = var2.readUnsignedShort(); + int var4 = var2.array.length - 2 - var3 - 12; + var2.offset = var4; + int var5 = var2.readInt(); + var1.localIntCount = var2.readUnsignedShort(); + var1.localStringCount = var2.readUnsignedShort(); + var1.intArgumentCount = var2.readUnsignedShort(); + var1.stringArgumentCount = var2.readUnsignedShort(); + int var6 = var2.readUnsignedByte(); + int var7; + int var8; + if (var6 > 0) { + var1.switches = var1.newIterableNodeHashTable(var6); + + for (var7 = 0; var7 < var6; ++var7) { + var8 = var2.readUnsignedShort(); + IterableNodeHashTable var9 = new IterableNodeHashTable(var8 > 0 ? WorldMapID.method566(var8) : 1); + var1.switches[var7] = var9; + + while (var8-- > 0) { + int var10 = var2.readInt(); + int var11 = var2.readInt(); + var9.put(new IntegerNode(var11), (long)var10); + } + } + } + + var2.offset = 0; + var2.readStringCp1252NullTerminatedOrNull(); + var1.opcodes = new int[var5]; + var1.intOperands = new int[var5]; + var1.stringOperands = new String[var5]; + + for (var7 = 0; var2.offset < var4; var1.opcodes[var7++] = var8) { + var8 = var2.readUnsignedShort(); + if (var8 == 3) { + var1.stringOperands[var7] = var2.readStringCp1252NullTerminated(); + } else if (var8 < 100 && var8 != 21 && var8 != 38 && var8 != 39) { + var1.intOperands[var7] = var2.readInt(); + } else { + var1.intOperands[var7] = var2.readUnsignedByte(); + } + } + + return var1; + } + + @ObfuscatedName("aw") + @ObfuscatedSignature( + signature = "(ILci;ZI)I", + garbageValue = "-1045531754" + ) + static int method396(int var0, Script var1, boolean var2) { + String var3; + int var4; + if (var0 == ScriptOpcodes.APPEND_NUM) { + var3 = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]; + var4 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var3 + var4; + return 1; + } else { + String var9; + if (var0 == ScriptOpcodes.APPEND) { + class43.Interpreter_stringStackSize -= 2; + var3 = Interpreter.Interpreter_stringStack[class43.Interpreter_stringStackSize]; + var9 = Interpreter.Interpreter_stringStack[class43.Interpreter_stringStackSize + 1]; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var3 + var9; + return 1; + } else if (var0 == ScriptOpcodes.APPEND_SIGNNUM) { + var3 = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]; + var4 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var3 + VarbitDefinition.intToString(var4, true); + return 1; + } else if (var0 == ScriptOpcodes.LOWERCASE) { + var3 = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var3.toLowerCase(); + return 1; + } else { + int var6; + int var10; + if (var0 == ScriptOpcodes.FROMDATE) { + var10 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + long var11 = 86400000L * ((long)var10 + 11745L); + Interpreter.Interpreter_calendar.setTime(new Date(var11)); + var6 = Interpreter.Interpreter_calendar.get(5); + int var16 = Interpreter.Interpreter_calendar.get(2); + int var8 = Interpreter.Interpreter_calendar.get(1); + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var6 + "-" + Interpreter.Interpreter_MONTHS[var16] + "-" + var8; + return 1; + } else if (var0 != ScriptOpcodes.TEXT_GENDER) { + if (var0 == ScriptOpcodes.TOSTRING) { + var10 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = Integer.toString(var10); + return 1; + } else if (var0 == ScriptOpcodes.COMPARE) { + class43.Interpreter_stringStackSize -= 2; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Friend.method5293(ArchiveDiskActionHandler.compareStrings(Interpreter.Interpreter_stringStack[class43.Interpreter_stringStackSize], Interpreter.Interpreter_stringStack[class43.Interpreter_stringStackSize + 1], VarbitDefinition.clientLanguage)); + return 1; + } else { + int var5; + byte[] var13; + Font var14; + if (var0 == ScriptOpcodes.PARAHEIGHT) { + var3 = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]; + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var4 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var5 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + var13 = class269.archive13.takeFile(var5, 0); + var14 = new Font(var13); + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var14.lineCount(var3, var4); + return 1; + } else if (var0 == ScriptOpcodes.PARAWIDTH) { + var3 = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]; + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var4 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var5 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + var13 = class269.archive13.takeFile(var5, 0); + var14 = new Font(var13); + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var14.lineWidth(var3, var4); + return 1; + } else if (var0 == ScriptOpcodes.TEXT_SWITCH) { + class43.Interpreter_stringStackSize -= 2; + var3 = Interpreter.Interpreter_stringStack[class43.Interpreter_stringStackSize]; + var9 = Interpreter.Interpreter_stringStack[class43.Interpreter_stringStackSize + 1]; + if (Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1) { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var3; + } else { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var9; + } + + return 1; + } else if (var0 == ScriptOpcodes.ESCAPE) { + var3 = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = AbstractFont.escapeBrackets(var3); + return 1; + } else if (var0 == ScriptOpcodes.APPEND_CHAR) { + var3 = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]; + var4 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var3 + (char)var4; + return 1; + } else if (var0 == ScriptOpcodes.CHAR_ISPRINTABLE) { + var10 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = FloorDecoration.isCharPrintable((char)var10) ? 1 : 0; + return 1; + } else if (var0 == ScriptOpcodes.CHAR_ISALPHANUMERIC) { + var10 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Varcs.isAlphaNumeric((char)var10) ? 1 : 0; + return 1; + } else if (var0 == ScriptOpcodes.CHAR_ISALPHA) { + var10 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = SequenceDefinition.isCharAlphabetic((char)var10) ? 1 : 0; + return 1; + } else if (var0 == ScriptOpcodes.CHAR_ISNUMERIC) { + var10 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = AbstractWorldMapData.isDigit((char)var10) ? 1 : 0; + return 1; + } else if (var0 == ScriptOpcodes.STRING_LENGTH) { + var3 = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]; + if (var3 != null) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.length(); + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + } + + return 1; + } else if (var0 == ScriptOpcodes.SUBSTRING) { + var3 = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]; + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var4 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var5 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var3.substring(var4, var5); + return 1; + } else if (var0 == ScriptOpcodes.REMOVETAGS) { + var3 = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]; + StringBuilder var17 = new StringBuilder(var3.length()); + boolean var15 = false; + + for (var6 = 0; var6 < var3.length(); ++var6) { + char var7 = var3.charAt(var6); + if (var7 == '<') { + var15 = true; + } else if (var7 == '>') { + var15 = false; + } else if (!var15) { + var17.append(var7); + } + } + + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var17.toString(); + return 1; + } else if (var0 == ScriptOpcodes.STRING_INDEXOF_CHAR) { + var3 = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]; + var4 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.indexOf(var4); + return 1; + } else if (var0 == ScriptOpcodes.STRING_INDEXOF_STRING) { + class43.Interpreter_stringStackSize -= 2; + var3 = Interpreter.Interpreter_stringStack[class43.Interpreter_stringStackSize]; + var9 = Interpreter.Interpreter_stringStack[class43.Interpreter_stringStackSize + 1]; + var5 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.indexOf(var9, var5); + return 1; + } else if (var0 == ScriptOpcodes.UPPERCASE) { + var3 = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var3.toUpperCase(); + return 1; + } else { + return 2; + } + } + } else { + class43.Interpreter_stringStackSize -= 2; + var3 = Interpreter.Interpreter_stringStack[class43.Interpreter_stringStackSize]; + var9 = Interpreter.Interpreter_stringStack[class43.Interpreter_stringStackSize + 1]; + if (class215.localPlayer.appearance != null && class215.localPlayer.appearance.isFemale) { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var9; + } else { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var3; + } + + return 1; + } + } + } + } + + @ObfuscatedName("ht") + @ObfuscatedSignature( + signature = "(I)V", + garbageValue = "-2037516367" + ) + static final void method424() { + PacketBuffer var0 = Client.packetWriter.packetBuffer; + var0.importIndex(); + int var1 = var0.readBits(8); + int var2; + if (var1 < Client.npcCount) { + for (var2 = var1; var2 < Client.npcCount; ++var2) { + Client.field764[++Client.field814 - 1] = Client.npcIndices[var2]; + } + } + + if (var1 > Client.npcCount) { + throw new RuntimeException(""); + } else { + Client.npcCount = 0; + + for (var2 = 0; var2 < var1; ++var2) { + int var3 = Client.npcIndices[var2]; + NPC var4 = Client.npcs[var3]; + int var5 = var0.readBits(1); + if (var5 == 0) { + Client.npcIndices[++Client.npcCount - 1] = var3; + var4.npcCycle = Client.cycle; + } else { + int var6 = var0.readBits(2); + if (var6 == 0) { + Client.npcIndices[++Client.npcCount - 1] = var3; + var4.npcCycle = Client.cycle; + Client.field688[++Client.field687 - 1] = var3; + } else { + int var7; + int var8; + if (var6 == 1) { + Client.npcIndices[++Client.npcCount - 1] = var3; + var4.npcCycle = Client.cycle; + var7 = var0.readBits(3); + var4.method2058(var7, (byte)1); + var8 = var0.readBits(1); + if (var8 == 1) { + Client.field688[++Client.field687 - 1] = var3; + } + } else if (var6 == 2) { + Client.npcIndices[++Client.npcCount - 1] = var3; + var4.npcCycle = Client.cycle; + var7 = var0.readBits(3); + var4.method2058(var7, (byte)2); + var8 = var0.readBits(3); + var4.method2058(var8, (byte)2); + int var9 = var0.readBits(1); + if (var9 == 1) { + Client.field688[++Client.field687 - 1] = var3; + } + } else if (var6 == 3) { + Client.field764[++Client.field814 - 1] = var3; + } + } + } + } + + } + } + + @ObfuscatedName("jj") + @ObfuscatedSignature( + signature = "(Lhl;I)Z", + garbageValue = "985912778" + ) + @Export("runCs1") + static final boolean runCs1(Widget var0) { + if (var0.cs1Comparisons == null) { + return false; + } else { + for (int var1 = 0; var1 < var0.cs1Comparisons.length; ++var1) { + int var2 = Language.method3719(var0, var1); + int var3 = var0.cs1ComparisonValues[var1]; + if (var0.cs1Comparisons[var1] == 2) { + if (var2 >= var3) { + return false; + } + } else if (var0.cs1Comparisons[var1] == 3) { + if (var2 <= var3) { + return false; + } + } else if (var0.cs1Comparisons[var1] == 4) { + if (var3 == var2) { + return false; + } + } else if (var3 != var2) { + return false; + } + } + + return true; + } + } + + @ObfuscatedName("jv") + @ObfuscatedSignature( + signature = "(IB)V", + garbageValue = "116" + ) + @Export("Widget_resetModelFrames") + static final void Widget_resetModelFrames(int var0) { + if (UserComparator3.loadInterface(var0)) { + Widget[] var1 = FloorDecoration.Widget_interfaceComponents[var0]; + + for (int var2 = 0; var2 < var1.length; ++var2) { + Widget var3 = var1[var2]; + if (var3 != null) { + var3.modelFrame = 0; + var3.modelFrameCycle = 0; + } + } + + } + } } diff --git a/runescape-client/src/main/java/WorldMapAreaData.java b/runescape-client/src/main/java/WorldMapAreaData.java index 5c0bc1c42b..5252efece8 100644 --- a/runescape-client/src/main/java/WorldMapAreaData.java +++ b/runescape-client/src/main/java/WorldMapAreaData.java @@ -7,39 +7,32 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ap") +@ObfuscatedName("aq") @Implements("WorldMapAreaData") public class WorldMapAreaData extends WorldMapArea { - @ObfuscatedName("qe") + @ObfuscatedName("lv") @ObfuscatedGetter( - intValue = 333326797 + intValue = 147472747 ) - static int field323; - @ObfuscatedName("ew") - @Export("worldHost") - static String worldHost; - @ObfuscatedName("er") - @ObfuscatedGetter( - intValue = 837015313 - ) - static int field329; - @ObfuscatedName("h") + @Export("selectedSpellWidget") + static int selectedSpellWidget; + @ObfuscatedName("o") @Export("worldMapData0Set") HashSet worldMapData0Set; - @ObfuscatedName("k") + @ObfuscatedName("e") @Export("worldMapData1Set") HashSet worldMapData1Set; - @ObfuscatedName("x") + @ObfuscatedName("n") @Export("iconList") List iconList; WorldMapAreaData() { } - @ObfuscatedName("co") + @ObfuscatedName("be") @ObfuscatedSignature( - signature = "(Lkc;Lkc;IZI)V", - garbageValue = "-146974626" + signature = "(Lkg;Lkg;IZI)V", + garbageValue = "-2087275167" ) @Export("init") void init(Buffer var1, Buffer var2, int var3, boolean var4) { @@ -78,10 +71,10 @@ public class WorldMapAreaData extends WorldMapArea { this.initIconsList(var2, var4); } - @ObfuscatedName("cu") + @ObfuscatedName("bt") @ObfuscatedSignature( - signature = "(Lkc;ZB)V", - garbageValue = "114" + signature = "(Lkg;ZI)V", + garbageValue = "83812464" ) @Export("initIconsList") void initIconsList(Buffer var1, boolean var2) { @@ -89,7 +82,7 @@ public class WorldMapAreaData extends WorldMapArea { int var3 = var1.readUnsignedShort(); for (int var4 = 0; var4 < var3; ++var4) { - int var5 = var1.method5638(); + int var5 = var1.method5618(); Coord var6 = new Coord(var1.readInt()); boolean var7 = var1.readUnsignedByte() == 1; if (var2 || !var7) { @@ -99,65 +92,100 @@ public class WorldMapAreaData extends WorldMapArea { } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Lhq;IIB)Llw;", - garbageValue = "-96" + signature = "(I)[Lhe;", + garbageValue = "-2010559080" ) - static IndexedSprite method762(AbstractArchive var0, int var1, int var2) { - if (!class32.method618(var0, var1, var2)) { - return null; - } else { - IndexedSprite var4 = new IndexedSprite(); - var4.width = class325.SpriteBuffer_spriteWidth; - var4.height = class325.SpriteBuffer_spriteHeight; - var4.xOffset = SecureRandomFuture.SpriteBuffer_xOffsets[0]; - var4.yOffset = HealthBar.SpriteBuffer_yOffsets[0]; - var4.subWidth = SecureRandomCallable.SpriteBuffer_spriteWidths[0]; - var4.subHeight = AttackOption.SpriteBuffer_spriteHeights[0]; - var4.palette = class325.SpriteBuffer_spritePalette; - var4.pixels = class325.SpriteBuffer_pixels[0]; - WorldMapData_1.method787(); - return var4; - } + public static StudioGame[] method709() { + return new StudioGame[]{StudioGame.runescape, StudioGame.game3, StudioGame.oldscape, StudioGame.game4, StudioGame.game5, StudioGame.stellardawn}; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(B)[Lge;", - garbageValue = "-90" + signature = "(Ljava/lang/String;ZZI)V", + garbageValue = "-1808835985" ) - public static class185[] method763() { - return new class185[]{class185.field2296, class185.field2292, class185.field2293, class185.field2294, class185.field2295, class185.field2291, class185.field2298, class185.field2297, class185.field2299, class185.field2300}; + @Export("openURL") + public static void openURL(String var0, boolean var1, boolean var2) { + class191.method3721(var0, var1, "openjs", var2); } - @ObfuscatedName("t") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(IIB)I", - garbageValue = "59" + signature = "(IB)V", + garbageValue = "-67" ) - @Export("ItemContainer_getCount") - static int ItemContainer_getCount(int var0, int var1) { - ItemContainer var2 = (ItemContainer)ItemContainer.itemContainers.get((long)var0); - if (var2 == null) { - return 0; - } else { - return var1 >= 0 && var1 < var2.quantities.length ? var2.quantities[var1] : 0; - } - } - - @ObfuscatedName("c") - @ObfuscatedSignature( - signature = "(CI)Z", - garbageValue = "1229220823" - ) - static boolean method755(char var0) { - for (int var1 = 0; var1 < "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!\"£$%^&*()-_=+[{]};:'@#~,<.>/?\\| ".length(); ++var1) { - if (var0 == "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!\"£$%^&*()-_=+[{]};:'@#~,<.>/?\\| ".charAt(var1)) { - return true; + @Export("clearItemContainer") + static void clearItemContainer(int var0) { + ItemContainer var1 = (ItemContainer)ItemContainer.itemContainers.get((long)var0); + if (var1 != null) { + for (int var2 = 0; var2 < var1.ids.length; ++var2) { + var1.ids[var2] = -1; + var1.quantities[var2] = 0; } + + } + } + + @ObfuscatedName("o") + @ObfuscatedSignature( + signature = "(II)Ljava/lang/String;", + garbageValue = "-316979952" + ) + static final String method711(int var0) { + if (var0 < 100000) { + return "" + var0 + ""; + } else { + return var0 < 10000000 ? "" + var0 / 1000 + "K" + "" : "" + var0 / 1000000 + "M" + ""; + } + } + + @ObfuscatedName("q") + @ObfuscatedSignature( + signature = "(I)V", + garbageValue = "1095185077" + ) + public static void method703() { + ItemDefinition.ItemDefinition_cached.clear(); + ItemDefinition.ItemDefinition_cachedModels.clear(); + ItemDefinition.ItemDefinition_cachedSprites.clear(); + } + + @ObfuscatedName("fw") + @ObfuscatedSignature( + signature = "(Lbt;I)V", + garbageValue = "-2077720731" + ) + static final void method707(Actor var0) { + if (var0.field982 == Client.cycle || var0.sequence == -1 || var0.sequenceDelay != 0 || var0.sequenceFrameCycle + 1 > GrandExchangeOfferAgeComparator.SequenceDefinition_get(var0.sequence).frameLengths[var0.sequenceFrame]) { + int var1 = var0.field982 - var0.field934; + int var2 = Client.cycle - var0.field934; + int var3 = var0.field946 * 128 + var0.field938 * 64; + int var4 = var0.field979 * 128 + var0.field938 * 64; + int var5 = var0.field978 * 128 + var0.field938 * 64; + int var6 = var0.field980 * 128 + var0.field938 * 64; + var0.x = (var5 * var2 + var3 * (var1 - var2)) / var1; + var0.y = (var6 * var2 + var4 * (var1 - var2)) / var1; } - return false; + var0.field976 = 0; + var0.orientation = var0.field983; + var0.rotation = var0.orientation; + } + + @ObfuscatedName("kk") + @ObfuscatedSignature( + signature = "(Ljava/lang/String;I)V", + garbageValue = "74366885" + ) + @Export("Clan_joinChat") + static final void Clan_joinChat(String var0) { + if (!var0.equals("")) { + PacketBufferNode var1 = ModelData0.getPacketBufferNode(ClientPacket.field2314, Client.packetWriter.isaacCipher); + var1.packetBuffer.writeByte(class173.stringCp1252NullTerminatedByteSize(var0)); + var1.packetBuffer.writeStringCp1252NullTerminated(var0); + Client.packetWriter.addNode(var1); + } } } diff --git a/runescape-client/src/main/java/WorldMapCacheName.java b/runescape-client/src/main/java/WorldMapCacheName.java index 5fac25787b..3e24d64255 100644 --- a/runescape-client/src/main/java/WorldMapCacheName.java +++ b/runescape-client/src/main/java/WorldMapCacheName.java @@ -1,183 +1,87 @@ import net.runelite.mapping.Export; import net.runelite.mapping.Implements; +import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; @ObfuscatedName("ab") @Implements("WorldMapCacheName") public class WorldMapCacheName { - @ObfuscatedName("a") + @ObfuscatedName("rg") + @ObfuscatedGetter( + intValue = 671141563 + ) + static int field308; + @ObfuscatedName("u") @ObfuscatedSignature( signature = "Lab;" ) - public static final WorldMapCacheName field288; - @ObfuscatedName("t") + public static final WorldMapCacheName field304; + @ObfuscatedName("f") @ObfuscatedSignature( signature = "Lab;" ) - public static final WorldMapCacheName field289; - @ObfuscatedName("n") + public static final WorldMapCacheName field303; + @ObfuscatedName("b") @ObfuscatedSignature( signature = "Lab;" ) - public static final WorldMapCacheName field290; - @ObfuscatedName("q") + public static final WorldMapCacheName field307; + @ObfuscatedName("g") @ObfuscatedSignature( signature = "Lab;" ) - static final WorldMapCacheName field298; - @ObfuscatedName("v") + static final WorldMapCacheName field305; + @ObfuscatedName("z") @ObfuscatedSignature( signature = "Lab;" ) - public static final WorldMapCacheName field292; - @ObfuscatedName("gu") - @Export("regionLandArchiveIds") - static int[] regionLandArchiveIds; + public static final WorldMapCacheName field306; @ObfuscatedName("l") + @ObfuscatedGetter( + intValue = -770375157 + ) + @Export("canvasHeight") + public static int canvasHeight; + @ObfuscatedName("p") @Export("name") public final String name; static { - field288 = new WorldMapCacheName("details"); - field289 = new WorldMapCacheName("compositemap"); - field290 = new WorldMapCacheName("compositetexture"); - field298 = new WorldMapCacheName("area"); - field292 = new WorldMapCacheName("labels"); + field304 = new WorldMapCacheName("details"); + field303 = new WorldMapCacheName("compositemap"); + field307 = new WorldMapCacheName("compositetexture"); + field305 = new WorldMapCacheName("area"); + field306 = new WorldMapCacheName("labels"); } WorldMapCacheName(String var1) { this.name = var1; } - @ObfuscatedName("q") + @ObfuscatedName("j") @ObfuscatedSignature( - signature = "(IIIII)V", - garbageValue = "-1535608049" + signature = "(ZI)V", + garbageValue = "-98614245" ) - @Export("itemContainerSetItem") - static void itemContainerSetItem(int var0, int var1, int var2, int var3) { - ItemContainer var4 = (ItemContainer)ItemContainer.itemContainers.get((long)var0); - if (var4 == null) { - var4 = new ItemContainer(); - ItemContainer.itemContainers.put(var4, (long)var0); + public static void method637(boolean var0) { + if (var0 != ItemDefinition.ItemDefinition_inMembersWorld) { + WorldMapAreaData.method703(); + ItemDefinition.ItemDefinition_inMembersWorld = var0; } - if (var4.ids.length <= var1) { - int[] var5 = new int[var1 + 1]; - int[] var6 = new int[var1 + 1]; - - int var7; - for (var7 = 0; var7 < var4.ids.length; ++var7) { - var5[var7] = var4.ids[var7]; - var6[var7] = var4.quantities[var7]; - } - - for (var7 = var4.ids.length; var7 < var1; ++var7) { - var5[var7] = -1; - var6[var7] = 0; - } - - var4.ids = var5; - var4.quantities = var6; - } - - var4.ids[var1] = var2; - var4.quantities[var1] = var3; } - @ObfuscatedName("o") + @ObfuscatedName("if") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "-887333641" + signature = "(IIB)V", + garbageValue = "57" ) - public static void method682() { - KitDefinition.KitDefinition_cached.clear(); - } - - @ObfuscatedName("m") - @ObfuscatedSignature( - signature = "(Lhi;IB)V", - garbageValue = "-113" - ) - @Export("Widget_setKeyIgnoreHeld") - static final void Widget_setKeyIgnoreHeld(Widget var0, int var1) { - if (var0.field2623 == null) { - throw new RuntimeException(); - } else { - if (var0.field2627 == null) { - var0.field2627 = new int[var0.field2623.length]; - } - - var0.field2627[var1] = Integer.MAX_VALUE; - } - } - - @ObfuscatedName("h") - @ObfuscatedSignature( - signature = "(III)I", - garbageValue = "-1095915325" - ) - static final int method686(int var0, int var1) { - if (var0 == -1) { - return 12345678; - } else { - var1 = (var0 & 127) * var1 / 128; - if (var1 < 2) { - var1 = 2; - } else if (var1 > 126) { - var1 = 126; - } - - return (var0 & 65408) + var1; - } - } - - @ObfuscatedName("hb") - @ObfuscatedSignature( - signature = "(IIIB)V", - garbageValue = "6" - ) - @Export("worldToScreen") - static final void worldToScreen(int var0, int var1, int var2) { - if (var0 >= 128 && var1 >= 128 && var0 <= 13056 && var1 <= 13056) { - int var3 = GraphicsObject.getTileHeight(var0, var1, Player.Client_plane) - var2; - var0 -= UrlRequester.cameraX; - var3 -= class16.cameraY; - var1 -= GrandExchangeOfferAgeComparator.cameraZ; - int var4 = Rasterizer3D.Rasterizer3D_sine[class247.cameraPitch]; - int var5 = Rasterizer3D.Rasterizer3D_cosine[class247.cameraPitch]; - int var6 = Rasterizer3D.Rasterizer3D_sine[WorldMapData_1.cameraYaw]; - int var7 = Rasterizer3D.Rasterizer3D_cosine[WorldMapData_1.cameraYaw]; - int var8 = var6 * var1 + var0 * var7 >> 16; - var1 = var7 * var1 - var0 * var6 >> 16; - var0 = var8; - var8 = var3 * var5 - var4 * var1 >> 16; - var1 = var4 * var3 + var5 * var1 >> 16; - if (var1 >= 50) { - Client.viewportTempX = var0 * Client.viewportZoom / var1 + Client.viewportWidth / 2; - Client.viewportTempY = Client.viewportHeight / 2 + var8 * Client.viewportZoom / var1; - } else { - Client.viewportTempX = -1; - Client.viewportTempY = -1; - } - - } else { - Client.viewportTempX = -1; - Client.viewportTempY = -1; - } - } - - @ObfuscatedName("ig") - @ObfuscatedSignature( - signature = "(IIS)Lfc;", - garbageValue = "-31136" - ) - static RouteStrategy method685(int var0, int var1) { - Client.field904.approxDestinationX = var0; - Client.field904.approxDestinationY = var1; - Client.field904.approxDestinationSizeX = 1; - Client.field904.approxDestinationSizeY = 1; - return Client.field904; + @Export("resumePauseWidget") + static void resumePauseWidget(int var0, int var1) { + PacketBufferNode var2 = ModelData0.getPacketBufferNode(ClientPacket.field2275, Client.packetWriter.isaacCipher); + var2.packetBuffer.method5613(var1); + var2.packetBuffer.writeInt(var0); + Client.packetWriter.addNode(var2); } } diff --git a/runescape-client/src/main/java/WorldMapData_0.java b/runescape-client/src/main/java/WorldMapData_0.java index 5fe67afb28..8d70256700 100644 --- a/runescape-client/src/main/java/WorldMapData_0.java +++ b/runescape-client/src/main/java/WorldMapData_0.java @@ -1,58 +1,59 @@ import net.runelite.mapping.Export; import net.runelite.mapping.Implements; -import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; +import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("j") +@ObfuscatedName("r") @Implements("WorldMapData_0") public class WorldMapData_0 extends AbstractWorldMapData { - @ObfuscatedName("eb") - @ObfuscatedGetter( - intValue = -186180581 + @ObfuscatedName("gp") + @ObfuscatedSignature( + signature = "[Lln;" ) - static int field92; + @Export("mapDotSprites") + static Sprite[] mapDotSprites; WorldMapData_0() { } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Lkc;I)V", - garbageValue = "-1969161905" + signature = "(Lkg;B)V", + garbageValue = "55" ) @Export("init") void init(Buffer var1) { int var2 = var1.readUnsignedByte(); - if (var2 != WorldMapID.field259.value) { + if (var2 != WorldMapID.field268.value) { throw new IllegalStateException(""); } else { super.minPlane = var1.readUnsignedByte(); super.planes = var1.readUnsignedByte(); - super.regionXLow = var1.readUnsignedShort() * 4096; + super.regionXLow = var1.readUnsignedShort() * 64; super.regionYLow = var1.readUnsignedShort() * 4096; super.regionX = var1.readUnsignedShort(); super.regionY = var1.readUnsignedShort(); - super.groupId = var1.method5638(); - super.fileId = var1.method5638(); + super.groupId = var1.method5618(); + super.fileId = var1.method5618(); } } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Lkc;I)V", - garbageValue = "1045041620" + signature = "(Lkg;B)V", + garbageValue = "35" ) @Export("readGeography") void readGeography(Buffer var1) { super.planes = Math.min(super.planes, 4); super.floorUnderlayIds = new short[1][64][64]; super.floorOverlayIds = new short[super.planes][64][64]; - super.field161 = new byte[super.planes][64][64]; - super.field157 = new byte[super.planes][64][64]; + super.field166 = new byte[super.planes][64][64]; + super.field160 = new byte[super.planes][64][64]; super.decorations = new WorldMapDecoration[super.planes][64][64][]; int var2 = var1.readUnsignedByte(); - if (var2 != class30.field251.value) { + if (var2 != class30.field258.value) { throw new IllegalStateException(""); } else { int var3 = var1.readUnsignedByte(); @@ -70,82 +71,120 @@ public class WorldMapData_0 extends AbstractWorldMapData { } } + public int hashCode() { + return super.regionX | super.regionY << 8; + } + public boolean equals(Object var1) { if (!(var1 instanceof WorldMapData_0)) { return false; } else { WorldMapData_0 var2 = (WorldMapData_0)var1; - return var2.regionX == super.regionX && var2.regionY == super.regionY; + return var2.regionX == super.regionX && super.regionY == var2.regionY; } } - public int hashCode() { - return super.regionX | super.regionY << 8; + @ObfuscatedName("f") + @ObfuscatedSignature( + signature = "(Lhf;Ljava/lang/String;Ljava/lang/String;IZI)V", + garbageValue = "-2068665668" + ) + public static void method191(AbstractArchive var0, String var1, String var2, int var3, boolean var4) { + int var5 = var0.getGroupId(var1); + int var6 = var0.getFileId(var5, var2); + class65.playMusicTrack(var0, var5, var6, var3, var4); } - @ObfuscatedName("v") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(IZI)Ljava/lang/String;", - garbageValue = "1507052882" + signature = "(IB)Z", + garbageValue = "121" ) - @Export("intToString") - public static String intToString(int var0, boolean var1) { - if (var1 && var0 >= 0) { - int var3 = var0; - String var2; - if (var1 && var0 >= 0) { - int var4 = 2; + public static boolean method192(int var0) { + return (var0 >> 20 & 1) != 0; + } - for (int var5 = var0 / 10; var5 != 0; ++var4) { - var5 /= 10; + @ObfuscatedName("x") + @ObfuscatedSignature( + signature = "(B)V", + garbageValue = "0" + ) + static void method187() { + if (Canvas.loadWorlds()) { + Login.worldSelectOpen = true; + Login.worldSelectPage = 0; + Login.worldSelectPagesCount = 0; + } + + } + + @ObfuscatedName("ab") + @ObfuscatedSignature( + signature = "(ILci;ZI)I", + garbageValue = "1752052270" + ) + static int method193(int var0, Script var1, boolean var2) { + if (var0 == ScriptOpcodes.GETWINDOWMODE) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = class43.getWindowedMode(); + return 1; + } else { + int var3; + if (var0 == ScriptOpcodes.SETWINDOWMODE) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + if (var3 == 1 || var3 == 2) { + MouseHandler.setWindowedMode(var3); } - char[] var6 = new char[var4]; - var6[0] = '+'; - - for (int var7 = var4 - 1; var7 > 0; --var7) { - int var8 = var3; - var3 /= 10; - int var9 = var8 - var3 * 10; - if (var9 >= 10) { - var6[var7] = (char)(var9 + 87); - } else { - var6[var7] = (char)(var9 + 48); - } + return 1; + } else if (var0 == ScriptOpcodes.GETDEFAULTWINDOWMODE) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = UserComparator10.clientPreferences.windowMode; + return 1; + } else if (var0 != ScriptOpcodes.SETDEFAULTWINDOWMODE) { + if (var0 == 5310) { + --GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize; + return 1; + } else { + return 2; } - - var2 = new String(var6); } else { - var2 = Integer.toString(var0, 10); + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + if (var3 == 1 || var3 == 2) { + UserComparator10.clientPreferences.windowMode = var3; + class40.savePreferences(); + } + + return 1; } - - return var2; - } else { - return Integer.toString(var0); } } - @ObfuscatedName("c") + @ObfuscatedName("gy") @ObfuscatedSignature( - signature = "(B)Lbk;", - garbageValue = "106" + signature = "(ZI)V", + garbageValue = "-251143454" ) - @Export("worldListStart") - static World worldListStart() { - World.World_listCount = 0; - return class1.getNextWorldListWorld(); - } + @Export("addNpcsToScene") + static final void addNpcsToScene(boolean var0) { + for (int var1 = 0; var1 < Client.npcCount; ++var1) { + NPC var2 = Client.npcs[Client.npcIndices[var1]]; + if (var2 != null && var2.isVisible() && var2.definition.isVisible == var0 && var2.definition.transformIsVisible()) { + int var3 = var2.x >> 7; + int var4 = var2.y >> 7; + if (var3 >= 0 && var3 < 104 && var4 >= 0 && var4 < 104) { + if (var2.field938 == 1 && (var2.x & 127) == 64 && (var2.y & 127) == 64) { + if (Client.tileLastDrawnActor[var3][var4] == Client.viewportDrawCount) { + continue; + } - @ObfuscatedName("li") - @ObfuscatedSignature( - signature = "(Lhi;II)Ljava/lang/String;", - garbageValue = "-1155704748" - ) - static String method210(Widget var0, int var1) { - if (!ModelData0.method3379(class195.getWidgetClickMask(var0), var1) && var0.onOp == null) { - return null; - } else { - return var0.actions != null && var0.actions.length > var1 && var0.actions[var1] != null && var0.actions[var1].trim().length() != 0 ? var0.actions[var1] : null; + Client.tileLastDrawnActor[var3][var4] = Client.viewportDrawCount; + } + + long var5 = MouseHandler.calculateTag(0, 0, 1, !var2.definition.isInteractable, Client.npcIndices[var1]); + var2.playerCycle = Client.cycle; + class2.scene.drawEntity(ClientPacket.Client_plane, var2.x, var2.y, class195.getTileHeight(var2.field938 * 64 - 64 + var2.x, var2.field938 * 64 - 64 + var2.y, ClientPacket.Client_plane), var2.field938 * 64 - 64 + 60, var2, var2.rotation, var5, var2.isWalking); + } + } } + } } diff --git a/runescape-client/src/main/java/WorldMapData_1.java b/runescape-client/src/main/java/WorldMapData_1.java index b7273a779c..a98e352fc8 100644 --- a/runescape-client/src/main/java/WorldMapData_1.java +++ b/runescape-client/src/main/java/WorldMapData_1.java @@ -4,48 +4,30 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("aj") +@ObfuscatedName("ac") @Implements("WorldMapData_1") public class WorldMapData_1 extends AbstractWorldMapData { - @ObfuscatedName("sf") - @ObfuscatedSignature( - signature = "Lc;" - ) - @Export("grandExchangeEvents") - static GrandExchangeEvents grandExchangeEvents; - @ObfuscatedName("hv") + @ObfuscatedName("r") @ObfuscatedGetter( - intValue = 1575560349 - ) - @Export("cameraYaw") - static int cameraYaw; - @ObfuscatedName("kb") - @ObfuscatedGetter( - intValue = 1504630099 - ) - @Export("menuHeight") - static int menuHeight; - @ObfuscatedName("j") - @ObfuscatedGetter( - intValue = 1445881523 + intValue = 1416640575 ) @Export("chunkXLow") int chunkXLow; - @ObfuscatedName("r") + @ObfuscatedName("c") @ObfuscatedGetter( - intValue = 687230799 + intValue = 1408474615 ) @Export("chunkYLow") int chunkYLow; - @ObfuscatedName("e") + @ObfuscatedName("a") @ObfuscatedGetter( - intValue = -218420461 + intValue = 509804669 ) @Export("chunkX") int chunkX; - @ObfuscatedName("s") + @ObfuscatedName("d") @ObfuscatedGetter( - intValue = 875111377 + intValue = 979976337 ) @Export("chunkY") int chunkY; @@ -53,20 +35,20 @@ public class WorldMapData_1 extends AbstractWorldMapData { WorldMapData_1() { } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Lkc;B)V", - garbageValue = "0" + signature = "(Lkg;B)V", + garbageValue = "-90" ) @Export("init") void init(Buffer var1) { int var2 = var1.readUnsignedByte(); - if (var2 != WorldMapID.field257.value) { + if (var2 != WorldMapID.field264.value) { throw new IllegalStateException(""); } else { super.minPlane = var1.readUnsignedByte(); super.planes = var1.readUnsignedByte(); - super.regionXLow = var1.readUnsignedShort() * 4096; + super.regionXLow = var1.readUnsignedShort() * 64; super.regionYLow = var1.readUnsignedShort() * 4096; this.chunkXLow = var1.readUnsignedByte(); this.chunkYLow = var1.readUnsignedByte(); @@ -74,26 +56,26 @@ public class WorldMapData_1 extends AbstractWorldMapData { super.regionY = var1.readUnsignedShort(); this.chunkX = var1.readUnsignedByte(); this.chunkY = var1.readUnsignedByte(); - super.groupId = var1.method5638(); - super.fileId = var1.method5638(); + super.groupId = var1.method5618(); + super.fileId = var1.method5618(); } } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Lkc;I)V", - garbageValue = "1045041620" + signature = "(Lkg;B)V", + garbageValue = "35" ) @Export("readGeography") void readGeography(Buffer var1) { super.planes = Math.min(super.planes, 4); super.floorUnderlayIds = new short[1][64][64]; super.floorOverlayIds = new short[super.planes][64][64]; - super.field161 = new byte[super.planes][64][64]; - super.field157 = new byte[super.planes][64][64]; + super.field166 = new byte[super.planes][64][64]; + super.field160 = new byte[super.planes][64][64]; super.decorations = new WorldMapDecoration[super.planes][64][64][]; int var2 = var1.readUnsignedByte(); - if (var2 != class30.field249.value) { + if (var2 != class30.field262.value) { throw new IllegalStateException(""); } else { int var3 = var1.readUnsignedByte(); @@ -113,173 +95,237 @@ public class WorldMapData_1 extends AbstractWorldMapData { } } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(I)I", - garbageValue = "2139324279" + signature = "(B)I", + garbageValue = "-36" ) @Export("getChunkXLow") int getChunkXLow() { return this.chunkXLow; } - @ObfuscatedName("q") + @ObfuscatedName("aa") @ObfuscatedSignature( signature = "(I)I", - garbageValue = "-1481651643" + garbageValue = "-1395211658" ) @Export("getChunkYLow") int getChunkYLow() { return this.chunkYLow; } - @ObfuscatedName("v") + @ObfuscatedName("ab") @ObfuscatedSignature( signature = "(I)I", - garbageValue = "-1549655791" + garbageValue = "-1373541715" ) @Export("getChunkX") int getChunkX() { return this.chunkX; } - @ObfuscatedName("aj") + @ObfuscatedName("ar") @ObfuscatedSignature( signature = "(B)I", - garbageValue = "104" + garbageValue = "-80" ) @Export("getChunkY") int getChunkY() { return this.chunkY; } - public int hashCode() { - return super.regionX | super.regionY << 8 | this.chunkX << 16 | this.chunkY << 24; - } - public boolean equals(Object var1) { if (!(var1 instanceof WorldMapData_1)) { return false; } else { WorldMapData_1 var2 = (WorldMapData_1)var1; if (super.regionX == var2.regionX && super.regionY == var2.regionY) { - return var2.chunkX == this.chunkX && this.chunkY == var2.chunkY; + return this.chunkX == var2.chunkX && var2.chunkY == this.chunkY; } else { return false; } } } - @ObfuscatedName("a") + public int hashCode() { + return super.regionX | super.regionY << 8 | this.chunkX << 16 | this.chunkY << 24; + } + + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(CB)B", - garbageValue = "-60" + signature = "(IIILil;IB)V", + garbageValue = "0" ) - @Export("charToByteCp1252") - public static byte charToByteCp1252(char var0) { - byte var1; - if (var0 > 0 && var0 < 128 || var0 >= 160 && var0 <= 255) { - var1 = (byte)var0; - } else if (var0 == 8364) { - var1 = -128; - } else if (var0 == 8218) { - var1 = -126; - } else if (var0 == 402) { - var1 = -125; - } else if (var0 == 8222) { - var1 = -124; - } else if (var0 == 8230) { - var1 = -123; - } else if (var0 == 8224) { - var1 = -122; - } else if (var0 == 8225) { - var1 = -121; - } else if (var0 == 710) { - var1 = -120; - } else if (var0 == 8240) { - var1 = -119; - } else if (var0 == 352) { - var1 = -118; - } else if (var0 == 8249) { - var1 = -117; - } else if (var0 == 338) { - var1 = -116; - } else if (var0 == 381) { - var1 = -114; - } else if (var0 == 8216) { - var1 = -111; - } else if (var0 == 8217) { - var1 = -110; - } else if (var0 == 8220) { - var1 = -109; - } else if (var0 == 8221) { - var1 = -108; - } else if (var0 == 8226) { - var1 = -107; - } else if (var0 == 8211) { - var1 = -106; - } else if (var0 == 8212) { - var1 = -105; - } else if (var0 == 732) { - var1 = -104; - } else if (var0 == 8482) { - var1 = -103; - } else if (var0 == 353) { - var1 = -102; - } else if (var0 == 8250) { - var1 = -101; - } else if (var0 == 339) { - var1 = -100; - } else if (var0 == 382) { - var1 = -98; - } else if (var0 == 376) { - var1 = -97; - } else { - var1 = 63; + static void method737(int var0, int var1, int var2, ObjectDefinition var3, int var4) { + ObjectSound var5 = new ObjectSound(); + var5.plane = var0; + var5.x = var1 * 128; + var5.y = var2 * 128; + int var6 = var3.sizeX; + int var7 = var3.sizeY; + if (var4 == 1 || var4 == 3) { + var6 = var3.sizeY; + var7 = var3.sizeX; + } + + var5.field1074 = (var6 + var1) * 128; + var5.field1071 = (var7 + var2) * 128; + var5.soundEffectId = var3.ambientSoundId; + var5.field1072 = var3.int4 * 128; + var5.field1075 = var3.int5; + var5.field1076 = var3.int6; + var5.soundEffectIds = var3.soundEffectIds; + if (var3.transforms != null) { + var5.obj = var3; + var5.set(); + } + + ObjectSound.objectSounds.addFirst(var5); + if (var5.soundEffectIds != null) { + var5.field1078 = var5.field1075 + (int)(Math.random() * (double)(var5.field1076 - var5.field1075)); } - return var1; } - @ObfuscatedName("h") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "-1236464487" + signature = "(IIIZIZB)V", + garbageValue = "111" ) - public static void method787() { - SecureRandomFuture.SpriteBuffer_xOffsets = null; - HealthBar.SpriteBuffer_yOffsets = null; - SecureRandomCallable.SpriteBuffer_spriteWidths = null; - AttackOption.SpriteBuffer_spriteHeights = null; - class325.SpriteBuffer_spritePalette = null; - class325.SpriteBuffer_pixels = null; + @Export("doWorldSorting") + static void doWorldSorting(int var0, int var1, int var2, boolean var3, int var4, boolean var5) { + if (var0 < var1) { + int var6 = (var0 + var1) / 2; + int var7 = var0; + World var8 = Skills.World_worlds[var6]; + Skills.World_worlds[var6] = Skills.World_worlds[var1]; + Skills.World_worlds[var1] = var8; + + for (int var9 = var0; var9 < var1; ++var9) { + if (WorldMapEvent.method782(Skills.World_worlds[var9], var8, var2, var3, var4, var5) <= 0) { + World var10 = Skills.World_worlds[var9]; + Skills.World_worlds[var9] = Skills.World_worlds[var7]; + Skills.World_worlds[var7++] = var10; + } + } + + Skills.World_worlds[var1] = Skills.World_worlds[var7]; + Skills.World_worlds[var7] = var8; + doWorldSorting(var0, var7 - 1, var2, var3, var4, var5); + doWorldSorting(var7 + 1, var1, var2, var3, var4, var5); + } + } - @ObfuscatedName("gf") + @ObfuscatedName("ik") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "104" + signature = "(IIIILjava/lang/String;B)V", + garbageValue = "84" ) - static final void method767() { - int var0 = Players.Players_count; - int[] var1 = Players.Players_indices; + @Export("widgetDefaultMenuAction") + static void widgetDefaultMenuAction(int var0, int var1, int var2, int var3, String var4) { + Widget var5 = UserComparator3.getWidgetChild(var1, var2); + if (var5 != null) { + if (var5.onOp != null) { + ScriptEvent var6 = new ScriptEvent(); + var6.widget = var5; + var6.opIndex = var0; + var6.targetName = var4; + var6.args = var5.onOp; + WorldMapLabel.runScriptEvent(var6); + } - for (int var2 = 0; var2 < var0; ++var2) { - Player var3 = Client.players[var1[var2]]; - if (var3 != null) { - HitSplatDefinition.updateActorSequence(var3, 1); + boolean var8 = true; + if (var5.contentType > 0) { + var8 = WorldMapID.method567(var5); + } + + if (var8) { + if (WorldMapManager.method651(MenuAction.getWidgetClickMask(var5), var0 - 1)) { + PacketBufferNode var7; + if (var0 == 1) { + var7 = ModelData0.getPacketBufferNode(ClientPacket.field2299, Client.packetWriter.isaacCipher); + var7.packetBuffer.writeInt(var1); + var7.packetBuffer.writeShort(var2); + var7.packetBuffer.writeShort(var3); + Client.packetWriter.addNode(var7); + } + + if (var0 == 2) { + var7 = ModelData0.getPacketBufferNode(ClientPacket.field2313, Client.packetWriter.isaacCipher); + var7.packetBuffer.writeInt(var1); + var7.packetBuffer.writeShort(var2); + var7.packetBuffer.writeShort(var3); + Client.packetWriter.addNode(var7); + } + + if (var0 == 3) { + var7 = ModelData0.getPacketBufferNode(ClientPacket.field2298, Client.packetWriter.isaacCipher); + var7.packetBuffer.writeInt(var1); + var7.packetBuffer.writeShort(var2); + var7.packetBuffer.writeShort(var3); + Client.packetWriter.addNode(var7); + } + + if (var0 == 4) { + var7 = ModelData0.getPacketBufferNode(ClientPacket.field2306, Client.packetWriter.isaacCipher); + var7.packetBuffer.writeInt(var1); + var7.packetBuffer.writeShort(var2); + var7.packetBuffer.writeShort(var3); + Client.packetWriter.addNode(var7); + } + + if (var0 == 5) { + var7 = ModelData0.getPacketBufferNode(ClientPacket.field2287, Client.packetWriter.isaacCipher); + var7.packetBuffer.writeInt(var1); + var7.packetBuffer.writeShort(var2); + var7.packetBuffer.writeShort(var3); + Client.packetWriter.addNode(var7); + } + + if (var0 == 6) { + var7 = ModelData0.getPacketBufferNode(ClientPacket.field2276, Client.packetWriter.isaacCipher); + var7.packetBuffer.writeInt(var1); + var7.packetBuffer.writeShort(var2); + var7.packetBuffer.writeShort(var3); + Client.packetWriter.addNode(var7); + } + + if (var0 == 7) { + var7 = ModelData0.getPacketBufferNode(ClientPacket.field2247, Client.packetWriter.isaacCipher); + var7.packetBuffer.writeInt(var1); + var7.packetBuffer.writeShort(var2); + var7.packetBuffer.writeShort(var3); + Client.packetWriter.addNode(var7); + } + + if (var0 == 8) { + var7 = ModelData0.getPacketBufferNode(ClientPacket.field2259, Client.packetWriter.isaacCipher); + var7.packetBuffer.writeInt(var1); + var7.packetBuffer.writeShort(var2); + var7.packetBuffer.writeShort(var3); + Client.packetWriter.addNode(var7); + } + + if (var0 == 9) { + var7 = ModelData0.getPacketBufferNode(ClientPacket.field2240, Client.packetWriter.isaacCipher); + var7.packetBuffer.writeInt(var1); + var7.packetBuffer.writeShort(var2); + var7.packetBuffer.writeShort(var3); + Client.packetWriter.addNode(var7); + } + + if (var0 == 10) { + var7 = ModelData0.getPacketBufferNode(ClientPacket.field2273, Client.packetWriter.isaacCipher); + var7.packetBuffer.writeInt(var1); + var7.packetBuffer.writeShort(var2); + var7.packetBuffer.writeShort(var3); + Client.packetWriter.addNode(var7); + } + + } } } - - } - - @ObfuscatedName("js") - @ObfuscatedSignature( - signature = "(I)Z", - garbageValue = "-175974338" - ) - @Export("getTapToDrop") - static boolean getTapToDrop() { - return Client.tapToDrop; } } diff --git a/runescape-client/src/main/java/WorldMapDecoration.java b/runescape-client/src/main/java/WorldMapDecoration.java index ed4e463482..3d08f46acb 100644 --- a/runescape-client/src/main/java/WorldMapDecoration.java +++ b/runescape-client/src/main/java/WorldMapDecoration.java @@ -3,37 +3,26 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; +import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("y") +@ObfuscatedName("j") @Implements("WorldMapDecoration") public class WorldMapDecoration { - @ObfuscatedName("d") + @ObfuscatedName("u") @ObfuscatedGetter( - intValue = 1903758255 - ) - @Export("Interpreter_stringStackSize") - static int Interpreter_stringStackSize; - @ObfuscatedName("de") - @ObfuscatedSignature( - signature = "Lij;" - ) - @Export("archive18") - static Archive archive18; - @ObfuscatedName("a") - @ObfuscatedGetter( - intValue = -1209347133 + intValue = -1750985939 ) @Export("objectDefinitionId") final int objectDefinitionId; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = 255177035 + intValue = 1852317111 ) @Export("decoration") final int decoration; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = 1587770673 + intValue = -999220947 ) @Export("rotation") final int rotation; @@ -44,310 +33,38 @@ public class WorldMapDecoration { this.rotation = var3; } - @ObfuscatedName("a") + @ObfuscatedName("q") @ObfuscatedSignature( - signature = "(Lln;I)I", - garbageValue = "793189835" + signature = "(ILci;ZB)I", + garbageValue = "-80" ) - public static final int method388(LoginType var0) { - if (var0 == null) { - return 12; - } else { - switch(var0.field4033) { - case 8: - return 20; - default: - return 12; - } - } - } - - @ObfuscatedName("t") - @ObfuscatedSignature( - signature = "(II)Lis;", - garbageValue = "-1932549468" - ) - @Export("FloorUnderlayDefinition_get") - public static FloorOverlayDefinition FloorUnderlayDefinition_get(int var0) { - FloorOverlayDefinition var1 = (FloorOverlayDefinition)FloorOverlayDefinition.FloorOverlayDefinition_cached.get((long)var0); - if (var1 != null) { - return var1; - } else { - byte[] var2 = FloorOverlayDefinition.FloorOverlayDefinition_archive.takeFile(4, var0); - var1 = new FloorOverlayDefinition(); - if (var2 != null) { - var1.decode(new Buffer(var2), var0); - } - - var1.postDecode(); - FloorOverlayDefinition.FloorOverlayDefinition_cached.put(var1, (long)var0); - return var1; - } - } - - @ObfuscatedName("t") - @Export("base37DecodeLong") - public static String base37DecodeLong(long var0) { - if (var0 > 0L && var0 < 6582952005840035281L) { - if (var0 % 37L == 0L) { - return null; - } else { - int var2 = 0; - - for (long var3 = var0; var3 != 0L; var3 /= 37L) { - ++var2; - } - - StringBuilder var5; - char var8; - for (var5 = new StringBuilder(var2); var0 != 0L; var5.append(var8)) { - long var6 = var0; - var0 /= 37L; - var8 = class288.base37Table[(int)(var6 - var0 * 37L)]; - if (var8 == '_') { - int var9 = var5.length() - 1; - var5.setCharAt(var9, Character.toUpperCase(var5.charAt(var9))); - var8 = 160; - } - } - - var5.reverse(); - var5.setCharAt(0, Character.toUpperCase(var5.charAt(0))); - return var5.toString(); - } - } else { - return null; - } - } - - @ObfuscatedName("gt") - @ObfuscatedSignature( - signature = "(Lbz;I)V", - garbageValue = "1724378098" - ) - static final void method386(Actor var0) { - int var1 = var0.field925 - Client.cycle; - int var2 = var0.field966 * 128 + var0.field927 * 64; - int var3 = var0.field979 * 128 + var0.field927 * 64; - var0.x += (var2 - var0.x) / var1; - var0.y += (var3 - var0.y) / var1; - var0.field982 = 0; - var0.orientation = var0.field972; - } - - @ObfuscatedName("kj") - @ObfuscatedSignature( - signature = "(IB)V", - garbageValue = "-115" - ) - @Export("changeGameOptions") - static final void changeGameOptions(int var0) { - BoundaryObject.method3393(); - - for (ObjectSound var1 = (ObjectSound)ObjectSound.objectSounds.last(); var1 != null; var1 = (ObjectSound)ObjectSound.objectSounds.previous()) { - if (var1.obj != null) { - var1.set(); - } - } - - int var4 = Varcs.VarpDefinition_get(var0).type; - if (var4 != 0) { - int var2 = Varps.Varps_main[var0]; - if (var4 == 1) { - if (var2 == 1) { - Rasterizer3D.Rasterizer3D_setBrightness(0.9D); - ((TextureProvider)Rasterizer3D.Rasterizer3D_textureLoader).setBrightness(0.9D); - } - - if (var2 == 2) { - Rasterizer3D.Rasterizer3D_setBrightness(0.8D); - ((TextureProvider)Rasterizer3D.Rasterizer3D_textureLoader).setBrightness(0.8D); - } - - if (var2 == 3) { - Rasterizer3D.Rasterizer3D_setBrightness(0.7D); - ((TextureProvider)Rasterizer3D.Rasterizer3D_textureLoader).setBrightness(0.7D); - } - - if (var2 == 4) { - Rasterizer3D.Rasterizer3D_setBrightness(0.6D); - ((TextureProvider)Rasterizer3D.Rasterizer3D_textureLoader).setBrightness(0.6D); - } - - ItemDefinition.ItemDefinition_cachedSprites.clear(); - } - - if (var4 == 3) { - short var3 = 0; - if (var2 == 0) { - var3 = 255; - } - - if (var2 == 1) { - var3 = 192; - } - - if (var2 == 2) { - var3 = 128; - } - - if (var2 == 3) { - var3 = 64; - } - - if (var2 == 4) { - var3 = 0; - } - - if (var3 != Client.musicVolume) { - if (Client.musicVolume == 0 && Client.currentTrackGroupId != -1) { - MusicPatchNode2.playMusicTrack(class216.archive6, Client.currentTrackGroupId, 0, var3, false); - Client.field855 = false; - } else if (var3 == 0) { - ReflectionCheck.method2438(); - Client.field855 = false; - } else if (class197.field2377 != 0) { - class197.musicTrackVolume = var3; - } else { - class197.midiPcmStream.setPcmStreamVolume(var3); - } - - Client.musicVolume = var3; - } - } - - if (var4 == 4) { - if (var2 == 0) { - Client.soundEffectVolume = 127; - } - - if (var2 == 1) { - Client.soundEffectVolume = 96; - } - - if (var2 == 2) { - Client.soundEffectVolume = 64; - } - - if (var2 == 3) { - Client.soundEffectVolume = 32; - } - - if (var2 == 4) { - Client.soundEffectVolume = 0; - } - } - - if (var4 == 5) { - Client.leftClickOpensMenu = var2; - } - - if (var4 == 6) { - Client.chatEffects = var2; - } - - if (var4 == 9) { - Client.field907 = var2; - } - - if (var4 == 10) { - if (var2 == 0) { - Client.areaSoundEffectVolume = 127; - } - - if (var2 == 1) { - Client.areaSoundEffectVolume = 96; - } - - if (var2 == 2) { - Client.areaSoundEffectVolume = 64; - } - - if (var2 == 3) { - Client.areaSoundEffectVolume = 32; - } - - if (var2 == 4) { - Client.areaSoundEffectVolume = 0; - } - } - - if (var4 == 17) { - Client.followerIndex = var2 & 65535; - } - - AttackOption[] var5; - if (var4 == 18) { - var5 = new AttackOption[]{AttackOption.AttackOption_alwaysRightClick, AttackOption.AttackOption_leftClickWhereAvailable, AttackOption.AttackOption_dependsOnCombatLevels, AttackOption.AttackOption_hidden}; - Client.playerAttackOption = (AttackOption)WorldMapIcon_1.findEnumerated(var5, var2); - if (Client.playerAttackOption == null) { - Client.playerAttackOption = AttackOption.AttackOption_dependsOnCombatLevels; - } - } - - if (var4 == 19) { - if (var2 == -1) { - Client.combatTargetPlayerIndex = -1; + static int method355(int var0, Script var1, boolean var2) { + Widget var3 = Language.getWidget(Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]); + if (var0 == ScriptOpcodes.IF_GETTARGETMASK) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Client.method1655(MenuAction.getWidgetClickMask(var3)); + return 1; + } else if (var0 != ScriptOpcodes.IF_GETOP) { + if (var0 == ScriptOpcodes.IF_GETOPBASE) { + if (var3.dataText == null) { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = ""; } else { - Client.combatTargetPlayerIndex = var2 & 2047; - } - } - - if (var4 == 22) { - var5 = new AttackOption[]{AttackOption.AttackOption_alwaysRightClick, AttackOption.AttackOption_leftClickWhereAvailable, AttackOption.AttackOption_dependsOnCombatLevels, AttackOption.AttackOption_hidden}; - Client.npcAttackOption = (AttackOption)WorldMapIcon_1.findEnumerated(var5, var2); - if (Client.npcAttackOption == null) { - Client.npcAttackOption = AttackOption.AttackOption_dependsOnCombatLevels; - } - } - - } - } - - @ObfuscatedName("ki") - @ObfuscatedSignature( - signature = "(IIII)Lbq;", - garbageValue = "386978501" - ) - static final InterfaceParent method385(int var0, int var1, int var2) { - InterfaceParent var3 = new InterfaceParent(); - var3.group = var1; - var3.type = var2; - Client.interfaceParents.put(var3, (long)var0); - WorldMapLabel.Widget_resetModelFrames(var1); - Widget var4 = PacketBufferNode.getWidget(var0); - GrandExchangeOfferAgeComparator.invalidateWidget(var4); - if (Client.meslayerContinueWidget != null) { - GrandExchangeOfferAgeComparator.invalidateWidget(Client.meslayerContinueWidget); - Client.meslayerContinueWidget = null; - } - - for (int var5 = 0; var5 < Client.menuOptionsCount; ++var5) { - if (WorldMapIcon_1.method351(Client.menuOpcodes[var5])) { - if (var5 < Client.menuOptionsCount - 1) { - for (int var6 = var5; var6 < Client.menuOptionsCount - 1; ++var6) { - Client.menuActions[var6] = Client.menuActions[var6 + 1]; - Client.menuTargets[var6] = Client.menuTargets[var6 + 1]; - Client.menuOpcodes[var6] = Client.menuOpcodes[var6 + 1]; - Client.menuIdentifiers[var6] = Client.menuIdentifiers[var6 + 1]; - Client.menuArguments1[var6] = Client.menuArguments1[var6 + 1]; - Client.menuArguments2[var6] = Client.menuArguments2[var6 + 1]; - Client.menuShiftClick[var6] = Client.menuShiftClick[var6 + 1]; - } + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var3.dataText; } - --var5; - --Client.menuOptionsCount; + return 1; + } else { + return 2; + } + } else { + int var4 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + --var4; + if (var3.actions != null && var4 < var3.actions.length && var3.actions[var4] != null) { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var3.actions[var4]; + } else { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = ""; } - } - class30.method603(); - class43.revalidateWidgetScroll(Widget.Widget_interfaceComponents[var0 >> 16], var4, false); - FaceNormal.runWidgetOnLoadListener(var1); - if (Client.rootInterface != -1) { - AttackOption.runIntfCloseListeners(Client.rootInterface, 1); + return 1; } - - return var3; } } diff --git a/runescape-client/src/main/java/WorldMapDecorationType.java b/runescape-client/src/main/java/WorldMapDecorationType.java index c59183ea0b..8aff6240eb 100644 --- a/runescape-client/src/main/java/WorldMapDecorationType.java +++ b/runescape-client/src/main/java/WorldMapDecorationType.java @@ -4,128 +4,128 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("hv") +@ObfuscatedName("hh") @Implements("WorldMapDecorationType") public enum WorldMapDecorationType implements Enumerated { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lhv;" + signature = "Lhh;" ) - field2703(0, 0), - @ObfuscatedName("t") - @ObfuscatedSignature( - signature = "Lhv;" - ) - field2719(1, 0), - @ObfuscatedName("n") - @ObfuscatedSignature( - signature = "Lhv;" - ) - field2717(2, 0), - @ObfuscatedName("q") - @ObfuscatedSignature( - signature = "Lhv;" - ) - field2704(3, 0), - @ObfuscatedName("v") - @ObfuscatedSignature( - signature = "Lhv;" - ) - field2705(9, 2), - @ObfuscatedName("l") - @ObfuscatedSignature( - signature = "Lhv;" - ) - field2706(4, 1), - @ObfuscatedName("c") - @ObfuscatedSignature( - signature = "Lhv;" - ) - field2712(5, 1), - @ObfuscatedName("o") - @ObfuscatedSignature( - signature = "Lhv;" - ) - field2708(6, 1), - @ObfuscatedName("i") - @ObfuscatedSignature( - signature = "Lhv;" - ) - field2709(7, 1), - @ObfuscatedName("d") - @ObfuscatedSignature( - signature = "Lhv;" - ) - field2707(8, 1), - @ObfuscatedName("m") - @ObfuscatedSignature( - signature = "Lhv;" - ) - field2711(12, 2), - @ObfuscatedName("p") - @ObfuscatedSignature( - signature = "Lhv;" - ) - field2701(13, 2), - @ObfuscatedName("h") - @ObfuscatedSignature( - signature = "Lhv;" - ) - field2713(14, 2), - @ObfuscatedName("k") - @ObfuscatedSignature( - signature = "Lhv;" - ) - field2714(15, 2), - @ObfuscatedName("x") - @ObfuscatedSignature( - signature = "Lhv;" - ) - field2715(16, 2), - @ObfuscatedName("j") - @ObfuscatedSignature( - signature = "Lhv;" - ) - field2716(17, 2), - @ObfuscatedName("r") - @ObfuscatedSignature( - signature = "Lhv;" - ) - field2720(18, 2), - @ObfuscatedName("e") - @ObfuscatedSignature( - signature = "Lhv;" - ) - field2718(19, 2), - @ObfuscatedName("s") - @ObfuscatedSignature( - signature = "Lhv;" - ) - field2702(20, 2), - @ObfuscatedName("b") - @ObfuscatedSignature( - signature = "Lhv;" - ) - field2710(21, 2), - @ObfuscatedName("z") - @ObfuscatedSignature( - signature = "Lhv;" - ) - field2721(10, 2), + field2748(0, 0), @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lhv;" + signature = "Lhh;" ) - field2722(11, 2), + field2732(1, 0), + @ObfuscatedName("b") + @ObfuscatedSignature( + signature = "Lhh;" + ) + field2727(2, 0), @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Lhv;" + signature = "Lhh;" ) - field2723(22, 3); - + field2730(3, 0), + @ObfuscatedName("z") + @ObfuscatedSignature( + signature = "Lhh;" + ) + field2731(9, 2), + @ObfuscatedName("p") + @ObfuscatedSignature( + signature = "Lhh;" + ) + field2739(4, 1), + @ObfuscatedName("h") + @ObfuscatedSignature( + signature = "Lhh;" + ) + field2733(5, 1), + @ObfuscatedName("y") + @ObfuscatedSignature( + signature = "Lhh;" + ) + field2734(6, 1), @ObfuscatedName("w") + @ObfuscatedSignature( + signature = "Lhh;" + ) + field2735(7, 1), + @ObfuscatedName("i") + @ObfuscatedSignature( + signature = "Lhh;" + ) + field2729(8, 1), + @ObfuscatedName("k") + @ObfuscatedSignature( + signature = "Lhh;" + ) + field2737(12, 2), + @ObfuscatedName("x") + @ObfuscatedSignature( + signature = "Lhh;" + ) + field2738(13, 2), + @ObfuscatedName("o") + @ObfuscatedSignature( + signature = "Lhh;" + ) + field2742(14, 2), + @ObfuscatedName("e") + @ObfuscatedSignature( + signature = "Lhh;" + ) + field2736(15, 2), + @ObfuscatedName("n") + @ObfuscatedSignature( + signature = "Lhh;" + ) + field2741(16, 2), + @ObfuscatedName("r") + @ObfuscatedSignature( + signature = "Lhh;" + ) + field2740(17, 2), + @ObfuscatedName("c") + @ObfuscatedSignature( + signature = "Lhh;" + ) + field2743(18, 2), + @ObfuscatedName("a") + @ObfuscatedSignature( + signature = "Lhh;" + ) + field2744(19, 2), + @ObfuscatedName("d") + @ObfuscatedSignature( + signature = "Lhh;" + ) + field2750(20, 2), + @ObfuscatedName("s") + @ObfuscatedSignature( + signature = "Lhh;" + ) + field2746(21, 2), + @ObfuscatedName("t") + @ObfuscatedSignature( + signature = "Lhh;" + ) + field2747(10, 2), + @ObfuscatedName("m") + @ObfuscatedSignature( + signature = "Lhh;" + ) + field2728(11, 2), + @ObfuscatedName("v") + @ObfuscatedSignature( + signature = "Lhh;" + ) + field2749(22, 3); + + @ObfuscatedName("q") @ObfuscatedGetter( - intValue = -649990391 + intValue = -719905739 ) @Export("id") public final int id; @@ -138,81 +138,49 @@ public enum WorldMapDecorationType implements Enumerated { this.id = var3; } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(I)I", - garbageValue = "-1993081102" + signature = "(B)I", + garbageValue = "7" ) @Export("rsOrdinal") public int rsOrdinal() { return this.id; } - @ObfuscatedName("a") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(IB)Lix;", - garbageValue = "0" + signature = "(IIIII)V", + garbageValue = "-242773745" ) - @Export("getObjectDefinition") - public static ObjectDefinition getObjectDefinition(int var0) { - ObjectDefinition var1 = (ObjectDefinition)ObjectDefinition.ObjectDefinition_cached.get((long)var0); - if (var1 != null) { - return var1; - } else { - byte[] var2 = ObjectDefinition.ObjectDefinition_archive.takeFile(6, var0); - var1 = new ObjectDefinition(); - var1.id = var0; - if (var2 != null) { - var1.decode(new Buffer(var2)); - } - - var1.postDecode(); - if (var1.isSolid) { - var1.interactType = 0; - var1.boolean1 = false; - } - - ObjectDefinition.ObjectDefinition_cached.put(var1, (long)var0); - return var1; + @Export("itemContainerSetItem") + static void itemContainerSetItem(int var0, int var1, int var2, int var3) { + ItemContainer var4 = (ItemContainer)ItemContainer.itemContainers.get((long)var0); + if (var4 == null) { + var4 = new ItemContainer(); + ItemContainer.itemContainers.put(var4, (long)var0); } - } - @ObfuscatedName("a") - @ObfuscatedSignature( - signature = "([Ljava/lang/CharSequence;IIB)Ljava/lang/String;", - garbageValue = "-18" - ) - public static String method4270(CharSequence[] var0, int var1, int var2) { - if (var2 == 0) { - return ""; - } else if (var2 == 1) { - CharSequence var3 = var0[var1]; - return var3 == null ? "null" : var3.toString(); - } else { - int var8 = var2 + var1; - int var4 = 0; + if (var4.ids.length <= var1) { + int[] var5 = new int[var1 + 1]; + int[] var6 = new int[var1 + 1]; - for (int var5 = var1; var5 < var8; ++var5) { - CharSequence var6 = var0[var5]; - if (var6 == null) { - var4 += 4; - } else { - var4 += var6.length(); - } + int var7; + for (var7 = 0; var7 < var4.ids.length; ++var7) { + var5[var7] = var4.ids[var7]; + var6[var7] = var4.quantities[var7]; } - StringBuilder var9 = new StringBuilder(var4); - - for (int var10 = var1; var10 < var8; ++var10) { - CharSequence var7 = var0[var10]; - if (var7 == null) { - var9.append("null"); - } else { - var9.append(var7); - } + for (var7 = var4.ids.length; var7 < var1; ++var7) { + var5[var7] = -1; + var6[var7] = 0; } - return var9.toString(); + var4.ids = var5; + var4.quantities = var6; } + + var4.ids[var1] = var2; + var4.quantities[var1] = var3; } } diff --git a/runescape-client/src/main/java/WorldMapElement.java b/runescape-client/src/main/java/WorldMapElement.java index 5bc15edd15..bddb111927 100644 --- a/runescape-client/src/main/java/WorldMapElement.java +++ b/runescape-client/src/main/java/WorldMapElement.java @@ -4,100 +4,106 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ie") +@ObfuscatedName("is") @Implements("WorldMapElement") public class WorldMapElement extends DualNode { - @ObfuscatedName("a") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lhq;" + signature = "[Lis;" ) - @Export("WorldMapElement_archive") - public static AbstractArchive WorldMapElement_archive; - @ObfuscatedName("q") + @Export("WorldMapElement_cached") + public static WorldMapElement[] WorldMapElement_cached; + @ObfuscatedName("b") + @ObfuscatedGetter( + intValue = -960089161 + ) + @Export("WorldMapElement_count") + public static int WorldMapElement_count; + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Leb;" + signature = "Lef;" ) @Export("WorldMapElement_cachedSprites") static EvictingDualNodeHashTable WorldMapElement_cachedSprites; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = -1113181625 + intValue = 1817892547 ) @Export("objectId") public final int objectId; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = -1234847171 + intValue = -410650541 ) @Export("sprite1") public int sprite1; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedGetter( - intValue = 373180553 + intValue = 840325973 ) @Export("sprite2") int sprite2; - @ObfuscatedName("o") + @ObfuscatedName("y") @Export("name") public String name; + @ObfuscatedName("w") + @ObfuscatedGetter( + intValue = -1869859287 + ) + public int field3227; @ObfuscatedName("i") @ObfuscatedGetter( - intValue = -1365135053 - ) - public int field3202; - @ObfuscatedName("d") - @ObfuscatedGetter( - intValue = -587387743 + intValue = -1786922747 ) @Export("textSize") public int textSize; - @ObfuscatedName("p") + @ObfuscatedName("x") @Export("menuActions") public String[] menuActions; - @ObfuscatedName("h") + @ObfuscatedName("o") @Export("menuTargetName") public String menuTargetName; - @ObfuscatedName("k") - int[] field3206; - @ObfuscatedName("x") + @ObfuscatedName("e") + int[] field3228; + @ObfuscatedName("n") @ObfuscatedGetter( - intValue = -1273880721 + intValue = 6619485 ) - int field3207; - @ObfuscatedName("j") - @ObfuscatedGetter( - intValue = -1661547227 - ) - int field3208; + int field3236; @ObfuscatedName("r") @ObfuscatedGetter( - intValue = 805541175 + intValue = 586150611 ) - int field3210; - @ObfuscatedName("e") + int field3230; + @ObfuscatedName("c") @ObfuscatedGetter( - intValue = 1594590229 + intValue = 1667991799 ) - int field3209; - @ObfuscatedName("s") + int field3234; + @ObfuscatedName("a") + @ObfuscatedGetter( + intValue = 165335677 + ) + int field3226; + @ObfuscatedName("d") @ObfuscatedSignature( - signature = "Lin;" + signature = "Lip;" ) @Export("horizontalAlignment") public HorizontalAlignment horizontalAlignment; - @ObfuscatedName("b") + @ObfuscatedName("s") @ObfuscatedSignature( signature = "Lik;" ) @Export("verticalAlignment") public VerticalAlignment verticalAlignment; - @ObfuscatedName("z") - int[] field3213; - @ObfuscatedName("f") - byte[] field3214; - @ObfuscatedName("g") + @ObfuscatedName("t") + int[] field3235; + @ObfuscatedName("m") + byte[] field3217; + @ObfuscatedName("v") @ObfuscatedGetter( - intValue = -1671485553 + intValue = -12980215 ) @Export("category") public int category; @@ -111,20 +117,20 @@ public class WorldMapElement extends DualNode { this.sprite2 = -1; this.textSize = 0; this.menuActions = new String[5]; - this.field3207 = Integer.MAX_VALUE; - this.field3208 = Integer.MAX_VALUE; - this.field3210 = Integer.MIN_VALUE; - this.field3209 = Integer.MIN_VALUE; + this.field3236 = Integer.MAX_VALUE; + this.field3230 = Integer.MAX_VALUE; + this.field3234 = Integer.MIN_VALUE; + this.field3226 = Integer.MIN_VALUE; this.horizontalAlignment = HorizontalAlignment.HorizontalAlignment_centered; this.verticalAlignment = VerticalAlignment.VerticalAlignment_centered; this.category = -1; this.objectId = var1; } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Lkc;B)V", - garbageValue = "-120" + signature = "(Lkg;I)V", + garbageValue = "-1289247667" ) @Export("decode") public void decode(Buffer var1) { @@ -138,21 +144,21 @@ public class WorldMapElement extends DualNode { } } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Lkc;II)V", - garbageValue = "-1243496491" + signature = "(Lkg;II)V", + garbageValue = "946718360" ) @Export("decodeNext") void decodeNext(Buffer var1, int var2) { if (var2 == 1) { - this.sprite1 = var1.method5638(); + this.sprite1 = var1.method5618(); } else if (var2 == 2) { - this.sprite2 = var1.method5638(); + this.sprite2 = var1.method5618(); } else if (var2 == 3) { this.name = var1.readStringCp1252NullTerminated(); } else if (var2 == 4) { - this.field3202 = var1.readMedium(); + this.field3227 = var1.readMedium(); } else if (var2 == 5) { var1.readMedium(); } else if (var2 == 6) { @@ -172,32 +178,32 @@ public class WorldMapElement extends DualNode { this.menuActions[var2 - 10] = var1.readStringCp1252NullTerminated(); } else if (var2 == 15) { var3 = var1.readUnsignedByte(); - this.field3206 = new int[var3 * 2]; + this.field3228 = new int[var3 * 2]; int var4; for (var4 = 0; var4 < var3 * 2; ++var4) { - this.field3206[var4] = var1.readShort(); + this.field3228[var4] = var1.readShort(); } var1.readInt(); var4 = var1.readUnsignedByte(); - this.field3213 = new int[var4]; + this.field3235 = new int[var4]; int var5; - for (var5 = 0; var5 < this.field3213.length; ++var5) { - this.field3213[var5] = var1.readInt(); + for (var5 = 0; var5 < this.field3235.length; ++var5) { + this.field3235[var5] = var1.readInt(); } - this.field3214 = new byte[var3]; + this.field3217 = new byte[var3]; for (var5 = 0; var5 < var3; ++var5) { - this.field3214[var5] = var1.readByte(); + this.field3217[var5] = var1.readByte(); } } else if (var2 != 16) { if (var2 == 17) { this.menuTargetName = var1.readStringCp1252NullTerminated(); } else if (var2 == 18) { - var1.method5638(); + var1.method5618(); } else if (var2 == 19) { this.category = var1.readUnsignedShort(); } else if (var2 == 21) { @@ -212,49 +218,48 @@ public class WorldMapElement extends DualNode { var1.readShort(); var1.readShort(); } else if (var2 == 25) { - var1.method5638(); + var1.method5618(); } else if (var2 == 28) { var1.readUnsignedByte(); } else if (var2 == 29) { - HorizontalAlignment[] var6 = new HorizontalAlignment[]{HorizontalAlignment.field3449, HorizontalAlignment.HorizontalAlignment_centered, HorizontalAlignment.field3447}; - this.horizontalAlignment = (HorizontalAlignment)WorldMapIcon_1.findEnumerated(var6, var1.readUnsignedByte()); + HorizontalAlignment[] var6 = new HorizontalAlignment[]{HorizontalAlignment.field3458, HorizontalAlignment.field3462, HorizontalAlignment.HorizontalAlignment_centered}; + this.horizontalAlignment = (HorizontalAlignment)CollisionMap.findEnumerated(var6, var1.readUnsignedByte()); } else if (var2 == 30) { - VerticalAlignment[] var7 = new VerticalAlignment[]{VerticalAlignment.field3182, VerticalAlignment.VerticalAlignment_centered, VerticalAlignment.field3183}; - this.verticalAlignment = (VerticalAlignment)WorldMapIcon_1.findEnumerated(var7, var1.readUnsignedByte()); + this.verticalAlignment = (VerticalAlignment)CollisionMap.findEnumerated(ArchiveLoader.method1177(), var1.readUnsignedByte()); } } } } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "-92" + signature = "(I)V", + garbageValue = "147472747" ) - public void method4533() { - if (this.field3206 != null) { - for (int var1 = 0; var1 < this.field3206.length; var1 += 2) { - if (this.field3206[var1] < this.field3207) { - this.field3207 = this.field3206[var1]; - } else if (this.field3206[var1] > this.field3210) { - this.field3210 = this.field3206[var1]; + public void method4461() { + if (this.field3228 != null) { + for (int var1 = 0; var1 < this.field3228.length; var1 += 2) { + if (this.field3228[var1] < this.field3236) { + this.field3236 = this.field3228[var1]; + } else if (this.field3228[var1] > this.field3234) { + this.field3234 = this.field3228[var1]; } - if (this.field3206[var1 + 1] < this.field3208) { - this.field3208 = this.field3206[var1 + 1]; - } else if (this.field3206[var1 + 1] > this.field3209) { - this.field3209 = this.field3206[var1 + 1]; + if (this.field3228[var1 + 1] < this.field3230) { + this.field3230 = this.field3228[var1 + 1]; + } else if (this.field3228[var1 + 1] > this.field3226) { + this.field3226 = this.field3228[var1 + 1]; } } } } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(ZI)Llx;", - garbageValue = "-1029203839" + signature = "(ZI)Lln;", + garbageValue = "-39142083" ) @Export("getSpriteBool") public Sprite getSpriteBool(boolean var1) { @@ -262,10 +267,10 @@ public class WorldMapElement extends DualNode { return this.getSprite(var2); } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(II)Llx;", - garbageValue = "-2136514636" + signature = "(IB)Lln;", + garbageValue = "-80" ) @Export("getSprite") Sprite getSprite(int var1) { @@ -276,7 +281,7 @@ public class WorldMapElement extends DualNode { if (var2 != null) { return var2; } else { - var2 = MenuAction.SpriteBuffer_getSprite(WorldMapElement_archive, var1, 0); + var2 = class288.SpriteBuffer_getSprite(class223.WorldMapElement_archive, var1, 0); if (var2 != null) { WorldMapElement_cachedSprites.put(var2, (long)var1); } @@ -286,57 +291,42 @@ public class WorldMapElement extends DualNode { } } - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "(I)I", - garbageValue = "-2112265635" + signature = "(S)I", + garbageValue = "2047" ) @Export("getObjectId") public int getObjectId() { return this.objectId; } - @ObfuscatedName("p") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(CI)Z", - garbageValue = "1603440113" + signature = "(CI)C", + garbageValue = "1312574148" ) - @Export("isCharPrintable") - public static boolean isCharPrintable(char var0) { - if (var0 >= ' ' && var0 <= '~') { - return true; - } else if (var0 >= 160 && var0 <= 255) { - return true; - } else { - return var0 == 8364 || var0 == 338 || var0 == 8212 || var0 == 339 || var0 == 376; - } + static char method4483(char var0) { + return var0 != 181 && var0 != 402 ? Character.toTitleCase(var0) : var0; } - @ObfuscatedName("lu") + @ObfuscatedName("ix") @ObfuscatedSignature( - signature = "(Ljava/lang/String;ZB)Ljava/lang/String;", - garbageValue = "46" + signature = "(II)Ljava/lang/String;", + garbageValue = "937254693" ) - static String method4547(String var0, boolean var1) { - String var2 = var1 ? "https://" : "http://"; - if (Client.gameBuild == 1) { - var0 = var0 + "-wtrc"; - } else if (Client.gameBuild == 2) { - var0 = var0 + "-wtqa"; - } else if (Client.gameBuild == 3) { - var0 = var0 + "-wtwip"; - } else if (Client.gameBuild == 5) { - var0 = var0 + "-wti"; - } else if (Client.gameBuild == 4) { - var0 = "local"; + @Export("formatItemStacks") + static final String formatItemStacks(int var0) { + String var1 = Integer.toString(var0); + + for (int var2 = var1.length() - 3; var2 > 0; var2 -= 3) { + var1 = var1.substring(0, var2) + "," + var1.substring(var2); } - String var3 = ""; - if (MilliClock.field1994 != null) { - var3 = "/p=" + MilliClock.field1994; + if (var1.length() > 9) { + return " " + class222.colorStartTag(65408) + var1.substring(0, var1.length() - 8) + "M" + " " + " (" + var1 + ")" + ""; + } else { + return var1.length() > 6 ? " " + class222.colorStartTag(16777215) + var1.substring(0, var1.length() - 4) + "K" + " " + " (" + var1 + ")" + "" : " " + class222.colorStartTag(16776960) + var1 + ""; } - - String var4 = "runescape.com"; - return var2 + var0 + "." + var4 + "/l=" + WorldMapSection1.clientLanguage + "/a=" + class339.field4041 + var3 + "/"; } } diff --git a/runescape-client/src/main/java/WorldMapEvent.java b/runescape-client/src/main/java/WorldMapEvent.java index f589e7b00f..c7471e7a79 100644 --- a/runescape-client/src/main/java/WorldMapEvent.java +++ b/runescape-client/src/main/java/WorldMapEvent.java @@ -1,33 +1,35 @@ +import java.io.IOException; +import java.net.Socket; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("au") +@ObfuscatedName("at") @Implements("WorldMapEvent") public class WorldMapEvent { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedGetter( - intValue = 945320021 + intValue = -2127525977 ) @Export("mapElement") public int mapElement; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lhf;" + signature = "Lhx;" ) @Export("coord1") public Coord coord1; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Lhf;" + signature = "Lhx;" ) @Export("coord2") public Coord coord2; @ObfuscatedSignature( - signature = "(ILhf;Lhf;)V" + signature = "(ILhx;Lhx;)V" ) public WorldMapEvent(int var1, Coord var2, Coord var3) { this.mapElement = var1; @@ -35,17 +37,29 @@ public class WorldMapEvent { this.coord2 = var3; } - @ObfuscatedName("ga") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(IIB)V", - garbageValue = "87" + signature = "(Lbp;Lbp;IZIZI)I", + garbageValue = "-965478315" ) - @Export("playSoundJingle") - static void playSoundJingle(int var0, int var1) { - if (Client.musicVolume != 0 && var0 != -1) { - MusicPatchNode2.playMusicTrack(Decimator.archive11, var0, 0, Client.musicVolume, false); - Client.field855 = true; + static int method782(World var0, World var1, int var2, boolean var3, int var4, boolean var5) { + int var6 = UserComparator10.compareWorlds(var0, var1, var2, var3); + if (var6 != 0) { + return var3 ? -var6 : var6; + } else if (var4 == -1) { + return 0; + } else { + int var7 = UserComparator10.compareWorlds(var0, var1, var4, var5); + return var5 ? -var7 : var7; } + } + @ObfuscatedName("l") + @ObfuscatedSignature( + signature = "(Ljava/net/Socket;III)Lkn;", + garbageValue = "753193132" + ) + public static AbstractSocket method783(Socket var0, int var1, int var2) throws IOException { + return new BufferedNetSocket(var0, var1, var2); } } diff --git a/runescape-client/src/main/java/WorldMapID.java b/runescape-client/src/main/java/WorldMapID.java index 62bf996c36..72671b50ae 100644 --- a/runescape-client/src/main/java/WorldMapID.java +++ b/runescape-client/src/main/java/WorldMapID.java @@ -4,60 +4,106 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ag") +@ObfuscatedName("ao") @Implements("WorldMapID") public class WorldMapID { - @ObfuscatedName("a") + @ObfuscatedName("po") + @Export("ClanChat_inClanChat") + static boolean ClanChat_inClanChat; + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lag;" + signature = "Lao;" ) - static final WorldMapID field259; - @ObfuscatedName("t") + static final WorldMapID field268; + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lag;" + signature = "Lao;" ) - static final WorldMapID field257; - @ObfuscatedName("i") - @ObfuscatedGetter( - intValue = 1391599195 - ) - static int field260; - @ObfuscatedName("at") - @Export("client") - @ObfuscatedSignature( - signature = "Lclient;" - ) - static Client client; - @ObfuscatedName("dk") + static final WorldMapID field264; + @ObfuscatedName("dt") @ObfuscatedSignature( signature = "Lij;" ) - @Export("archive10") - static Archive archive10; - @ObfuscatedName("n") + @Export("archive3") + static Archive archive3; + @ObfuscatedName("fk") + @ObfuscatedSignature( + signature = "Lkf;" + ) + @Export("WorldMapElement_fonts") + static Fonts WorldMapElement_fonts; + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = -679981673 + intValue = -1597448419 ) @Export("value") final int value; static { - field259 = new WorldMapID(0); - field257 = new WorldMapID(1); + field268 = new WorldMapID(0); + field264 = new WorldMapID(1); } WorldMapID(int var1) { this.value = var1; } - @ObfuscatedName("fg") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Lij;Ljava/lang/String;I)V", - garbageValue = "1051917503" + signature = "(II)I", + garbageValue = "2011689467" ) - static void method610(Archive var0, String var1) { - ArchiveLoader var2 = new ArchiveLoader(var0, var1); - Client.archiveLoaders.add(var2); - Client.field903 += var2.groupCount; + public static int method566(int var0) { + --var0; + var0 |= var0 >>> 1; + var0 |= var0 >>> 2; + var0 |= var0 >>> 4; + var0 |= var0 >>> 8; + var0 |= var0 >>> 16; + return var0 + 1; + } + + @ObfuscatedName("kl") + @ObfuscatedSignature( + signature = "(Lhl;I)Z", + garbageValue = "1728709220" + ) + static final boolean method567(Widget var0) { + int var1 = var0.contentType; + if (var1 == 205) { + Client.logoutTimer = 250; + return true; + } else { + int var2; + int var3; + if (var1 >= 300 && var1 <= 313) { + var2 = (var1 - 300) / 2; + var3 = var1 & 1; + Client.playerAppearance.changeAppearance(var2, var3 == 1); + } + + if (var1 >= 314 && var1 <= 323) { + var2 = (var1 - 314) / 2; + var3 = var1 & 1; + Client.playerAppearance.method4068(var2, var3 == 1); + } + + if (var1 == 324) { + Client.playerAppearance.changeSex(false); + } + + if (var1 == 325) { + Client.playerAppearance.changeSex(true); + } + + if (var1 == 326) { + PacketBufferNode var4 = ModelData0.getPacketBufferNode(ClientPacket.field2322, Client.packetWriter.isaacCipher); + Client.playerAppearance.write(var4.packetBuffer); + Client.packetWriter.addNode(var4); + return true; + } else { + return false; + } + } } } diff --git a/runescape-client/src/main/java/WorldMapIcon_0.java b/runescape-client/src/main/java/WorldMapIcon_0.java index ec8e2c7313..af74b593b0 100644 --- a/runescape-client/src/main/java/WorldMapIcon_0.java +++ b/runescape-client/src/main/java/WorldMapIcon_0.java @@ -4,42 +4,53 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("s") +@ObfuscatedName("d") @Implements("WorldMapIcon_0") public class WorldMapIcon_0 extends AbstractWorldMapIcon { - @ObfuscatedName("a") + @ObfuscatedName("t") + public static String field131; + @ObfuscatedName("eh") @ObfuscatedGetter( - intValue = 445280929 + intValue = 720171421 + ) + @Export("port3") + static int port3; + @ObfuscatedName("gx") + @Export("xteaKeys") + static int[][] xteaKeys; + @ObfuscatedName("u") + @ObfuscatedGetter( + intValue = 1743201389 ) @Export("element") final int element; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lar;" + signature = "Lam;" ) @Export("label") final WorldMapLabel label; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = 106254271 + intValue = 1823460023 ) @Export("subWidth") final int subWidth; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = -1418810221 + intValue = -1703496191 ) @Export("subHeight") final int subHeight; @ObfuscatedSignature( - signature = "(Lhf;Lhf;ILar;)V" + signature = "(Lhx;Lhx;ILam;)V" ) WorldMapIcon_0(Coord var1, Coord var2, int var3, WorldMapLabel var4) { super(var1, var2); this.element = var3; this.label = var4; - WorldMapElement var5 = class65.WorldMapElement_get(this.getElement()); + WorldMapElement var5 = Varcs.WorldMapElement_get(this.getElement()); Sprite var6 = var5.getSpriteBool(false); if (var6 != null) { this.subWidth = var6.subWidth; @@ -51,203 +62,133 @@ public class WorldMapIcon_0 extends AbstractWorldMapIcon { } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "(I)I", - garbageValue = "-1878632225" + garbageValue = "-871583687" ) @Export("getElement") public int getElement() { return this.element; } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(I)Lar;", - garbageValue = "-77909992" + signature = "(I)Lam;", + garbageValue = "969160497" ) @Export("getLabel") WorldMapLabel getLabel() { return this.label; } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( signature = "(I)I", - garbageValue = "60677286" + garbageValue = "-55298135" ) @Export("getSubWidth") int getSubWidth() { return this.subWidth; } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( signature = "(B)I", - garbageValue = "-92" + garbageValue = "-51" ) @Export("getSubHeight") int getSubHeight() { return this.subHeight; } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "([BB)Lcj;", - garbageValue = "47" + signature = "(Lij;II)V", + garbageValue = "1850991099" ) - @Export("newScript") - static Script newScript(byte[] var0) { - Script var1 = new Script(); - Buffer var2 = new Buffer(var0); - var2.offset = var2.array.length - 2; - int var3 = var2.readUnsignedShort(); - int var4 = var2.array.length - 2 - var3 - 12; - var2.offset = var4; - int var5 = var2.readInt(); - var1.localIntCount = var2.readUnsignedShort(); - var1.localStringCount = var2.readUnsignedShort(); - var1.intArgumentCount = var2.readUnsignedShort(); - var1.stringArgumentCount = var2.readUnsignedShort(); - int var6 = var2.readUnsignedByte(); - int var7; - int var8; - if (var6 > 0) { - var1.switches = var1.newIterableNodeHashTable(var6); - - for (var7 = 0; var7 < var6; ++var7) { - var8 = var2.readUnsignedShort(); - int var9; - int var11; - if (var8 > 0) { - var11 = var8 - 1; - var11 |= var11 >>> 1; - var11 |= var11 >>> 2; - var11 |= var11 >>> 4; - var11 |= var11 >>> 8; - var11 |= var11 >>> 16; - int var10 = var11 + 1; - var9 = var10; - } else { - var9 = 1; - } - - IterableNodeHashTable var13 = new IterableNodeHashTable(var9); - var1.switches[var7] = var13; - - while (var8-- > 0) { - var11 = var2.readInt(); - int var12 = var2.readInt(); - var13.put(new IntegerNode(var12), (long)var11); - } - } - } - - var2.offset = 0; - var2.readStringCp1252NullTerminatedOrNull(); - var1.opcodes = new int[var5]; - var1.intOperands = new int[var5]; - var1.stringOperands = new String[var5]; - - for (var7 = 0; var2.offset < var4; var1.opcodes[var7++] = var8) { - var8 = var2.readUnsignedShort(); - if (var8 == 3) { - var1.stringOperands[var7] = var2.readStringCp1252NullTerminated(); - } else if (var8 < 100 && var8 != 21 && var8 != 38 && var8 != 39) { - var1.intOperands[var7] = var2.readInt(); - } else { - var1.intOperands[var7] = var2.readUnsignedByte(); - } - } - - return var1; - } - - @ObfuscatedName("v") - @ObfuscatedSignature( - signature = "(ILhq;IIIZB)V", - garbageValue = "-27" - ) - public static void method253(int var0, AbstractArchive var1, int var2, int var3, int var4, boolean var5) { - class197.field2377 = 1; - class247.musicTrackArchive = var1; - class189.musicTrackGroupId = var2; - class197.musicTrackFileId = var3; - class197.musicTrackVolume = var4; - ScriptFrame.musicTrackBoolean = var5; - class197.field2384 = var0; - } - - @ObfuscatedName("l") - @ObfuscatedSignature( - signature = "(Ljava/lang/CharSequence;I)I", - garbageValue = "-50588493" - ) - @Export("hashString") - public static int hashString(CharSequence var0) { - int var1 = var0.length(); - int var2 = 0; - - for (int var3 = 0; var3 < var1; ++var3) { - var2 = (var2 << 5) - var2 + WorldMapData_1.charToByteCp1252(var0.charAt(var3)); - } - - return var2; - } - - @ObfuscatedName("l") - @ObfuscatedSignature( - signature = "(II)V", - garbageValue = "427121780" - ) - static void method252(int var0) { - ItemContainer var1 = (ItemContainer)ItemContainer.itemContainers.get((long)var0); - if (var1 != null) { - var1.remove(); - } - } - - @ObfuscatedName("ky") - @ObfuscatedSignature( - signature = "(Lhi;I)Z", - garbageValue = "-1282406799" - ) - static final boolean method237(Widget var0) { - int var1 = var0.contentType; - if (var1 == 205) { - Client.logoutTimer = 250; - return true; + static void method224(Archive var0, int var1) { + if (class83.NetCache_reference != null) { + class83.NetCache_reference.offset = var1 * 8 + 5; + int var2 = class83.NetCache_reference.readInt(); + int var3 = class83.NetCache_reference.readInt(); + var0.loadIndex(var2, var3); } else { - int var2; - int var3; - if (var1 >= 300 && var1 <= 313) { - var2 = (var1 - 300) / 2; - var3 = var1 & 1; - Client.playerAppearance.changeAppearance(var2, var3 == 1); - } + ClientPreferences.requestNetFile((Archive)null, 255, 255, 0, (byte)0, true); + NetCache.NetCache_archives[var1] = var0; + } + } - if (var1 >= 314 && var1 <= 323) { - var2 = (var1 - 314) / 2; - var3 = var1 & 1; - Client.playerAppearance.method4156(var2, var3 == 1); - } + @ObfuscatedName("jr") + @ObfuscatedSignature( + signature = "([Lhl;IB)V", + garbageValue = "0" + ) + @Export("runComponentCloseListeners") + static final void runComponentCloseListeners(Widget[] var0, int var1) { + for (int var2 = 0; var2 < var0.length; ++var2) { + Widget var3 = var0[var2]; + if (var3 != null) { + if (var3.type == 0) { + if (var3.children != null) { + runComponentCloseListeners(var3.children, var1); + } - if (var1 == 324) { - Client.playerAppearance.changeSex(false); - } + InterfaceParent var4 = (InterfaceParent)Client.interfaceParents.get((long)var3.id); + if (var4 != null) { + GrandExchangeEvents.runIntfCloseListeners(var4.group, var1); + } + } - if (var1 == 325) { - Client.playerAppearance.changeSex(true); - } + ScriptEvent var5; + if (var1 == 0 && var3.onDialogAbort != null) { + var5 = new ScriptEvent(); + var5.widget = var3; + var5.args = var3.onDialogAbort; + WorldMapLabel.runScriptEvent(var5); + } - if (var1 == 326) { - PacketBufferNode var4 = SoundSystem.getPacketBufferNode(ClientPacket.field2264, Client.packetWriter.isaacCipher); - Client.playerAppearance.write(var4.packetBuffer); - Client.packetWriter.addNode(var4); - return true; - } else { - return false; + if (var1 == 1 && var3.onSubChange != null) { + if (var3.childIndex >= 0) { + Widget var6 = Language.getWidget(var3.id); + if (var6 == null || var6.children == null || var3.childIndex >= var6.children.length || var3 != var6.children[var3.childIndex]) { + continue; + } + } + + var5 = new ScriptEvent(); + var5.widget = var3; + var5.args = var3.onSubChange; + WorldMapLabel.runScriptEvent(var5); + } } } + + } + + @ObfuscatedName("kw") + @ObfuscatedSignature( + signature = "(IIIILln;Lhn;B)V", + garbageValue = "-95" + ) + @Export("worldToMinimap") + static final void worldToMinimap(int var0, int var1, int var2, int var3, Sprite var4, SpriteMask var5) { + int var6 = var3 * var3 + var2 * var2; + if (var6 > 4225 && var6 < 90000) { + int var7 = Client.camAngleY & 2047; + int var8 = Rasterizer3D.Rasterizer3D_sine[var7]; + int var9 = Rasterizer3D.Rasterizer3D_cosine[var7]; + int var10 = var9 * var2 + var3 * var8 >> 16; + int var11 = var3 * var9 - var8 * var2 >> 16; + double var12 = Math.atan2((double)var10, (double)var11); + int var14 = var5.width / 2 - 25; + int var15 = (int)(Math.sin(var12) * (double)var14); + int var16 = (int)(Math.cos(var12) * (double)var14); + byte var17 = 20; + class225.redHintArrowSprite.method6200(var15 + (var0 + var5.width / 2 - var17 / 2), var5.height / 2 + var1 - var17 / 2 - var16 - 10, var17, var17, 15, 15, var12, 256); + } else { + class185.drawSpriteOnMinimap(var0, var1, var2, var3, var4, var5); + } + } } diff --git a/runescape-client/src/main/java/WorldMapIcon_1.java b/runescape-client/src/main/java/WorldMapIcon_1.java index ac534085c4..f7c86d0931 100644 --- a/runescape-client/src/main/java/WorldMapIcon_1.java +++ b/runescape-client/src/main/java/WorldMapIcon_1.java @@ -1,51 +1,52 @@ +import java.util.Iterator; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("w") +@ObfuscatedName("q") @Implements("WorldMapIcon_1") public class WorldMapIcon_1 extends AbstractWorldMapIcon { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedGetter( - intValue = 129403551 + intValue = -2092116219 ) @Export("objectDefId") final int objectDefId; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Laq;" + signature = "Lai;" ) @Export("region") final WorldMapRegion region; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = -774334227 + intValue = 1422868001 ) @Export("element") int element; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Lar;" + signature = "Lam;" ) @Export("label") WorldMapLabel label; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = -246439835 + intValue = -900902157 ) @Export("subWidth") int subWidth; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = -1431818505 + intValue = -673960603 ) @Export("subHeight") int subHeight; @ObfuscatedSignature( - signature = "(Lhf;Lhf;ILaq;)V" + signature = "(Lhx;Lhx;ILai;)V" ) WorldMapIcon_1(Coord var1, Coord var2, int var3, WorldMapRegion var4) { super(var1, var2); @@ -54,56 +55,56 @@ public class WorldMapIcon_1 extends AbstractWorldMapIcon { this.init(); } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "(I)I", - garbageValue = "-1878632225" + garbageValue = "-871583687" ) @Export("getElement") public int getElement() { return this.element; } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(I)Lar;", - garbageValue = "-77909992" + signature = "(I)Lam;", + garbageValue = "969160497" ) @Export("getLabel") WorldMapLabel getLabel() { return this.label; } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( signature = "(I)I", - garbageValue = "60677286" + garbageValue = "-55298135" ) @Export("getSubWidth") int getSubWidth() { return this.subWidth; } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( signature = "(B)I", - garbageValue = "-92" + garbageValue = "-51" ) @Export("getSubHeight") int getSubHeight() { return this.subHeight; } - @ObfuscatedName("k") + @ObfuscatedName("o") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "55" + signature = "(I)V", + garbageValue = "1280762110" ) @Export("init") void init() { - this.element = WorldMapDecorationType.getObjectDefinition(this.objectDefId).transform().mapIconId; - this.label = this.region.createMapLabel(class65.WorldMapElement_get(this.element)); - WorldMapElement var1 = class65.WorldMapElement_get(this.getElement()); + this.element = Occluder.getObjectDefinition(this.objectDefId).transform().mapIconId; + this.label = this.region.createMapLabel(Varcs.WorldMapElement_get(this.element)); + WorldMapElement var1 = Varcs.WorldMapElement_get(this.getElement()); Sprite var2 = var1.getSpriteBool(false); if (var2 != null) { this.subWidth = var2.subWidth; @@ -115,196 +116,96 @@ public class WorldMapIcon_1 extends AbstractWorldMapIcon { } - @ObfuscatedName("a") + @ObfuscatedName("aq") @ObfuscatedSignature( - signature = "([Lgy;IS)Lgy;", - garbageValue = "9030" + signature = "(IB)I", + garbageValue = "80" ) - @Export("findEnumerated") - public static Enumerated findEnumerated(Enumerated[] var0, int var1) { - Enumerated[] var2 = var0; - - for (int var3 = 0; var3 < var2.length; ++var3) { - Enumerated var4 = var2[var3]; - if (var1 == var4.rsOrdinal()) { - return var4; - } - } - - return null; + static int method309(int var0) { + return (int)Math.pow(2.0D, (double)((float)var0 / 256.0F + 7.0F)); } - @ObfuscatedName("t") + @ObfuscatedName("gx") @ObfuscatedSignature( - signature = "(IIII)Lcj;", - garbageValue = "-1901279289" + signature = "(Ljava/lang/String;ZI)V", + garbageValue = "58684745" ) - @Export("getWorldMapScript") - static Script getWorldMapScript(int var0, int var1, int var2) { - int var3 = (var1 << 8) + var0; - Script var6 = (Script)Script.Script_cached.get((long)(var3 << 16)); - Script var5; - if (var6 != null) { - var5 = var6; - } else { - String var7 = String.valueOf(var3); - int var8 = Occluder.archive12.getGroupId(var7); - if (var8 == -1) { - var5 = null; + @Export("drawLoadingMessage") + static final void drawLoadingMessage(String var0, boolean var1) { + if (Client.showLoadingMessages) { + byte var2 = 4; + int var3 = var2 + 6; + int var4 = var2 + 6; + int var5 = Player.fontPlain12.lineWidth(var0, 250); + int var6 = Player.fontPlain12.lineCount(var0, 250) * 13; + Rasterizer2D.Rasterizer2D_fillRectangle(var3 - var2, var4 - var2, var2 + var5 + var2, var2 + var6 + var2, 0); + Rasterizer2D.Rasterizer2D_drawRectangle(var3 - var2, var4 - var2, var2 + var5 + var2, var6 + var2 + var2, 16777215); + Player.fontPlain12.drawLines(var0, var3, var4, var5, var6, 16777215, -1, 1, 1, 0); + int var7 = var3 - var2; + int var8 = var4 - var2; + int var9 = var2 + var5 + var2; + int var10 = var2 + var6 + var2; + + int var11; + for (var11 = 0; var11 < Client.rootWidgetCount; ++var11) { + if (Client.rootWidgetWidths[var11] + Client.rootWidgetXs[var11] > var7 && Client.rootWidgetXs[var11] < var9 + var7 && Client.rootWidgetYs[var11] + Client.rootWidgetHeights[var11] > var8 && Client.rootWidgetYs[var11] < var10 + var8) { + Client.field847[var11] = true; + } + } + + if (var1) { + DirectByteArrayCopier.rasterProvider.drawFull(0, 0); } else { - label56: { - byte[] var9 = Occluder.archive12.takeFileFlat(var8); - if (var9 != null) { - if (var9.length <= 1) { - var5 = null; - break label56; - } + var11 = var3; + int var12 = var4; + int var13 = var5; + int var14 = var6; - var6 = WorldMapIcon_0.newScript(var9); - if (var6 != null) { - Script.Script_cached.put(var6, (long)(var3 << 16)); - var5 = var6; - break label56; - } + for (int var15 = 0; var15 < Client.rootWidgetCount; ++var15) { + if (Client.rootWidgetXs[var15] + Client.rootWidgetWidths[var15] > var11 && Client.rootWidgetXs[var15] < var13 + var11 && Client.rootWidgetYs[var15] + Client.rootWidgetHeights[var15] > var12 && Client.rootWidgetYs[var15] < var14 + var12) { + Client.field837[var15] = true; } - - var5 = null; - } - } - } - - if (var5 != null) { - return var5; - } else { - int var13 = (var2 + 40000 << 8) + var0; - Script var15 = (Script)Script.Script_cached.get((long)(var13 << 16)); - Script var14; - if (var15 != null) { - var14 = var15; - } else { - String var10 = String.valueOf(var13); - int var11 = Occluder.archive12.getGroupId(var10); - if (var11 == -1) { - var14 = null; - } else { - byte[] var12 = Occluder.archive12.takeFileFlat(var11); - if (var12 != null) { - if (var12.length <= 1) { - var14 = null; - return var14 != null ? var14 : null; - } - - var15 = WorldMapIcon_0.newScript(var12); - if (var15 != null) { - Script.Script_cached.put(var15, (long)(var13 << 16)); - var14 = var15; - return var14 != null ? var14 : null; - } - } - - var14 = null; - } - } - - return var14 != null ? var14 : null; - } - } - - @ObfuscatedName("q") - @ObfuscatedSignature( - signature = "(II)Lbt;", - garbageValue = "1340255179" - ) - @Export("Messages_getMessage") - static Message Messages_getMessage(int var0) { - return (Message)Messages.Messages_hashTable.get((long)var0); - } - - @ObfuscatedName("o") - @ObfuscatedSignature( - signature = "(Lkc;J)V" - ) - static void method354(Buffer var0, long var1) { - var1 /= 10L; - if (var1 < 0L) { - var1 = 0L; - } else if (var1 > 65535L) { - var1 = 65535L; - } - - var0.writeShort((int)var1); - } - - @ObfuscatedName("j") - @ObfuscatedSignature( - signature = "(Ljava/lang/String;I)V", - garbageValue = "-318673135" - ) - static final void method355(String var0) { - StringBuilder var10000 = new StringBuilder(); - Object var10001 = null; - var10000 = var10000.append("Please remove ").append(var0); - var10001 = null; - String var1 = var10000.append(" from your friend list first").toString(); - class30.addGameMessage(30, "", var1); - } - - @ObfuscatedName("ge") - @ObfuscatedSignature( - signature = "(Lhi;III)V", - garbageValue = "-894965575" - ) - @Export("checkIfMinimapClicked") - static final void checkIfMinimapClicked(Widget var0, int var1, int var2) { - if (Client.minimapState == 0 || Client.minimapState == 3) { - if (!Client.isMenuOpen && (MouseHandler.MouseHandler_lastButton == 1 || !WorldMapLabelSize.mouseCam && MouseHandler.MouseHandler_lastButton == 4)) { - SpriteMask var3 = var0.getSpriteMask(true); - if (var3 == null) { - return; - } - - int var4 = MouseHandler.MouseHandler_lastPressedX - var1; - int var5 = MouseHandler.MouseHandler_lastPressedY - var2; - if (var3.contains(var4, var5)) { - var4 -= var3.width / 2; - var5 -= var3.height / 2; - int var6 = Client.camAngleY & 2047; - int var7 = Rasterizer3D.Rasterizer3D_sine[var6]; - int var8 = Rasterizer3D.Rasterizer3D_cosine[var6]; - int var9 = var5 * var7 + var4 * var8 >> 11; - int var10 = var8 * var5 - var7 * var4 >> 11; - int var11 = var9 + class215.localPlayer.x >> 7; - int var12 = class215.localPlayer.y - var10 >> 7; - PacketBufferNode var13 = SoundSystem.getPacketBufferNode(ClientPacket.field2266, Client.packetWriter.isaacCipher); - var13.packetBuffer.writeByte(18); - var13.packetBuffer.writeShort(UserComparator8.baseX * 64 + var11); - var13.packetBuffer.method5634(KeyHandler.KeyHandler_pressedKeys[82] ? (KeyHandler.KeyHandler_pressedKeys[81] ? 2 : 1) : 0); - var13.packetBuffer.writeShort(HealthBar.baseY * 64 + var12); - var13.packetBuffer.writeByte(var4); - var13.packetBuffer.writeByte(var5); - var13.packetBuffer.writeShort(Client.camAngleY); - var13.packetBuffer.writeByte(57); - var13.packetBuffer.writeByte(0); - var13.packetBuffer.writeByte(0); - var13.packetBuffer.writeByte(89); - var13.packetBuffer.writeShort(class215.localPlayer.x); - var13.packetBuffer.writeShort(class215.localPlayer.y); - var13.packetBuffer.writeByte(63); - Client.packetWriter.addNode(var13); - Client.destinationX = var11; - Client.destinationY = var12; } } } } - @ObfuscatedName("in") + @ObfuscatedName("hy") @ObfuscatedSignature( - signature = "(II)Z", - garbageValue = "-1825518437" + signature = "(III)Lfg;", + garbageValue = "1189073530" ) - static boolean method351(int var0) { - return var0 == 57 || var0 == 58 || var0 == 1007 || var0 == 25 || var0 == 30; + static RouteStrategy method321(int var0, int var1) { + Client.field915.approxDestinationX = var0; + Client.field915.approxDestinationY = var1; + Client.field915.approxDestinationSizeX = 1; + Client.field915.approxDestinationSizeY = 1; + return Client.field915; + } + + @ObfuscatedName("kf") + @ObfuscatedSignature( + signature = "(I)V", + garbageValue = "826026682" + ) + @Export("FriendSystem_invalidateFriends") + static final void FriendSystem_invalidateFriends() { + for (int var0 = 0; var0 < Players.Players_count; ++var0) { + Player var1 = Client.players[Players.Players_indices[var0]]; + var1.clearIsFriend(); + } + + Iterator var2 = Messages.Messages_hashTable.iterator(); + + while (var2.hasNext()) { + Message var3 = (Message)var2.next(); + var3.clearIsFromFriend(); + } + + if (InterfaceParent.clanChat != null) { + InterfaceParent.clanChat.clearFriends(); + } + } } diff --git a/runescape-client/src/main/java/WorldMapLabel.java b/runescape-client/src/main/java/WorldMapLabel.java index bd266f7e61..24c9950a52 100644 --- a/runescape-client/src/main/java/WorldMapLabel.java +++ b/runescape-client/src/main/java/WorldMapLabel.java @@ -1,51 +1,40 @@ +import java.net.MalformedURLException; +import java.net.URL; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ar") +@ObfuscatedName("am") @Implements("WorldMapLabel") public class WorldMapLabel { - @ObfuscatedName("qz") - @ObfuscatedGetter( - intValue = 1433449733 - ) - static int field231; - @ObfuscatedName("am") - @ObfuscatedSignature( - signature = "Lls;" - ) - static Bounds field225; - @ObfuscatedName("cu") - @ObfuscatedGetter( - intValue = -678092669 - ) - public static int field229; - @ObfuscatedName("a") + @ObfuscatedName("n") + static int[][][] field233; + @ObfuscatedName("u") @Export("text") String text; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = -1265907977 + intValue = 1976792999 ) @Export("width") int width; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = -860920669 + intValue = 916086533 ) @Export("height") int height; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Le;" + signature = "La;" ) @Export("size") WorldMapLabelSize size; @ObfuscatedSignature( - signature = "(Ljava/lang/String;IILe;)V" + signature = "(Ljava/lang/String;IILa;)V" ) WorldMapLabel(String var1, int var2, int var3, WorldMapLabelSize var4) { this.text = var1; @@ -54,228 +43,148 @@ public class WorldMapLabel { this.size = var4; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(I)I", - garbageValue = "1730606936" + signature = "(Lby;I)V", + garbageValue = "1976611888" ) - public static int method479() { - return ViewportMouse.ViewportMouse_entityCount; + @Export("runScriptEvent") + public static void runScriptEvent(ScriptEvent var0) { + GrandExchangeOfferNameComparator.runScript(var0, 500000); } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V", - garbageValue = "880731151" + signature = "(IILfg;Lfh;I)Z", + garbageValue = "1885611430" ) - @Export("addChatMessage") - static void addChatMessage(int var0, String var1, String var2, String var3) { - ChatChannel var4 = (ChatChannel)Messages.Messages_channels.get(var0); - if (var4 == null) { - var4 = new ChatChannel(); - Messages.Messages_channels.put(var0, var4); - } + static final boolean method434(int var0, int var1, RouteStrategy var2, CollisionMap var3) { + int var4 = var0; + int var5 = var1; + byte var6 = 64; + byte var7 = 64; + int var8 = var0 - var6; + int var9 = var1 - var7; + class173.directions[var6][var7] = 99; + class173.distances[var6][var7] = 0; + byte var10 = 0; + int var11 = 0; + class173.bufferX[var10] = var0; + byte var10001 = var10; + int var18 = var10 + 1; + class173.bufferY[var10001] = var1; + int[][] var12 = var3.flags; - Message var5 = var4.addMessage(var0, var1, var2, var3); - Messages.Messages_hashTable.put(var5, (long)var5.count); - Messages.Messages_queue.add(var5); - Client.chatCycle = Client.cycleCntr; - } - - @ObfuscatedName("hn") - @ObfuscatedSignature( - signature = "(III)V", - garbageValue = "1804340309" - ) - static final void method475(int var0, int var1) { - if (Client.hintArrowType == 2) { - WorldMapCacheName.worldToScreen(Client.hintArrowSubX * 64 + (Client.hintArrowX - UserComparator8.baseX * 64 << 7), Client.hintArrowSubY * 64 + (Client.hintArrowY - HealthBar.baseY * 64 << 7), Client.hintArrowHeight * 2); - if (Client.viewportTempX > -1 && Client.cycle % 20 < 10) { - class14.headIconHintSprites[0].drawTransBgAt(var0 + Client.viewportTempX - 12, Client.viewportTempY + var1 - 28); + while (var18 != var11) { + var4 = class173.bufferX[var11]; + var5 = class173.bufferY[var11]; + var11 = var11 + 1 & 4095; + int var16 = var4 - var8; + int var17 = var5 - var9; + int var13 = var4 - var3.xInset; + int var14 = var5 - var3.yInset; + if (var2.hasArrived(1, var4, var5, var3)) { + class173.field2103 = var4; + class173.field2100 = var5; + return true; } + int var15 = class173.distances[var16][var17] + 1; + if (var16 > 0 && class173.directions[var16 - 1][var17] == 0 && (var12[var13 - 1][var14] & 19136776) == 0) { + class173.bufferX[var18] = var4 - 1; + class173.bufferY[var18] = var5; + var18 = var18 + 1 & 4095; + class173.directions[var16 - 1][var17] = 2; + class173.distances[var16 - 1][var17] = var15; + } + + if (var16 < 127 && class173.directions[var16 + 1][var17] == 0 && (var12[var13 + 1][var14] & 19136896) == 0) { + class173.bufferX[var18] = var4 + 1; + class173.bufferY[var18] = var5; + var18 = var18 + 1 & 4095; + class173.directions[var16 + 1][var17] = 8; + class173.distances[var16 + 1][var17] = var15; + } + + if (var17 > 0 && class173.directions[var16][var17 - 1] == 0 && (var12[var13][var14 - 1] & 19136770) == 0) { + class173.bufferX[var18] = var4; + class173.bufferY[var18] = var5 - 1; + var18 = var18 + 1 & 4095; + class173.directions[var16][var17 - 1] = 1; + class173.distances[var16][var17 - 1] = var15; + } + + if (var17 < 127 && class173.directions[var16][var17 + 1] == 0 && (var12[var13][var14 + 1] & 19136800) == 0) { + class173.bufferX[var18] = var4; + class173.bufferY[var18] = var5 + 1; + var18 = var18 + 1 & 4095; + class173.directions[var16][var17 + 1] = 4; + class173.distances[var16][var17 + 1] = var15; + } + + if (var16 > 0 && var17 > 0 && class173.directions[var16 - 1][var17 - 1] == 0 && (var12[var13 - 1][var14 - 1] & 19136782) == 0 && (var12[var13 - 1][var14] & 19136776) == 0 && (var12[var13][var14 - 1] & 19136770) == 0) { + class173.bufferX[var18] = var4 - 1; + class173.bufferY[var18] = var5 - 1; + var18 = var18 + 1 & 4095; + class173.directions[var16 - 1][var17 - 1] = 3; + class173.distances[var16 - 1][var17 - 1] = var15; + } + + if (var16 < 127 && var17 > 0 && class173.directions[var16 + 1][var17 - 1] == 0 && (var12[var13 + 1][var14 - 1] & 19136899) == 0 && (var12[var13 + 1][var14] & 19136896) == 0 && (var12[var13][var14 - 1] & 19136770) == 0) { + class173.bufferX[var18] = var4 + 1; + class173.bufferY[var18] = var5 - 1; + var18 = var18 + 1 & 4095; + class173.directions[var16 + 1][var17 - 1] = 9; + class173.distances[var16 + 1][var17 - 1] = var15; + } + + if (var16 > 0 && var17 < 127 && class173.directions[var16 - 1][var17 + 1] == 0 && (var12[var13 - 1][var14 + 1] & 19136824) == 0 && (var12[var13 - 1][var14] & 19136776) == 0 && (var12[var13][var14 + 1] & 19136800) == 0) { + class173.bufferX[var18] = var4 - 1; + class173.bufferY[var18] = var5 + 1; + var18 = var18 + 1 & 4095; + class173.directions[var16 - 1][var17 + 1] = 6; + class173.distances[var16 - 1][var17 + 1] = var15; + } + + if (var16 < 127 && var17 < 127 && class173.directions[var16 + 1][var17 + 1] == 0 && (var12[var13 + 1][var14 + 1] & 19136992) == 0 && (var12[var13 + 1][var14] & 19136896) == 0 && (var12[var13][var14 + 1] & 19136800) == 0) { + class173.bufferX[var18] = var4 + 1; + class173.bufferY[var18] = var5 + 1; + var18 = var18 + 1 & 4095; + class173.directions[var16 + 1][var17 + 1] = 12; + class173.distances[var16 + 1][var17 + 1] = var15; + } + } + + class173.field2103 = var4; + class173.field2100 = var5; + return false; + } + + @ObfuscatedName("f") + @ObfuscatedSignature( + signature = "(Ljava/lang/String;B)Z", + garbageValue = "-25" + ) + @Export("isValidURL") + static boolean isValidURL(String var0) { + if (var0 == null) { + return false; + } else { + try { + new URL(var0); + return true; + } catch (MalformedURLException var2) { + return false; + } } } - @ObfuscatedName("hu") + @ObfuscatedName("l") @ObfuscatedSignature( - signature = "(IIIIII)V", - garbageValue = "668780509" + signature = "(Lcf;I)V", + garbageValue = "1228779335" ) - @Export("drawObject") - static final void drawObject(int var0, int var1, int var2, int var3, int var4) { - long var5 = WorldMapArea.scene.getBoundaryObjectTag(var0, var1, var2); - int var7; - int var8; - int var9; - int var10; - int var14; - int var26; - if (0L != var5) { - var7 = WorldMapArea.scene.getObjectFlags(var0, var1, var2, var5); - var8 = var7 >> 6 & 3; - var9 = var7 & 31; - var10 = var3; - boolean var12 = var5 != 0L; - if (var12) { - boolean var13 = (int)(var5 >>> 16 & 1L) == 1; - var12 = !var13; - } - - if (var12) { - var10 = var4; - } - - int[] var19 = FloorDecoration.sceneMinimapSprite.pixels; - var26 = var1 * 4 + (103 - var2) * 2048 + 24624; - var14 = UserComparator8.Entity_unpackID(var5); - ObjectDefinition var15 = WorldMapDecorationType.getObjectDefinition(var14); - if (var15.mapSceneId != -1) { - IndexedSprite var16 = GrandExchangeOfferWorldComparator.mapSceneSprites[var15.mapSceneId]; - if (var16 != null) { - int var17 = (var15.sizeX * 4 - var16.subWidth) / 2; - int var18 = (var15.sizeY * 4 - var16.subHeight) / 2; - var16.drawAt(var1 * 4 + var17 + 48, var18 + (104 - var2 - var15.sizeY) * 4 + 48); - } - } else { - if (var9 == 0 || var9 == 2) { - if (var8 == 0) { - var19[var26] = var10; - var19[var26 + 512] = var10; - var19[var26 + 1024] = var10; - var19[var26 + 1536] = var10; - } else if (var8 == 1) { - var19[var26] = var10; - var19[var26 + 1] = var10; - var19[var26 + 2] = var10; - var19[var26 + 3] = var10; - } else if (var8 == 2) { - var19[var26 + 3] = var10; - var19[var26 + 512 + 3] = var10; - var19[var26 + 1024 + 3] = var10; - var19[var26 + 1536 + 3] = var10; - } else if (var8 == 3) { - var19[var26 + 1536] = var10; - var19[var26 + 1536 + 1] = var10; - var19[var26 + 1536 + 2] = var10; - var19[var26 + 1536 + 3] = var10; - } - } - - if (var9 == 3) { - if (var8 == 0) { - var19[var26] = var10; - } else if (var8 == 1) { - var19[var26 + 3] = var10; - } else if (var8 == 2) { - var19[var26 + 1536 + 3] = var10; - } else if (var8 == 3) { - var19[var26 + 1536] = var10; - } - } - - if (var9 == 2) { - if (var8 == 3) { - var19[var26] = var10; - var19[var26 + 512] = var10; - var19[var26 + 1024] = var10; - var19[var26 + 1536] = var10; - } else if (var8 == 0) { - var19[var26] = var10; - var19[var26 + 1] = var10; - var19[var26 + 2] = var10; - var19[var26 + 3] = var10; - } else if (var8 == 1) { - var19[var26 + 3] = var10; - var19[var26 + 512 + 3] = var10; - var19[var26 + 1024 + 3] = var10; - var19[var26 + 1536 + 3] = var10; - } else if (var8 == 2) { - var19[var26 + 1536] = var10; - var19[var26 + 1536 + 1] = var10; - var19[var26 + 1536 + 2] = var10; - var19[var26 + 1536 + 3] = var10; - } - } - } - } - - var5 = WorldMapArea.scene.getGameObjectTag(var0, var1, var2); - if (var5 != 0L) { - var7 = WorldMapArea.scene.getObjectFlags(var0, var1, var2, var5); - var8 = var7 >> 6 & 3; - var9 = var7 & 31; - var10 = UserComparator8.Entity_unpackID(var5); - ObjectDefinition var20 = WorldMapDecorationType.getObjectDefinition(var10); - if (var20.mapSceneId != -1) { - IndexedSprite var28 = GrandExchangeOfferWorldComparator.mapSceneSprites[var20.mapSceneId]; - if (var28 != null) { - var26 = (var20.sizeX * 4 - var28.subWidth) / 2; - var14 = (var20.sizeY * 4 - var28.subHeight) / 2; - var28.drawAt(var26 + var1 * 4 + 48, (104 - var2 - var20.sizeY) * 4 + var14 + 48); - } - } else if (var9 == 9) { - int var25 = 15658734; - boolean var27 = var5 != 0L; - if (var27) { - boolean var23 = (int)(var5 >>> 16 & 1L) == 1; - var27 = !var23; - } - - if (var27) { - var25 = 15597568; - } - - int[] var24 = FloorDecoration.sceneMinimapSprite.pixels; - int var29 = var1 * 4 + (103 - var2) * 2048 + 24624; - if (var8 != 0 && var8 != 2) { - var24[var29] = var25; - var24[var29 + 1 + 512] = var25; - var24[var29 + 1024 + 2] = var25; - var24[var29 + 1536 + 3] = var25; - } else { - var24[var29 + 1536] = var25; - var24[var29 + 1 + 1024] = var25; - var24[var29 + 512 + 2] = var25; - var24[var29 + 3] = var25; - } - } - } - - var5 = WorldMapArea.scene.getFloorDecorationTag(var0, var1, var2); - if (var5 != 0L) { - var7 = UserComparator8.Entity_unpackID(var5); - ObjectDefinition var21 = WorldMapDecorationType.getObjectDefinition(var7); - if (var21.mapSceneId != -1) { - IndexedSprite var22 = GrandExchangeOfferWorldComparator.mapSceneSprites[var21.mapSceneId]; - if (var22 != null) { - var10 = (var21.sizeX * 4 - var22.subWidth) / 2; - int var11 = (var21.sizeY * 4 - var22.subHeight) / 2; - var22.drawAt(var1 * 4 + var10 + 48, (104 - var2 - var21.sizeY) * 4 + var11 + 48); - } - } - } - - } - - @ObfuscatedName("ks") - @ObfuscatedSignature( - signature = "(IB)V", - garbageValue = "13" - ) - @Export("Widget_resetModelFrames") - static final void Widget_resetModelFrames(int var0) { - if (TextureProvider.loadInterface(var0)) { - Widget[] var1 = Widget.Widget_interfaceComponents[var0]; - - for (int var2 = 0; var2 < var1.length; ++var2) { - Widget var3 = var1[var2]; - if (var3 != null) { - var3.modelFrame = 0; - var3.modelFrameCycle = 0; - } - } - - } + public static final void method433(class99 var0) { + Interpreter.pcmPlayerProvider = var0; } } diff --git a/runescape-client/src/main/java/WorldMapLabelSize.java b/runescape-client/src/main/java/WorldMapLabelSize.java index c9fdd6e650..1bbfe02f9d 100644 --- a/runescape-client/src/main/java/WorldMapLabelSize.java +++ b/runescape-client/src/main/java/WorldMapLabelSize.java @@ -4,311 +4,114 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("e") +@ObfuscatedName("a") @Implements("WorldMapLabelSize") public class WorldMapLabelSize { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Le;" + signature = "La;" ) @Export("WorldMapLabelSize_small") public static final WorldMapLabelSize WorldMapLabelSize_small; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Le;" + signature = "La;" ) @Export("WorldMapLabelSize_medium") public static final WorldMapLabelSize WorldMapLabelSize_medium; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Le;" + signature = "La;" ) @Export("WorldMapLabelSize_large") public static final WorldMapLabelSize WorldMapLabelSize_large; - @ObfuscatedName("cf") - @Export("mouseCam") - static boolean mouseCam; - @ObfuscatedName("q") - @ObfuscatedGetter( - intValue = -1635893433 + @ObfuscatedName("bn") + @ObfuscatedSignature( + signature = "Llg;" ) - final int field107; - @ObfuscatedName("v") + @Export("loginType") + static LoginType loginType; + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = -2014833765 + intValue = 1166565565 ) - final int field104; - @ObfuscatedName("l") + final int field115; + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = -1256789949 + intValue = -2076201751 ) - final int field105; + final int field116; + @ObfuscatedName("p") + @ObfuscatedGetter( + intValue = -1814191089 + ) + final int field118; static { - WorldMapLabelSize_small = new WorldMapLabelSize(2, 0, 4); - WorldMapLabelSize_medium = new WorldMapLabelSize(0, 1, 2); + WorldMapLabelSize_small = new WorldMapLabelSize(0, 0, 4); + WorldMapLabelSize_medium = new WorldMapLabelSize(2, 1, 2); WorldMapLabelSize_large = new WorldMapLabelSize(1, 2, 0); } WorldMapLabelSize(int var1, int var2, int var3) { - this.field107 = var1; - this.field104 = var2; - this.field105 = var3; + this.field115 = var1; + this.field116 = var2; + this.field118 = var3; } - @ObfuscatedName("a") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(FB)Z", - garbageValue = "16" + signature = "(FI)Z", + garbageValue = "-419042986" ) - boolean method234(float var1) { - return var1 >= (float)this.field105; + boolean method199(float var1) { + return var1 >= (float)this.field118; } - @ObfuscatedName("t") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(II)Le;", - garbageValue = "-2025781549" + signature = "(B)[La;", + garbageValue = "0" ) - static WorldMapLabelSize method228(int var0) { - WorldMapLabelSize[] var1 = new WorldMapLabelSize[]{WorldMapLabelSize_small, WorldMapLabelSize_medium, WorldMapLabelSize_large}; - WorldMapLabelSize[] var2 = var1; + static WorldMapLabelSize[] method200() { + return new WorldMapLabelSize[]{WorldMapLabelSize_large, WorldMapLabelSize_small, WorldMapLabelSize_medium}; + } - for (int var3 = 0; var3 < var2.length; ++var3) { - WorldMapLabelSize var4 = var2[var3]; - if (var0 == var4.field104) { - return var4; + @ObfuscatedName("u") + @ObfuscatedSignature( + signature = "(I)[Lgm;", + garbageValue = "-1817209959" + ) + @Export("ServerPacket_values") + public static ServerPacket[] ServerPacket_values() { + return new ServerPacket[]{ServerPacket.field2132, ServerPacket.field2185, ServerPacket.field2193, ServerPacket.field2134, ServerPacket.field2129, ServerPacket.field2156, ServerPacket.field2173, ServerPacket.field2135, ServerPacket.field2138, ServerPacket.field2137, ServerPacket.field2155, ServerPacket.field2163, ServerPacket.field2133, ServerPacket.field2151, ServerPacket.field2142, ServerPacket.field2143, ServerPacket.field2130, ServerPacket.field2145, ServerPacket.field2146, ServerPacket.field2199, ServerPacket.field2148, ServerPacket.field2149, ServerPacket.field2150, ServerPacket.field2141, ServerPacket.field2144, ServerPacket.field2153, ServerPacket.field2154, ServerPacket.field2198, ServerPacket.field2140, ServerPacket.field2157, ServerPacket.field2158, ServerPacket.field2159, ServerPacket.field2160, ServerPacket.field2161, ServerPacket.field2162, ServerPacket.field2184, ServerPacket.field2164, ServerPacket.field2192, ServerPacket.field2166, ServerPacket.field2167, ServerPacket.field2168, ServerPacket.field2212, ServerPacket.field2170, ServerPacket.field2171, ServerPacket.field2169, ServerPacket.field2136, ServerPacket.field2174, ServerPacket.field2175, ServerPacket.field2176, ServerPacket.field2177, ServerPacket.field2178, ServerPacket.field2179, ServerPacket.field2180, ServerPacket.field2181, ServerPacket.field2182, ServerPacket.field2183, ServerPacket.field2204, ServerPacket.field2152, ServerPacket.field2196, ServerPacket.field2187, ServerPacket.field2188, ServerPacket.field2128, ServerPacket.field2190, ServerPacket.field2191, ServerPacket.field2131, ServerPacket.field2139, ServerPacket.field2194, ServerPacket.field2165, ServerPacket.field2147, ServerPacket.field2197, ServerPacket.field2202, ServerPacket.field2172, ServerPacket.field2200, ServerPacket.field2201, ServerPacket.field2189, ServerPacket.field2203, ServerPacket.field2205, ServerPacket.field2186, ServerPacket.field2206, ServerPacket.field2207, ServerPacket.field2208, ServerPacket.field2209, ServerPacket.field2210, ServerPacket.field2211, ServerPacket.field2213, ServerPacket.field2195}; + } + + @ObfuscatedName("b") + @ObfuscatedSignature( + signature = "(II)La;", + garbageValue = "1217781091" + ) + static WorldMapLabelSize method209(int var0) { + WorldMapLabelSize[] var1 = method200(); + + for (int var2 = 0; var2 < var1.length; ++var2) { + WorldMapLabelSize var3 = var1[var2]; + if (var0 == var3.field116) { + return var3; } } return null; } - @ObfuscatedName("n") + @ObfuscatedName("lx") @ObfuscatedSignature( - signature = "(IIILfc;Lfm;I)Z", - garbageValue = "-1328272640" + signature = "(I)V", + garbageValue = "-673995874" ) - static final boolean method236(int var0, int var1, int var2, RouteStrategy var3, CollisionMap var4) { - int var5 = var0; - int var6 = var1; - byte var7 = 64; - byte var8 = 64; - int var9 = var0 - var7; - int var10 = var1 - var8; - class173.directions[var7][var8] = 99; - class173.distances[var7][var8] = 0; - byte var11 = 0; - int var12 = 0; - class173.bufferX[var11] = var0; - int var20 = var11 + 1; - class173.bufferY[var11] = var1; - int[][] var13 = var4.flags; - - while (true) { - label313: - while (true) { - int var14; - int var15; - int var16; - int var17; - int var18; - int var19; - do { - do { - do { - label290: - do { - if (var12 == var20) { - class173.field2070 = var5; - LoginScreenAnimation.field1029 = var6; - return false; - } - - var5 = class173.bufferX[var12]; - var6 = class173.bufferY[var12]; - var12 = var12 + 1 & 4095; - var18 = var5 - var9; - var19 = var6 - var10; - var14 = var5 - var4.xInset; - var15 = var6 - var4.yInset; - if (var3.hasArrived(var2, var5, var6, var4)) { - class173.field2070 = var5; - LoginScreenAnimation.field1029 = var6; - return true; - } - - var16 = class173.distances[var18][var19] + 1; - if (var18 > 0 && class173.directions[var18 - 1][var19] == 0 && (var13[var14 - 1][var15] & 19136782) == 0 && (var13[var14 - 1][var15 + var2 - 1] & 19136824) == 0) { - var17 = 1; - - while (true) { - if (var17 >= var2 - 1) { - class173.bufferX[var20] = var5 - 1; - class173.bufferY[var20] = var6; - var20 = var20 + 1 & 4095; - class173.directions[var18 - 1][var19] = 2; - class173.distances[var18 - 1][var19] = var16; - break; - } - - if ((var13[var14 - 1][var17 + var15] & 19136830) != 0) { - break; - } - - ++var17; - } - } - - if (var18 < 128 - var2 && class173.directions[var18 + 1][var19] == 0 && (var13[var14 + var2][var15] & 19136899) == 0 && (var13[var14 + var2][var15 + var2 - 1] & 19136992) == 0) { - var17 = 1; - - while (true) { - if (var17 >= var2 - 1) { - class173.bufferX[var20] = var5 + 1; - class173.bufferY[var20] = var6; - var20 = var20 + 1 & 4095; - class173.directions[var18 + 1][var19] = 8; - class173.distances[var18 + 1][var19] = var16; - break; - } - - if ((var13[var14 + var2][var17 + var15] & 19136995) != 0) { - break; - } - - ++var17; - } - } - - if (var19 > 0 && class173.directions[var18][var19 - 1] == 0 && (var13[var14][var15 - 1] & 19136782) == 0 && (var13[var14 + var2 - 1][var15 - 1] & 19136899) == 0) { - var17 = 1; - - while (true) { - if (var17 >= var2 - 1) { - class173.bufferX[var20] = var5; - class173.bufferY[var20] = var6 - 1; - var20 = var20 + 1 & 4095; - class173.directions[var18][var19 - 1] = 1; - class173.distances[var18][var19 - 1] = var16; - break; - } - - if ((var13[var14 + var17][var15 - 1] & 19136911) != 0) { - break; - } - - ++var17; - } - } - - if (var19 < 128 - var2 && class173.directions[var18][var19 + 1] == 0 && (var13[var14][var15 + var2] & 19136824) == 0 && (var13[var14 + var2 - 1][var15 + var2] & 19136992) == 0) { - var17 = 1; - - while (true) { - if (var17 >= var2 - 1) { - class173.bufferX[var20] = var5; - class173.bufferY[var20] = var6 + 1; - var20 = var20 + 1 & 4095; - class173.directions[var18][var19 + 1] = 4; - class173.distances[var18][var19 + 1] = var16; - break; - } - - if ((var13[var17 + var14][var15 + var2] & 19137016) != 0) { - break; - } - - ++var17; - } - } - - if (var18 > 0 && var19 > 0 && class173.directions[var18 - 1][var19 - 1] == 0 && (var13[var14 - 1][var15 - 1] & 19136782) == 0) { - var17 = 1; - - while (true) { - if (var17 >= var2) { - class173.bufferX[var20] = var5 - 1; - class173.bufferY[var20] = var6 - 1; - var20 = var20 + 1 & 4095; - class173.directions[var18 - 1][var19 - 1] = 3; - class173.distances[var18 - 1][var19 - 1] = var16; - break; - } - - if ((var13[var14 - 1][var17 + (var15 - 1)] & 19136830) != 0 || (var13[var17 + (var14 - 1)][var15 - 1] & 19136911) != 0) { - break; - } - - ++var17; - } - } - - if (var18 < 128 - var2 && var19 > 0 && class173.directions[var18 + 1][var19 - 1] == 0 && (var13[var14 + var2][var15 - 1] & 19136899) == 0) { - var17 = 1; - - while (true) { - if (var17 >= var2) { - class173.bufferX[var20] = var5 + 1; - class173.bufferY[var20] = var6 - 1; - var20 = var20 + 1 & 4095; - class173.directions[var18 + 1][var19 - 1] = 9; - class173.distances[var18 + 1][var19 - 1] = var16; - break; - } - - if ((var13[var14 + var2][var17 + (var15 - 1)] & 19136995) != 0 || (var13[var14 + var17][var15 - 1] & 19136911) != 0) { - break; - } - - ++var17; - } - } - - if (var18 > 0 && var19 < 128 - var2 && class173.directions[var18 - 1][var19 + 1] == 0 && (var13[var14 - 1][var15 + var2] & 19136824) == 0) { - for (var17 = 1; var17 < var2; ++var17) { - if ((var13[var14 - 1][var17 + var15] & 19136830) != 0 || (var13[var17 + (var14 - 1)][var15 + var2] & 19137016) != 0) { - continue label290; - } - } - - class173.bufferX[var20] = var5 - 1; - class173.bufferY[var20] = var6 + 1; - var20 = var20 + 1 & 4095; - class173.directions[var18 - 1][var19 + 1] = 6; - class173.distances[var18 - 1][var19 + 1] = var16; - } - } while(var18 >= 128 - var2); - } while(var19 >= 128 - var2); - } while(class173.directions[var18 + 1][var19 + 1] != 0); - } while((var13[var14 + var2][var15 + var2] & 19136992) != 0); - - for (var17 = 1; var17 < var2; ++var17) { - if ((var13[var17 + var14][var15 + var2] & 19137016) != 0 || (var13[var14 + var2][var17 + var15] & 19136995) != 0) { - continue label313; - } - } - - class173.bufferX[var20] = var5 + 1; - class173.bufferY[var20] = var6 + 1; - var20 = var20 + 1 & 4095; - class173.directions[var18 + 1][var19 + 1] = 12; - class173.distances[var18 + 1][var19 + 1] = var16; - } - } - } - - @ObfuscatedName("fj") - @ObfuscatedSignature( - signature = "(ZB)V", - garbageValue = "-93" - ) - static final void method235(boolean var0) { - if (var0) { - Client.field850 = Login.field1177 ? class160.field1987 : class160.field1985; - } else { - Client.field850 = ScriptEvent.clientPreferences.parameters.containsKey(GrandExchangeEvents.method108(Login.Login_username)) ? class160.field1986 : class160.field1982; - } - + static void method208() { + Client.packetWriter.addNode(ModelData0.getPacketBufferNode(ClientPacket.field2272, Client.packetWriter.isaacCipher)); + Client.oculusOrbState = 0; } } diff --git a/runescape-client/src/main/java/WorldMapManager.java b/runescape-client/src/main/java/WorldMapManager.java index 088f3c2395..ae1d624e30 100644 --- a/runescape-client/src/main/java/WorldMapManager.java +++ b/runescape-client/src/main/java/WorldMapManager.java @@ -9,108 +9,99 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ax") +@ObfuscatedName("ar") @Implements("WorldMapManager") public final class WorldMapManager { - @ObfuscatedName("sp") - @ObfuscatedGetter( - intValue = 889599309 - ) - @Export("foundItemIndex") - static int foundItemIndex; - @ObfuscatedName("ab") - @ObfuscatedSignature( - signature = "Lls;" - ) - static Bounds field319; - @ObfuscatedName("a") + @ObfuscatedName("by") + static String field327; + @ObfuscatedName("u") @Export("loaded") boolean loaded; - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("loadStarted") boolean loadStarted; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Lap;" + signature = "Laq;" ) @Export("mapAreaData") WorldMapAreaData mapAreaData; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Llx;" + signature = "Lln;" ) @Export("compositeTextureSprite") Sprite compositeTextureSprite; - @ObfuscatedName("v") + @ObfuscatedName("z") @Export("icons") HashMap icons; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "[[Laq;" + signature = "[[Lai;" ) @Export("regions") WorldMapRegion[][] regions; - @ObfuscatedName("c") - HashMap field305; - @ObfuscatedName("o") + @ObfuscatedName("h") + HashMap field316; + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "[Llw;" + signature = "[Llm;" ) @Export("mapSceneSprites") IndexedSprite[] mapSceneSprites; - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedSignature( - signature = "Lhq;" + signature = "Lhf;" ) @Export("geographyArchive") final AbstractArchive geographyArchive; - @ObfuscatedName("d") + @ObfuscatedName("i") @ObfuscatedSignature( - signature = "Lhq;" + signature = "Lhf;" ) @Export("groundArchive") final AbstractArchive groundArchive; - @ObfuscatedName("m") + @ObfuscatedName("k") @Export("fonts") final HashMap fonts; - @ObfuscatedName("p") + @ObfuscatedName("x") @ObfuscatedGetter( - intValue = 1993674285 + intValue = 1863582425 ) @Export("tileX") int tileX; - @ObfuscatedName("h") + @ObfuscatedName("o") @ObfuscatedGetter( - intValue = 1616288973 + intValue = 782460107 ) @Export("tileY") int tileY; - @ObfuscatedName("k") + @ObfuscatedName("e") @ObfuscatedGetter( - intValue = 1425172909 + intValue = 1124453587 ) @Export("tileWidth") int tileWidth; - @ObfuscatedName("x") + @ObfuscatedName("n") @ObfuscatedGetter( - intValue = 1098250673 + intValue = 335024989 ) @Export("tileHeight") int tileHeight; - @ObfuscatedName("j") + @ObfuscatedName("r") @ObfuscatedGetter( - intValue = -1842385169 + intValue = -1803462463 ) @Export("pixelsPerTile") public int pixelsPerTile; @ObfuscatedSignature( - signature = "([Llw;Ljava/util/HashMap;Lhq;Lhq;)V" + signature = "([Llm;Ljava/util/HashMap;Lhf;Lhf;)V" ) public WorldMapManager(IndexedSprite[] var1, HashMap var2, AbstractArchive var3, AbstractArchive var4) { this.loaded = false; this.loadStarted = false; - this.field305 = new HashMap(); + this.field316 = new HashMap(); this.pixelsPerTile = 0; this.mapSceneSprites = var1; this.fonts = var2; @@ -118,10 +109,10 @@ public final class WorldMapManager { this.groundArchive = var4; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Lhq;Ljava/lang/String;ZI)V", - garbageValue = "1202484367" + signature = "(Lhf;Ljava/lang/String;ZB)V", + garbageValue = "42" ) @Export("load") public void load(AbstractArchive var1, String var2, boolean var3) { @@ -129,10 +120,10 @@ public final class WorldMapManager { this.loaded = false; this.loadStarted = true; System.nanoTime(); - int var4 = var1.getGroupId(WorldMapCacheName.field288.name); + int var4 = var1.getGroupId(WorldMapCacheName.field304.name); int var5 = var1.getFileId(var4, var2); - Buffer var6 = new Buffer(var1.takeFileByNames(WorldMapCacheName.field288.name, var2)); - Buffer var7 = new Buffer(var1.takeFileByNames(WorldMapCacheName.field289.name, var2)); + Buffer var6 = new Buffer(var1.takeFileByNames(WorldMapCacheName.field304.name, var2)); + Buffer var7 = new Buffer(var1.takeFileByNames(WorldMapCacheName.field303.name, var2)); System.nanoTime(); System.nanoTime(); this.mapAreaData = new WorldMapAreaData(); @@ -154,7 +145,7 @@ public final class WorldMapManager { int var9 = this.mapAreaData.getRegionHighY() - this.mapAreaData.getRegionLowY() + 1; System.nanoTime(); System.nanoTime(); - ViewportMouse.WorldMapRegion_clearCachedSprites(); + GrandExchangeOfferAgeComparator.WorldMapRegion_clearCachedSprites(); this.regions = new WorldMapRegion[var16][var9]; Iterator var10 = this.mapAreaData.worldMapData0Set.iterator(); @@ -179,9 +170,9 @@ public final class WorldMapManager { System.nanoTime(); System.nanoTime(); - if (var1.isValidFileName(WorldMapCacheName.field290.name, var2)) { - byte[] var20 = var1.takeFileByNames(WorldMapCacheName.field290.name, var2); - this.compositeTextureSprite = WorldMapSection1.convertJpgToSprite(var20); + if (var1.isValidFileName(WorldMapCacheName.field307.name, var2)) { + byte[] var20 = var1.takeFileByNames(WorldMapCacheName.field307.name, var2); + this.compositeTextureSprite = MouseHandler.convertJpgToSprite(var20); } System.nanoTime(); @@ -191,20 +182,20 @@ public final class WorldMapManager { } } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "483780735" + signature = "(B)V", + garbageValue = "-41" ) @Export("clearIcons") public final void clearIcons() { this.icons = null; } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( signature = "(IIIIIIIII)V", - garbageValue = "1443794964" + garbageValue = "2003295664" ) @Export("drawTiles") public final void drawTiles(int var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8) { @@ -217,65 +208,65 @@ public final class WorldMapManager { float var14 = this.getPixelsPerTile(var7 - var5, var3 - var1); int var15 = (int)Math.ceil((double)var14); this.pixelsPerTile = var15; - if (!this.field305.containsKey(var15)) { + if (!this.field316.containsKey(var15)) { class40 var16 = new class40(var15); var16.init(); - this.field305.put(var15, var16); + this.field316.put(var15, var16); } int var23 = var13.width + var13.x - 1; - int var17 = var13.y + var13.height - 1; + int var17 = var13.height + var13.y - 1; int var18; int var19; for (var18 = var13.x; var18 <= var23; ++var18) { for (var19 = var13.y; var19 <= var17; ++var19) { - this.regions[var18][var19].drawTile(var15, (class40)this.field305.get(var15), this.mapSceneSprites, this.geographyArchive, this.groundArchive); + this.regions[var18][var19].drawTile(var15, (class40)this.field316.get(var15), this.mapSceneSprites, this.geographyArchive, this.groundArchive); } } Rasterizer2D.Rasterizer2D_replace(var9, var10, var11); Rasterizer2D.Rasterizer2D_setClipArray(var12); - var18 = (int)(var14 * 64.0F); + var18 = (int)(64.0F * var14); var19 = this.tileX * 4096 + var1; int var20 = this.tileY * 4096 + var2; - for (int var21 = var13.x; var21 < var13.x + var13.width; ++var21) { + for (int var21 = var13.x; var21 < var13.width + var13.x; ++var21) { for (int var22 = var13.y; var22 < var13.height + var13.y; ++var22) { - this.regions[var21][var22].method481(var5 + var18 * (this.regions[var21][var22].regionX * 64 - var19) / 64, var8 - var18 * (this.regions[var21][var22].regionY * 64 - var20 + 64) / 64, var18); + this.regions[var21][var22].method460(var5 + var18 * (this.regions[var21][var22].regionX * 64 - var19) / 64, var8 - var18 * (this.regions[var21][var22].regionY * 64 - var20 + 64) / 64, var18); } } } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(IIIIIIIILjava/util/HashSet;Ljava/util/HashSet;IIZB)V", - garbageValue = "40" + signature = "(IIIIIIIILjava/util/HashSet;Ljava/util/HashSet;IIZI)V", + garbageValue = "-607313311" ) @Export("drawElements") public final void drawElements(int var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, HashSet var9, HashSet var10, int var11, int var12, boolean var13) { WorldMapRectangle var14 = this.createWorldMapRectangle(var1, var2, var3, var4); float var15 = this.getPixelsPerTile(var7 - var5, var3 - var1); - int var16 = (int)(64.0F * var15); + int var16 = (int)(var15 * 64.0F); int var17 = this.tileX * 4096 + var1; int var18 = this.tileY * 4096 + var2; int var19; int var20; - for (var19 = var14.x; var19 < var14.width + var14.x; ++var19) { - for (var20 = var14.y; var20 < var14.y + var14.height; ++var20) { + for (var19 = var14.x; var19 < var14.x + var14.width; ++var19) { + for (var20 = var14.y; var20 < var14.height + var14.y; ++var20) { if (var13) { this.regions[var19][var20].initWorldMapIcon1s(); } - this.regions[var19][var20].method491(var5 + var16 * (this.regions[var19][var20].regionX * 64 - var17) / 64, var8 - var16 * (this.regions[var19][var20].regionY * 64 - var18 + 64) / 64, var16, var9); + this.regions[var19][var20].method446(var5 + var16 * (this.regions[var19][var20].regionX * 64 - var17) / 64, var8 - var16 * (this.regions[var19][var20].regionY * 64 - var18 + 64) / 64, var16, var9); } } if (var10 != null && var11 > 0) { - for (var19 = var14.x; var19 < var14.width + var14.x; ++var19) { - for (var20 = var14.y; var20 < var14.y + var14.height; ++var20) { + for (var19 = var14.x; var19 < var14.x + var14.width; ++var19) { + for (var20 = var14.y; var20 < var14.height + var14.y; ++var20) { this.regions[var19][var20].flashElements(var10, var11, var12); } } @@ -283,10 +274,10 @@ public final class WorldMapManager { } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(IIIILjava/util/HashSet;III)V", - garbageValue = "-359946727" + signature = "(IIIILjava/util/HashSet;IIB)V", + garbageValue = "63" ) @Export("drawOverview") public void drawOverview(int var1, int var2, int var3, int var4, HashSet var5, int var6, int var7) { @@ -323,12 +314,12 @@ public final class WorldMapManager { } } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( signature = "(IIIIIIIIIIB)Ljava/util/List;", garbageValue = "0" ) - public List method694(int var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10) { + public List method645(int var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10) { LinkedList var11 = new LinkedList(); if (!this.loaded) { return var11; @@ -339,9 +330,9 @@ public final class WorldMapManager { int var15 = this.tileX * 4096 + var1; int var16 = this.tileY * 4096 + var2; - for (int var17 = var12.x; var17 < var12.width + var12.x; ++var17) { - for (int var18 = var12.y; var18 < var12.y + var12.height; ++var18) { - List var19 = this.regions[var17][var18].method512(var5 + var14 * (this.regions[var17][var18].regionX * 64 - var15) / 64, var8 + var6 - var14 * (this.regions[var17][var18].regionY * 64 - var16 + 64) / 64, var14, var9, var10); + for (int var17 = var12.x; var17 < var12.x + var12.width; ++var17) { + for (int var18 = var12.y; var18 < var12.height + var12.y; ++var18) { + List var19 = this.regions[var17][var18].method467(var5 + var14 * (this.regions[var17][var18].regionX * 64 - var15) / 64, var8 + var6 - var14 * (this.regions[var17][var18].regionY * 64 - var16 + 64) / 64, var14, var9, var10); if (!var19.isEmpty()) { var11.addAll(var19); } @@ -352,10 +343,10 @@ public final class WorldMapManager { } } - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "(IIIII)Lg;", - garbageValue = "551027092" + signature = "(IIIII)Lv;", + garbageValue = "-662706670" ) @Export("createWorldMapRectangle") WorldMapRectangle createWorldMapRectangle(int var1, int var2, int var3, int var4) { @@ -395,20 +386,20 @@ public final class WorldMapManager { return var5; } - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedSignature( signature = "(I)Z", - garbageValue = "674721772" + garbageValue = "164823624" ) @Export("isLoaded") public boolean isLoaded() { return this.loaded; } - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedSignature( - signature = "(I)Ljava/util/HashMap;", - garbageValue = "97354475" + signature = "(B)Ljava/util/HashMap;", + garbageValue = "-124" ) @Export("buildIcons") public HashMap buildIcons() { @@ -416,10 +407,10 @@ public final class WorldMapManager { return this.icons; } - @ObfuscatedName("d") + @ObfuscatedName("i") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "1057404045" + garbageValue = "304580101" ) @Export("buildIcons0") void buildIcons0() { @@ -453,10 +444,10 @@ public final class WorldMapManager { } - @ObfuscatedName("m") + @ObfuscatedName("k") @ObfuscatedSignature( - signature = "(IIS)F", - garbageValue = "-15998" + signature = "(III)F", + garbageValue = "-2138460043" ) @Export("getPixelsPerTile") float getPixelsPerTile(int var1, int var2) { @@ -471,119 +462,31 @@ public final class WorldMapManager { } } - @ObfuscatedName("ho") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(ZLkf;S)V", - garbageValue = "25602" + signature = "(IIS)Z", + garbageValue = "-1777" ) - static final void method710(boolean var0, PacketBuffer var1) { - while (true) { - if (var1.bitsRemaining(Client.packetWriter.serverPacketLength) >= 27) { - int var2 = var1.readBits(15); - if (var2 != 32767) { - boolean var3 = false; - if (Client.npcs[var2] == null) { - Client.npcs[var2] = new NPC(); - var3 = true; - } - - NPC var4 = Client.npcs[var2]; - Client.npcIndices[++Client.npcCount - 1] = var2; - var4.npcCycle = Client.cycle; - int var5 = Client.defaultRotations[var1.readBits(3)]; - if (var3) { - var4.orientation = var4.rotation = var5; - } - - int var6; - if (var0) { - var6 = var1.readBits(8); - if (var6 > 127) { - var6 -= 256; - } - } else { - var6 = var1.readBits(5); - if (var6 > 15) { - var6 -= 32; - } - } - - int var7; - if (var0) { - var7 = var1.readBits(8); - if (var7 > 127) { - var7 -= 256; - } - } else { - var7 = var1.readBits(5); - if (var7 > 15) { - var7 -= 32; - } - } - - int var8 = var1.readBits(1); - if (var8 == 1) { - Client.field677[++Client.field676 - 1] = var2; - } - - var4.definition = SecureRandomCallable.getNpcDefinition(var1.readBits(14)); - int var9 = var1.readBits(1); - var4.field927 = var4.definition.size; - var4.field977 = var4.definition.rotation; - if (var4.field977 == 0) { - var4.rotation = 0; - } - - var4.walkSequence = var4.definition.walkSequence; - var4.walkBackSequence = var4.definition.walkBackSequence; - var4.walkLeftSequence = var4.definition.walkLeftSequence; - var4.walkRightSequence = var4.definition.walkRightSequence; - var4.readySequence = var4.definition.readySequence; - var4.turnLeftSequence = var4.definition.turnLeftSequence; - var4.turnRightSequence = var4.definition.turnRightSequence; - var4.method2178(class215.localPlayer.pathX[0] + var6, class215.localPlayer.pathY[0] + var7, var9 == 1); - continue; - } - } - - var1.exportIndex(); - return; - } + public static boolean method651(int var0, int var1) { + return (var0 >> var1 + 1 & 1) != 0; } - @ObfuscatedName("kg") + @ObfuscatedName("fl") @ObfuscatedSignature( - signature = "(IIIILlx;Lhn;B)V", - garbageValue = "14" + signature = "(III)V", + garbageValue = "1348135322" ) - @Export("worldToMinimap") - static final void worldToMinimap(int var0, int var1, int var2, int var3, Sprite var4, SpriteMask var5) { - int var6 = var3 * var3 + var2 * var2; - if (var6 > 4225 && var6 < 90000) { - int var7 = Client.camAngleY & 2047; - int var8 = Rasterizer3D.Rasterizer3D_sine[var7]; - int var9 = Rasterizer3D.Rasterizer3D_cosine[var7]; - int var10 = var3 * var8 + var9 * var2 >> 16; - int var11 = var3 * var9 - var8 * var2 >> 16; - double var12 = Math.atan2((double)var10, (double)var11); - int var14 = var5.width / 2 - 25; - int var15 = (int)(Math.sin(var12) * (double)var14); - int var16 = (int)(Math.cos(var12) * (double)var14); - byte var17 = 20; - class4.redHintArrowSprite.method6331(var15 + (var0 + var5.width / 2 - var17 / 2), var5.height / 2 + var1 - var17 / 2 - var16 - 10, var17, var17, 15, 15, var12, 256); - } else { - Message.drawSpriteOnMinimap(var0, var1, var2, var3, var4, var5); + static void method676(int var0, int var1) { + int[] var2 = new int[9]; + + for (int var3 = 0; var3 < var2.length; ++var3) { + int var4 = var3 * 32 + 15 + 128; + int var5 = FloorDecoration.method2888(var4); + int var6 = Rasterizer3D.Rasterizer3D_sine[var4]; + var5 = class14.method176(var5, var1); + var2[var3] = var6 * var5 >> 16; } - } - - @ObfuscatedName("ls") - @ObfuscatedSignature( - signature = "(Lhi;I)Z", - garbageValue = "1830687917" - ) - @Export("isComponentHidden") - static boolean isComponentHidden(Widget var0) { - return var0.isHidden; + Scene.Scene_buildVisiblityMap(var2, 500, 800, var0 * 334 / var1, 334); } } diff --git a/runescape-client/src/main/java/WorldMapRectangle.java b/runescape-client/src/main/java/WorldMapRectangle.java index 1088a19a13..57978cb542 100644 --- a/runescape-client/src/main/java/WorldMapRectangle.java +++ b/runescape-client/src/main/java/WorldMapRectangle.java @@ -1,85 +1,99 @@ -import java.lang.management.GarbageCollectorMXBean; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("g") +@ObfuscatedName("v") @Implements("WorldMapRectangle") public final class WorldMapRectangle { - @ObfuscatedName("az") - @Export("garbageCollector") - static GarbageCollectorMXBean garbageCollector; - @ObfuscatedName("da") - @ObfuscatedSignature( - signature = "Lij;" - ) - @Export("archive5") - static Archive archive5; - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedGetter( - intValue = 1532996023 + intValue = -1021156023 ) @Export("width") int width; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = 1074261311 + intValue = -1442347119 ) @Export("height") int height; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = 829209927 + intValue = 611193367 ) @Export("x") int x; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = 2070361413 + intValue = -782964479 ) @Export("y") int y; // $FF: synthetic field @ObfuscatedSignature( - signature = "Lax;" + signature = "Lar;" ) final WorldMapManager this$0; @ObfuscatedSignature( - signature = "(Lax;)V" + signature = "(Lar;)V" ) WorldMapRectangle(WorldMapManager var1) { this.this$0 = var1; } - @ObfuscatedName("t") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Lhq;Ljava/lang/String;Ljava/lang/String;IZI)V", - garbageValue = "1156517965" + signature = "(II)Lii;", + garbageValue = "-3287437" ) - public static void method330(AbstractArchive var0, String var1, String var2, int var3, boolean var4) { - int var5 = var0.getGroupId(var1); - int var6 = var0.getFileId(var5, var2); - MusicPatchNode2.playMusicTrack(var0, var5, var6, var3, var4); + @Export("FloorUnderlayDefinition_get") + public static FloorOverlayDefinition FloorUnderlayDefinition_get(int var0) { + FloorOverlayDefinition var1 = (FloorOverlayDefinition)FloorOverlayDefinition.FloorOverlayDefinition_cached.get((long)var0); + if (var1 != null) { + return var1; + } else { + byte[] var2 = FloorOverlayDefinition.FloorOverlayDefinition_archive.takeFile(4, var0); + var1 = new FloorOverlayDefinition(); + if (var2 != null) { + var1.decode(new Buffer(var2), var0); + } + + var1.postDecode(); + FloorOverlayDefinition.FloorOverlayDefinition_cached.put(var1, (long)var0); + return var1; + } } - @ObfuscatedName("v") + @ObfuscatedName("gm") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "-1565854351" + signature = "(Lbg;III)V", + garbageValue = "-1866889280" ) - public static void method331() { - VarpDefinition.VarpDefinition_cached.clear(); - } + @Export("performPlayerAnimation") + static void performPlayerAnimation(Player var0, int var1, int var2) { + if (var0.sequence == var1 && var1 != -1) { + int var3 = GrandExchangeOfferAgeComparator.SequenceDefinition_get(var1).field3533; + if (var3 == 1) { + var0.sequenceFrame = 0; + var0.sequenceFrameCycle = 0; + var0.sequenceDelay = var2; + var0.field971 = 0; + } + + if (var3 == 2) { + var0.field971 = 0; + } + } else if (var1 == -1 || var0.sequence == -1 || GrandExchangeOfferAgeComparator.SequenceDefinition_get(var1).field3527 >= GrandExchangeOfferAgeComparator.SequenceDefinition_get(var0.sequence).field3527) { + var0.sequence = var1; + var0.sequenceFrame = 0; + var0.sequenceFrameCycle = 0; + var0.sequenceDelay = var2; + var0.field971 = 0; + var0.field994 = var0.pathLength; + } - @ObfuscatedName("lf") - @ObfuscatedSignature( - signature = "(II)V", - garbageValue = "1573335888" - ) - static void method329(int var0) { - Client.oculusOrbState = var0; } } diff --git a/runescape-client/src/main/java/WorldMapRegion.java b/runescape-client/src/main/java/WorldMapRegion.java index 7028f0b5cc..9f89e1cc0a 100644 --- a/runescape-client/src/main/java/WorldMapRegion.java +++ b/runescape-client/src/main/java/WorldMapRegion.java @@ -1,3 +1,4 @@ +import java.io.IOException; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -9,57 +10,68 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("aq") +@ObfuscatedName("ai") @Implements("WorldMapRegion") public class WorldMapRegion { - @ObfuscatedName("v") + @ObfuscatedName("sx") @ObfuscatedSignature( - signature = "Led;" + signature = "Llo;" + ) + @Export("worldMap") + static WorldMap worldMap; + @ObfuscatedName("z") + @ObfuscatedSignature( + signature = "Leo;" ) @Export("WorldMapRegion_cachedSprites") public static DemotingHashTable WorldMapRegion_cachedSprites; - @ObfuscatedName("l") + @ObfuscatedName("da") + @ObfuscatedSignature( + signature = "Lij;" + ) + @Export("archive8") + static Archive archive8; + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = -400219943 + intValue = -1644673379 ) @Export("regionX") int regionX; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedGetter( - intValue = 1626366429 + intValue = 155602153 ) @Export("regionY") int regionY; - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "Lj;" + signature = "Lr;" ) @Export("worldMapData_0") WorldMapData_0 worldMapData_0; - @ObfuscatedName("i") + @ObfuscatedName("w") @Export("worldMapData1List") LinkedList worldMapData1List; - @ObfuscatedName("d") + @ObfuscatedName("i") @ObfuscatedGetter( - intValue = -1580506373 + intValue = -1389068533 ) @Export("backgroundColor") int backgroundColor; - @ObfuscatedName("m") + @ObfuscatedName("k") @ObfuscatedGetter( - intValue = 799046691 + intValue = -342949877 ) @Export("pixelsPerTile") int pixelsPerTile; - @ObfuscatedName("p") + @ObfuscatedName("x") @Export("icon0List") List icon0List; - @ObfuscatedName("h") + @ObfuscatedName("o") @Export("iconMap") HashMap iconMap; - @ObfuscatedName("k") + @ObfuscatedName("e") @Export("fonts") final HashMap fonts; @@ -77,12 +89,12 @@ public class WorldMapRegion { this.fonts = var4; } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(IIIB)V", - garbageValue = "65" + signature = "(IIII)V", + garbageValue = "-684564280" ) - void method481(int var1, int var2, int var3) { + void method460(int var1, int var2, int var3) { int var5 = this.regionX; int var6 = this.regionY; int var7 = this.pixelsPerTile; @@ -99,10 +111,10 @@ public class WorldMapRegion { } } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(Lj;Ljava/util/List;I)V", - garbageValue = "-1282627601" + signature = "(Lr;Ljava/util/List;I)V", + garbageValue = "-1835968904" ) @Export("initWorldMapData0") void initWorldMapData0(WorldMapData_0 var1, List var2) { @@ -111,10 +123,10 @@ public class WorldMapRegion { this.addAllToIconList(var2); } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( signature = "(Ljava/util/HashSet;Ljava/util/List;B)V", - garbageValue = "-46" + garbageValue = "4" ) @Export("initWorldMapData1") void initWorldMapData1(HashSet var1, List var2) { @@ -131,15 +143,15 @@ public class WorldMapRegion { this.addAllToIconList(var2); } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(IIIILf;I)V", - garbageValue = "-1254135456" + signature = "(IIIILm;I)V", + garbageValue = "-1966744518" ) @Export("getIconsForTiles") void getIconsForTiles(int var1, int var2, int var3, int var4, AbstractWorldMapData var5) { for (int var6 = var1; var6 < var3 + var1; ++var6) { - label73: + label75: for (int var7 = var2; var7 < var2 + var4; ++var7) { for (int var8 = 0; var8 < var5.planes; ++var8) { WorldMapDecoration[] var9 = var5.decorations[var8][var6][var7]; @@ -149,23 +161,23 @@ public class WorldMapRegion { for (int var11 = 0; var11 < var10.length; ++var11) { ObjectDefinition var13; boolean var14; - label64: { + label66: { WorldMapDecoration var12 = var10[var11]; - var13 = WorldMapDecorationType.getObjectDefinition(var12.objectDefinitionId); + var13 = Occluder.getObjectDefinition(var12.objectDefinitionId); if (var13.transforms != null) { int[] var15 = var13.transforms; for (int var16 = 0; var16 < var15.length; ++var16) { int var17 = var15[var16]; - ObjectDefinition var18 = WorldMapDecorationType.getObjectDefinition(var17); + ObjectDefinition var18 = Occluder.getObjectDefinition(var17); if (var18.mapIconId != -1) { var14 = true; - break label64; + break label66; } } } else if (var13.mapIconId != -1) { var14 = true; - break label64; + break label66; } var14 = false; @@ -173,7 +185,7 @@ public class WorldMapRegion { if (var14) { this.getIcon(var13, var8, var6, var7, var5); - continue label73; + continue label75; } } } @@ -183,37 +195,37 @@ public class WorldMapRegion { } - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "(Lix;IIILf;I)V", - garbageValue = "-2054310192" + signature = "(Lil;IIILm;I)V", + garbageValue = "-1396744194" ) @Export("getIcon") void getIcon(ObjectDefinition var1, int var2, int var3, int var4, AbstractWorldMapData var5) { Coord var6 = new Coord(var2, var3 + this.regionX * 64, this.regionY * 64 + var4); Coord var7 = null; if (this.worldMapData_0 != null) { - var7 = new Coord(this.worldMapData_0.minPlane + var2, var3 + this.worldMapData_0.regionXLow * 64, var4 + this.worldMapData_0.regionYLow * 64); + var7 = new Coord(this.worldMapData_0.minPlane + var2, var3 + this.worldMapData_0.regionXLow * 4096, var4 + this.worldMapData_0.regionYLow * 64); } else { WorldMapData_1 var8 = (WorldMapData_1)var5; - var7 = new Coord(var2 + var8.minPlane, var8.regionXLow * 64 + var3 + var8.getChunkXLow() * 8, var4 + var8.regionYLow * 64 + var8.getChunkYLow() * 8); + var7 = new Coord(var2 + var8.minPlane, var3 + var8.regionXLow * 4096 + var8.getChunkXLow() * 8, var4 + var8.regionYLow * 64 + var8.getChunkYLow() * 8); } Object var10; if (var1.transforms != null) { var10 = new WorldMapIcon_1(var7, var6, var1.id, this); } else { - WorldMapElement var9 = class65.WorldMapElement_get(var1.mapIconId); + WorldMapElement var9 = Varcs.WorldMapElement_get(var1.mapIconId); var10 = new WorldMapIcon_0(var7, var6, var9.objectId, this.createMapLabel(var9)); } this.iconMap.put(new Coord(0, var3, var4), var10); } - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "(S)V", - garbageValue = "16198" + signature = "(I)V", + garbageValue = "1299616517" ) @Export("initWorldMapIcon1s") void initWorldMapIcon1s() { @@ -228,10 +240,10 @@ public class WorldMapRegion { } - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedSignature( - signature = "(Ljava/util/List;B)V", - garbageValue = "100" + signature = "(Ljava/util/List;I)V", + garbageValue = "-679191042" ) @Export("addAllToIconList") void addAllToIconList(List var1) { @@ -240,19 +252,19 @@ public class WorldMapRegion { while (var2.hasNext()) { WorldMapIcon_0 var3 = (WorldMapIcon_0)var2.next(); if (var3.coord2.x >> 6 == this.regionX && var3.coord2.y >> 6 == this.regionY) { - WorldMapIcon_0 var4 = new WorldMapIcon_0(var3.coord2, var3.coord2, var3.element, this.method510(var3.element)); + WorldMapIcon_0 var4 = new WorldMapIcon_0(var3.coord2, var3.coord2, var3.element, this.method465(var3.element)); this.icon0List.add(var4); } } } - @ObfuscatedName("d") + @ObfuscatedName("i") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "-2122151557" + signature = "(B)V", + garbageValue = "18" ) - void method488() { + void method443() { if (this.worldMapData_0 != null) { this.worldMapData_0.reset(); } else { @@ -266,10 +278,10 @@ public class WorldMapRegion { } - @ObfuscatedName("m") + @ObfuscatedName("k") @ObfuscatedSignature( - signature = "(Lhq;I)Z", - garbageValue = "685287436" + signature = "(Lhf;I)Z", + garbageValue = "-1443826552" ) @Export("loadGeography") boolean loadGeography(AbstractArchive var1) { @@ -305,10 +317,10 @@ public class WorldMapRegion { } } - @ObfuscatedName("p") + @ObfuscatedName("x") @ObfuscatedSignature( - signature = "(ILae;[Llw;Lhq;Lhq;I)V", - garbageValue = "258503146" + signature = "(ILaz;[Llm;Lhf;Lhf;S)V", + garbageValue = "2800" ) @Export("drawTile") void drawTile(int var1, class40 var2, IndexedSprite[] var3, AbstractArchive var4, AbstractArchive var5) { @@ -336,30 +348,30 @@ public class WorldMapRegion { if (var16 == null) { var12 = new WorldMapSprite(); } else { - var12 = new WorldMapSprite(WorldMapSection1.convertJpgToSprite(var16).pixels); + var12 = new WorldMapSprite(MouseHandler.convertJpgToSprite(var16).pixels); } Sprite var14 = new Sprite(this.pixelsPerTile * 64, this.pixelsPerTile * 64); var14.setRaster(); if (this.worldMapData_0 != null) { - this.method546(var2, var3, var12); + this.method454(var2, var3, var12); } else { - this.method494(var2, var3, var12); + this.method449(var2, var3, var12); } - PlayerType.method4285(var14, this.regionX, this.regionY, this.pixelsPerTile); - this.method488(); + class43.method822(var14, this.regionX, this.regionY, this.pixelsPerTile); + this.method443(); } } } } - @ObfuscatedName("h") + @ObfuscatedName("o") @ObfuscatedSignature( signature = "(IIILjava/util/HashSet;I)V", - garbageValue = "2023865774" + garbageValue = "-617331188" ) - void method491(int var1, int var2, int var3, HashSet var4) { + void method446(int var1, int var2, int var3, HashSet var4) { if (var4 == null) { var4 = new HashSet(); } @@ -368,10 +380,10 @@ public class WorldMapRegion { this.drawMapLinks(var1, var2, var4, var3); } - @ObfuscatedName("k") + @ObfuscatedName("e") @ObfuscatedSignature( signature = "(Ljava/util/HashSet;IIB)V", - garbageValue = "69" + garbageValue = "-80" ) @Export("flashElements") void flashElements(HashSet var1, int var2, int var3) { @@ -382,44 +394,44 @@ public class WorldMapRegion { if (var5.hasValidElement()) { int var6 = var5.getElement(); if (var1.contains(var6)) { - WorldMapElement var7 = class65.WorldMapElement_get(var6); + WorldMapElement var7 = Varcs.WorldMapElement_get(var6); this.drawBackgroundCircle(var7, var5.screenX, var5.screenY, var2, var3); } } } - this.method502(var1, var2, var3); + this.method457(var1, var2, var3); } - @ObfuscatedName("x") + @ObfuscatedName("n") @ObfuscatedSignature( - signature = "(Lae;[Llw;Law;I)V", - garbageValue = "-2069208196" + signature = "(Laz;[Llm;Lad;I)V", + garbageValue = "-795524086" ) - void method546(class40 var1, IndexedSprite[] var2, WorldMapSprite var3) { + void method454(class40 var1, IndexedSprite[] var2, WorldMapSprite var3) { int var4; int var5; for (var4 = 0; var4 < 64; ++var4) { for (var5 = 0; var5 < 64; ++var5) { this.drawTileGround(var4, var5, this.worldMapData_0, var1, var3); - this.method497(var4, var5, this.worldMapData_0, var1); + this.method510(var4, var5, this.worldMapData_0, var1); } } for (var4 = 0; var4 < 64; ++var4) { for (var5 = 0; var5 < 64; ++var5) { - this.method536(var4, var5, this.worldMapData_0, var1, var2); + this.method557(var4, var5, this.worldMapData_0, var1, var2); } } } - @ObfuscatedName("j") + @ObfuscatedName("c") @ObfuscatedSignature( - signature = "(Lae;[Llw;Law;I)V", - garbageValue = "-797610812" + signature = "(Laz;[Llm;Lad;I)V", + garbageValue = "-847322953" ) - void method494(class40 var1, IndexedSprite[] var2, WorldMapSprite var3) { + void method449(class40 var1, IndexedSprite[] var2, WorldMapSprite var3) { Iterator var4 = this.worldMapData1List.iterator(); WorldMapData_1 var5; @@ -431,7 +443,7 @@ public class WorldMapRegion { for (var6 = var5.getChunkX() * 8; var6 < var5.getChunkX() * 8 + 8; ++var6) { for (var7 = var5.getChunkY() * 8; var7 < var5.getChunkY() * 8 + 8; ++var7) { this.drawTileGround(var6, var7, var5, var1, var3); - this.method497(var6, var7, var5, var1); + this.method510(var6, var7, var5, var1); } } } @@ -443,27 +455,27 @@ public class WorldMapRegion { for (var6 = var5.getChunkX() * 8; var6 < var5.getChunkX() * 8 + 8; ++var6) { for (var7 = var5.getChunkY() * 8; var7 < var5.getChunkY() * 8 + 8; ++var7) { - this.method536(var6, var7, var5, var1, var2); + this.method557(var6, var7, var5, var1, var2); } } } } - @ObfuscatedName("r") + @ObfuscatedName("s") @ObfuscatedSignature( - signature = "(IILf;Lae;[Llw;I)V", - garbageValue = "410912714" + signature = "(IILm;Laz;[Llm;S)V", + garbageValue = "23091" ) - void method536(int var1, int var2, AbstractWorldMapData var3, class40 var4, IndexedSprite[] var5) { - this.method500(var1, var2, var3); - this.method499(var1, var2, var3, var5); + void method557(int var1, int var2, AbstractWorldMapData var3, class40 var4, IndexedSprite[] var5) { + this.method455(var1, var2, var3); + this.method450(var1, var2, var3, var5); } - @ObfuscatedName("e") + @ObfuscatedName("t") @ObfuscatedSignature( - signature = "(IILf;Lae;Law;B)V", - garbageValue = "-118" + signature = "(IILm;Laz;Lad;I)V", + garbageValue = "1713363945" ) @Export("drawTileGround") void drawTileGround(int var1, int var2, AbstractWorldMapData var3, class40 var4, WorldMapSprite var5) { @@ -474,150 +486,57 @@ public class WorldMapRegion { } int var8 = 16711935; - int var9; if (var7 != -1) { - int var10 = this.backgroundColor; - FloorOverlayDefinition var11 = WorldMapDecoration.FloorUnderlayDefinition_get(var7); - if (var11 == null) { - var9 = var10; - } else if (var11.secondaryRgb >= 0) { - var9 = var11.secondaryRgb | -16777216; - } else { - int var12; - if (var11.texture >= 0) { - var12 = ArchiveLoader.method1237(Rasterizer3D.Rasterizer3D_textureLoader.getAverageTextureRGB(var11.texture), 96); - var9 = Rasterizer3D.Rasterizer3D_colorPalette[var12] | -16777216; - } else if (var11.primaryRgb == 16711935) { - var9 = var10; - } else { - var12 = ArchiveLoader.method1230(var11.hue, var11.saturation, var11.lightness); - byte var14 = 96; - int var13; - if (var12 == -2) { - var13 = 12345678; - } else { - int var16; - if (var12 == -1) { - if (var14 < 0) { - var14 = 0; - } else if (var14 > 127) { - var14 = 127; - } - - var16 = 127 - var14; - var13 = var16; - } else { - var16 = var14 * (var12 & 127) / 128; - if (var16 < 2) { - var16 = 2; - } else if (var16 > 126) { - var16 = 126; - } - - var13 = var16 + (var12 & 65408); - } - } - - var9 = Rasterizer3D.Rasterizer3D_colorPalette[var13] | -16777216; - } - } - - var8 = var9; + var8 = class288.method5383(var7, this.backgroundColor); } - if (var7 > -1 && var3.field161[0][var1][var2] == 0) { + if (var7 > -1 && var3.field166[0][var1][var2] == 0) { Rasterizer2D.Rasterizer2D_fillRectangle(this.pixelsPerTile * var1, this.pixelsPerTile * (63 - var2), this.pixelsPerTile, this.pixelsPerTile, var8); } else { - var9 = this.method498(var1, var2, var3, var5); + int var9 = this.method453(var1, var2, var3, var5); if (var7 == -1) { Rasterizer2D.Rasterizer2D_fillRectangle(this.pixelsPerTile * var1, this.pixelsPerTile * (63 - var2), this.pixelsPerTile, this.pixelsPerTile, var9); } else { - var4.method798(this.pixelsPerTile * var1, this.pixelsPerTile * (63 - var2), var9, var8, this.pixelsPerTile, this.pixelsPerTile, var3.field161[0][var1][var2], var3.field157[0][var1][var2]); + var4.method740(this.pixelsPerTile * var1, this.pixelsPerTile * (63 - var2), var9, var8, this.pixelsPerTile, this.pixelsPerTile, var3.field166[0][var1][var2], var3.field160[0][var1][var2]); } } } - @ObfuscatedName("s") + @ObfuscatedName("m") @ObfuscatedSignature( - signature = "(IILf;Lae;I)V", - garbageValue = "-2089306589" + signature = "(IILm;Laz;I)V", + garbageValue = "-1210019678" ) - void method497(int var1, int var2, AbstractWorldMapData var3, class40 var4) { + void method510(int var1, int var2, AbstractWorldMapData var3, class40 var4) { for (int var5 = 1; var5 < var3.planes; ++var5) { int var6 = var3.floorOverlayIds[var5][var1][var2] - 1; if (var6 > -1) { - int var8 = this.backgroundColor; - FloorOverlayDefinition var9 = WorldMapDecoration.FloorUnderlayDefinition_get(var6); - int var7; - if (var9 == null) { - var7 = var8; - } else if (var9.secondaryRgb >= 0) { - var7 = var9.secondaryRgb | -16777216; - } else { - int var10; - if (var9.texture >= 0) { - var10 = ArchiveLoader.method1237(Rasterizer3D.Rasterizer3D_textureLoader.getAverageTextureRGB(var9.texture), 96); - var7 = Rasterizer3D.Rasterizer3D_colorPalette[var10] | -16777216; - } else if (var9.primaryRgb == 16711935) { - var7 = var8; - } else { - var10 = ArchiveLoader.method1230(var9.hue, var9.saturation, var9.lightness); - byte var12 = 96; - int var11; - if (var10 == -2) { - var11 = 12345678; - } else { - int var15; - if (var10 == -1) { - if (var12 < 0) { - var12 = 0; - } else if (var12 > 127) { - var12 = 127; - } - - var15 = 127 - var12; - var11 = var15; - } else { - var15 = var12 * (var10 & 127) / 128; - if (var15 < 2) { - var15 = 2; - } else if (var15 > 126) { - var15 = 126; - } - - var11 = var15 + (var10 & 65408); - } - } - - var7 = Rasterizer3D.Rasterizer3D_colorPalette[var11] | -16777216; - } - } - - if (var3.field161[var5][var1][var2] == 0) { + int var7 = class288.method5383(var6, this.backgroundColor); + if (var3.field166[var5][var1][var2] == 0) { Rasterizer2D.Rasterizer2D_fillRectangle(this.pixelsPerTile * var1, this.pixelsPerTile * (63 - var2), this.pixelsPerTile, this.pixelsPerTile, var7); } else { - var4.method798(this.pixelsPerTile * var1, this.pixelsPerTile * (63 - var2), 0, var7, this.pixelsPerTile, this.pixelsPerTile, var3.field161[var5][var1][var2], var3.field157[var5][var1][var2]); + var4.method740(this.pixelsPerTile * var1, this.pixelsPerTile * (63 - var2), 0, var7, this.pixelsPerTile, this.pixelsPerTile, var3.field166[var5][var1][var2], var3.field160[var5][var1][var2]); } } } } - @ObfuscatedName("b") + @ObfuscatedName("v") @ObfuscatedSignature( - signature = "(IILf;Law;I)I", - garbageValue = "-1495406529" + signature = "(IILm;Lad;B)I", + garbageValue = "-55" ) - int method498(int var1, int var2, AbstractWorldMapData var3, WorldMapSprite var4) { + int method453(int var1, int var2, AbstractWorldMapData var3, WorldMapSprite var4) { return var3.floorUnderlayIds[0][var1][var2] == 0 ? this.backgroundColor : var4.getTileColor(var1, var2); } - @ObfuscatedName("w") + @ObfuscatedName("q") @ObfuscatedSignature( - signature = "(IILf;[Llw;S)V", - garbageValue = "21007" + signature = "(IILm;[Llm;I)V", + garbageValue = "-179738925" ) - void method499(int var1, int var2, AbstractWorldMapData var3, IndexedSprite[] var4) { + void method450(int var1, int var2, AbstractWorldMapData var3, IndexedSprite[] var4) { for (int var5 = 0; var5 < var3.planes; ++var5) { WorldMapDecoration[] var6 = var3.decorations[var5][var1][var2]; if (var6 != null && var6.length != 0) { @@ -626,14 +545,14 @@ public class WorldMapRegion { for (int var8 = 0; var8 < var7.length; ++var8) { WorldMapDecoration var9 = var7[var8]; int var11 = var9.decoration; - boolean var10 = var11 >= WorldMapDecorationType.field2721.id && var11 <= WorldMapDecorationType.field2722.id; - if (var10 || ArchiveLoader.method1239(var9.decoration)) { - ObjectDefinition var12 = WorldMapDecorationType.getObjectDefinition(var9.objectDefinitionId); + boolean var10 = var11 >= WorldMapDecorationType.field2747.id && var11 <= WorldMapDecorationType.field2728.id; + if (var10 || class195.method3743(var9.decoration)) { + ObjectDefinition var12 = Occluder.getObjectDefinition(var9.objectDefinitionId); if (var12.mapSceneId != -1) { if (var12.mapSceneId != 46 && var12.mapSceneId != 52) { - var4[var12.mapSceneId].method6212(this.pixelsPerTile * var1, this.pixelsPerTile * (63 - var2), this.pixelsPerTile * 2, this.pixelsPerTile * 2); + var4[var12.mapSceneId].method6182(this.pixelsPerTile * var1, this.pixelsPerTile * (63 - var2), this.pixelsPerTile * 2, this.pixelsPerTile * 2); } else { - var4[var12.mapSceneId].method6212(this.pixelsPerTile * var1, this.pixelsPerTile * (63 - var2), this.pixelsPerTile * 2 + 1, this.pixelsPerTile * 2 + 1); + var4[var12.mapSceneId].method6182(this.pixelsPerTile * var1, this.pixelsPerTile * (63 - var2), this.pixelsPerTile * 2 + 1, this.pixelsPerTile * 2 + 1); } } } @@ -643,12 +562,12 @@ public class WorldMapRegion { } - @ObfuscatedName("u") + @ObfuscatedName("l") @ObfuscatedSignature( - signature = "(IILf;I)V", - garbageValue = "1965871050" + signature = "(IILm;B)V", + garbageValue = "56" ) - void method500(int var1, int var2, AbstractWorldMapData var3) { + void method455(int var1, int var2, AbstractWorldMapData var3) { for (int var4 = 0; var4 < var3.planes; ++var4) { WorldMapDecoration[] var5 = var3.decorations[var4][var1][var2]; if (var5 != null && var5.length != 0) { @@ -656,48 +575,46 @@ public class WorldMapRegion { for (int var7 = 0; var7 < var6.length; ++var7) { WorldMapDecoration var8 = var6[var7]; - int var10 = var8.decoration; - boolean var9 = var10 >= WorldMapDecorationType.field2703.id && var10 <= WorldMapDecorationType.field2704.id || var10 == WorldMapDecorationType.field2705.id; - if (var9) { - ObjectDefinition var11 = WorldMapDecorationType.getObjectDefinition(var8.objectDefinitionId); - int var12 = var11.int1 != 0 ? -3407872 : -3355444; - if (var8.decoration == WorldMapDecorationType.field2703.id) { - this.method514(var1, var2, var8.rotation, var12); + if (class81.method2086(var8.decoration)) { + ObjectDefinition var9 = Occluder.getObjectDefinition(var8.objectDefinitionId); + int var10 = var9.int1 != 0 ? -3407872 : -3355444; + if (var8.decoration == WorldMapDecorationType.field2748.id) { + this.method469(var1, var2, var8.rotation, var10); } - if (var8.decoration == WorldMapDecorationType.field2717.id) { - this.method514(var1, var2, var8.rotation, -3355444); - this.method514(var1, var2, var8.rotation + 1, var12); + if (var8.decoration == WorldMapDecorationType.field2727.id) { + this.method469(var1, var2, var8.rotation, -3355444); + this.method469(var1, var2, var8.rotation + 1, var10); } - if (var8.decoration == WorldMapDecorationType.field2704.id) { + if (var8.decoration == WorldMapDecorationType.field2730.id) { if (var8.rotation == 0) { - Rasterizer2D.Rasterizer2D_drawHorizontalLine(this.pixelsPerTile * var1, this.pixelsPerTile * (63 - var2), 1, var12); + Rasterizer2D.Rasterizer2D_drawHorizontalLine(this.pixelsPerTile * var1, this.pixelsPerTile * (63 - var2), 1, var10); } if (var8.rotation == 1) { - Rasterizer2D.Rasterizer2D_drawHorizontalLine(this.pixelsPerTile * var1 + this.pixelsPerTile - 1, this.pixelsPerTile * (63 - var2), 1, var12); + Rasterizer2D.Rasterizer2D_drawHorizontalLine(this.pixelsPerTile + this.pixelsPerTile * var1 - 1, this.pixelsPerTile * (63 - var2), 1, var10); } if (var8.rotation == 2) { - Rasterizer2D.Rasterizer2D_drawHorizontalLine(this.pixelsPerTile * var1 + this.pixelsPerTile - 1, this.pixelsPerTile * (63 - var2) + this.pixelsPerTile - 1, 1, var12); + Rasterizer2D.Rasterizer2D_drawHorizontalLine(this.pixelsPerTile + this.pixelsPerTile * var1 - 1, this.pixelsPerTile * (63 - var2) + this.pixelsPerTile - 1, 1, var10); } if (var8.rotation == 3) { - Rasterizer2D.Rasterizer2D_drawHorizontalLine(this.pixelsPerTile * var1, this.pixelsPerTile * (63 - var2) + this.pixelsPerTile - 1, 1, var12); + Rasterizer2D.Rasterizer2D_drawHorizontalLine(this.pixelsPerTile * var1, this.pixelsPerTile * (63 - var2) + this.pixelsPerTile - 1, 1, var10); } } - if (var8.decoration == WorldMapDecorationType.field2705.id) { - int var13 = var8.rotation % 2; - int var14; - if (var13 == 0) { - for (var14 = 0; var14 < this.pixelsPerTile; ++var14) { - Rasterizer2D.Rasterizer2D_drawHorizontalLine(var14 + this.pixelsPerTile * var1, (64 - var2) * this.pixelsPerTile - 1 - var14, 1, var12); + if (var8.decoration == WorldMapDecorationType.field2731.id) { + int var11 = var8.rotation % 2; + int var12; + if (var11 == 0) { + for (var12 = 0; var12 < this.pixelsPerTile; ++var12) { + Rasterizer2D.Rasterizer2D_drawHorizontalLine(var12 + this.pixelsPerTile * var1, (64 - var2) * this.pixelsPerTile - 1 - var12, 1, var10); } } else { - for (var14 = 0; var14 < this.pixelsPerTile; ++var14) { - Rasterizer2D.Rasterizer2D_drawHorizontalLine(var14 + this.pixelsPerTile * var1, var14 + this.pixelsPerTile * (63 - var2), 1, var12); + for (var12 = 0; var12 < this.pixelsPerTile; ++var12) { + Rasterizer2D.Rasterizer2D_drawHorizontalLine(var12 + this.pixelsPerTile * var1, var12 + this.pixelsPerTile * (63 - var2), 1, var10); } } } @@ -708,10 +625,10 @@ public class WorldMapRegion { } - @ObfuscatedName("ad") + @ObfuscatedName("j") @ObfuscatedSignature( signature = "(IILjava/util/HashSet;II)V", - garbageValue = "1378002295" + garbageValue = "-2128075696" ) @Export("drawNonLinkMapIcons") void drawNonLinkMapIcons(int var1, int var2, HashSet var3, int var4) { @@ -728,27 +645,27 @@ public class WorldMapRegion { if (var12 != null && var12.hasValidElement()) { var12.screenX = var10; var12.screenY = var11; - WorldMapElement var13 = class65.WorldMapElement_get(var12.getElement()); + WorldMapElement var13 = Varcs.WorldMapElement_get(var12.getElement()); if (!var3.contains(var13.getObjectId())) { - this.method531(var12, var10, var11, var5); + this.method459(var12, var10, var11, var5); } } } } - @ObfuscatedName("ag") + @ObfuscatedName("ad") @ObfuscatedSignature( signature = "(Ljava/util/HashSet;III)V", - garbageValue = "688144874" + garbageValue = "693286159" ) - void method502(HashSet var1, int var2, int var3) { + void method457(HashSet var1, int var2, int var3) { Iterator var4 = this.icon0List.iterator(); while (var4.hasNext()) { AbstractWorldMapIcon var5 = (AbstractWorldMapIcon)var4.next(); if (var5.hasValidElement()) { - WorldMapElement var6 = class65.WorldMapElement_get(var5.getElement()); + WorldMapElement var6 = Varcs.WorldMapElement_get(var5.getElement()); if (var6 != null && var1.contains(var6.getObjectId())) { this.drawBackgroundCircle(var6, var5.screenX, var5.screenY, var2, var3); } @@ -757,10 +674,10 @@ public class WorldMapRegion { } - @ObfuscatedName("ak") + @ObfuscatedName("am") @ObfuscatedSignature( - signature = "(Lie;IIIII)V", - garbageValue = "-1713466013" + signature = "(Lis;IIIIB)V", + garbageValue = "57" ) @Export("drawBackgroundCircle") void drawBackgroundCircle(WorldMapElement var1, int var2, int var3, int var4, int var5) { @@ -775,51 +692,51 @@ public class WorldMapRegion { } } - @ObfuscatedName("av") + @ObfuscatedName("ai") @ObfuscatedSignature( - signature = "(Lam;IIFI)V", - garbageValue = "1288981667" + signature = "(Laa;IIFI)V", + garbageValue = "1357516657" ) - void method531(AbstractWorldMapIcon var1, int var2, int var3, float var4) { - WorldMapElement var5 = class65.WorldMapElement_get(var1.getElement()); - this.method505(var5, var2, var3); - this.method518(var1, var5, var2, var3, var4); + void method459(AbstractWorldMapIcon var1, int var2, int var3, float var4) { + WorldMapElement var5 = Varcs.WorldMapElement_get(var1.getElement()); + this.method535(var5, var2, var3); + this.method461(var1, var5, var2, var3, var4); } - @ObfuscatedName("am") + @ObfuscatedName("ag") @ObfuscatedSignature( - signature = "(Lie;III)V", - garbageValue = "106414698" + signature = "(Lis;III)V", + garbageValue = "-682100464" ) - void method505(WorldMapElement var1, int var2, int var3) { + void method535(WorldMapElement var1, int var2, int var3) { Sprite var4 = var1.getSpriteBool(false); if (var4 != null) { - int var5 = this.method508(var4, var1.horizontalAlignment); - int var6 = this.method509(var4, var1.verticalAlignment); + int var5 = this.method463(var4, var1.horizontalAlignment); + int var6 = this.method464(var4, var1.verticalAlignment); var4.drawTransBgAt(var5 + var2, var3 + var6); } } - @ObfuscatedName("ab") + @ObfuscatedName("ao") @ObfuscatedSignature( - signature = "(Lam;Lie;IIFI)V", - garbageValue = "1388216927" + signature = "(Laa;Lis;IIFI)V", + garbageValue = "-383988054" ) - void method518(AbstractWorldMapIcon var1, WorldMapElement var2, int var3, int var4, float var5) { + void method461(AbstractWorldMapIcon var1, WorldMapElement var2, int var3, int var4, float var5) { WorldMapLabel var6 = var1.getLabel(); if (var6 != null) { - if (var6.size.method234(var5)) { + if (var6.size.method199(var5)) { Font var7 = (Font)this.fonts.get(var6.size); - var7.drawLines(var6.text, var3 - var6.width / 2, var4, var6.width, var6.height, -16777216 | var2.field3202, 0, 1, 0, var7.ascent / 2); + var7.drawLines(var6.text, var3 - var6.width / 2, var4, var6.width, var6.height, -16777216 | var2.field3227, 0, 1, 0, var7.ascent / 2); } } } - @ObfuscatedName("ax") + @ObfuscatedName("aw") @ObfuscatedSignature( signature = "(IILjava/util/HashSet;II)V", - garbageValue = "-928170224" + garbageValue = "-1649887990" ) @Export("drawMapLinks") void drawMapLinks(int var1, int var2, HashSet var3, int var4) { @@ -831,67 +748,67 @@ public class WorldMapRegion { if (var7.hasValidElement()) { int var8 = var7.coord2.x % 64; int var9 = var7.coord2.y % 64; - var7.screenX = (int)((float)var1 + (float)var8 * var5); + var7.screenX = (int)(var5 * (float)var8 + (float)var1); var7.screenY = (int)((float)(63 - var9) * var5 + (float)var2); if (!var3.contains(var7.getElement())) { - this.method531(var7, var7.screenX, var7.screenY, var5); + this.method459(var7, var7.screenX, var7.screenY, var5); } } } } - @ObfuscatedName("al") + @ObfuscatedName("ak") @ObfuscatedSignature( - signature = "(Llx;Lin;I)I", - garbageValue = "1783118993" + signature = "(Lln;Lip;B)I", + garbageValue = "14" ) - int method508(Sprite var1, HorizontalAlignment var2) { + int method463(Sprite var1, HorizontalAlignment var2) { switch(var2.value) { - case 0: - return 0; case 1: + return 0; + case 2: return -var1.subWidth / 2; default: return -var1.subWidth; } } - @ObfuscatedName("ap") + @ObfuscatedName("aa") @ObfuscatedSignature( - signature = "(Llx;Lik;S)I", - garbageValue = "-8990" + signature = "(Lln;Lik;B)I", + garbageValue = "68" ) - int method509(Sprite var1, VerticalAlignment var2) { + int method464(Sprite var1, VerticalAlignment var2) { switch(var2.value) { - case 0: - return 0; case 1: return -var1.subHeight / 2; + case 2: + return 0; default: return -var1.subHeight; } } - @ObfuscatedName("aj") + @ObfuscatedName("ab") @ObfuscatedSignature( - signature = "(IB)Lar;", - garbageValue = "-77" + signature = "(II)Lam;", + garbageValue = "1821689800" ) - WorldMapLabel method510(int var1) { - WorldMapElement var2 = class65.WorldMapElement_get(var1); + WorldMapLabel method465(int var1) { + WorldMapElement var2 = Varcs.WorldMapElement_get(var1); return this.createMapLabel(var2); } - @ObfuscatedName("ae") + @ObfuscatedName("ar") @ObfuscatedSignature( - signature = "(Lie;I)Lar;", - garbageValue = "520914529" + signature = "(Lis;I)Lam;", + garbageValue = "1746984480" ) @Export("createMapLabel") WorldMapLabel createMapLabel(WorldMapElement var1) { if (var1.name != null && this.fonts != null && this.fonts.get(WorldMapLabelSize.WorldMapLabelSize_small) != null) { - WorldMapLabelSize var2 = WorldMapLabelSize.method228(var1.textSize); + WorldMapLabelSize var2 = WorldMapLabelSize.method209(var1.textSize); if (var2 == null) { return null; } else { @@ -922,12 +839,12 @@ public class WorldMapRegion { } } - @ObfuscatedName("au") + @ObfuscatedName("av") @ObfuscatedSignature( signature = "(IIIIII)Ljava/util/List;", - garbageValue = "151787240" + garbageValue = "-950431739" ) - List method512(int var1, int var2, int var3, int var4, int var5) { + List method467(int var1, int var2, int var3, int var4, int var5) { LinkedList var6 = new LinkedList(); if (var4 >= var1 && var5 >= var2) { if (var4 < var3 + var1 && var5 < var3 + var2) { @@ -959,10 +876,10 @@ public class WorldMapRegion { } } - @ObfuscatedName("ah") + @ObfuscatedName("aq") @ObfuscatedSignature( signature = "(I)Ljava/util/List;", - garbageValue = "-769286964" + garbageValue = "-907071447" ) @Export("icons") List icons() { @@ -972,12 +889,12 @@ public class WorldMapRegion { return var1; } - @ObfuscatedName("an") + @ObfuscatedName("ac") @ObfuscatedSignature( signature = "(IIIII)V", - garbageValue = "1532319764" + garbageValue = "-1544292788" ) - void method514(int var1, int var2, int var3, int var4) { + void method469(int var1, int var2, int var3, int var4) { var3 %= 4; if (var3 == 0) { Rasterizer2D.Rasterizer2D_drawVerticalLine(this.pixelsPerTile * var1, this.pixelsPerTile * (63 - var2), this.pixelsPerTile, var4); @@ -997,71 +914,287 @@ public class WorldMapRegion { } - @ObfuscatedName("d") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "73" + signature = "(II)Lir;", + garbageValue = "1453408926" ) - static final void method599() { - Object var10000 = null; - String var0 = "You can't add yourself to your own friend list"; - class30.addGameMessage(30, "", var0); - } - - @ObfuscatedName("k") - @ObfuscatedSignature( - signature = "(ILcj;ZI)I", - garbageValue = "-2138859104" - ) - static int method574(int var0, Script var1, boolean var2) { - Widget var3 = var2 ? class96.field1301 : ReflectionCheck.field1310; - if (var0 == ScriptOpcodes.CC_GETSCROLLX) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.scrollX; - return 1; - } else if (var0 == ScriptOpcodes.CC_GETSCROLLY) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.scrollY; - return 1; - } else if (var0 == ScriptOpcodes.CC_GETTEXT) { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var3.text; - return 1; - } else if (var0 == ScriptOpcodes.CC_GETSCROLLWIDTH) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.scrollWidth; - return 1; - } else if (var0 == ScriptOpcodes.CC_GETSCROLLHEIGHT) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.scrollHeight; - return 1; - } else if (var0 == ScriptOpcodes.CC_GETMODELZOOM) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.modelZoom; - return 1; - } else if (var0 == ScriptOpcodes.CC_GETMODELANGLE_X) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.modelAngleX; - return 1; - } else if (var0 == ScriptOpcodes.CC_GETMODELANGLE_Z) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.modelAngleZ; - return 1; - } else if (var0 == ScriptOpcodes.CC_GETMODELANGLE_Y) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.modelAngleY; - return 1; - } else if (var0 == ScriptOpcodes.CC_GETTRANSTOP) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.transparencyTop; - return 1; - } else if (var0 == ScriptOpcodes.CC_GETTRANSBOT) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.transparencyBot; - return 1; - } else if (var0 == ScriptOpcodes.CC_GETCOLOUR) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.color; - return 1; - } else if (var0 == ScriptOpcodes.CC_GETFILLCOLOUR) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.color2; - return 1; - } else if (var0 == ScriptOpcodes.CC_GETFILLMODE) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.fillMode.rsOrdinal(); - return 1; - } else if (var0 == ScriptOpcodes.CC_GETMODELTRANSPARENT) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.modelTransparency ? 1 : 0; - return 1; + @Export("SpotAnimationDefinition_get") + public static SpotAnimationDefinition SpotAnimationDefinition_get(int var0) { + SpotAnimationDefinition var1 = (SpotAnimationDefinition)SpotAnimationDefinition.SpotAnimationDefinition_cached.get((long)var0); + if (var1 != null) { + return var1; } else { - return 2; + byte[] var2 = SpotAnimationDefinition.SpotAnimationDefinition_archive.takeFile(13, var0); + var1 = new SpotAnimationDefinition(); + var1.id = var0; + if (var2 != null) { + var1.decode(new Buffer(var2)); + } + + SpotAnimationDefinition.SpotAnimationDefinition_cached.put(var1, (long)var0); + return var1; } } + + @ObfuscatedName("u") + @ObfuscatedSignature( + signature = "(Lhf;Lhf;ZII)V", + garbageValue = "347974889" + ) + static void method505(AbstractArchive var0, AbstractArchive var1, boolean var2, int var3) { + if (Login.field1194) { + if (var3 == 4) { + Login.loginIndex = 4; + } + + } else { + Login.loginIndex = var3; + Rasterizer2D.Rasterizer2D_clear(); + byte[] var4 = var0.takeFileByNames("title.jpg", ""); + AbstractByteArrayCopier.leftTitleSprite = MouseHandler.convertJpgToSprite(var4); + class319.rightTitleSprite = AbstractByteArrayCopier.leftTitleSprite.mirrorHorizontally(); + if ((Client.worldProperties & 536870912) != 0) { + Decimator.logoSprite = BZip2State.SpriteBuffer_getIndexedSpriteByName(var1, "logo_deadman_mode", ""); + } else if ((Client.worldProperties & 1073741824) != 0) { + Decimator.logoSprite = BZip2State.SpriteBuffer_getIndexedSpriteByName(var1, "logo_seasonal_mode", ""); + } else { + Decimator.logoSprite = BZip2State.SpriteBuffer_getIndexedSpriteByName(var1, "logo", ""); + } + + Login.titleboxSprite = BZip2State.SpriteBuffer_getIndexedSpriteByName(var1, "titlebox", ""); + Login.titlebuttonSprite = BZip2State.SpriteBuffer_getIndexedSpriteByName(var1, "titlebutton", ""); + int var6 = var1.getGroupId("runes"); + int var7 = var1.getFileId(var6, ""); + IndexedSprite[] var8; + if (!GraphicsObject.method2030(var1, var6, var7)) { + var8 = null; + } else { + var8 = WallDecoration.method3341(); + } + + StructDefinition.runesSprite = var8; + var7 = var1.getGroupId("title_mute"); + int var10 = var1.getFileId(var7, ""); + IndexedSprite[] var9; + if (!GraphicsObject.method2030(var1, var7, var10)) { + var9 = null; + } else { + var9 = WallDecoration.method3341(); + } + + Login.title_muteSprite = var9; + InterfaceParent.options_buttons_0Sprite = BZip2State.SpriteBuffer_getIndexedSpriteByName(var1, "options_radio_buttons,0", ""); + Login.field1179 = BZip2State.SpriteBuffer_getIndexedSpriteByName(var1, "options_radio_buttons,4", ""); + Varps.options_buttons_2Sprite = BZip2State.SpriteBuffer_getIndexedSpriteByName(var1, "options_radio_buttons,2", ""); + StructDefinition.field3315 = BZip2State.SpriteBuffer_getIndexedSpriteByName(var1, "options_radio_buttons,6", ""); + HealthBar.field1115 = InterfaceParent.options_buttons_0Sprite.subWidth; + class40.field348 = InterfaceParent.options_buttons_0Sprite.subHeight; + DynamicObject.loginScreenRunesAnimation = new LoginScreenAnimation(StructDefinition.runesSprite); + if (var2) { + Login.Login_username = ""; + Login.Login_password = ""; + } + + class192.field2395 = 0; + WorldMapSection0.otp = ""; + Login.field1196 = true; + Login.worldSelectOpen = false; + if (!UserComparator10.clientPreferences.titleMusicDisabled) { + Archive var12 = AbstractWorldMapData.archive6; + var10 = var12.getGroupId("scape main"); + int var13 = var12.getFileId(var10, ""); + World.method1819(2, var12, var10, var13, 255, false); + } else { + UrlRequest.method3358(2); + } + + if (NetCache.NetCache_socket != null) { + try { + Buffer var16 = new Buffer(4); + var16.writeByte(3); + var16.writeMedium(0); + NetCache.NetCache_socket.write(var16.array, 0, 4); + } catch (IOException var15) { + try { + NetCache.NetCache_socket.close(); + } catch (Exception var14) { + } + + ++NetCache.NetCache_ioExceptions; + NetCache.NetCache_socket = null; + } + } + + Login.field1194 = true; + Login.xPadding = (BoundaryObject.canvasWidth - 765) / 2; + Login.loginBoxX = Login.xPadding + 202; + GrandExchangeOfferOwnWorldComparator.loginBoxCenter = Login.loginBoxX + 180; + AbstractByteArrayCopier.leftTitleSprite.drawAt(Login.xPadding, 0); + class319.rightTitleSprite.drawAt(Login.xPadding + 382, 0); + Decimator.logoSprite.drawAt(Login.xPadding + 382 - Decimator.logoSprite.subWidth / 2, 18); + } + } + + @ObfuscatedName("hg") + @ObfuscatedSignature( + signature = "(ZLkj;B)V", + garbageValue = "0" + ) + @Export("loadRegions") + static final void loadRegions(boolean var0, PacketBuffer var1) { + Client.isInInstance = var0; + int var2; + int var4; + int var5; + int var6; + int var7; + int var8; + if (!Client.isInInstance) { + var2 = var1.method5640(); + int var3 = var1.method5641(); + var4 = var1.readUnsignedShort(); + WorldMapIcon_0.xteaKeys = new int[var4][4]; + + for (var5 = 0; var5 < var4; ++var5) { + for (var6 = 0; var6 < 4; ++var6) { + WorldMapIcon_0.xteaKeys[var5][var6] = var1.readInt(); + } + } + + class226.regions = new int[var4]; + BuddyRankComparator.regionMapArchiveIds = new int[var4]; + GrandExchangeOfferAgeComparator.regionLandArchiveIds = new int[var4]; + VerticalAlignment.regionLandArchives = new byte[var4][]; + UrlRequest.regionMapArchives = new byte[var4][]; + boolean var16 = false; + if ((var3 / 8 == 48 || var3 / 8 == 49) && var2 / 8 == 48) { + var16 = true; + } + + if (var3 / 8 == 48 && var2 / 8 == 148) { + var16 = true; + } + + var4 = 0; + + for (var6 = (var3 - 6) / 8; var6 <= (var3 + 6) / 8; ++var6) { + for (var7 = (var2 - 6) / 8; var7 <= (var2 + 6) / 8; ++var7) { + var8 = var7 + (var6 << 8); + if (!var16 || var7 != 49 && var7 != 149 && var7 != 147 && var6 != 50 && (var6 != 49 || var7 != 47)) { + class226.regions[var4] = var8; + BuddyRankComparator.regionMapArchiveIds[var4] = DirectByteArrayCopier.archive5.getGroupId("m" + var6 + "_" + var7); + GrandExchangeOfferAgeComparator.regionLandArchiveIds[var4] = DirectByteArrayCopier.archive5.getGroupId("l" + var6 + "_" + var7); + ++var4; + } + } + } + + WorldMapSection0.method259(var3, var2, true); + } else { + var2 = var1.method5719(); + boolean var15 = var1.method5631() == 1; + var4 = var1.method5719(); + var5 = var1.readUnsignedShort(); + var1.importIndex(); + + int var9; + for (var6 = 0; var6 < 4; ++var6) { + for (var7 = 0; var7 < 13; ++var7) { + for (var8 = 0; var8 < 13; ++var8) { + var9 = var1.readBits(1); + if (var9 == 1) { + Client.instanceChunkTemplates[var6][var7][var8] = var1.readBits(26); + } else { + Client.instanceChunkTemplates[var6][var7][var8] = -1; + } + } + } + } + + var1.exportIndex(); + WorldMapIcon_0.xteaKeys = new int[var5][4]; + + for (var6 = 0; var6 < var5; ++var6) { + for (var7 = 0; var7 < 4; ++var7) { + WorldMapIcon_0.xteaKeys[var6][var7] = var1.readInt(); + } + } + + class226.regions = new int[var5]; + BuddyRankComparator.regionMapArchiveIds = new int[var5]; + GrandExchangeOfferAgeComparator.regionLandArchiveIds = new int[var5]; + VerticalAlignment.regionLandArchives = new byte[var5][]; + UrlRequest.regionMapArchives = new byte[var5][]; + var5 = 0; + + for (var6 = 0; var6 < 4; ++var6) { + for (var7 = 0; var7 < 13; ++var7) { + for (var8 = 0; var8 < 13; ++var8) { + var9 = Client.instanceChunkTemplates[var6][var7][var8]; + if (var9 != -1) { + int var10 = var9 >> 14 & 1023; + int var11 = var9 >> 3 & 2047; + int var12 = (var10 / 8 << 8) + var11 / 8; + + int var13; + for (var13 = 0; var13 < var5; ++var13) { + if (class226.regions[var13] == var12) { + var12 = -1; + break; + } + } + + if (var12 != -1) { + class226.regions[var5] = var12; + var13 = var12 >> 8 & 255; + int var14 = var12 & 255; + BuddyRankComparator.regionMapArchiveIds[var5] = DirectByteArrayCopier.archive5.getGroupId("m" + var13 + "_" + var14); + GrandExchangeOfferAgeComparator.regionLandArchiveIds[var5] = DirectByteArrayCopier.archive5.getGroupId("l" + var13 + "_" + var14); + ++var5; + } + } + } + } + } + + WorldMapSection0.method259(var4, var2, !var15); + } + + } + + @ObfuscatedName("jp") + @ObfuscatedSignature( + signature = "(Lhl;Liu;IIZI)V", + garbageValue = "-1451067375" + ) + @Export("addWidgetItemMenuItem") + static final void addWidgetItemMenuItem(Widget var0, ItemDefinition var1, int var2, int var3, boolean var4) { + String[] var5 = var1.inventoryActions; + byte var6 = -1; + String var7 = null; + if (var5 != null && var5[var3] != null) { + if (var3 == 0) { + var6 = 33; + } else if (var3 == 1) { + var6 = 34; + } else if (var3 == 2) { + var6 = 35; + } else if (var3 == 3) { + var6 = 36; + } else { + var6 = 37; + } + + var7 = var5[var3]; + } else if (var3 == 4) { + var6 = 37; + var7 = "Drop"; + } + + if (var6 != -1 && var7 != null) { + class14.insertMenuItem(var7, class222.colorStartTag(16748608) + var1.name, var6, var1.id, var2, var0.id, var4); + } + + } } diff --git a/runescape-client/src/main/java/WorldMapSection.java b/runescape-client/src/main/java/WorldMapSection.java index d51882aa75..fa983a40dc 100644 --- a/runescape-client/src/main/java/WorldMapSection.java +++ b/runescape-client/src/main/java/WorldMapSection.java @@ -3,53 +3,53 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("al") +@ObfuscatedName("av") @Implements("WorldMapSection") public interface WorldMapSection { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Laa;B)V", - garbageValue = "-111" + signature = "(Laf;I)V", + garbageValue = "-567179164" ) @Export("expandBounds") void expandBounds(WorldMapArea var1); - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(IIII)Z", - garbageValue = "-1417818612" + signature = "(IIIB)Z", + garbageValue = "0" ) @Export("containsCoord") boolean containsCoord(int var1, int var2, int var3); - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( signature = "(III)Z", - garbageValue = "-2132898041" + garbageValue = "110675609" ) @Export("containsPosition") boolean containsPosition(int var1, int var2); - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(IIII)[I", - garbageValue = "1209167521" + signature = "(IIIB)[I", + garbageValue = "69" ) @Export("getBorderTileLengths") int[] getBorderTileLengths(int var1, int var2, int var3); - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(IIS)Lhf;", - garbageValue = "7283" + signature = "(III)Lhx;", + garbageValue = "1062204141" ) @Export("coord") Coord coord(int var1, int var2); - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(Lkc;I)V", - garbageValue = "-568369534" + signature = "(Lkg;I)V", + garbageValue = "-179898655" ) @Export("read") void read(Buffer var1); diff --git a/runescape-client/src/main/java/WorldMapSection0.java b/runescape-client/src/main/java/WorldMapSection0.java index 8553a35e2e..6a18426847 100644 --- a/runescape-client/src/main/java/WorldMapSection0.java +++ b/runescape-client/src/main/java/WorldMapSection0.java @@ -1,96 +1,96 @@ -import java.lang.management.GarbageCollectorMXBean; -import java.lang.management.ManagementFactory; -import java.util.Iterator; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("b") +@ObfuscatedName("s") @Implements("WorldMapSection0") public class WorldMapSection0 implements WorldMapSection { - @ObfuscatedName("a") + @ObfuscatedName("bi") + @Export("otp") + static String otp; + @ObfuscatedName("u") @ObfuscatedGetter( - intValue = -372540487 + intValue = 794568467 ) @Export("oldZ") int oldZ; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = 889180281 + intValue = -1084191983 ) @Export("newZ") int newZ; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = -400617797 + intValue = 1594820829 ) @Export("oldX") int oldX; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = 399728783 + intValue = -937429385 ) @Export("oldY") int oldY; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = -1763177127 + intValue = -1148101127 ) @Export("newX") int newX; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = 923116577 + intValue = 253679643 ) @Export("newY") int newY; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedGetter( - intValue = 335677209 + intValue = -1649308031 ) @Export("oldChunkXLow") int oldChunkXLow; - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedGetter( - intValue = -2053674359 + intValue = 842286875 ) @Export("oldChunkYLow") int oldChunkYLow; - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedGetter( - intValue = 1863625007 + intValue = 491567857 ) @Export("oldChunkXHigh") int oldChunkXHigh; - @ObfuscatedName("d") + @ObfuscatedName("i") @ObfuscatedGetter( - intValue = -887060215 + intValue = 1271565133 ) @Export("oldChunkYHigh") int oldChunkYHigh; - @ObfuscatedName("m") + @ObfuscatedName("k") @ObfuscatedGetter( - intValue = 1381589897 + intValue = -79221889 ) @Export("newChunkXLow") int newChunkXLow; - @ObfuscatedName("p") + @ObfuscatedName("x") @ObfuscatedGetter( - intValue = -1499685421 + intValue = 1895250651 ) @Export("newChunkYLow") int newChunkYLow; - @ObfuscatedName("h") + @ObfuscatedName("o") @ObfuscatedGetter( - intValue = -1091787841 + intValue = -422163411 ) @Export("newChunkXHigh") int newChunkXHigh; - @ObfuscatedName("k") + @ObfuscatedName("e") @ObfuscatedGetter( - intValue = 1129428397 + intValue = 2009466803 ) @Export("newChunkYHigh") int newChunkYHigh; @@ -98,10 +98,10 @@ public class WorldMapSection0 implements WorldMapSection { WorldMapSection0() { } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Laa;B)V", - garbageValue = "-111" + signature = "(Laf;I)V", + garbageValue = "-567179164" ) @Export("expandBounds") public void expandBounds(WorldMapArea var1) { @@ -123,34 +123,34 @@ public class WorldMapSection0 implements WorldMapSection { } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(IIII)Z", - garbageValue = "-1417818612" + signature = "(IIIB)Z", + garbageValue = "0" ) @Export("containsCoord") public boolean containsCoord(int var1, int var2, int var3) { - if (var1 >= this.oldZ && var1 < this.oldZ + this.newZ) { + if (var1 >= this.oldZ && var1 < this.newZ + this.oldZ) { return var2 >= (this.oldX << 6) + (this.oldChunkXLow << 3) && var2 <= (this.oldX << 6) + (this.oldChunkXHigh << 3) + 7 && var3 >= (this.oldY << 6) + (this.oldChunkYLow << 3) && var3 <= (this.oldY << 6) + (this.oldChunkYHigh << 3) + 7; } else { return false; } } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( signature = "(III)Z", - garbageValue = "-2132898041" + garbageValue = "110675609" ) @Export("containsPosition") public boolean containsPosition(int var1, int var2) { return var1 >= (this.newX << 6) + (this.newChunkXLow << 3) && var1 <= (this.newX << 6) + (this.newChunkXHigh << 3) + 7 && var2 >= (this.newY << 6) + (this.newChunkYLow << 3) && var2 <= (this.newY << 6) + (this.newChunkYHigh << 3) + 7; } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(IIII)[I", - garbageValue = "1209167521" + signature = "(IIIB)[I", + garbageValue = "69" ) @Export("getBorderTileLengths") public int[] getBorderTileLengths(int var1, int var2, int var3) { @@ -162,10 +162,10 @@ public class WorldMapSection0 implements WorldMapSection { } } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(IIS)Lhf;", - garbageValue = "7283" + signature = "(III)Lhx;", + garbageValue = "1062204141" ) @Export("coord") public Coord coord(int var1, int var2) { @@ -178,10 +178,10 @@ public class WorldMapSection0 implements WorldMapSection { } } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(Lkc;I)V", - garbageValue = "-568369534" + signature = "(Lkg;I)V", + garbageValue = "-179898655" ) @Export("read") public void read(Buffer var1) { @@ -202,87 +202,241 @@ public class WorldMapSection0 implements WorldMapSection { this.postRead(); } - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "26" + signature = "(I)V", + garbageValue = "-720698828" ) @Export("postRead") void postRead() { } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Lhq;I)V", - garbageValue = "667089827" + signature = "(I)[Lhz;", + garbageValue = "524553725" ) - public static void method263(AbstractArchive var0) { - VarpDefinition.VarpDefinition_archive = var0; - VarpDefinition.VarpDefinition_fileCount = VarpDefinition.VarpDefinition_archive.getGroupFileCount(16); + public static ServerBuild[] method245() { + return new ServerBuild[]{ServerBuild.WIP, ServerBuild.BUILDLIVE, ServerBuild.LIVE, ServerBuild.RC}; } - @ObfuscatedName("ac") + @ObfuscatedName("gk") @ObfuscatedSignature( - signature = "(S)I", - garbageValue = "128" + signature = "(I)V", + garbageValue = "1303877167" ) - @Export("getGcDuration") - protected static int getGcDuration() { - int var0 = 0; - if (WorldMapRectangle.garbageCollector == null || !WorldMapRectangle.garbageCollector.isValid()) { - try { - Iterator var1 = ManagementFactory.getGarbageCollectorMXBeans().iterator(); + static final void method251() { + for (Projectile var0 = (Projectile)Client.projectiles.last(); var0 != null; var0 = (Projectile)Client.projectiles.previous()) { + if (var0.plane == ClientPacket.Client_plane && Client.cycle <= var0.cycleEnd) { + if (Client.cycle >= var0.cycleStart) { + if (var0.targetIndex > 0) { + NPC var1 = Client.npcs[var0.targetIndex - 1]; + if (var1 != null && var1.x >= 0 && var1.x < 13312 && var1.y >= 0 && var1.y < 13312) { + var0.setDestination(var1.x, var1.y, class195.getTileHeight(var1.x, var1.y, var0.plane) - var0.endHeight, Client.cycle); + } + } - while (var1.hasNext()) { - GarbageCollectorMXBean var2 = (GarbageCollectorMXBean)var1.next(); - if (var2.isValid()) { - WorldMapRectangle.garbageCollector = var2; - GameShell.garbageCollectorLastCheckTimeMs = -1L; - GameShell.garbageCollectorLastCollectionTime = -1L; + if (var0.targetIndex < 0) { + int var2 = -var0.targetIndex - 1; + Player var3; + if (var2 == Client.localPlayerIndex) { + var3 = class215.localPlayer; + } else { + var3 = Client.players[var2]; + } + + if (var3 != null && var3.x >= 0 && var3.x < 13312 && var3.y >= 0 && var3.y < 13312) { + var0.setDestination(var3.x, var3.y, class195.getTileHeight(var3.x, var3.y, var0.plane) - var0.endHeight, Client.cycle); + } + } + + var0.advance(Client.field704); + class2.scene.drawEntity(ClientPacket.Client_plane, (int)var0.x, (int)var0.y, (int)var0.z, 60, var0, var0.yaw, -1L, false); + } + } else { + var0.remove(); + } + } + + } + + @ObfuscatedName("gq") + @ObfuscatedSignature( + signature = "(I)Z", + garbageValue = "-137026556" + ) + static boolean method257() { + return (Client.drawPlayerNames & 4) != 0; + } + + @ObfuscatedName("ha") + @ObfuscatedSignature( + signature = "(IIZB)V", + garbageValue = "1" + ) + static final void method259(int var0, int var1, boolean var2) { + if (!var2 || var0 != CollisionMap.field2086 || SoundCache.field1438 != var1) { + CollisionMap.field2086 = var0; + SoundCache.field1438 = var1; + class81.updateGameState(25); + WorldMapIcon_1.drawLoadingMessage("Loading - please wait.", true); + int var3 = class51.baseX * 64; + int var4 = VarcInt.baseY * 64; + class51.baseX = (var0 - 6) * 8; + VarcInt.baseY = (var1 - 6) * 8; + int var5 = class51.baseX * 64 - var3; + int var6 = VarcInt.baseY * 64 - var4; + var3 = class51.baseX * 64; + var4 = VarcInt.baseY * 64; + + int var7; + int var9; + int[] var10000; + for (var7 = 0; var7 < 32768; ++var7) { + NPC var8 = Client.npcs[var7]; + if (var8 != null) { + for (var9 = 0; var9 < 10; ++var9) { + var10000 = var8.pathX; + var10000[var9] -= var5; + var10000 = var8.pathY; + var10000[var9] -= var6; + } + + var8.x -= var5 * 128; + var8.y -= var6 * 128; + } + } + + for (var7 = 0; var7 < 2048; ++var7) { + Player var21 = Client.players[var7]; + if (var21 != null) { + for (var9 = 0; var9 < 10; ++var9) { + var10000 = var21.pathX; + var10000[var9] -= var5; + var10000 = var21.pathY; + var10000[var9] -= var6; + } + + var21.x -= var5 * 128; + var21.y -= var6 * 128; + } + } + + byte var20 = 0; + byte var18 = 104; + byte var22 = 1; + if (var5 < 0) { + var20 = 103; + var18 = -1; + var22 = -1; + } + + byte var10 = 0; + byte var11 = 104; + byte var12 = 1; + if (var6 < 0) { + var10 = 103; + var11 = -1; + var12 = -1; + } + + int var14; + for (int var13 = var20; var13 != var18; var13 += var22) { + for (var14 = var10; var14 != var11; var14 += var12) { + int var15 = var13 + var5; + int var16 = var6 + var14; + + for (int var17 = 0; var17 < 4; ++var17) { + if (var15 >= 0 && var16 >= 0 && var15 < 104 && var16 < 104) { + Client.groundItems[var17][var13][var14] = Client.groundItems[var17][var15][var16]; + } else { + Client.groundItems[var17][var13][var14] = null; + } } } - } catch (Throwable var11) { } - } - if (WorldMapRectangle.garbageCollector != null) { - long var9 = PlayerAppearance.currentTimeMillis(); - long var3 = WorldMapRectangle.garbageCollector.getCollectionTime(); - if (-1L != GameShell.garbageCollectorLastCollectionTime) { - long var5 = var3 - GameShell.garbageCollectorLastCollectionTime; - long var7 = var9 - GameShell.garbageCollectorLastCheckTimeMs; - if (0L != var7) { - var0 = (int)(100L * var5 / var7); + for (PendingSpawn var19 = (PendingSpawn)Client.pendingSpawns.last(); var19 != null; var19 = (PendingSpawn)Client.pendingSpawns.previous()) { + var19.x -= var5; + var19.y -= var6; + if (var19.x < 0 || var19.y < 0 || var19.x >= 104 || var19.y >= 104) { + var19.remove(); } } - GameShell.garbageCollectorLastCollectionTime = var3; - GameShell.garbageCollectorLastCheckTimeMs = var9; - } - - return var0; - } - - @ObfuscatedName("ff") - @ObfuscatedSignature( - signature = "(II)I", - garbageValue = "-1258868168" - ) - static int method285(int var0) { - return var0 * 3 + 600; - } - - @ObfuscatedName("ik") - @ObfuscatedSignature( - signature = "(IIIII)V", - garbageValue = "1698930592" - ) - static final void method279(int var0, int var1, int var2, int var3) { - for (int var4 = 0; var4 < Client.rootWidgetCount; ++var4) { - if (Client.rootWidgetWidths[var4] + Client.rootWidgetXs[var4] > var0 && Client.rootWidgetXs[var4] < var0 + var2 && Client.rootWidgetHeights[var4] + Client.rootWidgetYs[var4] > var1 && Client.rootWidgetYs[var4] < var3 + var1) { - Client.field837[var4] = true; + if (Client.destinationX != 0) { + Client.destinationX -= var5; + Client.destinationY -= var6; } + + Client.soundEffectCount = 0; + Client.isCameraLocked = false; + class30.cameraX -= var5 << 7; + FloorDecoration.cameraZ -= var6 << 7; + class80.oculusOrbFocalPointX -= var5 << 7; + class81.oculusOrbFocalPointY -= var6 << 7; + Client.field867 = -1; + Client.graphicsObjects.clear(); + Client.projectiles.clear(); + + for (var14 = 0; var14 < 4; ++var14) { + Client.collisionMaps[var14].clear(); + } + + } + } + + @ObfuscatedName("id") + @ObfuscatedSignature( + signature = "(IIIIIIB)V", + garbageValue = "-57" + ) + static final void method255(int var0, int var1, int var2, int var3, int var4, int var5) { + int var6 = var2 - var0; + int var7 = var3 - var1; + int var8 = var6 >= 0 ? var6 : -var6; + int var9 = var7 >= 0 ? var7 : -var7; + int var10 = var8; + if (var8 < var9) { + var10 = var9; } + if (var10 != 0) { + int var11 = (var6 << 16) / var10; + int var12 = (var7 << 16) / var10; + if (var12 <= var11) { + var11 = -var11; + } else { + var12 = -var12; + } + + int var13 = var5 * var12 >> 17; + int var14 = var5 * var12 + 1 >> 17; + int var15 = var5 * var11 >> 17; + int var16 = var5 * var11 + 1 >> 17; + var0 -= Rasterizer2D.Rasterizer2D_xClipStart; + var1 -= Rasterizer2D.Rasterizer2D_yClipStart; + int var17 = var0 + var13; + int var18 = var0 - var14; + int var19 = var0 + var6 - var14; + int var20 = var0 + var6 + var13; + int var21 = var15 + var1; + int var22 = var1 - var16; + int var23 = var7 + var1 - var16; + int var24 = var15 + var7 + var1; + Rasterizer3D.method3035(var17, var18, var19); + Rasterizer3D.method3055(var21, var22, var23, var17, var18, var19, var4); + Rasterizer3D.method3035(var17, var19, var20); + Rasterizer3D.method3055(var21, var23, var24, var17, var19, var20, var4); + } + } + + @ObfuscatedName("kd") + @ObfuscatedSignature( + signature = "(B)Z", + garbageValue = "-121" + ) + public static boolean method254() { + return Client.staffModLevel >= 2; } } diff --git a/runescape-client/src/main/java/WorldMapSection1.java b/runescape-client/src/main/java/WorldMapSection1.java index aaf985b4b2..d565c8fa48 100644 --- a/runescape-client/src/main/java/WorldMapSection1.java +++ b/runescape-client/src/main/java/WorldMapSection1.java @@ -1,56 +1,52 @@ -import java.awt.image.BufferedImage; -import java.awt.image.PixelGrabber; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import javax.imageio.ImageIO; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; +import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("av") +@ObfuscatedName("ak") @Implements("WorldMapSection1") public class WorldMapSection1 implements WorldMapSection { - @ObfuscatedName("br") + @ObfuscatedName("n") @ObfuscatedSignature( - signature = "Lgw;" + signature = "[Lmb;" ) - @Export("clientLanguage") - static Language clientLanguage; - @ObfuscatedName("a") + @Export("JagexCache_idxFiles") + public static BufferedFile[] JagexCache_idxFiles; + @ObfuscatedName("u") @ObfuscatedGetter( - intValue = 1154068221 + intValue = 1685599607 ) @Export("minPlane") int minPlane; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = -1054158347 + intValue = 1999692887 ) @Export("planes") int planes; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = -1028854111 + intValue = -942650023 ) @Export("regionStartX") int regionStartX; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = -1350471723 + intValue = 867361781 ) @Export("regionStartY") int regionStartY; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = -1028705705 + intValue = -101152241 ) @Export("regionEndX") int regionEndX; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = -615162757 + intValue = -1283345723 ) @Export("regionEndY") int regionEndY; @@ -58,10 +54,10 @@ public class WorldMapSection1 implements WorldMapSection { WorldMapSection1() { } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Laa;B)V", - garbageValue = "-111" + signature = "(Laf;I)V", + garbageValue = "-567179164" ) @Export("expandBounds") public void expandBounds(WorldMapArea var1) { @@ -83,10 +79,10 @@ public class WorldMapSection1 implements WorldMapSection { } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(IIII)Z", - garbageValue = "-1417818612" + signature = "(IIIB)Z", + garbageValue = "0" ) @Export("containsCoord") public boolean containsCoord(int var1, int var2, int var3) { @@ -97,20 +93,20 @@ public class WorldMapSection1 implements WorldMapSection { } } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( signature = "(III)Z", - garbageValue = "-2132898041" + garbageValue = "110675609" ) @Export("containsPosition") public boolean containsPosition(int var1, int var2) { return var1 >> 6 == this.regionEndX && var2 >> 6 == this.regionEndY; } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(IIII)[I", - garbageValue = "1209167521" + signature = "(IIIB)[I", + garbageValue = "69" ) @Export("getBorderTileLengths") public int[] getBorderTileLengths(int var1, int var2, int var3) { @@ -122,10 +118,10 @@ public class WorldMapSection1 implements WorldMapSection { } } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(IIS)Lhf;", - garbageValue = "7283" + signature = "(III)Lhx;", + garbageValue = "1062204141" ) @Export("coord") public Coord coord(int var1, int var2) { @@ -138,10 +134,10 @@ public class WorldMapSection1 implements WorldMapSection { } } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(Lkc;I)V", - garbageValue = "-568369534" + signature = "(Lkg;I)V", + garbageValue = "-179898655" ) @Export("read") public void read(Buffer var1) { @@ -154,77 +150,193 @@ public class WorldMapSection1 implements WorldMapSection { this.postRead(); } - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "0" + signature = "(S)V", + garbageValue = "24453" ) @Export("postRead") void postRead() { } - @ObfuscatedName("a") - static double method636(double var0, double var2, double var4) { - double var8 = (var0 - var2) / var4; - double var6 = Math.exp(var8 * -var8 / 2.0D) / Math.sqrt(6.283185307179586D); - return var6 / var4; + @ObfuscatedName("ad") + @ObfuscatedSignature( + signature = "(ILci;ZI)I", + garbageValue = "2067756787" + ) + static int method608(int var0, Script var1, boolean var2) { + if (var0 == ScriptOpcodes.CLIENTCLOCK) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Client.cycle; + return 1; + } else { + int var3; + int var4; + if (var0 == ScriptOpcodes.INV_GETOBJ) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var3 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var4 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = AttackOption.method2098(var3, var4); + return 1; + } else if (var0 == ScriptOpcodes.INV_GETNUM) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var3 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var4 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = class286.ItemContainer_getCount(var3, var4); + return 1; + } else if (var0 == ScriptOpcodes.INV_TOTAL) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var3 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var4 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = class96.method2314(var3, var4); + return 1; + } else if (var0 == ScriptOpcodes.INV_SIZE) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = TextureProvider.getInvDefinition(var3).size; + return 1; + } else if (var0 == ScriptOpcodes.STAT) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Client.currentLevels[var3]; + return 1; + } else if (var0 == ScriptOpcodes.STAT_BASE) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Client.levels[var3]; + return 1; + } else if (var0 == ScriptOpcodes.STAT_XP) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Client.experience[var3]; + return 1; + } else { + int var5; + if (var0 == ScriptOpcodes.COORD) { + var3 = ClientPacket.Client_plane; + var4 = class51.baseX * 64 + (class215.localPlayer.x >> 7); + var5 = VarcInt.baseY * 64 + (class215.localPlayer.y >> 7); + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = (var4 << 14) + var5 + (var3 << 28); + return 1; + } else if (var0 == ScriptOpcodes.COORDX) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3 >> 14 & 16383; + return 1; + } else if (var0 == ScriptOpcodes.COORDZ) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3 >> 28; + return 1; + } else if (var0 == ScriptOpcodes.COORDY) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3 & 16383; + return 1; + } else if (var0 == ScriptOpcodes.MAP_MEMBERS) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Client.isMembersWorld ? 1 : 0; + return 1; + } else if (var0 == ScriptOpcodes.INVOTHER_GETOBJ) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var3 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] + 32768; + var4 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = AttackOption.method2098(var3, var4); + return 1; + } else if (var0 == ScriptOpcodes.INVOTHER_GETNUM) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var3 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] + 32768; + var4 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = class286.ItemContainer_getCount(var3, var4); + return 1; + } else if (var0 == ScriptOpcodes.INVOTHER_TOTAL) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var3 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] + 32768; + var4 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = class96.method2314(var3, var4); + return 1; + } else if (var0 == ScriptOpcodes.STAFFMODLEVEL) { + if (Client.staffModLevel >= 2) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Client.staffModLevel; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + } + + return 1; + } else if (var0 == ScriptOpcodes.REBOOTTIMER) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Client.rebootTimer; + return 1; + } else if (var0 == ScriptOpcodes.MAP_WORLD) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Client.worldId; + return 1; + } else if (var0 == ScriptOpcodes.RUNENERGY_VISIBLE) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Client.runEnergy; + return 1; + } else if (var0 == ScriptOpcodes.RUNWEIGHT_VISIBLE) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Client.weight; + return 1; + } else if (var0 == ScriptOpcodes.PLAYERMOD) { + if (Client.playerMod) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 1; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + } + + return 1; + } else if (var0 == ScriptOpcodes.WORLDFLAGS) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Client.worldProperties; + return 1; + } else if (var0 == ScriptOpcodes.MOVECOORD) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 4; + var3 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var4 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + var5 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 2]; + int var6 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 3]; + var3 += var4 << 14; + var3 += var5 << 28; + var3 += var6; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3; + return 1; + } else { + return 2; + } + } + } } - @ObfuscatedName("a") + @ObfuscatedName("iy") @ObfuscatedSignature( - signature = "([BS)Llx;", - garbageValue = "-10858" + signature = "(Lhl;IIZI)V", + garbageValue = "-521938970" ) - @Export("convertJpgToSprite") - public static final Sprite convertJpgToSprite(byte[] var0) { - BufferedImage var1 = null; - - try { - var1 = ImageIO.read(new ByteArrayInputStream(var0)); - int var2 = var1.getWidth(); - int var3 = var1.getHeight(); - int[] var4 = new int[var2 * var3]; - PixelGrabber var5 = new PixelGrabber(var1, 0, 0, var2, var3, var4, 0, var2); - var5.grabPixels(); - return new Sprite(var4, var2, var3); - } catch (IOException var7) { - } catch (InterruptedException var8) { + @Export("alignWidgetSize") + static void alignWidgetSize(Widget var0, int var1, int var2, boolean var3) { + int var4 = var0.width; + int var5 = var0.height; + if (var0.widthAlignment == 0) { + var0.width = var0.rawWidth; + } else if (var0.widthAlignment == 1) { + var0.width = var1 - var0.rawWidth; + } else if (var0.widthAlignment == 2) { + var0.width = var0.rawWidth * var1 >> 14; } - return new Sprite(0, 0); - } - - @ObfuscatedName("hf") - @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "-1373255332" - ) - static final void method622() { - Client.field745 = 0; - int var0 = UserComparator8.baseX * 64 + (class215.localPlayer.x >> 7); - int var1 = HealthBar.baseY * 64 + (class215.localPlayer.y >> 7); - if (var0 >= 3053 && var0 <= 3156 && var1 >= 3056 && var1 <= 3136) { - Client.field745 = 1; + if (var0.heightAlignment == 0) { + var0.height = var0.rawHeight; + } else if (var0.heightAlignment == 1) { + var0.height = var2 - var0.rawHeight; + } else if (var0.heightAlignment == 2) { + var0.height = var2 * var0.rawHeight >> 14; } - if (var0 >= 3072 && var0 <= 3118 && var1 >= 9492 && var1 <= 9535) { - Client.field745 = 1; + if (var0.widthAlignment == 4) { + var0.width = var0.field2594 * var0.height / var0.field2694; } - if (Client.field745 == 1 && var0 >= 3139 && var0 <= 3199 && var1 >= 3008 && var1 <= 3062) { - Client.field745 = 0; + if (var0.heightAlignment == 4) { + var0.height = var0.width * var0.field2694 / var0.field2594; } - } + if (var0.contentType == 1337) { + Client.viewportWidget = var0; + } - @ObfuscatedName("lk") - @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "1886233259" - ) - static void method650() { - if (Client.oculusOrbState == 1) { - Client.field645 = true; + if (var3 && var0.onResize != null && (var4 != var0.width || var5 != var0.height)) { + ScriptEvent var6 = new ScriptEvent(); + var6.widget = var0; + var6.args = var0.onResize; + Client.scriptEvents.addFirst(var6); } } diff --git a/runescape-client/src/main/java/WorldMapSection2.java b/runescape-client/src/main/java/WorldMapSection2.java index 0cb90249ce..e2c531b5f6 100644 --- a/runescape-client/src/main/java/WorldMapSection2.java +++ b/runescape-client/src/main/java/WorldMapSection2.java @@ -4,104 +4,109 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("u") +@ObfuscatedName("l") @Implements("WorldMapSection2") public class WorldMapSection2 implements WorldMapSection { - @ObfuscatedName("bs") - @ObfuscatedSignature( - signature = "Llw;" - ) - @Export("worldSelectRightSprite") - static IndexedSprite worldSelectRightSprite; - @ObfuscatedName("a") + @ObfuscatedName("nk") @ObfuscatedGetter( - intValue = 1295049317 + intValue = 1891389593 + ) + static int field200; + @ObfuscatedName("d") + @ObfuscatedGetter( + intValue = 1524934865 + ) + @Export("clientTickTimeIdx") + static int clientTickTimeIdx; + @ObfuscatedName("u") + @ObfuscatedGetter( + intValue = 955020079 ) @Export("minPlane") int minPlane; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = 927715995 + intValue = -1414372251 ) @Export("planes") int planes; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = 2066187395 + intValue = 779916199 ) @Export("regionStartX") int regionStartX; - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = 1145498097 + intValue = 1695825611 ) @Export("regionStartY") int regionStartY; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = 844773533 + intValue = 1541446225 ) @Export("regionEndX") int regionEndX; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = -274372249 + intValue = 1892372645 ) @Export("regionEndY") int regionEndY; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedGetter( - intValue = -478444161 + intValue = 1196441943 ) - int field185; - @ObfuscatedName("o") + int field194; + @ObfuscatedName("y") @ObfuscatedGetter( - intValue = -1833104023 + intValue = -1727293363 ) - int field186; + int field195; + @ObfuscatedName("w") + @ObfuscatedGetter( + intValue = -1979439593 + ) + int field196; @ObfuscatedName("i") @ObfuscatedGetter( - intValue = -697507029 + intValue = 736473599 ) - int field179; - @ObfuscatedName("d") - @ObfuscatedGetter( - intValue = -64934355 - ) - int field181; + int field197; WorldMapSection2() { } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Laa;B)V", - garbageValue = "-111" + signature = "(Laf;I)V", + garbageValue = "-567179164" ) @Export("expandBounds") public void expandBounds(WorldMapArea var1) { - if (var1.regionLowX > this.field185) { - var1.regionLowX = this.field185; + if (var1.regionLowX > this.field194) { + var1.regionLowX = this.field194; } - if (var1.regionHighX < this.field179) { - var1.regionHighX = this.field179; + if (var1.regionHighX < this.field196) { + var1.regionHighX = this.field196; } - if (var1.regionLowY > this.field186) { - var1.regionLowY = this.field186; + if (var1.regionLowY > this.field195) { + var1.regionLowY = this.field195; } - if (var1.regionHighY < this.field181) { - var1.regionHighY = this.field181; + if (var1.regionHighY < this.field197) { + var1.regionHighY = this.field197; } } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(IIII)Z", - garbageValue = "-1417818612" + signature = "(IIIB)Z", + garbageValue = "0" ) @Export("containsCoord") public boolean containsCoord(int var1, int var2, int var3) { @@ -112,51 +117,51 @@ public class WorldMapSection2 implements WorldMapSection { } } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( signature = "(III)Z", - garbageValue = "-2132898041" + garbageValue = "110675609" ) @Export("containsPosition") public boolean containsPosition(int var1, int var2) { - return var1 >> 6 >= this.field185 && var1 >> 6 <= this.field179 && var2 >> 6 >= this.field186 && var2 >> 6 <= this.field181; + return var1 >> 6 >= this.field194 && var1 >> 6 <= this.field196 && var2 >> 6 >= this.field195 && var2 >> 6 <= this.field197; } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(IIII)[I", - garbageValue = "1209167521" + signature = "(IIIB)[I", + garbageValue = "69" ) @Export("getBorderTileLengths") public int[] getBorderTileLengths(int var1, int var2, int var3) { if (!this.containsCoord(var1, var2, var3)) { return null; } else { - int[] var4 = new int[]{this.field185 * 64 - this.regionStartX * 64 + var2, var3 + (this.field186 * 64 - this.regionStartY * 64)}; + int[] var4 = new int[]{this.field194 * 64 - this.regionStartX * 64 + var2, var3 + (this.field195 * 64 - this.regionStartY * 64)}; return var4; } } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(IIS)Lhf;", - garbageValue = "7283" + signature = "(III)Lhx;", + garbageValue = "1062204141" ) @Export("coord") public Coord coord(int var1, int var2) { if (!this.containsPosition(var1, var2)) { return null; } else { - int var3 = this.regionStartX * 64 - this.field185 * 64 + var1; - int var4 = this.regionStartY * 64 - this.field186 * 64 + var2; + int var3 = this.regionStartX * 64 - this.field194 * 64 + var1; + int var4 = this.regionStartY * 64 - this.field195 * 64 + var2; return new Coord(this.minPlane, var3, var4); } } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(Lkc;I)V", - garbageValue = "-568369534" + signature = "(Lkg;I)V", + garbageValue = "-179898655" ) @Export("read") public void read(Buffer var1) { @@ -166,50 +171,195 @@ public class WorldMapSection2 implements WorldMapSection { this.regionStartY = var1.readUnsignedShort(); this.regionEndX = var1.readUnsignedShort(); this.regionEndY = var1.readUnsignedShort(); - this.field185 = var1.readUnsignedShort(); - this.field186 = var1.readUnsignedShort(); - this.field179 = var1.readUnsignedShort(); - this.field181 = var1.readUnsignedShort(); + this.field194 = var1.readUnsignedShort(); + this.field195 = var1.readUnsignedShort(); + this.field196 = var1.readUnsignedShort(); + this.field197 = var1.readUnsignedShort(); this.postRead(); } - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "1560468705" + signature = "(B)V", + garbageValue = "8" ) @Export("postRead") void postRead() { } - @ObfuscatedName("ip") + @ObfuscatedName("w") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "16" + signature = "(Ljava/lang/String;I)V", + garbageValue = "582291691" ) - static final void method383() { - int var0 = MusicPatchNode.menuX; - int var1 = TextureProvider.menuY; - int var2 = KeyHandler.menuWidth; - int var3 = WorldMapData_1.menuHeight; - int var4 = 6116423; - Rasterizer2D.Rasterizer2D_fillRectangle(var0, var1, var2, var3, var4); - Rasterizer2D.Rasterizer2D_fillRectangle(var0 + 1, var1 + 1, var2 - 2, 16, 0); - Rasterizer2D.Rasterizer2D_drawRectangle(var0 + 1, var1 + 18, var2 - 2, var3 - 19, 0); - class43.fontBold12.draw("Choose Option", var0 + 3, var1 + 14, var4, -1); - int var5 = MouseHandler.MouseHandler_x; - int var6 = MouseHandler.MouseHandler_y; + static final void method347(String var0) { + GrandExchangeOfferAgeComparator.addGameMessage(30, "", var0); + } - for (int var7 = 0; var7 < Client.menuOptionsCount; ++var7) { - int var8 = (Client.menuOptionsCount - 1 - var7) * 15 + var1 + 31; - int var9 = 16777215; - if (var5 > var0 && var5 < var0 + var2 && var6 > var8 - 13 && var6 < var8 + 3) { - var9 = 16776960; + @ObfuscatedName("hk") + @ObfuscatedSignature( + signature = "(ZLkj;I)V", + garbageValue = "-1922958923" + ) + @Export("updateNpcs") + static final void updateNpcs(boolean var0, PacketBuffer var1) { + Client.field814 = 0; + Client.field687 = 0; + WorldMapArea.method424(); + DynamicObject.method2262(var0, var1); + + int var2; + int var3; + for (var2 = 0; var2 < Client.field687; ++var2) { + var3 = Client.field688[var2]; + NPC var4 = Client.npcs[var3]; + int var5 = var1.readUnsignedByte(); + int var6; + int var7; + int var8; + int var9; + if ((var5 & 4) != 0) { + var6 = var1.method5689(); + int var10; + int var11; + int var12; + if (var6 > 0) { + for (var7 = 0; var7 < var6; ++var7) { + var9 = -1; + var10 = -1; + var11 = -1; + var8 = var1.readUShortSmart(); + if (var8 == 32767) { + var8 = var1.readUShortSmart(); + var10 = var1.readUShortSmart(); + var9 = var1.readUShortSmart(); + var11 = var1.readUShortSmart(); + } else if (var8 != 32766) { + var10 = var1.readUShortSmart(); + } else { + var8 = -1; + } + + var12 = var1.readUShortSmart(); + var4.addHitSplat(var8, var10, var9, var11, Client.cycle, var12); + } + } + + var7 = var1.method5631(); + if (var7 > 0) { + for (var8 = 0; var8 < var7; ++var8) { + var9 = var1.readUShortSmart(); + var10 = var1.readUShortSmart(); + if (var10 != 32767) { + var11 = var1.readUShortSmart(); + var12 = var1.readUnsignedByte(); + int var13 = var10 > 0 ? var1.readUnsignedByte() : var12; + var4.addHealthBar(var9, Client.cycle, var10, var11, var12, var13); + } else { + var4.removeHealthBar(var9); + } + } + } } - class43.fontBold12.draw(class65.method1316(var7), var0 + 3, var8, var9, 0); + if ((var5 & 16) != 0) { + var4.targetIndex = var1.readUnsignedShort(); + if (var4.targetIndex == 65535) { + var4.targetIndex = -1; + } + } + + if ((var5 & 32) != 0) { + var4.overheadText = var1.readStringCp1252NullTerminated(); + var4.overheadTextCyclesRemaining = 100; + } + + if ((var5 & 2) != 0) { + var6 = var1.readUnsignedShort(); + if (var6 == 65535) { + var6 = -1; + } + + var7 = var1.readUnsignedByte(); + if (var6 == var4.sequence && var6 != -1) { + var8 = GrandExchangeOfferAgeComparator.SequenceDefinition_get(var6).field3533; + if (var8 == 1) { + var4.sequenceFrame = 0; + var4.sequenceFrameCycle = 0; + var4.sequenceDelay = var7; + var4.field971 = 0; + } + + if (var8 == 2) { + var4.field971 = 0; + } + } else if (var6 == -1 || var4.sequence == -1 || GrandExchangeOfferAgeComparator.SequenceDefinition_get(var6).field3527 >= GrandExchangeOfferAgeComparator.SequenceDefinition_get(var4.sequence).field3527) { + var4.sequence = var6; + var4.sequenceFrame = 0; + var4.sequenceFrameCycle = 0; + var4.sequenceDelay = var7; + var4.field971 = 0; + var4.field994 = var4.pathLength; + } + } + + if ((var5 & 1) != 0) { + var4.definition = VarcInt.getNpcDefinition(var1.method5640()); + var4.field938 = var4.definition.size; + var4.field988 = var4.definition.rotation; + var4.walkSequence = var4.definition.walkSequence; + var4.walkBackSequence = var4.definition.walkBackSequence; + var4.walkLeftSequence = var4.definition.walkLeftSequence; + var4.walkRightSequence = var4.definition.walkRightSequence; + var4.readySequence = var4.definition.readySequence; + var4.turnLeftSequence = var4.definition.turnLeftSequence; + var4.turnRightSequence = var4.definition.turnRightSequence; + } + + if ((var5 & 64) != 0) { + var4.spotAnimation = var1.method5640(); + var6 = var1.readInt(); + var4.field996 = var6 >> 16; + var4.field975 = (var6 & 65535) + Client.cycle; + var4.spotAnimationFrame = 0; + var4.spotAnimationFrameCycle = 0; + if (var4.field975 > Client.cycle) { + var4.spotAnimationFrame = -1; + } + + if (var4.spotAnimation == 65535) { + var4.spotAnimation = -1; + } + } + + if ((var5 & 8) != 0) { + var6 = var1.readUnsignedShort(); + var7 = var1.readUnsignedShort(); + var8 = var4.x - (var6 - class51.baseX * 64 - class51.baseX * 64) * 64; + var9 = var4.y - (var7 - VarcInt.baseY * 64 - VarcInt.baseY * 64) * 64; + if (var8 != 0 || var9 != 0) { + var4.field965 = (int)(Math.atan2((double)var8, (double)var9) * 325.949D) & 2047; + } + } } - WorldMapSection0.method279(MusicPatchNode.menuX, TextureProvider.menuY, KeyHandler.menuWidth, WorldMapData_1.menuHeight); + for (var2 = 0; var2 < Client.field814; ++var2) { + var3 = Client.field764[var2]; + if (Client.npcs[var3].npcCycle != Client.cycle) { + Client.npcs[var3].definition = null; + Client.npcs[var3] = null; + } + } + + if (var1.offset != Client.packetWriter.serverPacketLength) { + throw new RuntimeException(var1.offset + "," + Client.packetWriter.serverPacketLength); + } else { + for (var2 = 0; var2 < Client.npcCount; ++var2) { + if (Client.npcs[Client.npcIndices[var2]] == null) { + throw new RuntimeException(var2 + "," + Client.npcCount); + } + } + + } } } diff --git a/runescape-client/src/main/java/WorldMapSectionType.java b/runescape-client/src/main/java/WorldMapSectionType.java index 40a65e4063..b33c431e6b 100644 --- a/runescape-client/src/main/java/WorldMapSectionType.java +++ b/runescape-client/src/main/java/WorldMapSectionType.java @@ -4,52 +4,41 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("z") +@ObfuscatedName("t") @Implements("WorldMapSectionType") public enum WorldMapSectionType implements Enumerated { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lz;" + signature = "Lt;" ) @Export("WORLDMAPSECTIONTYPE0") - WORLDMAPSECTIONTYPE0(3, (byte)0), - @ObfuscatedName("t") + WORLDMAPSECTIONTYPE0(0, (byte)0), + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lz;" + signature = "Lt;" ) @Export("WORLDMAPSECTIONTYPE1") - WORLDMAPSECTIONTYPE1(1, (byte)1), - @ObfuscatedName("n") + WORLDMAPSECTIONTYPE1(2, (byte)1), + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Lz;" + signature = "Lt;" ) @Export("WORLDMAPSECTIONTYPE2") - WORLDMAPSECTIONTYPE2(2, (byte)2), - @ObfuscatedName("q") + WORLDMAPSECTIONTYPE2(1, (byte)2), + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Lz;" + signature = "Lt;" ) @Export("WORLDMAPSECTIONTYPE3") - WORLDMAPSECTIONTYPE3(0, (byte)3); + WORLDMAPSECTIONTYPE3(3, (byte)3); - @ObfuscatedName("sg") - @ObfuscatedSignature( - signature = "Lke;" - ) - @Export("masterDisk") - static ArchiveDisk masterDisk; - @ObfuscatedName("fq") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = 16953731 - ) - static int field140; - @ObfuscatedName("v") - @ObfuscatedGetter( - intValue = -1080856111 + intValue = -740472387 ) @Export("type") final int type; - @ObfuscatedName("l") + @ObfuscatedName("p") @Export("id") final byte id; @@ -58,199 +47,111 @@ public enum WorldMapSectionType implements Enumerated { this.id = var4; } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(I)I", - garbageValue = "-1993081102" + signature = "(B)I", + garbageValue = "7" ) @Export("rsOrdinal") public int rsOrdinal() { return this.id; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(II)Liq;", - garbageValue = "-1193696463" + signature = "(I)[Lt;", + garbageValue = "-1446334113" ) - @Export("getInvDefinition") - public static InvDefinition getInvDefinition(int var0) { - InvDefinition var1 = (InvDefinition)InvDefinition.InvDefinition_cached.get((long)var0); - if (var1 != null) { - return var1; - } else { - byte[] var2 = class1.InvDefinition_archive.takeFile(5, var0); - var1 = new InvDefinition(); - if (var2 != null) { - var1.decode(new Buffer(var2)); + static WorldMapSectionType[] method262() { + return new WorldMapSectionType[]{WORLDMAPSECTIONTYPE3, WORLDMAPSECTIONTYPE0, WORLDMAPSECTIONTYPE1, WORLDMAPSECTIONTYPE2}; + } + + @ObfuscatedName("u") + @ObfuscatedSignature( + signature = "(I)V", + garbageValue = "748001828" + ) + static void method265() { + Skeleton.field1788 = new int[2000]; + int var0 = 0; + int var1 = 240; + + int var3; + for (byte var2 = 12; var0 < 16; var1 -= var2) { + var3 = Huffman.method4020((double)((float)var1 / 360.0F), 0.9998999834060669D, (double)(0.075F + 0.425F * (float)var0 / 16.0F)); + Skeleton.field1788[var0] = var3; + ++var0; + } + + var1 = 48; + + for (int var5 = var1 / 6; var0 < Skeleton.field1788.length; var1 -= var5) { + var3 = var0 * 2; + + for (int var4 = Huffman.method4020((double)((float)var1 / 360.0F), 0.9998999834060669D, 0.5D); var0 < var3 && var0 < Skeleton.field1788.length; ++var0) { + Skeleton.field1788[var0] = var4; + } + } + + } + + @ObfuscatedName("p") + public static int method271(long var0) { + return (int)(var0 >>> 7 & 127L); + } + + @ObfuscatedName("w") + @ObfuscatedSignature( + signature = "(Lhl;I[B[BB)V", + garbageValue = "98" + ) + @Export("Widget_setKey") + static final void Widget_setKey(Widget var0, int var1, byte[] var2, byte[] var3) { + if (var0.field2592 == null) { + if (var2 == null) { + return; } - InvDefinition.InvDefinition_cached.put(var1, (long)var0); - return var1; + var0.field2592 = new byte[11][]; + var0.field2653 = new byte[11][]; + var0.field2654 = new int[11]; + var0.field2655 = new int[11]; } + + var0.field2592[var1] = var2; + if (var2 != null) { + var0.field2651 = true; + } else { + var0.field2651 = false; + + for (int var4 = 0; var4 < var0.field2592.length; ++var4) { + if (var0.field2592[var4] != null) { + var0.field2651 = true; + break; + } + } + } + + var0.field2653[var1] = var3; } @ObfuscatedName("n") @ObfuscatedSignature( - signature = "(CB)C", - garbageValue = "27" + signature = "(Ljava/lang/String;I)V", + garbageValue = "-2113411095" ) - static char method296(char var0) { - if (var0 == 198) { - return 'E'; - } else if (var0 == 230) { - return 'e'; - } else if (var0 == 223) { - return 's'; - } else if (var0 == 338) { - return 'E'; - } else { - return (char)(var0 == 339 ? 'e' : '\u0000'); - } + static final void method269(String var0) { + WorldMapSection2.method347("Please remove " + var0 + " from your friend list first"); } - @ObfuscatedName("fv") + @ObfuscatedName("ih") @ObfuscatedSignature( - signature = "(IZZZI)Lij;", - garbageValue = "-1053216303" + signature = "(IIIZI)V", + garbageValue = "-1551677344" ) - @Export("newArchive") - static Archive newArchive(int var0, boolean var1, boolean var2, boolean var3) { - ArchiveDisk var4 = null; - if (JagexCache.JagexCache_dat2File != null) { - var4 = new ArchiveDisk(var0, JagexCache.JagexCache_dat2File, ArchiveLoader.JagexCache_idxFiles[var0], 1000000); + static final void method272(int var0, int var1, int var2, boolean var3) { + if (UserComparator3.loadInterface(var0)) { + class225.resizeInterface(FloorDecoration.Widget_interfaceComponents[var0], -1, var1, var2, var3); } - - return new Archive(var4, masterDisk, var0, var1, var2, var3); - } - - @ObfuscatedName("hd") - @ObfuscatedSignature( - signature = "(IIZI)V", - garbageValue = "1770012537" - ) - static final void method290(int var0, int var1, boolean var2) { - if (!var2 || var0 != field140 || ScriptEvent.field563 != var1) { - field140 = var0; - ScriptEvent.field563 = var1; - Tile.updateGameState(25); - GrandExchangeEvents.drawLoadingMessage("Loading - please wait.", true); - int var3 = UserComparator8.baseX * 64; - int var4 = HealthBar.baseY * 64; - UserComparator8.baseX = (var0 - 6) * 8; - HealthBar.baseY = (var1 - 6) * 8; - int var5 = UserComparator8.baseX * 64 - var3; - int var6 = HealthBar.baseY * 64 - var4; - var3 = UserComparator8.baseX * 64; - var4 = HealthBar.baseY * 64; - - int var7; - int var9; - int[] var10000; - for (var7 = 0; var7 < 32768; ++var7) { - NPC var8 = Client.npcs[var7]; - if (var8 != null) { - for (var9 = 0; var9 < 10; ++var9) { - var10000 = var8.pathX; - var10000[var9] -= var5; - var10000 = var8.pathY; - var10000[var9] -= var6; - } - - var8.x -= var5 * 128; - var8.y -= var6 * 128; - } - } - - for (var7 = 0; var7 < 2048; ++var7) { - Player var21 = Client.players[var7]; - if (var21 != null) { - for (var9 = 0; var9 < 10; ++var9) { - var10000 = var21.pathX; - var10000[var9] -= var5; - var10000 = var21.pathY; - var10000[var9] -= var6; - } - - var21.x -= var5 * 128; - var21.y -= var6 * 128; - } - } - - byte var20 = 0; - byte var18 = 104; - byte var22 = 1; - if (var5 < 0) { - var20 = 103; - var18 = -1; - var22 = -1; - } - - byte var10 = 0; - byte var11 = 104; - byte var12 = 1; - if (var6 < 0) { - var10 = 103; - var11 = -1; - var12 = -1; - } - - int var14; - for (int var13 = var20; var13 != var18; var13 += var22) { - for (var14 = var10; var11 != var14; var14 += var12) { - int var15 = var13 + var5; - int var16 = var6 + var14; - - for (int var17 = 0; var17 < 4; ++var17) { - if (var15 >= 0 && var16 >= 0 && var15 < 104 && var16 < 104) { - Client.groundItems[var17][var13][var14] = Client.groundItems[var17][var15][var16]; - } else { - Client.groundItems[var17][var13][var14] = null; - } - } - } - } - - for (PendingSpawn var19 = (PendingSpawn)Client.pendingSpawns.last(); var19 != null; var19 = (PendingSpawn)Client.pendingSpawns.previous()) { - var19.x -= var5; - var19.y -= var6; - if (var19.x < 0 || var19.y < 0 || var19.x >= 104 || var19.y >= 104) { - var19.remove(); - } - } - - if (Client.destinationX != 0) { - Client.destinationX -= var5; - Client.destinationY -= var6; - } - - Client.soundEffectCount = 0; - Client.isCameraLocked = false; - UrlRequester.cameraX -= var5 << 7; - GrandExchangeOfferAgeComparator.cameraZ -= var6 << 7; - IgnoreList.oculusOrbFocalPointX -= var5 << 7; - AbstractArchive.oculusOrbFocalPointY -= var6 << 7; - Client.field856 = -1; - Client.graphicsObjects.clear(); - Client.projectiles.clear(); - - for (var14 = 0; var14 < 4; ++var14) { - Client.collisionMaps[var14].clear(); - } - - } - } - - @ObfuscatedName("kt") - @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "1414236502" - ) - static final void method294() { - for (int var0 = 0; var0 < Players.Players_count; ++var0) { - Player var1 = Client.players[Players.Players_indices[var0]]; - var1.clearIsInClanChat(); - } - } } diff --git a/runescape-client/src/main/java/WorldMapSprite.java b/runescape-client/src/main/java/WorldMapSprite.java index 6d4701383b..04d8285d18 100644 --- a/runescape-client/src/main/java/WorldMapSprite.java +++ b/runescape-client/src/main/java/WorldMapSprite.java @@ -3,22 +3,19 @@ import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("aw") +@ObfuscatedName("ad") @Implements("WorldMapSprite") public final class WorldMapSprite { - @ObfuscatedName("r") + @ObfuscatedName("h") + @Export("ByteArrayPool_alternativeSizes") + static int[] ByteArrayPool_alternativeSizes; + @ObfuscatedName("x") @ObfuscatedSignature( - signature = "Lau;" + signature = "Lgt;" ) - @Export("worldMapEvent") - static WorldMapEvent worldMapEvent; - @ObfuscatedName("du") - @ObfuscatedSignature( - signature = "Lij;" - ) - @Export("archive9") - static Archive archive9; - @ObfuscatedName("t") + @Export("musicTrack") + public static MusicTrack musicTrack; + @ObfuscatedName("f") @Export("tileColors") final int[] tileColors; @@ -30,405 +27,23 @@ public final class WorldMapSprite { this.tileColors = var1; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "(III)I", - garbageValue = "1284529716" + garbageValue = "1354976876" ) @Export("getTileColor") final int getTileColor(int var1, int var2) { - return this.tileColors[var1 + var2 * 64]; + return this.tileColors[var2 * 64 + var1]; } - @ObfuscatedName("a") - public static final int method472(double var0, double var2, double var4) { - double var6 = var4; - double var8 = var4; - double var10 = var4; - if (0.0D != var2) { - double var12; - if (var4 < 0.5D) { - var12 = (1.0D + var2) * var4; - } else { - var12 = var2 + var4 - var2 * var4; - } - - double var14 = 2.0D * var4 - var12; - double var16 = 0.3333333333333333D + var0; - if (var16 > 1.0D) { - --var16; - } - - double var20 = var0 - 0.3333333333333333D; - if (var20 < 0.0D) { - ++var20; - } - - if (6.0D * var16 < 1.0D) { - var6 = 6.0D * (var12 - var14) * var16 + var14; - } else if (2.0D * var16 < 1.0D) { - var6 = var12; - } else if (3.0D * var16 < 2.0D) { - var6 = 6.0D * (var12 - var14) * (0.6666666666666666D - var16) + var14; - } else { - var6 = var14; - } - - if (6.0D * var0 < 1.0D) { - var8 = 6.0D * (var12 - var14) * var0 + var14; - } else if (var0 * 2.0D < 1.0D) { - var8 = var12; - } else if (var0 * 3.0D < 2.0D) { - var8 = 6.0D * (0.6666666666666666D - var0) * (var12 - var14) + var14; - } else { - var8 = var14; - } - - if (var20 * 6.0D < 1.0D) { - var10 = var20 * 6.0D * (var12 - var14) + var14; - } else if (var20 * 2.0D < 1.0D) { - var10 = var12; - } else if (var20 * 3.0D < 2.0D) { - var10 = (0.6666666666666666D - var20) * (var12 - var14) * 6.0D + var14; - } else { - var10 = var14; - } - } - - int var22 = (int)(var6 * 256.0D); - int var13 = (int)(256.0D * var8); - int var23 = (int)(256.0D * var10); - int var15 = var23 + (var13 << 8) + (var22 << 16); - return var15; - } - - @ObfuscatedName("gv") + @ObfuscatedName("ib") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "5" + signature = "(Ljava/lang/String;Ljava/lang/String;IIIII)V", + garbageValue = "-1935936401" ) - static void method473() { - int var0 = Players.Players_count; - int[] var1 = Players.Players_indices; - - for (int var2 = 0; var2 < var0; ++var2) { - if (var1[var2] != Client.combatTargetPlayerIndex && var1[var2] != Client.localPlayerIndex) { - Player.addPlayerToScene(Client.players[var1[var2]], true); - } - } - - } - - @ObfuscatedName("ht") - @ObfuscatedSignature( - signature = "(Lge;I)V", - garbageValue = "-226939781" - ) - static final void method474(class185 var0) { - PacketBuffer var1 = Client.packetWriter.packetBuffer; - int var2; - int var3; - int var4; - int var5; - int var6; - int var7; - int var8; - int var11; - int var37; - if (class185.field2300 == var0) { - var2 = var1.readUnsignedShort(); - var3 = var1.readUnsignedByte(); - var4 = (var3 >> 4 & 7) + SpriteMask.field2501; - var5 = (var3 & 7) + GrandExchangeOffer.field61; - var6 = var1.method5697(); - var7 = var6 >> 2; - var8 = var6 & 3; - var37 = Client.field692[var7]; - if (var4 >= 0 && var5 >= 0 && var4 < 103 && var5 < 103) { - if (var37 == 0) { - BoundaryObject var10 = WorldMapArea.scene.method3225(Player.Client_plane, var4, var5); - if (var10 != null) { - var11 = UserComparator8.Entity_unpackID(var10.tag); - if (var7 == 2) { - var10.entity1 = new DynamicObject(var11, 2, var8 + 4, Player.Client_plane, var4, var5, var2, false, var10.entity1); - var10.entity2 = new DynamicObject(var11, 2, var8 + 1 & 3, Player.Client_plane, var4, var5, var2, false, var10.entity2); - } else { - var10.entity1 = new DynamicObject(var11, var7, var8, Player.Client_plane, var4, var5, var2, false, var10.entity1); - } - } - } - - if (var37 == 1) { - WallDecoration var38 = WorldMapArea.scene.method3339(Player.Client_plane, var4, var5); - if (var38 != null) { - var11 = UserComparator8.Entity_unpackID(var38.tag); - if (var7 != 4 && var7 != 5) { - if (var7 == 6) { - var38.entity1 = new DynamicObject(var11, 4, var8 + 4, Player.Client_plane, var4, var5, var2, false, var38.entity1); - } else if (var7 == 7) { - var38.entity1 = new DynamicObject(var11, 4, (var8 + 2 & 3) + 4, Player.Client_plane, var4, var5, var2, false, var38.entity1); - } else if (var7 == 8) { - var38.entity1 = new DynamicObject(var11, 4, var8 + 4, Player.Client_plane, var4, var5, var2, false, var38.entity1); - var38.entity2 = new DynamicObject(var11, 4, (var8 + 2 & 3) + 4, Player.Client_plane, var4, var5, var2, false, var38.entity2); - } - } else { - var38.entity1 = new DynamicObject(var11, 4, var8, Player.Client_plane, var4, var5, var2, false, var38.entity1); - } - } - } - - if (var37 == 2) { - GameObject var39 = WorldMapArea.scene.method3227(Player.Client_plane, var4, var5); - if (var7 == 11) { - var7 = 10; - } - - if (var39 != null) { - var39.entity = new DynamicObject(UserComparator8.Entity_unpackID(var39.tag), var7, var8, Player.Client_plane, var4, var5, var2, false, var39.entity); - } - } - - if (var37 == 3) { - FloorDecoration var40 = WorldMapArea.scene.getFloorDecoration(Player.Client_plane, var4, var5); - if (var40 != null) { - var40.entity = new DynamicObject(UserComparator8.Entity_unpackID(var40.tag), 22, var8, Player.Client_plane, var4, var5, var2, false, var40.entity); - } - } - } - - } else if (class185.field2293 == var0) { - var2 = var1.method5639(); - var3 = var1.method5648(); - var4 = var1.method5648(); - var5 = var1.readUnsignedByte(); - var6 = (var5 >> 4 & 7) + SpriteMask.field2501; - var7 = (var5 & 7) + GrandExchangeOffer.field61; - if (var6 >= 0 && var7 >= 0 && var6 < 104 && var7 < 104) { - var6 = var6 * 128 + 64; - var7 = var7 * 128 + 64; - GraphicsObject var44 = new GraphicsObject(var4, Player.Client_plane, var6, var7, GraphicsObject.getTileHeight(var6, var7, Player.Client_plane) - var2, var3, Client.cycle); - Client.graphicsObjects.addFirst(var44); - } - - } else { - int var12; - int var13; - int var32; - if (class185.field2298 == var0) { - var2 = var1.method5650(); - var3 = var1.method5622(); - var4 = var1.method5622() * 4; - var5 = var1.method5647(); - var6 = var1.readUnsignedByte(); - var7 = (var6 >> 4 & 7) + SpriteMask.field2501; - var8 = (var6 & 7) + GrandExchangeOffer.field61; - var37 = var1.method5639() * 4; - var32 = var1.method5647(); - byte var41 = var1.method5671(); - byte var42 = var1.method5671(); - var13 = var1.method5697(); - int var43 = var1.method5647(); - var11 = var41 + var7; - var12 = var42 + var8; - if (var7 >= 0 && var8 >= 0 && var7 < 104 && var8 < 104 && var11 >= 0 && var12 >= 0 && var11 < 104 && var12 < 104 && var5 != 65535) { - var7 = var7 * 128 + 64; - var8 = var8 * 128 + 64; - var11 = var11 * 128 + 64; - var12 = var12 * 128 + 64; - Projectile var15 = new Projectile(var5, Player.Client_plane, var7, var8, GraphicsObject.getTileHeight(var7, var8, Player.Client_plane) - var4, var32 + Client.cycle, var43 + Client.cycle, var13, var3, var2, var37); - var15.setDestination(var11, var12, GraphicsObject.getTileHeight(var11, var12, Player.Client_plane) - var37, var32 + Client.cycle); - Client.projectiles.addFirst(var15); - } - - } else { - TileItem var33; - if (class185.field2292 == var0) { - var2 = var1.readUnsignedShort(); - var3 = var1.method5646(); - var4 = var1.readUnsignedByte(); - var5 = (var4 >> 4 & 7) + SpriteMask.field2501; - var6 = (var4 & 7) + GrandExchangeOffer.field61; - if (var5 >= 0 && var6 >= 0 && var5 < 104 && var6 < 104) { - var33 = new TileItem(); - var33.id = var3; - var33.quantity = var2; - if (Client.groundItems[Player.Client_plane][var5][var6] == null) { - Client.groundItems[Player.Client_plane][var5][var6] = new NodeDeque(); - } - - Client.groundItems[Player.Client_plane][var5][var6].addFirst(var33); - class4.updateItemPile(var5, var6); - } - - } else { - if (class185.field2291 == var0) { - var2 = var1.method5648(); - var3 = var1.readUnsignedShort(); - var4 = var1.method5622(); - var5 = var4 >> 2; - var6 = var4 & 3; - var7 = Client.field692[var5]; - var8 = var1.readUnsignedShort(); - byte var9 = var1.method5763(); - var32 = var1.method5697(); - var11 = (var32 >> 4 & 7) + SpriteMask.field2501; - var12 = (var32 & 7) + GrandExchangeOffer.field61; - var13 = var1.method5646(); - byte var14 = var1.method5640(); - byte var34 = var1.readByte(); - byte var16 = var1.method5671(); - Player var17; - if (var13 == Client.localPlayerIndex) { - var17 = class215.localPlayer; - } else { - var17 = Client.players[var13]; - } - - if (var17 != null) { - ObjectDefinition var18 = WorldMapDecorationType.getObjectDefinition(var3); - int var19; - int var20; - if (var6 != 1 && var6 != 3) { - var19 = var18.sizeX; - var20 = var18.sizeY; - } else { - var19 = var18.sizeY; - var20 = var18.sizeX; - } - - int var21 = var11 + (var19 >> 1); - int var22 = var11 + (var19 + 1 >> 1); - int var23 = var12 + (var20 >> 1); - int var24 = var12 + (var20 + 1 >> 1); - int[][] var25 = Tiles.Tiles_heights[Player.Client_plane]; - int var26 = var25[var22][var24] + var25[var21][var24] + var25[var22][var23] + var25[var21][var23] >> 2; - int var27 = (var11 << 7) + (var19 << 6); - int var28 = (var12 << 7) + (var20 << 6); - Model var29 = var18.getModel(var5, var6, var25, var27, var26, var28); - if (var29 != null) { - GrandExchangeOfferWorldComparator.updatePendingSpawn(Player.Client_plane, var11, var12, var7, -1, 0, 0, var2 + 1, var8 + 1); - var17.animationCycleStart = var2 + Client.cycle; - var17.animationCycleEnd = var8 + Client.cycle; - var17.model0 = var29; - var17.field620 = var11 * 128 + var19 * 64; - var17.field613 = var12 * 128 + var20 * 64; - var17.tileHeight2 = var26; - byte var30; - if (var34 > var9) { - var30 = var34; - var34 = var9; - var9 = var30; - } - - if (var16 > var14) { - var30 = var16; - var16 = var14; - var14 = var30; - } - - var17.field595 = var34 + var11; - var17.field612 = var9 + var11; - var17.field611 = var16 + var12; - var17.field604 = var14 + var12; - } - } - } - - if (class185.field2299 == var0) { - var2 = var1.method5622(); - var3 = var2 >> 2; - var4 = var2 & 3; - var5 = Client.field692[var3]; - var6 = var1.readUnsignedByte(); - var7 = (var6 >> 4 & 7) + SpriteMask.field2501; - var8 = (var6 & 7) + GrandExchangeOffer.field61; - if (var7 >= 0 && var8 >= 0 && var7 < 104 && var8 < 104) { - GrandExchangeOfferWorldComparator.updatePendingSpawn(Player.Client_plane, var7, var8, var5, -1, var3, var4, 0, -1); - } - - } else if (class185.field2296 == var0) { - var2 = var1.method5622(); - var3 = (var2 >> 4 & 7) + SpriteMask.field2501; - var4 = (var2 & 7) + GrandExchangeOffer.field61; - var5 = var1.method5648(); - var6 = var1.method5639(); - var7 = var6 >> 2; - var8 = var6 & 3; - var37 = Client.field692[var7]; - if (var3 >= 0 && var4 >= 0 && var3 < 104 && var4 < 104) { - GrandExchangeOfferWorldComparator.updatePendingSpawn(Player.Client_plane, var3, var4, var37, var5, var7, var8, 0, -1); - } - - } else if (class185.field2297 == var0) { - var2 = var1.method5647(); - var3 = var1.method5648(); - var4 = var1.readUnsignedByte(); - var5 = (var4 >> 4 & 7) + SpriteMask.field2501; - var6 = (var4 & 7) + GrandExchangeOffer.field61; - var7 = var1.method5647(); - if (var5 >= 0 && var6 >= 0 && var5 < 104 && var6 < 104) { - NodeDeque var31 = Client.groundItems[Player.Client_plane][var5][var6]; - if (var31 != null) { - for (TileItem var35 = (TileItem)var31.last(); var35 != null; var35 = (TileItem)var31.previous()) { - if ((var2 & 32767) == var35.id && var7 == var35.quantity) { - var35.quantity = var3; - break; - } - } - - class4.updateItemPile(var5, var6); - } - } - - } else if (class185.field2294 != var0) { - if (class185.field2295 == var0) { - var2 = var1.method5622(); - var3 = var1.method5697(); - var4 = var3 >> 4 & 15; - var5 = var3 & 7; - var6 = var1.method5697(); - var7 = (var6 >> 4 & 7) + SpriteMask.field2501; - var8 = (var6 & 7) + GrandExchangeOffer.field61; - var37 = var1.method5646(); - if (var7 >= 0 && var8 >= 0 && var7 < 104 && var8 < 104) { - var32 = var4 + 1; - if (class215.localPlayer.pathX[0] >= var7 - var32 && class215.localPlayer.pathX[0] <= var7 + var32 && class215.localPlayer.pathY[0] >= var8 - var32 && class215.localPlayer.pathY[0] <= var8 + var32 && Client.areaSoundEffectVolume != 0 && var5 > 0 && Client.soundEffectCount < 50) { - Client.soundEffectIds[Client.soundEffectCount] = var37; - Client.queuedSoundEffectLoops[Client.soundEffectCount] = var5; - Client.queuedSoundEffectDelays[Client.soundEffectCount] = var2; - Client.soundEffects[Client.soundEffectCount] = null; - Client.soundLocations[Client.soundEffectCount] = var4 + (var8 << 8) + (var7 << 16); - ++Client.soundEffectCount; - } - } - } - - } else { - var2 = var1.readUnsignedShort(); - var3 = var1.method5622(); - var4 = (var3 >> 4 & 7) + SpriteMask.field2501; - var5 = (var3 & 7) + GrandExchangeOffer.field61; - if (var4 >= 0 && var5 >= 0 && var4 < 104 && var5 < 104) { - NodeDeque var36 = Client.groundItems[Player.Client_plane][var4][var5]; - if (var36 != null) { - for (var33 = (TileItem)var36.last(); var33 != null; var33 = (TileItem)var36.previous()) { - if ((var2 & 32767) == var33.id) { - var33.remove(); - break; - } - } - - if (var36.last() == null) { - Client.groundItems[Player.Client_plane][var4][var5] = null; - } - - class4.updateItemPile(var4, var5); - } - } - - } - } - } - } + @Export("insertMenuItemNoShift") + public static final void insertMenuItemNoShift(String var0, String var1, int var2, int var3, int var4, int var5) { + class14.insertMenuItem(var0, var1, var2, var3, var4, var5, false); } } diff --git a/runescape-client/src/main/java/Wrapper.java b/runescape-client/src/main/java/Wrapper.java index c29b3f0afb..b955b1ee84 100644 --- a/runescape-client/src/main/java/Wrapper.java +++ b/runescape-client/src/main/java/Wrapper.java @@ -2,10 +2,10 @@ import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; -@ObfuscatedName("eo") +@ObfuscatedName("ev") @Implements("Wrapper") public abstract class Wrapper extends DualNode { - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("size") final int size; @@ -13,11 +13,11 @@ public abstract class Wrapper extends DualNode { this.size = var1; } - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("get") abstract Object get(); - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("isSoft") abstract boolean isSoft(); } diff --git a/runescape-client/src/main/java/class0.java b/runescape-client/src/main/java/class0.java index 83dee573d9..f423b8e04d 100644 --- a/runescape-client/src/main/java/class0.java +++ b/runescape-client/src/main/java/class0.java @@ -1,19 +1,19 @@ import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("a") +@ObfuscatedName("u") public interface class0 { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Ljava/lang/Object;Lkc;B)V", - garbageValue = "25" + signature = "(Ljava/lang/Object;Lkg;I)V", + garbageValue = "-1331780546" ) - void vmethod89(Object var1, Buffer var2); + void vmethod57(Object var1, Buffer var2); - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Lkc;I)Ljava/lang/Object;", - garbageValue = "242985434" + signature = "(Lkg;I)Ljava/lang/Object;", + garbageValue = "1713449680" ) - Object vmethod74(Buffer var1); + Object vmethod65(Buffer var1); } diff --git a/runescape-client/src/main/java/class1.java b/runescape-client/src/main/java/class1.java index ef3f629db4..208dc8cf29 100644 --- a/runescape-client/src/main/java/class1.java +++ b/runescape-client/src/main/java/class1.java @@ -1,515 +1,88 @@ import net.runelite.mapping.Export; +import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("t") +@ObfuscatedName("f") final class class1 implements class0 { - @ObfuscatedName("ou") - @ObfuscatedSignature( - signature = "Lcz;" + @ObfuscatedName("ix") + @ObfuscatedGetter( + intValue = -609036975 ) - @Export("varcs") - static Varcs varcs; - @ObfuscatedName("a") - @ObfuscatedSignature( - signature = "Lhq;" - ) - @Export("InvDefinition_archive") - public static AbstractArchive InvDefinition_archive; - @ObfuscatedName("gh") - @ObfuscatedSignature( - signature = "Llx;" - ) - @Export("compass") - static Sprite compass; + @Export("selectedItemWidget") + static int selectedItemWidget; - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Ljava/lang/Object;Lkc;B)V", - garbageValue = "25" + signature = "(Ljava/lang/Object;Lkg;I)V", + garbageValue = "-1331780546" ) - public void vmethod89(Object var1, Buffer var2) { - this.method12((Integer)var1, var2); + public void vmethod57(Object var1, Buffer var2) { + this.method7((Integer)var1, var2); } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Lkc;I)Ljava/lang/Object;", - garbageValue = "242985434" + signature = "(Lkg;I)Ljava/lang/Object;", + garbageValue = "1713449680" ) - public Object vmethod74(Buffer var1) { + public Object vmethod65(Buffer var1) { return var1.readInt(); } - @ObfuscatedName("p") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "(Ljava/lang/Integer;Lkc;I)V", - garbageValue = "1640474163" + signature = "(Ljava/lang/Integer;Lkg;I)V", + garbageValue = "-1969898467" ) - void method12(Integer var1, Buffer var2) { + void method7(Integer var1, Buffer var2) { var2.writeInt(var1); } - @ObfuscatedName("q") + @ObfuscatedName("w") @ObfuscatedSignature( - signature = "(I)I", - garbageValue = "646080011" - ) - public static int method26() { - return KeyHandler.KeyHandler_idleCycles; - } - - @ObfuscatedName("o") - @ObfuscatedSignature( - signature = "(I)Lbk;", - garbageValue = "1796263151" + signature = "(I)Lbp;", + garbageValue = "1259947083" ) @Export("getNextWorldListWorld") static World getNextWorldListWorld() { - return World.World_listCount < World.World_count ? Username.World_worlds[++World.World_listCount - 1] : null; + return World.World_listCount < World.World_count ? Skills.World_worlds[++World.World_listCount - 1] : null; } - @ObfuscatedName("m") + @ObfuscatedName("ab") @ObfuscatedSignature( - signature = "(Lks;Lks;Lks;I)V", - garbageValue = "-196875939" + signature = "(Ldt;B)V", + garbageValue = "104" ) - @Export("drawTitle") - static void drawTitle(Font var0, Font var1, Font var2) { - Login.xPadding = (class286.canvasWidth - 765) / 2; - Login.loginBoxX = Login.xPadding + 202; - class192.loginBoxCenter = Login.loginBoxX + 180; - if (Login.worldSelectOpen) { - UrlRequester.method3430(var0, var1); - } else { - Login.leftTitleSprite.drawAt(Login.xPadding, 0); - FontName.rightTitleSprite.drawAt(Login.xPadding + 382, 0); - Tiles.logoSprite.drawAt(Login.xPadding + 382 - Tiles.logoSprite.subWidth / 2, 18); - int var4; - if (Client.gameState == 0 || Client.gameState == 5) { - byte var3 = 20; - var0.drawCentered("RuneScape is loading - please wait...", Login.loginBoxX + 180, 245 - var3, 16777215, -1); - var4 = 253 - var3; - Rasterizer2D.Rasterizer2D_drawRectangle(Login.loginBoxX + 180 - 152, var4, 304, 34, 9179409); - Rasterizer2D.Rasterizer2D_drawRectangle(Login.loginBoxX + 180 - 151, var4 + 1, 302, 32, 0); - Rasterizer2D.Rasterizer2D_fillRectangle(Login.loginBoxX + 180 - 150, var4 + 2, Login.Login_loadingPercent * 3, 30, 9179409); - Rasterizer2D.Rasterizer2D_fillRectangle(Login.loginBoxX + 180 - 150 + Login.Login_loadingPercent * 3, var4 + 2, 300 - Login.Login_loadingPercent * 3, 30, 0); - var0.drawCentered(Login.Login_loadingText, Login.loginBoxX + 180, 276 - var3, 16777215, -1); - } - - String var5; - String var7; - String var8; - int var9; - char[] var10; - int var11; - short var25; - int var26; - short var27; - if (Client.gameState == 20) { - NPC.titleboxSprite.drawAt(Login.loginBoxX + 180 - NPC.titleboxSprite.subWidth / 2, 271 - NPC.titleboxSprite.subHeight / 2); - var25 = 201; - var0.drawCentered(Login.Login_response1, Login.loginBoxX + 180, var25, 16776960, 0); - var26 = var25 + 15; - var0.drawCentered(Login.Login_response2, Login.loginBoxX + 180, var26, 16776960, 0); - var26 += 15; - var0.drawCentered(Login.Login_response3, Login.loginBoxX + 180, var26, 16776960, 0); - var26 += 15; - var26 += 7; - if (Login.loginIndex != 4) { - var0.draw("Login: ", Login.loginBoxX + 180 - 110, var26, 16777215, 0); - var27 = 200; - - for (var5 = ScriptEvent.method1277(); var0.stringWidth(var5) > var27; var5 = var5.substring(0, var5.length() - 1)) { - } - - var0.draw(AbstractFont.escapeBrackets(var5), Login.loginBoxX + 180 - 70, var26, 16777215, 0); - var26 += 15; - var7 = Login.Login_password; - var9 = var7.length(); - var10 = new char[var9]; - - for (var11 = 0; var11 < var9; ++var11) { - var10[var11] = '*'; - } - - var8 = new String(var10); - - for (var8 = var8; var0.stringWidth(var8) > var27; var8 = var8.substring(1)) { - } - - var0.draw("Password: " + var8, Login.loginBoxX + 180 - 108, var26, 16777215, 0); - var26 += 15; - } - } - - if (Client.gameState == 10 || Client.gameState == 11) { - NPC.titleboxSprite.drawAt(Login.loginBoxX, 171); - short var19; - if (Login.loginIndex == 0) { - var25 = 251; - var0.drawCentered("Welcome to RuneScape", Login.loginBoxX + 180, var25, 16776960, 0); - var26 = var25 + 30; - var4 = Login.loginBoxX + 180 - 80; - var19 = 291; - UserComparator9.titlebuttonSprite.drawAt(var4 - 73, var19 - 20); - var0.drawLines("New User", var4 - 73, var19 - 20, 144, 40, 16777215, 0, 1, 1, 0); - var4 = Login.loginBoxX + 180 + 80; - UserComparator9.titlebuttonSprite.drawAt(var4 - 73, var19 - 20); - var0.drawLines("Existing User", var4 - 73, var19 - 20, 144, 40, 16777215, 0, 1, 1, 0); - } else if (Login.loginIndex == 1) { - var0.drawCentered(Login.Login_response0, Login.loginBoxX + 180, 201, 16776960, 0); - var25 = 236; - var0.drawCentered(Login.Login_response1, Login.loginBoxX + 180, var25, 16777215, 0); - var26 = var25 + 15; - var0.drawCentered(Login.Login_response2, Login.loginBoxX + 180, var26, 16777215, 0); - var26 += 15; - var0.drawCentered(Login.Login_response3, Login.loginBoxX + 180, var26, 16777215, 0); - var26 += 15; - var4 = Login.loginBoxX + 180 - 80; - var19 = 321; - UserComparator9.titlebuttonSprite.drawAt(var4 - 73, var19 - 20); - var0.drawCentered("Continue", var4, var19 + 5, 16777215, 0); - var4 = Login.loginBoxX + 180 + 80; - UserComparator9.titlebuttonSprite.drawAt(var4 - 73, var19 - 20); - var0.drawCentered("Cancel", var4, var19 + 5, 16777215, 0); - } else { - IndexedSprite var29; - if (Login.loginIndex == 2) { - var25 = 201; - var0.drawCentered(Login.Login_response1, class192.loginBoxCenter, var25, 16776960, 0); - var26 = var25 + 15; - var0.drawCentered(Login.Login_response2, class192.loginBoxCenter, var26, 16776960, 0); - var26 += 15; - var0.drawCentered(Login.Login_response3, class192.loginBoxCenter, var26, 16776960, 0); - var26 += 15; - var26 += 7; - var0.draw("Login: ", class192.loginBoxCenter - 110, var26, 16777215, 0); - var27 = 200; - - for (var5 = ScriptEvent.method1277(); var0.stringWidth(var5) > var27; var5 = var5.substring(1)) { - } - - var0.draw(AbstractFont.escapeBrackets(var5) + (Login.currentLoginField == 0 & Client.cycle % 40 < 20 ? AbstractArchive.colorStartTag(16776960) + "|" : ""), class192.loginBoxCenter - 70, var26, 16777215, 0); - var26 += 15; - var7 = Login.Login_password; - var9 = var7.length(); - var10 = new char[var9]; - - for (var11 = 0; var11 < var9; ++var11) { - var10[var11] = '*'; - } - - var8 = new String(var10); - - for (var8 = var8; var0.stringWidth(var8) > var27; var8 = var8.substring(1)) { - } - - var0.draw("Password: " + var8 + (Login.currentLoginField == 1 & Client.cycle % 40 < 20 ? AbstractArchive.colorStartTag(16776960) + "|" : ""), class192.loginBoxCenter - 108, var26, 16777215, 0); - var26 += 15; - var25 = 277; - var9 = class192.loginBoxCenter + -117; - boolean var30 = Client.Login_isUsernameRemembered; - boolean var12 = Login.field1159; - var29 = var30 ? (var12 ? class4.field23 : Login.options_buttons_2Sprite) : (var12 ? class51.field412 : UserComparator8.options_buttons_0Sprite); - var29.drawAt(var9, var25); - var9 = var9 + var29.subWidth + 5; - var1.draw("Remember username", var9, var25 + 13, 16776960, 0); - var9 = class192.loginBoxCenter + 24; - boolean var15 = ScriptEvent.clientPreferences.hideUsername; - boolean var16 = Login.field1175; - IndexedSprite var14 = var15 ? (var16 ? class4.field23 : Login.options_buttons_2Sprite) : (var16 ? class51.field412 : UserComparator8.options_buttons_0Sprite); - var14.drawAt(var9, var25); - var9 = var9 + var14.subWidth + 5; - var1.draw("Hide username", var9, var25 + 13, 16776960, 0); - var26 = var25 + 15; - int var17 = class192.loginBoxCenter - 80; - short var18 = 321; - UserComparator9.titlebuttonSprite.drawAt(var17 - 73, var18 - 20); - var0.drawCentered("Login", var17, var18 + 5, 16777215, 0); - var17 = class192.loginBoxCenter + 80; - UserComparator9.titlebuttonSprite.drawAt(var17 - 73, var18 - 20); - var0.drawCentered("Cancel", var17, var18 + 5, 16777215, 0); - var25 = 357; - switch(Login.field1166) { - case 2: - VarbitDefinition.field3288 = "Having trouble logging in?"; - break; - default: - VarbitDefinition.field3288 = "Can't login? Click here."; - } - - WorldMapLabel.field225 = new Bounds(class192.loginBoxCenter, var25, var1.stringWidth(VarbitDefinition.field3288), 11); - WorldMapManager.field319 = new Bounds(class192.loginBoxCenter, var25, var1.stringWidth("Still having trouble logging in?"), 11); - var1.drawCentered(VarbitDefinition.field3288, class192.loginBoxCenter, var25, 16777215, 0); - } else if (Login.loginIndex == 3) { - var25 = 201; - var0.drawCentered("Invalid credentials.", Login.loginBoxX + 180, var25, 16776960, 0); - var26 = var25 + 20; - var1.drawCentered("For accounts created after 24th November 2010, please use your", Login.loginBoxX + 180, var26, 16776960, 0); - var26 += 15; - var1.drawCentered("email address to login. Otherwise please login with your username.", Login.loginBoxX + 180, var26, 16776960, 0); - var26 += 15; - var4 = Login.loginBoxX + 180; - var19 = 276; - UserComparator9.titlebuttonSprite.drawAt(var4 - 73, var19 - 20); - var2.drawCentered("Try again", var4, var19 + 5, 16777215, 0); - var4 = Login.loginBoxX + 180; - var19 = 326; - UserComparator9.titlebuttonSprite.drawAt(var4 - 73, var19 - 20); - var2.drawCentered("Forgotten password?", var4, var19 + 5, 16777215, 0); - } else if (Login.loginIndex == 4) { - var0.drawCentered("Authenticator", Login.loginBoxX + 180, 201, 16776960, 0); - var25 = 236; - var0.drawCentered(Login.Login_response1, Login.loginBoxX + 180, var25, 16777215, 0); - var26 = var25 + 15; - var0.drawCentered(Login.Login_response2, Login.loginBoxX + 180, var26, 16777215, 0); - var26 += 15; - var0.drawCentered(Login.Login_response3, Login.loginBoxX + 180, var26, 16777215, 0); - var26 += 15; - var5 = "PIN: "; - var7 = class268.otp; - var9 = var7.length(); - var10 = new char[var9]; - - for (var11 = 0; var11 < var9; ++var11) { - var10[var11] = '*'; - } - - var8 = new String(var10); - var0.draw(var5 + var8 + (Client.cycle % 40 < 20 ? AbstractArchive.colorStartTag(16776960) + "|" : ""), Login.loginBoxX + 180 - 108, var26, 16777215, 0); - var26 -= 8; - var0.draw("Trust this computer", Login.loginBoxX + 180 - 9, var26, 16776960, 0); - var26 += 15; - var0.draw("for 30 days: ", Login.loginBoxX + 180 - 9, var26, 16776960, 0); - int var23 = Login.loginBoxX + 180 - 9 + var0.stringWidth("for 30 days: ") + 15; - var9 = var26 - var0.ascent; - if (Login.field1177) { - var29 = Login.options_buttons_2Sprite; - } else { - var29 = UserComparator8.options_buttons_0Sprite; - } - - var29.drawAt(var23, var9); - var26 += 15; - var11 = Login.loginBoxX + 180 - 80; - short var31 = 321; - UserComparator9.titlebuttonSprite.drawAt(var11 - 73, var31 - 20); - var0.drawCentered("Continue", var11, var31 + 5, 16777215, 0); - var11 = Login.loginBoxX + 180 + 80; - UserComparator9.titlebuttonSprite.drawAt(var11 - 73, var31 - 20); - var0.drawCentered("Cancel", var11, var31 + 5, 16777215, 0); - var1.drawCentered("Can't Log In?", Login.loginBoxX + 180, var31 + 36, 255, 0); - } else if (Login.loginIndex == 5) { - var0.drawCentered("Forgotten your password?", Login.loginBoxX + 180, 201, 16776960, 0); - var25 = 221; - var2.drawCentered(Login.Login_response1, Login.loginBoxX + 180, var25, 16776960, 0); - var26 = var25 + 15; - var2.drawCentered(Login.Login_response2, Login.loginBoxX + 180, var26, 16776960, 0); - var26 += 15; - var2.drawCentered(Login.Login_response3, Login.loginBoxX + 180, var26, 16776960, 0); - var26 += 15; - var26 += 14; - var0.draw("Username/email: ", Login.loginBoxX + 180 - 145, var26, 16777215, 0); - var27 = 174; - - for (var5 = ScriptEvent.method1277(); var0.stringWidth(var5) > var27; var5 = var5.substring(1)) { - } - - var0.draw(AbstractFont.escapeBrackets(var5) + (Client.cycle % 40 < 20 ? AbstractArchive.colorStartTag(16776960) + "|" : ""), Login.loginBoxX + 180 - 34, var26, 16777215, 0); - var26 += 15; - int var6 = Login.loginBoxX + 180 - 80; - short var24 = 321; - UserComparator9.titlebuttonSprite.drawAt(var6 - 73, var24 - 20); - var0.drawCentered("Recover", var6, var24 + 5, 16777215, 0); - var6 = Login.loginBoxX + 180 + 80; - UserComparator9.titlebuttonSprite.drawAt(var6 - 73, var24 - 20); - var0.drawCentered("Back", var6, var24 + 5, 16777215, 0); - var24 = 356; - var1.drawCentered("Still having trouble logging in?", class192.loginBoxCenter, var24, 268435455, 0); - } else if (Login.loginIndex == 6) { - var25 = 201; - var0.drawCentered(Login.Login_response1, Login.loginBoxX + 180, var25, 16776960, 0); - var26 = var25 + 15; - var0.drawCentered(Login.Login_response2, Login.loginBoxX + 180, var26, 16776960, 0); - var26 += 15; - var0.drawCentered(Login.Login_response3, Login.loginBoxX + 180, var26, 16776960, 0); - var26 += 15; - var4 = Login.loginBoxX + 180; - var19 = 321; - UserComparator9.titlebuttonSprite.drawAt(var4 - 73, var19 - 20); - var0.drawCentered("Back", var4, var19 + 5, 16777215, 0); - } else if (Login.loginIndex == 7) { - var25 = 216; - var0.drawCentered("Your date of birth isn't set.", Login.loginBoxX + 180, var25, 16776960, 0); - var26 = var25 + 15; - var2.drawCentered("Please verify your account status by", Login.loginBoxX + 180, var26, 16776960, 0); - var26 += 15; - var2.drawCentered("setting your date of birth.", Login.loginBoxX + 180, var26, 16776960, 0); - var26 += 15; - var4 = Login.loginBoxX + 180 - 80; - var19 = 321; - UserComparator9.titlebuttonSprite.drawAt(var4 - 73, var19 - 20); - var0.drawCentered("Set Date of Birth", var4, var19 + 5, 16777215, 0); - var4 = Login.loginBoxX + 180 + 80; - UserComparator9.titlebuttonSprite.drawAt(var4 - 73, var19 - 20); - var0.drawCentered("Back", var4, var19 + 5, 16777215, 0); - } else if (Login.loginIndex == 8) { - var25 = 216; - var0.drawCentered("Sorry, but your account is not eligible to play.", Login.loginBoxX + 180, var25, 16776960, 0); - var26 = var25 + 15; - var2.drawCentered("For more information, please take a look at", Login.loginBoxX + 180, var26, 16776960, 0); - var26 += 15; - var2.drawCentered("our privacy policy.", Login.loginBoxX + 180, var26, 16776960, 0); - var26 += 15; - var4 = Login.loginBoxX + 180 - 80; - var19 = 321; - UserComparator9.titlebuttonSprite.drawAt(var4 - 73, var19 - 20); - var0.drawCentered("Privacy Policy", var4, var19 + 5, 16777215, 0); - var4 = Login.loginBoxX + 180 + 80; - UserComparator9.titlebuttonSprite.drawAt(var4 - 73, var19 - 20); - var0.drawCentered("Back", var4, var19 + 5, 16777215, 0); - } else if (Login.loginIndex == 12) { - var25 = 201; - String var22 = ""; - var5 = ""; - String var21 = ""; - switch(Login.field1156) { - case 0: - var22 = "Your account has been disabled."; - var5 = Strings.field2797; - var21 = ""; - break; - case 1: - var22 = "Account locked as we suspect it has been stolen."; - var5 = Strings.field3006; - var21 = ""; - break; - default: - UserComparator3.Login_promptCredentials(false); - } - - var0.drawCentered(var22, Login.loginBoxX + 180, var25, 16776960, 0); - var26 = var25 + 15; - var2.drawCentered(var5, Login.loginBoxX + 180, var26, 16776960, 0); - var26 += 15; - var2.drawCentered(var21, Login.loginBoxX + 180, var26, 16776960, 0); - var26 += 15; - int var34 = Login.loginBoxX + 180; - short var33 = 276; - UserComparator9.titlebuttonSprite.drawAt(var34 - 73, var33 - 20); - var0.drawCentered("Support Page", var34, var33 + 5, 16777215, 0); - var34 = Login.loginBoxX + 180; - var33 = 326; - UserComparator9.titlebuttonSprite.drawAt(var34 - 73, var33 - 20); - var0.drawCentered("Back", var34, var33 + 5, 16777215, 0); - } else if (Login.loginIndex == 24) { - var25 = 221; - var0.drawCentered(Login.Login_response1, Login.loginBoxX + 180, var25, 16777215, 0); - var26 = var25 + 15; - var0.drawCentered(Login.Login_response2, Login.loginBoxX + 180, var26, 16777215, 0); - var26 += 15; - var0.drawCentered(Login.Login_response3, Login.loginBoxX + 180, var26, 16777215, 0); - var26 += 15; - var4 = Login.loginBoxX + 180; - var19 = 301; - UserComparator9.titlebuttonSprite.drawAt(var4 - 73, var19 - 20); - var0.drawCentered("Ok", var4, var19 + 5, 16777215, 0); - } - } - } - - if (Client.gameState >= 10) { - int[] var20 = new int[4]; - Rasterizer2D.Rasterizer2D_getClipArray(var20); - Rasterizer2D.Rasterizer2D_setClip(Login.xPadding, 0, Login.xPadding + 765, FloorUnderlayDefinition.canvasHeight); - Login.loginScreenRunesAnimation.draw(Login.xPadding - 22, Client.cycle); - Login.loginScreenRunesAnimation.draw(Login.xPadding + 22 + 765 - 128, Client.cycle); - Rasterizer2D.Rasterizer2D_setClipArray(var20); - } - - Decimator.title_muteSprite[ScriptEvent.clientPreferences.titleMusicDisabled ? 1 : 0].drawAt(Login.xPadding + 765 - 40, 463); - if (Client.gameState > 5 && Language.Language_EN == WorldMapSection1.clientLanguage) { - if (Message.field587 != null) { - var26 = Login.xPadding + 5; - var27 = 463; - byte var32 = 100; - byte var28 = 35; - Message.field587.drawAt(var26, var27); - var0.drawCentered("World" + " " + Client.worldId, var32 / 2 + var26, var28 / 2 + var27 - 2, 16777215, 0); - if (class96.World_request != null) { - var1.drawCentered("Loading...", var32 / 2 + var26, var28 / 2 + var27 + 12, 16777215, 0); - } else { - var1.drawCentered("Click to switch", var32 / 2 + var26, var28 / 2 + var27 + 12, 16777215, 0); - } - } else { - Message.field587 = ClientPacket.SpriteBuffer_getIndexedSpriteByName(GrandExchangeOfferUnitPriceComparator.archive8, "sl_button", ""); - } - } - + @Export("PcmStream_disable") + static final void PcmStream_disable(PcmStream var0) { + var0.active = false; + if (var0.sound != null) { + var0.sound.position = 0; } + + for (PcmStream var1 = var0.firstSubStream(); var1 != null; var1 = var0.nextSubStream()) { + PcmStream_disable(var1); + } + } - @ObfuscatedName("fx") + @ObfuscatedName("ev") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "12" + signature = "(I)V", + garbageValue = "1824721053" ) - @Export("logOut") - static final void logOut() { - Client.packetWriter.close(); - FloorOverlayDefinition.FloorOverlayDefinition_cached.clear(); - Login.method2258(); - WorldMapCacheName.method682(); - ObjectDefinition.ObjectDefinition_cached.clear(); - ObjectDefinition.ObjectDefinition_cachedModelData.clear(); - ObjectDefinition.ObjectDefinition_cachedEntities.clear(); - ObjectDefinition.ObjectDefinition_cachedModels.clear(); - NPCDefinition.NpcDefinition_cached.clear(); - NPCDefinition.NpcDefinition_cachedModels.clear(); - FriendSystem.method2038(); - BuddyRankComparator.method3568(); - class81.method2207(); - VarbitDefinition.VarbitDefinition_cached.clear(); - WorldMapRectangle.method331(); - HitSplatDefinition.HitSplatDefinition_cached.clear(); - HitSplatDefinition.HitSplatDefinition_cachedSprites.clear(); - HitSplatDefinition.HitSplatDefinition_cachedFonts.clear(); - HealthBarDefinition.HealthBarDefinition_cached.clear(); - HealthBarDefinition.HealthBarDefinition_cachedSprites.clear(); - StructDefinition.StructDefinition_cached.clear(); - ParamDefinition.ParamDefinition_cached.clear(); - MusicPatchNode.method3973(); - DirectByteArrayCopier.method4101(); - Widget.Widget_cachedSprites.clear(); - Widget.Widget_cachedModels.clear(); - Widget.Widget_cachedFonts.clear(); - Widget.Widget_cachedSpriteMasks.clear(); - ((TextureProvider)Rasterizer3D.Rasterizer3D_textureLoader).clear(); - Script.Script_cached.clear(); - BuddyRankComparator.archive0.clearFiles(); - LoginPacket.archive1.clearFiles(); - SpriteMask.archive3.clearFiles(); - NetFileRequest.archive4.clearFiles(); - WorldMapRectangle.archive5.clearFiles(); - class216.archive6.clearFiles(); - Language.archive7.clearFiles(); - GrandExchangeOfferUnitPriceComparator.archive8.clearFiles(); - WorldMapSprite.archive9.clearFiles(); - WorldMapID.archive10.clearFiles(); - Decimator.archive11.clearFiles(); - Occluder.archive12.clearFiles(); - WorldMapArea.scene.clear(); + static final void method15() { + Scene.Scene_isLowDetail = false; + Client.isLowDetail = false; + } - for (int var0 = 0; var0 < 4; ++var0) { - Client.collisionMaps[var0].clear(); - } - - System.gc(); - class80.method2194(2); - Client.currentTrackGroupId = -1; - Client.field855 = false; - GameShell.method1141(); - Tile.updateGameState(10); + @ObfuscatedName("gz") + @ObfuscatedSignature( + signature = "(B)Z", + garbageValue = "1" + ) + static boolean method16() { + return (Client.drawPlayerNames & 1) != 0; } } diff --git a/runescape-client/src/main/java/class13.java b/runescape-client/src/main/java/class13.java index 10eca10019..df68db77a8 100644 --- a/runescape-client/src/main/java/class13.java +++ b/runescape-client/src/main/java/class13.java @@ -1,24 +1,80 @@ +import net.runelite.mapping.Export; +import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("k") +@ObfuscatedName("e") public class class13 { - @ObfuscatedName("n") - @ObfuscatedSignature( - signature = "(CS)Z", - garbageValue = "32317" + @ObfuscatedName("br") + @ObfuscatedGetter( + intValue = 1914182179 ) - public static final boolean method200(char var0) { - return var0 == 160 || var0 == ' ' || var0 == '_' || var0 == '-'; - } + static int field91; + @ObfuscatedName("dd") + @ObfuscatedSignature( + signature = "Lij;" + ) + @Export("archive19") + static Archive archive19; - @ObfuscatedName("fi") + @ObfuscatedName("fa") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "2" + signature = "(Ljava/lang/String;I)V", + garbageValue = "507388741" ) - static final void method199() { - Scene.Scene_isLowDetail = false; - Client.isLowDetail = false; + @Export("doCheat") + static final void doCheat(String var0) { + if (var0.equalsIgnoreCase("toggleroof")) { + UserComparator10.clientPreferences.roofsHidden = !UserComparator10.clientPreferences.roofsHidden; + class40.savePreferences(); + if (UserComparator10.clientPreferences.roofsHidden) { + GrandExchangeOfferAgeComparator.addGameMessage(99, "", "Roofs are now all hidden"); + } else { + GrandExchangeOfferAgeComparator.addGameMessage(99, "", "Roofs will only be removed selectively"); + } + } + + if (var0.equalsIgnoreCase("displayfps")) { + Client.displayFps = !Client.displayFps; + } + + if (var0.equalsIgnoreCase("renderself")) { + Client.renderSelf = !Client.renderSelf; + } + + if (var0.equalsIgnoreCase("mouseovertext")) { + Client.showMouseOverText = !Client.showMouseOverText; + } + + if (Client.staffModLevel >= 2) { + if (var0.equalsIgnoreCase("errortest")) { + throw new RuntimeException(); + } + + if (var0.equalsIgnoreCase("showcoord")) { + WorldMapRegion.worldMap.showCoord = !WorldMapRegion.worldMap.showCoord; + } + + if (var0.equalsIgnoreCase("fpson")) { + Client.displayFps = true; + } + + if (var0.equalsIgnoreCase("fpsoff")) { + Client.displayFps = false; + } + + if (var0.equalsIgnoreCase("gc")) { + System.gc(); + } + + if (var0.equalsIgnoreCase("clientdrop")) { + Projectile.method2137(); + } + } + + PacketBufferNode var1 = ModelData0.getPacketBufferNode(ClientPacket.field2246, Client.packetWriter.isaacCipher); + var1.packetBuffer.writeByte(var0.length() + 1); + var1.packetBuffer.writeStringCp1252NullTerminated(var0); + Client.packetWriter.addNode(var1); } } diff --git a/runescape-client/src/main/java/class14.java b/runescape-client/src/main/java/class14.java index 0bf50e33bf..988021a951 100644 --- a/runescape-client/src/main/java/class14.java +++ b/runescape-client/src/main/java/class14.java @@ -1,79 +1,64 @@ -import java.io.File; -import java.io.IOException; -import java.io.RandomAccessFile; +import java.awt.Component; import net.runelite.mapping.Export; -import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("x") +@ObfuscatedName("n") public class class14 { - @ObfuscatedName("qn") - @ObfuscatedGetter( - intValue = 1643724800 - ) - static int field88; - @ObfuscatedName("gd") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "[Llx;" + signature = "Lhf;" ) - @Export("headIconHintSprites") - static Sprite[] headIconHintSprites; + @Export("KitDefinition_archive") + static AbstractArchive KitDefinition_archive; - @ObfuscatedName("q") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "-1580849456" + signature = "(Ljava/awt/Component;B)V", + garbageValue = "66" ) - static void method204() { - try { - File var0 = new File(class30.userHomeDirectory, "random.dat"); - int var2; - if (var0.exists()) { - JagexCache.JagexCache_randomDat = new BufferedFile(new AccessFile(var0, "rw", 25L), 24, 0); - } else { - label39: - for (int var1 = 0; var1 < class312.field3803.length; ++var1) { - for (var2 = 0; var2 < BoundaryObject.field1859.length; ++var2) { - File var3 = new File(BoundaryObject.field1859[var2] + class312.field3803[var1] + File.separatorChar + "random.dat"); - if (var3.exists()) { - JagexCache.JagexCache_randomDat = new BufferedFile(new AccessFile(var3, "rw", 25L), 24, 0); - break label39; - } - } - } - } - - if (JagexCache.JagexCache_randomDat == null) { - RandomAccessFile var4 = new RandomAccessFile(var0, "rw"); - var2 = var4.read(); - var4.seek(0L); - var4.write(var2); - var4.seek(0L); - var4.close(); - JagexCache.JagexCache_randomDat = new BufferedFile(new AccessFile(var0, "rw", 25L), 24, 0); - } - } catch (IOException var5) { - } - + static void method178(Component var0) { + var0.setFocusTraversalKeysEnabled(false); + var0.addKeyListener(KeyHandler.KeyHandler_instance); + var0.addFocusListener(KeyHandler.KeyHandler_instance); } - @ObfuscatedName("fw") + @ObfuscatedName("hr") @ObfuscatedSignature( - signature = "(I)I", - garbageValue = "363418967" + signature = "(IIB)I", + garbageValue = "-1" ) - static int method203() { - if (Client.archiveLoaders != null && Client.archiveLoadersDone < Client.archiveLoaders.size()) { - int var0 = 0; + static int method176(int var0, int var1) { + int var2 = var1 - 334; + if (var2 < 0) { + var2 = 0; + } else if (var2 > 100) { + var2 = 100; + } - for (int var1 = 0; var1 <= Client.archiveLoadersDone; ++var1) { - var0 += ((ArchiveLoader)Client.archiveLoaders.get(var1)).loadedCount; + int var3 = (Client.zoomWidth - Client.zoomHeight) * var2 / 100 + Client.zoomHeight; + return var0 * var3 / 256; + } + + @ObfuscatedName("is") + @ObfuscatedSignature( + signature = "(Ljava/lang/String;Ljava/lang/String;IIIIZI)V", + garbageValue = "-1867920411" + ) + @Export("insertMenuItem") + static final void insertMenuItem(String var0, String var1, int var2, int var3, int var4, int var5, boolean var6) { + if (!Client.isMenuOpen) { + if (Client.menuOptionsCount < 500) { + Client.menuActions[Client.menuOptionsCount] = var0; + Client.menuTargets[Client.menuOptionsCount] = var1; + Client.menuOpcodes[Client.menuOptionsCount] = var2; + Client.menuIdentifiers[Client.menuOptionsCount] = var3; + Client.menuArguments1[Client.menuOptionsCount] = var4; + Client.menuArguments2[Client.menuOptionsCount] = var5; + Client.menuShiftClick[Client.menuOptionsCount] = var6; + ++Client.menuOptionsCount; } - return var0 * 10000 / Client.field903; - } else { - return 10000; } } } diff --git a/runescape-client/src/main/java/class146.java b/runescape-client/src/main/java/class146.java index 5782e44c37..8a2e3a4667 100644 --- a/runescape-client/src/main/java/class146.java +++ b/runescape-client/src/main/java/class146.java @@ -1,7 +1,7 @@ import net.runelite.mapping.ObfuscatedName; -@ObfuscatedName("es") +@ObfuscatedName("ex") public interface class146 { - @ObfuscatedName("a") - void method3453(Object var1); + @ObfuscatedName("u") + void method3382(Object var1); } diff --git a/runescape-client/src/main/java/class16.java b/runescape-client/src/main/java/class16.java index 9513378af8..17818d7596 100644 --- a/runescape-client/src/main/java/class16.java +++ b/runescape-client/src/main/java/class16.java @@ -1,47 +1,501 @@ -import net.runelite.mapping.Export; -import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("r") +@ObfuscatedName("c") public class class16 { - @ObfuscatedName("hi") - @ObfuscatedGetter( - intValue = -71438851 - ) - @Export("cameraY") - static int cameraY; - - @ObfuscatedName("ad") + @ObfuscatedName("ai") @ObfuscatedSignature( - signature = "(ILcj;ZI)I", - garbageValue = "2052755977" + signature = "(ILci;ZB)I", + garbageValue = "1" ) - static int method224(int var0, Script var1, boolean var2) { - if (var0 == ScriptOpcodes.SOUND_SYNTH) { - Interpreter.Interpreter_intStackSize -= 3; - class185.queueSoundEffect(Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize], Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1], Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 2]); + static int method195(int var0, Script var1, boolean var2) { + if (var0 == ScriptOpcodes.FRIEND_COUNT) { + if (VertexNormal.friendSystem.field1061 == 0) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = -2; + } else if (VertexNormal.friendSystem.field1061 == 1) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = -1; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = VertexNormal.friendSystem.friendsList.getSize(); + } + return 1; - } else if (var0 == ScriptOpcodes.SOUND_SONG) { - AbstractWorldMapIcon.playSong(Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]); + } else { + int var3; + if (var0 == ScriptOpcodes.FRIEND_GETNAME) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + if (VertexNormal.friendSystem.method1870() && var3 >= 0 && var3 < VertexNormal.friendSystem.friendsList.getSize()) { + Friend var8 = (Friend)VertexNormal.friendSystem.friendsList.get(var3); + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var8.getName(); + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var8.getPreviousName(); + } else { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = ""; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = ""; + } + + return 1; + } else if (var0 == ScriptOpcodes.FRIEND_GETWORLD) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + if (VertexNormal.friendSystem.method1870() && var3 >= 0 && var3 < VertexNormal.friendSystem.friendsList.getSize()) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = ((Buddy)VertexNormal.friendSystem.friendsList.get(var3)).world; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + } + + return 1; + } else if (var0 == ScriptOpcodes.FRIEND_GETRANK) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + if (VertexNormal.friendSystem.method1870() && var3 >= 0 && var3 < VertexNormal.friendSystem.friendsList.getSize()) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = ((Buddy)VertexNormal.friendSystem.friendsList.get(var3)).rank; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + } + + return 1; + } else { + String var5; + if (var0 == ScriptOpcodes.FRIEND_SETRANK) { + var5 = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]; + int var6 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + class216.method4118(var5, var6); + return 1; + } else if (var0 == ScriptOpcodes.FRIEND_ADD) { + var5 = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]; + VertexNormal.friendSystem.addFriend(var5); + return 1; + } else if (var0 == ScriptOpcodes.FRIEND_DEL) { + var5 = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]; + VertexNormal.friendSystem.removeFriend(var5); + return 1; + } else if (var0 == ScriptOpcodes.IGNORE_ADD) { + var5 = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]; + VertexNormal.friendSystem.addIgnore(var5); + return 1; + } else if (var0 == ScriptOpcodes.IGNORE_DEL) { + var5 = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]; + VertexNormal.friendSystem.removeIgnore(var5); + return 1; + } else if (var0 == ScriptOpcodes.FRIEND_TEST) { + var5 = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]; + var5 = VertexNormal.method3017(var5); + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = VertexNormal.friendSystem.isFriended(new Username(var5, WorldMapLabelSize.loginType), false) ? 1 : 0; + return 1; + } else if (var0 == ScriptOpcodes.CLAN_GETCHATDISPLAYNAME) { + if (InterfaceParent.clanChat != null) { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = InterfaceParent.clanChat.name; + } else { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = ""; + } + + return 1; + } else if (var0 == ScriptOpcodes.CLAN_GETCHATCOUNT) { + if (InterfaceParent.clanChat != null) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = InterfaceParent.clanChat.getSize(); + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + } + + return 1; + } else if (var0 == ScriptOpcodes.CLAN_GETCHATUSERNAME) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + if (InterfaceParent.clanChat != null && var3 < InterfaceParent.clanChat.getSize()) { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = InterfaceParent.clanChat.get(var3).getUsername().getName(); + } else { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = ""; + } + + return 1; + } else if (var0 == ScriptOpcodes.CLAN_GETCHATUSERWORLD) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + if (InterfaceParent.clanChat != null && var3 < InterfaceParent.clanChat.getSize()) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = ((Buddy)InterfaceParent.clanChat.get(var3)).getWorld(); + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + } + + return 1; + } else if (var0 == ScriptOpcodes.CLAN_GETCHATUSERRANK) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + if (InterfaceParent.clanChat != null && var3 < InterfaceParent.clanChat.getSize()) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = ((Buddy)InterfaceParent.clanChat.get(var3)).rank; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + } + + return 1; + } else if (var0 == ScriptOpcodes.CLAN_GETCHATMINKICK) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = InterfaceParent.clanChat != null ? InterfaceParent.clanChat.minKick : 0; + return 1; + } else if (var0 == ScriptOpcodes.CLAN_KICKUSER) { + var5 = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]; + UserComparator3.clanKickUser(var5); + return 1; + } else if (var0 == ScriptOpcodes.CLAN_GETCHATRANK) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = InterfaceParent.clanChat != null ? InterfaceParent.clanChat.rank : 0; + return 1; + } else if (var0 == ScriptOpcodes.CLAN_JOINCHAT) { + var5 = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]; + WorldMapAreaData.Clan_joinChat(var5); + return 1; + } else if (var0 == ScriptOpcodes.CLAN_LEAVECHAT) { + class290.Clan_leaveChat(); + return 1; + } else if (var0 == ScriptOpcodes.IGNORE_COUNT) { + if (!VertexNormal.friendSystem.method1870()) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = -1; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = VertexNormal.friendSystem.ignoreList.getSize(); + } + + return 1; + } else if (var0 == ScriptOpcodes.IGNORE_GETNAME) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + if (VertexNormal.friendSystem.method1870() && var3 >= 0 && var3 < VertexNormal.friendSystem.ignoreList.getSize()) { + Ignored var4 = (Ignored)VertexNormal.friendSystem.ignoreList.get(var3); + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var4.getName(); + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var4.getPreviousName(); + } else { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = ""; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = ""; + } + + return 1; + } else if (var0 == ScriptOpcodes.IGNORE_TEST) { + var5 = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]; + var5 = VertexNormal.method3017(var5); + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = VertexNormal.friendSystem.isIgnored(new Username(var5, WorldMapLabelSize.loginType)) ? 1 : 0; + return 1; + } else if (var0 == ScriptOpcodes.CLAN_ISSELF) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + if (InterfaceParent.clanChat != null && var3 < InterfaceParent.clanChat.getSize() && InterfaceParent.clanChat.get(var3).getUsername().equals(class215.localPlayer.username)) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 1; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + } + + return 1; + } else if (var0 == ScriptOpcodes.CLAN_GETCHATOWNERNAME) { + if (InterfaceParent.clanChat != null && InterfaceParent.clanChat.owner != null) { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = InterfaceParent.clanChat.owner; + } else { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = ""; + } + + return 1; + } else if (var0 == ScriptOpcodes.CLAN_ISFRIEND) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + if (InterfaceParent.clanChat != null && var3 < InterfaceParent.clanChat.getSize() && ((ClanMate)InterfaceParent.clanChat.get(var3)).isFriend()) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 1; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + } + + return 1; + } else if (var0 != ScriptOpcodes.CLAN_ISIGNORE) { + if (var0 == 3628) { + VertexNormal.friendSystem.friendsList.removeComparator(); + return 1; + } else { + boolean var7; + if (var0 == 3629) { + var7 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + VertexNormal.friendSystem.friendsList.addComparator(new UserComparator1(var7)); + return 1; + } else if (var0 == 3630) { + var7 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + VertexNormal.friendSystem.friendsList.addComparator(new UserComparator2(var7)); + return 1; + } else if (var0 == 3631) { + var7 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + VertexNormal.friendSystem.friendsList.addComparator(new UserComparator3(var7)); + return 1; + } else if (var0 == 3632) { + var7 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + VertexNormal.friendSystem.friendsList.addComparator(new UserComparator4(var7)); + return 1; + } else if (var0 == 3633) { + var7 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + VertexNormal.friendSystem.friendsList.addComparator(new UserComparator5(var7)); + return 1; + } else if (var0 == 3634) { + var7 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + VertexNormal.friendSystem.friendsList.addComparator(new UserComparator6(var7)); + return 1; + } else if (var0 == 3635) { + var7 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + VertexNormal.friendSystem.friendsList.addComparator(new UserComparator7(var7)); + return 1; + } else if (var0 == 3636) { + var7 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + VertexNormal.friendSystem.friendsList.addComparator(new UserComparator8(var7)); + return 1; + } else if (var0 == 3637) { + var7 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + VertexNormal.friendSystem.friendsList.addComparator(new UserComparator9(var7)); + return 1; + } else if (var0 == 3638) { + var7 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + VertexNormal.friendSystem.friendsList.addComparator(new UserComparator10(var7)); + return 1; + } else if (var0 == 3639) { + VertexNormal.friendSystem.friendsList.sort(); + return 1; + } else if (var0 == 3640) { + VertexNormal.friendSystem.ignoreList.removeComparator(); + return 1; + } else if (var0 == 3641) { + var7 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + VertexNormal.friendSystem.ignoreList.addComparator(new UserComparator1(var7)); + return 1; + } else if (var0 == 3642) { + var7 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + VertexNormal.friendSystem.ignoreList.addComparator(new UserComparator2(var7)); + return 1; + } else if (var0 == 3643) { + VertexNormal.friendSystem.ignoreList.sort(); + return 1; + } else if (var0 == 3644) { + if (InterfaceParent.clanChat != null) { + InterfaceParent.clanChat.removeComparator(); + } + + return 1; + } else if (var0 == 3645) { + var7 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + if (InterfaceParent.clanChat != null) { + InterfaceParent.clanChat.addComparator(new UserComparator1(var7)); + } + + return 1; + } else if (var0 == 3646) { + var7 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + if (InterfaceParent.clanChat != null) { + InterfaceParent.clanChat.addComparator(new UserComparator2(var7)); + } + + return 1; + } else if (var0 == 3647) { + var7 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + if (InterfaceParent.clanChat != null) { + InterfaceParent.clanChat.addComparator(new UserComparator3(var7)); + } + + return 1; + } else if (var0 == 3648) { + var7 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + if (InterfaceParent.clanChat != null) { + InterfaceParent.clanChat.addComparator(new UserComparator4(var7)); + } + + return 1; + } else if (var0 == 3649) { + var7 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + if (InterfaceParent.clanChat != null) { + InterfaceParent.clanChat.addComparator(new UserComparator5(var7)); + } + + return 1; + } else if (var0 == 3650) { + var7 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + if (InterfaceParent.clanChat != null) { + InterfaceParent.clanChat.addComparator(new UserComparator6(var7)); + } + + return 1; + } else if (var0 == 3651) { + var7 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + if (InterfaceParent.clanChat != null) { + InterfaceParent.clanChat.addComparator(new UserComparator7(var7)); + } + + return 1; + } else if (var0 == 3652) { + var7 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + if (InterfaceParent.clanChat != null) { + InterfaceParent.clanChat.addComparator(new UserComparator8(var7)); + } + + return 1; + } else if (var0 == 3653) { + var7 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + if (InterfaceParent.clanChat != null) { + InterfaceParent.clanChat.addComparator(new UserComparator9(var7)); + } + + return 1; + } else if (var0 == 3654) { + var7 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + if (InterfaceParent.clanChat != null) { + InterfaceParent.clanChat.addComparator(new UserComparator10(var7)); + } + + return 1; + } else if (var0 == 3655) { + if (InterfaceParent.clanChat != null) { + InterfaceParent.clanChat.sort(); + } + + return 1; + } else if (var0 == 3656) { + var7 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + VertexNormal.friendSystem.friendsList.addComparator(new BuddyRankComparator(var7)); + return 1; + } else if (var0 == 3657) { + var7 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + if (InterfaceParent.clanChat != null) { + InterfaceParent.clanChat.addComparator(new BuddyRankComparator(var7)); + } + + return 1; + } else { + return 2; + } + } + } else { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + if (InterfaceParent.clanChat != null && var3 < InterfaceParent.clanChat.getSize() && ((ClanMate)InterfaceParent.clanChat.get(var3)).isIgnored()) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 1; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + } + + return 1; + } + } + } + } + + @ObfuscatedName("ar") + @ObfuscatedSignature( + signature = "(ILci;ZI)I", + garbageValue = "1316998037" + ) + static int method196(int var0, Script var1, boolean var2) { + int var3; + if (var0 == ScriptOpcodes.CAM_FORCEANGLE) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var3 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + int var4 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + if (!Client.isCameraLocked) { + Client.camAngleX = var3; + Client.camAngleY = var4; + } + return 1; - } else if (var0 == ScriptOpcodes.SOUND_JINGLE) { - Interpreter.Interpreter_intStackSize -= 2; - WorldMapEvent.playSoundJingle(Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize], Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]); + } else if (var0 == ScriptOpcodes.CAM_GETANGLE_XA) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Client.camAngleX; + return 1; + } else if (var0 == ScriptOpcodes.CAM_GETANGLE_YA) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Client.camAngleY; + return 1; + } else if (var0 == ScriptOpcodes.CAM_SETFOLLOWHEIGHT) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + if (var3 < 0) { + var3 = 0; + } + + Client.camFollowHeight = var3; + return 1; + } else if (var0 == ScriptOpcodes.CAM_GETFOLLOWHEIGHT) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Client.camFollowHeight; return 1; } else { return 2; } } - @ObfuscatedName("iw") + @ObfuscatedName("az") @ObfuscatedSignature( - signature = "(B)I", - garbageValue = "1" + signature = "(ILci;ZB)I", + garbageValue = "-33" ) - @Export("getNewestMenuIdx") - static final int getNewestMenuIdx() { - return Client.menuOptionsCount - 1; + static int method197(int var0, Script var1, boolean var2) { + if (var0 == ScriptOpcodes.VIEWPORT_SETFOV) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + Client.field880 = (short)WorldMapIcon_1.method309(Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]); + if (Client.field880 <= 0) { + Client.field880 = 256; + } + + Client.field893 = (short)WorldMapIcon_1.method309(Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]); + if (Client.field893 <= 0) { + Client.field893 = 256; + } + + return 1; + } else if (var0 == ScriptOpcodes.VIEWPORT_SETZOOM) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + Client.zoomHeight = (short)Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + if (Client.zoomHeight <= 0) { + Client.zoomHeight = 256; + } + + Client.zoomWidth = (short)Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + if (Client.zoomWidth <= 0) { + Client.zoomWidth = 320; + } + + return 1; + } else if (var0 == ScriptOpcodes.VIEWPORT_CLAMPFOV) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 4; + Client.field896 = (short)Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + if (Client.field896 <= 0) { + Client.field896 = 1; + } + + Client.field897 = (short)Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + if (Client.field897 <= 0) { + Client.field897 = 32767; + } else if (Client.field897 < Client.field896) { + Client.field897 = Client.field896; + } + + Client.field785 = (short)Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 2]; + if (Client.field785 <= 0) { + Client.field785 = 1; + } + + Client.field679 = (short)Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 3]; + if (Client.field679 <= 0) { + Client.field679 = 32767; + } else if (Client.field679 < Client.field785) { + Client.field679 = Client.field785; + } + + return 1; + } else if (var0 == ScriptOpcodes.VIEWPORT_GETEFFECTIVESIZE) { + if (Client.viewportWidget != null) { + FileSystem.setViewportShape(0, 0, Client.viewportWidget.width, Client.viewportWidget.height, false); + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Client.viewportWidth; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Client.viewportHeight; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = -1; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = -1; + } + + return 1; + } else if (var0 == ScriptOpcodes.VIEWPORT_GETZOOM) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Client.zoomHeight; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Client.zoomWidth; + return 1; + } else if (var0 == ScriptOpcodes.VIEWPORT_GETFOV) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = FileSystem.method3551(Client.field880); + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = FileSystem.method3551(Client.field893); + return 1; + } else if (var0 == 6220) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + return 1; + } else if (var0 == 6221) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + return 1; + } else if (var0 == 6222) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = BoundaryObject.canvasWidth; + return 1; + } else if (var0 == 6223) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = WorldMapCacheName.canvasHeight; + return 1; + } else { + return 2; + } } } diff --git a/runescape-client/src/main/java/class160.java b/runescape-client/src/main/java/class160.java index 60382d4ef8..eab2bb80cb 100644 --- a/runescape-client/src/main/java/class160.java +++ b/runescape-client/src/main/java/class160.java @@ -3,273 +3,100 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("fp") +@ObfuscatedName("fx") public enum class160 implements Enumerated { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lfp;" + signature = "Lfx;" ) - field1986(2, 0), - @ObfuscatedName("t") + field2009(1, 0), + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lfp;" + signature = "Lfx;" ) - field1987(1, 1), - @ObfuscatedName("n") + field2008(0, 1), + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Lfp;" + signature = "Lfx;" ) - field1982(3, 2), - @ObfuscatedName("q") + field2006(3, 2), + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Lfp;" + signature = "Lfx;" ) - field1985(0, 3); + field2005(2, 3); - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = -1547837327 + intValue = -406777895 ) - public final int field1983; - @ObfuscatedName("l") + public final int field2007; + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = 2121072249 + intValue = -141760123 ) @Export("id") final int id; class160(int var3, int var4) { - this.field1983 = var3; + this.field2007 = var3; this.id = var4; } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(I)I", - garbageValue = "-1993081102" + signature = "(B)I", + garbageValue = "7" ) @Export("rsOrdinal") public int rsOrdinal() { return this.id; } - @ObfuscatedName("q") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(IIII)V", - garbageValue = "-1766799370" + signature = "(II)I", + garbageValue = "684662102" ) - static final void method3585(int var0, int var1, int var2) { - int var3; - for (var3 = 0; var3 < 8; ++var3) { - for (int var4 = 0; var4 < 8; ++var4) { - Tiles.Tiles_heights[var0][var3 + var1][var4 + var2] = 0; - } + @Export("iLog") + public static int iLog(int var0) { + int var1 = 0; + if (var0 < 0 || var0 >= 65536) { + var0 >>>= 16; + var1 += 16; } - if (var1 > 0) { - for (var3 = 1; var3 < 8; ++var3) { - Tiles.Tiles_heights[var0][var1][var3 + var2] = Tiles.Tiles_heights[var0][var1 - 1][var3 + var2]; - } + if (var0 >= 256) { + var0 >>>= 8; + var1 += 8; } - if (var2 > 0) { - for (var3 = 1; var3 < 8; ++var3) { - Tiles.Tiles_heights[var0][var3 + var1][var2] = Tiles.Tiles_heights[var0][var3 + var1][var2 - 1]; - } + if (var0 >= 16) { + var0 >>>= 4; + var1 += 4; } - if (var1 > 0 && Tiles.Tiles_heights[var0][var1 - 1][var2] != 0) { - Tiles.Tiles_heights[var0][var1][var2] = Tiles.Tiles_heights[var0][var1 - 1][var2]; - } else if (var2 > 0 && Tiles.Tiles_heights[var0][var1][var2 - 1] != 0) { - Tiles.Tiles_heights[var0][var1][var2] = Tiles.Tiles_heights[var0][var1][var2 - 1]; - } else if (var1 > 0 && var2 > 0 && Tiles.Tiles_heights[var0][var1 - 1][var2 - 1] != 0) { - Tiles.Tiles_heights[var0][var1][var2] = Tiles.Tiles_heights[var0][var1 - 1][var2 - 1]; + if (var0 >= 4) { + var0 >>>= 2; + var1 += 2; } + if (var0 >= 1) { + var0 >>>= 1; + ++var1; + } + + return var0 + var1; } - @ObfuscatedName("l") + @ObfuscatedName("ja") @ObfuscatedSignature( - signature = "([BIII)Ljava/lang/String;", - garbageValue = "-634451931" + signature = "(IB)V", + garbageValue = "7" ) - @Export("decodeStringCp1252") - public static String decodeStringCp1252(byte[] var0, int var1, int var2) { - char[] var3 = new char[var2]; - int var4 = 0; - - for (int var5 = 0; var5 < var2; ++var5) { - int var6 = var0[var5 + var1] & 255; - if (var6 != 0) { - if (var6 >= 128 && var6 < 160) { - char var7 = class287.cp1252AsciiExtension[var6 - 128]; - if (var7 == 0) { - var7 = '?'; - } - - var6 = var7; - } - - var3[var4++] = (char)var6; - } + static final void method3494(int var0) { + if (UserComparator3.loadInterface(var0)) { + MusicPatchPcmStream.drawModelComponents(FloorDecoration.Widget_interfaceComponents[var0], -1); } - - return new String(var3, 0, var4); - } - - @ObfuscatedName("o") - @ObfuscatedSignature( - signature = "(IIIZIB)J", - garbageValue = "-75" - ) - @Export("calculateTag") - public static long calculateTag(int var0, int var1, int var2, boolean var3, int var4) { - long var5 = (long)((var0 & 127) << 0 | (var1 & 127) << 7 | (var2 & 3) << 14) | ((long)var4 & 4294967295L) << 17; - if (var3) { - var5 |= 65536L; - } - - return var5; - } - - @ObfuscatedName("hq") - @ObfuscatedSignature( - signature = "(Lkf;I)V", - garbageValue = "1886858655" - ) - static final void method3586(PacketBuffer var0) { - for (int var1 = 0; var1 < Client.field676; ++var1) { - int var2 = Client.field677[var1]; - NPC var3 = Client.npcs[var2]; - int var4 = var0.readUnsignedByte(); - int var5; - int var6; - int var7; - if ((var4 & 2) != 0) { - var5 = var0.method5646(); - if (var5 == 65535) { - var5 = -1; - } - - var6 = var0.method5639(); - if (var5 == var3.sequence && var5 != -1) { - var7 = PlayerType.SequenceDefinition_get(var5).field3521; - if (var7 == 1) { - var3.sequenceFrame = 0; - var3.sequenceFrameCycle = 0; - var3.sequenceDelay = var6; - var3.field960 = 0; - } - - if (var7 == 2) { - var3.field960 = 0; - } - } else if (var5 == -1 || var3.sequence == -1 || PlayerType.SequenceDefinition_get(var5).field3519 >= PlayerType.SequenceDefinition_get(var3.sequence).field3519) { - var3.sequence = var5; - var3.sequenceFrame = 0; - var3.sequenceFrameCycle = 0; - var3.sequenceDelay = var6; - var3.field960 = 0; - var3.field983 = var3.pathLength; - } - } - - if ((var4 & 1) != 0) { - var3.targetIndex = var0.method5647(); - if (var3.targetIndex == 65535) { - var3.targetIndex = -1; - } - } - - if ((var4 & 32) != 0) { - var3.spotAnimation = var0.method5647(); - var5 = var0.method5603(); - var3.field965 = var5 >> 16; - var3.field973 = (var5 & 65535) + Client.cycle; - var3.spotAnimationFrame = 0; - var3.spotAnimationFrameCycle = 0; - if (var3.field973 > Client.cycle) { - var3.spotAnimationFrame = -1; - } - - if (var3.spotAnimation == 65535) { - var3.spotAnimation = -1; - } - } - - int var8; - if ((var4 & 16) != 0) { - var5 = var0.method5647(); - var6 = var0.method5648(); - var7 = var3.x - (var5 - UserComparator8.baseX * 64 - UserComparator8.baseX * 64) * 64; - var8 = var3.y - (var6 - HealthBar.baseY * 64 - HealthBar.baseY * 64) * 64; - if (var7 != 0 || var8 != 0) { - var3.field934 = (int)(Math.atan2((double)var7, (double)var8) * 325.949D) & 2047; - } - } - - if ((var4 & 4) != 0) { - var3.overheadText = var0.readStringCp1252NullTerminated(); - var3.overheadTextCyclesRemaining = 100; - } - - if ((var4 & 8) != 0) { - var3.definition = SecureRandomCallable.getNpcDefinition(var0.readUnsignedShort()); - var3.field927 = var3.definition.size; - var3.field977 = var3.definition.rotation; - var3.walkSequence = var3.definition.walkSequence; - var3.walkBackSequence = var3.definition.walkBackSequence; - var3.walkLeftSequence = var3.definition.walkLeftSequence; - var3.walkRightSequence = var3.definition.walkRightSequence; - var3.readySequence = var3.definition.readySequence; - var3.turnLeftSequence = var3.definition.turnLeftSequence; - var3.turnRightSequence = var3.definition.turnRightSequence; - } - - if ((var4 & 64) != 0) { - var5 = var0.method5639(); - int var9; - int var10; - int var11; - if (var5 > 0) { - for (var6 = 0; var6 < var5; ++var6) { - var8 = -1; - var9 = -1; - var10 = -1; - var7 = var0.readUShortSmart(); - if (var7 == 32767) { - var7 = var0.readUShortSmart(); - var9 = var0.readUShortSmart(); - var8 = var0.readUShortSmart(); - var10 = var0.readUShortSmart(); - } else if (var7 != 32766) { - var9 = var0.readUShortSmart(); - } else { - var7 = -1; - } - - var11 = var0.readUShortSmart(); - var3.addHitSplat(var7, var9, var8, var10, Client.cycle, var11); - } - } - - var6 = var0.method5697(); - if (var6 > 0) { - for (var7 = 0; var7 < var6; ++var7) { - var8 = var0.readUShortSmart(); - var9 = var0.readUShortSmart(); - if (var9 != 32767) { - var10 = var0.readUShortSmart(); - var11 = var0.readUnsignedByte(); - int var12 = var9 > 0 ? var0.method5639() : var11; - var3.addHealthBar(var8, Client.cycle, var9, var10, var11, var12); - } else { - var3.removeHealthBar(var8); - } - } - } - } - } - } } diff --git a/runescape-client/src/main/java/class161.java b/runescape-client/src/main/java/class161.java index dd8f86fa9c..6a8e124835 100644 --- a/runescape-client/src/main/java/class161.java +++ b/runescape-client/src/main/java/class161.java @@ -1,5 +1,5 @@ import net.runelite.mapping.ObfuscatedName; -@ObfuscatedName("fu") +@ObfuscatedName("fm") public interface class161 { } diff --git a/runescape-client/src/main/java/class162.java b/runescape-client/src/main/java/class162.java index d8da1279ad..31d1498da9 100644 --- a/runescape-client/src/main/java/class162.java +++ b/runescape-client/src/main/java/class162.java @@ -2,41 +2,108 @@ import net.runelite.mapping.Export; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("fy") +@ObfuscatedName("fc") public class class162 implements class161 { - @ObfuscatedName("u") - @Export("BZip2Decompressor_block") - static int[] BZip2Decompressor_block; - - @ObfuscatedName("a") + @ObfuscatedName("dm") @ObfuscatedSignature( - signature = "(IB)Liy;", - garbageValue = "113" + signature = "Lij;" ) - @Export("getParamDefinition") - public static ParamDefinition getParamDefinition(int var0) { - ParamDefinition var1 = (ParamDefinition)ParamDefinition.ParamDefinition_cached.get((long)var0); - if (var1 != null) { - return var1; + @Export("archive14") + static Archive archive14; + + @ObfuscatedName("fm") + @ObfuscatedSignature( + signature = "(IB)V", + garbageValue = "45" + ) + @Export("getLoginError") + static void getLoginError(int var0) { + if (var0 == -3) { + PacketWriter.setLoginResponseString("Connection timed out.", "Please try using a different world.", ""); + } else if (var0 == -2) { + PacketWriter.setLoginResponseString("Error connecting to server.", "Please try using a different world.", ""); + } else if (var0 == -1) { + PacketWriter.setLoginResponseString("No response from server.", "Please try using a different world.", ""); + } else if (var0 == 3) { + Login.loginIndex = 3; + Login.field1186 = 1; + } else if (var0 == 4) { + Login.loginIndex = 12; + Login.field1185 = 0; + } else if (var0 == 5) { + Login.field1186 = 2; + PacketWriter.setLoginResponseString("Your account has not logged out from its last", "session or the server is too busy right now.", "Please try again in a few minutes."); + } else if (var0 == 68 || !Client.onMobile && var0 == 6) { + PacketWriter.setLoginResponseString("RuneScape has been updated!", "Please reload this page.", ""); + } else if (var0 == 7) { + PacketWriter.setLoginResponseString("This world is full.", "Please use a different world.", ""); + } else if (var0 == 8) { + PacketWriter.setLoginResponseString("Unable to connect.", "Login server offline.", ""); + } else if (var0 == 9) { + PacketWriter.setLoginResponseString("Login limit exceeded.", "Too many connections from your address.", ""); + } else if (var0 == 10) { + PacketWriter.setLoginResponseString("Unable to connect.", "Bad session id.", ""); + } else if (var0 == 11) { + PacketWriter.setLoginResponseString("We suspect someone knows your password.", "Press 'change your password' on front page.", ""); + } else if (var0 == 12) { + PacketWriter.setLoginResponseString("You need a members account to login to this world.", "Please subscribe, or use a different world.", ""); + } else if (var0 == 13) { + PacketWriter.setLoginResponseString("Could not complete login.", "Please try using a different world.", ""); + } else if (var0 == 14) { + PacketWriter.setLoginResponseString("The server is being updated.", "Please wait 1 minute and try again.", ""); + } else if (var0 == 16) { + PacketWriter.setLoginResponseString("Too many login attempts.", "Please wait a few minutes before trying again.", ""); + } else if (var0 == 17) { + PacketWriter.setLoginResponseString("You are standing in a members-only area.", "To play on this world move to a free area first", ""); + } else if (var0 == 18) { + Login.loginIndex = 12; + Login.field1185 = 1; + } else if (var0 == 19) { + PacketWriter.setLoginResponseString("This world is running a closed Beta.", "Sorry invited players only.", "Please use a different world."); + } else if (var0 == 20) { + PacketWriter.setLoginResponseString("Invalid loginserver requested.", "Please try using a different world.", ""); + } else if (var0 == 22) { + PacketWriter.setLoginResponseString("Malformed login packet.", "Please try again.", ""); + } else if (var0 == 23) { + PacketWriter.setLoginResponseString("No reply from loginserver.", "Please wait 1 minute and try again.", ""); + } else if (var0 == 24) { + PacketWriter.setLoginResponseString("Error loading your profile.", "Please contact customer support.", ""); + } else if (var0 == 25) { + PacketWriter.setLoginResponseString("Unexpected loginserver response.", "Please try using a different world.", ""); + } else if (var0 == 26) { + PacketWriter.setLoginResponseString("This computers address has been blocked", "as it was used to break our rules.", ""); + } else if (var0 == 27) { + PacketWriter.setLoginResponseString("", "Service unavailable.", ""); + } else if (var0 == 31) { + PacketWriter.setLoginResponseString("Your account must have a displayname set", "in order to play the game. Please set it", "via the website, or the main game."); + } else if (var0 == 32) { + PacketWriter.setLoginResponseString("Your attempt to log into your account was", "unsuccessful. Don't worry, you can sort", "this out by visiting the billing system."); + } else if (var0 == 37) { + PacketWriter.setLoginResponseString("Your account is currently inaccessible.", "Please try again in a few minutes.", ""); + } else if (var0 == 38) { + PacketWriter.setLoginResponseString("You need to vote to play!", "Visit runescape.com and vote,", "and then come back here!"); + } else if (var0 == 55) { + Login.loginIndex = 8; } else { - byte[] var2 = ParamDefinition.ParamDefinition_archive.takeFile(11, var0); - var1 = new ParamDefinition(); - if (var2 != null) { - var1.decode(new Buffer(var2)); + if (var0 == 56) { + PacketWriter.setLoginResponseString("Enter the 6-digit code generated by your", "authenticator app.", ""); + class81.updateGameState(11); + return; } - var1.postDecode(); - ParamDefinition.ParamDefinition_cached.put(var1, (long)var0); - return var1; - } - } + if (var0 == 57) { + PacketWriter.setLoginResponseString("The code you entered was incorrect.", "Please try again.", ""); + class81.updateGameState(11); + return; + } - @ObfuscatedName("v") - @ObfuscatedSignature( - signature = "(IB)Z", - garbageValue = "47" - ) - public static boolean method3588(int var0) { - return (var0 >> 28 & 1) != 0; + if (var0 == 61) { + Login.loginIndex = 7; + } else { + PacketWriter.setLoginResponseString("Unexpected server response", "Please try using a different world.", ""); + } + } + + class81.updateGameState(10); } } diff --git a/runescape-client/src/main/java/class173.java b/runescape-client/src/main/java/class173.java index 5a4a11522f..9b09ae4978 100644 --- a/runescape-client/src/main/java/class173.java +++ b/runescape-client/src/main/java/class173.java @@ -3,27 +3,30 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("fx") +@ObfuscatedName("fy") public class class173 { - @ObfuscatedName("n") + @ObfuscatedName("b") @Export("directions") static int[][] directions; - @ObfuscatedName("q") + @ObfuscatedName("g") @Export("distances") static int[][] distances; - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = 1388693747 + intValue = -1442430251 ) - static int field2070; - @ObfuscatedName("o") + static int field2103; + @ObfuscatedName("p") + @ObfuscatedGetter( + intValue = -101086935 + ) + static int field2100; + @ObfuscatedName("y") @Export("bufferX") static int[] bufferX; - @ObfuscatedName("i") + @ObfuscatedName("w") @Export("bufferY") static int[] bufferY; - @ObfuscatedName("ed") - static int[] field2074; static { directions = new int[128][128]; @@ -32,21 +35,13 @@ public class class173 { bufferY = new int[4096]; } - @ObfuscatedName("n") + @ObfuscatedName("bi") @ObfuscatedSignature( - signature = "(CI)C", - garbageValue = "-1784750626" + signature = "(Ljava/lang/String;I)I", + garbageValue = "826703684" ) - static char method3720(char var0) { - return var0 != 181 && var0 != 402 ? Character.toTitleCase(var0) : var0; - } - - @ObfuscatedName("jr") - @ObfuscatedSignature( - signature = "(IB)Ljava/lang/String;", - garbageValue = "0" - ) - static final String method3728(int var0) { - return var0 < 999999999 ? Integer.toString(var0) : "*"; + @Export("stringCp1252NullTerminatedByteSize") + public static int stringCp1252NullTerminatedByteSize(String var0) { + return var0.length() + 1; } } diff --git a/runescape-client/src/main/java/class181.java b/runescape-client/src/main/java/class181.java index 2911c6240e..91a32c4bed 100644 --- a/runescape-client/src/main/java/class181.java +++ b/runescape-client/src/main/java/class181.java @@ -1,5 +1,5 @@ import net.runelite.mapping.ObfuscatedName; -@ObfuscatedName("fo") +@ObfuscatedName("fw") public interface class181 { } diff --git a/runescape-client/src/main/java/class185.java b/runescape-client/src/main/java/class185.java index bbfaf473ef..43422da204 100644 --- a/runescape-client/src/main/java/class185.java +++ b/runescape-client/src/main/java/class185.java @@ -1,327 +1,135 @@ import net.runelite.mapping.Export; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("ge") +@ObfuscatedName("gd") public class class185 { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lge;" + signature = "Lgd;" ) - public static final class185 field2296; - @ObfuscatedName("t") + public static final class185 field2334; + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lge;" + signature = "Lgd;" ) - public static final class185 field2292; - @ObfuscatedName("n") + public static final class185 field2332; + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Lge;" + signature = "Lgd;" ) - public static final class185 field2293; - @ObfuscatedName("q") + public static final class185 field2333; + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Lge;" + signature = "Lgd;" ) - public static final class185 field2294; - @ObfuscatedName("v") + public static final class185 field2339; + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "Lge;" + signature = "Lgd;" ) - public static final class185 field2295; - @ObfuscatedName("l") + public static final class185 field2336; + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "Lge;" + signature = "Lgd;" ) - public static final class185 field2291; - @ObfuscatedName("c") + public static final class185 field2341; + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "Lge;" + signature = "Lgd;" ) - public static final class185 field2298; - @ObfuscatedName("o") + public static final class185 field2337; + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "Lge;" + signature = "Lgd;" ) - public static final class185 field2297; + public static final class185 field2331; + @ObfuscatedName("w") + @ObfuscatedSignature( + signature = "Lgd;" + ) + public static final class185 field2335; @ObfuscatedName("i") @ObfuscatedSignature( - signature = "Lge;" + signature = "Lgd;" ) - public static final class185 field2299; - @ObfuscatedName("d") + public static final class185 field2340; + @ObfuscatedName("lh") @ObfuscatedSignature( - signature = "Lge;" + signature = "Lhl;" ) - public static final class185 field2300; + @Export("mousedOverWidgetIf1") + static Widget mousedOverWidgetIf1; static { - field2296 = new class185(4); - field2292 = new class185(5); - field2293 = new class185(6); - field2294 = new class185(3); - field2295 = new class185(5); - field2291 = new class185(14); - field2298 = new class185(15); - field2297 = new class185(7); - field2299 = new class185(2); - field2300 = new class185(4); + field2334 = new class185(5); + field2332 = new class185(4); + field2333 = new class185(14); + field2339 = new class185(3); + field2336 = new class185(15); + field2341 = new class185(6); + field2337 = new class185(4); + field2331 = new class185(7); + field2335 = new class185(5); + field2340 = new class185(2); } @ObfuscatedSignature( signature = "(I)V", - garbageValue = "4" + garbageValue = "5" ) class185(int var1) { } - @ObfuscatedName("l") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "-883649352" + signature = "(Lhf;B)V", + garbageValue = "3" ) - public static void method3774() { - if (NetCache.NetCache_socket != null) { - NetCache.NetCache_socket.close(); - } - - } - - @ObfuscatedName("l") - @ObfuscatedSignature( - signature = "(ILcj;ZI)I", - garbageValue = "-1968035328" - ) - static int method3772(int var0, Script var1, boolean var2) { - int var4 = -1; - Widget var3; - if (var0 >= 2000) { - var0 -= 1000; - var4 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - var3 = PacketBufferNode.getWidget(var4); - } else { - var3 = var2 ? class96.field1301 : ReflectionCheck.field1310; - } - - if (var0 == ScriptOpcodes.CC_SETSCROLLPOS) { - Interpreter.Interpreter_intStackSize -= 2; - var3.scrollX = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - if (var3.scrollX > var3.scrollWidth - var3.width) { - var3.scrollX = var3.scrollWidth - var3.width; - } - - if (var3.scrollX < 0) { - var3.scrollX = 0; - } - - var3.scrollY = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - if (var3.scrollY > var3.scrollHeight - var3.height) { - var3.scrollY = var3.scrollHeight - var3.height; - } - - if (var3.scrollY < 0) { - var3.scrollY = 0; - } - - GrandExchangeOfferAgeComparator.invalidateWidget(var3); - return 1; - } else if (var0 == ScriptOpcodes.CC_SETCOLOUR) { - var3.color = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - GrandExchangeOfferAgeComparator.invalidateWidget(var3); - return 1; - } else if (var0 == ScriptOpcodes.CC_SETFILL) { - var3.fill = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - GrandExchangeOfferAgeComparator.invalidateWidget(var3); - return 1; - } else if (var0 == ScriptOpcodes.CC_SETTRANS) { - var3.transparencyTop = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - GrandExchangeOfferAgeComparator.invalidateWidget(var3); - return 1; - } else if (var0 == ScriptOpcodes.CC_SETLINEWID) { - var3.lineWid = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - GrandExchangeOfferAgeComparator.invalidateWidget(var3); - return 1; - } else if (var0 == ScriptOpcodes.CC_SETGRAPHIC) { - var3.spriteId2 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - GrandExchangeOfferAgeComparator.invalidateWidget(var3); - return 1; - } else if (var0 == ScriptOpcodes.CC_SET2DANGLE) { - var3.spriteAngle = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - GrandExchangeOfferAgeComparator.invalidateWidget(var3); - return 1; - } else if (var0 == ScriptOpcodes.CC_SETTILING) { - var3.spriteTiling = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - GrandExchangeOfferAgeComparator.invalidateWidget(var3); - return 1; - } else if (var0 == ScriptOpcodes.CC_SETMODEL) { - var3.modelType = 1; - var3.modelId = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - GrandExchangeOfferAgeComparator.invalidateWidget(var3); - return 1; - } else if (var0 == ScriptOpcodes.CC_SETMODELANGLE) { - Interpreter.Interpreter_intStackSize -= 6; - var3.modelOffsetX = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var3.modelOffsetY = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - var3.modelAngleX = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 2]; - var3.modelAngleY = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 3]; - var3.modelAngleZ = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 4]; - var3.modelZoom = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 5]; - GrandExchangeOfferAgeComparator.invalidateWidget(var3); - return 1; - } else { - int var8; - if (var0 == ScriptOpcodes.CC_SETMODELANIM) { - var8 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - if (var8 != var3.sequenceId) { - var3.sequenceId = var8; - var3.modelFrame = 0; - var3.modelFrameCycle = 0; - GrandExchangeOfferAgeComparator.invalidateWidget(var3); - } - - return 1; - } else if (var0 == ScriptOpcodes.CC_SETMODELORTHOG) { - var3.modelOrthog = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - GrandExchangeOfferAgeComparator.invalidateWidget(var3); - return 1; - } else if (var0 == ScriptOpcodes.CC_SETTEXT) { - String var7 = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]; - if (!var7.equals(var3.text)) { - var3.text = var7; - GrandExchangeOfferAgeComparator.invalidateWidget(var3); - } - - return 1; - } else if (var0 == ScriptOpcodes.CC_SETTEXTFONT) { - var3.fontId = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - GrandExchangeOfferAgeComparator.invalidateWidget(var3); - return 1; - } else if (var0 == ScriptOpcodes.CC_SETTEXTALIGN) { - Interpreter.Interpreter_intStackSize -= 3; - var3.textXAlignment = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var3.textYAlignment = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - var3.textLineHeight = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 2]; - GrandExchangeOfferAgeComparator.invalidateWidget(var3); - return 1; - } else if (var0 == ScriptOpcodes.CC_SETTEXTSHADOW) { - var3.textShadowed = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - GrandExchangeOfferAgeComparator.invalidateWidget(var3); - return 1; - } else if (var0 == ScriptOpcodes.CC_SETOUTLINE) { - var3.outline = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - GrandExchangeOfferAgeComparator.invalidateWidget(var3); - return 1; - } else if (var0 == ScriptOpcodes.CC_SETGRAPHICSHADOW) { - var3.spriteShadow = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - GrandExchangeOfferAgeComparator.invalidateWidget(var3); - return 1; - } else if (var0 == ScriptOpcodes.CC_SETVFLIP) { - var3.spriteFlipV = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - GrandExchangeOfferAgeComparator.invalidateWidget(var3); - return 1; - } else if (var0 == ScriptOpcodes.CC_SETHFLIP) { - var3.spriteFlipH = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - GrandExchangeOfferAgeComparator.invalidateWidget(var3); - return 1; - } else if (var0 == ScriptOpcodes.CC_SETSCROLLSIZE) { - Interpreter.Interpreter_intStackSize -= 2; - var3.scrollWidth = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var3.scrollHeight = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - GrandExchangeOfferAgeComparator.invalidateWidget(var3); - if (var4 != -1 && var3.type == 0) { - class43.revalidateWidgetScroll(Widget.Widget_interfaceComponents[var4 >> 16], var3, false); - } - - return 1; - } else if (var0 == ScriptOpcodes.CC_RESUME_PAUSEBUTTON) { - Tiles.resumePauseWidget(var3.id, var3.childIndex); - Client.meslayerContinueWidget = var3; - GrandExchangeOfferAgeComparator.invalidateWidget(var3); - return 1; - } else if (var0 == 1122) { - var3.spriteId = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - GrandExchangeOfferAgeComparator.invalidateWidget(var3); - return 1; - } else if (var0 == ScriptOpcodes.CC_SETFILLCOLOUR) { - var3.color2 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - GrandExchangeOfferAgeComparator.invalidateWidget(var3); - return 1; - } else if (var0 == 1124) { - var3.transparencyBot = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - GrandExchangeOfferAgeComparator.invalidateWidget(var3); - return 1; - } else if (var0 == ScriptOpcodes.CC_SETFILLMODE) { - var8 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - FillMode var6 = (FillMode)WorldMapIcon_1.findEnumerated(class188.FillMode_values(), var8); - if (var6 != null) { - var3.fillMode = var6; - GrandExchangeOfferAgeComparator.invalidateWidget(var3); - } - - return 1; - } else { - boolean var5; - if (var0 == ScriptOpcodes.CC_SETLINEDIRECTION) { - var5 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - var3.field2641 = var5; - return 1; - } else if (var0 == ScriptOpcodes.CC_SETMODELTRANSPARENT) { - var5 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - var3.modelTransparency = var5; - return 1; - } else { - return 2; - } - } - } + public static void method3665(AbstractArchive var0) { + VarbitDefinition.VarbitDefinition_archive = var0; } @ObfuscatedName("h") @ObfuscatedSignature( - signature = "(ILcj;ZB)I", - garbageValue = "-67" + signature = "(Lhf;IB)Llm;", + garbageValue = "-1" ) - static int method3773(int var0, Script var1, boolean var2) { - Widget var3 = var2 ? class96.field1301 : ReflectionCheck.field1310; - if (var0 == ScriptOpcodes.CC_GETX) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.x; - return 1; - } else if (var0 == ScriptOpcodes.CC_GETY) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.y; - return 1; - } else if (var0 == ScriptOpcodes.CC_GETWIDTH) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.width; - return 1; - } else if (var0 == ScriptOpcodes.CC_GETHEIGHT) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.height; - return 1; - } else if (var0 == ScriptOpcodes.CC_GETHIDE) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.isHidden ? 1 : 0; - return 1; - } else if (var0 == ScriptOpcodes.CC_GETLAYER) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.parentId; - return 1; + public static IndexedSprite method3669(AbstractArchive var0, int var1) { + byte[] var3 = var0.takeFileFlat(var1); + boolean var2; + if (var3 == null) { + var2 = false; } else { - return 2; + Buffer.SpriteBuffer_decode(var3); + var2 = true; } + + return !var2 ? null : GrandExchangeOfferAgeComparator.method172(); } - @ObfuscatedName("fd") + @ObfuscatedName("ka") @ObfuscatedSignature( - signature = "(IIII)V", - garbageValue = "-188592863" + signature = "(IIIILln;Lhn;I)V", + garbageValue = "1250322878" ) - @Export("queueSoundEffect") - static void queueSoundEffect(int var0, int var1, int var2) { - if (Client.soundEffectVolume != 0 && var1 != 0 && Client.soundEffectCount < 50) { - Client.soundEffectIds[Client.soundEffectCount] = var0; - Client.queuedSoundEffectLoops[Client.soundEffectCount] = var1; - Client.queuedSoundEffectDelays[Client.soundEffectCount] = var2; - Client.soundEffects[Client.soundEffectCount] = null; - Client.soundLocations[Client.soundEffectCount] = 0; - ++Client.soundEffectCount; - } + @Export("drawSpriteOnMinimap") + static final void drawSpriteOnMinimap(int var0, int var1, int var2, int var3, Sprite var4, SpriteMask var5) { + if (var4 != null) { + int var6 = Client.camAngleY & 2047; + int var7 = var3 * var3 + var2 * var2; + if (var7 <= 6400) { + int var8 = Rasterizer3D.Rasterizer3D_sine[var6]; + int var9 = Rasterizer3D.Rasterizer3D_cosine[var6]; + int var10 = var3 * var8 + var9 * var2 >> 16; + int var11 = var3 * var9 - var8 * var2 >> 16; + if (var7 > 2500) { + var4.method6223(var10 + var5.width / 2 - var4.width / 2, var5.height / 2 - var11 - var4.height / 2, var0, var1, var5.width, var5.height, var5.xStarts, var5.xWidths); + } else { + var4.drawTransBgAt(var0 + var10 + var5.width / 2 - var4.width / 2, var5.height / 2 + var1 - var11 - var4.height / 2); + } + } + } } } diff --git a/runescape-client/src/main/java/class186.java b/runescape-client/src/main/java/class186.java index 344fdbde57..c10fda1632 100644 --- a/runescape-client/src/main/java/class186.java +++ b/runescape-client/src/main/java/class186.java @@ -1,24 +1,11 @@ import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("gu") +@ObfuscatedName("gs") public class class186 { - @ObfuscatedName("lo") + @ObfuscatedName("ab") @ObfuscatedSignature( - signature = "(Ljava/lang/String;B)Ljava/lang/String;", - garbageValue = "-37" + signature = "Llw;" ) - static String method3776(String var0) { - PlayerType[] var1 = class51.PlayerType_values(); - - for (int var2 = 0; var2 < var1.length; ++var2) { - PlayerType var3 = var1[var2]; - if (var3.modIcon != -1 && var0.startsWith(GrandExchangeEvent.method122(var3.modIcon))) { - var0 = var0.substring(6 + Integer.toString(var3.modIcon).length()); - break; - } - } - - return var0; - } + static Bounds field2342; } diff --git a/runescape-client/src/main/java/class188.java b/runescape-client/src/main/java/class188.java index a8f92e4ef0..2d48016ab2 100644 --- a/runescape-client/src/main/java/class188.java +++ b/runescape-client/src/main/java/class188.java @@ -1,44 +1,43 @@ -import net.runelite.mapping.Export; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("gn") +@ObfuscatedName("gh") public class class188 { - @ObfuscatedName("a") - static int[] field2313; - @ObfuscatedName("h") + @ObfuscatedName("u") + static int[] field2353; + @ObfuscatedName("o") @ObfuscatedSignature( - signature = "Lcc;" + signature = "Lhl;" ) - @Export("pcmPlayerProvider") - static class99 pcmPlayerProvider; + static Widget field2352; static { new Object(); - field2313 = new int[33]; - field2313[0] = 0; + field2353 = new int[33]; + field2353[0] = 0; int var0 = 2; for (int var1 = 1; var1 < 33; ++var1) { - field2313[var1] = var0 - 1; + field2353[var1] = var0 - 1; var0 += var0; } } - @ObfuscatedName("a") + @ObfuscatedName("w") @ObfuscatedSignature( - signature = "(B)[Llt;", - garbageValue = "80" + signature = "(III)I", + garbageValue = "470925087" ) - @Export("FillMode_values") - public static FillMode[] FillMode_values() { - return new FillMode[]{FillMode.SOLID, FillMode.field3849, FillMode.field3847}; - } + static final int method3692(int var0, int var1) { + int var2 = RouteStrategy.method3640(45365 + var0, 91923 + var1, 4) - 128 + (RouteStrategy.method3640(var0 + 10294, var1 + 37821, 2) - 128 >> 1) + (RouteStrategy.method3640(var0, var1, 1) - 128 >> 2); + var2 = (int)(0.3D * (double)var2) + 35; + if (var2 < 10) { + var2 = 10; + } else if (var2 > 60) { + var2 = 60; + } - @ObfuscatedName("t") - static boolean method3793(long var0) { - int var2 = (int)(var0 >>> 14 & 3L); - return var2 == 2; + return var2; } } diff --git a/runescape-client/src/main/java/class189.java b/runescape-client/src/main/java/class189.java index e6be48fefd..2f42dcacd2 100644 --- a/runescape-client/src/main/java/class189.java +++ b/runescape-client/src/main/java/class189.java @@ -1,1278 +1,155 @@ -import java.awt.Toolkit; -import java.awt.datatransfer.Clipboard; -import java.awt.datatransfer.DataFlavor; -import java.awt.datatransfer.Transferable; -import java.awt.datatransfer.UnsupportedFlavorException; -import java.io.IOException; -import net.runelite.mapping.Export; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("gf") +@ObfuscatedName("gb") public class class189 { - @ObfuscatedName("c") + @ObfuscatedName("x") @ObfuscatedGetter( - intValue = 2129560759 + intValue = 14888665 ) - @Export("musicTrackGroupId") - public static int musicTrackGroupId; - @ObfuscatedName("j") - @ObfuscatedGetter( - intValue = -552919085 - ) - @Export("cacheGamebuild") - static int cacheGamebuild; + static int field2355; - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(Lbg;I)V", - garbageValue = "-1848275879" + signature = "(II)Z", + garbageValue = "-557441008" ) - @Export("doCycleTitle") - static void doCycleTitle(GameShell var0) { - int var4; - if (Login.worldSelectOpen) { - while (true) { - if (!class237.isKeyDown()) { - if (MouseHandler.MouseHandler_lastButton != 1 && (WorldMapLabelSize.mouseCam || MouseHandler.MouseHandler_lastButton != 4)) { - break; - } - - int var1 = Login.xPadding + 280; - if (MouseHandler.MouseHandler_lastPressedX >= var1 && MouseHandler.MouseHandler_lastPressedX <= var1 + 14 && MouseHandler.MouseHandler_lastPressedY >= 4 && MouseHandler.MouseHandler_lastPressedY <= 18) { - UrlRequester.changeWorldSelectSorting(0, 0); - break; - } - - if (MouseHandler.MouseHandler_lastPressedX >= var1 + 15 && MouseHandler.MouseHandler_lastPressedX <= var1 + 80 && MouseHandler.MouseHandler_lastPressedY >= 4 && MouseHandler.MouseHandler_lastPressedY <= 18) { - UrlRequester.changeWorldSelectSorting(0, 1); - break; - } - - int var2 = Login.xPadding + 390; - if (MouseHandler.MouseHandler_lastPressedX >= var2 && MouseHandler.MouseHandler_lastPressedX <= var2 + 14 && MouseHandler.MouseHandler_lastPressedY >= 4 && MouseHandler.MouseHandler_lastPressedY <= 18) { - UrlRequester.changeWorldSelectSorting(1, 0); - break; - } - - if (MouseHandler.MouseHandler_lastPressedX >= var2 + 15 && MouseHandler.MouseHandler_lastPressedX <= var2 + 80 && MouseHandler.MouseHandler_lastPressedY >= 4 && MouseHandler.MouseHandler_lastPressedY <= 18) { - UrlRequester.changeWorldSelectSorting(1, 1); - break; - } - - int var25 = Login.xPadding + 500; - if (MouseHandler.MouseHandler_lastPressedX >= var25 && MouseHandler.MouseHandler_lastPressedX <= var25 + 14 && MouseHandler.MouseHandler_lastPressedY >= 4 && MouseHandler.MouseHandler_lastPressedY <= 18) { - UrlRequester.changeWorldSelectSorting(2, 0); - break; - } - - if (MouseHandler.MouseHandler_lastPressedX >= var25 + 15 && MouseHandler.MouseHandler_lastPressedX <= var25 + 80 && MouseHandler.MouseHandler_lastPressedY >= 4 && MouseHandler.MouseHandler_lastPressedY <= 18) { - UrlRequester.changeWorldSelectSorting(2, 1); - break; - } - - var4 = Login.xPadding + 610; - if (MouseHandler.MouseHandler_lastPressedX >= var4 && MouseHandler.MouseHandler_lastPressedX <= var4 + 14 && MouseHandler.MouseHandler_lastPressedY >= 4 && MouseHandler.MouseHandler_lastPressedY <= 18) { - UrlRequester.changeWorldSelectSorting(3, 0); - break; - } - - if (MouseHandler.MouseHandler_lastPressedX >= var4 + 15 && MouseHandler.MouseHandler_lastPressedX <= var4 + 80 && MouseHandler.MouseHandler_lastPressedY >= 4 && MouseHandler.MouseHandler_lastPressedY <= 18) { - UrlRequester.changeWorldSelectSorting(3, 1); - break; - } - - if (MouseHandler.MouseHandler_lastPressedX >= Login.xPadding + 708 && MouseHandler.MouseHandler_lastPressedY >= 4 && MouseHandler.MouseHandler_lastPressedX <= Login.xPadding + 708 + 50 && MouseHandler.MouseHandler_lastPressedY <= 20) { - Login.worldSelectOpen = false; - Login.leftTitleSprite.drawAt(Login.xPadding, 0); - FontName.rightTitleSprite.drawAt(Login.xPadding + 382, 0); - Tiles.logoSprite.drawAt(Login.xPadding + 382 - Tiles.logoSprite.subWidth / 2, 18); - break; - } - - if (Login.hoveredWorldIndex != -1) { - World var5 = Username.World_worlds[Login.hoveredWorldIndex]; - MouseRecorder.changeWorld(var5); - Login.worldSelectOpen = false; - Login.leftTitleSprite.drawAt(Login.xPadding, 0); - FontName.rightTitleSprite.drawAt(Login.xPadding + 382, 0); - Tiles.logoSprite.drawAt(Login.xPadding + 382 - Tiles.logoSprite.subWidth / 2, 18); - } else { - if (Login.worldSelectPage > 0 && class288.worldSelectLeftSprite != null && MouseHandler.MouseHandler_lastPressedX >= 0 && MouseHandler.MouseHandler_lastPressedX <= class288.worldSelectLeftSprite.subWidth && MouseHandler.MouseHandler_lastPressedY >= FloorUnderlayDefinition.canvasHeight / 2 - 50 && MouseHandler.MouseHandler_lastPressedY <= FloorUnderlayDefinition.canvasHeight / 2 + 50) { - --Login.worldSelectPage; - } - - if (Login.worldSelectPage < Login.worldSelectPagesCount && WorldMapSection2.worldSelectRightSprite != null && MouseHandler.MouseHandler_lastPressedX >= class286.canvasWidth - WorldMapSection2.worldSelectRightSprite.subWidth - 5 && MouseHandler.MouseHandler_lastPressedX <= class286.canvasWidth && MouseHandler.MouseHandler_lastPressedY >= FloorUnderlayDefinition.canvasHeight / 2 - 50 && MouseHandler.MouseHandler_lastPressedY <= FloorUnderlayDefinition.canvasHeight / 2 + 50) { - ++Login.worldSelectPage; - } - } - break; - } - - if (WorldMapLabel.field229 == 13) { - Login.worldSelectOpen = false; - Login.leftTitleSprite.drawAt(Login.xPadding, 0); - FontName.rightTitleSprite.drawAt(Login.xPadding + 382, 0); - Tiles.logoSprite.drawAt(Login.xPadding + 382 - Tiles.logoSprite.subWidth / 2, 18); - break; - } - - if (WorldMapLabel.field229 == 96) { - if (Login.worldSelectPage > 0 && class288.worldSelectLeftSprite != null) { - --Login.worldSelectPage; - } - } else if (WorldMapLabel.field229 == 97 && Login.worldSelectPage < Login.worldSelectPagesCount && WorldMapSection2.worldSelectRightSprite != null) { - ++Login.worldSelectPage; - } - } - - } else { - if ((MouseHandler.MouseHandler_lastButton == 1 || !WorldMapLabelSize.mouseCam && MouseHandler.MouseHandler_lastButton == 4) && MouseHandler.MouseHandler_lastPressedX >= Login.xPadding + 765 - 50 && MouseHandler.MouseHandler_lastPressedY >= 453) { - ScriptEvent.clientPreferences.titleMusicDisabled = !ScriptEvent.clientPreferences.titleMusicDisabled; - HitSplatDefinition.savePreferences(); - if (!ScriptEvent.clientPreferences.titleMusicDisabled) { - WorldMapRectangle.method330(class216.archive6, "scape main", "", 255, false); - } else { - ReflectionCheck.method2438(); - } - } - - if (Client.gameState != 5) { - if (Login.field1185 == -1L) { - Login.field1185 = PlayerAppearance.currentTimeMillis() + 1000L; - } - - long var16 = PlayerAppearance.currentTimeMillis(); - boolean var3; - if (Client.archiveLoaders != null && Client.archiveLoadersDone < Client.archiveLoaders.size()) { - while (true) { - if (Client.archiveLoadersDone >= Client.archiveLoaders.size()) { - var3 = true; - break; - } - - ArchiveLoader var18 = (ArchiveLoader)Client.archiveLoaders.get(Client.archiveLoadersDone); - if (!var18.isLoaded()) { - var3 = false; - break; - } - - ++Client.archiveLoadersDone; - } - } else { - var3 = true; - } - - if (var3 && Login.field1186 == -1L) { - Login.field1186 = var16; - if (Login.field1186 > Login.field1185) { - Login.field1185 = Login.field1186; - } - } - - if (Client.gameState == 10 || Client.gameState == 11) { - if (WorldMapSection1.clientLanguage == Language.Language_EN) { - if (MouseHandler.MouseHandler_lastButton == 1 || !WorldMapLabelSize.mouseCam && MouseHandler.MouseHandler_lastButton == 4) { - var4 = Login.xPadding + 5; - short var19 = 463; - byte var6 = 100; - byte var7 = 35; - if (MouseHandler.MouseHandler_lastPressedX >= var4 && MouseHandler.MouseHandler_lastPressedX <= var6 + var4 && MouseHandler.MouseHandler_lastPressedY >= var19 && MouseHandler.MouseHandler_lastPressedY <= var19 + var7) { - AttackOption.method2215(); - return; - } - } - - if (class96.World_request != null) { - AttackOption.method2215(); - } - } - - var4 = MouseHandler.MouseHandler_lastButton; - int var32 = MouseHandler.MouseHandler_lastPressedX; - int var26 = MouseHandler.MouseHandler_lastPressedY; - if (var4 == 0) { - var32 = MouseHandler.MouseHandler_x; - var26 = MouseHandler.MouseHandler_y; - } - - if (!WorldMapLabelSize.mouseCam && var4 == 4) { - var4 = 1; - } - - short var29; - int var30; - if (Login.loginIndex == 0) { - boolean var31 = false; - - while (class237.isKeyDown()) { - if (WorldMapLabel.field229 == 84) { - var31 = true; - } - } - - var30 = class192.loginBoxCenter - 80; - var29 = 291; - if (var4 == 1 && var32 >= var30 - 75 && var32 <= var30 + 75 && var26 >= var29 - 20 && var26 <= var29 + 20) { - class2.openURL(WorldMapElement.method4547("secure", true) + "m=account-creation/g=oldscape/create_account_funnel.ws", true, false); - } - - var30 = class192.loginBoxCenter + 80; - if (var4 == 1 && var32 >= var30 - 75 && var32 <= var30 + 75 && var26 >= var29 - 20 && var26 <= var29 + 20 || var31) { - if ((Client.worldProperties & 33554432) != 0) { - Login.Login_response0 = ""; - Login.Login_response1 = "This is a Beta world."; - Login.Login_response2 = "Your normal account will not be affected."; - Login.Login_response3 = ""; - Login.loginIndex = 1; - if (Client.Login_isUsernameRemembered && Login.Login_username != null && Login.Login_username.length() > 0) { - Login.currentLoginField = 1; - } else { - Login.currentLoginField = 0; - } - } else if ((Client.worldProperties & 4) != 0) { - if ((Client.worldProperties & 1024) != 0) { - Login.Login_response1 = "This is a High Risk PvP world."; - Login.Login_response2 = "Players can attack each other almost everywhere"; - Login.Login_response3 = "and the Protect Item prayer won't work."; - } else { - Login.Login_response1 = "This is a PvP world."; - Login.Login_response2 = "Players can attack each other"; - Login.Login_response3 = "almost everywhere."; - } - - Login.Login_response0 = "Warning!"; - Login.loginIndex = 1; - if (Client.Login_isUsernameRemembered && Login.Login_username != null && Login.Login_username.length() > 0) { - Login.currentLoginField = 1; - } else { - Login.currentLoginField = 0; - } - } else if ((Client.worldProperties & 1024) != 0) { - Login.Login_response1 = "This is a High Risk world."; - Login.Login_response2 = "The Protect Item prayer will"; - Login.Login_response3 = "not work on this world."; - Login.Login_response0 = "Warning!"; - Login.loginIndex = 1; - if (Client.Login_isUsernameRemembered && Login.Login_username != null && Login.Login_username.length() > 0) { - Login.currentLoginField = 1; - } else { - Login.currentLoginField = 0; - } - } else { - UserComparator3.Login_promptCredentials(false); - } - } - } else { - short var8; - int var27; - if (Login.loginIndex == 1) { - while (true) { - if (!class237.isKeyDown()) { - var27 = class192.loginBoxCenter - 80; - var8 = 321; - if (var4 == 1 && var32 >= var27 - 75 && var32 <= var27 + 75 && var26 >= var8 - 20 && var26 <= var8 + 20) { - UserComparator3.Login_promptCredentials(false); - } - - var27 = class192.loginBoxCenter + 80; - if (var4 == 1 && var32 >= var27 - 75 && var32 <= var27 + 75 && var26 >= var8 - 20 && var26 <= var8 + 20) { - Login.loginIndex = 0; - } - break; - } - - if (WorldMapLabel.field229 == 84) { - UserComparator3.Login_promptCredentials(false); - } else if (WorldMapLabel.field229 == 13) { - Login.loginIndex = 0; - } - } - } else { - short var28; - if (Login.loginIndex == 2) { - var28 = 201; - var27 = var28 + 52; - if (var4 == 1 && var26 >= var27 - 12 && var26 < var27 + 2) { - Login.currentLoginField = 0; - } - - var27 += 15; - if (var4 == 1 && var26 >= var27 - 12 && var26 < var27 + 2) { - Login.currentLoginField = 1; - } - - var27 += 15; - var28 = 361; - if (WorldMapLabel.field225 != null) { - var30 = WorldMapLabel.field225.highX / 2; - if (var4 == 1 && var32 >= WorldMapLabel.field225.lowX - var30 && var32 <= var30 + WorldMapLabel.field225.lowX && var26 >= var28 - 15 && var26 < var28) { - switch(Login.field1166) { - case 1: - GrandExchangeOffer.setLoginResponseString("Please enter your username.", "If you created your account after November", "2010, this will be the creation email address."); - Login.loginIndex = 5; - return; - case 2: - class2.openURL("https://support.runescape.com/hc/en-gb", true, false); - } - } - } - - var30 = class192.loginBoxCenter - 80; - var29 = 321; - if (var4 == 1 && var32 >= var30 - 75 && var32 <= var30 + 75 && var26 >= var29 - 20 && var26 <= var29 + 20) { - Login.Login_username = Login.Login_username.trim(); - if (Login.Login_username.length() == 0) { - GrandExchangeOffer.setLoginResponseString("", "Please enter your username/email address.", ""); - return; - } - - if (Login.Login_password.length() == 0) { - GrandExchangeOffer.setLoginResponseString("", "Please enter your password.", ""); - return; - } - - GrandExchangeOffer.setLoginResponseString("", "Connecting to server...", ""); - WorldMapLabelSize.method235(false); - Tile.updateGameState(20); - return; - } - - var30 = Login.loginBoxX + 180 + 80; - if (var4 == 1 && var32 >= var30 - 75 && var32 <= var30 + 75 && var26 >= var29 - 20 && var26 <= var29 + 20) { - Login.loginIndex = 0; - Login.Login_username = ""; - Login.Login_password = ""; - Huffman.field2491 = 0; - class268.otp = ""; - Login.field1177 = true; - } - - var30 = class192.loginBoxCenter + -117; - var29 = 277; - Login.field1159 = var32 >= var30 && var32 < var30 + Login.field1174 && var26 >= var29 && var26 < var29 + Language.field2328; - if (var4 == 1 && Login.field1159) { - Client.Login_isUsernameRemembered = !Client.Login_isUsernameRemembered; - if (!Client.Login_isUsernameRemembered && ScriptEvent.clientPreferences.rememberedUsername != null) { - ScriptEvent.clientPreferences.rememberedUsername = null; - HitSplatDefinition.savePreferences(); - } - } - - var30 = class192.loginBoxCenter + 24; - var29 = 277; - Login.field1175 = var32 >= var30 && var32 < var30 + Login.field1174 && var26 >= var29 && var26 < var29 + Language.field2328; - if (var4 == 1 && Login.field1175) { - ScriptEvent.clientPreferences.hideUsername = !ScriptEvent.clientPreferences.hideUsername; - if (!ScriptEvent.clientPreferences.hideUsername) { - Login.Login_username = ""; - ScriptEvent.clientPreferences.rememberedUsername = null; - if (Client.Login_isUsernameRemembered && Login.Login_username != null && Login.Login_username.length() > 0) { - Login.currentLoginField = 1; - } else { - Login.currentLoginField = 0; - } - } - - HitSplatDefinition.savePreferences(); - } - - while (true) { - Transferable var11; - int var12; - do { - while (true) { - label1121: - do { - while (true) { - while (class237.isKeyDown()) { - if (WorldMapLabel.field229 != 13) { - if (Login.currentLoginField != 0) { - continue label1121; - } - - WorldMapAreaData.method755(DevicePcmPlayerProvider.field395); - if (WorldMapLabel.field229 == 85 && Login.Login_username.length() > 0) { - Login.Login_username = Login.Login_username.substring(0, Login.Login_username.length() - 1); - } - - if (WorldMapLabel.field229 == 84 || WorldMapLabel.field229 == 80) { - Login.currentLoginField = 1; - } - - if (AbstractWorldMapIcon.method679(DevicePcmPlayerProvider.field395) && Login.Login_username.length() < 320) { - Login.Login_username = Login.Login_username + DevicePcmPlayerProvider.field395; - } - } else { - Login.loginIndex = 0; - Login.Login_username = ""; - Login.Login_password = ""; - Huffman.field2491 = 0; - class268.otp = ""; - Login.field1177 = true; - } - } - - return; - } - } while(Login.currentLoginField != 1); - - if (WorldMapLabel.field229 == 85 && Login.Login_password.length() > 0) { - Login.Login_password = Login.Login_password.substring(0, Login.Login_password.length() - 1); - } else if (WorldMapLabel.field229 == 84 || WorldMapLabel.field229 == 80) { - Login.currentLoginField = 0; - if (WorldMapLabel.field229 == 84) { - Login.Login_username = Login.Login_username.trim(); - if (Login.Login_username.length() == 0) { - GrandExchangeOffer.setLoginResponseString("", "Please enter your username/email address.", ""); - return; - } - - if (Login.Login_password.length() == 0) { - GrandExchangeOffer.setLoginResponseString("", "Please enter your password.", ""); - return; - } - - GrandExchangeOffer.setLoginResponseString("", "Connecting to server...", ""); - WorldMapLabelSize.method235(false); - Tile.updateGameState(20); - return; - } - } - - if ((KeyHandler.KeyHandler_pressedKeys[82] || KeyHandler.KeyHandler_pressedKeys[87]) && WorldMapLabel.field229 == 67) { - Clipboard var10 = Toolkit.getDefaultToolkit().getSystemClipboard(); - var11 = var10.getContents(WorldMapID.client); - var12 = 20 - Login.Login_password.length(); - break; - } - - if (PcmPlayer.method2639(DevicePcmPlayerProvider.field395) && AbstractWorldMapIcon.method679(DevicePcmPlayerProvider.field395) && Login.Login_password.length() < 20) { - Login.Login_password = Login.Login_password + DevicePcmPlayerProvider.field395; - } - } - } while(var12 <= 0); - - try { - String var13 = (String)var11.getTransferData(DataFlavor.stringFlavor); - int var14 = Math.min(var12, var13.length()); - - for (int var15 = 0; var15 < var14; ++var15) { - if (!PcmPlayer.method2639(var13.charAt(var15)) || !AbstractWorldMapIcon.method679(var13.charAt(var15))) { - Login.loginIndex = 3; - return; - } - } - - Login.Login_password = Login.Login_password + var13.substring(0, var14); - } catch (UnsupportedFlavorException var23) { - } catch (IOException var24) { - } - } - } else if (Login.loginIndex == 3) { - var27 = Login.loginBoxX + 180; - var8 = 276; - if (var4 == 1 && var32 >= var27 - 75 && var32 <= var27 + 75 && var26 >= var8 - 20 && var26 <= var8 + 20) { - UserComparator3.Login_promptCredentials(false); - } - - var27 = Login.loginBoxX + 180; - var8 = 326; - if (var4 == 1 && var32 >= var27 - 75 && var32 <= var27 + 75 && var26 >= var8 - 20 && var26 <= var8 + 20) { - GrandExchangeOffer.setLoginResponseString("Please enter your username.", "If you created your account after November", "2010, this will be the creation email address."); - Login.loginIndex = 5; - return; - } - } else { - int var20; - if (Login.loginIndex == 4) { - var27 = Login.loginBoxX + 180 - 80; - var8 = 321; - if (var4 == 1 && var32 >= var27 - 75 && var32 <= var27 + 75 && var26 >= var8 - 20 && var26 <= var8 + 20) { - class268.otp.trim(); - if (class268.otp.length() != 6) { - GrandExchangeOffer.setLoginResponseString("", "Please enter a 6-digit PIN.", ""); - return; - } - - Huffman.field2491 = Integer.parseInt(class268.otp); - class268.otp = ""; - WorldMapLabelSize.method235(true); - GrandExchangeOffer.setLoginResponseString("", "Connecting to server...", ""); - Tile.updateGameState(20); - return; - } - - if (var4 == 1 && var32 >= Login.loginBoxX + 180 - 9 && var32 <= Login.loginBoxX + 180 + 130 && var26 >= 263 && var26 <= 296) { - Login.field1177 = !Login.field1177; - } - - if (var4 == 1 && var32 >= Login.loginBoxX + 180 - 34 && var32 <= Login.loginBoxX + 34 + 180 && var26 >= 351 && var26 <= 363) { - class2.openURL(WorldMapElement.method4547("secure", true) + "m=totp-authenticator/disableTOTPRequest", true, false); - } - - var27 = Login.loginBoxX + 180 + 80; - if (var4 == 1 && var32 >= var27 - 75 && var32 <= var27 + 75 && var26 >= var8 - 20 && var26 <= var8 + 20) { - Login.loginIndex = 0; - Login.Login_username = ""; - Login.Login_password = ""; - Huffman.field2491 = 0; - class268.otp = ""; - } - - while (class237.isKeyDown()) { - boolean var9 = false; - - for (var20 = 0; var20 < "1234567890".length(); ++var20) { - if (DevicePcmPlayerProvider.field395 == "1234567890".charAt(var20)) { - var9 = true; - break; - } - } - - if (WorldMapLabel.field229 == 13) { - Login.loginIndex = 0; - Login.Login_username = ""; - Login.Login_password = ""; - Huffman.field2491 = 0; - class268.otp = ""; - } else { - if (WorldMapLabel.field229 == 85 && class268.otp.length() > 0) { - class268.otp = class268.otp.substring(0, class268.otp.length() - 1); - } - - if (WorldMapLabel.field229 == 84) { - class268.otp.trim(); - if (class268.otp.length() != 6) { - GrandExchangeOffer.setLoginResponseString("", "Please enter a 6-digit PIN.", ""); - return; - } - - Huffman.field2491 = Integer.parseInt(class268.otp); - class268.otp = ""; - WorldMapLabelSize.method235(true); - GrandExchangeOffer.setLoginResponseString("", "Connecting to server...", ""); - Tile.updateGameState(20); - return; - } - - if (var9 && class268.otp.length() < 6) { - class268.otp = class268.otp + DevicePcmPlayerProvider.field395; - } - } - } - } else if (Login.loginIndex == 5) { - var27 = Login.loginBoxX + 180 - 80; - var8 = 321; - if (var4 == 1 && var32 >= var27 - 75 && var32 <= var27 + 75 && var26 >= var8 - 20 && var26 <= var8 + 20) { - ClientPacket.method3764(); - return; - } - - var27 = Login.loginBoxX + 180 + 80; - if (var4 == 1 && var32 >= var27 - 75 && var32 <= var27 + 75 && var26 >= var8 - 20 && var26 <= var8 + 20) { - UserComparator3.Login_promptCredentials(true); - } - - var29 = 361; - if (WorldMapManager.field319 != null) { - var20 = WorldMapManager.field319.highX / 2; - if (var4 == 1 && var32 >= WorldMapManager.field319.lowX - var20 && var32 <= var20 + WorldMapManager.field319.lowX && var26 >= var29 - 15 && var26 < var29) { - class2.openURL(WorldMapElement.method4547("secure", true) + "m=weblogin/g=oldscape/cant_log_in", true, false); - } - } - - while (class237.isKeyDown()) { - boolean var33 = false; - - for (int var21 = 0; var21 < "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!\"£$%^&*()-_=+[{]};:'@#~,<.>/?\\| ".length(); ++var21) { - if (DevicePcmPlayerProvider.field395 == "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!\"£$%^&*()-_=+[{]};:'@#~,<.>/?\\| ".charAt(var21)) { - var33 = true; - break; - } - } - - if (WorldMapLabel.field229 == 13) { - UserComparator3.Login_promptCredentials(true); - } else { - if (WorldMapLabel.field229 == 85 && Login.Login_username.length() > 0) { - Login.Login_username = Login.Login_username.substring(0, Login.Login_username.length() - 1); - } - - if (WorldMapLabel.field229 == 84) { - ClientPacket.method3764(); - return; - } - - if (var33 && Login.Login_username.length() < 320) { - Login.Login_username = Login.Login_username + DevicePcmPlayerProvider.field395; - } - } - } - } else if (Login.loginIndex != 6) { - if (Login.loginIndex == 7) { - var27 = Login.loginBoxX + 180 - 80; - var8 = 321; - if (var4 == 1 && var32 >= var27 - 75 && var32 <= var27 + 75 && var26 >= var8 - 20 && var26 <= var8 + 20) { - class2.openURL(WorldMapElement.method4547("secure", true) + "m=dob/set_dob.ws", true, false); - GrandExchangeOffer.setLoginResponseString("", "Page has opened in a new window.", "(Please check your popup blocker.)"); - Login.loginIndex = 6; - return; - } - - var27 = Login.loginBoxX + 180 + 80; - if (var4 == 1 && var32 >= var27 - 75 && var32 <= var27 + 75 && var26 >= var8 - 20 && var26 <= var8 + 20) { - UserComparator3.Login_promptCredentials(true); - } - } else if (Login.loginIndex == 8) { - var27 = Login.loginBoxX + 180 - 80; - var8 = 321; - if (var4 == 1 && var32 >= var27 - 75 && var32 <= var27 + 75 && var26 >= var8 - 20 && var26 <= var8 + 20) { - class2.openURL("https://www.jagex.com/terms/privacy/#eight", true, false); - GrandExchangeOffer.setLoginResponseString("", "Page has opened in a new window.", "(Please check your popup blocker.)"); - Login.loginIndex = 6; - return; - } - - var27 = Login.loginBoxX + 180 + 80; - if (var4 == 1 && var32 >= var27 - 75 && var32 <= var27 + 75 && var26 >= var8 - 20 && var26 <= var8 + 20) { - UserComparator3.Login_promptCredentials(true); - } - } else if (Login.loginIndex == 12) { - String var22 = ""; - switch(Login.field1156) { - case 0: - var22 = "https://support.runescape.com/hc/en-gb/articles/115002238729-Account-Bans"; - break; - case 1: - var22 = "https://support.runescape.com/hc/en-gb/articles/206103939-My-account-is-locked"; - break; - default: - UserComparator3.Login_promptCredentials(false); - } - - var30 = Login.loginBoxX + 180; - var29 = 276; - if (var4 == 1 && var32 >= var30 - 75 && var32 <= var30 + 75 && var26 >= var29 - 20 && var26 <= var29 + 20) { - class2.openURL(var22, true, false); - GrandExchangeOffer.setLoginResponseString("", "Page has opened in a new window.", "(Please check your popup blocker.)"); - Login.loginIndex = 6; - return; - } - - var30 = Login.loginBoxX + 180; - var29 = 326; - if (var4 == 1 && var32 >= var30 - 75 && var32 <= var30 + 75 && var26 >= var29 - 20 && var26 <= var29 + 20) { - UserComparator3.Login_promptCredentials(false); - } - } else if (Login.loginIndex == 24) { - var27 = Login.loginBoxX + 180; - var8 = 301; - if (var4 == 1 && var32 >= var27 - 75 && var32 <= var27 + 75 && var26 >= var8 - 20 && var26 <= var8 + 20) { - UserComparator3.Login_promptCredentials(false); - } - } - } else { - while (true) { - do { - if (!class237.isKeyDown()) { - var28 = 321; - if (var4 == 1 && var26 >= var28 - 20 && var26 <= var28 + 20) { - UserComparator3.Login_promptCredentials(true); - } - - return; - } - } while(WorldMapLabel.field229 != 84 && WorldMapLabel.field229 != 13); - - UserComparator3.Login_promptCredentials(true); - } - } - } - } - } - - } - } - } + public static boolean method3699(int var0) { + return (var0 >> 31 & 1) != 0; } - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "(Lkf;ILbj;IB)V", - garbageValue = "-76" + signature = "(ILci;ZI)I", + garbageValue = "-474023245" ) - static final void method3797(PacketBuffer var0, int var1, Player var2, int var3) { - byte var4 = -1; - int var5; - int var8; - int var9; - int var12; - if ((var3 & 128) != 0) { - var5 = var0.method5648(); - PlayerType var6 = (PlayerType)WorldMapIcon_1.findEnumerated(class51.PlayerType_values(), var0.method5639()); - boolean var7 = var0.readUnsignedByte() == 1; - var8 = var0.readUnsignedByte(); - var9 = var0.offset; - if (var2.username != null && var2.appearance != null) { - boolean var10 = false; - if (var6.isUser && PacketWriter.friendSystem.isIgnored(var2.username)) { - var10 = true; - } - - if (!var10 && Client.field745 == 0 && !var2.isHidden) { - Players.field1238.offset = 0; - var0.method5702(Players.field1238.array, 0, var8); - Players.field1238.offset = 0; - String var11 = AbstractFont.escapeBrackets(class222.method4274(class4.method90(Players.field1238))); - var2.overheadText = var11.trim(); - var2.overheadTextColor = var5 >> 8; - var2.overheadTextEffect = var5 & 255; - var2.overheadTextCyclesRemaining = 150; - var2.isAutoChatting = var7; - var2.field939 = var2 != class215.localPlayer && var6.isUser && "" != Client.field849 && var11.toLowerCase().indexOf(Client.field849) == -1; - if (var6.isPrivileged) { - var12 = var7 ? 91 : 1; - } else { - var12 = var7 ? 90 : 2; - } - - if (var6.modIcon != -1) { - class30.addGameMessage(var12, GrandExchangeEvent.method122(var6.modIcon) + var2.username.getName(), var11); - } else { - class30.addGameMessage(var12, var2.username.getName(), var11); - } - } - } - - var0.offset = var9 + var8; - } - - int var13; - if ((var3 & 4) != 0) { - var5 = var0.readUnsignedShort(); - if (var5 == 65535) { - var5 = -1; - } - - var13 = var0.method5697(); - MouseRecorder.performPlayerAnimation(var2, var5, var13); - } - - if ((var3 & 16) != 0) { - var2.overheadText = var0.readStringCp1252NullTerminated(); - if (var2.overheadText.charAt(0) == '~') { - var2.overheadText = var2.overheadText.substring(1); - class30.addGameMessage(2, var2.username.getName(), var2.overheadText); - } else if (var2 == class215.localPlayer) { - class30.addGameMessage(2, var2.username.getName(), var2.overheadText); - } - - var2.isAutoChatting = false; - var2.overheadTextColor = 0; - var2.overheadTextEffect = 0; - var2.overheadTextCyclesRemaining = 150; - } - - if ((var3 & 2048) != 0) { - Players.field1228[var1] = var0.method5640(); - } - - if ((var3 & 32) != 0) { - var2.field934 = var0.method5648(); - if (var2.pathLength == 0) { - var2.orientation = var2.field934; - var2.field934 = -1; - } - } - - if ((var3 & 8) != 0) { - var5 = var0.method5622(); - byte[] var16 = new byte[var5]; - Buffer var14 = new Buffer(var16); - var0.readBytes(var16, 0, var5); - Players.field1229[var1] = var14; - var2.read(var14); - } - - if ((var3 & 256) != 0) { - var2.field966 = var0.method5640(); - var2.field979 = var0.method5640(); - var2.field967 = var0.method5640(); - var2.field969 = var0.method5671(); - var2.field925 = var0.readUnsignedShort() + Client.cycle; - var2.field971 = var0.method5647() + Client.cycle; - var2.field972 = var0.method5648(); - if (var2.field606) { - var2.field966 += var2.tileX; - var2.field979 += var2.tileY; - var2.field967 += var2.tileX; - var2.field969 += var2.tileY; - var2.pathLength = 0; - } else { - var2.field966 += var2.pathX[0]; - var2.field979 += var2.pathY[0]; - var2.field967 += var2.pathX[0]; - var2.field969 += var2.pathY[0]; - var2.pathLength = 1; - } - - var2.field983 = 0; - } - - if ((var3 & 512) != 0) { - var4 = var0.method5671(); - } - - if ((var3 & 64) != 0) { - var2.targetIndex = var0.readUnsignedShort(); - if (var2.targetIndex == 65535) { - var2.targetIndex = -1; - } - } - - if ((var3 & 1024) != 0) { - var2.spotAnimation = var0.method5648(); - var5 = var0.readInt(); - var2.field965 = var5 >> 16; - var2.field973 = (var5 & 65535) + Client.cycle; - var2.spotAnimationFrame = 0; - var2.spotAnimationFrameCycle = 0; - if (var2.field973 > Client.cycle) { - var2.spotAnimationFrame = -1; - } - - if (var2.spotAnimation == 65535) { - var2.spotAnimation = -1; - } - } - - if ((var3 & 1) != 0) { - var5 = var0.readUnsignedByte(); - int var15; - int var17; - int var19; - if (var5 > 0) { - for (var13 = 0; var13 < var5; ++var13) { - var8 = -1; - var9 = -1; - var19 = -1; - var17 = var0.readUShortSmart(); - if (var17 == 32767) { - var17 = var0.readUShortSmart(); - var9 = var0.readUShortSmart(); - var8 = var0.readUShortSmart(); - var19 = var0.readUShortSmart(); - } else if (var17 != 32766) { - var9 = var0.readUShortSmart(); - } else { - var17 = -1; - } - - var15 = var0.readUShortSmart(); - var2.addHitSplat(var17, var9, var8, var19, Client.cycle, var15); - } - } - - var13 = var0.method5697(); - if (var13 > 0) { - for (var17 = 0; var17 < var13; ++var17) { - var8 = var0.readUShortSmart(); - var9 = var0.readUShortSmart(); - if (var9 != 32767) { - var19 = var0.readUShortSmart(); - var15 = var0.method5622(); - var12 = var9 > 0 ? var0.method5697() : var15; - var2.addHealthBar(var8, Client.cycle, var9, var19, var15, var12); - } else { - var2.removeHealthBar(var8); - } - } - } - } - - if ((var3 & 4096) != 0) { - for (var5 = 0; var5 < 3; ++var5) { - var2.actions[var5] = var0.readStringCp1252NullTerminated(); - } - } - - if (var2.field606) { - if (var4 == 127) { - var2.resetPath(var2.tileX, var2.tileY); - } else { - byte var18; - if (var4 != -1) { - var18 = var4; - } else { - var18 = Players.field1228[var1]; - } - - var2.method1334(var2.tileX, var2.tileY, var18); - } - } - - } - - @ObfuscatedName("u") - @ObfuscatedSignature( - signature = "(ILcj;ZI)I", - garbageValue = "1197289797" - ) - static int method3796(int var0, Script var1, boolean var2) { - String var3; - if (var0 == ScriptOpcodes.MES) { - var3 = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]; - class30.addGameMessage(0, "", var3); - return 1; - } else if (var0 == ScriptOpcodes.ANIM) { - Interpreter.Interpreter_intStackSize -= 2; - MouseRecorder.performPlayerAnimation(class215.localPlayer, Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize], Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]); - return 1; - } else if (var0 == ScriptOpcodes.IF_CLOSE) { - if (!Interpreter.field1076) { - Interpreter.field1075 = true; - } - - return 1; + static int method3698(int var0, Script var1, boolean var2) { + boolean var3 = true; + Widget var4; + if (var0 >= 2000) { + var0 -= 1000; + var4 = Language.getWidget(Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]); + var3 = false; } else { - int var10; - if (var0 == ScriptOpcodes.RESUME_COUNTDIALOG) { - var3 = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]; - var10 = 0; - if (AbstractWorldMapData.isNumber(var3)) { - var10 = ClientPreferences.parseInt(var3); - } + var4 = var2 ? Interpreter.field1090 : class188.field2352; + } - PacketBufferNode var12 = SoundSystem.getPacketBufferNode(ClientPacket.field2221, Client.packetWriter.isaacCipher); - var12.packetBuffer.writeInt(var10); - Client.packetWriter.addNode(var12); + int var11; + if (var0 == ScriptOpcodes.CC_SETOP) { + var11 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] - 1; + if (var11 >= 0 && var11 <= 9) { + var4.setAction(var11, Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]); return 1; } else { - PacketBufferNode var14; - if (var0 == ScriptOpcodes.RESUME_NAMEDIALOG) { - var3 = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]; - var14 = SoundSystem.getPacketBufferNode(ClientPacket.field2199, Client.packetWriter.isaacCipher); - var14.packetBuffer.writeByte(var3.length() + 1); - var14.packetBuffer.writeStringCp1252NullTerminated(var3); - Client.packetWriter.addNode(var14); - return 1; - } else if (var0 == ScriptOpcodes.RESUME_STRINGDIALOG) { - var3 = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]; - var14 = SoundSystem.getPacketBufferNode(ClientPacket.field2255, Client.packetWriter.isaacCipher); - var14.packetBuffer.writeByte(var3.length() + 1); - var14.packetBuffer.writeStringCp1252NullTerminated(var3); - Client.packetWriter.addNode(var14); - return 1; - } else { - String var7; - int var15; - if (var0 == ScriptOpcodes.OPPLAYER) { - var15 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - var7 = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]; - Canvas.method934(var15, var7); + --class43.Interpreter_stringStackSize; + return 1; + } + } else { + int var6; + if (var0 == ScriptOpcodes.CC_SETDRAGGABLE) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var11 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var6 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + var4.parent = UserComparator3.getWidgetChild(var11, var6); + return 1; + } else if (var0 == ScriptOpcodes.CC_SETDRAGGABLEBEHAVIOR) { + var4.isScrollBar = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + return 1; + } else if (var0 == ScriptOpcodes.CC_SETDRAGDEADZONE) { + var4.dragZoneSize = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + return 1; + } else if (var0 == ScriptOpcodes.CC_SETDRAGDEADTIME) { + var4.dragThreshold = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + return 1; + } else if (var0 == ScriptOpcodes.CC_SETOPBASE) { + var4.dataText = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]; + return 1; + } else if (var0 == ScriptOpcodes.CC_SETTARGETVERB) { + var4.spellActionName = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]; + return 1; + } else if (var0 == ScriptOpcodes.CC_CLEAROPS) { + var4.actions = null; + return 1; + } else if (var0 == 1308) { + var4.field2719 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] == 1; + return 1; + } else { + int var7; + byte[] var9; + if (var0 != ScriptOpcodes.CC_SETOPKEY) { + byte var5; + if (var0 == ScriptOpcodes.CC_SETOPTKEY) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var5 = 10; + var9 = new byte[]{(byte)Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]}; + byte[] var10 = new byte[]{(byte)Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]}; + WorldMapSectionType.Widget_setKey(var4, var5, var9, var10); return 1; - } else if (var0 == ScriptOpcodes.IF_DRAGPICKUP) { - Interpreter.Interpreter_intStackSize -= 3; - var15 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var10 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - int var9 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 2]; - Widget var13 = PacketBufferNode.getWidget(var9); - class4.clickWidget(var13, var15, var10); - return 1; - } else if (var0 == ScriptOpcodes.CC_DRAGPICKUP) { - Interpreter.Interpreter_intStackSize -= 2; - var15 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var10 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - Widget var11 = var2 ? class96.field1301 : ReflectionCheck.field1310; - class4.clickWidget(var11, var15, var10); - return 1; - } else if (var0 == ScriptOpcodes.MOUSECAM) { - WorldMapLabelSize.mouseCam = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - return 1; - } else if (var0 == ScriptOpcodes.GETREMOVEROOFS) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = ScriptEvent.clientPreferences.roofsHidden ? 1 : 0; - return 1; - } else if (var0 == ScriptOpcodes.SETREMOVEROOFS) { - ScriptEvent.clientPreferences.roofsHidden = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - HitSplatDefinition.savePreferences(); - return 1; - } else if (var0 == ScriptOpcodes.OPENURL) { - var3 = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]; - boolean var4 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - class2.openURL(var3, var4, false); - return 1; - } else if (var0 == ScriptOpcodes.RESUME_OBJDIALOG) { - var15 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - var14 = SoundSystem.getPacketBufferNode(ClientPacket.field2179, Client.packetWriter.isaacCipher); - var14.packetBuffer.writeShort(var15); - Client.packetWriter.addNode(var14); - return 1; - } else if (var0 == ScriptOpcodes.BUG_REPORT) { - var15 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - WorldMapDecoration.Interpreter_stringStackSize -= 2; - var7 = Interpreter.Interpreter_stringStack[WorldMapDecoration.Interpreter_stringStackSize]; - String var5 = Interpreter.Interpreter_stringStack[WorldMapDecoration.Interpreter_stringStackSize + 1]; - if (var7.length() > 500) { - return 1; - } else if (var5.length() > 500) { + } else if (var0 == ScriptOpcodes.CC_SETOPKEYRATE) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 3; + var11 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] - 1; + var6 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + var7 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 2]; + if (var11 >= 0 && var11 <= 9) { + class4.Widget_setKeyRate(var4, var11, var6, var7); return 1; } else { - PacketBufferNode var6 = SoundSystem.getPacketBufferNode(ClientPacket.field2230, Client.packetWriter.isaacCipher); - var6.packetBuffer.writeShort(1 + UserComparator6.stringCp1252NullTerminatedByteSize(var7) + UserComparator6.stringCp1252NullTerminatedByteSize(var5)); - var6.packetBuffer.writeStringCp1252NullTerminated(var7); - var6.packetBuffer.writeStringCp1252NullTerminated(var5); - var6.packetBuffer.method5635(var15); - Client.packetWriter.addNode(var6); + throw new RuntimeException(); + } + } else if (var0 == ScriptOpcodes.CC_SETOPTKEYRATE) { + var5 = 10; + var6 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var7 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + class4.Widget_setKeyRate(var4, var5, var6, var7); + return 1; + } else if (var0 == ScriptOpcodes.CC_SETOPKEYIGNOREHELD) { + --GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize; + var11 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] - 1; + if (var11 >= 0 && var11 <= 9) { + class215.Widget_setKeyIgnoreHeld(var4, var11); return 1; - } - } else if (var0 == ScriptOpcodes.SETSHIFTCLICKDROP) { - Client.shiftClickDrop = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - return 1; - } else if (var0 == ScriptOpcodes.SETSHOWMOUSEOVERTEXT) { - Client.showMouseOverText = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - return 1; - } else if (var0 == ScriptOpcodes.RENDERSELF) { - Client.renderSelf = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - return 1; - } else if (var0 == 3120) { - if (Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1) { - Client.drawPlayerNames |= 1; } else { - Client.drawPlayerNames &= -2; + throw new RuntimeException(); } - - return 1; - } else if (var0 == 3121) { - if (Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1) { - Client.drawPlayerNames |= 2; - } else { - Client.drawPlayerNames &= -3; - } - - return 1; - } else if (var0 == 3122) { - if (Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1) { - Client.drawPlayerNames |= 4; - } else { - Client.drawPlayerNames &= -5; - } - - return 1; - } else if (var0 == 3123) { - if (Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1) { - Client.drawPlayerNames |= 8; - } else { - Client.drawPlayerNames &= -9; - } - - return 1; - } else if (var0 == 3124) { - Client.drawPlayerNames = 0; - return 1; - } else if (var0 == ScriptOpcodes.SETSHOWMOUSECROSS) { - Client.showMouseCross = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - return 1; - } else if (var0 == ScriptOpcodes.SETSHOWLOADINGMESSAGES) { - Client.showLoadingMessages = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - return 1; - } else if (var0 == ScriptOpcodes.SETTAPTODROP) { - ReflectionCheck.setTapToDrop(Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1); - return 1; - } else if (var0 == ScriptOpcodes.GETTAPTODROP) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = WorldMapData_1.getTapToDrop() ? 1 : 0; - return 1; - } else if (var0 == ScriptOpcodes.SETOCULUSORBSPEED) { - Interpreter.Interpreter_intStackSize -= 2; - Client.oculusOrbNormalSpeed = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - Client.oculusOrbSlowedSpeed = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - return 1; - } else if (var0 == 3130) { - Interpreter.Interpreter_intStackSize -= 2; - return 1; - } else if (var0 == 3131) { - --Interpreter.Interpreter_intStackSize; - return 1; - } else if (var0 == ScriptOpcodes.GETCANVASSIZE) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = class286.canvasWidth; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = FloorUnderlayDefinition.canvasHeight; - return 1; - } else if (var0 == ScriptOpcodes.MOBILE_SETFPS) { - --Interpreter.Interpreter_intStackSize; - return 1; - } else if (var0 == ScriptOpcodes.MOBILE_OPENSTORE) { - return 1; - } else if (var0 == ScriptOpcodes.MOBILE_OPENSTORECATEGORY) { - Interpreter.Interpreter_intStackSize -= 2; - return 1; - } else if (var0 == 3136) { - Client.field828 = 3; - Client.field794 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - return 1; - } else if (var0 == 3137) { - Client.field828 = 2; - Client.field794 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - return 1; - } else if (var0 == 3138) { - Client.field828 = 0; - return 1; - } else if (var0 == 3139) { - Client.field828 = 1; - return 1; - } else if (var0 == 3140) { - Client.field828 = 3; - Client.field794 = var2 ? class96.field1301.id : ReflectionCheck.field1310.id; + } else if (var0 == ScriptOpcodes.CC_SETOPTKEYIGNOREHELD) { + var5 = 10; + class215.Widget_setKeyIgnoreHeld(var4, var5); return 1; } else { - boolean var8; - if (var0 == ScriptOpcodes.SETHIDEUSERNAME) { - var8 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - ScriptEvent.clientPreferences.hideUsername = var8; - HitSplatDefinition.savePreferences(); - return 1; - } else if (var0 == ScriptOpcodes.GETHIDEUSERNAME) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = ScriptEvent.clientPreferences.hideUsername ? 1 : 0; - return 1; - } else if (var0 == ScriptOpcodes.SETREMEMBERUSERNAME) { - var8 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - Client.Login_isUsernameRemembered = var8; - if (!var8) { - ScriptEvent.clientPreferences.rememberedUsername = ""; - HitSplatDefinition.savePreferences(); - } + return 2; + } + } else { + byte[] var8 = null; + var9 = null; + if (var3) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 10; - return 1; - } else if (var0 == ScriptOpcodes.GETREMEMBERUSERNAME) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = Client.Login_isUsernameRemembered ? 1 : 0; - return 1; - } else if (var0 == 3145) { - return 1; - } else if (var0 == ScriptOpcodes.SETTITLEMUSICENABLED) { - var8 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - if (var8 == ScriptEvent.clientPreferences.titleMusicDisabled) { - ScriptEvent.clientPreferences.titleMusicDisabled = !var8; - HitSplatDefinition.savePreferences(); - } - - return 1; - } else if (var0 == ScriptOpcodes.GETTITLEMUSICENABLED) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = ScriptEvent.clientPreferences.titleMusicDisabled ? 0 : 1; - return 1; - } else if (var0 == 3148) { - return 1; - } else if (var0 == 3149) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - return 1; - } else if (var0 == 3150) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - return 1; - } else if (var0 == 3151) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - return 1; - } else if (var0 == 3152) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - return 1; - } else if (var0 == 3153) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = Login.Login_loadingPercent; - return 1; - } else if (var0 == 3154) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = class14.method203(); - return 1; - } else if (var0 == 3155) { - --WorldMapDecoration.Interpreter_stringStackSize; - return 1; - } else if (var0 == 3156) { - return 1; - } else if (var0 == 3157) { - Interpreter.Interpreter_intStackSize -= 2; - return 1; - } else if (var0 == 3158) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - return 1; - } else if (var0 == 3159) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - return 1; - } else if (var0 == 3160) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - return 1; - } else if (var0 == 3161) { - --Interpreter.Interpreter_intStackSize; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - return 1; - } else if (var0 == 3162) { - --Interpreter.Interpreter_intStackSize; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - return 1; - } else if (var0 == 3163) { - --WorldMapDecoration.Interpreter_stringStackSize; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - return 1; - } else if (var0 == 3164) { - --Interpreter.Interpreter_intStackSize; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = ""; - return 1; - } else if (var0 == 3165) { - --Interpreter.Interpreter_intStackSize; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - return 1; - } else if (var0 == 3166) { - Interpreter.Interpreter_intStackSize -= 2; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - return 1; - } else if (var0 == 3167) { - Interpreter.Interpreter_intStackSize -= 2; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - return 1; - } else if (var0 == 3168) { - Interpreter.Interpreter_intStackSize -= 2; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = ""; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = ""; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = ""; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = ""; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = ""; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = ""; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = ""; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = ""; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = ""; - return 1; - } else if (var0 == 3169) { - return 1; - } else if (var0 == 3170) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - return 1; - } else if (var0 == 3171) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - return 1; - } else if (var0 == 3172) { - --Interpreter.Interpreter_intStackSize; - return 1; - } else if (var0 == 3173) { - --Interpreter.Interpreter_intStackSize; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - return 1; - } else if (var0 == 3174) { - --Interpreter.Interpreter_intStackSize; - return 1; - } else if (var0 == 3175) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - return 1; - } else if (var0 == 3176) { - return 1; - } else if (var0 == 3177) { - return 1; - } else if (var0 == 3178) { - --WorldMapDecoration.Interpreter_stringStackSize; - return 1; - } else if (var0 == 3179) { - return 1; - } else if (var0 == 3180) { - --WorldMapDecoration.Interpreter_stringStackSize; - return 1; - } else { - return 2; + for (var7 = 0; var7 < 10 && Interpreter.Interpreter_intStack[var7 + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] >= 0; var7 += 2) { } + + if (var7 > 0) { + var8 = new byte[var7 / 2]; + var9 = new byte[var7 / 2]; + + for (var7 -= 2; var7 >= 0; var7 -= 2) { + var8[var7 / 2] = (byte)Interpreter.Interpreter_intStack[var7 + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var9[var7 / 2] = (byte)Interpreter.Interpreter_intStack[var7 + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + } + } + } else { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var8 = new byte[]{(byte)Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]}; + var9 = new byte[]{(byte)Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]}; + } + + var7 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize] - 1; + if (var7 >= 0 && var7 <= 9) { + WorldMapSectionType.Widget_setKey(var4, var7, var8, var9); + return 1; + } else { + throw new RuntimeException(); } } } diff --git a/runescape-client/src/main/java/class191.java b/runescape-client/src/main/java/class191.java index d97262bbd4..21171cbe6b 100644 --- a/runescape-client/src/main/java/class191.java +++ b/runescape-client/src/main/java/class191.java @@ -1,57 +1,154 @@ +import java.awt.Desktop; +import java.awt.Desktop.Action; +import java.io.File; +import java.io.IOException; +import java.net.URI; import net.runelite.mapping.Export; +import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("gt") +@ObfuscatedName("gw") public class class191 { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lgt;" + signature = "Lgw;" ) - static final class191 field2333; - @ObfuscatedName("t") + static final class191 field2376; + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lgt;" + signature = "Lgw;" ) - static final class191 field2336; - @ObfuscatedName("n") + static final class191 field2372; + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Lgt;" + signature = "Lgw;" ) - static final class191 field2335; + static final class191 field2375; + @ObfuscatedName("kc") + @ObfuscatedGetter( + intValue = 124291179 + ) + @Export("menuY") + static int menuY; static { - field2333 = new class191(); - field2336 = new class191(); - field2335 = new class191(); + field2376 = new class191(); + field2372 = new class191(); + field2375 = new class191(); } class191() { } - @ObfuscatedName("q") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "([BI)V", - garbageValue = "200014911" + signature = "(Ljava/lang/String;Ljava/lang/String;ZI)Lmd;", + garbageValue = "-1138892268" ) - @Export("ByteArrayPool_release") - public static synchronized void ByteArrayPool_release(byte[] var0) { - if (var0.length == 100 && ByteArrayPool.ByteArrayPool_smallCount < 1000) { - ByteArrayPool.ByteArrayPool_small[++ByteArrayPool.ByteArrayPool_smallCount - 1] = var0; - } else if (var0.length == 5000 && ByteArrayPool.ByteArrayPool_mediumCount < 250) { - ByteArrayPool.ByteArrayPool_medium[++ByteArrayPool.ByteArrayPool_mediumCount - 1] = var0; - } else if (var0.length == 30000 && ByteArrayPool.ByteArrayPool_largeCount < 50) { - ByteArrayPool.ByteArrayPool_large[++ByteArrayPool.ByteArrayPool_largeCount - 1] = var0; - } else { - if (HorizontalAlignment.ByteArrayPool_arrays != null) { - for (int var1 = 0; var1 < ByteArrayPool.ByteArrayPool_alternativeSizes.length; ++var1) { - if (var0.length == ByteArrayPool.ByteArrayPool_alternativeSizes[var1] && class222.ByteArrayPool_altSizeArrayCounts[var1] < HorizontalAlignment.ByteArrayPool_arrays[var1].length) { - HorizontalAlignment.ByteArrayPool_arrays[var1][class222.ByteArrayPool_altSizeArrayCounts[var1]++] = var0; - return; - } + @Export("getPreferencesFile") + public static AccessFile getPreferencesFile(String var0, String var1, boolean var2) { + File var3 = new File(UserComparator2.cacheDir, "preferences" + var0 + ".dat"); + if (var3.exists()) { + try { + AccessFile var10 = new AccessFile(var3, "rw", 10000L); + return var10; + } catch (IOException var9) { + } + } + + String var4 = ""; + if (PendingSpawn.cacheGamebuild == 33) { + var4 = "_rc"; + } else if (PendingSpawn.cacheGamebuild == 34) { + var4 = "_wip"; + } + + File var5 = new File(JagexCache.userHomeDirectory, "jagex_" + var1 + "_preferences" + var0 + var4 + ".dat"); + AccessFile var6; + if (!var2 && var5.exists()) { + try { + var6 = new AccessFile(var5, "rw", 10000L); + return var6; + } catch (IOException var8) { + } + } + + try { + var6 = new AccessFile(var3, "rw", 10000L); + return var6; + } catch (IOException var7) { + throw new RuntimeException(); + } + } + + @ObfuscatedName("f") + @ObfuscatedSignature( + signature = "(Ljava/lang/String;ZLjava/lang/String;ZB)V", + garbageValue = "0" + ) + static void method3721(String var0, boolean var1, String var2, boolean var3) { + if (var1) { + if (!var3 && Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Action.BROWSE)) { + try { + Desktop.getDesktop().browse(new URI(var0)); + return; + } catch (Exception var5) { } } + if (class51.field424.startsWith("win") && !var3) { + GraphicsObject.method2040(var0, 0); + return; + } + + if (class51.field424.startsWith("mac")) { + class237.method4422(var0, 1, var2); + return; + } + + GraphicsObject.method2040(var0, 2); + } else { + GraphicsObject.method2040(var0, 3); } + + } + + @ObfuscatedName("k") + @ObfuscatedSignature( + signature = "(Ljava/lang/String;B)Ljava/lang/String;", + garbageValue = "-1" + ) + public static String method3720(String var0) { + int var1 = var0.length(); + char[] var2 = new char[var1]; + byte var3 = 2; + + for (int var4 = 0; var4 < var1; ++var4) { + char var5 = var0.charAt(var4); + if (var3 == 0) { + var5 = Character.toLowerCase(var5); + } else if (var3 == 2 || Character.isUpperCase(var5)) { + var5 = WorldMapElement.method4483(var5); + } + + if (Character.isLetter(var5)) { + var3 = 0; + } else if (var5 != '.' && var5 != '?' && var5 != '!') { + if (Character.isSpaceChar(var5)) { + if (var3 != 2) { + var3 = 1; + } + } else { + var3 = 1; + } + } else { + var3 = 2; + } + + var2[var4] = var5; + } + + return new String(var2); } } diff --git a/runescape-client/src/main/java/class192.java b/runescape-client/src/main/java/class192.java index f537dff6cc..688ba62b76 100644 --- a/runescape-client/src/main/java/class192.java +++ b/runescape-client/src/main/java/class192.java @@ -1,343 +1,274 @@ -import java.io.File; -import java.io.IOException; -import java.io.RandomAccessFile; +import java.lang.reflect.Field; +import java.lang.reflect.Method; import java.util.HashSet; import java.util.Set; import net.runelite.mapping.Export; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; +import net.runelite.rs.Reflection; -@ObfuscatedName("gm") +@ObfuscatedName("go") public enum class192 implements Enumerated { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lgm;" + signature = "Lgo;" ) - field2345("", 0, new class191[]{class191.field2335}), - @ObfuscatedName("t") + field2381("", 0, new class191[]{class191.field2375}), + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lgm;" + signature = "Lgo;" ) - field2338("", 1, new class191[]{class191.field2336, class191.field2335}), - @ObfuscatedName("n") + field2378("", 1, new class191[]{class191.field2372, class191.field2375}), + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Lgm;" + signature = "Lgo;" ) - field2350("", 2, new class191[]{class191.field2336, class191.field2333, class191.field2335}), - @ObfuscatedName("q") + field2379("", 2, new class191[]{class191.field2372, class191.field2376, class191.field2375}), + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Lgm;" + signature = "Lgo;" ) - field2341("", 3, new class191[]{class191.field2336}), - @ObfuscatedName("v") + field2392("", 3, new class191[]{class191.field2372}), + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "Lgm;" + signature = "Lgo;" ) - field2342("", 4), - @ObfuscatedName("l") - @ObfuscatedSignature( - signature = "Lgm;" - ) - field2339("", 5, new class191[]{class191.field2336, class191.field2335}), - @ObfuscatedName("c") - @ObfuscatedSignature( - signature = "Lgm;" - ) - field2344("", 6, new class191[]{class191.field2335}), - @ObfuscatedName("o") - @ObfuscatedSignature( - signature = "Lgm;" - ) - field2340("", 8, new class191[]{class191.field2336, class191.field2335}), - @ObfuscatedName("i") - @ObfuscatedSignature( - signature = "Lgm;" - ) - field2346("", 9, new class191[]{class191.field2336, class191.field2333}), - @ObfuscatedName("d") - @ObfuscatedSignature( - signature = "Lgm;" - ) - field2347("", 10, new class191[]{class191.field2336}), - @ObfuscatedName("m") - @ObfuscatedSignature( - signature = "Lgm;" - ) - field2348("", 11, new class191[]{class191.field2336}), + field2390("", 4), @ObfuscatedName("p") @ObfuscatedSignature( - signature = "Lgm;" + signature = "Lgo;" ) - field2349("", 12, new class191[]{class191.field2336, class191.field2335}), + field2384("", 5, new class191[]{class191.field2372, class191.field2375}), @ObfuscatedName("h") @ObfuscatedSignature( - signature = "Lgm;" + signature = "Lgo;" ) - field2343("", 13, new class191[]{class191.field2336}); - - @ObfuscatedName("z") - @ObfuscatedGetter( - intValue = 503596415 - ) - @Export("loginBoxCenter") - static int loginBoxCenter; - @ObfuscatedName("dh") + field2383("", 6, new class191[]{class191.field2375}), + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "Lij;" + signature = "Lgo;" ) - @Export("archive14") - static Archive archive14; - @ObfuscatedName("ek") + field2385("", 8, new class191[]{class191.field2372, class191.field2375}), + @ObfuscatedName("w") @ObfuscatedSignature( - signature = "Lkb;" + signature = "Lgo;" ) - @Export("spriteIds") - static GraphicsDefaults spriteIds; + field2389("", 9, new class191[]{class191.field2372, class191.field2376}), + @ObfuscatedName("i") + @ObfuscatedSignature( + signature = "Lgo;" + ) + field2386("", 10, new class191[]{class191.field2372}), @ObfuscatedName("k") + @ObfuscatedSignature( + signature = "Lgo;" + ) + field2387("", 11, new class191[]{class191.field2372}), + @ObfuscatedName("x") + @ObfuscatedSignature( + signature = "Lgo;" + ) + field2388("", 12, new class191[]{class191.field2372, class191.field2375}), + @ObfuscatedName("o") + @ObfuscatedSignature( + signature = "Lgo;" + ) + field2382("", 13, new class191[]{class191.field2372}); + + @ObfuscatedName("ah") @ObfuscatedGetter( - intValue = 2067874269 + intValue = 2041641327 + ) + static int field2395; + @ObfuscatedName("gf") + @ObfuscatedSignature( + signature = "[Llm;" + ) + @Export("modIconSprites") + static IndexedSprite[] modIconSprites; + @ObfuscatedName("e") + @ObfuscatedGetter( + intValue = -130205167 ) @Export("id") final int id; - @ObfuscatedName("x") - final Set field2352; + @ObfuscatedName("n") + final Set field2391; static { - method3812(); + method3733(); } @ObfuscatedSignature( - signature = "(Ljava/lang/String;I[Lgt;)V" + signature = "(Ljava/lang/String;I[Lgw;)V" ) class192(String var3, int var4, class191[] var5) { - this.field2352 = new HashSet(); + this.field2391 = new HashSet(); this.id = var4; class191[] var6 = var5; for (int var7 = 0; var7 < var6.length; ++var7) { class191 var8 = var6[var7]; - this.field2352.add(var8); + this.field2391.add(var8); } } class192(String var3, int var4) { - this.field2352 = new HashSet(); + this.field2391 = new HashSet(); this.id = var4; } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(I)I", - garbageValue = "-1993081102" + signature = "(B)I", + garbageValue = "7" ) @Export("rsOrdinal") public int rsOrdinal() { return this.id; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Ljava/lang/String;Ljava/lang/String;III)V", - garbageValue = "927636504" + signature = "(I)[Lgo;", + garbageValue = "1222259750" ) - public static void method3814(String var0, String var1, int var2, int var3) throws IOException { - JagexCache.idxCount = var3; - class189.cacheGamebuild = var2; - - try { - class43.field363 = System.getProperty("os.name"); - } catch (Exception var17) { - class43.field363 = "Unknown"; - } - - class96.field1299 = class43.field363.toLowerCase(); - - try { - class30.userHomeDirectory = System.getProperty("user.home"); - if (class30.userHomeDirectory != null) { - class30.userHomeDirectory = class30.userHomeDirectory + "/"; - } - } catch (Exception var16) { - } - - try { - if (class96.field1299.startsWith("win")) { - if (class30.userHomeDirectory == null) { - class30.userHomeDirectory = System.getenv("USERPROFILE"); - } - } else if (class30.userHomeDirectory == null) { - class30.userHomeDirectory = System.getenv("HOME"); - } - - if (class30.userHomeDirectory != null) { - class30.userHomeDirectory = class30.userHomeDirectory + "/"; - } - } catch (Exception var15) { - } - - if (class30.userHomeDirectory == null) { - class30.userHomeDirectory = "~/"; - } - - BoundaryObject.field1859 = new String[]{"c:/rscache/", "/rscache/", "c:/windows/", "c:/winnt/", "c:/", class30.userHomeDirectory, "/tmp/", ""}; - class312.field3803 = new String[]{".jagex_cache_" + class189.cacheGamebuild, ".file_store_" + class189.cacheGamebuild}; - int var12 = 0; - - label99: - while (var12 < 4) { - JagexCache.cacheDir = VertexNormal.getCacheDir(var0, var1, var12); - if (!JagexCache.cacheDir.exists()) { - JagexCache.cacheDir.mkdirs(); - } - - File[] var5 = JagexCache.cacheDir.listFiles(); - if (var5 == null) { - break; - } - - File[] var6 = var5; - int var7 = 0; - - while (true) { - if (var7 >= var6.length) { - break label99; - } - - File var8 = var6[var7]; - - boolean var9; - try { - RandomAccessFile var10 = new RandomAccessFile(var8, "rw"); - int var11 = var10.read(); - var10.seek(0L); - var10.write(var11); - var10.seek(0L); - var10.close(); - var9 = true; - } catch (Exception var14) { - var9 = false; - } - - if (!var9) { - ++var12; - break; - } - - ++var7; - } - } - - File var4 = JagexCache.cacheDir; - FileSystem.FileSystem_cacheDir = var4; - if (!FileSystem.FileSystem_cacheDir.exists()) { - throw new RuntimeException(""); - } else { - FileSystem.FileSystem_hasPermissions = true; - class14.method204(); - JagexCache.JagexCache_dat2File = new BufferedFile(new AccessFile(PendingSpawn.getFile("main_file_cache.dat2"), "rw", 1048576000L), 5200, 0); - JagexCache.JagexCache_idx255File = new BufferedFile(new AccessFile(PendingSpawn.getFile("main_file_cache.idx255"), "rw", 1048576L), 6000, 0); - ArchiveLoader.JagexCache_idxFiles = new BufferedFile[JagexCache.idxCount]; - - for (int var13 = 0; var13 < JagexCache.idxCount; ++var13) { - ArchiveLoader.JagexCache_idxFiles[var13] = new BufferedFile(new AccessFile(PendingSpawn.getFile("main_file_cache.idx" + var13), "rw", 1048576L), 6000, 0); - } - - } + static class192[] method3733() { + return new class192[]{field2383, field2379, field2392, field2388, field2387, field2384, field2385, field2378, field2386, field2390, field2389, field2382, field2381}; } - @ObfuscatedName("a") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(B)[Lgm;", - garbageValue = "14" + signature = "(Lkg;IB)V", + garbageValue = "-107" ) - static class192[] method3812() { - return new class192[]{field2344, field2338, field2339, field2345, field2349, field2346, field2342, field2341, field2348, field2350, field2343, field2340, field2347}; - } + @Export("readReflectionCheck") + public static void readReflectionCheck(Buffer var0, int var1) { + ReflectionCheck var2 = new ReflectionCheck(); + var2.size = var0.readUnsignedByte(); + var2.id = var0.readInt(); + var2.operations = new int[var2.size]; + var2.creationErrors = new int[var2.size]; + var2.fields = new Field[var2.size]; + var2.intReplaceValues = new int[var2.size]; + var2.methods = new Method[var2.size]; + var2.arguments = new byte[var2.size][][]; - @ObfuscatedName("q") - @ObfuscatedSignature( - signature = "(Ljava/lang/CharSequence;IZI)I", - garbageValue = "-1187268982" - ) - @Export("parseIntCustomRadix") - public static int parseIntCustomRadix(CharSequence var0, int var1, boolean var2) { - if (var1 >= 2 && var1 <= 36) { - boolean var3 = false; - boolean var4 = false; - int var5 = 0; - int var6 = var0.length(); + for (int var3 = 0; var3 < var2.size; ++var3) { + try { + int var4 = var0.readUnsignedByte(); + String var5; + String var6; + int var7; + if (var4 != 0 && var4 != 1 && var4 != 2) { + if (var4 == 3 || var4 == 4) { + var5 = var0.readStringCp1252NullTerminated(); + var6 = var0.readStringCp1252NullTerminated(); + var7 = var0.readUnsignedByte(); + String[] var8 = new String[var7]; - for (int var7 = 0; var7 < var6; ++var7) { - char var8 = var0.charAt(var7); - if (var7 == 0) { - if (var8 == '-') { - var3 = true; - continue; + for (int var9 = 0; var9 < var7; ++var9) { + var8[var9] = var0.readStringCp1252NullTerminated(); + } + + String var20 = var0.readStringCp1252NullTerminated(); + byte[][] var10 = new byte[var7][]; + int var12; + if (var4 == 3) { + for (int var11 = 0; var11 < var7; ++var11) { + var12 = var0.readInt(); + var10[var11] = new byte[var12]; + var0.readBytes(var10[var11], 0, var12); + } + } + + var2.operations[var3] = var4; + Class[] var21 = new Class[var7]; + + for (var12 = 0; var12 < var7; ++var12) { + var21[var12] = VarcInt.loadClassFromDescriptor(var8[var12]); + } + + Class var22 = VarcInt.loadClassFromDescriptor(var20); + if (VarcInt.loadClassFromDescriptor(var5).getClassLoader() == null) { + throw new SecurityException(); + } + + Method[] var13 = VarcInt.loadClassFromDescriptor(var5).getDeclaredMethods(); + Method[] var14 = var13; + + for (int var15 = 0; var15 < var14.length; ++var15) { + Method var16 = var14[var15]; + if (Reflection.getMethodName(var16).equals(var6)) { + Class[] var17 = Reflection.getParameterTypes(var16); + if (var21.length == var17.length) { + boolean var18 = true; + + for (int var19 = 0; var19 < var21.length; ++var19) { + if (var21[var19] != var17[var19]) { + var18 = false; + break; + } + } + + if (var18 && var22 == var16.getReturnType()) { + var2.methods[var3] = var16; + } + } + } + } + + var2.arguments[var3] = var10; } - - if (var8 == '+') { - continue; - } - } - - int var10; - if (var8 >= '0' && var8 <= '9') { - var10 = var8 - '0'; - } else if (var8 >= 'A' && var8 <= 'Z') { - var10 = var8 - '7'; } else { - if (var8 < 'a' || var8 > 'z') { - throw new NumberFormatException(); + var5 = var0.readStringCp1252NullTerminated(); + var6 = var0.readStringCp1252NullTerminated(); + var7 = 0; + if (var4 == 1) { + var7 = var0.readInt(); } - var10 = var8 - 'W'; - } + var2.operations[var3] = var4; + var2.intReplaceValues[var3] = var7; + if (VarcInt.loadClassFromDescriptor(var5).getClassLoader() == null) { + throw new SecurityException(); + } - if (var10 >= var1) { - throw new NumberFormatException(); + var2.fields[var3] = Reflection.findField(VarcInt.loadClassFromDescriptor(var5), var6); } - - if (var3) { - var10 = -var10; - } - - int var9 = var10 + var5 * var1; - if (var9 / var1 != var5) { - throw new NumberFormatException(); - } - - var5 = var9; - var4 = true; + } catch (ClassNotFoundException var24) { + var2.creationErrors[var3] = -1; + } catch (SecurityException var25) { + var2.creationErrors[var3] = -2; + } catch (NullPointerException var26) { + var2.creationErrors[var3] = -3; + } catch (Exception var27) { + var2.creationErrors[var3] = -4; + } catch (Throwable var28) { + var2.creationErrors[var3] = -5; } - - if (!var4) { - throw new NumberFormatException(); - } else { - return var5; - } - } else { - throw new IllegalArgumentException("" + var1); } + + class96.reflectionChecks.addFirst(var2); } - @ObfuscatedName("fh") + @ObfuscatedName("k") @ObfuscatedSignature( - signature = "(IIB)V", - garbageValue = "11" + signature = "(B)I", + garbageValue = "25" ) - static void method3813(int var0, int var1) { - int[] var2 = new int[9]; + static final int method3730() { + return ViewportMouse.ViewportMouse_y; + } - for (int var3 = 0; var3 < var2.length; ++var3) { - int var4 = var3 * 32 + 15 + 128; - int var5 = WorldMapSection0.method285(var4); - int var6 = Rasterizer3D.Rasterizer3D_sine[var4]; - var5 = PcmPlayer.method2637(var5, var1); - var2[var3] = var6 * var5 >> 16; - } - - Scene.Scene_buildVisiblityMap(var2, 500, 800, var0 * 334 / var1, 334); + @ObfuscatedName("ku") + @ObfuscatedSignature( + signature = "(II)V", + garbageValue = "-1031778889" + ) + static void method3732(int var0) { + Client.oculusOrbState = var0; } } diff --git a/runescape-client/src/main/java/class195.java b/runescape-client/src/main/java/class195.java index 62f35dd217..f87174a235 100644 --- a/runescape-client/src/main/java/class195.java +++ b/runescape-client/src/main/java/class195.java @@ -3,23 +3,98 @@ import net.runelite.mapping.Export; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("go") +@ObfuscatedName("gk") public class class195 { - @ObfuscatedName("d") - public static short[][] field2359; - static { new HashMap(); } - @ObfuscatedName("ll") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Lhi;I)I", - garbageValue = "-906497174" + signature = "(II)Z", + garbageValue = "338644626" ) - @Export("getWidgetClickMask") - static int getWidgetClickMask(Widget var0) { - IntegerNode var1 = (IntegerNode)Client.widgetClickMasks.get(((long)var0.id << 32) + (long)var0.childIndex); - return var1 != null ? var1.integer : var0.clickMask; + public static boolean method3743(int var0) { + return var0 == WorldMapDecorationType.field2749.id; + } + + @ObfuscatedName("f") + @ObfuscatedSignature( + signature = "(IIII)Lci;", + garbageValue = "-990900321" + ) + @Export("getWorldMapScript") + static Script getWorldMapScript(int var0, int var1, int var2) { + int var3 = (var1 << 8) + var0; + Script var5 = class49.method880(var3, var0); + if (var5 != null) { + return var5; + } else { + int var6 = var0 + (var2 + 40000 << 8); + var5 = class49.method880(var6, var0); + return var5 != null ? var5 : null; + } + } + + @ObfuscatedName("f") + @ObfuscatedSignature( + signature = "([BIIB)Ljava/lang/String;", + garbageValue = "9" + ) + static String method3739(byte[] var0, int var1, int var2) { + StringBuilder var3 = new StringBuilder(); + + for (int var4 = var1; var4 < var2 + var1; var4 += 3) { + int var5 = var0[var4] & 255; + var3.append(class289.field3653[var5 >>> 2]); + if (var4 < var2 - 1) { + int var6 = var0[var4 + 1] & 255; + var3.append(class289.field3653[(var5 & 3) << 4 | var6 >>> 4]); + if (var4 < var2 - 2) { + int var7 = var0[var4 + 2] & 255; + var3.append(class289.field3653[(var6 & 15) << 2 | var7 >>> 6]).append(class289.field3653[var7 & 63]); + } else { + var3.append(class289.field3653[(var6 & 15) << 2]).append("="); + } + } else { + var3.append(class289.field3653[(var5 & 3) << 4]).append("=="); + } + } + + return var3.toString(); + } + + @ObfuscatedName("g") + @ObfuscatedSignature( + signature = "(I)V", + garbageValue = "1518312277" + ) + public static void method3746() { + VarpDefinition.VarpDefinition_cached.clear(); + } + + @ObfuscatedName("gf") + @ObfuscatedSignature( + signature = "(IIII)I", + garbageValue = "-1206093044" + ) + @Export("getTileHeight") + static final int getTileHeight(int var0, int var1, int var2) { + int var3 = var0 >> 7; + int var4 = var1 >> 7; + if (var3 >= 0 && var4 >= 0 && var3 <= 103 && var4 <= 103) { + int var5 = var2; + if (var2 < 3 && (Tiles.Tiles_renderFlags[1][var3][var4] & 2) == 2) { + var5 = var2 + 1; + } + + int var6 = var0 & 127; + int var7 = var1 & 127; + int var8 = (128 - var6) * Tiles.Tiles_heights[var5][var3][var4] + Tiles.Tiles_heights[var5][var3 + 1][var4] * var6 >> 7; + int var9 = Tiles.Tiles_heights[var5][var3][var4 + 1] * (128 - var6) + var6 * Tiles.Tiles_heights[var5][var3 + 1][var4 + 1] >> 7; + return var7 * var9 + var8 * (128 - var7) >> 7; + } else { + return 0; + } } } diff --git a/runescape-client/src/main/java/class197.java b/runescape-client/src/main/java/class197.java index 67edc40ed3..14327c302d 100644 --- a/runescape-client/src/main/java/class197.java +++ b/runescape-client/src/main/java/class197.java @@ -3,87 +3,56 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("gh") +@ObfuscatedName("gq") public class class197 { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lhq;" + signature = "Lhf;" ) @Export("musicPatchesArchive") public static AbstractArchive musicPatchesArchive; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lhq;" + signature = "Lhf;" ) @Export("musicSamplesArchive") public static AbstractArchive musicSamplesArchive; - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Lhq;" + signature = "Lhf;" ) @Export("soundEffectsArchive") public static AbstractArchive soundEffectsArchive; - @ObfuscatedName("q") + @ObfuscatedName("z") + @ObfuscatedGetter( + intValue = 569775055 + ) + public static int field2411; + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "Lgg;" + signature = "Lhf;" ) - @Export("midiPcmStream") - public static MidiPcmStream midiPcmStream; - @ObfuscatedName("v") + @Export("musicTrackArchive") + public static AbstractArchive musicTrackArchive; + @ObfuscatedName("w") @ObfuscatedGetter( - intValue = -1610594971 - ) - public static int field2377; - @ObfuscatedName("o") - @ObfuscatedGetter( - intValue = 319435127 - ) - @Export("musicTrackFileId") - public static int musicTrackFileId; - @ObfuscatedName("i") - @ObfuscatedGetter( - intValue = -1006961815 + intValue = 2134983541 ) @Export("musicTrackVolume") public static int musicTrackVolume; - @ObfuscatedName("d") - @ObfuscatedGetter( - intValue = -1415687209 - ) - public static int field2384; - @ObfuscatedName("p") - @ObfuscatedSignature( - signature = "Lgb;" - ) - @Export("musicTrack") - public static MusicTrack musicTrack; static { - field2377 = 0; + field2411 = 0; } - @ObfuscatedName("a") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(Lhq;Lhq;Lhq;I)V", - garbageValue = "1749712810" + signature = "(III)Lba;", + garbageValue = "1833957440" ) - public static void method3845(AbstractArchive var0, AbstractArchive var1, AbstractArchive var2) { - SequenceDefinition.SequenceDefinition_archive = var0; - DevicePcmPlayerProvider.SequenceDefinition_animationsArchive = var1; - SequenceDefinition.SequenceDefinition_skeletonsArchive = var2; - } - - @ObfuscatedName("lr") - @ObfuscatedSignature( - signature = "(II)V", - garbageValue = "-224459169" - ) - static void method3844(int var0) { - for (IntegerNode var1 = (IntegerNode)Client.widgetClickMasks.first(); var1 != null; var1 = (IntegerNode)Client.widgetClickMasks.next()) { - if ((long)var0 == (var1.key >> 48 & 65535L)) { - var1.remove(); - } - } - + @Export("Messages_getByChannelAndID") + static Message Messages_getByChannelAndID(int var0, int var1) { + ChatChannel var2 = (ChatChannel)Messages.Messages_channels.get(var0); + return var2.getMessage(var1); } } diff --git a/runescape-client/src/main/java/class2.java b/runescape-client/src/main/java/class2.java index 911a643fb2..876f757d5d 100644 --- a/runescape-client/src/main/java/class2.java +++ b/runescape-client/src/main/java/class2.java @@ -1,220 +1,106 @@ import net.runelite.mapping.Export; +import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("n") +@ObfuscatedName("b") final class class2 implements class0 { - @ObfuscatedName("n") - @ObfuscatedSignature( - signature = "Lhq;" + @ObfuscatedName("p") + @ObfuscatedGetter( + intValue = -722721087 ) - @Export("HitSplatDefinition_fontsArchive") - static AbstractArchive HitSplatDefinition_fontsArchive; + static int field5; + @ObfuscatedName("cb") + @ObfuscatedSignature( + signature = "Lbr;" + ) + @Export("mouseRecorder") + static MouseRecorder mouseRecorder; + @ObfuscatedName("dq") + @ObfuscatedSignature( + signature = "Lij;" + ) + @Export("archive9") + static Archive archive9; + @ObfuscatedName("gc") + @ObfuscatedSignature( + signature = "Lel;" + ) + @Export("scene") + static Scene scene; - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Ljava/lang/Object;Lkc;B)V", - garbageValue = "25" + signature = "(Ljava/lang/Object;Lkg;I)V", + garbageValue = "-1331780546" ) - public void vmethod89(Object var1, Buffer var2) { - this.method31((Long)var1, var2); + public void vmethod57(Object var1, Buffer var2) { + this.method26((Long)var1, var2); } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Lkc;I)Ljava/lang/Object;", - garbageValue = "242985434" + signature = "(Lkg;I)Ljava/lang/Object;", + garbageValue = "1713449680" ) - public Object vmethod74(Buffer var1) { + public Object vmethod65(Buffer var1) { return var1.readLong(); } - @ObfuscatedName("p") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "(Ljava/lang/Long;Lkc;I)V", - garbageValue = "-1524476378" + signature = "(Ljava/lang/Long;Lkg;I)V", + garbageValue = "-1453735507" ) - void method31(Long var1, Buffer var2) { + void method26(Long var1, Buffer var2) { var2.writeLong(var1); } - @ObfuscatedName("t") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Ljava/lang/String;ZZI)V", - garbageValue = "688165402" + signature = "(I)[Lhb;", + garbageValue = "277199676" ) - @Export("openURL") - public static void openURL(String var0, boolean var1, boolean var2) { - PacketWriter.method2421(var0, var1, "openjs", var2); + @Export("PlayerType_values") + public static PlayerType[] PlayerType_values() { + return new PlayerType[]{PlayerType.PlayerType_playerModerator, PlayerType.PlayerType_jagexModerator, PlayerType.PlayerType_hardcoreIronman, PlayerType.PlayerType_ultimateIronman, PlayerType.PlayerType_ironman, PlayerType.PlayerType_normal}; } - @ObfuscatedName("n") + @ObfuscatedName("gt") @ObfuscatedSignature( - signature = "([Lbk;II[I[II)V", - garbageValue = "2056344966" + signature = "(B)V", + garbageValue = "-5" ) - @Export("sortWorlds") - static void sortWorlds(World[] var0, int var1, int var2, int[] var3, int[] var4) { - if (var1 < var2) { - int var5 = var1 - 1; - int var6 = var2 + 1; - int var7 = (var2 + var1) / 2; - World var8 = var0[var7]; - var0[var7] = var0[var1]; - var0[var1] = var8; + static final void method31() { + Client.field756 = 0; + int var0 = class51.baseX * 64 + (class215.localPlayer.x >> 7); + int var1 = VarcInt.baseY * 64 + (class215.localPlayer.y >> 7); + if (var0 >= 3053 && var0 <= 3156 && var1 >= 3056 && var1 <= 3136) { + Client.field756 = 1; + } - while (var5 < var6) { - boolean var9 = true; + if (var0 >= 3072 && var0 <= 3118 && var1 >= 9492 && var1 <= 9535) { + Client.field756 = 1; + } - int var10; - int var11; - int var12; - do { - --var6; - - for (var10 = 0; var10 < 4; ++var10) { - if (var3[var10] == 2) { - var11 = var0[var6].index; - var12 = var8.index; - } else if (var3[var10] == 1) { - var11 = var0[var6].population; - var12 = var8.population; - if (var11 == -1 && var4[var10] == 1) { - var11 = 2001; - } - - if (var12 == -1 && var4[var10] == 1) { - var12 = 2001; - } - } else if (var3[var10] == 3) { - var11 = var0[var6].isMembersOnly() ? 1 : 0; - var12 = var8.isMembersOnly() ? 1 : 0; - } else { - var11 = var0[var6].id; - var12 = var8.id; - } - - if (var11 != var12) { - if ((var4[var10] != 1 || var11 <= var12) && (var4[var10] != 0 || var11 >= var12)) { - var9 = false; - } - break; - } - - if (var10 == 3) { - var9 = false; - } - } - } while(var9); - - var9 = true; - - do { - ++var5; - - for (var10 = 0; var10 < 4; ++var10) { - if (var3[var10] == 2) { - var11 = var0[var5].index; - var12 = var8.index; - } else if (var3[var10] == 1) { - var11 = var0[var5].population; - var12 = var8.population; - if (var11 == -1 && var4[var10] == 1) { - var11 = 2001; - } - - if (var12 == -1 && var4[var10] == 1) { - var12 = 2001; - } - } else if (var3[var10] == 3) { - var11 = var0[var5].isMembersOnly() ? 1 : 0; - var12 = var8.isMembersOnly() ? 1 : 0; - } else { - var11 = var0[var5].id; - var12 = var8.id; - } - - if (var11 != var12) { - if ((var4[var10] != 1 || var11 >= var12) && (var4[var10] != 0 || var11 <= var12)) { - var9 = false; - } - break; - } - - if (var10 == 3) { - var9 = false; - } - } - } while(var9); - - if (var5 < var6) { - World var13 = var0[var5]; - var0[var5] = var0[var6]; - var0[var6] = var13; - } - } - - sortWorlds(var0, var1, var6, var3, var4); - sortWorlds(var0, var6 + 1, var2, var3, var4); + if (Client.field756 == 1 && var0 >= 3139 && var0 <= 3199 && var1 >= 3008 && var1 <= 3062) { + Client.field756 = 0; } } - @ObfuscatedName("c") + @ObfuscatedName("hq") @ObfuscatedSignature( - signature = "(Lkf;I)V", - garbageValue = "-1107196386" + signature = "(I)V", + garbageValue = "-487610810" ) - static final void method49(PacketBuffer var0) { - for (int var1 = 0; var1 < Players.Players_pendingUpdateCount; ++var1) { - int var2 = Players.Players_pendingUpdateIndices[var1]; - Player var3 = Client.players[var2]; - int var4 = var0.readUnsignedByte(); - if ((var4 & 2) != 0) { - var4 += var0.readUnsignedByte() << 8; - } - - class189.method3797(var0, var2, var3, var4); - } - - } - - @ObfuscatedName("b") - @ObfuscatedSignature( - signature = "(ILcj;ZB)I", - garbageValue = "59" - ) - static int method32(int var0, Script var1, boolean var2) { - Widget var3; - if (var0 == ScriptOpcodes.IF_GETINVOBJECT) { - var3 = PacketBufferNode.getWidget(Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]); - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.itemId; - return 1; - } else if (var0 == ScriptOpcodes.IF_GETINVCOUNT) { - var3 = PacketBufferNode.getWidget(Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]); - if (var3.itemId != -1) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.itemQuantity; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - } - - return 1; - } else if (var0 == ScriptOpcodes.IF_HASSUB) { - int var5 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - InterfaceParent var4 = (InterfaceParent)Client.interfaceParents.get((long)var5); - if (var4 != null) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 1; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - } - - return 1; - } else if (var0 == ScriptOpcodes.IF_GETTOP) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = Client.rootInterface; - return 1; - } else { - return 2; - } + @Export("addCancelMenuEntry") + static void addCancelMenuEntry() { + RouteStrategy.method3641(); + Client.menuActions[0] = "Cancel"; + Client.menuTargets[0] = ""; + Client.menuOpcodes[0] = 1006; + Client.menuShiftClick[0] = false; + Client.menuOptionsCount = 1; } } diff --git a/runescape-client/src/main/java/class208.java b/runescape-client/src/main/java/class208.java index f4afd5d922..d891b9cc28 100644 --- a/runescape-client/src/main/java/class208.java +++ b/runescape-client/src/main/java/class208.java @@ -1,13 +1,19 @@ -import net.runelite.mapping.Export; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("hg") +@ObfuscatedName("hr") public class class208 { - @ObfuscatedName("q") + @ObfuscatedName("je") @ObfuscatedSignature( - signature = "[Llw;" + signature = "(II)V", + garbageValue = "682234129" ) - @Export("runesSprite") - static IndexedSprite[] runesSprite; + static void method4017(int var0) { + Tiles.tempMenuAction = new MenuAction(); + Tiles.tempMenuAction.param0 = Client.menuArguments1[var0]; + Tiles.tempMenuAction.param1 = Client.menuArguments2[var0]; + Tiles.tempMenuAction.opcode = Client.menuOpcodes[var0]; + Tiles.tempMenuAction.identifier = Client.menuIdentifiers[var0]; + Tiles.tempMenuAction.action = Client.menuActions[var0]; + } } diff --git a/runescape-client/src/main/java/class210.java b/runescape-client/src/main/java/class210.java index 3c16418b82..b467d5ac0a 100644 --- a/runescape-client/src/main/java/class210.java +++ b/runescape-client/src/main/java/class210.java @@ -2,12 +2,28 @@ import net.runelite.mapping.Export; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("hw") +@ObfuscatedName("ha") public class class210 { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lhx;" + signature = "Lhg;" ) @Export("huffman") static Huffman huffman; + @ObfuscatedName("df") + @ObfuscatedSignature( + signature = "Lij;" + ) + @Export("archive15") + static Archive archive15; + + @ObfuscatedName("u") + @ObfuscatedSignature( + signature = "(IB)Z", + garbageValue = "1" + ) + @Export("isWorldMapEvent") + public static boolean isWorldMapEvent(int var0) { + return var0 == 10 || var0 == 11 || var0 == 12 || var0 == 13 || var0 == 14 || var0 == 15 || var0 == 16 || var0 == 17; + } } diff --git a/runescape-client/src/main/java/class215.java b/runescape-client/src/main/java/class215.java index 2453f203bc..9269bf6d3d 100644 --- a/runescape-client/src/main/java/class215.java +++ b/runescape-client/src/main/java/class215.java @@ -1,31 +1,118 @@ +import java.util.Date; import net.runelite.mapping.Export; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("hh") +@ObfuscatedName("hc") public class class215 { - @ObfuscatedName("a") - public static final short[] field2524; - @ObfuscatedName("t") - public static final short[][] field2527; - @ObfuscatedName("n") - public static final short[] field2526; - @ObfuscatedName("q") - public static final short[][] field2525; - @ObfuscatedName("o") - @Export("Widget_loadedInterfaces") - static boolean[] Widget_loadedInterfaces; - @ObfuscatedName("jp") + @ObfuscatedName("u") + public static final short[] field2553; + @ObfuscatedName("f") + public static final short[][] field2554; + @ObfuscatedName("b") + public static final short[] field2555; + @ObfuscatedName("g") + public static final short[][] field2556; + @ObfuscatedName("jg") @ObfuscatedSignature( - signature = "Lbj;" + signature = "Lbg;" ) @Export("localPlayer") static Player localPlayer; static { - field2524 = new short[]{6798, 8741, 25238, 4626, 4550}; - field2527 = 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, 17050, 0, 127, -31821, -17991}}; - field2526 = new short[]{-10304, 9104, -1, -1, -1}; - field2525 = 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]}; + field2553 = new short[]{6798, 8741, 25238, 4626, 4550}; + field2554 = 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, 17050, 0, 127, -31821, -17991}}; + field2555 = new short[]{-10304, 9104, -1, -1, -1}; + field2556 = 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]}; + } + + @ObfuscatedName("u") + public static String method4107(long var0) { + Calendar.Calendar_calendar.setTime(new Date(var0)); + int var2 = Calendar.Calendar_calendar.get(7); + int var3 = Calendar.Calendar_calendar.get(5); + int var4 = Calendar.Calendar_calendar.get(2); + int var5 = Calendar.Calendar_calendar.get(1); + int var6 = Calendar.Calendar_calendar.get(11); + int var7 = Calendar.Calendar_calendar.get(12); + int var8 = Calendar.Calendar_calendar.get(13); + return Calendar.DAYS_OF_THE_WEEK[var2 - 1] + ", " + var3 / 10 + var3 % 10 + "-" + Calendar.MONTH_NAMES_ENGLISH_GERMAN[0][var4] + "-" + var5 + " " + var6 / 10 + var6 % 10 + ":" + var7 / 10 + var7 % 10 + ":" + var8 / 10 + var8 % 10 + " GMT"; + } + + @ObfuscatedName("z") + @ObfuscatedSignature( + signature = "(II)Z", + garbageValue = "-266411833" + ) + public static boolean method4109(int var0) { + return (var0 >> 28 & 1) != 0; + } + + @ObfuscatedName("y") + @ObfuscatedSignature( + signature = "(B)Lbp;", + garbageValue = "11" + ) + @Export("worldListStart") + static World worldListStart() { + World.World_listCount = 0; + return class1.getNextWorldListWorld(); + } + + @ObfuscatedName("k") + @ObfuscatedSignature( + signature = "(Lhl;II)V", + garbageValue = "-533356925" + ) + @Export("Widget_setKeyIgnoreHeld") + static final void Widget_setKeyIgnoreHeld(Widget var0, int var1) { + if (var0.field2592 == null) { + throw new RuntimeException(); + } else { + if (var0.field2695 == null) { + var0.field2695 = new int[var0.field2592.length]; + } + + var0.field2695[var1] = Integer.MAX_VALUE; + } + } + + @ObfuscatedName("hj") + @ObfuscatedSignature( + signature = "(Lbe;I)V", + garbageValue = "2102952401" + ) + static final void method4108(PendingSpawn var0) { + long var1 = 0L; + int var3 = -1; + int var4 = 0; + int var5 = 0; + if (var0.type == 0) { + var1 = class2.scene.getBoundaryObjectTag(var0.plane, var0.x, var0.y); + } + + if (var0.type == 1) { + var1 = class2.scene.getWallDecorationTag(var0.plane, var0.x, var0.y); + } + + if (var0.type == 2) { + var1 = class2.scene.getGameObjectTag(var0.plane, var0.x, var0.y); + } + + if (var0.type == 3) { + var1 = class2.scene.getFloorDecorationTag(var0.plane, var0.x, var0.y); + } + + if (var1 != 0L) { + int var6 = class2.scene.getObjectFlags(var0.plane, var0.x, var0.y, var1); + var3 = ItemContainer.Entity_unpackID(var1); + var4 = var6 & 31; + var5 = var6 >> 6 & 3; + } + + var0.objectId = var3; + var0.field924 = var4; + var0.field929 = var5; } } diff --git a/runescape-client/src/main/java/class216.java b/runescape-client/src/main/java/class216.java index 57b653960d..8702578863 100644 --- a/runescape-client/src/main/java/class216.java +++ b/runescape-client/src/main/java/class216.java @@ -1,166 +1,26 @@ import net.runelite.mapping.Export; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("hb") +@ObfuscatedName("hv") public class class216 { - @ObfuscatedName("sd") + @ObfuscatedName("z") + @Export("SpriteBuffer_yOffsets") + static int[] SpriteBuffer_yOffsets; + @ObfuscatedName("y") + @Export("ByteArrayPool_altSizeArrayCounts") + static int[] ByteArrayPool_altSizeArrayCounts; + + @ObfuscatedName("v") @ObfuscatedSignature( - signature = "Llk;" + signature = "(Ljava/lang/String;II)V", + garbageValue = "-126430026" ) - @Export("platformInfo") - static PlatformInfo platformInfo; - @ObfuscatedName("dg") - @ObfuscatedSignature( - signature = "Lij;" - ) - @Export("archive6") - static Archive archive6; - - @ObfuscatedName("am") - @ObfuscatedSignature( - signature = "(ILcj;ZI)I", - garbageValue = "-855506422" - ) - static int method4196(int var0, Script var1, boolean var2) { - int var3; - if (var0 == ScriptOpcodes.STOCKMARKET_GETOFFERTYPE) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = Client.grandExchangeOffers[var3].type(); - return 1; - } else if (var0 == ScriptOpcodes.STOCKMARKET_GETOFFERITEM) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = Client.grandExchangeOffers[var3].id; - return 1; - } else if (var0 == ScriptOpcodes.STOCKMARKET_GETOFFERPRICE) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = Client.grandExchangeOffers[var3].unitPrice; - return 1; - } else if (var0 == ScriptOpcodes.STOCKMARKET_GETOFFERCOUNT) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = Client.grandExchangeOffers[var3].totalQuantity; - return 1; - } else if (var0 == ScriptOpcodes.STOCKMARKET_GETOFFERCOMPLETEDCOUNT) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = Client.grandExchangeOffers[var3].currentQuantity; - return 1; - } else if (var0 == ScriptOpcodes.STOCKMARKET_GETOFFERCOMPLETEDGOLD) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = Client.grandExchangeOffers[var3].currentPrice; - return 1; - } else { - int var12; - if (var0 == ScriptOpcodes.STOCKMARKET_ISOFFEREMPTY) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - var12 = Client.grandExchangeOffers[var3].status(); - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var12 == 0 ? 1 : 0; - return 1; - } else if (var0 == ScriptOpcodes.STOCKMARKET_ISOFFERSTABLE) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - var12 = Client.grandExchangeOffers[var3].status(); - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var12 == 2 ? 1 : 0; - return 1; - } else if (var0 == ScriptOpcodes.STOCKMARKET_ISOFFERFINISHED) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - var12 = Client.grandExchangeOffers[var3].status(); - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var12 == 5 ? 1 : 0; - return 1; - } else if (var0 == ScriptOpcodes.STOCKMARKET_ISOFFERADDING) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - var12 = Client.grandExchangeOffers[var3].status(); - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var12 == 1 ? 1 : 0; - return 1; - } else { - boolean var13; - if (var0 == ScriptOpcodes.TRADINGPOST_SORTBY_NAME) { - var13 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - if (WorldMapData_1.grandExchangeEvents != null) { - WorldMapData_1.grandExchangeEvents.sort(GrandExchangeEvents.GrandExchangeEvents_nameComparator, var13); - } - - return 1; - } else if (var0 == ScriptOpcodes.TRADINGPOST_SORTBY_PRICE) { - var13 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - if (WorldMapData_1.grandExchangeEvents != null) { - WorldMapData_1.grandExchangeEvents.sort(GrandExchangeEvents.GrandExchangeEvents_priceComparator, var13); - } - - return 1; - } else if (var0 == ScriptOpcodes.TRADINGPOST_SORTFILTERBY_WORLD) { - Interpreter.Interpreter_intStackSize -= 2; - var13 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize] == 1; - boolean var4 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1] == 1; - if (WorldMapData_1.grandExchangeEvents != null) { - Client.GrandExchangeEvents_worldComparator.filterWorlds = var4; - WorldMapData_1.grandExchangeEvents.sort(Client.GrandExchangeEvents_worldComparator, var13); - } - - return 1; - } else if (var0 == ScriptOpcodes.TRADINGPOST_SORTBY_AGE) { - var13 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - if (WorldMapData_1.grandExchangeEvents != null) { - WorldMapData_1.grandExchangeEvents.sort(GrandExchangeEvents.GrandExchangeEvents_ageComparator, var13); - } - - return 1; - } else if (var0 == ScriptOpcodes.TRADINGPOST_SORTBY_COUNT) { - var13 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - if (WorldMapData_1.grandExchangeEvents != null) { - WorldMapData_1.grandExchangeEvents.sort(GrandExchangeEvents.GrandExchangeEvents_quantityComparator, var13); - } - - return 1; - } else if (var0 == ScriptOpcodes.TRADINGPOST_GETTOTALOFFERS) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = WorldMapData_1.grandExchangeEvents == null ? 0 : WorldMapData_1.grandExchangeEvents.events.size(); - return 1; - } else { - GrandExchangeEvent var11; - if (var0 == ScriptOpcodes.TRADINGPOST_GETOFFERWORLD) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - var11 = (GrandExchangeEvent)WorldMapData_1.grandExchangeEvents.events.get(var3); - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var11.world; - return 1; - } else if (var0 == ScriptOpcodes.TRADINGPOST_GETOFFERNAME) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - var11 = (GrandExchangeEvent)WorldMapData_1.grandExchangeEvents.events.get(var3); - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var11.getOfferName(); - return 1; - } else if (var0 == ScriptOpcodes.TRADINGPOST_GETOFFERPREVIOUSNAME) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - var11 = (GrandExchangeEvent)WorldMapData_1.grandExchangeEvents.events.get(var3); - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var11.getPreviousOfferName(); - return 1; - } else if (var0 == ScriptOpcodes.TRADINGPOST_GETOFFERAGE) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - var11 = (GrandExchangeEvent)WorldMapData_1.grandExchangeEvents.events.get(var3); - long var5 = PlayerAppearance.currentTimeMillis() - Message.field584 - var11.age; - int var7 = (int)(var5 / 3600000L); - int var8 = (int)((var5 - (long)(var7 * 3600000)) / 60000L); - int var9 = (int)((var5 - (long)(var7 * 3600000) - (long)(var8 * 60000)) / 1000L); - String var10 = var7 + ":" + var8 / 10 + var8 % 10 + ":" + var9 / 10 + var9 % 10; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var10; - return 1; - } else if (var0 == ScriptOpcodes.TRADINGPOST_GETOFFERCOUNT) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - var11 = (GrandExchangeEvent)WorldMapData_1.grandExchangeEvents.events.get(var3); - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var11.grandExchangeOffer.totalQuantity; - return 1; - } else if (var0 == ScriptOpcodes.TRADINGPOST_GETOFFERPRICE) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - var11 = (GrandExchangeEvent)WorldMapData_1.grandExchangeEvents.events.get(var3); - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var11.grandExchangeOffer.unitPrice; - return 1; - } else if (var0 == ScriptOpcodes.TRADINGPOST_GETOFFERITEM) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - var11 = (GrandExchangeEvent)WorldMapData_1.grandExchangeEvents.events.get(var3); - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var11.grandExchangeOffer.id; - return 1; - } else { - return 2; - } - } - } - } + static final void method4118(String var0, int var1) { + PacketBufferNode var2 = ModelData0.getPacketBufferNode(ClientPacket.field2319, Client.packetWriter.isaacCipher); + var2.packetBuffer.writeByte(class173.stringCp1252NullTerminatedByteSize(var0) + 1); + var2.packetBuffer.writeStringCp1252NullTerminated(var0); + var2.packetBuffer.writeByte(var1); + Client.packetWriter.addNode(var2); } } diff --git a/runescape-client/src/main/java/class218.java b/runescape-client/src/main/java/class218.java index bad34195d2..b9df7c6c5a 100644 --- a/runescape-client/src/main/java/class218.java +++ b/runescape-client/src/main/java/class218.java @@ -1,100 +1,17 @@ import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("hk") +@ObfuscatedName("hj") public class class218 { - @ObfuscatedName("t") + @ObfuscatedName("c") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "-975900209" + signature = "(Ljava/lang/String;I)V", + garbageValue = "1649772022" ) - public static void method4255() { - synchronized(ArchiveDiskActionHandler.ArchiveDiskActionHandler_lock) { - if (ArchiveDiskActionHandler.field3132 != 0) { - ArchiveDiskActionHandler.field3132 = 1; - - try { - ArchiveDiskActionHandler.ArchiveDiskActionHandler_lock.wait(); - } catch (InterruptedException var3) { - } - } - - } - } - - @ObfuscatedName("l") - @ObfuscatedSignature( - signature = "([BIIIIIIILek;[Lfm;I)V", - garbageValue = "538821166" - ) - static final void method4263(byte[] var0, int var1, int var2, int var3, int var4, int var5, int var6, int var7, Scene var8, CollisionMap[] var9) { - Buffer var10 = new Buffer(var0); - int var11 = -1; - - while (true) { - int var12 = var10.method5623(); - if (var12 == 0) { - return; - } - - var11 += var12; - int var13 = 0; - - while (true) { - int var14 = var10.readUShortSmart(); - if (var14 == 0) { - break; - } - - var13 += var14 - 1; - int var15 = var13 & 63; - int var16 = var13 >> 6 & 63; - int var17 = var13 >> 12; - int var18 = var10.readUnsignedByte(); - int var19 = var18 >> 2; - int var20 = var18 & 3; - if (var17 == var4 && var16 >= var5 && var16 < var5 + 8 && var15 >= var6 && var15 < var6 + 8) { - ObjectDefinition var21 = WorldMapDecorationType.getObjectDefinition(var11); - int var22 = var2 + FloorDecoration.method3010(var16 & 7, var15 & 7, var7, var21.sizeX, var21.sizeY, var20); - int var25 = var16 & 7; - int var26 = var15 & 7; - int var28 = var21.sizeX; - int var29 = var21.sizeY; - int var30; - if ((var20 & 1) == 1) { - var30 = var28; - var28 = var29; - var29 = var30; - } - - int var27 = var7 & 3; - int var24; - if (var27 == 0) { - var24 = var26; - } else if (var27 == 1) { - var24 = 7 - var25 - (var28 - 1); - } else if (var27 == 2) { - var24 = 7 - var26 - (var29 - 1); - } else { - var24 = var25; - } - - var30 = var24 + var3; - if (var22 > 0 && var30 > 0 && var22 < 103 && var30 < 103) { - int var31 = var1; - if ((Tiles.Tiles_renderFlags[1][var22][var30] & 2) == 2) { - var31 = var1 - 1; - } - - CollisionMap var32 = null; - if (var31 >= 0) { - var32 = var9[var31]; - } - - class247.method4637(var1, var22, var30, var11, var20 + var7 & 3, var19, var8, var32); - } - } - } - } + static final void method4179(String var0) { + PacketBufferNode var1 = ModelData0.getPacketBufferNode(ClientPacket.field2219, Client.packetWriter.isaacCipher); + var1.packetBuffer.writeByte(class173.stringCp1252NullTerminatedByteSize(var0)); + var1.packetBuffer.writeStringCp1252NullTerminated(var0); + Client.packetWriter.addNode(var1); } } diff --git a/runescape-client/src/main/java/class219.java b/runescape-client/src/main/java/class219.java new file mode 100644 index 0000000000..45b506ce18 --- /dev/null +++ b/runescape-client/src/main/java/class219.java @@ -0,0 +1,23 @@ +import net.runelite.mapping.Export; +import net.runelite.mapping.ObfuscatedName; +import net.runelite.mapping.ObfuscatedSignature; + +@ObfuscatedName("hs") +public class class219 { + @ObfuscatedName("f") + @ObfuscatedSignature( + signature = "(Ljava/lang/Throwable;Ljava/lang/String;)Lmr;" + ) + @Export("newRunException") + public static RunException newRunException(Throwable var0, String var1) { + RunException var2; + if (var0 instanceof RunException) { + var2 = (RunException)var0; + var2.message = var2.message + ' ' + var1; + } else { + var2 = new RunException(var0, var1); + } + + return var2; + } +} diff --git a/runescape-client/src/main/java/class222.java b/runescape-client/src/main/java/class222.java index b37182dfc7..2c556af19e 100644 --- a/runescape-client/src/main/java/class222.java +++ b/runescape-client/src/main/java/class222.java @@ -1,125 +1,83 @@ import net.runelite.mapping.Export; -import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("hz") +@ObfuscatedName("ht") public class class222 { - @ObfuscatedName("o") - @Export("ByteArrayPool_altSizeArrayCounts") - static int[] ByteArrayPool_altSizeArrayCounts; - @ObfuscatedName("eh") - @ObfuscatedGetter( - intValue = -1324768135 - ) - @Export("port1") - static int port1; - - @ObfuscatedName("a") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(II)Liw;", - garbageValue = "779944842" + signature = "(IB)Ljava/lang/String;", + garbageValue = "0" ) - @Export("ItemDefinition_get") - public static ItemDefinition ItemDefinition_get(int var0) { - ItemDefinition var1 = (ItemDefinition)ItemDefinition.ItemDefinition_cached.get((long)var0); - if (var1 != null) { - return var1; - } else { - byte[] var2 = ItemDefinition.ItemDefinition_archive.takeFile(10, var0); - var1 = new ItemDefinition(); - var1.id = var0; - if (var2 != null) { - var1.decode(new Buffer(var2)); - } - - var1.post(); - if (var1.noteTemplate != -1) { - var1.genCert(ItemDefinition_get(var1.noteTemplate), ItemDefinition_get(var1.note)); - } - - if (var1.notedId != -1) { - var1.genBought(ItemDefinition_get(var1.notedId), ItemDefinition_get(var1.unnotedId)); - } - - if (var1.placeholderTemplate != -1) { - var1.genPlaceholder(ItemDefinition_get(var1.placeholderTemplate), ItemDefinition_get(var1.placeholder)); - } - - if (!ItemDefinition.ItemDefinition_inMembersWorld && var1.isMembersOnly) { - var1.name = "Members object"; - var1.isTradable = false; - var1.groundActions = null; - var1.inventoryActions = null; - var1.shiftClickIndex = -1; - var1.team = 0; - if (var1.params != null) { - boolean var3 = false; - - for (Node var4 = var1.params.first(); var4 != null; var4 = var1.params.next()) { - ParamDefinition var5 = class162.getParamDefinition((int)var4.key); - if (var5.autoDisable) { - var4.remove(); - } else { - var3 = true; - } - } - - if (!var3) { - var1.params = null; - } - } - } - - ItemDefinition.ItemDefinition_cached.put(var1, (long)var0); - return var1; - } + @Export("colorStartTag") + static String colorStartTag(int var0) { + return ""; } - @ObfuscatedName("m") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "(Ljava/lang/String;I)Ljava/lang/String;", - garbageValue = "-1844662442" + signature = "(ZI)V", + garbageValue = "-649981056" ) - public static String method4274(String var0) { - int var1 = var0.length(); - char[] var2 = new char[var1]; - byte var3 = 2; + @Export("Login_promptCredentials") + static void Login_promptCredentials(boolean var0) { + Login.Login_response1 = ""; + Login.Login_response2 = "Enter your username/email & password."; + Login.Login_response3 = ""; + Login.loginIndex = 2; + if (var0) { + Login.Login_password = ""; + } - for (int var4 = 0; var4 < var1; ++var4) { - char var5 = var0.charAt(var4); - if (var3 == 0) { - var5 = Character.toLowerCase(var5); - } else if (var3 == 2 || Character.isUpperCase(var5)) { - var5 = class173.method3720(var5); - } - - if (Character.isLetter(var5)) { - var3 = 0; - } else if (var5 != '.' && var5 != '?' && var5 != '!') { - if (Character.isSpaceChar(var5)) { - if (var3 != 2) { - var3 = 1; - } - } else { - var3 = 1; - } + if (Login.Login_username == null || Login.Login_username.length() <= 0) { + if (UserComparator10.clientPreferences.rememberedUsername != null) { + Login.Login_username = UserComparator10.clientPreferences.rememberedUsername; + Client.Login_isUsernameRemembered = true; } else { - var3 = 2; + Client.Login_isUsernameRemembered = false; } - - var2[var4] = var5; } - return new String(var2); + Buddy.method5251(); } - @ObfuscatedName("jh") + @ObfuscatedName("k") @ObfuscatedSignature( - signature = "(B)Z", - garbageValue = "-8" + signature = "(B)V", + garbageValue = "-23" ) - static boolean method4272() { - return Client.tapToDrop || KeyHandler.KeyHandler_pressedKeys[81]; + public static void method4195() { + NPCDefinition.NpcDefinition_cached.clear(); + NPCDefinition.NpcDefinition_cachedModels.clear(); + } + + @ObfuscatedName("aj") + @ObfuscatedSignature( + signature = "([BII)I", + garbageValue = "-2031476219" + ) + public static int method4196(byte[] var0, int var1) { + return UserComparator5.method3467(var0, 0, var1); + } + + @ObfuscatedName("fy") + @ObfuscatedSignature( + signature = "(B)V", + garbageValue = "11" + ) + static final void method4198() { + if (WorldMapID.ClanChat_inClanChat) { + if (InterfaceParent.clanChat != null) { + InterfaceParent.clanChat.sort(); + } + + for (int var0 = 0; var0 < Players.Players_count; ++var0) { + Player var1 = Client.players[Players.Players_indices[var0]]; + var1.clearIsInClanChat(); + } + + WorldMapID.ClanChat_inClanChat = false; + } + } } diff --git a/runescape-client/src/main/java/class223.java b/runescape-client/src/main/java/class223.java new file mode 100644 index 0000000000..b446913d21 --- /dev/null +++ b/runescape-client/src/main/java/class223.java @@ -0,0 +1,13 @@ +import net.runelite.mapping.Export; +import net.runelite.mapping.ObfuscatedName; +import net.runelite.mapping.ObfuscatedSignature; + +@ObfuscatedName("hw") +public class class223 { + @ObfuscatedName("u") + @ObfuscatedSignature( + signature = "Lhf;" + ) + @Export("WorldMapElement_archive") + public static AbstractArchive WorldMapElement_archive; +} diff --git a/runescape-client/src/main/java/class225.java b/runescape-client/src/main/java/class225.java new file mode 100644 index 0000000000..fa701eea6d --- /dev/null +++ b/runescape-client/src/main/java/class225.java @@ -0,0 +1,49 @@ +import net.runelite.mapping.Export; +import net.runelite.mapping.ObfuscatedName; +import net.runelite.mapping.ObfuscatedSignature; + +@ObfuscatedName("hu") +public class class225 { + @ObfuscatedName("gz") + @ObfuscatedSignature( + signature = "Lln;" + ) + @Export("redHintArrowSprite") + static Sprite redHintArrowSprite; + + @ObfuscatedName("ii") + @ObfuscatedSignature( + signature = "([Lhl;IIIZI)V", + garbageValue = "-1828804382" + ) + @Export("resizeInterface") + static void resizeInterface(Widget[] var0, int var1, int var2, int var3, boolean var4) { + for (int var5 = 0; var5 < var0.length; ++var5) { + Widget var6 = var0[var5]; + if (var6 != null && var6.parentId == var1) { + WorldMapSection1.alignWidgetSize(var6, var2, var3, var4); + PendingSpawn.alignWidgetPosition(var6, var2, var3); + if (var6.scrollX > var6.scrollWidth - var6.width) { + var6.scrollX = var6.scrollWidth - var6.width; + } + + if (var6.scrollX < 0) { + var6.scrollX = 0; + } + + if (var6.scrollY > var6.scrollHeight - var6.height) { + var6.scrollY = var6.scrollHeight - var6.height; + } + + if (var6.scrollY < 0) { + var6.scrollY = 0; + } + + if (var6.type == 0) { + MilliClock.revalidateWidgetScroll(var0, var6, var4); + } + } + } + + } +} diff --git a/runescape-client/src/main/java/class226.java b/runescape-client/src/main/java/class226.java index c405feef84..11a2b97931 100644 --- a/runescape-client/src/main/java/class226.java +++ b/runescape-client/src/main/java/class226.java @@ -1,68 +1,56 @@ -import java.applet.Applet; -import java.net.URL; +import net.runelite.mapping.Export; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -import netscape.javascript.JSObject; -@ObfuscatedName("hc") +@ObfuscatedName("hq") public class class226 { - @ObfuscatedName("q") + @ObfuscatedName("gn") + @Export("regions") + static int[] regions; + + @ObfuscatedName("aw") @ObfuscatedSignature( - signature = "(Ljava/lang/String;ILjava/lang/String;I)Z", - garbageValue = "-1976934272" + signature = "([BI)[B", + garbageValue = "-424113908" ) - static boolean method4275(String var0, int var1, String var2) { - if (var1 == 0) { - try { - if (!class51.field416.startsWith("win")) { - throw new Exception(); - } else if (!var0.startsWith("http://") && !var0.startsWith("https://")) { - throw new Exception(); - } else { - String var13 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789?&=,.%+-_#:/*"; - - for (int var4 = 0; var4 < var0.length(); ++var4) { - if (var13.indexOf(var0.charAt(var4)) == -1) { - throw new Exception(); - } - } - - Runtime.getRuntime().exec("cmd /c start \"j\" \"" + var0 + "\""); - return true; - } - } catch (Throwable var8) { - return false; - } - } else if (var1 == 1) { - try { - Applet var7 = class51.applet; - Object[] var5 = new Object[]{(new URL(class51.applet.getCodeBase(), var0)).toString()}; - Object var3 = JSObject.getWindow(var7).call(var2, var5); - return var3 != null; - } catch (Throwable var9) { - return false; - } - } else if (var1 == 2) { - try { - class51.applet.getAppletContext().showDocument(new URL(class51.applet.getCodeBase(), var0), "_blank"); - return true; - } catch (Exception var10) { - return false; - } - } else if (var1 == 3) { - try { - class47.method923(class51.applet, "loggedout"); - } catch (Throwable var12) { - } - - try { - class51.applet.getAppletContext().showDocument(new URL(class51.applet.getCodeBase(), var0), "_top"); - return true; - } catch (Exception var11) { - return false; - } + @Export("decompressBytes") + static final byte[] decompressBytes(byte[] var0) { + Buffer var1 = new Buffer(var0); + int var2 = var1.readUnsignedByte(); + int var3 = var1.readInt(); + if (var3 < 0 || AbstractArchive.field3152 != 0 && var3 > AbstractArchive.field3152) { + throw new RuntimeException(); + } else if (var2 == 0) { + byte[] var4 = new byte[var3]; + var1.readBytes(var4, 0, var3); + return var4; } else { - throw new IllegalArgumentException(); + int var6 = var1.readInt(); + if (var6 >= 0 && (AbstractArchive.field3152 == 0 || var6 <= AbstractArchive.field3152)) { + byte[] var5 = new byte[var6]; + if (var2 == 1) { + BZip2Decompressor.BZip2Decompressor_decompress(var5, var6, var0, var3, 9); + } else { + AbstractArchive.gzipDecompressor.decompress(var1, var5); + } + + return var5; + } else { + throw new RuntimeException(); + } } } + + @ObfuscatedName("ki") + @ObfuscatedSignature( + signature = "([BIB)V", + garbageValue = "-41" + ) + static void method4200(byte[] var0, int var1) { + if (Client.randomDatData == null) { + Client.randomDatData = new byte[24]; + } + + class300.writeRandomDat(var0, var1, Client.randomDatData, 0, 24); + } } diff --git a/runescape-client/src/main/java/class227.java b/runescape-client/src/main/java/class227.java index 2e88e3b2fd..4caafcd025 100644 --- a/runescape-client/src/main/java/class227.java +++ b/runescape-client/src/main/java/class227.java @@ -1,17 +1,11 @@ +import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; -import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("hl") +@ObfuscatedName("hp") public final class class227 { - @ObfuscatedName("gl") - @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "401085216" + @ObfuscatedName("gy") + @ObfuscatedGetter( + intValue = 439347683 ) - static void method4276() { - if (Client.renderSelf) { - Player.addPlayerToScene(class215.localPlayer, false); - } - - } + static int field3092; } diff --git a/runescape-client/src/main/java/class237.java b/runescape-client/src/main/java/class237.java index 581ffdbfc6..232cbc3264 100644 --- a/runescape-client/src/main/java/class237.java +++ b/runescape-client/src/main/java/class237.java @@ -1,3 +1,4 @@ +import java.net.URL; import java.util.HashMap; import net.runelite.mapping.Export; import net.runelite.mapping.ObfuscatedGetter; @@ -6,104 +7,115 @@ import net.runelite.mapping.ObfuscatedSignature; @ObfuscatedName("if") public class class237 { - @ObfuscatedName("i") - static int[] field3174; - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("spriteMap") final HashMap spriteMap; - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lls;" + signature = "Llw;" ) @Export("bounds") Bounds bounds; - @ObfuscatedName("n") - int[] field3178; - @ObfuscatedName("q") - int[] field3172; - @ObfuscatedName("v") + @ObfuscatedName("b") + int[] field3192; + @ObfuscatedName("g") + int[] field3193; + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = -82085665 + intValue = 136920125 ) - int field3169; + int field3196; public class237() { this.spriteMap = new HashMap(); this.bounds = new Bounds(0, 0); - this.field3178 = new int[2048]; - this.field3172 = new int[2048]; - this.field3169 = 0; - MusicPatchNode2.method3829(); + this.field3192 = new int[2048]; + this.field3193 = new int[2048]; + this.field3196 = 0; + WorldMapSectionType.method265(); } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( signature = "(II)V", - garbageValue = "-324807595" + garbageValue = "-1518977792" ) - void method4474(int var1) { + void method4404(int var1) { int var2 = var1 * 2 + 1; - double[] var3 = GrandExchangeEvent.method123(0.0D, (double)((float)var1 / 3.0F), var1); - double var4 = var3[var1] * var3[var1]; - int[] var6 = new int[var2 * var2]; - boolean var7 = false; + double var4 = (double)((float)var1 / 3.0F); + int var6 = var1 * 2 + 1; + double[] var7 = new double[var6]; + int var8 = -var1; - for (int var8 = 0; var8 < var2; ++var8) { - for (int var9 = 0; var9 < var2; ++var9) { - int var10 = var6[var9 + var2 * var8] = (int)(var3[var9] * var3[var8] / var4 * 256.0D); - if (!var7 && var10 > 0) { - var7 = true; + for (int var9 = 0; var8 <= var1; ++var9) { + double var16 = (double)(var8 - 0) / var4; + double var14 = Math.exp(var16 * -var16 / 2.0D) / Math.sqrt(6.283185307179586D); + double var12 = var14 / var4; + var7[var9] = var12; + ++var8; + } + + double[] var18 = var7; + double var19 = var7[var1] * var7[var1]; + int[] var21 = new int[var2 * var2]; + boolean var22 = false; + + for (int var11 = 0; var11 < var2; ++var11) { + for (int var23 = 0; var23 < var2; ++var23) { + int var13 = var21[var23 + var11 * var2] = (int)(256.0D * (var18[var11] * var18[var23] / var19)); + if (!var22 && var13 > 0) { + var22 = true; } } } - Sprite var11 = new Sprite(var6, var2, var2); - this.spriteMap.put(var1, var11); + Sprite var24 = new Sprite(var21, var2, var2); + this.spriteMap.put(var1, var24); } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(II)Llx;", - garbageValue = "165886637" + signature = "(IS)Lln;", + garbageValue = "-15422" ) - Sprite method4475(int var1) { + Sprite method4405(int var1) { if (!this.spriteMap.containsKey(var1)) { - this.method4474(var1); + this.method4404(var1); } return (Sprite)this.spriteMap.get(var1); } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( signature = "(IIB)V", - garbageValue = "0" + garbageValue = "-106" ) - public final void method4476(int var1, int var2) { - if (this.field3169 < this.field3178.length) { - this.field3178[this.field3169] = var1; - this.field3172[this.field3169] = var2; - ++this.field3169; + public final void method4406(int var1, int var2) { + if (this.field3196 < this.field3192.length) { + this.field3192[this.field3196] = var1; + this.field3193[this.field3196] = var2; + ++this.field3196; } } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "-1020689105" + garbageValue = "-1194246226" ) - public final void method4482() { - this.field3169 = 0; + public final void method4403() { + this.field3196 = 0; } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(IILlx;FI)V", - garbageValue = "1589672394" + signature = "(IILln;FI)V", + garbageValue = "-2013920472" ) - public final void method4478(int var1, int var2, Sprite var3, float var4) { - int var5 = (int)(18.0F * var4); - Sprite var6 = this.method4475(var5); + public final void method4408(int var1, int var2, Sprite var3, float var4) { + int var5 = (int)(var4 * 18.0F); + Sprite var6 = this.method4405(var5); int var7 = var5 * 2 + 1; Bounds var8 = new Bounds(0, 0, var3.subWidth, var3.subHeight); Bounds var9 = new Bounds(0, 0); @@ -113,14 +125,14 @@ public class class237 { int var10; int var11; int var12; - for (var10 = 0; var10 < this.field3169; ++var10) { - var11 = this.field3178[var10]; - var12 = this.field3172[var10]; - int var13 = (int)(var4 * (float)(var11 - var1)) - var5; - int var14 = (int)((float)var3.subHeight - (float)(var12 - var2) * var4) - var5; + for (var10 = 0; var10 < this.field3196; ++var10) { + var11 = this.field3192[var10]; + var12 = this.field3193[var10]; + int var13 = (int)((float)(var11 - var1) * var4) - var5; + int var14 = (int)((float)var3.subHeight - var4 * (float)(var12 - var2)) - var5; this.bounds.setLow(var13, var14); - this.bounds.method6081(var8, var9); - this.method4481(var6, var3, var9); + this.bounds.method6069(var8, var9); + this.method4409(var6, var3, var9); } System.nanoTime(); @@ -134,11 +146,11 @@ public class class237 { if (var11 <= 0) { var3.pixels[var10] = -16777216; } else { - if (var11 > field3174.length) { - var11 = field3174.length; + if (var11 > Skeleton.field1788.length) { + var11 = Skeleton.field1788.length; } - var12 = field3174[var11 - 1]; + var12 = Skeleton.field1788[var11 - 1]; var3.pixels[var10] = -16777216 | var12; } } @@ -147,12 +159,12 @@ public class class237 { System.nanoTime(); } - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "(Llx;Llx;Lls;B)V", - garbageValue = "-75" + signature = "(Lln;Lln;Llw;I)V", + garbageValue = "244697744" ) - void method4481(Sprite var1, Sprite var2, Bounds var3) { + void method4409(Sprite var1, Sprite var2, Bounds var3) { if (var3.highX != 0 && var3.highY != 0) { int var4 = 0; int var5 = 0; @@ -181,22 +193,71 @@ public class class237 { } } - @ObfuscatedName("n") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(I)Z", - garbageValue = "1735465507" + signature = "(Ljava/lang/String;ILjava/lang/String;B)Z", + garbageValue = "-79" ) - @Export("isKeyDown") - public static final boolean isKeyDown() { - synchronized(KeyHandler.KeyHandler_instance) { - if (KeyHandler.field385 == KeyHandler.field370) { + static boolean method4422(String var0, int var1, String var2) { + if (var1 == 0) { + try { + if (!class51.field424.startsWith("win")) { + throw new Exception(); + } else if (!var0.startsWith("http://") && !var0.startsWith("https://")) { + throw new Exception(); + } else { + String var10 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789?&=,.%+-_#:/*"; + + for (int var4 = 0; var4 < var0.length(); ++var4) { + if (var10.indexOf(var0.charAt(var4)) == -1) { + throw new Exception(); + } + } + + Runtime.getRuntime().exec("cmd /c start \"j\" \"" + var0 + "\""); + return true; + } + } catch (Throwable var5) { return false; - } else { - WorldMapLabel.field229 = KeyHandler.field382[KeyHandler.field385]; - DevicePcmPlayerProvider.field395 = KeyHandler.field381[KeyHandler.field385]; - KeyHandler.field385 = KeyHandler.field385 + 1 & 127; - return true; } + } else if (var1 == 1) { + try { + Object var3 = class47.method865(class51.applet, var2, new Object[]{(new URL(class51.applet.getCodeBase(), var0)).toString()}); + return var3 != null; + } catch (Throwable var6) { + return false; + } + } else if (var1 == 2) { + try { + class51.applet.getAppletContext().showDocument(new URL(class51.applet.getCodeBase(), var0), "_blank"); + return true; + } catch (Exception var7) { + return false; + } + } else if (var1 == 3) { + try { + class47.method864(class51.applet, "loggedout"); + } catch (Throwable var9) { + } + + try { + class51.applet.getAppletContext().showDocument(new URL(class51.applet.getCodeBase(), var0), "_top"); + return true; + } catch (Exception var8) { + return false; + } + } else { + throw new IllegalArgumentException(); } } + + @ObfuscatedName("h") + @ObfuscatedSignature( + signature = "(I)V", + garbageValue = "-152675892" + ) + public static void method4421() { + HealthBarDefinition.HealthBarDefinition_cached.clear(); + HealthBarDefinition.HealthBarDefinition_cachedSprites.clear(); + } } diff --git a/runescape-client/src/main/java/class247.java b/runescape-client/src/main/java/class247.java index a907464567..f7971b04b5 100644 --- a/runescape-client/src/main/java/class247.java +++ b/runescape-client/src/main/java/class247.java @@ -1,511 +1,10 @@ -import net.runelite.mapping.Export; -import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; -import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ic") +@ObfuscatedName("iv") public class class247 { - @ObfuscatedName("l") - @ObfuscatedSignature( - signature = "Lhq;" - ) - @Export("musicTrackArchive") - public static AbstractArchive musicTrackArchive; - @ObfuscatedName("ha") - @ObfuscatedGetter( - intValue = -896528309 - ) - @Export("cameraPitch") - static int cameraPitch; - - @ObfuscatedName("l") - @ObfuscatedSignature( - signature = "(Lkf;IB)Z", - garbageValue = "-45" - ) - @Export("updateExternalPlayer") - static boolean updateExternalPlayer(PacketBuffer var0, int var1) { - int var2 = var0.readBits(2); - int var3; - int var4; - int var7; - int var8; - int var9; - int var10; - if (var2 == 0) { - if (var0.readBits(1) != 0) { - updateExternalPlayer(var0, var1); - } - - var3 = var0.readBits(13); - var4 = var0.readBits(13); - boolean var12 = var0.readBits(1) == 1; - if (var12) { - Players.Players_pendingUpdateIndices[++Players.Players_pendingUpdateCount - 1] = var1; - } - - if (Client.players[var1] != null) { - throw new RuntimeException(); - } else { - Player var6 = Client.players[var1] = new Player(); - var6.index = var1; - if (Players.field1229[var1] != null) { - var6.read(Players.field1229[var1]); - } - - var6.orientation = Players.Players_orientations[var1]; - var6.targetIndex = Players.Players_targetIndices[var1]; - var7 = Players.Players_regions[var1]; - var8 = var7 >> 28; - var9 = var7 >> 14 & 255; - var10 = var7 & 255; - var6.pathTraversed[0] = Players.field1228[var1]; - var6.plane = (byte)var8; - var6.resetPath((var9 << 13) + var3 - UserComparator8.baseX * 64, (var10 << 13) + var4 - HealthBar.baseY * 64); - var6.field606 = false; - return true; - } - } else if (var2 == 1) { - var3 = var0.readBits(2); - var4 = Players.Players_regions[var1]; - Players.Players_regions[var1] = (var4 & 268435455) + (((var4 >> 28) + var3 & 3) << 28); - return false; - } else { - int var5; - int var11; - if (var2 == 2) { - var3 = var0.readBits(5); - var4 = var3 >> 3; - var5 = var3 & 7; - var11 = Players.Players_regions[var1]; - var7 = (var11 >> 28) + var4 & 3; - var8 = var11 >> 14 & 255; - var9 = var11 & 255; - if (var5 == 0) { - --var8; - --var9; - } - - if (var5 == 1) { - --var9; - } - - if (var5 == 2) { - ++var8; - --var9; - } - - if (var5 == 3) { - --var8; - } - - if (var5 == 4) { - ++var8; - } - - if (var5 == 5) { - --var8; - ++var9; - } - - if (var5 == 6) { - ++var9; - } - - if (var5 == 7) { - ++var8; - ++var9; - } - - Players.Players_regions[var1] = (var8 << 14) + var9 + (var7 << 28); - return false; - } else { - var3 = var0.readBits(18); - var4 = var3 >> 16; - var5 = var3 >> 8 & 255; - var11 = var3 & 255; - var7 = Players.Players_regions[var1]; - var8 = (var7 >> 28) + var4 & 3; - var9 = var5 + (var7 >> 14) & 255; - var10 = var7 + var11 & 255; - Players.Players_regions[var1] = (var9 << 14) + var10 + (var8 << 28); - return false; - } - } - } - - @ObfuscatedName("c") - @ObfuscatedSignature( - signature = "(IIIIIILek;Lfm;B)V", - garbageValue = "-74" - ) - static final void method4637(int var0, int var1, int var2, int var3, int var4, int var5, Scene var6, CollisionMap var7) { - if (!Client.isLowDetail || (Tiles.Tiles_renderFlags[0][var1][var2] & 2) != 0 || (Tiles.Tiles_renderFlags[var0][var1][var2] & 16) == 0) { - if (var0 < Tiles.Tiles_minPlane) { - Tiles.Tiles_minPlane = var0; - } - - ObjectDefinition var8 = WorldMapDecorationType.getObjectDefinition(var3); - int var9; - int var10; - if (var4 != 1 && var4 != 3) { - var9 = var8.sizeX; - var10 = var8.sizeY; - } else { - var9 = var8.sizeY; - var10 = var8.sizeX; - } - - int var11; - int var12; - if (var9 + var1 <= 104) { - var11 = (var9 >> 1) + var1; - var12 = (var9 + 1 >> 1) + var1; - } else { - var11 = var1; - var12 = var1 + 1; - } - - int var13; - int var14; - if (var10 + var2 <= 104) { - var13 = (var10 >> 1) + var2; - var14 = var2 + (var10 + 1 >> 1); - } else { - var13 = var2; - var14 = var2 + 1; - } - - int[][] var15 = Tiles.Tiles_heights[var0]; - int var16 = var15[var11][var14] + var15[var12][var13] + var15[var11][var13] + var15[var12][var14] >> 2; - int var17 = (var1 << 7) + (var9 << 6); - int var18 = (var2 << 7) + (var10 << 6); - long var19 = class160.calculateTag(var1, var2, 2, var8.int1 == 0, var3); - int var21 = var5 + (var4 << 6); - if (var8.int3 == 1) { - var21 += 256; - } - - if (var8.hasSound()) { - ScriptEvent.method1274(var0, var1, var2, var8, var4); - } - - Object var22; - if (var5 == 22) { - if (!Client.isLowDetail || var8.int1 != 0 || var8.interactType == 1 || var8.boolean2) { - if (var8.animationId == -1 && var8.transforms == null) { - var22 = var8.getEntity(22, var4, var15, var17, var16, var18); - } else { - var22 = new DynamicObject(var3, 22, var4, var0, var1, var2, var8.animationId, true, (Entity)null); - } - - var6.newFloorDecoration(var0, var1, var2, var16, (Entity)var22, var19, var21); - if (var8.interactType == 1 && var7 != null) { - var7.setBlockedByFloorDec(var1, var2); - } - - } - } else { - int var23; - if (var5 != 10 && var5 != 11) { - int[] var10000; - if (var5 >= 12) { - if (var8.animationId == -1 && var8.transforms == null) { - var22 = var8.getEntity(var5, var4, var15, var17, var16, var18); - } else { - var22 = new DynamicObject(var3, var5, var4, var0, var1, var2, var8.animationId, true, (Entity)null); - } - - var6.method3213(var0, var1, var2, var16, 1, 1, (Entity)var22, 0, var19, var21); - if (var5 >= 12 && var5 <= 17 && var5 != 13 && var0 > 0) { - var10000 = Tiles.field488[var0][var1]; - var10000[var2] |= 2340; - } - - if (var8.interactType != 0 && var7 != null) { - var7.addGameObject(var1, var2, var9, var10, var8.boolean1); - } - - } else if (var5 == 0) { - if (var8.animationId == -1 && var8.transforms == null) { - var22 = var8.getEntity(0, var4, var15, var17, var16, var18); - } else { - var22 = new DynamicObject(var3, 0, var4, var0, var1, var2, var8.animationId, true, (Entity)null); - } - - var6.newBoundaryObject(var0, var1, var2, var16, (Entity)var22, (Entity)null, Tiles.field489[var4], 0, var19, var21); - if (var4 == 0) { - if (var8.clipped) { - class96.field1300[var0][var1][var2] = 50; - class96.field1300[var0][var1][var2 + 1] = 50; - } - - if (var8.modelClipped) { - var10000 = Tiles.field488[var0][var1]; - var10000[var2] |= 585; - } - } else if (var4 == 1) { - if (var8.clipped) { - class96.field1300[var0][var1][var2 + 1] = 50; - class96.field1300[var0][var1 + 1][var2 + 1] = 50; - } - - if (var8.modelClipped) { - var10000 = Tiles.field488[var0][var1]; - var10000[1 + var2] |= 1170; - } - } else if (var4 == 2) { - if (var8.clipped) { - class96.field1300[var0][var1 + 1][var2] = 50; - class96.field1300[var0][var1 + 1][var2 + 1] = 50; - } - - if (var8.modelClipped) { - var10000 = Tiles.field488[var0][var1 + 1]; - var10000[var2] |= 585; - } - } else if (var4 == 3) { - if (var8.clipped) { - class96.field1300[var0][var1][var2] = 50; - class96.field1300[var0][var1 + 1][var2] = 50; - } - - if (var8.modelClipped) { - var10000 = Tiles.field488[var0][var1]; - var10000[var2] |= 1170; - } - } - - if (var8.interactType != 0 && var7 != null) { - var7.method3685(var1, var2, var5, var4, var8.boolean1); - } - - if (var8.int2 != 16) { - var6.method3327(var0, var1, var2, var8.int2); - } - - } else if (var5 == 1) { - if (var8.animationId == -1 && var8.transforms == null) { - var22 = var8.getEntity(1, var4, var15, var17, var16, var18); - } else { - var22 = new DynamicObject(var3, 1, var4, var0, var1, var2, var8.animationId, true, (Entity)null); - } - - var6.newBoundaryObject(var0, var1, var2, var16, (Entity)var22, (Entity)null, Tiles.field490[var4], 0, var19, var21); - if (var8.clipped) { - if (var4 == 0) { - class96.field1300[var0][var1][var2 + 1] = 50; - } else if (var4 == 1) { - class96.field1300[var0][var1 + 1][var2 + 1] = 50; - } else if (var4 == 2) { - class96.field1300[var0][var1 + 1][var2] = 50; - } else if (var4 == 3) { - class96.field1300[var0][var1][var2] = 50; - } - } - - if (var8.interactType != 0 && var7 != null) { - var7.method3685(var1, var2, var5, var4, var8.boolean1); - } - - } else { - int var28; - if (var5 == 2) { - var28 = var4 + 1 & 3; - Object var29; - Object var30; - if (var8.animationId == -1 && var8.transforms == null) { - var29 = var8.getEntity(2, var4 + 4, var15, var17, var16, var18); - var30 = var8.getEntity(2, var28, var15, var17, var16, var18); - } else { - var29 = new DynamicObject(var3, 2, var4 + 4, var0, var1, var2, var8.animationId, true, (Entity)null); - var30 = new DynamicObject(var3, 2, var28, var0, var1, var2, var8.animationId, true, (Entity)null); - } - - var6.newBoundaryObject(var0, var1, var2, var16, (Entity)var29, (Entity)var30, Tiles.field489[var4], Tiles.field489[var28], var19, var21); - if (var8.modelClipped) { - if (var4 == 0) { - var10000 = Tiles.field488[var0][var1]; - var10000[var2] |= 585; - var10000 = Tiles.field488[var0][var1]; - var10000[1 + var2] |= 1170; - } else if (var4 == 1) { - var10000 = Tiles.field488[var0][var1]; - var10000[1 + var2] |= 1170; - var10000 = Tiles.field488[var0][var1 + 1]; - var10000[var2] |= 585; - } else if (var4 == 2) { - var10000 = Tiles.field488[var0][var1 + 1]; - var10000[var2] |= 585; - var10000 = Tiles.field488[var0][var1]; - var10000[var2] |= 1170; - } else if (var4 == 3) { - var10000 = Tiles.field488[var0][var1]; - var10000[var2] |= 1170; - var10000 = Tiles.field488[var0][var1]; - var10000[var2] |= 585; - } - } - - if (var8.interactType != 0 && var7 != null) { - var7.method3685(var1, var2, var5, var4, var8.boolean1); - } - - if (var8.int2 != 16) { - var6.method3327(var0, var1, var2, var8.int2); - } - - } else if (var5 == 3) { - if (var8.animationId == -1 && var8.transforms == null) { - var22 = var8.getEntity(3, var4, var15, var17, var16, var18); - } else { - var22 = new DynamicObject(var3, 3, var4, var0, var1, var2, var8.animationId, true, (Entity)null); - } - - var6.newBoundaryObject(var0, var1, var2, var16, (Entity)var22, (Entity)null, Tiles.field490[var4], 0, var19, var21); - if (var8.clipped) { - if (var4 == 0) { - class96.field1300[var0][var1][var2 + 1] = 50; - } else if (var4 == 1) { - class96.field1300[var0][var1 + 1][var2 + 1] = 50; - } else if (var4 == 2) { - class96.field1300[var0][var1 + 1][var2] = 50; - } else if (var4 == 3) { - class96.field1300[var0][var1][var2] = 50; - } - } - - if (var8.interactType != 0 && var7 != null) { - var7.method3685(var1, var2, var5, var4, var8.boolean1); - } - - } else if (var5 == 9) { - if (var8.animationId == -1 && var8.transforms == null) { - var22 = var8.getEntity(var5, var4, var15, var17, var16, var18); - } else { - var22 = new DynamicObject(var3, var5, var4, var0, var1, var2, var8.animationId, true, (Entity)null); - } - - var6.method3213(var0, var1, var2, var16, 1, 1, (Entity)var22, 0, var19, var21); - if (var8.interactType != 0 && var7 != null) { - var7.addGameObject(var1, var2, var9, var10, var8.boolean1); - } - - if (var8.int2 != 16) { - var6.method3327(var0, var1, var2, var8.int2); - } - - } else if (var5 == 4) { - if (var8.animationId == -1 && var8.transforms == null) { - var22 = var8.getEntity(4, var4, var15, var17, var16, var18); - } else { - var22 = new DynamicObject(var3, 4, var4, var0, var1, var2, var8.animationId, true, (Entity)null); - } - - var6.newWallDecoration(var0, var1, var2, var16, (Entity)var22, (Entity)null, Tiles.field489[var4], 0, 0, 0, var19, var21); - } else { - long var31; - Object var33; - if (var5 == 5) { - var28 = 16; - var31 = var6.getBoundaryObjectTag(var0, var1, var2); - if (0L != var31) { - var28 = WorldMapDecorationType.getObjectDefinition(UserComparator8.Entity_unpackID(var31)).int2; - } - - if (var8.animationId == -1 && var8.transforms == null) { - var33 = var8.getEntity(4, var4, var15, var17, var16, var18); - } else { - var33 = new DynamicObject(var3, 4, var4, var0, var1, var2, var8.animationId, true, (Entity)null); - } - - var6.newWallDecoration(var0, var1, var2, var16, (Entity)var33, (Entity)null, Tiles.field489[var4], 0, var28 * Tiles.field491[var4], var28 * Tiles.field498[var4], var19, var21); - } else if (var5 == 6) { - var28 = 8; - var31 = var6.getBoundaryObjectTag(var0, var1, var2); - if (var31 != 0L) { - var28 = WorldMapDecorationType.getObjectDefinition(UserComparator8.Entity_unpackID(var31)).int2 / 2; - } - - if (var8.animationId == -1 && var8.transforms == null) { - var33 = var8.getEntity(4, var4 + 4, var15, var17, var16, var18); - } else { - var33 = new DynamicObject(var3, 4, var4 + 4, var0, var1, var2, var8.animationId, true, (Entity)null); - } - - var6.newWallDecoration(var0, var1, var2, var16, (Entity)var33, (Entity)null, 256, var4, var28 * Tiles.field493[var4], var28 * Tiles.field494[var4], var19, var21); - } else if (var5 == 7) { - var23 = var4 + 2 & 3; - if (var8.animationId == -1 && var8.transforms == null) { - var22 = var8.getEntity(4, var23 + 4, var15, var17, var16, var18); - } else { - var22 = new DynamicObject(var3, 4, var23 + 4, var0, var1, var2, var8.animationId, true, (Entity)null); - } - - var6.newWallDecoration(var0, var1, var2, var16, (Entity)var22, (Entity)null, 256, var23, 0, 0, var19, var21); - } else if (var5 == 8) { - var28 = 8; - var31 = var6.getBoundaryObjectTag(var0, var1, var2); - if (var31 != 0L) { - var28 = WorldMapDecorationType.getObjectDefinition(UserComparator8.Entity_unpackID(var31)).int2 / 2; - } - - int var27 = var4 + 2 & 3; - Object var26; - if (var8.animationId == -1 && var8.transforms == null) { - var33 = var8.getEntity(4, var4 + 4, var15, var17, var16, var18); - var26 = var8.getEntity(4, var27 + 4, var15, var17, var16, var18); - } else { - var33 = new DynamicObject(var3, 4, var4 + 4, var0, var1, var2, var8.animationId, true, (Entity)null); - var26 = new DynamicObject(var3, 4, var27 + 4, var0, var1, var2, var8.animationId, true, (Entity)null); - } - - var6.newWallDecoration(var0, var1, var2, var16, (Entity)var33, (Entity)var26, 256, var4, var28 * Tiles.field493[var4], var28 * Tiles.field494[var4], var19, var21); - } - } - } - } else { - if (var8.animationId == -1 && var8.transforms == null) { - var22 = var8.getEntity(10, var4, var15, var17, var16, var18); - } else { - var22 = new DynamicObject(var3, 10, var4, var0, var1, var2, var8.animationId, true, (Entity)null); - } - - if (var22 != null && var6.method3213(var0, var1, var2, var16, var9, var10, (Entity)var22, var5 == 11 ? 256 : 0, var19, var21) && var8.clipped) { - var23 = 15; - if (var22 instanceof Model) { - var23 = ((Model)var22).method3027() / 4; - if (var23 > 30) { - var23 = 30; - } - } - - for (int var24 = 0; var24 <= var9; ++var24) { - for (int var25 = 0; var25 <= var10; ++var25) { - if (var23 > class96.field1300[var0][var24 + var1][var25 + var2]) { - class96.field1300[var0][var24 + var1][var25 + var2] = (byte)var23; - } - } - } - } - - if (var8.interactType != 0 && var7 != null) { - var7.addGameObject(var1, var2, var9, var10, var8.boolean1); - } - - } - } - } - } - - @ObfuscatedName("r") - @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "1946170477" - ) - static final void method4642() { - Object var10000 = null; - String var0 = "You can't add yourself to your own ignore list"; - class30.addGameMessage(30, "", var0); + @ObfuscatedName("u") + static boolean method4577(long var0) { + int var2 = (int)(var0 >>> 14 & 3L); + return var2 == 2; } } diff --git a/runescape-client/src/main/java/class266.java b/runescape-client/src/main/java/class266.java index 25d3fbe94e..e29db1326b 100644 --- a/runescape-client/src/main/java/class266.java +++ b/runescape-client/src/main/java/class266.java @@ -4,15 +4,49 @@ import net.runelite.mapping.ObfuscatedSignature; @ObfuscatedName("jy") public class class266 { - @ObfuscatedName("lq") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "69" + signature = "Lhf;" ) - @Export("Clan_leaveChat") - static final void Clan_leaveChat() { - PacketBufferNode var0 = SoundSystem.getPacketBufferNode(ClientPacket.field2267, Client.packetWriter.isaacCipher); - var0.packetBuffer.writeByte(0); - Client.packetWriter.addNode(var0); + @Export("ItemDefinition_modelArchive") + static AbstractArchive ItemDefinition_modelArchive; + + @ObfuscatedName("u") + @ObfuscatedSignature( + signature = "(IIII)I", + garbageValue = "1187459015" + ) + public static int method5065(int var0, int var1, int var2) { + var2 &= 3; + if (var2 == 0) { + return var0; + } else if (var2 == 1) { + return var1; + } else { + return var2 == 2 ? 7 - var0 : 7 - var1; + } + } + + @ObfuscatedName("x") + @ObfuscatedSignature( + signature = "(IIB)I", + garbageValue = "-67" + ) + static final int method5066(int var0, int var1) { + int var2 = GrandExchangeOfferWorldComparator.method76(var0 - 1, var1 - 1) + GrandExchangeOfferWorldComparator.method76(1 + var0, var1 - 1) + GrandExchangeOfferWorldComparator.method76(var0 - 1, 1 + var1) + GrandExchangeOfferWorldComparator.method76(1 + var0, var1 + 1); + int var3 = GrandExchangeOfferWorldComparator.method76(var0 - 1, var1) + GrandExchangeOfferWorldComparator.method76(1 + var0, var1) + GrandExchangeOfferWorldComparator.method76(var0, var1 - 1) + GrandExchangeOfferWorldComparator.method76(var0, 1 + var1); + int var4 = GrandExchangeOfferWorldComparator.method76(var0, var1); + return var2 / 16 + var3 / 8 + var4 / 4; + } + + @ObfuscatedName("es") + @ObfuscatedSignature( + signature = "(Lij;Ljava/lang/String;I)V", + garbageValue = "-1313176939" + ) + static void method5064(Archive var0, String var1) { + ArchiveLoader var2 = new ArchiveLoader(var0, var1); + Client.archiveLoaders.add(var2); + Client.field914 += var2.groupCount; } } diff --git a/runescape-client/src/main/java/class267.java b/runescape-client/src/main/java/class267.java new file mode 100644 index 0000000000..38eb764feb --- /dev/null +++ b/runescape-client/src/main/java/class267.java @@ -0,0 +1,451 @@ +import net.runelite.mapping.Export; +import net.runelite.mapping.ObfuscatedName; +import net.runelite.mapping.ObfuscatedSignature; +import net.runelite.rs.ScriptOpcodes; + +@ObfuscatedName("jc") +public class class267 { + @ObfuscatedName("dv") + @ObfuscatedSignature( + signature = "Lij;" + ) + @Export("archive12") + static Archive archive12; + + @ObfuscatedName("v") + @ObfuscatedSignature( + signature = "(ILci;ZI)I", + garbageValue = "2022043883" + ) + static int method5067(int var0, Script var1, boolean var2) { + Widget var3; + if (var0 == ScriptOpcodes.IF_GETINVOBJECT) { + var3 = Language.getWidget(Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]); + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.itemId; + return 1; + } else if (var0 == ScriptOpcodes.IF_GETINVCOUNT) { + var3 = Language.getWidget(Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]); + if (var3.itemId != -1) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3.itemQuantity; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + } + + return 1; + } else if (var0 == ScriptOpcodes.IF_HASSUB) { + int var5 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + InterfaceParent var4 = (InterfaceParent)Client.interfaceParents.get((long)var5); + if (var4 != null) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 1; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + } + + return 1; + } else if (var0 == ScriptOpcodes.IF_GETTOP) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Client.rootInterface; + return 1; + } else { + return 2; + } + } + + @ObfuscatedName("hm") + @ObfuscatedSignature( + signature = "(B)V", + garbageValue = "8" + ) + static final void method5068() { + InterfaceParent.method1197(false); + Client.field676 = 0; + boolean var0 = true; + + int var1; + for (var1 = 0; var1 < VerticalAlignment.regionLandArchives.length; ++var1) { + if (BuddyRankComparator.regionMapArchiveIds[var1] != -1 && VerticalAlignment.regionLandArchives[var1] == null) { + VerticalAlignment.regionLandArchives[var1] = DirectByteArrayCopier.archive5.takeFile(BuddyRankComparator.regionMapArchiveIds[var1], 0); + if (VerticalAlignment.regionLandArchives[var1] == null) { + var0 = false; + ++Client.field676; + } + } + + if (GrandExchangeOfferAgeComparator.regionLandArchiveIds[var1] != -1 && UrlRequest.regionMapArchives[var1] == null) { + UrlRequest.regionMapArchives[var1] = DirectByteArrayCopier.archive5.takeFileEncrypted(GrandExchangeOfferAgeComparator.regionLandArchiveIds[var1], 0, WorldMapIcon_0.xteaKeys[var1]); + if (UrlRequest.regionMapArchives[var1] == null) { + var0 = false; + ++Client.field676; + } + } + } + + if (!var0) { + Client.field699 = 1; + } else { + Client.field850 = 0; + var0 = true; + + int var3; + int var4; + for (var1 = 0; var1 < VerticalAlignment.regionLandArchives.length; ++var1) { + byte[] var2 = UrlRequest.regionMapArchives[var1]; + if (var2 != null) { + var3 = (class226.regions[var1] >> 8) * 64 - class51.baseX * 64; + var4 = (class226.regions[var1] & 255) * 64 - VarcInt.baseY * 64; + if (Client.isInInstance) { + var3 = 10; + var4 = 10; + } + + var0 &= Script.method2257(var2, var3, var4); + } + } + + if (!var0) { + Client.field699 = 2; + } else { + if (Client.field699 != 0) { + WorldMapIcon_1.drawLoadingMessage("Loading - please wait." + "
" + " (" + 100 + "%" + ")", true); + } + + Tiles.playPcmPlayers(); + class2.scene.clear(); + + for (var1 = 0; var1 < 4; ++var1) { + Client.collisionMaps[var1].clear(); + } + + int var31; + for (var1 = 0; var1 < 4; ++var1) { + for (var31 = 0; var31 < 104; ++var31) { + for (var3 = 0; var3 < 104; ++var3) { + Tiles.Tiles_renderFlags[var1][var31][var3] = 0; + } + } + } + + Tiles.playPcmPlayers(); + Tiles.Tiles_minPlane = 99; + Tiles.field498 = new byte[4][104][104]; + Tiles.field499 = new byte[4][104][104]; + Tiles.field500 = new byte[4][104][104]; + Tiles.field501 = new byte[4][104][104]; + WorldMapLabel.field233 = new int[4][105][105]; + class51.field423 = new byte[4][105][105]; + Login.field1207 = new int[105][105]; + Tiles.Tiles_hue = new int[104]; + Tiles.Tiles_saturation = new int[104]; + Tiles.Tiles_lightness = new int[104]; + class290.Tiles_hueMultiplier = new int[104]; + MouseRecorder.field588 = new int[104]; + var1 = VerticalAlignment.regionLandArchives.length; + + for (ObjectSound var41 = (ObjectSound)ObjectSound.objectSounds.last(); var41 != null; var41 = (ObjectSound)ObjectSound.objectSounds.previous()) { + if (var41.stream1 != null) { + ClientPacket.pcmStreamMixer.removeSubStream(var41.stream1); + var41.stream1 = null; + } + + if (var41.stream2 != null) { + ClientPacket.pcmStreamMixer.removeSubStream(var41.stream2); + var41.stream2 = null; + } + } + + ObjectSound.objectSounds.clear(); + InterfaceParent.method1197(true); + int var9; + int var10; + int var11; + int var12; + int var14; + int var15; + int var16; + int var17; + int var19; + int var20; + int var21; + int var32; + if (!Client.isInInstance) { + byte[] var5; + for (var31 = 0; var31 < var1; ++var31) { + var3 = (class226.regions[var31] >> 8) * 64 - class51.baseX * 64; + var4 = (class226.regions[var31] & 255) * 64 - VarcInt.baseY * 64; + var5 = VerticalAlignment.regionLandArchives[var31]; + if (var5 != null) { + Tiles.playPcmPlayers(); + GrandExchangeOffer.method123(var5, var3, var4, CollisionMap.field2086 * 8 - 48, SoundCache.field1438 * 8 - 48, Client.collisionMaps); + } + } + + for (var31 = 0; var31 < var1; ++var31) { + var3 = (class226.regions[var31] >> 8) * 64 - class51.baseX * 64; + var4 = (class226.regions[var31] & 255) * 64 - VarcInt.baseY * 64; + var5 = VerticalAlignment.regionLandArchives[var31]; + if (var5 == null && SoundCache.field1438 < 800) { + Tiles.playPcmPlayers(); + ReflectionCheck.method2316(var3, var4, 64, 64); + } + } + + InterfaceParent.method1197(true); + + for (var31 = 0; var31 < var1; ++var31) { + byte[] var33 = UrlRequest.regionMapArchives[var31]; + if (var33 != null) { + var4 = (class226.regions[var31] >> 8) * 64 - class51.baseX * 64; + var32 = (class226.regions[var31] & 255) * 64 - VarcInt.baseY * 64; + Tiles.playPcmPlayers(); + Scene var34 = class2.scene; + CollisionMap[] var35 = Client.collisionMaps; + Buffer var36 = new Buffer(var33); + var9 = -1; + + while (true) { + var10 = var36.method5710(); + if (var10 == 0) { + break; + } + + var9 += var10; + var11 = 0; + + while (true) { + var12 = var36.readUShortSmart(); + if (var12 == 0) { + break; + } + + var11 += var12 - 1; + int var38 = var11 & 63; + var14 = var11 >> 6 & 63; + var15 = var11 >> 12; + var16 = var36.readUnsignedByte(); + var17 = var16 >> 2; + int var39 = var16 & 3; + var19 = var14 + var4; + var20 = var38 + var32; + if (var19 > 0 && var20 > 0 && var19 < 103 && var20 < 103) { + var21 = var15; + if ((Tiles.Tiles_renderFlags[1][var19][var20] & 2) == 2) { + var21 = var15 - 1; + } + + CollisionMap var40 = null; + if (var21 >= 0) { + var40 = var35[var21]; + } + + EnumDefinition.method4656(var15, var19, var20, var9, var39, var17, var34, var40); + } + } + } + } + } + } + + int var6; + int var7; + int var8; + if (Client.isInInstance) { + for (var31 = 0; var31 < 4; ++var31) { + Tiles.playPcmPlayers(); + + for (var3 = 0; var3 < 13; ++var3) { + for (var4 = 0; var4 < 13; ++var4) { + boolean var42 = false; + var6 = Client.instanceChunkTemplates[var31][var3][var4]; + if (var6 != -1) { + var7 = var6 >> 24 & 3; + var8 = var6 >> 1 & 3; + var9 = var6 >> 14 & 1023; + var10 = var6 >> 3 & 2047; + var11 = (var9 / 8 << 8) + var10 / 8; + + for (var12 = 0; var12 < class226.regions.length; ++var12) { + if (class226.regions[var12] == var11 && VerticalAlignment.regionLandArchives[var12] != null) { + byte[] var13 = VerticalAlignment.regionLandArchives[var12]; + var14 = var3 * 8; + var15 = var4 * 8; + var16 = (var9 & 7) * 8; + var17 = (var10 & 7) * 8; + CollisionMap[] var18 = Client.collisionMaps; + + for (var19 = 0; var19 < 8; ++var19) { + for (var20 = 0; var20 < 8; ++var20) { + if (var19 + var14 > 0 && var19 + var14 < 103 && var15 + var20 > 0 && var20 + var15 < 103) { + int[] var10000 = var18[var31].flags[var14 + var19]; + var10000[var20 + var15] &= -16777217; + } + } + } + + Buffer var37 = new Buffer(var13); + + for (var20 = 0; var20 < 4; ++var20) { + for (var21 = 0; var21 < 64; ++var21) { + for (int var22 = 0; var22 < 64; ++var22) { + if (var7 == var20 && var21 >= var16 && var21 < var16 + 8 && var22 >= var17 && var22 < var17 + 8) { + int var25 = var14 + class266.method5065(var21 & 7, var22 & 7, var8); + int var28 = var21 & 7; + int var29 = var22 & 7; + int var30 = var8 & 3; + int var27; + if (var30 == 0) { + var27 = var29; + } else if (var30 == 1) { + var27 = 7 - var28; + } else if (var30 == 2) { + var27 = 7 - var29; + } else { + var27 = var28; + } + + GrandExchangeOffer.loadTerrain(var37, var31, var25, var15 + var27, 0, 0, var8); + } else { + GrandExchangeOffer.loadTerrain(var37, 0, -1, -1, 0, 0, 0); + } + } + } + } + + var42 = true; + break; + } + } + } + + if (!var42) { + TilePaint.method3105(var31, var3 * 8, var4 * 8); + } + } + } + } + + for (var31 = 0; var31 < 13; ++var31) { + for (var3 = 0; var3 < 13; ++var3) { + var4 = Client.instanceChunkTemplates[0][var31][var3]; + if (var4 == -1) { + ReflectionCheck.method2316(var31 * 8, var3 * 8, 8, 8); + } + } + } + + InterfaceParent.method1197(true); + + for (var31 = 0; var31 < 4; ++var31) { + Tiles.playPcmPlayers(); + + for (var3 = 0; var3 < 13; ++var3) { + for (var4 = 0; var4 < 13; ++var4) { + var32 = Client.instanceChunkTemplates[var31][var3][var4]; + if (var32 != -1) { + var6 = var32 >> 24 & 3; + var7 = var32 >> 1 & 3; + var8 = var32 >> 14 & 1023; + var9 = var32 >> 3 & 2047; + var10 = (var8 / 8 << 8) + var9 / 8; + + for (var11 = 0; var11 < class226.regions.length; ++var11) { + if (class226.regions[var11] == var10 && UrlRequest.regionMapArchives[var11] != null) { + FileSystem.method3552(UrlRequest.regionMapArchives[var11], var31, var3 * 8, var4 * 8, var6, (var8 & 7) * 8, (var9 & 7) * 8, var7, class2.scene, Client.collisionMaps); + break; + } + } + } + } + } + } + } + + InterfaceParent.method1197(true); + Tiles.playPcmPlayers(); + Frames.method3319(class2.scene, Client.collisionMaps); + InterfaceParent.method1197(true); + var31 = Tiles.Tiles_minPlane; + if (var31 > ClientPacket.Client_plane) { + var31 = ClientPacket.Client_plane; + } + + if (var31 < ClientPacket.Client_plane - 1) { + var31 = ClientPacket.Client_plane - 1; + } + + if (Client.isLowDetail) { + class2.scene.init(Tiles.Tiles_minPlane); + } else { + class2.scene.init(0); + } + + for (var3 = 0; var3 < 104; ++var3) { + for (var4 = 0; var4 < 104; ++var4) { + HealthBar.updateItemPile(var3, var4); + } + } + + Tiles.playPcmPlayers(); + + for (PendingSpawn var43 = (PendingSpawn)Client.pendingSpawns.last(); var43 != null; var43 = (PendingSpawn)Client.pendingSpawns.previous()) { + if (var43.hitpoints == -1) { + var43.delay = 0; + class215.method4108(var43); + } else { + var43.remove(); + } + } + + ObjectDefinition.ObjectDefinition_cachedModelData.clear(); + PacketBufferNode var44; + if (AbstractWorldMapIcon.client.hasFrame()) { + var44 = ModelData0.getPacketBufferNode(ClientPacket.field2260, Client.packetWriter.isaacCipher); + var44.packetBuffer.writeInt(1057001181); + Client.packetWriter.addNode(var44); + } + + if (!Client.isInInstance) { + var3 = (CollisionMap.field2086 - 6) / 8; + var4 = (CollisionMap.field2086 + 6) / 8; + var32 = (SoundCache.field1438 - 6) / 8; + var6 = (SoundCache.field1438 + 6) / 8; + + for (var7 = var3 - 1; var7 <= var4 + 1; ++var7) { + for (var8 = var32 - 1; var8 <= var6 + 1; ++var8) { + if (var7 < var3 || var7 > var4 || var8 < var32 || var8 > var6) { + DirectByteArrayCopier.archive5.loadRegionFromName("m" + var7 + "_" + var8); + DirectByteArrayCopier.archive5.loadRegionFromName("l" + var7 + "_" + var8); + } + } + } + } + + class81.updateGameState(30); + Tiles.playPcmPlayers(); + Tiles.field498 = null; + Tiles.field499 = null; + Tiles.field500 = null; + Tiles.field501 = null; + WorldMapLabel.field233 = null; + class51.field423 = null; + Login.field1207 = null; + Tiles.Tiles_hue = null; + Tiles.Tiles_saturation = null; + Tiles.Tiles_lightness = null; + class290.Tiles_hueMultiplier = null; + MouseRecorder.field588 = null; + var44 = ModelData0.getPacketBufferNode(ClientPacket.field2223, Client.packetWriter.isaacCipher); + Client.packetWriter.addNode(var44); + BuddyRankComparator.clock.mark(); + + for (var4 = 0; var4 < 32; ++var4) { + GameShell.graphicsTickTimes[var4] = 0L; + } + + for (var4 = 0; var4 < 32; ++var4) { + GameShell.clientTickTimes[var4] = 0L; + } + + GameShell.gameCyclesToDo = 0; + } + } + } +} diff --git a/runescape-client/src/main/java/class268.java b/runescape-client/src/main/java/class268.java deleted file mode 100644 index 6c3762dc39..0000000000 --- a/runescape-client/src/main/java/class268.java +++ /dev/null @@ -1,9 +0,0 @@ -import net.runelite.mapping.Export; -import net.runelite.mapping.ObfuscatedName; - -@ObfuscatedName("jo") -public class class268 { - @ObfuscatedName("ba") - @Export("otp") - static String otp; -} diff --git a/runescape-client/src/main/java/class269.java b/runescape-client/src/main/java/class269.java index fb9510adf5..9e9b557738 100644 --- a/runescape-client/src/main/java/class269.java +++ b/runescape-client/src/main/java/class269.java @@ -1,14 +1,13 @@ +import net.runelite.mapping.Export; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("jz") +@ObfuscatedName("jk") public class class269 { - @ObfuscatedName("q") + @ObfuscatedName("dg") @ObfuscatedSignature( - signature = "(Lhq;Lhq;III)Lks;", - garbageValue = "1409785665" + signature = "Lij;" ) - public static Font method5114(AbstractArchive var0, AbstractArchive var1, int var2, int var3) { - return !class32.method618(var0, var2, var3) ? null : RouteStrategy.method3738(var1.takeFile(var2, var3)); - } + @Export("archive13") + static Archive archive13; } diff --git a/runescape-client/src/main/java/class270.java b/runescape-client/src/main/java/class270.java new file mode 100644 index 0000000000..e46732ffc8 --- /dev/null +++ b/runescape-client/src/main/java/class270.java @@ -0,0 +1,32 @@ +import net.runelite.mapping.Export; +import net.runelite.mapping.ObfuscatedName; +import net.runelite.mapping.ObfuscatedSignature; + +@ObfuscatedName("jo") +public class class270 { + @ObfuscatedName("f") + @ObfuscatedSignature( + signature = "(III)V", + garbageValue = "-638567292" + ) + @Export("changeWorldSelectSorting") + static void changeWorldSelectSorting(int var0, int var1) { + int[] var2 = new int[4]; + int[] var3 = new int[4]; + var2[0] = var0; + var3[0] = var1; + int var4 = 1; + + for (int var5 = 0; var5 < 4; ++var5) { + if (World.World_sortOption1[var5] != var0) { + var2[var4] = World.World_sortOption1[var5]; + var3[var4] = World.World_sortOption2[var5]; + ++var4; + } + } + + World.World_sortOption1 = var2; + World.World_sortOption2 = var3; + Clock.sortWorlds(Skills.World_worlds, 0, Skills.World_worlds.length - 1, World.World_sortOption1, World.World_sortOption2); + } +} diff --git a/runescape-client/src/main/java/class286.java b/runescape-client/src/main/java/class286.java index 95667d1a08..c19495ca79 100644 --- a/runescape-client/src/main/java/class286.java +++ b/runescape-client/src/main/java/class286.java @@ -1,13 +1,63 @@ import net.runelite.mapping.Export; -import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; +import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("kv") +@ObfuscatedName("kx") public class class286 { - @ObfuscatedName("f") - @ObfuscatedGetter( - intValue = 678872033 + @ObfuscatedName("u") + @ObfuscatedSignature( + signature = "([I[II)V", + garbageValue = "1632761415" ) - @Export("canvasWidth") - public static int canvasWidth; + public static void method5353(int[] var0, int[] var1) { + if (var0 != null && var1 != null) { + WorldMapSprite.ByteArrayPool_alternativeSizes = var0; + class216.ByteArrayPool_altSizeArrayCounts = new int[var0.length]; + ByteArrayPool.ByteArrayPool_arrays = new byte[var0.length][][]; + + for (int var2 = 0; var2 < WorldMapSprite.ByteArrayPool_alternativeSizes.length; ++var2) { + ByteArrayPool.ByteArrayPool_arrays[var2] = new byte[var1[var2]][]; + } + + } else { + WorldMapSprite.ByteArrayPool_alternativeSizes = null; + class216.ByteArrayPool_altSizeArrayCounts = null; + ByteArrayPool.ByteArrayPool_arrays = null; + } + } + + @ObfuscatedName("f") + @ObfuscatedSignature( + signature = "(IIB)I", + garbageValue = "-62" + ) + @Export("ItemContainer_getCount") + static int ItemContainer_getCount(int var0, int var1) { + ItemContainer var2 = (ItemContainer)ItemContainer.itemContainers.get((long)var0); + if (var2 == null) { + return 0; + } else { + return var1 >= 0 && var1 < var2.quantities.length ? var2.quantities[var1] : 0; + } + } + + @ObfuscatedName("z") + @ObfuscatedSignature( + signature = "(II)Lba;", + garbageValue = "-1661188846" + ) + @Export("Messages_getMessage") + static Message Messages_getMessage(int var0) { + return (Message)Messages.Messages_hashTable.get((long)var0); + } + + @ObfuscatedName("k") + @ObfuscatedSignature( + signature = "(IIIII)I", + garbageValue = "1010446499" + ) + static final int method5346(int var0, int var1, int var2, int var3) { + int var4 = 65536 - Rasterizer3D.Rasterizer3D_cosine[var2 * 1024 / var3] >> 1; + return ((65536 - var4) * var0 >> 16) + (var4 * var1 >> 16); + } } diff --git a/runescape-client/src/main/java/class287.java b/runescape-client/src/main/java/class287.java index d05b6eab83..bf19fb9196 100644 --- a/runescape-client/src/main/java/class287.java +++ b/runescape-client/src/main/java/class287.java @@ -1,125 +1,13 @@ import net.runelite.mapping.Export; import net.runelite.mapping.ObfuscatedName; -import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("kk") +@ObfuscatedName("kl") public class class287 { - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("cp1252AsciiExtension") public static final char[] cp1252AsciiExtension; static { cp1252AsciiExtension = new char[]{'€', '\u0000', '‚', 'ƒ', '„', '…', '†', '‡', 'ˆ', '‰', 'Š', '‹', 'Œ', '\u0000', 'Ž', '\u0000', '\u0000', '‘', '’', '“', '”', '•', '–', '—', '˜', '™', 'š', '›', 'œ', '\u0000', 'ž', 'Ÿ'}; } - - @ObfuscatedName("id") - @ObfuscatedSignature( - signature = "(IIIILjava/lang/String;I)V", - garbageValue = "643605546" - ) - @Export("widgetDefaultMenuAction") - static void widgetDefaultMenuAction(int var0, int var1, int var2, int var3, String var4) { - Widget var5 = ArchiveLoader.getWidgetChild(var1, var2); - if (var5 != null) { - if (var5.onOp != null) { - ScriptEvent var6 = new ScriptEvent(); - var6.widget = var5; - var6.opIndex = var0; - var6.targetName = var4; - var6.args = var5.onOp; - GrandExchangeOfferAgeComparator.runScriptEvent(var6); - } - - boolean var8 = true; - if (var5.contentType > 0) { - var8 = WorldMapIcon_0.method237(var5); - } - - if (var8) { - if (ModelData0.method3379(class195.getWidgetClickMask(var5), var0 - 1)) { - PacketBufferNode var7; - if (var0 == 1) { - var7 = SoundSystem.getPacketBufferNode(ClientPacket.field2185, Client.packetWriter.isaacCipher); - var7.packetBuffer.writeInt(var1); - var7.packetBuffer.writeShort(var2); - var7.packetBuffer.writeShort(var3); - Client.packetWriter.addNode(var7); - } - - if (var0 == 2) { - var7 = SoundSystem.getPacketBufferNode(ClientPacket.field2218, Client.packetWriter.isaacCipher); - var7.packetBuffer.writeInt(var1); - var7.packetBuffer.writeShort(var2); - var7.packetBuffer.writeShort(var3); - Client.packetWriter.addNode(var7); - } - - if (var0 == 3) { - var7 = SoundSystem.getPacketBufferNode(ClientPacket.field2248, Client.packetWriter.isaacCipher); - var7.packetBuffer.writeInt(var1); - var7.packetBuffer.writeShort(var2); - var7.packetBuffer.writeShort(var3); - Client.packetWriter.addNode(var7); - } - - if (var0 == 4) { - var7 = SoundSystem.getPacketBufferNode(ClientPacket.field2250, Client.packetWriter.isaacCipher); - var7.packetBuffer.writeInt(var1); - var7.packetBuffer.writeShort(var2); - var7.packetBuffer.writeShort(var3); - Client.packetWriter.addNode(var7); - } - - if (var0 == 5) { - var7 = SoundSystem.getPacketBufferNode(ClientPacket.field2273, Client.packetWriter.isaacCipher); - var7.packetBuffer.writeInt(var1); - var7.packetBuffer.writeShort(var2); - var7.packetBuffer.writeShort(var3); - Client.packetWriter.addNode(var7); - } - - if (var0 == 6) { - var7 = SoundSystem.getPacketBufferNode(ClientPacket.field2263, Client.packetWriter.isaacCipher); - var7.packetBuffer.writeInt(var1); - var7.packetBuffer.writeShort(var2); - var7.packetBuffer.writeShort(var3); - Client.packetWriter.addNode(var7); - } - - if (var0 == 7) { - var7 = SoundSystem.getPacketBufferNode(ClientPacket.field2276, Client.packetWriter.isaacCipher); - var7.packetBuffer.writeInt(var1); - var7.packetBuffer.writeShort(var2); - var7.packetBuffer.writeShort(var3); - Client.packetWriter.addNode(var7); - } - - if (var0 == 8) { - var7 = SoundSystem.getPacketBufferNode(ClientPacket.field2191, Client.packetWriter.isaacCipher); - var7.packetBuffer.writeInt(var1); - var7.packetBuffer.writeShort(var2); - var7.packetBuffer.writeShort(var3); - Client.packetWriter.addNode(var7); - } - - if (var0 == 9) { - var7 = SoundSystem.getPacketBufferNode(ClientPacket.field2186, Client.packetWriter.isaacCipher); - var7.packetBuffer.writeInt(var1); - var7.packetBuffer.writeShort(var2); - var7.packetBuffer.writeShort(var3); - Client.packetWriter.addNode(var7); - } - - if (var0 == 10) { - var7 = SoundSystem.getPacketBufferNode(ClientPacket.field2259, Client.packetWriter.isaacCipher); - var7.packetBuffer.writeInt(var1); - var7.packetBuffer.writeShort(var2); - var7.packetBuffer.writeShort(var3); - Client.packetWriter.addNode(var7); - } - - } - } - } - } } diff --git a/runescape-client/src/main/java/class288.java b/runescape-client/src/main/java/class288.java index 62c31ec85e..d73a83e906 100644 --- a/runescape-client/src/main/java/class288.java +++ b/runescape-client/src/main/java/class288.java @@ -1,28 +1,96 @@ import net.runelite.mapping.Export; +import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("kr") +@ObfuscatedName("kh") public final class class288 { - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("base37Table") static final char[] base37Table; - @ObfuscatedName("t") - static long[] field3633; - @ObfuscatedName("bt") - @ObfuscatedSignature( - signature = "Llw;" + @ObfuscatedName("f") + static long[] field3650; + @ObfuscatedName("i") + @ObfuscatedGetter( + intValue = -1236461177 ) - @Export("worldSelectLeftSprite") - static IndexedSprite worldSelectLeftSprite; + static int field3652; + @ObfuscatedName("dh") + @ObfuscatedSignature( + signature = "Lij;" + ) + @Export("archive2") + static Archive archive2; static { base37Table = new char[]{'_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}; - field3633 = new long[12]; + field3650 = new long[12]; - for (int var0 = 0; var0 < field3633.length; ++var0) { - field3633[var0] = (long)Math.pow(37.0D, (double)var0); + for (int var0 = 0; var0 < field3650.length; ++var0) { + field3650[var0] = (long)Math.pow(37.0D, (double)var0); } } + + @ObfuscatedName("u") + @ObfuscatedSignature( + signature = "(IIB)I", + garbageValue = "-123" + ) + static int method5383(int var0, int var1) { + FloorOverlayDefinition var2 = WorldMapRectangle.FloorUnderlayDefinition_get(var0); + if (var2 == null) { + return var1; + } else if (var2.secondaryRgb >= 0) { + return var2.secondaryRgb | -16777216; + } else { + int var3; + if (var2.texture >= 0) { + var3 = TilePaint.method3104(Rasterizer3D.Rasterizer3D_textureLoader.getAverageTextureRGB(var2.texture), 96); + return Rasterizer3D.Rasterizer3D_colorPalette[var3] | -16777216; + } else if (var2.primaryRgb == 16711935) { + return var1; + } else { + var3 = JagexCache.method3531(var2.hue, var2.saturation, var2.lightness); + byte var5 = 96; + int var4; + if (var3 == -2) { + var4 = 12345678; + } else { + int var7; + if (var3 == -1) { + if (var5 < 0) { + var5 = 0; + } else if (var5 > 127) { + var5 = 127; + } + + var7 = 127 - var5; + var4 = var7; + } else { + var7 = var5 * (var3 & 127) / 128; + if (var7 < 2) { + var7 = 2; + } else if (var7 > 126) { + var7 = 126; + } + + var4 = var7 + (var3 & 65408); + } + } + + return Rasterizer3D.Rasterizer3D_colorPalette[var4] | -16777216; + } + } + } + + @ObfuscatedName("b") + @ObfuscatedSignature( + signature = "(Lhf;III)Lln;", + garbageValue = "170852381" + ) + @Export("SpriteBuffer_getSprite") + public static Sprite SpriteBuffer_getSprite(AbstractArchive var0, int var1, int var2) { + return !GraphicsObject.method2030(var0, var1, var2) ? null : Occluder.method3338(); + } } diff --git a/runescape-client/src/main/java/class289.java b/runescape-client/src/main/java/class289.java index 2bd1e8d1d4..4eae296b79 100644 --- a/runescape-client/src/main/java/class289.java +++ b/runescape-client/src/main/java/class289.java @@ -1,89 +1,168 @@ import net.runelite.mapping.ObfuscatedName; +import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("kh") +@ObfuscatedName("km") public class class289 { - @ObfuscatedName("a") - static char[] field3636; - @ObfuscatedName("t") - static char[] field3635; - @ObfuscatedName("n") - static char[] field3637; - @ObfuscatedName("q") - static int[] field3638; + @ObfuscatedName("u") + static char[] field3653; + @ObfuscatedName("f") + static char[] field3656; + @ObfuscatedName("b") + static char[] field3655; + @ObfuscatedName("g") + static int[] field3654; static { - field3636 = new char[64]; + field3653 = new char[64]; int var0; for (var0 = 0; var0 < 26; ++var0) { - field3636[var0] = (char)(var0 + 65); + field3653[var0] = (char)(var0 + 65); } for (var0 = 26; var0 < 52; ++var0) { - field3636[var0] = (char)(var0 + 97 - 26); + field3653[var0] = (char)(var0 + 97 - 26); } for (var0 = 52; var0 < 62; ++var0) { - field3636[var0] = (char)(var0 + 48 - 52); + field3653[var0] = (char)(var0 + 48 - 52); } - field3636[62] = '+'; - field3636[63] = '/'; - field3635 = new char[64]; + field3653[62] = '+'; + field3653[63] = '/'; + field3656 = new char[64]; for (var0 = 0; var0 < 26; ++var0) { - field3635[var0] = (char)(var0 + 65); + field3656[var0] = (char)(var0 + 65); } for (var0 = 26; var0 < 52; ++var0) { - field3635[var0] = (char)(var0 + 97 - 26); + field3656[var0] = (char)(var0 + 97 - 26); } for (var0 = 52; var0 < 62; ++var0) { - field3635[var0] = (char)(var0 + 48 - 52); + field3656[var0] = (char)(var0 + 48 - 52); } - field3635[62] = '*'; - field3635[63] = '-'; - field3637 = new char[64]; + field3656[62] = '*'; + field3656[63] = '-'; + field3655 = new char[64]; for (var0 = 0; var0 < 26; ++var0) { - field3637[var0] = (char)(var0 + 65); + field3655[var0] = (char)(var0 + 65); } for (var0 = 26; var0 < 52; ++var0) { - field3637[var0] = (char)(var0 + 97 - 26); + field3655[var0] = (char)(var0 + 97 - 26); } for (var0 = 52; var0 < 62; ++var0) { - field3637[var0] = (char)(var0 + 48 - 52); + field3655[var0] = (char)(var0 + 48 - 52); } - field3637[62] = '-'; - field3637[63] = '_'; - field3638 = new int[128]; + field3655[62] = '-'; + field3655[63] = '_'; + field3654 = new int[128]; - for (var0 = 0; var0 < field3638.length; ++var0) { - field3638[var0] = -1; + for (var0 = 0; var0 < field3654.length; ++var0) { + field3654[var0] = -1; } for (var0 = 65; var0 <= 90; ++var0) { - field3638[var0] = var0 - 65; + field3654[var0] = var0 - 65; } for (var0 = 97; var0 <= 122; ++var0) { - field3638[var0] = var0 - 97 + 26; + field3654[var0] = var0 - 97 + 26; } for (var0 = 48; var0 <= 57; ++var0) { - field3638[var0] = var0 - 48 + 52; + field3654[var0] = var0 - 48 + 52; } - int[] var2 = field3638; - field3638[43] = 62; + int[] var2 = field3654; + field3654[43] = 62; var2[42] = 62; - int[] var1 = field3638; - field3638[47] = 63; + int[] var1 = field3654; + field3654[47] = 63; var1[45] = 63; } + + @ObfuscatedName("f") + @ObfuscatedSignature( + signature = "(Lkg;Ljava/lang/String;B)I", + garbageValue = "61" + ) + public static int method5388(Buffer var0, String var1) { + int var2 = var0.offset; + int var4 = var1.length(); + byte[] var5 = new byte[var4]; + + for (int var6 = 0; var6 < var4; ++var6) { + char var7 = var1.charAt(var6); + if (var7 > 0 && var7 < 128 || var7 >= 160 && var7 <= 255) { + var5[var6] = (byte)var7; + } else if (var7 == 8364) { + var5[var6] = -128; + } else if (var7 == 8218) { + var5[var6] = -126; + } else if (var7 == 402) { + var5[var6] = -125; + } else if (var7 == 8222) { + var5[var6] = -124; + } else if (var7 == 8230) { + var5[var6] = -123; + } else if (var7 == 8224) { + var5[var6] = -122; + } else if (var7 == 8225) { + var5[var6] = -121; + } else if (var7 == 710) { + var5[var6] = -120; + } else if (var7 == 8240) { + var5[var6] = -119; + } else if (var7 == 352) { + var5[var6] = -118; + } else if (var7 == 8249) { + var5[var6] = -117; + } else if (var7 == 338) { + var5[var6] = -116; + } else if (var7 == 381) { + var5[var6] = -114; + } else if (var7 == 8216) { + var5[var6] = -111; + } else if (var7 == 8217) { + var5[var6] = -110; + } else if (var7 == 8220) { + var5[var6] = -109; + } else if (var7 == 8221) { + var5[var6] = -108; + } else if (var7 == 8226) { + var5[var6] = -107; + } else if (var7 == 8211) { + var5[var6] = -106; + } else if (var7 == 8212) { + var5[var6] = -105; + } else if (var7 == 732) { + var5[var6] = -104; + } else if (var7 == 8482) { + var5[var6] = -103; + } else if (var7 == 353) { + var5[var6] = -102; + } else if (var7 == 8250) { + var5[var6] = -101; + } else if (var7 == 339) { + var5[var6] = -100; + } else if (var7 == 382) { + var5[var6] = -98; + } else if (var7 == 376) { + var5[var6] = -97; + } else { + var5[var6] = 63; + } + } + + var0.writeSmartByteShort(var5.length); + var0.offset += class210.huffman.compress(var5, 0, var5.length, var0.array, var0.offset); + return var0.offset - var2; + } } diff --git a/runescape-client/src/main/java/class290.java b/runescape-client/src/main/java/class290.java new file mode 100644 index 0000000000..62334bbfe2 --- /dev/null +++ b/runescape-client/src/main/java/class290.java @@ -0,0 +1,22 @@ +import net.runelite.mapping.Export; +import net.runelite.mapping.ObfuscatedName; +import net.runelite.mapping.ObfuscatedSignature; + +@ObfuscatedName("kw") +public final class class290 { + @ObfuscatedName("o") + @Export("Tiles_hueMultiplier") + static int[] Tiles_hueMultiplier; + + @ObfuscatedName("kp") + @ObfuscatedSignature( + signature = "(I)V", + garbageValue = "-250466939" + ) + @Export("Clan_leaveChat") + static final void Clan_leaveChat() { + PacketBufferNode var0 = ModelData0.getPacketBufferNode(ClientPacket.field2314, Client.packetWriter.isaacCipher); + var0.packetBuffer.writeByte(0); + Client.packetWriter.addNode(var0); + } +} diff --git a/runescape-client/src/main/java/class296.java b/runescape-client/src/main/java/class296.java index f1a00e35d2..2d86e5f9e3 100644 --- a/runescape-client/src/main/java/class296.java +++ b/runescape-client/src/main/java/class296.java @@ -1,35 +1,16 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; -import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ka") +@ObfuscatedName("kk") public final class class296 { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedGetter( - longValue = 2084337511336446697L + longValue = -6454763268597817631L ) - static long field3684; - @ObfuscatedName("t") + static long field3695; + @ObfuscatedName("f") @ObfuscatedGetter( - longValue = 1232556563702335995L + longValue = -1124279977682692331L ) - static long field3683; - - @ObfuscatedName("j") - @ObfuscatedSignature( - signature = "(IIB)Z", - garbageValue = "1" - ) - static final boolean method5547(int var0, int var1) { - ObjectDefinition var2 = WorldMapDecorationType.getObjectDefinition(var0); - if (var1 == 11) { - var1 = 10; - } - - if (var1 >= 5 && var1 <= 8) { - var1 = 4; - } - - return var2.method4737(var1); - } + static long field3696; } diff --git a/runescape-client/src/main/java/class297.java b/runescape-client/src/main/java/class297.java index a27af99e4b..bdbd8ae774 100644 --- a/runescape-client/src/main/java/class297.java +++ b/runescape-client/src/main/java/class297.java @@ -1,14 +1,7 @@ import net.runelite.mapping.ObfuscatedName; -import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("kj") +@ObfuscatedName("kp") public class class297 { - @ObfuscatedName("ag") - @ObfuscatedSignature( - signature = "(Lcc;B)V", - garbageValue = "23" - ) - public static final void method5550(class99 var0) { - class188.pcmPlayerProvider = var0; - } + @ObfuscatedName("cy") + public static char field3699; } diff --git a/runescape-client/src/main/java/class3.java b/runescape-client/src/main/java/class3.java index 5e22893650..af898f6c3b 100644 --- a/runescape-client/src/main/java/class3.java +++ b/runescape-client/src/main/java/class3.java @@ -3,158 +3,514 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("q") +@ObfuscatedName("g") public class class3 implements Enumerated { - @ObfuscatedName("pc") - @ObfuscatedSignature( - signature = "Lkt;" - ) - @Export("privateChatMode") - static PrivateChatMode privateChatMode; - @ObfuscatedName("a") - @ObfuscatedSignature( - signature = "Lq;" - ) - public static final class3 field18; - @ObfuscatedName("t") - @ObfuscatedSignature( - signature = "Lq;" - ) - public static final class3 field17; - @ObfuscatedName("n") - @ObfuscatedSignature( - signature = "Lq;" - ) - public static final class3 field13; - @ObfuscatedName("cl") - @ObfuscatedSignature( - signature = "Lbe;" - ) - @Export("mouseRecorder") - static MouseRecorder mouseRecorder; - @ObfuscatedName("q") + @ObfuscatedName("nn") @ObfuscatedGetter( - intValue = 1740494527 + intValue = -1636147863 ) - final int field12; - @ObfuscatedName("v") - @ObfuscatedGetter( - intValue = 1144447827 - ) - public final int field14; - @ObfuscatedName("l") - final Class field16; - @ObfuscatedName("c") + @Export("widgetDragDuration") + static int widgetDragDuration; + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "La;" + signature = "Lg;" ) - final class0 field11; + static final class3 field11; + @ObfuscatedName("f") + @ObfuscatedSignature( + signature = "Lg;" + ) + static final class3 field15; + @ObfuscatedName("b") + @ObfuscatedSignature( + signature = "Lg;" + ) + static final class3 field13; + @ObfuscatedName("g") + @ObfuscatedGetter( + intValue = 902958513 + ) + final int field14; + @ObfuscatedName("z") + @ObfuscatedGetter( + intValue = -1999157545 + ) + public final int field19; + @ObfuscatedName("p") + public final Class field16; + @ObfuscatedName("h") + @ObfuscatedSignature( + signature = "Lu;" + ) + final class0 field17; static { - field18 = new class3(0, 0, Integer.class, new class1()); - field17 = new class3(1, 1, Long.class, new class2()); - field13 = new class3(2, 2, String.class, new class4()); + field11 = new class3(0, 0, Integer.class, new class1()); + field15 = new class3(2, 1, Long.class, new class2()); + field13 = new class3(1, 2, String.class, new class4()); } @ObfuscatedSignature( - signature = "(IILjava/lang/Class;La;)V" + signature = "(IILjava/lang/Class;Lu;)V" ) class3(int var1, int var2, Class var3, class0 var4) { - this.field12 = var1; - this.field14 = var2; + this.field14 = var1; + this.field19 = var2; this.field16 = var3; - this.field11 = var4; + this.field17 = var4; } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(I)I", - garbageValue = "-1993081102" + signature = "(B)I", + garbageValue = "7" ) @Export("rsOrdinal") public int rsOrdinal() { - return this.field14; + return this.field19; } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(Lkc;I)Ljava/lang/Object;", - garbageValue = "2039832756" + signature = "(Lkg;I)Ljava/lang/Object;", + garbageValue = "-1145343659" ) - public Object method55(Buffer var1) { - return this.field11.vmethod74(var1); + public Object method40(Buffer var1) { + return this.field17.vmethod65(var1); } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Ljava/lang/Class;I)Lq;", - garbageValue = "-1626082833" + signature = "(I)[Lg;", + garbageValue = "1593931350" ) - public static class3 method51(Class var0) { - class3[] var1 = new class3[]{field13, field18, field17}; - class3[] var2 = var1; + public static class3[] method45() { + return new class3[]{field15, field11, field13}; + } + + @ObfuscatedName("u") + @ObfuscatedSignature( + signature = "([Ljava/lang/String;[SB)V", + garbageValue = "94" + ) + public static void method42(String[] var0, short[] var1) { + Fonts.sortItemsByName(var0, var1, 0, var0.length - 1); + } + + @ObfuscatedName("f") + @ObfuscatedSignature( + signature = "(Ljava/lang/Object;Lkg;B)V", + garbageValue = "-56" + ) + public static void method37(Object var0, Buffer var1) { + class0 var2 = method38(var0.getClass()); + var2.vmethod57(var0, var1); + } + + @ObfuscatedName("b") + @ObfuscatedSignature( + signature = "(Ljava/lang/Class;I)Lu;", + garbageValue = "-1298257159" + ) + static class0 method38(Class var0) { + class3[] var2 = method45(); + int var3 = 0; + + class3 var1; + while (true) { + if (var3 >= var2.length) { + var1 = null; + break; + } - for (int var3 = 0; var3 < var2.length; ++var3) { class3 var4 = var2[var3]; if (var4.field16 == var0) { - return var4; + var1 = var4; + break; } + + ++var3; } - return null; - } - - @ObfuscatedName("a") - @ObfuscatedSignature( - signature = "(III)I", - garbageValue = "-1591617746" - ) - static int method68(int var0, int var1) { - ItemContainer var2 = (ItemContainer)ItemContainer.itemContainers.get((long)var0); - if (var2 == null) { - return -1; - } else { - return var1 >= 0 && var1 < var2.ids.length ? var2.ids[var1] : -1; - } - } - - @ObfuscatedName("t") - @ObfuscatedSignature( - signature = "(Ljava/lang/Object;Lkc;I)V", - garbageValue = "240271857" - ) - public static void method52(Object var0, Buffer var1) { - class0 var2 = method59(var0.getClass()); - var2.vmethod89(var0, var1); - } - - @ObfuscatedName("n") - @ObfuscatedSignature( - signature = "(Ljava/lang/Class;I)La;", - garbageValue = "1094436481" - ) - static class0 method59(Class var0) { - class3 var1 = method51(var0); if (var1 == null) { throw new IllegalArgumentException(); } else { - return var1.field11; + return var1.field17; } } - @ObfuscatedName("ao") + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "([BIIS)I", - garbageValue = "31533" + signature = "(I)V", + garbageValue = "56484455" ) - public static int method50(byte[] var0, int var1, int var2) { - int var3 = -1; + public static void method35() { + ParamDefinition.ParamDefinition_cached.clear(); + } - for (int var4 = var1; var4 < var2; ++var4) { - var3 = var3 >>> 8 ^ Buffer.crc32Table[(var3 ^ var0[var4]) & 255]; + @ObfuscatedName("ft") + @ObfuscatedSignature( + signature = "(Lbt;II)V", + garbageValue = "-1136770233" + ) + @Export("updateActorSequence") + static final void updateActorSequence(Actor var0, int var1) { + SequenceDefinition var2; + int var3; + int var4; + int var11; + if (var0.field934 > Client.cycle) { + UserComparator5.method3461(var0); + } else if (var0.field982 >= Client.cycle) { + WorldMapAreaData.method707(var0); + } else { + var0.movementSequence = var0.readySequence; + if (var0.pathLength == 0) { + var0.field976 = 0; + } else { + label545: { + if (var0.sequence != -1 && var0.sequenceDelay == 0) { + var2 = GrandExchangeOfferAgeComparator.SequenceDefinition_get(var0.sequence); + if (var0.field994 > 0 && var2.field3531 == 0) { + ++var0.field976; + break label545; + } + + if (var0.field994 <= 0 && var2.field3515 == 0) { + ++var0.field976; + break label545; + } + } + + var11 = var0.x; + var3 = var0.y; + var4 = var0.pathX[var0.pathLength - 1] * 128 + var0.field938 * 64; + int var5 = var0.pathY[var0.pathLength - 1] * 128 + var0.field938 * 64; + if (var11 < var4) { + if (var3 < var5) { + var0.orientation = 1280; + } else if (var3 > var5) { + var0.orientation = 1792; + } else { + var0.orientation = 1536; + } + } else if (var11 > var4) { + if (var3 < var5) { + var0.orientation = 768; + } else if (var3 > var5) { + var0.orientation = 256; + } else { + var0.orientation = 512; + } + } else if (var3 < var5) { + var0.orientation = 1024; + } else if (var3 > var5) { + var0.orientation = 0; + } + + byte var6 = var0.pathTraversed[var0.pathLength - 1]; + if (var4 - var11 <= 256 && var4 - var11 >= -256 && var5 - var3 <= 256 && var5 - var3 >= -256) { + int var7 = var0.orientation - var0.rotation & 2047; + if (var7 > 1024) { + var7 -= 2048; + } + + int var8 = var0.walkBackSequence; + if (var7 >= -256 && var7 <= 256) { + var8 = var0.walkSequence; + } else if (var7 >= 256 && var7 < 768) { + var8 = var0.walkRightSequence; + } else if (var7 >= -768 && var7 <= -256) { + var8 = var0.walkLeftSequence; + } + + if (var8 == -1) { + var8 = var0.walkSequence; + } + + var0.movementSequence = var8; + int var9 = 4; + boolean var10 = true; + if (var0 instanceof NPC) { + var10 = ((NPC)var0).definition.isClickable; + } + + if (var10) { + if (var0.orientation != var0.rotation && var0.targetIndex == -1 && var0.field988 != 0) { + var9 = 2; + } + + if (var0.pathLength > 2) { + var9 = 6; + } + + if (var0.pathLength > 3) { + var9 = 8; + } + + if (var0.field976 > 0 && var0.pathLength > 1) { + var9 = 8; + --var0.field976; + } + } else { + if (var0.pathLength > 1) { + var9 = 6; + } + + if (var0.pathLength > 2) { + var9 = 8; + } + + if (var0.field976 > 0 && var0.pathLength > 1) { + var9 = 8; + --var0.field976; + } + } + + if (var6 == 2) { + var9 <<= 1; + } + + if (var9 >= 8 && var0.movementSequence == var0.walkSequence && var0.runSequence != -1) { + var0.movementSequence = var0.runSequence; + } + + if (var4 != var11 || var3 != var5) { + if (var11 < var4) { + var0.x += var9; + if (var0.x > var4) { + var0.x = var4; + } + } else if (var11 > var4) { + var0.x -= var9; + if (var0.x < var4) { + var0.x = var4; + } + } + + if (var3 < var5) { + var0.y += var9; + if (var0.y > var5) { + var0.y = var5; + } + } else if (var3 > var5) { + var0.y -= var9; + if (var0.y < var5) { + var0.y = var5; + } + } + } + + if (var4 == var0.x && var5 == var0.y) { + --var0.pathLength; + if (var0.field994 > 0) { + --var0.field994; + } + } + } else { + var0.x = var4; + var0.y = var5; + --var0.pathLength; + if (var0.field994 > 0) { + --var0.field994; + } + } + } + } + } + + if (var0.x < 128 || var0.y < 128 || var0.x >= 13184 || var0.y >= 13184) { + var0.sequence = -1; + var0.spotAnimation = -1; + var0.field934 = 0; + var0.field982 = 0; + var0.x = var0.pathX[0] * 128 + var0.field938 * 64; + var0.y = var0.pathY[0] * 128 + var0.field938 * 64; + var0.method1759(); + } + + if (class215.localPlayer == var0 && (var0.x < 1536 || var0.y < 1536 || var0.x >= 11776 || var0.y >= 11776)) { + var0.sequence = -1; + var0.spotAnimation = -1; + var0.field934 = 0; + var0.field982 = 0; + var0.x = var0.pathX[0] * 128 + var0.field938 * 64; + var0.y = var0.pathY[0] * 128 + var0.field938 * 64; + var0.method1759(); + } + + if (var0.field988 != 0) { + if (var0.targetIndex != -1) { + Object var13 = null; + if (var0.targetIndex < 32768) { + var13 = Client.npcs[var0.targetIndex]; + } else if (var0.targetIndex >= 32768) { + var13 = Client.players[var0.targetIndex - 32768]; + } + + if (var13 != null) { + var3 = var0.x - ((Actor)var13).x; + var4 = var0.y - ((Actor)var13).y; + if (var3 != 0 || var4 != 0) { + var0.orientation = (int)(Math.atan2((double)var3, (double)var4) * 325.949D) & 2047; + } + } else if (var0.false0) { + var0.targetIndex = -1; + var0.false0 = false; + } + } + + if (var0.field965 != -1 && (var0.pathLength == 0 || var0.field976 > 0)) { + var0.orientation = var0.field965; + var0.field965 = -1; + } + + var11 = var0.orientation - var0.rotation & 2047; + if (var11 == 0 && var0.false0) { + var0.targetIndex = -1; + var0.false0 = false; + } + + if (var11 != 0) { + ++var0.field987; + boolean var14; + if (var11 > 1024) { + var0.rotation -= var0.field988; + var14 = true; + if (var11 < var0.field988 || var11 > 2048 - var0.field988) { + var0.rotation = var0.orientation; + var14 = false; + } + + if (var0.readySequence == var0.movementSequence && (var0.field987 > 25 || var14)) { + if (var0.turnLeftSequence != -1) { + var0.movementSequence = var0.turnLeftSequence; + } else { + var0.movementSequence = var0.walkSequence; + } + } + } else { + var0.rotation += var0.field988; + var14 = true; + if (var11 < var0.field988 || var11 > 2048 - var0.field988) { + var0.rotation = var0.orientation; + var14 = false; + } + + if (var0.movementSequence == var0.readySequence && (var0.field987 > 25 || var14)) { + if (var0.turnRightSequence != -1) { + var0.movementSequence = var0.turnRightSequence; + } else { + var0.movementSequence = var0.walkSequence; + } + } + } + + var0.rotation &= 2047; + } else { + var0.field987 = 0; + } + } + + var0.isWalking = false; + if (var0.movementSequence != -1) { + var2 = GrandExchangeOfferAgeComparator.SequenceDefinition_get(var0.movementSequence); + if (var2 != null && var2.frameIds != null) { + ++var0.movementFrameCycle; + if (var0.movementFrame < var2.frameIds.length && var0.movementFrameCycle > var2.frameLengths[var0.movementFrame]) { + var0.movementFrameCycle = 1; + ++var0.movementFrame; + InterfaceParent.addSequenceSoundEffect(var2, var0.movementFrame, var0.x, var0.y); + } + + if (var0.movementFrame >= var2.frameIds.length) { + var0.movementFrameCycle = 0; + var0.movementFrame = 0; + InterfaceParent.addSequenceSoundEffect(var2, var0.movementFrame, var0.x, var0.y); + } + } else { + var0.movementSequence = -1; + } + } + + if (var0.spotAnimation != -1 && Client.cycle >= var0.field975) { + if (var0.spotAnimationFrame < 0) { + var0.spotAnimationFrame = 0; + } + + var11 = WorldMapRegion.SpotAnimationDefinition_get(var0.spotAnimation).sequence; + if (var11 != -1) { + SequenceDefinition var12 = GrandExchangeOfferAgeComparator.SequenceDefinition_get(var11); + if (var12 != null && var12.frameIds != null) { + ++var0.spotAnimationFrameCycle; + if (var0.spotAnimationFrame < var12.frameIds.length && var0.spotAnimationFrameCycle > var12.frameLengths[var0.spotAnimationFrame]) { + var0.spotAnimationFrameCycle = 1; + ++var0.spotAnimationFrame; + InterfaceParent.addSequenceSoundEffect(var12, var0.spotAnimationFrame, var0.x, var0.y); + } + + if (var0.spotAnimationFrame >= var12.frameIds.length && (var0.spotAnimationFrame < 0 || var0.spotAnimationFrame >= var12.frameIds.length)) { + var0.spotAnimation = -1; + } + } else { + var0.spotAnimation = -1; + } + } else { + var0.spotAnimation = -1; + } + } + + if (var0.sequence != -1 && var0.sequenceDelay <= 1) { + var2 = GrandExchangeOfferAgeComparator.SequenceDefinition_get(var0.sequence); + if (var2.field3531 == 1 && var0.field994 > 0 && var0.field934 <= Client.cycle && var0.field982 < Client.cycle) { + var0.sequenceDelay = 1; + return; + } + } + + if (var0.sequence != -1 && var0.sequenceDelay == 0) { + var2 = GrandExchangeOfferAgeComparator.SequenceDefinition_get(var0.sequence); + if (var2 != null && var2.frameIds != null) { + ++var0.sequenceFrameCycle; + if (var0.sequenceFrame < var2.frameIds.length && var0.sequenceFrameCycle > var2.frameLengths[var0.sequenceFrame]) { + var0.sequenceFrameCycle = 1; + ++var0.sequenceFrame; + InterfaceParent.addSequenceSoundEffect(var2, var0.sequenceFrame, var0.x, var0.y); + } + + if (var0.sequenceFrame >= var2.frameIds.length) { + var0.sequenceFrame -= var2.frameCount; + ++var0.field971; + if (var0.field971 >= var2.field3516) { + var0.sequence = -1; + } else if (var0.sequenceFrame >= 0 && var0.sequenceFrame < var2.frameIds.length) { + InterfaceParent.addSequenceSoundEffect(var2, var0.sequenceFrame, var0.x, var0.y); + } else { + var0.sequence = -1; + } + } + + var0.isWalking = var2.field3523; + } else { + var0.sequence = -1; + } + } + + if (var0.sequenceDelay > 0) { + --var0.sequenceDelay; + } + + } + + @ObfuscatedName("lu") + @ObfuscatedSignature( + signature = "(B)V", + garbageValue = "-31" + ) + static void method41() { + if (Client.oculusOrbState == 1) { + Client.field826 = true; } - var3 = ~var3; - return var3; } } diff --git a/runescape-client/src/main/java/class30.java b/runescape-client/src/main/java/class30.java index 973856c5a9..e4a553e214 100644 --- a/runescape-client/src/main/java/class30.java +++ b/runescape-client/src/main/java/class30.java @@ -1,587 +1,308 @@ -import java.awt.FontMetrics; +import java.io.IOException; import net.runelite.mapping.Export; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("ad") +@ObfuscatedName("ag") public class class30 { - @ObfuscatedName("a") + @ObfuscatedName("sb") @ObfuscatedSignature( - signature = "Lad;" + signature = "Lke;" ) - static final class30 field251; - @ObfuscatedName("t") + @Export("masterDisk") + static ArchiveDisk masterDisk; + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Lad;" + signature = "Lag;" ) - static final class30 field249; - @ObfuscatedName("h") + static final class30 field258; + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Lks;" + signature = "Lag;" ) - @Export("ItemDefinition_fontPlain11") - public static Font ItemDefinition_fontPlain11; - @ObfuscatedName("g") - @Export("userHomeDirectory") - static String userHomeDirectory; - @ObfuscatedName("ad") - @Export("loginScreenFontMetrics") - static FontMetrics loginScreenFontMetrics; - @ObfuscatedName("ay") - @Export("hasFocus") - protected static boolean hasFocus; - @ObfuscatedName("n") + static final class30 field262; + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = -2143019859 + intValue = 908407325 + ) + static int field261; + @ObfuscatedName("hv") + @ObfuscatedGetter( + intValue = -378303491 + ) + @Export("cameraX") + static int cameraX; + @ObfuscatedName("b") + @ObfuscatedGetter( + intValue = 549808295 ) @Export("value") final int value; static { - field251 = new class30(0); - field249 = new class30(1); + field258 = new class30(0); + field262 = new class30(1); } class30(int var1) { this.value = var1; } - @ObfuscatedName("a") - public static String method602(long var0) { - if (var0 > 0L && var0 < 6582952005840035281L) { - if (var0 % 37L == 0L) { - return null; - } else { - int var2 = 0; - - for (long var3 = var0; var3 != 0L; var3 /= 37L) { - ++var2; - } - - StringBuilder var5 = new StringBuilder(var2); - - while (var0 != 0L) { - long var6 = var0; - var0 /= 37L; - var5.append(class288.base37Table[(int)(var6 - 37L * var0)]); - } - - return var5.reverse().toString(); - } - } else { - return null; - } - } - - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(ILjava/lang/String;Ljava/lang/String;I)V", - garbageValue = "422689867" + signature = "(B)Z", + garbageValue = "2" ) - @Export("addGameMessage") - static void addGameMessage(int var0, String var1, String var2) { - WorldMapLabel.addChatMessage(var0, var1, var2, (String)null); - } - - @ObfuscatedName("a") - @ObfuscatedSignature( - signature = "(Lhq;I)V", - garbageValue = "-156819162" - ) - public static void method607(AbstractArchive var0) { - EnumDefinition.EnumDefinition_archive = var0; - } - - @ObfuscatedName("t") - @ObfuscatedSignature( - signature = "(IIIIB)V", - garbageValue = "-22" - ) - static final void method609(int var0, int var1, int var2, int var3) { - for (int var4 = var1; var4 <= var3 + var1; ++var4) { - for (int var5 = var0; var5 <= var0 + var2; ++var5) { - if (var5 >= 0 && var5 < 104 && var4 >= 0 && var4 < 104) { - class96.field1300[0][var5][var4] = 127; - if (var0 == var5 && var5 > 0) { - Tiles.Tiles_heights[0][var5][var4] = Tiles.Tiles_heights[0][var5 - 1][var4]; - } - - if (var5 == var0 + var2 && var5 < 103) { - Tiles.Tiles_heights[0][var5][var4] = Tiles.Tiles_heights[0][var5 + 1][var4]; - } - - if (var4 == var1 && var4 > 0) { - Tiles.Tiles_heights[0][var5][var4] = Tiles.Tiles_heights[0][var5][var4 - 1]; - } - - if (var4 == var3 + var1 && var4 < 103) { - Tiles.Tiles_heights[0][var5][var4] = Tiles.Tiles_heights[0][var5][var4 + 1]; - } - } - } + public static boolean method565() { + long var0 = TaskHandler.currentTimeMillis(); + int var2 = (int)(var0 - NetCache.field3171); + NetCache.field3171 = var0; + if (var2 > 200) { + var2 = 200; } - } - - @ObfuscatedName("av") - @ObfuscatedSignature( - signature = "(ILcj;ZI)I", - garbageValue = "-151601010" - ) - static int method605(int var0, Script var1, boolean var2) { - if (var0 == ScriptOpcodes.FRIEND_COUNT) { - if (PacketWriter.friendSystem.field1044 == 0) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = -2; - } else if (PacketWriter.friendSystem.field1044 == 1) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = -1; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = PacketWriter.friendSystem.friendsList.getSize(); - } - - return 1; + NetCache.NetCache_loadTime += var2; + if (NetCache.NetCache_pendingResponsesCount == 0 && NetCache.NetCache_pendingPriorityResponsesCount == 0 && NetCache.NetCache_pendingWritesCount == 0 && NetCache.NetCache_pendingPriorityWritesCount == 0) { + return true; + } else if (NetCache.NetCache_socket == null) { + return false; } else { - int var3; - if (var0 == ScriptOpcodes.FRIEND_GETNAME) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - if (PacketWriter.friendSystem.method1973() && var3 >= 0 && var3 < PacketWriter.friendSystem.friendsList.getSize()) { - Friend var8 = (Friend)PacketWriter.friendSystem.friendsList.get(var3); - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var8.getName(); - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var8.getPreviousName(); + try { + if (NetCache.NetCache_loadTime > 30000) { + throw new IOException(); } else { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = ""; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = ""; - } - - return 1; - } else if (var0 == ScriptOpcodes.FRIEND_GETWORLD) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - if (PacketWriter.friendSystem.method1973() && var3 >= 0 && var3 < PacketWriter.friendSystem.friendsList.getSize()) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = ((Buddy)PacketWriter.friendSystem.friendsList.get(var3)).world; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - } - - return 1; - } else if (var0 == ScriptOpcodes.FRIEND_GETRANK) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - if (PacketWriter.friendSystem.method1973() && var3 >= 0 && var3 < PacketWriter.friendSystem.friendsList.getSize()) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = ((Buddy)PacketWriter.friendSystem.friendsList.get(var3)).rank; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - } - - return 1; - } else { - String var5; - if (var0 == ScriptOpcodes.FRIEND_SETRANK) { - var5 = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]; - int var6 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - ArchiveLoader.method1242(var5, var6); - return 1; - } else if (var0 == ScriptOpcodes.FRIEND_ADD) { - var5 = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]; - PacketWriter.friendSystem.addFriend(var5); - return 1; - } else if (var0 == ScriptOpcodes.FRIEND_DEL) { - var5 = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]; - PacketWriter.friendSystem.removeFriend(var5); - return 1; - } else if (var0 == ScriptOpcodes.IGNORE_ADD) { - var5 = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]; - PacketWriter.friendSystem.addIgnore(var5); - return 1; - } else if (var0 == ScriptOpcodes.IGNORE_DEL) { - var5 = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]; - PacketWriter.friendSystem.removeIgnore(var5); - return 1; - } else if (var0 == ScriptOpcodes.FRIEND_TEST) { - var5 = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]; - var5 = class186.method3776(var5); - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = PacketWriter.friendSystem.isFriended(new Username(var5, class60.loginType), false) ? 1 : 0; - return 1; - } else if (var0 == ScriptOpcodes.CLAN_GETCHATDISPLAYNAME) { - if (class4.clanChat != null) { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = class4.clanChat.name; - } else { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = ""; + NetFileRequest var3; + Buffer var4; + while (NetCache.NetCache_pendingPriorityResponsesCount < 200 && NetCache.NetCache_pendingPriorityWritesCount > 0) { + var3 = (NetFileRequest)NetCache.NetCache_pendingPriorityWrites.first(); + var4 = new Buffer(4); + var4.writeByte(1); + var4.writeMedium((int)var3.key); + NetCache.NetCache_socket.write(var4.array, 0, 4); + NetCache.NetCache_pendingPriorityResponses.put(var3, var3.key); + --NetCache.NetCache_pendingPriorityWritesCount; + ++NetCache.NetCache_pendingPriorityResponsesCount; } - return 1; - } else if (var0 == ScriptOpcodes.CLAN_GETCHATCOUNT) { - if (class4.clanChat != null) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = class4.clanChat.getSize(); - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; + while (NetCache.NetCache_pendingResponsesCount < 200 && NetCache.NetCache_pendingWritesCount > 0) { + var3 = (NetFileRequest)NetCache.NetCache_pendingWritesQueue.removeLast(); + var4 = new Buffer(4); + var4.writeByte(0); + var4.writeMedium((int)var3.key); + NetCache.NetCache_socket.write(var4.array, 0, 4); + var3.removeDual(); + NetCache.NetCache_pendingResponses.put(var3, var3.key); + --NetCache.NetCache_pendingWritesCount; + ++NetCache.NetCache_pendingResponsesCount; } - return 1; - } else if (var0 == ScriptOpcodes.CLAN_GETCHATUSERNAME) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - if (class4.clanChat != null && var3 < class4.clanChat.getSize()) { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = class4.clanChat.get(var3).getUsername().getName(); - } else { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = ""; - } - - return 1; - } else if (var0 == ScriptOpcodes.CLAN_GETCHATUSERWORLD) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - if (class4.clanChat != null && var3 < class4.clanChat.getSize()) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = ((Buddy)class4.clanChat.get(var3)).getWorld(); - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - } - - return 1; - } else if (var0 == ScriptOpcodes.CLAN_GETCHATUSERRANK) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - if (class4.clanChat != null && var3 < class4.clanChat.getSize()) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = ((Buddy)class4.clanChat.get(var3)).rank; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - } - - return 1; - } else if (var0 == ScriptOpcodes.CLAN_GETCHATMINKICK) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = class4.clanChat != null ? class4.clanChat.minKick : 0; - return 1; - } else if (var0 == ScriptOpcodes.CLAN_KICKUSER) { - var5 = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]; - UserComparator9.clanKickUser(var5); - return 1; - } else if (var0 == ScriptOpcodes.CLAN_GETCHATRANK) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = class4.clanChat != null ? class4.clanChat.rank : 0; - return 1; - } else if (var0 == ScriptOpcodes.CLAN_JOINCHAT) { - var5 = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]; - Entity.Clan_joinChat(var5); - return 1; - } else if (var0 == ScriptOpcodes.CLAN_LEAVECHAT) { - class266.Clan_leaveChat(); - return 1; - } else if (var0 == ScriptOpcodes.IGNORE_COUNT) { - if (!PacketWriter.friendSystem.method1973()) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = -1; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = PacketWriter.friendSystem.ignoreList.getSize(); - } - - return 1; - } else if (var0 == ScriptOpcodes.IGNORE_GETNAME) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - if (PacketWriter.friendSystem.method1973() && var3 >= 0 && var3 < PacketWriter.friendSystem.ignoreList.getSize()) { - Ignored var4 = (Ignored)PacketWriter.friendSystem.ignoreList.get(var3); - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var4.getName(); - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var4.getPreviousName(); - } else { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = ""; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = ""; - } - - return 1; - } else if (var0 == ScriptOpcodes.IGNORE_TEST) { - var5 = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]; - var5 = class186.method3776(var5); - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = PacketWriter.friendSystem.isIgnored(new Username(var5, class60.loginType)) ? 1 : 0; - return 1; - } else if (var0 == ScriptOpcodes.CLAN_ISSELF) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - if (class4.clanChat != null && var3 < class4.clanChat.getSize() && class4.clanChat.get(var3).getUsername().equals(class215.localPlayer.username)) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 1; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - } - - return 1; - } else if (var0 == ScriptOpcodes.CLAN_GETCHATOWNERNAME) { - if (class4.clanChat != null && class4.clanChat.owner != null) { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = class4.clanChat.owner; - } else { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = ""; - } - - return 1; - } else if (var0 == ScriptOpcodes.CLAN_ISFRIEND) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - if (class4.clanChat != null && var3 < class4.clanChat.getSize() && ((ClanMate)class4.clanChat.get(var3)).isFriend()) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 1; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - } - - return 1; - } else if (var0 != ScriptOpcodes.CLAN_ISIGNORE) { - if (var0 == 3628) { - PacketWriter.friendSystem.friendsList.removeComparator(); - return 1; - } else { - boolean var7; - if (var0 == 3629) { - var7 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - PacketWriter.friendSystem.friendsList.addComparator(new UserComparator1(var7)); - return 1; - } else if (var0 == 3630) { - var7 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - PacketWriter.friendSystem.friendsList.addComparator(new UserComparator2(var7)); - return 1; - } else if (var0 == 3631) { - var7 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - PacketWriter.friendSystem.friendsList.addComparator(new UserComparator3(var7)); - return 1; - } else if (var0 == 3632) { - var7 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - PacketWriter.friendSystem.friendsList.addComparator(new UserComparator4(var7)); - return 1; - } else if (var0 == 3633) { - var7 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - PacketWriter.friendSystem.friendsList.addComparator(new UserComparator5(var7)); - return 1; - } else if (var0 == 3634) { - var7 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - PacketWriter.friendSystem.friendsList.addComparator(new UserComparator6(var7)); - return 1; - } else if (var0 == 3635) { - var7 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - PacketWriter.friendSystem.friendsList.addComparator(new UserComparator7(var7)); - return 1; - } else if (var0 == 3636) { - var7 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - PacketWriter.friendSystem.friendsList.addComparator(new UserComparator8(var7)); - return 1; - } else if (var0 == 3637) { - var7 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - PacketWriter.friendSystem.friendsList.addComparator(new UserComparator9(var7)); - return 1; - } else if (var0 == 3638) { - var7 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - PacketWriter.friendSystem.friendsList.addComparator(new UserComparator10(var7)); - return 1; - } else if (var0 == 3639) { - PacketWriter.friendSystem.friendsList.sort(); - return 1; - } else if (var0 == 3640) { - PacketWriter.friendSystem.ignoreList.removeComparator(); - return 1; - } else if (var0 == 3641) { - var7 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - PacketWriter.friendSystem.ignoreList.addComparator(new UserComparator1(var7)); - return 1; - } else if (var0 == 3642) { - var7 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - PacketWriter.friendSystem.ignoreList.addComparator(new UserComparator2(var7)); - return 1; - } else if (var0 == 3643) { - PacketWriter.friendSystem.ignoreList.sort(); - return 1; - } else if (var0 == 3644) { - if (class4.clanChat != null) { - class4.clanChat.removeComparator(); - } - - return 1; - } else if (var0 == 3645) { - var7 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - if (class4.clanChat != null) { - class4.clanChat.addComparator(new UserComparator1(var7)); - } - - return 1; - } else if (var0 == 3646) { - var7 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - if (class4.clanChat != null) { - class4.clanChat.addComparator(new UserComparator2(var7)); - } - - return 1; - } else if (var0 == 3647) { - var7 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - if (class4.clanChat != null) { - class4.clanChat.addComparator(new UserComparator3(var7)); - } - - return 1; - } else if (var0 == 3648) { - var7 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - if (class4.clanChat != null) { - class4.clanChat.addComparator(new UserComparator4(var7)); - } - - return 1; - } else if (var0 == 3649) { - var7 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - if (class4.clanChat != null) { - class4.clanChat.addComparator(new UserComparator5(var7)); - } - - return 1; - } else if (var0 == 3650) { - var7 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - if (class4.clanChat != null) { - class4.clanChat.addComparator(new UserComparator6(var7)); - } - - return 1; - } else if (var0 == 3651) { - var7 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - if (class4.clanChat != null) { - class4.clanChat.addComparator(new UserComparator7(var7)); - } - - return 1; - } else if (var0 == 3652) { - var7 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - if (class4.clanChat != null) { - class4.clanChat.addComparator(new UserComparator8(var7)); - } - - return 1; - } else if (var0 == 3653) { - var7 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - if (class4.clanChat != null) { - class4.clanChat.addComparator(new UserComparator9(var7)); - } - - return 1; - } else if (var0 == 3654) { - var7 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - if (class4.clanChat != null) { - class4.clanChat.addComparator(new UserComparator10(var7)); - } - - return 1; - } else if (var0 == 3655) { - if (class4.clanChat != null) { - class4.clanChat.sort(); - } - - return 1; - } else if (var0 == 3656) { - var7 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - PacketWriter.friendSystem.friendsList.addComparator(new BuddyRankComparator(var7)); - return 1; - } else if (var0 == 3657) { - var7 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - if (class4.clanChat != null) { - class4.clanChat.addComparator(new BuddyRankComparator(var7)); - } - - return 1; - } else { - return 2; + for (int var15 = 0; var15 < 100; ++var15) { + int var16 = NetCache.NetCache_socket.available(); + if (var16 < 0) { + throw new IOException(); } - } - } else { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - if (class4.clanChat != null && var3 < class4.clanChat.getSize() && ((ClanMate)class4.clanChat.get(var3)).isIgnored()) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 1; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - } - return 1; - } - } - } - } + if (var16 == 0) { + break; + } - @ObfuscatedName("an") - @ObfuscatedSignature( - signature = "(II)I", - garbageValue = "1497989871" - ) - static int method608(int var0) { - return (int)((Math.log((double)var0) / Interpreter.field1078 - 7.0D) * 256.0D); - } + NetCache.NetCache_loadTime = 0; + byte var5 = 0; + if (NetCache.NetCache_currentResponse == null) { + var5 = 8; + } else if (NetCache.field3188 == 0) { + var5 = 1; + } - @ObfuscatedName("hs") - @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "95" - ) - static final void method606() { - PacketBuffer var0 = Client.packetWriter.packetBuffer; - var0.importIndex(); - int var1 = var0.readBits(8); - int var2; - if (var1 < Client.npcCount) { - for (var2 = var1; var2 < Client.npcCount; ++var2) { - Client.field870[++Client.field752 - 1] = Client.npcIndices[var2]; - } - } - - if (var1 > Client.npcCount) { - throw new RuntimeException(""); - } else { - Client.npcCount = 0; - - for (var2 = 0; var2 < var1; ++var2) { - int var3 = Client.npcIndices[var2]; - NPC var4 = Client.npcs[var3]; - int var5 = var0.readBits(1); - if (var5 == 0) { - Client.npcIndices[++Client.npcCount - 1] = var3; - var4.npcCycle = Client.cycle; - } else { - int var6 = var0.readBits(2); - if (var6 == 0) { - Client.npcIndices[++Client.npcCount - 1] = var3; - var4.npcCycle = Client.cycle; - Client.field677[++Client.field676 - 1] = var3; - } else { + int var6; int var7; int var8; - if (var6 == 1) { - Client.npcIndices[++Client.npcCount - 1] = var3; - var4.npcCycle = Client.cycle; - var7 = var0.readBits(3); - var4.method2174(var7, (byte)1); - var8 = var0.readBits(1); - if (var8 == 1) { - Client.field677[++Client.field676 - 1] = var3; + int var10; + byte[] var10000; + int var10001; + Buffer var22; + if (var5 > 0) { + var6 = var5 - NetCache.NetCache_responseHeaderBuffer.offset; + if (var6 > var16) { + var6 = var16; } - } else if (var6 == 2) { - Client.npcIndices[++Client.npcCount - 1] = var3; - var4.npcCycle = Client.cycle; - var7 = var0.readBits(3); - var4.method2174(var7, (byte)2); - var8 = var0.readBits(3); - var4.method2174(var8, (byte)2); - int var9 = var0.readBits(1); - if (var9 == 1) { - Client.field677[++Client.field676 - 1] = var3; + + NetCache.NetCache_socket.read(NetCache.NetCache_responseHeaderBuffer.array, NetCache.NetCache_responseHeaderBuffer.offset, var6); + if (NetCache.field3184 != 0) { + for (var7 = 0; var7 < var6; ++var7) { + var10000 = NetCache.NetCache_responseHeaderBuffer.array; + var10001 = NetCache.NetCache_responseHeaderBuffer.offset + var7; + var10000[var10001] ^= NetCache.field3184; + } + } + + var22 = NetCache.NetCache_responseHeaderBuffer; + var22.offset += var6; + if (NetCache.NetCache_responseHeaderBuffer.offset < var5) { + break; + } + + if (NetCache.NetCache_currentResponse == null) { + NetCache.NetCache_responseHeaderBuffer.offset = 0; + var7 = NetCache.NetCache_responseHeaderBuffer.readUnsignedByte(); + var8 = NetCache.NetCache_responseHeaderBuffer.readUnsignedShort(); + int var9 = NetCache.NetCache_responseHeaderBuffer.readUnsignedByte(); + var10 = NetCache.NetCache_responseHeaderBuffer.readInt(); + long var11 = (long)(var8 + (var7 << 16)); + NetFileRequest var13 = (NetFileRequest)NetCache.NetCache_pendingPriorityResponses.get(var11); + NetCache.field3181 = true; + if (var13 == null) { + var13 = (NetFileRequest)NetCache.NetCache_pendingResponses.get(var11); + NetCache.field3181 = false; + } + + if (var13 == null) { + throw new IOException(); + } + + int var14 = var9 == 0 ? 5 : 9; + NetCache.NetCache_currentResponse = var13; + class32.NetCache_responseArchiveBuffer = new Buffer(var10 + var14 + NetCache.NetCache_currentResponse.padding); + class32.NetCache_responseArchiveBuffer.writeByte(var9); + class32.NetCache_responseArchiveBuffer.writeInt(var10); + NetCache.field3188 = 8; + NetCache.NetCache_responseHeaderBuffer.offset = 0; + } else if (NetCache.field3188 == 0) { + if (NetCache.NetCache_responseHeaderBuffer.array[0] == -1) { + NetCache.field3188 = 1; + NetCache.NetCache_responseHeaderBuffer.offset = 0; + } else { + NetCache.NetCache_currentResponse = null; + } + } + } else { + var6 = class32.NetCache_responseArchiveBuffer.array.length - NetCache.NetCache_currentResponse.padding; + var7 = 512 - NetCache.field3188; + if (var7 > var6 - class32.NetCache_responseArchiveBuffer.offset) { + var7 = var6 - class32.NetCache_responseArchiveBuffer.offset; + } + + if (var7 > var16) { + var7 = var16; + } + + NetCache.NetCache_socket.read(class32.NetCache_responseArchiveBuffer.array, class32.NetCache_responseArchiveBuffer.offset, var7); + if (NetCache.field3184 != 0) { + for (var8 = 0; var8 < var7; ++var8) { + var10000 = class32.NetCache_responseArchiveBuffer.array; + var10001 = class32.NetCache_responseArchiveBuffer.offset + var8; + var10000[var10001] ^= NetCache.field3184; + } + } + + var22 = class32.NetCache_responseArchiveBuffer; + var22.offset += var7; + NetCache.field3188 += var7; + if (var6 == class32.NetCache_responseArchiveBuffer.offset) { + if (16711935L == NetCache.NetCache_currentResponse.key) { + class83.NetCache_reference = class32.NetCache_responseArchiveBuffer; + + for (var8 = 0; var8 < 256; ++var8) { + Archive var17 = NetCache.NetCache_archives[var8]; + if (var17 != null) { + class83.NetCache_reference.offset = var8 * 8 + 5; + var10 = class83.NetCache_reference.readInt(); + int var18 = class83.NetCache_reference.readInt(); + var17.loadIndex(var10, var18); + } + } + } else { + NetCache.NetCache_crc.reset(); + NetCache.NetCache_crc.update(class32.NetCache_responseArchiveBuffer.array, 0, var6); + var8 = (int)NetCache.NetCache_crc.getValue(); + if (var8 != NetCache.NetCache_currentResponse.crc) { + try { + NetCache.NetCache_socket.close(); + } catch (Exception var20) { + } + + ++NetCache.NetCache_crcMismatches; + NetCache.NetCache_socket = null; + NetCache.field3184 = (byte)((int)(Math.random() * 255.0D + 1.0D)); + return false; + } + + NetCache.NetCache_crcMismatches = 0; + NetCache.NetCache_ioExceptions = 0; + NetCache.NetCache_currentResponse.archive.write((int)(NetCache.NetCache_currentResponse.key & 65535L), class32.NetCache_responseArchiveBuffer.array, 16711680L == (NetCache.NetCache_currentResponse.key & 16711680L), NetCache.field3181); + } + + NetCache.NetCache_currentResponse.remove(); + if (NetCache.field3181) { + --NetCache.NetCache_pendingPriorityResponsesCount; + } else { + --NetCache.NetCache_pendingResponsesCount; + } + + NetCache.field3188 = 0; + NetCache.NetCache_currentResponse = null; + class32.NetCache_responseArchiveBuffer = null; + } else { + if (NetCache.field3188 != 512) { + break; + } + + NetCache.field3188 = 0; } - } else if (var6 == 3) { - Client.field870[++Client.field752 - 1] = var3; } } + + return true; } + } catch (IOException var21) { + try { + NetCache.NetCache_socket.close(); + } catch (Exception var19) { + } + + ++NetCache.NetCache_ioExceptions; + NetCache.NetCache_socket = null; + return false; } - } } - @ObfuscatedName("iz") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "125" + signature = "(II)Lci;", + garbageValue = "-900188617" ) - static void method603() { - Decimator.calculateMenuBounds(KeyHandler.menuWidth / 2 + MusicPatchNode.menuX, TextureProvider.menuY); + @Export("getScript") + static Script getScript(int var0) { + Script var1 = (Script)Script.Script_cached.get((long)var0); + if (var1 != null) { + return var1; + } else { + byte[] var2 = class267.archive12.takeFile(var0, 0); + if (var2 == null) { + return null; + } else { + var1 = WorldMapArea.newScript(var2); + Script.Script_cached.put(var1, (long)var0); + return var1; + } + } } - @ObfuscatedName("kp") + @ObfuscatedName("gg") @ObfuscatedSignature( - signature = "(Lhi;B)Lhi;", - garbageValue = "1" + signature = "(Lbg;I)Z", + garbageValue = "-276383338" ) - static Widget method604(Widget var0) { - Widget var1 = TextureProvider.method2909(var0); - if (var1 == null) { - var1 = var0.parent; + static boolean method563(Player var0) { + if (Client.drawPlayerNames == 0) { + return false; + } else if (class215.localPlayer == var0) { + boolean var1 = (Client.drawPlayerNames & 8) != 0; + return var1; + } else { + return WorldMapSection0.method257() || class1.method16() && var0.isFriend() || FriendSystem.method1920() && var0.isClanMember(); } - - return var1; } } diff --git a/runescape-client/src/main/java/class300.java b/runescape-client/src/main/java/class300.java index 9408388bc2..6a1d6bb991 100644 --- a/runescape-client/src/main/java/class300.java +++ b/runescape-client/src/main/java/class300.java @@ -1,9 +1,9 @@ import net.runelite.mapping.Export; import net.runelite.mapping.ObfuscatedName; -@ObfuscatedName("ki") +@ObfuscatedName("kz") public class class300 { - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("writeRandomDat") public static void writeRandomDat(byte[] var0, int var1, byte[] var2, int var3, int var4) { if (var2 == var0) { @@ -51,7 +51,7 @@ public class class300 { } - @ObfuscatedName("d") + @ObfuscatedName("i") @Export("clearIntArray") public static void clearIntArray(int[] var0, int var1, int var2) { for (var2 = var2 + var1 - 7; var1 < var2; var0[var1++] = 0) { diff --git a/runescape-client/src/main/java/class312.java b/runescape-client/src/main/java/class312.java index 85add9d4ca..27468147fc 100644 --- a/runescape-client/src/main/java/class312.java +++ b/runescape-client/src/main/java/class312.java @@ -3,167 +3,92 @@ import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("lc") +@ObfuscatedName("lx") public enum class312 implements Enumerated { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "Llc;" + signature = "Llx;" ) - field3799(0, 0), - @ObfuscatedName("t") + field3814(5, 0), + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "Llc;" + signature = "Llx;" ) - field3798(4, 2), - @ObfuscatedName("n") + field3811(3, 2), + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "Llc;" + signature = "Llx;" ) - field3800(3, 5), - @ObfuscatedName("q") + field3810(0, 5), + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "Llc;" + signature = "Llx;" ) - field3801(2, 6), - @ObfuscatedName("v") + field3813(1, 6), + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "Llc;" + signature = "Llx;" ) - field3805(5, 7), - @ObfuscatedName("l") + field3815(4, 7), + @ObfuscatedName("p") @ObfuscatedSignature( - signature = "Llc;" + signature = "Llx;" ) - field3802(1, 8); + field3816(2, 8); - @ObfuscatedName("e") - static String[] field3803; - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedGetter( - intValue = 710760119 + intValue = -348490887 ) - final int field3797; - @ObfuscatedName("o") + final int field3812; + @ObfuscatedName("y") @ObfuscatedGetter( - intValue = 1869652173 + intValue = -1264543599 ) @Export("id") final int id; class312(int var3, int var4) { - this.field3797 = var3; + this.field3812 = var3; this.id = var4; } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(I)I", - garbageValue = "-1993081102" + signature = "(B)I", + garbageValue = "7" ) @Export("rsOrdinal") public int rsOrdinal() { return this.id; } - @ObfuscatedName("a") + @ObfuscatedName("jt") @ObfuscatedSignature( - signature = "(Ljava/lang/CharSequence;I)Ljava/lang/String;", - garbageValue = "-911741396" + signature = "(I)V", + garbageValue = "-847322953" ) - public static String method6014(CharSequence var0) { - int var1 = var0.length(); - StringBuilder var2 = new StringBuilder(var1); + static void method6006() { + for (InterfaceParent var0 = (InterfaceParent)Client.interfaceParents.first(); var0 != null; var0 = (InterfaceParent)Client.interfaceParents.next()) { + int var1 = var0.group; + if (UserComparator3.loadInterface(var1)) { + boolean var2 = true; + Widget[] var3 = FloorDecoration.Widget_interfaceComponents[var1]; - for (int var3 = 0; var3 < var1; ++var3) { - char var4 = var0.charAt(var3); - if ((var4 < 'a' || var4 > 'z') && (var4 < 'A' || var4 > 'Z') && (var4 < '0' || var4 > '9') && var4 != '.' && var4 != '-' && var4 != '*' && var4 != '_') { - if (var4 == ' ') { - var2.append('+'); - } else { - byte var5 = WorldMapData_1.charToByteCp1252(var4); - var2.append('%'); - int var6 = var5 >> 4 & 15; - if (var6 >= 10) { - var2.append((char)(var6 + 55)); - } else { - var2.append((char)(var6 + 48)); - } - - var6 = var5 & 15; - if (var6 >= 10) { - var2.append((char)(var6 + 55)); - } else { - var2.append((char)(var6 + 48)); + int var4; + for (var4 = 0; var4 < var3.length; ++var4) { + if (var3[var4] != null) { + var2 = var3[var4].isIf3; + break; } } - } else { - var2.append(var4); - } - } - return var2.toString(); - } - - @ObfuscatedName("v") - @ObfuscatedSignature( - signature = "(Lkc;IIIIIIB)V", - garbageValue = "106" - ) - @Export("loadTerrain") - static final void loadTerrain(Buffer var0, int var1, int var2, int var3, int var4, int var5, int var6) { - int var7; - if (var2 >= 0 && var2 < 104 && var3 >= 0 && var3 < 104) { - Tiles.Tiles_renderFlags[var1][var2][var3] = 0; - - while (true) { - var7 = var0.readUnsignedByte(); - if (var7 == 0) { - if (var1 == 0) { - Tiles.Tiles_heights[0][var2][var3] = -SpotAnimationDefinition.method4582(var2 + 932731 + var4, var5 + 556238 + var3) * 8; - } else { - Tiles.Tiles_heights[var1][var2][var3] = Tiles.Tiles_heights[var1 - 1][var2][var3] - 240; + if (!var2) { + var4 = (int)var0.key; + Widget var5 = Language.getWidget(var4); + if (var5 != null) { + ScriptEvent.invalidateWidget(var5); } - break; - } - - if (var7 == 1) { - int var8 = var0.readUnsignedByte(); - if (var8 == 1) { - var8 = 0; - } - - if (var1 == 0) { - Tiles.Tiles_heights[0][var2][var3] = -var8 * 8; - } else { - Tiles.Tiles_heights[var1][var2][var3] = Tiles.Tiles_heights[var1 - 1][var2][var3] - var8 * 8; - } - break; - } - - if (var7 <= 49) { - Tiles.field485[var1][var2][var3] = var0.readByte(); - Tiles.field482[var1][var2][var3] = (byte)((var7 - 2) / 4); - Tiles.field483[var1][var2][var3] = (byte)(var7 - 2 + var6 & 3); - } else if (var7 <= 81) { - Tiles.Tiles_renderFlags[var1][var2][var3] = (byte)(var7 - 49); - } else { - SoundSystem.field1414[var1][var2][var3] = (byte)(var7 - 81); - } - } - } else { - while (true) { - var7 = var0.readUnsignedByte(); - if (var7 == 0) { - break; - } - - if (var7 == 1) { - var0.readUnsignedByte(); - break; - } - - if (var7 <= 49) { - var0.readUnsignedByte(); } } } diff --git a/runescape-client/src/main/java/class319.java b/runescape-client/src/main/java/class319.java index da32128fb8..7b1b1629a9 100644 --- a/runescape-client/src/main/java/class319.java +++ b/runescape-client/src/main/java/class319.java @@ -2,21 +2,12 @@ import net.runelite.mapping.Export; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("li") +@ObfuscatedName("ls") public class class319 { - @ObfuscatedName("t") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "(Lkf;IB)V", - garbageValue = "-107" + signature = "Lln;" ) - @Export("updatePlayers") - static final void updatePlayers(PacketBuffer var0, int var1) { - int var2 = var0.offset; - Players.Players_pendingUpdateCount = 0; - DevicePcmPlayerProvider.method919(var0); - class2.method49(var0); - if (var0.offset - var2 != var1) { - throw new RuntimeException(var0.offset - var2 + " " + var1); - } - } + @Export("rightTitleSprite") + static Sprite rightTitleSprite; } diff --git a/runescape-client/src/main/java/class32.java b/runescape-client/src/main/java/class32.java index 67320c684c..3a5cadb796 100644 --- a/runescape-client/src/main/java/class32.java +++ b/runescape-client/src/main/java/class32.java @@ -1,137 +1,802 @@ -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InvalidClassException; -import java.io.ObjectInputStream; -import java.io.OptionalDataException; -import java.io.StreamCorruptedException; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import net.runelite.mapping.Export; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -import net.runelite.rs.Reflection; -@ObfuscatedName("ak") +@ObfuscatedName("aw") public class class32 { - @ObfuscatedName("bc") + @ObfuscatedName("r") @ObfuscatedSignature( - signature = "Lhr;" + signature = "Lkg;" ) - static ServerBuild field265; + @Export("NetCache_responseArchiveBuffer") + static Buffer NetCache_responseArchiveBuffer; - @ObfuscatedName("t") + @ObfuscatedName("hf") @ObfuscatedSignature( - signature = "(Lkf;I)V", - garbageValue = "1545814995" + signature = "(IIIILjava/lang/String;Ljava/lang/String;IIB)V", + garbageValue = "64" ) - @Export("performReflectionCheck") - public static void performReflectionCheck(PacketBuffer var0) { - ReflectionCheck var1 = (ReflectionCheck)class96.reflectionChecks.last(); - if (var1 != null) { - int var2 = var0.offset; - var0.writeInt(var1.id); + @Export("menuAction") + static final void menuAction(int var0, int var1, int var2, int var3, String var4, String var5, int var6, int var7) { + if (var2 >= 2000) { + var2 -= 2000; + } - for (int var3 = 0; var3 < var1.size; ++var3) { - if (var1.creationErrors[var3] != 0) { - var0.writeByte(var1.creationErrors[var3]); + PacketBufferNode var8; + if (var2 == 1) { + Client.mouseCrossX = var6; + Client.mouseCrossY = var7; + Client.mouseCrossColor = 2; + Client.mouseCrossState = 0; + Client.destinationX = var0; + Client.destinationY = var1; + var8 = ModelData0.getPacketBufferNode(ClientPacket.field2244, Client.packetWriter.isaacCipher); + var8.packetBuffer.writeShort(class51.baseX * 64 + var0); + var8.packetBuffer.method5628(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); + var8.packetBuffer.writeShortLE(class43.selectedItemSlot); + var8.packetBuffer.method5636(HealthBarUpdate.selectedItemId); + var8.packetBuffer.method5648(class1.selectedItemWidget); + var8.packetBuffer.writeShortLE(var3); + var8.packetBuffer.writeShort(VarcInt.baseY * 64 + var1); + Client.packetWriter.addNode(var8); + } else if (var2 == 2) { + Client.mouseCrossX = var6; + Client.mouseCrossY = var7; + Client.mouseCrossColor = 2; + Client.mouseCrossState = 0; + Client.destinationX = var0; + Client.destinationY = var1; + var8 = ModelData0.getPacketBufferNode(ClientPacket.field2263, Client.packetWriter.isaacCipher); + var8.packetBuffer.method5636(Client.selectedSpellChildIndex); + var8.packetBuffer.method5613(var3); + var8.packetBuffer.method5613(VarcInt.baseY * 64 + var1); + var8.packetBuffer.writeInt(WorldMapAreaData.selectedSpellWidget); + var8.packetBuffer.method5628(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); + var8.packetBuffer.writeShortLE(class51.baseX * 64 + var0); + Client.packetWriter.addNode(var8); + } else if (var2 == 3) { + Client.mouseCrossX = var6; + Client.mouseCrossY = var7; + Client.mouseCrossColor = 2; + Client.mouseCrossState = 0; + Client.destinationX = var0; + Client.destinationY = var1; + var8 = ModelData0.getPacketBufferNode(ClientPacket.field2226, Client.packetWriter.isaacCipher); + var8.packetBuffer.writeShortLE(VarcInt.baseY * 64 + var1); + var8.packetBuffer.writeShortLE(class51.baseX * 64 + var0); + var8.packetBuffer.method5598(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); + var8.packetBuffer.writeShortLE(var3); + Client.packetWriter.addNode(var8); + } else if (var2 == 4) { + Client.mouseCrossX = var6; + Client.mouseCrossY = var7; + Client.mouseCrossColor = 2; + Client.mouseCrossState = 0; + Client.destinationX = var0; + Client.destinationY = var1; + var8 = ModelData0.getPacketBufferNode(ClientPacket.field2297, Client.packetWriter.isaacCipher); + var8.packetBuffer.method5628(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); + var8.packetBuffer.method5636(VarcInt.baseY * 64 + var1); + var8.packetBuffer.method5636(var3); + var8.packetBuffer.writeShort(class51.baseX * 64 + var0); + Client.packetWriter.addNode(var8); + } else if (var2 == 5) { + Client.mouseCrossX = var6; + Client.mouseCrossY = var7; + Client.mouseCrossColor = 2; + Client.mouseCrossState = 0; + Client.destinationX = var0; + Client.destinationY = var1; + var8 = ModelData0.getPacketBufferNode(ClientPacket.field2237, Client.packetWriter.isaacCipher); + var8.packetBuffer.method5613(VarcInt.baseY * 64 + var1); + var8.packetBuffer.method5613(var3); + var8.packetBuffer.method5636(class51.baseX * 64 + var0); + var8.packetBuffer.method5598(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); + Client.packetWriter.addNode(var8); + } else if (var2 == 6) { + Client.mouseCrossX = var6; + Client.mouseCrossY = var7; + Client.mouseCrossColor = 2; + Client.mouseCrossState = 0; + Client.destinationX = var0; + Client.destinationY = var1; + var8 = ModelData0.getPacketBufferNode(ClientPacket.field2252, Client.packetWriter.isaacCipher); + var8.packetBuffer.writeIntME(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); + var8.packetBuffer.writeShortLE(VarcInt.baseY * 64 + var1); + var8.packetBuffer.method5636(var3); + var8.packetBuffer.method5613(class51.baseX * 64 + var0); + Client.packetWriter.addNode(var8); + } else { + PacketBufferNode var9; + NPC var13; + if (var2 == 7) { + var13 = Client.npcs[var3]; + if (var13 != null) { + Client.mouseCrossX = var6; + Client.mouseCrossY = var7; + Client.mouseCrossColor = 2; + Client.mouseCrossState = 0; + Client.destinationX = var0; + Client.destinationY = var1; + var9 = ModelData0.getPacketBufferNode(ClientPacket.field2316, Client.packetWriter.isaacCipher); + var9.packetBuffer.writeInt(class1.selectedItemWidget); + var9.packetBuffer.writeIntME(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); + var9.packetBuffer.method5636(HealthBarUpdate.selectedItemId); + var9.packetBuffer.method5613(var3); + var9.packetBuffer.method5613(class43.selectedItemSlot); + Client.packetWriter.addNode(var9); + } + } else if (var2 == 8) { + var13 = Client.npcs[var3]; + if (var13 != null) { + Client.mouseCrossX = var6; + Client.mouseCrossY = var7; + Client.mouseCrossColor = 2; + Client.mouseCrossState = 0; + Client.destinationX = var0; + Client.destinationY = var1; + var9 = ModelData0.getPacketBufferNode(ClientPacket.field2300, Client.packetWriter.isaacCipher); + var9.packetBuffer.writeInt(WorldMapAreaData.selectedSpellWidget); + var9.packetBuffer.method5636(Client.selectedSpellChildIndex); + var9.packetBuffer.method5598(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); + var9.packetBuffer.method5613(var3); + Client.packetWriter.addNode(var9); + } + } else if (var2 == 9) { + var13 = Client.npcs[var3]; + if (var13 != null) { + Client.mouseCrossX = var6; + Client.mouseCrossY = var7; + Client.mouseCrossColor = 2; + Client.mouseCrossState = 0; + Client.destinationX = var0; + Client.destinationY = var1; + var9 = ModelData0.getPacketBufferNode(ClientPacket.field2255, Client.packetWriter.isaacCipher); + var9.packetBuffer.method5636(var3); + var9.packetBuffer.writeIntME(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); + Client.packetWriter.addNode(var9); + } + } else if (var2 == 10) { + var13 = Client.npcs[var3]; + if (var13 != null) { + Client.mouseCrossX = var6; + Client.mouseCrossY = var7; + Client.mouseCrossColor = 2; + Client.mouseCrossState = 0; + Client.destinationX = var0; + Client.destinationY = var1; + var9 = ModelData0.getPacketBufferNode(ClientPacket.field2245, Client.packetWriter.isaacCipher); + var9.packetBuffer.writeShortLE(var3); + var9.packetBuffer.method5598(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); + Client.packetWriter.addNode(var9); + } + } else if (var2 == 11) { + var13 = Client.npcs[var3]; + if (var13 != null) { + Client.mouseCrossX = var6; + Client.mouseCrossY = var7; + Client.mouseCrossColor = 2; + Client.mouseCrossState = 0; + Client.destinationX = var0; + Client.destinationY = var1; + var9 = ModelData0.getPacketBufferNode(ClientPacket.field2308, Client.packetWriter.isaacCipher); + var9.packetBuffer.method5613(var3); + var9.packetBuffer.method5628(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); + Client.packetWriter.addNode(var9); + } + } else if (var2 == 12) { + var13 = Client.npcs[var3]; + if (var13 != null) { + Client.mouseCrossX = var6; + Client.mouseCrossY = var7; + Client.mouseCrossColor = 2; + Client.mouseCrossState = 0; + Client.destinationX = var0; + Client.destinationY = var1; + var9 = ModelData0.getPacketBufferNode(ClientPacket.field2243, Client.packetWriter.isaacCipher); + var9.packetBuffer.method5628(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); + var9.packetBuffer.writeShortLE(var3); + Client.packetWriter.addNode(var9); + } + } else if (var2 == 13) { + var13 = Client.npcs[var3]; + if (var13 != null) { + Client.mouseCrossX = var6; + Client.mouseCrossY = var7; + Client.mouseCrossColor = 2; + Client.mouseCrossState = 0; + Client.destinationX = var0; + Client.destinationY = var1; + var9 = ModelData0.getPacketBufferNode(ClientPacket.field2257, Client.packetWriter.isaacCipher); + var9.packetBuffer.method5598(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); + var9.packetBuffer.method5613(var3); + Client.packetWriter.addNode(var9); + } + } else { + Player var15; + if (var2 == 14) { + var15 = Client.players[var3]; + if (var15 != null) { + Client.mouseCrossX = var6; + Client.mouseCrossY = var7; + Client.mouseCrossColor = 2; + Client.mouseCrossState = 0; + Client.destinationX = var0; + Client.destinationY = var1; + var9 = ModelData0.getPacketBufferNode(ClientPacket.field2286, Client.packetWriter.isaacCipher); + var9.packetBuffer.method5636(HealthBarUpdate.selectedItemId); + var9.packetBuffer.writeIntME(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); + var9.packetBuffer.writeInt(class1.selectedItemWidget); + var9.packetBuffer.writeShortLE(var3); + var9.packetBuffer.method5613(class43.selectedItemSlot); + Client.packetWriter.addNode(var9); + } + } else if (var2 == 15) { + var15 = Client.players[var3]; + if (var15 != null) { + Client.mouseCrossX = var6; + Client.mouseCrossY = var7; + Client.mouseCrossColor = 2; + Client.mouseCrossState = 0; + Client.destinationX = var0; + Client.destinationY = var1; + var9 = ModelData0.getPacketBufferNode(ClientPacket.field2225, Client.packetWriter.isaacCipher); + var9.packetBuffer.method5613(var3); + var9.packetBuffer.method5811(WorldMapAreaData.selectedSpellWidget); + var9.packetBuffer.method5628(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); + var9.packetBuffer.method5613(Client.selectedSpellChildIndex); + Client.packetWriter.addNode(var9); + } + } else if (var2 == 16) { + Client.mouseCrossX = var6; + Client.mouseCrossY = var7; + Client.mouseCrossColor = 2; + Client.mouseCrossState = 0; + Client.destinationX = var0; + Client.destinationY = var1; + var8 = ModelData0.getPacketBufferNode(ClientPacket.field2284, Client.packetWriter.isaacCipher); + var8.packetBuffer.method5613(class43.selectedItemSlot); + var8.packetBuffer.writeShortLE(class51.baseX * 64 + var0); + var8.packetBuffer.method5811(class1.selectedItemWidget); + var8.packetBuffer.writeShort(VarcInt.baseY * 64 + var1); + var8.packetBuffer.method5628(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); + var8.packetBuffer.writeShortLE(HealthBarUpdate.selectedItemId); + var8.packetBuffer.method5613(var3); + Client.packetWriter.addNode(var8); + } else if (var2 == 17) { + Client.mouseCrossX = var6; + Client.mouseCrossY = var7; + Client.mouseCrossColor = 2; + Client.mouseCrossState = 0; + Client.destinationX = var0; + Client.destinationY = var1; + var8 = ModelData0.getPacketBufferNode(ClientPacket.field2254, Client.packetWriter.isaacCipher); + var8.packetBuffer.method5613(class51.baseX * 64 + var0); + var8.packetBuffer.method5598(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); + var8.packetBuffer.writeShort(VarcInt.baseY * 64 + var1); + var8.packetBuffer.writeShortLE(var3); + var8.packetBuffer.method5648(WorldMapAreaData.selectedSpellWidget); + var8.packetBuffer.method5636(Client.selectedSpellChildIndex); + Client.packetWriter.addNode(var8); + } else if (var2 == 18) { + Client.mouseCrossX = var6; + Client.mouseCrossY = var7; + Client.mouseCrossColor = 2; + Client.mouseCrossState = 0; + Client.destinationX = var0; + Client.destinationY = var1; + var8 = ModelData0.getPacketBufferNode(ClientPacket.field2236, Client.packetWriter.isaacCipher); + var8.packetBuffer.method5598(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); + var8.packetBuffer.method5636(var3); + var8.packetBuffer.writeShort(VarcInt.baseY * 64 + var1); + var8.packetBuffer.method5636(class51.baseX * 64 + var0); + Client.packetWriter.addNode(var8); + } else if (var2 == 19) { + Client.mouseCrossX = var6; + Client.mouseCrossY = var7; + Client.mouseCrossColor = 2; + Client.mouseCrossState = 0; + Client.destinationX = var0; + Client.destinationY = var1; + var8 = ModelData0.getPacketBufferNode(ClientPacket.field2227, Client.packetWriter.isaacCipher); + var8.packetBuffer.writeShortLE(class51.baseX * 64 + var0); + var8.packetBuffer.method5598(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); + var8.packetBuffer.method5636(var3); + var8.packetBuffer.writeShort(VarcInt.baseY * 64 + var1); + Client.packetWriter.addNode(var8); + } else if (var2 == 20) { + Client.mouseCrossX = var6; + Client.mouseCrossY = var7; + Client.mouseCrossColor = 2; + Client.mouseCrossState = 0; + Client.destinationX = var0; + Client.destinationY = var1; + var8 = ModelData0.getPacketBufferNode(ClientPacket.field2233, Client.packetWriter.isaacCipher); + var8.packetBuffer.writeByte(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); + var8.packetBuffer.method5613(var3); + var8.packetBuffer.method5613(VarcInt.baseY * 64 + var1); + var8.packetBuffer.writeShortLE(class51.baseX * 64 + var0); + Client.packetWriter.addNode(var8); + } else if (var2 == 21) { + Client.mouseCrossX = var6; + Client.mouseCrossY = var7; + Client.mouseCrossColor = 2; + Client.mouseCrossState = 0; + Client.destinationX = var0; + Client.destinationY = var1; + var8 = ModelData0.getPacketBufferNode(ClientPacket.field2264, Client.packetWriter.isaacCipher); + var8.packetBuffer.method5613(VarcInt.baseY * 64 + var1); + var8.packetBuffer.writeIntME(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); + var8.packetBuffer.writeShort(var3); + var8.packetBuffer.method5613(class51.baseX * 64 + var0); + Client.packetWriter.addNode(var8); + } else if (var2 == 22) { + Client.mouseCrossX = var6; + Client.mouseCrossY = var7; + Client.mouseCrossColor = 2; + Client.mouseCrossState = 0; + Client.destinationX = var0; + Client.destinationY = var1; + var8 = ModelData0.getPacketBufferNode(ClientPacket.field2220, Client.packetWriter.isaacCipher); + var8.packetBuffer.writeShortLE(VarcInt.baseY * 64 + var1); + var8.packetBuffer.writeIntME(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); + var8.packetBuffer.method5613(var3); + var8.packetBuffer.writeShort(class51.baseX * 64 + var0); + Client.packetWriter.addNode(var8); + } else if (var2 == 23) { + if (Client.isMenuOpen) { + class2.scene.setViewportWalking(); + } else { + class2.scene.menuOpen(ClientPacket.Client_plane, var0, var1, true); + } } else { - try { - int var4 = var1.operations[var3]; - Field var5; - int var6; - if (var4 == 0) { - var5 = var1.fields[var3]; - var6 = Reflection.getInt(var5, (Object)null); - var0.writeByte(0); - var0.writeInt(var6); - } else if (var4 == 1) { - var5 = var1.fields[var3]; - Reflection.setInt(var5, (Object)null, var1.intReplaceValues[var3]); - var0.writeByte(0); - } else if (var4 == 2) { - var5 = var1.fields[var3]; - var6 = var5.getModifiers(); - var0.writeByte(0); - var0.writeInt(var6); + PacketBufferNode var10; + Widget var16; + if (var2 == 24) { + var16 = Language.getWidget(var1); + boolean var11 = true; + if (var16.contentType > 0) { + var11 = WorldMapID.method567(var16); } - Method var25; - if (var4 != 3) { - if (var4 == 4) { - var25 = var1.methods[var3]; - var6 = var25.getModifiers(); - var0.writeByte(0); - var0.writeInt(var6); + if (var11) { + var10 = ModelData0.getPacketBufferNode(ClientPacket.field2274, Client.packetWriter.isaacCipher); + var10.packetBuffer.writeInt(var1); + Client.packetWriter.addNode(var10); + } + } else { + if (var2 == 25) { + var16 = UserComparator3.getWidgetChild(var1, var0); + if (var16 != null) { + Actor.Widget_runOnTargetLeave(); + TextureProvider.selectSpell(var1, var0, Client.method1655(MenuAction.getWidgetClickMask(var16)), var16.itemId); + Client.isItemSelected = 0; + Client.selectedSpellActionName = LoginPacket.method3662(var16); + if (Client.selectedSpellActionName == null) { + Client.selectedSpellActionName = "null"; + } + + if (var16.isIf3) { + Client.selectedSpellName = var16.dataText + class222.colorStartTag(16777215); + } else { + Client.selectedSpellName = class222.colorStartTag(65280) + var16.spellName + class222.colorStartTag(16777215); + } } + + return; + } + + if (var2 == 26) { + Actor.method1756(); } else { - var25 = var1.methods[var3]; - byte[][] var10 = var1.arguments[var3]; - Object[] var7 = new Object[var10.length]; - - for (int var8 = 0; var8 < var10.length; ++var8) { - ObjectInputStream var9 = new ObjectInputStream(new ByteArrayInputStream(var10[var8])); - var7[var8] = var9.readObject(); - } - - Object var11 = Reflection.invoke(var25, (Object)null, var7); - if (var11 == null) { - var0.writeByte(0); - } else if (var11 instanceof Number) { - var0.writeByte(1); - var0.writeLong(((Number)var11).longValue()); - } else if (var11 instanceof String) { - var0.writeByte(2); - var0.writeStringCp1252NullTerminated((String)var11); + int var12; + Widget var14; + if (var2 == 28) { + var8 = ModelData0.getPacketBufferNode(ClientPacket.field2274, Client.packetWriter.isaacCipher); + var8.packetBuffer.writeInt(var1); + Client.packetWriter.addNode(var8); + var14 = Language.getWidget(var1); + if (var14.cs1Instructions != null && var14.cs1Instructions[0][0] == 5) { + var12 = var14.cs1Instructions[0][1]; + Varps.Varps_main[var12] = 1 - Varps.Varps_main[var12]; + ObjectDefinition.changeGameOptions(var12); + } + } else if (var2 == 29) { + var8 = ModelData0.getPacketBufferNode(ClientPacket.field2274, Client.packetWriter.isaacCipher); + var8.packetBuffer.writeInt(var1); + Client.packetWriter.addNode(var8); + var14 = Language.getWidget(var1); + if (var14.cs1Instructions != null && var14.cs1Instructions[0][0] == 5) { + var12 = var14.cs1Instructions[0][1]; + if (Varps.Varps_main[var12] != var14.cs1ComparisonValues[0]) { + Varps.Varps_main[var12] = var14.cs1ComparisonValues[0]; + ObjectDefinition.changeGameOptions(var12); + } + } + } else if (var2 == 30) { + if (Client.meslayerContinueWidget == null) { + WorldMapCacheName.resumePauseWidget(var1, var0); + Client.meslayerContinueWidget = UserComparator3.getWidgetChild(var1, var0); + ScriptEvent.invalidateWidget(Client.meslayerContinueWidget); + } + } else if (var2 == 31) { + var8 = ModelData0.getPacketBufferNode(ClientPacket.field2248, Client.packetWriter.isaacCipher); + var8.packetBuffer.writeShortLE(var3); + var8.packetBuffer.writeShortLE(class43.selectedItemSlot); + var8.packetBuffer.method5811(var1); + var8.packetBuffer.writeInt(class1.selectedItemWidget); + var8.packetBuffer.method5613(HealthBarUpdate.selectedItemId); + var8.packetBuffer.method5613(var0); + Client.packetWriter.addNode(var8); + Client.field664 = 0; + class51.field432 = Language.getWidget(var1); + Client.field749 = var0; + } else if (var2 == 32) { + var8 = ModelData0.getPacketBufferNode(ClientPacket.field2269, Client.packetWriter.isaacCipher); + var8.packetBuffer.writeInt(var1); + var8.packetBuffer.writeInt(WorldMapAreaData.selectedSpellWidget); + var8.packetBuffer.method5613(var0); + var8.packetBuffer.method5613(var3); + var8.packetBuffer.writeShort(Client.selectedSpellChildIndex); + Client.packetWriter.addNode(var8); + Client.field664 = 0; + class51.field432 = Language.getWidget(var1); + Client.field749 = var0; + } else if (var2 == 33) { + var8 = ModelData0.getPacketBufferNode(ClientPacket.field2279, Client.packetWriter.isaacCipher); + var8.packetBuffer.method5636(var3); + var8.packetBuffer.method5613(var0); + var8.packetBuffer.method5647(var1); + Client.packetWriter.addNode(var8); + Client.field664 = 0; + class51.field432 = Language.getWidget(var1); + Client.field749 = var0; + } else if (var2 == 34) { + var8 = ModelData0.getPacketBufferNode(ClientPacket.field2294, Client.packetWriter.isaacCipher); + var8.packetBuffer.writeShort(var0); + var8.packetBuffer.writeShort(var3); + var8.packetBuffer.method5648(var1); + Client.packetWriter.addNode(var8); + Client.field664 = 0; + class51.field432 = Language.getWidget(var1); + Client.field749 = var0; + } else if (var2 == 35) { + var8 = ModelData0.getPacketBufferNode(ClientPacket.field2222, Client.packetWriter.isaacCipher); + var8.packetBuffer.writeShort(var0); + var8.packetBuffer.writeShort(var3); + var8.packetBuffer.method5647(var1); + Client.packetWriter.addNode(var8); + Client.field664 = 0; + class51.field432 = Language.getWidget(var1); + Client.field749 = var0; + } else if (var2 == 36) { + var8 = ModelData0.getPacketBufferNode(ClientPacket.field2235, Client.packetWriter.isaacCipher); + var8.packetBuffer.method5811(var1); + var8.packetBuffer.writeShortLE(var0); + var8.packetBuffer.writeShortLE(var3); + Client.packetWriter.addNode(var8); + Client.field664 = 0; + class51.field432 = Language.getWidget(var1); + Client.field749 = var0; + } else if (var2 == 37) { + var8 = ModelData0.getPacketBufferNode(ClientPacket.field2250, Client.packetWriter.isaacCipher); + var8.packetBuffer.method5613(var3); + var8.packetBuffer.method5648(var1); + var8.packetBuffer.method5613(var0); + Client.packetWriter.addNode(var8); + Client.field664 = 0; + class51.field432 = Language.getWidget(var1); + Client.field749 = var0; } else { - var0.writeByte(4); + if (var2 == 38) { + Actor.Widget_runOnTargetLeave(); + var16 = Language.getWidget(var1); + Client.isItemSelected = 1; + class43.selectedItemSlot = var0; + class1.selectedItemWidget = var1; + HealthBarUpdate.selectedItemId = var3; + ScriptEvent.invalidateWidget(var16); + Client.selectedItemName = class222.colorStartTag(16748608) + Interpreter.ItemDefinition_get(var3).name + class222.colorStartTag(16777215); + if (Client.selectedItemName == null) { + Client.selectedItemName = "null"; + } + + return; + } + + if (var2 == 39) { + var8 = ModelData0.getPacketBufferNode(ClientPacket.field2303, Client.packetWriter.isaacCipher); + var8.packetBuffer.writeShortLE(var0); + var8.packetBuffer.method5613(var3); + var8.packetBuffer.method5811(var1); + Client.packetWriter.addNode(var8); + Client.field664 = 0; + class51.field432 = Language.getWidget(var1); + Client.field749 = var0; + } else if (var2 == 40) { + var8 = ModelData0.getPacketBufferNode(ClientPacket.field2310, Client.packetWriter.isaacCipher); + var8.packetBuffer.method5613(var3); + var8.packetBuffer.writeInt(var1); + var8.packetBuffer.writeShortLE(var0); + Client.packetWriter.addNode(var8); + Client.field664 = 0; + class51.field432 = Language.getWidget(var1); + Client.field749 = var0; + } else if (var2 == 41) { + var8 = ModelData0.getPacketBufferNode(ClientPacket.field2315, Client.packetWriter.isaacCipher); + var8.packetBuffer.writeShortLE(var3); + var8.packetBuffer.writeShort(var0); + var8.packetBuffer.method5647(var1); + Client.packetWriter.addNode(var8); + Client.field664 = 0; + class51.field432 = Language.getWidget(var1); + Client.field749 = var0; + } else if (var2 == 42) { + var8 = ModelData0.getPacketBufferNode(ClientPacket.field2253, Client.packetWriter.isaacCipher); + var8.packetBuffer.method5811(var1); + var8.packetBuffer.method5636(var0); + var8.packetBuffer.method5613(var3); + Client.packetWriter.addNode(var8); + Client.field664 = 0; + class51.field432 = Language.getWidget(var1); + Client.field749 = var0; + } else if (var2 == 43) { + var8 = ModelData0.getPacketBufferNode(ClientPacket.field2317, Client.packetWriter.isaacCipher); + var8.packetBuffer.method5613(var3); + var8.packetBuffer.writeShortLE(var0); + var8.packetBuffer.method5811(var1); + Client.packetWriter.addNode(var8); + Client.field664 = 0; + class51.field432 = Language.getWidget(var1); + Client.field749 = var0; + } else if (var2 == 44) { + var15 = Client.players[var3]; + if (var15 != null) { + Client.mouseCrossX = var6; + Client.mouseCrossY = var7; + Client.mouseCrossColor = 2; + Client.mouseCrossState = 0; + Client.destinationX = var0; + Client.destinationY = var1; + var9 = ModelData0.getPacketBufferNode(ClientPacket.field2231, Client.packetWriter.isaacCipher); + var9.packetBuffer.method5598(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); + var9.packetBuffer.method5613(var3); + Client.packetWriter.addNode(var9); + } + } else if (var2 == 45) { + var15 = Client.players[var3]; + if (var15 != null) { + Client.mouseCrossX = var6; + Client.mouseCrossY = var7; + Client.mouseCrossColor = 2; + Client.mouseCrossState = 0; + Client.destinationX = var0; + Client.destinationY = var1; + var9 = ModelData0.getPacketBufferNode(ClientPacket.field2238, Client.packetWriter.isaacCipher); + var9.packetBuffer.method5598(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); + var9.packetBuffer.writeShortLE(var3); + Client.packetWriter.addNode(var9); + } + } else if (var2 == 46) { + var15 = Client.players[var3]; + if (var15 != null) { + Client.mouseCrossX = var6; + Client.mouseCrossY = var7; + Client.mouseCrossColor = 2; + Client.mouseCrossState = 0; + Client.destinationX = var0; + Client.destinationY = var1; + var9 = ModelData0.getPacketBufferNode(ClientPacket.field2261, Client.packetWriter.isaacCipher); + var9.packetBuffer.writeByte(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); + var9.packetBuffer.writeShort(var3); + Client.packetWriter.addNode(var9); + } + } else if (var2 == 47) { + var15 = Client.players[var3]; + if (var15 != null) { + Client.mouseCrossX = var6; + Client.mouseCrossY = var7; + Client.mouseCrossColor = 2; + Client.mouseCrossState = 0; + Client.destinationX = var0; + Client.destinationY = var1; + var9 = ModelData0.getPacketBufferNode(ClientPacket.field2267, Client.packetWriter.isaacCipher); + var9.packetBuffer.method5613(var3); + var9.packetBuffer.writeByte(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); + Client.packetWriter.addNode(var9); + } + } else if (var2 == 48) { + var15 = Client.players[var3]; + if (var15 != null) { + Client.mouseCrossX = var6; + Client.mouseCrossY = var7; + Client.mouseCrossColor = 2; + Client.mouseCrossState = 0; + Client.destinationX = var0; + Client.destinationY = var1; + var9 = ModelData0.getPacketBufferNode(ClientPacket.field2265, Client.packetWriter.isaacCipher); + var9.packetBuffer.writeShortLE(var3); + var9.packetBuffer.writeByte(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); + Client.packetWriter.addNode(var9); + } + } else if (var2 == 49) { + var15 = Client.players[var3]; + if (var15 != null) { + Client.mouseCrossX = var6; + Client.mouseCrossY = var7; + Client.mouseCrossColor = 2; + Client.mouseCrossState = 0; + Client.destinationX = var0; + Client.destinationY = var1; + var9 = ModelData0.getPacketBufferNode(ClientPacket.field2241, Client.packetWriter.isaacCipher); + var9.packetBuffer.method5628(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); + var9.packetBuffer.method5636(var3); + Client.packetWriter.addNode(var9); + } + } else if (var2 == 50) { + var15 = Client.players[var3]; + if (var15 != null) { + Client.mouseCrossX = var6; + Client.mouseCrossY = var7; + Client.mouseCrossColor = 2; + Client.mouseCrossState = 0; + Client.destinationX = var0; + Client.destinationY = var1; + var9 = ModelData0.getPacketBufferNode(ClientPacket.field2251, Client.packetWriter.isaacCipher); + var9.packetBuffer.writeShort(var3); + var9.packetBuffer.writeByte(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); + Client.packetWriter.addNode(var9); + } + } else if (var2 == 51) { + var15 = Client.players[var3]; + if (var15 != null) { + Client.mouseCrossX = var6; + Client.mouseCrossY = var7; + Client.mouseCrossColor = 2; + Client.mouseCrossState = 0; + Client.destinationX = var0; + Client.destinationY = var1; + var9 = ModelData0.getPacketBufferNode(ClientPacket.field2242, Client.packetWriter.isaacCipher); + var9.packetBuffer.writeByte(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); + var9.packetBuffer.writeShort(var3); + Client.packetWriter.addNode(var9); + } + } else { + label894: { + if (var2 != 57) { + if (var2 == 58) { + var16 = UserComparator3.getWidgetChild(var1, var0); + if (var16 != null) { + var9 = ModelData0.getPacketBufferNode(ClientPacket.field2232, Client.packetWriter.isaacCipher); + var9.packetBuffer.writeShortLE(Client.selectedSpellChildIndex); + var9.packetBuffer.writeShort(Client.field799); + var9.packetBuffer.method5636(var16.itemId); + var9.packetBuffer.method5647(WorldMapAreaData.selectedSpellWidget); + var9.packetBuffer.method5636(var0); + var9.packetBuffer.method5811(var1); + Client.packetWriter.addNode(var9); + } + break label894; + } + + if (var2 == 1001) { + Client.mouseCrossX = var6; + Client.mouseCrossY = var7; + Client.mouseCrossColor = 2; + Client.mouseCrossState = 0; + Client.destinationX = var0; + Client.destinationY = var1; + var8 = ModelData0.getPacketBufferNode(ClientPacket.field2292, Client.packetWriter.isaacCipher); + var8.packetBuffer.method5598(KeyHandler.KeyHandler_pressedKeys[82] ? 1 : 0); + var8.packetBuffer.method5613(VarcInt.baseY * 64 + var1); + var8.packetBuffer.method5636(class51.baseX * 64 + var0); + var8.packetBuffer.method5613(var3); + Client.packetWriter.addNode(var8); + break label894; + } + + if (var2 == 1002) { + Client.mouseCrossX = var6; + Client.mouseCrossY = var7; + Client.mouseCrossColor = 2; + Client.mouseCrossState = 0; + var8 = ModelData0.getPacketBufferNode(ClientPacket.field2304, Client.packetWriter.isaacCipher); + var8.packetBuffer.writeShort(var3); + Client.packetWriter.addNode(var8); + break label894; + } + + if (var2 == 1003) { + Client.mouseCrossX = var6; + Client.mouseCrossY = var7; + Client.mouseCrossColor = 2; + Client.mouseCrossState = 0; + var13 = Client.npcs[var3]; + if (var13 != null) { + NPCDefinition var17 = var13.definition; + if (var17.transforms != null) { + var17 = var17.transform(); + } + + if (var17 != null) { + var10 = ModelData0.getPacketBufferNode(ClientPacket.field2288, Client.packetWriter.isaacCipher); + var10.packetBuffer.writeShort(var17.id); + Client.packetWriter.addNode(var10); + } + } + break label894; + } + + if (var2 == 1004) { + Client.mouseCrossX = var6; + Client.mouseCrossY = var7; + Client.mouseCrossColor = 2; + Client.mouseCrossState = 0; + var8 = ModelData0.getPacketBufferNode(ClientPacket.field2293, Client.packetWriter.isaacCipher); + var8.packetBuffer.method5636(var3); + Client.packetWriter.addNode(var8); + break label894; + } + + if (var2 == 1005) { + var16 = Language.getWidget(var1); + if (var16 != null && var16.itemQuantities[var0] >= 100000) { + GrandExchangeOfferAgeComparator.addGameMessage(27, "", var16.itemQuantities[var0] + " x " + Interpreter.ItemDefinition_get(var3).name); + } else { + var9 = ModelData0.getPacketBufferNode(ClientPacket.field2293, Client.packetWriter.isaacCipher); + var9.packetBuffer.method5636(var3); + Client.packetWriter.addNode(var9); + } + + Client.field664 = 0; + class51.field432 = Language.getWidget(var1); + Client.field749 = var0; + break label894; + } + + if (var2 != 1007) { + if (var2 == 1010 || var2 == 1009 || var2 == 1008 || var2 == 1011 || var2 == 1012) { + WorldMapRegion.worldMap.worldMapMenuAction(var2, var3, new Coord(var0), new Coord(var1)); + } + break label894; + } + } + + var16 = UserComparator3.getWidgetChild(var1, var0); + if (var16 != null) { + WorldMapData_1.widgetDefaultMenuAction(var3, var1, var0, var16.itemId, var5); + } + } + } } } - } catch (ClassNotFoundException var13) { - var0.writeByte(-10); - } catch (InvalidClassException var14) { - var0.writeByte(-11); - } catch (StreamCorruptedException var15) { - var0.writeByte(-12); - } catch (OptionalDataException var16) { - var0.writeByte(-13); - } catch (IllegalAccessException var17) { - var0.writeByte(-14); - } catch (IllegalArgumentException var18) { - var0.writeByte(-15); - } catch (InvocationTargetException var19) { - var0.writeByte(-16); - } catch (SecurityException var20) { - var0.writeByte(-17); - } catch (IOException var21) { - var0.writeByte(-18); - } catch (NullPointerException var22) { - var0.writeByte(-19); - } catch (Exception var23) { - var0.writeByte(-20); - } catch (Throwable var24) { - var0.writeByte(-21); } } } - - var0.writeCrc(var2); - var1.remove(); } + + if (Client.isItemSelected != 0) { + Client.isItemSelected = 0; + ScriptEvent.invalidateWidget(Language.getWidget(class1.selectedItemWidget)); + } + + if (Client.isSpellSelected) { + Actor.Widget_runOnTargetLeave(); + } + + if (class51.field432 != null && Client.field664 == 0) { + ScriptEvent.invalidateWidget(class51.field432); + } + } - @ObfuscatedName("m") + @ObfuscatedName("kb") @ObfuscatedSignature( - signature = "(Lhq;III)Z", - garbageValue = "2112875950" + signature = "(Lkg;II)V", + garbageValue = "-847322953" ) - public static boolean method618(AbstractArchive var0, int var1, int var2) { - byte[] var3 = var0.takeFile(var1, var2); - if (var3 == null) { - return false; - } else { - Message.SpriteBuffer_decode(var3); - return true; - } + static void method570(Buffer var0, int var1) { + class226.method4200(var0.array, var1); + GrandExchangeEvent.method86(var0, var1); } } diff --git a/runescape-client/src/main/java/class325.java b/runescape-client/src/main/java/class325.java index 126a22a453..8548d83b77 100644 --- a/runescape-client/src/main/java/class325.java +++ b/runescape-client/src/main/java/class325.java @@ -2,30 +2,24 @@ import net.runelite.mapping.Export; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; -@ObfuscatedName("ld") +@ObfuscatedName("lt") public class class325 { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedGetter( - intValue = 826035997 + intValue = -383751597 ) @Export("SpriteBuffer_spriteCount") - public static int SpriteBuffer_spriteCount; - @ObfuscatedName("t") + static int SpriteBuffer_spriteCount; + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = 1495878133 + intValue = -1738507571 ) @Export("SpriteBuffer_spriteWidth") - public static int SpriteBuffer_spriteWidth; - @ObfuscatedName("n") - @ObfuscatedGetter( - intValue = -941829717 - ) - @Export("SpriteBuffer_spriteHeight") - public static int SpriteBuffer_spriteHeight; - @ObfuscatedName("o") + static int SpriteBuffer_spriteWidth; + @ObfuscatedName("p") + @Export("SpriteBuffer_spriteWidths") + static int[] SpriteBuffer_spriteWidths; + @ObfuscatedName("y") @Export("SpriteBuffer_spritePalette") - public static int[] SpriteBuffer_spritePalette; - @ObfuscatedName("i") - @Export("SpriteBuffer_pixels") - public static byte[][] SpriteBuffer_pixels; + static int[] SpriteBuffer_spritePalette; } diff --git a/runescape-client/src/main/java/class326.java b/runescape-client/src/main/java/class326.java deleted file mode 100644 index 4cfdf219ec..0000000000 --- a/runescape-client/src/main/java/class326.java +++ /dev/null @@ -1,21 +0,0 @@ -import net.runelite.mapping.ObfuscatedName; -import net.runelite.mapping.ObfuscatedSignature; - -@ObfuscatedName("lz") -public class class326 { - @ObfuscatedName("i") - public static short[] field3881; - - @ObfuscatedName("h") - @ObfuscatedSignature( - signature = "(II)I", - garbageValue = "1165668124" - ) - public static int method6375(int var0) { - if (var0 > 0) { - return 1; - } else { - return var0 < 0 ? -1 : 0; - } - } -} diff --git a/runescape-client/src/main/java/class335.java b/runescape-client/src/main/java/class335.java index aff31374b7..971a716b44 100644 --- a/runescape-client/src/main/java/class335.java +++ b/runescape-client/src/main/java/class335.java @@ -1,30 +1,19 @@ +import net.runelite.mapping.Export; +import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("lg") +@ObfuscatedName("lc") public abstract class class335 { - @ObfuscatedName("bq") - static String field4016; - - @ObfuscatedName("jk") - @ObfuscatedSignature( - signature = "(Ljava/lang/String;Lhi;B)Ljava/lang/String;", - garbageValue = "38" + @ObfuscatedName("i") + @ObfuscatedGetter( + intValue = 1866733167 ) - static String method6661(String var0, Widget var1) { - if (var0.indexOf("%") != -1) { - for (int var2 = 1; var2 <= 5; ++var2) { - while (true) { - int var3 = var0.indexOf("%" + var2); - if (var3 == -1) { - break; - } - - var0 = var0.substring(0, var3) + class173.method3728(class4.method73(var1, var2 - 1)) + var0.substring(var3 + 2); - } - } - } - - return var0; - } + static int field4014; + @ObfuscatedName("o") + @ObfuscatedSignature( + signature = "Lky;" + ) + @Export("ItemDefinition_fontPlain11") + static Font ItemDefinition_fontPlain11; } diff --git a/runescape-client/src/main/java/class336.java b/runescape-client/src/main/java/class336.java index ab0c9b9161..7a96afd23b 100644 --- a/runescape-client/src/main/java/class336.java +++ b/runescape-client/src/main/java/class336.java @@ -1,20 +1,20 @@ import net.runelite.mapping.ObfuscatedName; -@ObfuscatedName("ly") +@ObfuscatedName("lv") public class class336 { - @ObfuscatedName("d") - static final int[] field4022; - @ObfuscatedName("m") - static final int[] field4017; + @ObfuscatedName("i") + static final int[] field4020; + @ObfuscatedName("k") + static final int[] field4021; static { - field4022 = new int[2048]; - field4017 = new int[2048]; + field4020 = new int[2048]; + field4021 = new int[2048]; double var0 = 0.0030679615757712823D; for (int var2 = 0; var2 < 2048; ++var2) { - field4022[var2] = (int)(65536.0D * Math.sin(var0 * (double)var2)); - field4017[var2] = (int)(65536.0D * Math.cos((double)var2 * var0)); + field4020[var2] = (int)(65536.0D * Math.sin(var0 * (double)var2)); + field4021[var2] = (int)(65536.0D * Math.cos(var0 * (double)var2)); } } diff --git a/runescape-client/src/main/java/class338.java b/runescape-client/src/main/java/class338.java index b322bef6c2..c632e97d95 100644 --- a/runescape-client/src/main/java/class338.java +++ b/runescape-client/src/main/java/class338.java @@ -1,18 +1,14 @@ -import net.runelite.mapping.Export; import net.runelite.mapping.ObfuscatedName; -@ObfuscatedName("mg") +@ObfuscatedName("mf") public class class338 { - @ObfuscatedName("n") - static final char[] field4036; - @ObfuscatedName("q") - static final char[] field4038; - @ObfuscatedName("ge") - @Export("regionMapArchiveIds") - static int[] regionMapArchiveIds; + @ObfuscatedName("b") + static final char[] field4034; + @ObfuscatedName("g") + static final char[] field4037; static { - field4036 = new char[]{' ', ' ', '_', '-', 'à', 'á', 'â', 'ä', 'ã', 'À', 'Á', 'Â', 'Ä', 'Ã', 'è', 'é', 'ê', 'ë', 'È', 'É', 'Ê', 'Ë', 'í', 'î', 'ï', 'Í', 'Î', 'Ï', 'ò', 'ó', 'ô', 'ö', 'õ', 'Ò', 'Ó', 'Ô', 'Ö', 'Õ', 'ù', 'ú', 'û', 'ü', 'Ù', 'Ú', 'Û', 'Ü', 'ç', 'Ç', 'ÿ', 'Ÿ', 'ñ', 'Ñ', 'ß'}; - field4038 = new char[]{'[', ']', '#'}; + field4034 = new char[]{' ', ' ', '_', '-', 'à', 'á', 'â', 'ä', 'ã', 'À', 'Á', 'Â', 'Ä', 'Ã', 'è', 'é', 'ê', 'ë', 'È', 'É', 'Ê', 'Ë', 'í', 'î', 'ï', 'Í', 'Î', 'Ï', 'ò', 'ó', 'ô', 'ö', 'õ', 'Ò', 'Ó', 'Ô', 'Ö', 'Õ', 'ù', 'ú', 'û', 'ü', 'Ù', 'Ú', 'Û', 'Ü', 'ç', 'Ç', 'ÿ', 'Ÿ', 'ñ', 'Ñ', 'ß'}; + field4037 = new char[]{'[', ']', '#'}; } } diff --git a/runescape-client/src/main/java/class339.java b/runescape-client/src/main/java/class339.java deleted file mode 100644 index 14cf8e47c2..0000000000 --- a/runescape-client/src/main/java/class339.java +++ /dev/null @@ -1,11 +0,0 @@ -import net.runelite.mapping.ObfuscatedGetter; -import net.runelite.mapping.ObfuscatedName; - -@ObfuscatedName("mx") -public class class339 { - @ObfuscatedName("be") - @ObfuscatedGetter( - intValue = 566181067 - ) - static int field4041; -} diff --git a/runescape-client/src/main/java/class4.java b/runescape-client/src/main/java/class4.java index 7b59ab1efe..2f21920555 100644 --- a/runescape-client/src/main/java/class4.java +++ b/runescape-client/src/main/java/class4.java @@ -3,739 +3,202 @@ import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("v") +@ObfuscatedName("z") final class class4 implements class0 { - @ObfuscatedName("po") + @ObfuscatedName("nw") @ObfuscatedSignature( - signature = "Ljp;" + signature = "[Lhl;" ) - @Export("clanChat") - static ClanChat clanChat; - @ObfuscatedName("k") - @ObfuscatedSignature( - signature = "Llw;" - ) - static IndexedSprite field23; - @ObfuscatedName("gg") - @ObfuscatedSignature( - signature = "Llx;" - ) - @Export("redHintArrowSprite") - static Sprite redHintArrowSprite; + static Widget[] field22; - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Ljava/lang/Object;Lkc;B)V", - garbageValue = "25" + signature = "(Ljava/lang/Object;Lkg;I)V", + garbageValue = "-1331780546" ) - public void vmethod89(Object var1, Buffer var2) { - this.method85((String)var1, var2); + public void vmethod57(Object var1, Buffer var2) { + this.method55((String)var1, var2); } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(Lkc;I)Ljava/lang/Object;", - garbageValue = "242985434" + signature = "(Lkg;I)Ljava/lang/Object;", + garbageValue = "1713449680" ) - public Object vmethod74(Buffer var1) { + public Object vmethod65(Buffer var1) { return var1.readStringCp1252NullTerminated(); } - @ObfuscatedName("p") + @ObfuscatedName("y") @ObfuscatedSignature( - signature = "(Ljava/lang/String;Lkc;B)V", - garbageValue = "0" + signature = "(Ljava/lang/String;Lkg;B)V", + garbageValue = "-1" ) - void method85(String var1, Buffer var2) { + void method55(String var1, Buffer var2) { var2.writeStringCp1252NullTerminated(var1); } - @ObfuscatedName("t") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(Lbi;II)V", - garbageValue = "-2040444199" + signature = "(II)V", + garbageValue = "910919278" ) - @Export("runScript") - static void runScript(ScriptEvent var0, int var1) { - Object[] var2 = var0.args; - Script var3; - int var17; - if (PlayerAppearance.isWorldMapEvent(var0.type)) { - WorldMapSprite.worldMapEvent = (WorldMapEvent)var2[0]; - WorldMapElement var4 = class65.WorldMapElement_get(WorldMapSprite.worldMapEvent.mapElement); - var3 = WorldMapIcon_1.getWorldMapScript(var0.type, var4.objectId, var4.category); + public static void method56(int var0) { + MouseHandler.MouseHandler_idleCycles = var0; + } + + @ObfuscatedName("i") + @ObfuscatedSignature( + signature = "(Lhl;IIII)V", + garbageValue = "1884834950" + ) + @Export("Widget_setKeyRate") + static final void Widget_setKeyRate(Widget var0, int var1, int var2, int var3) { + if (var0.field2654 == null) { + throw new RuntimeException(); } else { - var17 = (Integer)var2[0]; - var3 = GrandExchangeOffer.getScript(var17); - } - - if (var3 != null) { - Interpreter.Interpreter_intStackSize = 0; - WorldMapDecoration.Interpreter_stringStackSize = 0; - var17 = -1; - int[] var5 = var3.opcodes; - int[] var6 = var3.intOperands; - byte var7 = -1; - Interpreter.Interpreter_frameDepth = 0; - Interpreter.field1075 = false; - - try { - int var10; - try { - World.Interpreter_intLocals = new int[var3.localIntCount]; - int var8 = 0; - Interpreter.Interpreter_stringLocals = new String[var3.localStringCount]; - int var9 = 0; - - int var11; - String var18; - for (var10 = 1; var10 < var2.length; ++var10) { - if (var2[var10] instanceof Integer) { - var11 = (Integer)var2[var10]; - if (var11 == -2147483647) { - var11 = var0.mouseX; - } - - if (var11 == -2147483646) { - var11 = var0.mouseY; - } - - if (var11 == -2147483645) { - var11 = var0.widget != null ? var0.widget.id : -1; - } - - if (var11 == -2147483644) { - var11 = var0.opIndex; - } - - if (var11 == -2147483643) { - var11 = var0.widget != null ? var0.widget.childIndex : -1; - } - - if (var11 == -2147483642) { - var11 = var0.dragTarget != null ? var0.dragTarget.id : -1; - } - - if (var11 == -2147483641) { - var11 = var0.dragTarget != null ? var0.dragTarget.childIndex : -1; - } - - if (var11 == -2147483640) { - var11 = var0.keyTyped; - } - - if (var11 == -2147483639) { - var11 = var0.keyPressed; - } - - World.Interpreter_intLocals[var8++] = var11; - } else if (var2[var10] instanceof String) { - var18 = (String)var2[var10]; - if (var18.equals("event_opbase")) { - var18 = var0.targetName; - } - - Interpreter.Interpreter_stringLocals[var9++] = var18; - } - } - - var10 = 0; - Interpreter.field1080 = var0.field550; - - while (true) { - ++var10; - if (var10 > var1) { - throw new RuntimeException(); - } - - ++var17; - int var29 = var5[var17]; - int var20; - if (var29 >= 100) { - boolean var32; - if (var3.intOperands[var17] == 1) { - var32 = true; - } else { - var32 = false; - } - - var20 = ScriptFrame.method1218(var29, var3, var32); - switch(var20) { - case 0: - return; - case 1: - default: - break; - case 2: - throw new IllegalStateException(); - } - } else if (var29 == ScriptOpcodes.ICONST) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var6[var17]; - } else if (var29 == ScriptOpcodes.GET_VARP) { - var11 = var6[var17]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = Varps.Varps_main[var11]; - } else if (var29 == ScriptOpcodes.SET_VARP) { - var11 = var6[var17]; - Varps.Varps_main[var11] = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - WorldMapDecoration.changeGameOptions(var11); - } else if (var29 == ScriptOpcodes.SCONST) { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var3.stringOperands[var17]; - } else if (var29 == ScriptOpcodes.JUMP) { - var17 += var6[var17]; - } else if (var29 == ScriptOpcodes.IF_ICMPNE) { - Interpreter.Interpreter_intStackSize -= 2; - if (Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize] != Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]) { - var17 += var6[var17]; - } - } else if (var29 == ScriptOpcodes.IF_ICMPEQ) { - Interpreter.Interpreter_intStackSize -= 2; - if (Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize] == Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]) { - var17 += var6[var17]; - } - } else if (var29 == ScriptOpcodes.IF_ICMPLT) { - Interpreter.Interpreter_intStackSize -= 2; - if (Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize] < Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]) { - var17 += var6[var17]; - } - } else if (var29 == ScriptOpcodes.IF_ICMPGT) { - Interpreter.Interpreter_intStackSize -= 2; - if (Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize] > Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]) { - var17 += var6[var17]; - } - } else if (var29 == ScriptOpcodes.RETURN) { - if (Interpreter.Interpreter_frameDepth == 0) { - return; - } - - ScriptFrame var34 = Interpreter.Interpreter_frames[--Interpreter.Interpreter_frameDepth]; - var3 = var34.script; - var5 = var3.opcodes; - var6 = var3.intOperands; - var17 = var34.pc; - World.Interpreter_intLocals = var34.intLocals; - Interpreter.Interpreter_stringLocals = var34.stringLocals; - } else if (var29 == ScriptOpcodes.GET_VARBIT) { - var11 = var6[var17]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = UserComparator9.getVarbit(var11); - } else if (var29 == ScriptOpcodes.SET_VARBIT) { - var11 = var6[var17]; - Message.method1299(var11, Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]); - } else if (var29 == ScriptOpcodes.IF_ICMPLE) { - Interpreter.Interpreter_intStackSize -= 2; - if (Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize] <= Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]) { - var17 += var6[var17]; - } - } else if (var29 == ScriptOpcodes.IF_ICMPGE) { - Interpreter.Interpreter_intStackSize -= 2; - if (Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize] >= Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]) { - var17 += var6[var17]; - } - } else if (var29 == ScriptOpcodes.ILOAD) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = World.Interpreter_intLocals[var6[var17]]; - } else if (var29 == ScriptOpcodes.ISTORE) { - World.Interpreter_intLocals[var6[var17]] = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - } else if (var29 == ScriptOpcodes.SLOAD) { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = Interpreter.Interpreter_stringLocals[var6[var17]]; - } else if (var29 == ScriptOpcodes.SSTORE) { - Interpreter.Interpreter_stringLocals[var6[var17]] = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]; - } else if (var29 == ScriptOpcodes.JOIN_STRING) { - var11 = var6[var17]; - WorldMapDecoration.Interpreter_stringStackSize -= var11; - String var31 = WorldMapDecorationType.method4270(Interpreter.Interpreter_stringStack, WorldMapDecoration.Interpreter_stringStackSize, var11); - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var31; - } else if (var29 == ScriptOpcodes.POP_INT) { - --Interpreter.Interpreter_intStackSize; - } else if (var29 == ScriptOpcodes.POP_STRING) { - --WorldMapDecoration.Interpreter_stringStackSize; - } else { - int var15; - if (var29 != ScriptOpcodes.INVOKE) { - if (var29 == ScriptOpcodes.GET_VARC_INT) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = class1.varcs.getInt(var6[var17]); - } else if (var29 == ScriptOpcodes.SET_VARC_INT) { - class1.varcs.setInt(var6[var17], Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]); - } else if (var29 == ScriptOpcodes.DEFINE_ARRAY) { - var11 = var6[var17] >> 16; - var20 = var6[var17] & 65535; - int var21 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - if (var21 < 0 || var21 > 5000) { - throw new RuntimeException(); - } - - Interpreter.Interpreter_arrayLengths[var11] = var21; - byte var22 = -1; - if (var20 == 105) { - var22 = 0; - } - - for (var15 = 0; var15 < var21; ++var15) { - Interpreter.Interpreter_arrays[var11][var15] = var22; - } - } else if (var29 == ScriptOpcodes.GET_ARRAY_INT) { - var11 = var6[var17]; - var20 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - if (var20 < 0 || var20 >= Interpreter.Interpreter_arrayLengths[var11]) { - throw new RuntimeException(); - } - - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = Interpreter.Interpreter_arrays[var11][var20]; - } else if (var29 == ScriptOpcodes.SET_ARRAY_INT) { - var11 = var6[var17]; - Interpreter.Interpreter_intStackSize -= 2; - var20 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - if (var20 < 0 || var20 >= Interpreter.Interpreter_arrayLengths[var11]) { - throw new RuntimeException(); - } - - Interpreter.Interpreter_arrays[var11][var20] = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - } else if (var29 == ScriptOpcodes.GET_VARC_STRING_OLD) { - var18 = class1.varcs.getStringOld(var6[var17]); - if (var18 == null) { - var18 = "null"; - } - - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var18; - } else if (var29 == ScriptOpcodes.SET_VARC_STRING_OLD) { - class1.varcs.setStringOld(var6[var17], Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]); - } else if (var29 == ScriptOpcodes.GET_VARC_STRING) { - var18 = class1.varcs.getString(var6[var17]); - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var18; - } else if (var29 == ScriptOpcodes.SET_VARC_STRING) { - class1.varcs.setString(var6[var17], Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]); - } else { - if (var29 != ScriptOpcodes.SWITCH) { - throw new IllegalStateException(); - } - - IterableNodeHashTable var33 = var3.switches[var6[var17]]; - IntegerNode var30 = (IntegerNode)var33.get((long)Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]); - if (var30 != null) { - var17 += var30.integer; - } - } - } else { - var11 = var6[var17]; - Script var12 = GrandExchangeOffer.getScript(var11); - int[] var13 = new int[var12.localIntCount]; - String[] var14 = new String[var12.localStringCount]; - - for (var15 = 0; var15 < var12.intArgumentCount; ++var15) { - var13[var15] = Interpreter.Interpreter_intStack[var15 + (Interpreter.Interpreter_intStackSize - var12.intArgumentCount)]; - } - - for (var15 = 0; var15 < var12.stringArgumentCount; ++var15) { - var14[var15] = Interpreter.Interpreter_stringStack[var15 + (WorldMapDecoration.Interpreter_stringStackSize - var12.stringArgumentCount)]; - } - - Interpreter.Interpreter_intStackSize -= var12.intArgumentCount; - WorldMapDecoration.Interpreter_stringStackSize -= var12.stringArgumentCount; - ScriptFrame var19 = new ScriptFrame(); - var19.script = var3; - var19.pc = var17; - var19.intLocals = World.Interpreter_intLocals; - var19.stringLocals = Interpreter.Interpreter_stringLocals; - Interpreter.Interpreter_frames[++Interpreter.Interpreter_frameDepth - 1] = var19; - var3 = var12; - var5 = var12.opcodes; - var6 = var12.intOperands; - var17 = -1; - World.Interpreter_intLocals = var13; - Interpreter.Interpreter_stringLocals = var14; - } - } - } - } catch (Exception var27) { - StringBuilder var24 = new StringBuilder(30); - var24.append("").append(var3.key).append(" "); - - for (var10 = Interpreter.Interpreter_frameDepth - 1; var10 >= 0; --var10) { - var24.append("").append(Interpreter.Interpreter_frames[var10].script.key).append(" "); - } - - var24.append("").append(var7); - User.RunException_sendStackTrace(var24.toString(), var27); - } - } finally { - if (Interpreter.field1075) { - Interpreter.field1076 = true; - Skills.method4271(); - Interpreter.field1076 = false; - Interpreter.field1075 = false; - } - - } + var0.field2654[var1] = var2; + var0.field2655[var1] = var3; } } - @ObfuscatedName("n") + @ObfuscatedName("ak") @ObfuscatedSignature( - signature = "(Lkc;I)Ljava/lang/String;", - garbageValue = "-1998352105" + signature = "(ILci;ZI)I", + garbageValue = "-578960278" ) - public static String method90(Buffer var0) { - return ArchiveLoader.method1234(var0, 32767); - } - - @ObfuscatedName("hr") - @ObfuscatedSignature( - signature = "(III)V", - garbageValue = "-230464245" - ) - @Export("updateItemPile") - static final void updateItemPile(int var0, int var1) { - NodeDeque var2 = Client.groundItems[Player.Client_plane][var0][var1]; - if (var2 == null) { - WorldMapArea.scene.removeGroundItemPile(Player.Client_plane, var0, var1); + static int method66(int var0, Script var1, boolean var2) { + int var3; + if (var0 == ScriptOpcodes.OC_NAME) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = Interpreter.ItemDefinition_get(var3).name; + return 1; } else { - long var3 = -99999999L; - TileItem var5 = null; - - TileItem var6; - for (var6 = (TileItem)var2.last(); var6 != null; var6 = (TileItem)var2.previous()) { - ItemDefinition var7 = class222.ItemDefinition_get(var6.id); - long var8 = (long)var7.price; - if (var7.isStackable == 1) { - var8 *= (long)(var6.quantity + 1); + int var4; + ItemDefinition var5; + if (var0 == ScriptOpcodes.OC_OP) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var3 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var4 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + var5 = Interpreter.ItemDefinition_get(var3); + if (var4 >= 1 && var4 <= 5 && var5.groundActions[var4 - 1] != null) { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var5.groundActions[var4 - 1]; + } else { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = ""; } - if (var8 > var3) { - var3 = var8; - var5 = var6; + return 1; + } else if (var0 == ScriptOpcodes.OC_IOP) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var3 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var4 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + var5 = Interpreter.ItemDefinition_get(var3); + if (var4 >= 1 && var4 <= 5 && var5.inventoryActions[var4 - 1] != null) { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var5.inventoryActions[var4 - 1]; + } else { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = ""; } - } - if (var5 == null) { - WorldMapArea.scene.removeGroundItemPile(Player.Client_plane, var0, var1); + return 1; + } else if (var0 == ScriptOpcodes.OC_COST) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Interpreter.ItemDefinition_get(var3).price; + return 1; + } else if (var0 == ScriptOpcodes.OC_STACKABLE) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Interpreter.ItemDefinition_get(var3).isStackable == 1 ? 1 : 0; + return 1; } else { - var2.addLast(var5); - TileItem var12 = null; - TileItem var11 = null; - - for (var6 = (TileItem)var2.last(); var6 != null; var6 = (TileItem)var2.previous()) { - if (var6.id != var5.id) { - if (var12 == null) { - var12 = var6; - } - - if (var6.id != var12.id && var11 == null) { - var11 = var6; - } - } - } - - long var9 = class160.calculateTag(var0, var1, 3, false, 0); - WorldMapArea.scene.newGroundItemPile(Player.Client_plane, var0, var1, GraphicsObject.getTileHeight(var0 * 128 + 64, var1 * 128 + 64, Player.Client_plane), var5, var9, var12, var11); - } - } - } - - @ObfuscatedName("jc") - @ObfuscatedSignature( - signature = "(Lhi;IB)I", - garbageValue = "0" - ) - static final int method73(Widget var0, int var1) { - if (var0.cs1Instructions != null && var1 < var0.cs1Instructions.length) { - try { - int[] var2 = var0.cs1Instructions[var1]; - int var3 = 0; - int var4 = 0; - byte var5 = 0; - - while (true) { - int var6 = var2[var4++]; - int var7 = 0; - byte var8 = 0; - if (var6 == 0) { - return var3; - } - - if (var6 == 1) { - var7 = Client.currentLevels[var2[var4++]]; - } - - if (var6 == 2) { - var7 = Client.levels[var2[var4++]]; - } - - if (var6 == 3) { - var7 = Client.experience[var2[var4++]]; - } - - int var9; - Widget var10; - int var11; - int var12; - if (var6 == 4) { - var9 = var2[var4++] << 16; - var9 += var2[var4++]; - var10 = PacketBufferNode.getWidget(var9); - var11 = var2[var4++]; - if (var11 != -1 && (!class222.ItemDefinition_get(var11).isMembersOnly || Client.isMembersWorld)) { - for (var12 = 0; var12 < var10.itemIds.length; ++var12) { - if (var11 + 1 == var10.itemIds[var12]) { - var7 += var10.itemQuantities[var12]; - } - } - } - } - - if (var6 == 5) { - var7 = Varps.Varps_main[var2[var4++]]; - } - - if (var6 == 6) { - var7 = Skills.Skills_experienceTable[Client.levels[var2[var4++]] - 1]; - } - - if (var6 == 7) { - var7 = Varps.Varps_main[var2[var4++]] * 100 / 46875; - } - - if (var6 == 8) { - var7 = class215.localPlayer.combatLevel; - } - - if (var6 == 9) { - for (var9 = 0; var9 < 25; ++var9) { - if (Skills.Skills_enabled[var9]) { - var7 += Client.levels[var9]; - } - } - } - - if (var6 == 10) { - var9 = var2[var4++] << 16; - var9 += var2[var4++]; - var10 = PacketBufferNode.getWidget(var9); - var11 = var2[var4++]; - if (var11 != -1 && (!class222.ItemDefinition_get(var11).isMembersOnly || Client.isMembersWorld)) { - for (var12 = 0; var12 < var10.itemIds.length; ++var12) { - if (var11 + 1 == var10.itemIds[var12]) { - var7 = 999999999; - break; - } - } - } - } - - if (var6 == 11) { - var7 = Client.runEnergy; - } - - if (var6 == 12) { - var7 = Client.weight; - } - - if (var6 == 13) { - var9 = Varps.Varps_main[var2[var4++]]; - int var13 = var2[var4++]; - var7 = (var9 & 1 << var13) != 0 ? 1 : 0; - } - - if (var6 == 14) { - var9 = var2[var4++]; - var7 = UserComparator9.getVarbit(var9); - } - - if (var6 == 15) { - var8 = 1; - } - - if (var6 == 16) { - var8 = 2; - } - - if (var6 == 17) { - var8 = 3; - } - - if (var6 == 18) { - var7 = UserComparator8.baseX * 64 + (class215.localPlayer.x >> 7); - } - - if (var6 == 19) { - var7 = HealthBar.baseY * 64 + (class215.localPlayer.y >> 7); - } - - if (var6 == 20) { - var7 = var2[var4++]; - } - - if (var8 == 0) { - if (var5 == 0) { - var3 += var7; - } - - if (var5 == 1) { - var3 -= var7; - } - - if (var5 == 2 && var7 != 0) { - var3 /= var7; - } - - if (var5 == 3) { - var3 *= var7; - } - - var5 = 0; + ItemDefinition var6; + if (var0 == ScriptOpcodes.OC_CERT) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var6 = Interpreter.ItemDefinition_get(var3); + if (var6.noteTemplate == -1 && var6.note >= 0) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var6.note; } else { - var5 = var8; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3; } + + return 1; + } else if (var0 == ScriptOpcodes.OC_UNCERT) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var6 = Interpreter.ItemDefinition_get(var3); + if (var6.noteTemplate >= 0 && var6.note >= 0) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var6.note; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3; + } + + return 1; + } else if (var0 == ScriptOpcodes.OC_MEMBERS) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = Interpreter.ItemDefinition_get(var3).isMembersOnly ? 1 : 0; + return 1; + } else if (var0 == ScriptOpcodes.OC_PLACEHOLDER) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var6 = Interpreter.ItemDefinition_get(var3); + if (var6.placeholderTemplate == -1 && var6.placeholder >= 0) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var6.placeholder; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3; + } + + return 1; + } else if (var0 == ScriptOpcodes.OC_UNPLACEHOLDER) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var6 = Interpreter.ItemDefinition_get(var3); + if (var6.placeholderTemplate >= 0 && var6.placeholder >= 0) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var6.placeholder; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var3; + } + + return 1; + } else if (var0 == ScriptOpcodes.OC_FIND) { + String var7 = Interpreter.Interpreter_stringStack[--class43.Interpreter_stringStackSize]; + var4 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + Message.findItemDefinitions(var7, var4 == 1); + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = UserComparator10.foundItemIdCount; + return 1; + } else if (var0 != ScriptOpcodes.OC_FINDNEXT) { + if (var0 == ScriptOpcodes.OC_FINDRESET) { + GrandExchangeOfferAgeComparator.foundItemIndex = 0; + return 1; + } else { + return 2; + } + } else { + if (MusicPatch.foundItemIds != null && GrandExchangeOfferAgeComparator.foundItemIndex < UserComparator10.foundItemIdCount) { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = MusicPatch.foundItemIds[++GrandExchangeOfferAgeComparator.foundItemIndex - 1] & '\uffff'; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = -1; + } + + return 1; } - } catch (Exception var14) { - return -1; } + } + } + + @ObfuscatedName("ed") + @ObfuscatedSignature( + signature = "(I)Z", + garbageValue = "1158604899" + ) + static boolean method63() { + if (Client.archiveLoaders != null && Client.archiveLoadersDone < Client.archiveLoaders.size()) { + while (Client.archiveLoadersDone < Client.archiveLoaders.size()) { + ArchiveLoader var0 = (ArchiveLoader)Client.archiveLoaders.get(Client.archiveLoadersDone); + if (!var0.isLoaded()) { + return false; + } + + ++Client.archiveLoadersDone; + } + + return true; } else { - return -2; - } - } - - @ObfuscatedName("kk") - @ObfuscatedSignature( - signature = "(Lhi;III)V", - garbageValue = "-879504077" - ) - @Export("clickWidget") - static final void clickWidget(Widget var0, int var1, int var2) { - if (Client.clickedWidget == null && !Client.isMenuOpen) { - if (var0 != null && class30.method604(var0) != null) { - Client.clickedWidget = var0; - Client.clickedWidgetParent = class30.method604(var0); - Client.widgetClickX = var1; - Client.widgetClickY = var2; - FloorDecoration.widgetDragDuration = 0; - Client.isDraggingWidget = false; - int var3 = class16.getNewestMenuIdx(); - if (var3 != -1) { - Script.method2384(var3); - } - - } - } - } - - @ObfuscatedName("kd") - @ObfuscatedSignature( - signature = "(Lhi;IIII)V", - garbageValue = "1498154785" - ) - @Export("drawMinimap") - static final void drawMinimap(Widget var0, int var1, int var2, int var3) { - ChatChannel.playPcmPlayers(); - SpriteMask var4 = var0.getSpriteMask(false); - if (var4 != null) { - Rasterizer2D.Rasterizer2D_setClip(var1, var2, var4.width + var1, var2 + var4.height); - if (Client.minimapState != 2 && Client.minimapState != 5) { - int var5 = Client.camAngleY & 2047; - int var6 = class215.localPlayer.x / 32 + 48; - int var7 = 464 - class215.localPlayer.y / 32; - FloorDecoration.sceneMinimapSprite.drawRotatedMaskedCenteredAround(var1, var2, var4.width, var4.height, var6, var7, var5, 256, var4.xStarts, var4.xWidths); - - int var8; - int var9; - int var10; - for (var8 = 0; var8 < Client.mapIconCount; ++var8) { - var9 = Client.mapIconXs[var8] * 4 + 2 - class215.localPlayer.x / 32; - var10 = Client.mapIconYs[var8] * 4 + 2 - class215.localPlayer.y / 32; - Message.drawSpriteOnMinimap(var1, var2, var9, var10, Client.mapIcons[var8], var4); - } - - int var11; - int var12; - for (var8 = 0; var8 < 104; ++var8) { - for (var9 = 0; var9 < 104; ++var9) { - NodeDeque var15 = Client.groundItems[Player.Client_plane][var8][var9]; - if (var15 != null) { - var11 = var8 * 4 + 2 - class215.localPlayer.x / 32; - var12 = var9 * 4 + 2 - class215.localPlayer.y / 32; - Message.drawSpriteOnMinimap(var1, var2, var11, var12, class42.mapDotSprites[0], var4); - } - } - } - - for (var8 = 0; var8 < Client.npcCount; ++var8) { - NPC var16 = Client.npcs[Client.npcIndices[var8]]; - if (var16 != null && var16.isVisible()) { - NPCDefinition var18 = var16.definition; - if (var18 != null && var18.transforms != null) { - var18 = var18.transform(); - } - - if (var18 != null && var18.drawMapDot && var18.isInteractable) { - var11 = var16.x / 32 - class215.localPlayer.x / 32; - var12 = var16.y / 32 - class215.localPlayer.y / 32; - Message.drawSpriteOnMinimap(var1, var2, var11, var12, class42.mapDotSprites[1], var4); - } - } - } - - var8 = Players.Players_count; - int[] var19 = Players.Players_indices; - - for (var10 = 0; var10 < var8; ++var10) { - Player var17 = Client.players[var19[var10]]; - if (var17 != null && var17.isVisible() && !var17.isHidden && var17 != class215.localPlayer) { - var12 = var17.x / 32 - class215.localPlayer.x / 32; - int var13 = var17.y / 32 - class215.localPlayer.y / 32; - boolean var14 = false; - if (class215.localPlayer.team != 0 && var17.team != 0 && var17.team == class215.localPlayer.team) { - var14 = true; - } - - if (var17.isFriend()) { - Message.drawSpriteOnMinimap(var1, var2, var12, var13, class42.mapDotSprites[3], var4); - } else if (var14) { - Message.drawSpriteOnMinimap(var1, var2, var12, var13, class42.mapDotSprites[4], var4); - } else if (var17.isClanMember()) { - Message.drawSpriteOnMinimap(var1, var2, var12, var13, class42.mapDotSprites[5], var4); - } else { - Message.drawSpriteOnMinimap(var1, var2, var12, var13, class42.mapDotSprites[2], var4); - } - } - } - - if (Client.hintArrowType != 0 && Client.cycle % 20 < 10) { - if (Client.hintArrowType == 1 && Client.hintArrowNpcIndex >= 0 && Client.hintArrowNpcIndex < Client.npcs.length) { - NPC var20 = Client.npcs[Client.hintArrowNpcIndex]; - if (var20 != null) { - var11 = var20.x / 32 - class215.localPlayer.x / 32; - var12 = var20.y / 32 - class215.localPlayer.y / 32; - WorldMapManager.worldToMinimap(var1, var2, var11, var12, GrandExchangeOfferOwnWorldComparator.mapMarkerSprites[1], var4); - } - } - - if (Client.hintArrowType == 2) { - var10 = Client.hintArrowX * 4 - UserComparator8.baseX * 256 + 2 - class215.localPlayer.x / 32; - var11 = Client.hintArrowY * 4 - HealthBar.baseY * 256 + 2 - class215.localPlayer.y / 32; - WorldMapManager.worldToMinimap(var1, var2, var10, var11, GrandExchangeOfferOwnWorldComparator.mapMarkerSprites[1], var4); - } - - if (Client.hintArrowType == 10 && Client.hintArrowPlayerIndex >= 0 && Client.hintArrowPlayerIndex < Client.players.length) { - Player var21 = Client.players[Client.hintArrowPlayerIndex]; - if (var21 != null) { - var11 = var21.x / 32 - class215.localPlayer.x / 32; - var12 = var21.y / 32 - class215.localPlayer.y / 32; - WorldMapManager.worldToMinimap(var1, var2, var11, var12, GrandExchangeOfferOwnWorldComparator.mapMarkerSprites[1], var4); - } - } - } - - if (Client.destinationX != 0) { - var10 = Client.destinationX * 4 + 2 - class215.localPlayer.x / 32; - var11 = Client.destinationY * 4 + 2 - class215.localPlayer.y / 32; - Message.drawSpriteOnMinimap(var1, var2, var10, var11, GrandExchangeOfferOwnWorldComparator.mapMarkerSprites[0], var4); - } - - if (!class215.localPlayer.isHidden) { - Rasterizer2D.Rasterizer2D_fillRectangle(var4.width / 2 + var1 - 1, var4.height / 2 + var2 - 1, 3, 3, 16777215); - } - } else { - Rasterizer2D.Rasterizer2D_fillMaskedRectangle(var1, var2, 0, var4.xStarts, var4.xWidths); - } - - Client.field837[var3] = true; + return true; } } } diff --git a/runescape-client/src/main/java/class40.java b/runescape-client/src/main/java/class40.java index 2e0920fda5..a9bf06735e 100644 --- a/runescape-client/src/main/java/class40.java +++ b/runescape-client/src/main/java/class40.java @@ -1,20 +1,44 @@ -import java.io.IOException; -import java.net.Socket; import net.runelite.mapping.Export; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("ae") +@ObfuscatedName("az") public class class40 { - @ObfuscatedName("a") + @ObfuscatedName("ax") @ObfuscatedGetter( - intValue = -359946727 + intValue = -483133983 + ) + static int field348; + @ObfuscatedName("bx") + @ObfuscatedSignature( + signature = "Lhz;" + ) + static ServerBuild field352; + @ObfuscatedName("bf") + @ObfuscatedSignature( + signature = "[Llm;" + ) + @Export("worldSelectArrows") + static IndexedSprite[] worldSelectArrows; + @ObfuscatedName("gk") + @ObfuscatedGetter( + intValue = -704226791 + ) + static int field343; + @ObfuscatedName("gq") + @ObfuscatedSignature( + signature = "Lln;" + ) + @Export("compass") + static Sprite compass; + @ObfuscatedName("u") + @ObfuscatedGetter( + intValue = -1530993967 ) @Export("pixelsPerTile") int pixelsPerTile; - @ObfuscatedName("t") + @ObfuscatedName("f") @Export("tileTemplates") byte[][][] tileTemplates; @@ -22,25 +46,25 @@ public class class40 { this.pixelsPerTile = var1; } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "(IIIIIIIII)V", - garbageValue = "519041522" + garbageValue = "-1919092898" ) - void method798(int var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8) { + void method740(int var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8) { if (var7 != 0 && this.pixelsPerTile != 0 && this.tileTemplates != null) { - var8 = this.method799(var8, var7); - var7 = this.method838(var7); + var8 = this.method741(var8, var7); + var7 = this.method750(var7); Rasterizer2D.Rasterizer2D_drawGradientPixels(var1, var2, var5, var6, var3, var4, this.tileTemplates[var7 - 1][var8], this.pixelsPerTile); } } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( signature = "(III)I", - garbageValue = "869171029" + garbageValue = "1952990188" ) - int method799(int var1, int var2) { + int method741(int var1, int var2) { if (var2 == 9) { var1 = var1 + 1 & 3; } @@ -56,12 +80,12 @@ public class class40 { return var1; } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( signature = "(II)I", - garbageValue = "2011840456" + garbageValue = "-1172069919" ) - int method838(int var1) { + int method750(int var1) { if (var1 != 9 && var1 != 10) { return var1 == 11 ? 8 : var1; } else { @@ -69,10 +93,10 @@ public class class40 { } } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "-73707874" + garbageValue = "965464972" ) @Export("init") void init() { @@ -89,10 +113,10 @@ public class class40 { } } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "-413581425" + signature = "(B)V", + garbageValue = "0" ) @Export("init0") void init0() { @@ -156,10 +180,10 @@ public class class40 { this.tileTemplates[0][3] = var1; } - @ObfuscatedName("l") + @ObfuscatedName("p") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "2134890825" + garbageValue = "-1030474557" ) @Export("init1") void init1() { @@ -227,10 +251,10 @@ public class class40 { this.tileTemplates[1][3] = var1; } - @ObfuscatedName("c") + @ObfuscatedName("h") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "1327235203" + signature = "(S)V", + garbageValue = "13206" ) @Export("init2") void init2() { @@ -294,10 +318,10 @@ public class class40 { this.tileTemplates[2][3] = var1; } - @ObfuscatedName("o") + @ObfuscatedName("y") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "-1955000342" + garbageValue = "-2137728663" ) @Export("init3") void init3() { @@ -361,10 +385,10 @@ public class class40 { this.tileTemplates[3][3] = var1; } - @ObfuscatedName("i") + @ObfuscatedName("w") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "1" + signature = "(I)V", + garbageValue = "665774048" ) @Export("init4") void init4() { @@ -428,10 +452,10 @@ public class class40 { this.tileTemplates[4][3] = var1; } - @ObfuscatedName("d") + @ObfuscatedName("i") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "-1524084830" + garbageValue = "-77636423" ) @Export("init5") void init5() { @@ -497,10 +521,10 @@ public class class40 { this.tileTemplates[5][3] = var1; } - @ObfuscatedName("m") + @ObfuscatedName("k") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "792481241" + garbageValue = "57571088" ) @Export("init6") void init6() { @@ -566,10 +590,10 @@ public class class40 { this.tileTemplates[6][3] = var1; } - @ObfuscatedName("p") + @ObfuscatedName("x") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "401274730" + signature = "(B)V", + garbageValue = "124" ) @Export("init7") void init7() { @@ -635,384 +659,792 @@ public class class40 { this.tileTemplates[7][3] = var1; } - @ObfuscatedName("al") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Ljava/net/Socket;III)Lku;", - garbageValue = "477889440" + signature = "(IB)Lia;", + garbageValue = "63" ) - public static AbstractSocket method839(Socket var0, int var1, int var2) throws IOException { - return new BufferedNetSocket(var0, var1, var2); - } - - @ObfuscatedName("ap") - @ObfuscatedSignature( - signature = "(ILcj;ZB)I", - garbageValue = "-72" - ) - static int method837(int var0, Script var1, boolean var2) { - if (var0 == ScriptOpcodes.CHAT_GETFILTER_PUBLIC) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = Client.publicChatMode; - return 1; - } else if (var0 == ScriptOpcodes.CHAT_SETFILTER) { - Interpreter.Interpreter_intStackSize -= 3; - Client.publicChatMode = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - class3.privateChatMode = NPCDefinition.method4881(Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]); - if (class3.privateChatMode == null) { - class3.privateChatMode = PrivateChatMode.field3779; - } - - Client.tradeChatMode = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 2]; - PacketBufferNode var18 = SoundSystem.getPacketBufferNode(ClientPacket.field2256, Client.packetWriter.isaacCipher); - var18.packetBuffer.writeByte(Client.publicChatMode); - var18.packetBuffer.writeByte(class3.privateChatMode.field3781); - var18.packetBuffer.writeByte(Client.tradeChatMode); - Client.packetWriter.addNode(var18); - return 1; + public static VarcInt method778(int var0) { + VarcInt var1 = (VarcInt)VarcInt.VarcInt_cached.get((long)var0); + if (var1 != null) { + return var1; } else { - String var3; - int var4; - if (var0 == ScriptOpcodes.CHAT_SENDABUSEREPORT) { - var3 = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]; - Interpreter.Interpreter_intStackSize -= 2; - var4 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - int var5 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - PacketBufferNode var6 = SoundSystem.getPacketBufferNode(ClientPacket.field2204, Client.packetWriter.isaacCipher); - var6.packetBuffer.writeByte(UserComparator6.stringCp1252NullTerminatedByteSize(var3) + 2); - var6.packetBuffer.writeStringCp1252NullTerminated(var3); - var6.packetBuffer.writeByte(var4 - 1); - var6.packetBuffer.writeByte(var5); - Client.packetWriter.addNode(var6); - return 1; - } else { - int var10; - if (var0 == ScriptOpcodes.CHAT_GETHISTORY_BYTYPEANDLINE) { - Interpreter.Interpreter_intStackSize -= 2; - var10 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var4 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - Message var15 = WallDecoration.Messages_getByChannelAndID(var10, var4); - if (var15 != null) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var15.count; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var15.cycle; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var15.sender != null ? var15.sender : ""; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var15.prefix != null ? var15.prefix : ""; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var15.text != null ? var15.text : ""; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var15.isFromFriend() ? 1 : (var15.isFromIgnored() ? 2 : 0); - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = -1; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = ""; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = ""; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = ""; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - } - - return 1; - } else if (var0 == ScriptOpcodes.CHAT_GETHISTORY_BYUID) { - var10 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - Message var16 = WorldMapIcon_1.Messages_getMessage(var10); - if (var16 != null) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var16.type; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var16.cycle; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var16.sender != null ? var16.sender : ""; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var16.prefix != null ? var16.prefix : ""; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var16.text != null ? var16.text : ""; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var16.isFromFriend() ? 1 : (var16.isFromIgnored() ? 2 : 0); - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = -1; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = ""; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = ""; - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = ""; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - } - - return 1; - } else if (var0 == ScriptOpcodes.CHAT_GETFILTER_PRIVATE) { - if (class3.privateChatMode == null) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = -1; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = class3.privateChatMode.field3781; - } - - return 1; - } else if (var0 == ScriptOpcodes.CHAT_SENDPUBLIC) { - var3 = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]; - var4 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - String var14 = var3.toLowerCase(); - byte var17 = 0; - if (var14.startsWith("yellow:")) { - var17 = 0; - var3 = var3.substring("yellow:".length()); - } else if (var14.startsWith("red:")) { - var17 = 1; - var3 = var3.substring("red:".length()); - } else if (var14.startsWith("green:")) { - var17 = 2; - var3 = var3.substring("green:".length()); - } else if (var14.startsWith("cyan:")) { - var17 = 3; - var3 = var3.substring("cyan:".length()); - } else if (var14.startsWith("purple:")) { - var17 = 4; - var3 = var3.substring("purple:".length()); - } else if (var14.startsWith("white:")) { - var17 = 5; - var3 = var3.substring("white:".length()); - } else if (var14.startsWith("flash1:")) { - var17 = 6; - var3 = var3.substring("flash1:".length()); - } else if (var14.startsWith("flash2:")) { - var17 = 7; - var3 = var3.substring("flash2:".length()); - } else if (var14.startsWith("flash3:")) { - var17 = 8; - var3 = var3.substring("flash3:".length()); - } else if (var14.startsWith("glow1:")) { - var17 = 9; - var3 = var3.substring("glow1:".length()); - } else if (var14.startsWith("glow2:")) { - var17 = 10; - var3 = var3.substring("glow2:".length()); - } else if (var14.startsWith("glow3:")) { - var17 = 11; - var3 = var3.substring("glow3:".length()); - } else if (WorldMapSection1.clientLanguage != Language.Language_EN) { - if (var14.startsWith("yellow:")) { - var17 = 0; - var3 = var3.substring("yellow:".length()); - } else if (var14.startsWith("red:")) { - var17 = 1; - var3 = var3.substring("red:".length()); - } else if (var14.startsWith("green:")) { - var17 = 2; - var3 = var3.substring("green:".length()); - } else if (var14.startsWith("cyan:")) { - var17 = 3; - var3 = var3.substring("cyan:".length()); - } else if (var14.startsWith("purple:")) { - var17 = 4; - var3 = var3.substring("purple:".length()); - } else if (var14.startsWith("white:")) { - var17 = 5; - var3 = var3.substring("white:".length()); - } else if (var14.startsWith("flash1:")) { - var17 = 6; - var3 = var3.substring("flash1:".length()); - } else if (var14.startsWith("flash2:")) { - var17 = 7; - var3 = var3.substring("flash2:".length()); - } else if (var14.startsWith("flash3:")) { - var17 = 8; - var3 = var3.substring("flash3:".length()); - } else if (var14.startsWith("glow1:")) { - var17 = 9; - var3 = var3.substring("glow1:".length()); - } else if (var14.startsWith("glow2:")) { - var17 = 10; - var3 = var3.substring("glow2:".length()); - } else if (var14.startsWith("glow3:")) { - var17 = 11; - var3 = var3.substring("glow3:".length()); - } - } - - var14 = var3.toLowerCase(); - byte var7 = 0; - if (var14.startsWith("wave:")) { - var7 = 1; - var3 = var3.substring("wave:".length()); - } else if (var14.startsWith("wave2:")) { - var7 = 2; - var3 = var3.substring("wave2:".length()); - } else if (var14.startsWith("shake:")) { - var7 = 3; - var3 = var3.substring("shake:".length()); - } else if (var14.startsWith("scroll:")) { - var7 = 4; - var3 = var3.substring("scroll:".length()); - } else if (var14.startsWith("slide:")) { - var7 = 5; - var3 = var3.substring("slide:".length()); - } else if (WorldMapSection1.clientLanguage != Language.Language_EN) { - if (var14.startsWith("wave:")) { - var7 = 1; - var3 = var3.substring("wave:".length()); - } else if (var14.startsWith("wave2:")) { - var7 = 2; - var3 = var3.substring("wave2:".length()); - } else if (var14.startsWith("shake:")) { - var7 = 3; - var3 = var3.substring("shake:".length()); - } else if (var14.startsWith("scroll:")) { - var7 = 4; - var3 = var3.substring("scroll:".length()); - } else if (var14.startsWith("slide:")) { - var7 = 5; - var3 = var3.substring("slide:".length()); - } - } - - PacketBufferNode var8 = SoundSystem.getPacketBufferNode(ClientPacket.field2182, Client.packetWriter.isaacCipher); - var8.packetBuffer.writeByte(0); - int var9 = var8.packetBuffer.offset; - var8.packetBuffer.writeByte(var4); - var8.packetBuffer.writeByte(var17); - var8.packetBuffer.writeByte(var7); - SecureRandomCallable.method1229(var8.packetBuffer, var3); - var8.packetBuffer.writeLengthByte(var8.packetBuffer.offset - var9); - Client.packetWriter.addNode(var8); - return 1; - } else if (var0 == ScriptOpcodes.CHAT_SENDPRIVATE) { - WorldMapDecoration.Interpreter_stringStackSize -= 2; - var3 = Interpreter.Interpreter_stringStack[WorldMapDecoration.Interpreter_stringStackSize]; - String var12 = Interpreter.Interpreter_stringStack[WorldMapDecoration.Interpreter_stringStackSize + 1]; - PacketBufferNode var11 = SoundSystem.getPacketBufferNode(ClientPacket.field2207, Client.packetWriter.isaacCipher); - var11.packetBuffer.writeShort(0); - int var13 = var11.packetBuffer.offset; - var11.packetBuffer.writeStringCp1252NullTerminated(var3); - SecureRandomCallable.method1229(var11.packetBuffer, var12); - var11.packetBuffer.writeLengthShort(var11.packetBuffer.offset - var13); - Client.packetWriter.addNode(var11); - return 1; - } else if (var0 != ScriptOpcodes.CHAT_PLAYERNAME) { - if (var0 == ScriptOpcodes.CHAT_GETFILTER_TRADE) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = Client.tradeChatMode; - return 1; - } else if (var0 == ScriptOpcodes.CHAT_GETHISTORYLENGTH) { - var10 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = AttackOption.Messages_getHistorySize(var10); - return 1; - } else if (var0 == ScriptOpcodes.CHAT_GETNEXTUID) { - var10 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = class83.Messages_getNextChatID(var10); - return 1; - } else if (var0 == ScriptOpcodes.CHAT_GETPREVUID) { - var10 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = class65.Messages_getLastChatID(var10); - return 1; - } else if (var0 == ScriptOpcodes.DOCHEAT) { - var3 = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]; - MidiPcmStream.doCheat(var3); - return 1; - } else if (var0 == ScriptOpcodes.CHAT_SETMESSAGEFILTER) { - Client.field849 = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize].toLowerCase().trim(); - return 1; - } else if (var0 == ScriptOpcodes.CHAT_GETMESSAGEFILTER) { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = Client.field849; - return 1; - } else if (var0 == ScriptOpcodes.DEBUGMES) { - var3 = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]; - System.out.println(var3); - return 1; - } else { - return 2; - } - } else { - if (class215.localPlayer != null && class215.localPlayer.username != null) { - var3 = class215.localPlayer.username.getName(); - } else { - var3 = ""; - } - - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var3; - return 1; - } + byte[] var2 = VarcInt.VarcInt_archive.takeFile(19, var0); + var1 = new VarcInt(); + if (var2 != null) { + var1.method4485(new Buffer(var2)); } + + VarcInt.VarcInt_cached.put(var1, (long)var0); + return var1; } } - @ObfuscatedName("hg") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(ZB)V", - garbageValue = "-121" + signature = "(ILke;Lij;I)V", + garbageValue = "-1464178541" ) - @Export("addNpcsToScene") - static final void addNpcsToScene(boolean var0) { - for (int var1 = 0; var1 < Client.npcCount; ++var1) { - NPC var2 = Client.npcs[Client.npcIndices[var1]]; - if (var2 != null && var2.isVisible() && var2.definition.isVisible == var0 && var2.definition.transformIsVisible()) { - int var3 = var2.x >> 7; - int var4 = var2.y >> 7; - if (var3 >= 0 && var3 < 104 && var4 >= 0 && var4 < 104) { - if (var2.field927 == 1 && (var2.x & 127) == 64 && (var2.y & 127) == 64) { - if (Client.tileLastDrawnActor[var3][var4] == Client.viewportDrawCount) { + static void method780(int var0, ArchiveDisk var1, Archive var2) { + ArchiveDiskAction var3 = new ArchiveDiskAction(); + var3.type = 1; + var3.key = (long)var0; + var3.archiveDisk = var1; + var3.archive = var2; + synchronized(ArchiveDiskActionHandler.ArchiveDiskActionHandler_requestQueue) { + ArchiveDiskActionHandler.ArchiveDiskActionHandler_requestQueue.addFirst(var3); + } + + synchronized(ArchiveDiskActionHandler.ArchiveDiskActionHandler_lock) { + if (ArchiveDiskActionHandler.field3155 == 0) { + ArchiveDiskActionHandler.ArchiveDiskActionHandler_thread = new Thread(new ArchiveDiskActionHandler()); + ArchiveDiskActionHandler.ArchiveDiskActionHandler_thread.setDaemon(true); + ArchiveDiskActionHandler.ArchiveDiskActionHandler_thread.start(); + ArchiveDiskActionHandler.ArchiveDiskActionHandler_thread.setPriority(5); + } + + ArchiveDiskActionHandler.field3155 = 600; + } + } + + @ObfuscatedName("g") + @ObfuscatedSignature( + signature = "(B)V", + garbageValue = "-62" + ) + @Export("savePreferences") + static void savePreferences() { + AccessFile var0 = null; + + try { + var0 = class191.getPreferencesFile("", UserComparator8.field1973.name, true); + Buffer var1 = UserComparator10.clientPreferences.toBuffer(); + var0.write(var1.array, 0, var1.offset); + } catch (Exception var3) { + } + + try { + if (var0 != null) { + var0.closeSync(true); + } + } catch (Exception var2) { + } + + } + + @ObfuscatedName("w") + @ObfuscatedSignature( + signature = "(IB)I", + garbageValue = "75" + ) + @Export("Messages_getNextChatID") + static int Messages_getNextChatID(int var0) { + Message var1 = (Message)Messages.Messages_hashTable.get((long)var0); + if (var1 == null) { + return -1; + } else { + return var1.previousDual == Messages.Messages_queue.sentinel ? -1 : ((Message)var1.previousDual).count; + } + } + + @ObfuscatedName("fc") + @ObfuscatedSignature( + signature = "(I)V", + garbageValue = "-644551053" + ) + @Export("logOut") + static final void logOut() { + Client.packetWriter.close(); + GrandExchangeOfferNameComparator.method154(); + BoundaryObject.method3311(); + DynamicObject.method2259(); + GraphicsObject.method2039(); + class222.method4195(); + WorldMapAreaData.method703(); + SequenceDefinition.SequenceDefinition_cached.clear(); + SequenceDefinition.SequenceDefinition_cachedFrames.clear(); + SpotAnimationDefinition.SpotAnimationDefinition_cached.clear(); + SpotAnimationDefinition.SpotAnimationDefinition_cachedModels.clear(); + VarbitDefinition.VarbitDefinition_cached.clear(); + class195.method3746(); + HitSplatDefinition.HitSplatDefinition_cached.clear(); + HitSplatDefinition.HitSplatDefinition_cachedSprites.clear(); + HitSplatDefinition.HitSplatDefinition_cachedFonts.clear(); + class237.method4421(); + ViewportMouse.method3012(); + class3.method35(); + Occluder.method3336(); + MusicPatchPcmStream.method3970(); + HealthBar.method2054(); + ((TextureProvider)Rasterizer3D.Rasterizer3D_textureLoader).clear(); + Script.Script_cached.clear(); + GrandExchangeOfferAgeComparator.archive0.clearFiles(); + class43.archive1.clearFiles(); + WorldMapID.archive3.clearFiles(); + SpriteMask.archive4.clearFiles(); + DirectByteArrayCopier.archive5.clearFiles(); + AbstractWorldMapData.archive6.clearFiles(); + ClientPacket.archive7.clearFiles(); + WorldMapRegion.archive8.clearFiles(); + class2.archive9.clearFiles(); + class81.archive10.clearFiles(); + ScriptFrame.archive11.clearFiles(); + class267.archive12.clearFiles(); + class2.scene.clear(); + + for (int var0 = 0; var0 < 4; ++var0) { + Client.collisionMaps[var0].clear(); + } + + System.gc(); + UrlRequest.method3358(2); + Client.currentTrackGroupId = -1; + Client.field742 = false; + + for (ObjectSound var1 = (ObjectSound)ObjectSound.objectSounds.last(); var1 != null; var1 = (ObjectSound)ObjectSound.objectSounds.previous()) { + if (var1.stream1 != null) { + ClientPacket.pcmStreamMixer.removeSubStream(var1.stream1); + var1.stream1 = null; + } + + if (var1.stream2 != null) { + ClientPacket.pcmStreamMixer.removeSubStream(var1.stream2); + var1.stream2 = null; + } + } + + ObjectSound.objectSounds.clear(); + class81.updateGameState(10); + } + + @ObfuscatedName("io") + @ObfuscatedSignature( + signature = "([Lhl;IIIIIIIII)V", + garbageValue = "-1496434270" + ) + @Export("drawInterface") + static final void drawInterface(Widget[] var0, int var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8) { + Rasterizer2D.Rasterizer2D_setClip(var2, var3, var4, var5); + Rasterizer3D.Rasterizer3D_setClipFromRasterizer2D(); + + for (int var9 = 0; var9 < var0.length; ++var9) { + Widget var10 = var0[var9]; + if (var10 != null && (var10.parentId == var1 || var1 == -1412584499 && var10 == Client.clickedWidget)) { + int var11; + if (var8 == -1) { + Client.rootWidgetXs[Client.rootWidgetCount] = var10.x + var6; + Client.rootWidgetYs[Client.rootWidgetCount] = var7 + var10.y; + Client.rootWidgetWidths[Client.rootWidgetCount] = var10.width; + Client.rootWidgetHeights[Client.rootWidgetCount] = var10.height; + var11 = ++Client.rootWidgetCount - 1; + } else { + var11 = var8; + } + + var10.rootIndex = var11; + var10.cycle = Client.cycle; + if (!var10.isIf3 || !AbstractByteArrayCopier.isComponentHidden(var10)) { + if (var10.contentType > 0) { + UserList.method5233(var10); + } + + int var12 = var10.x + var6; + int var13 = var7 + var10.y; + int var14 = var10.transparencyTop; + int var15; + int var16; + if (var10 == Client.clickedWidget) { + if (var1 != -1412584499 && !var10.isScrollBar) { + class4.field22 = var0; + WorldMapSection2.field200 = var6; + TilePaint.field1782 = var7; continue; } - Client.tileLastDrawnActor[var3][var4] = Client.viewportDrawCount; - } - - long var5 = class160.calculateTag(0, 0, 1, !var2.definition.isInteractable, Client.npcIndices[var1]); - var2.playerCycle = Client.cycle; - WorldMapArea.scene.drawEntity(Player.Client_plane, var2.x, var2.y, GraphicsObject.getTileHeight(var2.field927 * 64 - 64 + var2.x, var2.field927 * 64 - 64 + var2.y, Player.Client_plane), var2.field927 * 64 - 64 + 60, var2, var2.rotation, var5, var2.isWalking); - } - } - } - - } - - @ObfuscatedName("ia") - @ObfuscatedSignature( - signature = "(Lbj;IIII)V", - garbageValue = "231016448" - ) - @Export("addPlayerToMenu") - static final void addPlayerToMenu(Player var0, int var1, int var2, int var3) { - if (class215.localPlayer != var0) { - if (Client.menuOptionsCount < 400) { - String var4; - if (var0.skillLevel == 0) { - var4 = var0.actions[0] + var0.username + var0.actions[1] + GrandExchangeOffer.method159(var0.combatLevel, class215.localPlayer.combatLevel) + " " + " (" + "level-" + var0.combatLevel + ")" + var0.actions[2]; - } else { - var4 = var0.actions[0] + var0.username + var0.actions[1] + " " + " (" + "skill-" + var0.skillLevel + ")" + var0.actions[2]; - } - - int var5; - if (Client.isItemSelected == 1) { - GameObject.insertMenuItemNoShift("Use", Client.selectedItemName + " " + "->" + " " + AbstractArchive.colorStartTag(16777215) + var4, 14, var1, var2, var3); - } else if (Client.isSpellSelected) { - if ((class81.selectedSpellFlags & 8) == 8) { - GameObject.insertMenuItemNoShift(Client.selectedSpellActionName, Client.selectedSpellName + " " + "->" + " " + AbstractArchive.colorStartTag(16777215) + var4, 15, var1, var2, var3); - } - } else { - for (var5 = 7; var5 >= 0; --var5) { - if (Client.playerMenuActions[var5] != null) { - short var6 = 0; - if (Client.playerMenuActions[var5].equalsIgnoreCase("Attack")) { - if (Client.playerAttackOption == AttackOption.AttackOption_hidden) { - continue; - } - - if (Client.playerAttackOption == AttackOption.AttackOption_alwaysRightClick || AttackOption.AttackOption_dependsOnCombatLevels == Client.playerAttackOption && var0.combatLevel > class215.localPlayer.combatLevel) { - var6 = 2000; - } - - if (class215.localPlayer.team != 0 && var0.team != 0) { - if (var0.team == class215.localPlayer.team) { - var6 = 2000; - } else { - var6 = 0; - } - } - } else if (Client.playerOptionsPriorities[var5]) { - var6 = 2000; + if (Client.isDraggingWidget && Client.field820) { + var15 = MouseHandler.MouseHandler_x; + var16 = MouseHandler.MouseHandler_y; + var15 -= Client.widgetClickX; + var16 -= Client.widgetClickY; + if (var15 < Client.field698) { + var15 = Client.field698; } - boolean var7 = false; - int var8 = Client.playerMenuOpcodes[var5] + var6; - GameObject.insertMenuItemNoShift(Client.playerMenuActions[var5], AbstractArchive.colorStartTag(16777215) + var4, var8, var1, var2, var3); + if (var15 + var10.width > Client.field698 + Client.clickedWidgetParent.width) { + var15 = Client.field698 + Client.clickedWidgetParent.width - var10.width; + } + + if (var16 < Client.field822) { + var16 = Client.field822; + } + + if (var16 + var10.height > Client.field822 + Client.clickedWidgetParent.height) { + var16 = Client.field822 + Client.clickedWidgetParent.height - var10.height; + } + + var12 = var15; + var13 = var16; + } + + if (!var10.isScrollBar) { + var14 = 128; + } + } + + int var17; + int var18; + int var20; + int var21; + int var22; + int var30; + if (var10.type == 2) { + var15 = var2; + var16 = var3; + var17 = var4; + var18 = var5; + } else if (var10.type == 9) { + var30 = var12; + var20 = var13; + var21 = var12 + var10.width; + var22 = var13 + var10.height; + if (var21 < var12) { + var30 = var21; + var21 = var12; + } + + if (var22 < var13) { + var20 = var22; + var22 = var13; + } + + ++var21; + ++var22; + var15 = var30 > var2 ? var30 : var2; + var16 = var20 > var3 ? var20 : var3; + var17 = var21 < var4 ? var21 : var4; + var18 = var22 < var5 ? var22 : var5; + } else { + var30 = var12 + var10.width; + var20 = var13 + var10.height; + var15 = var12 > var2 ? var12 : var2; + var16 = var13 > var3 ? var13 : var3; + var17 = var30 < var4 ? var30 : var4; + var18 = var20 < var5 ? var20 : var5; + } + + if (!var10.isIf3 || var15 < var17 && var16 < var18) { + if (var10.contentType != 0) { + if (var10.contentType == 1336) { + if (Client.displayFps) { + var13 += 15; + Player.fontPlain12.drawRightAligned("Fps:" + GameShell.fps, var12 + var10.width, var13, 16776960, -1); + var13 += 15; + Runtime var38 = Runtime.getRuntime(); + var20 = (int)((var38.totalMemory() - var38.freeMemory()) / 1024L); + var21 = 16776960; + if (var20 > 327680 && !Client.isLowDetail) { + var21 = 16711680; + } + + Player.fontPlain12.drawRightAligned("Mem:" + var20 + "k", var12 + var10.width, var13, var21, -1); + var13 += 15; + } + continue; + } + + if (var10.contentType == 1337) { + Client.viewportX = var12; + Client.viewportY = var13; + class43.drawEntities(var12, var13, var10.width, var10.height); + Client.field847[var10.rootIndex] = true; + Rasterizer2D.Rasterizer2D_setClip(var2, var3, var4, var5); + continue; + } + + if (var10.contentType == 1338) { + MusicPatchNode2.drawMinimap(var10, var12, var13, var11); + Rasterizer2D.Rasterizer2D_setClip(var2, var3, var4, var5); + continue; + } + + if (var10.contentType == 1339) { + TileItem.drawCompass(var10, var12, var13, var11); + Rasterizer2D.Rasterizer2D_setClip(var2, var3, var4, var5); + continue; + } + + if (var10.contentType == 1400) { + WorldMapRegion.worldMap.draw(var12, var13, var10.width, var10.height, Client.cycle); + } + + if (var10.contentType == 1401) { + WorldMapRegion.worldMap.drawOverview(var12, var13, var10.width, var10.height); + } + + if (var10.contentType == 1402) { + DynamicObject.loginScreenRunesAnimation.draw(var12, Client.cycle); + } + } + + if (var10.type == 0) { + if (!var10.isIf3 && AbstractByteArrayCopier.isComponentHidden(var10) && var10 != class185.mousedOverWidgetIf1) { + continue; + } + + if (!var10.isIf3) { + if (var10.scrollY > var10.scrollHeight - var10.height) { + var10.scrollY = var10.scrollHeight - var10.height; + } + + if (var10.scrollY < 0) { + var10.scrollY = 0; + } + } + + drawInterface(var0, var10.id, var15, var16, var17, var18, var12 - var10.scrollX, var13 - var10.scrollY, var11); + if (var10.children != null) { + drawInterface(var10.children, var10.id, var15, var16, var17, var18, var12 - var10.scrollX, var13 - var10.scrollY, var11); + } + + InterfaceParent var19 = (InterfaceParent)Client.interfaceParents.get((long)var10.id); + if (var19 != null) { + class65.drawWidgets(var19.group, var15, var16, var17, var18, var12, var13, var11); + } + + Rasterizer2D.Rasterizer2D_setClip(var2, var3, var4, var5); + Rasterizer3D.Rasterizer3D_setClipFromRasterizer2D(); + } + + if (Client.isResizable || Client.field849[var11] || Client.gameDrawingMode > 1) { + if (var10.type == 0 && !var10.isIf3 && var10.scrollHeight > var10.height) { + JagexCache.drawScrollBar(var12 + var10.width, var13, var10.scrollY, var10.height, var10.scrollHeight); + } + + if (var10.type != 1) { + int var23; + int var24; + int var25; + int var26; + if (var10.type == 2) { + var30 = 0; + + for (var20 = 0; var20 < var10.rawHeight; ++var20) { + for (var21 = 0; var21 < var10.rawWidth; ++var21) { + var22 = var21 * (var10.paddingX + 32) + var12; + var23 = var13 + var20 * (var10.paddingY + 32); + if (var30 < 20) { + var22 += var10.inventoryXOffsets[var30]; + var23 += var10.inventoryYOffsets[var30]; + } + + if (var10.itemIds[var30] <= 0) { + if (var10.inventorySprites != null && var30 < 20) { + Sprite var42 = var10.getInventorySprite(var30); + if (var42 != null) { + var42.drawTransBgAt(var22, var23); + } else if (Widget.field2647) { + ScriptEvent.invalidateWidget(var10); + } + } + } else { + boolean var39 = false; + boolean var40 = false; + var26 = var10.itemIds[var30] - 1; + if (var22 + 32 > var2 && var22 < var4 && var23 + 32 > var3 && var23 < var5 || var10 == DevicePcmPlayerProvider.dragInventoryWidget && var30 == Client.dragItemSlotSource) { + Sprite var35; + if (Client.isItemSelected == 1 && var30 == class43.selectedItemSlot && var10.id == class1.selectedItemWidget) { + var35 = VertexNormal.getItemSprite(var26, var10.itemQuantities[var30], 2, 0, 2, false); + } else { + var35 = VertexNormal.getItemSprite(var26, var10.itemQuantities[var30], 1, 3153952, 2, false); + } + + if (var35 != null) { + if (var10 == DevicePcmPlayerProvider.dragInventoryWidget && var30 == Client.dragItemSlotSource) { + var24 = MouseHandler.MouseHandler_x - Client.field751; + var25 = MouseHandler.MouseHandler_y - Client.field752; + if (var24 < 5 && var24 > -5) { + var24 = 0; + } + + if (var25 < 5 && var25 > -5) { + var25 = 0; + } + + if (Client.itemDragDuration < 5) { + var24 = 0; + var25 = 0; + } + + var35.drawTransAt(var22 + var24, var23 + var25, 128); + if (var1 != -1) { + Widget var28 = var0[var1 & 65535]; + int var29; + if (var25 + var23 < Rasterizer2D.Rasterizer2D_yClipStart && var28.scrollY > 0) { + var29 = (Rasterizer2D.Rasterizer2D_yClipStart - var23 - var25) * Client.field704 / 3; + if (var29 > Client.field704 * 10) { + var29 = Client.field704 * 10; + } + + if (var29 > var28.scrollY) { + var29 = var28.scrollY; + } + + var28.scrollY -= var29; + Client.field752 += var29; + ScriptEvent.invalidateWidget(var28); + } + + if (var25 + var23 + 32 > Rasterizer2D.Rasterizer2D_yClipEnd && var28.scrollY < var28.scrollHeight - var28.height) { + var29 = (var23 + var25 + 32 - Rasterizer2D.Rasterizer2D_yClipEnd) * Client.field704 / 3; + if (var29 > Client.field704 * 10) { + var29 = Client.field704 * 10; + } + + if (var29 > var28.scrollHeight - var28.height - var28.scrollY) { + var29 = var28.scrollHeight - var28.height - var28.scrollY; + } + + var28.scrollY += var29; + Client.field752 -= var29; + ScriptEvent.invalidateWidget(var28); + } + } + } else if (var10 == class51.field432 && var30 == Client.field749) { + var35.drawTransAt(var22, var23, 128); + } else { + var35.drawTransBgAt(var22, var23); + } + } else { + ScriptEvent.invalidateWidget(var10); + } + } + } + + ++var30; + } + } + } else if (var10.type == 3) { + if (WorldMapArea.runCs1(var10)) { + var30 = var10.color2; + if (var10 == class185.mousedOverWidgetIf1 && var10.mouseOverColor2 != 0) { + var30 = var10.mouseOverColor2; + } + } else { + var30 = var10.color; + if (var10 == class185.mousedOverWidgetIf1 && var10.mouseOverColor != 0) { + var30 = var10.mouseOverColor; + } + } + + if (var10.fill) { + switch(var10.fillMode.value) { + case 1: + Rasterizer2D.Rasterizer2D_fillRectangleGradient(var12, var13, var10.width, var10.height, var10.color, var10.color2); + break; + case 2: + Rasterizer2D.Rasterizer2D_fillRectangleGradientAlpha(var12, var13, var10.width, var10.height, var10.color, var10.color2, 255 - (var10.transparencyTop & 255), 255 - (var10.transparencyBot & 255)); + break; + default: + if (var14 == 0) { + Rasterizer2D.Rasterizer2D_fillRectangle(var12, var13, var10.width, var10.height, var30); + } else { + Rasterizer2D.Rasterizer2D_fillRectangleAlpha(var12, var13, var10.width, var10.height, var30, 256 - (var14 & 255)); + } + } + } else if (var14 == 0) { + Rasterizer2D.Rasterizer2D_drawRectangle(var12, var13, var10.width, var10.height, var30); + } else { + Rasterizer2D.Rasterizer2D_drawRectangleAlpha(var12, var13, var10.width, var10.height, var30, 256 - (var14 & 255)); + } + } else { + Font var36; + if (var10.type == 4) { + var36 = var10.getFont(); + if (var36 == null) { + if (Widget.field2647) { + ScriptEvent.invalidateWidget(var10); + } + } else { + String var45 = var10.text; + if (WorldMapArea.runCs1(var10)) { + var20 = var10.color2; + if (var10 == class185.mousedOverWidgetIf1 && var10.mouseOverColor2 != 0) { + var20 = var10.mouseOverColor2; + } + + if (var10.text2.length() > 0) { + var45 = var10.text2; + } + } else { + var20 = var10.color; + if (var10 == class185.mousedOverWidgetIf1 && var10.mouseOverColor != 0) { + var20 = var10.mouseOverColor; + } + } + + if (var10.isIf3 && var10.itemId != -1) { + ItemDefinition var46 = Interpreter.ItemDefinition_get(var10.itemId); + var45 = var46.name; + if (var45 == null) { + var45 = "null"; + } + + if ((var46.isStackable == 1 || var10.itemQuantity != 1) && var10.itemQuantity != -1) { + var45 = class222.colorStartTag(16748608) + var45 + "" + " " + 'x' + WorldMapElement.formatItemStacks(var10.itemQuantity); + } + } + + if (var10 == Client.meslayerContinueWidget) { + var45 = "Please wait..."; + var20 = var10.color; + } + + if (!var10.isIf3) { + var45 = GraphicsObject.method2036(var45, var10); + } + + var36.drawLines(var45, var12, var13, var10.width, var10.height, var20, var10.textShadowed ? 0 : -1, var10.textXAlignment, var10.textYAlignment, var10.textLineHeight); + } + } else if (var10.type == 5) { + Sprite var37; + if (!var10.isIf3) { + var37 = var10.getSprite(WorldMapArea.runCs1(var10)); + if (var37 != null) { + var37.drawTransBgAt(var12, var13); + } else if (Widget.field2647) { + ScriptEvent.invalidateWidget(var10); + } + } else { + if (var10.itemId != -1) { + var37 = VertexNormal.getItemSprite(var10.itemId, var10.itemQuantity, var10.outline, var10.spriteShadow, var10.itemQuantityMode, false); + } else { + var37 = var10.getSprite(false); + } + + if (var37 == null) { + if (Widget.field2647) { + ScriptEvent.invalidateWidget(var10); + } + } else { + var20 = var37.width; + var21 = var37.height; + if (!var10.spriteTiling) { + var22 = var10.width * 4096 / var20; + if (var10.spriteAngle != 0) { + var37.method6226(var10.width / 2 + var12, var10.height / 2 + var13, var10.spriteAngle, var22); + } else if (var14 != 0) { + var37.drawTransScaledAt(var12, var13, var10.width, var10.height, 256 - (var14 & 255)); + } else if (var20 == var10.width && var21 == var10.height) { + var37.drawTransBgAt(var12, var13); + } else { + var37.drawScaledAt(var12, var13, var10.width, var10.height); + } + } else { + Rasterizer2D.Rasterizer2D_expandClip(var12, var13, var12 + var10.width, var13 + var10.height); + var22 = (var20 - 1 + var10.width) / var20; + var23 = (var21 - 1 + var10.height) / var21; + + for (var24 = 0; var24 < var22; ++var24) { + for (var25 = 0; var25 < var23; ++var25) { + if (var10.spriteAngle != 0) { + var37.method6226(var20 / 2 + var12 + var20 * var24, var21 / 2 + var13 + var25 * var21, var10.spriteAngle, 4096); + } else if (var14 != 0) { + var37.drawTransAt(var12 + var24 * var20, var13 + var21 * var25, 256 - (var14 & 255)); + } else { + var37.drawTransBgAt(var12 + var24 * var20, var13 + var25 * var21); + } + } + } + + Rasterizer2D.Rasterizer2D_setClip(var2, var3, var4, var5); + } + } + } + } else { + ItemDefinition var34; + if (var10.type == 6) { + boolean var43 = WorldMapArea.runCs1(var10); + if (var43) { + var20 = var10.sequenceId2; + } else { + var20 = var10.sequenceId; + } + + Model var41 = null; + var22 = 0; + if (var10.itemId != -1) { + var34 = Interpreter.ItemDefinition_get(var10.itemId); + if (var34 != null) { + var34 = var34.getCountObj(var10.itemQuantity); + var41 = var34.getModel(1); + if (var41 != null) { + var41.calculateBoundsCylinder(); + var22 = var41.height / 2; + } else { + ScriptEvent.invalidateWidget(var10); + } + } + } else if (var10.modelType == 5) { + if (var10.modelId == 0) { + var41 = Client.playerAppearance.getModel((SequenceDefinition)null, -1, (SequenceDefinition)null, -1); + } else { + var41 = class215.localPlayer.getModel(); + } + } else if (var20 == -1) { + var41 = var10.getModel((SequenceDefinition)null, -1, var43, class215.localPlayer.appearance); + if (var41 == null && Widget.field2647) { + ScriptEvent.invalidateWidget(var10); + } + } else { + SequenceDefinition var47 = GrandExchangeOfferAgeComparator.SequenceDefinition_get(var20); + var41 = var10.getModel(var47, var10.modelFrame, var43, class215.localPlayer.appearance); + if (var41 == null && Widget.field2647) { + ScriptEvent.invalidateWidget(var10); + } + } + + Rasterizer3D.method3024(var10.width / 2 + var12, var10.height / 2 + var13); + var23 = Rasterizer3D.Rasterizer3D_sine[var10.modelAngleX] * var10.modelZoom >> 16; + var24 = Rasterizer3D.Rasterizer3D_cosine[var10.modelAngleX] * var10.modelZoom >> 16; + if (var41 != null) { + if (!var10.isIf3) { + var41.method2958(0, var10.modelAngleY, 0, var10.modelAngleX, 0, var23, var24); + } else { + var41.calculateBoundsCylinder(); + if (var10.modelOrthog) { + var41.method2918(0, var10.modelAngleY, var10.modelAngleZ, var10.modelAngleX, var10.modelOffsetX, var22 + var23 + var10.modelOffsetY, var24 + var10.modelOffsetY, var10.modelZoom); + } else { + var41.method2958(0, var10.modelAngleY, var10.modelAngleZ, var10.modelAngleX, var10.modelOffsetX, var23 + var22 + var10.modelOffsetY, var24 + var10.modelOffsetY); + } + } + } + + Rasterizer3D.Rasterizer3D_method3(); + } else { + if (var10.type == 7) { + var36 = var10.getFont(); + if (var36 == null) { + if (Widget.field2647) { + ScriptEvent.invalidateWidget(var10); + } + continue; + } + + var20 = 0; + + for (var21 = 0; var21 < var10.rawHeight; ++var21) { + for (var22 = 0; var22 < var10.rawWidth; ++var22) { + if (var10.itemIds[var20] > 0) { + var34 = Interpreter.ItemDefinition_get(var10.itemIds[var20] - 1); + String var31; + if (var34.isStackable != 1 && var10.itemQuantities[var20] == 1) { + var31 = class222.colorStartTag(16748608) + var34.name + ""; + } else { + var31 = class222.colorStartTag(16748608) + var34.name + "" + " " + 'x' + WorldMapElement.formatItemStacks(var10.itemQuantities[var20]); + } + + var25 = var12 + var22 * (var10.paddingX + 115); + var26 = (var10.paddingY + 12) * var21 + var13; + if (var10.textXAlignment == 0) { + var36.draw(var31, var25, var26, var10.color, var10.textShadowed ? 0 : -1); + } else if (var10.textXAlignment == 1) { + var36.drawCentered(var31, var10.width / 2 + var25, var26, var10.color, var10.textShadowed ? 0 : -1); + } else { + var36.drawRightAligned(var31, var25 + var10.width - 1, var26, var10.color, var10.textShadowed ? 0 : -1); + } + } + + ++var20; + } + } + } + + if (var10.type == 8 && var10 == GrandExchangeOfferWorldComparator.field31 && Client.field768 == Client.field643) { + var30 = 0; + var20 = 0; + Font var32 = Player.fontPlain12; + String var33 = var10.text; + + String var44; + for (var33 = GraphicsObject.method2036(var33, var10); var33.length() > 0; var20 = var20 + var32.ascent + 1) { + var24 = var33.indexOf("
"); + if (var24 != -1) { + var44 = var33.substring(0, var24); + var33 = var33.substring(var24 + 4); + } else { + var44 = var33; + var33 = ""; + } + + var25 = var32.stringWidth(var44); + if (var25 > var30) { + var30 = var25; + } + } + + var30 += 6; + var20 += 7; + var24 = var12 + var10.width - 5 - var30; + var25 = var13 + var10.height + 5; + if (var24 < var12 + 5) { + var24 = var12 + 5; + } + + if (var30 + var24 > var4) { + var24 = var4 - var30; + } + + if (var25 + var20 > var5) { + var25 = var5 - var20; + } + + Rasterizer2D.Rasterizer2D_fillRectangle(var24, var25, var30, var20, 16777120); + Rasterizer2D.Rasterizer2D_drawRectangle(var24, var25, var30, var20, 0); + var33 = var10.text; + var26 = var25 + var32.ascent + 2; + + for (var33 = GraphicsObject.method2036(var33, var10); var33.length() > 0; var26 = var26 + var32.ascent + 1) { + int var27 = var33.indexOf("
"); + if (var27 != -1) { + var44 = var33.substring(0, var27); + var33 = var33.substring(var27 + 4); + } else { + var44 = var33; + var33 = ""; + } + + var32.draw(var44, var24 + 3, var26, 0, -1); + } + } + + if (var10.type == 9) { + if (var10.field2709) { + var30 = var12; + var20 = var13 + var10.height; + var21 = var12 + var10.width; + var22 = var13; + } else { + var30 = var12; + var20 = var13; + var21 = var12 + var10.width; + var22 = var13 + var10.height; + } + + if (var10.lineWid == 1) { + Rasterizer2D.Rasterizer2D_drawLine(var30, var20, var21, var22, var10.color); + } else { + WorldMapSection0.method255(var30, var20, var21, var22, var10.color, var10.lineWid); + } + } + } + } + } + } } } } - - for (var5 = 0; var5 < Client.menuOptionsCount; ++var5) { - if (Client.menuOpcodes[var5] == 23) { - Client.menuTargets[var5] = AbstractArchive.colorStartTag(16777215) + var4; - break; - } - } - } } + } } diff --git a/runescape-client/src/main/java/class42.java b/runescape-client/src/main/java/class42.java index f344876f2d..ca7bad5e6d 100644 --- a/runescape-client/src/main/java/class42.java +++ b/runescape-client/src/main/java/class42.java @@ -1,334 +1,266 @@ -import java.util.Iterator; import net.runelite.mapping.Export; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("ah") +@ObfuscatedName("ae") public class class42 implements WorldMapSection { - @ObfuscatedName("ql") - @ObfuscatedGetter( - intValue = -1572028416 - ) - static int field360; - @ObfuscatedName("gc") + @ObfuscatedName("bm") @ObfuscatedSignature( - signature = "[Llx;" + signature = "[Lln;" ) - @Export("mapDotSprites") - static Sprite[] mapDotSprites; - @ObfuscatedName("a") + @Export("worldSelectBackSprites") + static Sprite[] worldSelectBackSprites; + @ObfuscatedName("br") + @ObfuscatedSignature( + signature = "Llm;" + ) + static IndexedSprite field364; + @ObfuscatedName("u") @ObfuscatedGetter( - intValue = 1414528917 + intValue = -1474152669 ) - int field358; - @ObfuscatedName("t") + int field370; + @ObfuscatedName("f") @ObfuscatedGetter( - intValue = -1336936449 + intValue = 1928734715 ) - int field349; - @ObfuscatedName("n") + int field361; + @ObfuscatedName("b") @ObfuscatedGetter( - intValue = 1265839335 + intValue = 1228215067 ) - int field351; - @ObfuscatedName("q") + int field371; + @ObfuscatedName("g") @ObfuscatedGetter( - intValue = 1444724099 + intValue = -1297027701 ) - int field357; - @ObfuscatedName("v") + int field363; + @ObfuscatedName("z") @ObfuscatedGetter( - intValue = -1979837671 + intValue = -114767203 ) - int field353; - @ObfuscatedName("l") + int field362; + @ObfuscatedName("p") @ObfuscatedGetter( - intValue = -1964329659 + intValue = 318560359 ) - int field354; - @ObfuscatedName("c") + int field365; + @ObfuscatedName("h") @ObfuscatedGetter( - intValue = -837058271 + intValue = -1391575641 ) - int field355; - @ObfuscatedName("o") + int field366; + @ObfuscatedName("y") @ObfuscatedGetter( - intValue = -882784751 + intValue = -1608149363 ) - int field350; + int field367; + @ObfuscatedName("w") + @ObfuscatedGetter( + intValue = -2127073261 + ) + int field368; @ObfuscatedName("i") @ObfuscatedGetter( - intValue = -1697600129 + intValue = -395386295 ) - int field359; - @ObfuscatedName("d") - @ObfuscatedGetter( - intValue = 309221771 - ) - int field352; + int field369; class42() { } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Laa;B)V", - garbageValue = "-111" + signature = "(Laf;I)V", + garbageValue = "-567179164" ) @Export("expandBounds") public void expandBounds(WorldMapArea var1) { - if (var1.regionLowX > this.field353) { - var1.regionLowX = this.field353; + if (var1.regionLowX > this.field362) { + var1.regionLowX = this.field362; } - if (var1.regionHighX < this.field353) { - var1.regionHighX = this.field353; + if (var1.regionHighX < this.field362) { + var1.regionHighX = this.field362; } - if (var1.regionLowY > this.field354) { - var1.regionLowY = this.field354; + if (var1.regionLowY > this.field365) { + var1.regionLowY = this.field365; } - if (var1.regionHighY < this.field354) { - var1.regionHighY = this.field354; + if (var1.regionHighY < this.field365) { + var1.regionHighY = this.field365; } } - @ObfuscatedName("t") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(IIII)Z", - garbageValue = "-1417818612" + signature = "(IIIB)Z", + garbageValue = "0" ) @Export("containsCoord") public boolean containsCoord(int var1, int var2, int var3) { - if (var1 >= this.field358 && var1 < this.field358 + this.field349) { - return var2 >= (this.field351 << 6) + (this.field355 << 3) && var2 <= (this.field351 << 6) + (this.field355 << 3) + 7 && var3 >= (this.field357 << 6) + (this.field350 << 3) && var3 <= (this.field357 << 6) + (this.field350 << 3) + 7; + if (var1 >= this.field370 && var1 < this.field361 + this.field370) { + return var2 >= (this.field371 << 6) + (this.field366 << 3) && var2 <= (this.field371 << 6) + (this.field366 << 3) + 7 && var3 >= (this.field363 << 6) + (this.field367 << 3) && var3 <= (this.field363 << 6) + (this.field367 << 3) + 7; } else { return false; } } - @ObfuscatedName("n") + @ObfuscatedName("b") @ObfuscatedSignature( signature = "(III)Z", - garbageValue = "-2132898041" + garbageValue = "110675609" ) @Export("containsPosition") public boolean containsPosition(int var1, int var2) { - return var1 >= (this.field353 << 6) + (this.field359 << 3) && var1 <= (this.field353 << 6) + (this.field359 << 3) + 7 && var2 >= (this.field354 << 6) + (this.field352 << 3) && var2 <= (this.field354 << 6) + (this.field352 << 3) + 7; + return var1 >= (this.field362 << 6) + (this.field368 << 3) && var1 <= (this.field362 << 6) + (this.field368 << 3) + 7 && var2 >= (this.field365 << 6) + (this.field369 << 3) && var2 <= (this.field365 << 6) + (this.field369 << 3) + 7; } - @ObfuscatedName("q") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(IIII)[I", - garbageValue = "1209167521" + signature = "(IIIB)[I", + garbageValue = "69" ) @Export("getBorderTileLengths") public int[] getBorderTileLengths(int var1, int var2, int var3) { if (!this.containsCoord(var1, var2, var3)) { return null; } else { - int[] var4 = new int[]{this.field353 * 64 - this.field351 * 64 + var2 + (this.field359 * 8 - this.field355 * 8), var3 + (this.field354 * 64 - this.field357 * 64) + (this.field352 * 8 - this.field350 * 8)}; + int[] var4 = new int[]{this.field362 * 64 - this.field371 * 64 + var2 + (this.field368 * 8 - this.field366 * 8), var3 + (this.field365 * 64 - this.field363 * 64) + (this.field369 * 8 - this.field367 * 8)}; return var4; } } - @ObfuscatedName("v") + @ObfuscatedName("z") @ObfuscatedSignature( - signature = "(IIS)Lhf;", - garbageValue = "7283" + signature = "(III)Lhx;", + garbageValue = "1062204141" ) @Export("coord") public Coord coord(int var1, int var2) { if (!this.containsPosition(var1, var2)) { return null; } else { - int var3 = this.field351 * 64 - this.field353 * 64 + (this.field355 * 8 - this.field359 * 8) + var1; - int var4 = this.field357 * 64 - this.field354 * 64 + var2 + (this.field350 * 8 - this.field352 * 8); - return new Coord(this.field358, var3, var4); + int var3 = this.field371 * 64 - this.field362 * 64 + (this.field366 * 8 - this.field368 * 8) + var1; + int var4 = this.field363 * 64 - this.field365 * 64 + var2 + (this.field367 * 8 - this.field369 * 8); + return new Coord(this.field370, var3, var4); } } - @ObfuscatedName("l") - @ObfuscatedSignature( - signature = "(Lkc;I)V", - garbageValue = "-568369534" - ) - @Export("read") - public void read(Buffer var1) { - this.field358 = var1.readUnsignedByte(); - this.field349 = var1.readUnsignedByte(); - this.field351 = var1.readUnsignedShort(); - this.field355 = var1.readUnsignedByte(); - this.field357 = var1.readUnsignedShort(); - this.field350 = var1.readUnsignedByte(); - this.field353 = var1.readUnsignedShort(); - this.field359 = var1.readUnsignedByte(); - this.field354 = var1.readUnsignedShort(); - this.field352 = var1.readUnsignedByte(); - this.method852(); - } - - @ObfuscatedName("c") - @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "108" - ) - void method852() { - } - - @ObfuscatedName("i") - @ObfuscatedSignature( - signature = "(IIII)I", - garbageValue = "-1518213603" - ) - static final int method856(int var0, int var1, int var2) { - int var3 = var0 / var2; - int var4 = var0 & var2 - 1; - int var5 = var1 / var2; - int var6 = var1 & var2 - 1; - int var7 = RouteStrategy.method3736(var3, var5); - int var8 = RouteStrategy.method3736(var3 + 1, var5); - int var9 = RouteStrategy.method3736(var3, var5 + 1); - int var10 = RouteStrategy.method3736(var3 + 1, var5 + 1); - int var12 = 65536 - Rasterizer3D.Rasterizer3D_cosine[var4 * 1024 / var2] >> 1; - int var11 = ((65536 - var12) * var7 >> 16) + (var8 * var12 >> 16); - int var13 = GrandExchangeOfferAgeComparator.method195(var9, var10, var4, var2); - int var15 = 65536 - Rasterizer3D.Rasterizer3D_cosine[var6 * 1024 / var2] >> 1; - int var14 = ((65536 - var15) * var11 >> 16) + (var13 * var15 >> 16); - return var14; - } - @ObfuscatedName("p") @ObfuscatedSignature( - signature = "(ILcj;ZI)I", - garbageValue = "-1035175611" + signature = "(Lkg;I)V", + garbageValue = "-179898655" ) - static int method873(int var0, Script var1, boolean var2) { - Widget var3; - if (var0 >= 2000) { - var0 -= 1000; - var3 = PacketBufferNode.getWidget(Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]); - } else { - var3 = var2 ? class96.field1301 : ReflectionCheck.field1310; - } - - String var4 = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]; - int[] var5 = null; - if (var4.length() > 0 && var4.charAt(var4.length() - 1) == 'Y') { - int var6 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - if (var6 > 0) { - for (var5 = new int[var6]; var6-- > 0; var5[var6] = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]) { - } - } - - var4 = var4.substring(0, var4.length() - 1); - } - - Object[] var8 = new Object[var4.length() + 1]; - - int var7; - for (var7 = var8.length - 1; var7 >= 1; --var7) { - if (var4.charAt(var7 - 1) == 's') { - var8[var7] = Interpreter.Interpreter_stringStack[--WorldMapDecoration.Interpreter_stringStackSize]; - } else { - var8[var7] = new Integer(Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]); - } - } - - var7 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - if (var7 != -1) { - var8[0] = new Integer(var7); - } else { - var8 = null; - } - - if (var0 == ScriptOpcodes.CC_SETONCLICK) { - var3.onClick = var8; - } else if (var0 == ScriptOpcodes.CC_SETONHOLD) { - var3.onHold = var8; - } else if (var0 == ScriptOpcodes.CC_SETONRELEASE) { - var3.onRelease = var8; - } else if (var0 == ScriptOpcodes.CC_SETONMOUSEOVER) { - var3.onMouseOver = var8; - } else if (var0 == ScriptOpcodes.CC_SETONMOUSELEAVE) { - var3.onMouseLeave = var8; - } else if (var0 == ScriptOpcodes.CC_SETONDRAG) { - var3.onDrag = var8; - } else if (var0 == ScriptOpcodes.CC_SETONTARGETLEAVE) { - var3.onTargetLeave = var8; - } else if (var0 == ScriptOpcodes.CC_SETONVARTRANSMIT) { - var3.onVarTransmit = var8; - var3.varTransmitTriggers = var5; - } else if (var0 == ScriptOpcodes.CC_SETONTIMER) { - var3.onTimer = var8; - } else if (var0 == ScriptOpcodes.CC_SETONOP) { - var3.onOp = var8; - } else if (var0 == ScriptOpcodes.CC_SETONDRAGCOMPLETE) { - var3.onDragComplete = var8; - } else if (var0 == ScriptOpcodes.CC_SETONCLICKREPEAT) { - var3.onClickRepeat = var8; - } else if (var0 == ScriptOpcodes.CC_SETONMOUSEREPEAT) { - var3.onMouseRepeat = var8; - } else if (var0 == ScriptOpcodes.CC_SETONINVTRANSMIT) { - var3.onInvTransmit = var8; - var3.invTransmitTriggers = var5; - } else if (var0 == ScriptOpcodes.CC_SETONSTATTRANSMIT) { - var3.onStatTransmit = var8; - var3.statTransmitTriggers = var5; - } else if (var0 == ScriptOpcodes.CC_SETONTARGETENTER) { - var3.onTargetEnter = var8; - } else if (var0 == ScriptOpcodes.CC_SETONSCROLLWHEEL) { - var3.onScroll = var8; - } else if (var0 == ScriptOpcodes.CC_SETONCHATTRANSMIT) { - var3.onChatTransmit = var8; - } else if (var0 == ScriptOpcodes.CC_SETONKEY) { - var3.onKey = var8; - } else if (var0 == ScriptOpcodes.CC_SETONFRIENDTRANSMIT) { - var3.onFriendTransmit = var8; - } else if (var0 == ScriptOpcodes.CC_SETONCLANTRANSMIT) { - var3.onClanTransmit = var8; - } else if (var0 == ScriptOpcodes.CC_SETONMISCTRANSMIT) { - var3.onMiscTransmit = var8; - } else if (var0 == ScriptOpcodes.CC_SETONDIALOGABORT) { - var3.onDialogAbort = var8; - } else if (var0 == ScriptOpcodes.CC_SETONSUBCHANGE) { - var3.onSubChange = var8; - } else if (var0 == ScriptOpcodes.CC_SETONSTOCKTRANSMIT) { - var3.onStockTransmit = var8; - } else if (var0 == 1426) { - var3.field2665 = var8; - } else { - if (var0 != ScriptOpcodes.CC_SETONRESIZE) { - return 2; - } - - var3.onResize = var8; - } - - var3.hasListener = true; - return 1; + @Export("read") + public void read(Buffer var1) { + this.field370 = var1.readUnsignedByte(); + this.field361 = var1.readUnsignedByte(); + this.field371 = var1.readUnsignedShort(); + this.field366 = var1.readUnsignedByte(); + this.field363 = var1.readUnsignedShort(); + this.field367 = var1.readUnsignedByte(); + this.field362 = var1.readUnsignedShort(); + this.field368 = var1.readUnsignedByte(); + this.field365 = var1.readUnsignedShort(); + this.field369 = var1.readUnsignedByte(); + this.method795(); } - @ObfuscatedName("kl") + @ObfuscatedName("h") @ObfuscatedSignature( signature = "(I)V", - garbageValue = "1911467364" + garbageValue = "1221961977" ) - @Export("FriendSystem_invalidateIgnoreds") - static final void FriendSystem_invalidateIgnoreds() { - Iterator var0 = Messages.Messages_hashTable.iterator(); + void method795() { + } - while (var0.hasNext()) { - Message var1 = (Message)var0.next(); - var1.clearIsFromIgnored(); + @ObfuscatedName("u") + @ObfuscatedSignature( + signature = "(II)Lix;", + garbageValue = "-2061319703" + ) + public static HitSplatDefinition method811(int var0) { + HitSplatDefinition var1 = (HitSplatDefinition)HitSplatDefinition.HitSplatDefinition_cached.get((long)var0); + if (var1 != null) { + return var1; + } else { + byte[] var2 = HitSplatDefinition.HitSplatDefinition_archive.takeFile(32, var0); + var1 = new HitSplatDefinition(); + if (var2 != null) { + var1.decode(new Buffer(var2)); + } + + HitSplatDefinition.HitSplatDefinition_cached.put(var1, (long)var0); + return var1; + } + } + + @ObfuscatedName("f") + @ObfuscatedSignature( + signature = "(IB)Liz;", + garbageValue = "-13" + ) + public static HealthBarDefinition method810(int var0) { + HealthBarDefinition var1 = (HealthBarDefinition)HealthBarDefinition.HealthBarDefinition_cached.get((long)var0); + if (var1 != null) { + return var1; + } else { + byte[] var2 = HealthBarDefinition.HealthBarDefinition_archive.takeFile(33, var0); + var1 = new HealthBarDefinition(); + if (var2 != null) { + var1.decode(new Buffer(var2)); + } + + HealthBarDefinition.HealthBarDefinition_cached.put(var1, (long)var0); + return var1; + } + } + + @ObfuscatedName("g") + @ObfuscatedSignature( + signature = "(IZIZB)V", + garbageValue = "71" + ) + @Export("sortWorldList") + static void sortWorldList(int var0, boolean var1, int var2, boolean var3) { + if (Skills.World_worlds != null) { + WorldMapData_1.doWorldSorting(0, Skills.World_worlds.length - 1, var0, var1, var2, var3); } - if (class4.clanChat != null) { - class4.clanChat.invalidateIgnoreds(); + } + + @ObfuscatedName("h") + @ObfuscatedSignature( + signature = "(Ljava/lang/CharSequence;B)I", + garbageValue = "-5" + ) + @Export("hashString") + public static int hashString(CharSequence var0) { + int var1 = var0.length(); + int var2 = 0; + + for (int var3 = 0; var3 < var1; ++var3) { + var2 = (var2 << 5) - var2 + Skills.charToByteCp1252(var0.charAt(var3)); + } + + return var2; + } + + @ObfuscatedName("y") + @ObfuscatedSignature( + signature = "(I)V", + garbageValue = "2010130113" + ) + static void method809() { + Players.Players_count = 0; + + for (int var0 = 0; var0 < 2048; ++var0) { + Players.field1248[var0] = null; + Players.field1247[var0] = 1; } } diff --git a/runescape-client/src/main/java/class43.java b/runescape-client/src/main/java/class43.java index 1f412b9e33..20d3f69da2 100644 --- a/runescape-client/src/main/java/class43.java +++ b/runescape-client/src/main/java/class43.java @@ -1,469 +1,321 @@ -import java.net.URL; import net.runelite.mapping.Export; +import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -import net.runelite.rs.ScriptOpcodes; +import netscape.javascript.JSObject; -@ObfuscatedName("an") +@ObfuscatedName("aj") public final class class43 { - @ObfuscatedName("t") - @ObfuscatedSignature( - signature = "Lhq;" + @ObfuscatedName("i") + @ObfuscatedGetter( + intValue = 1757015417 ) - @Export("KitDefinition_modelsArchive") - public static AbstractArchive KitDefinition_modelsArchive; + @Export("Interpreter_stringStackSize") + static int Interpreter_stringStackSize; + @ObfuscatedName("ds") + @ObfuscatedSignature( + signature = "Lij;" + ) + @Export("archive1") + static Archive archive1; + @ObfuscatedName("la") + @ObfuscatedGetter( + intValue = 714486745 + ) + @Export("selectedItemSlot") + static int selectedItemSlot; + + @ObfuscatedName("u") + @ObfuscatedSignature( + signature = "(Lln;IIIB)V", + garbageValue = "86" + ) + static void method822(Sprite var0, int var1, int var2, int var3) { + DemotingHashTable var4 = WorldMapRegion.WorldMapRegion_cachedSprites; + long var6 = (long)(var3 << 16 | var1 << 8 | var2); + var4.put(var0, var6, var0.pixels.length * 4); + } + @ObfuscatedName("f") - static String field363; - @ObfuscatedName("fr") @ObfuscatedSignature( - signature = "Lks;" + signature = "(B)Z", + garbageValue = "96" ) - @Export("fontBold12") - static Font fontBold12; - - @ObfuscatedName("a") - @ObfuscatedSignature( - signature = "(I)Z", - garbageValue = "2037455287" - ) - @Export("loadWorlds") - static boolean loadWorlds() { - try { - if (class96.World_request == null) { - class96.World_request = Skills.urlRequester.request(new URL(class335.field4016)); - } else if (class96.World_request.isDone()) { - byte[] var0 = class96.World_request.getResponse(); - Buffer var1 = new Buffer(var0); - var1.readInt(); - World.World_count = var1.readUnsignedShort(); - Username.World_worlds = new World[World.World_count]; - - World var3; - for (int var2 = 0; var2 < World.World_count; var3.index = var2++) { - var3 = Username.World_worlds[var2] = new World(); - var3.id = var1.readUnsignedShort(); - var3.properties = var1.readInt(); - var3.host = var1.readStringCp1252NullTerminated(); - var3.activity = var1.readStringCp1252NullTerminated(); - var3.location = var1.readUnsignedByte(); - var3.population = var1.readShort(); - } - - class2.sortWorlds(Username.World_worlds, 0, Username.World_worlds.length - 1, World.World_sortOption1, World.World_sortOption2); - class96.World_request = null; - return true; - } - } catch (Exception var4) { - var4.printStackTrace(); - class96.World_request = null; - } - - return false; + public static boolean method820() { + ReflectionCheck var0 = (ReflectionCheck)class96.reflectionChecks.last(); + return var0 != null; } - @ObfuscatedName("t") - static final void method882(long var0) { - try { - Thread.sleep(var0); - } catch (InterruptedException var3) { - } - + @ObfuscatedName("gj") + @ObfuscatedSignature( + signature = "(B)I", + garbageValue = "-58" + ) + @Export("getWindowedMode") + static int getWindowedMode() { + return Client.isResizable ? 2 : 1; } - @ObfuscatedName("t") + @ObfuscatedName("gh") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "-2078513733" + signature = "(IIIII)V", + garbageValue = "-2123734164" ) - public static void method880() { - if (KeyHandler.KeyHandler_instance != null) { - synchronized(KeyHandler.KeyHandler_instance) { - KeyHandler.KeyHandler_instance = null; - } + @Export("drawEntities") + static final void drawEntities(int var0, int var1, int var2, int var3) { + ++Client.viewportDrawCount; + if (class215.localPlayer.x >> 7 == Client.destinationX && class215.localPlayer.y >> 7 == Client.destinationY) { + Client.destinationX = 0; } - } + Tiles.method1161(); + FontName.method5427(); + WorldMapData_0.addNpcsToScene(true); + Tiles.method1160(); + WorldMapData_0.addNpcsToScene(false); + WorldMapSection0.method251(); - @ObfuscatedName("az") - @ObfuscatedSignature( - signature = "(ILcj;ZI)I", - garbageValue = "-2029671704" - ) - static int method877(int var0, Script var1, boolean var2) { - int var3; - if (var0 == 6600) { - var3 = Player.Client_plane; - int var9 = UserComparator8.baseX * 64 + (class215.localPlayer.x >> 7); - int var5 = HealthBar.baseY * 64 + (class215.localPlayer.y >> 7); - UserComparator4.getWorldMap().method6437(var3, var9, var5, true); - return 1; - } else { - WorldMapArea var11; - if (var0 == ScriptOpcodes.WORLDMAP_GETMAPNAME) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - String var16 = ""; - var11 = UserComparator4.getWorldMap().getMapArea(var3); - if (var11 != null) { - var16 = var11.getExternalName(); - } - - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var16; - return 1; - } else if (var0 == ScriptOpcodes.WORLDMAP_SETMAP) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - UserComparator4.getWorldMap().setCurrentMapAreaId(var3); - return 1; - } else if (var0 == ScriptOpcodes.WORLDMAP_GETZOOM) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = UserComparator4.getWorldMap().getZoomLevel(); - return 1; - } else if (var0 == ScriptOpcodes.WORLDMAP_SETZOOM) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - UserComparator4.getWorldMap().setZoomPercentage(var3); - return 1; - } else if (var0 == ScriptOpcodes.WORLDMAP_ISLOADED) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = UserComparator4.getWorldMap().isCacheLoaded() ? 1 : 0; - return 1; - } else { - Coord var15; - if (var0 == ScriptOpcodes.WORLDMAP_JUMPTODISPLAYCOORD) { - var15 = new Coord(Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]); - UserComparator4.getWorldMap().setWorldMapPositionTarget(var15.x, var15.y); - return 1; - } else if (var0 == ScriptOpcodes.WORLDMAP_JUMPTODISPLAYCOORD_INSTANT) { - var15 = new Coord(Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]); - UserComparator4.getWorldMap().setWorldMapPositionTargetInstant(var15.x, var15.y); - return 1; - } else if (var0 == ScriptOpcodes.WORLDMAP_JUMPTOSOURCECOORD) { - var15 = new Coord(Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]); - UserComparator4.getWorldMap().jumpToSourceCoord(var15.plane, var15.x, var15.y); - return 1; - } else if (var0 == ScriptOpcodes.WORLDMAP_JUMPTOSOURCECOORD_INSTANT) { - var15 = new Coord(Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]); - UserComparator4.getWorldMap().jumpToSourceCoordInstant(var15.plane, var15.x, var15.y); - return 1; - } else if (var0 == ScriptOpcodes.WORLDMAP_GETDISPLAYPOSITION) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = UserComparator4.getWorldMap().getDisplayX(); - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = UserComparator4.getWorldMap().getDisplayY(); - return 1; - } else { - WorldMapArea var13; - if (var0 == ScriptOpcodes.WORLDMAP_GETCONFIGORIGIN) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - var13 = UserComparator4.getWorldMap().getMapArea(var3); - if (var13 == null) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var13.getOrigin().packed(); - } - - return 1; - } else if (var0 == ScriptOpcodes.WORLDMAP_GETCONFIGSIZE) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - var13 = UserComparator4.getWorldMap().getMapArea(var3); - if (var13 == null) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = (var13.getRegionHighX() - var13.getRegionLowX() + 1) * 64; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = (var13.getRegionHighY() - var13.getRegionLowY() + 1) * 64; - } - - return 1; - } else if (var0 == ScriptOpcodes.WORLDMAP_GETCONFIGBOUNDS) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - var13 = UserComparator4.getWorldMap().getMapArea(var3); - if (var13 == null) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var13.getRegionLowX() * 64; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var13.getRegionLowY() * 64; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var13.getRegionHighX() * 64 + 64 - 1; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var13.getRegionHighY() * 64 + 64 - 1; - } - - return 1; - } else if (var0 == ScriptOpcodes.WORLDMAP_GETCONFIGZOOM) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - var13 = UserComparator4.getWorldMap().getMapArea(var3); - if (var13 == null) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = -1; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var13.getZoom(); - } - - return 1; - } else if (var0 == 6615) { - var15 = UserComparator4.getWorldMap().getDisplayCoord(); - if (var15 == null) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = -1; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = -1; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var15.x; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var15.y; - } - - return 1; - } else if (var0 == ScriptOpcodes.WORLDMAP_GETCURRENTMAP) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = UserComparator4.getWorldMap().currentMapAreaId(); - return 1; - } else if (var0 == ScriptOpcodes.WORLDMAP_GETDISPLAYCOORD) { - var15 = new Coord(Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]); - var13 = UserComparator4.getWorldMap().getCurrentMapArea(); - if (var13 == null) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = -1; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = -1; - return 1; - } else { - int[] var14 = var13.position(var15.plane, var15.x, var15.y); - if (var14 == null) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = -1; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = -1; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var14[0]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var14[1]; - } - - return 1; - } + for (GraphicsObject var4 = (GraphicsObject)Client.graphicsObjects.last(); var4 != null; var4 = (GraphicsObject)Client.graphicsObjects.previous()) { + if (var4.plane == ClientPacket.Client_plane && !var4.isFinished) { + if (Client.cycle >= var4.cycleStart) { + var4.advance(Client.field704); + if (var4.isFinished) { + var4.remove(); } else { - Coord var7; - if (var0 == 6618) { - var15 = new Coord(Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]); - var13 = UserComparator4.getWorldMap().getCurrentMapArea(); - if (var13 == null) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = -1; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = -1; - return 1; - } else { - var7 = var13.coord(var15.x, var15.y); - if (var7 == null) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = -1; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var7.packed(); - } + class2.scene.drawEntity(var4.plane, var4.x, var4.y, var4.height, 60, var4, 0, -1L, false); + } + } + } else { + var4.remove(); + } + } - return 1; - } - } else { - Coord var12; - if (var0 == 6619) { - Interpreter.Interpreter_intStackSize -= 2; - var3 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var12 = new Coord(Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]); - Language.method3810(var3, var12, false); - return 1; - } else if (var0 == 6620) { - Interpreter.Interpreter_intStackSize -= 2; - var3 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var12 = new Coord(Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]); - Language.method3810(var3, var12, true); - return 1; - } else if (var0 == ScriptOpcodes.WORLDMAP_COORDINMAP) { - Interpreter.Interpreter_intStackSize -= 2; - var3 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var12 = new Coord(Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]); - var11 = UserComparator4.getWorldMap().getMapArea(var3); - if (var11 == null) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - return 1; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var11.containsCoord(var12.plane, var12.x, var12.y) ? 1 : 0; - return 1; - } - } else if (var0 == ScriptOpcodes.WORLDMAP_GETSIZE) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = UserComparator4.getWorldMap().getDisplayWith(); - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = UserComparator4.getWorldMap().getDisplayHeight(); - return 1; - } else if (var0 == 6623) { - var15 = new Coord(Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]); - var13 = UserComparator4.getWorldMap().mapAreaAtCoord(var15.plane, var15.x, var15.y); - if (var13 == null) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = -1; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var13.getId(); - } + FileSystem.setViewportShape(var0, var1, var2, var3, true); + var0 = Client.viewportOffsetX; + var1 = Client.viewportOffsetY; + var2 = Client.viewportWidth; + var3 = Client.viewportHeight; + Rasterizer2D.Rasterizer2D_setClip(var0, var1, var0 + var2, var3 + var1); + Rasterizer3D.Rasterizer3D_setClipFromRasterizer2D(); + int var5; + int var6; + int var7; + int var8; + int var9; + int var10; + int var11; + int var12; + int var18; + if (!Client.isCameraLocked) { + var18 = Client.camAngleX; + if (Client.field728 / 256 > var18) { + var18 = Client.field728 / 256; + } - return 1; - } else if (var0 == 6624) { - UserComparator4.getWorldMap().setMaxFlashCount(Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]); - return 1; - } else if (var0 == 6625) { - UserComparator4.getWorldMap().resetMaxFlashCount(); - return 1; - } else if (var0 == 6626) { - UserComparator4.getWorldMap().setCyclesPerFlash(Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]); - return 1; - } else if (var0 == 6627) { - UserComparator4.getWorldMap().resetCyclesPerFlash(); - return 1; - } else { - boolean var10; - if (var0 == ScriptOpcodes.WORLDMAP_PERPETUALFLASH) { - var10 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - UserComparator4.getWorldMap().setPerpetualFlash(var10); - return 1; - } else if (var0 == ScriptOpcodes.WORLDMAP_FLASHELEMENT) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - UserComparator4.getWorldMap().flashElement(var3); - return 1; - } else if (var0 == ScriptOpcodes.WORLDMAP_FLASHELEMENTCATEGORY) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - UserComparator4.getWorldMap().flashCategory(var3); - return 1; - } else if (var0 == ScriptOpcodes.WORLDMAP_STOPCURRENTFLASHES) { - UserComparator4.getWorldMap().stopCurrentFlashes(); - return 1; - } else if (var0 == ScriptOpcodes.WORLDMAP_DISABLEELEMENTS) { - var10 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize] == 1; - UserComparator4.getWorldMap().setElementsDisabled(var10); - return 1; - } else { - boolean var4; - if (var0 == ScriptOpcodes.WORLDMAP_DISABLEELEMENT) { - Interpreter.Interpreter_intStackSize -= 2; - var3 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var4 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1] == 1; - UserComparator4.getWorldMap().disableElement(var3, var4); - return 1; - } else if (var0 == ScriptOpcodes.WORLDMAP_DISABLEELEMENTCATEGORY) { - Interpreter.Interpreter_intStackSize -= 2; - var3 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var4 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1] == 1; - UserComparator4.getWorldMap().setCategoryDisabled(var3, var4); - return 1; - } else if (var0 == ScriptOpcodes.WORLDMAP_GETDISABLEELEMENTS) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = UserComparator4.getWorldMap().getElementsDisabled() ? 1 : 0; - return 1; - } else if (var0 == ScriptOpcodes.WORLDMAP_GETDISABLEELEMENT) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = UserComparator4.getWorldMap().isElementDisabled(var3) ? 1 : 0; - return 1; - } else if (var0 == ScriptOpcodes.WORLDMAP_GETDISABLEELEMENTCATEGORY) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = UserComparator4.getWorldMap().isCategoryDisabled(var3) ? 1 : 0; - return 1; - } else if (var0 == 6638) { - Interpreter.Interpreter_intStackSize -= 2; - var3 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var12 = new Coord(Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]); - var7 = UserComparator4.getWorldMap().method6481(var3, var12); - if (var7 == null) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = -1; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var7.packed(); - } + if (Client.field835[4] && Client.field901[4] + 128 > var18) { + var18 = Client.field901[4] + 128; + } - return 1; - } else { - AbstractWorldMapIcon var8; - if (var0 == ScriptOpcodes.WORLDMAP_LISTELEMENT_START) { - var8 = UserComparator4.getWorldMap().iconStart(); - if (var8 == null) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = -1; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = -1; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var8.getElement(); - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var8.coord2.packed(); - } + var5 = Client.camAngleY & 2047; + var6 = class80.oculusOrbFocalPointX; + var7 = GrandExchangeOfferAgeComparator.field78; + var8 = class81.oculusOrbFocalPointY; + var9 = FloorDecoration.method2888(var18); + var9 = class14.method176(var9, var3); + var10 = 2048 - var18 & 2047; + var11 = 2048 - var5 & 2047; + var12 = 0; + int var13 = 0; + int var14 = var9; + int var15; + int var16; + int var17; + if (var10 != 0) { + var15 = Rasterizer3D.Rasterizer3D_sine[var10]; + var16 = Rasterizer3D.Rasterizer3D_cosine[var10]; + var17 = var16 * var13 - var15 * var9 >> 16; + var14 = var15 * var13 + var16 * var9 >> 16; + var13 = var17; + } - return 1; - } else if (var0 == ScriptOpcodes.WORLDMAP_LISTELEMENT_NEXT) { - var8 = UserComparator4.getWorldMap().iconNext(); - if (var8 == null) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = -1; - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = -1; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var8.getElement(); - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var8.coord2.packed(); - } + if (var11 != 0) { + var15 = Rasterizer3D.Rasterizer3D_sine[var11]; + var16 = Rasterizer3D.Rasterizer3D_cosine[var11]; + var17 = var14 * var15 + var12 * var16 >> 16; + var14 = var16 * var14 - var15 * var12 >> 16; + var12 = var17; + } - return 1; - } else { - WorldMapElement var6; - if (var0 == ScriptOpcodes.MEC_TEXT) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - var6 = class65.WorldMapElement_get(var3); - if (var6.name == null) { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = ""; - } else { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var6.name; - } + class30.cameraX = var6 - var12; + GameObject.cameraY = var7 - var13; + FloorDecoration.cameraZ = var8 - var14; + ItemContainer.cameraPitch = var18; + Decimator.cameraYaw = var5; + if (Client.oculusOrbState == 1 && Client.staffModLevel >= 2 && Client.cycle % 50 == 0 && (class80.oculusOrbFocalPointX >> 7 != class215.localPlayer.x >> 7 || class81.oculusOrbFocalPointY >> 7 != class215.localPlayer.y >> 7)) { + var15 = class215.localPlayer.plane; + var16 = class51.baseX * 64 + (class80.oculusOrbFocalPointX >> 7); + var17 = VarcInt.baseY * 64 + (class81.oculusOrbFocalPointY >> 7); + Clock.method3555(var16, var17, var15, true); + } + } - return 1; - } else if (var0 == ScriptOpcodes.MEC_TEXTSIZE) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - var6 = class65.WorldMapElement_get(var3); - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var6.textSize; - return 1; - } else if (var0 == ScriptOpcodes.MEC_CATEGORY) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - var6 = class65.WorldMapElement_get(var3); - if (var6 == null) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = -1; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var6.category; - } + if (!Client.isCameraLocked) { + var18 = ClientPacket.method3660(); + } else { + if (UserComparator10.clientPreferences.roofsHidden) { + var5 = ClientPacket.Client_plane; + } else { + var6 = class195.getTileHeight(class30.cameraX, FloorDecoration.cameraZ, ClientPacket.Client_plane); + if (var6 - GameObject.cameraY < 800 && (Tiles.Tiles_renderFlags[ClientPacket.Client_plane][class30.cameraX >> 7][FloorDecoration.cameraZ >> 7] & 4) != 0) { + var5 = ClientPacket.Client_plane; + } else { + var5 = 3; + } + } - return 1; - } else if (var0 == ScriptOpcodes.MEC_SPRITE) { - var3 = Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]; - var6 = class65.WorldMapElement_get(var3); - if (var6 == null) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = -1; - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var6.sprite1; - } + var18 = var5; + } - return 1; - } else if (var0 == ScriptOpcodes.WORLDMAP_ELEMENT) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = WorldMapSprite.worldMapEvent.mapElement; - return 1; - } else if (var0 == 6698) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = WorldMapSprite.worldMapEvent.coord1.packed(); - return 1; - } else if (var0 == ScriptOpcodes.WORLDMAP_ELEMENTCOORD) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = WorldMapSprite.worldMapEvent.coord2.packed(); - return 1; - } else { - return 2; - } - } - } - } - } - } + var5 = class30.cameraX; + var6 = GameObject.cameraY; + var7 = FloorDecoration.cameraZ; + var8 = ItemContainer.cameraPitch; + var9 = Decimator.cameraYaw; + + for (var10 = 0; var10 < 5; ++var10) { + if (Client.field835[var10]) { + var11 = (int)(Math.random() * (double)(Client.field736[var10] * 2 + 1) - (double)Client.field736[var10] + Math.sin((double)Client.field890[var10] / 100.0D * (double)Client.field891[var10]) * (double)Client.field901[var10]); + if (var10 == 0) { + class30.cameraX += var11; + } + + if (var10 == 1) { + GameObject.cameraY += var11; + } + + if (var10 == 2) { + FloorDecoration.cameraZ += var11; + } + + if (var10 == 3) { + Decimator.cameraYaw = var11 + Decimator.cameraYaw & 2047; + } + + if (var10 == 4) { + ItemContainer.cameraPitch += var11; + if (ItemContainer.cameraPitch < 128) { + ItemContainer.cameraPitch = 128; + } + + if (ItemContainer.cameraPitch > 383) { + ItemContainer.cameraPitch = 383; } } } } - } - @ObfuscatedName("jo") - @ObfuscatedSignature( - signature = "([Lhi;Lhi;ZI)V", - garbageValue = "-1915700559" - ) - @Export("revalidateWidgetScroll") - static void revalidateWidgetScroll(Widget[] var0, Widget var1, boolean var2) { - int var3 = var1.scrollWidth != 0 ? var1.scrollWidth : var1.width; - int var4 = var1.scrollHeight != 0 ? var1.scrollHeight : var1.height; - Message.resizeInterface(var0, var1.id, var3, var4, var2); - if (var1.children != null) { - Message.resizeInterface(var1.children, var1.id, var3, var4, var2); + var10 = MouseHandler.MouseHandler_x; + var11 = MouseHandler.MouseHandler_y; + if (MouseHandler.MouseHandler_lastButton != 0) { + var10 = MouseHandler.MouseHandler_lastPressedX; + var11 = MouseHandler.MouseHandler_lastPressedY; } - InterfaceParent var5 = (InterfaceParent)Client.interfaceParents.get((long)var1.id); - if (var5 != null) { - int var6 = var5.group; - if (TextureProvider.loadInterface(var6)) { - Message.resizeInterface(Widget.Widget_interfaceComponents[var6], -1, var3, var4, var2); + if (var10 >= var0 && var10 < var0 + var2 && var11 >= var1 && var11 < var3 + var1) { + CollisionMap.method3628(var10 - var0, var11 - var1); + } else { + ParamDefinition.method4611(); + } + + Tiles.playPcmPlayers(); + Rasterizer2D.Rasterizer2D_fillRectangle(var0, var1, var2, var3, 0); + Tiles.playPcmPlayers(); + var12 = Rasterizer3D.Rasterizer3D_zoom; + Rasterizer3D.Rasterizer3D_zoom = Client.viewportZoom; + class2.scene.draw(class30.cameraX, GameObject.cameraY, FloorDecoration.cameraZ, ItemContainer.cameraPitch, Decimator.cameraYaw, var18); + Rasterizer3D.Rasterizer3D_zoom = var12; + Tiles.playPcmPlayers(); + class2.scene.clearTempGameObjects(); + FontName.method5426(var0, var1, var2, var3); + if (Client.hintArrowType == 2) { + TextureProvider.worldToScreen(Client.hintArrowSubX * 64 + (Client.hintArrowX - class51.baseX * 64 << 7), Client.hintArrowSubY * 64 + (Client.hintArrowY - VarcInt.baseY * 64 << 7), Client.hintArrowHeight * 2); + if (Client.viewportTempX > -1 && Client.cycle % 20 < 10) { + SequenceDefinition.headIconHintSprites[0].drawTransBgAt(var0 + Client.viewportTempX - 12, Client.viewportTempY + var1 - 28); } } - if (var1.contentType == 1337) { + ((TextureProvider)Rasterizer3D.Rasterizer3D_textureLoader).animate(Client.field704); + KeyHandler.method837(var0, var1, var2, var3); + class30.cameraX = var5; + GameObject.cameraY = var6; + FloorDecoration.cameraZ = var7; + ItemContainer.cameraPitch = var8; + Decimator.cameraYaw = var9; + if (Client.isLoading && ViewportMouse.method3015(true, false) == 0) { + Client.isLoading = false; + } + + if (Client.isLoading) { + Rasterizer2D.Rasterizer2D_fillRectangle(var0, var1, var2, var3, 0); + WorldMapIcon_1.drawLoadingMessage("Loading - please wait.", false); + } + + } + + @ObfuscatedName("kx") + @ObfuscatedSignature( + signature = "(Lbf;ZI)V", + garbageValue = "-854325632" + ) + @Export("closeInterface") + static final void closeInterface(InterfaceParent var0, boolean var1) { + int var2 = var0.group; + int var3 = (int)var0.key; + var0.remove(); + if (var1) { + DynamicObject.method2263(var2); + } + + for (IntegerNode var4 = (IntegerNode)Client.widgetClickMasks.first(); var4 != null; var4 = (IntegerNode)Client.widgetClickMasks.next()) { + if ((long)var2 == (var4.key >> 48 & 65535L)) { + var4.remove(); + } + } + + Widget var5 = Language.getWidget(var3); + if (var5 != null) { + ScriptEvent.invalidateWidget(var5); + } + + Varps.method4043(); + if (Client.rootInterface != -1) { + GrandExchangeEvents.runIntfCloseListeners(Client.rootInterface, 1); + } + + } + + @ObfuscatedName("kq") + @ObfuscatedSignature( + signature = "(Ljava/lang/String;B)V", + garbageValue = "1" + ) + static void method823(String var0) { + WorldMapManager.field327 = var0; + + try { + String var1 = AbstractWorldMapIcon.client.getParameter(Integer.toString(18)); + String var2 = AbstractWorldMapIcon.client.getParameter(Integer.toString(13)); + String var3 = var1 + "settings=" + var0 + "; version=1; path=/; domain=" + var2; + if (var0.length() == 0) { + var3 = var3 + "; Expires=Thu, 01-Jan-1970 00:00:00 GMT; Max-Age=0"; + } else { + var3 = var3 + "; Expires=" + class215.method4107(TaskHandler.currentTimeMillis() + 94608000000L) + "; Max-Age=" + 94608000L; + } + + Client var4 = AbstractWorldMapIcon.client; + String var5 = "document.cookie=\"" + var3 + "\""; + JSObject.getWindow(var4).eval(var5); + } catch (Throwable var6) { } } diff --git a/runescape-client/src/main/java/class47.java b/runescape-client/src/main/java/class47.java index 51ab725bbf..f23682cb5b 100644 --- a/runescape-client/src/main/java/class47.java +++ b/runescape-client/src/main/java/class47.java @@ -3,23 +3,23 @@ import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; import netscape.javascript.JSObject; -@ObfuscatedName("ao") +@ObfuscatedName("ay") public class class47 { - @ObfuscatedName("a") - @ObfuscatedSignature( - signature = "(Ljava/applet/Applet;Ljava/lang/String;I)V", - garbageValue = "2108629123" - ) - public static void method922(Applet var0, String var1) throws Throwable { - JSObject.getWindow(var0).eval(var1); - } - - @ObfuscatedName("t") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "(Ljava/applet/Applet;Ljava/lang/String;I)Ljava/lang/Object;", - garbageValue = "-2095941713" + garbageValue = "1388321520" ) - public static Object method923(Applet var0, String var1) throws Throwable { + public static Object method864(Applet var0, String var1) throws Throwable { return JSObject.getWindow(var0).call(var1, (Object[])null); } + + @ObfuscatedName("f") + @ObfuscatedSignature( + signature = "(Ljava/applet/Applet;Ljava/lang/String;[Ljava/lang/Object;I)Ljava/lang/Object;", + garbageValue = "1922524077" + ) + public static Object method865(Applet var0, String var1, Object[] var2) throws Throwable { + return JSObject.getWindow(var0).call(var1, var2); + } } diff --git a/runescape-client/src/main/java/class49.java b/runescape-client/src/main/java/class49.java index 88fedf446c..a1b7339a00 100644 --- a/runescape-client/src/main/java/class49.java +++ b/runescape-client/src/main/java/class49.java @@ -3,85 +3,60 @@ import net.runelite.mapping.Export; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("ac") +@ObfuscatedName("au") public class class49 { - @ObfuscatedName("rv") + @ObfuscatedName("rq") @ObfuscatedGetter( - intValue = 1570979840 + intValue = 1686126592 ) - static int field401; - @ObfuscatedName("r") + static int field417; + @ObfuscatedName("cn") @ObfuscatedGetter( - intValue = -331085425 + intValue = 1254436043 ) - @Export("clientTickTimeIdx") - static int clientTickTimeIdx; - @ObfuscatedName("ev") + public static int field418; + @ObfuscatedName("et") @ObfuscatedGetter( - intValue = -2015230611 + intValue = -311350761 ) - static int field399; + @Export("port2") + static int port2; static { ImageIO.setUseCache(false); } - @ObfuscatedName("s") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(ILcj;ZI)I", - garbageValue = "-17701588" + signature = "(IIB)Lci;", + garbageValue = "-31" ) - static int method938(int var0, Script var1, boolean var2) { - Widget var3 = PacketBufferNode.getWidget(Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]); - if (var0 == ScriptOpcodes.IF_GETSCROLLX) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.scrollX; - return 1; - } else if (var0 == ScriptOpcodes.IF_GETSCROLLY) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.scrollY; - return 1; - } else if (var0 == ScriptOpcodes.IF_GETTEXT) { - Interpreter.Interpreter_stringStack[++WorldMapDecoration.Interpreter_stringStackSize - 1] = var3.text; - return 1; - } else if (var0 == ScriptOpcodes.IF_GETSCROLLWIDTH) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.scrollWidth; - return 1; - } else if (var0 == ScriptOpcodes.IF_GETSCROLLHEIGHT) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.scrollHeight; - return 1; - } else if (var0 == ScriptOpcodes.IF_GETMODELZOOM) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.modelZoom; - return 1; - } else if (var0 == ScriptOpcodes.IF_GETMODELANGLE_X) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.modelAngleX; - return 1; - } else if (var0 == ScriptOpcodes.IF_GETMODELANGLE_Z) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.modelAngleZ; - return 1; - } else if (var0 == ScriptOpcodes.IF_GETMODELANGLE_Y) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.modelAngleY; - return 1; - } else if (var0 == ScriptOpcodes.IF_GETTRANSTOP) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.transparencyTop; - return 1; - } else if (var0 == ScriptOpcodes.IF_GETTRANSBOT) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.transparencyBot; - return 1; - } else if (var0 == ScriptOpcodes.IF_GETCOLOUR) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.color; - return 1; - } else if (var0 == ScriptOpcodes.IF_GETFILLCOLOUR) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.color2; - return 1; - } else if (var0 == ScriptOpcodes.IF_GETFILLMODE) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.fillMode.rsOrdinal(); - return 1; - } else if (var0 == ScriptOpcodes.IF_GETMODELTRANSPARENT) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.modelTransparency ? 1 : 0; - return 1; + static Script method880(int var0, int var1) { + Script var2 = (Script)Script.Script_cached.get((long)(var0 << 16)); + if (var2 != null) { + return var2; } else { - return 2; + String var3 = String.valueOf(var0); + int var4 = class267.archive12.getGroupId(var3); + if (var4 == -1) { + return null; + } else { + byte[] var5 = class267.archive12.takeFileFlat(var4); + if (var5 != null) { + if (var5.length <= 1) { + return null; + } + + var2 = WorldMapArea.newScript(var5); + if (var2 != null) { + Script.Script_cached.put(var2, (long)(var0 << 16)); + return var2; + } + } + + return null; + } } } } diff --git a/runescape-client/src/main/java/class51.java b/runescape-client/src/main/java/class51.java index 02dc6328b4..a4829d01f5 100644 --- a/runescape-client/src/main/java/class51.java +++ b/runescape-client/src/main/java/class51.java @@ -1,81 +1,40 @@ import java.applet.Applet; +import java.awt.FontMetrics; +import java.security.SecureRandom; import net.runelite.mapping.Export; +import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("as") +@ObfuscatedName("ah") public class class51 { - @ObfuscatedName("a") + @ObfuscatedName("u") @Export("applet") - static Applet applet; - @ObfuscatedName("t") - static String field416; - @ObfuscatedName("p") - @ObfuscatedSignature( - signature = "Llw;" + public static Applet applet; + @ObfuscatedName("f") + public static String field424; + @ObfuscatedName("y") + static byte[][][] field423; + @ObfuscatedName("ag") + @Export("loginScreenFontMetrics") + static FontMetrics loginScreenFontMetrics; + @ObfuscatedName("ev") + @Export("secureRandom") + static SecureRandom secureRandom; + @ObfuscatedName("fn") + @ObfuscatedGetter( + intValue = -838256623 ) - static IndexedSprite field412; - @ObfuscatedName("fv") + @Export("baseX") + static int baseX; + @ObfuscatedName("jz") @ObfuscatedSignature( - signature = "Lks;" + signature = "Lhl;" ) - @Export("fontPlain11") - static Font fontPlain11; + static Widget field432; static { applet = null; - field416 = ""; - } - - @ObfuscatedName("a") - @ObfuscatedSignature( - signature = "(I)[Lhy;", - garbageValue = "1830105975" - ) - @Export("PlayerType_values") - public static PlayerType[] PlayerType_values() { - return new PlayerType[]{PlayerType.PlayerType_hardcoreIronman, PlayerType.PlayerType_ultimateIronman, PlayerType.PlayerType_jagexModerator, PlayerType.PlayerType_playerModerator, PlayerType.PlayerType_ironman, PlayerType.PlayerType_normal}; - } - - @ObfuscatedName("o") - @ObfuscatedSignature( - signature = "(I)Llw;", - garbageValue = "2066459689" - ) - static IndexedSprite method975() { - IndexedSprite var0 = new IndexedSprite(); - var0.width = class325.SpriteBuffer_spriteWidth; - var0.height = class325.SpriteBuffer_spriteHeight; - var0.xOffset = SecureRandomFuture.SpriteBuffer_xOffsets[0]; - var0.yOffset = HealthBar.SpriteBuffer_yOffsets[0]; - var0.subWidth = SecureRandomCallable.SpriteBuffer_spriteWidths[0]; - var0.subHeight = AttackOption.SpriteBuffer_spriteHeights[0]; - var0.palette = class325.SpriteBuffer_spritePalette; - var0.pixels = class325.SpriteBuffer_pixels[0]; - WorldMapData_1.method787(); - return var0; - } - - @ObfuscatedName("ic") - @ObfuscatedSignature( - signature = "(IIIII)V", - garbageValue = "1215512172" - ) - @Export("selectSpell") - static void selectSpell(int var0, int var1, int var2, int var3) { - Widget var4 = ArchiveLoader.getWidgetChild(var0, var1); - if (var4 != null && var4.onTargetEnter != null) { - ScriptEvent var5 = new ScriptEvent(); - var5.widget = var4; - var5.args = var4.onTargetEnter; - GrandExchangeOfferAgeComparator.runScriptEvent(var5); - } - - Client.field788 = var3; - Client.isSpellSelected = true; - Clock.selectedSpellWidget = var0; - Client.selectedSpellChildIndex = var1; - class81.selectedSpellFlags = var2; - GrandExchangeOfferAgeComparator.invalidateWidget(var4); + field424 = ""; } } diff --git a/runescape-client/src/main/java/class60.java b/runescape-client/src/main/java/class60.java index 22c197467b..0522c4ebe0 100644 --- a/runescape-client/src/main/java/class60.java +++ b/runescape-client/src/main/java/class60.java @@ -2,21 +2,53 @@ import net.runelite.mapping.Export; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("br") +@ObfuscatedName("bq") public class class60 { - @ObfuscatedName("bl") + @ObfuscatedName("qc") @ObfuscatedSignature( - signature = "Lln;" + signature = "Lde;" ) - @Export("loginType") - static LoginType loginType; + @Export("pcmPlayer1") + static PcmPlayer pcmPlayer1; + @ObfuscatedName("eg") + @ObfuscatedSignature( + signature = "Lij;" + ) + @Export("archive20") + static Archive archive20; - @ObfuscatedName("a") + @ObfuscatedName("g") @ObfuscatedSignature( - signature = "(B)[Lhp;", - garbageValue = "66" + signature = "(Lhf;Lhf;III)Lky;", + garbageValue = "-2011149056" ) - public static StudioGame[] method1260() { - return new StudioGame[]{StudioGame.game5, StudioGame.runescape, StudioGame.game3, StudioGame.game4, StudioGame.oldscape, StudioGame.stellardawn}; + public static Font method1195(AbstractArchive var0, AbstractArchive var1, int var2, int var3) { + return !GraphicsObject.method2030(var0, var2, var3) ? null : FloorOverlayDefinition.method4853(var1.takeFile(var2, var3)); + } + + @ObfuscatedName("l") + @ObfuscatedSignature( + signature = "(B)V", + garbageValue = "-30" + ) + public static void method1194() { + ItemDefinition.ItemDefinition_cachedSprites.clear(); + } + + @ObfuscatedName("ho") + @ObfuscatedSignature( + signature = "(II)V", + garbageValue = "-1426936698" + ) + static final void method1193(int var0) { + if (var0 >= 0) { + int var1 = Client.menuArguments1[var0]; + int var2 = Client.menuArguments2[var0]; + int var3 = Client.menuOpcodes[var0]; + int var4 = Client.menuIdentifiers[var0]; + String var5 = Client.menuActions[var0]; + String var6 = Client.menuTargets[var0]; + class32.menuAction(var1, var2, var3, var4, var5, var6, MouseHandler.MouseHandler_lastPressedX, MouseHandler.MouseHandler_lastPressedY); + } } } diff --git a/runescape-client/src/main/java/class65.java b/runescape-client/src/main/java/class65.java index bc46fae55f..8a48154022 100644 --- a/runescape-client/src/main/java/class65.java +++ b/runescape-client/src/main/java/class65.java @@ -1,160 +1,83 @@ import net.runelite.mapping.Export; +import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("bs") +@ObfuscatedName("bb") public class class65 extends RouteStrategy { + @ObfuscatedName("sp") + @ObfuscatedGetter( + longValue = -1800768745141065643L + ) + static long field604; + @ObfuscatedName("o") + @ObfuscatedGetter( + intValue = 44255735 + ) + static int field603; + class65() { } - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(IIILfm;B)Z", - garbageValue = "16" + signature = "(IIILfh;B)Z", + garbageValue = "-103" ) @Export("hasArrived") protected boolean hasArrived(int var1, int var2, int var3, CollisionMap var4) { return var2 == super.approxDestinationX && var3 == super.approxDestinationY; } - @ObfuscatedName("a") + @ObfuscatedName("b") @ObfuscatedSignature( - signature = "(II)Lie;", - garbageValue = "-921951444" + signature = "(Lhf;IIIZI)V", + garbageValue = "-1389497499" ) - @Export("WorldMapElement_get") - public static WorldMapElement WorldMapElement_get(int var0) { - return var0 >= 0 && var0 < GrandExchangeOfferTotalQuantityComparator.WorldMapElement_cached.length && GrandExchangeOfferTotalQuantityComparator.WorldMapElement_cached[var0] != null ? GrandExchangeOfferTotalQuantityComparator.WorldMapElement_cached[var0] : new WorldMapElement(var0); + @Export("playMusicTrack") + public static void playMusicTrack(AbstractArchive var0, int var1, int var2, int var3, boolean var4) { + class197.field2411 = 1; + class197.musicTrackArchive = var0; + UrlRequester.musicTrackGroupId = var1; + UserComparator7.musicTrackFileId = var2; + class197.musicTrackVolume = var3; + ArchiveLoader.musicTrackBoolean = var4; + class335.field4014 = 10000; } - @ObfuscatedName("q") + @ObfuscatedName("k") @ObfuscatedSignature( - signature = "(ILcj;ZB)I", - garbageValue = "0" + signature = "(Ljava/lang/String;I)V", + garbageValue = "1885600103" ) - static int method1321(int var0, Script var1, boolean var2) { - int var3; - int var4; - if (var0 == ScriptOpcodes.CC_CREATE) { - Interpreter.Interpreter_intStackSize -= 3; - var3 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var4 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - int var5 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 2]; - if (var4 == 0) { - throw new RuntimeException(); + static final void method1244(String var0) { + WorldMapSection2.method347(var0 + " is already on your friend list"); + } + + @ObfuscatedName("iq") + @ObfuscatedSignature( + signature = "(IIIIIIIII)V", + garbageValue = "-1636724870" + ) + @Export("drawWidgets") + static final void drawWidgets(int var0, int var1, int var2, int var3, int var4, int var5, int var6, int var7) { + if (UserComparator3.loadInterface(var0)) { + class4.field22 = null; + class40.drawInterface(FloorDecoration.Widget_interfaceComponents[var0], -1, var1, var2, var3, var4, var5, var6, var7); + if (class4.field22 != null) { + class40.drawInterface(class4.field22, -1412584499, var1, var2, var3, var4, WorldMapSection2.field200, TilePaint.field1782, var7); + class4.field22 = null; + } + + } else { + if (var7 != -1) { + Client.field847[var7] = true; } else { - Widget var6 = PacketBufferNode.getWidget(var3); - if (var6.children == null) { - var6.children = new Widget[var5 + 1]; - } - - if (var6.children.length <= var5) { - Widget[] var7 = new Widget[var5 + 1]; - - for (int var8 = 0; var8 < var6.children.length; ++var8) { - var7[var8] = var6.children[var8]; - } - - var6.children = var7; - } - - if (var5 > 0 && var6.children[var5 - 1] == null) { - throw new RuntimeException("" + (var5 - 1)); - } else { - Widget var12 = new Widget(); - var12.type = var4; - var12.parentId = var12.id = var6.id; - var12.childIndex = var5; - var12.isIf3 = true; - var6.children[var5] = var12; - if (var2) { - class96.field1301 = var12; - } else { - ReflectionCheck.field1310 = var12; - } - - GrandExchangeOfferAgeComparator.invalidateWidget(var6); - return 1; + for (int var8 = 0; var8 < 100; ++var8) { + Client.field847[var8] = true; } } - } else { - Widget var9; - if (var0 == ScriptOpcodes.CC_DELETE) { - var9 = var2 ? class96.field1301 : ReflectionCheck.field1310; - Widget var10 = PacketBufferNode.getWidget(var9.id); - var10.children[var9.childIndex] = null; - GrandExchangeOfferAgeComparator.invalidateWidget(var10); - return 1; - } else if (var0 == ScriptOpcodes.CC_DELETEALL) { - var9 = PacketBufferNode.getWidget(Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]); - var9.children = null; - GrandExchangeOfferAgeComparator.invalidateWidget(var9); - return 1; - } else if (var0 != ScriptOpcodes.CC_FIND) { - if (var0 == ScriptOpcodes.IF_FIND) { - var9 = PacketBufferNode.getWidget(Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]); - if (var9 != null) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 1; - if (var2) { - class96.field1301 = var9; - } else { - ReflectionCheck.field1310 = var9; - } - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - } - return 1; - } else { - return 2; - } - } else { - Interpreter.Interpreter_intStackSize -= 2; - var3 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize]; - var4 = Interpreter.Interpreter_intStack[Interpreter.Interpreter_intStackSize + 1]; - Widget var11 = ArchiveLoader.getWidgetChild(var3, var4); - if (var11 != null && var4 != -1) { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 1; - if (var2) { - class96.field1301 = var11; - } else { - ReflectionCheck.field1310 = var11; - } - } else { - Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = 0; - } - - return 1; - } - } - } - - @ObfuscatedName("l") - @ObfuscatedSignature( - signature = "(II)I", - garbageValue = "732649186" - ) - @Export("Messages_getLastChatID") - static int Messages_getLastChatID(int var0) { - Message var1 = (Message)Messages.Messages_hashTable.get((long)var0); - if (var1 == null) { - return -1; - } else { - return var1.nextDual == Messages.Messages_queue.sentinel ? -1 : ((Message)var1.nextDual).count; - } - } - - @ObfuscatedName("it") - @ObfuscatedSignature( - signature = "(II)Ljava/lang/String;", - garbageValue = "1231454629" - ) - static String method1316(int var0) { - if (var0 < 0) { - return ""; - } else { - return Client.menuTargets[var0].length() > 0 ? Client.menuActions[var0] + " " + Client.menuTargets[var0] : Client.menuActions[var0]; } } } diff --git a/runescape-client/src/main/java/class80.java b/runescape-client/src/main/java/class80.java index 3553aa21e1..d1b518699a 100644 --- a/runescape-client/src/main/java/class80.java +++ b/runescape-client/src/main/java/class80.java @@ -1,324 +1,657 @@ import java.math.BigInteger; import net.runelite.mapping.Export; +import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("ce") +@ObfuscatedName("cv") public class class80 { - @ObfuscatedName("qh") - @ObfuscatedSignature( - signature = "Ldq;" + @ObfuscatedName("z") + static final BigInteger field1129; + @ObfuscatedName("p") + static final BigInteger field1130; + @ObfuscatedName("hz") + @ObfuscatedGetter( + intValue = -1429349443 ) - @Export("pcmPlayer0") - static PcmPlayer pcmPlayer0; - @ObfuscatedName("v") - static final BigInteger field1119; - @ObfuscatedName("l") - static final BigInteger field1120; + @Export("oculusOrbFocalPointX") + static int oculusOrbFocalPointX; static { - field1119 = new BigInteger("80782894952180643741752986186714059433953886149239752893425047584684715842049"); - field1120 = new BigInteger("7237300117305667488707183861728052766358166655052137727439795191253340127955075499635575104901523446809299097934591732635674173519120047404024393881551683"); + field1129 = new BigInteger("80782894952180643741752986186714059433953886149239752893425047584684715842049"); + field1130 = new BigInteger("7237300117305667488707183861728052766358166655052137727439795191253340127955075499635575104901523446809299097934591732635674173519120047404024393881551683"); } - @ObfuscatedName("a") + @ObfuscatedName("gv") @ObfuscatedSignature( - signature = "(I)V", - garbageValue = "-1194202893" + signature = "(Lbt;IIIIII)V", + garbageValue = "-309785570" ) - public static void method2198() { - class96.reflectionChecks = new IterableNodeDeque(); - } + @Export("drawActor2d") + static final void drawActor2d(Actor var0, int var1, int var2, int var3, int var4, int var5) { + if (var0 != null && var0.isVisible()) { + if (var0 instanceof NPC) { + NPCDefinition var6 = ((NPC)var0).definition; + if (var6.transforms != null) { + var6 = var6.transform(); + } - @ObfuscatedName("t") - @ObfuscatedSignature( - signature = "(CLgw;I)C", - garbageValue = "307690319" - ) - @Export("standardizeChar") - static char standardizeChar(char var0, Language var1) { - if (var0 >= 192 && var0 <= 255) { - if (var0 >= 192 && var0 <= 198) { - return 'A'; + if (var6 == null) { + return; + } } - if (var0 == 199) { - return 'C'; + int var75 = Players.Players_count; + int[] var7 = Players.Players_indices; + byte var8 = 0; + int var10; + if (var1 < var75 && var0.playerCycle == Client.cycle && class30.method563((Player)var0)) { + Player var9 = (Player)var0; + if (var1 < var75) { + var10 = var0.defaultHeight + 15; + TextureProvider.worldToScreen(var0.x, var0.y, var10); + AbstractFont var11 = (AbstractFont)Client.fontsMap.get(FontName.FontName_plain12); + byte var12 = 9; + var11.drawCentered(var9.username.getName(), var2 + Client.viewportTempX, var3 + Client.viewportTempY - var12, 16777215, 0); + var8 = 18; + } } - if (var0 >= 200 && var0 <= 203) { - return 'E'; + int var76 = -2; + int var15; + int var16; + int var22; + int var23; + if (!var0.healthBars.method4911()) { + ItemContainer.getActorScreenLocation(var0, var0.defaultHeight + 15); + + for (HealthBar var77 = (HealthBar)var0.healthBars.last(); var77 != null; var77 = (HealthBar)var0.healthBars.previous()) { + HealthBarUpdate var89 = var77.get(Client.cycle); + if (var89 == null) { + if (var77.isEmpty()) { + var77.remove(); + } + } else { + HealthBarDefinition var78 = var77.definition; + Sprite var13 = var78.getBackSprite(); + Sprite var14 = var78.getFrontSprite(); + var16 = 0; + if (var13 != null && var14 != null) { + if (var78.widthPadding * 2 < var14.subWidth) { + var16 = var78.widthPadding; + } + + var15 = var14.subWidth - var16 * 2; + } else { + var15 = var78.width; + } + + int var17 = 255; + boolean var18 = true; + int var19 = Client.cycle - var89.cycle; + int var20 = var15 * var89.health2 / var78.width; + int var21; + int var92; + if (var89.cycleOffset > var19) { + var21 = var78.int4 == 0 ? 0 : var78.int4 * (var19 / var78.int4); + var22 = var15 * var89.health / var78.width; + var92 = var21 * (var20 - var22) / var89.cycleOffset + var22; + } else { + var92 = var20; + var21 = var89.cycleOffset + var78.int5 - var19; + if (var78.int3 >= 0) { + var17 = (var21 << 8) / (var78.int5 - var78.int3); + } + } + + if (var89.health2 > 0 && var92 < 1) { + var92 = 1; + } + + if (var13 != null && var14 != null) { + if (var15 == var92) { + var92 += var16 * 2; + } else { + var92 += var16; + } + + var21 = var13.subHeight; + var76 += var21; + var22 = var2 + Client.viewportTempX - (var15 >> 1); + var23 = var3 + Client.viewportTempY - var76; + var22 -= var16; + if (var17 >= 0 && var17 < 255) { + var13.drawTransAt(var22, var23, var17); + Rasterizer2D.Rasterizer2D_expandClip(var22, var23, var22 + var92, var23 + var21); + var14.drawTransAt(var22, var23, var17); + } else { + var13.drawTransBgAt(var22, var23); + Rasterizer2D.Rasterizer2D_expandClip(var22, var23, var22 + var92, var23 + var21); + var14.drawTransBgAt(var22, var23); + } + + Rasterizer2D.Rasterizer2D_setClip(var2, var3, var2 + var4, var3 + var5); + var76 += 2; + } else { + var76 += 5; + if (Client.viewportTempX > -1) { + var21 = var2 + Client.viewportTempX - (var15 >> 1); + var22 = var3 + Client.viewportTempY - var76; + Rasterizer2D.Rasterizer2D_fillRectangle(var21, var22, var92, 5, 65280); + Rasterizer2D.Rasterizer2D_fillRectangle(var21 + var92, var22, var15 - var92, 5, 16711680); + } + + var76 += 2; + } + } + } } - if (var0 >= 204 && var0 <= 207) { - return 'I'; + if (var76 == -2) { + var76 += 7; } - if (var0 == 209 && var1 != Language.Language_ES) { - return 'N'; + var76 += var8; + int var79; + if (var1 < var75) { + Player var94 = (Player)var0; + if (var94.isHidden) { + return; + } + + if (var94.headIconPk != -1 || var94.headIconPrayer != -1) { + ItemContainer.getActorScreenLocation(var0, var0.defaultHeight + 15); + if (Client.viewportTempX > -1) { + if (var94.headIconPk != -1) { + var76 += 25; + FontName.headIconPkSprites[var94.headIconPk].drawTransBgAt(var2 + Client.viewportTempX - 12, var3 + Client.viewportTempY - var76); + } + + if (var94.headIconPrayer != -1) { + var76 += 25; + UrlRequest.headIconPrayerSprites[var94.headIconPrayer].drawTransBgAt(var2 + Client.viewportTempX - 12, var3 + Client.viewportTempY - var76); + } + } + } + + if (var1 >= 0 && Client.hintArrowType == 10 && var7[var1] == Client.hintArrowPlayerIndex) { + var79 = var0.defaultHeight + 15; + TextureProvider.worldToScreen(var0.x, var0.y, var79); + if (Client.viewportTempX > -1) { + var76 += SequenceDefinition.headIconHintSprites[1].subHeight; + SequenceDefinition.headIconHintSprites[1].drawTransBgAt(var2 + Client.viewportTempX - 12, var3 + Client.viewportTempY - var76); + } + } + } else { + NPCDefinition var95 = ((NPC)var0).definition; + if (var95.transforms != null) { + var95 = var95.transform(); + } + + if (var95.headIconPrayer >= 0 && var95.headIconPrayer < UrlRequest.headIconPrayerSprites.length) { + ItemContainer.getActorScreenLocation(var0, var0.defaultHeight + 15); + if (Client.viewportTempX > -1) { + UrlRequest.headIconPrayerSprites[var95.headIconPrayer].drawTransBgAt(var2 + Client.viewportTempX - 12, var3 + Client.viewportTempY - 30); + } + } + + if (Client.hintArrowType == 1 && Client.npcIndices[var1 - var75] == Client.hintArrowNpcIndex && Client.cycle % 20 < 10) { + ItemContainer.getActorScreenLocation(var0, var0.defaultHeight + 15); + if (Client.viewportTempX > -1) { + SequenceDefinition.headIconHintSprites[0].drawTransBgAt(var2 + Client.viewportTempX - 12, var3 + Client.viewportTempY - 28); + } + } } - if (var0 >= 210 && var0 <= 214) { - return 'O'; + if (var0.overheadText != null && (var1 >= var75 || !var0.field950 && (Client.publicChatMode == 4 || !var0.isAutoChatting && (Client.publicChatMode == 0 || Client.publicChatMode == 3 || Client.publicChatMode == 1 && ((Player)var0).isFriend())))) { + ItemContainer.getActorScreenLocation(var0, var0.defaultHeight); + if (Client.viewportTempX > -1 && Client.overheadTextCount < Client.overheadTextLimit) { + Client.overheadTextXOffsets[Client.overheadTextCount] = JagexCache.fontBold12.stringWidth(var0.overheadText) / 2; + Client.overheadTextAscents[Client.overheadTextCount] = JagexCache.fontBold12.ascent; + Client.overheadTextXs[Client.overheadTextCount] = Client.viewportTempX; + Client.overheadTextYs[Client.overheadTextCount] = Client.viewportTempY; + Client.overheadTextColors[Client.overheadTextCount] = var0.overheadTextColor; + Client.overheadTextEffects[Client.overheadTextCount] = var0.overheadTextEffect; + Client.overheadTextCyclesRemaining[Client.overheadTextCount] = var0.overheadTextCyclesRemaining; + Client.overheadText[Client.overheadTextCount] = var0.overheadText; + ++Client.overheadTextCount; + } } - if (var0 >= 217 && var0 <= 220) { - return 'U'; - } - - if (var0 == 221) { - return 'Y'; - } - - if (var0 == 223) { - return 's'; - } - - if (var0 >= 224 && var0 <= 230) { - return 'a'; - } - - if (var0 == 231) { - return 'c'; - } - - if (var0 >= 232 && var0 <= 235) { - return 'e'; - } - - if (var0 >= 236 && var0 <= 239) { - return 'i'; - } - - if (var0 == 241 && var1 != Language.Language_ES) { - return 'n'; - } - - if (var0 >= 242 && var0 <= 246) { - return 'o'; - } - - if (var0 >= 249 && var0 <= 252) { - return 'u'; - } - - if (var0 == 253 || var0 == 255) { - return 'y'; - } - } - - if (var0 == 338) { - return 'O'; - } else if (var0 == 339) { - return 'o'; - } else { - return var0 == 376 ? 'Y' : var0; - } - } - - @ObfuscatedName("l") - @ObfuscatedSignature( - signature = "(II)V", - garbageValue = "571659543" - ) - public static void method2194(int var0) { - class197.field2377 = 1; - class247.musicTrackArchive = null; - class189.musicTrackGroupId = -1; - class197.musicTrackFileId = -1; - class197.musicTrackVolume = 0; - ScriptFrame.musicTrackBoolean = false; - class197.field2384 = var0; - } - - @ObfuscatedName("jx") - @ObfuscatedSignature( - signature = "(Lhi;IIB)V", - garbageValue = "-53" - ) - static final void method2197(Widget var0, int var1, int var2) { - if (var0.buttonType == 1) { - GameObject.insertMenuItemNoShift(var0.buttonText, "", 24, 0, 0, var0.id); - } - - String var3; - if (var0.buttonType == 2 && !Client.isSpellSelected) { - var3 = SoundCache.method2666(var0); - if (var3 != null) { - GameObject.insertMenuItemNoShift(var3, AbstractArchive.colorStartTag(65280) + var0.spellName, 25, 0, -1, var0.id); - } - } - - if (var0.buttonType == 3) { - GameObject.insertMenuItemNoShift("Close", "", 26, 0, 0, var0.id); - } - - if (var0.buttonType == 4) { - GameObject.insertMenuItemNoShift(var0.buttonText, "", 28, 0, 0, var0.id); - } - - if (var0.buttonType == 5) { - GameObject.insertMenuItemNoShift(var0.buttonText, "", 29, 0, 0, var0.id); - } - - if (var0.buttonType == 6 && Client.meslayerContinueWidget == null) { - GameObject.insertMenuItemNoShift(var0.buttonText, "", 30, 0, -1, var0.id); - } - - int var4; - int var5; - int var19; - if (var0.type == 2) { - var19 = 0; - - for (var4 = 0; var4 < var0.height; ++var4) { - for (var5 = 0; var5 < var0.width; ++var5) { - int var6 = (var0.paddingX + 32) * var5; - int var7 = (var0.paddingY + 32) * var4; - if (var19 < 20) { - var6 += var0.inventoryXOffsets[var19]; - var7 += var0.inventoryYOffsets[var19]; + for (var10 = 0; var10 < 4; ++var10) { + var79 = var0.hitSplatCycles[var10]; + int var90 = var0.hitSplatTypes[var10]; + HitSplatDefinition var91 = null; + int var80 = 0; + HitSplatDefinition var81; + if (var90 >= 0) { + if (var79 <= Client.cycle) { + continue; } - if (var1 >= var6 && var2 >= var7 && var1 < var6 + 32 && var2 < var7 + 32) { - Client.dragItemSlotDestination = var19; - DirectByteArrayCopier.field2476 = var0; - if (var0.itemIds[var19] > 0) { - label325: { - ItemDefinition var8 = class222.ItemDefinition_get(var0.itemIds[var19] - 1); - boolean var9; - int var10; - if (Client.isItemSelected == 1) { - var10 = class195.getWidgetClickMask(var0); - var9 = (var10 >> 30 & 1) != 0; - if (var9) { - if (var0.id != MidiPcmStream.selectedItemWidget || var19 != MouseRecorder.selectedItemSlot) { - GameObject.insertMenuItemNoShift("Use", Client.selectedItemName + " " + "->" + " " + AbstractArchive.colorStartTag(16748608) + var8.name, 31, var8.id, var19, var0.id); - } - break label325; + var16 = var0.hitSplatTypes[var10]; + var81 = (HitSplatDefinition)HitSplatDefinition.HitSplatDefinition_cached.get((long)var16); + HitSplatDefinition var82; + if (var81 != null) { + var82 = var81; + } else { + byte[] var84 = HitSplatDefinition.HitSplatDefinition_archive.takeFile(32, var16); + var81 = new HitSplatDefinition(); + if (var84 != null) { + var81.decode(new Buffer(var84)); + } + + HitSplatDefinition.HitSplatDefinition_cached.put(var81, (long)var16); + var82 = var81; + } + + var91 = var82; + var80 = var82.field3338; + if (var82 != null && var82.transforms != null) { + var91 = var82.transform(); + if (var91 == null) { + var0.hitSplatCycles[var10] = -1; + continue; + } + } + } else if (var79 < 0) { + continue; + } + + var15 = var0.hitSplatTypes2[var10]; + HitSplatDefinition var83 = null; + HitSplatDefinition var96; + if (var15 >= 0) { + var96 = (HitSplatDefinition)HitSplatDefinition.HitSplatDefinition_cached.get((long)var15); + if (var96 != null) { + var81 = var96; + } else { + byte[] var85 = HitSplatDefinition.HitSplatDefinition_archive.takeFile(32, var15); + var96 = new HitSplatDefinition(); + if (var85 != null) { + var96.decode(new Buffer(var85)); + } + + HitSplatDefinition.HitSplatDefinition_cached.put(var96, (long)var15); + var81 = var96; + } + + var83 = var81; + if (var81 != null && var81.transforms != null) { + var83 = var81.transform(); + } + } + + if (var79 - var80 <= Client.cycle) { + if (var91 == null) { + var0.hitSplatCycles[var10] = -1; + } else { + ItemContainer.getActorScreenLocation(var0, var0.defaultHeight / 2); + if (Client.viewportTempX > -1) { + if (var10 == 1) { + Client.viewportTempY -= 20; + } + + if (var10 == 2) { + Client.viewportTempX -= 15; + Client.viewportTempY -= 10; + } + + if (var10 == 3) { + Client.viewportTempX += 15; + Client.viewportTempY -= 10; + } + + var96 = null; + Sprite var97 = null; + Sprite var86 = null; + Sprite var87 = null; + var22 = 0; + var23 = 0; + int var24 = 0; + int var25 = 0; + int var26 = 0; + int var27 = 0; + int var28 = 0; + int var29 = 0; + Sprite var30 = null; + Sprite var31 = null; + Sprite var32 = null; + Sprite var33 = null; + int var34 = 0; + int var35 = 0; + int var36 = 0; + int var37 = 0; + int var38 = 0; + int var39 = 0; + int var40 = 0; + int var41 = 0; + int var42 = 0; + Sprite var98 = var91.method4662(); + int var43; + if (var98 != null) { + var22 = var98.subWidth; + var43 = var98.subHeight; + if (var43 > var42) { + var42 = var43; + } + + var26 = var98.xOffset; + } + + var97 = var91.method4663(); + if (var97 != null) { + var23 = var97.subWidth; + var43 = var97.subHeight; + if (var43 > var42) { + var42 = var43; + } + + var27 = var97.xOffset; + } + + var86 = var91.method4671(); + if (var86 != null) { + var24 = var86.subWidth; + var43 = var86.subHeight; + if (var43 > var42) { + var42 = var43; + } + + var28 = var86.xOffset; + } + + var87 = var91.method4657(); + if (var87 != null) { + var25 = var87.subWidth; + var43 = var87.subHeight; + if (var43 > var42) { + var42 = var43; + } + + var29 = var87.xOffset; + } + + if (var83 != null) { + var30 = var83.method4662(); + if (var30 != null) { + var34 = var30.subWidth; + var43 = var30.subHeight; + if (var43 > var42) { + var42 = var43; + } + + var38 = var30.xOffset; + } + + var31 = var83.method4663(); + if (var31 != null) { + var35 = var31.subWidth; + var43 = var31.subHeight; + if (var43 > var42) { + var42 = var43; + } + + var39 = var31.xOffset; + } + + var32 = var83.method4671(); + if (var32 != null) { + var36 = var32.subWidth; + var43 = var32.subHeight; + if (var43 > var42) { + var42 = var43; + } + + var40 = var32.xOffset; + } + + var33 = var83.method4657(); + if (var33 != null) { + var37 = var33.subWidth; + var43 = var33.subHeight; + if (var43 > var42) { + var42 = var43; + } + + var41 = var33.xOffset; + } + } + + Font var88 = var91.getFont(); + if (var88 == null) { + var88 = AttackOption.fontPlain11; + } + + Font var44; + if (var83 != null) { + var44 = var83.getFont(); + if (var44 == null) { + var44 = AttackOption.fontPlain11; + } + } else { + var44 = AttackOption.fontPlain11; + } + + String var45 = null; + String var46 = null; + boolean var47 = false; + int var48 = 0; + var45 = var91.getString(var0.hitSplatValues[var10]); + int var93 = var88.stringWidth(var45); + if (var83 != null) { + var46 = var83.getString(var0.hitSplatValues2[var10]); + var48 = var44.stringWidth(var46); + } + + int var49 = 0; + int var50 = 0; + if (var23 > 0) { + if (var86 == null && var87 == null) { + var49 = 1; + } else { + var49 = var93 / var23 + 1; + } + } + + if (var83 != null && var35 > 0) { + if (var32 == null && var33 == null) { + var50 = 1; + } else { + var50 = var48 / var35 + 1; + } + } + + int var51 = 0; + int var52 = var51; + if (var22 > 0) { + var51 += var22; + } + + var51 += 2; + int var53 = var51; + if (var24 > 0) { + var51 += var24; + } + + int var54 = var51; + int var55 = var51; + int var56; + if (var23 > 0) { + var56 = var23 * var49; + var51 += var56; + var55 += (var56 - var93) / 2; + } else { + var51 += var93; + } + + var56 = var51; + if (var25 > 0) { + var51 += var25; + } + + int var57 = 0; + int var58 = 0; + int var59 = 0; + int var60 = 0; + int var61 = 0; + int var62; + if (var83 != null) { + var51 += 2; + var57 = var51; + if (var34 > 0) { + var51 += var34; + } + + var51 += 2; + var58 = var51; + if (var36 > 0) { + var51 += var36; + } + + var59 = var51; + var61 = var51; + if (var35 > 0) { + var62 = var35 * var50; + var51 += var62; + var61 += (var62 - var48) / 2; + } else { + var51 += var48; + } + + var60 = var51; + if (var37 > 0) { + var51 += var37; + } + } + + var62 = var0.hitSplatCycles[var10] - Client.cycle; + int var63 = var91.field3343 - var62 * var91.field3343 / var91.field3338; + int var64 = var62 * var91.field3327 / var91.field3338 + -var91.field3327; + int var65 = var63 + (var2 + Client.viewportTempX - (var51 >> 1)); + int var66 = var3 + Client.viewportTempY - 12 + var64; + int var67 = var66; + int var68 = var66 + var42; + int var69 = var66 + var91.field3333 + 15; + int var70 = var69 - var88.maxAscent; + int var71 = var69 + var88.maxDescent; + if (var70 < var66) { + var67 = var70; + } + + if (var71 > var68) { + var68 = var71; + } + + int var72 = 0; + int var73; + int var74; + if (var83 != null) { + var72 = var66 + var83.field3333 + 15; + var73 = var72 - var44.maxAscent; + var74 = var72 + var44.maxDescent; + if (var73 < var67) { + ; + } + + if (var74 > var68) { + ; + } + } + + var73 = 255; + if (var91.field3348 >= 0) { + var73 = (var62 << 8) / (var91.field3338 - var91.field3348); + } + + if (var73 >= 0 && var73 < 255) { + if (var98 != null) { + var98.drawTransAt(var52 + var65 - var26, var66, var73); + } + + if (var86 != null) { + var86.drawTransAt(var65 + var53 - var28, var66, var73); + } + + if (var97 != null) { + for (var74 = 0; var74 < var49; ++var74) { + var97.drawTransAt(var23 * var74 + (var65 + var54 - var27), var66, var73); } } - if (Client.isSpellSelected) { - var10 = class195.getWidgetClickMask(var0); - var9 = (var10 >> 30 & 1) != 0; - if (var9) { - if ((class81.selectedSpellFlags & 16) == 16) { - GameObject.insertMenuItemNoShift(Client.selectedSpellActionName, Client.selectedSpellName + " " + "->" + " " + AbstractArchive.colorStartTag(16748608) + var8.name, 32, var8.id, var19, var0.id); - } - break label325; + if (var87 != null) { + var87.drawTransAt(var56 + var65 - var29, var66, var73); + } + + var88.drawAlpha(var45, var55 + var65, var69, var91.textColor, 0, var73); + if (var83 != null) { + if (var30 != null) { + var30.drawTransAt(var57 + var65 - var38, var66, var73); } - } - String[] var20 = var8.inventoryActions; - var10 = -1; - if (Client.shiftClickDrop && class222.method4272()) { - var10 = var8.getShiftClickIndex(); - } - - int var12 = class195.getWidgetClickMask(var0); - boolean var11 = (var12 >> 30 & 1) != 0; - if (var11) { - for (int var13 = 4; var13 >= 3; --var13) { - if (var13 != var10) { - Message.addWidgetItemMenuItem(var0, var8, var19, var13, false); - } + if (var32 != null) { + var32.drawTransAt(var58 + var65 - var40, var66, var73); } - } - int var14 = class195.getWidgetClickMask(var0); - boolean var24 = (var14 >> 31 & 1) != 0; - if (var24) { - GameObject.insertMenuItemNoShift("Use", AbstractArchive.colorStartTag(16748608) + var8.name, 38, var8.id, var19, var0.id); - } - - int var16 = class195.getWidgetClickMask(var0); - boolean var15 = (var16 >> 30 & 1) != 0; - int var17; - if (var15) { - for (var17 = 2; var17 >= 0; --var17) { - if (var17 != var10) { - Message.addWidgetItemMenuItem(var0, var8, var19, var17, false); + if (var31 != null) { + for (var74 = 0; var74 < var50; ++var74) { + var31.drawTransAt(var35 * var74 + (var65 + var59 - var39), var66, var73); } } - if (var10 >= 0) { - Message.addWidgetItemMenuItem(var0, var8, var19, var10, true); + if (var33 != null) { + var33.drawTransAt(var65 + var60 - var41, var66, var73); + } + + var44.drawAlpha(var46, var61 + var65, var72, var83.textColor, 0, var73); + } + } else { + if (var98 != null) { + var98.drawTransBgAt(var65 + var52 - var26, var66); + } + + if (var86 != null) { + var86.drawTransBgAt(var53 + var65 - var28, var66); + } + + if (var97 != null) { + for (var74 = 0; var74 < var49; ++var74) { + var97.drawTransBgAt(var23 * var74 + (var65 + var54 - var27), var66); } } - var20 = var0.itemActions; - if (var20 != null) { - for (var17 = 4; var17 >= 0; --var17) { - if (var20[var17] != null) { - byte var18 = 0; - if (var17 == 0) { - var18 = 39; - } + if (var87 != null) { + var87.drawTransBgAt(var56 + var65 - var29, var66); + } - if (var17 == 1) { - var18 = 40; - } + var88.draw(var45, var55 + var65, var69, var91.textColor | -16777216, 0); + if (var83 != null) { + if (var30 != null) { + var30.drawTransBgAt(var57 + var65 - var38, var66); + } - if (var17 == 2) { - var18 = 41; - } + if (var32 != null) { + var32.drawTransBgAt(var65 + var58 - var40, var66); + } - if (var17 == 3) { - var18 = 42; - } - - if (var17 == 4) { - var18 = 43; - } - - GameObject.insertMenuItemNoShift(var20[var17], AbstractArchive.colorStartTag(16748608) + var8.name, var18, var8.id, var19, var0.id); + if (var31 != null) { + for (var74 = 0; var74 < var50; ++var74) { + var31.drawTransBgAt(var74 * var35 + (var65 + var59 - var39), var66); } } - } - GameObject.insertMenuItemNoShift("Examine", AbstractArchive.colorStartTag(16748608) + var8.name, 1005, var8.id, var19, var0.id); + if (var33 != null) { + var33.drawTransBgAt(var65 + var60 - var41, var66); + } + + var44.draw(var46, var61 + var65, var72, var83.textColor | -16777216, 0); + } } } } - - ++var19; } } + } - - if (var0.isIf3) { - if (Client.isSpellSelected) { - if (AbstractWorldMapData.method327(class195.getWidgetClickMask(var0)) && (class81.selectedSpellFlags & 32) == 32) { - GameObject.insertMenuItemNoShift(Client.selectedSpellActionName, Client.selectedSpellName + " " + "->" + " " + var0.dataText, 58, 0, var0.childIndex, var0.id); - } - } else { - for (var19 = 9; var19 >= 5; --var19) { - String var21 = WorldMapData_0.method210(var0, var19); - if (var21 != null) { - GameObject.insertMenuItemNoShift(var21, var0.dataText, 1007, var19 + 1, var0.childIndex, var0.id); - } - } - - var3 = SoundCache.method2666(var0); - if (var3 != null) { - GameObject.insertMenuItemNoShift(var3, var0.dataText, 25, 0, var0.childIndex, var0.id); - } - - for (var4 = 4; var4 >= 0; --var4) { - String var22 = WorldMapData_0.method210(var0, var4); - if (var22 != null) { - ArchiveDiskAction.insertMenuItem(var22, var0.dataText, 57, var4 + 1, var0.childIndex, var0.id, var0.field2690); - } - } - - var5 = class195.getWidgetClickMask(var0); - boolean var23 = (var5 & 1) != 0; - if (var23) { - GameObject.insertMenuItemNoShift("Continue", "", 30, 0, var0.childIndex, var0.id); - } - } - } - } } diff --git a/runescape-client/src/main/java/class81.java b/runescape-client/src/main/java/class81.java index 70c5315d08..177183855c 100644 --- a/runescape-client/src/main/java/class81.java +++ b/runescape-client/src/main/java/class81.java @@ -1,45 +1,234 @@ +import java.io.IOException; import net.runelite.mapping.Export; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("cw") +@ObfuscatedName("cl") public class class81 { - @ObfuscatedName("mx") + @ObfuscatedName("w") @ObfuscatedGetter( - intValue = -1202719231 + intValue = -1420031355 ) - @Export("selectedSpellFlags") - static int selectedSpellFlags; - - @ObfuscatedName("q") + @Export("ItemDefinition_fileCount") + public static int ItemDefinition_fileCount; + @ObfuscatedName("do") @ObfuscatedSignature( - signature = "(Lkf;I)I", - garbageValue = "1778630102" + signature = "Lij;" ) - static int method2206(PacketBuffer var0) { - int var1 = var0.readBits(2); - int var2; - if (var1 == 0) { - var2 = 0; - } else if (var1 == 1) { - var2 = var0.readBits(5); - } else if (var1 == 2) { - var2 = var0.readBits(8); - } else { - var2 = var0.readBits(11); + @Export("archive10") + static Archive archive10; + @ObfuscatedName("ho") + @ObfuscatedGetter( + intValue = 1548225329 + ) + @Export("oculusOrbFocalPointY") + static int oculusOrbFocalPointY; + + @ObfuscatedName("u") + @ObfuscatedSignature( + signature = "(II)Z", + garbageValue = "1888089163" + ) + public static boolean method2086(int var0) { + return var0 >= WorldMapDecorationType.field2748.id && var0 <= WorldMapDecorationType.field2730.id || var0 == WorldMapDecorationType.field2731.id; + } + + @ObfuscatedName("eo") + @ObfuscatedSignature( + signature = "(IB)V", + garbageValue = "-53" + ) + @Export("updateGameState") + static void updateGameState(int var0) { + if (var0 != Client.gameState) { + if (Client.gameState == 0) { + AbstractWorldMapIcon.client.method991(); + } + + if (var0 == 20 || var0 == 40 || var0 == 45) { + Client.loginState = 0; + Client.field887 = 0; + Client.field678 = 0; + Client.timer.method5073(var0); + if (var0 != 20) { + Canvas.method872(false); + } + } + + if (var0 != 20 && var0 != 40 && PcmPlayer.field1413 != null) { + PcmPlayer.field1413.close(); + PcmPlayer.field1413 = null; + } + + if (Client.gameState == 25) { + Client.field699 = 0; + Client.field676 = 0; + Client.field794 = 1; + Client.field850 = 0; + Client.field672 = 1; + } + + if (var0 != 5 && var0 != 10) { + if (var0 == 20) { + WorldMapRegion.method505(archive10, WorldMapRegion.archive8, true, Client.gameState == 11 ? 4 : 0); + } else if (var0 == 11) { + WorldMapRegion.method505(archive10, WorldMapRegion.archive8, false, 4); + } else if (Login.field1194) { + Login.titleboxSprite = null; + Login.titlebuttonSprite = null; + StructDefinition.runesSprite = null; + AbstractByteArrayCopier.leftTitleSprite = null; + class319.rightTitleSprite = null; + Decimator.logoSprite = null; + Login.title_muteSprite = null; + InterfaceParent.options_buttons_0Sprite = null; + Varps.options_buttons_2Sprite = null; + class42.worldSelectBackSprites = null; + ItemContainer.worldSelectFlagSprites = null; + class40.worldSelectArrows = null; + GraphicsObject.worldSelectStars = null; + class42.field364 = null; + DynamicObject.loginScreenRunesAnimation.method1828(); + UrlRequest.method3358(2); + if (NetCache.NetCache_socket != null) { + try { + Buffer var1 = new Buffer(4); + var1.writeByte(2); + var1.writeMedium(0); + NetCache.NetCache_socket.write(var1.array, 0, 4); + } catch (IOException var4) { + try { + NetCache.NetCache_socket.close(); + } catch (Exception var3) { + } + + ++NetCache.NetCache_ioExceptions; + NetCache.NetCache_socket = null; + } + } + + Login.field1194 = false; + } + } else { + WorldMapRegion.method505(archive10, WorldMapRegion.archive8, true, 0); + } + + Client.gameState = var0; + } + } + + @ObfuscatedName("fk") + @ObfuscatedSignature( + signature = "(I)V", + garbageValue = "-2006396000" + ) + static final void method2084() { + for (int var0 = 0; var0 < Client.soundEffectCount; ++var0) { + int var10002 = Client.queuedSoundEffectDelays[var0]--; + if (Client.queuedSoundEffectDelays[var0] >= -10) { + SoundEffect var9 = Client.soundEffects[var0]; + if (var9 == null) { + Object var10000 = null; + var9 = SoundEffect.readSoundEffect(SpriteMask.archive4, Client.soundEffectIds[var0], 0); + if (var9 == null) { + continue; + } + + int[] var13 = Client.queuedSoundEffectDelays; + var13[var0] += var9.calculateDelay(); + Client.soundEffects[var0] = var9; + } + + if (Client.queuedSoundEffectDelays[var0] < 0) { + int var2; + if (Client.soundLocations[var0] != 0) { + int var3 = (Client.soundLocations[var0] & 255) * 128; + int var4 = Client.soundLocations[var0] >> 16 & 255; + int var5 = var4 * 128 + 64 - class215.localPlayer.x; + if (var5 < 0) { + var5 = -var5; + } + + int var6 = Client.soundLocations[var0] >> 8 & 255; + int var7 = var6 * 128 + 64 - class215.localPlayer.y; + if (var7 < 0) { + var7 = -var7; + } + + int var8 = var5 + var7 - 128; + if (var8 > var3) { + Client.queuedSoundEffectDelays[var0] = -100; + continue; + } + + if (var8 < 0) { + var8 = 0; + } + + var2 = (var3 - var8) * Client.areaSoundEffectVolume / var3; + } else { + var2 = Client.soundEffectVolume; + } + + if (var2 > 0) { + RawSound var10 = var9.toRawSound().resample(LoginScreenAnimation.decimator); + RawPcmStream var11 = RawPcmStream.createRawPcmStream(var10, 100, var2); + var11.setNumLoops(Client.queuedSoundEffectLoops[var0] - 1); + ClientPacket.pcmStreamMixer.addSubStream(var11); + } + + Client.queuedSoundEffectDelays[var0] = -100; + } + } else { + --Client.soundEffectCount; + + for (int var1 = var0; var1 < Client.soundEffectCount; ++var1) { + Client.soundEffectIds[var1] = Client.soundEffectIds[var1 + 1]; + Client.soundEffects[var1] = Client.soundEffects[var1 + 1]; + Client.queuedSoundEffectLoops[var1] = Client.queuedSoundEffectLoops[var1 + 1]; + Client.queuedSoundEffectDelays[var1] = Client.queuedSoundEffectDelays[var1 + 1]; + Client.soundLocations[var1] = Client.soundLocations[var1 + 1]; + } + + --var0; + } + } + + if (Client.field742) { + boolean var12; + if (class197.field2411 != 0) { + var12 = true; + } else { + var12 = FaceNormal.midiPcmStream.isReady(); + } + + if (!var12) { + if (Client.musicVolume != 0 && Client.currentTrackGroupId != -1) { + class65.playMusicTrack(AbstractWorldMapData.archive6, Client.currentTrackGroupId, 0, Client.musicVolume, false); + } + + Client.field742 = false; + } } - return var2; } - @ObfuscatedName("l") + @ObfuscatedName("ff") @ObfuscatedSignature( - signature = "(B)V", - garbageValue = "11" + signature = "(I)V", + garbageValue = "667770085" ) - public static void method2207() { - SpotAnimationDefinition.SpotAnimationDefinition_cached.clear(); - SpotAnimationDefinition.SpotAnimationDefinition_cachedModels.clear(); + static final void method2085() { + int var0 = Players.Players_count; + int[] var1 = Players.Players_indices; + + for (int var2 = 0; var2 < var0; ++var2) { + Player var3 = Client.players[var1[var2]]; + if (var3 != null) { + class3.updateActorSequence(var3, 1); + } + } + } } diff --git a/runescape-client/src/main/java/class83.java b/runescape-client/src/main/java/class83.java index 524f0de683..8c2d0924e3 100644 --- a/runescape-client/src/main/java/class83.java +++ b/runescape-client/src/main/java/class83.java @@ -1,86 +1,116 @@ import java.math.BigInteger; import net.runelite.mapping.Export; -import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; +import net.runelite.rs.ScriptOpcodes; -@ObfuscatedName("cn") +@ObfuscatedName("ch") public class class83 { - @ObfuscatedName("a") - static final BigInteger field1144; - @ObfuscatedName("t") - static final BigInteger field1145; - @ObfuscatedName("p") - @ObfuscatedGetter( - intValue = 543275717 + @ObfuscatedName("u") + static final BigInteger field1158; + @ObfuscatedName("f") + static final BigInteger field1160; + @ObfuscatedName("s") + @ObfuscatedSignature( + signature = "Lkg;" ) - static int field1146; + @Export("NetCache_reference") + static Buffer NetCache_reference; static { - field1144 = new BigInteger("10001", 16); - field1145 = new BigInteger("8ffe6122bc1531a9d3909c2cefb420d9099dcda7494cf98fcd054d7eac1f32c03cc1cff0955965d35dfb6bd322c5e9201941edfa6f26cfff45524daf4c6b09c8a121f3b0262443ca7164bbad436420e7fd23d9d2b74f228f68f961563e337b95772bf046cf05bb699549141325085c55e5d44ea15e3c7f17dd6c03d521f963f7", 16); + field1158 = new BigInteger("10001", 16); + field1160 = new BigInteger("94e80a7ee588d1a5fb0774efe8f6014553fea4aa4055827491c7e94dff7547dde03cd70414c02606e8d2ef1bcb94156dfb4f4abd7b407d9a9956eec5d65bf0afa119cbbef760e19e26954f30fc19a91f3cd3cef7e9bf824f15d2b41f2fa4c59059d88212a350ada947c584a6a1b1e01ce33399aeb88dade6d1e4601f5be82cbb", 16); } - @ObfuscatedName("t") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(Lhq;III)[Llx;", - garbageValue = "676628248" + signature = "(Lhf;Lhf;Lhf;I)V", + garbageValue = "568934897" ) - @Export("SpriteBuffer_getSpriteArray") - public static Sprite[] SpriteBuffer_getSpriteArray(AbstractArchive var0, int var1, int var2) { - if (!class32.method618(var0, var1, var2)) { - return null; - } else { - Sprite[] var4 = new Sprite[class325.SpriteBuffer_spriteCount]; + public static void method2090(AbstractArchive var0, AbstractArchive var1, AbstractArchive var2) { + SequenceDefinition.SequenceDefinition_archive = var0; + SequenceDefinition.SequenceDefinition_animationsArchive = var1; + SequenceDefinition.SequenceDefinition_skeletonsArchive = var2; + } - for (int var5 = 0; var5 < class325.SpriteBuffer_spriteCount; ++var5) { - Sprite var6 = var4[var5] = new Sprite(); - var6.width = class325.SpriteBuffer_spriteWidth; - var6.height = class325.SpriteBuffer_spriteHeight; - var6.xOffset = SecureRandomFuture.SpriteBuffer_xOffsets[var5]; - var6.yOffset = HealthBar.SpriteBuffer_yOffsets[var5]; - var6.subWidth = SecureRandomCallable.SpriteBuffer_spriteWidths[var5]; - var6.subHeight = AttackOption.SpriteBuffer_spriteHeights[var5]; - int var7 = var6.subHeight * var6.subWidth; - byte[] var8 = class325.SpriteBuffer_pixels[var5]; - var6.pixels = new int[var7]; + @ObfuscatedName("am") + @ObfuscatedSignature( + signature = "(ILci;ZI)I", + garbageValue = "480831567" + ) + static int method2091(int var0, Script var1, boolean var2) { + int var3; + int var4; + int var6; + if (var0 == ScriptOpcodes.ENUM_STRING) { + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 2; + var3 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var4 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + EnumDefinition var5 = Language.getEnum(var3); + if (var5.outputType != 's') { + } - for (int var9 = 0; var9 < var7; ++var9) { - var6.pixels[var9] = class325.SpriteBuffer_spritePalette[var8[var9] & 255]; + for (var6 = 0; var6 < var5.outputCount; ++var6) { + if (var4 == var5.keys[var6]) { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var5.strVals[var6]; + var5 = null; + break; } } - WorldMapData_1.method787(); - return var4; - } - } + if (var5 != null) { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var5.defaultStr; + } - @ObfuscatedName("c") - @ObfuscatedSignature( - signature = "(IB)I", - garbageValue = "13" - ) - @Export("Messages_getNextChatID") - static int Messages_getNextChatID(int var0) { - Message var1 = (Message)Messages.Messages_hashTable.get((long)var0); - if (var1 == null) { - return -1; + return 1; + } else if (var0 != ScriptOpcodes.ENUM) { + if (var0 == ScriptOpcodes.ENUM_GETOUTPUTCOUNT) { + var3 = Interpreter.Interpreter_intStack[--GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + EnumDefinition var10 = Language.getEnum(var3); + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var10.size(); + return 1; + } else { + return 2; + } } else { - return var1.previousDual == Messages.Messages_queue.sentinel ? -1 : ((Message)var1.previousDual).count; - } - } + GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize -= 4; + var3 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize]; + var4 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 1]; + int var9 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 2]; + var6 = Interpreter.Interpreter_intStack[GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize + 3]; + EnumDefinition var7 = Language.getEnum(var9); + if (var3 == var7.inputType && var4 == var7.outputType) { + for (int var8 = 0; var8 < var7.outputCount; ++var8) { + if (var6 == var7.keys[var8]) { + if (var4 == 115) { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var7.strVals[var8]; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var7.intVals[var8]; + } - @ObfuscatedName("if") - @ObfuscatedSignature( - signature = "(IIIII)V", - garbageValue = "1903758255" - ) - static final void method2212(int var0, int var1, int var2, int var3) { - for (int var4 = 0; var4 < Client.rootWidgetCount; ++var4) { - if (Client.rootWidgetXs[var4] + Client.rootWidgetWidths[var4] > var0 && Client.rootWidgetXs[var4] < var0 + var2 && Client.rootWidgetYs[var4] + Client.rootWidgetHeights[var4] > var1 && Client.rootWidgetYs[var4] < var3 + var1) { - Client.field842[var4] = true; + var7 = null; + break; + } + } + + if (var7 != null) { + if (var4 == 115) { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = var7.defaultStr; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = var7.defaultInt; + } + } + + return 1; + } else { + if (var4 == 115) { + Interpreter.Interpreter_stringStack[++class43.Interpreter_stringStackSize - 1] = "null"; + } else { + Interpreter.Interpreter_intStack[++GrandExchangeOfferTotalQuantityComparator.Interpreter_intStackSize - 1] = 0; + } + + return 1; } } - } } diff --git a/runescape-client/src/main/java/class96.java b/runescape-client/src/main/java/class96.java index cd7b1de892..b5dc9293de 100644 --- a/runescape-client/src/main/java/class96.java +++ b/runescape-client/src/main/java/class96.java @@ -2,44 +2,112 @@ import net.runelite.mapping.Export; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("cs") +@ObfuscatedName("cp") public class class96 { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( signature = "Ljm;" ) @Export("reflectionChecks") - public static IterableNodeDeque reflectionChecks; - @ObfuscatedName("o") - static byte[][][] field1300; - @ObfuscatedName("d") - @ObfuscatedSignature( - signature = "Ler;" - ) - @Export("World_request") - static UrlRequest World_request; - @ObfuscatedName("k") - @ObfuscatedSignature( - signature = "Lhi;" - ) - static Widget field1301; - @ObfuscatedName("z") - public static String field1299; + static IterableNodeDeque reflectionChecks; static { reflectionChecks = new IterableNodeDeque(); } - @ObfuscatedName("q") + @ObfuscatedName("f") @ObfuscatedSignature( - signature = "(IZIZI)V", - garbageValue = "422781217" + signature = "(II)Lid;", + garbageValue = "-208126476" ) - @Export("sortWorldList") - static void sortWorldList(int var0, boolean var1, int var2, boolean var3) { - if (Username.World_worlds != null) { - ModelData0.doWorldSorting(0, Username.World_worlds.length - 1, var0, var1, var2, var3); - } + @Export("StructDefinition_getStructDefinition") + public static StructDefinition StructDefinition_getStructDefinition(int var0) { + StructDefinition var1 = (StructDefinition)StructDefinition.StructDefinition_cached.get((long)var0); + if (var1 != null) { + return var1; + } else { + byte[] var2 = StructDefinition.StructDefinition_archive.takeFile(34, var0); + var1 = new StructDefinition(); + if (var2 != null) { + var1.decode(new Buffer(var2)); + } + var1.postDecode(); + StructDefinition.StructDefinition_cached.put(var1, (long)var0); + return var1; + } + } + + @ObfuscatedName("b") + @ObfuscatedSignature( + signature = "(III)I", + garbageValue = "-1542678274" + ) + static int method2314(int var0, int var1) { + ItemContainer var2 = (ItemContainer)ItemContainer.itemContainers.get((long)var0); + if (var2 == null) { + return 0; + } else if (var1 == -1) { + return 0; + } else { + int var3 = 0; + + for (int var4 = 0; var4 < var2.quantities.length; ++var4) { + if (var2.ids[var4] == var1) { + var3 += var2.quantities[var4]; + } + } + + return var3; + } + } + + @ObfuscatedName("x") + @ObfuscatedSignature( + signature = "(B)V", + garbageValue = "72" + ) + static final void method2307() { + if (!ViewportMouse.ViewportMouse_false0) { + int var0 = Scene.Scene_cameraPitchSine; + int var1 = Scene.Scene_cameraPitchCosine; + int var2 = Scene.Scene_cameraYawSine; + int var3 = Scene.Scene_cameraYawCosine; + byte var4 = 50; + short var5 = 3500; + int var6 = (ViewportMouse.ViewportMouse_x - Rasterizer3D.Rasterizer3D_clipMidX) * var4 / Rasterizer3D.Rasterizer3D_zoom; + int var7 = (ViewportMouse.ViewportMouse_y - Rasterizer3D.Rasterizer3D_clipMidY) * var4 / Rasterizer3D.Rasterizer3D_zoom; + int var8 = (ViewportMouse.ViewportMouse_x - Rasterizer3D.Rasterizer3D_clipMidX) * var5 / Rasterizer3D.Rasterizer3D_zoom; + int var9 = (ViewportMouse.ViewportMouse_y - Rasterizer3D.Rasterizer3D_clipMidY) * var5 / Rasterizer3D.Rasterizer3D_zoom; + int var10 = Rasterizer3D.method3048(var7, var4, var1, var0); + int var11 = Rasterizer3D.method3044(var7, var4, var1, var0); + var7 = var10; + var10 = Rasterizer3D.method3048(var9, var5, var1, var0); + int var12 = Rasterizer3D.method3044(var9, var5, var1, var0); + var9 = var10; + var10 = Rasterizer3D.method3054(var6, var11, var3, var2); + var11 = Rasterizer3D.method3067(var6, var11, var3, var2); + var6 = var10; + var10 = Rasterizer3D.method3054(var8, var12, var3, var2); + var12 = Rasterizer3D.method3067(var8, var12, var3, var2); + class30.field261 = (var6 + var10) / 2; + class2.field5 = (var7 + var9) / 2; + GrandExchangeEvents.field36 = (var12 + var11) / 2; + ViewportMouse.field1737 = (var10 - var6) / 2; + ViewportMouse.field1739 = (var9 - var7) / 2; + class288.field3652 = (var12 - var11) / 2; + Frames.field1880 = Math.abs(ViewportMouse.field1737); + class189.field2355 = Math.abs(ViewportMouse.field1739); + class65.field603 = Math.abs(class288.field3652); + } + } + + @ObfuscatedName("ir") + @ObfuscatedSignature( + signature = "(IB)Z", + garbageValue = "-50" + ) + static boolean method2315(int var0) { + return var0 == 57 || var0 == 58 || var0 == 1007 || var0 == 25 || var0 == 30; } } diff --git a/runescape-client/src/main/java/class99.java b/runescape-client/src/main/java/class99.java index 4936360dd7..d2ea067a6c 100644 --- a/runescape-client/src/main/java/class99.java +++ b/runescape-client/src/main/java/class99.java @@ -2,12 +2,12 @@ import net.runelite.mapping.Export; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; -@ObfuscatedName("cc") +@ObfuscatedName("cf") public interface class99 { - @ObfuscatedName("a") + @ObfuscatedName("u") @ObfuscatedSignature( - signature = "(I)Ldq;", - garbageValue = "1807765023" + signature = "(I)Lde;", + garbageValue = "2104968763" ) @Export("player") PcmPlayer player(); diff --git a/runescape-client/src/main/java/net/runelite/rs/Opcodes.java b/runescape-client/src/main/java/net/runelite/rs/Opcodes.java index 317b2a8c42..c7364a3db6 100644 --- a/runescape-client/src/main/java/net/runelite/rs/Opcodes.java +++ b/runescape-client/src/main/java/net/runelite/rs/Opcodes.java @@ -1,4 +1,3 @@ package net.runelite.rs; -public class Opcodes { -} +public class Opcodes {}