From 39dcab060038058a5c22d689fdf8e62597da6eb9 Mon Sep 17 00:00:00 2001 From: Bill Date: Thu, 12 Aug 2021 03:13:57 -0400 Subject: [PATCH] More updates --- src/converters/effect/EffectConverter.ts | 11 +++++++- src/converters/figure/FigureConverter.ts | 11 +++++++- .../furniture/FurnitureConverter.ts | 13 +++++++-- src/converters/pet/PetConverter.ts | 13 +++++++-- src/converters/pet/PetDownloader.ts | 6 ++-- src/swf-reader/index.js | 28 ++++++++++--------- src/swf/HabboAssetSWF.ts | 3 ++ 7 files changed, 63 insertions(+), 22 deletions(-) diff --git a/src/converters/effect/EffectConverter.ts b/src/converters/effect/EffectConverter.ts index 2f9a07d..68cd92f 100644 --- a/src/converters/effect/EffectConverter.ts +++ b/src/converters/effect/EffectConverter.ts @@ -36,10 +36,19 @@ export class EffectConverter extends SWFConverter { await this._effectDownloader.download(directory, async (habboAssetSwf: HabboAssetSWF, className: string) => { - spinner.text = 'Parsing Effect: ' + habboAssetSwf.getDocumentClass(); + if(!habboAssetSwf) + { + spinner.text = 'Couldnt convert effect: ' + className; + } + else + { + spinner.text = 'Parsing Effect: ' + habboAssetSwf.getDocumentClass(); + } spinner.render(); + if(!habboAssetSwf) return; + const spriteBundle = await this._bundleProvider.generateSpriteSheet(habboAssetSwf); const assetData = await this.mapXML2JSON(habboAssetSwf, className); diff --git a/src/converters/figure/FigureConverter.ts b/src/converters/figure/FigureConverter.ts index ada1123..4e02bbb 100644 --- a/src/converters/figure/FigureConverter.ts +++ b/src/converters/figure/FigureConverter.ts @@ -36,10 +36,19 @@ export class FigureConverter extends SWFConverter { await this._figureDownloader.download(directory, async (habboAssetSwf: HabboAssetSWF, className: string) => { - spinner.text = 'Parsing Figure: ' + habboAssetSwf.getDocumentClass(); + if(!habboAssetSwf) + { + spinner.text = 'Couldnt convert figure: ' + className; + } + else + { + spinner.text = 'Parsing Figure: ' + habboAssetSwf.getDocumentClass(); + } spinner.render(); + if(!habboAssetSwf) return; + const spriteBundle = await this._bundleProvider.generateSpriteSheet(habboAssetSwf); const assetData = await this.mapXML2JSON(habboAssetSwf, className); diff --git a/src/converters/furniture/FurnitureConverter.ts b/src/converters/furniture/FurnitureConverter.ts index 347cd99..d933051 100644 --- a/src/converters/furniture/FurnitureConverter.ts +++ b/src/converters/furniture/FurnitureConverter.ts @@ -36,12 +36,21 @@ export class FurnitureConverter extends SWFConverter try { - await this._furniDownloader.download(directory, async (habboAssetSwf: HabboAssetSWF) => + await this._furniDownloader.download(directory, async (habboAssetSwf: HabboAssetSWF, className: string) => { - spinner.text = (`Parsing Furniture: ${ habboAssetSwf.getDocumentClass() } (${ (this._furniDownloader.totalFinished + 1) } / ${ this._furniDownloader.totalItems })`); + if(!habboAssetSwf) + { + spinner.text = 'Couldnt convert furni: ' + className; + } + else + { + spinner.text = (`Parsing Furniture: ${ habboAssetSwf.getDocumentClass() } (${ (this._furniDownloader.totalFinished + 1) } / ${ this._furniDownloader.totalItems })`); + } spinner.render(); + if(!habboAssetSwf) return; + const spriteBundle = await this._bundleProvider.generateSpriteSheet(habboAssetSwf); const assetData = await this.mapXML2JSON(habboAssetSwf, 'furniture'); diff --git a/src/converters/pet/PetConverter.ts b/src/converters/pet/PetConverter.ts index 654c37f..7a9398d 100644 --- a/src/converters/pet/PetConverter.ts +++ b/src/converters/pet/PetConverter.ts @@ -34,12 +34,21 @@ export class PetConverter extends SWFConverter try { - await this._petDownloader.download(directory, async (habboAssetSwf: HabboAssetSWF) => + await this._petDownloader.download(directory, async (habboAssetSwf: HabboAssetSWF, className: string) => { - spinner.text = 'Parsing Pet: ' + habboAssetSwf.getDocumentClass(); + if(!habboAssetSwf) + { + spinner.text = 'Couldnt convert pet: ' + className; + } + else + { + spinner.text = 'Parsing Pet: ' + habboAssetSwf.getDocumentClass(); + } spinner.render(); + if(!habboAssetSwf) return; + const spriteBundle = await this._bundleProvider.generateSpriteSheet(habboAssetSwf); const assetData = await this.mapXML2JSON(habboAssetSwf, 'pet'); diff --git a/src/converters/pet/PetDownloader.ts b/src/converters/pet/PetDownloader.ts index c4492a0..2ce9e5f 100644 --- a/src/converters/pet/PetDownloader.ts +++ b/src/converters/pet/PetDownloader.ts @@ -13,7 +13,7 @@ export class PetDownloader private readonly _logger: Logger) {} - public async download(directory: File, callback: (habboAssetSwf: HabboAssetSWF) => Promise): Promise + public async download(directory: File, callback: (habboAssetSwf: HabboAssetSWF, className: string) => Promise): Promise { const petTypes = await this.parsePetTypes(); @@ -62,7 +62,7 @@ export class PetDownloader return petTypes; } - public async extractPet(className: string, callback: (habboAssetSwf: HabboAssetSWF) => Promise): Promise + public async extractPet(className: string, callback: (habboAssetSwf: HabboAssetSWF, className: string) => Promise): Promise { let url = this._configuration.getValue('dynamic.download.pet.url'); @@ -78,6 +78,6 @@ export class PetDownloader await newHabboAssetSWF.setupAsync(); - await callback(newHabboAssetSWF); + await callback(newHabboAssetSWF, className); } } diff --git a/src/swf-reader/index.js b/src/swf-reader/index.js index 9432d89..dec4365 100644 --- a/src/swf-reader/index.js +++ b/src/swf-reader/index.js @@ -294,6 +294,8 @@ function readSWFTags(buff, swf) */ function readSWFBuff(buff, compressed_buff, next) { + if(!buff) return next(null, null); + buff.seek(3);// start if(buff.length < 9) @@ -359,28 +361,26 @@ function uncompress(swf, next) { uncompressed_buff = concatSWFHeader(zlib.unzipSync(compressed_buff), swf); - if(!Buffer.isBuffer(uncompressed_buff)) - { - console.log('invalid_buffer'); + if(!Buffer.isBuffer(uncompressed_buff)) return null; - return null; - } return readSWFBuff(new SWFBuffer(uncompressed_buff), swf); } - if(!Buffer.isBuffer(compressed_buff)) - { - console.log('invalid_buffer'); - - return null; - } - zlib.inflate(compressed_buff, function(err, buf) { - readSWFBuff(new SWFBuffer(buf), swf, next); + if(!Buffer.isBuffer(compressed_buff)) + { + readSWFBuff(null, swf, next); + } + else + { + readSWFBuff(new SWFBuffer(buf), swf, next); + } }); break; case 0x46 : // uncompressed + if(!Buffer.isBuffer(swf)) return null; + return readSWFBuff(new SWFBuffer( swf ), swf, next); case 0x5a : // LZMA compressed var lzmaProperties = compressed_buff.slice(4, 9); @@ -421,6 +421,8 @@ function uncompress(swf, next) lzma.decompress(lzmaProperties, input_stream, output_stream, -1); uncompressed_buff = Buffer.concat([swf.slice(0, 8), output_stream.getBuffer()]); + if(!Buffer.isBuffer(uncompressed_buff)) return null; + return readSWFBuff(new SWFBuffer(uncompressed_buff), swf, next); default : e = new Error('Unknown SWF compressions'); diff --git a/src/swf/HabboAssetSWF.ts b/src/swf/HabboAssetSWF.ts index 875ba14..8232af6 100644 --- a/src/swf/HabboAssetSWF.ts +++ b/src/swf/HabboAssetSWF.ts @@ -21,6 +21,9 @@ export class HabboAssetSWF async setupAsync() { const swf = await readSwfAsync(this._data); + + if(!swf) return; + for(const tag of swf.tags) {