From bff0151301b73245e31a12172c1a2134d6aa2dc5 Mon Sep 17 00:00:00 2001 From: Bill Date: Sun, 22 Aug 2021 00:53:13 -0400 Subject: [PATCH] Add achievement packet --- src/nitro/communication/NitroMessages.ts | 3 +- .../messages/incoming/IncomingHeader.ts | 1 + .../notifications/AchievementLevelUpData.ts | 93 +++++++++++++++++++ .../AchievementNotificationMessageEvent.ts | 16 ++++ .../messages/incoming/notifications/index.ts | 2 + .../AchievementNotificationMessageParser.ts | 29 ++++++ .../messages/parser/notifications/index.ts | 1 + .../localization/INitroLocalizationManager.ts | 1 + .../localization/NitroLocalizationManager.ts | 5 + 9 files changed, 150 insertions(+), 1 deletion(-) create mode 100644 src/nitro/communication/messages/incoming/notifications/AchievementLevelUpData.ts create mode 100644 src/nitro/communication/messages/incoming/notifications/AchievementNotificationMessageEvent.ts create mode 100644 src/nitro/communication/messages/parser/notifications/AchievementNotificationMessageParser.ts diff --git a/src/nitro/communication/NitroMessages.ts b/src/nitro/communication/NitroMessages.ts index 82df2011..40f96e60 100644 --- a/src/nitro/communication/NitroMessages.ts +++ b/src/nitro/communication/NitroMessages.ts @@ -1,5 +1,5 @@ import { IMessageConfiguration } from '../../core/communication/messages/IMessageConfiguration'; -import { ApproveNameMessageComposer, BadgeReceivedEvent, BonusRareInfoMessageEvent, CatalogApproveNameResultEvent, ChangeUserNameResultMessageEvent, FurnitureGuildInfoComposer, GetBonusRareInfoMessageComposer, MysteryBoxKeysEvent, PetExperienceEvent, PetMountComposer, PetSupplementComposer, RemoveAllRightsMessageComposer, RemoveOwnRoomRightsRoomMessageComposer, RemovePetSaddleComposer, RoomUnitGiveHandItemPetComposer, SellablePetPalettesEvent, TogglePetBreedingComposer, TogglePetRidingComposer, UnseenResetCategoryComposer, UnseenResetItemsComposer, UsePetProductComposer } from './messages'; +import { AchievementNotificationMessageEvent, ApproveNameMessageComposer, BadgeReceivedEvent, BonusRareInfoMessageEvent, CatalogApproveNameResultEvent, ChangeUserNameResultMessageEvent, FurnitureGuildInfoComposer, GetBonusRareInfoMessageComposer, MysteryBoxKeysEvent, PetExperienceEvent, PetMountComposer, PetSupplementComposer, RemoveAllRightsMessageComposer, RemoveOwnRoomRightsRoomMessageComposer, RemovePetSaddleComposer, RoomUnitGiveHandItemPetComposer, SellablePetPalettesEvent, TogglePetBreedingComposer, TogglePetRidingComposer, UnseenResetCategoryComposer, UnseenResetItemsComposer, UsePetProductComposer } from './messages'; import { AvailabilityStatusMessageEvent } from './messages/incoming/availability/AvailabilityStatusMessageEvent'; import { CameraPublishStatusMessageEvent } from './messages/incoming/camera/CameraPublishStatusMessageEvent'; import { CameraPurchaseOKMessageEvent } from './messages/incoming/camera/CameraPurchaseOKMessageEvent'; @@ -601,6 +601,7 @@ export class NitroMessages implements IMessageConfiguration this._events.set(IncomingHeader.USER_RESPECT, RespectReceivedEvent); this._events.set(IncomingHeader.UNSEEN_ITEMS, UnseenItemsEvent); this._events.set(IncomingHeader.HOTEL_WILL_SHUTDOWN, HotelWillShutdownEvent); + this._events.set(IncomingHeader.ACHIEVEMENT_NOTIFICATION, AchievementNotificationMessageEvent); // ROOM diff --git a/src/nitro/communication/messages/incoming/IncomingHeader.ts b/src/nitro/communication/messages/incoming/IncomingHeader.ts index ade297bf..9efcd5be 100644 --- a/src/nitro/communication/messages/incoming/IncomingHeader.ts +++ b/src/nitro/communication/messages/incoming/IncomingHeader.ts @@ -271,4 +271,5 @@ export class IncomingHeader public static COMPETITION_STATUS = 133; public static INIT_CAMERA = 3878; public static THUMBNAIL_STATUS = 3595; + public static ACHIEVEMENT_NOTIFICATION = 806; } diff --git a/src/nitro/communication/messages/incoming/notifications/AchievementLevelUpData.ts b/src/nitro/communication/messages/incoming/notifications/AchievementLevelUpData.ts new file mode 100644 index 00000000..0a7706ab --- /dev/null +++ b/src/nitro/communication/messages/incoming/notifications/AchievementLevelUpData.ts @@ -0,0 +1,93 @@ +import { IMessageDataWrapper } from '../../../../../core'; + +export class AchievementLevelUpData +{ + private _type: number; + private _level: number; + private _points: number; + private _levelRewardPoints: number; + private _levelRewardPointType: number; + private _bonusPoints: number; + private _badgeId: number; + private _badgeCode: string = ''; + private _removedBadgeCode: string = ''; + private _achievementID: number; + private _category: string; + private _showDialogToUser: boolean; + + constructor(wrapper: IMessageDataWrapper) + { + this._type = wrapper.readInt(); + this._level = wrapper.readInt(); + this._badgeId = wrapper.readInt(); + this._badgeCode = wrapper.readString(); + this._points = wrapper.readInt(); + this._levelRewardPoints = wrapper.readInt(); + this._levelRewardPointType = wrapper.readInt(); + this._bonusPoints = wrapper.readInt(); + this._achievementID = wrapper.readInt(); + this._removedBadgeCode = wrapper.readString(); + this._category = wrapper.readString(); + this._showDialogToUser = wrapper.readBoolean(); + } + + public get type(): number + { + return this._type; + } + + public get level(): number + { + return this._level; + } + + public get points(): number + { + return this._points; + } + + public get levelRewardPoints(): number + { + return this._levelRewardPoints; + } + + public get levelRewardPointType(): number + { + return this._levelRewardPointType; + } + + public get bonusPoints(): number + { + return this._bonusPoints; + } + + public get badgeId(): number + { + return this._badgeId; + } + + public get badgeCode(): string + { + return this._badgeCode; + } + + public get removedBadgeCode(): string + { + return this._removedBadgeCode; + } + + public get achievementID(): number + { + return this._achievementID; + } + + public get category(): string + { + return this._category; + } + + public get showDialogToUser(): boolean + { + return this._showDialogToUser; + } +} diff --git a/src/nitro/communication/messages/incoming/notifications/AchievementNotificationMessageEvent.ts b/src/nitro/communication/messages/incoming/notifications/AchievementNotificationMessageEvent.ts new file mode 100644 index 00000000..c30d245a --- /dev/null +++ b/src/nitro/communication/messages/incoming/notifications/AchievementNotificationMessageEvent.ts @@ -0,0 +1,16 @@ +import { IMessageEvent } from '../../../../../core/communication/messages/IMessageEvent'; +import { MessageEvent } from '../../../../../core/communication/messages/MessageEvent'; +import { AchievementNotificationMessageParser } from '../../parser'; + +export class AchievementNotificationMessageEvent extends MessageEvent implements IMessageEvent +{ + constructor(callBack: Function) + { + super(callBack, AchievementNotificationMessageParser); + } + + public getParser(): AchievementNotificationMessageParser + { + return this.parser as AchievementNotificationMessageParser; + } +} diff --git a/src/nitro/communication/messages/incoming/notifications/index.ts b/src/nitro/communication/messages/incoming/notifications/index.ts index f293ba3d..6a00c66d 100644 --- a/src/nitro/communication/messages/incoming/notifications/index.ts +++ b/src/nitro/communication/messages/incoming/notifications/index.ts @@ -1,3 +1,5 @@ +export * from './AchievementLevelUpData'; +export * from './AchievementNotificationMessageEvent'; export * from './BotErrorEvent'; export * from './HabboBroadcastMessageEvent'; export * from './HotelWillShutdownEvent'; diff --git a/src/nitro/communication/messages/parser/notifications/AchievementNotificationMessageParser.ts b/src/nitro/communication/messages/parser/notifications/AchievementNotificationMessageParser.ts new file mode 100644 index 00000000..bdff526e --- /dev/null +++ b/src/nitro/communication/messages/parser/notifications/AchievementNotificationMessageParser.ts @@ -0,0 +1,29 @@ +import { IMessageDataWrapper } from '../../../../../core/communication/messages/IMessageDataWrapper'; +import { IMessageParser } from '../../../../../core/communication/messages/IMessageParser'; +import { AchievementLevelUpData } from '../../incoming'; + +export class AchievementNotificationMessageParser implements IMessageParser +{ + private _data: AchievementLevelUpData; + + public flush(): boolean + { + this._data = null; + + return true; + } + + public parse(wrapper: IMessageDataWrapper): boolean + { + if(!wrapper) return false; + + this._data = new AchievementLevelUpData(wrapper); + + return true; + } + + public get data(): AchievementLevelUpData + { + return this._data; + } +} diff --git a/src/nitro/communication/messages/parser/notifications/index.ts b/src/nitro/communication/messages/parser/notifications/index.ts index 9a7e2126..0496f275 100644 --- a/src/nitro/communication/messages/parser/notifications/index.ts +++ b/src/nitro/communication/messages/parser/notifications/index.ts @@ -1,3 +1,4 @@ +export * from './AchievementNotificationMessageParser'; export * from './BotErrorEventParser'; export * from './HabboBroadcastMessageParser'; export * from './HotelWillShutdownParser'; diff --git a/src/nitro/localization/INitroLocalizationManager.ts b/src/nitro/localization/INitroLocalizationManager.ts index 0c39989d..450f1211 100644 --- a/src/nitro/localization/INitroLocalizationManager.ts +++ b/src/nitro/localization/INitroLocalizationManager.ts @@ -3,6 +3,7 @@ export interface INitroLocalizationManager extends INitroManager { getRomanNumeral(number: number): string; getBadgeBaseAndLevel(badgeName: string): string; + hasValue(key: string): boolean; getValue(key: string, doParams?: boolean): string; getValueWithParameter(key: string, parameter: string, replacement: string): string; getValueWithParameters(key: string, parameters: string[], replacements: string[]): string; diff --git a/src/nitro/localization/NitroLocalizationManager.ts b/src/nitro/localization/NitroLocalizationManager.ts index 90182046..2499938e 100644 --- a/src/nitro/localization/NitroLocalizationManager.ts +++ b/src/nitro/localization/NitroLocalizationManager.ts @@ -67,6 +67,11 @@ export class NitroLocalizationManager extends NitroManager implements INitroLoca return badge.getBadgeId; } + public hasValue(key: string): boolean + { + return this._definitions.has(key); + } + public getValue(key: string, doParams: boolean = true): string { if(key.startsWith('${')) key = key.substr(2, (key.length - 3));