feat(furni-editor): add WebSocket packets for furniture editor

Add composers, parsers, and events for the Furni Editor feature
communicating via WebSocket with the Arcturus emulator.

Packet handlers:
- Search (10040/10041): search furniture by name, ID, or type
- Detail (10042/10043): get/receive full furniture details by sprite ID
- Update (10044): save furniture property changes
- Create (10045): create new furniture items
- Delete (10046): delete furniture items
- Interactions (10047/10048): list available interaction types
- Result (10049): confirmation response for save/delete/create

New files:
- 7 outgoing composers (Search, Detail, BySprite, Interactions, Update, Create, Delete)
- 4 incoming events (Search, Detail, Interactions, Result)
- 4 parsers (Search, Detail, Interactions, Result)
- Updated IncomingHeader, OutgoingHeader, NitroMessages, and barrel exports
This commit is contained in:
Life
2026-03-22 18:04:27 +01:00
parent 427f7c66e9
commit 35f55d5add
24 changed files with 469 additions and 1 deletions
@@ -476,6 +476,15 @@ export class IncomingHeader
public static RENTABLE_FURNI_RENT_OR_BUYOUT_OFFER = 35;
public static HANDSHAKE_IDENTITY_ACCOUNT = 3523;
// Catalog Admin
public static CATALOG_ADMIN_RESULT = 10059;
// Furni Editor
public static FURNI_EDITOR_SEARCH_RESULT = 10040;
public static FURNI_EDITOR_DETAIL_RESULT = 10041;
public static FURNI_EDITOR_INTERACTIONS_RESULT = 10043;
public static FURNI_EDITOR_RESULT = 10044;
// Custom Prefixes
public static USER_PREFIXES = 7001;
public static PREFIX_RECEIVED = 7002;
@@ -0,0 +1,16 @@
import { IMessageEvent } from '@nitrots/api';
import { MessageEvent } from '@nitrots/events';
import { FurniEditorDetailParser } from '../../parser';
export class FurniEditorDetailEvent extends MessageEvent implements IMessageEvent
{
constructor(callBack: Function)
{
super(callBack, FurniEditorDetailParser);
}
public getParser(): FurniEditorDetailParser
{
return this.parser as FurniEditorDetailParser;
}
}
@@ -0,0 +1,16 @@
import { IMessageEvent } from '@nitrots/api';
import { MessageEvent } from '@nitrots/events';
import { FurniEditorInteractionsParser } from '../../parser';
export class FurniEditorInteractionsEvent extends MessageEvent implements IMessageEvent
{
constructor(callBack: Function)
{
super(callBack, FurniEditorInteractionsParser);
}
public getParser(): FurniEditorInteractionsParser
{
return this.parser as FurniEditorInteractionsParser;
}
}
@@ -0,0 +1,16 @@
import { IMessageEvent } from '@nitrots/api';
import { MessageEvent } from '@nitrots/events';
import { FurniEditorResultParser } from '../../parser';
export class FurniEditorResultEvent extends MessageEvent implements IMessageEvent
{
constructor(callBack: Function)
{
super(callBack, FurniEditorResultParser);
}
public getParser(): FurniEditorResultParser
{
return this.parser as FurniEditorResultParser;
}
}
@@ -0,0 +1,16 @@
import { IMessageEvent } from '@nitrots/api';
import { MessageEvent } from '@nitrots/events';
import { FurniEditorSearchParser } from '../../parser';
export class FurniEditorSearchEvent extends MessageEvent implements IMessageEvent
{
constructor(callBack: Function)
{
super(callBack, FurniEditorSearchParser);
}
public getParser(): FurniEditorSearchParser
{
return this.parser as FurniEditorSearchParser;
}
}
@@ -0,0 +1,4 @@
export * from './FurniEditorSearchEvent';
export * from './FurniEditorDetailEvent';
export * from './FurniEditorInteractionsEvent';
export * from './FurniEditorResultEvent';
@@ -13,6 +13,7 @@ export * from './competition';
export * from './crafting';
export * from './desktop';
export * from './friendlist';
export * from './furnieditor';
export * from './game';
export * from './game/directory';
export * from './game/lobby';