UNPKG

@abextm/cache2

Version:

Utilities for reading OSRS "caches"

264 lines (263 loc) 8.07 kB
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; } }