From 9e1ad9362f1ff5d1d9abcd3aa7a408e11607c563 Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 30 Apr 2017 19:38:21 -0400 Subject: [PATCH] cache: update script loading for newer cache --- .../cache/definitions/loaders/ScriptLoader.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/cache/src/main/java/net/runelite/cache/definitions/loaders/ScriptLoader.java b/cache/src/main/java/net/runelite/cache/definitions/loaders/ScriptLoader.java index fa2d326bf1..875cb69342 100644 --- a/cache/src/main/java/net/runelite/cache/definitions/loaders/ScriptLoader.java +++ b/cache/src/main/java/net/runelite/cache/definitions/loaders/ScriptLoader.java @@ -34,13 +34,20 @@ public class ScriptLoader ScriptDefinition def = new ScriptDefinition(); InputStream in = new InputStream(b); - in.setOffset(in.getLength() - 12); + in.setOffset(in.getLength() - 2); + int scriptEndOffset = in.readUnsignedShort(); + + // 2 for scriptEndOffset + the k/v data + 12 for the param/vars/stack data + int endIdx = in.getLength() - 2 - scriptEndOffset - 12; + in.setOffset(endIdx); int paramCount = in.readInt(); int localIntCount = in.readUnsignedShort(); int localStringCount = in.readUnsignedShort(); int intStackCount = in.readUnsignedShort(); int stringStackCount = in.readUnsignedShort(); + // XXX There are key/value pairs here + def.setLocalIntCount(localIntCount); def.setLocalStringCount(localStringCount); def.setIntStackCount(intStackCount); @@ -58,7 +65,7 @@ public class ScriptLoader def.setStringOperands(stringOperands); int var3; - for (int var6 = 0; in.getOffset() < in.getLength() - 12; instructions[var6++] = var3) + for (int var6 = 0; in.getOffset() < endIdx; instructions[var6++] = var3) { var3 = in.readUnsignedShort(); if (var3 == 3)