5180 fichiers 38.5 Mo 0 téléchargements 294 vues mis à jour il y a 6 heures ui
nitro-v36-with-renderer-v36 / src / api / room / widgets / AvatarInfoUtilities.ts
AvatarInfoUtilities.ts 19.9 Ko Télécharger le fichier
import {
    GetRoomEngine,
    GetSessionDataManager,
    GetTickerTime,
    IFurnitureData,
    IRoomModerationSettings,
    IRoomPetData,
    IRoomUserData,
    ObjectDataFactory,
    PetFigureData,
    PetType,
    RoomControllerLevel,
    RoomModerationSettings,
    RoomObjectCategory,
    RoomObjectType,
    RoomObjectVariable,
    RoomTradingLevelEnum,
    RoomWidgetEnumItemExtradataParameter
} from '@octane/renderer';
import { GetRoomSession, IsAnyRoomController, IsOwnerOfFurniture } from '../../octane';
import { IsBuildersClubFurniId, IsTemporaryFurniId, LocalizeText } from '../../utils';
import { AvatarInfoFurni } from './AvatarInfoFurni';
import { AvatarInfoName } from './AvatarInfoName';
import { AvatarInfoPet } from './AvatarInfoPet';
import { AvatarInfoRentableBot } from './AvatarInfoRentableBot';
import { AvatarInfoUser } from './AvatarInfoUser';

export class AvatarInfoUtilities {
    public static getObjectName(objectId: number, category: number): AvatarInfoName {
        const roomSession = GetRoomSession();

        let id = -1;
        let name: string = null;
        let userType = 0;

        switch (category) {
            case RoomObjectCategory.FLOOR:
            case RoomObjectCategory.WALL: {
                const roomObject = GetRoomEngine().getRoomObject(roomSession.roomId, objectId, category);

                if (!roomObject) break;

                if (roomObject.type.indexOf('poster') === 0) {
                    name = LocalizeText('${poster_' + parseInt(roomObject.type.replace('poster', '')) + '_name}');
                } else {
                    let furniData: IFurnitureData = null;
                    const className = roomObject.type;

                    if (category === RoomObjectCategory.FLOOR) {
                        furniData = GetSessionDataManager().getFloorItemDataByName(className);
                    } else if (category === RoomObjectCategory.WALL) {
                        furniData = GetSessionDataManager().getWallItemDataByName(className);
                    }

                    if (!furniData) break;

                    id = furniData.id;
                    name = furniData.name;
                }
                break;
            }
            case RoomObjectCategory.UNIT: {
                const userData = roomSession.userDataManager.getUserDataByIndex(objectId);

                if (!userData) break;

                id = userData.webID;
                name = userData.name;
                userType = userData.type;
                break;
            }
        }

        if (!name || !name.length) return null;

        return new AvatarInfoName(objectId, category, id, name, userType);
    }

