5180 fichiers 38.5 Mo 0 téléchargements 427 vues mis à jour il y a 7 heures ui
nitro-v36-with-renderer-v36 / src / hooks / rooms / widgets / furniture / useFurnitureExchangeWidget.ts
useFurnitureExchangeWidget.ts 2 Ko Télécharger le fichier
import { FurnitureExchangeComposer, GetRoomEngine, RedeemEmeraldFurniComposer, RoomEngineTriggerWidgetEvent, RoomObjectVariable } from '@octane/renderer';
import { useState } from 'react';
import { GetConfigurationValue, IsOwnerOfFurniture, SendMessageComposer } from '../../../../api';
import { useOctaneEvent } from '../../../events';
import { useFurniRemovedEvent } from '../../engine';

const useFurnitureExchangeWidgetState = () => {
    const [objectId, setObjectId] = useState(-1);
    const [category, setCategory] = useState(-1);
    const [value, setValue] = useState(0);
    // furniture_nft_credit: an emerald furni, redeemed for emeralds (official `nft.credit.converting.enabled`).
    const [isNft, setIsNft] = useState(false);

    const onClose = () => {
        setObjectId(-1);
        setCategory(-1);
        setValue(0);
        setIsNft(false);
    };

    const redeem = () => {
        SendMessageComposer(isNft ? new RedeemEmeraldFurniComposer(objectId) : new FurnitureExchangeComposer(objectId));

        onClose();
    };

    useOctaneEvent<RoomEngineTriggerWidgetEvent>(RoomEngineTriggerWidgetEvent.REQUEST_CREDITFURNI, (event) => {
        const roomObject = GetRoomEngine().getRoomObject(event.roomId, event.objectId, event.category);

        if (!roomObject || !IsOwnerOfFurniture(roomObject)) return;

        const nft = roomObject.model.getValue<string>(RoomObjectVariable.FURNITURE_NFT_CREDIT) === 'true';

        if (nft && GetConfigurationValue<boolean>('nft.credit.converting.enabled', false) !== true) return;

        setIsNft(nft);
        setObjectId(event.objectId);
        setCategory(event.category);
        setValue(roomObject.model.getValue<number>(RoomObjectVariable.FURNITURE_CREDIT_VALUE) || 0);
    });

    useFurniRemovedEvent(objectId !== -1 && category !== -1, (event) => {
        if (event.id !== objectId || event.category !== category) return;

        onClose();
    });

    return { objectId, value, isNft, redeem, onClose };
};

export const useFurnitureExchangeWidget = useFurnitureExchangeWidgetState;
15Sujets
1Dépôts
20Membres
3En 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