5180 fichiers 38.5 Mo 0 téléchargements 255 vues mis à jour il y a 5 heures ui
usePurse.ts 3.9 Ko Télécharger le fichier
import {
    ActivityPointNotificationMessageEvent,
    UserCreditsEvent,
    UserCurrencyComposer,
    UserCurrencyEvent,
    UserSubscriptionComposer,
    UserSubscriptionEvent,
    UserSubscriptionParser
} from '@octane/renderer';
import { useEffect, useMemo, useState } from 'react';
import { registerSharedHook, useSharedHook } from '@/state/useSharedHook';
import { CloneObject, ClubStatus, GetConfigurationValue, IPurse, PlaySound, Purse, SendMessageComposer, SoundNames } from '../../api';
import { useMessageEvent } from '../events';

const usePurseState = () => {
    const [purse, setPurse] = useState<IPurse>(new Purse());
    const hcDisabled = useMemo(() => GetConfigurationValue<boolean>('hc.disabled', false), []);

    const clubStatus = useMemo(() => {
        if (hcDisabled || purse.clubDays > 0) return ClubStatus.ACTIVE;

        if (purse.pastClubDays > 0 || purse.pastVipDays > 0) return ClubStatus.EXPIRED;

        return ClubStatus.NONE;
    }, [purse, hcDisabled]);

    const getCurrencyAmount = (type: number) => {
        if (type === -1) return purse.credits;

        for (const [key, value] of purse.activityPoints.entries()) {
            if (key !== type) continue;

            return value;
        }

        return 0;
    };

    useMessageEvent<UserCreditsEvent>(UserCreditsEvent, (event) => {
        const parser = event.getParser();

        setPurse((prevValue) => {
            const newValue = CloneObject(prevValue);

            newValue.credits = parseFloat(parser.credits);

            if (prevValue.credits !== newValue.credits) PlaySound(SoundNames.CREDITS);

            return newValue;
        });
    });

    useMessageEvent<UserCurrencyEvent>(UserCurrencyEvent, (event) => {
        const parser = event.getParser();

        setPurse((prevValue) => {
            const newValue = CloneObject(prevValue);

            newValue.activityPoints = parser.currencies;

            return newValue;
        });
    });

    useMessageEvent<ActivityPointNotificationMessageEvent>(ActivityPointNotificationMessageEvent, (event) => {
        const parser = event.getParser();

        setPurse((prevValue) => {
            const newValue = CloneObject(prevValue);

            newValue.activityPoints = new Map(newValue.activityPoints);

            newValue.activityPoints.set(parser.type, parser.amount);

            if (parser.type === 0) PlaySound(SoundNames.DUCKETS);

            return newValue;
        });
    });

    useMessageEvent<UserSubscriptionEvent>(UserSubscriptionEvent, (event) => {
        const parser = event.getParser();
        const productName = parser.productName;

        if (productName !== 'club_habbo' && productName !== 'habbo_club') return;

        setPurse((prevValue) => {
            const newValue = CloneObject(prevValue);

            newValue.clubDays = Math.max(0, parser.daysToPeriodEnd);
            newValue.clubPeriods = Math.max(0, parser.periodsSubscribedAhead);
            newValue.isVip = parser.isVip;
            newValue.pastClubDays = parser.pastClubDays;
            newValue.pastVipDays = parser.pastVipDays;
            newValue.isExpiring = parser.responseType === UserSubscriptionParser.RESPONSE_TYPE_DISCOUNT_AVAILABLE ? true : false;
            newValue.minutesUntilExpiration = parser.minutesUntilExpiration;
            newValue.minutesSinceLastModified = parser.minutesSinceLastModified;

            return newValue;
        });
    });

    useEffect(() => {
        if (hcDisabled) return;

        SendMessageComposer(new UserSubscriptionComposer('habbo_club'));

        const interval = setInterval(() => SendMessageComposer(new UserSubscriptionComposer('habbo_club')), 50000);

        return () => clearInterval(interval);
    }, [hcDisabled]);

    useEffect(() => {
        SendMessageComposer(new UserCurrencyComposer());
    }, []);

    return { purse, hcDisabled, clubStatus, getCurrencyAmount };
};

export const usePurse = () => useSharedHook(usePurseState);

registerSharedHook(usePurseState);
15Sujets
1Dépôts
20Membres
2En ligne
Profile
Inscrit
Dernière visite
Messages
0
Votes positifs
0
Votes négatifs
0

Nous utilisons des cookies pour assurer le bon fonctionnement du site et améliorer votre expérience. en savoir plus

Autoriser