    public static getFurniInfo(objectId: number, category: number): AvatarInfoFurni {
        const roomSession = GetRoomSession();
        const roomObject = GetRoomEngine().getRoomObject(roomSession.roomId, objectId, category);

        if (!roomObject) return null;

        const furniInfo = new AvatarInfoFurni(AvatarInfoFurni.FURNI);

        furniInfo.id = objectId;
        furniInfo.category = category;
        furniInfo.isTemporary = IsTemporaryFurniId(objectId);
        furniInfo.isBuildersClub = IsBuildersClubFurniId(objectId);

        const model = roomObject.model;

        if (model.getValue<string>(RoomWidgetEnumItemExtradataParameter.INFOSTAND_EXTRA_PARAM))
            furniInfo.extraParam = model.getValue<string>(RoomWidgetEnumItemExtradataParameter.INFOSTAND_EXTRA_PARAM);

        const objectData = ObjectDataFactory.getData(model.getValue<number>(RoomObjectVariable.FURNITURE_DATA_FORMAT));

        objectData.initializeFromRoomObjectModel(model);

        furniInfo.stuffData = objectData;

        const objectType = roomObject.type;

        if (objectType.indexOf('poster') === 0) {
            const posterId = parseInt(objectType.replace('poster', ''));

            furniInfo.name = LocalizeText('${poster_' + posterId + '_name}');
            furniInfo.description = LocalizeText('${poster_' + posterId + '_desc}');
        } else {
            let furnitureData: IFurnitureData = null;

            const typeId = model.getValue<number>(RoomObjectVariable.FURNITURE_TYPE_ID);

            if (typeId > 0) {
                if (category === RoomObjectCategory.FLOOR) {
                    furnitureData = GetSessionDataManager().getFloorItemData(typeId);
                } else if (category === RoomObjectCategory.WALL) {
                    furnitureData = GetSessionDataManager().getWallItemData(typeId);
                }
            }

            if (furnitureData) {
                furniInfo.name = furnitureData.name;
                furniInfo.description = furnitureData.description;
                furniInfo.spriteId = furnitureData.id;
                furniInfo.productType = category === RoomObjectCategory.WALL ? 'i' : 's';
                furniInfo.purchaseOfferId = furnitureData.purchaseOfferId;
                furniInfo.purchaseCouldBeUsedForBuyout = furnitureData.purchaseCouldBeUsedForBuyout;
                furniInfo.rentOfferId = furnitureData.rentOfferId;
                furniInfo.rentCouldBeUsedForBuyout = furnitureData.rentCouldBeUsedForBuyout;
                furniInfo.availableForBuildersClub = furnitureData.availableForBuildersClub;
                furniInfo.tileSizeX = furnitureData.tileSizeX;
                furniInfo.tileSizeY = furnitureData.tileSizeY;
            }
        }

        if (objectType.indexOf('post_it') > -1) furniInfo.isStickie = true;

        const expiryTime = model.getValue<number>(RoomObjectVariable.FURNITURE_EXPIRY_TIME);
        const expiryTimestamp = model.getValue<number>(RoomObjectVariable.FURNITURE_EXPIRTY_TIMESTAMP);

        furniInfo.expiration = expiryTime < 0 ? expiryTime : Math.max(0, expiryTime - (GetTickerTime() - expiryTimestamp) / 1000);

        /* let roomObjectImage = GetRoomEngine().getRoomObjectImage(roomSession.roomId, objectId, category, new Vector3d(180), 64, null);

        if(!roomObjectImage.data || (roomObjectImage.data.width > 140) || (roomObjectImage.data.height > 200))
        {
            roomObjectImage = GetRoomEngine().getRoomObjectImage(roomSession.roomId, objectId, category, new Vector3d(180), 1, null);
        }

        furniInfo.image = roomObjectImage.getImage(); */
        furniInfo.isWallItem = category === RoomObjectCategory.WALL;
        furniInfo.isRoomOwner = roomSession.isRoomOwner;
        furniInfo.roomControllerLevel = roomSession.controllerLevel;
        furniInfo.isAnyRoomController = IsAnyRoomController();
        furniInfo.ownerId = model.getValue<number>(RoomObjectVariable.FURNITURE_OWNER_ID);
        furniInfo.ownerName = model.getValue<string>(RoomObjectVariable.FURNITURE_OWNER_NAME);
        furniInfo.usagePolicy = model.getValue<number>(RoomObjectVariable.FURNITURE_USAGE_POLICY);
        furniInfo.allowStack = model.getValue<number>(RoomObjectVariable.FURNITURE_ALLOW_STACK) > 0;
        furniInfo.allowSit = model.getValue<number>(RoomObjectVariable.FURNITURE_ALLOW_SIT) > 0;
        furniInfo.allowLay = model.getValue<number>(RoomObjectVariable.FURNITURE_ALLOW_LAY) > 0;
        furniInfo.allowWalk = model.getValue<number>(RoomObjectVariable.FURNITURE_ALLOW_WALK) > 0;
        furniInfo.teleportTargetId = Number(model.getValue<number>(RoomObjectVariable.FURNITURE_TELEPORT_TARGET_ID) ?? 0);

        const dimensionsX = model.getValue<number>(RoomObjectVariable.FURNITURE_DIMENSIONS_X);
        const dimensionsY = model.getValue<number>(RoomObjectVariable.FURNITURE_DIMENSIONS_Y);

        if (dimensionsX > 0) furniInfo.tileSizeX = dimensionsX;

        if (dimensionsY > 0) furniInfo.tileSizeY = dimensionsY;

        const guildId = model.getValue<number>(RoomObjectVariable.FURNITURE_GUILD_CUSTOMIZED_GUILD_ID);

        if (guildId !== 0) furniInfo.groupId = guildId;

        if (IsOwnerOfFurniture(roomObject)) furniInfo.isOwner = true;

        return furniInfo;
    }

