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

include /build

This commit is contained in:
Bryan C 2020-07-02 18:42:25 +08:00
commit 132ab1b47a
220 changed files with 9059 additions and 1 deletions

17
build/Analyser.d.ts vendored Normal file
View file

@ -0,0 +1,17 @@
/// <reference types="node" />
import { EventEmitter } from 'events';
import { Header } from './Data/Header';
import { Match } from './Data/Match';
import { Message } from './Data/Message';
import { Packet } from './Data/Packet';
import { Parser } from './Parser';
export declare class Analyser extends EventEmitter {
readonly match: Match;
private readonly parser;
private analysed;
constructor(parser: Parser);
getHeader(): Header;
getBody(): Match;
getPackets(): IterableIterator<Packet>;
getMessages(): IterableIterator<Message>;
}

48
build/Analyser.js Normal file
View file

@ -0,0 +1,48 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const events_1 = require("events");
const Match_1 = require("./Data/Match");
const Message_1 = require("./Data/Message");
class Analyser extends events_1.EventEmitter {
constructor(parser) {
super();
this.analysed = false;
this.parser = parser;
this.match = new Match_1.Match(this.parser.parserState);
}
getHeader() {
return this.parser.getHeader();
}
getBody() {
if (!this.analysed) {
for (const packet of this.getPackets()) {
this.emit('packet', packet);
}
this.emit('done');
}
this.analysed = true;
return this.match;
}
*getPackets() {
for (const message of this.parser.getMessages()) {
if (message.type === Message_1.MessageType.Packet) {
for (const packet of message.packets) {
this.match.handlePacket(packet, message);
yield packet;
}
}
}
}
*getMessages() {
for (const message of this.parser.getMessages()) {
if (message.type === Message_1.MessageType.Packet) {
for (const packet of message.packets) {
this.match.handlePacket(packet, message);
}
}
yield message;
}
}
}
exports.Analyser = Analyser;
//# sourceMappingURL=Analyser.js.map

1
build/Analyser.js.map Normal file
View file

@ -0,0 +1 @@
{"version":3,"file":"Analyser.js","sourceRoot":"","sources":["../src/Analyser.ts"],"names":[],"mappings":";;AAAA,mCAAoC;AAEpC,wCAAmC;AACnC,4CAAoD;AAIpD,MAAa,QAAS,SAAQ,qBAAY;IAKzC,YAAY,MAAc;QACzB,KAAK,EAAE,CAAC;QAHD,aAAQ,GAAY,KAAK,CAAC;QAIjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,IAAI,aAAK,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACjD,CAAC;IAEM,SAAS;QACf,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;IAChC,CAAC;IAEM,OAAO;QACb,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACnB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;gBACvC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;aAC5B;YACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAClB;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IAEM,CAAE,UAAU;QAClB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE;YAChD,IAAI,OAAO,CAAC,IAAI,KAAK,qBAAW,CAAC,MAAM,EAAE;gBACxC,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE;oBACrC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;oBACzC,MAAM,MAAM,CAAC;iBACb;aACD;SACD;IACF,CAAC;IAEM,CAAE,WAAW;QACnB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE;YAChD,IAAI,OAAO,CAAC,IAAI,KAAK,qBAAW,CAAC,MAAM,EAAE;gBACxC,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE;oBACrC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;iBACzC;aACD;YACD,MAAM,OAAO,CAAC;SACd;IACF,CAAC;CACD;AA/CD,4BA+CC"}

36
build/Data/Building.d.ts vendored Normal file
View file

@ -0,0 +1,36 @@
import { Vector } from './Vector';
export interface BaseBuilding {
builder: number;
position: Vector;
level: number;
maxHealth: number;
health: number;
isBuilding: boolean;
isSapped: boolean;
team: number;
angle: number;
}
export interface Sentry extends BaseBuilding {
type: 'sentry';
shieldLevel: number;
playerControlled: boolean;
autoAimTarget: number;
ammoShells: number;
ammoRockets: number;
isMini: boolean;
}
export interface Dispenser extends BaseBuilding {
type: 'dispenser';
healing: number[];
metal: number;
}
export interface Teleporter extends BaseBuilding {
type: 'teleporter';
isEntrance: boolean;
otherEnd: number;
rechargeTime: number;
rechargeDuration: number;
timesUsed: number;
yawToExit: number;
}
export declare type Building = Sentry | Dispenser | Teleporter;

3
build/Data/Building.js Normal file
View file

@ -0,0 +1,3 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=Building.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"Building.js","sourceRoot":"","sources":["../../src/Data/Building.ts"],"names":[],"mappings":""}

6
build/Data/Chat.d.ts vendored Normal file
View file

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

3
build/Data/Chat.js Normal file
View file

@ -0,0 +1,3 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=Chat.js.map

1
build/Data/Chat.js.map Normal file
View file

@ -0,0 +1 @@
{"version":3,"file":"Chat.js","sourceRoot":"","sources":["../../src/Data/Chat.ts"],"names":[],"mappings":""}

7
build/Data/Death.d.ts vendored Normal file
View file

@ -0,0 +1,7 @@
export interface Death {
weapon: string;
victim: number;
assister: number | null;
killer: number;
tick: number;
}

3
build/Data/Death.js Normal file
View file

@ -0,0 +1,3 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=Death.js.map

1
build/Data/Death.js.map Normal file
View file

@ -0,0 +1 @@
{"version":3,"file":"Death.js","sourceRoot":"","sources":["../../src/Data/Death.ts"],"names":[],"mappings":""}

23
build/Data/GameEvent.d.ts vendored Normal file
View file

@ -0,0 +1,23 @@
import { GameEventType } from './GameEventTypes';
export interface GameEventDefinition<T extends GameEventType> {
id: number;
name: T;
entries: GameEventEntry[];
}
export interface GameEventEntry {
name: string;
type: GameEventValueType;
}
export declare enum GameEventValueType {
STRING = 1,
FLOAT = 2,
LONG = 3,
SHORT = 4,
BYTE = 5,
BOOLEAN = 6,
LOCAL = 7
}
export declare type GameEventValue = string | number | boolean;
export interface GameEventValues {
[name: string]: GameEventValue;
}

13
build/Data/GameEvent.js Normal file
View file

@ -0,0 +1,13 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var GameEventValueType;
(function (GameEventValueType) {
GameEventValueType[GameEventValueType["STRING"] = 1] = "STRING";
GameEventValueType[GameEventValueType["FLOAT"] = 2] = "FLOAT";
GameEventValueType[GameEventValueType["LONG"] = 3] = "LONG";
GameEventValueType[GameEventValueType["SHORT"] = 4] = "SHORT";
GameEventValueType[GameEventValueType["BYTE"] = 5] = "BYTE";
GameEventValueType[GameEventValueType["BOOLEAN"] = 6] = "BOOLEAN";
GameEventValueType[GameEventValueType["LOCAL"] = 7] = "LOCAL";
})(GameEventValueType = exports.GameEventValueType || (exports.GameEventValueType = {}));
//# sourceMappingURL=GameEvent.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"GameEvent.js","sourceRoot":"","sources":["../../src/Data/GameEvent.ts"],"names":[],"mappings":";;AAaA,IAAY,kBAQX;AARD,WAAY,kBAAkB;IAC7B,+DAAU,CAAA;IACV,6DAAS,CAAA;IACT,2DAAQ,CAAA;IACR,6DAAS,CAAA;IACT,2DAAQ,CAAA;IACR,iEAAW,CAAA;IACX,6DAAS,CAAA;AACV,CAAC,EARW,kBAAkB,GAAlB,0BAAkB,KAAlB,0BAAkB,QAQ7B"}

2979
build/Data/GameEventTypes.d.ts vendored Normal file

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,381 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.GameEventTypeIdMap = new Map([
['server_spawn', 0],
['server_changelevel_failed', 1],
['server_shutdown', 2],
['server_cvar', 3],
['server_message', 4],
['server_addban', 5],
['server_removeban', 6],
['player_connect', 7],
['player_connect_client', 8],
['player_info', 9],
['player_disconnect', 10],
['player_activate', 11],
['player_say', 12],
['client_disconnect', 13],
['client_beginconnect', 14],
['client_connected', 15],
['client_fullconnect', 16],
['host_quit', 17],
['team_info', 18],
['team_score', 19],
['teamplay_broadcast_audio', 20],
['player_team', 21],
['player_class', 22],
['player_death', 23],
['player_hurt', 24],
['player_chat', 25],
['player_score', 26],
['player_spawn', 27],
['player_shoot', 28],
['player_use', 29],
['player_changename', 30],
['player_hintmessage', 31],
['base_player_teleported', 32],
['game_init', 33],
['game_newmap', 34],
['game_start', 35],
['game_end', 36],
['round_start', 37],
['round_end', 38],
['game_message', 39],
['break_breakable', 40],
['break_prop', 41],
['entity_killed', 42],
['bonus_updated', 43],
['achievement_event', 44],
['achievement_increment', 45],
['physgun_pickup', 46],
['flare_ignite_npc', 47],
['helicopter_grenade_punt_miss', 48],
['user_data_downloaded', 49],
['ragdoll_dissolved', 50],
['hltv_changed_mode', 51],
['hltv_changed_target', 52],
['vote_ended', 53],
['vote_started', 54],
['vote_changed', 55],
['vote_passed', 56],
['vote_failed', 57],
['vote_cast', 58],
['vote_options', 59],
['replay_saved', 60],
['entered_performance_mode', 61],
['browse_replays', 62],
['replay_youtube_stats', 63],
['inventory_updated', 64],
['cart_updated', 65],
['store_pricesheet_updated', 66],
['gc_connected', 67],
['item_schema_initialized', 68],
['intro_finish', 69],
['intro_nextcamera', 70],
['mm_lobby_chat', 71],
['mm_lobby_member_join', 72],
['mm_lobby_member_leave', 73],
['player_changeclass', 74],
['tf_map_time_remaining', 75],
['tf_game_over', 76],
['ctf_flag_captured', 77],
['controlpoint_initialized', 78],
['controlpoint_updateimages', 79],
['controlpoint_updatelayout', 80],
['controlpoint_updatecapping', 81],
['controlpoint_updateowner', 82],
['controlpoint_starttouch', 83],
['controlpoint_endtouch', 84],
['controlpoint_pulse_element', 85],
['controlpoint_fake_capture', 86],
['controlpoint_fake_capture_mult', 87],
['teamplay_round_selected', 88],
['teamplay_round_start', 89],
['teamplay_round_active', 90],
['teamplay_waiting_begins', 91],
['teamplay_waiting_ends', 92],
['teamplay_waiting_abouttoend', 93],
['teamplay_restart_round', 94],
['teamplay_ready_restart', 95],
['teamplay_round_restart_seconds', 96],
['teamplay_team_ready', 97],
['teamplay_round_win', 98],
['teamplay_update_timer', 99],
['teamplay_round_stalemate', 100],
['teamplay_overtime_begin', 101],
['teamplay_overtime_end', 102],
['teamplay_suddendeath_begin', 103],
['teamplay_suddendeath_end', 104],
['teamplay_game_over', 105],
['teamplay_map_time_remaining', 106],
['teamplay_timer_flash', 107],
['teamplay_timer_time_added', 108],
['teamplay_point_startcapture', 109],
['teamplay_point_captured', 110],
['teamplay_point_locked', 111],
['teamplay_point_unlocked', 112],
['teamplay_capture_broken', 113],
['teamplay_capture_blocked', 114],
['teamplay_flag_event', 115],
['teamplay_win_panel', 116],
['teamplay_teambalanced_player', 117],
['teamplay_setup_finished', 118],
['teamplay_alert', 119],
['training_complete', 120],
['show_freezepanel', 121],
['hide_freezepanel', 122],
['freezecam_started', 123],
['localplayer_changeteam', 124],
['localplayer_score_changed', 125],
['localplayer_changeclass', 126],
['localplayer_respawn', 127],
['building_info_changed', 128],
['localplayer_changedisguise', 129],
['player_account_changed', 130],
['spy_pda_reset', 131],
['flagstatus_update', 132],
['player_stats_updated', 133],
['playing_commentary', 134],
['player_chargedeployed', 135],
['player_builtobject', 136],
['player_upgradedobject', 137],
['player_carryobject', 138],
['player_dropobject', 139],
['object_removed', 140],
['object_destroyed', 141],
['object_detonated', 142],
['achievement_earned', 143],
['spec_target_updated', 144],
['tournament_stateupdate', 145],
['tournament_enablecountdown', 146],
['player_calledformedic', 147],
['player_askedforball', 148],
['localplayer_becameobserver', 149],
['player_ignited_inv', 150],
['player_ignited', 151],
['player_extinguished', 152],
['player_teleported', 153],
['player_healedmediccall', 154],
['localplayer_chargeready', 155],
['localplayer_winddown', 156],
['player_invulned', 157],
['escort_speed', 158],
['escort_progress', 159],
['escort_recede', 160],
['gameui_activated', 161],
['gameui_hidden', 162],
['player_escort_score', 163],
['player_healonhit', 164],
['player_stealsandvich', 165],
['show_class_layout', 166],
['show_vs_panel', 167],
['player_damaged', 168],
['arena_player_notification', 169],
['arena_match_maxstreak', 170],
['arena_round_start', 171],
['arena_win_panel', 172],
['pve_win_panel', 173],
['air_dash', 174],
['landed', 175],
['player_damage_dodged', 176],
['player_stunned', 177],
['scout_grand_slam', 178],
['scout_slamdoll_landed', 179],
['arrow_impact', 180],
['player_jarated', 181],
['player_jarated_fade', 182],
['player_shield_blocked', 183],
['player_pinned', 184],
['player_healedbymedic', 185],
['player_sapped_object', 186],
['item_found', 187],
['show_annotation', 188],
['hide_annotation', 189],
['post_inventory_application', 190],
['controlpoint_unlock_updated', 191],
['deploy_buff_banner', 192],
['player_buff', 193],
['medic_death', 194],
['overtime_nag', 195],
['teams_changed', 196],
['halloween_pumpkin_grab', 197],
['rocket_jump', 198],
['rocket_jump_landed', 199],
['sticky_jump', 200],
['sticky_jump_landed', 201],
['medic_defended', 202],
['localplayer_healed', 203],
['player_destroyed_pipebomb', 204],
['object_deflected', 205],
['player_mvp', 206],
['raid_spawn_mob', 207],
['raid_spawn_squad', 208],
['nav_blocked', 209],
['path_track_passed', 210],
['num_cappers_changed', 211],
['player_regenerate', 212],
['update_status_item', 213],
['stats_resetround', 214],
['scorestats_accumulated_update', 215],
['scorestats_accumulated_reset', 216],
['achievement_earned_local', 217],
['player_healed', 218],
['building_healed', 219],
['item_pickup', 220],
['duel_status', 221],
['fish_notice', 222],
['fish_notice__arm', 223],
['throwable_hit', 224],
['pumpkin_lord_summoned', 225],
['pumpkin_lord_killed', 226],
['merasmus_summoned', 227],
['merasmus_killed', 228],
['merasmus_escape_warning', 229],
['merasmus_escaped', 230],
['eyeball_boss_summoned', 231],
['eyeball_boss_stunned', 232],
['eyeball_boss_killed', 233],
['eyeball_boss_killer', 234],
['eyeball_boss_escape_imminent', 235],
['eyeball_boss_escaped', 236],
['npc_hurt', 237],
['controlpoint_timer_updated', 238],
['player_highfive_start', 239],
['player_highfive_cancel', 240],
['player_highfive_success', 241],
['player_bonuspoints', 242],
['player_upgraded', 243],
['player_buyback', 244],
['player_used_powerup_bottle', 245],
['christmas_gift_grab', 246],
['player_killed_achievement_zone', 247],
['party_updated', 248],
['lobby_updated', 249],
['mvm_mission_update', 250],
['recalculate_holidays', 251],
['player_currency_changed', 252],
['doomsday_rocket_open', 253],
['remove_nemesis_relationships', 254],
['mvm_creditbonus_wave', 255],
['mvm_creditbonus_all', 256],
['mvm_creditbonus_all_advanced', 257],
['mvm_quick_sentry_upgrade', 258],
['mvm_tank_destroyed_by_players', 259],
['mvm_kill_robot_delivering_bomb', 260],
['mvm_pickup_currency', 261],
['mvm_bomb_carrier_killed', 262],
['mvm_sentrybuster_detonate', 263],
['mvm_scout_marked_for_death', 264],
['mvm_medic_powerup_shared', 265],
['mvm_begin_wave', 266],
['mvm_wave_complete', 267],
['mvm_mission_complete', 268],
['mvm_bomb_reset_by_player', 269],
['mvm_bomb_alarm_triggered', 270],
['mvm_bomb_deploy_reset_by_player', 271],
['mvm_wave_failed', 272],
['mvm_reset_stats', 273],
['damage_resisted', 274],
['revive_player_notify', 275],
['revive_player_stopped', 276],
['revive_player_complete', 277],
['player_turned_to_ghost', 278],
['medigun_shield_blocked_damage', 279],
['mvm_adv_wave_complete_no_gates', 280],
['mvm_sniper_headshot_currency', 281],
['mvm_mannhattan_pit', 282],
['flag_carried_in_detection_zone', 283],
['mvm_adv_wave_killed_stun_radio', 284],
['player_directhit_stun', 285],
['mvm_sentrybuster_killed', 286],
['upgrades_file_changed', 287],
['rd_team_points_changed', 288],
['rd_rules_state_changed', 289],
['rd_robot_killed', 290],
['rd_robot_impact', 291],
['teamplay_pre_round_time_left', 292],
['parachute_deploy', 293],
['parachute_holster', 294],
['kill_refills_meter', 295],
['rps_taunt_event', 296],
['conga_kill', 297],
['player_initial_spawn', 298],
['competitive_victory', 299],
['competitive_stats_update', 300],
['minigame_win', 301],
['sentry_on_go_active', 302],
['duck_xp_level_up', 303],
['questlog_opened', 304],
['schema_updated', 305],
['localplayer_pickup_weapon', 306],
['rd_player_score_points', 307],
['demoman_det_stickies', 308],
['quest_objective_completed', 309],
['player_score_changed', 310],
['killed_capping_player', 311],
['environmental_death', 312],
['projectile_direct_hit', 313],
['pass_get', 314],
['pass_score', 315],
['pass_free', 316],
['pass_pass_caught', 317],
['pass_ball_stolen', 318],
['pass_ball_blocked', 319],
['damage_prevented', 320],
['halloween_boss_killed', 321],
['escaped_loot_island', 322],
['tagged_player_as_it', 323],
['merasmus_stunned', 324],
['merasmus_prop_found', 325],
['halloween_skeleton_killed', 326],
['escape_hell', 327],
['cross_spectral_bridge', 328],
['minigame_won', 329],
['respawn_ghost', 330],
['kill_in_hell', 331],
['halloween_duck_collected', 332],
['special_score', 333],
['team_leader_killed', 334],
['halloween_soul_collected', 335],
['recalculate_truce', 336],
['deadringer_cheat_death', 337],
['crossbow_heal', 338],
['damage_mitigated', 339],
['payload_pushed', 340],
['player_abandoned_match', 341],
['cl_drawline', 342],
['restart_timer_time', 343],
['winlimit_changed', 344],
['winpanel_show_scores', 345],
['top_streams_request_finished', 346],
['competitive_state_changed', 347],
['global_war_data_updated', 348],
['stop_watch_changed', 349],
['ds_stop', 350],
['ds_screenshot', 351],
['show_match_summary', 352],
['experience_changed', 353],
['begin_xp_lerp', 354],
['matchmaker_stats_updated', 355],
['rematch_vote_period_over', 356],
['rematch_failed_to_create', 357],
['player_rematch_change', 358],
['ping_updated', 359],
['player_next_map_vote_change', 360],
['vote_maps_changed', 361],
['hltv_status', 362],
['hltv_cameraman', 363],
['hltv_rank_camera', 364],
['hltv_rank_entity', 365],
['hltv_fixed', 366],
['hltv_chase', 367],
['hltv_message', 368],
['hltv_title', 369],
['hltv_chat', 370],
['replay_startrecord', 371],
['replay_sessioninfo', 372],
['replay_endrecord', 373],
['replay_replaysavailable', 374],
['replay_servererror', 375]
]);
//# sourceMappingURL=GameEventTypes.js.map

File diff suppressed because one or more lines are too long

13
build/Data/Header.d.ts vendored Normal file
View file

@ -0,0 +1,13 @@
export interface Header {
type: string;
version: number;
protocol: number;
server: string;
nick: string;
map: string;
game: string;
duration: number;
ticks: number;
frames: number;
sigon: number;
}

3
build/Data/Header.js Normal file
View file

@ -0,0 +1,3 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=Header.js.map

1
build/Data/Header.js.map Normal file
View file

@ -0,0 +1 @@
{"version":3,"file":"Header.js","sourceRoot":"","sources":["../../src/Data/Header.ts"],"names":[],"mappings":""}

45
build/Data/Match.d.ts vendored Normal file
View file

@ -0,0 +1,45 @@
import { Building } from './Building';
import { Chat } from './Chat';
import { Death } from './Death';
import { PacketMessage } from './Message';
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 { Team, TeamNumber } from './Team';
import { UserInfo } from './UserInfo';
import { Weapon } from './Weapon';
import { World } from './World';
export declare class Match {
tick: number;
chat: Chat[];
users: Map<number, UserInfo>;
deaths: Death[];
rounds: Round[];
startTick: number;
intervalPerTick: number;
world: World;
playerEntityMap: Map<EntityId, Player>;
weaponMap: Map<EntityId, Weapon>;
outerMap: Map<number, EntityId>;
teams: Map<TeamNumber, Team>;
teamEntityMap: Map<EntityId, Team>;
buildings: Map<EntityId, Building>;
playerResources: PlayerResource[];
readonly parserState: ParserState;
constructor(parserState: ParserState);
getState(): {
chat: Chat[];
users: {};
deaths: Death[];
rounds: Round[];
startTick: number;
intervalPerTick: number;
};
handlePacket(packet: Packet, message: PacketMessage): void;
getUserInfo(userId: number): UserInfo;
getUserInfoForEntity(entity: PacketEntity): UserInfo | null;
getPlayerByUserId(userId: number): Player | null;
}

120
build/Data/Match.js Normal file
View file

@ -0,0 +1,120 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const GameEvent_1 = require("../PacketHandler/GameEvent");
const PacketEntities_1 = require("../PacketHandler/PacketEntities");
const SayText2_1 = require("../PacketHandler/SayText2");
class Match {
constructor(parserState) {
this.tick = 0;
this.chat = [];
this.users = new Map();
this.deaths = [];
this.rounds = [];
this.startTick = 0;
this.intervalPerTick = 0;
this.world = {
boundaryMin: { x: 0, y: 0, z: 0 },
boundaryMax: { x: 0, y: 0, z: 0 }
};
this.playerEntityMap = new Map();
this.weaponMap = new Map();
this.outerMap = new Map();
this.teams = new Map();
this.teamEntityMap = new Map();
this.buildings = new Map();
this.playerResources = [];
this.parserState = parserState;
}
getState() {
const users = {};
for (const userEntity of this.parserState.userInfo.values()) {
this.getUserInfo(userEntity.userId);
}
for (const [key, user] of this.users.entries()) {
users[key] = {
classes: user.classes,
name: user.name,
steamId: user.steamId,
userId: user.userId
};
if (user.team) {
users[key].team = user.team;
}
}
return {
chat: this.chat,
users,
deaths: this.deaths,
rounds: this.rounds,
startTick: this.startTick,
intervalPerTick: this.intervalPerTick
};
}
handlePacket(packet, message) {
switch (packet.packetType) {
case 'packetEntities':
PacketEntities_1.handlePacketEntities(packet, this, message);
break;
case 'netTick':
if (this.startTick === 0) {
this.startTick = packet.tick;
}
this.tick = packet.tick;
break;
case 'serverInfo':
this.intervalPerTick = packet.intervalPerTick;
break;
case 'userMessage':
switch (packet.userMessageType) {
case 'sayText2':
SayText2_1.handleSayText2(packet, this);
break;
}
break;
case 'gameEvent':
GameEvent_1.handleGameEvent(packet, this);
break;
}
}
getUserInfo(userId) {
// 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 && user.userId !== userId) {
throw new Error(`Invalid user info id`);
}
if (!user) {
const entityInfo = this.parserState.getUserEntityInfo(userId);
const newUser = Object.assign({ classes: {}, team: '' }, entityInfo);
this.users.set(userId, newUser);
return newUser;
}
else if (!user.steamId) {
const entityInfo = this.parserState.getUserEntityInfo(userId);
if (entityInfo.steamId) {
user.steamId = entityInfo.steamId;
user.entityId = entityInfo.entityId;
user.name = entityInfo.name;
}
}
return user;
}
getUserInfoForEntity(entity) {
for (const userEntity of this.parserState.userInfo.values()) {
if (userEntity && userEntity.entityId === entity.entityIndex) {
return this.getUserInfo(userEntity.userId);
}
}
return null;
}
getPlayerByUserId(userId) {
const user = this.getUserInfo(userId);
const player = this.playerEntityMap.get(user.entityId);
return player || null;
}
}
exports.Match = Match;
//# sourceMappingURL=Match.js.map

1
build/Data/Match.js.map Normal file
View file

@ -0,0 +1 @@
{"version":3,"file":"Match.js","sourceRoot":"","sources":["../../src/Data/Match.ts"],"names":[],"mappings":"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"}

65
build/Data/Message.d.ts vendored Normal file
View file

@ -0,0 +1,65 @@
import { BitStream } from 'bit-buffer';
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 declare enum MessageType {
Sigon = 1,
Packet = 2,
SyncTick = 3,
ConsoleCmd = 4,
UserCmd = 5,
DataTables = 6,
Stop = 7,
StringTables = 8
}
export interface BaseMessage {
rawData: BitStream;
}
export interface PacketMessage extends BaseMessage {
tick: number;
type: MessageType.Packet;
packets: Packet[];
viewOrigin: [Vector, Vector];
viewAngles: [Vector, Vector];
localViewAngles: [Vector, Vector];
sequenceIn: number;
sequenceOut: number;
flags: number;
}
export declare type SigonMessage = PacketMessage;
export interface SyncTickMessage extends BaseMessage {
tick: number;
type: MessageType.SyncTick;
}
export interface StopMessage extends BaseMessage {
type: MessageType.Stop;
}
export interface ConsoleCmdMessage extends BaseMessage {
tick: number;
type: MessageType.ConsoleCmd;
command: string;
}
export interface UserCmdMessage extends BaseMessage {
tick: number;
type: MessageType.UserCmd;
sequenceOut: number;
}
export interface DataTablesMessage extends BaseMessage {
tick: number;
type: MessageType.DataTables;
tables: SendTable[];
serverClasses: ServerClass[];
}
export interface StringTablesMessage extends BaseMessage {
tick: number;
type: MessageType.StringTables;
tables: StringTable[];
}
export declare type Message = SigonMessage | PacketMessage | SyncTickMessage | ConsoleCmdMessage | UserCmdMessage | DataTablesMessage | StopMessage | StringTablesMessage;
export interface MessageHandler<M extends Message> {
parseMessage: (stream: BitStream, state: ParserState) => M;
encodeMessage: (message: M, stream: BitStream, state: ParserState) => void;
}

14
build/Data/Message.js Normal file
View file

@ -0,0 +1,14 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var MessageType;
(function (MessageType) {
MessageType[MessageType["Sigon"] = 1] = "Sigon";
MessageType[MessageType["Packet"] = 2] = "Packet";
MessageType[MessageType["SyncTick"] = 3] = "SyncTick";
MessageType[MessageType["ConsoleCmd"] = 4] = "ConsoleCmd";
MessageType[MessageType["UserCmd"] = 5] = "UserCmd";
MessageType[MessageType["DataTables"] = 6] = "DataTables";
MessageType[MessageType["Stop"] = 7] = "Stop";
MessageType[MessageType["StringTables"] = 8] = "StringTables";
})(MessageType = exports.MessageType || (exports.MessageType = {}));
//# sourceMappingURL=Message.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"Message.js","sourceRoot":"","sources":["../../src/Data/Message.ts"],"names":[],"mappings":";;AAQA,IAAY,WASX;AATD,WAAY,WAAW;IACtB,+CAAS,CAAA;IACT,iDAAU,CAAA;IACV,qDAAY,CAAA;IACZ,yDAAc,CAAA;IACd,mDAAW,CAAA;IACX,yDAAc,CAAA;IACd,6CAAQ,CAAA;IACR,6DAAgB,CAAA;AACjB,CAAC,EATW,WAAW,GAAX,mBAAW,KAAX,mBAAW,QAStB"}

246
build/Data/Packet.d.ts vendored Normal file
View file

@ -0,0 +1,246 @@
import { BitStream } from 'bit-buffer';
import { GameEventDefinition } from './GameEvent';
import { GameEvent } from './GameEventTypes';
import { EntityId, PacketEntity } from './PacketEntity';
import { Game } from './ParserState';
import { SendTable } from './SendTable';
import { ServerClass } from './ServerClass';
import { StringTable, StringTableEntry } from './StringTable';
import { UserMessagePacket, UserMessageTypeMap } from './UserMessage';
import { Vector } from './Vector';
export interface StringTablePacket {
packetType: 'stringTable';
tables: StringTable[];
}
export interface CreateStringTablePacket {
packetType: 'createStringTable';
table: StringTable;
}
export interface UpdateStringTablePacket {
packetType: 'updateStringTable';
entries: StringTableEntry[];
tableId: number;
}
export interface ConsoleCmdPacket {
packetType: 'consoleCmd';
command: string;
}
export interface DataTablePacket {
packetType: 'dataTable';
tables: SendTable[];
serverClasses: ServerClass[];
}
export interface BSPDecalPacket {
packetType: 'bspDecal';
position: Vector;
textureIndex: number;
entIndex: number;
modelIndex: number;
lowPriority: boolean;
}
export interface ClassInfoPacket {
packetType: 'classInfo';
number: number;
create: boolean;
entries: Array<{
classId: number;
className: string;
dataTableName: string;
}>;
}
export interface EntityMessagePacket {
packetType: 'entityMessage';
classId: number;
length: number;
data: string;
}
export interface GameEventPacket {
packetType: 'gameEvent';
event: GameEvent;
}
export interface GameEventListPacket {
packetType: 'gameEventList';
eventList: Map<number, GameEventDefinition<GameEvent['name']>>;
}
export interface PacketEntitiesPacket {
packetType: 'packetEntities';
entities: PacketEntity[];
removedEntities: EntityId[];
maxEntries: number;
delta: number;
baseLine: number;
updatedBaseLine: boolean;
}
export interface ParseSoundsPacket {
packetType: 'parseSounds';
reliable: boolean;
num: number;
length: number;
data: BitStream;
}
export interface SetConVarPacket {
packetType: 'setConVar';
vars: Map<string, string>;
}
export interface TempEntitiesPacket {
packetType: 'tempEntities';
entities: PacketEntity[];
}
export interface VoiceInitPacket {
packetType: 'voiceInit';
codec: string;
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 interface VoidPacket {
packetType: 'void';
}
export interface FilePacket {
packetType: 'file';
transferId: number;
fileName: string;
requested: boolean;
}
export interface NetTickPacket {
packetType: 'netTick';
tick: number;
frameTime: number;
stdDev: number;
}
export interface StringCmdPacket {
packetType: 'stringCmd';
command: string;
}
export interface SigOnStatePacket {
packetType: 'sigOnState';
state: number;
count: number;
}
export interface PrintPacket {
packetType: 'print';
value: string;
}
export interface ServerInfoPacket {
packetType: 'serverInfo';
version: number;
serverCount: number;
stv: boolean;
dedicated: boolean;
maxCrc: number;
maxClasses: number;
mapHash: number;
playerCount: number;
maxPlayerCount: number;
intervalPerTick: number;
platform: string;
game: Game;
skybox: string;
serverName: string;
replay: boolean;
}
export interface SetPausePacket {
packetType: 'setPause';
paused: boolean;
}
export interface SetViewPacket {
packetType: 'setView';
index: number;
}
export interface FixAnglePacket {
packetType: 'fixAngle';
relative: boolean;
x: number;
y: number;
z: number;
}
export interface PreFetchPacket {
packetType: 'preFetch';
index: number;
}
export interface GetCvarValuePacket {
packetType: 'getCvarValue';
cookie: number;
value: string;
}
export declare type Packet = BSPDecalPacket | StringTablePacket | CreateStringTablePacket | UpdateStringTablePacket | DataTablePacket | ClassInfoPacket | EntityMessagePacket | GameEventPacket | GameEventListPacket | PacketEntitiesPacket | ParseSoundsPacket | SetConVarPacket | TempEntitiesPacket | UserMessagePacket | VoiceInitPacket | VoiceDataPacket | MenuPacket | ConsoleCmdPacket | CmdKeyValuesPacket | VoidPacket | FilePacket | NetTickPacket | StringCmdPacket | SigOnStatePacket | PrintPacket | ServerInfoPacket | SetPausePacket | SetViewPacket | FixAnglePacket | PreFetchPacket | GetCvarValuePacket;
export declare type PacketType = Packet['packetType'];
export declare type PacketMapType = {
bspDecal: BSPDecalPacket;
stringTable: StringTablePacket;
createStringTable: CreateStringTablePacket;
updateStringTable: UpdateStringTablePacket;
dataTable: DataTablePacket;
classInfo: ClassInfoPacket;
entityMessage: EntityMessagePacket;
gameEvent: GameEventPacket;
gameEventList: GameEventListPacket;
packetEntities: PacketEntitiesPacket;
parseSounds: ParseSoundsPacket;
setConVar: SetConVarPacket;
tempEntities: TempEntitiesPacket;
userMessage: UserMessagePacket;
voiceInit: VoiceInitPacket;
voiceData: VoiceDataPacket;
menu: MenuPacket;
consoleCmd: ConsoleCmdPacket;
cmdKeyValues: CmdKeyValuesPacket;
'void': VoidPacket;
file: FilePacket;
netTick: NetTickPacket;
stringCmd: StringCmdPacket;
sigOnState: SigOnStatePacket;
print: PrintPacket;
serverInfo: ServerInfoPacket;
setPause: SetPausePacket;
setView: SetViewPacket;
fixAngle: FixAnglePacket;
preFetch: PreFetchPacket;
getCvarValue: GetCvarValuePacket;
} & UserMessageTypeMap;
export declare enum PacketTypeId {
file = 2,
netTick = 3,
stringCmd = 4,
setConVar = 5,
sigOnState = 6,
print = 7,
serverInfo = 8,
classInfo = 10,
setPause = 11,
createStringTable = 12,
updateStringTable = 13,
voiceInit = 14,
voiceData = 15,
parseSounds = 17,
setView = 18,
fixAngle = 19,
bspDecal = 21,
userMessage = 23,
entityMessage = 24,
gameEvent = 25,
packetEntities = 26,
tempEntities = 27,
preFetch = 28,
menu = 29,
gameEventList = 30,
getCvarValue = 31,
cmdKeyValues = 32
}

33
build/Data/Packet.js Normal file
View file

@ -0,0 +1,33 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var PacketTypeId;
(function (PacketTypeId) {
PacketTypeId[PacketTypeId["file"] = 2] = "file";
PacketTypeId[PacketTypeId["netTick"] = 3] = "netTick";
PacketTypeId[PacketTypeId["stringCmd"] = 4] = "stringCmd";
PacketTypeId[PacketTypeId["setConVar"] = 5] = "setConVar";
PacketTypeId[PacketTypeId["sigOnState"] = 6] = "sigOnState";
PacketTypeId[PacketTypeId["print"] = 7] = "print";
PacketTypeId[PacketTypeId["serverInfo"] = 8] = "serverInfo";
PacketTypeId[PacketTypeId["classInfo"] = 10] = "classInfo";
PacketTypeId[PacketTypeId["setPause"] = 11] = "setPause";
PacketTypeId[PacketTypeId["createStringTable"] = 12] = "createStringTable";
PacketTypeId[PacketTypeId["updateStringTable"] = 13] = "updateStringTable";
PacketTypeId[PacketTypeId["voiceInit"] = 14] = "voiceInit";
PacketTypeId[PacketTypeId["voiceData"] = 15] = "voiceData";
PacketTypeId[PacketTypeId["parseSounds"] = 17] = "parseSounds";
PacketTypeId[PacketTypeId["setView"] = 18] = "setView";
PacketTypeId[PacketTypeId["fixAngle"] = 19] = "fixAngle";
PacketTypeId[PacketTypeId["bspDecal"] = 21] = "bspDecal";
PacketTypeId[PacketTypeId["userMessage"] = 23] = "userMessage";
PacketTypeId[PacketTypeId["entityMessage"] = 24] = "entityMessage";
PacketTypeId[PacketTypeId["gameEvent"] = 25] = "gameEvent";
PacketTypeId[PacketTypeId["packetEntities"] = 26] = "packetEntities";
PacketTypeId[PacketTypeId["tempEntities"] = 27] = "tempEntities";
PacketTypeId[PacketTypeId["preFetch"] = 28] = "preFetch";
PacketTypeId[PacketTypeId["menu"] = 29] = "menu";
PacketTypeId[PacketTypeId["gameEventList"] = 30] = "gameEventList";
PacketTypeId[PacketTypeId["getCvarValue"] = 31] = "getCvarValue";
PacketTypeId[PacketTypeId["cmdKeyValues"] = 32] = "cmdKeyValues";
})(PacketTypeId = exports.PacketTypeId || (exports.PacketTypeId = {}));
//# sourceMappingURL=Packet.js.map

1
build/Data/Packet.js.map Normal file
View file

@ -0,0 +1 @@
{"version":3,"file":"Packet.js","sourceRoot":"","sources":["../../src/Data/Packet.ts"],"names":[],"mappings":";;AA6RA,IAAY,YA4BX;AA5BD,WAAY,YAAY;IACvB,+CAAQ,CAAA;IACR,qDAAW,CAAA;IACX,yDAAa,CAAA;IACb,yDAAa,CAAA;IACb,2DAAc,CAAA;IACd,iDAAS,CAAA;IACT,2DAAc,CAAA;IACd,0DAAc,CAAA;IACd,wDAAa,CAAA;IACb,0EAAsB,CAAA;IACtB,0EAAsB,CAAA;IACtB,0DAAc,CAAA;IACd,0DAAc,CAAA;IACd,8DAAgB,CAAA;IAChB,sDAAY,CAAA;IACZ,wDAAa,CAAA;IACb,wDAAa,CAAA;IACb,8DAAgB,CAAA;IAChB,kEAAkB,CAAA;IAClB,0DAAc,CAAA;IACd,oEAAmB,CAAA;IACnB,gEAAiB,CAAA;IACjB,wDAAa,CAAA;IACb,gDAAS,CAAA;IACT,kEAAkB,CAAA;IAClB,gEAAiB,CAAA;IACjB,gEAAiB,CAAA;AAClB,CAAC,EA5BW,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QA4BvB"}

28
build/Data/PacketEntity.d.ts vendored Normal file
View file

@ -0,0 +1,28 @@
import { SendProp, SendPropValue } from './SendProp';
import { SendPropDefinition } from './SendPropDefinition';
import { ServerClass } from './ServerClass';
export declare enum PVS {
PRESERVE = 0,
ENTER = 1,
LEAVE = 2,
DELETE = 4
}
export declare type EntityId = number;
export declare class PacketEntity {
static getPropByFullName(props: SendProp[], fullName: string): SendProp | null;
serverClass: ServerClass;
entityIndex: EntityId;
props: SendProp[];
inPVS: boolean;
pvs: PVS;
serialNumber?: number;
delay?: number;
constructor(serverClass: ServerClass, entityIndex: number, pvs: PVS);
getPropByDefinition(definition: SendPropDefinition): SendProp | null;
getProperty(originTable: string, name: string): SendProp;
hasProperty(originTable: string, name: string): boolean;
clone(): PacketEntity;
applyPropUpdate(props: SendProp[]): void;
diffFromBaseLine(baselineProps: SendProp[]): SendProp[];
getPropValue(fullName: string): SendPropValue | null;
}

View file

@ -0,0 +1,77 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const SendProp_1 = require("./SendProp");
var PVS;
(function (PVS) {
PVS[PVS["PRESERVE"] = 0] = "PRESERVE";
PVS[PVS["ENTER"] = 1] = "ENTER";
PVS[PVS["LEAVE"] = 2] = "LEAVE";
PVS[PVS["DELETE"] = 4] = "DELETE";
})(PVS = exports.PVS || (exports.PVS = {}));
class PacketEntity {
static getPropByFullName(props, fullName) {
for (const prop of props) {
if (prop.definition.fullName === fullName) {
return prop;
}
}
return null;
}
constructor(serverClass, entityIndex, pvs) {
this.serverClass = serverClass;
this.entityIndex = entityIndex;
this.props = [];
this.inPVS = false;
this.pvs = pvs;
}
getPropByDefinition(definition) {
return PacketEntity.getPropByFullName(this.props, definition.fullName);
}
getProperty(originTable, name) {
const prop = PacketEntity.getPropByFullName(this.props, `${originTable}.${name}`);
if (prop) {
return prop;
}
throw new Error(`Property not found in entity (${originTable}.${name})`);
}
hasProperty(originTable, name) {
return PacketEntity.getPropByFullName(this.props, `${originTable}.${name}`) !== null;
}
clone() {
const result = new PacketEntity(this.serverClass, this.entityIndex, this.pvs);
for (const prop of this.props) {
result.props.push(prop.clone());
}
if (this.serialNumber) {
result.serialNumber = this.serialNumber;
}
if (typeof this.delay !== 'undefined') {
result.delay = this.delay;
}
result.inPVS = this.inPVS;
return result;
}
applyPropUpdate(props) {
for (const prop of props) {
const existingProp = this.getPropByDefinition(prop.definition);
if (existingProp) {
existingProp.value = prop.value;
}
else {
this.props.push(prop.clone());
}
}
}
diffFromBaseLine(baselineProps) {
return this.props.filter((prop) => {
const baseProp = PacketEntity.getPropByFullName(baselineProps, prop.definition.fullName);
return (!baseProp || !SendProp_1.SendProp.areEqual(prop, baseProp));
});
}
getPropValue(fullName) {
const prop = PacketEntity.getPropByFullName(this.props, fullName);
return prop ? prop.value : null;
}
}
exports.PacketEntity = PacketEntity;
//# sourceMappingURL=PacketEntity.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"PacketEntity.js","sourceRoot":"","sources":["../../src/Data/PacketEntity.ts"],"names":[],"mappings":"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"}

37
build/Data/ParserState.d.ts vendored Normal file
View file

@ -0,0 +1,37 @@
import { BitStream } from 'bit-buffer';
import { GameEventDefinition } from './GameEvent';
import { GameEventType } from './GameEventTypes';
import { Message } from './Message';
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';
import { UserEntityInfo, UserId } from './UserInfo';
export declare type Game = 'tf' | 'hl2mp';
export declare class ParserState {
version: number;
staticBaseLines: Map<ServerClassId, BitStream>;
staticBaselineCache: Map<ServerClassId, SendProp[]>;
eventDefinitions: Map<number, GameEventDefinition<GameEventType>>;
eventDefinitionTypes: Map<GameEventType, number>;
entityClasses: Map<EntityId, ServerClass>;
sendTables: Map<SendTableName, SendTable>;
stringTables: StringTable[];
serverClasses: ServerClass[];
instanceBaselines: [Map<EntityId, SendProp[]>, Map<EntityId, SendProp[]>];
skippedPackets: PacketTypeId[];
userInfo: Map<UserId, UserEntityInfo>;
tick: number;
game: Game;
handlePacket(packet: Packet): void;
handleMessage(message: Message): void;
getStringTable(name: string): StringTable | null;
getUserEntityInfo(userId: number): UserEntityInfo;
private handleDataTableMessage;
private handleStringTableMessage;
}
export declare function getClassBits(state: ParserState): number;
export declare function getSendTable(state: ParserState, dataTable: string): SendTable;
export declare function createParserState(): ParserState;

107
build/Data/ParserState.js Normal file
View file

@ -0,0 +1,107 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const GameEventList_1 = require("../PacketHandler/GameEventList");
const PacketEntities_1 = require("../PacketHandler/PacketEntities");
const StringTable_1 = require("../PacketHandler/StringTable");
const Message_1 = require("./Message");
class ParserState {
constructor() {
this.version = 0;
this.staticBaseLines = new Map();
this.staticBaselineCache = new Map();
this.eventDefinitions = new Map();
this.eventDefinitionTypes = new Map();
this.entityClasses = new Map();
this.sendTables = new Map();
this.stringTables = [];
this.serverClasses = [];
this.instanceBaselines = [new Map(), new Map()];
this.skippedPackets = [];
this.userInfo = new Map();
this.tick = 0;
}
handlePacket(packet) {
switch (packet.packetType) {
case 'netTick':
this.tick = packet.tick;
break;
case 'serverInfo':
this.version = packet.version;
this.game = packet.game;
break;
case 'stringTable':
StringTable_1.handleStringTables(packet, this);
break;
case 'createStringTable':
StringTable_1.handleStringTable(packet, this);
break;
case 'updateStringTable':
StringTable_1.handleStringTableUpdate(packet, this);
break;
case 'gameEventList':
GameEventList_1.handleGameEventList(packet, this);
break;
case 'packetEntities':
PacketEntities_1.handlePacketEntitiesForState(packet, this);
break;
}
}
handleMessage(message) {
switch (message.type) {
case Message_1.MessageType.DataTables:
this.handleDataTableMessage(message);
break;
case Message_1.MessageType.StringTables:
this.handleStringTableMessage(message);
break;
}
}
getStringTable(name) {
const table = this.stringTables.find((stringTable) => stringTable.name === name);
if (!table) {
return null;
}
return table;
}
getUserEntityInfo(userId) {
const info = this.userInfo.get(JSON.parse(JSON.stringify(userId)));
if (info) {
return info;
}
return {
name: '',
userId,
steamId: '',
entityId: 0
};
}
handleDataTableMessage(message) {
for (const table of message.tables) {
this.sendTables.set(table.name, table);
}
this.serverClasses = message.serverClasses;
}
handleStringTableMessage(message) {
for (const table of message.tables) {
StringTable_1.handleTable(table, this);
}
}
}
exports.ParserState = ParserState;
function getClassBits(state) {
return Math.ceil(Math.log(state.serverClasses.length) * Math.LOG2E);
}
exports.getClassBits = getClassBits;
function getSendTable(state, dataTable) {
const sendTable = state.sendTables.get(dataTable);
if (!sendTable) {
throw new Error(`Unknown sendTable ${dataTable}`);
}
return sendTable;
}
exports.getSendTable = getSendTable;
function createParserState() {
return new ParserState();
}
exports.createParserState = createParserState;
//# sourceMappingURL=ParserState.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"ParserState.js","sourceRoot":"","sources":["../../src/Data/ParserState.ts"],"names":[],"mappings":"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"}

26
build/Data/Player.d.ts vendored Normal file
View file

@ -0,0 +1,26 @@
import { Match } from './Match';
import { UserInfo } from './UserInfo';
import { Vector } from './Vector';
import { Weapon } from './Weapon';
export declare enum LifeState {
ALIVE = 0,
DYING = 1,
DEATH = 2,
RESPAWNABLE = 3
}
export declare class Player {
match: Match;
user: UserInfo;
position: Vector;
health: number;
maxHealth: number;
classId: number;
team: number;
viewAngle: number;
weaponIds: number[];
ammo: number[];
lifeState: LifeState;
activeWeapon: number;
constructor(match: Match, userInfo: UserInfo);
readonly weapons: Weapon[];
}

34
build/Data/Player.js Normal file
View file

@ -0,0 +1,34 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const Vector_1 = require("./Vector");
var LifeState;
(function (LifeState) {
LifeState[LifeState["ALIVE"] = 0] = "ALIVE";
LifeState[LifeState["DYING"] = 1] = "DYING";
LifeState[LifeState["DEATH"] = 2] = "DEATH";
LifeState[LifeState["RESPAWNABLE"] = 3] = "RESPAWNABLE";
})(LifeState = exports.LifeState || (exports.LifeState = {}));
class Player {
constructor(match, userInfo) {
this.position = new Vector_1.Vector(0, 0, 0);
this.health = 0;
this.maxHealth = 0;
this.classId = 0;
this.team = 0;
this.viewAngle = 0;
this.weaponIds = [];
this.ammo = [];
this.lifeState = LifeState.DEATH;
this.activeWeapon = 0;
this.match = match;
this.user = userInfo;
}
get weapons() {
return this.weaponIds
.map((id) => this.match.outerMap.get(id))
.filter((entityId) => entityId > 0)
.map((entityId) => this.match.weaponMap.get(entityId));
}
}
exports.Player = Player;
//# sourceMappingURL=Player.js.map

1
build/Data/Player.js.map Normal file
View file

@ -0,0 +1 @@
{"version":3,"file":"Player.js","sourceRoot":"","sources":["../../src/Data/Player.ts"],"names":[],"mappings":";;AAIA,qCAAgC;AAGhC,IAAY,SAKX;AALD,WAAY,SAAS;IACpB,2CAAS,CAAA;IACT,2CAAS,CAAA;IACT,2CAAS,CAAA;IACT,uDAAe,CAAA;AAChB,CAAC,EALW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAKpB;AAED,MAAa,MAAM;IAclB,YAAY,KAAY,EAAE,QAAkB;QAXrC,aAAQ,GAAW,IAAI,eAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACvC,WAAM,GAAW,CAAC,CAAC;QACnB,cAAS,GAAW,CAAC,CAAC;QACtB,YAAO,GAAW,CAAC,CAAC;QACpB,SAAI,GAAW,CAAC,CAAC;QACjB,cAAS,GAAW,CAAC,CAAC;QACtB,cAAS,GAAa,EAAE,CAAC;QACzB,SAAI,GAAa,EAAE,CAAC;QACpB,cAAS,GAAc,SAAS,CAAC,KAAK,CAAC;QACvC,iBAAY,GAAW,CAAC,CAAC;QAG/B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;IACtB,CAAC;IAED,IAAI,OAAO;QACV,OAAO,IAAI,CAAC,SAAS;aACnB,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAa,CAAC;aACpD,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,GAAG,CAAC,CAAC;aAClC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAW,CAAC,CAAC;IACnE,CAAC;CACD;AAzBD,wBAyBC"}

81
build/Data/PlayerCondition.d.ts vendored Normal file
View file

@ -0,0 +1,81 @@
export declare enum PlayerCondition {
TF_COND_AIMIN = 1,
TF_COND_ZOOMED = 2,
TF_COND_DISGUISING = 4,
TF_COND_DISGUISED = 8,
TF_COND_STEALTHED = 16,
TF_COND_INVULNERABL = 32,
TF_COND_TELEPORTED = 64,
TF_COND_TAUNTING = 128,
TF_COND_INVULNERABLE_WEARINGOFF = 256,
TF_COND_STEALTHED_BLIN = 512,
TF_COND_SELECTED_TO_TELEPOR = 1024,
TF_COND_CRITBOOSTED = 2048,
TF_COND_TMPDAMAGEBONUS = 4096,
TF_COND_FEIGN_DEATH = 8192,
TF_COND_PHAS = 16384,
TF_COND_STUNNED = 32768,
TF_COND_OFFENSEBUF = 65536,
TF_COND_SHIELD_CHARG = 131072,
TF_COND_DEMO_BUF = 262144,
TF_COND_ENERGY_BUF = 524288,
TF_COND_RADIUSHEA = 1048576,
TF_COND_HEALTH_BUF = 2097152,
TF_COND_BURNING = 4194304,
TF_COND_HEALTH_OVERHEALE = 8388608,
TF_COND_URINE = 16777216,
TF_COND_BLEEDING = 33554432,
TF_COND_DEFENSEBUFF = 67108864,
TF_COND_MAD_MILK = 134217728,
TF_COND_MEGAHEAL = 268435456,
TF_COND_REGENONDAMAGEBUF = 536870912,
TF_COND_MARKEDFORDEATH = 1073741824,
TF_COND_NOHEALINGDAMAGEBUF = -2147483648,
TF_COND_SPEED_BOOST = 1,
TF_COND_CRITBOOSTED_PUMPKIN = 2,
TF_COND_CRITBOOSTED_USER_BUFF = 4,
TF_COND_CRITBOOSTED_DEMO_CHARGE = 8,
TF_COND_CRITBOOSTED_HYPE = 16,
TF_COND_CRITBOOSTED_FIRST_BLOOD = 32,
TF_COND_CRITBOOSTED_BONUS_TIME = 64,
TF_COND_CRITBOOSTED_CTF_CAPTURE = 128,
TF_COND_CRITBOOSTED_ON_KILL = 256,
TF_COND_CANNOT_SWITCH_FROM_MELEE = 512,
TF_COND_DEFENSEBUFF_NO_CRIT_BLOCK = 1024,
TF_COND_REPROGRAMME = 2048,
TF_COND_CRITBOOSTED_RAGE_BUF = 4096,
TF_COND_DEFENSEBUFF_HIG = 8192,
TF_COND_SNIPERCHARGE_RAGE_BUFF = 16384,
TF_COND_DISGUISE_WEARINGOF = 32768,
TF_COND_MARKEDFORDEATH_SILENT = 65536,
TF_COND_DISGUISED_AS_DISPENSE = 131072,
TF_COND_SAPPED = 262144,
TF_COND_INVULNERABLE_HIDE_UNLESS_DAMAGE = 524288,
TF_COND_INVULNERABLE_USER_BUF = 1048576,
TF_COND_HALLOWEEN_BOMB_HEAD = 2097152,
TF_COND_HALLOWEEN_THRILLER = 4194304,
TF_COND_RADIUSHEAL_ON_DAMAGE = 8388608,
TF_COND_CRITBOOSTED_CARD_EFFECT = 16777216,
TF_COND_INVULNERABLE_CARD_EFFECT = 33554432,
TF_COND_MEDIGUN_UBER_BULLET_RESIST = 67108864,
TF_COND_MEDIGUN_UBER_BLAST_RESIST = 134217728,
TF_COND_MEDIGUN_UBER_FIRE_RESIST = 268435456,
TF_COND_MEDIGUN_SMALL_BULLET_RESIST = 536870912,
TF_COND_MEDIGUN_SMALL_BLAST_RESIST = 1073741824,
TF_COND_MEDIGUN_SMALL_FIRE_RESIST = -2147483648,
TF_COND_STEALTHED_USER_BUF = 1,
TF_COND_MEDIGUN_DEBUF = 2,
TF_COND_STEALTHED_USER_BUFF_FADING = 4,
TF_COND_BULLET_IMMUNE = 8,
TF_COND_BLAST_IMMUNE = 16,
TF_COND_FIRE_IMMUNE = 32,
TF_COND_PREVENT_DEATH = 64,
TF_COND_MVM_BOT_STUN_RADIOWAVE = 128,
TF_COND_HALLOWEEN_SPEED_BOOST = 256,
TF_COND_HALLOWEEN_QUICK_HEAL = 512,
TF_COND_HALLOWEEN_GIANT = 1024,
TF_COND_HALLOWEEN_TINY = 2048,
TF_COND_HALLOWEEN_IN_HELL = 4096,
TF_COND_HALLOWEEN_GHOST_MODE = 8192,
TF_COND_MINICRITBOOSTED_ON_KILL = 16384
}

View file

@ -0,0 +1,85 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var PlayerCondition;
(function (PlayerCondition) {
PlayerCondition[PlayerCondition["TF_COND_AIMIN"] = 1] = "TF_COND_AIMIN";
PlayerCondition[PlayerCondition["TF_COND_ZOOMED"] = 2] = "TF_COND_ZOOMED";
PlayerCondition[PlayerCondition["TF_COND_DISGUISING"] = 4] = "TF_COND_DISGUISING";
PlayerCondition[PlayerCondition["TF_COND_DISGUISED"] = 8] = "TF_COND_DISGUISED";
PlayerCondition[PlayerCondition["TF_COND_STEALTHED"] = 16] = "TF_COND_STEALTHED";
PlayerCondition[PlayerCondition["TF_COND_INVULNERABL"] = 32] = "TF_COND_INVULNERABL";
PlayerCondition[PlayerCondition["TF_COND_TELEPORTED"] = 64] = "TF_COND_TELEPORTED";
PlayerCondition[PlayerCondition["TF_COND_TAUNTING"] = 128] = "TF_COND_TAUNTING";
PlayerCondition[PlayerCondition["TF_COND_INVULNERABLE_WEARINGOFF"] = 256] = "TF_COND_INVULNERABLE_WEARINGOFF";
PlayerCondition[PlayerCondition["TF_COND_STEALTHED_BLIN"] = 512] = "TF_COND_STEALTHED_BLIN";
PlayerCondition[PlayerCondition["TF_COND_SELECTED_TO_TELEPOR"] = 1024] = "TF_COND_SELECTED_TO_TELEPOR";
PlayerCondition[PlayerCondition["TF_COND_CRITBOOSTED"] = 2048] = "TF_COND_CRITBOOSTED";
PlayerCondition[PlayerCondition["TF_COND_TMPDAMAGEBONUS"] = 4096] = "TF_COND_TMPDAMAGEBONUS";
PlayerCondition[PlayerCondition["TF_COND_FEIGN_DEATH"] = 8192] = "TF_COND_FEIGN_DEATH";
PlayerCondition[PlayerCondition["TF_COND_PHAS"] = 16384] = "TF_COND_PHAS";
PlayerCondition[PlayerCondition["TF_COND_STUNNED"] = 32768] = "TF_COND_STUNNED";
PlayerCondition[PlayerCondition["TF_COND_OFFENSEBUF"] = 65536] = "TF_COND_OFFENSEBUF";
PlayerCondition[PlayerCondition["TF_COND_SHIELD_CHARG"] = 131072] = "TF_COND_SHIELD_CHARG";
PlayerCondition[PlayerCondition["TF_COND_DEMO_BUF"] = 262144] = "TF_COND_DEMO_BUF";
PlayerCondition[PlayerCondition["TF_COND_ENERGY_BUF"] = 524288] = "TF_COND_ENERGY_BUF";
PlayerCondition[PlayerCondition["TF_COND_RADIUSHEA"] = 1048576] = "TF_COND_RADIUSHEA";
PlayerCondition[PlayerCondition["TF_COND_HEALTH_BUF"] = 2097152] = "TF_COND_HEALTH_BUF";
PlayerCondition[PlayerCondition["TF_COND_BURNING"] = 4194304] = "TF_COND_BURNING";
PlayerCondition[PlayerCondition["TF_COND_HEALTH_OVERHEALE"] = 8388608] = "TF_COND_HEALTH_OVERHEALE";
PlayerCondition[PlayerCondition["TF_COND_URINE"] = 16777216] = "TF_COND_URINE";
PlayerCondition[PlayerCondition["TF_COND_BLEEDING"] = 33554432] = "TF_COND_BLEEDING";
PlayerCondition[PlayerCondition["TF_COND_DEFENSEBUFF"] = 67108864] = "TF_COND_DEFENSEBUFF";
PlayerCondition[PlayerCondition["TF_COND_MAD_MILK"] = 134217728] = "TF_COND_MAD_MILK";
PlayerCondition[PlayerCondition["TF_COND_MEGAHEAL"] = 268435456] = "TF_COND_MEGAHEAL";
PlayerCondition[PlayerCondition["TF_COND_REGENONDAMAGEBUF"] = 536870912] = "TF_COND_REGENONDAMAGEBUF";
PlayerCondition[PlayerCondition["TF_COND_MARKEDFORDEATH"] = 1073741824] = "TF_COND_MARKEDFORDEATH";
PlayerCondition[PlayerCondition["TF_COND_NOHEALINGDAMAGEBUF"] = -2147483648] = "TF_COND_NOHEALINGDAMAGEBUF";
PlayerCondition[PlayerCondition["TF_COND_SPEED_BOOST"] = 1] = "TF_COND_SPEED_BOOST";
PlayerCondition[PlayerCondition["TF_COND_CRITBOOSTED_PUMPKIN"] = 2] = "TF_COND_CRITBOOSTED_PUMPKIN";
PlayerCondition[PlayerCondition["TF_COND_CRITBOOSTED_USER_BUFF"] = 4] = "TF_COND_CRITBOOSTED_USER_BUFF";
PlayerCondition[PlayerCondition["TF_COND_CRITBOOSTED_DEMO_CHARGE"] = 8] = "TF_COND_CRITBOOSTED_DEMO_CHARGE";
PlayerCondition[PlayerCondition["TF_COND_CRITBOOSTED_HYPE"] = 16] = "TF_COND_CRITBOOSTED_HYPE";
PlayerCondition[PlayerCondition["TF_COND_CRITBOOSTED_FIRST_BLOOD"] = 32] = "TF_COND_CRITBOOSTED_FIRST_BLOOD";
PlayerCondition[PlayerCondition["TF_COND_CRITBOOSTED_BONUS_TIME"] = 64] = "TF_COND_CRITBOOSTED_BONUS_TIME";
PlayerCondition[PlayerCondition["TF_COND_CRITBOOSTED_CTF_CAPTURE"] = 128] = "TF_COND_CRITBOOSTED_CTF_CAPTURE";
PlayerCondition[PlayerCondition["TF_COND_CRITBOOSTED_ON_KILL"] = 256] = "TF_COND_CRITBOOSTED_ON_KILL";
PlayerCondition[PlayerCondition["TF_COND_CANNOT_SWITCH_FROM_MELEE"] = 512] = "TF_COND_CANNOT_SWITCH_FROM_MELEE";
PlayerCondition[PlayerCondition["TF_COND_DEFENSEBUFF_NO_CRIT_BLOCK"] = 1024] = "TF_COND_DEFENSEBUFF_NO_CRIT_BLOCK";
PlayerCondition[PlayerCondition["TF_COND_REPROGRAMME"] = 2048] = "TF_COND_REPROGRAMME";
PlayerCondition[PlayerCondition["TF_COND_CRITBOOSTED_RAGE_BUF"] = 4096] = "TF_COND_CRITBOOSTED_RAGE_BUF";
PlayerCondition[PlayerCondition["TF_COND_DEFENSEBUFF_HIG"] = 8192] = "TF_COND_DEFENSEBUFF_HIG";
PlayerCondition[PlayerCondition["TF_COND_SNIPERCHARGE_RAGE_BUFF"] = 16384] = "TF_COND_SNIPERCHARGE_RAGE_BUFF";
PlayerCondition[PlayerCondition["TF_COND_DISGUISE_WEARINGOF"] = 32768] = "TF_COND_DISGUISE_WEARINGOF";
PlayerCondition[PlayerCondition["TF_COND_MARKEDFORDEATH_SILENT"] = 65536] = "TF_COND_MARKEDFORDEATH_SILENT";
PlayerCondition[PlayerCondition["TF_COND_DISGUISED_AS_DISPENSE"] = 131072] = "TF_COND_DISGUISED_AS_DISPENSE";
PlayerCondition[PlayerCondition["TF_COND_SAPPED"] = 262144] = "TF_COND_SAPPED";
PlayerCondition[PlayerCondition["TF_COND_INVULNERABLE_HIDE_UNLESS_DAMAGE"] = 524288] = "TF_COND_INVULNERABLE_HIDE_UNLESS_DAMAGE";
PlayerCondition[PlayerCondition["TF_COND_INVULNERABLE_USER_BUF"] = 1048576] = "TF_COND_INVULNERABLE_USER_BUF";
PlayerCondition[PlayerCondition["TF_COND_HALLOWEEN_BOMB_HEAD"] = 2097152] = "TF_COND_HALLOWEEN_BOMB_HEAD";
PlayerCondition[PlayerCondition["TF_COND_HALLOWEEN_THRILLER"] = 4194304] = "TF_COND_HALLOWEEN_THRILLER";
PlayerCondition[PlayerCondition["TF_COND_RADIUSHEAL_ON_DAMAGE"] = 8388608] = "TF_COND_RADIUSHEAL_ON_DAMAGE";
PlayerCondition[PlayerCondition["TF_COND_CRITBOOSTED_CARD_EFFECT"] = 16777216] = "TF_COND_CRITBOOSTED_CARD_EFFECT";
PlayerCondition[PlayerCondition["TF_COND_INVULNERABLE_CARD_EFFECT"] = 33554432] = "TF_COND_INVULNERABLE_CARD_EFFECT";
PlayerCondition[PlayerCondition["TF_COND_MEDIGUN_UBER_BULLET_RESIST"] = 67108864] = "TF_COND_MEDIGUN_UBER_BULLET_RESIST";
PlayerCondition[PlayerCondition["TF_COND_MEDIGUN_UBER_BLAST_RESIST"] = 134217728] = "TF_COND_MEDIGUN_UBER_BLAST_RESIST";
PlayerCondition[PlayerCondition["TF_COND_MEDIGUN_UBER_FIRE_RESIST"] = 268435456] = "TF_COND_MEDIGUN_UBER_FIRE_RESIST";
PlayerCondition[PlayerCondition["TF_COND_MEDIGUN_SMALL_BULLET_RESIST"] = 536870912] = "TF_COND_MEDIGUN_SMALL_BULLET_RESIST";
PlayerCondition[PlayerCondition["TF_COND_MEDIGUN_SMALL_BLAST_RESIST"] = 1073741824] = "TF_COND_MEDIGUN_SMALL_BLAST_RESIST";
PlayerCondition[PlayerCondition["TF_COND_MEDIGUN_SMALL_FIRE_RESIST"] = -2147483648] = "TF_COND_MEDIGUN_SMALL_FIRE_RESIST";
PlayerCondition[PlayerCondition["TF_COND_STEALTHED_USER_BUF"] = 1] = "TF_COND_STEALTHED_USER_BUF";
PlayerCondition[PlayerCondition["TF_COND_MEDIGUN_DEBUF"] = 2] = "TF_COND_MEDIGUN_DEBUF";
PlayerCondition[PlayerCondition["TF_COND_STEALTHED_USER_BUFF_FADING"] = 4] = "TF_COND_STEALTHED_USER_BUFF_FADING";
PlayerCondition[PlayerCondition["TF_COND_BULLET_IMMUNE"] = 8] = "TF_COND_BULLET_IMMUNE";
PlayerCondition[PlayerCondition["TF_COND_BLAST_IMMUNE"] = 16] = "TF_COND_BLAST_IMMUNE";
PlayerCondition[PlayerCondition["TF_COND_FIRE_IMMUNE"] = 32] = "TF_COND_FIRE_IMMUNE";
PlayerCondition[PlayerCondition["TF_COND_PREVENT_DEATH"] = 64] = "TF_COND_PREVENT_DEATH";
PlayerCondition[PlayerCondition["TF_COND_MVM_BOT_STUN_RADIOWAVE"] = 128] = "TF_COND_MVM_BOT_STUN_RADIOWAVE";
PlayerCondition[PlayerCondition["TF_COND_HALLOWEEN_SPEED_BOOST"] = 256] = "TF_COND_HALLOWEEN_SPEED_BOOST";
PlayerCondition[PlayerCondition["TF_COND_HALLOWEEN_QUICK_HEAL"] = 512] = "TF_COND_HALLOWEEN_QUICK_HEAL";
PlayerCondition[PlayerCondition["TF_COND_HALLOWEEN_GIANT"] = 1024] = "TF_COND_HALLOWEEN_GIANT";
PlayerCondition[PlayerCondition["TF_COND_HALLOWEEN_TINY"] = 2048] = "TF_COND_HALLOWEEN_TINY";
PlayerCondition[PlayerCondition["TF_COND_HALLOWEEN_IN_HELL"] = 4096] = "TF_COND_HALLOWEEN_IN_HELL";
PlayerCondition[PlayerCondition["TF_COND_HALLOWEEN_GHOST_MODE"] = 8192] = "TF_COND_HALLOWEEN_GHOST_MODE";
PlayerCondition[PlayerCondition["TF_COND_MINICRITBOOSTED_ON_KILL"] = 16384] = "TF_COND_MINICRITBOOSTED_ON_KILL";
})(PlayerCondition = exports.PlayerCondition || (exports.PlayerCondition = {}));
//# sourceMappingURL=PlayerCondition.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"PlayerCondition.js","sourceRoot":"","sources":["../../src/Data/PlayerCondition.ts"],"names":[],"mappings":";;AAAA,IAAY,eAgFX;AAhFD,WAAY,eAAe;IAC1B,uEAAkD,CAAA;IAClD,yEAAkD,CAAA;IAClD,iFAAkD,CAAA;IAClD,+EAAkD,CAAA;IAClD,gFAAkD,CAAA;IAClD,oFAAkD,CAAA;IAClD,kFAAkD,CAAA;IAClD,+EAAkD,CAAA;IAClD,6GAAkD,CAAA;IAClD,2FAAkD,CAAA;IAClD,sGAAmD,CAAA;IACnD,sFAAmD,CAAA;IACnD,4FAAmD,CAAA;IACnD,sFAAmD,CAAA;IACnD,yEAAmD,CAAA;IACnD,+EAAmD,CAAA;IACnD,qFAAmD,CAAA;IACnD,0FAAmD,CAAA;IACnD,kFAAmD,CAAA;IACnD,sFAAmD,CAAA;IACnD,qFAAmD,CAAA;IACnD,uFAAmD,CAAA;IACnD,iFAAmD,CAAA;IACnD,mGAAmD,CAAA;IACnD,8EAAmD,CAAA;IACnD,oFAAmD,CAAA;IACnD,0FAAmD,CAAA;IACnD,qFAAmD,CAAA;IACnD,qFAAmD,CAAA;IACnD,qGAAmD,CAAA;IACnD,kGAAmD,CAAA;IACnD,2GAAmD,CAAA;IACnD,mFAAmD,CAAA;IACnD,mGAAmD,CAAA;IACnD,uGAAmD,CAAA;IACnD,2GAAmD,CAAA;IACnD,8FAAmD,CAAA;IACnD,4GAAmD,CAAA;IACnD,0GAAmD,CAAA;IACnD,6GAAmD,CAAA;IACnD,qGAAmD,CAAA;IACnD,+GAAmD,CAAA;IACnD,kHAAmD,CAAA;IACnD,sFAAmD,CAAA;IACnD,wGAAmD,CAAA;IACnD,8FAAmD,CAAA;IACnD,6GAAmD,CAAA;IACnD,qGAAmD,CAAA;IACnD,2GAAmD,CAAA;IACnD,4GAAmD,CAAA;IACnD,8EAAmD,CAAA;IACnD,gIAAmD,CAAA;IACnD,6GAAmD,CAAA;IACnD,yGAAmD,CAAA;IACnD,uGAAmD,CAAA;IACnD,2GAAmD,CAAA;IACnD,kHAAmD,CAAA;IACnD,oHAAmD,CAAA;IACnD,wHAAmD,CAAA;IACnD,uHAAmD,CAAA;IACnD,qHAAmD,CAAA;IACnD,2HAAmD,CAAA;IACnD,0HAAmD,CAAA;IACnD,yHAAmD,CAAA;IACnD,iGAAmD,CAAA;IACnD,uFAAmD,CAAA;IACnD,iHAAmD,CAAA;IACnD,uFAAmD,CAAA;IACnD,sFAAmD,CAAA;IACnD,oFAAmD,CAAA;IACnD,wFAAmD,CAAA;IACnD,2GAAmD,CAAA;IACnD,yGAAmD,CAAA;IACnD,uGAAmD,CAAA;IACnD,8FAAmD,CAAA;IACnD,4FAAmD,CAAA;IACnD,kGAAmD,CAAA;IACnD,wGAAmD,CAAA;IACnD,+GAAmD,CAAA;AACpD,CAAC,EAhFW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAgF1B"}

25
build/Data/PlayerResource.d.ts vendored Normal file
View file

@ -0,0 +1,25 @@
export interface PlayerResource {
ping: number;
score: number;
deaths: number;
connected: boolean;
team: number;
alive: boolean;
health: number;
totalScore: number;
maxHealth: number;
maxBuffedHealth: number;
playerClass: number;
arenaSpectator: boolean;
dominations: number;
nextRespawn: number;
chargeLevel: number;
damage: number;
damageAssists: number;
healing: number;
healingAssist: number;
damageBlocked: number;
bonusPoints: number;
playerLevel: number;
killStreak: number;
}

View file

@ -0,0 +1,3 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=PlayerResource.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"PlayerResource.js","sourceRoot":"","sources":["../../src/Data/PlayerResource.ts"],"names":[],"mappings":""}

