From cbf4c772666a1a5fc173272883f8565cb9b1e6e2 Mon Sep 17 00:00:00 2001 From: DevantHugo Date: Mon, 15 May 2023 09:42:50 -0700 Subject: [PATCH 01/15] added struct & default --- src/perks/lib.rs | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/perks/lib.rs b/src/perks/lib.rs index 46e498e2..c7f23675 100644 --- a/src/perks/lib.rs +++ b/src/perks/lib.rs @@ -389,6 +389,30 @@ impl Default for DamageResistModifierResponse { } } +#[derive(Debug, Clone, PartialEq, Serialize)] +pub struct MovementSpeedModifierResponse { + pub walk_speed_mult: f64, + pub sprint_speed_mult: f64, + pub crouch_speed_mult: f64, + pub slide_distance_mult: f64, + pub base_jump_height_mult: f64, + pub strafe_speed_mult: f64, + pub extra_mobility: i32, +} +impl Default for MovementSpeedModifierResponse { + fn default() -> Self { + Self { + walk_speed_mult: 1.0, + sprint_speed_mult: 1.0, + crouch_speed_mult: 1.0, + slide_distance_mult: 1.0, + base_jump_height_mult: 1.0, + strafe_speed_mult: 1.0, + extra_mobility: 0, + } + } +} + #[derive(Debug, Clone, PartialEq, Serialize)] pub struct ModifierResponseSummary { pub rmr: Option, @@ -418,4 +442,4 @@ impl Default for ModifierResponseSummary { statbump: None, } } -} +} \ No newline at end of file From 47111ab7da2d82d3e3b651dad681aff9fbee4b60 Mon Sep 17 00:00:00 2001 From: DevantHugo Date: Tue, 16 May 2023 10:03:57 -0700 Subject: [PATCH 02/15] added msmr on all perks except exotic armors --- src/perks/exotic_armor.rs | 4 +++ src/perks/exotic_perks.rs | 4 +-- src/perks/lib.rs | 15 ++++++---- src/perks/meta_perks.rs | 4 +-- src/perks/mod.rs | 7 +++++ src/perks/other_perks.rs | 60 +++++++++++++++++++++++++++++++++++++++ 6 files changed, 84 insertions(+), 10 deletions(-) diff --git a/src/perks/exotic_armor.rs b/src/perks/exotic_armor.rs index 2f4a1759..585c679f 100644 --- a/src/perks/exotic_armor.rs +++ b/src/perks/exotic_armor.rs @@ -559,4 +559,8 @@ pub fn exotic_armor() { RangeModifierResponse::default() }), ); + + // add_msmr( + // Perks:: + // ) } diff --git a/src/perks/exotic_perks.rs b/src/perks/exotic_perks.rs index d0995e5a..c1120e9d 100644 --- a/src/perks/exotic_perks.rs +++ b/src/perks/exotic_perks.rs @@ -5,11 +5,11 @@ use crate::{d2_enums::StatHashes, enemies::EnemyType, weapons::Stat}; use super::{ add_dmr, add_edr, add_epr, add_fmr, add_hmr, add_mmr, add_rmr, add_rr, add_rsmr, add_sbr, - add_vmr, clamp, + add_vmr, add_msmr, clamp, lib::{ CalculationInput, DamageModifierResponse, ExtraDamageResponse, FiringModifierResponse, HandlingModifierResponse, InventoryModifierResponse, MagazineModifierResponse, - RangeModifierResponse, RefundResponse, ReloadModifierResponse, ReloadOverrideResponse, + RangeModifierResponse, RefundResponse, ReloadModifierResponse, ReloadOverrideResponse, MovementSpeedModifierResponse, }, ModifierResponseInput, Perks, }; diff --git a/src/perks/lib.rs b/src/perks/lib.rs index c7f23675..58c51305 100644 --- a/src/perks/lib.rs +++ b/src/perks/lib.rs @@ -391,9 +391,10 @@ impl Default for DamageResistModifierResponse { #[derive(Debug, Clone, PartialEq, Serialize)] pub struct MovementSpeedModifierResponse { - pub walk_speed_mult: f64, - pub sprint_speed_mult: f64, - pub crouch_speed_mult: f64, + // if mult isn't in the var name its additive + pub walk_speed: f64, + pub sprint_speed: f64, + pub crouch_speed: f64, pub slide_distance_mult: f64, pub base_jump_height_mult: f64, pub strafe_speed_mult: f64, @@ -402,9 +403,9 @@ pub struct MovementSpeedModifierResponse { impl Default for MovementSpeedModifierResponse { fn default() -> Self { Self { - walk_speed_mult: 1.0, - sprint_speed_mult: 1.0, - crouch_speed_mult: 1.0, + walk_speed: 0, + sprint_speed: 0, + crouch_speed: 0, slide_distance_mult: 1.0, base_jump_height_mult: 1.0, strafe_speed_mult: 1.0, @@ -425,6 +426,7 @@ pub struct ModifierResponseSummary { pub imr: Option, pub drmr: Option, pub statbump: Option>, + pub msmr: Option, } impl Default for ModifierResponseSummary { @@ -440,6 +442,7 @@ impl Default for ModifierResponseSummary { imr: None, drmr: None, statbump: None, + msmr: None, } } } \ No newline at end of file diff --git a/src/perks/meta_perks.rs b/src/perks/meta_perks.rs index 9bb241d4..7387533c 100644 --- a/src/perks/meta_perks.rs +++ b/src/perks/meta_perks.rs @@ -7,12 +7,12 @@ use crate::{ use super::{ add_dmr, add_epr, add_flmr, add_fmr, add_hmr, add_imr, add_mmr, add_rmr, add_rsmr, add_sbr, - add_vmr, clamp, + add_vmr, add_msmr, clamp, lib::{ CalculationInput, DamageModifierResponse, ExplosivePercentResponse, ExtraDamageResponse, FiringModifierResponse, FlinchModifierResponse, HandlingModifierResponse, InventoryModifierResponse, MagazineModifierResponse, RangeModifierResponse, RefundResponse, - ReloadModifierResponse, + ReloadModifierResponse, MovementSpeedModifierResponse, }, ModifierResponseInput, Perks, }; diff --git a/src/perks/mod.rs b/src/perks/mod.rs index 8635c05d..77a60aea 100644 --- a/src/perks/mod.rs +++ b/src/perks/mod.rs @@ -104,6 +104,7 @@ pub enum Perks { //intrinsics RapidFireFrame = 902, + MidaSynergy = 1057935015, //armor DexterityMod = 1001, @@ -361,6 +362,7 @@ pub enum Perks { Tempering = 362132290, ThreadOfAscent = 4208512216, Amplified = 880704824, + Dilation = 2272984656, //kinetic exotic CranialSpike = 1319823571, @@ -637,6 +639,11 @@ fn add_imr(perk: Perks, func: Box InventoryModi map.borrow_mut().imr.insert(perk, func); }); } +fn add_msmr(perk: Perks, funct: Box InventoryModifierResponse>) { + PERK_FUNC_MAP.with(|map| { + map.borrow_mut().msmr.insert(perk, func); + }); +} pub fn get_stat_bumps( _perks: Vec, diff --git a/src/perks/other_perks.rs b/src/perks/other_perks.rs index 7a4b41ec..a74e2ddb 100644 --- a/src/perks/other_perks.rs +++ b/src/perks/other_perks.rs @@ -573,4 +573,64 @@ pub fn other_perks() { } }), ); + + add_msmr( + Perks::Lightweights, + Box::new(|_input: ModifierResponseInput| -> MovementSpeedModifierResponse { + MovementSpeedModifierResponse { + sprint_speed: 0.5, + extra_mobility: 20, + ..Default::default() + } + }), + ); + + add_msmr( + Perks::MidaSynergy, + Box::new(|_input: ModifierResponseInput| -> MovementSpeedModifierResponse { + let speed_bonus = if _input.value > 0 { 0.77 } else { 0.5 } // mida synergy bonus is 10%, unsure if my number is accurate + MovementSpeedModifierResponse { + sprint_speed: speed_bonus, + extra_mobility: 20, + ..Default::default() + } + }), + ); + + add_msmr( + Perks::Dilation, + Box::new(|_input: ModifierResponseInput| -> MovementSpeedModifierResponse { + if _input.value > 0 { + MovementSpeedModifierResponse { + crouch_speed = 4.0 + ..Default::default() + } + } + else { + MovementSpeedModifierResponse::default() + } + }), + ); + + add_msmr( + Perks::Amplified, + Box::new(|_input: ModifierResponseInput| -> MovementSpeedModifierResponse { + if _input.value > 0 { + MovementSpeedModifierResponse { + sprint_speed: 0.96 // this number may be incorrect + slide_distance_mult: 1.5, + extra_mobility: 50, + base_jump_height_mult: 1.5, + ..Default::default() + } + } + else { + MovementSpeedModifierResponse { + slide_distance_mult: 1.33, + extra_mobility: 50, + ..Default::default() + } + } + }), + ); } From 462d7afad65c99fc3a6354b4a32820bab1244146 Mon Sep 17 00:00:00 2001 From: Crystal Date: Tue, 16 May 2023 13:06:22 -0700 Subject: [PATCH 03/15] exotic armors added --- src/perks/other_perks.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/perks/other_perks.rs b/src/perks/other_perks.rs index a74e2ddb..c1cf9c1b 100644 --- a/src/perks/other_perks.rs +++ b/src/perks/other_perks.rs @@ -602,6 +602,7 @@ pub fn other_perks() { Box::new(|_input: ModifierResponseInput| -> MovementSpeedModifierResponse { if _input.value > 0 { MovementSpeedModifierResponse { + // crouch speed is set to 4.0 and cannot be lowered by slows crouch_speed = 4.0 ..Default::default() } @@ -615,6 +616,7 @@ pub fn other_perks() { add_msmr( Perks::Amplified, Box::new(|_input: ModifierResponseInput| -> MovementSpeedModifierResponse { + // Speed boosted if _input.value > 0 { MovementSpeedModifierResponse { sprint_speed: 0.96 // this number may be incorrect @@ -624,6 +626,7 @@ pub fn other_perks() { ..Default::default() } } + // normal amplified else { MovementSpeedModifierResponse { slide_distance_mult: 1.33, From c3df7c0222f13a0658c84ddd007ec0cb5a6018b8 Mon Sep 17 00:00:00 2001 From: Crystal Date: Tue, 16 May 2023 13:06:41 -0700 Subject: [PATCH 04/15] added all exotic armors --- src/perks/exotic_armor.rs | 57 +++++++++++++++++++++++++++++++++++---- src/perks/lib.rs | 7 +++-- src/perks/mod.rs | 2 ++ 3 files changed, 59 insertions(+), 7 deletions(-) diff --git a/src/perks/exotic_armor.rs b/src/perks/exotic_armor.rs index 585c679f..39850fe4 100644 --- a/src/perks/exotic_armor.rs +++ b/src/perks/exotic_armor.rs @@ -6,12 +6,12 @@ use crate::{ }; use super::{ - add_dmr, add_epr, add_flmr, add_fmr, add_hmr, add_mmr, add_rmr, add_rsmr, add_sbr, add_vmr, + add_dmr, add_epr, add_flmr, add_fmr, add_hmr, add_mmr, add_rmr, add_rsmr, add_sbr, add_vmr, add_msmr, clamp, lib::{ CalculationInput, DamageModifierResponse, ExtraDamageResponse, FiringModifierResponse, FlinchModifierResponse, HandlingModifierResponse, RangeModifierResponse, RefundResponse, - ReloadModifierResponse, ReloadOverrideResponse, + ReloadModifierResponse, ReloadOverrideResponse, MovementSpeedModifierResponse, }, ModifierResponseInput, Perks, }; @@ -560,7 +560,54 @@ pub fn exotic_armor() { }), ); - // add_msmr( - // Perks:: - // ) + add_msmr( + Perks::Transversives, + Box::new(|_input: ModifierResponseInput| -> MovementSpeedModifierResponse { + MovementSpeedModifierResponse { + sprint_speed: 0.5, + crouch_speed: 4.0, + slide_distance_mult: 1.33, + ..Default::default() + } + }), + ); + + add_msmr( + Perks::Stompees, + Box::new(|_input: ModifierResponseInput| -> MovementSpeedModifierResponse { + MovementSpeedModifierResponse { + sprint_speed: 0.5, + slide_distance_mult: 1.33, + ..Default::default() + } + }), + ); + + add_msmr( + Perks::Dunemarchers, + Box::new(|_input: ModifierResponseInput| -> MovementSpeedModifierResponse { + MovementSpeedModifierResponse { + sprint_speed: 0.5, + slide_distance_mult: 1.33, + ..Default::default() + } + }) + ) + + add_msmr( + Perks::Peacekeepers, + Box::new(|_input: ModifierResponseInput| -> MovementSpeedModifierResponse { + if _input.calc_data.weapon_type == &WeaponType::SUBMACHINEGUN { + MovementSpeedModifierResponse { + sprint_speed: 0.5, + slide_distance_mult: 1.33, + strafe_speed_mult: 1.09, + ..Default::default() + } + } + else { + MovementSpeedModifierResponse::default() + } + }), + ); } diff --git a/src/perks/lib.rs b/src/perks/lib.rs index 58c51305..869cd2ab 100644 --- a/src/perks/lib.rs +++ b/src/perks/lib.rs @@ -391,7 +391,9 @@ impl Default for DamageResistModifierResponse { #[derive(Debug, Clone, PartialEq, Serialize)] pub struct MovementSpeedModifierResponse { - // if mult isn't in the var name its additive + // if mult isn't in the var name its additive + // exception for the crouch speed since all things + // that affect crouch speed just set it to a value as far as I could tell pub walk_speed: f64, pub sprint_speed: f64, pub crouch_speed: f64, @@ -405,7 +407,8 @@ impl Default for MovementSpeedModifierResponse { Self { walk_speed: 0, sprint_speed: 0, - crouch_speed: 0, + // + crouch_speed: 1.0, slide_distance_mult: 1.0, base_jump_height_mult: 1.0, strafe_speed_mult: 1.0, diff --git a/src/perks/mod.rs b/src/perks/mod.rs index 77a60aea..9dadceda 100644 --- a/src/perks/mod.rs +++ b/src/perks/mod.rs @@ -142,6 +142,8 @@ pub enum Perks { Gyrfalcon = 3809192347, AeonInsight = 3651607301, Felwinters = 622433369, + Transversives = 2954558333, + Dunemarchers = 1160559849, //parts ImpactCasing = 3796465595, From dad401901b02db8fcd60592984d20cbb10e3ff8e Mon Sep 17 00:00:00 2001 From: Crystal Date: Tue, 16 May 2023 13:20:41 -0700 Subject: [PATCH 05/15] added Tractor and fixed Tractor's perk name --- src/perks/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/perks/mod.rs b/src/perks/mod.rs index 9dadceda..e72cf08a 100644 --- a/src/perks/mod.rs +++ b/src/perks/mod.rs @@ -424,7 +424,7 @@ pub enum Perks { DarkDescent = 3333994164, TargetAquired = 939227542, SleeperCatalyst = 2142466730, - TractorCannon = 1210807262, + RepulsorForce = 1210807262, #[num_enum(default)] Ignore = 69420, From 23916c9ca3043449e240fe2432ef9dad2a651d3a Mon Sep 17 00:00:00 2001 From: Crystal Date: Tue, 16 May 2023 13:20:53 -0700 Subject: [PATCH 06/15] same as prev --- src/perks/buff_perks.rs | 2 +- src/perks/exotic_perks.rs | 10 ++++++++++ src/perks/other_perks.rs | 6 +++--- src/perks/perk_options_handler.rs | 2 +- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/perks/buff_perks.rs b/src/perks/buff_perks.rs index 24e39bf5..92d9b891 100644 --- a/src/perks/buff_perks.rs +++ b/src/perks/buff_perks.rs @@ -215,7 +215,7 @@ pub fn buff_perks() { ); add_dmr( - Perks::TractorCannon, + Perks::RepulsorForce, Box::new(|_input: ModifierResponseInput| -> DamageModifierResponse { let des_debuff = if _input.pvp { 1.5 } else { 1.3 }; let debuff = gbl_debuff(_input.cached_data, des_debuff); diff --git a/src/perks/exotic_perks.rs b/src/perks/exotic_perks.rs index c1120e9d..76b58030 100644 --- a/src/perks/exotic_perks.rs +++ b/src/perks/exotic_perks.rs @@ -934,4 +934,14 @@ pub fn exotic_perks() { } }), ); + + add_msmr( + Perks::RepulsorForce, + Box::new(|_input: ModifierResponseInput| -> MovementSpeedModifierResponse { + MovementSpeedModifierResponse { + sprint_speed: 1.0, + ..Default::default() + } + }) + ) } diff --git a/src/perks/other_perks.rs b/src/perks/other_perks.rs index c1cf9c1b..b9126e86 100644 --- a/src/perks/other_perks.rs +++ b/src/perks/other_perks.rs @@ -588,7 +588,7 @@ pub fn other_perks() { add_msmr( Perks::MidaSynergy, Box::new(|_input: ModifierResponseInput| -> MovementSpeedModifierResponse { - let speed_bonus = if _input.value > 0 { 0.77 } else { 0.5 } // mida synergy bonus is 10%, unsure if my number is accurate + let speed_bonus = if _input.value > 0 { 0.8 } else { 0.5 } // mida synergy bonus is 10%, unsure if my number is accurate MovementSpeedModifierResponse { sprint_speed: speed_bonus, extra_mobility: 20, @@ -603,7 +603,7 @@ pub fn other_perks() { if _input.value > 0 { MovementSpeedModifierResponse { // crouch speed is set to 4.0 and cannot be lowered by slows - crouch_speed = 4.0 + crouch_speed = 4.0, ..Default::default() } } @@ -619,7 +619,7 @@ pub fn other_perks() { // Speed boosted if _input.value > 0 { MovementSpeedModifierResponse { - sprint_speed: 0.96 // this number may be incorrect + sprint_speed: 1.0, // this number may be incorrect slide_distance_mult: 1.5, extra_mobility: 50, base_jump_height_mult: 1.5, diff --git a/src/perks/perk_options_handler.rs b/src/perks/perk_options_handler.rs index 02ebe802..a0293961 100644 --- a/src/perks/perk_options_handler.rs +++ b/src/perks/perk_options_handler.rs @@ -331,7 +331,7 @@ fn hash_to_perk_option_data(_hash: u32) -> Option { Perks::RideTheBull => Some(PerkOptionData::stacking(2)), Perks::NobleRounds => Some(PerkOptionData::toggle()), Perks::MementoMori => Some(PerkOptionData::toggle()), - Perks::TractorCannon => Some(PerkOptionData::toggle()), + Perks::RepulsorForce => Some(PerkOptionData::toggle()), Perks::DexterityMod => Some(PerkOptionData::stacking(3)), Perks::ReserveMod => Some(PerkOptionData::stacking(3)), From 709ab088196e43a3200aedbb34e44b489f354ea8 Mon Sep 17 00:00:00 2001 From: Crystal Date: Tue, 16 May 2023 13:29:31 -0700 Subject: [PATCH 07/15] fixed some imports and floats --- src/perks/lib.rs | 5 ++--- src/perks/other_perks.rs | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/perks/lib.rs b/src/perks/lib.rs index 869cd2ab..faae4ca4 100644 --- a/src/perks/lib.rs +++ b/src/perks/lib.rs @@ -405,9 +405,8 @@ pub struct MovementSpeedModifierResponse { impl Default for MovementSpeedModifierResponse { fn default() -> Self { Self { - walk_speed: 0, - sprint_speed: 0, - // + walk_speed: 0.0, + sprint_speed: 0.0, crouch_speed: 1.0, slide_distance_mult: 1.0, base_jump_height_mult: 1.0, diff --git a/src/perks/other_perks.rs b/src/perks/other_perks.rs index b9126e86..9b3e0507 100644 --- a/src/perks/other_perks.rs +++ b/src/perks/other_perks.rs @@ -8,13 +8,13 @@ use crate::{ }; use super::{ - add_dmr, add_epr, add_fmr, add_hmr, add_imr, add_mmr, add_rmr, add_rsmr, add_sbr, add_vmr, + add_dmr, add_epr, add_fmr, add_hmr, add_imr, add_mmr, add_rmr, add_rsmr, add_sbr, add_vmr,add_msmr, clamp, lib::{ CalculationInput, DamageModifierResponse, ExtraDamageResponse, FiringModifierResponse, FlinchModifierResponse, HandlingModifierResponse, InventoryModifierResponse, MagazineModifierResponse, RangeModifierResponse, RefundResponse, ReloadModifierResponse, - ReloadOverrideResponse, + ReloadOverrideResponse, MovementSpeedModifierResponse, }, ModifierResponseInput, Perks, }; From 3293bce5c1ec0f4ec149caa28cfe22369774243a Mon Sep 17 00:00:00 2001 From: Crystal Date: Tue, 16 May 2023 13:31:47 -0700 Subject: [PATCH 08/15] fixed the lightweight API ID --- src/perks/mod.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/perks/mod.rs b/src/perks/mod.rs index e72cf08a..d9aa6ea7 100644 --- a/src/perks/mod.rs +++ b/src/perks/mod.rs @@ -104,6 +104,7 @@ pub enum Perks { //intrinsics RapidFireFrame = 902, + Lightweights = 1458010786, MidaSynergy = 1057935015, //armor From a4a4d03466300e16f2d85a1da92696c0998da917 Mon Sep 17 00:00:00 2001 From: Harmon Brammer Date: Tue, 16 May 2023 16:54:27 -0400 Subject: [PATCH 09/15] fix issues --- build.rs | 14 ++++++++++---- src/perks/exotic_armor.rs | 2 +- src/perks/lib.rs | 10 +++++----- src/perks/mod.rs | 13 +++++++++---- src/perks/other_perks.rs | 8 ++++---- src/perks/perk_options_handler.rs | 11 ++++++----- 6 files changed, 35 insertions(+), 23 deletions(-) diff --git a/build.rs b/build.rs index bc7102a3..e2c9e196 100644 --- a/build.rs +++ b/build.rs @@ -393,7 +393,10 @@ fn main() { } else { let file_res = std::fs::File::open(build_cache_path); if file_res.is_err() { - println!("cargo:warning=error opening cached build file: {}", file_res.err().unwrap()); + println!( + "cargo:warning=error opening cached build file: {}", + file_res.err().unwrap() + ); cached_data = CachedBuildData::default(); } else { let file = file_res.unwrap(); @@ -431,9 +434,11 @@ fn main() { panic!("cargo:warning=error initializing ron serializer"); } else { #[allow(unused_variables)] - let cd: CachedBuildData = ron::de::from_str(&res.clone().unwrap()).expect("cargo:warning=error deserializing"); + let cd: CachedBuildData = ron::de::from_str(&res.clone().unwrap()) + .expect("cargo:warning=error deserializing"); } - file.write_all(res.unwrap().as_bytes()).expect("cargo:warning=error writing cached build file"); + file.write_all(res.unwrap().as_bytes()) + .expect("cargo:warning=error writing cached build file"); } } @@ -856,11 +861,12 @@ fn construct_enhance_perk_mapping(formula_file: &mut File, cached: &mut CachedBu (902, vec!["VEIST Rapid-Fire", "Rapid-Fire Frame"]), (903, vec!["Adaptive Frame", "Adaptive Glaive"]), (904, vec!["Aggressive Frame", "Aggressive Glaive"]), - (905, vec!["Lightweight Frame", "MIDA Synergy"]), + (905, vec!["Lightweight Frame"]), (906, vec!["Precision Frame", "Häkke Precision Frame"]), (907, vec!["Double Fire"]), (908, vec!["Wave Frame"]), (911, vec!["Legacy PR-55 Frame"]), + (912, vec!["MIDA Synergy"]), ]); let content_paths = manifest_json["Response"]["jsonWorldComponentContentPaths"] ["en"] diff --git a/src/perks/exotic_armor.rs b/src/perks/exotic_armor.rs index 39850fe4..3b3509b8 100644 --- a/src/perks/exotic_armor.rs +++ b/src/perks/exotic_armor.rs @@ -592,7 +592,7 @@ pub fn exotic_armor() { ..Default::default() } }) - ) + ); add_msmr( Perks::Peacekeepers, diff --git a/src/perks/lib.rs b/src/perks/lib.rs index 869cd2ab..d88e4d75 100644 --- a/src/perks/lib.rs +++ b/src/perks/lib.rs @@ -391,7 +391,7 @@ impl Default for DamageResistModifierResponse { #[derive(Debug, Clone, PartialEq, Serialize)] pub struct MovementSpeedModifierResponse { - // if mult isn't in the var name its additive + // if mult isn't in the var name its additive // exception for the crouch speed since all things // that affect crouch speed just set it to a value as far as I could tell pub walk_speed: f64, @@ -405,10 +405,10 @@ pub struct MovementSpeedModifierResponse { impl Default for MovementSpeedModifierResponse { fn default() -> Self { Self { - walk_speed: 0, - sprint_speed: 0, + walk_speed: 0.0, + sprint_speed: 0.0, // - crouch_speed: 1.0, + crouch_speed: 0.0, slide_distance_mult: 1.0, base_jump_height_mult: 1.0, strafe_speed_mult: 1.0, @@ -448,4 +448,4 @@ impl Default for ModifierResponseSummary { msmr: None, } } -} \ No newline at end of file +} diff --git a/src/perks/mod.rs b/src/perks/mod.rs index e72cf08a..de4e8c87 100644 --- a/src/perks/mod.rs +++ b/src/perks/mod.rs @@ -32,8 +32,8 @@ use self::{ CalculationInput, DamageModifierResponse, ExplosivePercentResponse, ExtraDamageResponse, FiringModifierResponse, FlinchModifierResponse, HandlingModifierResponse, InventoryModifierResponse, MagazineModifierResponse, ModifierResponseSummary, - RangeModifierResponse, RefundResponse, ReloadModifierResponse, ReloadOverrideResponse, - VelocityModifierResponse, + MovementSpeedModifierResponse, RangeModifierResponse, RefundResponse, + ReloadModifierResponse, ReloadOverrideResponse, VelocityModifierResponse, }, meta_perks::*, origin_perks::*, @@ -104,7 +104,8 @@ pub enum Perks { //intrinsics RapidFireFrame = 902, - MidaSynergy = 1057935015, + MidaSynergy = 912, + Lightweights = 905, //armor DexterityMod = 1001, @@ -453,6 +454,7 @@ pub struct PersistentModifierResponses { pub epr: HashMap ExplosivePercentResponse>>, pub mmr: HashMap MagazineModifierResponse>>, pub imr: HashMap InventoryModifierResponse>>, + pub msmr: HashMap MovementSpeedModifierResponse>>, } impl PersistentModifierResponses { fn is_empty(&self) -> bool { @@ -641,7 +643,10 @@ fn add_imr(perk: Perks, func: Box InventoryModi map.borrow_mut().imr.insert(perk, func); }); } -fn add_msmr(perk: Perks, funct: Box InventoryModifierResponse>) { +fn add_msmr( + perk: Perks, + func: Box MovementSpeedModifierResponse>, +) { PERK_FUNC_MAP.with(|map| { map.borrow_mut().msmr.insert(perk, func); }); diff --git a/src/perks/other_perks.rs b/src/perks/other_perks.rs index b9126e86..c6944110 100644 --- a/src/perks/other_perks.rs +++ b/src/perks/other_perks.rs @@ -8,13 +8,13 @@ use crate::{ }; use super::{ - add_dmr, add_epr, add_fmr, add_hmr, add_imr, add_mmr, add_rmr, add_rsmr, add_sbr, add_vmr, + add_dmr, add_epr, add_fmr, add_hmr, add_imr, add_mmr, add_rmr, add_rsmr, add_sbr, add_vmr, add_msmr, clamp, lib::{ CalculationInput, DamageModifierResponse, ExtraDamageResponse, FiringModifierResponse, FlinchModifierResponse, HandlingModifierResponse, InventoryModifierResponse, MagazineModifierResponse, RangeModifierResponse, RefundResponse, ReloadModifierResponse, - ReloadOverrideResponse, + ReloadOverrideResponse, MovementSpeedModifierResponse }, ModifierResponseInput, Perks, }; @@ -588,7 +588,7 @@ pub fn other_perks() { add_msmr( Perks::MidaSynergy, Box::new(|_input: ModifierResponseInput| -> MovementSpeedModifierResponse { - let speed_bonus = if _input.value > 0 { 0.8 } else { 0.5 } // mida synergy bonus is 10%, unsure if my number is accurate + let speed_bonus = if _input.value > 0 { 0.77 } else { 0.5 }; // mida synergy bonus is 10%, unsure if my number is accurate MovementSpeedModifierResponse { sprint_speed: speed_bonus, extra_mobility: 20, @@ -603,7 +603,7 @@ pub fn other_perks() { if _input.value > 0 { MovementSpeedModifierResponse { // crouch speed is set to 4.0 and cannot be lowered by slows - crouch_speed = 4.0, + crouch_speed: 4.0, ..Default::default() } } diff --git a/src/perks/perk_options_handler.rs b/src/perks/perk_options_handler.rs index a0293961..96ce7aee 100644 --- a/src/perks/perk_options_handler.rs +++ b/src/perks/perk_options_handler.rs @@ -280,9 +280,7 @@ fn hash_to_perk_option_data(_hash: u32) -> Option { //exotics Perks::CranialSpike => Some(PerkOptionData::stacking(5)), - Perks::DarkForgedTrigger => Some(PerkOptionData::options_raw( - ["Hip-Fire", "ADS"].to_vec() - )), + Perks::DarkForgedTrigger => Some(PerkOptionData::options_raw(["Hip-Fire", "ADS"].to_vec())), Perks::AgersCall => Some(PerkOptionData::toggle()), Perks::LagragianSight => Some(PerkOptionData::toggle()), Perks::StringofCurses => Some(PerkOptionData::stacking(5)), @@ -386,6 +384,11 @@ fn hash_to_perk_option_data(_hash: u32) -> Option { Perks::Gyrfalcon => Some(PerkOptionData::toggle()), Perks::AeonInsight => Some(PerkOptionData::toggle()), Perks::Felwinters => Some(PerkOptionData::toggle()), + Perks::Transversives => Some(PerkOptionData::static_()), + Perks::MidaSynergy => Some(PerkOptionData::toggle()), + Perks::Dunemarchers => Some(PerkOptionData::static_()), + Perks::Dilation => Some(PerkOptionData::toggle()), + Perks::Lightweights => Some(PerkOptionData::static_()), //misc Perks::UmbralSharpening => Some(PerkOptionData::stacking(5)), @@ -394,8 +397,6 @@ fn hash_to_perk_option_data(_hash: u32) -> Option { Perks::FullStop => Some(PerkOptionData::static_()), Perks::HakkeHeavyBurst => Some(PerkOptionData::static_()), - - Perks::Ignore => None, } } From 7e232aff1161179020e75f6ac7195509a710b5bd Mon Sep 17 00:00:00 2001 From: Crystal Date: Tue, 16 May 2023 14:15:48 -0700 Subject: [PATCH 10/15] added MidaMT --- src/perks/exotic_perks.rs | 10 ++++++++++ src/perks/mod.rs | 1 + 2 files changed, 11 insertions(+) diff --git a/src/perks/exotic_perks.rs b/src/perks/exotic_perks.rs index 76b58030..e6fd544c 100644 --- a/src/perks/exotic_perks.rs +++ b/src/perks/exotic_perks.rs @@ -944,4 +944,14 @@ pub fn exotic_perks() { } }) ) + + add_msmr( + Perks::MidaMT, + Box::new(|_input: ModifierResponseInput| -> MovementSpeedModifierResponse { + MovementSpeedModifierResponse { + sprint_speed: 0.8, + ..Default::default() + } + }) + ) } diff --git a/src/perks/mod.rs b/src/perks/mod.rs index de4e8c87..c0c383ca 100644 --- a/src/perks/mod.rs +++ b/src/perks/mod.rs @@ -394,6 +394,7 @@ pub enum Perks { Roadborn = 1658733671, MarkovChain = 2814973067, MementoMori = 647617635, + MidaMT = 1331482397, //energy exotic LagragianSight = 2881100038, From 38077625e6a12ce547be5831e51380bbdaae8589 Mon Sep 17 00:00:00 2001 From: Crystal Date: Tue, 16 May 2023 14:23:48 -0700 Subject: [PATCH 11/15] fixed Mida synergy bonus --- src/perks/other_perks.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/perks/other_perks.rs b/src/perks/other_perks.rs index c6944110..882f146e 100644 --- a/src/perks/other_perks.rs +++ b/src/perks/other_perks.rs @@ -588,7 +588,7 @@ pub fn other_perks() { add_msmr( Perks::MidaSynergy, Box::new(|_input: ModifierResponseInput| -> MovementSpeedModifierResponse { - let speed_bonus = if _input.value > 0 { 0.77 } else { 0.5 }; // mida synergy bonus is 10%, unsure if my number is accurate + let speed_bonus = if _input.value > 0 { 0.8 } else { 0.5 }; // mida synergy bonus is 10%, unsure if my number is accurate MovementSpeedModifierResponse { sprint_speed: speed_bonus, extra_mobility: 20, From 55e5eac8b1d06ffdc302bba7aeed26b2d8b9bac8 Mon Sep 17 00:00:00 2001 From: Crystal Date: Tue, 16 May 2023 14:27:51 -0700 Subject: [PATCH 12/15] fixed the oopsie --- src/perks/exotic_perks.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/perks/exotic_perks.rs b/src/perks/exotic_perks.rs index e6fd544c..dedac190 100644 --- a/src/perks/exotic_perks.rs +++ b/src/perks/exotic_perks.rs @@ -952,6 +952,6 @@ pub fn exotic_perks() { sprint_speed: 0.8, ..Default::default() } - }) - ) + }), + ); } From a9ac4542f5a1fea0716c624f75f1a9bad1675933 Mon Sep 17 00:00:00 2001 From: Harmon Brammer Date: Tue, 16 May 2023 18:11:39 -0400 Subject: [PATCH 13/15] getting calcs ready --- build_resources/cached_build.ron | 10 ++++---- src/perks/exotic_perks.rs | 37 ++++++++++++++++------------ src/perks/lib.rs | 3 --- src/perks/mod.rs | 35 ++++++++++++++++++++++++++ src/perks/perk_options_handler.rs | 12 ++++----- src/types/rs_types.rs | 20 +++++++++++++++ src/weapons/stat_calc.rs | 41 ++++++++++++++++++++++++++----- 7 files changed, 122 insertions(+), 36 deletions(-) diff --git a/build_resources/cached_build.ron b/build_resources/cached_build.ron index 4726aa7b..c84e0317 100644 --- a/build_resources/cached_build.ron +++ b/build_resources/cached_build.ron @@ -204,7 +204,7 @@ (1034287523, 906), (1045795938, 906), (1052350088, 906), - (1057935015, 905), + (1057935015, 912), (1063261332, 904), (1069611115, 904), (1206996986, 906), @@ -249,7 +249,7 @@ (1831499663, 904), (1875323682, 901), (1886418605, 902), - (1891876363, 905), + (1891876363, 912), (1894749743, 902), (1900989425, 903), (1946568256, 901), @@ -269,7 +269,7 @@ (2164888232, 902), (2178772051, 903), (2189829540, 903), - (2213377102, 905), + (2213377102, 912), (2213429699, 907), (2260949877, 902), (2263539715, 902), @@ -278,7 +278,7 @@ (2409208302, 906), (2444870733, 907), (2458294492, 906), - (2470575005, 905), + (2470575005, 912), (2490530085, 903), (2516075140, 901), (2518716062, 904), @@ -286,7 +286,7 @@ (2563509458, 906), (2617324347, 901), (2662827496, 904), - (2670025099, 905), + (2670025099, 912), (2696719570, 903), (2725422375, 906), (2743098132, 906), diff --git a/src/perks/exotic_perks.rs b/src/perks/exotic_perks.rs index dedac190..e66ffeed 100644 --- a/src/perks/exotic_perks.rs +++ b/src/perks/exotic_perks.rs @@ -4,12 +4,13 @@ use std::collections::HashMap; use crate::{d2_enums::StatHashes, enemies::EnemyType, weapons::Stat}; use super::{ - add_dmr, add_edr, add_epr, add_fmr, add_hmr, add_mmr, add_rmr, add_rr, add_rsmr, add_sbr, - add_vmr, add_msmr, clamp, + add_dmr, add_edr, add_epr, add_fmr, add_hmr, add_mmr, add_msmr, add_rmr, add_rr, add_rsmr, + add_sbr, add_vmr, clamp, lib::{ CalculationInput, DamageModifierResponse, ExtraDamageResponse, FiringModifierResponse, HandlingModifierResponse, InventoryModifierResponse, MagazineModifierResponse, - RangeModifierResponse, RefundResponse, ReloadModifierResponse, ReloadOverrideResponse, MovementSpeedModifierResponse, + MovementSpeedModifierResponse, RangeModifierResponse, RefundResponse, + ReloadModifierResponse, ReloadOverrideResponse, }, ModifierResponseInput, Perks, }; @@ -937,21 +938,25 @@ pub fn exotic_perks() { add_msmr( Perks::RepulsorForce, - Box::new(|_input: ModifierResponseInput| -> MovementSpeedModifierResponse { - MovementSpeedModifierResponse { - sprint_speed: 1.0, - ..Default::default() - } - }) - ) + Box::new( + |_input: ModifierResponseInput| -> MovementSpeedModifierResponse { + MovementSpeedModifierResponse { + sprint_speed: 1.0, + ..Default::default() + } + }, + ), + ); add_msmr( Perks::MidaMT, - Box::new(|_input: ModifierResponseInput| -> MovementSpeedModifierResponse { - MovementSpeedModifierResponse { - sprint_speed: 0.8, - ..Default::default() - } - }), + Box::new( + |_input: ModifierResponseInput| -> MovementSpeedModifierResponse { + MovementSpeedModifierResponse { + sprint_speed: 0.8, + ..Default::default() + } + }, + ), ); } diff --git a/src/perks/lib.rs b/src/perks/lib.rs index d88e4d75..a86c5346 100644 --- a/src/perks/lib.rs +++ b/src/perks/lib.rs @@ -394,7 +394,6 @@ pub struct MovementSpeedModifierResponse { // if mult isn't in the var name its additive // exception for the crouch speed since all things // that affect crouch speed just set it to a value as far as I could tell - pub walk_speed: f64, pub sprint_speed: f64, pub crouch_speed: f64, pub slide_distance_mult: f64, @@ -405,9 +404,7 @@ pub struct MovementSpeedModifierResponse { impl Default for MovementSpeedModifierResponse { fn default() -> Self { Self { - walk_speed: 0.0, sprint_speed: 0.0, - // crouch_speed: 0.0, slide_distance_mult: 1.0, base_jump_height_mult: 1.0, diff --git a/src/perks/mod.rs b/src/perks/mod.rs index c0c383ca..3a1788df 100644 --- a/src/perks/mod.rs +++ b/src/perks/mod.rs @@ -577,6 +577,13 @@ impl PersistentModifierResponses { InventoryModifierResponse::default() } } + fn get_msmr(&self, perk: Perks, input: ModifierResponseInput) -> MovementSpeedModifierResponse { + if let Some(func) = self.msmr.get(&perk) { + func(input) + } else { + MovementSpeedModifierResponse::default() + } + } } fn add_sbr(perk: Perks, func: Box HashMap>) { @@ -1006,6 +1013,34 @@ pub fn get_velocity_modifier( velocity } +pub fn get_movement_modifier( + _perks: Vec, + _input_data: &CalculationInput, + _pvp: bool, + _cached_data: &mut HashMap, +) -> MovementSpeedModifierResponse { + let mut buffer = MovementSpeedModifierResponse::default(); + for perk in _perks { + let tmp = PERK_FUNC_MAP.with(|pers_modifier| { + let inp = ModifierResponseInput { + is_enhanced: perk.enhanced, + value: perk.value, + calc_data: &_input_data, + pvp: _pvp, + cached_data: _cached_data, + }; + pers_modifier.borrow().get_msmr(perk.hash.into(), inp) + }); + buffer.crouch_speed += tmp.crouch_speed; + buffer.extra_mobility += tmp.extra_mobility; + buffer.sprint_speed += tmp.sprint_speed; + buffer.base_jump_height_mult *= buffer.base_jump_height_mult; + buffer.slide_distance_mult *= buffer.slide_distance_mult; + buffer.strafe_speed_mult *= buffer.strafe_speed_mult; + } + buffer +} + impl Weapon { pub fn get_modifier_summary( &self, diff --git a/src/perks/perk_options_handler.rs b/src/perks/perk_options_handler.rs index 96ce7aee..bf54e299 100644 --- a/src/perks/perk_options_handler.rs +++ b/src/perks/perk_options_handler.rs @@ -87,7 +87,8 @@ fn hash_to_perk_option_data(_hash: u32) -> Option { //intrinsics Perks::RapidFireFrame => Some(PerkOptionData::toggle()), - + Perks::Lightweights => Some(PerkOptionData::static_()), + Perks::MidaSynergy => Some(PerkOptionData::toggle()), //armor //parts @@ -330,6 +331,7 @@ fn hash_to_perk_option_data(_hash: u32) -> Option { Perks::NobleRounds => Some(PerkOptionData::toggle()), Perks::MementoMori => Some(PerkOptionData::toggle()), Perks::RepulsorForce => Some(PerkOptionData::toggle()), + Perks::MidaMT => Some(PerkOptionData::static_()), Perks::DexterityMod => Some(PerkOptionData::stacking(3)), Perks::ReserveMod => Some(PerkOptionData::stacking(3)), @@ -340,8 +342,6 @@ fn hash_to_perk_option_data(_hash: u32) -> Option { Perks::OnYourMark => Some(PerkOptionData::stacking(3)), Perks::Frequency => Some(PerkOptionData::toggle()), Perks::Tempering => Some(PerkOptionData::toggle()), - Perks::DragonShadow => Some(PerkOptionData::toggle()), - Perks::OphidianAspect => Some(PerkOptionData::static_()), Perks::Hedrons => Some(PerkOptionData::toggle()), Perks::HeatRises => Some(PerkOptionData::toggle()), Perks::FlowState => Some(PerkOptionData::toggle()), @@ -355,6 +355,7 @@ fn hash_to_perk_option_data(_hash: u32) -> Option { Perks::BannerShield => Some(PerkOptionData::static_()), Perks::DeadFall => Some(PerkOptionData::toggle()), Perks::MoebiusQuiver => Some(PerkOptionData::toggle()), + Perks::Dilation => Some(PerkOptionData::toggle()), Perks::PathOfTheBurningSteps => Some(PerkOptionData::stacking(4)), Perks::MantleOfBattleHarmony => Some(PerkOptionData::static_()), @@ -385,10 +386,9 @@ fn hash_to_perk_option_data(_hash: u32) -> Option { Perks::AeonInsight => Some(PerkOptionData::toggle()), Perks::Felwinters => Some(PerkOptionData::toggle()), Perks::Transversives => Some(PerkOptionData::static_()), - Perks::MidaSynergy => Some(PerkOptionData::toggle()), Perks::Dunemarchers => Some(PerkOptionData::static_()), - Perks::Dilation => Some(PerkOptionData::toggle()), - Perks::Lightweights => Some(PerkOptionData::static_()), + Perks::DragonShadow => Some(PerkOptionData::toggle()), + Perks::OphidianAspect => Some(PerkOptionData::static_()), //misc Perks::UmbralSharpening => Some(PerkOptionData::stacking(5)), diff --git a/src/types/rs_types.rs b/src/types/rs_types.rs index 6b5f86f2..aef6182f 100644 --- a/src/types/rs_types.rs +++ b/src/types/rs_types.rs @@ -208,3 +208,23 @@ impl FiringResponse { self.pve_explosion_damage *= _rpl_mult * _gpl_mult * _pve_mult * _combatant_mult; } } + +pub struct MovementResponse { + sprint_speed: f64, + walk_speed: f64, + strafe_speed: f64, + crouch_speed: f64, + slide_distance: f64, +} + +impl Default for MovementResponse { + fn default() -> Self { + MovementResponse { + sprint_speed: 8.0, + walk_speed: 5.0, + strafe_speed: 4.25, + crouch_speed: 2.75, + slide_distance: 5.25, //recheck + } + } +} diff --git a/src/weapons/stat_calc.rs b/src/weapons/stat_calc.rs index 68328cfb..e8a6b3ba 100644 --- a/src/weapons/stat_calc.rs +++ b/src/weapons/stat_calc.rs @@ -5,18 +5,18 @@ use crate::{ d2_enums::{MetersPerSecond, Seconds, StatHashes, WeaponType}, perks::{ get_dmg_modifier, get_explosion_data, get_firing_modifier, get_flinch_modifier, - get_handling_modifier, get_magazine_modifier, get_range_modifier, get_reload_modifier, - get_reserve_modifier, get_velocity_modifier, + get_handling_modifier, get_magazine_modifier, get_movement_modifier, get_range_modifier, + get_reload_modifier, get_reserve_modifier, get_velocity_modifier, lib::{ CalculationInput, DamageModifierResponse, FiringModifierResponse, HandlingModifierResponse, InventoryModifierResponse, MagazineModifierResponse, - RangeModifierResponse, ReloadModifierResponse, + MovementSpeedModifierResponse, RangeModifierResponse, ReloadModifierResponse, }, Perks, }, types::rs_types::{ - AmmoFormula, AmmoResponse, FiringResponse, HandlingFormula, HandlingResponse, RangeFormula, - RangeResponse, ReloadFormula, ReloadResponse, + AmmoFormula, AmmoResponse, FiringResponse, HandlingFormula, HandlingResponse, + MovementResponse, RangeFormula, RangeResponse, ReloadFormula, ReloadResponse, }, }; @@ -221,7 +221,13 @@ impl AmmoFormula { let mut reserve_size = 1; if _calc_inv { - reserve_size = calc_reserves(raw_mag_size, _mag_stat as i32, inv_stat as i32, _inv_id, _inv_modifiers.inv_scale); + reserve_size = calc_reserves( + raw_mag_size, + _mag_stat as i32, + inv_stat as i32, + _inv_id, + _inv_modifiers.inv_scale, + ); } AmmoResponse { mag_size, @@ -594,3 +600,26 @@ impl Weapon { buffer } } + +impl Weapon { + pub fn calc_movement_speed( + &self, + _calc_input: Option, + _mobility: i32, + _pvp: bool, + _cached_data: Option<&mut HashMap>, + ) -> MovementResponse { + let mut buffer = MovementResponse::default(); + let modifiers; + if let Some(x) = _cached_data { + modifiers = + get_movement_modifier(self.list_perks(), &self.static_calc_input(), _pvp, x); + } else { + modifiers = MovementSpeedModifierResponse::default(); + } + let mobility = (_mobility + modifiers.extra_mobility).clamp(0, 100); + let percent = mobility/10; + + buffer + } +} From 79143eb4ee8ed1748f6b68821e8bcfa7cdd4df17 Mon Sep 17 00:00:00 2001 From: Harmon Brammer Date: Tue, 16 May 2023 20:55:41 -0400 Subject: [PATCH 14/15] pushing for crystal <3 --- src/perks/lib.rs | 2 ++ src/types/rs_types.rs | 10 +++++----- src/weapons/stat_calc.rs | 31 +++++++++++++++++++++++-------- 3 files changed, 30 insertions(+), 13 deletions(-) diff --git a/src/perks/lib.rs b/src/perks/lib.rs index a86c5346..9ed34974 100644 --- a/src/perks/lib.rs +++ b/src/perks/lib.rs @@ -400,6 +400,7 @@ pub struct MovementSpeedModifierResponse { pub base_jump_height_mult: f64, pub strafe_speed_mult: f64, pub extra_mobility: i32, + pub ads_scalar: f64, } impl Default for MovementSpeedModifierResponse { fn default() -> Self { @@ -410,6 +411,7 @@ impl Default for MovementSpeedModifierResponse { base_jump_height_mult: 1.0, strafe_speed_mult: 1.0, extra_mobility: 0, + ads_scalar: 1.0, } } } diff --git a/src/types/rs_types.rs b/src/types/rs_types.rs index aef6182f..6b6be5db 100644 --- a/src/types/rs_types.rs +++ b/src/types/rs_types.rs @@ -210,11 +210,11 @@ impl FiringResponse { } pub struct MovementResponse { - sprint_speed: f64, - walk_speed: f64, - strafe_speed: f64, - crouch_speed: f64, - slide_distance: f64, + pub sprint_speed: f64, + pub walk_speed: f64, + pub strafe_speed: f64, + pub crouch_speed: f64, + pub slide_distance: f64, } impl Default for MovementResponse { diff --git a/src/weapons/stat_calc.rs b/src/weapons/stat_calc.rs index e8a6b3ba..f126eb8e 100644 --- a/src/weapons/stat_calc.rs +++ b/src/weapons/stat_calc.rs @@ -607,18 +607,33 @@ impl Weapon { _calc_input: Option, _mobility: i32, _pvp: bool, + _ads: bool, _cached_data: Option<&mut HashMap>, ) -> MovementResponse { + let mut default_cached_data = HashMap::new(); + let cached_data = _cached_data.unwrap_or(&mut default_cached_data); let mut buffer = MovementResponse::default(); - let modifiers; - if let Some(x) = _cached_data { - modifiers = - get_movement_modifier(self.list_perks(), &self.static_calc_input(), _pvp, x); - } else { - modifiers = MovementSpeedModifierResponse::default(); - } + let modifiers = get_movement_modifier( + self.list_perks(), + &self.static_calc_input(), + _pvp, + cached_data, + ); + let mobility = (_mobility + modifiers.extra_mobility).clamp(0, 100); - let percent = mobility/10; + let ads_scalar = if _ads { + 0.75 * modifiers.ads_scalar + } else { + 1.0 + }; + + let scalar = 1.0 + (mobility / 10) as f64 * 0.04 * ads_scalar; + buffer.crouch_speed *= scalar; + buffer.strafe_speed *= scalar; + buffer.walk_speed *= scalar; + buffer.sprint_speed += modifiers.sprint_speed.clamp(0.0, 1.0); + + buffer } From 62fb8c828b72e76d89ccba52b7622b71bebca76b Mon Sep 17 00:00:00 2001 From: Crystal Date: Tue, 16 May 2023 18:39:17 -0700 Subject: [PATCH 15/15] added vigi wing and other perks --- src/perks/exotic_perks.rs | 30 ++++++++++++++++++++++++++++++ src/perks/mod.rs | 2 ++ src/perks/perk_options_handler.rs | 2 ++ src/perks/year_1_perks.rs | 15 +++++++++++++-- src/perks/year_3_perks.rs | 24 ++++++++++++++++++++++-- 5 files changed, 69 insertions(+), 4 deletions(-) diff --git a/src/perks/exotic_perks.rs b/src/perks/exotic_perks.rs index e66ffeed..23496a2b 100644 --- a/src/perks/exotic_perks.rs +++ b/src/perks/exotic_perks.rs @@ -959,4 +959,34 @@ pub fn exotic_perks() { }, ), ); + + add_msmr(Perks::HarshTruths, + Box::new(|_input: ModifierResponseInput| -> MovementSpeedModifierResponse { + if _input.value > 0 { + MovementSpeedModifierResponse { + sprint_speed: 0.5, + slide_distance_mult: 1.33, + extra_mobility: 20, + ..Default::default() + } + } + else { + MovementSpeedModifierResponse::default() + } + }), + ); + + add_rsmr(Perks::LastStand, + Box::new(|_input: ModifierResponseInput| -> ReloadModifierResponse { + if _input.value > 0 { + ReloadModifierResponse { + reload_stat_add: 30, + ..Default::default() + } + } + else { + ReloadModifierResponse::default() + } + }), + ); } diff --git a/src/perks/mod.rs b/src/perks/mod.rs index 3a1788df..af8c99c6 100644 --- a/src/perks/mod.rs +++ b/src/perks/mod.rs @@ -395,6 +395,8 @@ pub enum Perks { MarkovChain = 2814973067, MementoMori = 647617635, MidaMT = 1331482397, + HarshTruths = 2307143135, + LastStand = 4146729347, //energy exotic LagragianSight = 2881100038, diff --git a/src/perks/perk_options_handler.rs b/src/perks/perk_options_handler.rs index bf54e299..648cff85 100644 --- a/src/perks/perk_options_handler.rs +++ b/src/perks/perk_options_handler.rs @@ -332,6 +332,8 @@ fn hash_to_perk_option_data(_hash: u32) -> Option { Perks::MementoMori => Some(PerkOptionData::toggle()), Perks::RepulsorForce => Some(PerkOptionData::toggle()), Perks::MidaMT => Some(PerkOptionData::static_()), + Perks::HarshTruths => Some(PerkOptionData::toggle()), + Perks::LastStand => Some(PerkOptionData::toggle()), Perks::DexterityMod => Some(PerkOptionData::stacking(3)), Perks::ReserveMod => Some(PerkOptionData::stacking(3)), diff --git a/src/perks/year_1_perks.rs b/src/perks/year_1_perks.rs index 0e299947..408ed062 100644 --- a/src/perks/year_1_perks.rs +++ b/src/perks/year_1_perks.rs @@ -7,12 +7,12 @@ use crate::{ use super::{ add_dmr, add_edr, add_epr, add_fmr, add_hmr, add_imr, add_mmr, add_rmr, add_rr, add_rsmr, - add_sbr, add_vmr, clamp, lerp, + add_sbr, add_vmr, add_msmr, clamp, lerp, lib::{ CalculationInput, DamageModifierResponse, ExplosivePercentResponse, ExtraDamageResponse, FiringModifierResponse, HandlingModifierResponse, InventoryModifierResponse, MagazineModifierResponse, RangeModifierResponse, RefundResponse, ReloadModifierResponse, - VelocityModifierResponse, + VelocityModifierResponse, MovementSpeedModifierResponse, }, ModifierResponseInput, Perks, }; @@ -826,4 +826,15 @@ pub fn year_1_perks() { }, ), ); + + add_msmr( + Perks::MovingTarget, + Box::new(|_input: ModifierResponseInput| -> MovementSpeedModifierResponse { + MovementSpeedModifierResponse { + ads_scalar: 1.025, + ..Default::default() + } + }), + ); + } diff --git a/src/perks/year_3_perks.rs b/src/perks/year_3_perks.rs index 77d02043..1b63bbfd 100644 --- a/src/perks/year_3_perks.rs +++ b/src/perks/year_3_perks.rs @@ -6,11 +6,11 @@ use crate::{ }; use super::{ - add_dmr, add_epr, add_fmr, add_hmr, add_mmr, add_rmr, add_rsmr, add_sbr, add_vmr, + add_dmr, add_epr, add_fmr, add_hmr, add_mmr, add_rmr, add_rsmr, add_sbr, add_vmr, add_msmr, lib::{ CalculationInput, DamageModifierResponse, ExtraDamageResponse, FiringModifierResponse, HandlingModifierResponse, MagazineModifierResponse, RangeModifierResponse, RefundResponse, - ReloadModifierResponse, + ReloadModifierResponse, MovementSpeedModifierResponse, }, ModifierResponseInput, Perks, }; @@ -79,6 +79,16 @@ pub fn year_3_perks() { }), ); + add_msmr( + Perks::ElementalCapacitor, + Box::new(|_input: ModifierResponseInput| -> MovementSpeedModifierResponse { + MovementSpeedModifierResponse { + ads_scalar: 1.05, + ..Default::default() + } + }), + ); + add_sbr( Perks::KillingWind, Box::new(|_input: ModifierResponseInput| -> HashMap { @@ -128,6 +138,16 @@ pub fn year_3_perks() { ), ); + add_msmr( + Perks::KillingWind, + Box::new(|_input: ModifierResponseInput| -> MovementSpeedModifierResponse { + MovementSpeedModifierResponse { + extra_mobility: 50, + ..Default::default() + } + }), + ); + add_dmr( Perks::LastingImpression, Box::new(|_input: ModifierResponseInput| -> DamageModifierResponse {