patchwork-mapconverter
Version:
Executable wrapper for https://github.com/ChiefOfGxBxL/WC3MapTranslator
81 lines • 6.33 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CustomScriptsTranslator = void 0;
const HexBuffer_1 = require("../wc3maptranslator/HexBuffer");
const W3Buffer_1 = require("../wc3maptranslator/W3Buffer");
class CustomScriptsTranslator {
constructor() { }
static getInstance() {
if (this.instance == null) {
this.instance = new this();
}
return this.instance;
}
static jsonToWar(json) {
return this.getInstance().jsonToWar(json);
}
static warToJson(buffer) {
return this.getInstance().warToJson(buffer);
}
// expecting first string to belong to header
jsonToWar(json) {
const outBufferToWar = new HexBuffer_1.HexBuffer();
// format version
outBufferToWar.addByte(0x04);
outBufferToWar.addByte(0x00);
outBufferToWar.addByte(0x00);
outBufferToWar.addByte(0x80);
outBufferToWar.addInt(json.headerComments.length);
for (let i = 0; i < json.headerComments.length; i++) {
outBufferToWar.addString(json.headerComments[i]);
}
for (let i = 0; i < json.scripts.length; i++) {
const script = json.scripts[i];
if (script == null || script.length === 0) {
outBufferToWar.addInt(0); // size
}
else {
const buf = Buffer.from(script, 'utf-8');
outBufferToWar.addInt(buf.length + 1); // + nul char
for (let i = 0; i < buf.length; i++) {
outBufferToWar.addByte(buf[i]);
}
outBufferToWar.addByte(0); // nul char
}
}
return {
buffer: outBufferToWar.getBuffer(),
errors: []
};
}
warToJson(buffer) {
const headerComments = [];
const scripts = [];
const outBufferToJSON = new W3Buffer_1.W3Buffer(buffer);
const formatVersion = outBufferToJSON.readInt(); // 04 00 00 80
const headerCommentsCount = outBufferToJSON.readInt(); // 01 00 00 00 Header comments count?
for (let i = 0; i < headerCommentsCount; i++) {
headerComments.push(outBufferToJSON.readString());
}
try {
do {
const lengthWithNulChar = outBufferToJSON.readInt();
if (lengthWithNulChar === 0) {
scripts.push('');
continue; // skip
}
scripts.push(outBufferToJSON.readString());
} while (true);
}
catch (e) {
// catch EOF
}
return {
json: { headerComments, scripts },
errors: []
};
}
}
exports.CustomScriptsTranslator = CustomScriptsTranslator;
CustomScriptsTranslator.instance = null;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3VzdG9tU2NyaXB0c1RyYW5zbGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHJhbnNsYXRvci9DdXN0b21TY3JpcHRzVHJhbnNsYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSw2REFBeUQ7QUFDekQsMkRBQXVEO0FBR3ZELE1BQWEsdUJBQXVCO0lBR2xDLGdCQUF3QixDQUFDO0lBRWxCLE1BQU0sQ0FBQyxXQUFXO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLEVBQUU7WUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFBO1NBQzNCO1FBQ0QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFBO0lBQ3RCLENBQUM7SUFFTSxNQUFNLENBQUMsU0FBUyxDQUFFLElBQXFEO1FBQzVFLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUMzQyxDQUFDO0lBRU0sTUFBTSxDQUFDLFNBQVMsQ0FBRSxNQUFjO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUM3QyxDQUFDO0lBRUQsNkNBQTZDO0lBQ3RDLFNBQVMsQ0FBRSxJQUFxRDtRQUNyRSxNQUFNLGNBQWMsR0FBRyxJQUFJLHFCQUFTLEVBQUUsQ0FBQTtRQUV0QyxpQkFBaUI7UUFDakIsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUM1QixjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzVCLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDNUIsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUU1QixjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDakQsS0FBSyxJ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