/**
* @class ItemDefinition
* @category Definitions
* @hideconstructor
*/
export class ItemDefinition {
/**
* The ID of this Object
* @type {number}
*/
id;
unknown1;
resizeX = 128;
resizeY = 128;
resizeZ = 128;
/**
* Used for 2d item rendering in inventories
* @type {number}
*/
xan2d = 0;
/**
* Used for 2d item rendering in inventories
* @type {number}
*/
yan2d = 0;
/**
* Used for 2d item rendering in inventories
* @type {number}
*/
zan2d = 0;
cost = 1;
/** @type {boolean} */
isTradeable;
/** @type {number} */
stackable = 0;
/** @type {number} */
inventoryModel;
/** @type {number} */
wearPos1;
/** @type {number} */
wearPos2;
/** @type {number} */
wearPos3;
/** @type {boolean} */
members = false;
/** @type {Array} */
colorFind;
/** @type {Array} */
colorReplace;
/** @type {Array} */
textureFind;
/** @type {Array} */
textureReplace;
/** @type {number} */
zoom2d = 2000;
/** @type {number} */
xOffset2d = 0;
/** @type {number} */
yOffset2d = 0;
/**
* Number from 0 to 255. Overrides Item model's ambient lighting
* @type {Byte}
*/
ambient;
/**
* Number from 0 to 255. Overrides Item model's contrast
* @type {Byte}
*/
contrast;
/** @type {Array} */
countCo;
/** @type {Array} */
countObj;
/** @type {Array<string>} */
options = [null, null, "Take", null, null];
/** @type {Array<string>} */
interfaceOptions = [null, null, null, null, "Drop"];
/** @type {number} */
maleModel0 = -1;
/** @type {number} */
maleModel1 = -1;
/** @type {number} */
maleModel2 = -1;
/** @type {number} */
maleOffset;
/** @type {number} */
maleHeadModel = -1;
/** @type {number} */
maleHeadModel2 = -1;
/** @type {number} */
femaleModel0 = -1;
/** @type {number} */
femaleModel1 = -1;
/** @type {number} */
femaleModel2 = -1;
/** @type {number} */
femaleOffset;
/** @type {number} */
femaleHeadModel = -1;
/** @type {number} */
femaleHeadModel2 = 1;
/** @type {number} */
category;
/** @type {number} */
notedID = -1;
/** @type {number} */
notedTemplate = -1;
/** @type {number} */
team;
/** @type {number} */
weight;
/** @type {number} */
shiftClickDropIndex = -2;
/** @type {number} */
boughtId = -1;
/** @type {number} */
boughtTemplateId = -1;
/** @type {number} */
placeholderId = -1;
/** @type {number} */
placeholderTemplateId = -1;
/** @type {Object} */
params;
}
export default class ItemLoader {
load(bytes, id) {
//console.log(id, bytes)
let def = new ItemDefinition();
def.id = id;
let dataview = new DataView(bytes.buffer);
let lastOpCode = 0;
do {
var opcode = dataview.readUint8();
this.handleOpcode(def, opcode, dataview, lastOpCode);
lastOpCode = opcode;
} while (opcode != 0);
if (def.stackable == 1)
{
def.weight = 0;
}
return def;
}
handleOpcode(def, opcode, dataview, lastOpCode) {
if (opcode == 1) {
def.inventoryModel = dataview.readUint16();
}
else if (opcode == 2) {
def.name = dataview.readString();
}
else if (opcode == 4) {
def.zoom2d = dataview.readUint16();
}
else if (opcode == 5) {
def.xan2d = dataview.readUint16();
}
else if (opcode == 6) {
def.yan2d = dataview.readUint16();
}
else if (opcode == 7) {
def.xOffset2d = dataview.readUint16();
if (def.xOffset2d > 32767) {
def.xOffset2d -= 65536;
}
}
else if (opcode == 8) {
def.yOffset2d = dataview.readUint16();
if (def.yOffset2d > 32767) {
def.yOffset2d -= 65536;
}
}
else if (opcode == 9) {
def.unknown1 = dataview.readString();
}
else if (opcode == 11) {
def.stackable = 1;
}
else if (opcode == 12) {
def.cost = dataview.readInt32();
}
else if (opcode == 13)
{
def.wearPos1 = dataview.readInt8();
}
else if (opcode == 14)
{
def.wearPos2 = dataview.readInt8();
}
else if (opcode == 16) {
def.members = true;
}
else if (opcode == 23) {
def.maleModel0 = dataview.readUint16();
def.maleOffset = dataview.readUint8();
}
else if (opcode == 24) {
def.maleModel1 = dataview.readUint16();
}
else if (opcode == 25) {
def.femaleModel0 = dataview.readUint16();
def.femaleOffset = dataview.readUint8();
}
else if (opcode == 26) {
def.femaleModel1 = dataview.readUint16();
}
else if (opcode == 27)
{
def.wearPos3 = dataview.readInt8();
}
else if (opcode >= 30 && opcode < 35) {
if (def.options == undefined)
def.options = [];
def.options[opcode - 30] = dataview.readString();
if (def.options[opcode - 30] == "Hidden") {
def.options[opcode - 30] = null;
}
}
else if (opcode >= 35 && opcode < 40) {
if (def.interfaceOptions == undefined)
def.interfaceOptions = [];
def.interfaceOptions[opcode - 35] = dataview.readString();
}
else if (opcode == 40) {
var var5 = dataview.readUint8();
def.colorFind = [];
def.colorReplace = [];
for (var var4 = 0; var4 < var5; ++var4) {
def.colorFind[var4] = dataview.readUint16();
def.colorReplace[var4] = dataview.readUint16();
}
}
else if (opcode == 41) {
var var5 = dataview.readUint8();
def.textureFind = [];
def.textureReplace = [];
for (var var4 = 0; var4 < var5; ++var4) {
def.textureFind[var4] = dataview.readUint16();
def.textureReplace[var4] = dataview.readUint16();
}
}
else if (opcode == 42) {
def.shiftClickDropIndex = dataview.readInt8();
}
else if (opcode == 65) {
def.isTradeable = true;
}
else if (opcode == 75)
{
def.weight = dataview.readInt16();
}
else if (opcode == 78) {
def.maleModel2 = dataview.readUint16();
}
else if (opcode == 79) {
def.femaleModel2 = dataview.readUint16();
}
else if (opcode == 90) {
def.maleHeadModel = dataview.readUint16();
}
else if (opcode == 91) {
def.femaleHeadModel = dataview.readUint16();
}
else if (opcode == 92) {
def.maleHeadModel2 = dataview.readUint16();
}
else if (opcode == 93) {
def.femaleHeadModel2 = dataview.readUint16();
}
else if (opcode == 94) {
def.category = dataview.readUint16();
}
else if (opcode == 95) {
def.zan2d = dataview.readUint16();
}
else if (opcode == 97) {
def.notedID = dataview.readUint16();
}
else if (opcode == 98) {
def.notedTemplate = dataview.readUint16();
}
else if (opcode >= 100 && opcode < 110) {
if (def.countObj == undefined) {
def.countObj = [];
def.countCo = [];
}
def.countObj[opcode - 100] = dataview.readUint16();
def.countCo[opcode - 100] = dataview.readUint16();
}
else if (opcode == 110) {
def.resizeX = dataview.readUint16();
}
else if (opcode == 111) {
def.resizeY = dataview.readUint16();
}
else if (opcode == 112) {
def.resizeZ = dataview.readUint16();
}
else if (opcode == 113) {
def.ambient = dataview.readInt8();
}
else if (opcode == 114) {
def.contrast = dataview.readInt8();
}
else if (opcode == 115) {
def.team = dataview.readUint8();
}
else if (opcode == 139) {
def.boughtId = dataview.readUint16();
}
else if (opcode == 140) {
def.boughtTemplateId = dataview.readUint16();
}
else if (opcode == 148) {
def.placeholderId = dataview.readUint16();
}
else if (opcode == 149) {
def.placeholderTemplateId = dataview.readUint16();
}
else if (opcode == 249) {
var length = dataview.readUint8();
def.params = {};
for (var i = 0; i < length; i++) {
var isString = dataview.readUint8() == 1;
var key = dataview.readInt24();
var value;
if (isString) {
value = dataview.readString();
}
else {
value = dataview.readInt32()
}
def.params[key] = value;
}
}else{
//console.error("UNHANDLED OPCODE [ItemLoader]: " + opcode + " last: " + lastOpCode)
}
}
}
Source