2023-10-14 11:06:03 -05:00
|
|
|
import { AllStats } from '../../core/blitz/getAccountInfo';
|
2023-09-24 15:58:42 -05:00
|
|
|
import { context } from '../blitzkrieg/context';
|
2023-06-01 18:36:39 +00:00
|
|
|
|
|
|
|
|
export interface SpecialStats {
|
|
|
|
|
winrate: number;
|
|
|
|
|
damageRatio: number;
|
|
|
|
|
kdr: number;
|
|
|
|
|
damagePerBattle: number;
|
|
|
|
|
killsPerBattle: number;
|
|
|
|
|
hitsPerBattle: number;
|
|
|
|
|
spotsPerBattle: number;
|
|
|
|
|
wpm: number;
|
|
|
|
|
dpm: number;
|
|
|
|
|
kpm: number;
|
|
|
|
|
hitRate: number;
|
|
|
|
|
survivalRate: number;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export type Percentiles = [
|
|
|
|
|
number,
|
|
|
|
|
number,
|
|
|
|
|
number,
|
|
|
|
|
number,
|
|
|
|
|
number,
|
|
|
|
|
number,
|
|
|
|
|
number,
|
|
|
|
|
number,
|
|
|
|
|
number,
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
export interface SpecialPercentiles {
|
|
|
|
|
winRate: Percentiles;
|
|
|
|
|
damageRatio: Percentiles;
|
|
|
|
|
kdr: Percentiles;
|
|
|
|
|
damagePerBattle: Percentiles;
|
|
|
|
|
killsPerBattle: Percentiles;
|
|
|
|
|
hitsPerBattle: Percentiles;
|
|
|
|
|
spotsPerBattle: Percentiles;
|
|
|
|
|
wpm: Percentiles;
|
|
|
|
|
dpm: Percentiles;
|
|
|
|
|
kpm: Percentiles;
|
|
|
|
|
hitRate: Percentiles;
|
|
|
|
|
survivalRate: Percentiles;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export interface MeanSd {
|
|
|
|
|
winrateMean: number;
|
|
|
|
|
winrateSd: number;
|
|
|
|
|
hitRateMean: number;
|
|
|
|
|
hitRateSd: number;
|
|
|
|
|
survivalRateMean: number;
|
|
|
|
|
survivalRateSd: number;
|
|
|
|
|
damageRatioMean: number;
|
|
|
|
|
damageRatioSd: number;
|
|
|
|
|
kdrMean: number;
|
|
|
|
|
kdrSd: number;
|
|
|
|
|
dpbMean: number;
|
|
|
|
|
dpbSd: number;
|
|
|
|
|
kpbMean: number;
|
|
|
|
|
kpbSd: number;
|
|
|
|
|
hpbMean: number;
|
|
|
|
|
hpbSd: number;
|
|
|
|
|
spbMean: number;
|
|
|
|
|
spbSd: number;
|
|
|
|
|
}
|
|
|
|
|
|
2023-06-08 01:01:24 +00:00
|
|
|
export interface IndividualTankAverage {
|
2023-06-01 18:36:39 +00:00
|
|
|
_id: number;
|
|
|
|
|
battle_life_time: number;
|
|
|
|
|
total_battle_life_time: number;
|
|
|
|
|
number_of_players: number;
|
|
|
|
|
tank_id: number;
|
|
|
|
|
all: AllStats;
|
|
|
|
|
special: SpecialStats;
|
|
|
|
|
percentiles: SpecialPercentiles;
|
|
|
|
|
percentiles_player_count: number;
|
|
|
|
|
meanSd: MeanSd;
|
|
|
|
|
shotEff: number;
|
|
|
|
|
last_update: number;
|
|
|
|
|
}
|
|
|
|
|
|
2023-06-26 18:08:07 +00:00
|
|
|
export type TankAverages = Record<number, IndividualTankAverage>;
|
2023-06-01 18:36:39 +00:00
|
|
|
|
2023-07-05 02:09:36 +00:00
|
|
|
console.log('Caching tank averages...');
|
|
|
|
|
export const tankAverages = fetch(
|
2023-09-24 15:58:42 -05:00
|
|
|
context === 'bot'
|
|
|
|
|
? 'https://www.blitzstars.com/api/tankaverages.json'
|
|
|
|
|
: '/api/tank-averages',
|
2023-07-05 02:09:36 +00:00
|
|
|
)
|
|
|
|
|
.then((response) => response.json())
|
2023-09-24 15:58:42 -05:00
|
|
|
.then((json) => {
|
|
|
|
|
if (context === 'bot') {
|
|
|
|
|
const partialTankAverages: TankAverages = {};
|
2023-07-05 02:09:36 +00:00
|
|
|
|
2023-09-24 15:58:42 -05:00
|
|
|
(json as IndividualTankAverage[]).forEach((individualTankAverage) => {
|
2023-07-05 02:09:36 +00:00
|
|
|
partialTankAverages[individualTankAverage.tank_id] =
|
|
|
|
|
individualTankAverage;
|
2023-09-24 15:58:42 -05:00
|
|
|
});
|
2023-07-05 02:09:36 +00:00
|
|
|
|
2023-09-24 15:58:42 -05:00
|
|
|
console.log('Tank averages cached');
|
2023-07-05 02:09:36 +00:00
|
|
|
|
2023-09-24 15:58:42 -05:00
|
|
|
return partialTankAverages;
|
|
|
|
|
} else {
|
|
|
|
|
return json as TankAverages;
|
|
|
|
|
}
|
2023-07-05 02:09:36 +00:00
|
|
|
});
|