From d35ed8a2129e6fce60bef3fbada6c94219c517bb Mon Sep 17 00:00:00 2001 From: tresabhi <43380238+tresabhi@users.noreply.github.com> Date: Thu, 28 Nov 2024 14:11:44 -0600 Subject: [PATCH] feat: further progress on embeds --- .../src/blitzkit/createDefaultProvisions.ts | 30 +++++++++++ packages/core/src/blitzkit/index.ts | 1 + .../src/core/blitzkit/tankToDuelMember.ts | 23 +------- .../pages/tools/tankopedia/[id]/index.astro | 54 +++++++++++++++++-- 4 files changed, 84 insertions(+), 24 deletions(-) create mode 100644 packages/core/src/blitzkit/createDefaultProvisions.ts diff --git a/packages/core/src/blitzkit/createDefaultProvisions.ts b/packages/core/src/blitzkit/createDefaultProvisions.ts new file mode 100644 index 000000000..2719bb2d2 --- /dev/null +++ b/packages/core/src/blitzkit/createDefaultProvisions.ts @@ -0,0 +1,30 @@ +import { GunDefinition, ProvisionDefinitions, TankDefinition } from '../protos'; +import { availableProvisions } from './availableProvisions'; + +const PROVISION_PREFERENCES = [ + 19, // improved fuel + 18, // standard fuel + 22, // protective kit +]; + +function infinityFallback(value: number) { + return value === -1 ? Infinity : value; +} + +export function createDefaultProvisions( + tank: TankDefinition, + gun: GunDefinition, + provisionDefinitions: ProvisionDefinitions, +) { + const provisionsList = availableProvisions(tank, gun, provisionDefinitions); + + return provisionsList + .sort( + (a, b) => + infinityFallback(PROVISION_PREFERENCES.indexOf(a.id)) - + infinityFallback(PROVISION_PREFERENCES.indexOf(b.id)), + ) + .sort((a, b) => (b.crew ?? 0) - (a.crew ?? 0)) + .slice(0, tank.max_provisions) + .map(({ id }) => id); +} diff --git a/packages/core/src/blitzkit/index.ts b/packages/core/src/blitzkit/index.ts index 19d872e55..983def4d7 100644 --- a/packages/core/src/blitzkit/index.ts +++ b/packages/core/src/blitzkit/index.ts @@ -43,6 +43,7 @@ export * from './uniqueGuns'; export * from './unwrapBlitzkitResponse'; export * from './votes'; // export * from './withCORSProxy'; +export * from './createDefaultProvisions'; export * from './metaSortTank'; export * from './romanize'; export * from './youtubers'; diff --git a/packages/website/src/core/blitzkit/tankToDuelMember.ts b/packages/website/src/core/blitzkit/tankToDuelMember.ts index 3a12cde64..945657d29 100644 --- a/packages/website/src/core/blitzkit/tankToDuelMember.ts +++ b/packages/website/src/core/blitzkit/tankToDuelMember.ts @@ -1,43 +1,24 @@ import { - availableProvisions, + createDefaultProvisions, type ProvisionDefinitions, type TankDefinition, } from '@blitzkit/core'; import type { DuelMember } from '../../stores/duel'; import { genericDefaultEquipmentMatrix } from '../../stores/duel/constants'; -const PROVISION_PREFERENCES = [ - 19, // improved fuel - 18, // standard fuel - 22, // protective kit -]; - -function infinityFallback(value: number) { - return value === -1 ? Infinity : value; -} - export function tankToDuelMember( tank: TankDefinition, provisionDefinitions: ProvisionDefinitions, ) { const turret = tank.turrets.at(-1)!; const gun = turret.guns.at(-1)!; - const provisionsList = availableProvisions(tank, gun, provisionDefinitions); return { camouflage: true, consumables: [], equipmentMatrix: genericDefaultEquipmentMatrix, cooldownBooster: 0, - provisions: provisionsList - .sort( - (a, b) => - infinityFallback(PROVISION_PREFERENCES.indexOf(a.id)) - - infinityFallback(PROVISION_PREFERENCES.indexOf(b.id)), - ) - .sort((a, b) => (b.crew ?? 0) - (a.crew ?? 0)) - .slice(0, tank.max_provisions) - .map(({ id }) => id), + provisions: createDefaultProvisions(tank, gun, provisionDefinitions), engine: tank.engines.at(-1)!, gun, shell: tank.turrets.at(-1)!.guns.at(-1)!.gun_type!.value.base.shells[0], diff --git a/packages/website/src/pages/tools/tankopedia/[id]/index.astro b/packages/website/src/pages/tools/tankopedia/[id]/index.astro index 05c57c08a..da3300b3f 100644 --- a/packages/website/src/pages/tools/tankopedia/[id]/index.astro +++ b/packages/website/src/pages/tools/tankopedia/[id]/index.astro @@ -1,12 +1,20 @@ --- import { asset, + createDefaultProvisions, + createDefaultSkills, + fetchEquipmentDefinitions, + fetchModelDefinitions, + fetchProvisionDefinitions, + fetchSkillDefinitions, fetchTankDefinitions, TIER_ROMAN_NUMERALS, } from '@blitzkit/core'; import strings from '@blitzkit/core/lang/en-US.json'; import type { GetStaticPaths } from 'astro'; +import { tankCharacteristics } from '../../../../core/blitzkit/tankCharacteristics'; import BaseLayout from '../../../../layouts/BaseLayout.astro'; +import { genericDefaultEquipmentMatrix } from '../../../../stores/duel/constants'; import { Page } from './_index'; export const getStaticPaths = (async () => { @@ -20,16 +28,52 @@ export const getStaticPaths = (async () => { const { id } = Astro.params; const tankDefinitions = await fetchTankDefinitions(); +const skillDefinitions = await fetchSkillDefinitions(); +const provisionDefinitions = await fetchProvisionDefinitions(); +const equipmentDefinitions = await fetchEquipmentDefinitions(); +const tankModelDefinitions = await fetchModelDefinitions(); const tank = tankDefinitions.tanks[id]; +const tankModelDefinition = tankModelDefinitions.models[tank.id]; const name = tank.name_full ?? tank.name; -const title = `${name} - Tier ${TIER_ROMAN_NUMERALS[tank.tier]} ${ +const title = `${name}, Tier ${TIER_ROMAN_NUMERALS[tank.tier]} ${ strings.common.nations_adjectives[ tank.nation as keyof typeof strings.common.nations_adjectives ] -} ${strings.common.tank_class_short[tank.class]}`; +} ${strings.common.tank_class_short[tank.class]} | BlitzKit Tankopedia | World of Tanks Blitz (WoTB)`; const url = import.meta.env.SITE + Astro.url.pathname; -const description = `${name} armor, statistics, equipment, provisions, and more.`; const icon = asset(`icons/tanks/big/${id}.webp`); +const turret = tank.turrets.at(-1)!; +const gun = turret.guns.at(-1)!; +const characteristics = tankCharacteristics( + { + tank, + applyDynamicArmor: false, + applyReactiveArmor: false, + applySpallLiner: false, + camouflage: true, + consumables: [], + crewSkills: createDefaultSkills(skillDefinitions), + engine: tank.engines.at(-1)!, + equipmentMatrix: genericDefaultEquipmentMatrix, + turret, + gun, + provisions: createDefaultProvisions(tank, gun, provisionDefinitions), + shell: gun.gun_type!.value.base.shells[0], + stockEngine: tank.engines[0], + stockGun: tank.turrets[0].guns[0], + stockTurret: tank.turrets[0], + stockTrack: tank.tracks[0], + track: tank.tracks.at(-1)!, + }, + { equipmentDefinitions, provisionDefinitions, tankModelDefinition }, +); +const description = `${ + name +} armor, statistics, equipment, provisions, and more. ${Math.round( + characteristics.dpm, +).toLocaleString()} DPM, ${characteristics.damage}hp damage, ${ + characteristics.speedForwards +}kph top speed, ${characteristics.health}hp health.`; --- {title} @@ -38,6 +82,10 @@ const icon = asset(`icons/tanks/big/${id}.webp`); + + + +