diff --git a/.vscode/settings.json b/.vscode/settings.json index 2c04c2995..f64cba027 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -254,5 +254,8 @@ "youtubers", "zoomable" ], - "typescript.tsdk": "node_modules\\typescript\\lib" + "typescript.tsdk": "node_modules\\typescript\\lib", + "cSpell.enabledFileTypes": { + "proto": true + } } diff --git a/packages/core/src/blitzkit/api/server/7_provisions.ts b/packages/core/src/blitzkit/api/server/7_provisions.ts index d42d9aef1..d8b5e9373 100644 --- a/packages/core/src/blitzkit/api/server/7_provisions.ts +++ b/packages/core/src/blitzkit/api/server/7_provisions.ts @@ -12,13 +12,13 @@ export abstract class ServerBlitzKitAPI7 extends ServerBlitzKitAPI6 { const provisionDefinitions = ProvisionDefinitions.create(); Object.entries(this.provisionsCommon).forEach(([, provision]) => { - const entry: Provision = { + const entry = Provision.create({ id: provision.id, exclude: [], include: [], game_mode_exclusive: "gameModeFilter" in provision, name: this.getString(provision.userString), - }; + }); provisionDefinitions.provisions[provision.id] = entry; const includeRaw = provision.vehicleFilter?.include.vehicle; @@ -106,9 +106,41 @@ export abstract class ServerBlitzKitAPI7 extends ServerBlitzKitAPI6 { } } - if (provision.script.bonusValues?.crewLevelIncrease !== undefined) { - provisionDefinitions.provisions[provision.id].crew = - provision.script.bonusValues?.crewLevelIncrease; + function applyBonuses(map: Record) { + for (const key in map) { + entry.bonuses[key] = provision.script.bonusValues![map[key]]; + } + } + + switch (provision.script["#text"]) { + case "Stimulator": + applyBonuses({ crew_level_increase: "crewLevelIncrease" }); + break; + + case "AntiHighExplosive": + applyBonuses({ anti_high_explosive_factor: "factor" }); + break; + + case "Fuel": + applyBonuses({ + engine_power_increase: "enginePowerIncrease", + turret_rotation_speed_increase: "turretRotationSpeedIncrease", + }); + break; + + case "SafetySet": + applyBonuses({ + crew_chance_to_hit_factor: "crewChanceToHitFactor", + repair_speed_increase: "repairSpeedIncrease", + fire_protection_increase: "fireProtectionIncrease", + }); + break; + + default: + const message = `Unhandled script type ${provision.script["#text"]}`; + + console.log(message, provision.script); + throw new Error(message); } }); diff --git a/packages/core/src/types/provisionConsumableScript.ts b/packages/core/src/types/provisionConsumableScript.ts index e2c8436fc..e3d110fed 100644 --- a/packages/core/src/types/provisionConsumableScript.ts +++ b/packages/core/src/types/provisionConsumableScript.ts @@ -1,140 +1,10 @@ -export type ProvisionConsumableScript = - | { - "#text": "Extinguisher"; - cooldown: number; - automatic: boolean; - } - | { - "#text": "Repairkit"; - cooldown: number; - } - | { - "#text": "Afterburning"; - cooldown: number; - duration: number; - bonusValues: { - enginePowerIncrease: number; - }; - } - | { - "#text": "Berserk"; - cooldown: number; - duration: number; - bonusValues: { - gunReloadSpeedIncrease: number; - }; - } - | { - "#text": "Recoverkit"; - cooldown: number; - } - | { - "#text": "ImprovedAfterburning"; - cooldown: number; - duration: number; - enginePowerIncrease: number; - rotationSpeedFactor: number; - fwdSpeedLimitBias: number; - bkwdSpeedLimitBias: number; - } - | { - "#text": "FireControlSystem"; - cooldown: number; - duration: number; - shotDispersionAngleFactor: number; - aimingTimeFactor: number; - } - | { - "#text": "NewAutoloader"; - cooldown: number; - duration: number; - clipReloadTimeFactor: number; - gunReloadTimeFactor: number; - } - | { - "#text": "ShieldKit"; - cooldown: number; - duration: number; - shieldCoef: number; - } - | { - "#text": "TungstenTip"; - cooldown: number; - duration: number; - minDamageFactor: number; - maxDamageFactor: number; - shotEffect: "dangerousTracer"; - } - | { - "#text": "ArmorMover"; - cooldown: number; - duration: number; - deactivateStates: number; - activateStates: number; - bonusValues: { - damageReductionPercent: number; - }; - } - | { - "#text": "ImprovedAfterburning"; - cooldown: number; - duration: number; - enginePowerIncrease: number; - rotationSpeedFactor: number; - fwdSpeedLimitBias: number; - bkwdSpeedLimitBias: number; - } - | { - "#text": "Stimulator"; - bonusValues: { - crewLevelIncrease: number; - }; - } - | { - "#text": "AntiHighExplosive"; - bonusValues: { - factor: number; - }; - } - | { - "#text": "Fuel"; - bonusValues: { - enginePowerIncrease: number; - turretRotationSpeedIncrease: number; - }; - } - | { - "#text": "SafetySet"; - bonusValues: { - crewChanceToHitFactor: number; - repairSpeedIncrease: number; - fireProtectionIncrease: number; - explosivesHealthIncrease: number; - }; - } - | { - "#text": "SmallHPStock"; - hpStockPercent: number; - } - | { - "#text": "GearOil"; - bonusValues: { - fwdSpeedLimitBias: number; - bkwdSpeedLimitBias: number; - enginePowerIncrease: number; - }; - } - | { - "#text": "GunPowder"; - bonusValues: { - projectileSpeedFactor: number; - }; - } - | { - "#text": "AttributesModifier"; - attributes: { - firmGroundPassabilityIncrease: number; - mediumGroundPassabilityIncrease: number; - repairSpeedFactor: number; - }; - }; +export type ProvisionConsumableScript = { + "#text": string; + + cooldown?: number; + automatic?: boolean; + + bonusValues?: Record; + attributes?: Record; + shotEffect?: string; +} & Record; diff --git a/packages/protos/src/blitzkit/provision_definitions.proto b/packages/protos/src/blitzkit/provision_definitions.proto index 51629b370..c4bc9345f 100644 --- a/packages/protos/src/blitzkit/provision_definitions.proto +++ b/packages/protos/src/blitzkit/provision_definitions.proto @@ -10,10 +10,14 @@ message ProvisionDefinitions { } message Provision { + reserved 3; // crew + required uint32 id = 1; required I18nString name = 2; - optional float crew = 3; required bool game_mode_exclusive = 5; repeated ConsumableTankFilter include = 6; repeated ConsumableTankFilter exclude = 7; + + map bonuses = 8; + map effects = 9; } \ No newline at end of file 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 19b006ea4..bb9c9a43f 100644 --- a/packages/website/src/pages/[...chunk_api]/definitions/provisions.pb.ts +++ b/packages/website/src/pages/[...chunk_api]/definitions/provisions.pb.ts @@ -5,6 +5,9 @@ export { getStaticPaths } from "../_index"; export async function GET() { const definitions = await api.provisions(); + + return Response.json(definitions); + const bytes = ProvisionDefinitions.encode(definitions).finish(); return new Response(bytes);