UNPKG

mudlet-map-binary-reader

Version:

Reads Mudlet's map binary file (v20 only!). Can output .js files needed for Mudlet Map Reader. Mudlet map JSON format is yet unsupported.

78 lines (71 loc) 2.48 kB
const { QClass, QInt, QUserType } = require("qtdatastream/src/types"); class MudletLabels extends QClass { static read(buffer) { let areasWithLabelsTotal = QInt.read(buffer); let labels = {}; for (let index = 0; index < areasWithLabelsTotal; index++) { let totalLabels = QInt.read(buffer); let areaId = QInt.read(buffer); labels[areaId] = []; for (let index = 0; index < totalLabels; index++) { labels[areaId].push(QUserType.get("MudletLabel").read(buffer)); } } return labels; } toBuffer() { let buffers = []; buffers.push(QInt.from(Object.keys(this.__obj).length).toBuffer()); Object.keys(this.__obj).forEach((key) => { buffers.push(QInt.from(this.__obj[key].length).toBuffer()); buffers.push(QInt.from(key).toBuffer()); this.__obj[key].forEach((label) => { buffers.push(QUserType.get("MudletLabel").from(label).toBuffer(true)); }); }); return Buffer.concat(buffers); } } class MudletAreas extends QClass { static read(buffer) { let areas = {}; let areaSize = QInt.read(buffer); for (let index = 0; index < areaSize; index++) { let id = QInt.read(buffer); areas[id] = QUserType.get("MudletArea").read(buffer); } return areas; } toBuffer() { let buffers = []; buffers.push(QInt.from(Object.keys(this.__obj).length).toBuffer()); for (const [key, area] of Object.entries(this.__obj).sort((a,b) => a[0] - b[0])) { buffers.push(QInt.from(key).toBuffer()); buffers.push(QUserType.get("MudletArea").from(area).toBuffer(true)); } return Buffer.concat(buffers); } } class MudletRooms extends QClass { static read(buffer) { let rooms = {}; while (buffer.buffer.length > buffer.read_offset) { let id = QInt.read(buffer); rooms[id] = QUserType.get("MudletRoom").read(buffer); } return rooms; } toBuffer() { let buffers = []; for (const [key, room] of Object.entries(this.__obj).reverse()) { buffers.push(QInt.from(key).toBuffer()); buffers.push(QUserType.get("MudletRoom").from(room).toBuffer(true)); } return Buffer.concat(buffers); } } module.exports = { MudletAreas, MudletLabels, MudletRooms }