RoomEnterComposer: optional spawnX/spawnY for reconnect

Arcturus' RequestRoomLoadEvent reads the two extra ints only when
the inbound packet has 8+ bytes remaining after roomId+password, so
the renderer can send 2-arg or 4-arg payloads against the same
header. The client already calls 'new RoomEnterComposer(roomId,
password, spawnX, spawnY)' in two places inside RoomSession /
RoomSessionManager (the reconnect/respawn flow) — the composer
signature is what was lagging behind.

Server-side reference:
Arcturus-Morningstar-Extended/Emulator/src/main/java/com/eu/habbo/
messages/incoming/rooms/RequestRoomLoadEvent.java
This commit is contained in:
simoleo89
2026-05-11 21:09:51 +02:00
parent 999b8187d6
commit b42f989e28
@@ -1,12 +1,23 @@
import { IMessageComposer } from '@nitrots/api';
export class RoomEnterComposer implements IMessageComposer<ConstructorParameters<typeof RoomEnterComposer>>
{
private _data: ConstructorParameters<typeof RoomEnterComposer>;
type RoomEnterPayload = [ number, string, number?, number? ];
constructor(roomId: number, password: string = null)
export class RoomEnterComposer implements IMessageComposer<RoomEnterPayload>
{
this._data = [roomId, password];
private _data: RoomEnterPayload;
/**
* Optional spawnX/spawnY let the server resume the avatar at a
* specific tile when re-entering the same room — used by the
* reconnect flow. Arcturus' RequestRoomLoadEvent reads both ints
* only if `packet.remaining >= 8`, so omitting them keeps the
* legacy enter-via-door behavior.
*/
constructor(roomId: number, password: string = null, spawnX?: number, spawnY?: number)
{
this._data = (spawnX !== undefined && spawnY !== undefined)
? [ roomId, password, spawnX, spawnY ]
: [ roomId, password ];
}
public getMessageArray()