Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions packages/api/src/octane/room/IRoomEngine.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Container, Point, Rectangle, RenderTexture, Texture } from 'pixi.js';
import { Container, Point, PointData, Rectangle, RenderTexture, Texture } from 'pixi.js';
import { IRoomGeometry, IRoomManager, IRoomObject, IRoomObjectController, IRoomRenderingCanvas } from '../../room';
import { IVector3D } from '../../utils';
import { IPetCustomPart } from '../session';
Expand All @@ -14,12 +14,15 @@ export interface IRoomEngine
setActiveRoomId(roomId: number): void;
createRoomInstance(roomId: number, roomMap: IRoomMapData): void;
getRoomInstanceDisplay(roomId: number, id: number, width: number, height: number, scale: number): Container;
setRoomInstanceRenderingCanvasScale(roomId: number, canvasId: number, level: number, point?: Point, offsetPoint?: Point, isFlipForced?: boolean): void;
// `isFlipForced` toggles the 180 degree room flip instead of zooming;
// `isAnimated` passes a fractional scale through without snapping it.
setRoomInstanceRenderingCanvasScale(roomId: number, canvasId: number, level: number, point?: PointData, offsetPoint?: PointData, isFlipForced?: boolean, isAnimated?: boolean): void;
setRoomInstanceRenderingCanvasMask(roomId: number, canvasId: number, flag: boolean): void;
getRoomInstanceRenderingCanvas(roomId: number, canvasId?: number): IRoomRenderingCanvas;
getRoomInstanceRenderingCanvasOffset(roomId: number, canvasId?: number): Point;
setRoomInstanceRenderingCanvasOffset(roomId: number, canvasId: number, point: Point): boolean;
getRoomInstanceRenderingCanvasScale(roomId?: number, canvasId?: number): number;
getRoomInstanceRenderingCanvasIsFlipped(roomId?: number, canvasId?: number): boolean;
initializeRoomInstanceRenderingCanvas(roomId: number, canvasId: number, width: number, height: number): void;
updateRoomInstancePlaneVisibility(roomId: number, wallVisible: boolean, floorVisible?: boolean): boolean;
updateRoomInstancePlaneThickness(roomId: number, wallThickness: number, floorThickness: number): boolean;
Expand Down Expand Up @@ -75,6 +78,7 @@ export interface IRoomEngine
changeObjectModelData(roomId: number, objectId: number, category: number, numberKey: string, numberValue: number): boolean;
changeObjectState(roomId: number, objectId: number, category: number): void;
processRoomObjectOperation(objectId: number, category: number, operation: string): boolean;
rotateActiveObjectPreview(positive: boolean): boolean;
modifyRoomObjectDataWithMap(objectId: number, category: number, operation: string, data: Map<string, string>): boolean
modifyRoomObjectData(objectId: number, category: number, colorHex: string, data: string): boolean
processRoomObjectPlacement(placementSource: string, id: number, category: number, typeId: number, legacyString?: string, stuffData?: IObjectData, state?: number, frameNumber?: number, posture?: string): boolean;
Expand Down
8 changes: 6 additions & 2 deletions packages/api/src/room/renderer/IRoomRenderingCanvas.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Container, Point, Texture } from 'pixi.js';
import { Container, PointData, Texture } from 'pixi.js';
import { IRoomGeometry } from '../IRoomGeometry';
import { RoomObjectSpriteData } from '../RoomObjectSpriteData';
import { ISortableSprite } from '../object';
Expand All @@ -9,7 +9,10 @@ export interface IRoomRenderingCanvas
dispose(): void;
initialize(width: number, height: number): void;
setMask(flag: boolean): void;
setScale(scale: number, point?: Point, offsetPoint?: Point, isFlipForced?: boolean): void;
// `point` is the screen position that must stay under the cursor across the
// transform change; `offsetPoint` is where it should land (defaults to `point`).
setScale(scale: number, point?: PointData, offsetPoint?: PointData, isFlipForced?: boolean): void;
setFlip(flag: boolean, point?: PointData, offsetPoint?: PointData): void;
render(time: number, update?: boolean): void;
update(): void;
setMouseListener(listener: IRoomCanvasMouseListener): void;
Expand All @@ -30,6 +33,7 @@ export interface IRoomRenderingCanvas
screenOffsetX: number;
screenOffsetY: number;
scale: number;
isFlipped: boolean;
width: number;
height: number;
canvasUpdated: boolean;
Expand Down
28 changes: 28 additions & 0 deletions packages/communication/src/OctaneMessages.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
import { IMessageConfiguration } from '@octane/api';
import { UnsupportedOutgoingHeader } from './messages/outgoing/UnsupportedOutgoingHeader';
import { UserSettingsPrivacyComposer } from './messages/outgoing/user/settings/UserSettingsPrivacyComposer';
import { UserSettingsChatPreferencesComposer } from './messages/outgoing/user/settings/UserSettingsChatPreferencesComposer';
import { UserSettingsOnlineIndicatorComposer } from './messages/outgoing/user/settings/UserSettingsOnlineIndicatorComposer';
import { WiredMenuSettingsComposer } from './messages/outgoing/roomevents/WiredMenuSettingsComposer';
import { RequestOfflineMessagesComposer } from './messages/outgoing/friendlist/RequestOfflineMessagesComposer';
import { HotelViewLandingEvent, HotelViewLandingRequestComposer, HotelViewLandingSaveComposer, HotelViewLandingSaveSceneComposer, HotelViewLandingVoteComposer, HotelViewLandingResetVotesComposer } from './messages';
import { RoomUnitHabbiconEvent, UseHabbiconComposer } from './messages';
import { AddCustomFilterWordMessageComposer, CustomFilterResultEvent, GetCustomFilterMessageComposer, ModifyCustomFilterResultEvent, RemoveCustomFilterWordMessageComposer } from './messages';
import { MarkMessengerReadComposer, MessengerConversationsEvent, MessengerHistoryEvent, MessengerMessageAckEvent, MessengerMessageFailedEvent, MessengerMessageEvent, MessengerReadCursorEvent, RequestMessengerConversationsComposer, RequestMessengerHistoryComposer, SendMessengerMessageComposer } from './messages';
import { GetTraxEditorSongsComposer, TraxEditorBuySongComposer, TraxEditorDeleteSongComposer, TraxEditorErrorEvent, TraxEditorSaveSongComposer, TraxEditorSongsEvent } from './messages';
import { SnowWarGetAllTimeFriendsLeaderboardComposer, SnowWarGetAllTimeLeaderboardComposer, SnowWarGetWeeklyFriendsLeaderboardComposer, SnowWarGetWeeklyLeaderboardComposer, SnowWarSelectArenaComposer } from './messages';
Expand All @@ -24,13 +28,15 @@ import { CatalogProductMetadataComposer } from './messages/outgoing/catalog/meta
import { CatalogRuntimeConfigurationEvent } from './messages/incoming/catalog/configuration';
import { CatalogRuntimeConfigurationComposer } from './messages/outgoing/catalog/configuration';
import { RareValuesEvent, RequestRareValuesComposer } from './messages';
import { GetHotLooksComposer, HotLooksEvent } from './messages';
import { WheelBuySpinComposer, WheelDataEvent, WheelOpenComposer, WheelRecentWinsEvent, WheelResultEvent, WheelSpinComposer } from './messages';
import { WheelAdminGetPrizesComposer, WheelAdminPrizesEvent, WheelAdminSavePrizesComposer } from './messages';
import { ChestDataEvent, ChestDepositComposer, ChestDepositFurniComposer, ChestDepositInventoryItemComposer, ChestFurniChunkEvent, ChestFurniDeltaEvent, ChestOpenComposer, ChestOpenEvent, ChestStartDepositComposer, ChestWithdrawAllFurniComposer, ChestWithdrawComposer, ChestWithdrawFurniComposer, ChestLogEvent, ChestCloseComposer, ChestEnableWiredComposer, ChestSaveOptionsComposer, ChestSaveSettingsComposer, ChestSaveNotificationsComposer, ChestUpgradeCapacityComposer, ChestNotificationEvent, ChestUpgradeResultEvent, ChestRequestLogComposer, WiredChestRoomLogsComposer, WiredChestLockComposer, WiredChestTransactionDetailsComposer, WiredChestRoomLogsEvent, WiredChestLockStateEvent, WiredChestTransactionDetailsEvent, WiredTradeOpenEvent, WiredTradeItemsEvent, WiredTradeCancelledEvent, WiredTradeCompletedEvent, WiredTradeOfferItemsComposer, WiredTradeAcceptComposer, WiredTradeCancelComposer } from './messages';
import { SoundboardCatalogEvent, SoundboardCatalogReorderComposer, SoundboardCatalogRequestComposer, SoundboardCatalogResultEvent, SoundboardCatalogUpsertComposer, SoundboardPlayComposer, SoundboardPlayDeniedEvent, SoundboardPlayEvent, SoundboardRequestSettingsComposer, SoundboardSaveVolumeComposer, SoundboardSetEnabledComposer, SoundboardSettingsEvent } from './messages';
import { PressKeybindComposer } from './messages';
import { EarningsCenterEvent, EarningsClaimResultEvent, RequestEarningsCenterComposer, ClaimEarningsRewardComposer, ClaimAllEarningsRewardsComposer } from './messages';
import { DeleteMentionComposer, MarkMentionsReadComposer, MentionReceivedEvent, MentionsListEvent, RequestMentionsComposer } from './messages';
import { ActiveDailyTasksMessageEvent, ClaimDailyTaskMessageComposer, ClaimRewardTrackPrizeMessageComposer, DailyTaskUpdatedMessageEvent, DailyTasksAddedMessageEvent, GetDailyTasksMessageComposer, GetRewardTracksMessageComposer, PurchaseRewardTrackPremiumMessageComposer, RewardTrackClaimResultMessageEvent, RewardTrackPremiumPurchaseResultMessageEvent, RewardTrackProgressMessageEvent, RewardTracksMessageEvent } from './messages';
export class OctaneMessages implements IMessageConfiguration
{
private _events: Map<number, Function>;
Expand Down Expand Up @@ -451,6 +457,13 @@ export class OctaneMessages implements IMessageConfiguration
this._events.set(IncomingHeader.COMMUNITY_GOAL_PROGRESS, CommunityGoalProgressMessageEvent);
this._events.set(IncomingHeader.CONCURRENT_USERS_GOAL_PROGRESS, ConcurrentUsersGoalProgressMessageEvent);
this._events.set(IncomingHeader.QUEST_DAILY, QuestDailyMessageEvent);
this._events.set(IncomingHeader.ACTIVE_DAILY_TASKS, ActiveDailyTasksMessageEvent);
this._events.set(IncomingHeader.DAILY_TASKS_ADDED, DailyTasksAddedMessageEvent);
this._events.set(IncomingHeader.DAILY_TASK_UPDATED, DailyTaskUpdatedMessageEvent);
this._events.set(IncomingHeader.REWARD_TRACKS, RewardTracksMessageEvent);
this._events.set(IncomingHeader.REWARD_TRACK_CLAIM_RESULT, RewardTrackClaimResultMessageEvent);
this._events.set(IncomingHeader.REWARD_TRACK_PROGRESS, RewardTrackProgressMessageEvent);
this._events.set(IncomingHeader.REWARD_TRACK_PREMIUM_PURCHASE_RESULT, RewardTrackPremiumPurchaseResultMessageEvent);
this._events.set(IncomingHeader.QUEST_CANCELLED, QuestCancelledMessageEvent);
this._events.set(IncomingHeader.QUEST_COMPLETED, QuestCompletedMessageEvent);
this._events.set(IncomingHeader.COMMUNITY_GOAL_HALL_OF_FAME, CommunityGoalHallOfFameMessageEvent);
Expand Down Expand Up @@ -545,6 +558,8 @@ export class OctaneMessages implements IMessageConfiguration
this._events.set(IncomingHeader.ROOM_PAINT, RoomPaintEvent);
this._events.set(IncomingHeader.ROOM_THICKNESS, RoomVisualizationSettingsEvent);
this._events.set(IncomingHeader.ROOM_GET_FILTER_WORDS, RoomFilterSettingsMessageEvent);
this._events.set(IncomingHeader.CUSTOM_FILTER_RESULT, CustomFilterResultEvent);
this._events.set(IncomingHeader.MODIFY_CUSTOM_FILTER_RESULT, ModifyCustomFilterResultEvent);
this._events.set(IncomingHeader.ROOM_MODEL_BLOCKED_TILES, RoomOccupiedTilesMessageEvent);
this._events.set(IncomingHeader.PET_FIGURE_UPDATE, PetFigureUpdateEvent);
this._events.set(IncomingHeader.PET_INFO, PetInfoEvent);
Expand Down Expand Up @@ -598,6 +613,7 @@ export class OctaneMessages implements IMessageConfiguration

// Custom features
this._events.set(IncomingHeader.RARE_VALUES, RareValuesEvent);
this._events.set(IncomingHeader.HOT_LOOKS, HotLooksEvent);
this._events.set(IncomingHeader.WHEEL_DATA, WheelDataEvent);
this._events.set(IncomingHeader.WHEEL_RESULT, WheelResultEvent);
this._events.set(IncomingHeader.WHEEL_RECENT_WINS, WheelRecentWinsEvent);
Expand Down Expand Up @@ -917,6 +933,9 @@ export class OctaneMessages implements IMessageConfiguration
this._composers.set(OutgoingHeader.SNOWWAR_GET_WEEKLY_FRIENDS_LEADERBOARD, SnowWarGetWeeklyFriendsLeaderboardComposer);
this._composers.set(OutgoingHeader.USE_HABBICON, UseHabbiconComposer);
this._composers.set(OutgoingHeader.USER_SETTINGS_PRIVACY, UserSettingsPrivacyComposer);
this._composers.set(OutgoingHeader.USER_SETTINGS_CHAT_PREFERENCES, UserSettingsChatPreferencesComposer);
this._composers.set(OutgoingHeader.USER_SETTINGS_ONLINE_INDICATOR, UserSettingsOnlineIndicatorComposer);
this._composers.set(OutgoingHeader.WIRED_MENU_SETTINGS_SAVE, WiredMenuSettingsComposer);
this._composers.set(OutgoingHeader.REQUEST_OFFLINE_MESSAGES, RequestOfflineMessagesComposer);
this._composers.set(OutgoingHeader.HOTEL_VIEW_LANDING_REQUEST, HotelViewLandingRequestComposer);
this._composers.set(OutgoingHeader.HOTEL_VIEW_LANDING_SAVE, HotelViewLandingSaveComposer);
Expand Down Expand Up @@ -1055,6 +1074,9 @@ export class OctaneMessages implements IMessageConfiguration
this._composers.set(OutgoingHeader.ROOM_STAFF_PICK, ToggleStaffPickMessageComposer);
this._composers.set(OutgoingHeader.ROOM_FILTER_WORDS, GetCustomRoomFilterMessageComposer);
this._composers.set(OutgoingHeader.ROOM_FILTER_WORDS_MODIFY, UpdateRoomFilterMessageComposer);
this._composers.set(OutgoingHeader.GET_CUSTOM_FILTER, GetCustomFilterMessageComposer);
this._composers.set(OutgoingHeader.ADD_CUSTOM_FILTER_WORD, AddCustomFilterWordMessageComposer);
this._composers.set(OutgoingHeader.REMOVE_CUSTOM_FILTER_WORD, RemoveCustomFilterWordMessageComposer);
this._composers.set(OutgoingHeader.USER_HOME_ROOM, UpdateHomeRoomMessageComposer);
this._composers.set(OutgoingHeader.UPDATE_ROOM_THUMBNAIL, UpdateRoomThumbnailMessageComposer);
// NEW NAVIGATOR
Expand Down Expand Up @@ -1392,6 +1414,11 @@ export class OctaneMessages implements IMessageConfiguration
this._composers.set(OutgoingHeader.GET_CONCURRENT_USERS_GOAL_PROGRESS, GetConcurrentUsersGoalProgressMessageComposer);
this._composers.set(OutgoingHeader.GET_CONCURRENT_USERS_REWARD, GetConcurrentUsersRewardMessageComposer);
this._composers.set(OutgoingHeader.GET_DAILY_QUEST, GetDailyQuestMessageComposer);
this._composers.set(OutgoingHeader.GET_DAILY_TASKS, GetDailyTasksMessageComposer);
this._composers.set(OutgoingHeader.CLAIM_DAILY_TASK, ClaimDailyTaskMessageComposer);
this._composers.set(OutgoingHeader.GET_REWARD_TRACKS, GetRewardTracksMessageComposer);
this._composers.set(OutgoingHeader.CLAIM_REWARD_TRACK_PRIZE, ClaimRewardTrackPrizeMessageComposer);
this._composers.set(OutgoingHeader.PURCHASE_REWARD_TRACK_PREMIUM, PurchaseRewardTrackPremiumMessageComposer);
this._composers.set(OutgoingHeader.GET_QUESTS, GetQuestsMessageComposer);
this._composers.set(OutgoingHeader.GET_SEASONAL_QUESTS_ONLY, GetSeasonalQuestsOnlyMessageComposer);
this._composers.set(OutgoingHeader.OPEN_QUEST_TRACKER, OpenQuestTrackerMessageComposer);
Expand Down Expand Up @@ -1488,6 +1515,7 @@ export class OctaneMessages implements IMessageConfiguration

// Custom features
this._composers.set(OutgoingHeader.REQUEST_RARE_VALUES, RequestRareValuesComposer);
this._composers.set(OutgoingHeader.GET_HOT_LOOKS, GetHotLooksComposer);
this._composers.set(OutgoingHeader.WHEEL_OPEN, WheelOpenComposer);
this._composers.set(OutgoingHeader.WHEEL_SPIN, WheelSpinComposer);
this._composers.set(OutgoingHeader.WHEEL_BUY_SPIN, WheelBuySpinComposer);
Expand Down
12 changes: 12 additions & 0 deletions packages/communication/src/messages/incoming/IncomingHeader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,8 @@ export class IncomingHeader
public static ROOM_SPECTATOR = 1033;
public static ROOM_THICKNESS = 3547;
public static ROOM_GET_FILTER_WORDS = 2937;
public static CUSTOM_FILTER_RESULT = 3883;
public static MODIFY_CUSTOM_FILTER_RESULT = 3333;
public static ROOM_MESSAGE_NOTIFICATION = 1634;
public static ROOM_POPULAR_TAGS_RESULT = 2012;
public static INFO_FEED_ENABLE = 3284;
Expand Down Expand Up @@ -364,6 +366,14 @@ export class IncomingHeader
public static SEASONAL_QUESTS = 1122;
public static QUESTS = 3625;
public static QUEST = 230;
// AIR 13 daily tasks and reward track (server -> client); 9450-9452 replace the colliding official 2392/596/2142
public static ACTIVE_DAILY_TASKS = 2900;
public static DAILY_TASKS_ADDED = 670;
public static DAILY_TASK_UPDATED = 9450;
public static REWARD_TRACKS = 2327;
public static REWARD_TRACK_CLAIM_RESULT = 9451;
public static REWARD_TRACK_PROGRESS = 9452;
public static REWARD_TRACK_PREMIUM_PURCHASE_RESULT = 2248;
public static BONUS_RARE_INFO = 1533;
public static CRAFTABLE_PRODUCTS = 1000;
public static CRAFTING_RECIPE = 2774;
Expand Down Expand Up @@ -600,4 +610,6 @@ export class IncomingHeader
// Room unit habbicon broadcast (server -> client). 9410 to match emulator
// RoomUserHabbiconComposer; 6011 is reserved by SnowWar SAVE_EDITOR.
public static UNIT_HABBICON = 9410;
// AIR 13 avatar editor hot looks tab (server -> client). 9360 to match emulator HotLooksComposer.
public static HOT_LOOKS = 9360;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { IMessageEvent } from '@octane/api';
import { MessageEvent } from '@octane/events';
import { HotLooksParser } from '../../parser';

export class HotLooksEvent extends MessageEvent implements IMessageEvent
{
constructor(callBack: Function)
{
super(callBack, HotLooksParser);
}

public getParser(): HotLooksParser
{
return this.parser as HotLooksParser;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './HotLooksEvent';
1 change: 1 addition & 0 deletions packages/communication/src/messages/incoming/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ export * from './handshake';
export * from './help';
export * from './housekeeping';
export * from './rarevalues';
export * from './hotlooks';
export * from './soundboard';
export * from './traxeditor';
export * from './wheel';
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { IMessageEvent } from '@octane/api';
import { MessageEvent } from '@octane/events';
import { ActiveDailyTasksMessageParser } from '../../parser';

export class ActiveDailyTasksMessageEvent extends MessageEvent implements IMessageEvent
{
constructor(callBack: Function)
{
super(callBack, ActiveDailyTasksMessageParser);
}

public getParser(): ActiveDailyTasksMessageParser
{
return this.parser as ActiveDailyTasksMessageParser;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { IMessageEvent } from '@octane/api';
import { MessageEvent } from '@octane/events';
import { DailyTaskUpdatedMessageParser } from '../../parser';

export class DailyTaskUpdatedMessageEvent extends MessageEvent implements IMessageEvent
{
constructor(callBack: Function)
{
super(callBack, DailyTaskUpdatedMessageParser);
}

public getParser(): DailyTaskUpdatedMessageParser
{
return this.parser as DailyTaskUpdatedMessageParser;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { IMessageEvent } from '@octane/api';
import { MessageEvent } from '@octane/events';
import { ActiveDailyTasksMessageParser } from '../../parser';

export class DailyTasksAddedMessageEvent extends MessageEvent implements IMessageEvent
{
constructor(callBack: Function)
{
super(callBack, ActiveDailyTasksMessageParser);
}

public getParser(): ActiveDailyTasksMessageParser
{
return this.parser as ActiveDailyTasksMessageParser;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { IMessageEvent } from '@octane/api';
import { MessageEvent } from '@octane/events';
import { RewardTrackClaimResultMessageParser } from '../../parser';

export class RewardTrackClaimResultMessageEvent extends MessageEvent implements IMessageEvent
{
constructor(callBack: Function)
{
super(callBack, RewardTrackClaimResultMessageParser);
}

public getParser(): RewardTrackClaimResultMessageParser
{
return this.parser as RewardTrackClaimResultMessageParser;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { IMessageEvent } from '@octane/api';
import { MessageEvent } from '@octane/events';
import { RewardTrackPremiumPurchaseResultMessageParser } from '../../parser';

export class RewardTrackPremiumPurchaseResultMessageEvent extends MessageEvent implements IMessageEvent
{
constructor(callBack: Function)
{
super(callBack, RewardTrackPremiumPurchaseResultMessageParser);
}

public getParser(): RewardTrackPremiumPurchaseResultMessageParser
{
return this.parser as RewardTrackPremiumPurchaseResultMessageParser;
}
}
Loading