diff --git a/src/nitro/communication/NitroMessages.ts b/src/nitro/communication/NitroMessages.ts index dbcacc86..cc8eef45 100644 --- a/src/nitro/communication/NitroMessages.ts +++ b/src/nitro/communication/NitroMessages.ts @@ -1,5 +1,5 @@ import { IMessageConfiguration } from '../../core/communication/messages/IMessageConfiguration'; -import { ApproveNameMessageComposer, CatalogApproveNameResultEvent, RoomUnitGiveHandItemPetComposer, RoomWidgetCameraPublishedEvent, RoomWidgetCameraPurchaseComposer, SellablePetPalettesEvent } from './messages'; +import { ApproveNameMessageComposer, CatalogApproveNameResultEvent, FurnitureGuildInfoComposer, PetMountComposer, PetSupplementComposer, RoomUnitGiveHandItemPetComposer, RoomWidgetCameraPublishedEvent, RoomWidgetCameraPurchaseComposer, SellablePetPalettesEvent } from './messages'; import { AvailabilityStatusMessageEvent } from './messages/incoming/availability/AvailabilityStatusMessageEvent'; import { CatalogClubEvent } from './messages/incoming/catalog/CatalogClubEvent'; import { CatalogClubGiftsEvent } from './messages/incoming/catalog/CatalogClubGiftsEvent'; @@ -856,7 +856,9 @@ export class NitroMessages implements IMessageConfiguration this._composers.set(OutgoingHeader.ACHIEVEMENT_LIST, RequestAchievementsMessageComposer); // PET + this._composers.set(OutgoingHeader.PET_MOUNT, PetMountComposer); this._composers.set(OutgoingHeader.PET_RESPECT, PetRespectComposer); + this._composers.set(OutgoingHeader.PET_SUPPLEMENT, PetSupplementComposer); this._composers.set(OutgoingHeader.PET_INFO, RequestPetInfoComposer); // ROOM @@ -902,6 +904,7 @@ export class NitroMessages implements IMessageConfiguration // FURNITURE this._composers.set(OutgoingHeader.FURNITURE_ALIASES, FurnitureAliasesComposer); + this._composers.set(OutgoingHeader.FURNITURE_GUILD_INFO, FurnitureGuildInfoComposer); this._composers.set(OutgoingHeader.FURNITURE_PICKUP, FurniturePickupComposer); this._composers.set(OutgoingHeader.FURNITURE_PLACE, FurniturePlaceComposer); this._composers.set(OutgoingHeader.ITEM_PAINT, FurniturePlacePaintComposer); diff --git a/src/nitro/communication/messages/outgoing/OutgoingHeader.ts b/src/nitro/communication/messages/outgoing/OutgoingHeader.ts index c50e95b4..b8e02e65 100644 --- a/src/nitro/communication/messages/outgoing/OutgoingHeader.ts +++ b/src/nitro/communication/messages/outgoing/OutgoingHeader.ts @@ -236,4 +236,8 @@ export class OutgoingHeader public static CATALOG_REQUESET_PET_BREEDS = 1756; public static APPROVE_NAME = 2109; public static UNIT_GIVE_HANDITEM_PET = 2768; + public static PET_MOUNT = 1036; + public static PET_SUPPLEMENT = 749; + public static FURNITURE_GUILD_INFO = 2651; + public static ACHIEVEMENT_RESOLUTION_OPEN = 359; } diff --git a/src/nitro/communication/messages/outgoing/pet/PetMountComposer.ts b/src/nitro/communication/messages/outgoing/pet/PetMountComposer.ts new file mode 100644 index 00000000..65d0e3e3 --- /dev/null +++ b/src/nitro/communication/messages/outgoing/pet/PetMountComposer.ts @@ -0,0 +1,21 @@ +import { IMessageComposer } from '../../../../../core/communication/messages/IMessageComposer'; + +export class PetMountComposer implements IMessageComposer> +{ + private _data: ConstructorParameters; + + constructor(petId: number, flag: boolean) + { + this._data = [ petId, flag]; + } + + public getMessageArray() + { + return this._data; + } + + public dispose(): void + { + return; + } +} diff --git a/src/nitro/communication/messages/outgoing/pet/PetSupplementComposer.ts b/src/nitro/communication/messages/outgoing/pet/PetSupplementComposer.ts new file mode 100644 index 00000000..62d426ba --- /dev/null +++ b/src/nitro/communication/messages/outgoing/pet/PetSupplementComposer.ts @@ -0,0 +1,21 @@ +import { IMessageComposer } from '../../../../../core/communication/messages/IMessageComposer'; + +export class PetSupplementComposer implements IMessageComposer> +{ + private _data: ConstructorParameters; + + constructor(petId: number, supplement: number) + { + this._data = [ petId, supplement ]; + } + + public getMessageArray() + { + return this._data; + } + + public dispose(): void + { + return; + } +} diff --git a/src/nitro/communication/messages/outgoing/pet/index.ts b/src/nitro/communication/messages/outgoing/pet/index.ts index 156eb381..aae5687f 100644 --- a/src/nitro/communication/messages/outgoing/pet/index.ts +++ b/src/nitro/communication/messages/outgoing/pet/index.ts @@ -1,2 +1,4 @@ +export * from './PetMountComposer'; export * from './PetRespectComposer'; +export * from './PetSupplementComposer'; export * from './RequestPetInfoComposer'; diff --git a/src/nitro/communication/messages/outgoing/room/furniture/FurnitureGuildInfoComposer.ts b/src/nitro/communication/messages/outgoing/room/furniture/FurnitureGuildInfoComposer.ts new file mode 100644 index 00000000..c14028ef --- /dev/null +++ b/src/nitro/communication/messages/outgoing/room/furniture/FurnitureGuildInfoComposer.ts @@ -0,0 +1,21 @@ +import { IMessageComposer } from '../../../../../../core/communication/messages/IMessageComposer'; + +export class FurnitureGuildInfoComposer implements IMessageComposer> +{ + private _data: ConstructorParameters; + + constructor(objectId: number, guildId: number) + { + this._data = [ objectId, guildId ]; + } + + public getMessageArray() + { + return this._data; + } + + public dispose(): void + { + return; + } +} diff --git a/src/nitro/communication/messages/outgoing/room/furniture/index.ts b/src/nitro/communication/messages/outgoing/room/furniture/index.ts index de495f39..db3a223a 100644 --- a/src/nitro/communication/messages/outgoing/room/furniture/index.ts +++ b/src/nitro/communication/messages/outgoing/room/furniture/index.ts @@ -2,6 +2,7 @@ export * from './ads'; export * from './dimmer'; export * from './floor'; export * from './FurnitureAliasesComposer'; +export * from './FurnitureGuildInfoComposer'; export * from './FurniturePickupComposer'; export * from './FurniturePlaceComposer'; export * from './FurniturePlacePaintComposer'; diff --git a/src/nitro/room/RoomObjectEventHandler.ts b/src/nitro/room/RoomObjectEventHandler.ts index 0ebf04b2..469ae481 100644 --- a/src/nitro/room/RoomObjectEventHandler.ts +++ b/src/nitro/room/RoomObjectEventHandler.ts @@ -11,6 +11,7 @@ import { IRoomGeometry } from '../../room/utils/IRoomGeometry'; import { IVector3D } from '../../room/utils/IVector3D'; import { RoomEnterEffect } from '../../room/utils/RoomEnterEffect'; import { Vector3d } from '../../room/utils/Vector3d'; +import { FurnitureGuildInfoComposer } from '../communication'; import { BotPlaceComposer } from '../communication/messages/outgoing/room/engine/BotPlaceComposer'; import { GetItemDataComposer } from '../communication/messages/outgoing/room/engine/GetItemDataComposer'; import { ModifyWallItemDataComposer } from '../communication/messages/outgoing/room/engine/ModifyWallItemDataComposer'; @@ -34,6 +35,7 @@ import { RoomUnitWalkComposer } from '../communication/messages/outgoing/room/un import { Nitro } from '../Nitro'; import { MouseEventType } from '../ui/MouseEventType'; import { RoomObjectPlacementSource } from './enums/RoomObjectPlacementSource'; +import { RoomEngineUseProductEvent } from './events'; import { RoomEngineDimmerStateEvent } from './events/RoomEngineDimmerStateEvent'; import { RoomEngineObjectEvent } from './events/RoomEngineObjectEvent'; import { RoomEngineObjectPlacedEvent } from './events/RoomEngineObjectPlacedEvent'; @@ -743,17 +745,90 @@ export class RoomObjectEventHandler extends Disposable implements IRoomCanvasMou case RoomObjectWidgetRequestEvent.CLOSE_WIDGET: eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.CLOSE_WIDGET, roomId, objectId, objectCategory, ((event.object as IRoomObjectController).logic.widget))); return; - case RoomObjectWidgetRequestEvent.TROPHY: - eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_TROPHY, roomId, objectId, objectCategory)); + case RoomObjectWidgetRequestEvent.OPEN_FURNI_CONTEXT_MENU: + eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.OPEN_FURNI_CONTEXT_MENU, roomId, objectId, objectCategory, ((event.object as IRoomObjectController).logic.contextMenu))); + return; + case RoomObjectWidgetRequestEvent.CLOSE_FURNI_CONTEXT_MENU: + eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.OPEN_FURNI_CONTEXT_MENU, roomId, objectId, objectCategory)); + return; + case RoomObjectWidgetRequestEvent.PLACEHOLDER: + eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_PLACEHOLDER, roomId, objectId, objectCategory)); return; case RoomObjectWidgetRequestEvent.CREDITFURNI: eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_CREDITFURNI, roomId, objectId, objectCategory)); return; - case RoomObjectWidgetRequestEvent.INERNAL_LINK: - eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_INTERNAL_LINK, roomId, objectId, objectCategory)); + case RoomObjectWidgetRequestEvent.STICKIE: + eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_STICKIE, roomId, objectId, objectCategory)); return; - case RoomObjectWidgetRequestEvent.ROOM_LINK: - eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_ROOM_LINK, roomId, objectId, objectCategory)); + case RoomObjectWidgetRequestEvent.PRESENT: + eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_PRESENT, roomId, objectId, objectCategory)); + return; + case RoomObjectWidgetRequestEvent.TROPHY: + eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_TROPHY, roomId, objectId, objectCategory)); + return; + case RoomObjectWidgetRequestEvent.TEASER: + eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_TEASER, roomId, objectId, objectCategory)); + return; + case RoomObjectWidgetRequestEvent.ECOTRONBOX: + eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_ECOTRONBOX, roomId, objectId, objectCategory)); + return; + case RoomObjectWidgetRequestEvent.DIMMER: + eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_DIMMER, roomId, objectId, objectCategory)); + return; + case RoomObjectWidgetRequestEvent.WIDGET_REMOVE_DIMMER: + eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_DIMMER, roomId, objectId, objectCategory)); + return; + case RoomObjectWidgetRequestEvent.CLOTHING_CHANGE: + eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_CLOTHING_CHANGE, roomId, objectId, objectCategory)); + return; + case RoomObjectWidgetRequestEvent.JUKEBOX_PLAYLIST_EDITOR: + eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_PLAYLIST_EDITOR, roomId, objectId, objectCategory)); + return; + case RoomObjectWidgetRequestEvent.MANNEQUIN: + eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_MANNEQUIN, roomId, objectId, objectCategory)); + return; + case RoomObjectWidgetRequestEvent.PET_PRODUCT_MENU: + eventDispatcher.dispatchEvent(new RoomEngineUseProductEvent(RoomEngineUseProductEvent.USE_PRODUCT_FROM_ROOM, roomId, objectId, objectCategory)); + return; + case RoomObjectWidgetRequestEvent.GUILD_FURNI_CONTEXT_MENU: + this._roomEngine.connection.send(new FurnitureGuildInfoComposer(event.objectId, event.object.model.getValue(RoomObjectVariable.FURNITURE_GUILD_CUSTOMIZED_GUILD_ID))); + return; + case RoomObjectWidgetRequestEvent.MONSTERPLANT_SEED_PLANT_CONFIRMATION_DIALOG: + eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_MONSTERPLANT_SEED_PLANT_CONFIRMATION_DIALOG, roomId, objectId, objectCategory)); + return; + case RoomObjectWidgetRequestEvent.PURCHASABLE_CLOTHING_CONFIRMATION_DIALOG: + eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_PURCHASABLE_CLOTHING_CONFIRMATION_DIALOG, roomId, objectId, objectCategory)); + return; + case RoomObjectWidgetRequestEvent.BACKGROUND_COLOR: + eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_BACKGROUND_COLOR, roomId, objectId, objectCategory)); + return; + case RoomObjectWidgetRequestEvent.MYSTERYBOX_OPEN_DIALOG: + eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_MYSTERYBOX_OPEN_DIALOG, roomId, objectId, objectCategory)); + return; + case RoomObjectWidgetRequestEvent.EFFECTBOX_OPEN_DIALOG: + eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_EFFECTBOX_OPEN_DIALOG, roomId, objectId, objectCategory)); + return; + case RoomObjectWidgetRequestEvent.MYSTERYTROPHY_OPEN_DIALOG: + eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_MYSTERYTROPHY_OPEN_DIALOG, roomId, objectId, objectCategory)); + return; + case RoomObjectWidgetRequestEvent.ACHIEVEMENT_RESOLUTION_OPEN: + //this._roomEngine.connection.send(); + // new _Str_4406(k._Str_1577, 0) + return; + case RoomObjectWidgetRequestEvent.ACHIEVEMENT_RESOLUTION_ENGRAVING: + eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_ACHIEVEMENT_RESOLUTION_ENGRAVING, roomId, objectId, objectCategory)); + return; + case RoomObjectWidgetRequestEvent.ACHIEVEMENT_RESOLUTION_FAILED: + eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_ACHIEVEMENT_RESOLUTION_FAILED, roomId, objectId, objectCategory)); + return; + case RoomObjectWidgetRequestEvent.FRIEND_FURNITURE_CONFIRM: + eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_FRIEND_FURNITURE_CONFIRM, roomId, objectId, objectCategory)); + return; + case RoomObjectWidgetRequestEvent.FRIEND_FURNITURE_ENGRAVING: + eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_FRIEND_FURNITURE_ENGRAVING, roomId, objectId, objectCategory)); + return; + case RoomObjectWidgetRequestEvent.BADGE_DISPLAY_ENGRAVING: + eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_BADGE_DISPLAY_ENGRAVING, roomId, objectId, objectCategory)); return; case RoomObjectWidgetRequestEvent.HIGH_SCORE_DISPLAY: eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_HIGH_SCORE_DISPLAY, roomId, objectId, objectCategory)); @@ -761,42 +836,12 @@ export class RoomObjectEventHandler extends Disposable implements IRoomCanvasMou case RoomObjectWidgetRequestEvent.HIDE_HIGH_SCORE_DISPLAY: eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_HIDE_HIGH_SCORE_DISPLAY, roomId, objectId, objectCategory)); return; - case RoomObjectWidgetRequestEvent.STICKIE: - eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_STICKIE, roomId, objectId, objectCategory)); + case RoomObjectWidgetRequestEvent.INERNAL_LINK: + eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_INTERNAL_LINK, roomId, objectId, objectCategory)); return; - case RoomObjectWidgetRequestEvent.DIMMER: - eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_DIMMER, roomId, objectId, objectCategory)); + case RoomObjectWidgetRequestEvent.ROOM_LINK: + eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_ROOM_LINK, roomId, objectId, objectCategory)); return; - case RoomObjectWidgetRequestEvent.PURCHASABLE_CLOTHING_CONFIRMATION_DIALOG: - eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_PURCHASABLE_CLOTHING_CONFIRMATION_DIALOG, roomId, objectId, objectCategory)); - break; - case RoomObjectWidgetRequestEvent.MYSTERYBOX_OPEN_DIALOG: - eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_MYSTERYBOX_OPEN_DIALOG, roomId, objectId, objectCategory)); - break; - case RoomObjectWidgetRequestEvent.MYSTERYTROPHY_OPEN_DIALOG: - eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_MYSTERYTROPHY_OPEN_DIALOG, roomId, objectId, objectCategory)); - break; - case RoomObjectWidgetRequestEvent.EFFECTBOX_OPEN_DIALOG: - eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_EFFECTBOX_OPEN_DIALOG, roomId, objectId, objectCategory)); - break; - case RoomObjectWidgetRequestEvent.MONSTERPLANT_SEED_PLANT_CONFIRMATION_DIALOG: - eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_MONSTERPLANT_SEED_PLANT_CONFIRMATION_DIALOG, roomId, objectId, objectCategory)); - break; - case RoomObjectWidgetRequestEvent.MANNEQUIN: - eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_MANNEQUIN, roomId, objectId, objectCategory)); - break; - - case RoomObjectWidgetRequestEvent.BACKGROUND_COLOR: - eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_BACKGROUND_COLOR, roomId, objectId, objectCategory)); - break; - case RoomObjectWidgetRequestEvent.FRIEND_FURNITURE_ENGRAVING: - eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_FRIEND_FURNITURE_ENGRAVING, roomId, objectId, objectCategory)); - break; - case RoomObjectWidgetRequestEvent.PRESENT: - eventDispatcher.dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_PRESENT, roomId, objectId, objectCategory)); - break; - - } } diff --git a/src/nitro/room/RoomObjectLogicFactory.ts b/src/nitro/room/RoomObjectLogicFactory.ts index 6d428e19..a283179f 100644 --- a/src/nitro/room/RoomObjectLogicFactory.ts +++ b/src/nitro/room/RoomObjectLogicFactory.ts @@ -4,11 +4,13 @@ import { IEventDispatcher } from '../../core/events/IEventDispatcher'; import { IRoomObjectEventHandler } from '../../room/object/logic/IRoomObjectEventHandler'; import { IRoomObjectLogicFactory } from '../../room/object/logic/IRoomObjectLogicFactory'; import { RoomObjectLogicBase } from '../../room/object/logic/RoomObjectLogicBase'; +import { FurnitureEffectBoxLogic, FurnitureLoveLockLogic, FurnitureMonsterplantSeedLogic, FurnitureMysteryTrophyLogic, FurnitureRandomTeleportLogic, FurnitureRentableSpaceLogic } from './object'; import { AvatarLogic } from './object/logic/avatar/AvatarLogic'; import { FurnitureBadgeDisplayLogic } from './object/logic/furniture/FurnitureBadgeDisplayLogic'; import { FurnitureChangeStateWhenStepOnLogic } from './object/logic/furniture/FurnitureChangeStateWhenStepOnLogic'; import { FurnitureCounterClockLogic } from './object/logic/furniture/FurnitureCounterClockLogic'; import { FurnitureCrackableLogic } from './object/logic/furniture/FurnitureCrackableLogic'; +import { FurnitureCraftingGizmoLogic } from './object/logic/furniture/FurnitureCraftingGizmoLogic'; import { FurnitureCreditLogic } from './object/logic/furniture/FurnitureCreditLogic'; import { FurnitureCustomStackHeightLogic } from './object/logic/furniture/FurnitureCustomStackHeightLogic'; import { FurnitureDiceLogic } from './object/logic/furniture/FurnitureDiceLogic'; @@ -17,7 +19,6 @@ import { FurnitureEditableRoomLinkLogic } from './object/logic/furniture/Furnitu import { FurnitureExternalImageLogic } from './object/logic/furniture/FurnitureExternalImageLogic'; import { FurnitureFireworksLogic } from './object/logic/furniture/FurnitureFireworksLogic'; import { FurnitureFloorHoleLogic } from './object/logic/furniture/FurnitureFloorHoleLogic'; -import { FurnitureFriendLogic } from './object/logic/furniture/FurnitureFriendLogic'; import { FurnitureGuildCustomizedLogic } from './object/logic/furniture/FurnitureGuildCustomizedLogic'; import { FurnitureHighScoreLogic } from './object/logic/furniture/FurnitureHighScoreLogic'; import { FurnitureHockeyScoreLogic } from './object/logic/furniture/FurnitureHockeyScoreLogic'; @@ -277,11 +278,29 @@ export class RoomObjectLogicFactory implements IRoomObjectLogicFactory logic = FurnitureWindowLogic; break; case RoomObjectLogicType.FURNITURE_LOVELOCK: - logic = FurnitureFriendLogic; + logic = FurnitureLoveLockLogic; break; case RoomObjectLogicType.FURNITURE_YOUTUBE: logic = FurnitureYoutubeLogic; break; + case RoomObjectLogicType.FURNITURE_CRAFTING_GIZMO: + logic = FurnitureCraftingGizmoLogic; + break; + case RoomObjectLogicType.FURNITURE_RENTABLE_SPACE: + logic = FurnitureRentableSpaceLogic; + break; + case RoomObjectLogicType.FURNITURE_EFFECTBOX: + logic = FurnitureEffectBoxLogic; + break; + case RoomObjectLogicType.FURNITURE_MONSTERPLANT_SEED: + logic = FurnitureMonsterplantSeedLogic; + break; + case RoomObjectLogicType.FURNITURE_MYSTERYTROPHY: + logic = FurnitureMysteryTrophyLogic; + break; + case RoomObjectLogicType.FURNITURE_RANDOM_TELEPORT: + logic = FurnitureRandomTeleportLogic; + break; default: logic = FurnitureLogic; break; diff --git a/src/nitro/room/events/RoomEngineSamplePlaybackEvent.ts b/src/nitro/room/events/RoomEngineSamplePlaybackEvent.ts index 5c017f51..e0ad285e 100644 --- a/src/nitro/room/events/RoomEngineSamplePlaybackEvent.ts +++ b/src/nitro/room/events/RoomEngineSamplePlaybackEvent.ts @@ -1,6 +1,6 @@ import { RoomEngineObjectEvent } from './RoomEngineObjectEvent'; -export class RoomEngineSamplePlaybackEvent extends RoomEngineObjectEvent +export class RoomEngineSamplePlaybackEvent extends RoomEngineObjectEvent { public static ROOM_OBJECT_INITIALIZED: string = 'ROPSPE_ROOM_OBJECT_INITIALIZED'; public static ROOM_OBJECT_DISPOSED: string = 'ROPSPE_ROOM_OBJECT_DISPOSED'; diff --git a/src/nitro/room/events/RoomEngineTriggerWidgetEvent.ts b/src/nitro/room/events/RoomEngineTriggerWidgetEvent.ts index 3c84908d..398a71ab 100644 --- a/src/nitro/room/events/RoomEngineTriggerWidgetEvent.ts +++ b/src/nitro/room/events/RoomEngineTriggerWidgetEvent.ts @@ -47,4 +47,9 @@ export class RoomEngineTriggerWidgetEvent extends RoomEngineObjectEvent { return this._widget; } -} \ No newline at end of file + + public get contextMenu(): string + { + return this._widget; + } +} diff --git a/src/nitro/room/events/RoomEngineUseProductEvent.ts b/src/nitro/room/events/RoomEngineUseProductEvent.ts new file mode 100644 index 00000000..c8e78aa6 --- /dev/null +++ b/src/nitro/room/events/RoomEngineUseProductEvent.ts @@ -0,0 +1,28 @@ +import { RoomEngineObjectEvent } from './RoomEngineObjectEvent'; + +export class RoomEngineUseProductEvent extends RoomEngineObjectEvent +{ + public static USE_PRODUCT_FROM_ROOM: string = 'REUPE_USE_PRODUCT_FROM_ROOM'; + public static USE_PRODUCT_FROM_INVENTORY: string = 'REUPE_USE_PRODUCT_FROM_INVENTORY'; + + private _inventoryStripId: number; + private _furnitureTypeId: number; + + constructor(type: string, roomId: number, objectId: number, category: number, inventoryStripId = -1, furnitureTypeId = -1) + { + super(type, roomId, objectId, category); + + this._inventoryStripId = inventoryStripId; + this._furnitureTypeId = furnitureTypeId; + } + + public get inventoryStripId(): number + { + return this._inventoryStripId; + } + + public get furnitureTypeId(): number + { + return this._furnitureTypeId; + } +} diff --git a/src/nitro/room/events/RoomObjectWidgetRequestEvent.ts b/src/nitro/room/events/RoomObjectWidgetRequestEvent.ts index 3b77259f..fcae8888 100644 --- a/src/nitro/room/events/RoomObjectWidgetRequestEvent.ts +++ b/src/nitro/room/events/RoomObjectWidgetRequestEvent.ts @@ -38,8 +38,8 @@ export class RoomObjectWidgetRequestEvent extends RoomObjectEvent public static INERNAL_LINK: string = 'ROWRE_INTERNAL_LINK'; public static ROOM_LINK: string = 'ROWRE_ROOM_LINK'; - constructor(k: string, _arg_2: IRoomObject) + constructor(type: string, roomObject: IRoomObject) { - super(k, _arg_2); + super(type, roomObject); } -} \ No newline at end of file +} diff --git a/src/nitro/room/events/index.ts b/src/nitro/room/events/index.ts index d69e26a3..54ea2f56 100644 --- a/src/nitro/room/events/index.ts +++ b/src/nitro/room/events/index.ts @@ -7,6 +7,7 @@ export * from './RoomEngineObjectPlacedEvent'; export * from './RoomEngineObjectPlacedOnUserEvent'; export * from './RoomEngineSamplePlaybackEvent'; export * from './RoomEngineTriggerWidgetEvent'; +export * from './RoomEngineUseProductEvent'; export * from './RoomObjectBadgeAssetEvent'; export * from './RoomObjectDataRequestEvent'; export * from './RoomObjectDimmerStateUpdateEvent'; diff --git a/src/nitro/room/object/logic/furniture/FurnitureCraftingGizmoLogic.ts b/src/nitro/room/object/logic/furniture/FurnitureCraftingGizmoLogic.ts new file mode 100644 index 00000000..e3d4147b --- /dev/null +++ b/src/nitro/room/object/logic/furniture/FurnitureCraftingGizmoLogic.ts @@ -0,0 +1,10 @@ +import { RoomWidgetEnum } from '../../../../ui'; +import { FurnitureLogic } from './FurnitureLogic'; + +export class FurnitureCraftingGizmoLogic extends FurnitureLogic +{ + public get widget(): string + { + return RoomWidgetEnum.CRAFTING; + } +} diff --git a/src/nitro/room/object/logic/furniture/FurnitureEffectBoxLogic.ts b/src/nitro/room/object/logic/furniture/FurnitureEffectBoxLogic.ts new file mode 100644 index 00000000..e0a45fad --- /dev/null +++ b/src/nitro/room/object/logic/furniture/FurnitureEffectBoxLogic.ts @@ -0,0 +1,27 @@ +import { ContextMenuEnum } from '../../../../ui/widget/enums/ContextMenuEnum'; +import { RoomObjectWidgetRequestEvent } from '../../../events/RoomObjectWidgetRequestEvent'; +import { FurnitureLogic } from './FurnitureLogic'; + +export class FurnitureEffectBoxLogic extends FurnitureLogic +{ + private _timer: any; + + public getEventTypes(): string[] + { + const types = [ RoomObjectWidgetRequestEvent.EFFECTBOX_OPEN_DIALOG ]; + + return this.mergeTypes(super.getEventTypes(), types); + } + + public useObject(): void + { + if(!this.eventDispatcher || !this.object) return; + + this.eventDispatcher.dispatchEvent(new RoomObjectWidgetRequestEvent(RoomObjectWidgetRequestEvent.EFFECTBOX_OPEN_DIALOG, this.object)); + } + + public get contextMenu(): string + { + return ContextMenuEnum.EFFECT_BOX; + } +} diff --git a/src/nitro/room/object/logic/furniture/FurnitureFriendLogic.ts b/src/nitro/room/object/logic/furniture/FurnitureFriendFurniLogic.ts similarity index 75% rename from src/nitro/room/object/logic/furniture/FurnitureFriendLogic.ts rename to src/nitro/room/object/logic/furniture/FurnitureFriendFurniLogic.ts index 8d95ba93..e2f438ce 100644 --- a/src/nitro/room/object/logic/furniture/FurnitureFriendLogic.ts +++ b/src/nitro/room/object/logic/furniture/FurnitureFriendFurniLogic.ts @@ -1,12 +1,13 @@ import { IAssetData } from '../../../../../core/asset/interfaces'; import { RoomObjectUpdateMessage } from '../../../../../room/messages/RoomObjectUpdateMessage'; +import { ContextMenuEnum } from '../../../../ui'; import { RoomObjectWidgetRequestEvent } from '../../../events/RoomObjectWidgetRequestEvent'; import { ObjectDataUpdateMessage } from '../../../messages/ObjectDataUpdateMessage'; import { StringDataType } from '../../data/type/StringDataType'; import { RoomObjectVariable } from '../../RoomObjectVariable'; import { FurnitureMultiStateLogic } from './FurnitureMultiStateLogic'; -export class FurnitureFriendLogic extends FurnitureMultiStateLogic +export class FurnitureFriendFurniLogic extends FurnitureMultiStateLogic { private static readonly STATE_UNINITIALIZED: number = -1; private static readonly STATE_UNLOCKED: number = 0; @@ -14,11 +15,6 @@ export class FurnitureFriendLogic extends FurnitureMultiStateLogic private _state: number = -1; - public get engravingDialogType(): number - { - return 0; - } - public initialize(asset: IAssetData): void { super.initialize(asset); @@ -43,7 +39,6 @@ export class FurnitureFriendLogic extends FurnitureMultiStateLogic } super.processUpdateMessage(message); - } public getEventTypes(): string[] @@ -55,13 +50,25 @@ export class FurnitureFriendLogic extends FurnitureMultiStateLogic public useObject(): void { - if(this._state == FurnitureFriendLogic.STATE_LOCKED) + if(!this.eventDispatcher || !this.object) return; + + if(this._state == FurnitureFriendFurniLogic.STATE_LOCKED) { - (this.object && this.eventDispatcher && this.eventDispatcher.dispatchEvent(new RoomObjectWidgetRequestEvent(RoomObjectWidgetRequestEvent.FRIEND_FURNITURE_ENGRAVING, this.object))); + this.eventDispatcher.dispatchEvent(new RoomObjectWidgetRequestEvent(RoomObjectWidgetRequestEvent.FRIEND_FURNITURE_ENGRAVING, this.object)); } else { super.useObject(); } } + + public get engravingDialogType(): number + { + return 0; + } + + public get contextMenu(): string + { + return ((this._state === FurnitureFriendFurniLogic.STATE_UNLOCKED) ? ContextMenuEnum.FRIEND_FURNITURE : ContextMenuEnum.DUMMY); + } } diff --git a/src/nitro/room/object/logic/furniture/FurnitureLoveLockLogic.ts b/src/nitro/room/object/logic/furniture/FurnitureLoveLockLogic.ts new file mode 100644 index 00000000..eedba580 --- /dev/null +++ b/src/nitro/room/object/logic/furniture/FurnitureLoveLockLogic.ts @@ -0,0 +1,10 @@ +import { FriendFurniEngravingWidgetType } from '../../../enums'; +import { FurnitureFriendFurniLogic } from './FurnitureFriendFurniLogic'; + +export class FurnitureLoveLockLogic extends FurnitureFriendFurniLogic +{ + public get engravingDialogType(): number + { + return FriendFurniEngravingWidgetType.LOVE_LOCK; + } +} diff --git a/src/nitro/room/object/logic/furniture/FurnitureMonsterplantSeedLogic.ts b/src/nitro/room/object/logic/furniture/FurnitureMonsterplantSeedLogic.ts new file mode 100644 index 00000000..bae36660 --- /dev/null +++ b/src/nitro/room/object/logic/furniture/FurnitureMonsterplantSeedLogic.ts @@ -0,0 +1,25 @@ +import { ContextMenuEnum } from '../../../../ui'; +import { RoomObjectWidgetRequestEvent } from '../../../events/RoomObjectWidgetRequestEvent'; +import { FurnitureMultiStateLogic } from './FurnitureMultiStateLogic'; + +export class FurnitureMonsterplantSeedLogic extends FurnitureMultiStateLogic +{ + public getEventTypes(): string[] + { + const types = [ RoomObjectWidgetRequestEvent.MONSTERPLANT_SEED_PLANT_CONFIRMATION_DIALOG ]; + + return this.mergeTypes(super.getEventTypes(), types); + } + + public useObject(): void + { + if(!this.eventDispatcher || !this.object) return; + + this.eventDispatcher.dispatchEvent(new RoomObjectWidgetRequestEvent(RoomObjectWidgetRequestEvent.MONSTERPLANT_SEED_PLANT_CONFIRMATION_DIALOG, this.object)); + } + + public get contextMenu(): string + { + return ContextMenuEnum.MONSTERPLANT_SEED; + } +} diff --git a/src/nitro/room/object/logic/furniture/FurnitureMysteryTrophyLogic.ts b/src/nitro/room/object/logic/furniture/FurnitureMysteryTrophyLogic.ts new file mode 100644 index 00000000..0083a2e9 --- /dev/null +++ b/src/nitro/room/object/logic/furniture/FurnitureMysteryTrophyLogic.ts @@ -0,0 +1,25 @@ +import { ContextMenuEnum } from '../../../../ui'; +import { RoomObjectWidgetRequestEvent } from '../../../events/RoomObjectWidgetRequestEvent'; +import { FurnitureMultiStateLogic } from './FurnitureMultiStateLogic'; + +export class FurnitureMysteryTrophyLogic extends FurnitureMultiStateLogic +{ + public getEventTypes(): string[] + { + const types = [ RoomObjectWidgetRequestEvent.MYSTERYTROPHY_OPEN_DIALOG ]; + + return this.mergeTypes(super.getEventTypes(), types); + } + + public useObject(): void + { + if(!this.eventDispatcher || !this.object) return; + + this.eventDispatcher.dispatchEvent(new RoomObjectWidgetRequestEvent(RoomObjectWidgetRequestEvent.MYSTERYTROPHY_OPEN_DIALOG, this.object)); + } + + public get contextMenu(): string + { + return ContextMenuEnum.MYSTERY_TROPHY; + } +} diff --git a/src/nitro/room/object/logic/furniture/FurniturePurchaseableClothingLogic.ts b/src/nitro/room/object/logic/furniture/FurniturePurchaseableClothingLogic.ts index a835f7b0..41cf4cdb 100644 --- a/src/nitro/room/object/logic/furniture/FurniturePurchaseableClothingLogic.ts +++ b/src/nitro/room/object/logic/furniture/FurniturePurchaseableClothingLogic.ts @@ -1,3 +1,4 @@ +import { ContextMenuEnum } from '../../../../ui'; import { RoomObjectWidgetRequestEvent } from '../../../events/RoomObjectWidgetRequestEvent'; import { FurnitureMultiStateLogic } from './FurnitureMultiStateLogic'; @@ -15,6 +16,13 @@ export class FurniturePurchaseableClothingLogic extends FurnitureMultiStateLogic public useObject(): void { + if(!this.eventDispatcher || !this.object) return; + this.eventDispatcher.dispatchEvent(new RoomObjectWidgetRequestEvent(RoomObjectWidgetRequestEvent.PURCHASABLE_CLOTHING_CONFIRMATION_DIALOG, this.object)); } -} \ No newline at end of file + + public get contextMenu(): string + { + return ContextMenuEnum.PURCHASABLE_CLOTHING; + } +} diff --git a/src/nitro/room/object/logic/furniture/FurnitureRandomTeleportLogic.ts b/src/nitro/room/object/logic/furniture/FurnitureRandomTeleportLogic.ts new file mode 100644 index 00000000..169958de --- /dev/null +++ b/src/nitro/room/object/logic/furniture/FurnitureRandomTeleportLogic.ts @@ -0,0 +1,10 @@ +import { ContextMenuEnum } from '../../../../ui'; +import { FurnitureMultiStateLogic } from './FurnitureMultiStateLogic'; + +export class FurnitureRandomTeleportLogic extends FurnitureMultiStateLogic +{ + public get contextMenu(): string + { + return ContextMenuEnum.RANDOM_TELEPORT; + } +} diff --git a/src/nitro/room/object/logic/furniture/FurnitureRentableSpaceLogic.ts b/src/nitro/room/object/logic/furniture/FurnitureRentableSpaceLogic.ts new file mode 100644 index 00000000..17706197 --- /dev/null +++ b/src/nitro/room/object/logic/furniture/FurnitureRentableSpaceLogic.ts @@ -0,0 +1,48 @@ +import { AdvancedMap } from '../../../../../core'; +import { RoomWidgetEnum } from '../../../../ui'; +import { RoomObjectDataRequestEvent } from '../../../events'; +import { RoomObjectVariable } from '../../RoomObjectVariable'; +import { FurnitureLogic } from './FurnitureLogic'; + +export class FurnitureRentableSpaceLogic extends FurnitureLogic +{ + public getEventTypes(): string[] + { + const types = [ + RoomObjectDataRequestEvent.RODRE_CURRENT_USER_ID, + ]; + + return this.mergeTypes(super.getEventTypes(), types); + } + + public update(time: number): void + { + super.update(time); + + if(this.object && this.object.model) + { + if(!this.object.model.getValue(RoomObjectVariable.SESSION_CURRENT_USER_ID)) + { + this.eventDispatcher.dispatchEvent(new RoomObjectDataRequestEvent(RoomObjectDataRequestEvent.RODRE_CURRENT_USER_ID, this.object)); + } + + const renterId = this.object.model.getValue>(RoomObjectVariable.FURNITURE_DATA).getValue('renterId'); + const userId = this.object.model.getValue(RoomObjectVariable.SESSION_CURRENT_USER_ID); + + if(renterId) + { + if(parseInt(renterId) === userId) this.object.setState(2, 0); + else this.object.setState(1, 0); + } + else + { + this.object.setState(0, 0); + } + } + } + + public get widget(): string + { + return RoomWidgetEnum.RENTABLESPACE; + } +} diff --git a/src/nitro/room/object/logic/furniture/index.ts b/src/nitro/room/object/logic/furniture/index.ts index f6fc17be..16cc63b8 100644 --- a/src/nitro/room/object/logic/furniture/index.ts +++ b/src/nitro/room/object/logic/furniture/index.ts @@ -2,29 +2,36 @@ export * from './FurnitureBadgeDisplayLogic'; export * from './FurnitureChangeStateWhenStepOnLogic'; export * from './FurnitureCounterClockLogic'; export * from './FurnitureCrackableLogic'; +export * from './FurnitureCraftingGizmoLogic'; export * from './FurnitureCreditLogic'; export * from './FurnitureCustomStackHeightLogic'; export * from './FurnitureDiceLogic'; export * from './FurnitureEditableInternalLinkLogic'; export * from './FurnitureEditableRoomLinkLogic'; +export * from './FurnitureEffectBoxLogic'; export * from './FurnitureExternalImageLogic'; export * from './FurnitureFireworksLogic'; export * from './FurnitureFloorHoleLogic'; -export * from './FurnitureFriendLogic'; +export * from './FurnitureFriendFurniLogic'; export * from './FurnitureGuildCustomizedLogic'; export * from './FurnitureHabboWheelLogic'; export * from './FurnitureHighScoreLogic'; export * from './FurnitureHockeyScoreLogic'; export * from './FurnitureIceStormLogic'; export * from './FurnitureLogic'; +export * from './FurnitureLoveLockLogic'; export * from './FurnitureMannequinLogic'; +export * from './FurnitureMonsterplantSeedLogic'; export * from './FurnitureMultiHeightLogic'; export * from './FurnitureMultiStateLogic'; +export * from './FurnitureMysteryTrophyLogic'; export * from './FurnitureOneWayDoorLogic'; export * from './FurniturePetCustomizationLogic'; export * from './FurniturePresentLogic'; export * from './FurniturePurchaseableClothingLogic'; export * from './FurniturePushableLogic'; +export * from './FurnitureRandomTeleportLogic'; +export * from './FurnitureRentableSpaceLogic'; export * from './FurnitureRoomBackgroundColorLogic'; export * from './FurnitureRoomBackgroundLogic'; export * from './FurnitureRoomBillboardLogic'; diff --git a/src/nitro/session/IRoomSession.ts b/src/nitro/session/IRoomSession.ts index fa87c9a1..9a265e16 100644 --- a/src/nitro/session/IRoomSession.ts +++ b/src/nitro/session/IRoomSession.ts @@ -33,6 +33,8 @@ export interface IRoomSession extends IDisposable pickupPet(id: number): void; pickupBot(id: number): void; requestMoodlightSettings(): void; + mountPet(id: number): void; + dismountPet(id: number): void; connection: IConnection; userDataManager: UserDataManager; roomId: number; diff --git a/src/nitro/session/RoomSession.ts b/src/nitro/session/RoomSession.ts index ef87fe8c..7223fd58 100644 --- a/src/nitro/session/RoomSession.ts +++ b/src/nitro/session/RoomSession.ts @@ -1,5 +1,6 @@ import { Disposable } from '../../core/common/disposable/Disposable'; import { IConnection } from '../../core/communication/connections/IConnection'; +import { PetMountComposer } from '../communication'; import { RoomDoorbellAccessComposer } from '../communication/messages/outgoing/room/access/RoomDoorbellAccessComposer'; import { RoomEnterComposer } from '../communication/messages/outgoing/room/access/RoomEnterComposer'; import { RoomAmbassadorAlertComposer } from '../communication/messages/outgoing/room/action/RoomAmbassadorAlertComposer'; @@ -262,6 +263,16 @@ export class RoomSession extends Disposable implements IRoomSession this._connection.send(new OpenPresentComposer(objectId)); } + public mountPet(id: number): void + { + this._connection.send(new PetMountComposer(id, true)); + } + + public dismountPet(id: number): void + { + this._connection.send(new PetMountComposer(id, false)); + } + public get connection(): IConnection { return this._connection; diff --git a/src/nitro/ui/widget/enums/ContextMenuEnum.ts b/src/nitro/ui/widget/enums/ContextMenuEnum.ts new file mode 100644 index 00000000..94896ffa --- /dev/null +++ b/src/nitro/ui/widget/enums/ContextMenuEnum.ts @@ -0,0 +1,12 @@ +export class ContextMenuEnum +{ + public static DUMMY: string = 'DUMMY'; + public static FRIEND_FURNITURE: string = 'FRIEND_FURNITURE'; + public static MONSTERPLANT_SEED: string = 'MONSTERPLANT_SEED'; + public static MYSTERY_BOX: string = 'MYSTERY_BOX'; + public static EFFECT_BOX: string = 'EFFECT_BOX'; + public static MYSTERY_TROPHY: string = 'MYSTERY_TROPHY'; + public static RANDOM_TELEPORT: string = 'RANDOM_TELEPORT'; + public static PURCHASABLE_CLOTHING: string = 'PURCHASABLE_CLOTHING'; + public static GENERIC_USABLE: string = 'GENERIC_USABLE'; +} diff --git a/src/nitro/ui/widget/enums/index.ts b/src/nitro/ui/widget/enums/index.ts index c2fe8f5e..48f242d9 100644 --- a/src/nitro/ui/widget/enums/index.ts +++ b/src/nitro/ui/widget/enums/index.ts @@ -1,4 +1,5 @@ export * from './AvatarExpressionEnum'; +export * from './ContextMenuEnum'; export * from './FriendWidgetEngravingWidgetTypeEnum'; export * from './RoomWidgetEnum'; export * from './RoomWidgetEnumItemExtradataParameter';