5
build/Data/Round.d.ts vendored Normal file
View file

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

3
build/Data/Round.js Normal file
View file

@ -0,0 +1,3 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=Round.js.map

1
build/Data/Round.js.map Normal file
View file

@ -0,0 +1 @@
{"version":3,"file":"Round.js","sourceRoot":"","sources":["../../src/Data/Round.ts"],"names":[],"mappings":""}

12
build/Data/SendProp.d.ts vendored Normal file
View file

@ -0,0 +1,12 @@
import { SendPropDefinition } from './SendPropDefinition';
import { Vector } from './Vector';
export declare class SendProp {
static areEqual(a: SendProp, b: SendProp): boolean;
private static valuesAreEqual;
definition: SendPropDefinition;
value: SendPropValue | null;
constructor(definition: SendPropDefinition);
clone(): SendProp;
}
export declare type SendPropArrayValue = Vector | number | string;
export declare type SendPropValue = Vector | number | string | SendPropArrayValue[];

38
build/Data/SendProp.js Normal file
View file

@ -0,0 +1,38 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const Vector_1 = require("./Vector");
class SendProp {
static areEqual(a, b) {
return a.definition.fullName !== b.definition.fullName ? false : SendProp.valuesAreEqual(a.value, b.value);
}
static valuesAreEqual(a, b) {
if (Array.isArray(a) && Array.isArray(b)) {
if (a.length !== b.length) {
return false;
}
for (let i = 0; i < a.length; i++) {
if (!SendProp.valuesAreEqual(a[i], b[i])) {
return false;
}
}
return true;
}
else if (a instanceof Vector_1.Vector && b instanceof Vector_1.Vector) {
return Vector_1.Vector.areEqual(a, b);
}
else {
return a === b;
}
}
constructor(definition) {
this.definition = definition;
this.value = null;
}
clone() {
const prop = new SendProp(this.definition);
prop.value = this.value;
return prop;
}
}
exports.SendProp = SendProp;
//# sourceMappingURL=SendProp.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"SendProp.js","sourceRoot":"","sources":["../../src/Data/SendProp.ts"],"names":[],"mappings":";;AACA,qCAAgC;AAEhC,MAAa,QAAQ;IACb,MAAM,CAAC,QAAQ,CAAC,CAAW,EAAE,CAAW;QAC9C,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,KAAK,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IAC5G,CAAC;IAEO,MAAM,CAAC,cAAc,CAAC,CAAuB,EAAE,CAAuB;QAC7E,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACzC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE;gBAC1B,OAAO,KAAK,CAAC;aACb;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAClC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;oBACzC,OAAO,KAAK,CAAC;iBACb;aACD;YACD,OAAO,IAAI,CAAC;SACZ;aAAM,IAAI,CAAC,YAAY,eAAM,IAAI,CAAC,YAAY,eAAM,EAAE;YACtD,OAAO,eAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAC7B;aAAM;YACN,OAAO,CAAC,KAAK,CAAC,CAAC;SACf;IACF,CAAC;IAKD,YAAY,UAA8B;QACzC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACnB,CAAC;IAEM,KAAK;QACX,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,OAAO,IAAI,CAAC;IACb,CAAC;CACD;AApCD,4BAoCC"}

