Hello guys today i'm gonna make a quick guide how to add Osrs data to your client.
First download any osrs data you would like i suggest the 148 release by Ian on ************.net
then download a good cache suite like this one here.
Warning: make a backup of your current client and cache incase something goes wrong.
Step 1: open your cache editor and load your cache by clicking on this button.
Step 2: open the archive folder then right click open Config.
Replace these files with the ones you just downloaded.
npc.dat
npc.idx
obj.idx
obj.dat
loc.dat
loc.idx
flo.dat
seq.dat
spotanim.dat
varbit.dat
Step 3: now close this and Right click open Version list and replace the map_index.dat and close this.
Step 4: open the model folder and clear on the botton right corner.
https://image.prntscr.com/image/cpee...XAPIfhXJTA.png
Step 5: do the same for Animations and the maps folder.
Step 6: now repack index 1, 2 and 4 in your cache this can be done by following this tutorial by galkon.
https://www.rune-server.ee/runescape...repacking.html
Step 7: now we need to edit our read values.
Spoiler for All Read Values:For Itemdef.java
Spoiler for Read values:Code:private void readValues(Stream stream) {
do {
int i = stream.readUnsignedByte();
if (i == 0)
return;
if (i == 1)
modelID = stream.readUnsignedWord();
else if (i == 2)
name = stream.readString();
else if(i == 3)
description = stream.readString();
else if (i == 4)
modelZoom = stream.readUnsignedWord();
else if (i == 5)
modelRotationY = stream.readUnsignedWord();
else if (i == 6)
modelRotationX = stream.readUnsignedWord();
else if (7 == i) {
modelOffset1 = stream.readUnsignedWord();
if (modelOffset1 > 32767)
modelOffset1 -= 0x10000;
} else if (8 == i) {
modelOffset2 = stream.readUnsignedWord();
if (modelOffset2 > 32767)
modelOffset2 -= 0x10000;
} else if (11 == i)
stackable = true;
else if (i == 12)
value = stream.readDWord();
else if (i == 16)
membersObject = true;
else if (i == 23) {
maleEquip1 = stream.readUnsignedWord();
aByte205 = stream.readSignedByte();
} else if (i == 24)
maleEquip2 = stream.readUnsignedWord();
else if (25 == i) {
femaleEquip1 = stream.readUnsignedWord();
aByte154 = stream.readSignedByte();
} else if (26 == i)
femaleEquip2 = stream.readUnsignedWord();
else if (i >= 30 && i < 35) {
if (groundActions == null)
groundActions = new String[5];
groundActions[i - 30] = stream.readString();
if (groundActions[i - 30].equalsIgnoreCase("hidden"))
groundActions[i - 30] = null;
} else if (i >= 35 && i < 40) {
if (actions == null)
actions = new String[5];
actions[i - 35] = stream.readString();
} else if (i == 40) {
int j = stream.readUnsignedByte();
newModelColor = new int[j];
editedModelColor = new int[j];
for (int k = 0; k < j; k++) {
newModelColor[k] = stream.readUnsignedWord();
editedModelColor[k] = stream.readUnsignedWord();
}
} else if (i == 41) {
int length = stream.readSignedByte();
short[] textureFind = new short[length];
short[] textureReplace = new short[length];
for (int idx = 0; idx < length; ++idx) {
textureFind[idx] = (short) (stream.readUnsignedWord());
textureReplace[idx] = (short) (stream.readUnsignedWord());
}
} else if (i == 42) { // #138
byte anInt2173 = stream.readSignedByte();
} else if (i == 65) {
boolean stockMarket = true;
} else if (i == 78)
anInt185 = stream.readUnsignedWord();
else if (i == 79)
anInt162 = stream.readUnsignedWord();
else if (i == 90)
anInt175 = stream.readUnsignedWord();
else if (i == 91)
anInt197 = stream.readUnsignedWord();
else if (i == 92)
anInt166 = stream.readUnsignedWord();
else if (i == 93)
anInt173 = stream.readUnsignedWord();
else if (i == 95)
anInt204 = stream.readUnsignedWord();
else if (i == 97)
certID = stream.readUnsignedWord();
else if (i == 98)
certTemplateID = stream.readUnsignedWord();
else if (i >= 100 && i < 110) {
if (stackIDs == null) {
stackIDs = new int[10];
stackAmounts = new int[10];
}
stackIDs[i - 100] = stream.readUnsignedWord();
stackAmounts[i - 100] = stream.readUnsignedWord();
} else if (i == 110)
anInt167 = stream.readUnsignedWord();
else if (i == 111)
anInt192 = stream.readUnsignedWord();
else if (i == 112)
anInt191 = stream.readUnsignedWord();
else if (i == 113)
brightness = stream.readSignedByte();
else if (114 == i)
anInt184 = stream.readSignedByte();
else if (115 == i) {
team = stream.readUnsignedByte();
} else if (i == 139) {
int boughtLink = stream.readUnsignedWord();
} else if (i == 140) {
int boughtTemplate = stream.readUnsignedWord();
// } else if (i == 148) {
// int anInt1879 = stream.readUnsignedWord();
// } else if (i == 149) {
// int anInt1833 = stream.readUnsignedWord();
} else if (i == 249) {
int length = stream.readUnsignedByte();
for (int i1 = 0; i1 < length; i1++) {
boolean isString = (stream.readUnsignedByte()) == 1;
int key = stream.read3Bytes();
Object value;
if (isString) {
value = stream.readString();
}
else {
value = stream.readDWord();
}
//params.put(key, value);
}
}
} while (true);
}
Objectdef.java
Spoiler for Read values:Code:public void readValues(Stream stream) {
int flag = -1;
do {
int opcode = stream.readUnsignedByte();
if (opcode == 0)
break;
if (opcode == 1) {
int len = stream.readUnsignedByte();
if (len > 0) {
if (anIntArray773 == null || lowMem) {
anIntArray776 = new int[len];
anIntArray773 = new int[len];
for (int k1 = 0; k1 < len; k1++) {
anIntArray773[k1] = stream.readUnsignedWord();
anIntArray776[k1] = stream.readUnsignedByte();
}
} else {
stream.currentOffset += len * 3;
}
}
} else if (opcode == 2)
name = stream.readString();
else if (opcode == 3)
description = stream.readBytes();
else if (opcode == 5) {
int len = stream.readUnsignedByte();
if (len > 0) {
if (anIntArray773 == null || lowMem) {
anIntArray776 = null;
anIntArray773 = new int[len];
for (int l1 = 0; l1 < len; l1++)
anIntArray773[l1] = stream.readUnsignedWord();
} else {
stream.currentOffset += len * 2;
}
}
} else if (opcode == 14)
anInt744 = stream.readUnsignedByte();
else if (opcode == 15)
anInt761 = stream.readUnsignedByte();
else if (opcode == 17)
aBoolean767 = false;
else if (opcode == 18)
aBoolean757 = false;
else if (opcode == 19)
hasActions = (stream.readUnsignedByte() == 1);
else if (opcode == 21)
aBoolean762 = true;
else if (opcode == 22)
aBoolean769 = true;
else if (opcode == 23)
aBoolean764 = true;
else if (opcode == 24) {
anInt781 = stream.readUnsignedWord();
if (anInt781 == 65535)
anInt781 = -1;
} else if (opcode == 28)
anInt775 = stream.readUnsignedByte();
else if (opcode == 29)
aByte737 = stream.readSignedByte();
else if (opcode == 39)
aByte742 = stream.readSignedByte();
else if (opcode >= 30 && opcode < 39) {
if (actions == null)
actions = new String[5];
actions[opcode - 30] = stream.readString();
if (actions[opcode - 30].equalsIgnoreCase("hidden"))
actions[opcode - 30] = null;
} else if (opcode == 40) {
int i1 = stream.readUnsignedByte();
modifiedModelColors = new int[i1];
originalModelColors = new int[i1];
for (int i2 = 0; i2 < i1; i2++) {
modifiedModelColors[i2] = stream.readUnsignedWord();
originalModelColors[i2] = stream.readUnsignedWord();
}
} else if (opcode == 60)
anInt746 = stream.readUnsignedWord();
else if (opcode == 62)
aBoolean751 = true;
else if (opcode == 64)
aBoolean779 = false;
else if (opcode == 65)
anInt748 = stream.readUnsignedWord();
else if (opcode == 66)
anInt772 = stream.readUnsignedWord();
else if (opcode == 67)
anInt740 = stream.readUnsignedWord();
else if (opcode == 68)
anInt758 = stream.readUnsignedWord();
else if (opcode == 69)
anInt768 = stream.readUnsignedByte();
else if (opcode == 70)
anInt738 = stream.readSignedWord();
else if (opcode == 71)
anInt745 = stream.readSignedWord();
else if (opcode == 72)
anInt783 = stream.readSignedWord();
else if (opcode == 73)
aBoolean736 = true;
else if (opcode == 74)
aBoolean766 = true;
else if (opcode == 75)
anInt760 = stream.readUnsignedByte();
else if (opcode == 77) {
anInt774 = stream.readUnsignedWord();
if (anInt774 == 65535)
anInt774 = -1;
anInt749 = stream.readUnsignedWord();
if (anInt749 == 65535)
anInt749 = -1;
int j1 = stream.readUnsignedByte();
childrenIDs = new int[j1 + 1];
for (int j2 = 0; j2 <= j1; j2++) {
childrenIDs[j2] = stream.readUnsignedWord();
if (childrenIDs[j2] == 65535)
childrenIDs[j2] = -1;
}
}
} while (true);
if (flag == -1 && name != "null" && name != null) {
hasActions = anIntArray773 != null && (anIntArray776 == null || anIntArray776[0] == 10);
if (actions != null)
hasActions = true;
}
if (aBoolean766) {
aBoolean767 = false;
aBoolean757 = false;
}
if (anInt760 == -1)
anInt760 = aBoolean767 ? 1 : 0;
}
EntityDef.java
Spoiler for Read Values:Code:public void readValues(Stream stream) {
do {
int i = stream.readUnsignedByte();
if (i == 0)
return;
if (i == 1) {
int j = stream.readUnsignedByte();
anIntArray94 = new int[j];
for (int j1 = 0; j1 < j; j1++) {
anIntArray94[j1] = stream.readUnsignedWord();
}
} else if (i == 2) {
name = stream.readString();
} else if (i == 3)
description = stream.readBytes();
else if (i == 12)
aByte68 = stream.readSignedByte();
else if (i == 13)
standAnim = stream.readUnsignedWord();
else if (i == 14)
walkAnim = stream.readUnsignedWord();
else if (i == 17) {
walkAnim = stream.readUnsignedWord();
anInt58 = stream.readUnsignedWord();
anInt83 = stream.readUnsignedWord();
anInt55 = stream.readUnsignedWord();
if (walkAnim == 65535)
walkAnim = -1;
if (anInt58 == 65535)
anInt58 = -1;
if (anInt83 == 65535)
anInt83 = -1;
if (anInt55 == 65535)
anInt55 = -1;
} else if (i >= 30 && i < 40) {
if (actions == null)
actions = new String[5];
actions[i - 30] = stream.readString();
if (actions[i - 30].equalsIgnoreCase("hidden"))
actions[i - 30] = null;
} else if (i == 40) {
int k = stream.readUnsignedByte();
anIntArray76 = new int[k];
anIntArray70 = new int[k];
for (int k1 = 0; k1 < k; k1++) {
anIntArray76[k1] = stream.readUnsignedWord();
anIntArray70[k1] = stream.readUnsignedWord();
}
} else if (i == 60) {
int l = stream.readUnsignedByte();
anIntArray73 = new int[l];
for (int l1 = 0; l1 < l; l1++) {
anIntArray73[l1] = stream.readUnsignedWord();
}
} else if (i == 90)
stream.readUnsignedWord();
else if (i == 91)
stream.readUnsignedWord();
else if (i == 92)
stream.readUnsignedWord();
else if (i == 93)
aBoolean87 = false;
else if (i == 95)
combatLevel = stream.readUnsignedWord();
else if (i == 97)
anInt91 = stream.readUnsignedWord();
else if (i == 98)
anInt86 = stream.readUnsignedWord();
else if (i == 99)
aBoolean93 = true;
else if (i == 100)
anInt85 = stream.readSignedByte();
else if (i == 101)
anInt92 = stream.readSignedByte() * 5;
else if (i == 102)
anInt75 = stream.readUnsignedWord();
else if (i == 103)
anInt79 = stream.readUnsignedWord();
else if (i == 106) {
anInt57 = stream.readUnsignedWord();
if (anInt57 == 65535)
anInt57 = -1;
anInt59 = stream.readUnsignedWord();
if (anInt59 == 65535)
anInt59 = -1;
int i1 = stream.readUnsignedByte();
childrenIDs = new int[i1 + 1];
for (int i2 = 0; i2 <= i1; i2++) {
childrenIDs[i2] = stream.readUnsignedWord();
if (childrenIDs[i2] == 65535)
childrenIDs[i2] = -1;
}
} else if (i == 107)
aBoolean84 = false;
else if (i == 127)
render = stream.readUnsignedWord();
} while (true);
}
Animation.java ( not everyone need this part.
Spoiler for Read values:Code:private void readValues2(Stream stream) {
int i;
while ((i = stream.readUnsignedByte()) != 0){
if (i == 1) {
anInt352 = stream.readUnsignedWord();
anIntArray353 = new int[anInt352];
anIntArray354 = new int[anInt352];
anIntArray355 = new int[anInt352];
for (int j = 0; j < anInt352; j++) {
anIntArray353[j] = stream.readDWord();
anIntArray354[j] = -1;
}
for (int j = 0; j < anInt352; j++)
anIntArray355[j] = stream.readUnsignedByte();
} else if (i == 2)
anInt356 = stream.readUnsignedWord();
else if (i == 3) {
int k = stream.readUnsignedByte();
anIntArray357 = new int[k + 1];
for (int l = 0; l < k; l++)
anIntArray357[l] = stream.readUnsignedByte();
anIntArray357[k] = 9999999;
} else if (i == 4)
aBoolean358 = true;
else if (i == 5)
anInt359 = stream.readUnsignedByte();
else if (i == 6)
anInt360 = stream.readUnsignedWord();
else if (i == 7)
anInt361 = stream.readUnsignedWord();
else if (i == 8)
anInt362 = stream.readUnsignedByte();
else if (i == 9)
anInt363 = stream.readUnsignedByte();
else if (i == 10)
anInt364 = stream.readUnsignedByte();
else if (i == 11)
anInt365 = stream.readUnsignedByte();
else if (i == 12)
stream.readDWord();
else
System.out.println("Error unrecognised seq config code: " + i);
}
if (anInt352 == 0) {
anInt352 = 1;
anIntArray353 = new int[1];
anIntArray353[0] = -1;
anIntArray354 = new int[1];
anIntArray354[0] = -1;
anIntArray355 = new int[1];
anIntArray355[0] = -1;
}
if (anInt363 == -1)
if (anIntArray357 != null)
anInt363 = 2;
else
anInt363 = 0;
if (anInt364 == -1) {
if (anIntArray357 != null) {
anInt364 = 2;
return;
}
anInt364 = 0;
}
}
Step 8: Fix the errors you get in client.java and other classes its probably renaming modelrotation1 and modelrotation2
to modelrotationY and modelrotationX But that is left for you.
If you have any questions just ask.
Step 9: Hit that juicy Thanks button and rep++ if this helped you in any way.