    public static getUserInfo(category: number, userData: IRoomUserData): AvatarInfoUser {
        const roomSession = GetRoomSession();

        const userInfo = new AvatarInfoUser(userData.webID === GetSessionDataManager().userId ? AvatarInfoUser.OWN_USER : AvatarInfoUser.PEER);

        userInfo.isSpectatorMode = roomSession.isSpectator;
        userInfo.name = userData.name;
        userInfo.motto = userData.custom;
        userInfo.nickIcon = userData.nickIcon;
        userInfo.prefixText = userData.prefixText;
        userInfo.prefixColor = userData.prefixColor;
        userInfo.prefixIcon = userData.prefixIcon;
        userInfo.prefixEffect = userData.prefixEffect;
        userInfo.prefixFont = userData.prefixFont;
        userInfo.displayOrder = userData.displayOrder;
        userInfo.backgroundId = userData.background;
        userInfo.standId = userData.stand;
        userInfo.overlayId = userData.overlay;
        userInfo.cardBackgroundId = userData.cardBackground ?? 0;
        userInfo.borderId = (userData as any).borderId ?? 0;
        userInfo.achievementScore = userData.activityPoints;
        userInfo.badgesRank = userData.badgesRank ?? -1;
        userInfo.webID = userData.webID;
        userInfo.roomIndex = userData.roomIndex;
        userInfo.userType = RoomObjectType.USER;

        const roomObject = GetRoomEngine().getRoomObject(roomSession.roomId, userData.roomIndex, category);

        if (roomObject) userInfo.carryItem = roomObject.model.getValue<number>(RoomObjectVariable.FIGURE_CARRY_OBJECT) || 0;

        if (userInfo.type === AvatarInfoUser.OWN_USER) userInfo.allowNameChange = GetSessionDataManager().canChangeName;

        userInfo.amIOwner = roomSession.isRoomOwner;
        userInfo.isGuildRoom = roomSession.isGuildRoom;
        userInfo.roomControllerLevel = roomSession.controllerLevel;
        userInfo.amIAnyRoomController = IsAnyRoomController();
        userInfo.isAmbassador = GetSessionDataManager().isAmbassador;

        if (userInfo.type === AvatarInfoUser.PEER) {
            if (roomObject) {
                userInfo.targetRoomControllerLevel = roomObject.model.getValue<number>(RoomObjectVariable.FIGURE_FLAT_CONTROL);
                userInfo.canBeMuted = this.canBeMuted(userInfo);
                userInfo.canBeKicked = this.canBeKicked(userInfo);
                userInfo.canBeBanned = this.canBeBanned(userInfo);
            }

            userInfo.isIgnored = GetSessionDataManager().isUserIgnored(userData.webID);
            userInfo.respectLeft = GetSessionDataManager().respectsLeft;

            const isShuttingDown = GetSessionDataManager().isSystemShutdown;
            const tradeMode = roomSession.tradeMode;

            if (isShuttingDown) {
                userInfo.canTrade = false;
            } else {
                switch (tradeMode) {
                    case RoomTradingLevelEnum.ROOM_CONTROLLER_REQUIRED: {
                        const roomController =
                            userInfo.roomControllerLevel !== RoomControllerLevel.NONE && userInfo.roomControllerLevel !== RoomControllerLevel.GUILD_MEMBER;
                        const targetController =
                            userInfo.targetRoomControllerLevel !== RoomControllerLevel.NONE &&
                            userInfo.targetRoomControllerLevel !== RoomControllerLevel.GUILD_MEMBER;

                        userInfo.canTrade = roomController || targetController;
                        break;
                    }
                    case RoomTradingLevelEnum.FREE_TRADING:
                        userInfo.canTrade = true;
                        break;
                    default:
                        userInfo.canTrade = false;
                        break;
                }
            }

            userInfo.canTradeReason = AvatarInfoUser.TRADE_REASON_OK;

            // A shutdown is the reason even in a room without free trading.
            if (tradeMode !== RoomTradingLevelEnum.FREE_TRADING) userInfo.canTradeReason = AvatarInfoUser.TRADE_REASON_NO_TRADING;

            if (isShuttingDown) userInfo.canTradeReason = AvatarInfoUser.TRADE_REASON_SHUTDOWN;

            // const _local_12 = GetSessionDataManager().userId;
            // _local_13 = GetSessionDataManager().getUserTags(_local_12);
            // this._Str_16287(_local_12, _local_13);
        }

        userInfo.groupId = userData.groupId;
        userInfo.groupBadgeId = GetSessionDataManager().getGroupBadge(userInfo.groupId);
        userInfo.groupName = userData.groupName;
        userInfo.badges = roomSession.userDataManager.getUserBadges(userData.webID);
        userInfo.figure = userData.figure;
        //var _local_8:Array = GetSessionDataManager().getUserTags(userData.webID);
        //this._Str_16287(userData.webId, _local_8);
        //this._container.habboGroupsManager.updateVisibleExtendedProfile(userData.webID);
        //this._container.connection.send(new GetRelationshipStatusInfoMessageComposer(userData.webId));

        return userInfo;
    }

