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:
parent
844d387a90
commit
9981feb8f7
7 changed files with 101 additions and 16 deletions
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
13
src/Parser/Packet/CmdKeyValues.ts
Normal file
13
src/Parser/Packet/CmdKeyValues.ts
Normal 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
15
src/Parser/Packet/Menu.ts
Normal 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
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -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
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
17
src/Parser/Packet/VoiceData.ts
Normal file
17
src/Parser/Packet/VoiceData.ts
Normal 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
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -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
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue