mirror of
https://github.com/demostf/demo.js
synced 2026-06-04 09:04:13 +02:00
Fix getting game event type
This commit is contained in:
parent
dd5833c77e
commit
2b0075736b
3 changed files with 12 additions and 3 deletions
|
|
@ -20,6 +20,7 @@ export class ParserState {
|
||||||
public staticBaseLines: Map<ServerClassId, BitStream> = new Map();
|
public staticBaseLines: Map<ServerClassId, BitStream> = new Map();
|
||||||
public staticBaselineCache: Map<ServerClassId, SendProp[]> = new Map();
|
public staticBaselineCache: Map<ServerClassId, SendProp[]> = new Map();
|
||||||
public eventDefinitions: Map<number, GameEventDefinition<GameEventType>> = new Map();
|
public eventDefinitions: Map<number, GameEventDefinition<GameEventType>> = new Map();
|
||||||
|
public eventDefinitionTypes: Map<GameEventType, number> = new Map();
|
||||||
public entityClasses: Map<EntityId, ServerClass> = new Map();
|
public entityClasses: Map<EntityId, ServerClass> = new Map();
|
||||||
public sendTables: Map<SendTableName, SendTable> = new Map();
|
public sendTables: Map<SendTableName, SendTable> = new Map();
|
||||||
public stringTables: StringTable[] = [];
|
public stringTables: StringTable[] = [];
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,12 @@
|
||||||
import {GameEventListPacket} from '../Data/Packet';
|
import {GameEventListPacket} from '../Data/Packet';
|
||||||
import {ParserState} from '../Data/ParserState';
|
import {ParserState} from '../Data/ParserState';
|
||||||
|
import {GameEventType} from '../Data/GameEventTypes';
|
||||||
|
import {GameEventDefinition} from '../Data/GameEvent';
|
||||||
|
|
||||||
export function handleGameEventList(packet: GameEventListPacket, state: ParserState) {
|
export function handleGameEventList(packet: GameEventListPacket, state: ParserState) {
|
||||||
state.eventDefinitions = packet.eventList;
|
state.eventDefinitions = packet.eventList;
|
||||||
|
|
||||||
|
const entries: ([number, GameEventDefinition<GameEventType>])[] = Array.from(packet.eventList.entries());
|
||||||
|
const reversedEntries = entries.map(([type, definition]) => [definition.name, type]) as [GameEventType, number][];
|
||||||
|
state.eventDefinitionTypes = new Map(reversedEntries);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ function parseGameEvent<T extends GameEventType>(definition: GameEventDefinition
|
||||||
const values: GameEventTypeMap[T]['values'] = {};
|
const values: GameEventTypeMap[T]['values'] = {};
|
||||||
for (const entry of definition.entries) {
|
for (const entry of definition.entries) {
|
||||||
const value = getGameEventValue(stream, entry);
|
const value = getGameEventValue(stream, entry);
|
||||||
if (value) {
|
if (value !== null) {
|
||||||
values[entry.name] = value;
|
values[entry.name] = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -26,7 +26,9 @@ function parseGameEvent<T extends GameEventType>(definition: GameEventDefinition
|
||||||
function encodeGameEvent<T extends GameEventType>(event: GameEventTypeMap[T], definition: GameEventDefinition<T>, stream: BitStream) {
|
function encodeGameEvent<T extends GameEventType>(event: GameEventTypeMap[T], definition: GameEventDefinition<T>, stream: BitStream) {
|
||||||
for (const entry of definition.entries) {
|
for (const entry of definition.entries) {
|
||||||
const value = event.values[entry.name];
|
const value = event.values[entry.name];
|
||||||
if (value !== null && typeof value !== 'undefined') {
|
if (typeof value === 'undefined') {
|
||||||
|
throw new Error('empty event value');
|
||||||
|
} else {
|
||||||
encodeGameEventValue(value, stream, entry);
|
encodeGameEventValue(value, stream, entry);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -105,7 +107,7 @@ export function ParseGameEvent(stream: BitStream, state: ParserState): GameEvent
|
||||||
export function EncodeGameEvent(packet: GameEventPacket, stream: BitStream, state: ParserState) {
|
export function EncodeGameEvent(packet: GameEventPacket, stream: BitStream, state: ParserState) {
|
||||||
const lengthStart = stream.index;
|
const lengthStart = stream.index;
|
||||||
stream.index += 11;
|
stream.index += 11;
|
||||||
const eventId = GameEventTypeIdMap.get(packet.event.name);
|
const eventId = state.eventDefinitionTypes.get(packet.event.name);
|
||||||
if (typeof eventId === 'undefined') {
|
if (typeof eventId === 'undefined') {
|
||||||
throw new Error(`Unknown game event type ${packet.event.name}`);
|
throw new Error(`Unknown game event type ${packet.event.name}`);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue