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); +}