From 608d5fb7a3fd732acdd9b1ef3192503038c9a927 Mon Sep 17 00:00:00 2001 From: Max Weber Date: Thu, 25 Oct 2018 03:56:47 -0600 Subject: [PATCH] cache: Correct Location loading I guess this changed when they hit the 32k object limit. --- .../definitions/loaders/LocationsLoader.java | 2 +- .../net/runelite/cache/io/InputStream.java | 32 +++++++++++++------ 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/cache/src/main/java/net/runelite/cache/definitions/loaders/LocationsLoader.java b/cache/src/main/java/net/runelite/cache/definitions/loaders/LocationsLoader.java index 4dfa2ab360..4dab72cf77 100644 --- a/cache/src/main/java/net/runelite/cache/definitions/loaders/LocationsLoader.java +++ b/cache/src/main/java/net/runelite/cache/definitions/loaders/LocationsLoader.java @@ -47,7 +47,7 @@ public class LocationsLoader int id = -1; int idOffset; - while ((idOffset = buf.readUnsignedShortSmart()) != 0) + while ((idOffset = buf.readUnsignedIntSmartShortCompat()) != 0) { id += idOffset; diff --git a/cache/src/main/java/net/runelite/cache/io/InputStream.java b/cache/src/main/java/net/runelite/cache/io/InputStream.java index 7143ea3e71..1fde0d97a3 100644 --- a/cache/src/main/java/net/runelite/cache/io/InputStream.java +++ b/cache/src/main/java/net/runelite/cache/io/InputStream.java @@ -30,14 +30,14 @@ import java.nio.ByteBuffer; public class InputStream extends java.io.InputStream { private static final char[] CHARACTERS = new char[] - { - '\u20ac', '\u0000', '\u201a', '\u0192', '\u201e', '\u2026', - '\u2020', '\u2021', '\u02c6', '\u2030', '\u0160', '\u2039', - '\u0152', '\u0000', '\u017d', '\u0000', '\u0000', '\u2018', - '\u2019', '\u201c', '\u201d', '\u2022', '\u2013', '\u2014', - '\u02dc', '\u2122', '\u0161', '\u203a', '\u0153', '\u0000', - '\u017e', '\u0178' - }; + { + '\u20ac', '\u0000', '\u201a', '\u0192', '\u201e', '\u2026', + '\u2020', '\u2021', '\u02c6', '\u2030', '\u0160', '\u2039', + '\u0152', '\u0000', '\u017d', '\u0000', '\u0000', '\u2018', + '\u2019', '\u201c', '\u201d', '\u2022', '\u2013', '\u2014', + '\u02dc', '\u2122', '\u0161', '\u203a', '\u0153', '\u0000', + '\u017e', '\u0178' + }; private final ByteBuffer buffer; @@ -157,11 +157,25 @@ public class InputStream extends java.io.InputStream return peek < 128 ? this.readUnsignedByte() : this.readUnsignedShort() - 0x8000; } + public int readUnsignedIntSmartShortCompat() + { + int var1 = 0; + + int var2; + for (var2 = this.readUnsignedShortSmart(); var2 == 32767; var2 = this.readUnsignedShortSmart()) + { + var1 += 32767; + } + + var1 += var2; + return var1; + } + public String readString() { StringBuilder sb = new StringBuilder(); - for (;;) + for (; ; ) { int ch = this.readUnsignedByte();