mirror of
https://github.com/demostf/demo.js
synced 2026-06-04 00:54:14 +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 staticBaselineCache: Map<ServerClassId, SendProp[]> = 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 sendTables: Map<SendTableName, SendTable> = new Map();
|
||||
public stringTables: StringTable[] = [];
|
||||
|
|
|
|||
|
|
@ -1,6 +1,12 @@
|
|||
import {GameEventListPacket} from '../Data/Packet';
|
||||
import {ParserState} from '../Data/ParserState';
|
||||
import {GameEventType} from '../Data/GameEventTypes';
|
||||
import {GameEventDefinition} from '../Data/GameEvent';
|
||||
|
||||
export function handleGameEventList(packet: GameEventListPacket, state: ParserState) {
|
||||
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'] = {};
|
||||
for (const entry of definition.entries) {
|
||||
const value = getGameEventValue(stream, entry);
|
||||
if (value) {
|
||||
if (value !== null) {
|
||||
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) {
|
||||
for (const entry of definition.entries) {
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
|
@ -105,7 +107,7 @@ export function ParseGameEvent(stream: BitStream, state: ParserState): GameEvent
|
|||
export function EncodeGameEvent(packet: GameEventPacket, stream: BitStream, state: ParserState) {
|
||||
const lengthStart = stream.index;
|
||||
stream.index += 11;
|
||||
const eventId = GameEventTypeIdMap.get(packet.event.name);
|
||||
const eventId = state.eventDefinitionTypes.get(packet.event.name);
|
||||
if (typeof eventId === 'undefined') {
|
||||
throw new Error(`Unknown game event type ${packet.event.name}`);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue