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

lint fixes

This commit is contained in:
Robin Appelman 2017-09-26 02:29:45 +02:00
commit 0aad1e874b
78 changed files with 879 additions and 851 deletions

View file

@ -1,6 +1,6 @@
export interface Chat {
kind: string,
from: string,
text: string,
tick: number,
kind: string;
from: string;
text: string;
tick: number;
}

View file

@ -18,7 +18,7 @@ export enum GameEventValueType {
SHORT = 4,
BYTE = 5,
BOOLEAN = 6,
LOCAL = 7,
LOCAL = 7
}
export type GameEventValue = string | number | boolean;

View file

@ -3528,7 +3528,7 @@ export type GameEvent = ServerSpawnEvent |
export type GameEventType = GameEvent['name'];
export type GameEventTypeMap = {
export interface GameEventTypeMap {
server_spawn: ServerSpawnEvent;
server_changelevel_failed: ServerChangelevelFailedEvent;
server_shutdown: ServerShutdownEvent;
@ -3905,7 +3905,7 @@ export type GameEventTypeMap = {
replay_endrecord: ReplayEndRecordEvent;
replay_replaysavailable: ReplayReplaysAvailableEvent;
replay_servererror: ReplayServerErrorEvent;
};
}
export type GameEventTypeId = number;
@ -4285,6 +4285,5 @@ export const GameEventTypeIdMap: Map<GameEventType, GameEventTypeId> = new Map<G
['replay_sessioninfo', 372],
['replay_endrecord', 373],
['replay_replaysavailable', 374],
['replay_servererror', 375],
['replay_servererror', 375]
]);

View file

