InventoryUtilities.ts 4.4 Ko
Télécharger le fichier
import {
CreateLinkEvent,
FurniturePlacePaintComposer,
GetRoomEngine,
GetRoomSessionManager,
PetType,
RoomObjectCategory,
RoomObjectPlacementSource,
RoomObjectType
} from '@octane/renderer';
import { IsPlayTestRestricted, SendMessageComposer } from '../octane';
import { FurniCategory } from './FurniCategory';
import { GroupItem } from './GroupItem';
import { IBotItem } from './IBotItem';
import { IPetItem } from './IPetItem';
let objectMoverRequested = false;
let itemIdInPlacing = -1;
export const isObjectMoverRequested = () => objectMoverRequested;
export const setObjectMoverRequested = (flag: boolean) => (objectMoverRequested = flag);
export const getPlacingItemId = () => itemIdInPlacing;
export const setPlacingItemId = (id: number) => (itemIdInPlacing = id);
export const cancelRoomObjectPlacement = () => {
if (getPlacingItemId() === -1) return;
GetRoomEngine().cancelRoomObjectPlacement();
setPlacingItemId(-1);
setObjectMoverRequested(false);
};
export const attemptPetPlacement = (petItem: IPetItem, flag: boolean = false) => {
const petData = petItem.petData;
if (!petData) return false;
const session = GetRoomSessionManager().getSession(1);
if (!session || IsPlayTestRestricted(session)) return false;
if (!session.isRoomOwner && !session.allowPets) return false;
CreateLinkEvent('inventory/hide');
// A monster plant previews at its own growth stage instead of fully grown.
const posture = petData.typeId === PetType.MONSTERPLANT ? (petData.level >= 7 ? 'std' : `grw${petData.level}`) : null;
if (
GetRoomEngine().processRoomObjectPlacement(
RoomObjectPlacementSource.INVENTORY,
-petData.id,
RoomObjectCategory.UNIT,
RoomObjectType.PET,
petData.figureData.figuredata,
null,
-1,
-1,
posture
)
) {
setPlacingItemId(petData.id);
setObjectMoverRequested(true);
}
return true;
};
export const attemptItemPlacement = (groupItem: GroupItem, flag: boolean = false) => {
if (!groupItem || !groupItem.getUnlockedCount()) return false;
// Playtest: nothing is placed from the inventory (the hotel's own rule beyond AIR), as the server refuses it.
if (IsPlayTestRestricted(GetRoomSessionManager().getSession(-1))) return false;
const item = groupItem.getLastItem();
if (!item) return false;
if (item.category === FurniCategory.FLOOR || item.category === FurniCategory.WALL_PAPER || item.category === FurniCategory.LANDSCAPE) {
if (flag) return false;
SendMessageComposer(new FurniturePlacePaintComposer(item.id));
return false;
} else {
CreateLinkEvent('inventory/hide');
let category = 0;
let isMoving = false;
if (item.isWallItem) category = RoomObjectCategory.WALL;
else category = RoomObjectCategory.FLOOR;
if (item.category === FurniCategory.POSTER) {
// or external image from furnidata
isMoving = GetRoomEngine().processRoomObjectPlacement(
RoomObjectPlacementSource.INVENTORY,
item.id,
category,
item.type,
item.stuffData.getLegacyString()
);
} else {
isMoving = GetRoomEngine().processRoomObjectPlacement(
RoomObjectPlacementSource.INVENTORY,
item.id,
category,
item.type,
item.extra.toString(),
item.stuffData
);
}
if (isMoving) {
setPlacingItemId(item.ref);
setObjectMoverRequested(true);
}
}
return true;
};
export const attemptBotPlacement = (botItem: IBotItem, flag: boolean = false) => {
const botData = botItem.botData;
if (!botData) return false;
const session = GetRoomSessionManager().getSession(1);
if (!session || !session.isRoomOwner || IsPlayTestRestricted(session)) return false;
CreateLinkEvent('inventory/hide');
if (
GetRoomEngine().processRoomObjectPlacement(
RoomObjectPlacementSource.INVENTORY,
-botData.id,
RoomObjectCategory.UNIT,
RoomObjectType.RENTABLE_BOT,
botData.figure
)
) {
setPlacingItemId(botData.id);
setObjectMoverRequested(true);
}
return true;
};