51
build/Data/SendPropDefinition.d.ts vendored Normal file
View file

@ -0,0 +1,51 @@
import { SendTable } from './SendTable';
export declare class SendPropDefinition {
static formatFlags(flags: number): string[];
type: SendPropType;
name: string;
flags: number;
excludeDTName: string | null;
lowValue: number;
highValue: number;
bitCount: number;
originalBitCount: number | null;
table: SendTable | null;
numElements: number;
arrayProperty: SendPropDefinition | null;
ownerTableName: string;
constructor(type: SendPropType, name: string, flags: number, ownerTableName: string);
hasFlag(flag: SendPropFlag): boolean;
isExcludeProp(): boolean;
inspect(): any;
readonly fullName: string;
readonly allFlags: string[];
}
export declare enum SendPropType {
DPT_Int = 0,
DPT_Float = 1,
DPT_Vector = 2,
DPT_VectorXY = 3,
DPT_String = 4,
DPT_Array = 5,
DPT_DataTable = 6,
DPT_NUMSendPropTypes = 7
}
export declare enum SendPropFlag {
SPROP_UNSIGNED = 1,
SPROP_COORD = 2,
SPROP_NOSCALE = 4,
SPROP_ROUNDDOWN = 8,
SPROP_ROUNDUP = 16,
SPROP_NORMAL = 32,
SPROP_EXCLUDE = 64,
SPROP_XYZE = 128,
SPROP_INSIDEARRAY = 256,
SPROP_PROXY_ALWAYS_YES = 512,
SPROP_CHANGES_OFTEN = 1024,
SPROP_IS_A_VECTOR_ELEM = 2048,
SPROP_COLLAPSIBLE = 4096,
SPROP_COORD_MP = 8192,
SPROP_COORD_MP_LOWPRECISION = 16384,
SPROP_COORD_MP_INTEGRAL = 32768,
SPROP_VARINT = 32
}

