oh my god this is hideous

This commit is contained in:
tresabhi committed 2026-09-22 14:52:33 -05:00
1 parent 11c2c9749c
commit 1733180f2c
3 files changed
+270 -36

No files matched your search

@@ -1,10 +1,257 @@
export type ProvisionConsumableScript = {
interface ProvisionConsumableScript {
attribute?: string;
bonusValues?: BonusValuesClass | string;
"#text": string;
cooldown?: number;
piercingFactors?: PiercingFactors;
modulesHealthFactors?: ModulesHealthFactorsClass | string;
rammingAbsorptionPercent?: number | string;
chancesToHit?: ChancesToHitChancesToHit | string;
largeCaliberHighExplosiveDamageFactor?: number;
largeCaliberHighExplosivePiercingFactor?: number;
maxHpBonusPercent?: number;
modules?: string;
visionRadiusPercentageBonus?: Bonus;
activateWhenStillSec?: number;
activateBonusFactor?: number;
bonus?: Bonus;
bonusPercentage?: BonusPercentage;
enginePowerPercentageBonus?: Bonus;
weight?: number;
automatic?: boolean;
bonusValues?: Record<string, number>;
attributes?: Record<string, number>;
cooldown?: number;
duration?: number;
enginePowerIncrease?: number;
rotationSpeedFactor?: number;
fwdSpeedLimitBias?: number;
bkwdSpeedLimitBias?: number;
shotDispersionAngleFactor?: number;
aimingTimeFactor?: number;
clipReloadTimeFactor?: number;
gunReloadTimeFactor?: number;
shieldCoef?: number;
minDamageFactor?: number;
maxDamageFactor?: number;
shotEffect?: string;
} & Record<string, number>;
deactivateStates?: number;
activateStates?: number;
contusionChances?: string;
abortVelocity?: number;
distance?: number;
activationDamageFactor?: number;
damageFactor?: number;
startCooldown?: number;
keepSpoted?: boolean;
conflictExtras?: string;
effectExtraName?: string;
clientEffectVariant?: string;
range?: number;
healthFactor?: number;
burstForce?: number;
damageFactors?: string;
flyTime?: number;
distanceOffset?: number;
timeSeconds?: number;
extrasMustBeStopped?: string;
breakTracks?: boolean;
minAngleDegrees?: number;
maxAngleDegrees?: number;
attributes?: { [key: string]: number };
acceleration?: number;
burstRange?: number;
burstDamagePercent?: number;
projectileSpeed?: number;
healWaveDelay?: number;
healWavesCount?: number;
healFactorPercent?: number;
selfHealReducePercent?: number;
shieldDuration?: number;
targetExtrasMustBeStopped?: string;
maxHealthSelfDamageFactor?: number;
maxHealthDamageFactor?: number;
disableTracksCollisionDamage?: boolean;
maxHealthDamagePercent?: number;
poisonTicks?: number;
poisonTickDelay?: number;
effectDuration?: number;
radius?: number;
attractorMass?: number;
hpStockPercent?: number;
invisibilityInMovingFactor?: number;
maxBonusSources?: number;
sixthSenseDelay?: number;
stopObservingDelayFactor?: number;
revengeDamagePercentage?: number;
timeForComeBack?: number;
simpleMode?: boolean;
respawns?: Respawns;
curseStrength?: number;
curseReduction?: number;
curseHeal?: number;
explodeDamagePercent?: number;
damageReductionPercent?: number;
respawnBoost?: RespawnBoost;
slowDebuff?: SlowDebuff;
maxHealthFactor?: Bonus;
minRammingDamageMaxHealthRatio?: number;
minRammingDamageCooldown?: number;
optDeviceRammingDamageOverride?: number;
}
interface Bonus {
lightTank: number;
mediumTank: number;
heavyTank: number;
"AT-SPG": number;
SPG?: number;
}
interface BonusPercentage {
rotationSpeedFactor?: number;
firmGroundPassabilityIncrease?: number;
softGroundPassabilityIncrease?: number;
mediumGroundPassabilityIncrease?: number;
}
interface BonusValuesClass {
percent?: number;
value?: number;
projectileSpeedFactor?: number;
piercingPenaltyFactor500m?: number;
circularVisionRadiusIncrease?: number;
upperPitchLimitIncrease?: number;
lowerPitchLimitIncrease?: number;
enginePowerIncrease?: number;
gunReloadSpeedIncrease?: number;
damageReductionPercent?: number;
rammingDamageFactor?: number;
sacrificeLoss?: number;
damagePercentBonus?: number;
enginePowerFactor?: number;
maxVelocityFactor?: number;
terrainResistanceFactor?: number;
chassisHealthFactor?: number;
rotationSpeedFactor?: number;
damageReflectionPercent?: number;
enginePowerAbilityFactor?: number;
speedLimitAbilityBonus?: number;
crewLevelIncrease?: number;
factor?: number;
turretRotationSpeedIncrease?: number;
crewChanceToHitFactor?: number;
repairSpeedIncrease?: number;
fireProtectionIncrease?: number;
explosivesHealthIncrease?: number;
fwdSpeedLimitBias?: number;
bkwdSpeedLimitBias?: number;
lifestealFactor?: number;
lifestealRandomFactor?: number;
killHealFactor?: number;
healFactor?: number;
healRandomFactor?: number;
dealingRammingDamageFactor?: number;
gunReloadingBonus?: number;
gunAimingTimeBonus?: number;
visionRadiusBonus?: number;
shotDispersionAngleFactor?: number;
aimingTimeFactor?: number;
timeBetweenShots?: number;
increasedDamageChance?: number;
increaseDamageFactor?: number;
gunReloadFactor?: number;
commonDamageFactor?: number;
speedLimitsFactor?: number;
maxHealthPercentBonus?: number;
maxStaticsDamagePercent?: number;
chancesToHit?: BonusValuesChancesToHit;
modulesMaxHpFactors?: ModulesMaxHPFactors;
modulesMaxRegenHpFactors?: ModulesMaxHPFactors;
item?: BonusValuesItem[];
}
interface BonusValuesChancesToHit {
modules: PurpleModules;
}
interface PurpleModules {
engineHealth: number;
fuelTankHealth: number;
turretRotatorHealth: number;
surveyingDeviceHealth: number[];
ammoBayHealth: number;
}
interface BonusValuesItem {
commonDamageFactor: number;
reloadSpeedFactor: number;
}
interface ModulesMaxHPFactors {
modules: ModulesMaxHPFactorsModules;
}
interface ModulesMaxHPFactorsModules {
ammoBayHealth: number;
}
interface ChancesToHitChancesToHit {
crew: number;
modules: FluffyModules;
}
interface FluffyModules {
engineHealth: number;
ammoBayHealth: number;
commanderHealth: number;
driverHealth: number;
gunner1Health: number;
gunner2Health: number;
loader1Health: number;
loader2Health: number;
}
interface ModulesHealthFactorsClass {
modules: ModulesHealthFactorsModules;
}
interface ModulesHealthFactorsModules {
leftTrackHealth: number;
rightTrackHealth: number;
fuelTankHealth: number;
ammoBayHealth: number;
}
interface PiercingFactors {
ARMOR_PIERCING: number;
HOLLOW_CHARGE: number;
HIGH_EXPLOSIVE: number;
ARMOR_PIERCING_HE: number;
ARMOR_PIERCING_CR: number;
}
interface RespawnBoost {
duration: number;
enginePowerFactor: number;
speedLimitAbilityBonus: number;
}
interface Respawns {
respawn: Respawn[];
}
interface Respawn {
respawnIndex: number;
bonusDamage: number;
bonusReloadSpeed: number;
bonusMaxSpeed: number;
bonusEnginePower: number;
}
interface SlowDebuff {
item: SlowDebuffItem[];
}
interface SlowDebuffItem {
duration: number;
enginePowerFactor: Bonus;
speedLimitsFactor: Bonus;
}
+15 -28
View File
@@ -13,10 +13,15 @@ import "tank_definitions.proto";
message Script {
/**
* If #text is "StaticFactorDevice", type will be script.attribute, otherwise
* type will assume the value of #text.
* type will assume the value of #text. Same for "StaticAdditiveDevice".
*/
string type = 1;
optional bool automatic = 2;
optional float cooldown = 3;
optional float duration = 4;
bool keep_spotted = 5;
/**
* Bonus values enjoys Record<string, number> entries from
* script.bonusValues.
@@ -25,32 +30,14 @@ message Script {
* script object. That is, if an entry on the root script object isn't
* "attribute", "bonusValues", "#text", etc., it goes in here. Empty strings
* values get omitted.
*
* Values from script.visionRadiusPercentageBonus from type CoatedOptics will
* also be merged into here to be consistent with CamouflageNet. God fucking
* damn it Wargaming.
*
* Same goes for all these:
* - enginePowerPercentageBonus
* - visionRadiusPercentageBonus
*/
map<string, float> bonus_values = 2;
/**
* I thought piercing_factors distinct enough from bonus_values to separate
* them since the keys here are no longer properties of the tank, but
* specific shell types. The keys will be mapped to BlitzKit's ShellType.
*/
map<int32, float> piercing_factors = 3;
/**
* Same story here, the keys are different. But this time, the values are
* stored deep in script.modulesHealthFactors.modules. Also, all keys end
* with "Health" for no reason like "leftTrackHealth". That will be trimmed.
*/
map<string, float> module_health_factors = 4;
/**
* There's chancesToHit.crew and then there's the mapped chancesToHit.modules
* which I plan to merge under this one, flat object. And, once again, all
* keys end with "health" like "driverHealth" so I will sanitize them.
*/
map<string, float> chances_to_hit = 5;
/**
* Most sane entry?
*/
map<int32, float> vision_radius_percentage_bonus = 6;
map<string, float> values = 2;
}
@@ -47,7 +47,7 @@ export async function GET() {
}
}
return Response.json(samples);
return Response.json(Object.values(samples));
const definitions = await api.consumables();
const bytes = ConsumableDefinitions.encode(definitions).finish();