1
0
Fork 0
mirror of https://github.com/demostf/demo.js synced 2026-06-04 00:54:14 +02:00

save more data in packets

This commit is contained in:
Robin Appelman 2017-02-17 23:47:00 +01:00
commit 9981feb8f7
7 changed files with 101 additions and 16 deletions

View file

@ -4,6 +4,7 @@ import {GameEvent, GameEventDefinitionMap} from "./GameEvent";
import {PacketEntity} from "./PacketEntity"; import {PacketEntity} from "./PacketEntity";
import {SendTable} from "./SendTable"; import {SendTable} from "./SendTable";
import {ServerClass} from "./ServerClass"; import {ServerClass} from "./ServerClass";
import {BitStream} from "bit-buffer";
export interface StringTablePacket { export interface StringTablePacket {
packetType: 'stringTable'; packetType: 'stringTable';
@ -57,6 +58,13 @@ export interface PacketEntitiesPacket {
packetType: 'packetEntities'; packetType: 'packetEntities';
entities: PacketEntity[]; entities: PacketEntity[];
removedEntities: number[]; removedEntities: number[];
maxEntries: number;
isDelta: boolean;
delta: number;
baseLine : number;
updatedEntries: number;
length: number;
updatedBaseLine: boolean;
} }
export interface ParseSoundsPacket { export interface ParseSoundsPacket {
@ -100,6 +108,28 @@ export interface VoiceInitPacket {
packetType: 'voiceInit'; packetType: 'voiceInit';
codec: string; codec: string;
quality: number; quality: number;
extraData: number
}
export interface VoiceDataPacket {
packetType: 'voiceData';
client: number;
proximity: number;
length: number;
data: BitStream;
}
export interface MenuPacket {
packetType: 'menu';
type: number;
length: number;
data: BitStream;
}
export interface CmdKeyValuesPacket {
packetType: 'cmdKeyValues';
length: number;
data: BitStream;
} }
export type UserMessagePacket = SayText2Packet | TextMessagePacket | UnknownUserMessagePacket; export type UserMessagePacket = SayText2Packet | TextMessagePacket | UnknownUserMessagePacket;
@ -116,4 +146,7 @@ export type Packet = BSPDecalPacket |
SetConVarPacket | SetConVarPacket |
TempEntitiesPacket | TempEntitiesPacket |
UserMessagePacket | UserMessagePacket |
VoiceInitPacket; VoiceInitPacket |
VoiceDataPacket |
MenuPacket |
CmdKeyValuesPacket;

View file

@ -15,6 +15,9 @@ import {UserMessage} from '../Packet/UserMessage';
import {PacketParserMap} from '../Packet/Parser'; import {PacketParserMap} from '../Packet/Parser';
import {TempEntities} from '../Packet/TempEntities'; import {TempEntities} from '../Packet/TempEntities';
import {VoiceInit} from '../Packet/VoiceInit'; import {VoiceInit} from '../Packet/VoiceInit';
import {VoiceData} from '../Packet/VoiceData';
import {Menu} from '../Packet/Menu';
import {CmdKeyValues} from '../Packet/CmdKeyValues';
import {GameEventDefinitionMap} from "../../Data/GameEvent"; import {GameEventDefinitionMap} from "../../Data/GameEvent";
@ -65,7 +68,7 @@ export class Packet extends Parser {
12: CreateStringTable, 12: CreateStringTable,
13: UpdateStringTable, 13: UpdateStringTable,
14: VoiceInit, 14: VoiceInit,
15: ParserGenerator.make('voiceData', 'client{8}proximity{8}length{16}_{$length}'), 15: VoiceData,
17: ParseSounds, 17: ParseSounds,
18: ParserGenerator.make('setView', 'index{11}'), 18: ParserGenerator.make('setView', 'index{11}'),
19: ParserGenerator.make('fixAngle', 'relative{b}x{16}y{16}z{16}'), 19: ParserGenerator.make('fixAngle', 'relative{b}x{16}y{16}z{16}'),
@ -76,10 +79,10 @@ export class Packet extends Parser {
26: PacketEntities, 26: PacketEntities,
27: TempEntities, 27: TempEntities,
28: ParserGenerator.make('preFetch', 'index{14}'), 28: ParserGenerator.make('preFetch', 'index{14}'),
29: ParserGenerator.make('menu', 'type{16}length{16}_{$length}_{$length}_{$length}_{$length}_{$length}_{$length}_{$length}'),//length*8 29: Menu,
30: GameEventList, 30: GameEventList,
31: ParserGenerator.make('getCvarValue', 'cookie{32}value{s}'), 31: ParserGenerator.make('getCvarValue', 'cookie{32}value{s}'),
32: ParserGenerator.make('cmdKeyValues', 'length{32}data{$length}') 32: CmdKeyValues
}; };
} }