View file

@ -0,0 +1,101 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
class SendPropDefinition {
constructor(type, name, flags, ownerTableName) {
this.originalBitCount = null;
this.type = type;
this.name = name;
this.flags = flags;
this.excludeDTName = null;
this.lowValue = 0;
this.highValue = 0;
this.bitCount = 0;
this.table = null;
this.numElements = 0;
this.arrayProperty = null;
this.ownerTableName = ownerTableName;
}
static formatFlags(flags) {
const names = [];
for (const name in SendPropFlag) {
if (SendPropFlag.hasOwnProperty(name)) {
const flagValue = SendPropFlag[name];
if (typeof flagValue === 'number') {
if (flags & flagValue) {
names.push(name);
}
}
}
}
return names;
}
hasFlag(flag) {
return (this.flags & flag) !== 0;
}
isExcludeProp() {
return this.hasFlag(SendPropFlag.SPROP_EXCLUDE);
}
inspect() {
const data = {
ownerTableName: this.ownerTableName,
name: this.name,
type: SendPropType[this.type],
flags: this.flags,
bitCount: this.bitCount
};
if (this.type === SendPropType.DPT_Float) {
data.lowValue = this.lowValue;
data.highValue = this.highValue;
}
if (this.type === SendPropType.DPT_DataTable && this.table) {
data.excludeDTName = this.table.name;
}
return data;
}
get fullName() {
return `${this.ownerTableName}.${this.name}`;
}
get allFlags() {
return SendPropDefinition.formatFlags(this.flags);
}
}
exports.SendPropDefinition = SendPropDefinition;
var SendPropType;
(function (SendPropType) {
SendPropType[SendPropType["DPT_Int"] = 0] = "DPT_Int";
SendPropType[SendPropType["DPT_Float"] = 1] = "DPT_Float";
SendPropType[SendPropType["DPT_Vector"] = 2] = "DPT_Vector";
SendPropType[SendPropType["DPT_VectorXY"] = 3] = "DPT_VectorXY";
SendPropType[SendPropType["DPT_String"] = 4] = "DPT_String";
SendPropType[SendPropType["DPT_Array"] = 5] = "DPT_Array";
SendPropType[SendPropType["DPT_DataTable"] = 6] = "DPT_DataTable";
SendPropType[SendPropType["DPT_NUMSendPropTypes"] = 7] = "DPT_NUMSendPropTypes";
})(SendPropType = exports.SendPropType || (exports.SendPropType = {}));
var SendPropFlag;
(function (SendPropFlag) {
SendPropFlag[SendPropFlag["SPROP_UNSIGNED"] = 1] = "SPROP_UNSIGNED";
SendPropFlag[SendPropFlag["SPROP_COORD"] = 2] = "SPROP_COORD";
// Note that the bit count is ignored in this case.
SendPropFlag[SendPropFlag["SPROP_NOSCALE"] = 4] = "SPROP_NOSCALE";
SendPropFlag[SendPropFlag["SPROP_ROUNDDOWN"] = 8] = "SPROP_ROUNDDOWN";
SendPropFlag[SendPropFlag["SPROP_ROUNDUP"] = 16] = "SPROP_ROUNDUP";
SendPropFlag[SendPropFlag["SPROP_NORMAL"] = 32] = "SPROP_NORMAL";
SendPropFlag[SendPropFlag["SPROP_EXCLUDE"] = 64] = "SPROP_EXCLUDE";
SendPropFlag[SendPropFlag["SPROP_XYZE"] = 128] = "SPROP_XYZE";
SendPropFlag[SendPropFlag["SPROP_INSIDEARRAY"] = 256] = "SPROP_INSIDEARRAY";
// flattened property list. Its array will point at it when it needs to.
SendPropFlag[SendPropFlag["SPROP_PROXY_ALWAYS_YES"] = 512] = "SPROP_PROXY_ALWAYS_YES";
// SendProxy_DataTableToDataTable that always send the data to all clients.
SendPropFlag[SendPropFlag["SPROP_CHANGES_OFTEN"] = 1024] = "SPROP_CHANGES_OFTEN";
SendPropFlag[SendPropFlag["SPROP_IS_A_VECTOR_ELEM"] = 2048] = "SPROP_IS_A_VECTOR_ELEM";
SendPropFlag[SendPropFlag["SPROP_COLLAPSIBLE"] = 4096] = "SPROP_COLLAPSIBLE";
// (ie: for all automatically-chained base classes).
// In this case, it can get rid of this SendPropDataTable altogether and spare the
// trouble of walking the hierarchy more than necessary.
SendPropFlag[SendPropFlag["SPROP_COORD_MP"] = 8192] = "SPROP_COORD_MP";
SendPropFlag[SendPropFlag["SPROP_COORD_MP_LOWPRECISION"] = 16384] = "SPROP_COORD_MP_LOWPRECISION";
// where the fractional component only gets a 3 bits instead of 5
SendPropFlag[SendPropFlag["SPROP_COORD_MP_INTEGRAL"] = 32768] = "SPROP_COORD_MP_INTEGRAL";
SendPropFlag[SendPropFlag["SPROP_VARINT"] = 32] = "SPROP_VARINT";
})(SendPropFlag = exports.SendPropFlag || (exports.SendPropFlag = {}));
//# sourceMappingURL=SendPropDefinition.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"SendPropDefinition.js","sourceRoot":"","sources":["../../src/Data/SendPropDefinition.ts"],"names":[],"mappings":"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"}

15
build/Data/SendTable.d.ts vendored Normal file
View file

@ -0,0 +1,15 @@
import { SendPropDefinition } from './SendPropDefinition';
export declare type SendTableName = string;
export declare class SendTable {
name: SendTableName;
props: SendPropDefinition[];
needsDecoder: boolean;
private cachedFlattenedProps;
constructor(name: any);
addProp(prop: any): void;
getAllProps(excludes: SendPropDefinition[], props: SendPropDefinition[]): void;
getAllPropsIteratorProps(excludes: SendPropDefinition[], props: SendPropDefinition[], childProps: SendPropDefinition[]): void;
readonly flattenedProps: SendPropDefinition[];
readonly excludes: SendPropDefinition[];
private flatten;
}

81
build/Data/SendTable.js Normal file
View file

@ -0,0 +1,81 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const SendPropDefinition_1 = require("./SendPropDefinition");
class SendTable {
constructor(name) {
this.name = name;
this.props = [];
this.cachedFlattenedProps = [];
}
addProp(prop) {
this.props.push(prop);
}
getAllProps(excludes, props) {
const localProps = [];
this.getAllPropsIteratorProps(excludes, localProps, props);
for (const localProp of localProps) {
props.push(localProp);
}
}
getAllPropsIteratorProps(excludes, props, childProps) {
for (const prop of this.props) {
if (prop.hasFlag(SendPropDefinition_1.SendPropFlag.SPROP_EXCLUDE)) {
continue;
}
if (excludes.filter((exclude) => {
return exclude.name === prop.name && exclude.excludeDTName === prop.ownerTableName;
}).length > 0) {
continue;
}
if (prop.type === SendPropDefinition_1.SendPropType.DPT_DataTable && prop.table) {
if (prop.hasFlag(SendPropDefinition_1.SendPropFlag.SPROP_COLLAPSIBLE)) {
prop.table.getAllPropsIteratorProps(excludes, props, childProps);
}
else {
prop.table.getAllProps(excludes, childProps);
}
}
else {
props.push(prop);
}
}
}
get flattenedProps() {
if (this.cachedFlattenedProps.length === 0) {
this.flatten();
}
return this.cachedFlattenedProps;
}
get excludes() {
let result = [];
for (const prop of this.props) {
if (prop.hasFlag(SendPropDefinition_1.SendPropFlag.SPROP_EXCLUDE)) {
result.push(prop);
}
else if (prop.type === SendPropDefinition_1.SendPropType.DPT_DataTable && prop.table) {
result = result.concat(prop.table.excludes);
}
}
return result;
}
flatten() {
const excludes = this.excludes;
const props = [];
this.getAllProps(excludes, props);
// sort often changed props before the others
let start = 0;
for (let i = 0; i < props.length; i++) {
if (props[i].hasFlag(SendPropDefinition_1.SendPropFlag.SPROP_CHANGES_OFTEN)) {
if (i !== start) {
const temp = props[i];
props[i] = props[start];
props[start] = temp;
}
start++;
}
}
this.cachedFlattenedProps = props;
}
}
exports.SendTable = SendTable;
//# sourceMappingURL=SendTable.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"SendTable.js","sourceRoot":"","sources":["../../src/Data/SendTable.ts"],"names":[],"mappings":"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"}

7
build/Data/ServerClass.d.ts vendored Normal file
View file

@ -0,0 +1,7 @@
export declare type ServerClassId = number;
export declare class ServerClass {
id: ServerClassId;
name: string;
dataTable: string;
constructor(id: ServerClassId, name: string, dataTable: string);
}

11
build/Data/ServerClass.js Normal file
View file

@ -0,0 +1,11 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
class ServerClass {
constructor(id, name, dataTable) {
this.id = id;
this.name = name;
this.dataTable = dataTable;
}
}
exports.ServerClass = ServerClass;
//# sourceMappingURL=ServerClass.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"ServerClass.js","sourceRoot":"","sources":["../../src/Data/ServerClass.ts"],"names":[],"mappings":";;AAEA,MAAa,WAAW;IAKvB,YAAY,EAAiB,EAAE,IAAY,EAAE,SAAiB;QAC7D,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,CAAC;CACD;AAVD,kCAUC"}

14
build/Data/StringTable.d.ts vendored Normal file
View file

@ -0,0 +1,14 @@
import { BitStream } from 'bit-buffer';
export interface StringTable {
name: string;
entries: StringTableEntry[];
maxEntries: number;
fixedUserDataSize?: number;
fixedUserDataSizeBits?: number;
clientEntries?: StringTableEntry[];
compressed: boolean;
}
export interface StringTableEntry {
text: string;
extraData?: BitStream;
}

View file

@ -0,0 +1,3 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=StringTable.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"StringTable.js","sourceRoot":"","sources":["../../src/Data/StringTable.ts"],"names":[],"mappings":""}

13
build/Data/Team.d.ts vendored Normal file
View file

@ -0,0 +1,13 @@
export declare enum TeamNumber {
UNASGINED = 0,
SPECTATOR = 1,
RED = 2,
BLU = 3
}
export interface Team {
teamNumber: TeamNumber;
name: string;
score: number;
roundsWon: number;
players: number[];
}

10
build/Data/Team.js Normal file
View file

@ -0,0 +1,10 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var TeamNumber;
(function (TeamNumber) {
TeamNumber[TeamNumber["UNASGINED"] = 0] = "UNASGINED";
TeamNumber[TeamNumber["SPECTATOR"] = 1] = "SPECTATOR";
TeamNumber[TeamNumber["RED"] = 2] = "RED";
TeamNumber[TeamNumber["BLU"] = 3] = "BLU";
})(TeamNumber = exports.TeamNumber || (exports.TeamNumber = {}));
//# sourceMappingURL=Team.js.map

1
build/Data/Team.js.map Normal file
View file

@ -0,0 +1 @@
{"version":3,"file":"Team.js","sourceRoot":"","sources":["../../src/Data/Team.ts"],"names":[],"mappings":";;AAAA,IAAY,UAKX;AALD,WAAY,UAAU;IACrB,qDAAa,CAAA;IACb,qDAAa,CAAA;IACb,yCAAO,CAAA;IACP,yCAAO,CAAA;AACR,CAAC,EALW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAKrB"}

11
build/Data/UserInfo.d.ts vendored Normal file
View file

@ -0,0 +1,11 @@
export interface UserInfo extends UserEntityInfo {
classes: any;
team: string;
}
export declare type UserId = number;
export interface UserEntityInfo {
name: string;
userId: UserId;
steamId: string;
entityId: number;
}

3
build/Data/UserInfo.js Normal file
View file

@ -0,0 +1,3 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=UserInfo.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"UserInfo.js","sourceRoot":"","sources":["../../src/Data/UserInfo.ts"],"names":[],"mappings":""}

134
build/Data/UserMessage.d.ts vendored Normal file
View file

