From 12aa38c0e9135e048fe5f209f8c45e41c67b7b68 Mon Sep 17 00:00:00 2001 From: tresabhi Date: Sat, 3 Jun 2023 16:45:09 +0000 Subject: [PATCH 1/2] fix: career WN8s now accounts for all tanks --- src/commands/today.tsx | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/commands/today.tsx b/src/commands/today.tsx index 59e02c578..8e4389cff 100644 --- a/src/commands/today.tsx +++ b/src/commands/today.tsx @@ -90,15 +90,16 @@ export default { }, {}, ); - const careerWN8s = tankStatsOverTimeEntries.reduce>( - (accumulator, [tankIdString]) => { - const tankId = Number(tankIdString); - - return tankId === 0 || tankAverages[tankId] === undefined + const careerWN8s = careerTankStatsRaw.reduce>( + (accumulator, { tank_id }) => { + return tank_id === 0 || tankAverages[tank_id] === undefined ? accumulator : { ...accumulator, - [tankId]: getWN8(tankAverages[tankId].all, careerStats[tankId]), + [tank_id]: getWN8( + tankAverages[tank_id].all, + careerStats[tank_id], + ), }; }, {}, @@ -119,13 +120,17 @@ export default { ); careerWN8s[0] = careerWN8sEntries.reduce( - (accumulator, [tankIdString, wn8]) => - accumulator + wn8 * careerStats[Number(tankIdString)].battles, + (accumulator, [tankIdString, WN8]) => + isNaN(WN8) + ? accumulator + : accumulator + WN8 * careerStats[Number(tankIdString)].battles, 0, ) / careerWN8sEntries.reduce( - (accumulator, [tankIdString]) => - accumulator + careerStats[Number(tankIdString)].battles, + (accumulator, [tankIdString, WN8]) => + isNaN(WN8) + ? accumulator + : accumulator + careerStats[Number(tankIdString)].battles, 0, ); From 5e8e963875cb7d495ee868e58d0aa65d80c18a9e Mon Sep 17 00:00:00 2001 From: tresabhi Date: Sat, 3 Jun 2023 17:19:57 +0000 Subject: [PATCH 2/2] fix: WN8 and average tiers now show up in career stats --- src/commands/stats.tsx | 42 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/src/commands/stats.tsx b/src/commands/stats.tsx index 20f36d380..5113f4305 100644 --- a/src/commands/stats.tsx +++ b/src/commands/stats.tsx @@ -11,6 +11,7 @@ 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 getTankStats from '../core/blitz/getTankStats.js'; import getWN8 from '../core/blitz/getWN8.js'; import getWargamingResponse from '../core/blitz/getWargamingResponse.js'; import sumStats from '../core/blitz/sumStats.js'; @@ -59,11 +60,38 @@ export default { const clanData = await getWargamingResponse( `https://api.wotblitz.${server}/wotb/clans/accountinfo/?application_id=${args['wargaming-application-id']}&account_id=${id}&extra=clan`, ); + const tankStats = await getTankStats(interaction, server, id); let stats: AllStats; let supplementaryStats: SupplementaryStats | undefined; + let hasWN8AccumulatedAtAll = false; if (period === 'career') { stats = accountInfo[id].statistics.all; + const totalBattles = tankStats.reduce( + (accumulator, { all }) => accumulator + all.battles, + 0, + ); + + supplementaryStats = { + tier: + tankStats.reduce( + (accumulator, { tank_id, all }) => + accumulator + tankopedia[tank_id].tier * all.battles, + 0, + ) / totalBattles, + WN8: + tankStats.reduce((accumulator, { tank_id, all }) => { + if (tankAverages[tank_id]) { + const tankWN8 = getWN8(tankAverages[tank_id].all, all); + + if (isNaN(tankWN8)) return accumulator; + + hasWN8AccumulatedAtAll = true; + + return accumulator + tankWN8 * all.battles; + } else return accumulator; + }, 0) / totalBattles, + }; } else { const tankStatsOverTime = await getTankStatsOverTime( interaction, @@ -78,34 +106,36 @@ export default { 0, ); - let hasWN8AccumulatedAtAll = false; - supplementaryStats = { tier: entries.reduce((accumulator, [tankIdString, stats]) => { - const tankId = Number(tankIdString); + const tankId = parseInt(tankIdString); const tankTier = tankopedia[tankId].tier; return accumulator + tankTier * stats.battles; }, 0) / totalBattles, WN8: entries.reduce((accumulator, [tankIdString, stats]) => { - const tankId = Number(tankIdString); + const tankId = parseInt(tankIdString); // edge case where new tanks don't have averages if (tankAverages[tankId]) { const tankWN8 = getWN8(tankAverages[tankId].all, stats); + + if (isNaN(tankWN8)) return accumulator; + hasWN8AccumulatedAtAll = true; + return accumulator + tankWN8 * stats.battles; } else return accumulator; }, 0) / totalBattles, }; - if (!hasWN8AccumulatedAtAll) supplementaryStats.WN8 = undefined; - stats = sumStats(entries.map(([, stats]) => stats)); } + if (!hasWN8AccumulatedAtAll) supplementaryStats.WN8 = undefined; + const image = await render(