    public static getBotInfo(category: number, userData: IRoomUserData): AvatarInfoUser {
        const roomSession = GetRoomSession();
        const userInfo = new AvatarInfoUser(AvatarInfoUser.BOT);

        userInfo.name = userData.name;
        userInfo.motto = userData.custom;
        userInfo.webID = userData.webID;
        userInfo.roomIndex = userData.roomIndex;
        userInfo.userType = userData.type;

        const roomObject = GetRoomEngine().getRoomObject(roomSession.roomId, userData.roomIndex, category);

        if (roomObject) userInfo.carryItem = roomObject.model.getValue<number>(RoomObjectVariable.FIGURE_CARRY_OBJECT) || 0;

        userInfo.amIOwner = roomSession.isRoomOwner;
        userInfo.isGuildRoom = roomSession.isGuildRoom;
        userInfo.roomControllerLevel = roomSession.controllerLevel;
        userInfo.amIAnyRoomController = IsAnyRoomController();
        userInfo.isAmbassador = GetSessionDataManager().isAmbassador;
        userInfo.badges = [AvatarInfoUser.DEFAULT_BOT_BADGE_ID];
        userInfo.figure = userData.figure;

        return userInfo;
    }

    public static getRentableBotInfo(category: number, userData: IRoomUserData): AvatarInfoRentableBot {
        const roomSession = GetRoomSession();
        const botInfo = new AvatarInfoRentableBot(AvatarInfoRentableBot.RENTABLE_BOT);

        botInfo.name = userData.name;
        botInfo.motto = userData.custom;
        botInfo.webID = userData.webID;
        botInfo.roomIndex = userData.roomIndex;
        botInfo.ownerId = userData.ownerId;
        botInfo.ownerName = userData.ownerName;
        botInfo.botSkills = userData.botSkills;

        const roomObject = GetRoomEngine().getRoomObject(roomSession.roomId, userData.roomIndex, category);

        if (roomObject) botInfo.carryItem = roomObject.model.getValue<number>(RoomObjectVariable.FIGURE_CARRY_OBJECT) || 0;

        botInfo.amIOwner = roomSession.isRoomOwner;
        botInfo.roomControllerLevel = roomSession.controllerLevel;
        botInfo.amIAnyRoomController = IsAnyRoomController();
        botInfo.badges = [AvatarInfoUser.DEFAULT_BOT_BADGE_ID];
        botInfo.figure = userData.figure;

        return botInfo;
    }