@ -0,0 +1,134 @@
import { BitStream } from 'bit-buffer';
export declare enum UserMessageType {
Geiger = 0,
Train = 1,
HudText = 2,
SayText = 3,
SayText2 = 4,
TextMsg = 5,
ResetHUD = 6,
GameTitle = 7,
ItemPickup = 8,
ShowMenu = 9,
Shake = 10,
Fade = 11,
VGUIMenu = 12,
Rumble = 13,
CloseCaption = 14,
SendAudio = 15,
VoiceMask = 16,
RequestState = 17,
Damage = 18,
HintText = 19,
KeyHintText = 20,
HudMsg = 21,
AmmoDenied = 22,
AchievementEvent = 23,
UpdateRadar = 24,
VoiceSubtitle = 25,
HudNotify = 26,
HudNotifyCustom = 27,
PlayerStatsUpdate = 28,
PlayerIgnited = 29,
PlayerIgnitedInv = 30,
HudArenaNotify = 31,
UpdateAchievement = 32,
TrainingMsg = 33,
TrainingObjective = 34,
DamageDodged = 35,
PlayerJarated = 36,
PlayerExtinguished = 37,
PlayerJaratedFade = 38,
PlayerShieldBlocked = 39,
BreakModel = 40,
CheapBreakModel = 41,
BreakModel_Pumpkin = 42,
BreakModelRocketDud = 43,
CallVoteFailed = 44,
VoteStart = 45,
VotePass = 46,
VoteFailed = 47,
VoteSetup = 48,
PlayerBonusPoints = 49,
SpawnFlyingBird = 50,
PlayerGodRayEffect = 51,
SPHapWeapEvent = 52,
HapDmg = 53,
HapPunch = 54,
HapSetDrag = 55,
HapSet = 56,
HapMeleeContact = 57
}
export interface BaseDataUserPacket {
data: number;
}
export interface SayText2Packet {
packetType: 'userMessage';
userMessageType: 'sayText2';
client: number;
raw: number;
kind: 'TF_Chat_All' | 'TF_Chat_Team' | 'TF_Chat_AllDead' | '#TF_Name_Change';
from: string;
text: string;
}
export declare enum HudTextLocation {
HUD_PRINTNOTIFY = 1,
HUD_PRINTCONSOLE = 2,
HUD_PRINTTALK = 3,
HUD_PRINTCENTER = 4
}
export interface TextMessagePacket {
packetType: 'userMessage';
userMessageType: 'textMsg';
destType: HudTextLocation;
text: string;
}
export interface ResetHUDPacket extends BaseDataUserPacket {
packetType: 'userMessage';
userMessageType: 'resetHUD';
}
export interface TrainPacket extends BaseDataUserPacket {
packetType: 'userMessage';
userMessageType: 'train';
}
export interface VoiceSubtitlePacket {
packetType: 'userMessage';
userMessageType: 'voiceSubtitle';
client: number;
menu: number;
item: number;
}
export interface ShakePacket {
packetType: 'userMessage';
userMessageType: 'shake';
command: number;
amplitude: number;
frequency: number;
duration: number;
}
export interface UnknownUserMessageBasePacket {
data: BitStream;
type: number;
}
export interface BreakModelPumpkinPacket extends UnknownUserMessageBasePacket {
packetType: 'userMessage';
userMessageType: 'breakModelPumpkin';
}
export interface GenericUnknownUserMessagePacket extends UnknownUserMessageBasePacket {
packetType: 'userMessage';
userMessageType: 'unknownUserMessage';
}
export declare type UnknownUserMessagePacket = GenericUnknownUserMessagePacket | BreakModelPumpkinPacket;
export declare type UserMessagePacket = SayText2Packet | TextMessagePacket | ResetHUDPacket | UnknownUserMessagePacket | TrainPacket | VoiceSubtitlePacket | BreakModelPumpkinPacket | ShakePacket;
export declare type UserMessagePacketType = UserMessagePacket['userMessageType'];
export interface UserMessageTypeMap {
sayText2: SayText2Packet;
textMsg: TextMessagePacket;
unknownUserMessage: GenericUnknownUserMessagePacket;
train: TrainPacket;
voiceSubtitle: VoiceSubtitlePacket;
breakModelPumpkin: BreakModelPumpkinPacket;
resetHUD: ResetHUDPacket;
shake: ShakePacket;
}
export declare const UserMessagePacketTypeMap: Map<UserMessagePacketType, UserMessageType>;

81
build/Data/UserMessage.js Normal file
View file

@ -0,0 +1,81 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var UserMessageType;
(function (UserMessageType) {
UserMessageType[UserMessageType["Geiger"] = 0] = "Geiger";
UserMessageType[UserMessageType["Train"] = 1] = "Train";
UserMessageType[UserMessageType["HudText"] = 2] = "HudText";
UserMessageType[UserMessageType["SayText"] = 3] = "SayText";
UserMessageType[UserMessageType["SayText2"] = 4] = "SayText2";
UserMessageType[UserMessageType["TextMsg"] = 5] = "TextMsg";
UserMessageType[UserMessageType["ResetHUD"] = 6] = "ResetHUD";
UserMessageType[UserMessageType["GameTitle"] = 7] = "GameTitle";
UserMessageType[UserMessageType["ItemPickup"] = 8] = "ItemPickup";
UserMessageType[UserMessageType["ShowMenu"] = 9] = "ShowMenu";
UserMessageType[UserMessageType["Shake"] = 10] = "Shake";
UserMessageType[UserMessageType["Fade"] = 11] = "Fade";
UserMessageType[UserMessageType["VGUIMenu"] = 12] = "VGUIMenu";
UserMessageType[UserMessageType["Rumble"] = 13] = "Rumble";
UserMessageType[UserMessageType["CloseCaption"] = 14] = "CloseCaption";
UserMessageType[UserMessageType["SendAudio"] = 15] = "SendAudio";
UserMessageType[UserMessageType["VoiceMask"] = 16] = "VoiceMask";
UserMessageType[UserMessageType["RequestState"] = 17] = "RequestState";
UserMessageType[UserMessageType["Damage"] = 18] = "Damage";
UserMessageType[UserMessageType["HintText"] = 19] = "HintText";
UserMessageType[UserMessageType["KeyHintText"] = 20] = "KeyHintText";
UserMessageType[UserMessageType["HudMsg"] = 21] = "HudMsg";
UserMessageType[UserMessageType["AmmoDenied"] = 22] = "AmmoDenied";
UserMessageType[UserMessageType["AchievementEvent"] = 23] = "AchievementEvent";
UserMessageType[UserMessageType["UpdateRadar"] = 24] = "UpdateRadar";
UserMessageType[UserMessageType["VoiceSubtitle"] = 25] = "VoiceSubtitle";
UserMessageType[UserMessageType["HudNotify"] = 26] = "HudNotify";
UserMessageType[UserMessageType["HudNotifyCustom"] = 27] = "HudNotifyCustom";
UserMessageType[UserMessageType["PlayerStatsUpdate"] = 28] = "PlayerStatsUpdate";
UserMessageType[UserMessageType["PlayerIgnited"] = 29] = "PlayerIgnited";
UserMessageType[UserMessageType["PlayerIgnitedInv"] = 30] = "PlayerIgnitedInv";
UserMessageType[UserMessageType["HudArenaNotify"] = 31] = "HudArenaNotify";
UserMessageType[UserMessageType["UpdateAchievement"] = 32] = "UpdateAchievement";
UserMessageType[UserMessageType["TrainingMsg"] = 33] = "TrainingMsg";
UserMessageType[UserMessageType["TrainingObjective"] = 34] = "TrainingObjective";
UserMessageType[UserMessageType["DamageDodged"] = 35] = "DamageDodged";
UserMessageType[UserMessageType["PlayerJarated"] = 36] = "PlayerJarated";
UserMessageType[UserMessageType["PlayerExtinguished"] = 37] = "PlayerExtinguished";
UserMessageType[UserMessageType["PlayerJaratedFade"] = 38] = "PlayerJaratedFade";
UserMessageType[UserMessageType["PlayerShieldBlocked"] = 39] = "PlayerShieldBlocked";
UserMessageType[UserMessageType["BreakModel"] = 40] = "BreakModel";
UserMessageType[UserMessageType["CheapBreakModel"] = 41] = "CheapBreakModel";
UserMessageType[UserMessageType["BreakModel_Pumpkin"] = 42] = "BreakModel_Pumpkin";
UserMessageType[UserMessageType["BreakModelRocketDud"] = 43] = "BreakModelRocketDud";
UserMessageType[UserMessageType["CallVoteFailed"] = 44] = "CallVoteFailed";
UserMessageType[UserMessageType["VoteStart"] = 45] = "VoteStart";
UserMessageType[UserMessageType["VotePass"] = 46] = "VotePass";
UserMessageType[UserMessageType["VoteFailed"] = 47] = "VoteFailed";
UserMessageType[UserMessageType["VoteSetup"] = 48] = "VoteSetup";
UserMessageType[UserMessageType["PlayerBonusPoints"] = 49] = "PlayerBonusPoints";
UserMessageType[UserMessageType["SpawnFlyingBird"] = 50] = "SpawnFlyingBird";
UserMessageType[UserMessageType["PlayerGodRayEffect"] = 51] = "PlayerGodRayEffect";
UserMessageType[UserMessageType["SPHapWeapEvent"] = 52] = "SPHapWeapEvent";
UserMessageType[UserMessageType["HapDmg"] = 53] = "HapDmg";
UserMessageType[UserMessageType["HapPunch"] = 54] = "HapPunch";
UserMessageType[UserMessageType["HapSetDrag"] = 55] = "HapSetDrag";
UserMessageType[UserMessageType["HapSet"] = 56] = "HapSet";
UserMessageType[UserMessageType["HapMeleeContact"] = 57] = "HapMeleeContact";
})(UserMessageType = exports.UserMessageType || (exports.UserMessageType = {}));
var HudTextLocation;
(function (HudTextLocation) {
HudTextLocation[HudTextLocation["HUD_PRINTNOTIFY"] = 1] = "HUD_PRINTNOTIFY";
HudTextLocation[HudTextLocation["HUD_PRINTCONSOLE"] = 2] = "HUD_PRINTCONSOLE";
HudTextLocation[HudTextLocation["HUD_PRINTTALK"] = 3] = "HUD_PRINTTALK";
HudTextLocation[HudTextLocation["HUD_PRINTCENTER"] = 4] = "HUD_PRINTCENTER";
})(HudTextLocation = exports.HudTextLocation || (exports.HudTextLocation = {}));
exports.UserMessagePacketTypeMap = new Map([
['sayText2', UserMessageType.SayText2],
['textMsg', UserMessageType.TextMsg],
['train', UserMessageType.Train],
['voiceSubtitle', UserMessageType.VoiceSubtitle],
['breakModelPumpkin', UserMessageType.BreakModel_Pumpkin],
['resetHUD', UserMessageType.ResetHUD],
['shake', UserMessageType.Shake],
['unknownUserMessage', -1]
]);
//# sourceMappingURL=UserMessage.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"UserMessage.js","sourceRoot":"","sources":["../../src/Data/UserMessage.ts"],"names":[],"mappings":";;AAEA,IAAY,eA2DX;AA3DD,WAAY,eAAe;IAC1B,yDAAU,CAAA;IACV,uDAAS,CAAA;IACT,2DAAW,CAAA;IACX,2DAAW,CAAA;IACX,6DAAY,CAAA;IACZ,2DAAW,CAAA;IACX,6DAAY,CAAA;IACZ,+DAAa,CAAA;IACb,iEAAc,CAAA;IACd,6DAAY,CAAA;IACZ,wDAAU,CAAA;IACV,sDAAS,CAAA;IACT,8DAAa,CAAA;IACb,0DAAW,CAAA;IACX,sEAAiB,CAAA;IACjB,gEAAc,CAAA;IACd,gEAAc,CAAA;IACd,sEAAiB,CAAA;IACjB,0DAAW,CAAA;IACX,8DAAa,CAAA;IACb,oEAAgB,CAAA;IAChB,0DAAW,CAAA;IACX,kEAAe,CAAA;IACf,8EAAqB,CAAA;IACrB,oEAAgB,CAAA;IAChB,wEAAkB,CAAA;IAClB,gEAAc,CAAA;IACd,4EAAoB,CAAA;IACpB,gFAAsB,CAAA;IACtB,wEAAkB,CAAA;IAClB,8EAAqB,CAAA;IACrB,0EAAmB,CAAA;IACnB,gFAAsB,CAAA;IACtB,oEAAgB,CAAA;IAChB,gFAAsB,CAAA;IACtB,sEAAiB,CAAA;IACjB,wEAAkB,CAAA;IAClB,kFAAuB,CAAA;IACvB,gFAAsB,CAAA;IACtB,oFAAwB,CAAA;IACxB,kEAAe,CAAA;IACf,4EAAoB,CAAA;IACpB,kFAAuB,CAAA;IACvB,oFAAwB,CAAA;IACxB,0EAAmB,CAAA;IACnB,gEAAc,CAAA;IACd,8DAAa,CAAA;IACb,kEAAe,CAAA;IACf,gEAAc,CAAA;IACd,gFAAsB,CAAA;IACtB,4EAAoB,CAAA;IACpB,kFAAuB,CAAA;IACvB,0EAAmB,CAAA;IACnB,0DAAW,CAAA;IACX,8DAAa,CAAA;IACb,kEAAe,CAAA;IACf,0DAAW,CAAA;IACX,4EAAoB,CAAA;AACrB,CAAC,EA3DW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QA2D1B;AAgBD,IAAY,eAKX;AALD,WAAY,eAAe;IAC1B,2EAAmB,CAAA;IACnB,6EAAoB,CAAA;IACpB,uEAAiB,CAAA;IACjB,2EAAmB,CAAA;AACpB,CAAC,EALW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAK1B;AA4EY,QAAA,wBAAwB,GACpC,IAAI,GAAG,CAAyC;IAC/C,CAAC,UAAU,EAAE,eAAe,CAAC,QAAQ,CAAC;IACtC,CAAC,SAAS,EAAE,eAAe,CAAC,OAAO,CAAC;IACpC,CAAC,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC;IAChC,CAAC,eAAe,EAAE,eAAe,CAAC,aAAa,CAAC;IAChD,CAAC,mBAAmB,EAAE,eAAe,CAAC,kBAAkB,CAAC;IACzD,CAAC,UAAU,EAAE,eAAe,CAAC,QAAQ,CAAC;IACtC,CAAC,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC;IAChC,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;CAC1B,CAAC,CAAC"}

7
build/Data/Vector.d.ts vendored Normal file
View file

@ -0,0 +1,7 @@
export declare class Vector {
static areEqual(a: Vector, b: Vector): boolean;
x: number;
y: number;
z: number;
constructor(x: any, y: any, z: any);
}

14
build/Data/Vector.js Normal file
View file

@ -0,0 +1,14 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
class Vector {
static areEqual(a, b) {
return a.x === b.x && a.y === b.y && a.z === b.z;
}
constructor(x, y, z) {
this.x = x;
this.y = y;
this.z = z;
}
}
exports.Vector = Vector;
//# sourceMappingURL=Vector.js.map

1
build/Data/Vector.js.map Normal file
View file

@ -0,0 +1 @@
{"version":3,"file":"Vector.js","sourceRoot":"","sources":["../../src/Data/Vector.ts"],"names":[],"mappings":";;AAAA,MAAa,MAAM;IACX,MAAM,CAAC,QAAQ,CAAC,CAAS,EAAE,CAAS;QAC1C,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC;IAMD,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC;QAClB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACZ,CAAC;CACD;AAdD,wBAcC"}

