diff --git a/packages/communication/src/messages/outgoing/room/unit/RoomUnitBackgroundComposer.ts b/packages/communication/src/messages/outgoing/room/unit/RoomUnitBackgroundComposer.ts new file mode 100644 index 0000000..c283909 --- /dev/null +++ b/packages/communication/src/messages/outgoing/room/unit/RoomUnitBackgroundComposer.ts @@ -0,0 +1,21 @@ +import { IMessageComposer } from '@nitrots/api'; + +export class RoomUnitBackgroundComposer implements IMessageComposer> +{ + private _data: ConstructorParameters; + + constructor(backgroundImage: number, backgroundStand: number, backgroundOverlay: number) + { + this._data = [ backgroundImage, backgroundStand, backgroundOverlay ]; + } + + public getMessageArray() + { + return this._data; + } + + public dispose(): void + { + return; + } +} \ No newline at end of file diff --git a/packages/communication/src/messages/outgoing/room/unit/index.ts b/packages/communication/src/messages/outgoing/room/unit/index.ts index 52a7296..955386c 100644 --- a/packages/communication/src/messages/outgoing/room/unit/index.ts +++ b/packages/communication/src/messages/outgoing/room/unit/index.ts @@ -1,5 +1,6 @@ export * from './chat'; export * from './RoomUnitActionComposer'; +export * from './RoomUnitBackgroundComposer'; export * from './RoomUnitDanceComposer'; export * from './RoomUnitDropHandItemComposer'; export * from './RoomUnitGiveHandItemComposer'; diff --git a/packages/communication/src/messages/parser/room/unit/RoomUnitInfoParser.ts b/packages/communication/src/messages/parser/room/unit/RoomUnitInfoParser.ts index 2fed182..ffb55fa 100644 --- a/packages/communication/src/messages/parser/room/unit/RoomUnitInfoParser.ts +++ b/packages/communication/src/messages/parser/room/unit/RoomUnitInfoParser.ts @@ -7,6 +7,9 @@ export class RoomUnitInfoParser implements IMessageParser private _gender: string; private _motto: string; private _achievementScore: number; + private _backgroundId: number; + private _standId: number; + private _overlayId: number; public flush(): boolean { @@ -15,6 +18,9 @@ export class RoomUnitInfoParser implements IMessageParser this._gender = 'M'; this._motto = null; this._achievementScore = 0; + this._backgroundId = 0; + this._standId = 0; + this._overlayId = 0; return true; } @@ -56,4 +62,19 @@ export class RoomUnitInfoParser implements IMessageParser { return this._achievementScore; } -} + + public get backgroundId(): number + { + return this._backgroundId; + } + + public get standId(): number + { + return this._standId; + } + + public get overlayId(): number + { + return this._overlayId; + } +} \ No newline at end of file diff --git a/packages/communication/src/messages/parser/room/unit/RoomUnitParser.ts b/packages/communication/src/messages/parser/room/unit/RoomUnitParser.ts index dbd5976..4736302 100644 --- a/packages/communication/src/messages/parser/room/unit/RoomUnitParser.ts +++ b/packages/communication/src/messages/parser/room/unit/RoomUnitParser.ts @@ -27,6 +27,9 @@ export class RoomUnitParser implements IMessageParser const id = wrapper.readInt(); const username = wrapper.readString(); const custom = wrapper.readString(); + const background = wrapper.readInt(); + const stand = wrapper.readInt(); + const overlay = wrapper.readInt(); let figure = wrapper.readString(); const roomIndex = wrapper.readInt(); const x = wrapper.readInt(); @@ -40,6 +43,9 @@ export class RoomUnitParser implements IMessageParser user.dir = direction; user.name = username; user.custom = custom; + user.background = background; + user.stand = stand; + user.overlay = overlay; user.x = x; user.y = y; user.z = z; diff --git a/packages/communication/src/messages/parser/room/unit/UserMessageData.ts b/packages/communication/src/messages/parser/room/unit/UserMessageData.ts index b6a944d..7a8a432 100644 --- a/packages/communication/src/messages/parser/room/unit/UserMessageData.ts +++ b/packages/communication/src/messages/parser/room/unit/UserMessageData.ts @@ -14,6 +14,9 @@ export class UserMessageData private _figure: string = ''; private _custom: string = ''; private _activityPoints: number = 0; + private _background: number = 0; + private _stand: number = 0; + private _overlay: number = 0 private _webID: number = 0; private _groupID: number = 0; private _groupStatus: number = 0; @@ -178,6 +181,36 @@ export class UserMessageData this._activityPoints = k; } } + + public get background(): number + { + return this._background; + } + + public set background(k: number) + { + this._background = k; + } + + public get stand(): number + { + return this._stand; + } + + public set stand(k: number) + { + this._stand = k; + } + + public get overlay(): number + { + return this._overlay; + } + + public set overlay(k: number) + { + this._overlay = k; + } public get webID(): number { diff --git a/packages/room/src/RoomEngine.ts b/packages/room/src/RoomEngine.ts index 2642b3f..e512025 100644 --- a/packages/room/src/RoomEngine.ts +++ b/packages/room/src/RoomEngine.ts @@ -1808,6 +1808,27 @@ export class RoomEngine implements IRoomEngine, IRoomCreator, IRoomEngineService return true; } + + public getFurniLocation(roomId: number, objectId: number, isWallItem: boolean): string + { + return isWallItem + ? this.getRoomObjectWall(roomId, objectId).getLocation().toString() + : this.getRoomObjectFloor(roomId, objectId).getLocation().toString(); + } + + public getFurniDirection(roomId: number, objectId: number, isWallItem: boolean): string + { + return isWallItem + ? this.getRoomObjectWall(roomId, objectId).getDirection().toString() + : this.getRoomObjectFloor(roomId, objectId).getDirection().toString(); + } + + public getFurniState(roomId: number, objectId: number, isWallItem: boolean): number + { + return isWallItem + ? this.getRoomObjectWall(roomId, objectId).getState() + : this.getRoomObjectFloor(roomId, objectId).getState(); + } public addRoomObjectUser(roomId: number, objectId: number, location: IVector3D, direction: IVector3D, headDirection: number, type: number, figure: string): boolean { diff --git a/packages/session/src/RoomSession.ts b/packages/session/src/RoomSession.ts index 263701a..bb4beb1 100644 --- a/packages/session/src/RoomSession.ts +++ b/packages/session/src/RoomSession.ts @@ -1,5 +1,5 @@ import { IRoomSession, IUserDataManager, RoomControllerLevel, RoomTradingLevelEnum } from '@nitrots/api'; -import { BotRemoveComposer, ChangeQueueMessageComposer, CompostPlantMessageComposer, FurnitureMultiStateComposer, GetCommunication, GetPetCommandsComposer, HarvestPetMessageComposer, MoodlightSettingsComposer, MoodlightSettingsSaveComposer, MoodlightTogggleStateComposer, NewUserExperienceScriptProceedComposer, OpenPetPackageMessageComposer, OpenPresentComposer, PeerUsersClassificationMessageComposer, PetMountComposer, PetRemoveComposer, PollAnswerComposer, PollRejectComposer, PollStartComposer, RemovePetSaddleComposer, RoomAmbassadorAlertComposer, RoomBanUserComposer, RoomDoorbellAccessComposer, RoomEnterComposer, RoomGiveRightsComposer, RoomKickUserComposer, RoomModerationSettings, RoomMuteUserComposer, RoomTakeRightsComposer, RoomUnitActionComposer, RoomUnitChatComposer, RoomUnitChatShoutComposer, RoomUnitChatWhisperComposer, RoomUnitDanceComposer, RoomUnitPostureComposer, RoomUnitSignComposer, RoomUnitTypingStartComposer, RoomUnitTypingStopComposer, RoomUsersClassificationMessageComposer, SetClothingChangeDataMessageComposer, TogglePetBreedingComposer, TogglePetRidingComposer, UsePetProductComposer, UserMottoComposer, VotePollCounterMessageComposer } from '@nitrots/communication'; +import { BotRemoveComposer, ChangeQueueMessageComposer, CompostPlantMessageComposer, FurnitureMultiStateComposer, GetCommunication, GetPetCommandsComposer, HarvestPetMessageComposer, MoodlightSettingsComposer, MoodlightSettingsSaveComposer, MoodlightTogggleStateComposer, NewUserExperienceScriptProceedComposer, OpenPetPackageMessageComposer, OpenPresentComposer, PeerUsersClassificationMessageComposer, PetMountComposer, PetRemoveComposer, PollAnswerComposer, PollRejectComposer, PollStartComposer, RemovePetSaddleComposer, RoomAmbassadorAlertComposer, RoomBanUserComposer, RoomDoorbellAccessComposer, RoomEnterComposer, RoomGiveRightsComposer, RoomKickUserComposer, RoomModerationSettings, RoomMuteUserComposer, RoomTakeRightsComposer, RoomUnitActionComposer, RoomUnitBackgroundComposer, RoomUnitChatComposer, RoomUnitChatShoutComposer, RoomUnitChatWhisperComposer, RoomUnitDanceComposer, RoomUnitPostureComposer, RoomUnitSignComposer, RoomUnitTypingStartComposer, RoomUnitTypingStopComposer, RoomUsersClassificationMessageComposer, SetClothingChangeDataMessageComposer, TogglePetBreedingComposer, TogglePetRidingComposer, UsePetProductComposer, UserMottoComposer, VotePollCounterMessageComposer } from '@nitrots/communication'; import { RoomSessionEvent } from '@nitrots/events'; import { UserDataManager } from './UserDataManager'; @@ -89,6 +89,11 @@ export class RoomSession implements IRoomSession if(isTyping) GetCommunication().connection.send(new RoomUnitTypingStartComposer()); else GetCommunication().connection.send(new RoomUnitTypingStopComposer()); } + + public sendBackgroundMessage(backgroundImage: number, backgroundStand: number, backgroundOverlay: number): void + { + GetCommunication().connection.send(new RoomUnitBackgroundComposer(backgroundImage, backgroundStand, backgroundOverlay)); + } public sendMottoMessage(motto: string): void { diff --git a/packages/session/src/RoomUserData.ts b/packages/session/src/RoomUserData.ts index 6cddd62..02e8d67 100644 --- a/packages/session/src/RoomUserData.ts +++ b/packages/session/src/RoomUserData.ts @@ -9,6 +9,9 @@ export class RoomUserData implements IRoomUserData private _figure: string = ''; private _custom: string = ''; private _activityPoints: number; + private _background: number; + private _stand: number; + private _overlay: number; private _webID: number = 0; private _groupID: number = 0; private _groupStatus: number = 0; @@ -45,6 +48,36 @@ export class RoomUserData implements IRoomUserData { this._activityPoints = k; } + + public get background(): number + { + return this._background; + } + + public set background(k: number) + { + this._background = k; + } + + public get stand(): number + { + return this._stand; + } + + public set stand(k: number) + { + this._stand = k; + } + + public get overlay(): number + { + return this._overlay; + } + + public set overlay(k: number) + { + this._overlay = k; + } public get name(): string { diff --git a/packages/session/src/UserDataManager.ts b/packages/session/src/UserDataManager.ts index 41f8be6..e411144 100644 --- a/packages/session/src/UserDataManager.ts +++ b/packages/session/src/UserDataManager.ts @@ -144,6 +144,17 @@ export class UserDataManager implements IUserDataManager userData.custom = custom; } + + public updateBackground(roomIndex: number, background: number, stand: number, overlay: number): void + { + const userData = this.getUserDataByIndex(roomIndex); + + if(!userData) return; + + userData.background = background; + userData.stand = stand; + userData.overlay = overlay; + } public updateAchievementScore(roomIndex: number, score: number): void { diff --git a/packages/session/src/handler/RoomUsersHandler.ts b/packages/session/src/handler/RoomUsersHandler.ts index 772502e..9abd54b 100644 --- a/packages/session/src/handler/RoomUsersHandler.ts +++ b/packages/session/src/handler/RoomUsersHandler.ts @@ -100,8 +100,10 @@ export class RoomUsersHandler extends BaseHandler session.userDataManager.updateFigure(parser.unitId, parser.figure, parser.gender, false, false); session.userDataManager.updateMotto(parser.unitId, parser.motto); session.userDataManager.updateAchievementScore(parser.unitId, parser.achievementScore); + + session.userDataManager.updateBackground(parser.unitId, parser.backgroundId, parser.standId, parser.overlayId); - GetEventDispatcher().dispatchEvent(new RoomSessionUserFigureUpdateEvent(session, parser.unitId, parser.figure, parser.gender, parser.motto, parser.achievementScore)); + GetEventDispatcher().dispatchEvent(new RoomSessionUserFigureUpdateEvent(session, parser.unitId, parser.figure, parser.gender, parser.motto, parser.achievementScore, parser.backgroundId, parser.standId, parser.overlayId)); }