    public static getPetInfo(petData: IRoomPetData): AvatarInfoPet {
        const roomSession = GetRoomSession();
        const userData = roomSession.userDataManager.getPetData(petData.id);

        if (!userData) return;

        const figure = new PetFigureData(userData.figure);

        let posture: string = null;

        if (figure.typeId === PetType.MONSTERPLANT) {
            if (petData.level >= petData.adultLevel) posture = 'std';
            else posture = 'grw' + petData.level;
        }

        const isOwner = petData.ownerId === GetSessionDataManager().userId;
        const petInfo = new AvatarInfoPet(AvatarInfoPet.PET_INFO);

        petInfo.name = userData.name;
        petInfo.id = petData.id;
        petInfo.ownerId = petData.ownerId;
        petInfo.ownerName = petData.ownerName;
        petInfo.rarityLevel = petData.rarityLevel;
        petInfo.petType = figure.typeId;
        petInfo.petBreed = figure.paletteId;
        petInfo.petFigure = userData.figure;
        petInfo.posture = posture;
        petInfo.isOwner = isOwner;
        petInfo.roomIndex = userData.roomIndex;
        petInfo.level = petData.level;
        petInfo.maximumLevel = petData.maximumLevel;
        petInfo.experience = petData.experience;
        petInfo.levelExperienceGoal = petData.levelExperienceGoal;
        petInfo.energy = petData.energy;
        petInfo.maximumEnergy = petData.maximumEnergy;
        petInfo.happyness = petData.happyness;
        petInfo.maximumHappyness = petData.maximumHappyness;
        petInfo.respect = petData.respect;
        petInfo.respectsPetLeft = GetSessionDataManager().respectsPetLeft;
        petInfo.age = petData.age;
        petInfo.saddle = petData.saddle;
        petInfo.rider = petData.rider;
        petInfo.breedable = petData.breedable;
        petInfo.fullyGrown = petData.fullyGrown;
        petInfo.dead = petData.dead;
        petInfo.rarityLevel = petData.rarityLevel;
        petInfo.skillTresholds = petData.skillTresholds;
        petInfo.canRemovePet = false;
        petInfo.publiclyRideable = petData.publiclyRideable;
        petInfo.maximumTimeToLive = petData.maximumTimeToLive;
        petInfo.remainingTimeToLive = petData.remainingTimeToLive;
        petInfo.remainingGrowTime = petData.remainingGrowTime;
        petInfo.publiclyBreedable = petData.publiclyBreedable;

        if (isOwner || roomSession.isRoomOwner || IsAnyRoomController() || roomSession.controllerLevel >= RoomControllerLevel.GUEST)
            petInfo.canRemovePet = true;

        return petInfo;
    }

    private static checkGuildSetting(userInfo: AvatarInfoUser): boolean {
        if (userInfo.isGuildRoom) return userInfo.roomControllerLevel >= RoomControllerLevel.GUILD_ADMIN;

        return userInfo.roomControllerLevel >= RoomControllerLevel.GUEST;
    }

    private static isValidSetting(userInfo: AvatarInfoUser, checkSetting: (userInfo: AvatarInfoUser, moderation: IRoomModerationSettings) => boolean): boolean {
        const roomSession = GetRoomSession();

        if (!roomSession.isPrivateRoom) return false;

        const moderation = roomSession.moderationSettings;

        let flag = false;

        if (moderation) flag = checkSetting(userInfo, moderation);

        return flag && userInfo.targetRoomControllerLevel < RoomControllerLevel.ROOM_OWNER;
    }

    private static canBeMuted(userInfo: AvatarInfoUser): boolean {
        const checkSetting = (userInfo: AvatarInfoUser, moderation: IRoomModerationSettings) => {
            switch (moderation.allowMute) {
                case RoomModerationSettings.MODERATION_LEVEL_USER_WITH_RIGHTS:
                    return this.checkGuildSetting(userInfo);
                default:
                    return userInfo.roomControllerLevel >= RoomControllerLevel.ROOM_OWNER;
            }
        };

        return this.isValidSetting(userInfo, checkSetting);
    }

    private static canBeKicked(userInfo: AvatarInfoUser): boolean {
        const checkSetting = (userInfo: AvatarInfoUser, moderation: IRoomModerationSettings) => {
            switch (moderation.allowKick) {
                case RoomModerationSettings.MODERATION_LEVEL_ALL:
                    return true;
                case RoomModerationSettings.MODERATION_LEVEL_USER_WITH_RIGHTS:
                    return this.checkGuildSetting(userInfo);
                default:
                    return userInfo.roomControllerLevel >= RoomControllerLevel.ROOM_OWNER;
            }
        };

        return this.isValidSetting(userInfo, checkSetting);
    }

    private static canBeBanned(userInfo: AvatarInfoUser): boolean {
        const checkSetting = (userInfo: AvatarInfoUser, moderation: IRoomModerationSettings) => {
            switch (moderation.allowBan) {
                case RoomModerationSettings.MODERATION_LEVEL_USER_WITH_RIGHTS:
                    return this.checkGuildSetting(userInfo);
                default:
                    return userInfo.roomControllerLevel >= RoomControllerLevel.ROOM_OWNER;
            }
        };

        return this.isValidSetting(userInfo, checkSetting);
    }
}
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