/// /// import { EventEmitter } from "events"; import { BitStream } from "./ext/bitbuffer"; import * as immutable from "immutable"; import { DemoFile } from "./demo"; import { GameRules } from "./entities/gamerules"; import { Networkable } from "./entities/networkable"; import { Player } from "./entities/player"; import { Team } from "./entities/team"; import { Weapon } from "./entities/weapon"; import { EntityHandle } from "./entityhandle"; import { PropValue } from "./props"; import { CSVCMsgSendTable, CSVCMsgSendTable_sendpropT } from "./protobufs/netmessages"; import { CCSPlayerResource } from "./sendtabletypes"; import { IPlayerInfo, IStringTable } from "./stringtables"; import * as Long from "long"; export interface NetworkableConstructor> { new (demo: DemoFile, index: number, classId: number, serialNum: number, props: any | undefined): T; } export declare type IDataTable = CSVCMsgSendTable; export interface UnknownEntityProps { [tableName: string]: { [propName: string]: PropValue | undefined; } | undefined; } export declare type ISendProp = CSVCMsgSendTable_sendpropT; export interface IFlattenedSendProp { prop: ISendProp; decode: (bitbuf: BitStream) => PropValue; table: IDataTable; collapsible: boolean; } export interface IServerClass { name: string; dtName: string; dataTable: IDataTable; flattenedProps: ReadonlyArray; } export interface IPropUpdate { prop: IFlattenedSendProp; value: PropValue; } export interface IBaselineUpdateEvent { classId: number; serverClass: IServerClass; baseline: UnknownEntityProps; } export interface IEntityCreationEvent { entity: Networkable; } export interface IEntityBeforeRemoveEvent { /** * Entity to be deleted */ entity: Networkable; /** * Entity is being replaced immediately, 'remove' will fire now instead of at tickend. */ immediate: boolean; } export interface IEntityRemoveEvent { index: number; } export interface IEntityPropChange { /** * Table containing updated property */ tableName: string; /** * Network variable name */ varName: string; /** * Old variable value */ oldValue: PropValue | undefined; /** * New value of the property */ newValue: PropValue; } export interface IEntityChangeEvent { /** * Updated entity */ entity: Networkable; /** * Prop changes. At least one element in the array. */ changes: ReadonlyArray; } export interface ITempEntEvent { /** * Delay in seconds in which the tempent should be fired. */ delay: number; /** * Server class ID */ classId: number; /** * Server class of the temporary entity */ serverClass: IServerClass; /** * Props of the temporary entity */ props: UnknownEntityProps; } export declare interface Entities { /** * Fired after data tables have been parsed. * {@link Entities#serverClasses} can now be used. */ on(event: "datatablesready", listener: () => void): this; emit(name: "datatablesready"): boolean; /** * Fired when an instance baseline is updated. */ on(event: "baselineupdate", listener: (event: IBaselineUpdateEvent) => void): this; emit(name: "baselineupdate", event: IBaselineUpdateEvent): boolean; /** * Fired when an entity is created. */ on(event: "create", listener: (event: IEntityCreationEvent) => void): this; emit(name: "create", event: IEntityCreationEvent): boolean; /** * Fired after an entity has been created. * All entity props are available for inspection. * @deprecated Listen to {@link Entities#create} instead */ on(event: "postcreate", listener: (event: IEntityCreationEvent) => void): this; emit(name: "postcreate", event: IEntityCreationEvent): boolean; /** * Fired when an entity is marked for deletion. */ on(event: "beforeremove", listener: (event: IEntityBeforeRemoveEvent) => void): this; emit(name: "beforeremove", event: IEntityBeforeRemoveEvent): boolean; /** * Fired during DemoFile#tickend when an entity is removed from the game. */ on(event: "remove", listener: (event: IEntityRemoveEvent) => void): this; emit(name: "remove", event: IEntityRemoveEvent): boolean; /** * Fired when an entity property is changed. */ on(event: "change", listener: (event: IEntityChangeEvent) => void): this; emit(name: "change", event: IEntityChangeEvent): boolean; /** * Fired when an a temp ent is created. */ on(event: "tempent", listener: (event: ITempEntEvent) => void): this; emit(name: "tempent", event: ITempEntEvent): boolean; } /** * Represents all entities that are transmitting (i.e. within PVS) in a given frame. */ export declare type TransmitEntities = immutable.Set; /** * Represents entities and networked properties within a demo. */ export declare class Entities extends EventEmitter { get playerResource(): Networkable; get gameRules(): GameRules; get teams(): ReadonlyArray; get players(): ReadonlyArray; get weapons(): ReadonlyArray; dataTables: IDataTable[]; serverClasses: IServerClass[]; /** * Map of entity index => networkable instance */ entities: Map; markedForDeletion: number[]; staticBaselines: { [classId: number]: UnknownEntityProps | undefined; }; pendingBaselines: { [classId: number]: BitStream | undefined; }; serverClassBits: number; tableClassMap: { [tableName: string]: NetworkableConstructor; }; private _serverClassConstructor; /** * Set of which entities were active in the most recent tick. */ transmitEntities: TransmitEntities; private _entityBaselines; private _frames; private _demo; private _singletonEnts; private _currentServerTick; private _maxPlayers; _userInfoTable: IStringTable; private _userIdToEntity; private _steam64IdToEntity; private _accountNumberToEntity; listen(demo: DemoFile): void; /** * Determines whether handle is set. * This function does not determine whether the handle points to a valid entity. * @param {number} handle - Networked entity handle value * @returns {boolean} true if handle is set */ isHandleSet(handle: number): boolean; /** * Returns the entity specified by a particular handle. * @param {number} handle - Networked entity handle value * @returns {Entity|null} Entity referenced by the handle. `null` if no matching entity. */ getByHandle(handle: EntityHandle): Networkable | null; /** * Returns the entity that belongs to the player with a given user ID. * @param {number} userId - Player user ID * @returns {Player|null} Entity referenced by the user ID. `null` if no matching player. */ getByUserId(userId: number): Player | null; /** * Returns the entity that belongs to the player with a given Steam account ID. * @param {number} accountId - Steam account ID * @returns {Player|null} Entity referenced by the account ID. `null` if no matching player. */ getByAccountId(accountId: number): Player | null; /** * Returns the entity that belongs to the player with a given 64-bit Steam ID. * @param {Long|string} steam64Id - 64-bit Steam ID * @returns {Player|null} Entity referenced by the Steam ID. `null` if no matching player. */ getBySteam64Id(steam64Id: Long | string): Player | null; getSingleton>(serverClass: string): TEntityClass; findAllWithTable(table: string): Generator; findAllWithClass(klass: NetworkableConstructor): Generator; handleDataTables(chunk: ByteBuffer): void; private _gatherExcludes; private _gatherProps; private _flattenDataTable; private _findTableByName; private _addEntity; private _removeEntity; private _parseEntityUpdate; private _readNewEntity; private _updatesToPropObject; private _handleTempEntities; private _handlePacketEntities; private _readPacketEntities; private _parseInstanceBaseline; private _handleUserInfoUpdate; private _handleInstanceBaselineUpdate; private _handleStringTableUpdate; }