start of data driven provisions

This commit is contained in:
tresabhi committed 2026-09-16 09:42:20 -05:00
1 parent 3be91469aa
commit 66f9c9d106
5 files changed
+59 -147

No files matched your search

+4 -1
View File
@@ -254,5 +254,8 @@
"youtubers",
"zoomable"
],
"typescript.tsdk": "node_modules\\typescript\\lib"
"typescript.tsdk": "node_modules\\typescript\\lib",
"cSpell.enabledFileTypes": {
"proto": true
}
}
@@ -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<string, string>) {
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);
}
});
@@ -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<string, number>;
attributes?: Record<string, string>;
shotEffect?: string;
} & Record<string, number>;
@@ -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<string, float> bonuses = 8;
map<string, string> effects = 9;
}
@@ -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);