feat: wm8 and average tier calculation

This commit is contained in:
TresAbhi committed 2023-06-01 18:36:39 +00:00
1 parent c2fca42a86
commit a12f969251
15 files changed
+315 -328

No files matched your search

+43 -49
View File
@@ -3,7 +3,7 @@ import {
ButtonBuilder,
SlashCommandBuilder,
} from 'discord.js';
import GenericStats from '../components/GenericStats/index.js';
import GenericAllStats from '../components/GenericAllStats.js';
import NoBattlesInPeriod from '../components/NoBattlesInPeriod.js';
import PoweredByBlitzStars from '../components/PoweredByBlitzStars.js';
import TitleBar from '../components/TitleBar.js';
@@ -11,11 +11,14 @@ import Wrapper from '../components/Wrapper.js';
import { BLITZ_SERVERS } from '../constants/servers.js';
import usernameAutocomplete from '../core/autocomplete/username.js';
import getBlitzAccount from '../core/blitz/getBlitzAccount.js';
import getWN8 from '../core/blitz/getWN8.js';
import getWargamingResponse from '../core/blitz/getWargamingResponse.js';
import sumStats from '../core/blitz/sumStats.js';
import { tankopedia } from '../core/blitz/tankopedia.js';
import getPeriodNow from '../core/blitzstars/getPeriodNow.js';
import getPeriodicStart from '../core/blitzstars/getPeriodStart.js';
import getTankStatsOverTime from '../core/blitzstars/getTankStatsOverTime.js';
import { tankAverages } from '../core/blitzstars/tankaverages.js';
import cmdName from '../core/interaction/cmdName.js';
import fullBlitzStarsStats from '../core/interaction/fullBlitzStarsStats.js';
import { supportBlitzStars } from '../core/interaction/supportBlitzStars.js';
@@ -27,12 +30,16 @@ import addUsernameOption from '../core/options/addUsernameOption.js';
import { args } from '../core/process/args.js';
import render from '../core/ui/render.js';
import { CommandRegistry } from '../events/interactionCreate.js';
import { AccountInfo, AllStats } from '../types/accountInfo.js';
import {
AccountInfo,
AllStats,
SupplementaryStats,
} from '../types/accountInfo.js';
import { PlayerClanData } from '../types/playerClanData.js';
export default {
inProduction: true,
inDevelopment: false,
inDevelopment: true,
inPublic: true,
command: new SlashCommandBuilder()
@@ -53,20 +60,41 @@ export default {
`https://api.wotblitz.${server}/wotb/clans/accountinfo/?application_id=${args['wargaming-application-id']}&account_id=${id}&extra=clan`,
);
let stats: AllStats;
let supplementaryStats: SupplementaryStats | undefined;
if (period === 'career') {
stats = accountInfo[id].statistics.all;
} else {
stats = sumStats(
Object.entries(
await getTankStatsOverTime(
server,
id,
getPeriodicStart(period),
getPeriodNow(),
),
).map(([, stats]) => stats),
const tankStatsOverTime = await getTankStatsOverTime(
server,
id,
getPeriodicStart(period),
getPeriodNow(),
);
const entries = Object.entries(tankStatsOverTime);
const totalBattles = entries.reduce(
(accumulator, [, stats]) => accumulator + stats.battles,
0,
);
supplementaryStats = {
tier:
entries.reduce((accumulator, [tankIdString, stats]) => {
const tankId = Number(tankIdString);
const tankTier = tankopedia[tankId].tier;
return accumulator + tankTier * stats.battles;
}, 0) / totalBattles,
wn8:
entries.reduce((accumulator, [tankIdString, stats]) => {
const tankId = Number(tankIdString);
const tankWn8 = getWN8(tankAverages[tankId].all, stats);
return accumulator + tankWn8 * stats.battles;
}, 0) / totalBattles,
};
stats = sumStats(entries.map(([, stats]) => stats));
}
const image = await render(
@@ -88,43 +116,9 @@ export default {
{stats.battles === 0 && <NoBattlesInPeriod />}
{stats.battles > 0 && (
<GenericStats
stats={[
[
'Winrate',
`${(100 * (stats.wins / stats.battles)).toFixed(2)}%`,
],
[
'Survival',
`${(100 * (stats.survived_battles / stats.battles)).toFixed(
2,
)}%`,
],
['Accuracy', `${((stats.hits / stats.shots) * 100).toFixed(2)}%`],
['Battles', stats.battles],
['Wins', stats.wins],
['Losses', stats.losses],
[
'Average damage',
(stats.damage_dealt / stats.battles).toFixed(0),
],
['Average XP', (stats.xp / stats.battles).toFixed(0)],
['Average shots', (stats.shots / stats.battles).toFixed(2)],
['Average hits', (stats.hits / stats.battles).toFixed(2)],
['Average kills', (stats.frags / stats.battles).toFixed(2)],
['Average spots', (stats.spotted / stats.battles).toFixed(2)],
[
'Damage ratio',
(stats.damage_dealt / stats.damage_received).toFixed(2),
],
[
'Kills to death ratio',
(
stats.frags /
(stats.battles - stats.survived_battles)
).toFixed(2),
],
]}
<GenericAllStats
stats={stats}
supplementaryStats={supplementaryStats}
/>
)}