UNPKG

unreal.js

Version:

A pak reader for games like VALORANT & Fortnite written in Node.JS

108 lines (107 loc) 3.4 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.UStringTable = void 0; const UObject_1 = require("./UObject"); const UnrealMap_1 = require("../../../util/UnrealMap"); const collection_1 = __importDefault(require("@discordjs/collection")); /** * Represents UE4 String Table * @extends {UObject} */ class UStringTable extends UObject_1.UObject { constructor() { super(...arguments); /** * Namespace of table * @type {string} * @public */ this.tableNamespace = null; /** * Table entries * @type {UnrealMap<string, string>} * @public */ this.entries = null; /** * Keys to meta data * @type {UnrealMap<string, UnrealMap<FName, string>>} * @public */ this.keysToMetadata = null; } /** * Deserializes this * @param {FAssetArchive} Ar UE4 Asset Reader to use * @param {number} validPos End position of reader * @returns {void} * @public */ deserialize(Ar, validPos) { super.deserialize(Ar, validPos); this.tableNamespace = Ar.readString(); const len1 = Ar.readInt32(); this.entries = new collection_1.default(); for (let i = 0; i < len1; ++i) { this.entries.set(Ar.readString(), Ar.readString()); } const len2 = Ar.readInt32(); this.keysToMetadata = new collection_1.default(); for (let i = 0; i < len2; ++i) { const key = Ar.readString(); const map = new UnrealMap_1.UnrealMap(); const len3 = Ar.readInt32(); for (let x = 0; x < len3; ++x) { map.set(Ar.readFName(), Ar.readString()); } this.keysToMetadata.set(key, map); } } /** * Serialize this * @param {FAssetArchiveWriter} Ar UE4 Writer to use * @returns {void} * @public */ serialize(Ar) { super.serialize(Ar); Ar.writeString(this.tableNamespace); Ar.writeTMap(this.entries, (key, value) => { Ar.writeString(key); Ar.writeString(value); }); Ar.writeTMap(this.keysToMetadata, (key, value) => { Ar.writeString(key); Ar.writeTMap(value, (metaKey, metaValue) => { Ar.writeFName(metaKey); Ar.writeString(metaValue); }); }); } /** * Turns this into json * @param {Locres} locres Locres to use * @returns {any} Json * @public */ toJson(locres = null) { const obj = {}; obj["tableNamespace"] = this.tableNamespace; obj["entries"] = {}; obj["keysToMetadata"] = {}; this.entries.forEach((v, k) => { obj["entries"][k] = v; }); this.keysToMetadata.forEach((v, k) => { obj["keysToMetadata"][k] = {}; v.forEach((v2, k2) => { obj["keysToMetadata"][k][k2.toString()] = v2; }); }); return obj; } } exports.UStringTable = UStringTable;