From c21f2f66b3585db82b86b600eaf8507b87e01c27 Mon Sep 17 00:00:00 2001 From: Bill Date: Mon, 6 Sep 2021 02:33:03 -0400 Subject: [PATCH 1/3] Add badgePointLimit to localization --- .../localization/INitroLocalizationManager.ts | 1 + .../localization/NitroLocalizationManager.ts | 25 +++++++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/nitro/localization/INitroLocalizationManager.ts b/src/nitro/localization/INitroLocalizationManager.ts index 450f1211..5b759307 100644 --- a/src/nitro/localization/INitroLocalizationManager.ts +++ b/src/nitro/localization/INitroLocalizationManager.ts @@ -11,4 +11,5 @@ export interface INitroLocalizationManager extends INitroManager registerParameter(key: string, parameter: string, value: string): void; getBadgeName(key: string): string; getBadgeDesc(key: string): string; + setBadgePointLimit(badge: string, point: number): void; } diff --git a/src/nitro/localization/NitroLocalizationManager.ts b/src/nitro/localization/NitroLocalizationManager.ts index a1183edb..47d987cb 100644 --- a/src/nitro/localization/NitroLocalizationManager.ts +++ b/src/nitro/localization/NitroLocalizationManager.ts @@ -8,6 +8,7 @@ export class NitroLocalizationManager extends NitroManager implements INitroLoca { private _definitions: Map; private _parameters: Map>; + private _badgePointLimits: Map; private _romanNumerals: string[]; private _pendingUrls: string[]; @@ -17,6 +18,7 @@ export class NitroLocalizationManager extends NitroManager implements INitroLoca this._definitions = new Map(); this._parameters = new Map(); + this._badgePointLimits = new Map(); this._romanNumerals = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XI', 'XII', 'XIII', 'XIV', 'XV', 'XVI', 'XVII', 'XVIII', 'XIX', 'XX', 'XXI', 'XXII', 'XXIII', 'XXIV', 'XXV', 'XXVI', 'XXVII', 'XXVIII', 'XXIX', 'XXX']; this._pendingUrls = []; } @@ -84,6 +86,16 @@ export class NitroLocalizationManager extends NitroManager implements INitroLoca return true; } + public getBadgePointLimit(badge: string): number + { + return this._badgePointLimits.get(badge); + } + + public setBadgePointLimit(badge: string, point: number): void + { + this._badgePointLimits.set(badge, point); + } + public getRomanNumeral(number: number): string { return this._romanNumerals[Math.max(0, (number - 1))]; @@ -263,7 +275,11 @@ export class NitroLocalizationManager extends NitroManager implements INitroLoca const badge = new BadgeBaseAndLevel(key); const keys = [ 'badge_name_' + key, 'badge_name_' + badge.base ]; - return this._Str_2103(this.getExistingKey(keys)).replace('%roman%', this.getRomanNumeral(badge.level)); + let name = this._Str_2103(this.getExistingKey(keys)); + + name = name.replace('%roman%', this.getRomanNumeral(badge.level)); + + return name; } public getBadgeDesc(key: string): string @@ -271,7 +287,12 @@ export class NitroLocalizationManager extends NitroManager implements INitroLoca const badge = new BadgeBaseAndLevel(key); const keys = [ 'badge_desc_' + key, 'badge_desc_' + badge.base ]; - return this._Str_2103(this.getExistingKey(keys)).replace('%roman%', this.getRomanNumeral(badge.level)); + let desc = this._Str_2103(this.getExistingKey(keys)); + + desc = desc.replace('%limit$', this.getBadgePointLimit(key).toString()); + desc = desc.replace('%roman%', this.getRomanNumeral(badge.level)); + + return desc; } private getExistingKey(keys: string[]): string From e02084db716f4a9948b4051123f83c794db22d42 Mon Sep 17 00:00:00 2001 From: Bill Date: Mon, 6 Sep 2021 02:42:43 -0400 Subject: [PATCH 2/3] Add new badge packets --- src/nitro/communication/NitroMessages.ts | 4 +++- src/nitro/communication/messages/incoming/IncomingHeader.ts | 2 ++ .../incoming/inventory/badges/IsBadgeRequestFulfilledEvent.ts | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/nitro/communication/NitroMessages.ts b/src/nitro/communication/NitroMessages.ts index c417c7b1..f5102f61 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 { AchievementNotificationMessageEvent, ActivityPointNotificationMessageEvent, AddJukeboxDiskComposer, ApproveNameMessageComposer, ApproveNameMessageEvent, AvailabilityTimeMessageEvent, BadgeReceivedEvent, BonusRareInfoMessageEvent, BuildersClubFurniCountMessageEvent, BuildersClubSubscriptionStatusMessageEvent, BundleDiscountRulesetMessageEvent, ChangeUserNameMessageComposer, ChangeUserNameResultMessageEvent, CheckUserNameMessageComposer, CheckUserNameResultMessageEvent, ClubGiftNotificationEvent, DirectSMSClubBuyAvailableMessageEvent, FigureUpdateEvent, FurnitureGroupInfoComposer, GetBonusRareInfoMessageComposer, GetCatalogPageExpirationComposer, GetCatalogPageWithEarliestExpiryComposer, GetDirectClubBuyAvailableComposer, GetHabboBasicMembershipExtendOfferComposer, GetHabboClubExtendOfferMessageComposer, GetInterstitialMessageComposer, GetJukeboxPlayListMessageComposer, GetLimitedOfferAppearingNextComposer, GetNextTargetedOfferComposer, GetNowPlayingMessageComposer, GetOfficialSongIdMessageComposer, GetRoomAdPurchaseInfoComposer, GetSeasonalCalendarDailyOfferComposer, GetSongInfoMessageComposer, GetSoundMachinePlayListMessageComposer, GetUserSongDisksMessageComposer, GroupBadgesComposer, GroupBadgesEvent, HabboClubExtendOfferMessageEvent, HotelClosedAndOpensEvent, HotelClosesAndWillOpenAtEvent, HotelWillCloseInMinutesEvent, InfoFeedEnableMessageEvent, InterstitialMessageEvent, InterstitialShownMessageComposer, IsOfferGiftableMessageEvent, JukeboxPlayListFullMessageEvent, JukeboxSongDisksMessageEvent, LimitedOfferAppearingNextMessageEvent, MaintenanceStatusMessageEvent, MarkCatalogNewAdditionsPageOpenedComposer, MarketplaceBuyOfferComposer, MarketplaceRedeemCreditsComposer, MarketplaceRequesstItemStatsComposer, MarketplaceRequestComposer, MarketplaceRequestOffersComposer, MarketplaceRequestOwnItemsComposer, MarketplaceTakeItemBackComposer, MysteryBoxKeysEvent, NotEnoughBalanceMessageEvent, NowPlayingMessageEvent, OfficialSongIdMessageEvent, OpenCampaignCalendarDoorAsStaffComposer, OpenCampaignCalendarDoorComposer, PetExperienceEvent, PetMountComposer, PetSupplementComposer, PlayListMessageEvent, PlayListSongAddedMessageEvent, PurchaseBasicMembershipExtensionComposer, PurchaseRoomAdMessageComposer, PurchaseTargetedOfferComposer, PurchaseVipMembershipExtensionComposer, RemoveAllRightsMessageComposer, RemoveJukeboxDiskComposer, RemoveOwnRoomRightsRoomMessageComposer, RemovePetSaddleComposer, RoomAdErrorEvent, RoomAdPurchaseInfoEvent, RoomUnitGiveHandItemPetComposer, SeasonalCalendarDailyOfferMessageEvent, SellablePetPalettesMessageEvent, SetTargetedOfferStateComposer, ShopTargetedOfferViewedComposer, TargetedOfferEvent, TargetedOfferNotFoundEvent, TogglePetBreedingComposer, TogglePetRidingComposer, TraxSongInfoMessageEvent, UnseenResetCategoryComposer, UnseenResetItemsComposer, UsePetProductComposer, UserSongDisksInventoryMessageEvent, WardrobeMessageEvent } from './messages'; +import { AchievementNotificationMessageEvent, ActivityPointNotificationMessageEvent, AddJukeboxDiskComposer, ApproveNameMessageComposer, ApproveNameMessageEvent, AvailabilityTimeMessageEvent, BadgePointLimitsEvent, BadgeReceivedEvent, BonusRareInfoMessageEvent, BuildersClubFurniCountMessageEvent, BuildersClubSubscriptionStatusMessageEvent, BundleDiscountRulesetMessageEvent, ChangeUserNameMessageComposer, ChangeUserNameResultMessageEvent, CheckUserNameMessageComposer, CheckUserNameResultMessageEvent, ClubGiftNotificationEvent, DirectSMSClubBuyAvailableMessageEvent, FigureUpdateEvent, FurnitureGroupInfoComposer, GetBonusRareInfoMessageComposer, GetCatalogPageExpirationComposer, GetCatalogPageWithEarliestExpiryComposer, GetDirectClubBuyAvailableComposer, GetHabboBasicMembershipExtendOfferComposer, GetHabboClubExtendOfferMessageComposer, GetInterstitialMessageComposer, GetJukeboxPlayListMessageComposer, GetLimitedOfferAppearingNextComposer, GetNextTargetedOfferComposer, GetNowPlayingMessageComposer, GetOfficialSongIdMessageComposer, GetRoomAdPurchaseInfoComposer, GetSeasonalCalendarDailyOfferComposer, GetSongInfoMessageComposer, GetSoundMachinePlayListMessageComposer, GetUserSongDisksMessageComposer, GroupBadgesComposer, GroupBadgesEvent, HabboClubExtendOfferMessageEvent, HotelClosedAndOpensEvent, HotelClosesAndWillOpenAtEvent, HotelWillCloseInMinutesEvent, InfoFeedEnableMessageEvent, InterstitialMessageEvent, InterstitialShownMessageComposer, IsBadgeRequestFulfilledEvent, IsOfferGiftableMessageEvent, JukeboxPlayListFullMessageEvent, JukeboxSongDisksMessageEvent, LimitedOfferAppearingNextMessageEvent, MaintenanceStatusMessageEvent, MarkCatalogNewAdditionsPageOpenedComposer, MarketplaceBuyOfferComposer, MarketplaceRedeemCreditsComposer, MarketplaceRequesstItemStatsComposer, MarketplaceRequestComposer, MarketplaceRequestOffersComposer, MarketplaceRequestOwnItemsComposer, MarketplaceTakeItemBackComposer, MysteryBoxKeysEvent, NotEnoughBalanceMessageEvent, NowPlayingMessageEvent, OfficialSongIdMessageEvent, OpenCampaignCalendarDoorAsStaffComposer, OpenCampaignCalendarDoorComposer, PetExperienceEvent, PetMountComposer, PetSupplementComposer, PlayListMessageEvent, PlayListSongAddedMessageEvent, PurchaseBasicMembershipExtensionComposer, PurchaseRoomAdMessageComposer, PurchaseTargetedOfferComposer, PurchaseVipMembershipExtensionComposer, RemoveAllRightsMessageComposer, RemoveJukeboxDiskComposer, RemoveOwnRoomRightsRoomMessageComposer, RemovePetSaddleComposer, RoomAdErrorEvent, RoomAdPurchaseInfoEvent, RoomUnitGiveHandItemPetComposer, SeasonalCalendarDailyOfferMessageEvent, SellablePetPalettesMessageEvent, SetTargetedOfferStateComposer, ShopTargetedOfferViewedComposer, TargetedOfferEvent, TargetedOfferNotFoundEvent, TogglePetBreedingComposer, TogglePetRidingComposer, TraxSongInfoMessageEvent, UnseenResetCategoryComposer, UnseenResetItemsComposer, UsePetProductComposer, UserSongDisksInventoryMessageEvent, WardrobeMessageEvent } from './messages'; import { AvailabilityStatusMessageEvent } from './messages/incoming/availability/AvailabilityStatusMessageEvent'; import { CfhSanctionMessageEvent, CfhTopicsInitEvent, SanctionStatusEvent } from './messages/incoming/callforhelp'; import { CameraPublishStatusMessageEvent } from './messages/incoming/camera/CameraPublishStatusMessageEvent'; @@ -781,6 +781,8 @@ export class NitroMessages implements IMessageConfiguration // BADGES this._events.set(IncomingHeader.USER_BADGES, BadgesEvent); this._events.set(IncomingHeader.USER_BADGES_ADD, BadgeReceivedEvent); + this._events.set(IncomingHeader.BADGE_POINT_LIMITS, BadgePointLimitsEvent); + this._events.set(IncomingHeader.BADGE_REQUEST_FULFILLED, IsBadgeRequestFulfilledEvent); // ACCESS this._events.set(IncomingHeader.USER_PERKS, UserPerksEvent); diff --git a/src/nitro/communication/messages/incoming/IncomingHeader.ts b/src/nitro/communication/messages/incoming/IncomingHeader.ts index 0460359b..6bf27d55 100644 --- a/src/nitro/communication/messages/incoming/IncomingHeader.ts +++ b/src/nitro/communication/messages/incoming/IncomingHeader.ts @@ -315,4 +315,6 @@ export class IncomingHeader public static COMPETITION_USER_PART_OF = 3841; public static COMPETITION_NO_OWNED_ROOMS = 2064; public static COMPETITION_SECONDS_UNTIL = 3926; + public static BADGE_POINT_LIMITS = 2501; + public static BADGE_REQUEST_FULFILLED = 2998; } diff --git a/src/nitro/communication/messages/incoming/inventory/badges/IsBadgeRequestFulfilledEvent.ts b/src/nitro/communication/messages/incoming/inventory/badges/IsBadgeRequestFulfilledEvent.ts index c50a257e..c9f1beac 100644 --- a/src/nitro/communication/messages/incoming/inventory/badges/IsBadgeRequestFulfilledEvent.ts +++ b/src/nitro/communication/messages/incoming/inventory/badges/IsBadgeRequestFulfilledEvent.ts @@ -1,6 +1,7 @@ import { IMessageEvent } from '../../../../../../core/communication/messages/IMessageEvent'; import { MessageEvent } from '../../../../../../core/communication/messages/MessageEvent'; import { IsBadgeRequestFulfilledParser } from '../../../parser/inventory/badges/IsBadgeRequestFulfilledParser'; + export class IsBadgeRequestFulfilledEvent extends MessageEvent implements IMessageEvent { constructor(callBack: Function) From 228c258aab8130767641e43b036a0185df48dd65 Mon Sep 17 00:00:00 2001 From: Bill Date: Mon, 6 Sep 2021 02:54:54 -0400 Subject: [PATCH 3/3] Update BadgePointLimit --- src/nitro/localization/INitroLocalizationManager.ts | 1 + src/nitro/localization/NitroLocalizationManager.ts | 7 +++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/nitro/localization/INitroLocalizationManager.ts b/src/nitro/localization/INitroLocalizationManager.ts index 5b759307..f09140bf 100644 --- a/src/nitro/localization/INitroLocalizationManager.ts +++ b/src/nitro/localization/INitroLocalizationManager.ts @@ -11,5 +11,6 @@ export interface INitroLocalizationManager extends INitroManager registerParameter(key: string, parameter: string, value: string): void; getBadgeName(key: string): string; getBadgeDesc(key: string): string; + getBadgePointLimit(badge: string): number; setBadgePointLimit(badge: string, point: number): void; } diff --git a/src/nitro/localization/NitroLocalizationManager.ts b/src/nitro/localization/NitroLocalizationManager.ts index 47d987cb..7a49b926 100644 --- a/src/nitro/localization/NitroLocalizationManager.ts +++ b/src/nitro/localization/NitroLocalizationManager.ts @@ -88,7 +88,7 @@ export class NitroLocalizationManager extends NitroManager implements INitroLoca public getBadgePointLimit(badge: string): number { - return this._badgePointLimits.get(badge); + return (this._badgePointLimits.get(badge) || -1); } public setBadgePointLimit(badge: string, point: number): void @@ -289,7 +289,10 @@ export class NitroLocalizationManager extends NitroManager implements INitroLoca let desc = this._Str_2103(this.getExistingKey(keys)); - desc = desc.replace('%limit$', this.getBadgePointLimit(key).toString()); + const limit = this.getBadgePointLimit(key); + + if(limit > -1) desc = desc.replace('%limit%', limit.toString()); + desc = desc.replace('%roman%', this.getRomanNumeral(badge.level)); return desc;