View file

@ -0,0 +1,13 @@
import {CmdKeyValuesPacket} from "../../Data/Packet";
import {BitStream} from 'bit-buffer';
export function CmdKeyValues(stream: BitStream): CmdKeyValuesPacket {
//'length{32}data{$length}'
const length = stream.readUint32();
const data = stream.readBitStream(length);
return {
packetType: 'cmdKeyValues',
length: length,
data: data
};
}

15
src/Parser/Packet/Menu.ts Normal file
View file

@ -0,0 +1,15 @@
import {MenuPacket} from "../../Data/Packet";
import {BitStream} from 'bit-buffer';
export function Menu(stream: BitStream): MenuPacket {
//'type{16}length{16}_{$length}_{$length}_{$length}_{$length}_{$length}_{$length}_{$length}'
const type = stream.readUint16();
const length = stream.readUint16();
const data = stream.readBitStream(length * 8); //length is in bytes
return {
packetType: 'menu',
type: type,
length: length,
data: data
};
}

View file

@ -63,7 +63,7 @@ export function PacketEntities(stream: BitStream, match: Match): PacketEntitiesP
// https://github.com/PazerOP/DemoLib/blob/5f9467650f942a4a70f9ec689eadcd3e0a051956/TF2Net/NetMessages/NetPacketEntitiesMessage.cs // https://github.com/PazerOP/DemoLib/blob/5f9467650f942a4a70f9ec689eadcd3e0a051956/TF2Net/NetMessages/NetPacketEntitiesMessage.cs
const maxEntries = stream.readBits(11); const maxEntries = stream.readBits(11);
const isDelta = !!stream.readBits(1); const isDelta = !!stream.readBits(1);
const delta = (isDelta) ? stream.readInt32() : null; const delta = (isDelta) ? stream.readInt32() : 0;
const baseLine = stream.readBits(1); const baseLine = stream.readBits(1);
const updatedEntries = stream.readBits(11); const updatedEntries = stream.readBits(11);
const length = stream.readBits(20); const length = stream.readBits(20);
@ -109,6 +109,13 @@ export function PacketEntities(stream: BitStream, match: Match): PacketEntitiesP
return { return {
packetType: 'packetEntities', packetType: 'packetEntities',
entities: receivedEntities, entities: receivedEntities,
removedEntities: removedEntityIds removedEntities: removedEntityIds,
maxEntries: maxEntries,
isDelta: isDelta,
delta: delta,
baseLine: baseLine,
updatedEntries: updatedEntries,
length: length,
updatedBaseLine: updatedBaseLine
}; };
} }

View file

@ -0,0 +1,17 @@
import {VoiceDataPacket} from "../../Data/Packet";
import {BitStream} from 'bit-buffer';
export function VoiceData(stream: BitStream): VoiceDataPacket {
// 'client{8}proximity{8}length{16}_{$length}'
const client = stream.readUint8();
const proximity = stream.readUint8();
const length = stream.readUint16();
const data = stream.readBitStream(length);
return {
packetType: 'voiceData',
client: client,
proximity: proximity,
length: length,
data: data
};
}

View file

@ -2,17 +2,14 @@ import {VoiceInitPacket} from "../../Data/Packet";
import {BitStream} from 'bit-buffer'; import {BitStream} from 'bit-buffer';
export function VoiceInit(stream: BitStream): VoiceInitPacket { export function VoiceInit(stream: BitStream): VoiceInitPacket {
//ParserGenerator.make('voiceInit', 'codec{s}quality{8}'),
const codec = stream.readASCIIString(); const codec = stream.readASCIIString();
const quality = stream.readUint8(); const quality = stream.readUint8();
if (codec === 'vaudio_celt') {
// no clue, from 2017-2-14 update // no clue, from 2017-2-14 update
stream.readUint8(); const extraData = (codec === 'vaudio_celt') ? stream.readUint16() : 0;
stream.readUint8();
}
return { return {
packetType: 'voiceInit', packetType: 'voiceInit',
codec: codec, codec: codec,
quality: quality quality: quality,
} extraData: extraData
};
} }