mirror of
https://github.com/demostf/demo.js
synced 2026-06-04 09:04:13 +02:00
include /build
This commit is contained in:
parent
6e50384883
commit
132ab1b47a
220 changed files with 9059 additions and 1 deletions
7
build/Parser/Packet/BSPDecal.d.ts
vendored
Normal file
7
build/Parser/Packet/BSPDecal.d.ts
vendored
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
import { BitStream } from 'bit-buffer';
|
||||
import { BSPDecalPacket } from '../../Data/Packet';
|
||||
import { Vector } from '../../Data/Vector';
|
||||
export declare function getVecCoord(stream: BitStream): Vector;
|
||||
export declare function encodeVecCoord(vector: Vector, stream: BitStream): void;
|
||||
export declare function ParseBSPDecal(stream: BitStream): BSPDecalPacket;
|
||||
export declare function EncodeBSPDecal(packet: BSPDecalPacket, stream: BitStream): void;
|
||||
65
build/Parser/Packet/BSPDecal.js
Normal file
65
build/Parser/Packet/BSPDecal.js
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const SendPropEncoder_1 = require("../SendPropEncoder");
|
||||
const SendPropParser_1 = require("../SendPropParser");
|
||||
function getVecCoord(stream) {
|
||||
const hasX = stream.readBoolean();
|
||||
const hasY = stream.readBoolean();
|
||||
const hasZ = stream.readBoolean();
|
||||
return {
|
||||
x: hasX ? SendPropParser_1.SendPropParser.readBitCoord(stream) : 0,
|
||||
y: hasY ? SendPropParser_1.SendPropParser.readBitCoord(stream) : 0,
|
||||
z: hasZ ? SendPropParser_1.SendPropParser.readBitCoord(stream) : 0
|
||||
};
|
||||
}
|
||||
exports.getVecCoord = getVecCoord;
|
||||
function encodeVecCoord(vector, stream) {
|
||||
stream.writeBoolean(vector.x !== 0);
|
||||
stream.writeBoolean(vector.y !== 0);
|
||||
stream.writeBoolean(vector.z !== 0);
|
||||
if (vector.x !== 0) {
|
||||
SendPropEncoder_1.SendPropEncoder.writeBitCoord(vector.x, stream);
|
||||
}
|
||||
if (vector.y !== 0) {
|
||||
SendPropEncoder_1.SendPropEncoder.writeBitCoord(vector.y, stream);
|
||||
}
|
||||
if (vector.z !== 0) {
|
||||
SendPropEncoder_1.SendPropEncoder.writeBitCoord(vector.z, stream);
|
||||
}
|
||||
}
|
||||
exports.encodeVecCoord = encodeVecCoord;
|
||||
function ParseBSPDecal(stream) {
|
||||
let modelIndex = 0;
|
||||
let entIndex = 0;
|
||||
const position = getVecCoord(stream);
|
||||
const textureIndex = stream.readBits(9);
|
||||
if (stream.readBoolean()) {
|
||||
entIndex = stream.readBits(11);
|
||||
modelIndex = stream.readBits(12);
|
||||
}
|
||||
const lowPriority = stream.readBoolean();
|
||||
return {
|
||||
packetType: 'bspDecal',
|
||||
position,
|
||||
textureIndex,
|
||||
entIndex,
|
||||
modelIndex,
|
||||
lowPriority
|
||||
};
|
||||
}
|
||||
exports.ParseBSPDecal = ParseBSPDecal;
|
||||
function EncodeBSPDecal(packet, stream) {
|
||||
encodeVecCoord(packet.position, stream);
|
||||
stream.writeBits(packet.textureIndex, 9);
|
||||
if (packet.entIndex || packet.modelIndex) {
|
||||
stream.writeBoolean(true);
|
||||
stream.writeBits(packet.entIndex, 11);
|
||||
stream.writeBits(packet.modelIndex, 12);
|
||||
}
|
||||
else {
|
||||
stream.writeBoolean(false);
|
||||
}
|
||||
stream.writeBoolean(packet.lowPriority);
|
||||
}
|
||||
exports.EncodeBSPDecal = EncodeBSPDecal;
|
||||
//# sourceMappingURL=BSPDecal.js.map
|
||||
1
build/Parser/Packet/BSPDecal.js.map
Normal file
1
build/Parser/Packet/BSPDecal.js.map
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"BSPDecal.js","sourceRoot":"","sources":["../../../src/Parser/Packet/BSPDecal.ts"],"names":[],"mappings":"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"}
|
||||
4
build/Parser/Packet/ClassInfo.d.ts
vendored
Normal file
4
build/Parser/Packet/ClassInfo.d.ts
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
import { BitStream } from 'bit-buffer';
|
||||
import { ClassInfoPacket } from '../../Data/Packet';
|
||||
export declare function ParseClassInfo(stream: BitStream): ClassInfoPacket;
|
||||
export declare function EncodeClassInfo(packet: ClassInfoPacket, stream: BitStream): void;
|
||||
40
build/Parser/Packet/ClassInfo.js
Normal file
40
build/Parser/Packet/ClassInfo.js
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const Math_1 = require("../../Math");
|
||||
function ParseClassInfo(stream) {
|
||||
const count = stream.readUint16();
|
||||
const create = stream.readBoolean();
|
||||
const entries = [];
|
||||
if (!create) {
|
||||
const bits = Math_1.logBase2(count) + 1;
|
||||
for (let i = 0; i < count; i++) {
|
||||
const entry = {
|
||||
classId: stream.readBits(bits),
|
||||
className: stream.readASCIIString(),
|
||||
dataTableName: stream.readASCIIString()
|
||||
};
|
||||
entries.push(entry);
|
||||
}
|
||||
}
|
||||
return {
|
||||
packetType: 'classInfo',
|
||||
number: count,
|
||||
create,
|
||||
entries
|
||||
};
|
||||
}
|
||||
exports.ParseClassInfo = ParseClassInfo;
|
||||
function EncodeClassInfo(packet, stream) {
|
||||
stream.writeUint16(packet.number);
|
||||
stream.writeBoolean(packet.create);
|
||||
if (!packet.create) {
|
||||
const bits = Math_1.logBase2(packet.number) + 1;
|
||||
for (const entry of packet.entries) {
|
||||
stream.writeBits(entry.classId, bits);
|
||||
stream.writeASCIIString(entry.className);
|
||||
stream.writeASCIIString(entry.dataTableName);
|
||||
}
|
||||
}
|
||||
}
|
||||
exports.EncodeClassInfo = EncodeClassInfo;
|
||||
//# sourceMappingURL=ClassInfo.js.map
|
||||
1
build/Parser/Packet/ClassInfo.js.map
Normal file
1
build/Parser/Packet/ClassInfo.js.map
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"ClassInfo.js","sourceRoot":"","sources":["../../../src/Parser/Packet/ClassInfo.ts"],"names":[],"mappings":";;AAEA,qCAAoC;AAEpC,SAAgB,cAAc,CAAC,MAAiB;IAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IACpC,MAAM,OAAO,GAIR,EAAE,CAAC;IACR,IAAI,CAAC,MAAM,EAAE;QACZ,MAAM,IAAI,GAAG,eAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;YAC/B,MAAM,KAAK,GAAG;gBACb,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAC9B,SAAS,EAAE,MAAM,CAAC,eAAe,EAAE;gBACnC,aAAa,EAAE,MAAM,CAAC,eAAe,EAAE;aACvC,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACpB;KACD;IACD,OAAO;QACN,UAAU,EAAE,WAAW;QACvB,MAAM,EAAE,KAAK;QACb,MAAM;QACN,OAAO;KACP,CAAC;AACH,CAAC;AAzBD,wCAyBC;AAED,SAAgB,eAAe,CAAC,MAAuB,EAAE,MAAiB;IACzE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;QACnB,MAAM,IAAI,GAAG,eAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACzC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE;YACnC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACtC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACzC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;SAC7C;KACD;AACF,CAAC;AAXD,0CAWC"}
|
||||
4
build/Parser/Packet/CreateStringTable.d.ts
vendored
Normal file
4
build/Parser/Packet/CreateStringTable.d.ts
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
import { BitStream } from 'bit-buffer';
|
||||
import { CreateStringTablePacket } from '../../Data/Packet';
|
||||
export declare function ParseCreateStringTable(stream: BitStream): CreateStringTablePacket;
|
||||
export declare function EncodeCreateStringTable(packet: CreateStringTablePacket, stream: BitStream): void;
|
||||
89
build/Parser/Packet/CreateStringTable.js
Normal file
89
build/Parser/Packet/CreateStringTable.js
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const bit_buffer_1 = require("bit-buffer");
|
||||
const Math_1 = require("../../Math");
|
||||
const readBitVar_1 = require("../readBitVar");
|
||||
const snappyjs_1 = require("snappyjs");
|
||||
const StringTableParser_1 = require("../StringTableParser");
|
||||
function ParseCreateStringTable(stream) {
|
||||
const tableName = stream.readASCIIString();
|
||||
const maxEntries = stream.readUint16();
|
||||
const encodeBits = Math_1.logBase2(maxEntries);
|
||||
const entityCount = stream.readBits(encodeBits + 1);
|
||||
const bitCount = readBitVar_1.readVarInt(stream);
|
||||
let userDataSize = 0;
|
||||
let userDataSizeBits = 0;
|
||||
// userdata fixed size
|
||||
if (stream.readBoolean()) {
|
||||
userDataSize = stream.readBits(12);
|
||||
userDataSizeBits = stream.readBits(4);
|
||||
}
|
||||
const isCompressed = stream.readBoolean();
|
||||
let data = stream.readBitStream(bitCount);
|
||||
if (isCompressed) {
|
||||
const decompressedByteSize = data.readUint32();
|
||||
const compressedByteSize = data.readUint32();
|
||||
const magic = data.readASCIIString(4);
|
||||
const compressedData = data.readArrayBuffer(compressedByteSize - 4); // 4 magic bytes
|
||||
if (magic !== 'SNAP') {
|
||||
throw new Error('Unknown compressed stringtable format');
|
||||
}
|
||||
const decompressedData = snappyjs_1.uncompress(compressedData);
|
||||
if (decompressedData.byteLength !== decompressedByteSize) {
|
||||
throw new Error('Incorrect length of decompressed stringtable');
|
||||
}
|
||||
data = new bit_buffer_1.BitStream(decompressedData.buffer);
|
||||
}
|
||||
const table = {
|
||||
name: tableName,
|
||||
entries: [],
|
||||
maxEntries,
|
||||
fixedUserDataSize: userDataSize,
|
||||
fixedUserDataSizeBits: userDataSizeBits,
|
||||
compressed: isCompressed
|
||||
};
|
||||
// console.log(`${tableName} ${entityCount} ${bitCount}`);
|
||||
table.entries = StringTableParser_1.parseStringTableEntries(data, table, entityCount);
|
||||
return {
|
||||
packetType: 'createStringTable',
|
||||
table
|
||||
};
|
||||
}
|
||||
exports.ParseCreateStringTable = ParseCreateStringTable;
|
||||
function EncodeCreateStringTable(packet, stream) {
|
||||
stream.writeASCIIString(packet.table.name);
|
||||
stream.writeUint16(packet.table.maxEntries);
|
||||
const encodeBits = Math_1.logBase2(packet.table.maxEntries);
|
||||
const numEntries = packet.table.entries.filter((entry) => entry).length;
|
||||
stream.writeBits(numEntries, encodeBits + 1);
|
||||
let entryData = new bit_buffer_1.BitStream(new ArrayBuffer(StringTableParser_1.guessStringTableEntryLength(packet.table, packet.table.entries)));
|
||||
StringTableParser_1.encodeStringTableEntries(entryData, packet.table, packet.table.entries);
|
||||
if (packet.table.compressed) {
|
||||
const decompressedByteLength = Math.ceil(entryData.length / 8);
|
||||
entryData.index = 0;
|
||||
const compressedData = snappyjs_1.compress(entryData.readArrayBuffer(decompressedByteLength));
|
||||
entryData = new bit_buffer_1.BitStream(new ArrayBuffer(decompressedByteLength));
|
||||
entryData.writeUint32(decompressedByteLength);
|
||||
entryData.writeUint32(compressedData.byteLength + 4); // 4 magic bytes
|
||||
entryData.writeASCIIString('SNAP', 4);
|
||||
const typeForce = compressedData.buffer;
|
||||
entryData.writeArrayBuffer(typeForce);
|
||||
}
|
||||
const entryLength = entryData.index;
|
||||
entryData.index = 0;
|
||||
readBitVar_1.writeVarInt(entryLength, stream);
|
||||
if (packet.table.fixedUserDataSize || packet.table.fixedUserDataSizeBits) {
|
||||
stream.writeBoolean(true);
|
||||
stream.writeBits(packet.table.fixedUserDataSize || 0, 12);
|
||||
stream.writeBits(packet.table.fixedUserDataSizeBits || 0, 4);
|
||||
}
|
||||
else {
|
||||
stream.writeBoolean(false);
|
||||
}
|
||||
stream.writeBoolean(packet.table.compressed);
|
||||
if (entryLength) {
|
||||
stream.writeBitStream(entryData, entryLength);
|
||||
}
|
||||
}
|
||||
exports.EncodeCreateStringTable = EncodeCreateStringTable;
|
||||
//# sourceMappingURL=CreateStringTable.js.map
|
||||
1
build/Parser/Packet/CreateStringTable.js.map
Normal file
1
build/Parser/Packet/CreateStringTable.js.map
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"CreateStringTable.js","sourceRoot":"","sources":["../../../src/Parser/Packet/CreateStringTable.ts"],"names":[],"mappings":"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"}
|
||||
5
build/Parser/Packet/GameEvent.d.ts
vendored
Normal file
5
build/Parser/Packet/GameEvent.d.ts
vendored
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
import { BitStream } from 'bit-buffer';
|
||||
import { GameEventPacket } from '../../Data/Packet';
|
||||
import { ParserState } from '../../Data/ParserState';
|
||||
export declare function ParseGameEvent(stream: BitStream, state: ParserState): GameEventPacket;
|
||||
export declare function EncodeGameEvent(packet: GameEventPacket, stream: BitStream, state: ParserState): void;
|
||||
116
build/Parser/Packet/GameEvent.js
Normal file
116
build/Parser/Packet/GameEvent.js
Normal file
|
|
@ -0,0 +1,116 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const GameEvent_1 = require("../../Data/GameEvent");
|
||||
function parseGameEvent(definition, stream) {
|
||||
const values = {};
|
||||
for (const entry of definition.entries) {
|
||||
const value = getGameEventValue(stream, entry);
|
||||
if (value !== null) {
|
||||
values[entry.name] = value;
|
||||
}
|
||||
}
|
||||
const name = definition.name;
|
||||
return {
|
||||
name,
|
||||
values
|
||||
};
|
||||
}
|
||||
function encodeGameEvent(event, definition, stream) {
|
||||
for (const entry of definition.entries) {
|
||||
const value = event.values[entry.name];
|
||||
if (typeof value === 'undefined') {
|
||||
throw new Error('empty event value');
|
||||
}
|
||||
else {
|
||||
encodeGameEventValue(value, stream, entry);
|
||||
}
|
||||
}
|
||||
}
|
||||
function getGameEventValue(stream, entry) {
|
||||
switch (entry.type) {
|
||||
case GameEvent_1.GameEventValueType.STRING:
|
||||
return stream.readUTF8String();
|
||||
case GameEvent_1.GameEventValueType.FLOAT:
|
||||
return stream.readFloat32();
|
||||
case GameEvent_1.GameEventValueType.LONG:
|
||||
return stream.readUint32();
|
||||
case GameEvent_1.GameEventValueType.SHORT:
|
||||
return stream.readUint16();
|
||||
case GameEvent_1.GameEventValueType.BYTE:
|
||||
return stream.readUint8();
|
||||
case GameEvent_1.GameEventValueType.BOOLEAN:
|
||||
return stream.readBoolean();
|
||||
case GameEvent_1.GameEventValueType.LOCAL:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
function encodeGameEventValue(value, stream, entry) {
|
||||
switch (entry.type) {
|
||||
case GameEvent_1.GameEventValueType.STRING:
|
||||
if (typeof value !== 'string') {
|
||||
throw new Error(`Invalid value for game event, expected string got ${typeof value}`);
|
||||
}
|
||||
return stream.writeASCIIString(value);
|
||||
case GameEvent_1.GameEventValueType.FLOAT:
|
||||
if (typeof value !== 'number') {
|
||||
throw new Error(`Invalid value for game event, expected number got ${typeof value}`);
|
||||
}
|
||||
return stream.writeFloat32(value);
|
||||
case GameEvent_1.GameEventValueType.LONG:
|
||||
if (typeof value !== 'number') {
|
||||
throw new Error(`Invalid value for game event, expected number got ${typeof value}`);
|
||||
}
|
||||
return stream.writeUint32(value);
|
||||
case GameEvent_1.GameEventValueType.SHORT:
|
||||
if (typeof value !== 'number') {
|
||||
throw new Error(`Invalid value for game event, expected number got ${typeof value}`);
|
||||
}
|
||||
return stream.writeUint16(value);
|
||||
case GameEvent_1.GameEventValueType.BYTE:
|
||||
if (typeof value !== 'number') {
|
||||
throw new Error(`Invalid value for game event, expected number got ${typeof value}`);
|
||||
}
|
||||
return stream.writeUint8(value);
|
||||
case GameEvent_1.GameEventValueType.BOOLEAN:
|
||||
if (typeof value !== 'boolean') {
|
||||
throw new Error(`Invalid value for game event, expected boolean got ${typeof value}`);
|
||||
}
|
||||
return stream.writeBoolean(value);
|
||||
}
|
||||
}
|
||||
function ParseGameEvent(stream, state) {
|
||||
const length = stream.readBits(11);
|
||||
const eventData = stream.readBitStream(length);
|
||||
const eventType = eventData.readBits(9);
|
||||
const definition = state.eventDefinitions.get(eventType);
|
||||
if (!definition) {
|
||||
throw new Error(`Unknown game event type ${eventType}`);
|
||||
}
|
||||
const event = parseGameEvent(definition, eventData);
|
||||
return {
|
||||
packetType: 'gameEvent',
|
||||
event: event
|
||||
};
|
||||
}
|
||||
exports.ParseGameEvent = ParseGameEvent;
|
||||
function EncodeGameEvent(packet, stream, state) {
|
||||
const lengthStart = stream.index;
|
||||
stream.index += 11;
|
||||
const eventId = state.eventDefinitionTypes.get(packet.event.name);
|
||||
if (typeof eventId === 'undefined') {
|
||||
throw new Error(`Unknown game event type ${packet.event.name}`);
|
||||
}
|
||||
const eventDataStart = stream.index;
|
||||
stream.writeBits(eventId, 9);
|
||||
const definition = state.eventDefinitions.get(eventId);
|
||||
if (typeof definition === 'undefined') {
|
||||
throw new Error(`Unknown game event type ${packet.event.name}`);
|
||||
}
|
||||
encodeGameEvent(packet.event, definition, stream);
|
||||
const eventDataEnd = stream.index;
|
||||
stream.index = lengthStart;
|
||||
stream.writeBits(eventDataEnd - eventDataStart, 11);
|
||||
stream.index = eventDataEnd;
|
||||
}
|
||||
exports.EncodeGameEvent = EncodeGameEvent;
|
||||
//# sourceMappingURL=GameEvent.js.map
|
||||
1
build/Parser/Packet/GameEvent.js.map
Normal file
1
build/Parser/Packet/GameEvent.js.map
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"GameEvent.js","sourceRoot":"","sources":["../../../src/Parser/Packet/GameEvent.ts"],"names":[],"mappings":"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"}
|
||||
4
build/Parser/Packet/GameEventList.d.ts
vendored
Normal file
4
build/Parser/Packet/GameEventList.d.ts
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
import { BitStream } from 'bit-buffer';
|
||||
import { GameEventListPacket } from '../../Data/Packet';
|
||||
export declare function ParseGameEventList(stream: BitStream): GameEventListPacket;
|
||||
export declare function EncodeGameEventList(packet: GameEventListPacket, stream: BitStream): void;
|
||||
54
build/Parser/Packet/GameEventList.js
Normal file
54
build/Parser/Packet/GameEventList.js
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
function ParseGameEventList(stream) {
|
||||
// list of game events and parameters
|
||||
const numEvents = stream.readBits(9);
|
||||
const length = stream.readBits(20);
|
||||
const listData = stream.readBitStream(length);
|
||||
const eventList = new Map();
|
||||
for (let i = 0; i < numEvents; i++) {
|
||||
const id = listData.readBits(9);
|
||||
const name = listData.readASCIIString();
|
||||
let type = listData.readBits(3);
|
||||
const entries = [];
|
||||
while (type !== 0) {
|
||||
entries.push({
|
||||
type,
|
||||
name: listData.readASCIIString()
|
||||
});
|
||||
type = listData.readBits(3);
|
||||
}
|
||||
eventList.set(id, {
|
||||
id,
|
||||
name,
|
||||
entries
|
||||
});
|
||||
}
|
||||
return {
|
||||
packetType: 'gameEventList',
|
||||
eventList
|
||||
};
|
||||
}
|
||||
exports.ParseGameEventList = ParseGameEventList;
|
||||
function EncodeGameEventList(packet, stream) {
|
||||
const definitions = Array.from(packet.eventList.values());
|
||||
stream.writeBits(definitions.length, 9);
|
||||
const lengthStart = stream.index;
|
||||
stream.index += 20;
|
||||
const eventListStart = stream.index;
|
||||
for (const definition of definitions) {
|
||||
stream.writeBits(definition.id, 9);
|
||||
stream.writeASCIIString(definition.name);
|
||||
for (const entry of definition.entries) {
|
||||
stream.writeBits(entry.type, 3);
|
||||
stream.writeASCIIString(entry.name);
|
||||
}
|
||||
stream.writeBits(0, 3);
|
||||
}
|
||||
const eventListEnd = stream.index;
|
||||
stream.index = lengthStart;
|
||||
stream.writeBits(eventListEnd - eventListStart, 20);
|
||||
stream.index = eventListEnd;
|
||||
}
|
||||
exports.EncodeGameEventList = EncodeGameEventList;
|
||||
//# sourceMappingURL=GameEventList.js.map
|
||||
1
build/Parser/Packet/GameEventList.js.map
Normal file
1
build/Parser/Packet/GameEventList.js.map
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"GameEventList.js","sourceRoot":"","sources":["../../../src/Parser/Packet/GameEventList.ts"],"names":[],"mappings":";;AAKA,SAAgB,kBAAkB,CAAC,MAAiB;IACnD,qCAAqC;IACrC,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAErC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAoD,IAAI,GAAG,EAAE,CAAC;IAC7E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;QACnC,MAAM,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe,EAAuB,CAAC;QAC7D,IAAI,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,OAAO,GAAqB,EAAE,CAAC;QACrC,OAAO,IAAI,KAAK,CAAC,EAAE;YAClB,OAAO,CAAC,IAAI,CAAC;gBACZ,IAAI;gBACJ,IAAI,EAAE,QAAQ,CAAC,eAAe,EAAE;aAChC,CAAC,CAAC;YACH,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;SAC5B;QACD,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE;YACjB,EAAE;YACF,IAAI;YACJ,OAAO;SACP,CAAC,CAAC;KACH;IAED,OAAO;QACN,UAAU,EAAE,eAAe;QAC3B,SAAS;KACT,CAAC;AACH,CAAC;AA9BD,gDA8BC;AAED,SAAgB,mBAAmB,CAAC,MAA2B,EAAE,MAAiB;IACjF,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1D,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAExC,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;IACjC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;IAEnB,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC;IAEpC,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;QACrC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACzC,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,OAAO,EAAE;YACvC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAChC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SACpC;QACD,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;KACvB;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC;IAElC,MAAM,CAAC,KAAK,GAAG,WAAW,CAAC;IAC3B,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,cAAc,EAAE,EAAE,CAAC,CAAC;IAEpD,MAAM,CAAC,KAAK,GAAG,YAAY,CAAC;AAC7B,CAAC;AAzBD,kDAyBC"}
|
||||
5
build/Parser/Packet/PacketEntities.d.ts
vendored
Normal file
5
build/Parser/Packet/PacketEntities.d.ts
vendored
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
import { BitStream } from 'bit-buffer';
|
||||
import { PacketEntitiesPacket } from '../../Data/Packet';
|
||||
import { ParserState } from '../../Data/ParserState';
|
||||
export declare function ParsePacketEntities(stream: BitStream, state: ParserState, skip?: boolean): PacketEntitiesPacket;
|
||||
export declare function EncodePacketEntities(packet: PacketEntitiesPacket, stream: BitStream, state: ParserState): void;
|
||||
214
build/Parser/Packet/PacketEntities.js
Normal file
214
build/Parser/Packet/PacketEntities.js
Normal file
|
|
@ -0,0 +1,214 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const PacketEntity_1 = require("../../Data/PacketEntity");
|
||||
const ParserState_1 = require("../../Data/ParserState");
|
||||
const EntityDecoder_1 = require("../EntityDecoder");
|
||||
const readBitVar_1 = require("../readBitVar");
|
||||
const pvsMap = new Map([
|
||||
[0, PacketEntity_1.PVS.PRESERVE],
|
||||
[2, PacketEntity_1.PVS.ENTER],
|
||||
[1, PacketEntity_1.PVS.LEAVE],
|
||||
[3, PacketEntity_1.PVS.LEAVE + PacketEntity_1.PVS.DELETE]
|
||||
]);
|
||||
const pvsReverseMap = new Map([
|
||||
[PacketEntity_1.PVS.PRESERVE, 0],
|
||||
[PacketEntity_1.PVS.ENTER, 2],
|
||||
[PacketEntity_1.PVS.LEAVE, 1],
|
||||
[PacketEntity_1.PVS.LEAVE + PacketEntity_1.PVS.DELETE, 3]
|
||||
]);
|
||||
function readPVSType(stream) {
|
||||
const pvs = stream.readBits(2);
|
||||
return pvsMap.get(pvs);
|
||||
}
|
||||
function writePVSType(pvs, stream) {
|
||||
const raw = pvsReverseMap.get(pvs);
|
||||
if (typeof raw === 'undefined') {
|
||||
throw new Error(`Unknown pvs ${pvs}`);
|
||||
}
|
||||
stream.writeBits(raw, 2);
|
||||
}
|
||||
function readEnterPVS(stream, entityId, state, baseLineIndex) {
|
||||
// https://github.com/PazerOP/DemoLib/blob/5f9467650f942a4a70f9ec689eadcd3e0a051956/TF2Net/NetMessages/NetPacketEntitiesMessage.cs#L198
|
||||
const classBits = ParserState_1.getClassBits(state);
|
||||
const serverClass = state.serverClasses[stream.readBits(classBits)];
|
||||
const serial = stream.readBits(10); // unused serial number
|
||||
const sendTable = ParserState_1.getSendTable(state, serverClass.dataTable);
|
||||
const instanceBaseline = state.instanceBaselines[baseLineIndex].get(entityId);
|
||||
const entity = new PacketEntity_1.PacketEntity(serverClass, entityId, PacketEntity_1.PVS.ENTER);
|
||||
entity.serialNumber = serial;
|
||||
if (instanceBaseline) {
|
||||
entity.props = instanceBaseline.map((prop) => prop.clone());
|
||||
return entity;
|
||||
}
|
||||
else {
|
||||
const staticBaseLine = state.staticBaseLines.get(serverClass.id);
|
||||
if (staticBaseLine) {
|
||||
let parsedBaseLine = state.staticBaselineCache.get(serverClass.id);
|
||||
if (!parsedBaseLine) {
|
||||
staticBaseLine.index = 0;
|
||||
parsedBaseLine = EntityDecoder_1.getEntityUpdate(sendTable, staticBaseLine);
|
||||
state.staticBaselineCache.set(serverClass.id, parsedBaseLine);
|
||||
}
|
||||
entity.props = parsedBaseLine.map((prop) => prop.clone());
|
||||
// entity.applyPropUpdate(parsedBaseLine);
|
||||
// if (staticBaseLine.bitsLeft > 7) {
|
||||
// console.log(staticBaseLine.length, staticBaseLine.index);
|
||||
// throw new Error('Unexpected data left at the end of staticBaseline, ' + staticBaseLine.bitsLeft + ' bits left');
|
||||
// }
|
||||
}
|
||||
return entity;
|
||||
}
|
||||
}
|
||||
function writeEnterPVS(entity, stream, state, baseLineIndex) {
|
||||
const serverClassId = state.serverClasses.findIndex((existingServerClass) => existingServerClass && entity.serverClass.id === existingServerClass.id);
|
||||
if (serverClassId === -1) {
|
||||
throw new Error(`Unknown server class ${entity.serverClass.name}(${entity.serverClass.id})`);
|
||||
}
|
||||
// get the instance from the match, not the entity
|
||||
const serverClass = state.serverClasses[serverClassId];
|
||||
stream.writeBits(serverClassId, ParserState_1.getClassBits(state));
|
||||
stream.writeBits(entity.serialNumber || 0, 10);
|
||||
const sendTable = ParserState_1.getSendTable(state, serverClass.dataTable);
|
||||
let instanceBaseLine = state.instanceBaselines[baseLineIndex].get(entity.entityIndex);
|
||||
if (!instanceBaseLine) {
|
||||
const staticBaseLine = state.staticBaseLines.get(serverClass.id);
|
||||
if (staticBaseLine) {
|
||||
instanceBaseLine = state.staticBaselineCache.get(serverClass.id);
|
||||
if (!instanceBaseLine) {
|
||||
staticBaseLine.index = 0;
|
||||
instanceBaseLine = EntityDecoder_1.getEntityUpdate(sendTable, staticBaseLine);
|
||||
state.staticBaselineCache.set(serverClass.id, instanceBaseLine);
|
||||
}
|
||||
}
|
||||
}
|
||||
const propsToEncode = instanceBaseLine ? entity.diffFromBaseLine(instanceBaseLine) : entity.props;
|
||||
EntityDecoder_1.encodeEntityUpdate(propsToEncode, sendTable, stream);
|
||||
}
|
||||
function getPacketEntityForExisting(entityId, state, pvs) {
|
||||
const serverClass = state.entityClasses.get(entityId);
|
||||
if (!serverClass) {
|
||||
throw new Error(`"unknown entity ${entityId} for ${PacketEntity_1.PVS[pvs]}(${pvs})`);
|
||||
}
|
||||
return new PacketEntity_1.PacketEntity(serverClass, entityId, pvs);
|
||||
}
|
||||
function ParsePacketEntities(stream, state, skip = false) {
|
||||
// https://github.com/skadistats/smoke/blob/master/smoke/replay/handler/svc_packetentities.pyx
|
||||
// https://github.com/StatsHelix/demoinfo/blob/3d28ea917c3d44d987b98bb8f976f1a3fcc19821/DemoInfo/DP/Handler/PacketEntitesHandler.cs
|
||||
// https://github.com/StatsHelix/demoinfo/blob/3d28ea917c3d44d987b98bb8f976f1a3fcc19821/DemoInfo/DP/Entity.cs
|
||||
// https://github.com/PazerOP/DemoLib/blob/5f9467650f942a4a70f9ec689eadcd3e0a051956/TF2Net/NetMessages/NetPacketEntitiesMessage.cs
|
||||
const maxEntries = stream.readBits(11);
|
||||
const isDelta = stream.readBoolean();
|
||||
const delta = (isDelta) ? stream.readInt32() : 0;
|
||||
const baseLine = stream.readBits(1);
|
||||
const updatedEntries = stream.readBits(11);
|
||||
const length = stream.readBits(20);
|
||||
const updatedBaseLine = stream.readBoolean();
|
||||
const start = stream.index;
|
||||
const end = stream.index + length;
|
||||
let entityId = -1;
|
||||
const receivedEntities = [];
|
||||
const removedEntityIds = [];
|
||||
if (!skip) {
|
||||
if (updatedBaseLine) {
|
||||
state.instanceBaselines[1 - baseLine] = new Map(state.instanceBaselines[baseLine]);
|
||||
// state.instanceBaselines[baseLine] = new Map();
|
||||
}
|
||||
for (let i = 0; i < updatedEntries; i++) {
|
||||
const diff = readBitVar_1.readUBitVar(stream);
|
||||
entityId += 1 + diff;
|
||||
const pvs = readPVSType(stream);
|
||||
if (pvs === PacketEntity_1.PVS.ENTER) {
|
||||
const packetEntity = readEnterPVS(stream, entityId, state, baseLine);
|
||||
const sendTable = ParserState_1.getSendTable(state, packetEntity.serverClass.dataTable);
|
||||
const updatedProps = EntityDecoder_1.getEntityUpdate(sendTable, stream);
|
||||
packetEntity.applyPropUpdate(updatedProps);
|
||||
if (updatedBaseLine) {
|
||||
state.instanceBaselines[1 - baseLine].set(entityId, packetEntity.clone().props);
|
||||
}
|
||||
packetEntity.inPVS = true;
|
||||
receivedEntities.push(packetEntity);
|
||||
}
|
||||
else if (pvs === PacketEntity_1.PVS.PRESERVE) {
|
||||
const packetEntity = getPacketEntityForExisting(entityId, state, pvs);
|
||||
const sendTable = state.sendTables.get(packetEntity.serverClass.dataTable);
|
||||
if (!sendTable) {
|
||||
throw new Error(`Unknown sendTable ${packetEntity.serverClass.dataTable}`);
|
||||
}
|
||||
const updatedProps = EntityDecoder_1.getEntityUpdate(sendTable, stream);
|
||||
packetEntity.applyPropUpdate(updatedProps);
|
||||
receivedEntities.push(packetEntity);
|
||||
}
|
||||
else if (state.entityClasses.has(entityId)) {
|
||||
const packetEntity = getPacketEntityForExisting(entityId, state, pvs);
|
||||
receivedEntities.push(packetEntity);
|
||||
}
|
||||
else {
|
||||
// throw new Error(`No existing entity to update with id ${entityId}`);
|
||||
}
|
||||
}
|
||||
if (isDelta) {
|
||||
while (stream.readBoolean()) {
|
||||
removedEntityIds.push(stream.readBits(11));
|
||||
}
|
||||
}
|
||||
}
|
||||
stream.index = end;
|
||||
return {
|
||||
packetType: 'packetEntities',
|
||||
entities: receivedEntities,
|
||||
removedEntities: removedEntityIds,
|
||||
maxEntries,
|
||||
delta,
|
||||
baseLine,
|
||||
updatedBaseLine
|
||||
};
|
||||
}
|
||||
exports.ParsePacketEntities = ParsePacketEntities;
|
||||
function EncodePacketEntities(packet, stream, state) {
|
||||
stream.writeBits(packet.maxEntries, 11);
|
||||
const isDelta = packet.delta > 0;
|
||||
stream.writeBoolean(isDelta);
|
||||
if (isDelta) {
|
||||
stream.writeInt32(packet.delta);
|
||||
}
|
||||
stream.writeBits(packet.baseLine, 1);
|
||||
stream.writeBits(packet.entities.length, 11);
|
||||
const lengthStart = stream.index;
|
||||
stream.index += 20;
|
||||
stream.writeBoolean(packet.updatedBaseLine);
|
||||
const packetDataStart = stream.index;
|
||||
let lastEntityId = -1;
|
||||
if (packet.updatedBaseLine) {
|
||||
state.instanceBaselines[1 - packet.baseLine] = new Map(state.instanceBaselines[packet.baseLine]);
|
||||
// state.instanceBaselines[baseLine] = new Map();
|
||||
}
|
||||
for (const entity of packet.entities) {
|
||||
const diff = entity.entityIndex - lastEntityId;
|
||||
lastEntityId = entity.entityIndex;
|
||||
readBitVar_1.writeBitVar(diff - 1, stream);
|
||||
writePVSType(entity.pvs, stream);
|
||||
if (entity.pvs === PacketEntity_1.PVS.ENTER) {
|
||||
if (packet.updatedBaseLine) {
|
||||
state.instanceBaselines[1 - packet.baseLine].set(entity.entityIndex, entity.clone().props);
|
||||
}
|
||||
writeEnterPVS(entity, stream, state, packet.baseLine);
|
||||
}
|
||||
else if (entity.pvs === PacketEntity_1.PVS.PRESERVE) {
|
||||
const sendTable = ParserState_1.getSendTable(state, entity.serverClass.dataTable);
|
||||
EntityDecoder_1.encodeEntityUpdate(entity.props, sendTable, stream);
|
||||
}
|
||||
}
|
||||
if (isDelta) {
|
||||
for (const removedEntity of packet.removedEntities) {
|
||||
stream.writeBoolean(true);
|
||||
stream.writeBits(removedEntity, 11);
|
||||
}
|
||||
stream.writeBoolean(false);
|
||||
}
|
||||
const packetDataEnd = stream.index;
|
||||
stream.index = lengthStart;
|
||||
stream.writeBits(packetDataEnd - packetDataStart, 20);
|
||||
stream.index = packetDataEnd;
|
||||
}
|
||||
exports.EncodePacketEntities = EncodePacketEntities;
|
||||
//# sourceMappingURL=PacketEntities.js.map
|
||||
1
build/Parser/Packet/PacketEntities.js.map
Normal file
1
build/Parser/Packet/PacketEntities.js.map
Normal file
File diff suppressed because one or more lines are too long
4
build/Parser/Packet/ParseSounds.d.ts
vendored
Normal file
4
build/Parser/Packet/ParseSounds.d.ts
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
import { BitStream } from 'bit-buffer';
|
||||
import { ParseSoundsPacket } from '../../Data/Packet';
|
||||
export declare function ParseParseSounds(stream: BitStream): ParseSoundsPacket;
|
||||
export declare function EncodeParseSounds(packet: ParseSoundsPacket, stream: BitStream): void;
|
||||
31
build/Parser/Packet/ParseSounds.js
Normal file
31
build/Parser/Packet/ParseSounds.js
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
function ParseParseSounds(stream) {
|
||||
const reliable = stream.readBoolean();
|
||||
const num = (reliable) ? 1 : stream.readUint8();
|
||||
const length = (reliable) ? stream.readUint8() : stream.readUint16();
|
||||
const data = stream.readBitStream(length);
|
||||
return {
|
||||
packetType: 'parseSounds',
|
||||
reliable,
|
||||
num,
|
||||
length,
|
||||
data
|
||||
};
|
||||
}
|
||||
exports.ParseParseSounds = ParseParseSounds;
|
||||
function EncodeParseSounds(packet, stream) {
|
||||
stream.writeBoolean(packet.reliable);
|
||||
if (packet.reliable) {
|
||||
stream.writeUint8(packet.length);
|
||||
}
|
||||
else {
|
||||
stream.writeUint8(packet.num);
|
||||
stream.writeUint16(packet.length);
|
||||
}
|
||||
packet.data.index = 0;
|
||||
stream.writeBitStream(packet.data, packet.length);
|
||||
packet.data.index = 0;
|
||||
}
|
||||
exports.EncodeParseSounds = EncodeParseSounds;
|
||||
//# sourceMappingURL=ParseSounds.js.map
|
||||
1
build/Parser/Packet/ParseSounds.js.map
Normal file
1
build/Parser/Packet/ParseSounds.js.map
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"ParseSounds.js","sourceRoot":"","sources":["../../../src/Parser/Packet/ParseSounds.ts"],"names":[],"mappings":";;AAGA,SAAgB,gBAAgB,CAAC,MAAiB;IACjD,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IACtC,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;IAChD,MAAM,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;IACrE,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAE1C,OAAO;QACN,UAAU,EAAE,aAAa;QACzB,QAAQ;QACR,GAAG;QACH,MAAM;QACN,IAAI;KACJ,CAAC;AACH,CAAC;AAbD,4CAaC;AAED,SAAgB,iBAAiB,CAAC,MAAyB,EAAE,MAAiB;IAC7E,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACrC,IAAI,MAAM,CAAC,QAAQ,EAAE;QACpB,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;KACjC;SAAM;QACN,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC9B,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;KAClC;IAED,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACtB,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AACvB,CAAC;AAZD,8CAYC"}
|
||||
10
build/Parser/Packet/Parser.d.ts
vendored
Normal file
10
build/Parser/Packet/Parser.d.ts
vendored
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
import { BitStream } from 'bit-buffer';
|
||||
import { Packet, VoidPacket } from '../../Data/Packet';
|
||||
import { ParserState } from '../../Data/ParserState';
|
||||
export declare type Parser<P extends Packet> = (stream: BitStream, state?: ParserState, skip?: boolean) => P;
|
||||
export declare type Encoder<P extends Packet> = (packet: P, stream: BitStream, state?: ParserState) => void;
|
||||
export interface PacketHandler<P extends Packet> {
|
||||
parser: Parser<P>;
|
||||
encoder: Encoder<P>;
|
||||
}
|
||||
export declare const voidEncoder: Encoder<VoidPacket>;
|
||||
8
build/Parser/Packet/Parser.js
Normal file
8
build/Parser/Packet/Parser.js
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.voidEncoder = () => {
|
||||
return {
|
||||
type: 'void'
|
||||
};
|
||||
};
|
||||
//# sourceMappingURL=Parser.js.map
|
||||
1
build/Parser/Packet/Parser.js.map
Normal file
1
build/Parser/Packet/Parser.js.map
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"Parser.js","sourceRoot":"","sources":["../../../src/Parser/Packet/Parser.ts"],"names":[],"mappings":";;AAYa,QAAA,WAAW,GAAwB,GAAG,EAAE;IACpD,OAAO;QACN,IAAI,EAAE,MAAM;KACZ,CAAC;AACH,CAAC,CAAC"}
|
||||
7
build/Parser/Packet/ParserGenerator.d.ts
vendored
Normal file
7
build/Parser/Packet/ParserGenerator.d.ts
vendored
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
import { Packet, PacketMapType, PacketType } from '../../Data/Packet';
|
||||
import { UserMessagePacketType } from '../../Data/UserMessage';
|
||||
import { PacketHandler } from './Parser';
|
||||
export interface NamedPacketHandler<P extends Packet, N extends PacketType | UserMessagePacketType> extends PacketHandler<P> {
|
||||
name: N;
|
||||
}
|
||||
export declare function make<T extends PacketType | UserMessagePacketType>(name: T, definition: string, nameKey?: string, extraData?: any): NamedPacketHandler<PacketMapType[T], T>;
|
||||
96
build/Parser/Packet/ParserGenerator.js
Normal file
96
build/Parser/Packet/ParserGenerator.js
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
function make(name, definition, nameKey = 'packetType', extraData = {}) {
|
||||
const parts = definition.split('}');
|
||||
const items = parts.map((part) => {
|
||||
return part.split('{');
|
||||
}).filter((part) => part[0]);
|
||||
const parser = (stream) => {
|
||||
const result = Object.assign({}, extraData);
|
||||
result[nameKey] = name;
|
||||
try {
|
||||
for (const group of items) {
|
||||
const value = readItem(stream, group[1], result);
|
||||
if (group[0] !== '_') {
|
||||
result[group[0]] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
throw new Error('Failed reading pattern ' + definition + '. ' + e);
|
||||
}
|
||||
return result;
|
||||
};
|
||||
const encoder = (packet, stream) => {
|
||||
for (const group of items) {
|
||||
writeItem(stream, group[1], packet, packet[group[0]]);
|
||||
}
|
||||
};
|
||||
return { parser, encoder, name };
|
||||
}
|
||||
exports.make = make;
|
||||
function readItem(stream, description, data) {
|
||||
if (description[0] === 'b') {
|
||||
return stream.readBoolean();
|
||||
}
|
||||
else if (description[0] === 's') {
|
||||
if (description.length === 1) {
|
||||
return stream.readUTF8String();
|
||||
}
|
||||
else {
|
||||
const length = parseInt(description.substr(1), 10);
|
||||
return stream.readASCIIString(length);
|
||||
}
|
||||
}
|
||||
else if (description === 'f32') {
|
||||
return stream.readFloat32();
|
||||
}
|
||||
else if (description[0] === 'u') {
|
||||
const length = parseInt(description.substr(1), 10);
|
||||
return stream.readBits(length);
|
||||
}
|
||||
else if (description[0] === '$' && description.substr(description.length - 2) === '*8') {
|
||||
const variable = description.substr(1, description.length - 3);
|
||||
return stream.readBitStream(data[variable] * 8);
|
||||
}
|
||||
else if (description[0] === '$') {
|
||||
const variable = description.substr(1);
|
||||
return stream.readBitStream(data[variable]);
|
||||
}
|
||||
else {
|
||||
return stream.readBits(parseInt(description, 10), true);
|
||||
}
|
||||
}
|
||||
function writeItem(stream, description, data, value) {
|
||||
if (description[0] === 'b') {
|
||||
return stream.writeBoolean(value);
|
||||
}
|
||||
else if (description[0] === 's') {
|
||||
if (description.length === 1) {
|
||||
return stream.writeUTF8String(value);
|
||||
}
|
||||
else {
|
||||
const length = parseInt(description.substr(1), 10);
|
||||
return stream.writeUTF8String(value, length);
|
||||
}
|
||||
}
|
||||
else if (description === 'f32') {
|
||||
return stream.writeFloat32(value);
|
||||
}
|
||||
else if (description[0] === 'u') {
|
||||
const length = parseInt(description.substr(1), 10);
|
||||
return stream.writeBits(value, length);
|
||||
}
|
||||
else if (description[0] === '$' && description.substr(description.length - 2) === '*8') {
|
||||
const variable = description.substr(1, description.length - 3);
|
||||
return stream.writeBitStream(value, data[variable] * 8);
|
||||
}
|
||||
else if (description[0] === '$') {
|
||||
const variable = description.substr(1);
|
||||
return stream.writeBitStream(value, data[variable]);
|
||||
}
|
||||
else {
|
||||
return stream.writeBits(value, parseInt(description, 10));
|
||||
}
|
||||
}
|
||||
//# sourceMappingURL=ParserGenerator.js.map
|
||||
1
build/Parser/Packet/ParserGenerator.js.map
Normal file
1
build/Parser/Packet/ParserGenerator.js.map
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"ParserGenerator.js","sourceRoot":"","sources":["../../../src/Parser/Packet/ParserGenerator.ts"],"names":[],"mappings":"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"}
|
||||
4
build/Parser/Packet/SetConVar.d.ts
vendored
Normal file
4
build/Parser/Packet/SetConVar.d.ts
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
import { BitStream } from 'bit-buffer';
|
||||
import { SetConVarPacket } from '../../Data/Packet';
|
||||
export declare function ParseSetConVar(stream: BitStream): SetConVarPacket;
|
||||
export declare function EncodeSetConVar(packet: SetConVarPacket, stream: BitStream): void;
|
||||
25
build/Parser/Packet/SetConVar.js
Normal file
25
build/Parser/Packet/SetConVar.js
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
function ParseSetConVar(stream) {
|
||||
const count = stream.readUint8();
|
||||
const vars = new Map();
|
||||
for (let i = 0; i < count; i++) {
|
||||
const key = stream.readUTF8String();
|
||||
const value = stream.readUTF8String();
|
||||
vars.set(key, value);
|
||||
}
|
||||
return {
|
||||
packetType: 'setConVar',
|
||||
vars
|
||||
};
|
||||
}
|
||||
exports.ParseSetConVar = ParseSetConVar;
|
||||
function EncodeSetConVar(packet, stream) {
|
||||
stream.writeUint8(packet.vars.size);
|
||||
for (const [key, value] of packet.vars.entries()) {
|
||||
stream.writeUTF8String(key);
|
||||
stream.writeUTF8String(value);
|
||||
}
|
||||
}
|
||||
exports.EncodeSetConVar = EncodeSetConVar;
|
||||
//# sourceMappingURL=SetConVar.js.map
|
||||
1
build/Parser/Packet/SetConVar.js.map
Normal file
1
build/Parser/Packet/SetConVar.js.map
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"SetConVar.js","sourceRoot":"","sources":["../../../src/Parser/Packet/SetConVar.ts"],"names":[],"mappings":";;AAGA,SAAgB,cAAc,CAAC,MAAiB;IAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;IACjC,MAAM,IAAI,GAAwB,IAAI,GAAG,EAAE,CAAC;IAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;QAC/B,MAAM,GAAG,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;QACtC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;KACrB;IACD,OAAO;QACN,UAAU,EAAE,WAAW;QACvB,IAAI;KACJ,CAAC;AACH,CAAC;AAZD,wCAYC;AAED,SAAgB,eAAe,CAAC,MAAuB,EAAE,MAAiB;IACzE,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;QACjD,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;KAC9B;AACF,CAAC;AAND,0CAMC"}
|
||||
5
build/Parser/Packet/TempEntities.d.ts
vendored
Normal file
5
build/Parser/Packet/TempEntities.d.ts
vendored
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
import { BitStream } from 'bit-buffer';
|
||||
import { TempEntitiesPacket } from '../../Data/Packet';
|
||||
import { ParserState } from '../../Data/ParserState';
|
||||
export declare function ParseTempEntities(stream: BitStream, state: ParserState, skip?: boolean): TempEntitiesPacket;
|
||||
export declare function EncodeTempEntities(packet: TempEntitiesPacket, stream: BitStream, state: ParserState): void;
|
||||
78
build/Parser/Packet/TempEntities.js
Normal file
78
build/Parser/Packet/TempEntities.js
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const PacketEntity_1 = require("../../Data/PacketEntity");
|
||||
const ParserState_1 = require("../../Data/ParserState");
|
||||
const DynamicBitStream_1 = require("../../DynamicBitStream");
|
||||
const EntityDecoder_1 = require("../EntityDecoder");
|
||||
const readBitVar_1 = require("../readBitVar");
|
||||
function ParseTempEntities(stream, state, skip = false) {
|
||||
const entityCount = stream.readUint8();
|
||||
const length = readBitVar_1.readVarInt(stream);
|
||||
const entityData = stream.readBitStream(length);
|
||||
let entity = null;
|
||||
const entities = [];
|
||||
if (!skip) {
|
||||
for (let i = 0; i < entityCount; i++) {
|
||||
const delay = (entityData.readBoolean()) ? entityData.readUint8() / 100 : 0; // unused it seems
|
||||
if (entityData.readBoolean()) {
|
||||
const classId = entityData.readBits(ParserState_1.getClassBits(state));
|
||||
// no clue why the -1 but it works
|
||||
const serverClass = state.serverClasses[classId - 1];
|
||||
if (!serverClass) {
|
||||
throw new Error(`Unknown serverClass ${classId}`);
|
||||
}
|
||||
const sendTable = ParserState_1.getSendTable(state, serverClass.dataTable);
|
||||
entity = new PacketEntity_1.PacketEntity(serverClass, 0, PacketEntity_1.PVS.ENTER);
|
||||
entity.delay = delay;
|
||||
entity.props = EntityDecoder_1.getEntityUpdate(sendTable, entityData);
|
||||
entities.push(entity);
|
||||
}
|
||||
else {
|
||||
if (entity) {
|
||||
const sendTable = ParserState_1.getSendTable(state, entity.serverClass.dataTable);
|
||||
const updatedProps = EntityDecoder_1.getEntityUpdate(sendTable, entityData);
|
||||
entity = entity.clone();
|
||||
entity.applyPropUpdate(updatedProps);
|
||||
entities.push(entity);
|
||||
}
|
||||
else {
|
||||
throw new Error('no entity set to update');
|
||||
}
|
||||
}
|
||||
}
|
||||
if (entityData.bitsLeft > 8) {
|
||||
throw new Error(`unexpected content after TempEntities ${entityData.bitsLeft} bits`);
|
||||
}
|
||||
}
|
||||
return {
|
||||
packetType: 'tempEntities',
|
||||
entities
|
||||
};
|
||||
}
|
||||
exports.ParseTempEntities = ParseTempEntities;
|
||||
function EncodeTempEntities(packet, stream, state) {
|
||||
stream.writeUint8(packet.entities.length);
|
||||
const entityStream = new DynamicBitStream_1.DynamicBitStream();
|
||||
for (const entity of packet.entities) {
|
||||
if (entity.delay) {
|
||||
entityStream.writeBoolean(true);
|
||||
entityStream.writeUint8(Math.round(entity.delay * 100));
|
||||
}
|
||||
else {
|
||||
entityStream.writeBoolean(false);
|
||||
}
|
||||
entityStream.writeBoolean(true);
|
||||
const classId = state.serverClasses.findIndex((serverClass) => serverClass && serverClass.name === entity.serverClass.name) + 1;
|
||||
entityStream.writeBits(classId, ParserState_1.getClassBits(state));
|
||||
const sendTable = ParserState_1.getSendTable(state, entity.serverClass.dataTable);
|
||||
EntityDecoder_1.encodeEntityUpdate(entity.props, sendTable, entityStream);
|
||||
}
|
||||
const entityDataLength = entityStream.index;
|
||||
entityStream.index = 0;
|
||||
readBitVar_1.writeVarInt(entityDataLength, stream);
|
||||
if (entityDataLength > 0) {
|
||||
stream.writeBitStream(entityStream, entityDataLength);
|
||||
}
|
||||
}
|
||||
exports.EncodeTempEntities = EncodeTempEntities;
|
||||
//# sourceMappingURL=TempEntities.js.map
|
||||
1
build/Parser/Packet/TempEntities.js.map
Normal file
1
build/Parser/Packet/TempEntities.js.map
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"TempEntities.js","sourceRoot":"","sources":["../../../src/Parser/Packet/TempEntities.ts"],"names":[],"mappings":"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"}
|
||||
5
build/Parser/Packet/UpdateStringTable.d.ts
vendored
Normal file
5
build/Parser/Packet/UpdateStringTable.d.ts
vendored
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
import { BitStream } from 'bit-buffer';
|
||||
import { UpdateStringTablePacket } from '../../Data/Packet';
|
||||
import { ParserState } from '../../Data/ParserState';
|
||||
export declare function ParseUpdateStringTable(stream: BitStream, state: ParserState): UpdateStringTablePacket;
|
||||
export declare function EncodeUpdateStringTable(packet: UpdateStringTablePacket, stream: BitStream, state: ParserState): void;
|
||||
46
build/Parser/Packet/UpdateStringTable.js
Normal file
46
build/Parser/Packet/UpdateStringTable.js
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const StringTableParser_1 = require("../StringTableParser");
|
||||
function ParseUpdateStringTable(stream, state) {
|
||||
const tableId = stream.readBits(5);
|
||||
const multipleChanged = stream.readBoolean();
|
||||
const changedEntries = multipleChanged ? stream.readUint16() : 1;
|
||||
const bitCount = stream.readBits(20);
|
||||
const data = stream.readBitStream(bitCount);
|
||||
data.index = 0;
|
||||
if (!state.stringTables[tableId]) {
|
||||
throw new Error(`Table not found for update: ${tableId}`);
|
||||
}
|
||||
const table = state.stringTables[tableId];
|
||||
const updatedEntries = StringTableParser_1.parseStringTableEntries(data, table, changedEntries, table.entries);
|
||||
return {
|
||||
packetType: 'updateStringTable',
|
||||
entries: updatedEntries,
|
||||
tableId
|
||||
};
|
||||
}
|
||||
exports.ParseUpdateStringTable = ParseUpdateStringTable;
|
||||
function EncodeUpdateStringTable(packet, stream, state) {
|
||||
stream.writeBits(packet.tableId, 5);
|
||||
const changedEntryCount = packet.entries.filter((entry) => entry).length;
|
||||
const multipleChanged = changedEntryCount > 1;
|
||||
stream.writeBoolean(multipleChanged);
|
||||
if (multipleChanged) {
|
||||
stream.writeUint16(changedEntryCount);
|
||||
}
|
||||
if (!state.stringTables[packet.tableId]) {
|
||||
throw new Error(`Table not found for update: ${packet.tableId}`);
|
||||
}
|
||||
const lengthStart = stream.index;
|
||||
stream.index += 20;
|
||||
const lengthEnd = stream.index;
|
||||
const table = state.stringTables[packet.tableId];
|
||||
StringTableParser_1.encodeStringTableEntries(stream, table, packet.entries, table.entries);
|
||||
const dataEnd = stream.index;
|
||||
stream.index = lengthStart;
|
||||
const entryLength = dataEnd - lengthEnd;
|
||||
stream.writeBits(entryLength, 20);
|
||||
stream.index = dataEnd;
|
||||
}
|
||||
exports.EncodeUpdateStringTable = EncodeUpdateStringTable;
|
||||
//# sourceMappingURL=UpdateStringTable.js.map
|
||||
1
build/Parser/Packet/UpdateStringTable.js.map
Normal file
1
build/Parser/Packet/UpdateStringTable.js.map
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"UpdateStringTable.js","sourceRoot":"","sources":["../../../src/Parser/Packet/UpdateStringTable.ts"],"names":[],"mappings":";;AAGA,4DAAuF;AAEvF,SAAgB,sBAAsB,CAAC,MAAiB,EAAE,KAAkB;IAC3E,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEnC,MAAM,eAAe,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IAC7C,MAAM,cAAc,GAAG,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjE,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IAEf,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE;QACjC,MAAM,IAAI,KAAK,CAAC,+BAA+B,OAAO,EAAE,CAAC,CAAC;KAC1D;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,cAAc,GAAG,2CAAuB,CAAC,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAE3F,OAAO;QACN,UAAU,EAAE,mBAAmB;QAC/B,OAAO,EAAE,cAAc;QACvB,OAAO;KACP,CAAC;AACH,CAAC;AAtBD,wDAsBC;AAED,SAAgB,uBAAuB,CAAC,MAA+B,EAAE,MAAiB,EAAE,KAAkB;IAC7G,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAEpC,MAAM,iBAAiB,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;IACzE,MAAM,eAAe,GAAG,iBAAiB,GAAG,CAAC,CAAC;IAC9C,MAAM,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;IAErC,IAAI,eAAe,EAAE;QACpB,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;KACtC;IAED,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;QACxC,MAAM,IAAI,KAAK,CAAC,+BAA+B,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;KACjE;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;IACjC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;IACnB,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;IAE/B,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjD,4CAAwB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAEvE,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;IAC7B,MAAM,CAAC,KAAK,GAAG,WAAW,CAAC;IAC3B,MAAM,WAAW,GAAG,OAAO,GAAG,SAAS,CAAC;IACxC,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAClC,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC;AACxB,CAAC;AA3BD,0DA2BC"}
|
||||
4
build/Parser/Packet/UserMessage.d.ts
vendored
Normal file
4
build/Parser/Packet/UserMessage.d.ts
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
import { BitStream } from 'bit-buffer';
|
||||
import { UserMessagePacket } from '../../Data/UserMessage';
|
||||
export declare function ParseUserMessage(stream: BitStream): UserMessagePacket;
|
||||
export declare function EncodeUserMessage(packet: UserMessagePacket, stream: BitStream): void;
|
||||
95
build/Parser/Packet/UserMessage.js
Normal file
95
build/Parser/Packet/UserMessage.js
Normal file
|
|
@ -0,0 +1,95 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const UserMessage_1 = require("../../Data/UserMessage");
|
||||
const SayText2_1 = require("../UserMessage/SayText2");
|
||||
const ParserGenerator_1 = require("./ParserGenerator");
|
||||
function unknownPacketHandler(userMessageType) {
|
||||
return {
|
||||
parser: (data) => {
|
||||
return {
|
||||
packetType: 'userMessage',
|
||||
userMessageType,
|
||||
type: UserMessage_1.UserMessagePacketTypeMap.get(userMessageType),
|
||||
data
|
||||
};
|
||||
},
|
||||
encoder: (packet, data) => {
|
||||
packet.data.index = 0;
|
||||
data.writeBitStream(packet.data);
|
||||
packet.data.index = 0;
|
||||
},
|
||||
name: userMessageType
|
||||
};
|
||||
}
|
||||
const userMessageParsers = new Map([
|
||||
[UserMessage_1.UserMessageType.SayText2, { parser: SayText2_1.ParseSayText2, encoder: SayText2_1.EncodeSayText2, name: 'sayText2' }],
|
||||
[UserMessage_1.UserMessageType.TextMsg,
|
||||
ParserGenerator_1.make('textMsg', 'destType{8}text{s}substitute1{s}substitute2{s}substitute3{s}substitute4{s}', 'userMessageType', {
|
||||
packetType: 'userMessage'
|
||||
})],
|
||||
[UserMessage_1.UserMessageType.ResetHUD,
|
||||
ParserGenerator_1.make('resetHUD', 'data{8}', 'userMessageType', {
|
||||
packetType: 'userMessage'
|
||||
})],
|
||||
[UserMessage_1.UserMessageType.Train,
|
||||
ParserGenerator_1.make('train', 'data{8}', 'userMessageType', {
|
||||
packetType: 'userMessage'
|
||||
})],
|
||||
[UserMessage_1.UserMessageType.VoiceSubtitle,
|
||||
ParserGenerator_1.make('voiceSubtitle', 'client{8}menu{8}item{8}', 'userMessageType', {
|
||||
packetType: 'userMessage'
|
||||
})],
|
||||
[UserMessage_1.UserMessageType.BreakModel_Pumpkin, unknownPacketHandler('breakModelPumpkin')],
|
||||
[UserMessage_1.UserMessageType.Shake,
|
||||
ParserGenerator_1.make('shake', 'command{8}amplitude{f32}frequency{f32}duration{f32}', 'userMessageType', {
|
||||
packetType: 'userMessage'
|
||||
})]
|
||||
]);
|
||||
function ParseUserMessage(stream) {
|
||||
const type = stream.readUint8();
|
||||
const length = stream.readBits(11);
|
||||
const messageData = stream.readBitStream(length);
|
||||
const handler = userMessageParsers.get(type);
|
||||
if (!handler) {
|
||||
return {
|
||||
packetType: 'userMessage',
|
||||
userMessageType: 'unknownUserMessage',
|
||||
type,
|
||||
data: messageData
|
||||
};
|
||||
}
|
||||
else {
|
||||
return handler.parser(messageData);
|
||||
}
|
||||
}
|
||||
exports.ParseUserMessage = ParseUserMessage;
|
||||
function EncodeUserMessage(packet, stream) {
|
||||
if (packet.userMessageType === 'unknownUserMessage') {
|
||||
stream.writeUint8(packet.type);
|
||||
stream.writeBits(packet.data.length, 11);
|
||||
packet.data.index = 0;
|
||||
stream.writeBitStream(packet.data);
|
||||
packet.data.index = 0;
|
||||
}
|
||||
else {
|
||||
const messageType = UserMessage_1.UserMessagePacketTypeMap.get(packet.userMessageType);
|
||||
if (!messageType) {
|
||||
throw new Error(`Unknown userMessage type ${messageType}`);
|
||||
}
|
||||
stream.writeUint8(messageType);
|
||||
const lengthStart = stream.index;
|
||||
stream.index += 11;
|
||||
const messageDataStart = stream.index;
|
||||
const handler = userMessageParsers.get(messageType);
|
||||
if (!handler) {
|
||||
throw new Error(`No encoder for userMessage ${packet.userMessageType}(${messageType})`);
|
||||
}
|
||||
handler.encoder(packet, stream);
|
||||
const messageDataEnd = stream.index;
|
||||
stream.index = lengthStart;
|
||||
stream.writeBits(messageDataEnd - messageDataStart, 11);
|
||||
stream.index = messageDataEnd;
|
||||
}
|
||||
}
|
||||
exports.EncodeUserMessage = EncodeUserMessage;
|
||||
//# sourceMappingURL=UserMessage.js.map
|
||||
1
build/Parser/Packet/UserMessage.js.map
Normal file
1
build/Parser/Packet/UserMessage.js.map
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"UserMessage.js","sourceRoot":"","sources":["../../../src/Parser/Packet/UserMessage.ts"],"names":[],"mappings":"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"}
|
||||
4
build/Parser/Packet/VoiceData.d.ts
vendored
Normal file
4
build/Parser/Packet/VoiceData.d.ts
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
import { BitStream } from 'bit-buffer';
|
||||
import { VoiceDataPacket } from '../../Data/Packet';
|
||||
export declare function ParseVoiceData(stream: BitStream): VoiceDataPacket;
|
||||
export declare function EncodeVoiceData(packet: VoiceDataPacket, stream: BitStream): void;
|
||||
26
build/Parser/Packet/VoiceData.js
Normal file
26
build/Parser/Packet/VoiceData.js
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
function ParseVoiceData(stream) {
|
||||
const client = stream.readUint8();
|
||||
const proximity = stream.readUint8();
|
||||
const length = stream.readUint16();
|
||||
const data = stream.readBitStream(length);
|
||||
return {
|
||||
packetType: 'voiceData',
|
||||
client,
|
||||
proximity,
|
||||
length,
|
||||
data
|
||||
};
|
||||
}
|
||||
exports.ParseVoiceData = ParseVoiceData;
|
||||
function EncodeVoiceData(packet, stream) {
|
||||
stream.writeUint8(packet.client);
|
||||
stream.writeUint8(packet.proximity);
|
||||
stream.writeUint16(packet.length);
|
||||
packet.data.index = 0;
|
||||
stream.writeBitStream(packet.data, packet.length);
|
||||
packet.data.index = 0;
|
||||
}
|
||||
exports.EncodeVoiceData = EncodeVoiceData;
|
||||
//# sourceMappingURL=VoiceData.js.map
|
||||
1
build/Parser/Packet/VoiceData.js.map
Normal file
1
build/Parser/Packet/VoiceData.js.map
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"VoiceData.js","sourceRoot":"","sources":["../../../src/Parser/Packet/VoiceData.ts"],"names":[],"mappings":";;AAGA,SAAgB,cAAc,CAAC,MAAiB;IAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;IAClC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAE1C,OAAO;QACN,UAAU,EAAE,WAAW;QACvB,MAAM;QACN,SAAS;QACT,MAAM;QACN,IAAI;KACJ,CAAC;AACH,CAAC;AAbD,wCAaC;AAED,SAAgB,eAAe,CAAC,MAAuB,EAAE,MAAiB;IACzE,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACtB,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AACvB,CAAC;AAPD,0CAOC"}
|
||||
4
build/Parser/Packet/VoiceInit.d.ts
vendored
Normal file
4
build/Parser/Packet/VoiceInit.d.ts
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
import { BitStream } from 'bit-buffer';
|
||||
import { VoiceInitPacket } from '../../Data/Packet';
|
||||
export declare function ParseVoiceInit(stream: BitStream): VoiceInitPacket;
|
||||
export declare function EncodeVoiceInit(packet: VoiceInitPacket, stream: BitStream): void;
|
||||
35
build/Parser/Packet/VoiceInit.js
Normal file
35
build/Parser/Packet/VoiceInit.js
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
function ParseVoiceInit(stream) {
|
||||
const codec = stream.readASCIIString();
|
||||
const quality = stream.readUint8();
|
||||
// no clue, from 2017-2-14 update
|
||||
const extraData = readExtraData(stream, codec, quality);
|
||||
return {
|
||||
packetType: 'voiceInit',
|
||||
codec,
|
||||
quality,
|
||||
extraData
|
||||
};
|
||||
}
|
||||
exports.ParseVoiceInit = ParseVoiceInit;
|
||||
function readExtraData(stream, codec, quality) {
|
||||
if (quality === 255) {
|
||||
return stream.readUint16();
|
||||
}
|
||||
else if (codec === 'vaudio_celt') {
|
||||
return 11025;
|
||||
}
|
||||
else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
function EncodeVoiceInit(packet, stream) {
|
||||
stream.writeASCIIString(packet.codec);
|
||||
stream.writeUint8(packet.quality);
|
||||
if (packet.quality === 255) {
|
||||
stream.writeUint16(packet.extraData);
|
||||
}
|
||||
}
|
||||
exports.EncodeVoiceInit = EncodeVoiceInit;
|
||||
//# sourceMappingURL=VoiceInit.js.map
|
||||
1
build/Parser/Packet/VoiceInit.js.map
Normal file
1
build/Parser/Packet/VoiceInit.js.map
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"VoiceInit.js","sourceRoot":"","sources":["../../../src/Parser/Packet/VoiceInit.ts"],"names":[],"mappings":";;AAGA,SAAgB,cAAc,CAAC,MAAiB;IAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;IACvC,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;IAEnC,iCAAiC;IACjC,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAExD,OAAO;QACN,UAAU,EAAE,WAAW;QACvB,KAAK;QACL,OAAO;QACP,SAAS;KACT,CAAC;AACH,CAAC;AAbD,wCAaC;AAED,SAAS,aAAa,CAAC,MAAiB,EAAE,KAAa,EAAE,OAAe;IACvE,IAAI,OAAO,KAAK,GAAG,EAAE;QACpB,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC;KAC3B;SAAM,IAAI,KAAK,KAAK,aAAa,EAAE;QACnC,OAAO,KAAK,CAAC;KACb;SAAM;QACN,OAAO,CAAC,CAAC;KACT;AACF,CAAC;AAED,SAAgB,eAAe,CAAC,MAAuB,EAAE,MAAiB;IACzE,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,MAAM,CAAC,OAAO,KAAK,GAAG,EAAE;QAC3B,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;KACrC;AACF,CAAC;AAND,0CAMC"}
|
||||
Loading…
Add table
Add a link
Reference in a new issue