mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-21 18:57:03 +02:00
feat: implement shell attr
This commit is contained in:
1 parent
48fbf59036
commit
66eaaef6de
2 files changed
+50
-367
No files matched your search
@@ -1,6 +1,7 @@
|
||||
// import { TankAttributeChange_AttributeName } from "@protos/blitz_static_tank_upgrade_single_stage";
|
||||
|
||||
import { TankAttributeChange_AttributeName } from "@protos/blitz_static_tank_upgrade_single_stage";
|
||||
import {
|
||||
ShellUpgrageSingleChange_AttributeName,
|
||||
TankAttributeChange_AttributeName,
|
||||
} from "@protos/blitz_static_tank_upgrade_single_stage";
|
||||
|
||||
export enum CharacteristicsGroup {
|
||||
Firepower = "firepower",
|
||||
@@ -9,342 +10,24 @@ export enum CharacteristicsGroup {
|
||||
Miscellaneous = "miscellaneous",
|
||||
}
|
||||
|
||||
// type CharacteristicsOrder = {
|
||||
// group: CharacteristicsGroup;
|
||||
interface Characteristic {
|
||||
render: (helpers: {
|
||||
characteristic: (name: CharacteristicName) => number;
|
||||
attribute: (name: TankAttributeChange_AttributeName) => number;
|
||||
shell: (name: ShellUpgrageSingleChange_AttributeName) => number;
|
||||
}) => number | string | null;
|
||||
}
|
||||
|
||||
// characteristics: {
|
||||
// name: string;
|
||||
// value(
|
||||
// get: (name: TankAttributeChange_AttributeName) => number
|
||||
// ): number | string | null;
|
||||
// }[];
|
||||
// }[];
|
||||
type CharacteristicName = keyof typeof characteristics;
|
||||
|
||||
// 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;
|
||||
}
|
||||
>;
|
||||
type CharacteristicsOrder = {
|
||||
group: CharacteristicsGroup;
|
||||
characteristics: CharacteristicName[];
|
||||
}[];
|
||||
|
||||
export const characteristics = {
|
||||
gun_type: {
|
||||
render(_, attribute) {
|
||||
render({ attribute }) {
|
||||
const isPump = attribute(
|
||||
TankAttributeChange_AttributeName.ATTRIBUTE_NAME_IS_PUMP
|
||||
);
|
||||
@@ -361,21 +44,22 @@ export const characteristics = {
|
||||
},
|
||||
},
|
||||
|
||||
damage: {
|
||||
render({ shell }) {
|
||||
return shell(
|
||||
ShellUpgrageSingleChange_AttributeName.ATTRIBUTE_NAME_ARMOR_DAMAGE
|
||||
);
|
||||
},
|
||||
},
|
||||
|
||||
dpm: {
|
||||
render(characteristic, attribute) {
|
||||
render({ characteristic }) {
|
||||
const damage = characteristic("damage");
|
||||
|
||||
return 1;
|
||||
},
|
||||
},
|
||||
} satisfies Characteristics;
|
||||
|
||||
export type Characteristic = keyof typeof characteristics;
|
||||
|
||||
type CharacteristicsOrder = {
|
||||
group: CharacteristicsGroup;
|
||||
characteristics: Characteristic[];
|
||||
}[];
|
||||
} satisfies Record<string, Characteristic>;
|
||||
|
||||
export const characteristicsOrder: CharacteristicsOrder = [
|
||||
{
|
||||
|
||||
@@ -118,33 +118,32 @@ function patch(stage0: StageParameters, stage1: StageParameters) {
|
||||
(baseShell) => baseShell.shell_id === shellUpgrades1.shell_id
|
||||
);
|
||||
|
||||
if (!shellUpgrades0) {
|
||||
shellUpgrades0 = ShellUpgrade.create({
|
||||
shell_id: shellUpgrades1.shell_id,
|
||||
});
|
||||
}
|
||||
if (shellUpgrades0) {
|
||||
shellUpgrades0.shell_type = shellUpgrades1.shell_type;
|
||||
|
||||
shellUpgrades0.shell_type = shellUpgrades1.shell_type;
|
||||
|
||||
for (const changedShellUpgrade of shellUpgrades1.changes) {
|
||||
const baseShellUpgrade = shellUpgrades0.changes.find(
|
||||
(baseShellUpgrade) =>
|
||||
baseShellUpgrade.attribute_name === changedShellUpgrade.attribute_name
|
||||
);
|
||||
|
||||
if (baseShellUpgrade) {
|
||||
baseShellUpgrade.value = changedShellUpgrade.value;
|
||||
} else {
|
||||
shellUpgrades0.changes.push(
|
||||
ShellUpgrageSingleChange.create(changedShellUpgrade)
|
||||
for (const changedShellUpgrade of shellUpgrades1.changes) {
|
||||
const shellUpgrade0 = shellUpgrades0.changes.find(
|
||||
(baseShellUpgrade) =>
|
||||
baseShellUpgrade.attribute_name ===
|
||||
changedShellUpgrade.attribute_name
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
shellUpgrades0.silver_price =
|
||||
shellUpgrades1.silver_price === undefined
|
||||
? undefined
|
||||
: StandardSinglePrice.create(shellUpgrades1.silver_price);
|
||||
if (shellUpgrade0) {
|
||||
shellUpgrade0.value = changedShellUpgrade.value;
|
||||
} else {
|
||||
shellUpgrades0.changes.push(
|
||||
ShellUpgrageSingleChange.create(changedShellUpgrade)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
shellUpgrades0.silver_price =
|
||||
shellUpgrades1.silver_price === undefined
|
||||
? undefined
|
||||
: StandardSinglePrice.create(shellUpgrades1.silver_price);
|
||||
} else {
|
||||
stage0.shells_upgrades.push(ShellUpgrade.create(shellUpgrades1));
|
||||
}
|
||||
}
|
||||
|
||||
if (stage1.pump_reload_times.length > 0) {
|
||||
|
||||
Reference in new issue
Block a user