2021-09-18 10:31:08 +02:00
|
|
|
import { AchievementNotificationMessageEvent, ActivityPointNotificationMessageEvent, ClubGiftNotificationEvent, ClubGiftSelectedEvent, HabboBroadcastMessageEvent, HotelClosedAndOpensEvent, HotelClosesAndWillOpenAtEvent, HotelWillCloseInMinutesEvent, InfoFeedEnableMessageEvent, MaintenanceStatusMessageEvent, ModeratorCautionEvent, ModeratorMessageEvent, MOTDNotificationEvent, NotificationDialogMessageEvent, PetLevelNotificationEvent, PetReceivedMessageEvent, RespectReceivedEvent, RoomEnterEvent, UserBannedMessageEvent, Vector3d } from '@nitrots/nitro-renderer';
|
2021-06-22 18:40:28 +02:00
|
|
|
import { FC, useCallback } from 'react';
|
2021-09-18 10:31:08 +02:00
|
|
|
import { GetConfiguration, GetRoomEngine, GetSessionDataManager, LocalizeBadgeName, LocalizeText } from '../../api';
|
2022-03-03 10:11:31 +01:00
|
|
|
import { UseMessageEventHook } from '../../hooks';
|
2021-09-18 10:31:08 +02:00
|
|
|
import { NotificationBubbleType } from './common/NotificationBubbleType';
|
2021-08-22 07:00:05 +02:00
|
|
|
import { NotificationUtilities } from './common/NotificationUtilities';
|
2021-09-18 10:31:08 +02:00
|
|
|
import { ProductImageUtility } from './common/ProductImageUtility';
|
2021-06-22 18:40:28 +02:00
|
|
|
import { INotificationCenterMessageHandlerProps } from './NotificationCenterMessageHandler.types';
|
|
|
|
|
|
|
|
export const NotificationCenterMessageHandler: FC<INotificationCenterMessageHandlerProps> = props =>
|
|
|
|
{
|
2021-08-26 08:38:16 +02:00
|
|
|
const onRespectReceivedEvent = useCallback((event: RespectReceivedEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
if(parser.userId !== GetSessionDataManager().userId) return;
|
|
|
|
|
|
|
|
const text1 = LocalizeText('notifications.text.respect.1');
|
|
|
|
const text2 = LocalizeText('notifications.text.respect.2', [ 'count' ], [ parser.respectsReceived.toString() ]);
|
|
|
|
|
2021-09-18 10:31:08 +02:00
|
|
|
NotificationUtilities.showSingleBubble(text1, NotificationBubbleType.RESPECT);
|
|
|
|
NotificationUtilities.showSingleBubble(text2, NotificationBubbleType.RESPECT);
|
2021-08-26 08:38:16 +02:00
|
|
|
}, []);
|
|
|
|
|
2022-03-03 10:11:31 +01:00
|
|
|
UseMessageEventHook(RespectReceivedEvent, onRespectReceivedEvent);
|
2021-08-26 08:38:16 +02:00
|
|
|
|
2021-06-22 18:40:28 +02:00
|
|
|
const onHabboBroadcastMessageEvent = useCallback((event: HabboBroadcastMessageEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
2021-09-18 10:31:08 +02:00
|
|
|
NotificationUtilities.simpleAlert(parser.message.replace(/\\r/g, '\r'), null, null, LocalizeText('notifications.broadcast.title'));
|
2021-07-08 07:46:59 +02:00
|
|
|
}, []);
|
2021-06-22 18:40:28 +02:00
|
|
|
|
2022-03-03 10:11:31 +01:00
|
|
|
UseMessageEventHook(HabboBroadcastMessageEvent, onHabboBroadcastMessageEvent);
|
2021-08-26 08:38:16 +02:00
|
|
|
|
|
|
|
const onAchievementNotificationMessageEvent = useCallback((event: AchievementNotificationMessageEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
const text1 = LocalizeText('achievements.levelup.desc');
|
|
|
|
const badgeName = LocalizeBadgeName(parser.data.badgeCode);
|
|
|
|
const badgeImage = GetSessionDataManager().getBadgeUrl(parser.data.badgeCode);
|
|
|
|
const internalLink = 'questengine/achievements/' + parser.data.category;
|
|
|
|
|
2021-09-18 10:31:08 +02:00
|
|
|
NotificationUtilities.showSingleBubble((text1 + ' ' + badgeName), NotificationBubbleType.ACHIEVEMENT, badgeImage, internalLink);
|
2021-08-26 08:38:16 +02:00
|
|
|
}, []);
|
|
|
|
|
2022-03-03 10:11:31 +01:00
|
|
|
UseMessageEventHook(AchievementNotificationMessageEvent, onAchievementNotificationMessageEvent);
|
2021-08-26 08:38:16 +02:00
|
|
|
|
|
|
|
const onClubGiftNotificationEvent = useCallback((event: ClubGiftNotificationEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
NotificationUtilities.showClubGiftNotification(parser.numGifts);
|
|
|
|
}, []);
|
|
|
|
|
2022-03-03 10:11:31 +01:00
|
|
|
UseMessageEventHook(ClubGiftNotificationEvent, onClubGiftNotificationEvent);
|
2021-08-26 08:38:16 +02:00
|
|
|
|
2021-07-08 07:46:59 +02:00
|
|
|
const onModeratorMessageEvent = useCallback((event: ModeratorMessageEvent) =>
|
2021-06-22 18:40:28 +02:00
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
2021-10-21 02:50:23 +02:00
|
|
|
NotificationUtilities.handleModeratorMessage(parser.message, parser.url);
|
2021-07-08 07:46:59 +02:00
|
|
|
}, []);
|
2021-06-22 18:40:28 +02:00
|
|
|
|
2022-03-03 10:11:31 +01:00
|
|
|
UseMessageEventHook(ModeratorMessageEvent, onModeratorMessageEvent);
|
2021-08-26 08:38:16 +02:00
|
|
|
|
|
|
|
const onActivityPointNotificationMessageEvent = useCallback((event: ActivityPointNotificationMessageEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
2021-09-18 10:31:08 +02:00
|
|
|
if(parser.amountChanged <= 0) return;
|
|
|
|
|
|
|
|
let imageUrl: string = null;
|
|
|
|
|
|
|
|
switch(parser.type)
|
|
|
|
{
|
|
|
|
case 5:
|
|
|
|
imageUrl = GetConfiguration<string>('currency.asset.icon.url', '').replace('%type%', parser.type.toString());
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2022-01-07 08:48:21 +01:00
|
|
|
NotificationUtilities.showSingleBubble(LocalizeText('notifications.text.loyalty.received', [ 'AMOUNT' ], [ parser.amountChanged.toString() ]), NotificationBubbleType.INFO, imageUrl);
|
2021-08-26 08:38:16 +02:00
|
|
|
}, []);
|
|
|
|
|
2022-03-03 10:11:31 +01:00
|
|
|
UseMessageEventHook(ActivityPointNotificationMessageEvent, onActivityPointNotificationMessageEvent);
|
2021-08-26 08:38:16 +02:00
|
|
|
|
2021-09-18 10:31:08 +02:00
|
|
|
const onUserBannedMessageEvent = useCallback((event: UserBannedMessageEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
NotificationUtilities.handleUserBannedMessage(parser.message);
|
|
|
|
}, []);
|
|
|
|
|
2022-03-03 10:11:31 +01:00
|
|
|
UseMessageEventHook(UserBannedMessageEvent, onUserBannedMessageEvent);
|
2021-09-18 10:31:08 +02:00
|
|
|
|
2021-08-26 08:38:16 +02:00
|
|
|
const onHotelClosesAndWillOpenAtEvent = useCallback((event: HotelClosesAndWillOpenAtEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
NotificationUtilities.handleHotelClosedMessage(parser.openHour, parser.openMinute, parser.userThrowOutAtClose);
|
|
|
|
}, []);
|
|
|
|
|
2022-03-03 10:11:31 +01:00
|
|
|
UseMessageEventHook(HotelClosesAndWillOpenAtEvent, onHotelClosesAndWillOpenAtEvent);
|
2021-08-26 08:38:16 +02:00
|
|
|
|
2021-09-18 10:31:08 +02:00
|
|
|
const onPetReceivedMessageEvent = useCallback((event: PetReceivedMessageEvent) =>
|
2021-08-26 08:38:16 +02:00
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
const text = LocalizeText('notifications.text.' + (parser.boughtAsGift ? 'petbought' : 'petreceived'));
|
|
|
|
|
|
|
|
let imageUrl: string = null;
|
|
|
|
|
|
|
|
const imageResult = GetRoomEngine().getRoomObjectPetImage(parser.pet.typeId, parser.pet.paletteId, parseInt(parser.pet.color, 16), new Vector3d(45 * 3), 64, null, true);
|
|
|
|
|
|
|
|
if(imageResult) imageUrl = imageResult.getImage().src;
|
|
|
|
|
2021-09-18 10:31:08 +02:00
|
|
|
NotificationUtilities.showSingleBubble(text, NotificationBubbleType.PETLEVEL, imageUrl);
|
2021-08-26 08:38:16 +02:00
|
|
|
}, []);
|
|
|
|
|
2022-03-03 10:11:31 +01:00
|
|
|
UseMessageEventHook(PetReceivedMessageEvent, onPetReceivedMessageEvent);
|
2021-08-26 08:38:16 +02:00
|
|
|
|
2021-08-28 05:31:22 +02:00
|
|
|
const onRoomEnterEvent = useCallback((event: RoomEnterEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
NotificationUtilities.showModerationDisclaimer();
|
|
|
|
}, []);
|
|
|
|
|
2022-03-03 10:11:31 +01:00
|
|
|
UseMessageEventHook(RoomEnterEvent, onRoomEnterEvent);
|
2021-08-28 05:31:22 +02:00
|
|
|
|
2021-07-08 07:46:59 +02:00
|
|
|
const onMOTDNotificationEvent = useCallback((event: MOTDNotificationEvent) =>
|
2021-06-22 18:40:28 +02:00
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
2021-09-18 10:31:08 +02:00
|
|
|
NotificationUtilities.handleMOTD(parser.messages);
|
2021-07-08 07:46:59 +02:00
|
|
|
}, []);
|
2021-06-22 18:40:28 +02:00
|
|
|
|
2022-03-03 10:11:31 +01:00
|
|
|
UseMessageEventHook(MOTDNotificationEvent, onMOTDNotificationEvent);
|
2021-08-28 05:31:22 +02:00
|
|
|
|
2021-09-18 10:31:08 +02:00
|
|
|
const onPetLevelNotificationEvent = useCallback((event: PetLevelNotificationEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
let imageUrl: string = null;
|
|
|
|
|
|
|
|
const imageResult = GetRoomEngine().getRoomObjectPetImage(parser.figureData.typeId, parser.figureData.paletteId, parseInt(parser.figureData.color, 16), new Vector3d(45 * 3), 64, null, true);
|
|
|
|
|
|
|
|
if(imageResult) imageUrl = imageResult.getImage().src;
|
|
|
|
|
|
|
|
NotificationUtilities.showSingleBubble(LocalizeText('notifications.text.petlevel', [ 'pet_name', 'level' ], [ parser.petName, parser.level.toString() ]), NotificationBubbleType.PETLEVEL, imageUrl);
|
|
|
|
}, []);
|
|
|
|
|
2022-03-03 10:11:31 +01:00
|
|
|
UseMessageEventHook(PetLevelNotificationEvent, onPetLevelNotificationEvent);
|
2021-09-18 10:31:08 +02:00
|
|
|
|
|
|
|
const onInfoFeedEnableMessageEvent = useCallback((event: InfoFeedEnableMessageEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
NotificationUtilities.BUBBLES_DISABLED = !(parser.enabled);
|
|
|
|
}, []);
|
|
|
|
|
2022-03-03 10:11:31 +01:00
|
|
|
UseMessageEventHook(InfoFeedEnableMessageEvent, onInfoFeedEnableMessageEvent);
|
2021-09-18 10:31:08 +02:00
|
|
|
|
|
|
|
const onClubGiftSelectedEvent = useCallback((event: ClubGiftSelectedEvent) =>
|
2021-06-22 18:40:28 +02:00
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
2021-09-18 10:31:08 +02:00
|
|
|
if(!parser.products || !parser.products.length) return;
|
2021-06-22 18:40:28 +02:00
|
|
|
|
2021-09-18 10:31:08 +02:00
|
|
|
const productData = parser.products[0];
|
|
|
|
|
|
|
|
if(!productData) return;
|
|
|
|
|
|
|
|
NotificationUtilities.showSingleBubble(LocalizeText('notifications.text.club_gift.selected'), NotificationBubbleType.INFO, ProductImageUtility.getProductImageUrl(productData.productType, productData.furniClassId, productData.extraParam))
|
|
|
|
}, []);
|
|
|
|
|
2022-03-03 10:11:31 +01:00
|
|
|
UseMessageEventHook(ClubGiftSelectedEvent, onClubGiftSelectedEvent);
|
2021-09-18 10:31:08 +02:00
|
|
|
|
|
|
|
const onMaintenanceStatusMessageEvent = useCallback((event: MaintenanceStatusMessageEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
NotificationUtilities.handleHotelMaintenanceMessage(parser.minutesUntilMaintenance, parser.duration);
|
|
|
|
}, []);
|
|
|
|
|
2022-03-03 10:11:31 +01:00
|
|
|
UseMessageEventHook(MaintenanceStatusMessageEvent, onMaintenanceStatusMessageEvent);
|
2021-09-18 10:31:08 +02:00
|
|
|
|
|
|
|
const onModeratorCautionEvent = useCallback((event: ModeratorCautionEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
NotificationUtilities.handleModeratorCaution(parser.message, parser.url);
|
|
|
|
}, []);
|
|
|
|
|
2022-03-03 10:11:31 +01:00
|
|
|
UseMessageEventHook(ModeratorCautionEvent, onModeratorCautionEvent);
|
2021-08-28 05:31:22 +02:00
|
|
|
|
2021-07-08 07:46:59 +02:00
|
|
|
const onNotificationDialogMessageEvent = useCallback((event: NotificationDialogMessageEvent) =>
|
2021-06-22 18:40:28 +02:00
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
2021-08-22 07:00:05 +02:00
|
|
|
NotificationUtilities.showNotification(parser.type, parser.parameters);
|
|
|
|
}, []);
|
2021-08-05 19:32:09 +02:00
|
|
|
|
2022-03-03 10:11:31 +01:00
|
|
|
UseMessageEventHook(NotificationDialogMessageEvent, onNotificationDialogMessageEvent);
|
2021-06-22 18:40:28 +02:00
|
|
|
|
2021-09-18 10:31:08 +02:00
|
|
|
const onHotelWillCloseInMinutesEvent = useCallback((event: HotelWillCloseInMinutesEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
NotificationUtilities.handleHotelClosingMessage(parser.openMinute);
|
|
|
|
}, []);
|
|
|
|
|
2022-03-03 10:11:31 +01:00
|
|
|
UseMessageEventHook(HotelWillCloseInMinutesEvent, onHotelWillCloseInMinutesEvent);
|
2021-09-18 10:31:08 +02:00
|
|
|
|
|
|
|
const onHotelClosedAndOpensEvent = useCallback((event: HotelClosedAndOpensEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
NotificationUtilities.handleLoginFailedHotelClosedMessage(parser.openHour, parser.openMinute);
|
|
|
|
}, []);
|
|
|
|
|
2022-03-03 10:11:31 +01:00
|
|
|
UseMessageEventHook(HotelClosedAndOpensEvent, onHotelClosedAndOpensEvent);
|
2021-09-18 10:31:08 +02:00
|
|
|
|
2021-06-22 18:40:28 +02:00
|
|
|
return null;
|
|
|
|
}
|