/** * @typedef {Object} PlayerEvents * @property {string} teamChanged * @property {string} activityChanged * @property {string} observerSlotChanged * @property {string} hpChanged * @property {string} armorChanged * @property {string} helmetChanged * @property {string} flashedChanged * @property {string} smokedChanged * @property {string} burningChanged * @property {string} moneyChanged * @property {string} moneyEarned * @property {string} equipmentValueChanged * @property {string} weaponChanged * @property {string} ammoClipChanged * @property {string} ammoReserveChanged * @property {string} killsChanged * @property {string} deathsChanged * @property {string} assistsChanged * @property {string} scoreChanged */ import { GrenadeBase } from "../models/grenades/GrenadeBase"; import { Vector3D } from "../models/helpers/Vector3D"; import { ModelBase } from "../models/ModelBase"; import { Player } from "../models/players/Player"; import { Weapon } from "../models/Weapon"; import { Activity, BombState, CountdownPhase, MapPhase, RoundPhase, RoundWinCondition, Team } from "./enums"; import { GRENADEID, STEAMID64 } from "./types"; /** * @typedef {Object} MapEvents * @property {string} nameChanged * @property {string} phaseChanged * @property {string} roundChanged * @property {string} teamCTScoreChanged * @property {string} teamTScoreChanged */ /** * @typedef {Object} RoundEvents * @property {string} phaseChanged * @property {string} started * @property {string} ended * @property {string} won * @property {string} bombPlantingStarted * @property {string} bombPlanted * @property {string} bombPlantFake */ /** * @typedef {Object} GsiEvents * @property {PlayerEvents} player * @property {MapEvents} map * @property {RoundEvents} round */ export const EVENTS = /* * @type {GsiEvents} */ { provider: { nameChanged: "provider:nameChanged", timestampChanged: "provider:timestampChanged", }, map: { nameChanged: "map:nameChanged", phaseChanged: "map:phaseChanged", roundChanged: "map:roundChanged", teamCTScoreChanged: "map:teamCTScoreChanged", teamTScoreChanged: "map:teamTScoreChanged", currentSpectatorsChanged: "map:currentSpectatorsChanged", souvenirsTotalChanged: "map:souvenirsTotalChanged", roundWinsChanged: "map:roundWinsChanged", }, round: { phaseChanged: "round:phaseChanged", started: "round:started", ended: "round:ended", won: "round:won", }, player: { // Basic Info nameChanged: "player:nameChanged", clanChanged: "player:clanChanged", xpOverloadLevelChanged: "player:xpOverloadLevelChanged", steamidChanged: "player:steamidChanged", teamChanged: "player:teamChanged", activityChanged: "player:activityChanged", observerSlotChanged: "player:observerSlotChanged", specTargetChanged: "player:spectargetChanged", positionChanged: "player:positionChanged", forwardDirectionChanged: "player:forwardDirectionChanged", // Player State hpChanged: "player:hpChanged", armorChanged: "player:armorChanged", helmetChanged: "player:helmetChanged", flashedChanged: "player:flashedChanged", smokedChanged: "player:smokedChanged", burningChanged: "player:burningChanged", moneyChanged: "player:moneyChanged", equipmentValueChanged: "player:equipmentValueChanged", // Weapons weaponChanged: "player:weaponChanged", ammoClipChanged: "player:ammoClipChanged", ammoReserveChanged: "player:ammoReserveChanged", // Match Stats killsChanged: "player:killsChanged", deathsChanged: "player:deathsChanged", assistsChanged: "player:assistsChanged", scoreChanged: "player:scoreChanged", mvpsChanged: "player:mvpsChanged", }, phaseCountdowns: { phaseChanged: "phaseCountdowns:phaseChanged", phaseEndsInChanged: "phaseCountdowns:phaseEndsInChanged", }, allPlayers: { joined: "allPlayers:joined", left: "allPlayers:left", // Basic Info teamChanged: "allPlayers:teamChanged", observerSlotChanged: "allPlayers:observerSlotChanged", positionChanged: "allPlayers:positionChanged", forwardDirectionChanged: "allPlayers:forwardDirectionChanged", // Player State hpChanged: "allPlayers:hpChanged", armorChanged: "allPlayers:armorChanged", helmetChanged: "allPlayers:helmetChanged", flashedChanged: "allPlayers:flashedChanged", smokedChanged: "allPlayers:smokedChanged", burningChanged: "allPlayers:burningChanged", moneyChanged: "allPlayers:moneyChanged", equipmentValueChanged: "allPlayers:equipmentValueChanged", // Weapons weaponChanged: "allPlayers:weaponChanged", ammoClipChanged: "allPlayers:ammoClipChanged", ammoReserveChanged: "allPlayers:ammoReserveChanged", // Match Stats killsChanged: "allPlayers:killsChanged", deathsChanged: "allPlayers:deathsChanged", assistsChanged: "allPlayers:assistsChanged", scoreChanged: "allPlayers:scoreChanged", mvpsChanged: "allPlayers:mvpsChanged", }, bomb: { stateChanged: "bomb:stateChanged", positionChanged: "bomb:positionChanged", playerChanged: "bomb:playerChanged", }, grenades: { existenceChanged: "grenades:existenceChanged", positionChanged: "grenades:positionChanged", velocityChanged: "grenades:velocityChanged", lifetimeChanged: "grenades:lifetimeChanged", effectTimeChanged: "grenades:effectTimeChanged", flamesChanged: "grenades:flamesChanged", } } as const; export type comparisonDataString = { previous: T | null | "unknown"; current: T | null | "unknown" }; export type comparisonDataModel = { previous: T | null | "unknown"; current: T | null | "unknown" }; export type comparisonDataModelArray = { previous: T[] | null | "unknown"; current: T[] | null | "unknown" }; export type comparisonDataNumber = { previous: T | null | 0; current: T | null | 0 }; export type comparisonDataEnum = { previous: T; current: T }; export type comparisonDataVector3D = { previous: null | Vector3D; current: null | Vector3D }; export interface EventMap { "provider:nameChanged": [comparisonDataString]; "provider:timestampChanged": [comparisonDataNumber]; "map:nameChanged": [comparisonDataString]; "map:phaseChanged": [comparisonDataEnum]; "map:roundChanged": [comparisonDataNumber]; "map:teamCTScoreChanged": [comparisonDataNumber]; "map:teamTScoreChanged": [comparisonDataNumber]; "map:currentSpectatorsChanged": [comparisonDataNumber]; "map:souvenirsTotalChanged": [comparisonDataNumber]; "map:roundWinsChanged": [comparisonDataEnum>]; "round:phaseChanged": [comparisonDataEnum]; "round:started": []; "round:ended": [{ winner: string | null | "unknown" }]; "round:won": [comparisonDataString]; "player:nameChanged": [comparisonDataString]; "player:clanChanged": [comparisonDataString]; "player:xpOverloadLevelChanged": [comparisonDataNumber]; "player:steamidChanged": [comparisonDataString]; "player:teamChanged": [comparisonDataEnum]; "player:activityChanged": [comparisonDataEnum]; "player:observerSlotChanged": [comparisonDataNumber]; "player:spectargetChanged": [comparisonDataString]; "player:hpChanged": [comparisonDataNumber]; "player:armorChanged": [comparisonDataNumber]; "player:helmetChanged": [comparisonDataNumber]; "player:flashedChanged": [comparisonDataNumber]; "player:smokedChanged": [comparisonDataNumber]; "player:burningChanged": [comparisonDataNumber]; "player:moneyChanged": [comparisonDataNumber]; "player:equipmentValueChanged": [comparisonDataNumber]; "player:weaponChanged": [comparisonDataModel]; "player:ammoClipChanged": [comparisonDataNumber]; "player:ammoReserveChanged": [comparisonDataNumber]; "player:killsChanged": [comparisonDataNumber]; "player:deathsChanged": [comparisonDataNumber]; "player:assistsChanged": [comparisonDataNumber]; "player:scoreChanged": [comparisonDataNumber]; "player:mvpsChanged": [comparisonDataNumber]; "player:positionChanged": [comparisonDataVector3D]; "player:forwardDirectionChanged": [comparisonDataVector3D]; "phaseCountdowns:phaseChanged": [comparisonDataEnum]; "phaseCountdowns:phaseEndsInChanged": [comparisonDataString]; "allPlayers:joined": [STEAMID64, comparisonDataModel]; "allPlayers:left": [STEAMID64, comparisonDataModel]; "allPlayers:teamChanged": [STEAMID64, comparisonDataEnum]; "allPlayers:observerSlotChanged": [STEAMID64, comparisonDataNumber]; "allPlayers:positionChanged": [STEAMID64, comparisonDataVector3D]; "allPlayers:forwardDirectionChanged": [STEAMID64, comparisonDataVector3D]; "allPlayers:hpChanged": [STEAMID64, comparisonDataNumber]; "allPlayers:armorChanged": [STEAMID64, comparisonDataNumber]; "allPlayers:helmetChanged": [STEAMID64, comparisonDataNumber]; "allPlayers:flashedChanged": [STEAMID64, comparisonDataNumber]; "allPlayers:smokedChanged": [STEAMID64, comparisonDataNumber]; "allPlayers:burningChanged": [STEAMID64, comparisonDataNumber]; "allPlayers:moneyChanged": [STEAMID64, comparisonDataNumber]; "allPlayers:equipmentValueChanged": [STEAMID64, comparisonDataNumber]; "allPlayers:weaponChanged": [STEAMID64, comparisonDataModel]; "allPlayers:ammoClipChanged": [STEAMID64, comparisonDataNumber]; "allPlayers:ammoReserveChanged": [STEAMID64, comparisonDataNumber]; "allPlayers:killsChanged": [STEAMID64, comparisonDataNumber]; "allPlayers:deathsChanged": [STEAMID64, comparisonDataNumber]; "allPlayers:assistsChanged": [STEAMID64, comparisonDataNumber]; "allPlayers:scoreChanged": [STEAMID64, comparisonDataNumber]; "allPlayers:mvpsChanged": [STEAMID64, comparisonDataNumber]; [key: `allPlayers:joined@${STEAMID64}`]: [comparisonDataModel]; [key: `allPlayers:left@${STEAMID64}`]: [comparisonDataModel]; [key: `allPlayers:teamChanged@${STEAMID64}`]: [comparisonDataEnum]; [key: `allPlayers:observerSlotChanged@${STEAMID64}`]: [comparisonDataNumber]; [key: `allPlayers:positionChanged@${STEAMID64}`]: [comparisonDataVector3D]; [key: `allPlayers:forwardDirectionChanged@${STEAMID64}`]: [comparisonDataVector3D]; [key: `allPlayers:hpChanged@${STEAMID64}`]: [comparisonDataNumber]; [key: `allPlayers:armorChanged@${STEAMID64}`]: [comparisonDataNumber]; [key: `allPlayers:helmetChanged@${STEAMID64}`]: [comparisonDataNumber]; [key: `allPlayers:flashedChanged@${STEAMID64}`]: [comparisonDataNumber]; [key: `allPlayers:smokedChanged@${STEAMID64}`]: [comparisonDataNumber]; [key: `allPlayers:burningChanged@${STEAMID64}`]: [comparisonDataNumber]; [key: `allPlayers:moneyChanged@${STEAMID64}`]: [comparisonDataNumber]; [key: `allPlayers:equipmentValueChanged@${STEAMID64}`]: [comparisonDataNumber]; [key: `allPlayers:weaponChanged@${STEAMID64}`]: [comparisonDataModel]; [key: `allPlayers:ammoClipChanged@${STEAMID64}`]: [comparisonDataNumber]; [key: `allPlayers:ammoReserveChanged@${STEAMID64}`]: [comparisonDataNumber]; [key: `allPlayers:killsChanged@${STEAMID64}`]: [comparisonDataNumber]; [key: `allPlayers:deathsChanged@${STEAMID64}`]: [comparisonDataNumber]; [key: `allPlayers:assistsChanged@${STEAMID64}`]: [comparisonDataNumber]; [key: `allPlayers:scoreChanged@${STEAMID64}`]: [comparisonDataNumber]; [key: `allPlayers:mvpsChanged@${STEAMID64}`]: [comparisonDataNumber]; "bomb:stateChanged": [comparisonDataEnum]; "bomb:positionChanged": [comparisonDataVector3D]; "bomb:playerChanged": [comparisonDataString]; "grenades:existenceChanged": [GRENADEID, comparisonDataModel]; "grenades:positionChanged": [GRENADEID, comparisonDataVector3D]; "grenades:velocityChanged": [GRENADEID, comparisonDataVector3D]; "grenades:lifetimeChanged": [GRENADEID, comparisonDataNumber]; "grenades:effectTimeChanged": [GRENADEID, comparisonDataNumber]; "grenades:flamesChanged": [GRENADEID, comparisonDataModelArray]; [key: `grenades:existenceChanged@${GRENADEID}`]: [comparisonDataModel]; [key: `grenades:positionChanged@${GRENADEID}`]: [comparisonDataVector3D]; [key: `grenades:velocityChanged@${GRENADEID}`]: [comparisonDataVector3D]; [key: `grenades:lifetimeChanged@${GRENADEID}`]: [comparisonDataNumber]; [key: `grenades:effectTimeChanged@${GRENADEID}`]: [comparisonDataNumber]; [key: `grenades:flamesChanged@${GRENADEID}`]: [comparisonDataModelArray]; };