5180 fichiers 38.5 Mo 0 téléchargements 249 vues mis à jour il y a 5 heures ui
nitro-v36-with-renderer-v36 / src / api / inventory / FurnitureUtilities.ts
FurnitureUtilities.ts 4.7 Ko Télécharger le fichier
import { FurnitureListItemParser, GetRoomEngine, IObjectData, StringDataType } from '@octane/renderer';
import { FurniCategory } from './FurniCategory';
import { FurnitureItem } from './FurnitureItem';
import { GroupItem } from './GroupItem';

export const createGroupItem = (type: number, category: number, stuffData: IObjectData, extra: number = NaN) =>
    new GroupItem(type, category, GetRoomEngine(), stuffData, extra);

export const getGuildFurniType = (spriteId: number, stuffData: IObjectData) => {
    let type = spriteId.toString();

    if (!(stuffData instanceof StringDataType)) return type;

    let i = 1;

    while (i < 5) {
        type = type + (',' + stuffData.getValue(i));

        i++;
    }

    return type;
};

export const getGroupItemKey = (group: GroupItem): string => {
    let key = `${group.type}:${group.isWallItem ? 1 : 0}:${group.stuffData?.getLegacyString?.() ?? ''}`;

    if (group.category === FurniCategory.GUILD_FURNI && group.stuffData) {
        key = `${key}:${getGuildFurniType(group.type, group.stuffData)}`;
    }

    if (!group.isGroupable) {
        const itemId = group.getLastItem?.()?.id;

        if (itemId != null) key = `${key}:${itemId}`;
    }

    return key;
};

const addSingleFurnitureItem = (set: GroupItem[], item: FurnitureItem, unseen: boolean) => {
    const groupItems: GroupItem[] = [];

    for (const groupItem of set) {
        if (groupItem.type === item.type) groupItems.push(groupItem);
    }

    for (const groupItem of groupItems) {
        if (groupItem.getItemById(item.id)) return groupItem;
    }

    const groupItem = createGroupItem(item.type, item.category, item.stuffData, item.extra);

    groupItem.push(item);

    if (unseen) {
        groupItem.hasUnseenItems = true;

        set.unshift(groupItem);
    } else {
        set.push(groupItem);
    }

    return groupItem;
};

const addGroupableFurnitureItem = (set: GroupItem[], item: FurnitureItem, unseen: boolean) => {
    let existingGroup: GroupItem = null;

    for (const groupItem of set) {
        if (groupItem.type === item.type && groupItem.isWallItem === item.isWallItem && groupItem.isGroupable) {
            if (item.category === FurniCategory.POSTER) {
                if (groupItem.stuffData.getLegacyString() === item.stuffData.getLegacyString()) {
                    existingGroup = groupItem;

                    break;
                }
            } else if (item.category === FurniCategory.GUILD_FURNI) {
                if (item.stuffData.compare(groupItem.stuffData)) {
                    existingGroup = groupItem;

                    break;
                }
            } else {
                existingGroup = groupItem;

                break;
            }
        }
    }

    if (existingGroup) {
        const index = set.indexOf(existingGroup);

        const clonedGroup = existingGroup.clone();

        clonedGroup.push(item);

        if (unseen) {
            clonedGroup.hasUnseenItems = true;

            if (index >= 0) set.splice(index, 1);

            set.unshift(clonedGroup);
        } else if (index >= 0) {
            set[index] = clonedGroup;
        } else {
            set.push(clonedGroup);
        }

        return clonedGroup;
    }

    existingGroup = createGroupItem(item.type, item.category, item.stuffData, item.extra);

    existingGroup.push(item);

    if (unseen) {
        existingGroup.hasUnseenItems = true;

        set.unshift(existingGroup);
    } else {
        set.push(existingGroup);
    }

    return existingGroup;
};

export const addFurnitureItem = (set: GroupItem[], item: FurnitureItem, unseen: boolean) => {
    if (!item.isGroupable) {
        addSingleFurnitureItem(set, item, unseen);
    } else {
        addGroupableFurnitureItem(set, item, unseen);
    }
};

export const mergeFurniFragments = (
    fragment: Map<number, FurnitureListItemParser>,
    totalFragments: number,
    fragmentNumber: number,
    fragments: Map<number, FurnitureListItemParser>[]
) => {
    if (totalFragments === 1) return fragment;

    fragments[fragmentNumber] = fragment;

    for (const frag of fragments) {
        if (!frag) return null;
    }

    const merged: Map<number, FurnitureListItemParser> = new Map();

    for (const frag of fragments) {
        for (const [key, value] of frag) merged.set(key, value);

        frag.clear();
    }

    fragments = null;

    return merged;
};

export const getAllItemIds = (groupItems: GroupItem[]) => {
    const itemIds: number[] = [];

    for (const groupItem of groupItems) {
        let totalCount = groupItem.getTotalCount();

        if (groupItem.category === FurniCategory.POST_IT) totalCount = 1;

        let i = 0;

        while (i < totalCount) {
            itemIds.push(groupItem.getItemByIndex(i).id);

            i++;
        }
    }

    return itemIds;
};
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