diff --git a/src/client/census.client.ts b/src/client/census.client.ts index e295541..4427c9a 100644 --- a/src/client/census.client.ts +++ b/src/client/census.client.ts @@ -5,7 +5,7 @@ import { RestClient, RestClientOptions } from '../rest/rest.client'; import { CharacterManager, CharacterManagerOptions } from './managers'; import { AchievementEarned, - BattleRankUpEvent, + BattleRankUp, ContinentLock, Death, FacilityControl, @@ -35,12 +35,12 @@ export type ClientEvents = { error: (err: Error) => void; warn: (err: Error) => void; debug: (info: string) => void; - duplicate: (event: PS2Event) => void; + duplicate: (event: PS2Event) => void; subscribed: (subscription: EventSubscribed) => void; serviceState: (worldId: string, online: boolean, detail: string) => void; - ps2Event: (event: PS2Event) => void; + ps2Event: (event: PS2Event) => void; achievementEarned: (event: AchievementEarned) => void; - battleRankUp: (event: BattleRankUpEvent) => void; + battleRankUp: (event: BattleRankUp) => void; death: (event: Death) => void; gainExperience: (event: GainExperience) => void; itemAdded: (event: ItemAdded) => void; diff --git a/src/client/concerns/stream-filter.contract.ts b/src/client/concerns/stream-filter.contract.ts index 3e58972..d8a01b4 100644 --- a/src/client/concerns/stream-filter.contract.ts +++ b/src/client/concerns/stream-filter.contract.ts @@ -1,5 +1,5 @@ import { PS2Event } from '../events/base/ps2.event'; export interface StreamFilterContract { - filter(event: PS2Event): boolean; + filter(event: PS2Event): boolean; } diff --git a/src/client/constants/ps2.constants.ts b/src/client/constants/ps2.constants.ts index eb7b834..119f7cd 100644 --- a/src/client/constants/ps2.constants.ts +++ b/src/client/constants/ps2.constants.ts @@ -1,7 +1,8 @@ export enum Faction { + NONE = '0', + VS = '1', NC = '2', TR = '3', - VS = '1', NSO = '4', } @@ -14,12 +15,6 @@ export enum Loadout { MAX, } -export const factionMap = new Map([ - ['1', Faction.VS], - ['2', Faction.NC], - ['3', Faction.TR], -]); - export const loadoutFactionMap = new Map([ ['1', Faction.NC], ['3', Faction.NC], diff --git a/src/client/events/achievement-earned.event.ts b/src/client/events/achievement-earned.event.ts index 1e853ea..ac08ac0 100644 --- a/src/client/events/achievement-earned.event.ts +++ b/src/client/events/achievement-earned.event.ts @@ -1,6 +1,7 @@ import { CharacterEvent } from './base/character.event'; +import { PS2Events } from '../../stream'; -export class AchievementEarned extends CharacterEvent { +export class AchievementEarned extends CharacterEvent { readonly emit = 'achievementEarned'; readonly achievement_id: string; diff --git a/src/client/events/base/attacker.event.ts b/src/client/events/base/attacker.event.ts index 11a97db..d2bd559 100644 --- a/src/client/events/base/attacker.event.ts +++ b/src/client/events/base/attacker.event.ts @@ -1,26 +1,38 @@ -import { CharacterEvent } from './character.event'; +import { CharacterEvent, CharacterEventPayload } from './character.event'; import { Faction, - factionMap, Loadout, loadoutFactionMap, loadoutTypeMap, } from '../../constants'; -export abstract class AttackerEvent extends CharacterEvent { +export type AttackerEventPayload = Extract< + CharacterEventPayload, + { + attacker_character_id: string; + attacker_team_id: string; + attacker_loadout_id: string; + attacker_vehicle_id: string; + attacker_weapon_id: string; + team_id: string; + } +>; + +export abstract class AttackerEvent< + T extends AttackerEventPayload, +> extends CharacterEvent { /** * Can be overwritten if necessary */ static loadoutFactionMap = loadoutFactionMap; static loadoutTypeMap = loadoutTypeMap; - static factionMap = factionMap; readonly attacker_character_id: string; - readonly attacker_team_id: string; + readonly attacker_team_id: Faction; readonly attacker_loadout_id: string; readonly attacker_vehicle_id: string; readonly attacker_weapon_id: string; - readonly team_id: string; + readonly team_id: Faction; /** * Fetch the character data from the attacker @@ -33,38 +45,16 @@ export abstract class AttackerEvent extends CharacterEvent { return this.client.characterManager.fetch(this.attacker_character_id); } - /** - * Team the attacker belongs to - * - * @return {Faction} - */ - get attacker_team(): Faction { - const team = AttackerEvent.factionMap.get(this.attacker_team_id); - - if (team === undefined) - throw new TypeError( - `Unknown attacker_team_id when determining team: ${this.attacker_team_id}`, - ); - - return team; - } - /** * Faction of the attacker * * @return {Faction} */ get attacker_faction(): Faction { - const faction = AttackerEvent.loadoutFactionMap.get( - this.attacker_loadout_id, + return ( + AttackerEvent.loadoutFactionMap.get(this.attacker_loadout_id) ?? + Faction.NONE ); - - if (faction === undefined) - throw new TypeError( - `Unknown attacker_loadout_id when determining faction: ${this.attacker_loadout_id}`, - ); - - return faction; } /** @@ -82,20 +72,4 @@ export abstract class AttackerEvent extends CharacterEvent { return loadout; } - - /** - * Team the victim belongs to - * - * @return {Faction} - */ - get team(): Faction { - const team = AttackerEvent.factionMap.get(this.team_id); - - if (team === undefined) - throw new TypeError( - `Unknown team_id when determining team: ${this.team_id}`, - ); - - return team; - } } diff --git a/src/client/events/base/character-world.event.ts b/src/client/events/base/character-world.event.ts index 7fc959e..aea83e2 100644 --- a/src/client/events/base/character-world.event.ts +++ b/src/client/events/base/character-world.event.ts @@ -1,6 +1,14 @@ import { PS2Event } from './ps2.event'; +import { PS2Event as PS2EventPayload } from '../../../stream'; -export abstract class CharacterWorldEvent extends PS2Event { +export type CharacterWorldEventPayload = Extract< + PS2EventPayload, + { character_id: string } +>; + +export abstract class CharacterWorldEvent< + T extends CharacterWorldEventPayload, +> extends PS2Event { readonly character_id: string; /** diff --git a/src/client/events/base/character.event.ts b/src/client/events/base/character.event.ts index acf5e34..8ead0be 100644 --- a/src/client/events/base/character.event.ts +++ b/src/client/events/base/character.event.ts @@ -1,6 +1,13 @@ -import { ZoneEvent } from './zone.event'; +import { ZoneEvent, ZoneEventPayload } from './zone.event'; -export abstract class CharacterEvent extends ZoneEvent { +export type CharacterEventPayload = Extract< + ZoneEventPayload, + { character_id: string } +>; + +export abstract class CharacterEvent< + T extends CharacterEventPayload, +> extends ZoneEvent { readonly character_id: string; /** diff --git a/src/client/events/base/ps2.event.ts b/src/client/events/base/ps2.event.ts index 64ba60f..df16d7d 100644 --- a/src/client/events/base/ps2.event.ts +++ b/src/client/events/base/ps2.event.ts @@ -2,10 +2,12 @@ import { CensusClient, ClientEvents } from '../../census.client'; import { PS2Event as PS2EventPayload } from '../../../stream/types/ps2.events'; import { unixToDate } from '../../../utils/formatters'; -export abstract class PS2Event { +export abstract class PS2Event { + protected static readonly DATA = 1; + readonly emit: keyof ClientEvents; - readonly event_name: string; + readonly event_name: T['event_name']; readonly timestamp: Date; readonly world_id: string; @@ -14,27 +16,7 @@ export abstract class PS2Event { * @param {PS2Event} raw */ constructor(protected readonly client: CensusClient, readonly raw: T) { - this.hydrateObject(raw); - } - - /** - * @param {PS2Event} data - * @private - */ - private hydrateObject(data: T) { - Object.assign(this, data, { timestamp: unixToDate(data.timestamp) }); - - this.cast(data); - } - - /** - * Cast additional to formats - * - * @param data - * @protected - */ - protected cast(data: T): void { - // void + Object.assign(this, raw, { timestamp: unixToDate(raw.timestamp) }); } /** diff --git a/src/client/events/base/world.event.ts b/src/client/events/base/world.event.ts index 557154b..57e8c91 100644 --- a/src/client/events/base/world.event.ts +++ b/src/client/events/base/world.event.ts @@ -1,3 +1,5 @@ -import { ZoneEvent } from './zone.event'; +import { ZoneEvent, ZoneEventPayload } from './zone.event'; -export abstract class WorldEvent extends ZoneEvent {} +export abstract class WorldEvent< + T extends ZoneEventPayload, +> extends ZoneEvent {} diff --git a/src/client/events/base/zone.event.ts b/src/client/events/base/zone.event.ts index 4ac5f55..0aa0fa6 100644 --- a/src/client/events/base/zone.event.ts +++ b/src/client/events/base/zone.event.ts @@ -1,6 +1,11 @@ import { PS2Event } from './ps2.event'; +import { PS2Event as PS2EventPayload } from '../../../stream'; -export abstract class ZoneEvent extends PS2Event { +export type ZoneEventPayload = Extract; + +export abstract class ZoneEvent< + T extends ZoneEventPayload, +> extends PS2Event { readonly zone_id: string; get zoneDefinitionId(): number { diff --git a/src/client/events/battle-rank-up.event.ts b/src/client/events/battle-rank-up.event.ts index 7516fb2..8df8327 100644 --- a/src/client/events/battle-rank-up.event.ts +++ b/src/client/events/battle-rank-up.event.ts @@ -1,11 +1,24 @@ import { CharacterEvent } from './base/character.event'; +import { PS2Events } from '../../stream'; +import { PS2Event } from './base/ps2.event'; -export class BattleRankUpEvent extends CharacterEvent { +export class BattleRankUp extends CharacterEvent { readonly emit = 'battleRankUp'; - readonly battle_rank: string; + readonly battle_rank: number; readonly event_name: 'BattleRankUp'; + constructor( + ...params: ConstructorParameters> + ) { + super(...params); + + this.battle_rank = Number.parseInt( + params[BattleRankUp.DATA].battle_rank, + 10, + ); + } + toHash(): string { return `BattleRankUp:${this.character_id}:${this.timestamp}:${this.battle_rank}`; } diff --git a/src/client/events/continent-lock.event.ts b/src/client/events/continent-lock.event.ts index ff215e6..8fccbdc 100644 --- a/src/client/events/continent-lock.event.ts +++ b/src/client/events/continent-lock.event.ts @@ -1,16 +1,35 @@ import { WorldEvent } from './base/world.event'; +import { PS2Events } from '../../stream'; +import { Faction } from '../constants'; +import { PS2Event } from './base/ps2.event'; -export class ContinentLock extends WorldEvent { +export class ContinentLock extends WorldEvent { readonly emit = 'continentLock'; - event_name: 'ContinentLock'; - event_type: string; - metagame_event_id: string; - nc_population: string; - previous_faction: string; - tr_population: string; - triggering_faction: string; - vs_population: string; + readonly event_name: 'ContinentLock'; + readonly event_type: string; + readonly metagame_event_id: string; + readonly nc_population: number; + readonly tr_population: number; + readonly vs_population: number; + readonly previous_faction: Faction; + readonly triggering_faction: Faction; + + constructor( + ...params: ConstructorParameters> + ) { + super(...params); + + this.nc_population = Number.parseFloat( + params[ContinentLock.DATA].nc_population, + ); + this.tr_population = Number.parseFloat( + params[ContinentLock.DATA].tr_population, + ); + this.vs_population = Number.parseFloat( + params[ContinentLock.DATA].vs_population, + ); + } toHash(): string { return `ContinentLock:${this.world_id}:${this.zone_id}:${this.timestamp}`; diff --git a/src/client/events/continent-unlock.event.ts b/src/client/events/continent-unlock.event.ts index 3b7ecf6..5155ddb 100644 --- a/src/client/events/continent-unlock.event.ts +++ b/src/client/events/continent-unlock.event.ts @@ -1,16 +1,35 @@ import { WorldEvent } from './base/world.event'; +import { PS2Events } from '../../stream'; +import { Faction } from '../constants'; +import { PS2Event } from './base/ps2.event'; -export class ContinentUnlock extends WorldEvent { +export class ContinentUnlock extends WorldEvent { readonly emit = 'continentUnlock'; event_name: 'ContinentUnlock'; event_type: string; metagame_event_id: string; - nc_population: string; - previous_faction: string; - tr_population: string; - triggering_faction: string; - vs_population: string; + nc_population: number; + tr_population: number; + vs_population: number; + previous_faction: Faction; + triggering_faction: Faction; + + constructor( + ...params: ConstructorParameters> + ) { + super(...params); + + this.nc_population = Number.parseFloat( + params[ContinentUnlock.DATA].nc_population, + ); + this.tr_population = Number.parseFloat( + params[ContinentUnlock.DATA].tr_population, + ); + this.vs_population = Number.parseFloat( + params[ContinentUnlock.DATA].vs_population, + ); + } toHash(): string { return `ContinentUnlock:${this.world_id}:${this.zone_id}:${this.timestamp}`; diff --git a/src/client/events/death.event.ts b/src/client/events/death.event.ts index 4b27a16..3dc6b9a 100644 --- a/src/client/events/death.event.ts +++ b/src/client/events/death.event.ts @@ -2,7 +2,7 @@ import { Faction, Loadout } from '../constants/ps2.constants'; import { PS2Events } from '../../stream/types/ps2.events'; import { numberStringToBoolean } from '../../utils/formatters'; import { AttackerEvent } from './base/attacker.event'; -import DeathPayload = PS2Events.Death; +import { PS2Event } from './base/ps2.event'; export enum Kill { Normal, @@ -11,7 +11,7 @@ export enum Kill { RestrictedArea, } -export class Death extends AttackerEvent { +export class Death extends AttackerEvent { readonly emit = 'death'; readonly attacker_fire_mode_id: string; @@ -20,14 +20,13 @@ export class Death extends AttackerEvent { readonly is_headshot: boolean; readonly is_critical: boolean; - /** - * Cast is_headshot to boolean - * @param {Death} data - * @protected - */ - protected cast(data: DeathPayload) { - (this as any)['is_headshot'] = numberStringToBoolean(data.is_headshot); - (this as any)['is_critical'] = numberStringToBoolean(data.is_critical); + constructor( + ...params: ConstructorParameters> + ) { + super(...params); + + this.is_headshot = numberStringToBoolean(params[Death.DATA].is_headshot); + this.is_critical = numberStringToBoolean(params[Death.DATA].is_critical); } /** @@ -39,7 +38,7 @@ export class Death extends AttackerEvent { if (this.attacker_character_id === '0') return Kill.RestrictedArea; if (this.attacker_character_id === this.character_id) return Kill.Suicide; - return this.attacker_team === this.team ? Kill.TeamKill : Kill.Normal; + return this.attacker_team_id === this.team_id ? Kill.TeamKill : Kill.Normal; } /** @@ -48,14 +47,9 @@ export class Death extends AttackerEvent { * @return {Faction} */ get character_faction(): Faction { - const faction = Death.loadoutFactionMap.get(this.character_loadout_id); - - if (faction === undefined) - throw new TypeError( - `Unknown character_loadout_id when determining faction: ${this.character_loadout_id}`, - ); - - return faction; + return ( + Death.loadoutFactionMap.get(this.character_loadout_id) ?? Faction.NONE + ); } /** diff --git a/src/client/events/facility-control.event.ts b/src/client/events/facility-control.event.ts index 94261cb..1e49f5b 100644 --- a/src/client/events/facility-control.event.ts +++ b/src/client/events/facility-control.event.ts @@ -1,15 +1,29 @@ import { WorldEvent } from './base/world.event'; +import { PS2Events } from '../../stream'; +import { Faction } from '../constants'; +import { PS2Event } from './base/ps2.event'; -export class FacilityControl extends WorldEvent { +export class FacilityControl extends WorldEvent { readonly emit = 'facilityControl'; - readonly duration_held: string; + readonly duration_held: number; readonly event_name: 'FacilityControl'; readonly facility_id: string; - readonly new_faction_id: string; - readonly old_faction_id: string; + readonly new_faction_id: Faction; + readonly old_faction_id: Faction; readonly outfit_id: string; + constructor( + ...params: ConstructorParameters> + ) { + super(...params); + + this.duration_held = Number.parseInt( + params[FacilityControl.DATA].duration_held, + 10, + ); + } + toHash(): string { return `FacilityControl:${this.world_id}:${this.timestamp}:${this.facility_id}`; } diff --git a/src/client/events/gain-experience.event.ts b/src/client/events/gain-experience.event.ts index 9eb2d95..fef8f2d 100644 --- a/src/client/events/gain-experience.event.ts +++ b/src/client/events/gain-experience.event.ts @@ -1,14 +1,25 @@ import { CharacterEvent } from './base/character.event'; +import { PS2Events } from '../../stream'; +import { Faction } from '../constants'; +import { PS2Event } from './base/ps2.event'; -export class GainExperience extends CharacterEvent { +export class GainExperience extends CharacterEvent { readonly emit = 'gainExperience'; - readonly amount: string; + readonly amount: number; readonly event_name: 'GainExperience'; readonly experience_id: string; readonly loadout_id: string; readonly other_id: string; - readonly team_id: string; + readonly team_id: Faction; + + constructor( + ...params: ConstructorParameters> + ) { + super(...params); + + this.amount = Number.parseInt(params[GainExperience.DATA].amount, 10); + } /** * Fetch the character data of other if any diff --git a/src/client/events/item-added.event.ts b/src/client/events/item-added.event.ts index 1002262..600444b 100644 --- a/src/client/events/item-added.event.ts +++ b/src/client/events/item-added.event.ts @@ -1,13 +1,23 @@ import { CharacterEvent } from './base/character.event'; +import { PS2Events } from '../../stream'; +import { PS2Event } from './base/ps2.event'; -export class ItemAdded extends CharacterEvent { +export class ItemAdded extends CharacterEvent { readonly emit = 'itemAdded'; readonly context: string; readonly event_name: 'ItemAdded'; - readonly item_count: string; + readonly item_count: number; readonly item_id: string; + constructor( + ...params: ConstructorParameters> + ) { + super(...params); + + this.item_count = Number.parseInt(params[ItemAdded.DATA].item_count, 10); + } + toHash(): string { return `ItemAdded:${this.character_id}:${this.timestamp}:${this.item_id}`; } diff --git a/src/client/events/metagame.event.ts b/src/client/events/metagame.event.ts index 2632a91..24ff443 100644 --- a/src/client/events/metagame.event.ts +++ b/src/client/events/metagame.event.ts @@ -1,18 +1,30 @@ import { WorldEvent } from './base/world.event'; +import { PS2Events } from '../../stream'; +import { PS2Event } from './base/ps2.event'; -export class MetagameEvent extends WorldEvent { +export class MetagameEvent extends WorldEvent { readonly emit = 'metagameEvent'; readonly event_name: 'MetagameEvent'; readonly experience_bonus: string; - readonly faction_nc: string; - readonly faction_tr: string; - readonly faction_vs: string; + readonly faction_nc: number; + readonly faction_tr: number; + readonly faction_vs: number; readonly metagame_event_id: string; readonly metagame_event_state: string; readonly metagame_event_state_name: string; readonly instance_id: string; + constructor( + ...params: ConstructorParameters> + ) { + super(...params); + + this.faction_nc = Number.parseFloat(params[MetagameEvent.DATA].faction_nc); + this.faction_tr = Number.parseFloat(params[MetagameEvent.DATA].faction_tr); + this.faction_vs = Number.parseFloat(params[MetagameEvent.DATA].faction_vs); + } + toHash(): string { return `MetagameEvent:${this.world_id}:${this.timestamp}`; } diff --git a/src/client/events/player-facility-capture.event.ts b/src/client/events/player-facility-capture.event.ts index 62a912b..bc1e900 100644 --- a/src/client/events/player-facility-capture.event.ts +++ b/src/client/events/player-facility-capture.event.ts @@ -1,6 +1,7 @@ import { CharacterEvent } from './base/character.event'; +import { PS2Events } from '../../stream'; -export class PlayerFacilityCapture extends CharacterEvent { +export class PlayerFacilityCapture extends CharacterEvent { readonly emit = 'playerFacilityCapture'; readonly event_name: 'PlayerFacilityCapture'; diff --git a/src/client/events/player-facility-defend.event.ts b/src/client/events/player-facility-defend.event.ts index 80b5bc4..a65d5b9 100644 --- a/src/client/events/player-facility-defend.event.ts +++ b/src/client/events/player-facility-defend.event.ts @@ -1,6 +1,7 @@ import { CharacterEvent } from './base/character.event'; +import { PS2Events } from '../../stream'; -export class PlayerFacilityDefend extends CharacterEvent { +export class PlayerFacilityDefend extends CharacterEvent { readonly emit = 'playerFacilityDefend'; readonly event_name: 'PlayerFacilityDefend'; diff --git a/src/client/events/player-login.event.ts b/src/client/events/player-login.event.ts index 8cb7640..0102cf2 100644 --- a/src/client/events/player-login.event.ts +++ b/src/client/events/player-login.event.ts @@ -1,6 +1,7 @@ import { CharacterWorldEvent } from './base/character-world.event'; +import { PS2Events } from '../../stream'; -export class PlayerLogin extends CharacterWorldEvent { +export class PlayerLogin extends CharacterWorldEvent { readonly emit = 'playerLogin'; readonly event_name: 'PlayerLogin'; diff --git a/src/client/events/player-logout.event.ts b/src/client/events/player-logout.event.ts index d8e74ce..6f04e3e 100644 --- a/src/client/events/player-logout.event.ts +++ b/src/client/events/player-logout.event.ts @@ -1,6 +1,7 @@ import { CharacterWorldEvent } from './base/character-world.event'; +import { PS2Events } from '../../stream'; -export class PlayerLogout extends CharacterWorldEvent { +export class PlayerLogout extends CharacterWorldEvent { readonly emit = 'playerLogout'; readonly event_name: 'PlayerLogout'; diff --git a/src/client/events/skill-added.event.ts b/src/client/events/skill-added.event.ts index 9d1ea77..a81166a 100644 --- a/src/client/events/skill-added.event.ts +++ b/src/client/events/skill-added.event.ts @@ -1,6 +1,7 @@ import { CharacterEvent } from './base/character.event'; +import { PS2Events } from '../../stream'; -export class SkillAdded extends CharacterEvent { +export class SkillAdded extends CharacterEvent { readonly emit = 'skillAdded'; readonly event_name: 'SkillAdded'; diff --git a/src/client/events/vehicle-destroy.event.ts b/src/client/events/vehicle-destroy.event.ts index fc76f6e..fad6cd1 100644 --- a/src/client/events/vehicle-destroy.event.ts +++ b/src/client/events/vehicle-destroy.event.ts @@ -1,5 +1,6 @@ -import { Faction, factionMap } from '../constants/ps2.constants'; +import { Faction } from '../constants/ps2.constants'; import { AttackerEvent } from './base/attacker.event'; +import { PS2Events } from '../../stream'; export enum Destroy { Normal, @@ -9,17 +10,12 @@ export enum Destroy { Game, } -export class VehicleDestroy extends AttackerEvent { - /** - * Can be overwritten if necessary - */ - static factionMap = factionMap; - +export class VehicleDestroy extends AttackerEvent { readonly emit = 'vehicleDestroy'; readonly event_name: 'VehicleDestroy'; readonly facility_id: string; - readonly faction_id: string; + readonly faction_id: Faction; readonly vehicle_id: string; /** @@ -33,7 +29,7 @@ export class VehicleDestroy extends AttackerEvent { return ( this.attacker_character_id === this.character_id && (this.attacker_character_id === '0' || - this.attacker_faction !== this.character_faction) + this.attacker_faction !== this.team_id) ); } @@ -43,39 +39,20 @@ export class VehicleDestroy extends AttackerEvent { * @return {Destroy} */ get kill_type(): Destroy { - if (this.faction_id === '0') return Destroy.Neutral; + if (this.faction_id === Faction.NONE) return Destroy.Neutral; if (this.attacker_character_id === '0') return Destroy.Game; - const attacker_faction = this.attacker_team_id; - const victim_faction = this.team_id; - if ( this.attacker_character_id === this.character_id && - attacker_faction === victim_faction + this.attacker_team_id === this.team_id ) return Destroy.SelfDestruct; - return attacker_faction === victim_faction + return this.attacker_team_id === this.team_id ? Destroy.Friendly : Destroy.Normal; } - /** - * Faction of victim - * - * @return {Faction} - */ - get character_faction(): Faction { - const faction = VehicleDestroy.factionMap.get(this.faction_id); - - if (faction === undefined) - throw new TypeError( - `Unknown faction_id when determining faction: ${this.faction_id}`, - ); - - return faction; - } - toHash(): string { return `VehicleDestroy:${this.character_id}:${this.timestamp}:${this.attacker_character_id}`; } diff --git a/src/client/stream.handler.ts b/src/client/stream.handler.ts index dea2278..26be092 100644 --- a/src/client/stream.handler.ts +++ b/src/client/stream.handler.ts @@ -8,7 +8,7 @@ import { stringToBoolean } from '../utils/formatters'; import ServiceStateChanged = CensusMessages.ServiceStateChanged; import { AchievementEarned } from './events/achievement-earned.event'; -import { BattleRankUpEvent } from './events/battle-rank-up.event'; +import { BattleRankUp } from './events/battle-rank-up.event'; import { ContinentLock } from './events/continent-lock.event'; import { ContinentUnlock } from './events/continent-unlock.event'; import { Death } from './events/death.event'; @@ -111,12 +111,12 @@ export class StreamHandler { * @param {PS2Event} event * @return {PS2Event} */ - private wrapEvent(event: PS2EventPayload): PS2Event | undefined { + private wrapEvent(event: PS2EventPayload): PS2Event | undefined { switch (event.event_name) { case 'AchievementEarned': return new AchievementEarned(this.client, event); case 'BattleRankUp': - return new BattleRankUpEvent(this.client, event); + return new BattleRankUp(this.client, event); case 'ContinentLock': return new ContinentLock(this.client, event); case 'ContinentUnlock': diff --git a/src/client/utils/duplicate-filter.ts b/src/client/utils/duplicate-filter.ts index 85a9cad..88e17af 100644 --- a/src/client/utils/duplicate-filter.ts +++ b/src/client/utils/duplicate-filter.ts @@ -31,7 +31,7 @@ export class DuplicateFilter implements StreamFilterContract { * @param {PS2Event} event * @return {boolean} whether it has been recorded before */ - filter(event: PS2Event): boolean { + filter(event: PS2Event): boolean { if (this.ignore.includes(event.event_name)) return false; const hash = event.toHash();