+ {line.stages.map((stage, index) => {
+ const isSelected = upgrades[line.name] === index;
+
+ return (
+ <>
+ {index !== 0 &&
}
+
+
{
+ Tankopedia.mutate((draft) => {
+ draft.protagonist.upgrades[line.name] = index;
+
+ for (const required of stage.required_upgrades) {
+ for (const line of tank.tank!.upgrade_lines) {
+ let i = 0;
+
+ for (const stage of line.stages) {
+ if (stage.tech_name === required) {
+ draft.protagonist.upgrades[line.name] = Math.max(
+ draft.protagonist.upgrades[line.name],
+ i,
+ );
+ }
+
+ i++;
+ }
+ }
+ }
+
+ for (const line of tank.tank!.upgrade_lines) {
+ let i = draft.protagonist.upgrades[line.name];
+
+ while (i > 0) {
+ const currentStage = line.stages[i];
+ const valid = currentStage.required_upgrades.every(
+ (required) => {
+ for (const line of tank.tank!.upgrade_lines) {
+ const idx = draft.protagonist.upgrades[line.name];
+
+ if (line.stages[idx]?.tech_name === required) {
+ return true;
+ }
+ }
+
+ return false;
+ },
+ );
+
+ if (valid) break;
+
+ i--;
+ }
+
+ draft.protagonist.upgrades[line.name] = i;
+ }
+ });
+ }}
+ >
+
+
+ >
+ );
+ })}
+
+ );
+}
diff --git a/packages/website-ue/src/core/api/abstract.ts b/packages/website-ue/src/core/api/abstract.ts
index dea341144..077819a49 100644
--- a/packages/website-ue/src/core/api/abstract.ts
+++ b/packages/website-ue/src/core/api/abstract.ts
@@ -46,7 +46,7 @@ export abstract class AbstractAPI {
return supported;
}
- @Cache<[string, string, boolean]>((...args) => args.join("-"))
+ @Cache()
async groupedGameStrings(locale: string, group: string, prefix: boolean) {
this.assertLocale(locale);
@@ -64,9 +64,7 @@ export abstract class AbstractAPI {
}
}
-export function Cache