Originally Posted by
Fozzey
It triggers when i open up the smithing interface to turn bars into items.
Ur item decoding method is off anyways. Did u renecently pack new data?
Decoding:
Code:
public static void init(Archive archive) {
data_buffer = new Buffer(archive.get("obj.dat"));
Buffer index_buffer = new Buffer(archive.get("obj.idx"));
length = index_buffer.readUShort();
pos = new int[length];
int offset = 2;
for (int index = 0; index < length; index++) {
pos[index] = offset;
offset += index_buffer.readUShort();
}
cache = new ItemDefinition[10];
for (int index = 0; index < 10; index++) {
cache[index] = new ItemDefinition();
}
}
private void decode(Buffer buffer) {
while (true) {
int opcode = buffer.readUnsignedByte();
if (opcode == 0)
return;
if (opcode == 1)
inventoryModel = buffer.readUShort();
else if (opcode == 2)
name = buffer.readString();
else if (opcode == 3)
description = buffer.readString();
else if (opcode == 4)
zoom2d = buffer.readUShort();
else if (opcode == 5)
xan2d = buffer.readUShort();
else if (opcode == 6)
yan2d = buffer.readUShort();
else if (opcode == 7) {
xOffset2d = buffer.readUShort();
if (xOffset2d > 32767)
xOffset2d -= 65536;
} else if (opcode == 8) {
yOffset2d = buffer.readUShort();
if (yOffset2d > 32767)
yOffset2d -= 65536;
} else if (opcode == 9) {
unknown1 = buffer.readString();
} else if (opcode == 11)
stackable = 1;
else if (opcode == 12)
cost = buffer.readInt();
else if (opcode == 16)
members = true;
else if (opcode == 23) {
maleModel = buffer.readUShort();
maleOffset = buffer.readSignedByte();
} else if (opcode == 24)
maleModel1 = buffer.readUShort();
else if (opcode == 25) {
femaleModel = buffer.readUShort();
femaleOffset = buffer.readSignedByte();
} else if (opcode == 26)
femaleModel1 = buffer.readUShort();
else if (opcode >= 30 && opcode < 35) {
if (groundActions == null)
groundActions = new String[5];
groundActions[opcode - 30] = buffer.readString();
if (groundActions[opcode - 30].equalsIgnoreCase("hidden"))
groundActions[opcode - 30] = null;
} else if (opcode >= 35 && opcode < 40) {
if (inventoryActions == null)
inventoryActions = new String[5];
inventoryActions[opcode - 35] = buffer.readString();
} else if (opcode == 40) {
int length = buffer.readUnsignedByte();
recolorFrom = new short[length];
recolorTo = new short[length];
for (int index = 0; index < length; index++) {
recolorTo[index] = (short) buffer.readUShort();
recolorFrom[index] = (short) buffer.readUShort();
}
} else if (opcode == 41) {
int length = buffer.readUnsignedByte();
retextureFrom = new short[length];
retextureTo = new short[length];
for (int index = 0; index < length; index++) {
retextureFrom[index] = (short) buffer.readUShort();
retextureTo[index] = (short) buffer.readUShort();
}
} else if (opcode == 42) {
shiftClickIndex = buffer.readUnsignedByte();
} else if (opcode == 65) {
isTradable = true;
} else if (opcode == 78)
maleModel2 = buffer.readUShort();
else if (opcode == 79)
femaleModel2 = buffer.readUShort();
else if (opcode == 90)
maleHeadModel = buffer.readUShort();
else if (opcode == 91)
femaleHeadModel = buffer.readUShort();
else if (opcode == 92)
maleHeadModel2 = buffer.readUShort();
else if (opcode == 93)
femaleHeadModel2 = buffer.readUShort();
else if (opcode == 94)
category = buffer.readUShort();
else if (opcode == 95)
zan2d = buffer.readUShort();
else if (opcode == 97)
note = buffer.readUShort();
else if (opcode == 98)
notedTemplate = buffer.readUShort();
else if (opcode >= 100 && opcode < 110) {
if (countobj == null) {
countobj = new int[10];
countco = new int[10];
}
countobj[opcode - 100] = buffer.readUShort();
countco[opcode - 100] = buffer.readUShort();
} else if (opcode == 110)
resizeX = buffer.readUShort();
else if (opcode == 111)
resizeY = buffer.readUShort();
else if (opcode == 112)
resizeZ = buffer.readUShort();
else if (opcode == 113)
ambient = buffer.readSignedByte();
else if (opcode == 114)
contrast = buffer.readSignedByte();
else if (opcode == 115)
team = buffer.readUnsignedByte();
else if (opcode == 139)
bought_id = buffer.readUShort();
else if (opcode == 140)
bought_template_id = buffer.readUShort();
else if (opcode == 148)
placeholder = buffer.readUShort();
else if (opcode == 149) {
placeholderTemplate = buffer.readUShort();
} else if (opcode == 249) {
int length = buffer.readUnsignedByte();
params = new HashMap<>(length);
for (int i = 0; i < length; i++) {
boolean isString = buffer.readUnsignedByte() == 1;
int key = buffer.read24Int();
Object value;
if (isString) {
value = buffer.readString();
} else {
value = buffer.readInt();
}
params.put(key, value);
}
} else {
System.err.printf("Error unrecognised {Items} opcode: %d%n%n", opcode);
}
}
}