From 5aa7ca1077ecab7cb9e6cfd21ad381485a92e2b9 Mon Sep 17 00:00:00 2001 From: duckietm Date: Fri, 27 Mar 2026 09:32:06 +0100 Subject: [PATCH 1/5] =?UTF-8?q?=F0=9F=94=88=20Fix:=20avatar=20now=20also?= =?UTF-8?q?=20speaks=20&=20refactor=20with=20meaningful=20names?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/avatar/src/AvatarStructure.ts | 479 +++++++++++++------------ 1 file changed, 244 insertions(+), 235 deletions(-) diff --git a/packages/avatar/src/AvatarStructure.ts b/packages/avatar/src/AvatarStructure.ts index a1772b7..d3fff55 100644 --- a/packages/avatar/src/AvatarStructure.ts +++ b/packages/avatar/src/AvatarStructure.ts @@ -37,18 +37,18 @@ export class AvatarStructure } - public initGeometry(k: any): void + public initGeometry(data: any): void { - if(!k) return; + if(!data) return; - this._geometry = new AvatarModelGeometry(k); + this._geometry = new AvatarModelGeometry(data); } - public initActions(k: IAssetManager, _arg_2: any): void + public initActions(assets: IAssetManager, data: any): void { - if(!_arg_2) return; + if(!data) return; - this._actionManager = new AvatarActionManager(k, _arg_2); + this._actionManager = new AvatarActionManager(assets, data); this._defaultAction = this._actionManager.getDefaultAction(); } @@ -59,11 +59,11 @@ export class AvatarStructure this._defaultAction = this._actionManager.getDefaultAction(); } - public initPartSets(k: any): boolean + public initPartSets(data: any): boolean { - if(!k) return false; + if(!data) return false; - if(this._partSetsData.parse(k)) + if(this._partSetsData.parse(data)) { this._partSetsData.getPartDefinition('ri').appendToFigure = true; this._partSetsData.getPartDefinition('li').appendToFigure = true; @@ -74,18 +74,18 @@ export class AvatarStructure return false; } - public initAnimation(k: any): boolean + public initAnimation(data: any): boolean { - if(!k) return false; + if(!data) return false; - return this._animationData.parse(k); + return this._animationData.parse(data); } - public initFigureData(k: IFigureData): boolean + public initFigureData(data: IFigureData): boolean { - if(!k) return false; + if(!data) return false; - return this._figureData.parse(k); + return this._figureData.parse(data); } public injectFigureData(data: IFigureData): void @@ -93,13 +93,13 @@ export class AvatarStructure this._figureData.injectJSON(data); } - public registerAnimations(k: IAssetManager, _arg_2: string = 'fx', _arg_3: number = 200): void + public registerAnimations(assets: IAssetManager, prefix: string = 'fx', maxCount: number = 200): void { let index = 0; - while(index < _arg_3) + while(index < maxCount) { - const collection = k.getCollection((_arg_2 + index)); + const collection = assets.getCollection((prefix + index)); if(collection) { @@ -117,21 +117,21 @@ export class AvatarStructure this._animationManager.registerAnimation(this, data); } - public getPartColor(container: IAvatarFigureContainer, _arg_2: string, _arg_3: number = 0): IPartColor + public getPartColor(figureContainer: IAvatarFigureContainer, partType: string, colorIndex: number = 0): IPartColor { - const _local_4 = container.getPartColorIds(_arg_2); + const colorIds = figureContainer.getPartColorIds(partType); - if((!(_local_4)) || (_local_4.length < _arg_3)) return null; + if(!colorIds || (colorIds.length < colorIndex)) return null; - const _local_5 = this._figureData.getSetType(_arg_2); + const setType = this._figureData.getSetType(partType); - if(_local_5 == null) return null; + if(setType == null) return null; - const _local_6 = this._figureData.getPalette(_local_5.paletteID); + const palette = this._figureData.getPalette(setType.paletteID); - if(!_local_6) return null; + if(!palette) return null; - return _local_6.getColor(_local_4[_arg_3]); + return palette.getColor(colorIds[colorIndex]); } public getBodyPartData(animation: string, frameCount: number, spriteId: string): AvatarAnimationLayerData @@ -139,98 +139,98 @@ export class AvatarStructure return this._animationManager.getLayerData(animation, frameCount, spriteId) as AvatarAnimationLayerData; } - public getAnimation(k: string): Animation + public getAnimation(name: string): Animation { - return this._animationManager.getAnimation(k); + return this._animationManager.getAnimation(name); } - public getActionDefinition(k: string): ActionDefinition + public getActionDefinition(id: string): ActionDefinition { - return this._actionManager.getActionDefinition(k); + return this._actionManager.getActionDefinition(id); } - public getActionDefinitionWithState(k: string): ActionDefinition + public getActionDefinitionWithState(state: string): ActionDefinition { - return this._actionManager.getActionDefinitionWithState(k); + return this._actionManager.getActionDefinitionWithState(state); } - public isMainAvatarSet(k: string): boolean + public isMainAvatarSet(setType: string): boolean { - return this._geometry.isMainAvatarSet(k); + return this._geometry.isMainAvatarSet(setType); } - public sortActions(k: IActiveActionData[]): IActiveActionData[] + public sortActions(actions: IActiveActionData[]): IActiveActionData[] { - return this._actionManager.sortActions(k); + return this._actionManager.sortActions(actions); } - public maxFrames(k: IActiveActionData[]): number + public maxFrames(actions: IActiveActionData[]): number { - let _local_2 = 0; + let maxFrameCount = 0; - for(const _local_3 of k) + for(const action of actions) { - _local_2 = Math.max(_local_2, this._animationData.getFrameCount(_local_3.definition)); - } - return _local_2; - } - - public getMandatorySetTypeIds(k: string, _arg_2: number): string[] - { - if(!this._mandatorySetTypeIds[k]) - { - this._mandatorySetTypeIds[k] = []; + maxFrameCount = Math.max(maxFrameCount, this._animationData.getFrameCount(action.definition)); } - if(this._mandatorySetTypeIds[k][_arg_2]) + return maxFrameCount; + } + + public getMandatorySetTypeIds(gender: string, clubLevel: number): string[] + { + if(!this._mandatorySetTypeIds[gender]) { - return this._mandatorySetTypeIds[k][_arg_2]; + this._mandatorySetTypeIds[gender] = []; } - this._mandatorySetTypeIds[k][_arg_2] = this._figureData.getMandatorySetTypeIds(k, _arg_2); - - return this._mandatorySetTypeIds[k][_arg_2]; - } - - public getDefaultPartSet(k: string, _arg_2: string): IFigurePartSet - { - return this._figureData.getDefaultPartSet(k, _arg_2); - } - - public getCanvasOffsets(k: IActiveActionData[], _arg_2: string, _arg_3: number): number[] - { - return this._actionManager.getCanvasOffsets(k, _arg_2, _arg_3); - } - - public getCanvas(k: string, _arg_2: string): AvatarCanvas - { - return this._geometry.getCanvas(k, _arg_2); - } - - public removeDynamicItems(k: IAvatarImage): void - { - this._geometry.removeDynamicItems(k); - } - - public getActiveBodyPartIds(k: IActiveActionData, _arg_2: IAvatarImage): string[] - { - let _local_3: string[] = []; - - const _local_4: string[] = []; - const _local_5 = k.definition.geometryType; - - if(k.definition.isAnimation) + if(this._mandatorySetTypeIds[gender][clubLevel]) { - const _local_7 = ((k.definition.state + '.') + k.actionParameter); - const _local_8 = this._animationManager.getAnimation(_local_7); + return this._mandatorySetTypeIds[gender][clubLevel]; + } - if(_local_8) + this._mandatorySetTypeIds[gender][clubLevel] = this._figureData.getMandatorySetTypeIds(gender, clubLevel); + + return this._mandatorySetTypeIds[gender][clubLevel]; + } + + public getDefaultPartSet(partType: string, gender: string): IFigurePartSet + { + return this._figureData.getDefaultPartSet(partType, gender); + } + + public getCanvasOffsets(actions: IActiveActionData[], scale: string, direction: number): number[] + { + return this._actionManager.getCanvasOffsets(actions, scale, direction); + } + + public getCanvas(scale: string, geometryType: string): AvatarCanvas + { + return this._geometry.getCanvas(scale, geometryType); + } + + public removeDynamicItems(avatar: IAvatarImage): void + { + this._geometry.removeDynamicItems(avatar); + } + + public getActiveBodyPartIds(action: IActiveActionData, avatar: IAvatarImage): string[] + { + let partTypeIds: string[] = []; + const bodyPartIds: string[] = []; + const geometryType = action.definition.geometryType; + + if(action.definition.isAnimation) + { + const animationKey = ((action.definition.state + '.') + action.actionParameter); + const animation = this._animationManager.getAnimation(animationKey); + + if(animation) { - _local_3 = _local_8.getAnimatedBodyPartIds(0, k.overridingAction); + partTypeIds = animation.getAnimatedBodyPartIds(0, action.overridingAction); - if(_local_8.hasAddData()) + if(animation.hasAddData()) { - const _local_11 = { + const dynamicPart = { id: '', x: 0, y: 0, @@ -242,110 +242,121 @@ export class AvatarStructure double: 1 }; - const _local_12 = { + const partSetDefinition = { setType: '' }; - for(const _local_13 of _local_8.addData) + for(const addData of animation.addData) { - const _local_6 = this._geometry.getBodyPart(_local_5, _local_13.align); + const bodyPart = this._geometry.getBodyPart(geometryType, addData.align); - if(_local_6) + if(bodyPart) { - _local_11.id = _local_13.id; - _local_6.addPart(_local_11, _arg_2); + dynamicPart.id = addData.id; + bodyPart.addPart(dynamicPart, avatar); - _local_12.setType = _local_13.id; + partSetDefinition.setType = addData.id; - const _local_10 = this._partSetsData.addPartDefinition(_local_12); - _local_10.appendToFigure = true; + const partDefinition = this._partSetsData.addPartDefinition(partSetDefinition); + partDefinition.appendToFigure = true; - if(_local_13.base === '') _local_10.staticId = 1; + if(addData.base === '') partDefinition.staticId = 1; - if(_local_4.indexOf(_local_6.id) === -1) _local_4.push(_local_6.id); + if(bodyPartIds.indexOf(bodyPart.id) === -1) bodyPartIds.push(bodyPart.id); } } } } - for(const _local_9 of _local_3) + for(const partTypeId of partTypeIds) { - const _local_6 = this._geometry.getBodyPart(_local_5, _local_9); + const bodyPart = this._geometry.getBodyPart(geometryType, partTypeId); - if(_local_6 && (_local_4.indexOf(_local_6.id) === -1)) _local_4.push(_local_6.id); + if(bodyPart && (bodyPartIds.indexOf(bodyPart.id) === -1)) bodyPartIds.push(bodyPart.id); + } + + if(bodyPartIds.length === 0) + { + partTypeIds = this._partSetsData.getActiveParts(action.definition); + + for(const partType of partTypeIds) + { + const bodyPart = this._geometry.getBodyPartOfItem(geometryType, partType, avatar); + + if(bodyPart && (bodyPartIds.indexOf(bodyPart.id) === -1)) bodyPartIds.push(bodyPart.id); + } } } else { - _local_3 = this._partSetsData.getActiveParts(k.definition); + partTypeIds = this._partSetsData.getActiveParts(action.definition); - for(const _local_14 of _local_3) + for(const partType of partTypeIds) { - const _local_6 = this._geometry.getBodyPartOfItem(_local_5, _local_14, _arg_2); + const bodyPart = this._geometry.getBodyPartOfItem(geometryType, partType, avatar); - if(_local_6 && (_local_4.indexOf(_local_6.id) === -1)) _local_4.push(_local_6.id); + if(bodyPart && (bodyPartIds.indexOf(bodyPart.id) === -1)) bodyPartIds.push(bodyPart.id); } } - return _local_4; + return bodyPartIds; } - public getBodyPartsUnordered(k: string): string[] + public getBodyPartsUnordered(avatarSet: string): string[] { - return this._geometry.getBodyPartIdsInAvatarSet(k); + return this._geometry.getBodyPartIdsInAvatarSet(avatarSet); } - public getBodyParts(k: string, _arg_2: string, _arg_3: number): string[] + public getBodyParts(avatarSet: string, geometryType: string, direction: number): string[] { - const _local_4 = AvatarDirectionAngle.DIRECTION_TO_ANGLE[_arg_3]; + const angle = AvatarDirectionAngle.DIRECTION_TO_ANGLE[direction]; - return this._geometry.getBodyPartsAtAngle(k, _local_4, _arg_2); + return this._geometry.getBodyPartsAtAngle(avatarSet, angle, geometryType); } - public getFrameBodyPartOffset(k: IActiveActionData, _arg_2: number, _arg_3: number, _arg_4: string): Point + public getFrameBodyPartOffset(action: IActiveActionData, direction: number, frameCount: number, bodyPartId: string): Point { - const _local_5 = this._animationData.getAction(k.definition); + const animationAction = this._animationData.getAction(action.definition); - if(_local_5) return _local_5.getFrameBodyPartOffset(_arg_2, _arg_3, _arg_4); + if(animationAction) return animationAction.getFrameBodyPartOffset(direction, frameCount, bodyPartId); return AnimationAction.DEFAULT_OFFSET; } - public getParts(k: string, _arg_2: IAvatarFigureContainer, _arg_3: IActiveActionData, _arg_4: string, _arg_5: number, removes: string[], _arg_7: IAvatarImage, _arg_8: Map = null): AvatarImagePartContainer[] + public getParts(bodyPartId: string, figureContainer: IAvatarFigureContainer, action: IActiveActionData, geometryType: string, direction: number, removes: string[], avatar: IAvatarImage, itemOverrides: Map = null): AvatarImagePartContainer[] { - const _local_10: Animation = null; - let _local_34: IActionDefinition = null; + const effectAnimation: Animation = null; + let actionDefinition: IActionDefinition = null; + let animationFrames: AvatarAnimationFrame[] = []; + let partColor: IPartColor = null; - let _local_20: AvatarAnimationFrame[] = []; - let _local_36: IPartColor = null; + if(!action) return []; - if(!_arg_3) return []; + const activePartTypes = this._partSetsData.getActiveParts(action.definition); + const partContainers: AvatarImagePartContainer[] = []; + let defaultFrames: any[] = [0]; + const animationAction = this._animationData.getAction(action.definition); - const _local_9 = this._partSetsData.getActiveParts(_arg_3.definition); - const _local_11: AvatarImagePartContainer[] = []; - let _local_14: any[] = [0]; - const _local_15 = this._animationData.getAction(_arg_3.definition); - - if(_arg_3.definition.isAnimation) + if(action.definition.isAnimation) { - const _local_24 = ((_arg_3.definition.state + '.') + _arg_3.actionParameter); - const _local_10 = this._animationManager.getAnimation(_local_24); + const animationKey = ((action.definition.state + '.') + action.actionParameter); + const spriteAnimation = this._animationManager.getAnimation(animationKey); - if(_local_10) + if(spriteAnimation) { - _local_14 = this.getPopulatedArray(_local_10.frameCount(_arg_3.overridingAction)); + defaultFrames = this.getPopulatedArray(spriteAnimation.frameCount(action.overridingAction)); - for(const _local_25 of _local_10.getAnimatedBodyPartIds(0, _arg_3.overridingAction)) + for(const animatedPartId of spriteAnimation.getAnimatedBodyPartIds(0, action.overridingAction)) { - if(_local_25 === k) + if(animatedPartId === bodyPartId) { - const _local_26 = this._geometry.getBodyPart(_arg_4, _local_25); + const geometryBodyPart = this._geometry.getBodyPart(geometryType, animatedPartId); - if(_local_26) + if(geometryBodyPart) { - for(const _local_27 of _local_26.getDynamicParts(_arg_7)) + for(const dynamicPart of geometryBodyPart.getDynamicParts(avatar)) { - _local_9.push(_local_27.id); + activePartTypes.push(dynamicPart.id); } } } @@ -353,75 +364,73 @@ export class AvatarStructure } } - const _local_16 = this._geometry.getParts(_arg_4, k, _arg_5, _local_9, _arg_7); - const _local_21 = _arg_2.getPartTypeIds(); + const visiblePartTypes = this._geometry.getParts(geometryType, bodyPartId, direction, activePartTypes, avatar); + const figurePartTypeIds = figureContainer.getPartTypeIds(); - for(const _local_17 of _local_21) + for(const figurePartType of figurePartTypeIds) { - if(_arg_8) + if(itemOverrides) { - if(_arg_8.get(_local_17)) continue; + if(itemOverrides.get(figurePartType)) continue; } - const _local_28 = _arg_2.getPartSetId(_local_17); - const _local_29 = _arg_2.getPartColorIds(_local_17); - const _local_30 = this._figureData.getSetType(_local_17); + const partSetId = figureContainer.getPartSetId(figurePartType); + const partColorIds = figureContainer.getPartColorIds(figurePartType); + const setType = this._figureData.getSetType(figurePartType); - - - if(_local_30) + if(setType) { - const _local_31 = this._figureData.getPalette(_local_30.paletteID); + const palette = this._figureData.getPalette(setType.paletteID); - if(_local_31) + if(palette) { - const _local_32 = _local_30.getPartSet(_local_28); + const figurePartSet = setType.getPartSet(partSetId); - if(_local_32) + if(figurePartSet) { - removes = removes.concat(_local_32.hiddenLayers); + removes = removes.concat(figurePartSet.hiddenLayers); - for(const _local_33 of _local_32.parts) + for(const figurePart of figurePartSet.parts) { - if(_local_16.indexOf(_local_33.type) > -1) + if(visiblePartTypes.indexOf(figurePart.type) > -1) { - if(_local_15) + if(animationAction) { - const _local_19 = _local_15.getPart(_local_33.type); + const animationPart = animationAction.getPart(figurePart.type); - if(_local_19) + if(animationPart) { - _local_20 = _local_19.frames; + animationFrames = animationPart.frames; } else { - _local_20 = _local_14; + animationFrames = defaultFrames; } } else { - _local_20 = _local_14; + animationFrames = defaultFrames; } - _local_34 = _arg_3.definition; + actionDefinition = action.definition; - if(_local_9.indexOf(_local_33.type) === -1) _local_34 = this._defaultAction; + if(activePartTypes.indexOf(figurePart.type) === -1) actionDefinition = this._defaultAction; - const _local_13 = this._partSetsData.getPartDefinition(_local_33.type); + const partDefinition = this._partSetsData.getPartDefinition(figurePart.type); - let _local_35 = (!_local_13) ? _local_33.type : _local_13.flippedSetType; + let flippedPartType = (!partDefinition) ? figurePart.type : partDefinition.flippedSetType; - if(!_local_35 || (_local_35 === '')) _local_35 = _local_33.type; + if(!flippedPartType || (flippedPartType === '')) flippedPartType = figurePart.type; - if(_local_29 && (_local_29.length > (_local_33.colorLayerIndex - 1))) + if(partColorIds && (partColorIds.length > (figurePart.colorLayerIndex - 1))) { - _local_36 = _local_31.getColor(_local_29[(_local_33.colorLayerIndex - 1)]); + partColor = palette.getColor(partColorIds[(figurePart.colorLayerIndex - 1)]); } - const _local_37 = (_local_33.colorLayerIndex > 0); - const _local_18 = new AvatarImagePartContainer(k, _local_33.type, _local_33.id.toString(), _local_36, _local_20, _local_34, _local_37, _local_33.paletteMap, _local_35); + const isColorable = (figurePart.colorLayerIndex > 0); + const container = new AvatarImagePartContainer(bodyPartId, figurePart.type, figurePart.id.toString(), partColor, animationFrames, actionDefinition, isColorable, figurePart.paletteMap, flippedPartType); - _local_11.push(_local_18); + partContainers.push(container); } } } @@ -429,132 +438,132 @@ export class AvatarStructure } } - const _local_22: AvatarImagePartContainer[] = []; + const sortedContainers: AvatarImagePartContainer[] = []; - for(const _local_12 of _local_16) + for(const visiblePartType of visiblePartTypes) { - let _local_39: IPartColor = null; - let _local_38 = false; + let overrideColor: IPartColor = null; + let partFound = false; - const _local_40 = ((_arg_8) && (_arg_8.get(_local_12))); + const hasItemOverride = ((itemOverrides) && (itemOverrides.get(visiblePartType))); - for(const _local_23 of _local_11) + for(const container of partContainers) { - if(_local_23.partType === _local_12) + if(container.partType === visiblePartType) { - if(_local_40) + if(hasItemOverride) { - _local_39 = _local_23.color; + overrideColor = container.color; } else { - _local_38 = true; + partFound = true; - if(removes.indexOf(_local_12) === -1) _local_22.push(_local_23); + if(removes.indexOf(visiblePartType) === -1) sortedContainers.push(container); } } } - if(!_local_38) + if(!partFound) { - if(_local_40) + if(hasItemOverride) { - const _local_41 = _arg_8.get(_local_12); + const itemId = itemOverrides.get(visiblePartType); - let _local_42 = 0; - let _local_43 = 0; + let charCodeSum = 0; + let charIndex = 0; - while(_local_43 < _local_41.length) + while(charIndex < itemId.length) { - _local_42 = (_local_42 + _local_41.charCodeAt(_local_43)); - _local_43++; + charCodeSum = (charCodeSum + itemId.charCodeAt(charIndex)); + charIndex++; } - if(_local_15) + if(animationAction) { - const _local_19 = _local_15.getPart(_local_12); + const animationPart = animationAction.getPart(visiblePartType); - if(_local_19) + if(animationPart) { - _local_20 = _local_19.frames; + animationFrames = animationPart.frames; } else { - _local_20 = _local_14; + animationFrames = defaultFrames; } } else { - _local_20 = _local_14; + animationFrames = defaultFrames; } - const _local_18 = new AvatarImagePartContainer(k, _local_12, _local_41, _local_39, _local_20, _arg_3.definition, (!(_local_39 == null)), -1, _local_12, false, 1); + const container = new AvatarImagePartContainer(bodyPartId, visiblePartType, itemId, overrideColor, animationFrames, action.definition, (!(overrideColor == null)), -1, visiblePartType, false, 1); - _local_22.push(_local_18); + sortedContainers.push(container); } else { - if(_local_9.indexOf(_local_12) > -1) + if(activePartTypes.indexOf(visiblePartType) > -1) { - const _local_44 = this._geometry.getBodyPartOfItem(_arg_4, _local_12, _arg_7); + const ownerBodyPart = this._geometry.getBodyPartOfItem(geometryType, visiblePartType, avatar); - if(k !== _local_44.id) + if(bodyPartId !== ownerBodyPart.id) { // } else { - const _local_13 = this._partSetsData.getPartDefinition(_local_12); + const partDefinition = this._partSetsData.getPartDefinition(visiblePartType); - let _local_45 = false; - let _local_46 = 1; + let isBlended = false; + let blendFactor = 1; - if(_local_13.appendToFigure) + if(partDefinition.appendToFigure) { - let _local_47 = '1'; + let partId = '1'; - if(_arg_3.actionParameter !== '') + if(action.actionParameter !== '') { - _local_47 = _arg_3.actionParameter; + partId = action.actionParameter; } - if(_local_13.hasStaticId()) + if(partDefinition.hasStaticId()) { - _local_47 = _local_13.staticId.toString(); + partId = partDefinition.staticId.toString(); } - if(_local_10 != null) + if(effectAnimation != null) { - const _local_48 = _local_10.getAddData(_local_12); + const addData = effectAnimation.getAddData(visiblePartType); - if(_local_48) + if(addData) { - _local_45 = _local_48.isBlended; - _local_46 = _local_48.blend; + isBlended = addData.isBlended; + blendFactor = addData.blend; } } - if(_local_15) + if(animationAction) { - const _local_19 = _local_15.getPart(_local_12); + const animationPart = animationAction.getPart(visiblePartType); - if(_local_19) + if(animationPart) { - _local_20 = _local_19.frames; + animationFrames = animationPart.frames; } else { - _local_20 = _local_14; + animationFrames = defaultFrames; } } else { - _local_20 = _local_14; + animationFrames = defaultFrames; } - const _local_18 = new AvatarImagePartContainer(k, _local_12, _local_47, null, _local_20, _arg_3.definition, false, -1, _local_12, _local_45, _local_46); + const container = new AvatarImagePartContainer(bodyPartId, visiblePartType, partId, null, animationFrames, action.definition, false, -1, visiblePartType, isBlended, blendFactor); - _local_22.push(_local_18); + sortedContainers.push(container); } } } @@ -562,36 +571,36 @@ export class AvatarStructure } } - return _local_22; + return sortedContainers; } - private getPopulatedArray(k: number): number[] + private getPopulatedArray(count: number): number[] { - const _local_2: number[] = []; + const result: number[] = []; let index = 0; - while(index < k) + while(index < count) { - _local_2.push(index); + result.push(index); index++; } - return _local_2; + return result; } public getItemIds(): string[] { if(this._actionManager) { - const k = this._actionManager.getActionDefinition('CarryItem').params; + const params = this._actionManager.getActionDefinition('CarryItem').params; - const _local_2 = []; + const itemIds = []; - for(const _local_3 of k.values()) _local_2.push(_local_3); + for(const value of params.values()) itemIds.push(value); - return _local_2; + return itemIds; } return []; From 594b9c28a028068265eec2c29ff8f371c8fd034e Mon Sep 17 00:00:00 2001 From: Life Date: Fri, 27 Mar 2026 19:54:21 +0100 Subject: [PATCH 2/5] =?UTF-8?q?feat:=20FurniEditor=20WebSocket=20packets?= =?UTF-8?q?=20(10040-10045)=20=E2=80=94=20composers,=20parsers,=20events?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/communication/src/NitroMessages.ts | 19 ++++++- packages/communication/src/index.ts | 3 + .../src/messages/incoming/IncomingHeader.ts | 6 ++ .../FurniEditorDetailResultEvent.ts | 16 ++++++ .../FurniEditorInteractionsResultEvent.ts | 16 ++++++ .../furnieditor/FurniEditorResultEvent.ts | 16 ++++++ .../FurniEditorSearchResultEvent.ts | 16 ++++++ .../messages/incoming/furnieditor/index.ts | 4 ++ .../src/messages/incoming/index.ts | 1 + .../src/messages/outgoing/OutgoingHeader.ts | 8 +++ .../FurniEditorBySpriteComposer.ts | 21 +++++++ .../furnieditor/FurniEditorDeleteComposer.ts | 21 +++++++ .../furnieditor/FurniEditorDetailComposer.ts | 21 +++++++ .../FurniEditorInteractionsComposer.ts | 21 +++++++ .../furnieditor/FurniEditorSearchComposer.ts | 21 +++++++ .../furnieditor/FurniEditorUpdateComposer.ts | 21 +++++++ .../messages/outgoing/furnieditor/index.ts | 6 ++ .../src/messages/outgoing/index.ts | 1 + .../parser/furnieditor/CatalogRefData.ts | 23 ++++++++ .../parser/furnieditor/FurniDetailData.ts | 38 +++++++++++++ .../FurniEditorDetailResultMessageParser.ts | 57 +++++++++++++++++++ ...niEditorInteractionsResultMessageParser.ts | 34 +++++++++++ .../FurniEditorResultMessageParser.ts | 43 ++++++++++++++ .../FurniEditorSearchResultMessageParser.ts | 54 ++++++++++++++++++ .../parser/furnieditor/FurniItemData.ts | 37 ++++++++++++ .../src/messages/parser/furnieditor/index.ts | 7 +++ .../src/messages/parser/index.ts | 1 + 27 files changed, 530 insertions(+), 2 deletions(-) create mode 100644 packages/communication/src/messages/incoming/furnieditor/FurniEditorDetailResultEvent.ts create mode 100644 packages/communication/src/messages/incoming/furnieditor/FurniEditorInteractionsResultEvent.ts create mode 100644 packages/communication/src/messages/incoming/furnieditor/FurniEditorResultEvent.ts create mode 100644 packages/communication/src/messages/incoming/furnieditor/FurniEditorSearchResultEvent.ts create mode 100644 packages/communication/src/messages/incoming/furnieditor/index.ts create mode 100644 packages/communication/src/messages/outgoing/furnieditor/FurniEditorBySpriteComposer.ts create mode 100644 packages/communication/src/messages/outgoing/furnieditor/FurniEditorDeleteComposer.ts create mode 100644 packages/communication/src/messages/outgoing/furnieditor/FurniEditorDetailComposer.ts create mode 100644 packages/communication/src/messages/outgoing/furnieditor/FurniEditorInteractionsComposer.ts create mode 100644 packages/communication/src/messages/outgoing/furnieditor/FurniEditorSearchComposer.ts create mode 100644 packages/communication/src/messages/outgoing/furnieditor/FurniEditorUpdateComposer.ts create mode 100644 packages/communication/src/messages/outgoing/furnieditor/index.ts create mode 100644 packages/communication/src/messages/parser/furnieditor/CatalogRefData.ts create mode 100644 packages/communication/src/messages/parser/furnieditor/FurniDetailData.ts create mode 100644 packages/communication/src/messages/parser/furnieditor/FurniEditorDetailResultMessageParser.ts create mode 100644 packages/communication/src/messages/parser/furnieditor/FurniEditorInteractionsResultMessageParser.ts create mode 100644 packages/communication/src/messages/parser/furnieditor/FurniEditorResultMessageParser.ts create mode 100644 packages/communication/src/messages/parser/furnieditor/FurniEditorSearchResultMessageParser.ts create mode 100644 packages/communication/src/messages/parser/furnieditor/FurniItemData.ts create mode 100644 packages/communication/src/messages/parser/furnieditor/index.ts diff --git a/packages/communication/src/NitroMessages.ts b/packages/communication/src/NitroMessages.ts index e3866b7..81950fa 100644 --- a/packages/communication/src/NitroMessages.ts +++ b/packages/communication/src/NitroMessages.ts @@ -1,7 +1,6 @@ import { IMessageConfiguration } from '@nitrots/api'; -import { AcceptFriendMessageComposer, AcceptFriendResultEvent, AcceptGameInviteMessageComposer, AcceptQuestMessageComposer, AccountSafetyLockStatusChangeMessageEvent, AchievementEvent, AchievementNotificationMessageEvent, AchievementResolutionCompletedMessageEvent, AchievementResolutionProgressMessageEvent, AchievementResolutionsMessageEvent, AchievementsEvent, AchievementsScoreEvent, ActivateQuestMessageComposer, ActivityPointNotificationMessageEvent, AddFavouriteRoomMessageComposer, AddJukeboxDiskComposer, AddSpamWallPostItMessageComposer, ApplySnapshotMessageComposer, ApplyTonerComposer, ApproveAllMembershipRequestsMessageComposer, ApproveNameMessageComposer, ApproveNameMessageEvent, AreaHideMessageEvent, AuthenticatedEvent, AuthenticationMessageComposer, AvailabilityStatusMessageEvent, AvailabilityTimeMessageEvent, AvailableCommandsEvent, AvatarEffectActivatedComposer, AvatarEffectActivatedEvent, AvatarEffectAddedEvent, AvatarEffectExpiredEvent, AvatarEffectSelectedComposer, AvatarEffectSelectedEvent, AvatarEffectsEvent, BadgePointLimitsEvent, BadgeReceivedEvent, BadgesEvent, BannedUsersFromRoomEvent, BonusRareInfoMessageEvent, BotAddedToInventoryEvent, BotCommandConfigurationEvent, BotErrorEvent, BotForceOpenContextMenuEvent, BotInventoryMessageEvent, BotPlaceComposer, BotReceivedMessageEvent, BotRemoveComposer, BotRemovedFromInventoryEvent, BotSkillListUpdateEvent, BotSkillSaveComposer, BreedPetsMessageComposer, BuildersClubFurniCountMessageEvent, BuildersClubPlaceRoomItemMessageComposer, BuildersClubPlaceWallItemMessageComposer, BuildersClubQueryFurniCountMessageComposer, BuildersClubSubscriptionStatusMessageEvent, BundleDiscountRulesetMessageEvent, BuyMarketplaceOfferMessageComposer, BuyMarketplaceTokensMessageComposer, CallForHelpDisabledNotifyMessageEvent, CallForHelpFromForumMessageMessageComposer, CallForHelpFromForumThreadMessageComposer, CallForHelpFromIMMessageComposer, CallForHelpFromPhotoMessageComposer, CallForHelpFromSelfieMessageComposer, CallForHelpMessageComposer, CallForHelpPendingCallsDeletedMessageEvent, CallForHelpPendingCallsMessageEvent, CallForHelpReplyMessageEvent, CallForHelpResultMessageEvent, CameraPublishStatusMessageEvent, CameraPurchaseOKMessageEvent, CameraSnapshotMessageEvent, CameraStorageUrlMessageEvent, CampaignCalendarDataMessageEvent, CampaignCalendarDoorOpenedMessageEvent, CancelEventMessageComposer, CancelMarketplaceOfferMessageComposer, CancelMysteryBoxWaitMessageEvent, CancelPetBreedingComposer, CancelQuestMessageComposer, CanCreateRoomEvent, CanCreateRoomEventEvent, CanCreateRoomMessageComposer, CatalogAdminCreateOfferComposer, CatalogAdminCreatePageComposer, CatalogAdminDeleteOfferComposer, CatalogAdminDeletePageComposer, CatalogAdminMoveOfferComposer, CatalogAdminMovePageComposer, CatalogAdminPublishComposer, CatalogAdminResultEvent, CatalogAdminSaveOfferComposer, CatalogAdminSavePageComposer, CatalogGroupsComposer, CatalogPageExpirationEvent, CatalogPageMessageEvent, CatalogPagesListEvent, CatalogPageWithEarliestExpiryMessageEvent, CatalogPublishedMessageEvent, CategoriesWithVisitorCountEvent, CfhChatlogEvent, CfhSanctionMessageEvent, CfhTopicsInitEvent, ChangeEmailComposer, ChangeEmailResultEvent, ChangeQueueMessageComposer, ChangeUserNameMessageComposer, ChangeUserNameResultMessageEvent, ChatReviewGuideDecidesOnOfferMessageComposer, ChatReviewGuideDetachedMessageComposer, ChatReviewGuideVoteMessageComposer, ChatReviewSessionCreateMessageComposer, ChatReviewSessionDetachedMessageEvent, ChatReviewSessionOfferedToGuideMessageEvent, ChatReviewSessionResultsMessageEvent, ChatReviewSessionStartedMessageEvent, ChatReviewSessionVotingStatusMessageEvent, CheckUserNameMessageComposer, CheckUserNameResultMessageEvent, ClickFurniMessageComposer, ClientHelloMessageComposer, ClientPingEvent, CloseIssueDefaultActionMessageComposer, CloseIssuesMessageComposer, ClubGiftInfoEvent, ClubGiftNotificationEvent, ClubGiftSelectedEvent, CommunityGoalEarnedPrizesMessageEvent, CommunityGoalHallOfFameMessageEvent, CommunityGoalProgressMessageEvent, CommunityGoalVoteMessageComposer, CommunityGoalVoteMessageEvent, CompetitionEntrySubmitResultEvent, CompetitionRoomsDataMessageEvent, CompetitionRoomsSearchMessageComposer, CompetitionStatusMessageEvent, CompetitionVotingInfoMessageEvent, CompleteDiffieHandshakeEvent, CompleteDiffieHandshakeMessageComposer, CompostPlantMessageComposer, ConcurrentUsersGoalProgressMessageEvent, ConfirmPetBreedingComposer, ConnectionErrorEvent, ControlYoutubeDisplayPlaybackMessageComposer, ConvertedRoomIdEvent, ConvertGlobalRoomIdMessageComposer, CraftableProductsEvent, CraftComposer, CraftingRecipeEvent, CraftingRecipesAvailableEvent, CraftingResultEvent, CraftSecretComposer, CreateFlatMessageComposer, CurrentTimingCodeMessageEvent, CustomUserNotificationMessageEvent, DeclineFriendMessageComposer, DefaultSanctionMessageComposer, DeleteBadgeMessageComposer, DeleteFavouriteRoomMessageComposer, DeleteItemMessageComposer, DeletePendingCallsForHelpMessageComposer, DeletePetMessageComposer, DesktopViewComposer, DesktopViewEvent, DiceValueMessageEvent, DirectSMSClubBuyAvailableMessageEvent, DisconnectMessageComposer, DisconnectReasonEvent, DoorbellMessageEvent, EditEventMessageComposer, ElementPointerMessageEvent, EmailStatusResultEvent, EpicPopupMessageEvent, ExtendedProfileChangedMessageEvent, ExtendRentOrBuyoutFurniMessageComposer, ExtendRentOrBuyoutStripItemMessageComposer, FavoriteMembershipUpdateMessageEvent, FavouriteChangedEvent, FavouritesEvent, FigureSetIdsMessageEvent, FigureUpdateEvent, FindFriendsProcessResultEvent, FindNewFriendsMessageComposer, FireworkChargeDataEvent, FlatAccessDeniedMessageEvent, FlatControllerAddedEvent, FlatControllerRemovedEvent, FlatControllersEvent, FlatCreatedEvent, FloodControlEvent, FloorHeightMapEvent, FollowFriendFailedEvent, FollowFriendMessageComposer, ForumDataMessageEvent, ForumsListMessageEvent, ForwardToACompetitionRoomMessageComposer, ForwardToARandomPromotedRoomMessageComposer, ForwardToASubmittableRoomMessageComposer, ForwardToRandomCompetitionRoomMessageComposer, ForwardToSomeRoomMessageComposer, FriendFurniConfirmLockMessageComposer, FriendListFragmentEvent, FriendListUpdateComposer, FriendListUpdateEvent, FriendNotificationEvent, FriendRequestQuestCompleteMessageComposer, FriendRequestsEvent, FurniRentOrBuyoutOfferMessageEvent, FurnitureAliasesComposer, FurnitureAliasesEvent, FurnitureColorWheelComposer, FurnitureDataEvent, FurnitureDiceActivateComposer, FurnitureDiceDeactivateComposer, FurnitureExchangeComposer, FurnitureFloorAddEvent, FurnitureFloorEvent, FurnitureFloorRemoveEvent, FurnitureFloorUpdateComposer, FurnitureFloorUpdateEvent, FurnitureGroupInfoComposer, FurnitureListAddOrUpdateEvent, FurnitureListComposer, FurnitureListEvent, FurnitureListInvalidateEvent, FurnitureListRemovedEvent, FurnitureMannequinSaveLookComposer, FurnitureMannequinSaveNameComposer, FurnitureMultiStateComposer, FurnitureOneWayDoorComposer, FurniturePickupAllComposer, FurniturePickupComposer, FurniturePlaceComposer, FurniturePlacePaintComposer, FurniturePostItPlaceComposer, FurniturePostItPlacedEvent, FurnitureRandomStateComposer, FurnitureStackHeightComposer, FurnitureStackHeightEvent, FurnitureWallAddEvent, FurnitureWallEvent, FurnitureWallMultiStateComposer, FurnitureWallRemoveEvent, FurnitureWallUpdateComposer, FurnitureWallUpdateEvent, Game2AccountGameStatusMessageEvent, Game2CheckGameDirectoryStatusMessageComposer, Game2ExitGameMessageComposer, Game2GameChatMessageComposer, Game2GameDirectoryStatusMessageEvent, Game2GetAccountGameStatusMessageComposer, Game2GetWeeklyFriendsLeaderboardComposer, Game2GetWeeklyLeaderboardComposer, Game2InArenaQueueMessageEvent, Game2JoiningGameFailedMessageEvent, Game2LoadStageReadyMessageComposer, Game2PlayAgainMessageComposer, Game2RequestFullStatusUpdateMessageComposer, Game2StartingGameFailedMessageEvent, Game2StopCounterMessageEvent, Game2UserLeftGameMessageEvent, Game2WeeklyFriendsLeaderboardEvent, Game2WeeklyLeaderboardEvent, GameAchievementsMessageEvent, GameInviteMessageEvent, GameListMessageEvent, GameStatusMessageEvent, GameUnloadedMessageComposer, GenericErrorEvent, GetBadgePointLimitsComposer, GetBonusRareInfoMessageComposer, GetBotInventoryComposer, GetBundleDiscountRulesetComposer, GetCatalogIndexComposer, GetCatalogPageComposer, GetCatalogPageExpirationComposer, GetCatalogPageWithEarliestExpiryComposer, GetCategoriesWithUserCountMessageComposer, GetCfhChatlogMessageComposer, GetCfhStatusMessageComposer, GetClubGiftInfo, GetClubOffersMessageComposer, GetCommunityGoalEarnedPrizesMessageComposer, GetCommunityGoalHallOfFameMessageComposer, GetCommunityGoalProgressMessageComposer, GetConcurrentUsersGoalProgressMessageComposer, GetConcurrentUsersRewardMessageComposer, GetCraftableProductsComposer, GetCraftingRecipeComposer, GetCraftingRecipesAvailableComposer, GetCurrentTimingCodeMessageComposer, GetCustomRoomFilterMessageComposer, GetDailyQuestMessageComposer, GetDirectClubBuyAvailableComposer, GetEmailStatusComposer, GetExtendedProfileByNameMessageComposer, GetFaqCategoryMessageComposer, GetFaqTextMessageComposer, GetForumsListMessageComposer, GetForumStatsMessageComposer, GetFriendRequestsComposer, GetGameAchievementsMessageComposer, GetGameListMessageComposer, GetGameStatusMessageComposer, GetGiftMessageComposer, GetGiftWrappingConfigurationComposer, GetGuestRoomMessageComposer, GetGuestRoomResultEvent, GetGuideReportingStatusMessageComposer, GetHabboBasicMembershipExtendOfferComposer, GetHabboClubExtendOfferMessageComposer, GetHabboGroupBadgesMessageComposer, GetIgnoredUsersComposer, GetInterstitialMessageComposer, GetIsBadgeRequestFulfilledComposer, GetIsOfferGiftableComposer, GetIsUserPartOfCompetitionMessageComposer, GetItemDataComposer, GetJukeboxPlayListMessageComposer, GetLimitedOfferAppearingNextComposer, GetMarketplaceCanMakeOfferComposer, GetMarketplaceConfigurationMessageComposer, GetMarketplaceItemStatsComposer, GetMarketplaceOffersMessageComposer, GetMarketplaceOwnOffersMessageComposer, GetMessagesMessageComposer, GetModeratorRoomInfoMessageComposer, GetModeratorUserInfoMessageComposer, GetNextTargetedOfferComposer, GetNowPlayingMessageComposer, GetOccupiedTilesMessageComposer, GetOfficialRoomsMessageComposer, GetOfficialSongIdMessageComposer, GetPendingCallsForHelpMessageComposer, GetPetCommandsComposer, GetPopularRoomTagsMessageComposer, GetProductOfferComposer, GetPromoArticlesComposer, GetQuestsMessageComposer, GetQuizQuestionsComposer, GetRecyclerStatusMessageComposer, GetRentOrBuyoutOfferMessageComposer, GetResolutionAchievementsMessageComposer, GetRoomAdPurchaseInfoComposer, GetRoomChatlogMessageComposer, GetRoomEntryDataMessageComposer, GetRoomEntryTileMessageComposer, GetRoomVisitsMessageComposer, GetSeasonalCalendarDailyOfferComposer, GetSeasonalQuestsOnlyMessageComposer, GetSecondsUntilMessageComposer, GetSellablePetPalettesComposer, GetSongInfoMessageComposer, GetSoundMachinePlayListMessageComposer, GetSoundSettingsComposer, GetTalentTrackLevelMessageComposer, GetTargetedOfferComposer, GetThreadMessageComposer, GetThreadsMessageComposer, GetUnreadForumsCountMessageComposer, GetUserChatlogMessageComposer, GetUserEventCatsMessageComposer, GetUserFlatCatsMessageComposer, GetUserGameAchievementsMessageComposer, GetUserSongDisksMessageComposer, GetUserTagsComposer, GetWardrobeMessageComposer, GetWeeklyGameRewardComposer, GetWeeklyGameRewardWinnersComposer, GetYoutubeDisplayStatusMessageComposer, GiftReceiverNotFoundEvent, GiftWrappingConfigurationEvent, GotMysteryBoxPrizeMessageEvent, GoToFlatMessageComposer, GroupAdminGiveComposer, GroupAdminTakeComposer, GroupBadgePartsComposer, GroupBadgePartsEvent, GroupBuyComposer, GroupBuyDataComposer, GroupBuyDataEvent, GroupConfirmMemberRemoveEvent, GroupConfirmRemoveMemberComposer, GroupDeleteComposer, GroupDetailsChangedMessageEvent, GroupFavoriteComposer, GroupFurniContextMenuInfoMessageEvent, GroupInformationComposer, GroupInformationEvent, GroupJoinComposer, GroupMembersComposer, GroupMembersEvent, GroupMembershipAcceptComposer, GroupMembershipDeclineComposer, GroupMembershipRequestedMessageEvent, GroupPurchasedEvent, GroupRemoveMemberComposer, GroupSaveBadgeComposer, GroupSaveColorsComposer, GroupSaveInformationComposer, GroupSavePreferencesComposer, GroupSettingsComposer, GroupSettingsEvent, GroupUnfavoriteComposer, GuestRoomSearchResultEvent, GuideOnDutyStatusMessageEvent, GuideReportingStatusMessageEvent, GuideSessionAttachedMessageEvent, GuideSessionCreateMessageComposer, GuideSessionDetachedMessageEvent, GuideSessionEndedMessageEvent, GuideSessionErrorMessageEvent, GuideSessionFeedbackMessageComposer, GuideSessionGetRequesterRoomMessageComposer, GuideSessionGuideDecidesMessageComposer, GuideSessionInvitedToGuideRoomMessageEvent, GuideSessionInviteRequesterMessageComposer, GuideSessionIsTypingMessageComposer, GuideSessionMessageMessageComposer, GuideSessionMessageMessageEvent, GuideSessionOnDutyUpdateMessageComposer, GuideSessionPartnerIsTypingMessageEvent, GuideSessionReportMessageComposer, GuideSessionRequesterCancelsMessageComposer, GuideSessionRequesterRoomMessageEvent, GuideSessionResolvedMessageComposer, GuideSessionStartedMessageEvent, GuideTicketCreationResultMessageEvent, GuideTicketResolutionMessageEvent, GuildBaseSearchMessageComposer, GuildEditFailedMessageEvent, GuildForumThreadsEvent, GuildMemberMgmtFailedMessageEvent, GuildMembershipsMessageEvent, HabboBroadcastMessageEvent, HabboClubExtendOfferMessageEvent, HabboClubOffersMessageEvent, HabboGroupBadgesMessageEvent, HabboGroupDeactivatedMessageEvent, HabboGroupJoinFailedMessageEvent, HabboSearchComposer, HabboSearchResultEvent, HarvestPetMessageComposer, HotelClosedAndOpensEvent, HotelClosesAndWillOpenAtEvent, HotelMergeNameChangeEvent, HotelWillCloseInMinutesEvent, IdentityAccountsEvent, IgnoredUsersEvent, IgnoreResultEvent, IgnoreUserComposer, IgnoreUserIdComposer, InClientLinkEvent, IncomingHeader, InfoFeedEnableMessageEvent, InfoRetrieveMessageComposer, InitCameraMessageEvent, InitDiffieHandshakeEvent, InitDiffieHandshakeMessageComposer, InstantMessageErrorEvent, InterstitialMessageEvent, InterstitialShownMessageComposer, IsBadgeRequestFulfilledEvent, IsOfferGiftableMessageEvent, IssueCloseNotificationMessageEvent, IssueDeletedMessageEvent, IssueInfoMessageEvent, IssuePickFailedMessageEvent, IsUserPartOfCompetitionMessageEvent, ItemDataUpdateMessageEvent, JoinedQueueMessageEvent, JoiningQueueFailedMessageEvent, JoinQueueMessageComposer, JukeboxPlayListFullMessageEvent, JukeboxSongDisksMessageEvent, LagWarningReportMessageComposer, LeaveQueueMessageComposer, LeftQueueMessageEvent, LimitedEditionSoldOutEvent, LimitedOfferAppearingNextMessageEvent, LoadGameMessageEvent, LoadGameUrlEvent, LoveLockFurniFinishedEvent, LoveLockFurniFriendConfirmedEvent, LoveLockFurniStartEvent, MaintenanceStatusMessageEvent, MakeOfferMessageComposer, MarkCatalogNewAdditionsPageOpenedComposer, MarketplaceBuyOfferResultEvent, MarketplaceCancelOfferResultEvent, MarketplaceCanMakeOfferResult, MarketplaceConfigurationEvent, MarketplaceItemStatsEvent, MarketplaceMakeOfferResult, MarketPlaceOffersEvent, MarketplaceOwnOffersEvent, MessageErrorEvent, MessengerInitComposer, MessengerInitEvent, MiniMailNewMessageEvent, MiniMailUnreadCountEvent, ModAlertMessageComposer, ModBanMessageComposer, ModerateMessageMessageComposer, ModerateRoomMessageComposer, ModerateThreadMessageComposer, ModeratorActionMessageComposer, ModeratorActionResultMessageEvent, ModeratorCautionEvent, ModeratorInitMessageEvent, ModeratorMessageEvent, ModeratorRoomInfoEvent, ModeratorToolPreferencesEvent, ModeratorUserInfoEvent, ModKickMessageComposer, ModMessageMessageComposer, ModMuteMessageComposer, ModToolPreferencesComposer, ModToolSanctionComposer, ModTradingLockMessageComposer, MoodlightSettingsComposer, MoodlightSettingsSaveComposer, MoodlightTogggleStateComposer, MOTDNotificationEvent, MuteAllInRoomEvent, MyFavouriteRoomsSearchMessageComposer, MyFrequentRoomHistorySearchMessageComposer, MyFriendsRoomsSearchMessageComposer, MyGuildBasesSearchMessageComposer, MyRecommendedRoomsMessageComposer, MyRoomHistorySearchMessageComposer, MyRoomRightsSearchMessageComposer, MyRoomsSearchMessageComposer, MysteryBoxKeysEvent, MysteryBoxWaitingCanceledMessageComposer, NavigatorCategoryListModeComposer, NavigatorCollapsedEvent, NavigatorDeleteSavedSearchComposer, NavigatorHomeRoomEvent, NavigatorInitComposer, NavigatorLiftedEvent, NavigatorMetadataEvent, NavigatorOpenRoomCreatorEvent, NavigatorSearchCloseComposer, NavigatorSearchComposer, NavigatorSearchesEvent, NavigatorSearchEvent, NavigatorSearchOpenComposer, NavigatorSearchSaveComposer, NavigatorSettingsEvent, NavigatorSettingsSaveComposer, NewConsoleMessageEvent, NewFriendRequestEvent, NewUserExperienceGetGiftsComposer, NewUserExperienceGiftOfferMessageEvent, NewUserExperienceNotCompleteEvent, NewUserExperienceScriptProceedComposer, NoobnessLevelMessageEvent, NoOwnedRoomsAlertMessageEvent, NoSuchFlatEvent, NotEnoughBalanceMessageEvent, NotificationDialogMessageEvent, NowPlayingMessageEvent, ObjectsDataUpdateEvent, ObjectsRollingEvent, OfferRewardDeliveredMessageEvent, OfficialSongIdMessageEvent, OneWayDoorStatusMessageEvent, OpenCampaignCalendarDoorAsStaffComposer, OpenCampaignCalendarDoorComposer, OpenMessageComposer, OpenMysteryTrophyMessageComposer, OpenPetPackageMessageComposer, OpenPetPackageRequestedMessageEvent, OpenPetPackageResultMessageEvent, OpenPresentComposer, OpenQuestTrackerMessageComposer, OpenWelcomeGiftComposer, OutgoingHeader, PeerUsersClassificationMessageComposer, PerformanceLogMessageComposer, PerkAllowancesMessageEvent, PetAddedToInventoryEvent, PetBreedingResultEvent, PetExperienceEvent, PetFigureUpdateEvent, PetInfoEvent, PetInventoryEvent, PetLevelNotificationEvent, PetLevelUpdateMessageEvent, PetMountComposer, PetMoveComposer, PetPlaceComposer, PetPlacingErrorEvent, PetReceivedMessageEvent, PetRemoveComposer, PetRemovedFromInventory, PetRespectComposer, PetRespectNoficationEvent, PetScratchFailedMessageEvent, PetSelectedMessageComposer, PetStatusUpdateEvent, PetSupplementComposer, PetSupplementedNotificationEvent, PetTrainingPanelMessageEvent, PhoneCollectionStateMessageEvent, PhotoCompetitionMessageComposer, PickIssuesMessageComposer, PlayListMessageEvent, PlayListSongAddedMessageEvent, PollAnswerComposer, PollContentsEvent, PollErrorEvent, PollOfferEvent, PollRejectComposer, PollStartComposer, PongMessageComposer, PopularRoomsSearchMessageComposer, PopularRoomTagsResultEvent, PostMessageMessageComposer, PostMessageMessageEvent, PostQuizAnswersComposer, PostThreadMessageEvent, PresentOpenedMessageEvent, ProductOfferEvent, PromoArticlesMessageEvent, PublishPhotoMessageComposer, PurchaseBasicMembershipExtensionComposer, PurchaseErrorMessageEvent, PurchaseFromCatalogAsGiftComposer, PurchaseFromCatalogComposer, PurchaseNotAllowedMessageEvent, PurchaseOKMessageEvent, PurchasePhotoMessageComposer, PurchaseRoomAdMessageComposer, PurchaseTargetedOfferComposer, PurchaseVipMembershipExtensionComposer, QuestCancelledMessageEvent, QuestCompletedMessageEvent, QuestDailyMessageEvent, QuestionAnsweredEvent, QuestionEvent, QuestionFinishedEvent, QuestMessageEvent, QuestsMessageEvent, QuizDataMessageEvent, QuizResultsMessageEvent, RateFlatMessageComposer, RecycleItemsMessageComposer, RecyclerFinishedMessageEvent, RecyclerStatusMessageEvent, RedeemCommunityGoalPrizeMessageComposer, RedeemItemClothingComposer, RedeemMarketplaceOfferCreditsMessageComposer, RedeemVoucherMessageComposer, RejectQuestMessageComposer, RelationshipStatusInfoEvent, ReleaseIssuesMessageComposer, RemainingMuteEvent, RemoveAllRightsMessageComposer, RemoveFriendComposer, RemoveJukeboxDiskComposer, RemoveOwnRoomRightsRoomMessageComposer, RemovePetSaddleComposer, RemoveWallItemComposer, RenderRoomMessageComposer, RenderRoomThumbnailMessageComposer, RentableSpaceCancelRentMessageComposer, RentableSpaceRentFailedMessageEvent, RentableSpaceRentMessageComposer, RentableSpaceRentOkMessageEvent, RentableSpaceStatusMessageComposer, RentableSpaceStatusMessageEvent, RequestABadgeComposer, RequestAchievementsMessageComposer, RequestBadgesComposer, RequestBotCommandConfigurationComposer, RequestCameraConfigurationComposer, RequestFriendComposer, RequestFurniInventoryWhenNotInRoomComposer, RequestPetInfoComposer, RequestPetsComposer, RequestSpamWallPostItMessageEvent, ResetPhoneNumberStateMessageComposer, ResetResolutionAchievementMessageComposer, RespectReceivedEvent, RestoreClientMessageEvent, RoomAdErrorEvent, RoomAdEventTabAdClickedComposer, RoomAdEventTabViewedComposer, RoomAdPurchaseInfoEvent, RoomAdPurchaseInitiatedComposer, RoomAdSearchMessageComposer, RoomAmbassadorAlertComposer, RoomBannedUsersComposer, RoomBanUserComposer, RoomChatlogEvent, RoomChatSettingsEvent, RoomCompetitionInitMessageComposer, RoomDeleteComposer, RoomDimmerPresetsEvent, RoomDoorbellAcceptedEvent, RoomDoorbellAccessComposer, RoomEnterComposer, RoomEnterErrorEvent, RoomEnterEvent, RoomEntryInfoMessageEvent, RoomEntryTileMessageEvent, RoomEventCancelEvent, RoomEventEvent, RoomFilterSettingsMessageEvent, RoomForwardEvent, RoomGiveRightsComposer, RoomHeightMapEvent, RoomHeightMapUpdateEvent, RoomInviteErrorEvent, RoomInviteEvent, RoomKickUserComposer, RoomMessageNotificationMessageEvent, RoomMuteComposer, RoomMuteUserComposer, RoomNetworkOpenConnectionMessageComposer, RoomOccupiedTilesMessageEvent, RoomPaintEvent, RoomPollResultEvent, RoomReadyMessageEvent, RoomRightsClearEvent, RoomRightsEvent, RoomRightsOwnerEvent, RoomScoreEvent, RoomSettingsComposer, RoomSettingsDataEvent, RoomSettingsErrorEvent, RoomSettingsSavedEvent, RoomSettingsSaveErrorEvent, RoomSettingsUpdatedEvent, RoomsWhereMyFriendsAreSearchMessageComposer, RoomsWithHighestScoreSearchMessageComposer, RoomTakeRightsComposer, RoomTextSearchMessageComposer, RoomThumbnailUpdateResultEvent, RoomUnbanUserComposer, RoomUnitActionComposer, RoomUnitBackgroundComposer, RoomUnitChatComposer, RoomUnitChatEvent, RoomUnitChatShoutComposer, RoomUnitChatShoutEvent, RoomUnitChatStyleComposer, RoomUnitChatWhisperComposer, RoomUnitChatWhisperEvent, RoomUnitDanceComposer, RoomUnitDanceEvent, RoomUnitDropHandItemComposer, RoomUnitEffectEvent, RoomUnitEvent, RoomUnitExpressionEvent, RoomUnitGiveHandItemComposer, RoomUnitGiveHandItemPetComposer, RoomUnitHandItemEvent, RoomUnitHandItemReceivedEvent, RoomUnitIdleEvent, RoomUnitInfoEvent, RoomUnitLookComposer, RoomUnitNumberEvent, RoomUnitPostureComposer, RoomUnitRemoveEvent, RoomUnitSignComposer, RoomUnitStatusEvent, RoomUnitTypingEvent, RoomUnitTypingStartComposer, RoomUnitTypingStopComposer, RoomUnitWalkComposer, RoomUsersClassificationMessageComposer, RoomUsersWithRightsComposer, RoomVisitsEvent, RoomVisualizationSettingsEvent, SanctionStatusEvent, SaveRoomSettingsComposer, SaveWardrobeOutfitMessageComposer, ScrGetKickbackInfoMessageComposer, ScrSendKickbackInfoMessageEvent, SearchFaqsMessageComposer, SeasonalCalendarDailyOfferMessageEvent, SeasonalQuestsMessageEvent, SecondsUntilMessageEvent, SelectClubGiftComposer, SellablePetPalettesMessageEvent, SendMessageComposer, SendRoomInviteComposer, SetActivatedBadgesComposer, SetClothingChangeDataMessageComposer, SetItemDataMessageComposer, SetObjectDataMessageComposer, SetPhoneNumberVerificationStatusMessageComposer, SetRelationshipStatusComposer, SetRoomSessionTagsMessageComposer, SetTargetedOfferStateComposer, SetYoutubeDisplayPlaylistMessageComposer, ShopTargetedOfferViewedComposer, ShowEnforceRoomCategoryDialogEvent, ShowMysteryBoxWaitMessageEvent, SimpleAlertMessageEvent, SSOTicketMessageComposer, StartCampaignMessageComposer, StartRoomPollEvent, SubmitRoomToCompetitionMessageComposer, TalentLevelUpEvent, TalentTrackComposer, TalentTrackLevelMessageEvent, TalentTrackMessageEvent, TargetedOfferEvent, TargetedOfferNotFoundEvent, ThreadMessagesMessageEvent, ThumbnailStatusMessageEvent, TogglePetBreedingComposer, TogglePetRidingComposer, ToggleStaffPickMessageComposer, TradingAcceptComposer, TradingAcceptEvent, TradingCancelComposer, TradingCloseComposer, TradingCloseEvent, TradingCompletedEvent, TradingConfirmationComposer, TradingConfirmationEvent, TradingListAddItemComposer, TradingListAddItemsComposer, TradingListItemEvent, TradingListItemRemoveComposer, TradingNoSuchItemEvent, TradingNotOpenEvent, TradingOpenComposer, TradingOpenEvent, TradingOpenFailedEvent, TradingOtherNotAllowedEvent, TradingUnacceptComposer, TradingYouAreNotAllowedEvent, TraxSongInfoMessageEvent, TryPhoneNumberMessageComposer, TryPhoneNumberResultMessageEvent, TryVerificationCodeResultMessageEvent, UnblockGroupMemberMessageComposer, UnignoreUserComposer, UniqueIDMessageComposer, UnloadGameMessageEvent, UnreadForumsCountMessageEvent, UnseenItemsEvent, UnseenResetCategoryComposer, UnseenResetItemsComposer, UpdateActionMessageComposer, UpdateConditionMessageComposer, UpdateFloorPropertiesMessageComposer, UpdateForumReadMarkerMessageComposer, UpdateForumSettingsMessageComposer, UpdateFurniturePositionComposer, UpdateHomeRoomMessageComposer, UpdateMessageMessageEvent, UpdateRoomCategoryAndTradeSettingsComposer, UpdateRoomFilterMessageComposer, UpdateRoomThumbnailMessageComposer, UpdateThreadMessageComposer, UpdateThreadMessageEvent, UpdateTriggerMessageComposer, UsePetProductComposer, UserBannedMessageEvent, UserChatlogEvent, UserClassificationMessageEvent, UserCreditsEvent, UserCurrencyComposer, UserCurrencyEvent, UserCurrentBadgesComposer, UserCurrentBadgesEvent, UserEventCatsEvent, UserFigureComposer, UserFlatCatsEvent, UserGameAchievementsMessageEvent, UserInfoEvent, UserMottoComposer, UserNameChangeMessageEvent, UserPermissionsEvent, UserProfileComposer, UserProfileEvent, UserRelationshipsComposer, UserRespectComposer, UserSettingsCameraFollowComposer, UserSettingsEvent, UserSettingsOldChatComposer, UserSettingsRoomInvitesComposer, UserSettingsSoundComposer, UserSongDisksInventoryMessageEvent, UserSubscriptionComposer, UserSubscriptionEvent, UserTagsMessageEvent, UserUnbannedFromRoomEvent, UserWardrobePageEvent, VerifyCodeMessageComposer, VersionCheckMessageComposer, VisitUserComposer, VoteForRoomMessageComposer, VotePollCounterMessageComposer, VoucherRedeemErrorMessageEvent, VoucherRedeemOkMessageEvent, WardrobeMessageEvent, WeeklyCompetitiveFriendsLeaderboardEvent, WeeklyCompetitiveLeaderboardEvent, WeeklyGameRewardEvent, WeeklyGameRewardWinnersEvent, WelcomeGiftChangeEmailComposer, WelcomeGiftChangeEmailResultEvent, WelcomeGiftStatusEvent, WiredFurniActionEvent, WiredFurniConditionEvent, WiredFurniTriggerEvent, WiredOpenEvent, WiredRewardResultMessageEvent, WiredSaveSuccessEvent, WiredValidationErrorEvent, YouArePlayingGameEvent, YouAreSpectatorMessageEvent, YoutubeControlVideoMessageEvent, YoutubeDisplayPlaylistsEvent, YoutubeDisplayVideoMessageEvent, ClickUserMessageComposer } from './messages'; +import { AcceptFriendMessageComposer, AcceptFriendResultEvent, AcceptGameInviteMessageComposer, AcceptQuestMessageComposer, AccountSafetyLockStatusChangeMessageEvent, AchievementEvent, AchievementNotificationMessageEvent, AchievementResolutionCompletedMessageEvent, AchievementResolutionProgressMessageEvent, AchievementResolutionsMessageEvent, AchievementsEvent, AchievementsScoreEvent, ActivateQuestMessageComposer, ActivityPointNotificationMessageEvent, AddFavouriteRoomMessageComposer, AddJukeboxDiskComposer, AddSpamWallPostItMessageComposer, ApplySnapshotMessageComposer, ApplyTonerComposer, ApproveAllMembershipRequestsMessageComposer, ApproveNameMessageComposer, ApproveNameMessageEvent, AreaHideMessageEvent, AuthenticatedEvent, AuthenticationMessageComposer, AvailabilityStatusMessageEvent, AvailabilityTimeMessageEvent, AvailableCommandsEvent, AvatarEffectActivatedComposer, AvatarEffectActivatedEvent, AvatarEffectAddedEvent, AvatarEffectExpiredEvent, AvatarEffectSelectedComposer, AvatarEffectSelectedEvent, AvatarEffectsEvent, BadgePointLimitsEvent, BadgeReceivedEvent, BadgesEvent, BannedUsersFromRoomEvent, BonusRareInfoMessageEvent, BotAddedToInventoryEvent, BotCommandConfigurationEvent, BotErrorEvent, BotForceOpenContextMenuEvent, BotInventoryMessageEvent, BotPlaceComposer, BotReceivedMessageEvent, BotRemoveComposer, BotRemovedFromInventoryEvent, BotSkillListUpdateEvent, BotSkillSaveComposer, BreedPetsMessageComposer, BuildersClubFurniCountMessageEvent, BuildersClubPlaceRoomItemMessageComposer, BuildersClubPlaceWallItemMessageComposer, BuildersClubQueryFurniCountMessageComposer, BuildersClubSubscriptionStatusMessageEvent, BundleDiscountRulesetMessageEvent, BuyMarketplaceOfferMessageComposer, BuyMarketplaceTokensMessageComposer, CallForHelpDisabledNotifyMessageEvent, CallForHelpFromForumMessageMessageComposer, CallForHelpFromForumThreadMessageComposer, CallForHelpFromIMMessageComposer, CallForHelpFromPhotoMessageComposer, CallForHelpFromSelfieMessageComposer, CallForHelpMessageComposer, CallForHelpPendingCallsDeletedMessageEvent, CallForHelpPendingCallsMessageEvent, CallForHelpReplyMessageEvent, CallForHelpResultMessageEvent, CameraPublishStatusMessageEvent, CameraPurchaseOKMessageEvent, CameraSnapshotMessageEvent, CameraStorageUrlMessageEvent, CampaignCalendarDataMessageEvent, CampaignCalendarDoorOpenedMessageEvent, CancelEventMessageComposer, CancelMarketplaceOfferMessageComposer, CancelMysteryBoxWaitMessageEvent, CancelPetBreedingComposer, CancelQuestMessageComposer, CanCreateRoomEvent, CanCreateRoomEventEvent, CanCreateRoomMessageComposer, CatalogAdminCreateOfferComposer, CatalogAdminCreatePageComposer, CatalogAdminDeleteOfferComposer, CatalogAdminDeletePageComposer, CatalogAdminMoveOfferComposer, CatalogAdminMovePageComposer, CatalogAdminPublishComposer, CatalogAdminResultEvent, CatalogAdminSaveOfferComposer, CatalogAdminSavePageComposer, CatalogGroupsComposer, CatalogPageExpirationEvent, CatalogPageMessageEvent, CatalogPagesListEvent, CatalogPageWithEarliestExpiryMessageEvent, CatalogPublishedMessageEvent, CategoriesWithVisitorCountEvent, CfhChatlogEvent, CfhSanctionMessageEvent, CfhTopicsInitEvent, ChangeEmailComposer, ChangeEmailResultEvent, ChangeQueueMessageComposer, ChangeUserNameMessageComposer, ChangeUserNameResultMessageEvent, ChatReviewGuideDecidesOnOfferMessageComposer, ChatReviewGuideDetachedMessageComposer, ChatReviewGuideVoteMessageComposer, ChatReviewSessionCreateMessageComposer, ChatReviewSessionDetachedMessageEvent, ChatReviewSessionOfferedToGuideMessageEvent, ChatReviewSessionResultsMessageEvent, ChatReviewSessionStartedMessageEvent, ChatReviewSessionVotingStatusMessageEvent, CheckUserNameMessageComposer, CheckUserNameResultMessageEvent, ClickFurniMessageComposer, ClientHelloMessageComposer, ClientPingEvent, CloseIssueDefaultActionMessageComposer, CloseIssuesMessageComposer, ClubGiftInfoEvent, ClubGiftNotificationEvent, ClubGiftSelectedEvent, CommunityGoalEarnedPrizesMessageEvent, CommunityGoalHallOfFameMessageEvent, CommunityGoalProgressMessageEvent, CommunityGoalVoteMessageComposer, CommunityGoalVoteMessageEvent, CompetitionEntrySubmitResultEvent, CompetitionRoomsDataMessageEvent, CompetitionRoomsSearchMessageComposer, CompetitionStatusMessageEvent, CompetitionVotingInfoMessageEvent, CompleteDiffieHandshakeEvent, CompleteDiffieHandshakeMessageComposer, CompostPlantMessageComposer, ConcurrentUsersGoalProgressMessageEvent, ConfirmPetBreedingComposer, ConnectionErrorEvent, ControlYoutubeDisplayPlaybackMessageComposer, ConvertedRoomIdEvent, ConvertGlobalRoomIdMessageComposer, CraftableProductsEvent, CraftComposer, CraftingRecipeEvent, CraftingRecipesAvailableEvent, CraftingResultEvent, CraftSecretComposer, CreateFlatMessageComposer, CurrentTimingCodeMessageEvent, CustomUserNotificationMessageEvent, DeclineFriendMessageComposer, DefaultSanctionMessageComposer, DeleteBadgeMessageComposer, DeleteFavouriteRoomMessageComposer, DeleteItemMessageComposer, DeletePendingCallsForHelpMessageComposer, DeletePetMessageComposer, DesktopViewComposer, DesktopViewEvent, DiceValueMessageEvent, DirectSMSClubBuyAvailableMessageEvent, DisconnectMessageComposer, DisconnectReasonEvent, DoorbellMessageEvent, EditEventMessageComposer, ElementPointerMessageEvent, EmailStatusResultEvent, EpicPopupMessageEvent, ExtendedProfileChangedMessageEvent, ExtendRentOrBuyoutFurniMessageComposer, ExtendRentOrBuyoutStripItemMessageComposer, FavoriteMembershipUpdateMessageEvent, FavouriteChangedEvent, FavouritesEvent, FigureSetIdsMessageEvent, FigureUpdateEvent, FindFriendsProcessResultEvent, FindNewFriendsMessageComposer, FireworkChargeDataEvent, FlatAccessDeniedMessageEvent, FlatControllerAddedEvent, FlatControllerRemovedEvent, FlatControllersEvent, FlatCreatedEvent, FloodControlEvent, FloorHeightMapEvent, FollowFriendFailedEvent, FollowFriendMessageComposer, ForumDataMessageEvent, ForumsListMessageEvent, ForwardToACompetitionRoomMessageComposer, ForwardToARandomPromotedRoomMessageComposer, ForwardToASubmittableRoomMessageComposer, ForwardToRandomCompetitionRoomMessageComposer, ForwardToSomeRoomMessageComposer, FriendFurniConfirmLockMessageComposer, FriendListFragmentEvent, FriendListUpdateComposer, FriendListUpdateEvent, FriendNotificationEvent, FriendRequestQuestCompleteMessageComposer, FriendRequestsEvent, FurniRentOrBuyoutOfferMessageEvent, FurnitureAliasesComposer, FurnitureAliasesEvent, FurnitureColorWheelComposer, FurnitureDataEvent, FurnitureDiceActivateComposer, FurnitureDiceDeactivateComposer, FurnitureExchangeComposer, FurnitureFloorAddEvent, FurnitureFloorEvent, FurnitureFloorRemoveEvent, FurnitureFloorUpdateComposer, FurnitureFloorUpdateEvent, FurnitureGroupInfoComposer, FurnitureListAddOrUpdateEvent, FurnitureListComposer, FurnitureListEvent, FurnitureListInvalidateEvent, FurnitureListRemovedEvent, FurnitureMannequinSaveLookComposer, FurnitureMannequinSaveNameComposer, FurnitureMultiStateComposer, FurnitureOneWayDoorComposer, FurniturePickupAllComposer, FurniturePickupComposer, FurniturePlaceComposer, FurniturePlacePaintComposer, FurniturePostItPlaceComposer, FurniturePostItPlacedEvent, FurnitureRandomStateComposer, FurnitureStackHeightComposer, FurnitureStackHeightEvent, FurnitureWallAddEvent, FurnitureWallEvent, FurnitureWallMultiStateComposer, FurnitureWallRemoveEvent, FurnitureWallUpdateComposer, FurnitureWallUpdateEvent, FurniEditorBySpriteComposer, FurniEditorDeleteComposer, FurniEditorDetailComposer, FurniEditorDetailResultEvent, FurniEditorInteractionsComposer, FurniEditorInteractionsResultEvent, FurniEditorResultEvent, FurniEditorSearchComposer, FurniEditorSearchResultEvent, FurniEditorUpdateComposer, Game2AccountGameStatusMessageEvent, Game2CheckGameDirectoryStatusMessageComposer, Game2ExitGameMessageComposer, Game2GameChatMessageComposer, Game2GameDirectoryStatusMessageEvent, Game2GetAccountGameStatusMessageComposer, Game2GetWeeklyFriendsLeaderboardComposer, Game2GetWeeklyLeaderboardComposer, Game2InArenaQueueMessageEvent, Game2JoiningGameFailedMessageEvent, Game2LoadStageReadyMessageComposer, Game2PlayAgainMessageComposer, Game2RequestFullStatusUpdateMessageComposer, Game2StartingGameFailedMessageEvent, Game2StopCounterMessageEvent, Game2UserLeftGameMessageEvent, Game2WeeklyFriendsLeaderboardEvent, Game2WeeklyLeaderboardEvent, GameAchievementsMessageEvent, GameInviteMessageEvent, GameListMessageEvent, GameStatusMessageEvent, GameUnloadedMessageComposer, GenericErrorEvent, GetBadgePointLimitsComposer, GetBonusRareInfoMessageComposer, GetBotInventoryComposer, GetBundleDiscountRulesetComposer, GetCatalogIndexComposer, GetCatalogPageComposer, GetCatalogPageExpirationComposer, GetCatalogPageWithEarliestExpiryComposer, GetCategoriesWithUserCountMessageComposer, GetCfhChatlogMessageComposer, GetCfhStatusMessageComposer, GetClubGiftInfo, GetClubOffersMessageComposer, GetCommunityGoalEarnedPrizesMessageComposer, GetCommunityGoalHallOfFameMessageComposer, GetCommunityGoalProgressMessageComposer, GetConcurrentUsersGoalProgressMessageComposer, GetConcurrentUsersRewardMessageComposer, GetCraftableProductsComposer, GetCraftingRecipeComposer, GetCraftingRecipesAvailableComposer, GetCurrentTimingCodeMessageComposer, GetCustomRoomFilterMessageComposer, GetDailyQuestMessageComposer, GetDirectClubBuyAvailableComposer, GetEmailStatusComposer, GetExtendedProfileByNameMessageComposer, GetFaqCategoryMessageComposer, GetFaqTextMessageComposer, GetForumsListMessageComposer, GetForumStatsMessageComposer, GetFriendRequestsComposer, GetGameAchievementsMessageComposer, GetGameListMessageComposer, GetGameStatusMessageComposer, GetGiftMessageComposer, GetGiftWrappingConfigurationComposer, GetGuestRoomMessageComposer, GetGuestRoomResultEvent, GetGuideReportingStatusMessageComposer, GetHabboBasicMembershipExtendOfferComposer, GetHabboClubExtendOfferMessageComposer, GetHabboGroupBadgesMessageComposer, GetIgnoredUsersComposer, GetInterstitialMessageComposer, GetIsBadgeRequestFulfilledComposer, GetIsOfferGiftableComposer, GetIsUserPartOfCompetitionMessageComposer, GetItemDataComposer, GetJukeboxPlayListMessageComposer, GetLimitedOfferAppearingNextComposer, GetMarketplaceCanMakeOfferComposer, GetMarketplaceConfigurationMessageComposer, GetMarketplaceItemStatsComposer, GetMarketplaceOffersMessageComposer, GetMarketplaceOwnOffersMessageComposer, GetMessagesMessageComposer, GetModeratorRoomInfoMessageComposer, GetModeratorUserInfoMessageComposer, GetNextTargetedOfferComposer, GetNowPlayingMessageComposer, GetOccupiedTilesMessageComposer, GetOfficialRoomsMessageComposer, GetOfficialSongIdMessageComposer, GetPendingCallsForHelpMessageComposer, GetPetCommandsComposer, GetPopularRoomTagsMessageComposer, GetProductOfferComposer, GetPromoArticlesComposer, GetQuestsMessageComposer, GetQuizQuestionsComposer, GetRecyclerStatusMessageComposer, GetRentOrBuyoutOfferMessageComposer, GetResolutionAchievementsMessageComposer, GetRoomAdPurchaseInfoComposer, GetRoomChatlogMessageComposer, GetRoomEntryDataMessageComposer, GetRoomEntryTileMessageComposer, GetRoomVisitsMessageComposer, GetSeasonalCalendarDailyOfferComposer, GetSeasonalQuestsOnlyMessageComposer, GetSecondsUntilMessageComposer, GetSellablePetPalettesComposer, GetSongInfoMessageComposer, GetSoundMachinePlayListMessageComposer, GetSoundSettingsComposer, GetTalentTrackLevelMessageComposer, GetTargetedOfferComposer, GetThreadMessageComposer, GetThreadsMessageComposer, GetUnreadForumsCountMessageComposer, GetUserChatlogMessageComposer, GetUserEventCatsMessageComposer, GetUserFlatCatsMessageComposer, GetUserGameAchievementsMessageComposer, GetUserSongDisksMessageComposer, GetUserTagsComposer, GetWardrobeMessageComposer, GetWeeklyGameRewardComposer, GetWeeklyGameRewardWinnersComposer, GetYoutubeDisplayStatusMessageComposer, GiftReceiverNotFoundEvent, GiftWrappingConfigurationEvent, GotMysteryBoxPrizeMessageEvent, GoToFlatMessageComposer, GroupAdminGiveComposer, GroupAdminTakeComposer, GroupBadgePartsComposer, GroupBadgePartsEvent, GroupBuyComposer, GroupBuyDataComposer, GroupBuyDataEvent, GroupConfirmMemberRemoveEvent, GroupConfirmRemoveMemberComposer, GroupDeleteComposer, GroupDetailsChangedMessageEvent, GroupFavoriteComposer, GroupFurniContextMenuInfoMessageEvent, GroupInformationComposer, GroupInformationEvent, GroupJoinComposer, GroupMembersComposer, GroupMembersEvent, GroupMembershipAcceptComposer, GroupMembershipDeclineComposer, GroupMembershipRequestedMessageEvent, GroupPurchasedEvent, GroupRemoveMemberComposer, GroupSaveBadgeComposer, GroupSaveColorsComposer, GroupSaveInformationComposer, GroupSavePreferencesComposer, GroupSettingsComposer, GroupSettingsEvent, GroupUnfavoriteComposer, GuestRoomSearchResultEvent, GuideOnDutyStatusMessageEvent, GuideReportingStatusMessageEvent, GuideSessionAttachedMessageEvent, GuideSessionCreateMessageComposer, GuideSessionDetachedMessageEvent, GuideSessionEndedMessageEvent, GuideSessionErrorMessageEvent, GuideSessionFeedbackMessageComposer, GuideSessionGetRequesterRoomMessageComposer, GuideSessionGuideDecidesMessageComposer, GuideSessionInvitedToGuideRoomMessageEvent, GuideSessionInviteRequesterMessageComposer, GuideSessionIsTypingMessageComposer, GuideSessionMessageMessageComposer, GuideSessionMessageMessageEvent, GuideSessionOnDutyUpdateMessageComposer, GuideSessionPartnerIsTypingMessageEvent, GuideSessionReportMessageComposer, GuideSessionRequesterCancelsMessageComposer, GuideSessionRequesterRoomMessageEvent, GuideSessionResolvedMessageComposer, GuideSessionStartedMessageEvent, GuideTicketCreationResultMessageEvent, GuideTicketResolutionMessageEvent, GuildBaseSearchMessageComposer, GuildEditFailedMessageEvent, GuildForumThreadsEvent, GuildMemberMgmtFailedMessageEvent, GuildMembershipsMessageEvent, HabboBroadcastMessageEvent, HabboClubExtendOfferMessageEvent, HabboClubOffersMessageEvent, HabboGroupBadgesMessageEvent, HabboGroupDeactivatedMessageEvent, HabboGroupJoinFailedMessageEvent, HabboSearchComposer, HabboSearchResultEvent, HarvestPetMessageComposer, HotelClosedAndOpensEvent, HotelClosesAndWillOpenAtEvent, HotelMergeNameChangeEvent, HotelWillCloseInMinutesEvent, IdentityAccountsEvent, IgnoredUsersEvent, IgnoreResultEvent, IgnoreUserComposer, IgnoreUserIdComposer, InClientLinkEvent, IncomingHeader, InfoFeedEnableMessageEvent, InfoRetrieveMessageComposer, InitCameraMessageEvent, InitDiffieHandshakeEvent, InitDiffieHandshakeMessageComposer, InstantMessageErrorEvent, InterstitialMessageEvent, InterstitialShownMessageComposer, IsBadgeRequestFulfilledEvent, IsOfferGiftableMessageEvent, IssueCloseNotificationMessageEvent, IssueDeletedMessageEvent, IssueInfoMessageEvent, IssuePickFailedMessageEvent, IsUserPartOfCompetitionMessageEvent, ItemDataUpdateMessageEvent, JoinedQueueMessageEvent, JoiningQueueFailedMessageEvent, JoinQueueMessageComposer, JukeboxPlayListFullMessageEvent, JukeboxSongDisksMessageEvent, LagWarningReportMessageComposer, LeaveQueueMessageComposer, LeftQueueMessageEvent, LimitedEditionSoldOutEvent, LimitedOfferAppearingNextMessageEvent, LoadGameMessageEvent, LoadGameUrlEvent, LoveLockFurniFinishedEvent, LoveLockFurniFriendConfirmedEvent, LoveLockFurniStartEvent, MaintenanceStatusMessageEvent, MakeOfferMessageComposer, MarkCatalogNewAdditionsPageOpenedComposer, MarketplaceBuyOfferResultEvent, MarketplaceCancelOfferResultEvent, MarketplaceCanMakeOfferResult, MarketplaceConfigurationEvent, MarketplaceItemStatsEvent, MarketplaceMakeOfferResult, MarketPlaceOffersEvent, MarketplaceOwnOffersEvent, MessageErrorEvent, MessengerInitComposer, MessengerInitEvent, MiniMailNewMessageEvent, MiniMailUnreadCountEvent, ModAlertMessageComposer, ModBanMessageComposer, ModerateMessageMessageComposer, ModerateRoomMessageComposer, ModerateThreadMessageComposer, ModeratorActionMessageComposer, ModeratorActionResultMessageEvent, ModeratorCautionEvent, ModeratorInitMessageEvent, ModeratorMessageEvent, ModeratorRoomInfoEvent, ModeratorToolPreferencesEvent, ModeratorUserInfoEvent, ModKickMessageComposer, ModMessageMessageComposer, ModMuteMessageComposer, ModToolPreferencesComposer, ModToolSanctionComposer, ModTradingLockMessageComposer, MoodlightSettingsComposer, MoodlightSettingsSaveComposer, MoodlightTogggleStateComposer, MOTDNotificationEvent, MuteAllInRoomEvent, MyFavouriteRoomsSearchMessageComposer, MyFrequentRoomHistorySearchMessageComposer, MyFriendsRoomsSearchMessageComposer, MyGuildBasesSearchMessageComposer, MyRecommendedRoomsMessageComposer, MyRoomHistorySearchMessageComposer, MyRoomRightsSearchMessageComposer, MyRoomsSearchMessageComposer, MysteryBoxKeysEvent, MysteryBoxWaitingCanceledMessageComposer, NavigatorCategoryListModeComposer, NavigatorCollapsedEvent, NavigatorDeleteSavedSearchComposer, NavigatorHomeRoomEvent, NavigatorInitComposer, NavigatorLiftedEvent, NavigatorMetadataEvent, NavigatorOpenRoomCreatorEvent, NavigatorSearchCloseComposer, NavigatorSearchComposer, NavigatorSearchesEvent, NavigatorSearchEvent, NavigatorSearchOpenComposer, NavigatorSearchSaveComposer, NavigatorSettingsEvent, NavigatorSettingsSaveComposer, NewConsoleMessageEvent, NewFriendRequestEvent, NewUserExperienceGetGiftsComposer, NewUserExperienceGiftOfferMessageEvent, NewUserExperienceNotCompleteEvent, NewUserExperienceScriptProceedComposer, NoobnessLevelMessageEvent, NoOwnedRoomsAlertMessageEvent, NoSuchFlatEvent, NotEnoughBalanceMessageEvent, NotificationDialogMessageEvent, NowPlayingMessageEvent, ObjectsDataUpdateEvent, ObjectsRollingEvent, OfferRewardDeliveredMessageEvent, OfficialSongIdMessageEvent, OneWayDoorStatusMessageEvent, OpenCampaignCalendarDoorAsStaffComposer, OpenCampaignCalendarDoorComposer, OpenMessageComposer, OpenMysteryTrophyMessageComposer, OpenPetPackageMessageComposer, OpenPetPackageRequestedMessageEvent, OpenPetPackageResultMessageEvent, OpenPresentComposer, OpenQuestTrackerMessageComposer, OpenWelcomeGiftComposer, OutgoingHeader, PeerUsersClassificationMessageComposer, PerformanceLogMessageComposer, PerkAllowancesMessageEvent, PetAddedToInventoryEvent, PetBreedingResultEvent, PetExperienceEvent, PetFigureUpdateEvent, PetInfoEvent, PetInventoryEvent, PetLevelNotificationEvent, PetLevelUpdateMessageEvent, PetMountComposer, PetMoveComposer, PetPlaceComposer, PetPlacingErrorEvent, PetReceivedMessageEvent, PetRemoveComposer, PetRemovedFromInventory, PetRespectComposer, PetRespectNoficationEvent, PetScratchFailedMessageEvent, PetSelectedMessageComposer, PetStatusUpdateEvent, PetSupplementComposer, PetSupplementedNotificationEvent, PetTrainingPanelMessageEvent, PhoneCollectionStateMessageEvent, PhotoCompetitionMessageComposer, PickIssuesMessageComposer, PlayListMessageEvent, PlayListSongAddedMessageEvent, PollAnswerComposer, PollContentsEvent, PollErrorEvent, PollOfferEvent, PollRejectComposer, PollStartComposer, PongMessageComposer, PopularRoomsSearchMessageComposer, PopularRoomTagsResultEvent, PostMessageMessageComposer, PostMessageMessageEvent, PostQuizAnswersComposer, PostThreadMessageEvent, PresentOpenedMessageEvent, ProductOfferEvent, PromoArticlesMessageEvent, PublishPhotoMessageComposer, PurchaseBasicMembershipExtensionComposer, PurchaseErrorMessageEvent, PurchaseFromCatalogAsGiftComposer, PurchaseFromCatalogComposer, PurchaseNotAllowedMessageEvent, PurchaseOKMessageEvent, PurchasePhotoMessageComposer, PurchaseRoomAdMessageComposer, PurchaseTargetedOfferComposer, PurchaseVipMembershipExtensionComposer, QuestCancelledMessageEvent, QuestCompletedMessageEvent, QuestDailyMessageEvent, QuestionAnsweredEvent, QuestionEvent, QuestionFinishedEvent, QuestMessageEvent, QuestsMessageEvent, QuizDataMessageEvent, QuizResultsMessageEvent, RateFlatMessageComposer, RecycleItemsMessageComposer, RecyclerFinishedMessageEvent, RecyclerStatusMessageEvent, RedeemCommunityGoalPrizeMessageComposer, RedeemItemClothingComposer, RedeemMarketplaceOfferCreditsMessageComposer, RedeemVoucherMessageComposer, RejectQuestMessageComposer, RelationshipStatusInfoEvent, ReleaseIssuesMessageComposer, RemainingMuteEvent, RemoveAllRightsMessageComposer, RemoveFriendComposer, RemoveJukeboxDiskComposer, RemoveOwnRoomRightsRoomMessageComposer, RemovePetSaddleComposer, RemoveWallItemComposer, RenderRoomMessageComposer, RenderRoomThumbnailMessageComposer, RentableSpaceCancelRentMessageComposer, RentableSpaceRentFailedMessageEvent, RentableSpaceRentMessageComposer, RentableSpaceRentOkMessageEvent, RentableSpaceStatusMessageComposer, RentableSpaceStatusMessageEvent, RequestABadgeComposer, RequestAchievementsMessageComposer, RequestBadgesComposer, RequestBotCommandConfigurationComposer, RequestCameraConfigurationComposer, RequestFriendComposer, RequestFurniInventoryWhenNotInRoomComposer, RequestPetInfoComposer, RequestPetsComposer, RequestSpamWallPostItMessageEvent, ResetPhoneNumberStateMessageComposer, ResetResolutionAchievementMessageComposer, RespectReceivedEvent, RestoreClientMessageEvent, RoomAdErrorEvent, RoomAdEventTabAdClickedComposer, RoomAdEventTabViewedComposer, RoomAdPurchaseInfoEvent, RoomAdPurchaseInitiatedComposer, RoomAdSearchMessageComposer, RoomAmbassadorAlertComposer, RoomBannedUsersComposer, RoomBanUserComposer, RoomChatlogEvent, RoomChatSettingsEvent, RoomCompetitionInitMessageComposer, RoomDeleteComposer, RoomDimmerPresetsEvent, RoomDoorbellAcceptedEvent, RoomDoorbellAccessComposer, RoomEnterComposer, RoomEnterErrorEvent, RoomEnterEvent, RoomEntryInfoMessageEvent, RoomEntryTileMessageEvent, RoomEventCancelEvent, RoomEventEvent, RoomFilterSettingsMessageEvent, RoomForwardEvent, RoomGiveRightsComposer, RoomHeightMapEvent, RoomHeightMapUpdateEvent, RoomInviteErrorEvent, RoomInviteEvent, RoomKickUserComposer, RoomMessageNotificationMessageEvent, RoomMuteComposer, RoomMuteUserComposer, RoomNetworkOpenConnectionMessageComposer, RoomOccupiedTilesMessageEvent, RoomPaintEvent, RoomPollResultEvent, RoomReadyMessageEvent, RoomRightsClearEvent, RoomRightsEvent, RoomRightsOwnerEvent, RoomScoreEvent, RoomSettingsComposer, RoomSettingsDataEvent, RoomSettingsErrorEvent, RoomSettingsSavedEvent, RoomSettingsSaveErrorEvent, RoomSettingsUpdatedEvent, RoomsWhereMyFriendsAreSearchMessageComposer, RoomsWithHighestScoreSearchMessageComposer, RoomTakeRightsComposer, RoomTextSearchMessageComposer, RoomThumbnailUpdateResultEvent, RoomUnbanUserComposer, RoomUnitActionComposer, RoomUnitBackgroundComposer, RoomUnitChatComposer, RoomUnitChatEvent, RoomUnitChatShoutComposer, RoomUnitChatShoutEvent, RoomUnitChatStyleComposer, RoomUnitChatWhisperComposer, RoomUnitChatWhisperEvent, RoomUnitDanceComposer, RoomUnitDanceEvent, RoomUnitDropHandItemComposer, RoomUnitEffectEvent, RoomUnitEvent, RoomUnitExpressionEvent, RoomUnitGiveHandItemComposer, RoomUnitGiveHandItemPetComposer, RoomUnitHandItemEvent, RoomUnitHandItemReceivedEvent, RoomUnitIdleEvent, RoomUnitInfoEvent, RoomUnitLookComposer, RoomUnitNumberEvent, RoomUnitPostureComposer, RoomUnitRemoveEvent, RoomUnitSignComposer, RoomUnitStatusEvent, RoomUnitTypingEvent, RoomUnitTypingStartComposer, RoomUnitTypingStopComposer, RoomUnitWalkComposer, RoomUsersClassificationMessageComposer, RoomUsersWithRightsComposer, RoomVisitsEvent, RoomVisualizationSettingsEvent, SanctionStatusEvent, SaveRoomSettingsComposer, SaveWardrobeOutfitMessageComposer, ScrGetKickbackInfoMessageComposer, ScrSendKickbackInfoMessageEvent, SearchFaqsMessageComposer, SeasonalCalendarDailyOfferMessageEvent, SeasonalQuestsMessageEvent, SecondsUntilMessageEvent, SelectClubGiftComposer, SellablePetPalettesMessageEvent, SendMessageComposer, SendRoomInviteComposer, SetActivatedBadgesComposer, SetClothingChangeDataMessageComposer, SetItemDataMessageComposer, SetObjectDataMessageComposer, SetPhoneNumberVerificationStatusMessageComposer, SetRelationshipStatusComposer, SetRoomSessionTagsMessageComposer, SetTargetedOfferStateComposer, SetYoutubeDisplayPlaylistMessageComposer, ShopTargetedOfferViewedComposer, ShowEnforceRoomCategoryDialogEvent, ShowMysteryBoxWaitMessageEvent, SimpleAlertMessageEvent, SSOTicketMessageComposer, StartCampaignMessageComposer, StartRoomPollEvent, SubmitRoomToCompetitionMessageComposer, TalentLevelUpEvent, TalentTrackComposer, TalentTrackLevelMessageEvent, TalentTrackMessageEvent, TargetedOfferEvent, TargetedOfferNotFoundEvent, ThreadMessagesMessageEvent, ThumbnailStatusMessageEvent, TogglePetBreedingComposer, TogglePetRidingComposer, ToggleStaffPickMessageComposer, TradingAcceptComposer, TradingAcceptEvent, TradingCancelComposer, TradingCloseComposer, TradingCloseEvent, TradingCompletedEvent, TradingConfirmationComposer, TradingConfirmationEvent, TradingListAddItemComposer, TradingListAddItemsComposer, TradingListItemEvent, TradingListItemRemoveComposer, TradingNoSuchItemEvent, TradingNotOpenEvent, TradingOpenComposer, TradingOpenEvent, TradingOpenFailedEvent, TradingOtherNotAllowedEvent, TradingUnacceptComposer, TradingYouAreNotAllowedEvent, TraxSongInfoMessageEvent, TryPhoneNumberMessageComposer, TryPhoneNumberResultMessageEvent, TryVerificationCodeResultMessageEvent, UnblockGroupMemberMessageComposer, UnignoreUserComposer, UniqueIDMessageComposer, UnloadGameMessageEvent, UnreadForumsCountMessageEvent, UnseenItemsEvent, UnseenResetCategoryComposer, UnseenResetItemsComposer, UpdateActionMessageComposer, UpdateConditionMessageComposer, UpdateFloorPropertiesMessageComposer, UpdateForumReadMarkerMessageComposer, UpdateForumSettingsMessageComposer, UpdateFurniturePositionComposer, UpdateHomeRoomMessageComposer, UpdateMessageMessageEvent, UpdateRoomCategoryAndTradeSettingsComposer, UpdateRoomFilterMessageComposer, UpdateRoomThumbnailMessageComposer, UpdateThreadMessageComposer, UpdateThreadMessageEvent, UpdateTriggerMessageComposer, UsePetProductComposer, UserBannedMessageEvent, UserChatlogEvent, UserClassificationMessageEvent, UserCreditsEvent, UserCurrencyComposer, UserCurrencyEvent, UserCurrentBadgesComposer, UserCurrentBadgesEvent, UserEventCatsEvent, UserFigureComposer, UserFlatCatsEvent, UserGameAchievementsMessageEvent, UserInfoEvent, UserMottoComposer, UserNameChangeMessageEvent, UserPermissionsEvent, UserProfileComposer, UserProfileEvent, UserRelationshipsComposer, UserRespectComposer, UserSettingsCameraFollowComposer, UserSettingsEvent, UserSettingsOldChatComposer, UserSettingsRoomInvitesComposer, UserSettingsSoundComposer, UserSongDisksInventoryMessageEvent, UserSubscriptionComposer, UserSubscriptionEvent, UserTagsMessageEvent, UserUnbannedFromRoomEvent, UserWardrobePageEvent, VerifyCodeMessageComposer, VersionCheckMessageComposer, VisitUserComposer, VoteForRoomMessageComposer, VotePollCounterMessageComposer, VoucherRedeemErrorMessageEvent, VoucherRedeemOkMessageEvent, WardrobeMessageEvent, WeeklyCompetitiveFriendsLeaderboardEvent, WeeklyCompetitiveLeaderboardEvent, WeeklyGameRewardEvent, WeeklyGameRewardWinnersEvent, WelcomeGiftChangeEmailComposer, WelcomeGiftChangeEmailResultEvent, WelcomeGiftStatusEvent, WiredFurniActionEvent, WiredFurniConditionEvent, WiredFurniTriggerEvent, WiredOpenEvent, WiredRewardResultMessageEvent, WiredSaveSuccessEvent, WiredValidationErrorEvent, YouArePlayingGameEvent, YouAreSpectatorMessageEvent, YoutubeControlVideoMessageEvent, YoutubeDisplayPlaylistsEvent, YoutubeDisplayVideoMessageEvent, ClickUserMessageComposer } from './messages'; import { WiredMovementsEvent } from './messages'; - export class NitroMessages implements IMessageConfiguration { private _events: Map; @@ -71,6 +70,13 @@ export class NitroMessages implements IMessageConfiguration this._events.set(IncomingHeader.CATALOG_EARLIEST_EXPIRY, CatalogPageWithEarliestExpiryMessageEvent); this._events.set(IncomingHeader.CATALOG_PUBLISHED, CatalogPublishedMessageEvent); this._events.set(IncomingHeader.CATALOG_ADMIN_RESULT, CatalogAdminResultEvent); + + // Furni Editor + this._events.set(IncomingHeader.FURNI_EDITOR_SEARCH_RESULT, FurniEditorSearchResultEvent); + this._events.set(IncomingHeader.FURNI_EDITOR_DETAIL_RESULT, FurniEditorDetailResultEvent); + this._events.set(IncomingHeader.FURNI_EDITOR_INTERACTIONS_RESULT, FurniEditorInteractionsResultEvent); + this._events.set(IncomingHeader.FURNI_EDITOR_RESULT, FurniEditorResultEvent); + this._events.set(IncomingHeader.CLUB_GIFT_INFO, ClubGiftInfoEvent); this._events.set(IncomingHeader.CLUB_GIFT_SELECTED, ClubGiftSelectedEvent); this._events.set(IncomingHeader.DIRECT_SMS_CLUB_BUY, DirectSMSClubBuyAvailableMessageEvent); @@ -631,6 +637,15 @@ export class NitroMessages implements IMessageConfiguration this._composers.set(OutgoingHeader.CATALOG_ADMIN_MOVE_OFFER, CatalogAdminMoveOfferComposer); this._composers.set(OutgoingHeader.CATALOG_ADMIN_MOVE_PAGE, CatalogAdminMovePageComposer); this._composers.set(OutgoingHeader.CATALOG_ADMIN_PUBLISH, CatalogAdminPublishComposer); + + // Furni Editor + this._composers.set(OutgoingHeader.FURNI_EDITOR_SEARCH, FurniEditorSearchComposer); + this._composers.set(OutgoingHeader.FURNI_EDITOR_DETAIL, FurniEditorDetailComposer); + this._composers.set(OutgoingHeader.FURNI_EDITOR_BY_SPRITE, FurniEditorBySpriteComposer); + this._composers.set(OutgoingHeader.FURNI_EDITOR_INTERACTIONS, FurniEditorInteractionsComposer); + this._composers.set(OutgoingHeader.FURNI_EDITOR_UPDATE, FurniEditorUpdateComposer); + this._composers.set(OutgoingHeader.FURNI_EDITOR_DELETE, FurniEditorDeleteComposer); + this._composers.set(OutgoingHeader.GET_CATALOG_INDEX, GetCatalogIndexComposer); this._composers.set(OutgoingHeader.GET_CATALOG_PAGE, GetCatalogPageComposer); this._composers.set(OutgoingHeader.CATALOG_PURCHASE, PurchaseFromCatalogComposer); diff --git a/packages/communication/src/index.ts b/packages/communication/src/index.ts index 5553756..916eaf1 100644 --- a/packages/communication/src/index.ts +++ b/packages/communication/src/index.ts @@ -20,6 +20,7 @@ export * from './messages/incoming/competition'; export * from './messages/incoming/crafting'; export * from './messages/incoming/desktop'; export * from './messages/incoming/friendlist'; +export * from './messages/incoming/furnieditor'; export * from './messages/incoming/game'; export * from './messages/incoming/game/directory'; export * from './messages/incoming/game/lobby'; @@ -94,6 +95,7 @@ export * from './messages/outgoing/crafting'; export * from './messages/outgoing/desktop'; export * from './messages/outgoing/friendfurni'; export * from './messages/outgoing/friendlist'; +export * from './messages/outgoing/furnieditor'; export * from './messages/outgoing/game'; export * from './messages/outgoing/game/arena'; export * from './messages/outgoing/game/directory'; @@ -173,6 +175,7 @@ export * from './messages/parser/competition'; export * from './messages/parser/crafting'; export * from './messages/parser/desktop'; export * from './messages/parser/friendlist'; +export * from './messages/parser/furnieditor'; export * from './messages/parser/game'; export * from './messages/parser/game/directory'; export * from './messages/parser/game/lobby'; diff --git a/packages/communication/src/messages/incoming/IncomingHeader.ts b/packages/communication/src/messages/incoming/IncomingHeader.ts index c34b284..fb1119d 100644 --- a/packages/communication/src/messages/incoming/IncomingHeader.ts +++ b/packages/communication/src/messages/incoming/IncomingHeader.ts @@ -477,6 +477,12 @@ export class IncomingHeader public static RENTABLE_FURNI_RENT_OR_BUYOUT_OFFER = 35; public static HANDSHAKE_IDENTITY_ACCOUNT = 3523; + // Furni Editor + public static FURNI_EDITOR_SEARCH_RESULT = 10040; + public static FURNI_EDITOR_DETAIL_RESULT = 10041; + public static FURNI_EDITOR_INTERACTIONS_RESULT = 10043; + public static FURNI_EDITOR_RESULT = 10044; + // Catalog Admin public static CATALOG_ADMIN_RESULT = 10059; diff --git a/packages/communication/src/messages/incoming/furnieditor/FurniEditorDetailResultEvent.ts b/packages/communication/src/messages/incoming/furnieditor/FurniEditorDetailResultEvent.ts new file mode 100644 index 0000000..2c1c318 --- /dev/null +++ b/packages/communication/src/messages/incoming/furnieditor/FurniEditorDetailResultEvent.ts @@ -0,0 +1,16 @@ +import { IMessageEvent } from '@nitrots/api'; +import { MessageEvent } from '@nitrots/events'; +import { FurniEditorDetailResultMessageParser } from '../../parser'; + +export class FurniEditorDetailResultEvent extends MessageEvent implements IMessageEvent +{ + constructor(callBack: Function) + { + super(callBack, FurniEditorDetailResultMessageParser); + } + + public getParser(): FurniEditorDetailResultMessageParser + { + return this.parser as FurniEditorDetailResultMessageParser; + } +} diff --git a/packages/communication/src/messages/incoming/furnieditor/FurniEditorInteractionsResultEvent.ts b/packages/communication/src/messages/incoming/furnieditor/FurniEditorInteractionsResultEvent.ts new file mode 100644 index 0000000..5f52dab --- /dev/null +++ b/packages/communication/src/messages/incoming/furnieditor/FurniEditorInteractionsResultEvent.ts @@ -0,0 +1,16 @@ +import { IMessageEvent } from '@nitrots/api'; +import { MessageEvent } from '@nitrots/events'; +import { FurniEditorInteractionsResultMessageParser } from '../../parser'; + +export class FurniEditorInteractionsResultEvent extends MessageEvent implements IMessageEvent +{ + constructor(callBack: Function) + { + super(callBack, FurniEditorInteractionsResultMessageParser); + } + + public getParser(): FurniEditorInteractionsResultMessageParser + { + return this.parser as FurniEditorInteractionsResultMessageParser; + } +} diff --git a/packages/communication/src/messages/incoming/furnieditor/FurniEditorResultEvent.ts b/packages/communication/src/messages/incoming/furnieditor/FurniEditorResultEvent.ts new file mode 100644 index 0000000..90b3a41 --- /dev/null +++ b/packages/communication/src/messages/incoming/furnieditor/FurniEditorResultEvent.ts @@ -0,0 +1,16 @@ +import { IMessageEvent } from '@nitrots/api'; +import { MessageEvent } from '@nitrots/events'; +import { FurniEditorResultMessageParser } from '../../parser'; + +export class FurniEditorResultEvent extends MessageEvent implements IMessageEvent +{ + constructor(callBack: Function) + { + super(callBack, FurniEditorResultMessageParser); + } + + public getParser(): FurniEditorResultMessageParser + { + return this.parser as FurniEditorResultMessageParser; + } +} diff --git a/packages/communication/src/messages/incoming/furnieditor/FurniEditorSearchResultEvent.ts b/packages/communication/src/messages/incoming/furnieditor/FurniEditorSearchResultEvent.ts new file mode 100644 index 0000000..cc277b6 --- /dev/null +++ b/packages/communication/src/messages/incoming/furnieditor/FurniEditorSearchResultEvent.ts @@ -0,0 +1,16 @@ +import { IMessageEvent } from '@nitrots/api'; +import { MessageEvent } from '@nitrots/events'; +import { FurniEditorSearchResultMessageParser } from '../../parser'; + +export class FurniEditorSearchResultEvent extends MessageEvent implements IMessageEvent +{ + constructor(callBack: Function) + { + super(callBack, FurniEditorSearchResultMessageParser); + } + + public getParser(): FurniEditorSearchResultMessageParser + { + return this.parser as FurniEditorSearchResultMessageParser; + } +} diff --git a/packages/communication/src/messages/incoming/furnieditor/index.ts b/packages/communication/src/messages/incoming/furnieditor/index.ts new file mode 100644 index 0000000..7778352 --- /dev/null +++ b/packages/communication/src/messages/incoming/furnieditor/index.ts @@ -0,0 +1,4 @@ +export * from './FurniEditorDetailResultEvent'; +export * from './FurniEditorInteractionsResultEvent'; +export * from './FurniEditorResultEvent'; +export * from './FurniEditorSearchResultEvent'; diff --git a/packages/communication/src/messages/incoming/index.ts b/packages/communication/src/messages/incoming/index.ts index b9b0d3d..ff6445c 100644 --- a/packages/communication/src/messages/incoming/index.ts +++ b/packages/communication/src/messages/incoming/index.ts @@ -13,6 +13,7 @@ export * from './competition'; export * from './crafting'; export * from './desktop'; export * from './friendlist'; +export * from './furnieditor'; export * from './game'; export * from './game/directory'; export * from './game/lobby'; diff --git a/packages/communication/src/messages/outgoing/OutgoingHeader.ts b/packages/communication/src/messages/outgoing/OutgoingHeader.ts index 72fe5b8..fcc0504 100644 --- a/packages/communication/src/messages/outgoing/OutgoingHeader.ts +++ b/packages/communication/src/messages/outgoing/OutgoingHeader.ts @@ -476,6 +476,14 @@ export class OutgoingHeader public static FURNITURE_PICKUP_ALL = 10017; + // Furni Editor + public static FURNI_EDITOR_SEARCH = 10040; + public static FURNI_EDITOR_DETAIL = 10041; + public static FURNI_EDITOR_BY_SPRITE = 10042; + public static FURNI_EDITOR_INTERACTIONS = 10043; + public static FURNI_EDITOR_UPDATE = 10044; + public static FURNI_EDITOR_DELETE = 10045; + public static CATALOG_ADMIN_SAVE_PAGE = 10050; public static CATALOG_ADMIN_CREATE_PAGE = 10051; public static CATALOG_ADMIN_DELETE_PAGE = 10052; diff --git a/packages/communication/src/messages/outgoing/furnieditor/FurniEditorBySpriteComposer.ts b/packages/communication/src/messages/outgoing/furnieditor/FurniEditorBySpriteComposer.ts new file mode 100644 index 0000000..a7f1aec --- /dev/null +++ b/packages/communication/src/messages/outgoing/furnieditor/FurniEditorBySpriteComposer.ts @@ -0,0 +1,21 @@ +import { IMessageComposer } from '@nitrots/api'; + +export class FurniEditorBySpriteComposer implements IMessageComposer> +{ + private _data: ConstructorParameters; + + constructor(spriteId: number) + { + this._data = [ spriteId ]; + } + + dispose(): void + { + this._data = null; + } + + public getMessageArray() + { + return this._data; + } +} diff --git a/packages/communication/src/messages/outgoing/furnieditor/FurniEditorDeleteComposer.ts b/packages/communication/src/messages/outgoing/furnieditor/FurniEditorDeleteComposer.ts new file mode 100644 index 0000000..70a7231 --- /dev/null +++ b/packages/communication/src/messages/outgoing/furnieditor/FurniEditorDeleteComposer.ts @@ -0,0 +1,21 @@ +import { IMessageComposer } from '@nitrots/api'; + +export class FurniEditorDeleteComposer implements IMessageComposer> +{ + private _data: ConstructorParameters; + + constructor(id: number) + { + this._data = [ id ]; + } + + dispose(): void + { + this._data = null; + } + + public getMessageArray() + { + return this._data; + } +} diff --git a/packages/communication/src/messages/outgoing/furnieditor/FurniEditorDetailComposer.ts b/packages/communication/src/messages/outgoing/furnieditor/FurniEditorDetailComposer.ts new file mode 100644 index 0000000..d3d8a0f --- /dev/null +++ b/packages/communication/src/messages/outgoing/furnieditor/FurniEditorDetailComposer.ts @@ -0,0 +1,21 @@ +import { IMessageComposer } from '@nitrots/api'; + +export class FurniEditorDetailComposer implements IMessageComposer> +{ + private _data: ConstructorParameters; + + constructor(id: number) + { + this._data = [ id ]; + } + + dispose(): void + { + this._data = null; + } + + public getMessageArray() + { + return this._data; + } +} diff --git a/packages/communication/src/messages/outgoing/furnieditor/FurniEditorInteractionsComposer.ts b/packages/communication/src/messages/outgoing/furnieditor/FurniEditorInteractionsComposer.ts new file mode 100644 index 0000000..92324a1 --- /dev/null +++ b/packages/communication/src/messages/outgoing/furnieditor/FurniEditorInteractionsComposer.ts @@ -0,0 +1,21 @@ +import { IMessageComposer } from '@nitrots/api'; + +export class FurniEditorInteractionsComposer implements IMessageComposer> +{ + private _data: ConstructorParameters; + + constructor() + { + this._data = []; + } + + dispose(): void + { + this._data = null; + } + + public getMessageArray() + { + return this._data; + } +} diff --git a/packages/communication/src/messages/outgoing/furnieditor/FurniEditorSearchComposer.ts b/packages/communication/src/messages/outgoing/furnieditor/FurniEditorSearchComposer.ts new file mode 100644 index 0000000..35351f0 --- /dev/null +++ b/packages/communication/src/messages/outgoing/furnieditor/FurniEditorSearchComposer.ts @@ -0,0 +1,21 @@ +import { IMessageComposer } from '@nitrots/api'; + +export class FurniEditorSearchComposer implements IMessageComposer> +{ + private _data: ConstructorParameters; + + constructor(query: string, type: string, page: number) + { + this._data = [ query, type, page ]; + } + + dispose(): void + { + this._data = null; + } + + public getMessageArray() + { + return this._data; + } +} diff --git a/packages/communication/src/messages/outgoing/furnieditor/FurniEditorUpdateComposer.ts b/packages/communication/src/messages/outgoing/furnieditor/FurniEditorUpdateComposer.ts new file mode 100644 index 0000000..8c3ec01 --- /dev/null +++ b/packages/communication/src/messages/outgoing/furnieditor/FurniEditorUpdateComposer.ts @@ -0,0 +1,21 @@ +import { IMessageComposer } from '@nitrots/api'; + +export class FurniEditorUpdateComposer implements IMessageComposer> +{ + private _data: ConstructorParameters; + + constructor(id: number, jsonFields: string) + { + this._data = [ id, jsonFields ]; + } + + dispose(): void + { + this._data = null; + } + + public getMessageArray() + { + return this._data; + } +} diff --git a/packages/communication/src/messages/outgoing/furnieditor/index.ts b/packages/communication/src/messages/outgoing/furnieditor/index.ts new file mode 100644 index 0000000..9e29818 --- /dev/null +++ b/packages/communication/src/messages/outgoing/furnieditor/index.ts @@ -0,0 +1,6 @@ +export * from './FurniEditorBySpriteComposer'; +export * from './FurniEditorDeleteComposer'; +export * from './FurniEditorDetailComposer'; +export * from './FurniEditorInteractionsComposer'; +export * from './FurniEditorSearchComposer'; +export * from './FurniEditorUpdateComposer'; diff --git a/packages/communication/src/messages/outgoing/index.ts b/packages/communication/src/messages/outgoing/index.ts index 4e36160..894d96d 100644 --- a/packages/communication/src/messages/outgoing/index.ts +++ b/packages/communication/src/messages/outgoing/index.ts @@ -9,6 +9,7 @@ export * from './crafting'; export * from './desktop'; export * from './friendfurni'; export * from './friendlist'; +export * from './furnieditor'; export * from './game'; export * from './game/arena'; export * from './game/directory'; diff --git a/packages/communication/src/messages/parser/furnieditor/CatalogRefData.ts b/packages/communication/src/messages/parser/furnieditor/CatalogRefData.ts new file mode 100644 index 0000000..14950bb --- /dev/null +++ b/packages/communication/src/messages/parser/furnieditor/CatalogRefData.ts @@ -0,0 +1,23 @@ +import { IMessageDataWrapper } from '@nitrots/api'; + +export class CatalogRefData +{ + public id: number; + public catalogName: string; + public costCredits: number; + public costPoints: number; + public pointsType: number; + public pageId: number; + public pageName: string; + + public parse(wrapper: IMessageDataWrapper): void + { + this.id = wrapper.readInt(); + this.catalogName = wrapper.readString(); + this.costCredits = wrapper.readInt(); + this.costPoints = wrapper.readInt(); + this.pointsType = wrapper.readInt(); + this.pageId = wrapper.readInt(); + this.pageName = wrapper.readString(); + } +} diff --git a/packages/communication/src/messages/parser/furnieditor/FurniDetailData.ts b/packages/communication/src/messages/parser/furnieditor/FurniDetailData.ts new file mode 100644 index 0000000..b9dab09 --- /dev/null +++ b/packages/communication/src/messages/parser/furnieditor/FurniDetailData.ts @@ -0,0 +1,38 @@ +import { IMessageDataWrapper } from '@nitrots/api'; +import { FurniItemData } from './FurniItemData'; + +export class FurniDetailData extends FurniItemData +{ + public allowGift: boolean; + public allowTrade: boolean; + public allowRecycle: boolean; + public allowMarketplaceSell: boolean; + public allowInventoryStack: boolean; + public vendingIds: string; + public customparams: string; + public effectIdMale: number; + public effectIdFemale: number; + public clothingOnWalk: string; + public multiheight: string; + public description: string; + public usageCount: number; + + public override parse(wrapper: IMessageDataWrapper): void + { + super.parse(wrapper); + + this.allowGift = wrapper.readBoolean(); + this.allowTrade = wrapper.readBoolean(); + this.allowRecycle = wrapper.readBoolean(); + this.allowMarketplaceSell = wrapper.readBoolean(); + this.allowInventoryStack = wrapper.readBoolean(); + this.vendingIds = wrapper.readString(); + this.customparams = wrapper.readString(); + this.effectIdMale = wrapper.readInt(); + this.effectIdFemale = wrapper.readInt(); + this.clothingOnWalk = wrapper.readString(); + this.multiheight = wrapper.readString(); + this.description = wrapper.readString(); + this.usageCount = wrapper.readInt(); + } +} diff --git a/packages/communication/src/messages/parser/furnieditor/FurniEditorDetailResultMessageParser.ts b/packages/communication/src/messages/parser/furnieditor/FurniEditorDetailResultMessageParser.ts new file mode 100644 index 0000000..60d68a0 --- /dev/null +++ b/packages/communication/src/messages/parser/furnieditor/FurniEditorDetailResultMessageParser.ts @@ -0,0 +1,57 @@ +import { IMessageDataWrapper, IMessageParser } from '@nitrots/api'; +import { CatalogRefData } from './CatalogRefData'; +import { FurniDetailData } from './FurniDetailData'; + +export class FurniEditorDetailResultMessageParser implements IMessageParser +{ + private _item: FurniDetailData; + private _catalogItems: CatalogRefData[]; + private _furniDataJson: string; + + public flush(): boolean + { + this._item = null; + this._catalogItems = []; + this._furniDataJson = ''; + + return true; + } + + public parse(wrapper: IMessageDataWrapper): boolean + { + if(!wrapper) return false; + + this._item = new FurniDetailData(); + this._item.parse(wrapper); + + const catalogCount = wrapper.readInt(); + + this._catalogItems = []; + + for(let i = 0; i < catalogCount; i++) + { + const ref = new CatalogRefData(); + ref.parse(wrapper); + this._catalogItems.push(ref); + } + + this._furniDataJson = wrapper.readString(); + + return true; + } + + public get item(): FurniDetailData + { + return this._item; + } + + public get catalogItems(): CatalogRefData[] + { + return this._catalogItems; + } + + public get furniDataJson(): string + { + return this._furniDataJson; + } +} diff --git a/packages/communication/src/messages/parser/furnieditor/FurniEditorInteractionsResultMessageParser.ts b/packages/communication/src/messages/parser/furnieditor/FurniEditorInteractionsResultMessageParser.ts new file mode 100644 index 0000000..3e2237a --- /dev/null +++ b/packages/communication/src/messages/parser/furnieditor/FurniEditorInteractionsResultMessageParser.ts @@ -0,0 +1,34 @@ +import { IMessageDataWrapper, IMessageParser } from '@nitrots/api'; + +export class FurniEditorInteractionsResultMessageParser implements IMessageParser +{ + private _interactions: string[]; + + public flush(): boolean + { + this._interactions = []; + + return true; + } + + public parse(wrapper: IMessageDataWrapper): boolean + { + if(!wrapper) return false; + + const count = wrapper.readInt(); + + this._interactions = []; + + for(let i = 0; i < count; i++) + { + this._interactions.push(wrapper.readString()); + } + + return true; + } + + public get interactions(): string[] + { + return this._interactions; + } +} diff --git a/packages/communication/src/messages/parser/furnieditor/FurniEditorResultMessageParser.ts b/packages/communication/src/messages/parser/furnieditor/FurniEditorResultMessageParser.ts new file mode 100644 index 0000000..26bf70d --- /dev/null +++ b/packages/communication/src/messages/parser/furnieditor/FurniEditorResultMessageParser.ts @@ -0,0 +1,43 @@ +import { IMessageDataWrapper, IMessageParser } from '@nitrots/api'; + +export class FurniEditorResultMessageParser implements IMessageParser +{ + private _success: boolean; + private _message: string; + private _id: number; + + public flush(): boolean + { + this._success = false; + this._message = ''; + this._id = -1; + + return true; + } + + public parse(wrapper: IMessageDataWrapper): boolean + { + if(!wrapper) return false; + + this._success = wrapper.readBoolean(); + this._message = wrapper.readString(); + this._id = wrapper.readInt(); + + return true; + } + + public get success(): boolean + { + return this._success; + } + + public get message(): string + { + return this._message; + } + + public get id(): number + { + return this._id; + } +} diff --git a/packages/communication/src/messages/parser/furnieditor/FurniEditorSearchResultMessageParser.ts b/packages/communication/src/messages/parser/furnieditor/FurniEditorSearchResultMessageParser.ts new file mode 100644 index 0000000..e654c89 --- /dev/null +++ b/packages/communication/src/messages/parser/furnieditor/FurniEditorSearchResultMessageParser.ts @@ -0,0 +1,54 @@ +import { IMessageDataWrapper, IMessageParser } from '@nitrots/api'; +import { FurniItemData } from './FurniItemData'; + +export class FurniEditorSearchResultMessageParser implements IMessageParser +{ + private _items: FurniItemData[]; + private _total: number; + private _page: number; + + public flush(): boolean + { + this._items = []; + this._total = 0; + this._page = 1; + + return true; + } + + public parse(wrapper: IMessageDataWrapper): boolean + { + if(!wrapper) return false; + + const count = wrapper.readInt(); + + this._items = []; + + for(let i = 0; i < count; i++) + { + const item = new FurniItemData(); + item.parse(wrapper); + this._items.push(item); + } + + this._total = wrapper.readInt(); + this._page = wrapper.readInt(); + + return true; + } + + public get items(): FurniItemData[] + { + return this._items; + } + + public get total(): number + { + return this._total; + } + + public get page(): number + { + return this._page; + } +} diff --git a/packages/communication/src/messages/parser/furnieditor/FurniItemData.ts b/packages/communication/src/messages/parser/furnieditor/FurniItemData.ts new file mode 100644 index 0000000..3c12f2f --- /dev/null +++ b/packages/communication/src/messages/parser/furnieditor/FurniItemData.ts @@ -0,0 +1,37 @@ +import { IMessageDataWrapper } from '@nitrots/api'; + +export class FurniItemData +{ + public id: number; + public spriteId: number; + public itemName: string; + public publicName: string; + public type: string; + public width: number; + public length: number; + public stackHeight: number; + public allowStack: boolean; + public allowWalk: boolean; + public allowSit: boolean; + public allowLay: boolean; + public interactionType: string; + public interactionModesCount: number; + + public parse(wrapper: IMessageDataWrapper): void + { + this.id = wrapper.readInt(); + this.spriteId = wrapper.readInt(); + this.itemName = wrapper.readString(); + this.publicName = wrapper.readString(); + this.type = wrapper.readString(); + this.width = wrapper.readInt(); + this.length = wrapper.readInt(); + this.stackHeight = wrapper.readDouble(); + this.allowStack = wrapper.readBoolean(); + this.allowWalk = wrapper.readBoolean(); + this.allowSit = wrapper.readBoolean(); + this.allowLay = wrapper.readBoolean(); + this.interactionType = wrapper.readString(); + this.interactionModesCount = wrapper.readInt(); + } +} diff --git a/packages/communication/src/messages/parser/furnieditor/index.ts b/packages/communication/src/messages/parser/furnieditor/index.ts new file mode 100644 index 0000000..9f38260 --- /dev/null +++ b/packages/communication/src/messages/parser/furnieditor/index.ts @@ -0,0 +1,7 @@ +export * from './CatalogRefData'; +export * from './FurniDetailData'; +export * from './FurniEditorDetailResultMessageParser'; +export * from './FurniEditorInteractionsResultMessageParser'; +export * from './FurniEditorResultMessageParser'; +export * from './FurniEditorSearchResultMessageParser'; +export * from './FurniItemData'; diff --git a/packages/communication/src/messages/parser/index.ts b/packages/communication/src/messages/parser/index.ts index c1b9bc9..aa25b8f 100644 --- a/packages/communication/src/messages/parser/index.ts +++ b/packages/communication/src/messages/parser/index.ts @@ -12,6 +12,7 @@ export * from './competition'; export * from './crafting'; export * from './desktop'; export * from './friendlist'; +export * from './furnieditor'; export * from './game'; export * from './game/directory'; export * from './game/lobby'; From 1fcd10589de3ecbfa48562a28cbf29bab0bbc8c9 Mon Sep 17 00:00:00 2001 From: DuckieTM Date: Sat, 28 Mar 2026 08:38:48 +0100 Subject: [PATCH 3/5] =?UTF-8?q?=E2=AD=90=20Start=20the=20forum=20framework?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../communication/src/messages/outgoing/OutgoingHeader.ts | 4 ++-- .../src/messages/parser/group/GroupInformationParser.ts | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/communication/src/messages/outgoing/OutgoingHeader.ts b/packages/communication/src/messages/outgoing/OutgoingHeader.ts index 72fe5b8..dba57f8 100644 --- a/packages/communication/src/messages/outgoing/OutgoingHeader.ts +++ b/packages/communication/src/messages/outgoing/OutgoingHeader.ts @@ -65,8 +65,8 @@ export class OutgoingHeader public static GROUP_CREATE_OPTIONS = 798; public static GROUP_FAVORITE = 3549; public static GET_FORUM_STATS = 3149; - public static GET_FORUM_THREADS = 873; - public static GET_FORUMS_LIST = 436; + public static GET_FORUM_THREADS = 436; + public static GET_FORUMS_LIST = 873; public static GET_FORUM_MESSAGES = 232; public static GET_FORUM_THREAD = 3900; public static GET_UNREAD_FORUMS_COUNT = 2908; diff --git a/packages/communication/src/messages/parser/group/GroupInformationParser.ts b/packages/communication/src/messages/parser/group/GroupInformationParser.ts index c73706b..00a71e5 100644 --- a/packages/communication/src/messages/parser/group/GroupInformationParser.ts +++ b/packages/communication/src/messages/parser/group/GroupInformationParser.ts @@ -19,6 +19,7 @@ export class GroupInformationParser implements IMessageParser private _flag: boolean; private _canMembersDecorate: boolean; private _pendingRequestsCount: number; + private _hasForum: boolean; public flush(): boolean { @@ -39,6 +40,7 @@ export class GroupInformationParser implements IMessageParser this._flag = false; this._canMembersDecorate = false; this._pendingRequestsCount = 0; + this._hasForum = false; return true; } @@ -65,6 +67,7 @@ export class GroupInformationParser implements IMessageParser this._flag = wrapper.readBoolean(); this._canMembersDecorate = wrapper.readBoolean(); this._pendingRequestsCount = wrapper.readInt(); + this._hasForum = wrapper.readBoolean(); return true; } @@ -153,4 +156,9 @@ export class GroupInformationParser implements IMessageParser { return this._pendingRequestsCount; } + + public get hasForum(): boolean + { + return this._hasForum; + } } From e6e9dc46dbe2ac18fc5345708ac322b90da7c137 Mon Sep 17 00:00:00 2001 From: DuckieTM Date: Sun, 29 Mar 2026 15:00:47 +0200 Subject: [PATCH 4/5] =?UTF-8?q?=F0=9F=86=95=20Groups=20Forum?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../outgoing/group/GroupSavePreferencesComposer.ts | 4 ++-- .../src/messages/parser/group/GroupSettingsParser.ts | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/communication/src/messages/outgoing/group/GroupSavePreferencesComposer.ts b/packages/communication/src/messages/outgoing/group/GroupSavePreferencesComposer.ts index 173102c..d380c3c 100644 --- a/packages/communication/src/messages/outgoing/group/GroupSavePreferencesComposer.ts +++ b/packages/communication/src/messages/outgoing/group/GroupSavePreferencesComposer.ts @@ -4,9 +4,9 @@ export class GroupSavePreferencesComposer implements IMessageComposer; - constructor(groupId: number, state: number, onlyAdminCanDecorate: number) + constructor(groupId: number, state: number, onlyAdminCanDecorate: number, forumEnabled: boolean) { - this._data = [groupId, state, onlyAdminCanDecorate]; + this._data = [groupId, state, onlyAdminCanDecorate, forumEnabled]; } public getMessageArray() diff --git a/packages/communication/src/messages/parser/group/GroupSettingsParser.ts b/packages/communication/src/messages/parser/group/GroupSettingsParser.ts index 964f9b1..c144321 100644 --- a/packages/communication/src/messages/parser/group/GroupSettingsParser.ts +++ b/packages/communication/src/messages/parser/group/GroupSettingsParser.ts @@ -15,6 +15,7 @@ export class GroupSettingsParser implements IMessageParser private _badgeParts: Map; private _badgeCode: string; private _membersCount: number; + private _hasForum: boolean; public flush(): boolean { @@ -30,6 +31,7 @@ export class GroupSettingsParser implements IMessageParser this._badgeParts = new Map(); this._badgeCode = null; this._membersCount = 0; + this._hasForum = false; return true; } @@ -83,6 +85,7 @@ export class GroupSettingsParser implements IMessageParser this._badgeCode = wrapper.readString(); this._membersCount = wrapper.readInt(); + this._hasForum = wrapper.readBoolean(); return true; } @@ -146,4 +149,9 @@ export class GroupSettingsParser implements IMessageParser { return this._membersCount; } + + public get hasForum(): boolean + { + return this._hasForum; + } } From 3510322c35a6e1c2a8f26421f7c4f46836e59360 Mon Sep 17 00:00:00 2001 From: DuckieTM Date: Sun, 29 Mar 2026 22:03:54 +0200 Subject: [PATCH 5/5] =?UTF-8?q?=F0=9F=86=99=20Fix=20null=20error=20palette?= =?UTF-8?q?=5Fid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/avatar/src/AvatarRenderManager.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/avatar/src/AvatarRenderManager.ts b/packages/avatar/src/AvatarRenderManager.ts index efd3645..57a8694 100644 --- a/packages/avatar/src/AvatarRenderManager.ts +++ b/packages/avatar/src/AvatarRenderManager.ts @@ -241,6 +241,8 @@ export class AvatarRenderManager implements IAvatarRenderManager const palette = figureData.getPalette(set.paletteID); const colors = container.getPartColorIds(part); + + if(!palette) continue; for(const colorId of colors) {