From 6c9ce58af548e81548102ad84efcda40d888cc10 Mon Sep 17 00:00:00 2001
From: tresabhi <43380238+tresabhi@users.noreply.github.com>
Date: Tue, 22 Sep 2026 15:36:12 -0500
Subject: [PATCH] scripts api
---
packages/core/src/blitzkit/api/client.ts | 7 +++
.../src/blitzkit/api/server/11_scripts.ts | 49 +++++++++++++++++++
.../core/src/blitzkit/api/server/index.ts | 4 +-
packages/core/src/types/blitzEffectScript.ts | 2 +-
packages/core/src/types/consumablesCommon.ts | 4 +-
packages/core/src/types/optionalDevices.ts | 4 +-
.../definitions/consumables.pb.ts | 47 +-----------------
.../definitions/provisions.pb.ts | 4 --
.../definitions/scripts.json.ts | 8 +++
9 files changed, 73 insertions(+), 56 deletions(-)
create mode 100644 packages/core/src/blitzkit/api/server/11_scripts.ts
create mode 100644 packages/website/src/pages/[...chunk_api]/definitions/scripts.json.ts
diff --git a/packages/core/src/blitzkit/api/client.ts b/packages/core/src/blitzkit/api/client.ts
index 12d8181c5..2fd78039b 100644
--- a/packages/core/src/blitzkit/api/client.ts
+++ b/packages/core/src/blitzkit/api/client.ts
@@ -12,6 +12,7 @@ import {
TankDefinitions,
} from "@blitzkit/protos";
import { fetchPB } from "../../protobuf";
+import { BlitzScripts } from "../../types/blitzScripts";
import { BlitzKitAPI } from "./base";
export class ClientBlitzKitAPI extends BlitzKitAPI {
@@ -66,4 +67,10 @@ export class ClientBlitzKitAPI extends BlitzKitAPI {
maps() {
return fetchPB(alias("api", "/definitions/maps.pb"), MapDefinitions);
}
+
+ async scripts() {
+ const response = await fetch(alias("api", "/definitions/scripts.json"));
+ const json = await response.json();
+ return json as BlitzScripts;
+ }
}
diff --git a/packages/core/src/blitzkit/api/server/11_scripts.ts b/packages/core/src/blitzkit/api/server/11_scripts.ts
new file mode 100644
index 000000000..6acc89ca4
--- /dev/null
+++ b/packages/core/src/blitzkit/api/server/11_scripts.ts
@@ -0,0 +1,49 @@
+import { ConsumablesCommon, OptionalDevices } from "../../../types";
+import { BlitzScripts } from "../../../types/blitzScripts";
+import { AbstractVFS } from "../../vfs";
+import { ServerBlitzKitAPI10 } from "./10_avatars";
+
+export abstract class ServerBlitzKitAPI11 extends ServerBlitzKitAPI10 {
+ async scripts() {
+ const scripts: BlitzScripts = {
+ consumables: {},
+ equipment: {},
+ provisions: {},
+ };
+
+ const optionalDevices = await this.vfs.xml<{
+ root: OptionalDevices;
+ }>("Data/XML/item_defs/vehicles/common/optional_devices.xml");
+
+ for (const key in optionalDevices.root) {
+ const equipment = optionalDevices.root[key];
+ scripts.equipment[equipment.id] = equipment.script;
+ }
+
+ async function assign(
+ vfs: AbstractVFS,
+ dir: string,
+ target: keyof BlitzScripts,
+ ) {
+ const root = `Data/XML/item_defs/vehicles/common/${dir}`;
+ const list = await vfs.text(`${root}/list.xml`);
+ const pattern = //gm;
+
+ for (const match of list.matchAll(pattern)) {
+ const group = match[1];
+ const path = `${root}/${group}.xml`;
+ const things = await vfs.xml<{ root: ConsumablesCommon }>(path);
+
+ for (const key in things.root) {
+ const thing = things.root[key];
+ scripts[target][thing.id] = things.root[key].script;
+ }
+ }
+ }
+
+ await assign(this.vfs, "consumables", "consumables");
+ await assign(this.vfs, "provisions", "provisions");
+
+ return scripts;
+ }
+}
diff --git a/packages/core/src/blitzkit/api/server/index.ts b/packages/core/src/blitzkit/api/server/index.ts
index 3ab3aee51..87f38443f 100644
--- a/packages/core/src/blitzkit/api/server/index.ts
+++ b/packages/core/src/blitzkit/api/server/index.ts
@@ -1,3 +1,3 @@
-import { ServerBlitzKitAPI10 } from "./10_avatars";
+import { ServerBlitzKitAPI11 } from "./11_scripts";
-export class ServerBlitzKitAPI extends ServerBlitzKitAPI10 {}
+export class ServerBlitzKitAPI extends ServerBlitzKitAPI11 {}
diff --git a/packages/core/src/types/blitzEffectScript.ts b/packages/core/src/types/blitzEffectScript.ts
index 032f99384..5b94c4b49 100644
--- a/packages/core/src/types/blitzEffectScript.ts
+++ b/packages/core/src/types/blitzEffectScript.ts
@@ -1,4 +1,4 @@
-type BlitzEffectScript = RSN & {
+export type BlitzEffectScript = RSN & {
"#text": string;
attribute?: string;
diff --git a/packages/core/src/types/consumablesCommon.ts b/packages/core/src/types/consumablesCommon.ts
index fd4dd23d8..3ead5fc85 100644
--- a/packages/core/src/types/consumablesCommon.ts
+++ b/packages/core/src/types/consumablesCommon.ts
@@ -1,4 +1,4 @@
-import { ProvisionConsumableScript } from "@blitzkit/core/src/types/provisionConsumableScript";
+import { BlitzEffectScript } from "./blitzEffectScript";
import { ConsumablesVehicleFilter } from "./consumablesVehicleFilter";
export interface ConsumablesCommon {
@@ -13,6 +13,6 @@ export interface ConsumablesCommon {
include: { vehicle: ConsumablesVehicleFilter; nations?: string };
exclude?: { vehicle: ConsumablesVehicleFilter; nations?: string };
};
- script: ProvisionConsumableScript;
+ script: BlitzEffectScript;
};
}
diff --git a/packages/core/src/types/optionalDevices.ts b/packages/core/src/types/optionalDevices.ts
index 26e14bc27..5ed277891 100644
--- a/packages/core/src/types/optionalDevices.ts
+++ b/packages/core/src/types/optionalDevices.ts
@@ -1,10 +1,12 @@
+import { BlitzEffectScript } from "./blitzEffectScript";
+
export interface OptionalDevices {
[key: string]: {
id: number;
userString: string;
description: string;
icon: string;
- script: unknown;
+ script: BlitzEffectScript;
display_params: unknown;
};
}
diff --git a/packages/website/src/pages/[...chunk_api]/definitions/consumables.pb.ts b/packages/website/src/pages/[...chunk_api]/definitions/consumables.pb.ts
index c859cdda6..c384c12c3 100644
--- a/packages/website/src/pages/[...chunk_api]/definitions/consumables.pb.ts
+++ b/packages/website/src/pages/[...chunk_api]/definitions/consumables.pb.ts
@@ -1,54 +1,9 @@
-import {
- ConsumableDefinitions,
- type ConsumablesCommon,
- type OptionalDevices,
-} from "@blitzkit/core";
+import { ConsumableDefinitions } from "@blitzkit/core";
import { api } from "../../../blitzkit/api";
-import { vfs } from "../../../core/blitzkit/vfs";
export { getStaticPaths } from "../_index";
export async function GET() {
- const samples: Record = {};
-
- const optionalDevices = await vfs.xml<{
- root: OptionalDevices;
- }>("Data/XML/item_defs/vehicles/common/optional_devices.xml");
-
- for (const key in optionalDevices.root) {
- samples[key] = optionalDevices.root[key].script;
- }
-
- const consumablesRoot = "Data/XML/item_defs/vehicles/common/consumables";
- const consumablesList = await vfs.text(`${consumablesRoot}/list.xml`);
- const consumablesListEntryPattern = //gm;
-
- for (const match of consumablesList.matchAll(consumablesListEntryPattern)) {
- const group = match[1];
- const path = `${consumablesRoot}/${group}.xml`;
- const consumables = await vfs.xml<{ root: ConsumablesCommon }>(path);
-
- for (const key in consumables.root) {
- samples[key] = consumables.root[key].script;
- }
- }
-
- const provisionsRoot = "Data/XML/item_defs/vehicles/common/provisions";
- const provisionsList = await vfs.text(`${provisionsRoot}/list.xml`);
- const provisionsListEntryPattern = //gm;
-
- for (const match of provisionsList.matchAll(provisionsListEntryPattern)) {
- const group = match[1];
- const path = `${provisionsRoot}/${group}.xml`;
- const provisions = await vfs.xml<{ root: ConsumablesCommon }>(path);
-
- for (const key in provisions.root) {
- samples[key] = provisions.root[key].script;
- }
- }
-
- return Response.json(Object.values(samples));
-
const definitions = await api.consumables();
const bytes = ConsumableDefinitions.encode(definitions).finish();
diff --git a/packages/website/src/pages/[...chunk_api]/definitions/provisions.pb.ts b/packages/website/src/pages/[...chunk_api]/definitions/provisions.pb.ts
index 8cb6b62da..19b006ea4 100644
--- a/packages/website/src/pages/[...chunk_api]/definitions/provisions.pb.ts
+++ b/packages/website/src/pages/[...chunk_api]/definitions/provisions.pb.ts
@@ -1,14 +1,10 @@
import { ProvisionDefinitions } from "@blitzkit/core";
import { api } from "../../../blitzkit/api";
-import { vfs } from "../../../core/blitzkit/vfs";
export { getStaticPaths } from "../_index";
export async function GET() {
const definitions = await api.provisions();
-
- return Response.json(await vfs.yaml("Data/Strings/en.yaml"));
-
const bytes = ProvisionDefinitions.encode(definitions).finish();
return new Response(bytes);
diff --git a/packages/website/src/pages/[...chunk_api]/definitions/scripts.json.ts b/packages/website/src/pages/[...chunk_api]/definitions/scripts.json.ts
new file mode 100644
index 000000000..3f2ef3938
--- /dev/null
+++ b/packages/website/src/pages/[...chunk_api]/definitions/scripts.json.ts
@@ -0,0 +1,8 @@
+import { api } from "../../../blitzkit/api";
+
+export { getStaticPaths } from "../_index";
+
+export async function GET() {
+ const definitions = await api.scripts();
+ return Response.json(definitions);
+}