unreal.js
Version:
A pak reader for games like VALORANT & Fortnite written in Node.JS
89 lines (88 loc) • 3.39 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.FExportArchive = void 0;
const FAssetArchive_1 = require("./FAssetArchive");
const PayloadType_1 = require("../util/PayloadType");
const Exceptions_1 = require("../../../exceptions/Exceptions");
const IoDispatcher_1 = require("../../io/IoDispatcher");
const Config_1 = require("../../../Config");
const Game_1 = require("../../versions/Game");
/**
* UE4 Export Reader
* @extends {FAssetArchive}
*/
class FExportArchive extends FAssetArchive_1.FAssetArchive {
/**
* Creates an instance
* @param {Buffer} data Buffer to read
* @param {UObject} obj UObject of this reader
* @param {IoPackage}pkg I/O Package of this reader
* @constructor
* @public
*/
constructor(data, obj, pkg) {
super(data, pkg.provider, pkg.fileName);
this.data = data;
this.obj = obj;
this.pkg = pkg;
this.versions = pkg.versions;
this.owner = pkg;
}
/**
* Gets payload
* @param {PayloadType} type Type of payload to get
* @returns {FAssetArchive} Reader
* @public
*/
getPayload(type) {
if (this.provider == null)
throw new Exceptions_1.ParserException(`Lazy loading a ${Object.keys(PayloadType_1.PayloadType)[type]} requires a file provider`);
let ioChunkType;
if (this.game >= Game_1.Game.GAME_UE5_BASE) {
if (type === PayloadType_1.PayloadType.UBULK)
ioChunkType = IoDispatcher_1.EIoChunkType5.BulkData;
else if (type === PayloadType_1.PayloadType.M_UBULK)
ioChunkType = IoDispatcher_1.EIoChunkType5.MemoryMappedBulkData;
else if (type === PayloadType_1.PayloadType.UPTNL)
ioChunkType = IoDispatcher_1.EIoChunkType5.OptionalBulkData;
}
else {
if (type === PayloadType_1.PayloadType.UBULK)
ioChunkType = IoDispatcher_1.EIoChunkType.BulkData;
else if (type === PayloadType_1.PayloadType.M_UBULK)
ioChunkType = IoDispatcher_1.EIoChunkType.MemoryMappedBulkData;
else if (type === PayloadType_1.PayloadType.UPTNL)
ioChunkType = IoDispatcher_1.EIoChunkType.OptionalBulkData;
}
const payloadChunkId = IoDispatcher_1.createIoChunkId(this.pkg.packageId, 0, ioChunkType);
let ioBuffer;
try {
ioBuffer = this.provider.saveChunk(payloadChunkId);
}
catch {
ioBuffer = Buffer.alloc(0);
}
return new FAssetArchive_1.FAssetArchive(ioBuffer, this.provider, this.pkgName);
}
/**
* Checks a dummy name
* @param {string} dummyName Name to check
* @returns {void}
* @public
*/
checkDummyName(dummyName) {
if (Config_1.Config.GExportArchiveCheckDummyName && !(dummyName in this.pkg.nameMap.nameEntries)) {
console.warn(`${dummyName} is not in the package name map. There must be something wrong.`);
}
}
/**
* Returns FExportArchive info for error
* @returns {string}
* @public
*/
printError() {
return super.printError()
.replace("FAssetArchive", "FExportArchive");
}
}
exports.FExportArchive = FExportArchive;