mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-27 12:39:49 +01:00
feat: start of atts
This commit is contained in:
1 parent
57b6ba19f0
commit
036cc9915d
3 files changed
+380
-318
No files matched your search
@@ -1,331 +1,397 @@
|
|||||||
|
// import { TankAttributeChange_AttributeName } from "@protos/blitz_static_tank_upgrade_single_stage";
|
||||||
|
|
||||||
import { TankAttributeChange_AttributeName } from "@protos/blitz_static_tank_upgrade_single_stage";
|
import { TankAttributeChange_AttributeName } from "@protos/blitz_static_tank_upgrade_single_stage";
|
||||||
|
|
||||||
export enum CharacteristicsGroup {
|
export enum CharacteristicsGroup {
|
||||||
Firepower,
|
Firepower = "firepower",
|
||||||
Maneuverability,
|
Maneuverability = "maneuverability",
|
||||||
Survivability,
|
Survivability = "survivability",
|
||||||
Miscellaneous,
|
Miscellaneous = "miscellaneous",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// type CharacteristicsOrder = {
|
||||||
|
// group: CharacteristicsGroup;
|
||||||
|
|
||||||
|
// characteristics: {
|
||||||
|
// name: string;
|
||||||
|
// value(
|
||||||
|
// get: (name: TankAttributeChange_AttributeName) => number
|
||||||
|
// ): number | string | null;
|
||||||
|
// }[];
|
||||||
|
// }[];
|
||||||
|
|
||||||
|
// export const characteristicsOrder: CharacteristicsOrder = [
|
||||||
|
// {
|
||||||
|
// group: CharacteristicsGroup.Firepower,
|
||||||
|
|
||||||
|
// characteristics: [
|
||||||
|
// {
|
||||||
|
// name: "gun_type",
|
||||||
|
|
||||||
|
// value(get) {
|
||||||
|
// const isPump = get(
|
||||||
|
// TankAttributeChange_AttributeName.ATTRIBUTE_NAME_IS_PUMP
|
||||||
|
// );
|
||||||
|
|
||||||
|
// if (isPump === 1) return "auto_reloader";
|
||||||
|
|
||||||
|
// const clipSize = get(
|
||||||
|
// TankAttributeChange_AttributeName.ATTRIBUTE_NAME_CLIP_SIZE
|
||||||
|
// );
|
||||||
|
|
||||||
|
// if (clipSize === 1) return "regular";
|
||||||
|
|
||||||
|
// return "auto_loader";
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
|
||||||
|
// {
|
||||||
|
// name: "dpm",
|
||||||
|
|
||||||
|
// value(get) {
|
||||||
|
// return -1;
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
|
||||||
|
// {
|
||||||
|
// name: "clipping_potential",
|
||||||
|
|
||||||
|
// value(get) {
|
||||||
|
// const clipSize = get(
|
||||||
|
// TankAttributeChange_AttributeName.ATTRIBUTE_NAME_CLIP_SIZE
|
||||||
|
// );
|
||||||
|
|
||||||
|
// if (clipSize === 1) return null;
|
||||||
|
|
||||||
|
// // const damage
|
||||||
|
|
||||||
|
// return -1;
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
// ],
|
||||||
|
// },
|
||||||
|
// ];
|
||||||
|
|
||||||
|
// type _CharacteristicsOrder = {
|
||||||
|
// group: CharacteristicsGroup;
|
||||||
|
|
||||||
|
// attributes: {
|
||||||
|
// name: TankAttributeChange_AttributeName;
|
||||||
|
// }[];
|
||||||
|
// }[];
|
||||||
|
|
||||||
|
// export const _characteristicsOrder: _CharacteristicsOrder = [
|
||||||
|
// {
|
||||||
|
// group: CharacteristicsGroup.Firepower,
|
||||||
|
|
||||||
|
// attributes: [
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_RELOAD_TIME,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_DISPERSION_ANGLE,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_AIMING_TIME,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_DISPERSION_FACTOR_VEHICLE_MOVEMENT,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_DISPERSION_FACTOR_VEHICLE_ROTATION,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_DISPERSION_FACTOR_TURRET_ROTATION,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_DISPERSION_FACTOR_AFTER_SHOT,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_DISPERSION_FACTOR_WHILE_GUN_DAMAGED,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_PITCH_LIMIT_DOWN,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_PITCH_LIMIT_UP,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_YAW_LIMIT_LEFT,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_YAW_LIMIT_RIGHT,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_CLIP_SIZE,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_CLIP_RATE,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_IS_PUMP,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_SHELLS_SLOTS,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_BURST_SIZE,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_BURST_RATE,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_RELOAD_SPEED_SCALE,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_SHELLS_ARMOR_DAMAGE_MULTIPLIER,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_SHELLS_SPEED_MULTIPLIER,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_SHELLS_PIERCING_POWER_LOSS_REDUCTION,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_ENGINE_HIT_CHANCE_MULTIPLIER,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_CREW_HIT_CHANCE_MULTIPLIER,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_AMMO_BAY_EXPLOSION_CHANCE_MULTIPLIER,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_LARGE_CALIBER_HE_PIERCING_FACTOR,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_SHELLS_PIERCING_MULTIPLIER_AP,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_SHELLS_PIERCING_MULTIPLIER_APCR,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_SHELLS_PIERCING_MULTIPLIER_HC,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_SHELLS_PIERCING_MULTIPLIER_HE,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_TRACER_SHELLS_ENABLED,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_ROTATION_RELOAD_SPEED_SCALE,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_ARMOR_DAMAGE_HE_SHELLS,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_MODULE_DAMAGE_HE_SHELLS,
|
||||||
|
// },
|
||||||
|
// ],
|
||||||
|
// },
|
||||||
|
|
||||||
|
// {
|
||||||
|
// group: CharacteristicsGroup.Maneuverability,
|
||||||
|
|
||||||
|
// attributes: [
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_GUN_ROTATION_SPEED,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_TURRET_ROTATION_SPEED,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_HULL_ROTATION_SPEED,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_ENGINE_POWER,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_BRAKE_FORCE,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_MASS,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_FORWARD_MAX_SPEED,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_BACKWARD_MAX_SPEED,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_TERRAIN_RESISTANCE_HARD,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_TERRAIN_RESISTANCE_MEDIUM,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_TERRAIN_RESISTANCE_SOFT,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_TERRAIN_SIDE_FRICTION,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_TERRAIN_FORWARD_FRICTION,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_RESERVE_TRACK_BACKWARD_SPEED,
|
||||||
|
// },
|
||||||
|
// ],
|
||||||
|
// },
|
||||||
|
|
||||||
|
// {
|
||||||
|
// group: CharacteristicsGroup.Survivability,
|
||||||
|
|
||||||
|
// attributes: [
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_MAX_HEALTH,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_HEALTH_BURN_PER_SEC,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_CIRCULAR_VISION_RADIUS,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_CONCEALMENT_MOVING,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_CONCEALMENT_STILL,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_CONCEALMENT_FIRE_PENALTY,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_CONCEALMENT_FACTOR_AT_SHOT,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_FIRE_START_CHANCE,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_AVERAGE_THICKNESS,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_CONSUMABLE_COOLDOWN_MULTIPLIER,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_CONSUMABLE_DURATION_MULTIPLIER,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_CONSUMABLE_RECHARGE_SPEED_MULTIPLIER,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_RAMMING_DAMAGE_RESISTANCE,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_LARGE_CALIBER_HE_SHELLS_DAMAGE_RESISTANCE,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_ENHANCED_TRACKS_ENABLED,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_ARMOR_MULTIPLIER,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_MODULE_REGEN_PER_SEC_MULTIPLIER,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_MODULES_DAMAGED_DEBUFF_EFFICIENCY,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_MAX_FIRE_DURATION,
|
||||||
|
// },
|
||||||
|
// ],
|
||||||
|
// },
|
||||||
|
|
||||||
|
// {
|
||||||
|
// group: CharacteristicsGroup.Miscellaneous,
|
||||||
|
|
||||||
|
// attributes: [
|
||||||
|
// {
|
||||||
|
// name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_CREW_XP_MULTIPLIER,
|
||||||
|
// },
|
||||||
|
// ],
|
||||||
|
// },
|
||||||
|
// ];
|
||||||
|
|
||||||
|
// if (import.meta.env.DEV) {
|
||||||
|
// for (const name of Object.values(TankAttributeChange_AttributeName).filter(
|
||||||
|
// (value) => typeof value === "number"
|
||||||
|
// )) {
|
||||||
|
// if (name === TankAttributeChange_AttributeName.ATTRIBUTE_NAME_UNSPECIFIED) {
|
||||||
|
// continue;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// const isImplemented = _characteristicsOrder.some((group) =>
|
||||||
|
// group.attributes.some((attribute) => attribute.name === name)
|
||||||
|
// );
|
||||||
|
|
||||||
|
// if (!isImplemented) {
|
||||||
|
// throw new Error(`Attribute ${name} is not implemented`);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
type Characteristics = Record<
|
||||||
|
string,
|
||||||
|
{
|
||||||
|
render: (
|
||||||
|
characteristic: (name: Characteristic) => number,
|
||||||
|
attribute: (name: TankAttributeChange_AttributeName) => number
|
||||||
|
) => number | string | null;
|
||||||
|
}
|
||||||
|
>;
|
||||||
|
|
||||||
|
export const characteristics = {
|
||||||
|
gun_type: {
|
||||||
|
render(_, attribute) {
|
||||||
|
const isPump = attribute(
|
||||||
|
TankAttributeChange_AttributeName.ATTRIBUTE_NAME_IS_PUMP
|
||||||
|
);
|
||||||
|
|
||||||
|
if (isPump === 1) return "auto_reloader";
|
||||||
|
|
||||||
|
const clipSize = attribute(
|
||||||
|
TankAttributeChange_AttributeName.ATTRIBUTE_NAME_CLIP_SIZE
|
||||||
|
);
|
||||||
|
|
||||||
|
if (clipSize === 1) return "regular";
|
||||||
|
|
||||||
|
return "auto_loader";
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
dpm: {
|
||||||
|
render(characteristic, attribute) {
|
||||||
|
const damage = characteristic("damage");
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
} satisfies Characteristics;
|
||||||
|
|
||||||
|
export type Characteristic = keyof typeof characteristics;
|
||||||
|
|
||||||
type CharacteristicsOrder = {
|
type CharacteristicsOrder = {
|
||||||
group: CharacteristicsGroup;
|
group: CharacteristicsGroup;
|
||||||
|
characteristics: Characteristic[];
|
||||||
characteristics: {
|
|
||||||
name: string;
|
|
||||||
value(
|
|
||||||
get: (name: TankAttributeChange_AttributeName) => number
|
|
||||||
): number | string | null;
|
|
||||||
}[];
|
|
||||||
}[];
|
}[];
|
||||||
|
|
||||||
export const characteristicsOrder: CharacteristicsOrder = [
|
export const characteristicsOrder: CharacteristicsOrder = [
|
||||||
{
|
{
|
||||||
group: CharacteristicsGroup.Firepower,
|
group: CharacteristicsGroup.Firepower,
|
||||||
|
characteristics: ["gun_type", "dpm"],
|
||||||
characteristics: [
|
|
||||||
{
|
|
||||||
name: "gun_type",
|
|
||||||
|
|
||||||
value(get) {
|
|
||||||
const isPump = get(
|
|
||||||
TankAttributeChange_AttributeName.ATTRIBUTE_NAME_IS_PUMP
|
|
||||||
);
|
|
||||||
|
|
||||||
if (isPump === 1) return "auto_reloader";
|
|
||||||
|
|
||||||
const clipSize = get(
|
|
||||||
TankAttributeChange_AttributeName.ATTRIBUTE_NAME_CLIP_SIZE
|
|
||||||
);
|
|
||||||
|
|
||||||
if (clipSize === 1) return "regular";
|
|
||||||
|
|
||||||
return "auto_loader";
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
name: "dpm",
|
|
||||||
|
|
||||||
value(get) {
|
|
||||||
return -1;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
name: "clipping_potential",
|
|
||||||
|
|
||||||
value(get) {
|
|
||||||
const clipSize = get(
|
|
||||||
TankAttributeChange_AttributeName.ATTRIBUTE_NAME_CLIP_SIZE
|
|
||||||
);
|
|
||||||
|
|
||||||
if (clipSize === 1) return null;
|
|
||||||
|
|
||||||
// const damage
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
},
|
||||||
];
|
|
||||||
|
|
||||||
type _CharacteristicsOrder = {
|
|
||||||
group: CharacteristicsGroup;
|
|
||||||
|
|
||||||
attributes: {
|
|
||||||
name: TankAttributeChange_AttributeName;
|
|
||||||
}[];
|
|
||||||
}[];
|
|
||||||
|
|
||||||
export const _characteristicsOrder: _CharacteristicsOrder = [
|
|
||||||
{
|
|
||||||
group: CharacteristicsGroup.Firepower,
|
|
||||||
|
|
||||||
attributes: [
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_RELOAD_TIME,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_DISPERSION_ANGLE,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_AIMING_TIME,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_DISPERSION_FACTOR_VEHICLE_MOVEMENT,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_DISPERSION_FACTOR_VEHICLE_ROTATION,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_DISPERSION_FACTOR_TURRET_ROTATION,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_DISPERSION_FACTOR_AFTER_SHOT,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_DISPERSION_FACTOR_WHILE_GUN_DAMAGED,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_PITCH_LIMIT_DOWN,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_PITCH_LIMIT_UP,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_YAW_LIMIT_LEFT,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_YAW_LIMIT_RIGHT,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_CLIP_SIZE,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_CLIP_RATE,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_IS_PUMP,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_SHELLS_SLOTS,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_BURST_SIZE,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_BURST_RATE,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_RELOAD_SPEED_SCALE,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_SHELLS_ARMOR_DAMAGE_MULTIPLIER,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_SHELLS_SPEED_MULTIPLIER,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_SHELLS_PIERCING_POWER_LOSS_REDUCTION,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_ENGINE_HIT_CHANCE_MULTIPLIER,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_CREW_HIT_CHANCE_MULTIPLIER,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_AMMO_BAY_EXPLOSION_CHANCE_MULTIPLIER,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_LARGE_CALIBER_HE_PIERCING_FACTOR,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_SHELLS_PIERCING_MULTIPLIER_AP,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_SHELLS_PIERCING_MULTIPLIER_APCR,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_SHELLS_PIERCING_MULTIPLIER_HC,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_SHELLS_PIERCING_MULTIPLIER_HE,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_TRACER_SHELLS_ENABLED,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_ROTATION_RELOAD_SPEED_SCALE,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_ARMOR_DAMAGE_HE_SHELLS,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_MODULE_DAMAGE_HE_SHELLS,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
{
|
||||||
group: CharacteristicsGroup.Maneuverability,
|
group: CharacteristicsGroup.Maneuverability,
|
||||||
|
characteristics: [],
|
||||||
attributes: [
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_GUN_ROTATION_SPEED,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_TURRET_ROTATION_SPEED,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_HULL_ROTATION_SPEED,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_ENGINE_POWER,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_BRAKE_FORCE,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_MASS,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_FORWARD_MAX_SPEED,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_BACKWARD_MAX_SPEED,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_TERRAIN_RESISTANCE_HARD,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_TERRAIN_RESISTANCE_MEDIUM,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_TERRAIN_RESISTANCE_SOFT,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_TERRAIN_SIDE_FRICTION,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_TERRAIN_FORWARD_FRICTION,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_RESERVE_TRACK_BACKWARD_SPEED,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
group: CharacteristicsGroup.Survivability,
|
group: CharacteristicsGroup.Survivability,
|
||||||
|
characteristics: [],
|
||||||
attributes: [
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_MAX_HEALTH,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_HEALTH_BURN_PER_SEC,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_CIRCULAR_VISION_RADIUS,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_CONCEALMENT_MOVING,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_CONCEALMENT_STILL,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_CONCEALMENT_FIRE_PENALTY,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_CONCEALMENT_FACTOR_AT_SHOT,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_FIRE_START_CHANCE,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_AVERAGE_THICKNESS,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_CONSUMABLE_COOLDOWN_MULTIPLIER,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_CONSUMABLE_DURATION_MULTIPLIER,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_CONSUMABLE_RECHARGE_SPEED_MULTIPLIER,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_RAMMING_DAMAGE_RESISTANCE,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_LARGE_CALIBER_HE_SHELLS_DAMAGE_RESISTANCE,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_ENHANCED_TRACKS_ENABLED,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_ARMOR_MULTIPLIER,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_MODULE_REGEN_PER_SEC_MULTIPLIER,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_MODULES_DAMAGED_DEBUFF_EFFICIENCY,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_MAX_FIRE_DURATION,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
group: CharacteristicsGroup.Miscellaneous,
|
group: CharacteristicsGroup.Miscellaneous,
|
||||||
|
characteristics: [],
|
||||||
attributes: [
|
|
||||||
{
|
|
||||||
name: TankAttributeChange_AttributeName.ATTRIBUTE_NAME_CREW_XP_MULTIPLIER,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
if (import.meta.env.DEV) {
|
|
||||||
for (const name of Object.values(TankAttributeChange_AttributeName).filter(
|
|
||||||
(value) => typeof value === "number"
|
|
||||||
)) {
|
|
||||||
if (name === TankAttributeChange_AttributeName.ATTRIBUTE_NAME_UNSPECIFIED) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
const isImplemented = _characteristicsOrder.some((group) =>
|
|
||||||
group.attributes.some((attribute) => attribute.name === name)
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!isImplemented) {
|
|
||||||
throw new Error(`Attribute ${name} is not implemented`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -5,13 +5,13 @@ import {
|
|||||||
} from "@protos/blitz_static_tank_upgrade_single_stage";
|
} from "@protos/blitz_static_tank_upgrade_single_stage";
|
||||||
import { times } from "lodash-es";
|
import { times } from "lodash-es";
|
||||||
|
|
||||||
export type AggregateAttributes = Partial<
|
export type AggregatedAttributes = Partial<
|
||||||
Record<TankAttributeChange_AttributeName, number>
|
Record<TankAttributeChange_AttributeName, number>
|
||||||
>;
|
>;
|
||||||
|
|
||||||
function patch(
|
function patch(
|
||||||
changes: TankAttributeChange[],
|
changes: TankAttributeChange[],
|
||||||
attributes: AggregateAttributes
|
attributes: AggregatedAttributes
|
||||||
) {
|
) {
|
||||||
for (const { attribute_name, value, modifier } of changes) {
|
for (const { attribute_name, value, modifier } of changes) {
|
||||||
switch (modifier) {
|
switch (modifier) {
|
||||||
@@ -45,7 +45,7 @@ export function aggregateAttributes(
|
|||||||
stages: TankAttributeChange[][],
|
stages: TankAttributeChange[][],
|
||||||
stage: number
|
stage: number
|
||||||
) {
|
) {
|
||||||
const attributes: AggregateAttributes = {};
|
const attributes: AggregatedAttributes = {};
|
||||||
|
|
||||||
patch(base, attributes);
|
patch(base, attributes);
|
||||||
times(stage, (index) => patch(stages[index], attributes));
|
times(stage, (index) => patch(stages[index], attributes));
|
||||||
|
|||||||
@@ -1,10 +1,5 @@
|
|||||||
import { TankAttributeChange_AttributeName } from "@protos/blitz_static_tank_upgrade_single_stage";
|
|
||||||
import { times } from "lodash-es";
|
import { times } from "lodash-es";
|
||||||
import { Suspense, useMemo } from "react";
|
import { Suspense, useMemo } from "react";
|
||||||
import {
|
|
||||||
CharacteristicsGroup,
|
|
||||||
_characteristicsOrder,
|
|
||||||
} from "../../../constants/characteristics";
|
|
||||||
import { api } from "../../../core/api/dynamic";
|
import { api } from "../../../core/api/dynamic";
|
||||||
import { aggregateAttributes } from "../../../core/blitz/aggregateAttributes";
|
import { aggregateAttributes } from "../../../core/blitz/aggregateAttributes";
|
||||||
import { useAwait } from "../../../hooks/useAwait";
|
import { useAwait } from "../../../hooks/useAwait";
|
||||||
@@ -35,6 +30,7 @@ function Content({ id }: { id: string }) {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
<pre children={JSON.stringify(tank, null, 2)} />
|
||||||
<h1>{tank.name?.value}</h1>
|
<h1>{tank.name?.value}</h1>
|
||||||
|
|
||||||
<h2>Characteristics</h2>
|
<h2>Characteristics</h2>
|
||||||
@@ -53,7 +49,7 @@ function Content({ id }: { id: string }) {
|
|||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{_characteristicsOrder.map((group) => (
|
{/* {_characteristicsOrder.map((group) => (
|
||||||
<>
|
<>
|
||||||
<h2>{CharacteristicsGroup[group.group]}</h2>
|
<h2>{CharacteristicsGroup[group.group]}</h2>
|
||||||
|
|
||||||
@@ -67,7 +63,7 @@ function Content({ id }: { id: string }) {
|
|||||||
)
|
)
|
||||||
)}
|
)}
|
||||||
</>
|
</>
|
||||||
))}
|
))} */}
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user