10
build/Data/Weapon.d.ts vendored Normal file
View file

@ -0,0 +1,10 @@
export interface BaseCombatWeapon {
className: string;
owner: number;
}
export interface CWeaponMedigun {
className: 'CWeaponMedigun';
healTarget: number;
chargeLevel: number;
}
export declare type Weapon = BaseCombatWeapon | CWeaponMedigun;

3
build/Data/Weapon.js Normal file
View file

@ -0,0 +1,3 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=Weapon.js.map

1
build/Data/Weapon.js.map Normal file
View file

@ -0,0 +1 @@
{"version":3,"file":"Weapon.js","sourceRoot":"","sources":["../../src/Data/Weapon.ts"],"names":[],"mappings":""}

5
build/Data/World.d.ts vendored Normal file
View file

@ -0,0 +1,5 @@
import { Vector } from './Vector';
export interface World {
boundaryMin: Vector;
boundaryMax: Vector;
}

3
build/Data/World.js Normal file
View file

@ -0,0 +1,3 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=World.js.map

1
build/Data/World.js.map Normal file
View file

@ -0,0 +1 @@
{"version":3,"file":"World.js","sourceRoot":"","sources":["../../src/Data/World.ts"],"names":[],"mappings":""}

18
build/Demo.d.ts vendored Normal file
View file

@ -0,0 +1,18 @@
/// <reference types="node" />
import { BitStream } from 'bit-buffer';
import { Analyser } from './Analyser';
import { Parser } from './Parser';
export declare enum ParseMode {
MINIMAL = 0,
ENTITIES = 1,
COMPLETE = 2
}
export declare class Demo {
static fromNodeBuffer(nodeBuffer: Buffer): Demo;
stream: BitStream;
parser: Parser | null;
constructor(arrayBuffer: ArrayBuffer);
getParser(mode?: ParseMode): Parser;
getAnalyser(mode?: ParseMode): Analyser;
private getSkippedPackets;
}

47
build/Demo.js Normal file
View file

@ -0,0 +1,47 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const bit_buffer_1 = require("bit-buffer");
const Analyser_1 = require("./Analyser");
const Packet_1 = require("./Data/Packet");
const Parser_1 = require("./Parser");
var ParseMode;
(function (ParseMode) {
ParseMode[ParseMode["MINIMAL"] = 0] = "MINIMAL";
ParseMode[ParseMode["ENTITIES"] = 1] = "ENTITIES";
ParseMode[ParseMode["COMPLETE"] = 2] = "COMPLETE";
})(ParseMode = exports.ParseMode || (exports.ParseMode = {}));
class Demo {
static fromNodeBuffer(nodeBuffer) {
return new Demo(nodeBuffer.buffer);
}
constructor(arrayBuffer) {
this.stream = new bit_buffer_1.BitStream(arrayBuffer);
}
getParser(mode = ParseMode.ENTITIES) {
if (!this.parser) {
this.parser = new Parser_1.Parser(this.stream, this.getSkippedPackets(mode));
}
return this.parser;
}
getAnalyser(mode = ParseMode.ENTITIES) {
return new Analyser_1.Analyser(this.getParser(mode));
}
getSkippedPackets(mode) {
switch (mode) {
case ParseMode.MINIMAL:
return [
Packet_1.PacketTypeId.packetEntities,
Packet_1.PacketTypeId.tempEntities,
Packet_1.PacketTypeId.entityMessage
];
case ParseMode.ENTITIES:
return [
Packet_1.PacketTypeId.tempEntities
];
case ParseMode.COMPLETE:
return [];
}
}
}
exports.Demo = Demo;
//# sourceMappingURL=Demo.js.map

1
build/Demo.js.map Normal file
View file

@ -0,0 +1 @@
{"version":3,"file":"Demo.js","sourceRoot":"","sources":["../src/Demo.ts"],"names":[],"mappings":";;AAAA,2CAAqC;AACrC,yCAAoC;AACpC,0CAA2C;AAC3C,qCAAgC;AAEhC,IAAY,SAIX;AAJD,WAAY,SAAS;IACpB,+CAAO,CAAA;IACP,iDAAQ,CAAA;IACR,iDAAQ,CAAA;AACT,CAAC,EAJW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAIpB;AAED,MAAa,IAAI;IACT,MAAM,CAAC,cAAc,CAAC,UAAkB;QAC9C,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,MAAqB,CAAC,CAAC;IACnD,CAAC;IAMD,YAAY,WAAwB;QACnC,IAAI,CAAC,MAAM,GAAG,IAAI,sBAAS,CAAC,WAAW,CAAC,CAAC;IAC1C,CAAC;IAEM,SAAS,CAAC,OAAkB,SAAS,CAAC,QAAQ;QACpD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACjB,IAAI,CAAC,MAAM,GAAG,IAAI,eAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;SACpE;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IAEM,WAAW,CAAC,OAAkB,SAAS,CAAC,QAAQ;QACtD,OAAO,IAAI,mBAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3C,CAAC;IAEO,iBAAiB,CAAC,IAAe;QACxC,QAAQ,IAAI,EAAE;YACb,KAAK,SAAS,CAAC,OAAO;gBACrB,OAAO;oBACN,qBAAY,CAAC,cAAc;oBAC3B,qBAAY,CAAC,YAAY;oBACzB,qBAAY,CAAC,aAAa;iBAC1B,CAAC;YACH,KAAK,SAAS,CAAC,QAAQ;gBACtB,OAAO;oBACN,qBAAY,CAAC,YAAY;iBACzB,CAAC;YACH,KAAK,SAAS,CAAC,QAAQ;gBACtB,OAAO,EAAE,CAAC;SACX;IACF,CAAC;CACD;AAxCD,oBAwCC"}

5
build/DynamicBitStream.d.ts vendored Normal file
View file

@ -0,0 +1,5 @@
import { BitStream } from 'bit-buffer';
export declare class DynamicBitStream extends BitStream {
constructor(initialByteSize?: number);
readonly length: number;
}

14
build/DynamicBitStream.js Normal file
View file

@ -0,0 +1,14 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const bit_buffer_1 = require("bit-buffer");
const DynamicBitView_1 = require("./DynamicBitView");
class DynamicBitStream extends bit_buffer_1.BitStream {
constructor(initialByteSize = 16 * 1024) {
super(new DynamicBitView_1.DynamicBitView(new ArrayBuffer(initialByteSize)));
}
get length() {
return this.view.byteLength * 8;
}
}
exports.DynamicBitStream = DynamicBitStream;
//# sourceMappingURL=DynamicBitStream.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"DynamicBitStream.js","sourceRoot":"","sources":["../src/DynamicBitStream.ts"],"names":[],"mappings":";;AAAA,2CAAqC;AACrC,qDAAgD;AAEhD,MAAa,gBAAiB,SAAQ,sBAAS;IAC9C,YAAY,kBAA0B,EAAE,GAAG,IAAI;QAC9C,KAAK,CAAC,IAAI,+BAAc,CAAC,IAAI,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,MAAM;QACT,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;IACjC,CAAC;CACD;AARD,4CAQC"}

6
build/DynamicBitView.d.ts vendored Normal file
View file

@ -0,0 +1,6 @@
import { BitView } from 'bit-buffer';
export declare class DynamicBitView extends BitView {
protected _view: Uint8Array;
setBits(offset: number, value: number, bits: number): any;
grow(): void;
}

19
build/DynamicBitView.js Normal file
View file

@ -0,0 +1,19 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const bit_buffer_1 = require("bit-buffer");
class DynamicBitView extends bit_buffer_1.BitView {
setBits(offset, value, bits) {
const available = (this.byteLength * 8 - offset);
if (bits > available) {
this.grow();
}
return super.setBits(offset, value, bits);
}
grow() {
const newView = new Uint8Array(this.byteLength * 2);
newView.set(this._view);
this._view = newView;
}
}
exports.DynamicBitView = DynamicBitView;
//# sourceMappingURL=DynamicBitView.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"DynamicBitView.js","sourceRoot":"","sources":["../src/DynamicBitView.ts"],"names":[],"mappings":";;AAAA,2CAAmC;AAEnC,MAAa,cAAe,SAAQ,oBAAO;IAInC,OAAO,CAAC,MAAc,EAAE,KAAa,EAAE,IAAY;QACzD,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;QAEjD,IAAI,IAAI,GAAG,SAAS,EAAE;YACrB,IAAI,CAAC,IAAI,EAAE,CAAC;SACZ;QACD,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC;IAEM,IAAI;QACV,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;IACtB,CAAC;CACD;AAlBD,wCAkBC"}

12
build/Encoder.d.ts vendored Normal file
View file

@ -0,0 +1,12 @@
import { BitStream } from 'bit-buffer';
import { Header } from './Data/Header';
import { Message } from './Data/Message';
import { ParserState } from './Data/ParserState';
export declare class Encoder {
readonly stream: BitStream;
readonly parserState: ParserState;
constructor(stream: BitStream);
encodeHeader(header: Header): void;
writeMessage(message: Message): void;
protected handleMessage(message: Message): void;
}

34
build/Encoder.js Normal file
View file

@ -0,0 +1,34 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const Message_1 = require("./Data/Message");
const ParserState_1 = require("./Data/ParserState");
const Parser_1 = require("./Parser");
const Header_1 = require("./Parser/Header");
class Encoder {
constructor(stream) {
this.stream = stream;
this.parserState = new ParserState_1.ParserState();
}
encodeHeader(header) {
Header_1.encodeHeader(header, this.stream);
}
writeMessage(message) {
this.stream.writeUint8(message.type);
const handler = Parser_1.messageHandlers.get(message.type);
if (!handler) {
throw new Error(`No handler for message of type ${Message_1.MessageType[message.type]}`);
}
handler.encodeMessage(message, this.stream, this.parserState);
this.handleMessage(message);
}
handleMessage(message) {
this.parserState.handleMessage(message);
if (message.type === Message_1.MessageType.Packet) {
for (const packet of message.packets) {
this.parserState.handlePacket(packet);
}
}
}
}
exports.Encoder = Encoder;
//# sourceMappingURL=Encoder.js.map

1
build/Encoder.js.map Normal file
View file

@ -0,0 +1 @@
{"version":3,"file":"Encoder.js","sourceRoot":"","sources":["../src/Encoder.ts"],"names":[],"mappings":";;AAEA,4CAAoD;AACpD,oDAA+C;AAC/C,qCAAyC;AACzC,4CAA6C;AAE7C,MAAa,OAAO;IAInB,YAAY,MAAiB;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,IAAI,yBAAW,EAAE,CAAC;IACtC,CAAC;IAEM,YAAY,CAAC,MAAc;QACjC,qBAAY,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAEM,YAAY,CAAC,OAAgB;QACnC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,wBAAe,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,OAAO,EAAE;YACb,MAAM,IAAI,KAAK,CAAC,kCAAkC,qBAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SAC/E;QACD,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC9D,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAES,aAAa,CAAC,OAAgB;QACvC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,OAAO,CAAC,IAAI,KAAK,qBAAW,CAAC,MAAM,EAAE;YACxC,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE;gBACrC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;aACtC;SACD;IACF,CAAC;CACD;AA/BD,0BA+BC"}

1
build/Math.d.ts vendored Normal file
View file

@ -0,0 +1 @@
export declare function logBase2(num: number): number;

13
build/Math.js Normal file
View file

@ -0,0 +1,13 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
function logBase2(num) {
let result = 0;
num >>= 1;
while (num !== 0 && result < 32) {
result++;
num >>= 1;
}
return result;
}
exports.logBase2 = logBase2;
//# sourceMappingURL=Math.js.map

1
build/Math.js.map Normal file
View file

@ -0,0 +1 @@
{"version":3,"file":"Math.js","sourceRoot":"","sources":["../src/Math.ts"],"names":[],"mappings":";;AAAA,SAAgB,QAAQ,CAAC,GAAW;IACnC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,GAAG,KAAK,CAAC,CAAC;IACV,OAAO,GAAG,KAAK,CAAC,IAAI,MAAM,GAAG,EAAE,EAAE;QAChC,MAAM,EAAE,CAAC;QACT,GAAG,KAAK,CAAC,CAAC;KACV;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AARD,4BAQC"}

View file

@ -0,0 +1,4 @@
import { Match } from '../Data/Match';
import { PacketMessage } from '../Data/Message';
import { PacketEntity } from '../Data/PacketEntity';
export declare function handleBaseEntity(entity: PacketEntity, match: Match, message: PacketMessage): void;

View file

@ -0,0 +1,29 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
function handleBaseEntity(entity, match, message) {
for (const prop of entity.props) {
if (prop.definition.ownerTableName === 'DT_AttributeContainer' && prop.definition.name === 'm_hOuter') {
if (!match.outerMap.has(prop.value)) {
match.outerMap.set(prop.value, entity.entityIndex);
}
}
}
for (const prop of entity.props) {
if (prop.definition.ownerTableName === 'DT_BaseCombatWeapon' && prop.definition.name === 'm_hOwner') {
if (!match.weaponMap.has(entity.entityIndex)) {
match.weaponMap.set(entity.entityIndex, {
className: entity.serverClass.name,
owner: prop.value
});
}
}
}
switch (entity.serverClass.name) {
case 'CWorld':
match.world.boundaryMin = entity.getProperty('DT_WORLD', 'm_WorldMins').value;
match.world.boundaryMax = entity.getProperty('DT_WORLD', 'm_WorldMaxs').value;
break;
}
}
exports.handleBaseEntity = handleBaseEntity;
//# sourceMappingURL=BaseEntityHandler.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"BaseEntityHandler.js","sourceRoot":"","sources":["../../src/PacketHandler/BaseEntityHandler.ts"],"names":[],"mappings":";;AAKA,SAAgB,gBAAgB,CAAC,MAAoB,EAAE,KAAY,EAAE,OAAsB;IAC1F,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE;QAChC,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,KAAK,uBAAuB,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,UAAU,EAAE;YACtG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAe,CAAC,EAAE;gBAC9C,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAe,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;aAC7D;SACD;KACD;IAED,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE;QAChC,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,KAAK,qBAAqB,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,UAAU,EAAE;YACpG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;gBAC7C,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE;oBACvC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI;oBAClC,KAAK,EAAE,IAAI,CAAC,KAAe;iBAC3B,CAAC,CAAC;aACH;SACD;KACD;IAED,QAAQ,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE;QAChC,KAAK,QAAQ;YACZ,KAAK,CAAC,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,KAAe,CAAC;YACxF,KAAK,CAAC,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,KAAe,CAAC;YACxF,MAAM;KACP;AACF,CAAC;AA1BD,4CA0BC"}

3
build/PacketHandler/GameEvent.d.ts vendored Normal file
View file

@ -0,0 +1,3 @@
import { Match } from '../Data/Match';
import { GameEventPacket } from '../Data/Packet';
export declare function handleGameEvent(packet: GameEventPacket, match: Match): void;

Some files were not shown because too many files have changed in this diff Show more