From 7cb3df3da20499bfbc6301b796c3cb4b735e0792 Mon Sep 17 00:00:00 2001 From: tresabhi <43380238+tresabhi@users.noreply.github.com> Date: Sun, 4 Oct 2026 18:16:08 -0500 Subject: [PATCH] reload --- .../src/blitzkit/api/server/11_scripts.ts | 25 +++++++++++++++-- packages/i18n/strings/en.json | 1 + .../website/src/config/characteristics.ts | 28 +++++++++++++++++-- .../src/core/blitzkit/tankCharacteristics.ts | 1 - .../src/hooks/useCharacteristicRenderer.tsx | 17 +---------- 5 files changed, 51 insertions(+), 21 deletions(-) diff --git a/packages/core/src/blitzkit/api/server/11_scripts.ts b/packages/core/src/blitzkit/api/server/11_scripts.ts index f2dee6def..f8647c52b 100644 --- a/packages/core/src/blitzkit/api/server/11_scripts.ts +++ b/packages/core/src/blitzkit/api/server/11_scripts.ts @@ -1,9 +1,24 @@ import { ConsumablesCommon, OptionalDevices } from "../../../types"; +import { BlitzEffectScript } from "../../../types/blitzEffectScript"; import { BlitzScripts } from "../../../types/blitzScripts"; import { AbstractVFS } from "../../vfs"; import { Cache } from "./0_base"; import { ServerBlitzKitAPI10 } from "./10_avatars"; +function assignNormalizedScript( + target: Record, + key: number, + script?: BlitzEffectScript, +) { + if (script === undefined) return; + + if (script["#text"] === "StaticFactorDevice") { + script["#text"] = script.attribute!; + } + + target[key] = script; +} + export abstract class ServerBlitzKitAPI11 extends ServerBlitzKitAPI10 { @Cache() async scripts() { @@ -19,7 +34,8 @@ export abstract class ServerBlitzKitAPI11 extends ServerBlitzKitAPI10 { for (const key in optionalDevices.root) { const equipment = optionalDevices.root[key]; - scripts.equipment[equipment.id] = equipment.script; + + assignNormalizedScript(scripts.equipment, equipment.id, equipment.script); } async function assign( @@ -38,7 +54,12 @@ export abstract class ServerBlitzKitAPI11 extends ServerBlitzKitAPI10 { for (const key in things.root) { const thing = things.root[key]; - scripts[target][thing.id] = things.root[key].script; + + assignNormalizedScript( + scripts[target], + thing.id, + things.root[key].script, + ); } } } diff --git a/packages/i18n/strings/en.json b/packages/i18n/strings/en.json index bcafe5e9f..385257485 100644 --- a/packages/i18n/strings/en.json +++ b/packages/i18n/strings/en.json @@ -5,6 +5,7 @@ "deg": "{value}°", "hp": "{value}hp", "x": "x{value}", + "s": "{value}s", "percentage": "{value}%", "deg_s": "{value}°/s", "plus": "+{value}" diff --git a/packages/website/src/config/characteristics.ts b/packages/website/src/config/characteristics.ts index 914ca878b..4e6e14e02 100644 --- a/packages/website/src/config/characteristics.ts +++ b/packages/website/src/config/characteristics.ts @@ -87,12 +87,36 @@ export const characteristics = { let coefficient = 1; script("protagonist", "CalibratedShells", (effect) => { - coefficient *= - 1 + + coefficient += effect.piercingFactors![blitzkitToBlitzShellKind[shell.type]] / 100; }); return coefficient * shell.penetration!.near; }, }, + + reload: { + type: CharacteristicType.Number, + + should_render({ gun }) { + return gun.gun_type!.$case !== "auto_reloader"; + }, + + compute({ gun, script }) { + // should never happen! just for typescript + if (gun.gun_type!.$case === "auto_reloader") return -Infinity; + + let coefficient = 1; + + script("protagonist", "miscAttrs/gunReloadTimeFactor", (effect) => { + coefficient += effect.bonusValues!.percent / 100; + }); + + if (gun.gun_type!.$case === "regular") { + return coefficient * gun.gun_type!.value.reload; + } + + return gun.gun_type!.value.clip_reload; + }, + }, } satisfies Record; diff --git a/packages/website/src/core/blitzkit/tankCharacteristics.ts b/packages/website/src/core/blitzkit/tankCharacteristics.ts index bbb5cf683..2f4a65baa 100644 --- a/packages/website/src/core/blitzkit/tankCharacteristics.ts +++ b/packages/website/src/core/blitzkit/tankCharacteristics.ts @@ -362,7 +362,6 @@ export function tankCharacteristics( : undefined; const damageWithoutAssault = shell.armor_damage * damageCoefficientWithoutAssault; - const damage = shell.armor_damage * damageCoefficient; const dpmEffective = gun.gun_type!.$case === "auto_reloader" ? gun.gun_type!.value.shell_reloads[0] > diff --git a/packages/website/src/hooks/useCharacteristicRenderer.tsx b/packages/website/src/hooks/useCharacteristicRenderer.tsx index d2fac9380..cc153f9a8 100644 --- a/packages/website/src/hooks/useCharacteristicRenderer.tsx +++ b/packages/website/src/hooks/useCharacteristicRenderer.tsx @@ -1,7 +1,6 @@ import { literalsArray } from "@blitzkit/i18n/src/literals"; -import { useMemo, type ReactNode } from "react"; +import { type ReactNode } from "react"; import { Text } from "../components/Text"; -import { characteristicsGroups } from "../config/characteristicsGroups"; import type { CharacteristicRenderConfig, CharacteristicReturnType, @@ -10,20 +9,6 @@ import { useLocale } from "./useLocale"; import { useStrings } from "./useStrings"; export function useCharacteristicRenderer() { - const groups = useMemo(() => { - const groups: string[] = []; - - for (const group of characteristicsGroups) { - for (const item of group.order) { - if ("strings" in item && item.strings) { - groups.push(item.strings); - } - } - } - - return groups; - }, []); - const locale = useLocale(); const strings = useStrings();