fix(platform): apply room action battle flags
This commit is contained in:
+14
-1
@@ -369,6 +369,16 @@ function parseSeatAction(value: ParsedSeatPayload): {
|
||||
return { seat, raw };
|
||||
}
|
||||
|
||||
function stageAfterOptionalDeskwar(
|
||||
raw: Readonly<Record<string, unknown>>,
|
||||
currentStage: number,
|
||||
): number {
|
||||
if (!hasOwn(raw, 'deskwar')) return currentStage;
|
||||
return requireProtocolFlag(raw.deskwar, '$.event.raw.deskwar') === 1
|
||||
? 1
|
||||
: currentStage;
|
||||
}
|
||||
|
||||
function requireOccupiedSeat(room: InsideRoomState, seat: number): number {
|
||||
if (seat < 0 || seat >= room.seatPlayerIds.length) {
|
||||
throw new RangeError('$.event.seat: expected room seat range');
|
||||
@@ -572,6 +582,7 @@ export class PlatformStore {
|
||||
if (room.seatPlayerIds.includes(joined.player.playerid)) {
|
||||
throw new RangeError('$.event.raw.playerid: duplicate player seat');
|
||||
}
|
||||
const stage = stageAfterOptionalDeskwar(event.raw, room.stage);
|
||||
|
||||
const player = Object.freeze(joined.player);
|
||||
const entities = Object.freeze({
|
||||
@@ -598,6 +609,7 @@ export class PlatformStore {
|
||||
seatPlayerIds: Object.freeze(seatPlayerIds),
|
||||
readySeats: Object.freeze(readySeats),
|
||||
offlineSeats: Object.freeze(offlineSeats),
|
||||
stage,
|
||||
}),
|
||||
}));
|
||||
}
|
||||
@@ -614,6 +626,7 @@ export class PlatformStore {
|
||||
if (player === undefined) {
|
||||
throw new RangeError('players.entities: occupied seat has no canonical player');
|
||||
}
|
||||
const stage = stageAfterOptionalDeskwar(event.raw, room.stage);
|
||||
const entities = Object.freeze({
|
||||
...previous.players.entities,
|
||||
[playerid]: Object.freeze({ ...player, isprepare: 1 }),
|
||||
@@ -625,7 +638,7 @@ export class PlatformStore {
|
||||
selfPlayerId: previous.players.selfPlayerId,
|
||||
entities,
|
||||
}),
|
||||
room: Object.freeze({ ...room, readySeats }),
|
||||
room: Object.freeze({ ...room, readySeats, stage }),
|
||||
}));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user