mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-21 10:47:04 +02:00
tank states
This commit is contained in:
1 parent
6c9ce58af5
commit
7d02f6311f
16 files changed
+110
-349
No files matched your search
@@ -16,7 +16,7 @@ export abstract class BlitzKitAPI {
|
||||
abstract skills(): Promise<SkillDefinitions>;
|
||||
abstract provisions(): Promise<ProvisionDefinitions>;
|
||||
abstract consumables(): Promise<ConsumableDefinitions>;
|
||||
abstract equipments(): Promise<EquipmentDefinitions>;
|
||||
abstract equipment(): Promise<EquipmentDefinitions>;
|
||||
abstract maps(): Promise<MapDefinitions>;
|
||||
abstract models(): Promise<ModelDefinitions>;
|
||||
abstract camouflages(): Promise<CamouflageDefinitions>;
|
||||
@@ -29,4 +29,9 @@ export abstract class BlitzKitAPI {
|
||||
const tanks = await this.tanks();
|
||||
return tanks.tanks[id];
|
||||
}
|
||||
|
||||
async model(id: number) {
|
||||
const models = await this.models();
|
||||
return models.models[id];
|
||||
}
|
||||
}
|
||||
@@ -53,7 +53,7 @@ export class ClientBlitzKitAPI extends BlitzKitAPI {
|
||||
return fetchPB(alias("api", "/definitions/skills.pb"), SkillDefinitions);
|
||||
}
|
||||
|
||||
equipments() {
|
||||
equipment() {
|
||||
return fetchPB(
|
||||
alias("api", "/definitions/equipment.pb"),
|
||||
EquipmentDefinitions,
|
||||
|
||||
@@ -4,7 +4,7 @@ import { ServerBlitzKitAPI4 } from "./4_maps";
|
||||
|
||||
export abstract class ServerBlitzKitAPI5 extends ServerBlitzKitAPI4 {
|
||||
@Cache()
|
||||
async equipments() {
|
||||
async equipment() {
|
||||
const equipmentDefinitions = EquipmentDefinitions.create();
|
||||
|
||||
Object.entries(this.optionalDevices!.root).forEach(
|
||||
|
||||
@@ -105,228 +105,6 @@ export abstract class ServerBlitzKitAPI7 extends ServerBlitzKitAPI6 {
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function applyCanonicalBonuses(map: Record<string, string>) {
|
||||
for (const key in map) {
|
||||
entry.bonuses[key] = provision.script.bonusValues![map[key]];
|
||||
}
|
||||
}
|
||||
|
||||
function applyRootBonuses(map: Record<string, string>) {
|
||||
for (const key in map) {
|
||||
entry.bonuses[key] = provision.script[map[key]];
|
||||
}
|
||||
}
|
||||
|
||||
function applyAttributeBonuses(map: Record<string, string>) {
|
||||
for (const key in map) {
|
||||
if (!(map[key] in provision.script.attributes!)) continue;
|
||||
entry.bonuses[key] = provision.script.attributes![map[key]];
|
||||
}
|
||||
}
|
||||
|
||||
switch (provision.script["#text"]) {
|
||||
case "Stimulator":
|
||||
applyCanonicalBonuses({
|
||||
crew_level_increase: "crewLevelIncrease",
|
||||
});
|
||||
break;
|
||||
|
||||
case "AntiHighExplosive":
|
||||
applyCanonicalBonuses({
|
||||
anti_high_explosive_factor: "factor",
|
||||
});
|
||||
break;
|
||||
|
||||
case "Fuel":
|
||||
applyCanonicalBonuses({
|
||||
engine_power_increase: "enginePowerIncrease",
|
||||
turret_rotation_speed_increase: "turretRotationSpeedIncrease",
|
||||
});
|
||||
break;
|
||||
|
||||
case "SafetySet":
|
||||
applyCanonicalBonuses({
|
||||
crew_chance_to_hit_factor: "crewChanceToHitFactor",
|
||||
repair_speed_increase: "repairSpeedIncrease",
|
||||
fire_protection_increase: "fireProtectionIncrease",
|
||||
});
|
||||
break;
|
||||
|
||||
case "SmallHPStock":
|
||||
applyRootBonuses({
|
||||
hp_stock_percent: "hpStockPercent",
|
||||
});
|
||||
break;
|
||||
|
||||
case "GearOil":
|
||||
applyCanonicalBonuses({
|
||||
forward_speed_limit_bias: "fwdSpeedLimitBias",
|
||||
backward_speed_limit_bias: "bkwdSpeedLimitBias",
|
||||
engine_power_increase: "enginePowerIncrease",
|
||||
});
|
||||
break;
|
||||
|
||||
case "GunPowder":
|
||||
applyCanonicalBonuses({
|
||||
projectile_speed_factor: "projectileSpeedFactor",
|
||||
});
|
||||
break;
|
||||
|
||||
case "AttributesModifier":
|
||||
applyAttributeBonuses({
|
||||
firm_ground_passability_increase: "firmGroundPassabilityIncrease",
|
||||
medium_ground_passability_increase:
|
||||
"mediumGroundPassabilityIncrease",
|
||||
repair_speed_factor: "repairSpeedFactor",
|
||||
|
||||
common_damage_factor: "commonDamageFactor",
|
||||
gun_reload_factor: "gunReloadFactor",
|
||||
pump_gun_reload_factor: "pumpGunReloadFactor",
|
||||
gun_aiming_factor: "gunAimingFactor",
|
||||
|
||||
engine_power_factor: "enginePowerFactor",
|
||||
speed_limits_factor: "speedLimitsFactor",
|
||||
chassis_health_factor: "chassisHealthFactor",
|
||||
});
|
||||
break;
|
||||
|
||||
case "LifestealHeal":
|
||||
applyCanonicalBonuses({
|
||||
life_steal_factor: "lifestealFactor",
|
||||
life_steal_random_factor: "lifestealRandomFactor",
|
||||
kill_heal_factor: "killHealFactor",
|
||||
heal_factor: "healFactor",
|
||||
heal_random_factor: "healRandomFactor",
|
||||
});
|
||||
break;
|
||||
|
||||
case "RammingDamage":
|
||||
applyCanonicalBonuses({
|
||||
ramming_damage_factor: "rammingDamageFactor",
|
||||
dealing_ramming_damage_factor: "dealingRammingDamageFactor",
|
||||
});
|
||||
break;
|
||||
|
||||
case "AllyBuff":
|
||||
applyCanonicalBonuses({
|
||||
gun_reloading_bonus: "gunReloadingBonus",
|
||||
gun_aiming_time_bonus: "gunAimingTimeBonus",
|
||||
vision_radius_bonus: "visionRadiusBonus",
|
||||
});
|
||||
|
||||
applyRootBonuses({
|
||||
range: "range",
|
||||
max_bonus_sources: "maxBonusSources",
|
||||
});
|
||||
break;
|
||||
|
||||
case "Stealth":
|
||||
applyRootBonuses({
|
||||
sixth_sense_delay: "sixthSenseDelay",
|
||||
stop_observing_delay_factor: "stopObservingDelayFactor",
|
||||
});
|
||||
break;
|
||||
|
||||
case "Revenge":
|
||||
applyRootBonuses({
|
||||
revenge_damage_percentage: "revengeDamagePercentage",
|
||||
effect_duration: "effectDuration",
|
||||
});
|
||||
break;
|
||||
|
||||
case "ComeBackKit":
|
||||
applyRootBonuses({
|
||||
time_for_come_back: "timeForComeBack",
|
||||
simple_mode: "simpleMode",
|
||||
});
|
||||
break;
|
||||
|
||||
case "EngineAndSpeedBoost":
|
||||
applyCanonicalBonuses({
|
||||
engine_power_ability_factor: "enginePowerAbilityFactor",
|
||||
speed_limit_ability_bonus: "speedLimitAbilityBonus",
|
||||
});
|
||||
break;
|
||||
|
||||
case "EnemyReloadTime":
|
||||
// bonusValues is empty in the observed data.
|
||||
break;
|
||||
|
||||
case "Duplet":
|
||||
applyCanonicalBonuses({
|
||||
shot_dispersion_angle_factor: "shotDispersionAngleFactor",
|
||||
aiming_time_factor: "aimingTimeFactor",
|
||||
time_between_shots: "timeBetweenShots",
|
||||
});
|
||||
break;
|
||||
|
||||
case "Fortune":
|
||||
applyCanonicalBonuses({
|
||||
increased_damage_chance: "increasedDamageChance",
|
||||
increase_damage_factor: "increaseDamageFactor",
|
||||
});
|
||||
break;
|
||||
|
||||
case "VampiricCurse":
|
||||
applyRootBonuses({
|
||||
curse_strength: "curseStrength",
|
||||
curse_reduction: "curseReduction",
|
||||
curse_heal: "curseHeal",
|
||||
});
|
||||
break;
|
||||
|
||||
case "VampiricDeath":
|
||||
applyRootBonuses({
|
||||
explode_damage_percent: "explodeDamagePercent",
|
||||
range: "range",
|
||||
});
|
||||
break;
|
||||
|
||||
case "PermanentDamageShield":
|
||||
applyRootBonuses({
|
||||
damage_reduction_percent: "damageReductionPercent",
|
||||
});
|
||||
break;
|
||||
|
||||
case "BigBoss":
|
||||
applyCanonicalBonuses({
|
||||
gun_reload_factor: "gunReloadFactor",
|
||||
common_damage_factor: "commonDamageFactor",
|
||||
engine_power_factor: "enginePowerFactor",
|
||||
speed_limits_factor: "speedLimitsFactor",
|
||||
max_health_percent_bonus: "maxHealthPercentBonus",
|
||||
max_statics_damage_percent: "maxStaticsDamagePercent",
|
||||
});
|
||||
break;
|
||||
|
||||
case "VampiricBoost":
|
||||
break;
|
||||
|
||||
case "ZombieMark":
|
||||
applyAttributeBonuses({
|
||||
dealing_ramming_damage_factor: "dealingRammingDamageFactor",
|
||||
ramming_damage_factor: "rammingDamageFactor",
|
||||
engine_power_factor: "enginePowerFactor",
|
||||
speed_limits_factor: "speedLimitsFactor",
|
||||
common_damage_factor: "commonDamageFactor",
|
||||
});
|
||||
break;
|
||||
|
||||
case "HumanMark":
|
||||
applyRootBonuses({
|
||||
opt_device_ramming_damage_override:
|
||||
"optDeviceRammingDamageOverride",
|
||||
});
|
||||
|
||||
// `bonusValues.item` is a nested array and therefore isn't
|
||||
// appropriate for applyCanonicalBonuses().
|
||||
break;
|
||||
|
||||
default:
|
||||
console.warn(`Unhandled script type ${provision.script["#text"]}`);
|
||||
console.dir(provision.script, { depth: null, colors: true });
|
||||
}
|
||||
});
|
||||
|
||||
return provisionDefinitions;
|
||||
|
||||
@@ -1,12 +1,16 @@
|
||||
import { GunDefinition, ProvisionDefinitions, TankDefinition } from "../../../protos/src/blitzkit";
|
||||
import {
|
||||
GunDefinition,
|
||||
ProvisionDefinitions,
|
||||
TankDefinition,
|
||||
} from "../../../protos/src/blitzkit";
|
||||
import { checkConsumableProvisionInclusivity } from "./checkConsumableProvisionInclusivity";
|
||||
|
||||
export function availableProvisions(
|
||||
tank: TankDefinition,
|
||||
gun: GunDefinition,
|
||||
provisionDefinitions: ProvisionDefinitions
|
||||
provisionDefinitions: ProvisionDefinitions,
|
||||
) {
|
||||
return Object.values(provisionDefinitions.provisions).filter((provision) =>
|
||||
checkConsumableProvisionInclusivity(provision, tank, gun)
|
||||
checkConsumableProvisionInclusivity(provision, tank, gun),
|
||||
);
|
||||
}
|
||||
@@ -1,5 +1,10 @@
|
||||
import { GunDefinition, ProvisionDefinitions, TankDefinition } from '../protos';
|
||||
import { availableProvisions } from './availableProvisions';
|
||||
import {
|
||||
GunDefinition,
|
||||
ProvisionDefinitions,
|
||||
TankDefinition,
|
||||
} from "@blitzkit/protos";
|
||||
import { BlitzScripts } from "../types/blitzScripts";
|
||||
import { availableProvisions } from "./availableProvisions";
|
||||
|
||||
const PROVISION_PREFERENCES = [
|
||||
19, // improved fuel
|
||||
@@ -14,9 +19,10 @@ function infinityFallback(value: number) {
|
||||
export function createDefaultProvisions(
|
||||
tank: TankDefinition,
|
||||
gun: GunDefinition,
|
||||
provisionDefinitions: ProvisionDefinitions,
|
||||
provisions: ProvisionDefinitions,
|
||||
scripts: BlitzScripts,
|
||||
) {
|
||||
const provisionsList = availableProvisions(tank, gun, provisionDefinitions);
|
||||
const provisionsList = availableProvisions(tank, gun, provisions);
|
||||
|
||||
return provisionsList
|
||||
.sort(
|
||||
@@ -24,7 +30,11 @@ export function createDefaultProvisions(
|
||||
infinityFallback(PROVISION_PREFERENCES.indexOf(a.id)) -
|
||||
infinityFallback(PROVISION_PREFERENCES.indexOf(b.id)),
|
||||
)
|
||||
.sort((a, b) => (b.crew ?? 0) - (a.crew ?? 0))
|
||||
.sort(
|
||||
(a, b) =>
|
||||
(scripts.provisions[b.id].bonusValues?.crewLevelIncrease ?? 0) -
|
||||
(scripts.provisions[a.id].bonusValues?.crewLevelIncrease ?? 0),
|
||||
)
|
||||
.slice(0, tank.max_provisions)
|
||||
.map(({ id }) => id);
|
||||
}
|
||||
@@ -1,3 +1,5 @@
|
||||
import { BlitzEffectScript } from "./blitzEffectScript";
|
||||
|
||||
export interface BlitzScripts {
|
||||
consumables: Record<number, BlitzEffectScript>;
|
||||
provisions: Record<number, BlitzEffectScript>;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { ProvisionConsumableScript } from "@blitzkit/core/src/types/provisionConsumableScript";
|
||||
import { BlitzEffectScript } from "./blitzEffectScript";
|
||||
import { ConsumablesVehicleFilter } from "./consumablesVehicleFilter";
|
||||
|
||||
export interface ProvisionsCommon {
|
||||
@@ -13,6 +13,6 @@ export interface ProvisionsCommon {
|
||||
include: { vehicle: ConsumablesVehicleFilter; nations?: string };
|
||||
exclude?: { vehicle: ConsumablesVehicleFilter; nations?: string };
|
||||
};
|
||||
script: ProvisionConsumableScript;
|
||||
script: BlitzEffectScript;
|
||||
};
|
||||
}
|
||||
Reference in new issue
Block a user