@ -3,19 +3,19 @@ import {handleGameEvent} from '../PacketHandler/GameEvent';
import {handlePacketEntities} from '../PacketHandler/PacketEntities';
import {handleSayText2} from '../PacketHandler/SayText2';
import {Building} from './Building';
import {Chat} from './Chat';
import {Death} from './Death';
import {Packet} from './Packet';
import {EntityId, PacketEntity} from './PacketEntity';
import {ParserState} from './ParserState';
import {Player} from './Player';
import {PlayerResource} from './PlayerResource';
import {Round} from './Round';
import {StringTableEntry} from './StringTable';
import {Team, TeamNumber} from './Team';
import {UserInfo} from './UserInfo';
import {Weapon} from './Weapon';
import {World} from './World';
import {Round} from './Round';
import {Chat} from './Chat';
import {Packet} from './Packet';
import {ParserState} from './ParserState';
import {StringTableEntry} from './StringTable';
export class Match {
public tick: number = 0;
@ -27,7 +27,7 @@ export class Match {
public intervalPerTick: number = 0;
public world: World = {
boundaryMin: {x: 0, y: 0, z: 0},
boundaryMax: {x: 0, y: 0, z: 0},
boundaryMax: {x: 0, y: 0, z: 0}
};
public playerEntityMap: Map<EntityId, Player> = new Map();
public weaponMap: Map<EntityId, Weapon> = new Map();
@ -49,7 +49,7 @@ export class Match {
classes: user.classes,
name: user.name,
steamId: user.steamId,
userId: user.userId,
userId: user.userId
};
if (user.team) {
users[key].team = user.team;
@ -62,7 +62,7 @@ export class Match {
deaths: this.deaths,
rounds: this.rounds,
startTick: this.startTick,
intervalPerTick: this.intervalPerTick,
intervalPerTick: this.intervalPerTick
};
}
@ -94,6 +94,38 @@ export class Match {
}
}
public getUserInfo(userId: number): UserInfo {
// no clue why it does this
// only seems to be the case with per user ready
while (userId > 256) {
userId -= 256;
}
const user = this.users.get(userId);
if (!user) {
const newUser = {
name: '',
userId,
steamId: '',
classes: {},
entityId: 0,
team: ''
};
this.users.set(userId, newUser);
return newUser;
}
return user;
}
public getUserInfoForEntity(entity: PacketEntity): UserInfo | null {
for (const user of this.users.values()) {
if (user && user.entityId === entity.entityIndex) {
return user;
}
}
return this.calculateUserInfoByEntityId(entity.entityIndex);
}
private calculateUserInfo() {
for (const [text, extraData] of this.parserState.userInfoEntries.entries()) {
this.calculateUserInfoFromEntry(text, extraData);
@ -127,36 +159,4 @@ export class Match {
throw new Error();
}
}
public getUserInfo(userId: number): UserInfo {
// no clue why it does this
// only seems to be the case with per user ready
while (userId > 256) {
userId -= 256;
}
const user = this.users.get(userId);
if (!user) {
const newUser = {
name: '',
userId,
steamId: '',
classes: {},
entityId: 0,
team: '',
};
this.users.set(userId, newUser);
return newUser;
}
return user;
}
public getUserInfoForEntity(entity: PacketEntity): UserInfo | null {
for (const user of this.users.values()) {
if (user && user.entityId === entity.entityIndex) {
return user;
}
}
return this.calculateUserInfoByEntityId(entity.entityIndex);
}
}

View file

@ -1,9 +1,9 @@
import {Packet} from './Packet';
import {BitStream} from 'bit-buffer';
import {ServerClass} from './ServerClass';
import {SendTable} from './SendTable';
import {StringTable} from './StringTable';
import {Packet} from './Packet';
import {ParserState} from './ParserState';
import {SendTable} from './SendTable';
import {ServerClass} from './ServerClass';
import {StringTable} from './StringTable';
import {Vector} from './Vector';
export enum MessageType {
@ -14,7 +14,7 @@ export enum MessageType {
UserCmd = 5,
DataTables = 6,
Stop = 7,
StringTables = 8,
StringTables = 8
}
export interface BaseMessage {
@ -33,8 +33,7 @@ export interface PacketMessage extends BaseMessage {
flags: number;
}
export interface SigonMessage extends PacketMessage {
}
export type SigonMessage = PacketMessage;
export interface SyncTickMessage extends BaseMessage {
type: MessageType.SyncTick;
@ -53,7 +52,7 @@ export interface UserCmdMessage extends BaseMessage {
export interface DataTablesMessage extends BaseMessage {
type: MessageType.DataTables;
tables: SendTable[];
serverClasses: ServerClass[]
serverClasses: ServerClass[];
}
export interface StopMessage extends BaseMessage {
@ -62,7 +61,7 @@ export interface StopMessage extends BaseMessage {
export interface StringTablesMessage extends BaseMessage {
type: MessageType.StringTables;
tables: StringTable[]
tables: StringTable[];
}
export type Message = SigonMessage |

View file

@ -1,48 +1,45 @@
import {BitStream} from 'bit-buffer';
import {GameEventDefinition} from './GameEvent';
import {GameEvent, GameEventType} from './GameEventTypes';
import {EntityId, PacketEntity} from './PacketEntity';
import {SendTable} from './SendTable';
import {ServerClass} from './ServerClass';
import {StringTable, StringTableEntry} from './StringTable';
import {Vector} from './Vector';
import {GameEvent, GameEventType} from './GameEventTypes';
import {
BreakModelPumpkinPacket, ResetHUDPacket, TextMessagePacket, TrainPacket, UnknownUserMessagePacket,
UserMessagePacket, UserMessageType,
UserMessageTypeMap, VoiceSubtitlePacket, SayText2Packet
BreakModelPumpkinPacket, ResetHUDPacket, SayText2Packet, TextMessagePacket, TrainPacket,
UnknownUserMessagePacket, UserMessagePacket,
UserMessageType, UserMessageTypeMap, VoiceSubtitlePacket
} from './UserMessage';
import {Vector} from './Vector';
export interface BasePacket {
}
export interface StringTablePacket extends BasePacket {
export interface StringTablePacket {
packetType: 'stringTable';
tables: StringTable[];
}
export interface CreateStringTablePacket extends BasePacket {
export interface CreateStringTablePacket {
packetType: 'createStringTable';
table: StringTable;
}
export interface UpdateStringTablePacket extends BasePacket {
export interface UpdateStringTablePacket {
packetType: 'updateStringTable';
entries: StringTableEntry[];
tableId: number;
}
export interface ConsoleCmdPacket extends BasePacket {
export interface ConsoleCmdPacket {
packetType: 'consoleCmd';
command: string;
}
export interface DataTablePacket extends BasePacket {
export interface DataTablePacket {
packetType: 'dataTable';
tables: SendTable[];
serverClasses: ServerClass[];
}
export interface BSPDecalPacket extends BasePacket {
export interface BSPDecalPacket {
packetType: 'bspDecal';
position: Vector;
textureIndex: number;
@ -51,35 +48,35 @@ export interface BSPDecalPacket extends BasePacket {
lowPriority: boolean;
}
export interface ClassInfoPacket extends BasePacket {
export interface ClassInfoPacket {
packetType: 'classInfo';
number: number;
create: boolean;
entries: {
entries: Array<{
classId: number;
className: string;
dataTableName: string;
}[];
}>;
}
export interface EntityMessagePacket extends BasePacket {
export interface EntityMessagePacket {
packetType: 'entityMessage';
classId: number;
length: number;
data: string;
}
export interface GameEventPacket extends BasePacket {
export interface GameEventPacket {
packetType: 'gameEvent';
event: GameEvent;
}
export interface GameEventListPacket extends BasePacket {
export interface GameEventListPacket {
packetType: 'gameEventList';
eventList: Map<number, GameEventDefinition<GameEvent['name']>>;
}
export interface PacketEntitiesPacket extends BasePacket {
export interface PacketEntitiesPacket {
packetType: 'packetEntities';
entities: PacketEntity[];
removedEntities: EntityId[];
@ -89,7 +86,7 @@ export interface PacketEntitiesPacket extends BasePacket {
updatedBaseLine: boolean;
}
export interface ParseSoundsPacket extends BasePacket {
export interface ParseSoundsPacket {
packetType: 'parseSounds';
reliable: boolean;
num: number;
@ -97,24 +94,24 @@ export interface ParseSoundsPacket extends BasePacket {
data: BitStream;
}
export interface SetConVarPacket extends BasePacket {
export interface SetConVarPacket {
packetType: 'setConVar';
vars: Map<string, string>;
}
export interface TempEntitiesPacket extends BasePacket {
export interface TempEntitiesPacket {
packetType: 'tempEntities';
entities: PacketEntity[];
}
export interface VoiceInitPacket extends BasePacket {
export interface VoiceInitPacket {
packetType: 'voiceInit';
codec: string;
quality: number;
extraData: number;
}
export interface VoiceDataPacket extends BasePacket {
export interface VoiceDataPacket {
packetType: 'voiceData';
client: number;
proximity: number;
@ -122,54 +119,54 @@ export interface VoiceDataPacket extends BasePacket {
data: BitStream;
}
export interface MenuPacket extends BasePacket {
export interface MenuPacket {
packetType: 'menu';
type: number;
length: number;
data: BitStream;
}
export interface CmdKeyValuesPacket extends BasePacket {
export interface CmdKeyValuesPacket {
packetType: 'cmdKeyValues';
length: number;
data: BitStream;
}
export interface VoidPacket extends BasePacket {
export interface VoidPacket {
packetType: 'void';
}
export interface FilePacket extends BasePacket {
export interface FilePacket {
packetType: 'file';
transferId: number;
fileName: string;
requested: boolean;
}
export interface NetTickPacket extends BasePacket {
export interface NetTickPacket {
packetType: 'netTick';
tick: number;
frameTime: number;
stdDev: number;
}
export interface StringCmdPacket extends BasePacket {
export interface StringCmdPacket {
packetType: 'stringCmd';
command: string;
}
export interface SigOnStatePacket extends BasePacket {
export interface SigOnStatePacket {
packetType: 'sigOnState';
state: number;
count: number;
}
export interface PrintPacket extends BasePacket {
export interface PrintPacket {
packetType: 'print';
value: string;
}
export interface ServerInfoPacket extends BasePacket {
export interface ServerInfoPacket {
packetType: 'serverInfo';
version: number;
serverCount: number;
@ -188,17 +185,17 @@ export interface ServerInfoPacket extends BasePacket {
replay: boolean;
}
export interface SetPausePacket extends BasePacket {
export interface SetPausePacket {
packetType: 'setPause';
paused: boolean;
}
export interface SetViewPacket extends BasePacket {
export interface SetViewPacket {
packetType: 'setView';
index: number;
}
export interface FixAnglePacket extends BasePacket {
export interface FixAnglePacket {
packetType: 'fixAngle';
relative: boolean;
x: number;
@ -206,12 +203,12 @@ export interface FixAnglePacket extends BasePacket {
z: number;
}
export interface PreFetchPacket extends BasePacket {
export interface PreFetchPacket {
packetType: 'preFetch';
index: number;
}
export interface GetCvarValuePacket extends BasePacket {
export interface GetCvarValuePacket {
packetType: 'getCvarValue';
cookie: number;
value: string;
@ -312,5 +309,5 @@ export enum PacketTypeId {
menu = 29,
gameEventList = 30,
getCvarValue = 31,
cmdKeyValues = 32,
cmdKeyValues = 32
}

View file

@ -6,12 +6,21 @@ export enum PVS {
PRESERVE = 0,
ENTER = 1,
LEAVE = 2,
DELETE = 4,
DELETE = 4
}
export type EntityId = number;
export class PacketEntity {
public static getPropByFullName(props: SendProp[], fullName: string): SendProp | null {
for (const prop of props) {
if (prop.definition.fullName === fullName) {
return prop;
}
}
return null;
}
public serverClass: ServerClass;
public entityIndex: EntityId;
public props: SendProp[];
@ -28,15 +37,6 @@ export class PacketEntity {
this.pvs = pvs;
}
public static getPropByFullName(props: SendProp[], fullName: string): SendProp | null {
for (const prop of props) {
if (prop.definition.fullName === fullName) {
return prop;
}
}
return null;
}
public getPropByDefinition(definition: SendPropDefinition) {
return PacketEntity.getPropByFullName(this.props, definition.fullName);
}
@ -75,7 +75,7 @@ export class PacketEntity {
}
public diffFromBaseLine(baselineProps: SendProp[]): SendProp[] {
return this.props.filter(prop => {
return this.props.filter((prop) => {
const baseProp = PacketEntity.getPropByFullName(baselineProps, prop.definition.fullName);
return (!baseProp || prop.value !== baseProp.value);
});

View file

@ -1,19 +1,19 @@
import {BitStream} from 'bit-buffer';
import {GameEventDefinition} from './GameEvent';
import {EntityId} from './PacketEntity';
import {SendTable, SendTableName} from './SendTable';
import {ServerClass, ServerClassId} from './ServerClass';
import {StringTable} from './StringTable';
import {GameEventType} from './GameEventTypes';
import {SendProp} from './SendProp';
import {Packet, PacketTypeId} from './Packet';
import {handleGameEventList} from '../PacketHandler/GameEventList';
import {handlePacketEntitiesForState} from '../PacketHandler/PacketEntities';
import {
handleStringTable, handleStringTables, handleStringTableUpdate,
handleTable
} from '../PacketHandler/StringTable';
import {handleGameEventList} from '../PacketHandler/GameEventList';
import {GameEventDefinition} from './GameEvent';
import {GameEventType} from './GameEventTypes';
import {DataTablesMessage, Message, MessageType, StringTablesMessage} from './Message';
import {handlePacketEntitiesForState} from '../PacketHandler/PacketEntities';
import {Packet, PacketTypeId} from './Packet';
import {EntityId} from './PacketEntity';
import {SendProp} from './SendProp';
import {SendTable, SendTableName} from './SendTable';
import {ServerClass, ServerClassId} from './ServerClass';
import {StringTable} from './StringTable';
export class ParserState {
public version: number = 0;
@ -62,6 +62,14 @@ export class ParserState {
}
}
public getStringTable(name: string): StringTable | null {
const table = this.stringTables.find((stringTable) => stringTable.name === name);
if (!table) {
return null;
}
return table;
}
private handleDataTableMessage(message: DataTablesMessage) {
for (const table of message.tables) {
this.sendTables.set(table.name, table);
@ -74,14 +82,6 @@ export class ParserState {
handleTable(table, this);
}
}
public getStringTable(name: string): StringTable | null {
const table = this.stringTables.find(table => table.name === name);
if (!table) {
return null;
}
return table;
}
}
export function getClassBits(state: ParserState) {

View file

@ -1,15 +1,15 @@
import {Match} from './Match';
import {EntityId} from './PacketEntity';
import {PlayerCondition} from './PlayerCondition';
import {UserInfo} from './UserInfo';
import {Vector} from './Vector';
import {Weapon} from './Weapon';
import {EntityId} from './PacketEntity';
export enum LifeState {
ALIVE = 0,
DYING = 1,
DEATH = 2,
RESPAWNABLE = 3,
RESPAWNABLE = 3
}
export class Player {
@ -33,8 +33,8 @@ export class Player {
get weapons(): Weapon[] {
return this.weaponIds
.map(id => this.match.outerMap.get(id) as EntityId)
.filter(entityId => entityId > 0)
.map(entityId => this.match.weaponMap.get(entityId) as Weapon);
.map((id) => this.match.outerMap.get(id) as EntityId)
.filter((entityId) => entityId > 0)
.map((entityId) => this.match.weaponMap.get(entityId) as Weapon);
}
}

View file

@ -77,5 +77,5 @@ export enum PlayerCondition {
TF_COND_HALLOWEEN_TINY = (1 << 75),
TF_COND_HALLOWEEN_IN_HELL = (1 << 76),
TF_COND_HALLOWEEN_GHOST_MODE = (1 << 77),
TF_COND_MINICRITBOOSTED_ON_KILL = (1 << 78),
TF_COND_MINICRITBOOSTED_ON_KILL = (1 << 78)
}

View file

@ -1,5 +1,5 @@
export interface Round {
winner: 'red' | 'blue',
winner: 'red' | 'blue';
length: number;
end_tick: number;
}

View file

@ -1,6 +1,21 @@
import {SendTable} from './SendTable';
export class SendPropDefinition {
public static formatFlags(flags: number) {
const names: string[] = [];
for (const name in SendPropFlag) {
if ((SendPropFlag as object).hasOwnProperty(name)) {
const flagValue = SendPropFlag[name] as SendPropFlag | string;
if (typeof flagValue === 'number') {
if (flags & flagValue) {
names.push(name);
}
}
}
}
return names;
}
public type: SendPropType;
public name: string;
public flags: number;
@ -41,7 +56,7 @@ export class SendPropDefinition {
name: this.name,
type: SendPropType[this.type],
flags: this.flags,
bitCount: this.bitCount,
bitCount: this.bitCount
};
if (this.type === SendPropType.DPT_Float) {
data.lowValue = this.lowValue;
@ -61,19 +76,6 @@ export class SendPropDefinition {
get allFlags() {
return SendPropDefinition.formatFlags(this.flags);
}
static formatFlags(flags: number) {
let names: string[] = [];
for (const name in SendPropFlag) {
const flagValue = <SendPropFlag | string>SendPropFlag[name];
if (typeof flagValue === 'number') {
if (flags & flagValue) {
names.push(name);
}
}
}
return names;
}
}
export enum SendPropType {
@ -84,7 +86,7 @@ export enum SendPropType {
DPT_String,
DPT_Array,
DPT_DataTable,
DPT_NUMSendPropTypes,
DPT_NUMSendPropTypes
}
export enum SendPropFlag {
@ -111,5 +113,5 @@ export enum SendPropFlag {
SPROP_COORD_MP_LOWPRECISION = (1 << 14), // Like SPROP_COORD, but special handling for multiplayer games
// where the fractional component only gets a 3 bits instead of 5
SPROP_COORD_MP_INTEGRAL = (1 << 15), // SPROP_COORD_MP, but coordinates are rounded to integral boundaries
SPROP_VARINT = (1 << 5),
SPROP_VARINT = (1 << 5)
}

View file

@ -2,7 +2,7 @@ export enum TeamNumber {
UNASGINED = 0,
SPECTATOR = 1,
RED = 2,
BLU = 3,
BLU = 3
}
export interface Team {

View file

@ -1,4 +1,3 @@
import {BasePacket} from './Packet';
import {BitStream} from 'bit-buffer';
export enum UserMessageType {
@ -59,14 +58,14 @@ export enum UserMessageType {
HapPunch = 54,
HapSetDrag = 55,
HapSet = 56,
HapMeleeContact = 57,
HapMeleeContact = 57
}
export interface BaseDataUserPacket extends BasePacket {
export interface BaseDataUserPacket {
data: number;
}
export interface SayText2Packet extends BasePacket {
export interface SayText2Packet {
packetType: 'sayText2';
client: number;
raw: number;
@ -82,7 +81,7 @@ export enum HudTextLocation {
HUD_PRINTCENTER = 4
}
export interface TextMessagePacket extends BasePacket {
export interface TextMessagePacket {
packetType: 'textMsg';
destType: HudTextLocation;
text: string;
@ -96,14 +95,14 @@ export interface TrainPacket extends BaseDataUserPacket {
packetType: 'train';
}
export interface VoiceSubtitlePacket extends BasePacket {
export interface VoiceSubtitlePacket {
packetType: 'voiceSubtitle';
client: number;
menu: number;
item: number;
}
export interface ShakePacket extends BasePacket {
export interface ShakePacket {
packetType: 'shake';
command: number;
amplitude: number;
@ -111,7 +110,7 @@ export interface ShakePacket extends BasePacket {
duration: number;
}
export interface UnknownUserMessageBasePacket extends BasePacket {
export interface UnknownUserMessageBasePacket {
data: BitStream;
type: number;
}
@ -136,7 +135,7 @@ export type UserMessagePacket = SayText2Packet
| BreakModelPumpkinPacket
| ShakePacket;
export type UserMessageTypeMap = {
export interface UserMessageTypeMap {
sayText2: SayText2Packet;
textMsg: TextMessagePacket;
unknownUserMessage: GenericUnknownUserMessagePacket;
@ -147,12 +146,13 @@ export type UserMessageTypeMap = {
shake: ShakePacket;
}
export const UserMessagePacketTypeMap: Map<UserMessagePacket['packetType'], UserMessageType> = new Map<UserMessagePacket['packetType'], UserMessageType>([
['sayText2', UserMessageType.SayText2],
['textMsg', UserMessageType.TextMsg],
['train', UserMessageType.Train],
['voiceSubtitle', UserMessageType.VoiceSubtitle],
['breakModelPumpkin', UserMessageType.BreakModel_Pumpkin],
['resetHUD', UserMessageType.ResetHUD],
['shake', UserMessageType.Shake]
]);
export const UserMessagePacketTypeMap: Map<UserMessagePacket['packetType'], UserMessageType> =
new Map<UserMessagePacket['packetType'], UserMessageType>([
['sayText2', UserMessageType.SayText2],
['textMsg', UserMessageType.TextMsg],
['train', UserMessageType.Train],
['voiceSubtitle', UserMessageType.VoiceSubtitle],
['breakModelPumpkin', UserMessageType.BreakModel_Pumpkin],
['resetHUD', UserMessageType.ResetHUD],
['shake', UserMessageType.Shake]
]);