diff --git a/public/assets/versions.json b/public/assets/versions.json
index a5d21bbc5..0291bc5a3 100644
--- a/public/assets/versions.json
+++ b/public/assets/versions.json
@@ -1 +1 @@
-["1.10.0","1.10.1","1.10.2","1.11.0","1.12.0","1.12.1","1.12.2","1.12.3","1.12.4","1.12.5","1.12.6","1.12.7","1.12.8","1.12.9","1.13.0","1.13.1","1.13.2","1.13.3","1.14.0","1.14.1","1.14.2","1.14.3","1.14.4","1.15.0","1.15.1","1.15.10","1.15.11","1.15.12","1.15.13","1.15.2","1.15.3","1.15.4","1.15.5","1.15.6","1.15.7","1.15.8","1.15.9","1.16.0","1.16.1","1.16.2","1.16.3","1.16.4","1.17.0","1.17.1","1.17.2","1.18.0","1.18.1","1.18.2","1.18.3","1.19.0","1.19.1","1.19.2","1.19.3","1.19.4","1.19.5","1.19.6","1.20.0","1.20.1","1.20.2","1.20.3","1.3.0","1.3.1","1.3.2","1.3.3","1.4.0","1.4.1","1.5.0","1.5.1","1.5.2","1.5.3","1.5.4","1.6.0","1.7.0","1.7.1","1.7.2","1.7.3-1.7.4","1.7.5","1.7.6","1.7.7","1.8.0","1.8.1","1.9.0","1.9.1","1.9.2","1.9.3","1.9.4","1.9.5"]
\ No newline at end of file
+["1.10.0","1.10.1","1.10.2","1.11.0","1.12.0","1.12.1","1.12.2","1.12.3","1.12.4","1.12.5","1.12.6","1.12.7","1.12.8","1.12.9","1.13.0","1.13.1","1.13.2","1.13.3","1.14.0","1.14.1","1.14.2","1.14.3","1.14.4","1.15.0","1.15.1","1.15.10","1.15.11","1.15.12","1.15.13","1.15.2","1.15.3","1.15.4","1.15.5","1.15.6","1.15.7","1.15.8","1.15.9","1.16.0","1.16.1","1.16.2","1.16.3","1.16.4","1.17.0","1.17.1","1.17.2","1.18.0","1.18.1","1.18.2","1.18.3","1.19.0","1.19.1","1.19.2","1.19.3","1.19.4","1.19.5","1.19.6","1.20.0","1.20.1","1.20.2","1.20.3","1.20.4","1.3.0","1.3.1","1.3.2","1.3.3","1.4.0","1.4.1","1.5.0","1.5.1","1.5.2","1.5.3","1.5.4","1.6.0","1.7.0","1.7.1","1.7.2","1.7.3-1.7.4","1.7.5","1.7.6","1.7.7","1.8.0","1.8.1","1.9.0","1.9.1","1.9.2","1.9.3","1.9.4","1.9.5"]
\ No newline at end of file
diff --git a/src/app/page.tsx b/src/app/page.tsx
index 31a679642..4798e234b 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -1,6 +1,6 @@
'use client';
-import { Flex } from '@radix-ui/themes';
+import { Box, Flex } from '@radix-ui/themes';
import { Ad, AdType } from '../components/Ad';
import { AdMidSectionResponsive } from '../components/AdMidSectionResponsive';
import {
@@ -11,6 +11,7 @@ import {
ratingTool,
sessionTool,
tankopediaTool,
+ tankPerformanceTool,
} from '../constants/tools';
import { useAdExempt } from '../hooks/useAdExempt';
import { Hero } from './components/Hero';
@@ -64,13 +65,13 @@ export default function Page() {
)}
-
+
+
-
{!exempt && (
@@ -86,8 +87,13 @@ export default function Page() {
)}
+
+
+
+
+
diff --git a/src/app/tools/session/page.tsx b/src/app/tools/session/page.tsx
index d5f05aee1..7bb4b6328 100644
--- a/src/app/tools/session/page.tsx
+++ b/src/app/tools/session/page.tsx
@@ -13,7 +13,6 @@ import {
Flex,
Heading,
IconButton,
- Link,
Select,
Spinner,
Table,
@@ -23,6 +22,7 @@ import {
import { debounce } from 'lodash';
import { use, useEffect, useMemo, useRef, useState } from 'react';
import PageWrapper from '../../../components/PageWrapper';
+import { TankRowHeaderCell } from '../../../components/TankRowHeaderCell';
import { UNLOCALIZED_REGION_NAMES_SHORT } from '../../../constants/regions';
import {
STAT_KEYS,
@@ -42,11 +42,9 @@ import searchPlayersAcrossRegions, {
AccountListWithServer,
} from '../../../core/blitz/searchPlayersAcrossRegions';
import { tankDefinitions } from '../../../core/blitzkit/tankDefinitions';
-import { tankIcon } from '../../../core/blitzkit/tankIcon';
import { tankAverages } from '../../../core/blitzstars/tankAverages';
import { deltaTankStats } from '../../../core/statistics/deltaTankStats';
import { useWideFormat } from '../../../hooks/useWideFormat';
-import { theme } from '../../../stitches.config';
import mutateSession, {
SessionTracking,
useSession,
@@ -483,55 +481,7 @@ export default function Page({
overflow: 'hidden',
}}
>
-
-
-
-
-
-
-
- {tank.name}
-
-
-
+
{session.columns.map((column) => (
{statsPretty[column]}
))}
diff --git a/src/app/tools/tank-performance/page.tsx b/src/app/tools/tank-performance/page.tsx
new file mode 100644
index 000000000..8e2c51aae
--- /dev/null
+++ b/src/app/tools/tank-performance/page.tsx
@@ -0,0 +1,28 @@
+import { Table } from '@radix-ui/themes';
+import { use } from 'react';
+import PageWrapper from '../../../components/PageWrapper';
+import { TankRowHeaderCell } from '../../../components/TankRowHeaderCell';
+import { averageDefinitionsArray } from '../../../core/blitzkit/averageDefinitions';
+import { tankDefinitions } from '../../../core/blitzkit/tankDefinitions';
+
+export default function Page() {
+ const awaitedTankDefinitions = use(tankDefinitions);
+ const awaitedAverageDefinitionsArray = use(averageDefinitionsArray);
+
+ return (
+
+
+ {awaitedAverageDefinitionsArray.map((averages) => {
+ const tank = awaitedTankDefinitions[averages.id];
+
+ return (
+
+
+ {Math.round(averages.mu.wins * 100)}%
+
+ );
+ })}
+
+
+ );
+}
diff --git a/src/components/TankRowHeaderCell.tsx b/src/components/TankRowHeaderCell.tsx
new file mode 100644
index 000000000..5251d74b7
--- /dev/null
+++ b/src/components/TankRowHeaderCell.tsx
@@ -0,0 +1,62 @@
+import { Table, Text } from '@radix-ui/themes';
+import { TankDefinition } from '../core/blitzkit/tankDefinitions';
+import { tankIcon } from '../core/blitzkit/tankIcon';
+import { theme } from '../stitches.config';
+import { Link } from './Link';
+
+interface TankRowHeaderCellProps {
+ tank: TankDefinition;
+}
+
+export function TankRowHeaderCell({ tank }: TankRowHeaderCellProps) {
+ return (
+
+
+
+
+
+
+
+ {tank.name}
+
+
+
+ );
+}
diff --git a/src/constants/tools.tsx b/src/constants/tools.tsx
index 4ab52b6e7..06e56d880 100644
--- a/src/constants/tools.tsx
+++ b/src/constants/tools.tsx
@@ -106,6 +106,18 @@ export const playerStatsTool: Tool = {
image: 'YelSOfT',
};
+export const tankPerformanceTool: Tool = {
+ id: 'tank-performance',
+ title: 'Tank performance',
+ description: 'Tank performance statistics',
+ pageDescription: 'Tank performance statistics in World of Tanks Blitz',
+ button: {
+ text: 'View tanks',
+ color: 'jade',
+ },
+ image: 'vOKFB03',
+};
+
export const TOOLS: Tool[] = [
tankopediaTool,
ratingTool,
@@ -114,4 +126,5 @@ export const TOOLS: Tool[] = [
sessionTool,
discordTool,
moreTool,
+ tankPerformanceTool,
];
diff --git a/src/core/blitzkit/averageDefinitions/index.ts b/src/core/blitzkit/averageDefinitions/index.ts
index 5f37ae1d0..6b0031f43 100644
--- a/src/core/blitzkit/averageDefinitions/index.ts
+++ b/src/core/blitzkit/averageDefinitions/index.ts
@@ -37,3 +37,10 @@ export const averageDefinitions = fetch(asset('definitions/averages.pb'))
);
})
.then((data) => data.averages);
+
+export const averageDefinitionsArray = averageDefinitions.then((data) =>
+ Object.entries(data).map(([key, value]) => ({
+ id: Number(key),
+ ...(value as AverageDefinitionsEntry),
+ })),
+);