use crate::tf2::attributes::{
Amount, AnyAttributeDef, AttributeDef, AttributeIndex, DescriptionFormat, Flag, Multiplier,
Seconds,
};
#[doc(alias("airblast disabled"))]
pub const AIRBLAST_DISABLED: AttributeDef<Flag> = AttributeDef::new(
356,
c"airblast disabled",
c"airblast_disabled",
DescriptionFormat::Additive,
0.0,
1.0,
);
#[doc(alias("airblast vulnerability multiplier"))]
pub const AIRBLAST_VULNERABILITY_MULTIPLIER: AttributeDef<Multiplier> = AttributeDef::new(
329,
c"airblast vulnerability multiplier",
c"airblast_vulnerability_multiplier",
DescriptionFormat::Percentage,
0.0,
1.0,
);
#[doc(alias("Blast radius decreased"))]
pub const BLAST_RADIUS_DECREASED: AttributeDef<Multiplier> = AttributeDef::new(
100,
c"Blast radius decreased",
c"mult_explosion_radius",
DescriptionFormat::Percentage,
0.1,
1.0,
);
#[doc(alias("Blast radius increased"))]
pub const BLAST_RADIUS_INCREASED: AttributeDef<Multiplier> = AttributeDef::new(
99,
c"Blast radius increased",
c"mult_explosion_radius",
DescriptionFormat::Percentage,
1.0,
4.0,
);
#[doc(alias("bullets per shot bonus"))]
pub const BULLETS_PER_SHOT_BONUS: AttributeDef<Multiplier> = AttributeDef::new(
45,
c"bullets per shot bonus",
c"mult_bullets_per_shot",
DescriptionFormat::Percentage,
1.0,
5.0,
);
#[doc(alias("clip size bonus"))]
pub const CLIP_SIZE_BONUS: AttributeDef<Multiplier> = AttributeDef::new(
4,
c"clip size bonus",
c"mult_clipsize",
DescriptionFormat::Percentage,
1.0,
10.0,
);
#[doc(alias("clip size penalty"))]
pub const CLIP_SIZE_PENALTY: AttributeDef<Multiplier> = AttributeDef::new(
3,
c"clip size penalty",
c"mult_clipsize",
DescriptionFormat::Percentage,
0.1,
1.0,
);
#[doc(alias("crit kill will gib"))]
pub const CRIT_KILL_WILL_GIB: AttributeDef<Flag> = AttributeDef::new(
309,
c"crit kill will gib",
c"crit_kill_will_gib",
DescriptionFormat::Additive,
0.0,
1.0,
);
#[doc(alias("critboost on kill"))]
pub const CRITBOOST_ON_KILL: AttributeDef<Seconds> = AttributeDef::new(
31,
c"critboost on kill",
c"add_onkill_critboost_time",
DescriptionFormat::Additive,
0.0,
60.0,
);
#[doc(alias("damage bonus"))]
pub const DAMAGE_BONUS: AttributeDef<Multiplier> = AttributeDef::new(
2,
c"damage bonus",
c"mult_dmg",
DescriptionFormat::Percentage,
1.0,
10.0,
);
#[doc(alias("damage force reduction"))]
pub const DAMAGE_FORCE_REDUCTION: AttributeDef<Multiplier> = AttributeDef::new(
252,
c"damage force reduction",
c"damage_force_reduction",
DescriptionFormat::Percentage,
0.0,
1.0,
);
#[doc(alias("damage penalty"))]
pub const DAMAGE_PENALTY: AttributeDef<Multiplier> = AttributeDef::new(
1,
c"damage penalty",
c"mult_dmg",
DescriptionFormat::Percentage,
0.0,
1.0,
);
#[doc(alias("dmg penalty vs players"))]
pub const DAMAGE_PENALTY_VS_PLAYERS: AttributeDef<Multiplier> = AttributeDef::new(
138,
c"dmg penalty vs players",
c"mult_dmg_vs_players",
DescriptionFormat::Percentage,
0.0,
1.0,
);
#[doc(alias("dmg taken from blast reduced"))]
pub const DAMAGE_TAKEN_FROM_BLAST_REDUCED: AttributeDef<Multiplier> = AttributeDef::new(
64,
c"dmg taken from blast reduced",
c"mult_dmgtaken_from_explosions",
DescriptionFormat::InvertedPercentage,
0.0,
1.0,
);
#[doc(alias("dmg taken increased"))]
pub const DAMAGE_TAKEN_INCREASED: AttributeDef<Multiplier> = AttributeDef::new(
412,
c"dmg taken increased",
c"mult_dmgtaken",
DescriptionFormat::Percentage,
1.0,
10.0,
);
#[doc(alias("deploy time decreased"))]
pub const DEPLOY_TIME_DECREASED: AttributeDef<Multiplier> = AttributeDef::new(
178,
c"deploy time decreased",
c"mult_deploy_time",
DescriptionFormat::InvertedPercentage,
0.1,
1.0,
);
#[doc(alias("deploy time increased"))]
pub const DEPLOY_TIME_INCREASED: AttributeDef<Multiplier> = AttributeDef::new(
177,
c"deploy time increased",
c"mult_deploy_time",
DescriptionFormat::Percentage,
1.0,
10.0,
);
#[doc(alias("faster reload rate"))]
pub const FASTER_RELOAD_RATE: AttributeDef<Multiplier> = AttributeDef::new(
318,
c"faster reload rate",
c"fast_reload",
DescriptionFormat::InvertedPercentage,
0.1,
1.0,
);
#[doc(alias("fire rate bonus"))]
pub const FIRE_RATE_BONUS: AttributeDef<Multiplier> = AttributeDef::new(
6,
c"fire rate bonus",
c"mult_postfiredelay",
DescriptionFormat::InvertedPercentage,
0.1,
1.0,
);
#[doc(alias("fire rate penalty"))]
pub const FIRE_RATE_PENALTY: AttributeDef<Multiplier> = AttributeDef::new(
5,
c"fire rate penalty",
c"mult_postfiredelay",
DescriptionFormat::InvertedPercentage,
1.0,
10.0,
);
#[doc(alias("heal on hit for rapidfire"))]
pub const HEAL_ON_HIT_RAPID_FIRE: AttributeDef<Amount> = AttributeDef::new(
16,
c"heal on hit for rapidfire",
c"add_onhit_addhealth",
DescriptionFormat::Additive,
0.0,
500.0,
);
#[doc(alias("heal on hit for slowfire"))]
pub const HEAL_ON_HIT_SLOW_FIRE: AttributeDef<Amount> = AttributeDef::new(
110,
c"heal on hit for slowfire",
c"add_onhit_addhealth",
DescriptionFormat::Additive,
0.0,
500.0,
);
#[doc(alias("heal on kill"))]
pub const HEAL_ON_KILL: AttributeDef<Amount> = AttributeDef::new(
180,
c"heal on kill",
c"heal_on_kill",
DescriptionFormat::Additive,
0.0,
500.0,
);
#[doc(alias("health from packs increased"))]
pub const HEALTH_FROM_PACKS_INCREASED: AttributeDef<Multiplier> = AttributeDef::new(
108,
c"health from packs increased",
c"mult_health_frompacks",
DescriptionFormat::Percentage,
1.0,
10.0,
);
#[doc(alias("health regen"))]
pub const HEALTH_REGEN: AttributeDef<Amount> = AttributeDef::new(
57,
c"health regen",
c"add_health_regen",
DescriptionFormat::Additive,
0.0,
100.0,
);
#[doc(alias("max health additive bonus"))]
pub const MAX_HEALTH_ADDITIVE_BONUS: AttributeDef<Amount> = AttributeDef::new(
26,
c"max health additive bonus",
c"add_maxhealth",
DescriptionFormat::Additive,
0.0,
1000.0,
);
#[doc(alias("max health additive penalty"))]
pub const MAX_HEALTH_ADDITIVE_PENALTY: AttributeDef<Amount> = AttributeDef::new(
125,
c"max health additive penalty",
c"add_maxhealth",
DescriptionFormat::Additive,
-100.0,
0.0,
);
#[doc(alias("maxammo primary increased"))]
pub const MAXAMMO_PRIMARY_INCREASED: AttributeDef<Multiplier> = AttributeDef::new(
76,
c"maxammo primary increased",
c"mult_maxammo_primary",
DescriptionFormat::Percentage,
1.0,
10.0,
);
#[doc(alias("maxammo primary reduced"))]
pub const MAXAMMO_PRIMARY_REDUCED: AttributeDef<Multiplier> = AttributeDef::new(
77,
c"maxammo primary reduced",
c"mult_maxammo_primary",
DescriptionFormat::Percentage,
0.1,
1.0,
);
#[doc(alias("maxammo secondary increased"))]
pub const MAXAMMO_SECONDARY_INCREASED: AttributeDef<Multiplier> = AttributeDef::new(
78,
c"maxammo secondary increased",
c"mult_maxammo_secondary",
DescriptionFormat::Percentage,
1.0,
10.0,
);
#[doc(alias("maxammo secondary reduced"))]
pub const MAXAMMO_SECONDARY_REDUCED: AttributeDef<Multiplier> = AttributeDef::new(
79,
c"maxammo secondary reduced",
c"mult_maxammo_secondary",
DescriptionFormat::Percentage,
0.1,
1.0,
);
#[doc(alias("minicrit vs burning player"))]
pub const MINICRIT_VS_BURNING_PLAYER: AttributeDef<Flag> = AttributeDef::new(
209,
c"minicrit vs burning player",
c"or_minicrit_vs_playercond_burning",
DescriptionFormat::Additive,
0.0,
1.0,
);
#[doc(alias("minicrits become crits"))]
pub const MINICRITS_BECOME_CRITS: AttributeDef<Flag> = AttributeDef::new(
179,
c"minicrits become crits",
c"minicrits_become_crits",
DescriptionFormat::Additive,
0.0,
1.0,
);
#[doc(alias("move speed bonus"))]
pub const MOVE_SPEED_BONUS: AttributeDef<Multiplier> = AttributeDef::new(
107,
c"move speed bonus",
c"mult_player_movespeed",
DescriptionFormat::Percentage,
1.0,
3.0,
);
#[doc(alias("move speed penalty"))]
pub const MOVE_SPEED_PENALTY: AttributeDef<Multiplier> = AttributeDef::new(
54,
c"move speed penalty",
c"mult_player_movespeed",
DescriptionFormat::InvertedPercentage,
0.1,
1.0,
);
#[doc(alias("Projectile speed decreased"))]
pub const PROJECTILE_SPEED_DECREASED: AttributeDef<Multiplier> = AttributeDef::new(
104,
c"Projectile speed decreased",
c"mult_projectile_speed",
DescriptionFormat::Percentage,
0.1,
1.0,
);
#[doc(alias("Projectile speed increased"))]
pub const PROJECTILE_SPEED_INCREASED: AttributeDef<Multiplier> = AttributeDef::new(
103,
c"Projectile speed increased",
c"mult_projectile_speed",
DescriptionFormat::Percentage,
1.0,
4.0,
);
#[doc(alias("provide on active"))]
pub const PROVIDE_ON_ACTIVE: AttributeDef<Flag> = AttributeDef::new(
128,
c"provide on active",
c"provide_on_active",
DescriptionFormat::Additive,
0.0,
1.0,
);
#[doc(alias("Reload time decreased"))]
pub const RELOAD_TIME_DECREASED: AttributeDef<Multiplier> = AttributeDef::new(
97,
c"Reload time decreased",
c"mult_reload_time",
DescriptionFormat::InvertedPercentage,
0.1,
1.0,
);
#[doc(alias("Reload time increased"))]
pub const RELOAD_TIME_INCREASED: AttributeDef<Multiplier> = AttributeDef::new(
96,
c"Reload time increased",
c"mult_reload_time",
DescriptionFormat::Percentage,
1.0,
10.0,
);
#[doc(alias("Set DamageType Ignite"))]
pub const SET_DAMAGE_TYPE_IGNITE: AttributeDef<Flag> = AttributeDef::new(
208,
c"Set DamageType Ignite",
c"set_dmgtype_ignite",
DescriptionFormat::Additive,
0.0,
1.0,
);
#[doc(alias("spread penalty"))]
pub const SPREAD_PENALTY: AttributeDef<Multiplier> = AttributeDef::new(
36,
c"spread penalty",
c"mult_spread_scale",
DescriptionFormat::Percentage,
1.0,
10.0,
);
#[doc(alias("ubercharge overheal rate penalty"))]
pub const UBERCHARGE_OVERHEAL_RATE_PENALTY: AttributeDef<Multiplier> = AttributeDef::new(
739,
c"ubercharge overheal rate penalty",
c"mult_medigun_overheal_uberchargerate",
DescriptionFormat::Percentage,
0.0,
1.0,
);
#[doc(alias("ubercharge rate bonus"))]
pub const UBERCHARGE_RATE_BONUS: AttributeDef<Multiplier> = AttributeDef::new(
10,
c"ubercharge rate bonus",
c"mult_medigun_uberchargerate",
DescriptionFormat::Percentage,
1.0,
4.0,
);
#[doc(alias("weapon spread bonus"))]
pub const WEAPON_SPREAD_BONUS: AttributeDef<Multiplier> = AttributeDef::new(
106,
c"weapon spread bonus",
c"mult_spread_scale",
DescriptionFormat::InvertedPercentage,
0.0,
1.0,
);
pub const ALL: [AnyAttributeDef; 42] = [
AnyAttributeDef::Flag(AIRBLAST_DISABLED),
AnyAttributeDef::Multiplier(AIRBLAST_VULNERABILITY_MULTIPLIER),
AnyAttributeDef::Multiplier(BLAST_RADIUS_DECREASED),
AnyAttributeDef::Multiplier(BLAST_RADIUS_INCREASED),
AnyAttributeDef::Multiplier(BULLETS_PER_SHOT_BONUS),
AnyAttributeDef::Multiplier(CLIP_SIZE_BONUS),
AnyAttributeDef::Multiplier(CLIP_SIZE_PENALTY),
AnyAttributeDef::Flag(CRIT_KILL_WILL_GIB),
AnyAttributeDef::Seconds(CRITBOOST_ON_KILL),
AnyAttributeDef::Multiplier(DAMAGE_BONUS),
AnyAttributeDef::Multiplier(DAMAGE_FORCE_REDUCTION),
AnyAttributeDef::Multiplier(DAMAGE_PENALTY),
AnyAttributeDef::Multiplier(DAMAGE_PENALTY_VS_PLAYERS),
AnyAttributeDef::Multiplier(DAMAGE_TAKEN_FROM_BLAST_REDUCED),
AnyAttributeDef::Multiplier(DAMAGE_TAKEN_INCREASED),
AnyAttributeDef::Multiplier(DEPLOY_TIME_DECREASED),
AnyAttributeDef::Multiplier(DEPLOY_TIME_INCREASED),
AnyAttributeDef::Multiplier(FASTER_RELOAD_RATE),
AnyAttributeDef::Multiplier(FIRE_RATE_BONUS),
AnyAttributeDef::Multiplier(FIRE_RATE_PENALTY),
AnyAttributeDef::Amount(HEAL_ON_HIT_RAPID_FIRE),
AnyAttributeDef::Amount(HEAL_ON_HIT_SLOW_FIRE),
AnyAttributeDef::Amount(HEAL_ON_KILL),
AnyAttributeDef::Amount(HEALTH_REGEN),
AnyAttributeDef::Amount(MAX_HEALTH_ADDITIVE_BONUS),
AnyAttributeDef::Amount(MAX_HEALTH_ADDITIVE_PENALTY),
AnyAttributeDef::Multiplier(MAXAMMO_PRIMARY_INCREASED),
AnyAttributeDef::Multiplier(MAXAMMO_PRIMARY_REDUCED),
AnyAttributeDef::Multiplier(MAXAMMO_SECONDARY_INCREASED),
AnyAttributeDef::Multiplier(MAXAMMO_SECONDARY_REDUCED),
AnyAttributeDef::Flag(MINICRIT_VS_BURNING_PLAYER),
AnyAttributeDef::Flag(MINICRITS_BECOME_CRITS),
AnyAttributeDef::Multiplier(MOVE_SPEED_BONUS),
AnyAttributeDef::Multiplier(MOVE_SPEED_PENALTY),
AnyAttributeDef::Multiplier(PROJECTILE_SPEED_DECREASED),
AnyAttributeDef::Multiplier(PROJECTILE_SPEED_INCREASED),
AnyAttributeDef::Flag(PROVIDE_ON_ACTIVE),
AnyAttributeDef::Multiplier(RELOAD_TIME_DECREASED),
AnyAttributeDef::Multiplier(RELOAD_TIME_INCREASED),
AnyAttributeDef::Flag(SET_DAMAGE_TYPE_IGNITE),
AnyAttributeDef::Multiplier(SPREAD_PENALTY),
AnyAttributeDef::Multiplier(WEAPON_SPREAD_BONUS),
];
pub fn by_index(index: AttributeIndex) -> Option<AnyAttributeDef> {
ALL.into_iter().find(|def| def.index() == index)
}
#[doc(alias("GetAttributeDefinitionByName"))]
pub fn find(name: &str) -> Option<AnyAttributeDef> {
ALL.into_iter()
.find(|def| def.name().to_bytes().eq_ignore_ascii_case(name.as_bytes()))
}