@abextm/cache2
Version:
Utilities for reading OSRS "caches"
264 lines (263 loc) • 8.07 kB
JavaScript
import { PerFileLoadable } from "../Loadable.js";
import { Typed } from "../reflect.js";
import { Params } from "../types.js";
export class Item extends PerFileLoadable {
id;
constructor(id) {
super();
this.id = id;
}
static index = 2;
static archive = 10;
static gameval = 0;
inventoryModel = -1;
name = "null";
examine = null;
zoom2d = 2000;
xan2d = 0;
yan2d = 0;
offsetX2d = 0;
offsetY2d = 0;
isStackable = false;
price = 1;
isMembers = false;
wearpos1 = -1;
wearpos2 = -1;
wearpos3 = -1;
weight = 0;
maleModel = -1;
maleOffset = 0;
maleModel1 = -1;
femaleModel = -1;
femaleOffset = 0;
femaleModel1 = -1;
groundActions = [null, null, "Take", null, null];
inventoryActions = [null, null, null, null, "Drop"];
subops = [];
recolorFrom = [];
recolorTo = [];
retextureFrom = [];
retextureTo = [];
shiftClickIndex = -2;
isGrandExchangable = false;
maleModel2 = -1;
femaleModel2 = -1;
maleChatheadModel = -1;
femaleChatheadModel = -1;
maleChatheadModel2 = -1;
femaleChatheadModel2 = -1;
category = -1;
zan2d = 0;
noteLinkedItem = -1;
noteTemplate = -1;
stackVariantItems = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
stackVariantQuantities = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
resizeX = 128;
resizeY = 128;
resizeZ = 128;
ambient = 0;
contrast = 0;
team = 0;
noted2 = -1;
noted3 = -1;
placeholderLinkedItem = -1;
placeholderTemplate = -1;
params = new Params();
static decode(r, id) {
const v = new Item(id);
for (let opcode; (opcode = r.u8()) != 0;) {
switch (opcode) {
case 1:
v.inventoryModel = r.u16();
break;
case 2:
v.name = r.string();
break;
case 3:
v.examine = r.string();
break;
case 4:
v.zoom2d = r.u16();
break;
case 5:
v.xan2d = r.u16();
break;
case 6:
v.yan2d = r.u16();
break;
case 7:
v.offsetX2d = r.i16();
break;
case 8:
v.offsetY2d = r.i16();
break;
case 11:
v.isStackable = true;
break;
case 12:
v.price = r.i32();
break;
case 13:
v.wearpos1 = r.u8();
break;
case 14:
v.wearpos2 = r.u8();
break;
case 16:
v.isMembers = true;
break;
case 23:
v.maleModel = r.u16();
v.maleOffset = r.u8();
break;
case 24:
v.maleModel1 = r.u16();
break;
case 25:
v.femaleModel = r.u16();
v.femaleOffset = r.u8();
break;
case 26:
v.femaleModel1 = r.u16();
break;
case 27:
v.wearpos3 = r.u8();
break;
case 30:
case 31:
case 32:
case 33:
case 34:
v.groundActions[opcode - 30] = r.stringNullHidden();
break;
case 35:
case 36:
case 37:
case 38:
case 39:
v.inventoryActions[opcode - 35] = r.string();
break;
case 40: {
let len = r.u8();
v.recolorFrom = new Array(len);
v.recolorTo = new Array(len);
for (let i = 0; i < len; i++) {
v.recolorFrom[i] = r.u16();
v.recolorTo[i] = r.u16();
}
break;
}
case 41: {
let len = r.u8();
v.retextureFrom = new Array(len);
v.retextureTo = new Array(len);
for (let i = 0; i < len; i++) {
v.retextureFrom[i] = r.u16();
v.retextureTo[i] = r.u16();
}
break;
}
case 42:
v.shiftClickIndex = r.i8();
break;
case 43: {
let index = r.u8();
let subop = v.subops[index] ??= [];
for (;;) {
let subindex = r.u8() - 1;
if (subindex < 0) {
break;
}
subop[subindex] = r.string();
}
break;
}
case 65:
v.isGrandExchangable = true;
break;
case 75:
v.weight = r.i16();
break;
case 78:
v.maleModel2 = r.u16();
break;
case 79:
v.femaleModel2 = r.u16();
break;
case 90:
v.maleChatheadModel = r.u16();
break;
case 91:
v.femaleChatheadModel = r.u16();
break;
case 92:
v.maleChatheadModel2 = r.u16();
break;
case 93:
v.femaleChatheadModel2 = r.u16();
break;
case 94:
v.category = r.u16();
break;
case 95:
v.zan2d = r.u16();
break;
case 97:
v.noteLinkedItem = r.u16();
break;
case 98:
v.noteTemplate = r.u16();
break;
case 100:
case 101:
case 102:
case 103:
case 104:
case 105:
case 106:
case 107:
case 108:
case 109:
v.stackVariantItems[opcode - 100] = r.u16();
v.stackVariantQuantities[opcode - 100] = r.u16();
break;
case 110:
v.resizeX = r.u16();
break;
case 111:
v.resizeY = r.u16();
break;
case 112:
v.resizeZ = r.u16();
break;
case 113:
v.ambient = r.i8();
break;
case 114:
v.contrast = r.i8();
break;
case 115:
v.team = r.i8();
break;
case 139:
v.noted2 = r.u16();
break;
case 140:
v.noted3 = r.u16();
break;
case 148:
v.placeholderLinkedItem = r.u16();
break;
case 149:
v.placeholderTemplate = r.u16();
break;
case 249:
v.params = r.params();
break;
default:
throw new Error(`unknown opcode ${opcode}`);
}
}
return v;
}
}