UNPKG

discord-mudlet-map

Version:

This little library helps with Discord bot configuration to provide small Mudlet map fragment images with given location.

52 lines 1.91 kB
import fs from "fs"; import path from "path"; import { MudletMapReader } from "mudlet-map-binary-reader"; import { MapReader } from "mudlet-map-renderer"; const downloadDir = "downloads"; function ensureDirectoryExists(dirPath) { return new Promise((resolve, reject) => { fs.access(dirPath, (err) => { if (err) { fs.mkdir(dirPath, { recursive: true }, (mkErr) => { if (mkErr) reject(mkErr); else resolve(); }); } else { resolve(); } }); }); } export async function prepareMap(key, provider) { const dir = path.join(downloadDir, key); await ensureDirectoryExists(dir); await provider(fs.createWriteStream(path.join(dir, "map.dat"))); const map = MudletMapReader.read(path.join(dir, "map.dat")); const { mapData, colors } = MudletMapReader.export(map, `${dir}/`); // mudlet-map-binary-reader drops fields the renderer reads (area/x/y/z, // doors, weight, stubs). Merge them back from the raw map model. for (const area of mapData) { const areaId = parseInt(area.areaId, 10); for (const room of area.rooms) { const source = map.rooms[room.id]; if (!source) continue; const target = room; target.area = areaId; target.x = source.x; target.y = source.y; target.z = source.z; target.doors = source.doors ?? {}; target.weight = source.weight; target.stubs = source.stubs ?? []; target.exitWeights = source.exitWeights ?? {}; target.name = source.name; target.userData = source.userData ?? {}; } } return new MapReader(mapData, colors); } //# sourceMappingURL=prepare-map.js.map