|
// parse_in_MarketPlaceOffers.gprog.js |
|
|
|
function parse_in_MarketPlaceOffers(packet) { |
|
var initialReadIndex = packet.getReadIndex() |
|
packet.resetReadIndex() |
|
|
|
var result = { raw: [] } |
|
|
|
result.raw.push(packet.readInteger()) |
|
|
|
result.items = [] |
|
|
|
for (var i = 0; i < result.raw[0]; i++) { |
|
var item = { raw: [ |
|
packet.readInteger(), |
|
packet.readInteger(), |
|
packet.readInteger(), |
|
packet.readInteger() |
|
] } |
|
|
|
item.offerId = item.raw[0] |
|
item.isTradable = item.raw[1] |
|
item.isTradableReadable = { |
|
1: "normal", |
|
3: "duckets_tradable", |
|
}[item.isTradable] || "unknown" |
|
item.type = item.raw[2] |
|
item.typeReadable = { |
|
1: "floor", |
|
2: "wall", |
|
3: "ltd", |
|
}[item.type] || "unknown" |
|
item.spriteId = item.raw[3] |
|
|
|
if (item.type == 1) { // floor |
|
item.raw.push(packet.readInteger()) |
|
item.subType = item.raw[item.raw.length - 1] |
|
|
|
item.subTypeReadable = { |
|
}[item.subType] || "unknown" |
|
|
|
if (item.subType == 0) { // almost everything |
|
item.raw.push(packet.readString()) |
|
} else if (item.subType == 1) { // video tv, mannequin |
|
item.customFields = {} |
|
|
|
item.raw.push(packet.readInteger()) |
|
var fieldsCount = item.raw[item.raw.length - 1] |
|
|
|
for (var j = 0; j < fieldsCount; j++) { |
|
item.raw.push( |
|
packet.readString(), |
|
packet.readString() |
|
) |
|
var fieldName = item.raw[item.raw.length - 2] |
|
var fieldValue = item.raw[item.raw.length - 1] |
|
item.customFields[fieldName] = fieldValue |
|
} |
|
} else if (item.subType == 2) { // group items, friendship locks |
|
|
|
item.raw.push(packet.readInteger()) |
|
|
|
var fieldsCount = item.raw[item.raw.length - 1] |
|
|
|
for (var j = 0; j < fieldsCount; j++) { |
|
item.raw.push(packet.readString()) |
|
} |
|
|
|
if (fieldsCount == 5) { |
|
item.group = { |
|
type: item.raw[item.raw.length - 5], |
|
id: item.raw[item.raw.length - 4], |
|
badge: item.raw[item.raw.length - 3], |
|
primaryColor: item.raw[item.raw.length - 2], |
|
secondaryColor: item.raw[item.raw.length - 1] |
|
} |
|
} else if (fieldsCount == 6) { |
|
item.firendshipLock = { |
|
idk: item.raw[item.raw.length - 6], // maybe flag that it is locked |
|
nick1: item.raw[item.raw.length - 5], |
|
nick2: item.raw[item.raw.length - 4], |
|
figureString1: item.raw[item.raw.length - 3], |
|
figureString2: item.raw[item.raw.length - 2], |
|
date: item.raw[item.raw.length - 1] |
|
} |
|
} |
|
} else if (item.subType == 5) { // Background Toner |
|
item.customValues = [] |
|
|
|
item.raw.push(packet.readInteger()) |
|
var valuesCount = item.raw[item.raw.length - 1] |
|
|
|
for (var j = 0; j < valuesCount; j++) { |
|
item.raw.push(packet.readInteger()) |
|
item.customValues.push(item.raw[item.raw.length - 1]) |
|
} |
|
} else if (item.subType == 7) { // items with health (like the cursed flame knight) |
|
item.raw.push( |
|
packet.readString(), |
|
packet.readInteger(), |
|
packet.readInteger() |
|
) |
|
} else { |
|
throw new Error("Unkonwn subtype: "+item.subType+". Sprite: "+item.offerId+" Last: "+JSON.stringify(result.items[i-1], null,2)) |
|
} |
|
} else if (item.type == 2) { // wall |
|
item.raw.push(packet.readString()) |
|
} else if (item.type == 3) { // ltd |
|
item.raw.push( |
|
packet.readInteger(), |
|
packet.readInteger() |
|
) |
|
|
|
item.ltd = { |
|
number: item.raw[item.raw.length - 2], |
|
max: item.raw[item.raw.length - 1] |
|
} |
|
} else { |
|
throw new Error("Unkonwn subtype: "+item.type+". Sprite: "+item.offerId+" Last: "+JSON.stringify(result.items[i-1], null,2)) |
|
} |
|
|
|
item.raw.push( |
|
packet.readInteger(), |
|
packet.readInteger(), |
|
packet.readInteger(), |
|
packet.readInteger() |
|
) |
|
|
|
item.price = item.raw[item.raw.length - 4] |
|
item.timeLeft = item.raw[item.raw.length - 3] |
|
item.average = item.raw[item.raw.length - 2] |
|
item.amount = item.raw[item.raw.length - 1] |
|
|
|
result.items.push(item) |
|
result.raw = result.raw.concat(item.raw) |
|
} |
|
|
|
result.raw.push(packet.readInteger()) |
|
result.totalResults = result.raw[result.raw.length - 1] |
|
|
|
packet.setReadIndex(initialReadIndex) |
|
|
|
return result |
|
} |