From c6078e1dc5396b1691fbbeea7c4c27952bedfb1f Mon Sep 17 00:00:00 2001 From: andromeda Date: Mon, 21 Aug 2023 16:58:56 -0400 Subject: [PATCH 1/6] chore: add toggle_off and reorganize perks --- src/perks/perk_options_handler.rs | 292 +++++++++++++++--------------- 1 file changed, 150 insertions(+), 142 deletions(-) diff --git a/src/perks/perk_options_handler.rs b/src/perks/perk_options_handler.rs index a71b36bc..c853bbee 100644 --- a/src/perks/perk_options_handler.rs +++ b/src/perks/perk_options_handler.rs @@ -32,13 +32,20 @@ impl PerkOptionData { option_type: PerkValueVariant::STATIC, } } - pub fn toggle() -> PerkOptionData { + pub fn toggled_off() -> PerkOptionData { PerkOptionData { stacks: (0, 1), options: vec![], option_type: PerkValueVariant::TOGGLE, } } + pub fn toggled_on() -> PerkOptionData { + PerkOptionData { + stacks: (1, 0), + options: vec![], + option_type: PerkValueVariant::TOGGLE, + } + } pub fn stacking(_stacks: u32) -> PerkOptionData { PerkOptionData { stacks: (0, _stacks), @@ -84,19 +91,40 @@ fn hash_to_perk_option_data(_hash: u32) -> Option { Perks::BuiltIn => None, Perks::RallyBarricade => Some(PerkOptionData::static_()), Perks::EmpRift => Some(PerkOptionData::static_()), + Perks::OnYourMark => Some(PerkOptionData::stacking(3)), + Perks::Frequency => Some(PerkOptionData::toggled_off()), + Perks::Tempering => Some(PerkOptionData::toggled_off()), + Perks::Hedrons => Some(PerkOptionData::toggled_off()), + Perks::HeatRises => Some(PerkOptionData::toggled_off()), + Perks::FlowState => Some(PerkOptionData::toggled_off()), + Perks::ThreadOfAscent => Some(PerkOptionData::toggled_off()), + Perks::WellOfRadiance => Some(PerkOptionData::static_()), + Perks::Amplified => Some(PerkOptionData::static_()), + Perks::Radiant => Some(PerkOptionData::static_()), + Perks::Weaken => Some(PerkOptionData::static_()), + Perks::WardOfDawn => Some(PerkOptionData::static_()), + Perks::BannerShield => Some(PerkOptionData::static_()), + Perks::DeadFall => Some(PerkOptionData::static_()), + Perks::MoebiusQuiver => Some(PerkOptionData::static_()), //intrinsics - Perks::RapidFireFrame => Some(PerkOptionData::toggle()), + Perks::RapidFireFrame => Some(PerkOptionData::toggled_off()), Perks::PrecisionFrame => Some(PerkOptionData::static_()), //armor + Perks::DexterityMod => Some(PerkOptionData::stacking(3)), + Perks::ReserveMod => Some(PerkOptionData::stacking(3)), + Perks::LoaderMod => Some(PerkOptionData::stacking(3)), + Perks::TargetingMod => Some(PerkOptionData::stacking(3)), + Perks::UnflinchingMod => Some(PerkOptionData::stacking(3)), + Perks::SurgeMod => Some(PerkOptionData::stacking(3)), //parts Perks::ImpactCasing => Some(PerkOptionData::static_()), Perks::SwapMag => Some(PerkOptionData::static_()), Perks::FullChoke => Some(PerkOptionData::static_()), Perks::SpikeGrenades => Some(PerkOptionData::static_()), - Perks::AlloyMag => Some(PerkOptionData::toggle()), + Perks::AlloyMag => Some(PerkOptionData::toggled_off()), Perks::LiquidCoils => Some(PerkOptionData::static_()), Perks::AcceleratedCoils => Some(PerkOptionData::static_()), Perks::ChargetimeMW => Some(PerkOptionData::static_()), @@ -115,65 +143,65 @@ fn hash_to_perk_option_data(_hash: u32) -> Option { Perks::MajorSpec => Some(PerkOptionData::static_()), Perks::MinorSpec => Some(PerkOptionData::static_()), Perks::BigOnesSpec => Some(PerkOptionData::static_()), - Perks::TakenSpec => Some(PerkOptionData::toggle()), + Perks::TakenSpec => Some(PerkOptionData::toggled_off()), Perks::FreehandGrip => Some(PerkOptionData::static_()), //origin | year 5+ - Perks::VeistStinger => Some(PerkOptionData::toggle()), - Perks::HakkeBreach => Some(PerkOptionData::toggle()), - Perks::Alacrity => Some(PerkOptionData::toggle()), - Perks::FluidDynamics => Some(PerkOptionData::toggle()), - Perks::QuietMoment => Some(PerkOptionData::toggle()), - Perks::SurosSynergy => Some(PerkOptionData::toggle()), + Perks::VeistStinger => Some(PerkOptionData::toggled_off()), + Perks::HakkeBreach => Some(PerkOptionData::toggled_off()), + Perks::Alacrity => Some(PerkOptionData::toggled_off()), + Perks::FluidDynamics => Some(PerkOptionData::toggled_off()), + Perks::QuietMoment => Some(PerkOptionData::toggled_off()), + Perks::SurosSynergy => Some(PerkOptionData::toggled_off()), Perks::BitterSpite => Some(PerkOptionData::stacking(5)), Perks::RunnethOver => Some(PerkOptionData::stacking(5)), - Perks::HotSwap => Some(PerkOptionData::toggle()), - Perks::RightHook => Some(PerkOptionData::toggle()), - Perks::Ambush => Some(PerkOptionData::toggle()), - Perks::TexBalancedStock => Some(PerkOptionData::toggle()), - Perks::SearchParty => Some(PerkOptionData::toggle()), + Perks::HotSwap => Some(PerkOptionData::toggled_off()), + Perks::RightHook => Some(PerkOptionData::toggled_off()), + Perks::Ambush => Some(PerkOptionData::toggled_off()), + Perks::TexBalancedStock => Some(PerkOptionData::toggled_off()), + Perks::SearchParty => Some(PerkOptionData::toggled_off()), Perks::HarmonicResonance => Some(PerkOptionData::stacking(2)), Perks::FieldTested => Some(PerkOptionData::stacking(5)), //season 1 | year 1 - Perks::KillClip => Some(PerkOptionData::toggle()), - Perks::Outlaw => Some(PerkOptionData::toggle()), - Perks::BackupPlan => Some(PerkOptionData::toggle()), - Perks::FieldPrep => Some(PerkOptionData::toggle()), + Perks::KillClip => Some(PerkOptionData::toggled_off()), + Perks::Outlaw => Some(PerkOptionData::toggled_off()), + Perks::BackupPlan => Some(PerkOptionData::toggled_off()), + Perks::FieldPrep => Some(PerkOptionData::toggled_off()), Perks::Rampage => Some(PerkOptionData::stacking(3)), - Perks::OpeningShot => Some(PerkOptionData::toggle()), - Perks::MovingTarget => Some(PerkOptionData::toggle()), + Perks::OpeningShot => Some(PerkOptionData::toggled_off()), + Perks::MovingTarget => Some(PerkOptionData::toggled_off()), Perks::AmbitiousAssassin => Some(PerkOptionData::stacking(15)), Perks::ClusterBomb => Some(PerkOptionData::static_()), Perks::ExplosivePayload => Some(PerkOptionData::static_()), - Perks::FirmlyPlanted => Some(PerkOptionData::toggle()), + Perks::FirmlyPlanted => Some(PerkOptionData::toggled_off()), Perks::FullAutoTrigger => Some(PerkOptionData::static_()), Perks::HeadSeeker => Some(PerkOptionData::static_()), Perks::HighImpactReserves => Some(PerkOptionData::static_()), - Perks::HipFireGrip => Some(PerkOptionData::toggle()), + Perks::HipFireGrip => Some(PerkOptionData::toggled_off()), Perks::Snapshot => Some(PerkOptionData::static_()), - Perks::TapTheTrigger => Some(PerkOptionData::toggle()), - Perks::SlideWays => Some(PerkOptionData::toggle()), - Perks::QuickDraw => Some(PerkOptionData::toggle()), + Perks::TapTheTrigger => Some(PerkOptionData::toggled_off()), + Perks::SlideWays => Some(PerkOptionData::toggled_off()), + Perks::QuickDraw => Some(PerkOptionData::toggled_off()), Perks::TimedPayload => Some(PerkOptionData::static_()), Perks::ThreatDetector => Some(PerkOptionData::stacking(2)), - Perks::SlideShot => Some(PerkOptionData::toggle()), + Perks::SlideShot => Some(PerkOptionData::toggled_off()), Perks::TripleTap => Some(PerkOptionData::static_()), - Perks::UnderPressure => Some(PerkOptionData::toggle()), - Perks::PulseMonitor => Some(PerkOptionData::toggle()), + Perks::UnderPressure => Some(PerkOptionData::toggled_off()), + Perks::PulseMonitor => Some(PerkOptionData::toggled_off()), //season 2 | year 1 //lmao bozo //season 3 | year 1 Perks::RangeFinder => Some(PerkOptionData::static_()), - Perks::DisruptionBreak => Some(PerkOptionData::toggle()), - Perks::TrenchBarrel => Some(PerkOptionData::toggle()), - Perks::Desperado => Some(PerkOptionData::toggle()), - Perks::BoxBreathing => Some(PerkOptionData::toggle()), + Perks::DisruptionBreak => Some(PerkOptionData::toggled_off()), + Perks::TrenchBarrel => Some(PerkOptionData::toggled_off()), + Perks::Desperado => Some(PerkOptionData::toggled_off()), + Perks::BoxBreathing => Some(PerkOptionData::toggled_off()), //season 4 | year 2 - Perks::ArchersTempo => Some(PerkOptionData::toggle()), + Perks::ArchersTempo => Some(PerkOptionData::toggled_off()), Perks::ExplosiveHead => Some(PerkOptionData::static_()), Perks::FeedingFrenzy => Some(PerkOptionData::stacking(5)), Perks::FourthTimesTheCharm => Some(PerkOptionData::static_()), @@ -181,23 +209,23 @@ fn hash_to_perk_option_data(_hash: u32) -> Option { //season 5 | year 2 Perks::ResevoirBurst => Some(PerkOptionData::static_()), - Perks::Surrounded => Some(PerkOptionData::toggle()), + Perks::Surrounded => Some(PerkOptionData::toggled_off()), Perks::AirAssault => Some(PerkOptionData::stacking(2)), //season 6 | year 2 - Perks::FiringLine => Some(PerkOptionData::toggle()), - Perks::FullCourt => Some(PerkOptionData::toggle()), + Perks::FiringLine => Some(PerkOptionData::toggled_off()), + Perks::FullCourt => Some(PerkOptionData::toggled_off()), Perks::KillingTally => Some(PerkOptionData::stacking(3)), // Perks::Demolitionist => Some(PerkOptionData::options(vec!["Once", "Every 3s"])), Perks::MultikillClip => Some(PerkOptionData::stacking(3)), Perks::Swashbuckler => Some(PerkOptionData::stacking(5)), - Perks::OverFlow => Some(PerkOptionData::toggle()), + Perks::OverFlow => Some(PerkOptionData::toggled_off()), //season 7 | year 2 - Perks::UnderDog => Some(PerkOptionData::toggle()), - Perks::ExplosiveLight => Some(PerkOptionData::toggle()), - Perks::EyeOfTheStorm => Some(PerkOptionData::toggle()), - Perks::NoDistractions => Some(PerkOptionData::toggle()), + Perks::UnderDog => Some(PerkOptionData::toggled_off()), + Perks::ExplosiveLight => Some(PerkOptionData::toggled_off()), + Perks::EyeOfTheStorm => Some(PerkOptionData::toggled_off()), + Perks::NoDistractions => Some(PerkOptionData::toggled_off()), //season 8 | year 3 //TODO @@ -213,200 +241,180 @@ fn hash_to_perk_option_data(_hash: u32) -> Option { //bad season lmao //season 11 | year 3 - Perks::KillingWind => Some(PerkOptionData::toggle()), + Perks::KillingWind => Some(PerkOptionData::toggled_off()), //season 12 | year 4 - Perks::DualLoader => Some(PerkOptionData::toggle()), - Perks::OneForAll => Some(PerkOptionData::toggle()), + Perks::DualLoader => Some(PerkOptionData::toggled_off()), + Perks::OneForAll => Some(PerkOptionData::toggled_off()), Perks::Recombination => Some(PerkOptionData::stacking(10)), - Perks::Reconstruction => Some(PerkOptionData::toggle()), + Perks::Reconstruction => Some(PerkOptionData::toggled_off()), Perks::Surplus => Some(PerkOptionData::stacking(3)), //season 13 | year 4 Perks::ImpulseAmplifier => Some(PerkOptionData::static_()), - Perks::Frenzy => Some(PerkOptionData::toggle()), + Perks::Frenzy => Some(PerkOptionData::toggled_off()), Perks::LastingImpression => Some(PerkOptionData::static_()), - Perks::KickStart => Some(PerkOptionData::toggle()), + Perks::KickStart => Some(PerkOptionData::toggled_off()), //season 14 | year 4 - Perks::Cornered => Some(PerkOptionData::toggle()), + Perks::Cornered => Some(PerkOptionData::toggled_off()), Perks::AdrenalineJunkie => Some(PerkOptionData::stacking(5)), Perks::RewindRounds => Some(PerkOptionData::static_()), Perks::HeatingUp => Some(PerkOptionData::stacking(2)), - Perks::FireFly => Some(PerkOptionData::toggle()), - Perks::DangerZone => Some(PerkOptionData::toggle()), - Perks::TunnelVision => Some(PerkOptionData::toggle()), + Perks::FireFly => Some(PerkOptionData::toggled_off()), + Perks::DangerZone => Some(PerkOptionData::toggled_off()), + Perks::TunnelVision => Some(PerkOptionData::toggled_off()), //season 15 | year 4 Perks::Encore => Some(PerkOptionData::stacking(4)), - Perks::Ensemble => Some(PerkOptionData::toggle()), + Perks::Ensemble => Some(PerkOptionData::toggled_off()), Perks::GoldenTricorn => Some(PerkOptionData::stacking(2)), - Perks::Harmony => Some(PerkOptionData::toggle()), + Perks::Harmony => Some(PerkOptionData::toggled_off()), Perks::PerpetualMotion => Some(PerkOptionData::stacking(2)), - Perks::Adagio => Some(PerkOptionData::toggle()), + Perks::Adagio => Some(PerkOptionData::toggled_off()), //season 16 | year 5 - Perks::BaitAndSwitch => Some(PerkOptionData::toggle()), - Perks::CompulsiveReloader => Some(PerkOptionData::toggle()), - Perks::FocusedFury => Some(PerkOptionData::toggle()), + Perks::BaitAndSwitch => Some(PerkOptionData::toggled_off()), + Perks::CompulsiveReloader => Some(PerkOptionData::toggled_off()), + Perks::FocusedFury => Some(PerkOptionData::toggled_off()), Perks::ChillClip => Some(PerkOptionData::static_()), Perks::SleightOfHand => Some(PerkOptionData::stacking(3)), - Perks::StatsForAll => Some(PerkOptionData::toggle()), - Perks::SteadyHands => Some(PerkOptionData::toggle()), - Perks::SuccesfulWarmup => Some(PerkOptionData::toggle()), - Perks::UnstoppableForce => Some(PerkOptionData::toggle()), + Perks::StatsForAll => Some(PerkOptionData::toggled_off()), + Perks::SteadyHands => Some(PerkOptionData::toggled_off()), + Perks::SuccesfulWarmup => Some(PerkOptionData::toggled_off()), + Perks::UnstoppableForce => Some(PerkOptionData::toggled_off()), //season 17 | year 5 - Perks::FragileFocus => Some(PerkOptionData::toggle()), + Perks::FragileFocus => Some(PerkOptionData::toggled_off()), Perks::WellRounded => Some(PerkOptionData::stacking(2)), //season 18 | year 5 Perks::GutShot => Some(PerkOptionData::static_()), - Perks::Pugilist => Some(PerkOptionData::toggle()), + Perks::Pugilist => Some(PerkOptionData::toggled_off()), Perks::Slickdraw => Some(PerkOptionData::static_()), Perks::OverUnder => Some(PerkOptionData::static_()), //season 19 | year 5 - Perks::CascadePoint => Some(PerkOptionData::toggle()), - Perks::CloseToMelee => Some(PerkOptionData::toggle()), - Perks::OffhandStrike => Some(PerkOptionData::toggle()), - Perks::PerfectFloat => Some(PerkOptionData::toggle()), - Perks::ShotSwap => Some(PerkOptionData::toggle()), + Perks::CascadePoint => Some(PerkOptionData::toggled_off()), + Perks::CloseToMelee => Some(PerkOptionData::toggled_off()), + Perks::OffhandStrike => Some(PerkOptionData::toggled_off()), + Perks::PerfectFloat => Some(PerkOptionData::toggled_off()), + Perks::ShotSwap => Some(PerkOptionData::toggled_off()), Perks::TargetLock => Some(PerkOptionData::static_()), //season 20 | year 6 - Perks::KeepAway => Some(PerkOptionData::toggle()), - Perks::ParacausalAffinity => Some(PerkOptionData::toggle()), + Perks::KeepAway => Some(PerkOptionData::toggled_off()), + Perks::ParacausalAffinity => Some(PerkOptionData::toggled_off()), Perks::EnviousAssasin => Some(PerkOptionData::stacking(15)), //season 21 | year 6 - Perks::CollectiveAction => Some(PerkOptionData::toggle()), + Perks::CollectiveAction => Some(PerkOptionData::toggled_off()), Perks::Bipod => Some(PerkOptionData::static_()), - Perks::ControlledBurst => Some(PerkOptionData::toggle()), - Perks::InvisibleHand => Some(PerkOptionData::toggle()), - Perks::UnsatedHunger => Some(PerkOptionData::toggle()), - Perks::Discord => Some(PerkOptionData::toggle()), + Perks::ControlledBurst => Some(PerkOptionData::toggled_off()), + Perks::InvisibleHand => Some(PerkOptionData::toggled_off()), + Perks::UnsatedHunger => Some(PerkOptionData::toggled_off()), + Perks::Discord => Some(PerkOptionData::toggled_off()), - //exotics + //exotic weapon Perks::CranialSpike => Some(PerkOptionData::stacking(5)), Perks::DarkForgedTrigger => Some(PerkOptionData::options_raw(["Hip-Fire", "ADS"].to_vec())), Perks::AgersCall => Some(PerkOptionData::static_()), - Perks::LagragianSight => Some(PerkOptionData::toggle()), + Perks::LagragianSight => Some(PerkOptionData::toggled_off()), Perks::StringofCurses => Some(PerkOptionData::stacking(5)), Perks::WormsHunger => Some(PerkOptionData::stacking(20)), - Perks::WormByproduct => Some(PerkOptionData::toggle()), + Perks::WormByproduct => Some(PerkOptionData::toggled_off()), Perks::RocketTracers => Some(PerkOptionData::static_()), Perks::ParacausalShot => Some(PerkOptionData::stacking(7)), Perks::CorruptionSpreads => Some(PerkOptionData::static_()), - Perks::TimeSlip => Some(PerkOptionData::toggle()), - Perks::ToM => Some(PerkOptionData::toggle()), - Perks::IgnitionTrigger => Some(PerkOptionData::toggle()), - Perks::GuidanceRing => Some(PerkOptionData::toggle()), + Perks::TimeSlip => Some(PerkOptionData::toggled_off()), + Perks::ToM => Some(PerkOptionData::toggled_off()), + Perks::IgnitionTrigger => Some(PerkOptionData::toggled_off()), + Perks::GuidanceRing => Some(PerkOptionData::toggled_off()), Perks::ConserveMomentum => Some(PerkOptionData::stacking(15)), - Perks::Impetus => Some(PerkOptionData::toggle()), - Perks::FirstGlance => Some(PerkOptionData::toggle()), + Perks::Impetus => Some(PerkOptionData::toggled_off()), + Perks::FirstGlance => Some(PerkOptionData::toggled_off()), Perks::PerfectFith => Some(PerkOptionData::static_()), Perks::Broadside => Some(PerkOptionData::stacking(4)), - Perks::FourthHorsemanCatalyst => Some(PerkOptionData::toggle()), + Perks::FourthHorsemanCatalyst => Some(PerkOptionData::toggled_off()), Perks::Stormbringer => Some(PerkOptionData::static_()), Perks::PrismaticInferno => Some(PerkOptionData::static_()), - Perks::ReignHavoc => Some(PerkOptionData::toggle()), - Perks::WhisperCatalyst => Some(PerkOptionData::toggle()), - Perks::Roadborn => Some(PerkOptionData::toggle()), - Perks::SwoopingTalons => Some(PerkOptionData::toggle()), - Perks::CalculatedBalance => Some(PerkOptionData::toggle()), - Perks::RavenousBeast => Some(PerkOptionData::toggle()), + Perks::ReignHavoc => Some(PerkOptionData::toggled_off()), + Perks::WhisperCatalyst => Some(PerkOptionData::toggled_off()), + Perks::Roadborn => Some(PerkOptionData::toggled_off()), + Perks::SwoopingTalons => Some(PerkOptionData::toggled_off()), + Perks::CalculatedBalance => Some(PerkOptionData::toggled_off()), + Perks::RavenousBeast => Some(PerkOptionData::toggled_off()), Perks::LordOfWolvesCatalyst => Some(PerkOptionData::static_()), - Perks::ReleaseTheWolves => Some(PerkOptionData::toggle()), + Perks::ReleaseTheWolves => Some(PerkOptionData::toggled_off()), Perks::Fundamentals => Some(PerkOptionData::options(["Void", "Solar", "Arc"].to_vec())), - Perks::ThinTheHerd => Some(PerkOptionData::toggle()), - Perks::Chimera => Some(PerkOptionData::toggle()), + Perks::ThinTheHerd => Some(PerkOptionData::toggled_off()), + Perks::Chimera => Some(PerkOptionData::toggled_off()), Perks::FateOfAllFools => Some(PerkOptionData::stacking(3)), Perks::HonedEdge => Some(PerkOptionData::stacking_min(4, 1)), Perks::TakenPredator => Some(PerkOptionData::options( ["Taken", "Witherhoard", "Both"].to_vec(), )), Perks::MarkovChain => Some(PerkOptionData::stacking(5)), - Perks::StormAndStress => Some(PerkOptionData::toggle()), - Perks::DualSpeedReceiver => Some(PerkOptionData::toggle()), + Perks::StormAndStress => Some(PerkOptionData::toggled_off()), + Perks::DualSpeedReceiver => Some(PerkOptionData::toggled_off()), Perks::ExplosiveShadow => Some(PerkOptionData::static_()), Perks::SurosLegacy => Some(PerkOptionData::static_()), Perks::SpinningUp => Some(PerkOptionData::stacking(2)), - Perks::DarkDescent => Some(PerkOptionData::toggle()), + Perks::DarkDescent => Some(PerkOptionData::toggled_off()), Perks::SleeperCatalyst => Some(PerkOptionData::static_()), - Perks::TargetAquired => Some(PerkOptionData::toggle()), + Perks::TargetAquired => Some(PerkOptionData::toggled_off()), Perks::RatPack => Some(PerkOptionData::stacking_min(5, 1)), Perks::HuntersTrance => Some(PerkOptionData::static_()), Perks::RideTheBull => Some(PerkOptionData::stacking(2)), - Perks::NobleRounds => Some(PerkOptionData::toggle()), - Perks::MementoMori => Some(PerkOptionData::toggle()), + Perks::NobleRounds => Some(PerkOptionData::toggled_off()), + Perks::MementoMori => Some(PerkOptionData::toggled_off()), Perks::TractorCannon => Some(PerkOptionData::static_()), Perks::HarmonicLaser => Some(PerkOptionData::stacking(2)), - Perks::AgersScepterCatalyst => Some(PerkOptionData::toggle()), - Perks::ColdFusion => Some(PerkOptionData::toggle()), + Perks::AgersScepterCatalyst => Some(PerkOptionData::toggled_off()), + Perks::ColdFusion => Some(PerkOptionData::toggled_off()), Perks::BlackHole => Some(PerkOptionData::static_()), - Perks::TemporalUnlimiter => Some(PerkOptionData::toggle()), + Perks::TemporalUnlimiter => Some(PerkOptionData::toggled_off()), Perks::MarksmanSights => Some(PerkOptionData::static_()), - Perks::DexterityMod => Some(PerkOptionData::stacking(3)), - Perks::ReserveMod => Some(PerkOptionData::stacking(3)), - Perks::LoaderMod => Some(PerkOptionData::stacking(3)), - Perks::TargetingMod => Some(PerkOptionData::stacking(3)), - Perks::UnflinchingMod => Some(PerkOptionData::stacking(3)), - Perks::SurgeMod => Some(PerkOptionData::stacking(3)), - Perks::OnYourMark => Some(PerkOptionData::stacking(3)), - Perks::Frequency => Some(PerkOptionData::toggle()), - Perks::Tempering => Some(PerkOptionData::toggle()), - Perks::Hedrons => Some(PerkOptionData::toggle()), - Perks::HeatRises => Some(PerkOptionData::toggle()), - Perks::FlowState => Some(PerkOptionData::toggle()), - Perks::ThreadOfAscent => Some(PerkOptionData::toggle()), - Perks::WellOfRadiance => Some(PerkOptionData::static_()), - Perks::Amplified => Some(PerkOptionData::static_()), - Perks::Radiant => Some(PerkOptionData::static_()), - Perks::Weaken => Some(PerkOptionData::static_()), - Perks::WardOfDawn => Some(PerkOptionData::static_()), - Perks::BannerShield => Some(PerkOptionData::static_()), - Perks::DeadFall => Some(PerkOptionData::static_()), - Perks::MoebiusQuiver => Some(PerkOptionData::static_()), Perks::Broadhead => Some(PerkOptionData::static_()), - Perks::HuntersTrace => Some(PerkOptionData::toggle()), + Perks::HuntersTrace => Some(PerkOptionData::toggled_off()), - Perks::DragonShadow => Some(PerkOptionData::toggle()), + //exotic armor + Perks::DragonShadow => Some(PerkOptionData::toggled_off()), Perks::OphidianAspect => Some(PerkOptionData::static_()), - Perks::TomeOfDawn => Some(PerkOptionData::toggle()), + Perks::TomeOfDawn => Some(PerkOptionData::toggled_off()), Perks::PathOfTheBurningSteps => Some(PerkOptionData::stacking(4)), Perks::MantleOfBattleHarmony => Some(PerkOptionData::static_()), - Perks::MaskOfBakris => Some(PerkOptionData::toggle()), - Perks::BallindorseWrathweavers => Some(PerkOptionData::toggle()), + Perks::MaskOfBakris => Some(PerkOptionData::toggled_off()), + Perks::BallindorseWrathweavers => Some(PerkOptionData::toggled_off()), Perks::LunaFaction => Some(PerkOptionData::options( ["Heal Rift", "Empowering Rift / Well"].to_vec(), )), - Perks::Foetracer => Some(PerkOptionData::toggle()), - Perks::MechaneersTricksleeves => Some(PerkOptionData::toggle()), + Perks::Foetracer => Some(PerkOptionData::toggled_off()), + Perks::MechaneersTricksleeves => Some(PerkOptionData::toggled_off()), Perks::Oathkeeper => Some(PerkOptionData::static_()), - Perks::SealedAhamkaraGrasps => Some(PerkOptionData::toggle()), + Perks::SealedAhamkaraGrasps => Some(PerkOptionData::toggled_off()), Perks::LuckyPants => Some(PerkOptionData::stacking(10)), - Perks::NoBackupPlans => Some(PerkOptionData::toggle()), + Perks::NoBackupPlans => Some(PerkOptionData::toggled_off()), Perks::ActiumWarRig => Some(PerkOptionData::static_()), Perks::HallowfireHeart => Some(PerkOptionData::static_()), - Perks::LionRampart => Some(PerkOptionData::toggle()), + Perks::LionRampart => Some(PerkOptionData::toggled_off()), Perks::Peacekeepers => Some(PerkOptionData::static_()), Perks::EyeOfAnotherWorld => Some(PerkOptionData::static_()), - Perks::AstrocyteVerse => Some(PerkOptionData::toggle()), + Perks::AstrocyteVerse => Some(PerkOptionData::toggled_off()), Perks::NecroticGrips => Some(PerkOptionData::static_()), Perks::BootsOfTheAssembler => Some(PerkOptionData::static_()), Perks::RainOfFire => Some(PerkOptionData::static_()), Perks::SpeedloaderSlacks => Some(PerkOptionData::stacking(5)), Perks::PeregrineGreaves => Some(PerkOptionData::static_()), - Perks::Gyrfalcon => Some(PerkOptionData::toggle()), - Perks::AeonInsight => Some(PerkOptionData::toggle()), - Perks::Felwinters => Some(PerkOptionData::toggle()), - Perks::SanguineAlchemy => Some(PerkOptionData::toggle()), - Perks::TritonVice => Some(PerkOptionData::toggle()), + Perks::Gyrfalcon => Some(PerkOptionData::toggled_off()), + Perks::AeonInsight => Some(PerkOptionData::toggled_off()), + Perks::Felwinters => Some(PerkOptionData::toggled_off()), + Perks::SanguineAlchemy => Some(PerkOptionData::toggled_off()), + Perks::TritonVice => Some(PerkOptionData::toggled_off()), //misc Perks::UmbralSharpening => Some(PerkOptionData::stacking(5)), - Perks::EnhancedScannerAugment => Some(PerkOptionData::toggle()), + Perks::EnhancedScannerAugment => Some(PerkOptionData::toggled_off()), Perks::Demolitionist => Some(PerkOptionData::static_()), Perks::FullStop => Some(PerkOptionData::static_()), Perks::HakkeHeavyBurst => Some(PerkOptionData::static_()), From 3e1d577ab6714b26f7362b7d0a6682771aa46b1b Mon Sep 17 00:00:00 2001 From: andromeda Date: Mon, 21 Aug 2023 17:33:00 -0400 Subject: [PATCH 2/6] chore: update static abilities and armor --- src/perks/perk_options_handler.rs | 95 +++++++++++++++---------------- 1 file changed, 47 insertions(+), 48 deletions(-) diff --git a/src/perks/perk_options_handler.rs b/src/perks/perk_options_handler.rs index c853bbee..a6813ada 100644 --- a/src/perks/perk_options_handler.rs +++ b/src/perks/perk_options_handler.rs @@ -89,23 +89,23 @@ fn hash_to_perk_option_data(_hash: u32) -> Option { match perk { //Meta perks Perks::BuiltIn => None, - Perks::RallyBarricade => Some(PerkOptionData::static_()), - Perks::EmpRift => Some(PerkOptionData::static_()), + Perks::RallyBarricade => Some(PerkOptionData::toggled_on()), + Perks::EmpRift => Some(PerkOptionData::toggled_on()), Perks::OnYourMark => Some(PerkOptionData::stacking(3)), - Perks::Frequency => Some(PerkOptionData::toggled_off()), - Perks::Tempering => Some(PerkOptionData::toggled_off()), - Perks::Hedrons => Some(PerkOptionData::toggled_off()), - Perks::HeatRises => Some(PerkOptionData::toggled_off()), - Perks::FlowState => Some(PerkOptionData::toggled_off()), - Perks::ThreadOfAscent => Some(PerkOptionData::toggled_off()), - Perks::WellOfRadiance => Some(PerkOptionData::static_()), - Perks::Amplified => Some(PerkOptionData::static_()), - Perks::Radiant => Some(PerkOptionData::static_()), - Perks::Weaken => Some(PerkOptionData::static_()), - Perks::WardOfDawn => Some(PerkOptionData::static_()), - Perks::BannerShield => Some(PerkOptionData::static_()), - Perks::DeadFall => Some(PerkOptionData::static_()), - Perks::MoebiusQuiver => Some(PerkOptionData::static_()), + Perks::Frequency => Some(PerkOptionData::toggled_on()), + Perks::Tempering => Some(PerkOptionData::toggled_on()), + Perks::Hedrons => Some(PerkOptionData::toggled_on()), + Perks::HeatRises => Some(PerkOptionData::toggled_on()), + Perks::FlowState => Some(PerkOptionData::toggled_on()), + Perks::ThreadOfAscent => Some(PerkOptionData::toggled_on()), + Perks::WellOfRadiance => Some(PerkOptionData::toggled_on()), + Perks::Amplified => Some(PerkOptionData::toggled_on()), + Perks::Radiant => Some(PerkOptionData::toggled_on()), + Perks::Weaken => Some(PerkOptionData::toggled_on()), + Perks::WardOfDawn => Some(PerkOptionData::toggled_on()), + Perks::BannerShield => Some(PerkOptionData::toggled_on()), + Perks::DeadFall => Some(PerkOptionData::toggled_on()), + Perks::MoebiusQuiver => Some(PerkOptionData::toggled_on()), //intrinsics Perks::RapidFireFrame => Some(PerkOptionData::toggled_off()), @@ -118,6 +118,8 @@ fn hash_to_perk_option_data(_hash: u32) -> Option { Perks::TargetingMod => Some(PerkOptionData::stacking(3)), Perks::UnflinchingMod => Some(PerkOptionData::stacking(3)), Perks::SurgeMod => Some(PerkOptionData::stacking(3)), + Perks::UmbralSharpening => Some(PerkOptionData::stacking(5)), + Perks::EnhancedScannerAugment => Some(PerkOptionData::toggled_off()), //parts Perks::ImpactCasing => Some(PerkOptionData::static_()), @@ -377,49 +379,46 @@ fn hash_to_perk_option_data(_hash: u32) -> Option { Perks::MarksmanSights => Some(PerkOptionData::static_()), Perks::Broadhead => Some(PerkOptionData::static_()), Perks::HuntersTrace => Some(PerkOptionData::toggled_off()), + Perks::FullStop => Some(PerkOptionData::static_()), + Perks::HakkeHeavyBurst => Some(PerkOptionData::static_()), //exotic armor - Perks::DragonShadow => Some(PerkOptionData::toggled_off()), - Perks::OphidianAspect => Some(PerkOptionData::static_()), - Perks::TomeOfDawn => Some(PerkOptionData::toggled_off()), + Perks::DragonShadow => Some(PerkOptionData::toggled_on()), + Perks::OphidianAspect => Some(PerkOptionData::toggled_on()), + Perks::TomeOfDawn => Some(PerkOptionData::toggled_on()), Perks::PathOfTheBurningSteps => Some(PerkOptionData::stacking(4)), - Perks::MantleOfBattleHarmony => Some(PerkOptionData::static_()), - Perks::MaskOfBakris => Some(PerkOptionData::toggled_off()), - Perks::BallindorseWrathweavers => Some(PerkOptionData::toggled_off()), + Perks::MantleOfBattleHarmony => Some(PerkOptionData::toggled_on()), + Perks::MaskOfBakris => Some(PerkOptionData::toggled_on()), + Perks::BallindorseWrathweavers => Some(PerkOptionData::toggled_on()), Perks::LunaFaction => Some(PerkOptionData::options( ["Heal Rift", "Empowering Rift / Well"].to_vec(), )), - Perks::Foetracer => Some(PerkOptionData::toggled_off()), - Perks::MechaneersTricksleeves => Some(PerkOptionData::toggled_off()), - Perks::Oathkeeper => Some(PerkOptionData::static_()), - Perks::SealedAhamkaraGrasps => Some(PerkOptionData::toggled_off()), + Perks::Foetracer => Some(PerkOptionData::toggled_on()), + Perks::MechaneersTricksleeves => Some(PerkOptionData::toggled_on()), + Perks::Oathkeeper => Some(PerkOptionData::toggled_on()), + Perks::SealedAhamkaraGrasps => Some(PerkOptionData::toggled_on()), Perks::LuckyPants => Some(PerkOptionData::stacking(10)), - Perks::NoBackupPlans => Some(PerkOptionData::toggled_off()), - Perks::ActiumWarRig => Some(PerkOptionData::static_()), - Perks::HallowfireHeart => Some(PerkOptionData::static_()), - Perks::LionRampart => Some(PerkOptionData::toggled_off()), - Perks::Peacekeepers => Some(PerkOptionData::static_()), - Perks::EyeOfAnotherWorld => Some(PerkOptionData::static_()), - Perks::AstrocyteVerse => Some(PerkOptionData::toggled_off()), - Perks::NecroticGrips => Some(PerkOptionData::static_()), - Perks::BootsOfTheAssembler => Some(PerkOptionData::static_()), - Perks::RainOfFire => Some(PerkOptionData::static_()), + Perks::NoBackupPlans => Some(PerkOptionData::toggled_on()), + Perks::ActiumWarRig => Some(PerkOptionData::toggled_on()), + Perks::HallowfireHeart => Some(PerkOptionData::toggled_on()), + Perks::LionRampart => Some(PerkOptionData::toggled_on()), + Perks::Peacekeepers => Some(PerkOptionData::toggled_on()), + Perks::EyeOfAnotherWorld => Some(PerkOptionData::toggled_on()), + Perks::AstrocyteVerse => Some(PerkOptionData::toggled_on()), + Perks::NecroticGrips => Some(PerkOptionData::toggled_on()), + Perks::BootsOfTheAssembler => Some(PerkOptionData::toggled_on()), + Perks::RainOfFire => Some(PerkOptionData::toggled_on()), Perks::SpeedloaderSlacks => Some(PerkOptionData::stacking(5)), - Perks::PeregrineGreaves => Some(PerkOptionData::static_()), - Perks::Gyrfalcon => Some(PerkOptionData::toggled_off()), - Perks::AeonInsight => Some(PerkOptionData::toggled_off()), - Perks::Felwinters => Some(PerkOptionData::toggled_off()), - Perks::SanguineAlchemy => Some(PerkOptionData::toggled_off()), - Perks::TritonVice => Some(PerkOptionData::toggled_off()), + Perks::PeregrineGreaves => Some(PerkOptionData::toggled_on()), + Perks::Gyrfalcon => Some(PerkOptionData::toggled_on()), + Perks::AeonInsight => Some(PerkOptionData::toggled_on()), + Perks::Felwinters => Some(PerkOptionData::toggled_on()), + Perks::SanguineAlchemy => Some(PerkOptionData::toggled_on()), + Perks::TritonVice => Some(PerkOptionData::toggled_on()), + Perks::EternalWarrior => Some(PerkOptionData::stacking(4)), //misc - Perks::UmbralSharpening => Some(PerkOptionData::stacking(5)), - Perks::EnhancedScannerAugment => Some(PerkOptionData::toggled_off()), Perks::Demolitionist => Some(PerkOptionData::static_()), - Perks::FullStop => Some(PerkOptionData::static_()), - Perks::HakkeHeavyBurst => Some(PerkOptionData::static_()), - Perks::EternalWarrior => Some(PerkOptionData::stacking(4)), - Perks::Ignore => None, } } From e7f5371e72960699e6708b4b3f3a8c16f9b768eb Mon Sep 17 00:00:00 2001 From: Harmon Brammer Date: Mon, 21 Aug 2023 18:39:03 -0400 Subject: [PATCH 3/6] chore: adding values conditions to armor --- src/perks/buff_perks.rs | 49 +++++++++++------- src/perks/exotic_armor.rs | 104 +++++++++++++++++++++----------------- 2 files changed, 89 insertions(+), 64 deletions(-) diff --git a/src/perks/buff_perks.rs b/src/perks/buff_perks.rs index 11328a47..c2eb1fda 100644 --- a/src/perks/buff_perks.rs +++ b/src/perks/buff_perks.rs @@ -105,6 +105,9 @@ pub fn buff_perks() { add_dmr( Perks::PathOfTheBurningSteps, Box::new(|_input: ModifierResponseInput| -> DamageModifierResponse { + if _input.value == 0 { + return DamageModifierResponse::default(); + } let buff = surge_buff(_input.cached_data, _input.value, _input.pvp); DamageModifierResponse { impact_dmg_scale: buff, @@ -143,6 +146,9 @@ pub fn buff_perks() { add_dmr( Perks::WardOfDawn, Box::new(|_input: ModifierResponseInput| -> DamageModifierResponse { + if _input.value == 0 { + return DamageModifierResponse::default(); + } let buff = emp_buff(_input.cached_data, 1.25); DamageModifierResponse { impact_dmg_scale: buff, @@ -155,6 +161,9 @@ pub fn buff_perks() { add_dmr( Perks::Gyrfalcon, Box::new(|_input: ModifierResponseInput| -> DamageModifierResponse { + if _input.value == 0 { + return DamageModifierResponse::default(); + } let des_buff = if _input.pvp { 1.0 } else { 1.35 }; let buff = emp_buff(_input.cached_data, des_buff); DamageModifierResponse { @@ -168,16 +177,16 @@ pub fn buff_perks() { add_dmr( Perks::AeonInsight, Box::new(|_input: ModifierResponseInput| -> DamageModifierResponse { - if _input.value > 0 { - let des_buff = if _input.pvp { 1.0 } else { 1.35 }; - let buff = emp_buff(_input.cached_data, des_buff); - DamageModifierResponse { - impact_dmg_scale: buff, - explosive_dmg_scale: buff, - ..Default::default() - } - } else { - DamageModifierResponse::default() + if _input.value == 0 { + return DamageModifierResponse::default(); + } + + let des_buff = if _input.pvp { 1.0 } else { 1.35 }; + let buff = emp_buff(_input.cached_data, des_buff); + DamageModifierResponse { + impact_dmg_scale: buff, + explosive_dmg_scale: buff, + ..Default::default() } }), ); @@ -235,6 +244,9 @@ pub fn buff_perks() { add_dmr( Perks::TractorCannon, Box::new(|_input: ModifierResponseInput| -> DamageModifierResponse { + if _input.value == 0 { + return DamageModifierResponse::default(); + } let des_debuff = if _input.pvp { 1.5 } else { 1.3 }; let debuff = gbl_debuff(_input.cached_data, des_debuff); DamageModifierResponse { @@ -272,15 +284,14 @@ pub fn buff_perks() { add_dmr( Perks::Felwinters, Box::new(|_input: ModifierResponseInput| -> DamageModifierResponse { - if _input.value > 0 { - let debuff = gbl_debuff(_input.cached_data, 1.3); - DamageModifierResponse { - impact_dmg_scale: debuff, - explosive_dmg_scale: debuff, - ..Default::default() - } - } else { - DamageModifierResponse::default() + if _input.value == 0 { + return DamageModifierResponse::default(); + } + let debuff = gbl_debuff(_input.cached_data, 1.3); + DamageModifierResponse { + impact_dmg_scale: debuff, + explosive_dmg_scale: debuff, + ..Default::default() } }), ); diff --git a/src/perks/exotic_armor.rs b/src/perks/exotic_armor.rs index c4297822..f30b9d1e 100644 --- a/src/perks/exotic_armor.rs +++ b/src/perks/exotic_armor.rs @@ -292,13 +292,16 @@ pub fn exotic_armor() { Perks::ActiumWarRig, Box::new( |_input: ModifierResponseInput| -> HashMap { - let mut stats = HashMap::new(); - if _input.calc_data.weapon_type == &WeaponType::AUTORIFLE - || _input.calc_data.weapon_type == &WeaponType::MACHINEGUN + if _input.value == 0 + || !matches!( + *_input.calc_data.weapon_type, + WeaponType::AUTORIFLE | WeaponType::MACHINEGUN + ) { - stats.insert(StatHashes::AIRBORNE.into(), 30); + return HashMap::new(); } - stats + + HashMap::from([(StatHashes::AIRBORNE.into(), 30)]) }, ), ); @@ -309,6 +312,9 @@ pub fn exotic_armor() { Perks::HallowfireHeart, Box::new( |_input: ModifierResponseInput| -> HashMap { + if _input.value == 0 { + return HashMap::new(); + } HashMap::from([(StatHashes::AIRBORNE.into(), 20)]) }, ), @@ -318,11 +324,10 @@ pub fn exotic_armor() { Perks::LionRampart, Box::new( |_input: ModifierResponseInput| -> HashMap { - let mut stats = HashMap::new(); - if _input.value > 0 { - stats.insert(StatHashes::AIRBORNE.into(), 50); + if _input.value == 0 { + return HashMap::new(); }; - stats + HashMap::from([(StatHashes::AIRBORNE.into(), 50)]) }, ), ); @@ -331,12 +336,13 @@ pub fn exotic_armor() { Perks::Peacekeepers, Box::new( |_input: ModifierResponseInput| -> HashMap { - let mut stats = HashMap::new(); - if _input.calc_data.weapon_type == &WeaponType::SUBMACHINEGUN { - stats.insert(StatHashes::AIRBORNE.into(), 40); - stats.insert(StatHashes::HANDLING.into(), 100); - }; - stats + if _input.calc_data.weapon_type != &WeaponType::SUBMACHINEGUN || _input.value == 0 { + return HashMap::new(); + } + HashMap::from([ + (StatHashes::AIRBORNE.into(), 40), + (StatHashes::HANDLING.into(), 100), + ]) }, ), ); @@ -345,16 +351,16 @@ pub fn exotic_armor() { Perks::Peacekeepers, Box::new( |_input: ModifierResponseInput| -> HandlingModifierResponse { - if _input.calc_data.weapon_type == &WeaponType::SUBMACHINEGUN { - return HandlingModifierResponse { - stat_add: 100, - ads_scale: 1.0, - draw_scale: 0.6, - stow_scale: 0.6, - ..Default::default() - }; + if _input.calc_data.weapon_type == &WeaponType::SUBMACHINEGUN || _input.value == 0 { + return HandlingModifierResponse::default(); + } + + HandlingModifierResponse { + stat_add: 100, + draw_scale: 0.6, + stow_scale: 0.6, + ..Default::default() } - return HandlingModifierResponse::default(); }, ), ); @@ -363,6 +369,9 @@ pub fn exotic_armor() { Perks::PeregrineGreaves, Box::new( |_input: ModifierResponseInput| -> HashMap { + if _input.value == 0 { + return HashMap::new(); + } HashMap::from([(StatHashes::AIRBORNE.into(), 20)]) }, ), @@ -381,7 +390,7 @@ pub fn exotic_armor() { Perks::AstrocyteVerse, Box::new( |_input: ModifierResponseInput| -> HashMap { - let mut stats = HashMap::new(); + let mut stats: HashMap = HashMap::new(); stats.insert(StatHashes::AIRBORNE.into(), 30); if _input.value > 0 { stats.insert(StatHashes::HANDLING.into(), 100); @@ -410,15 +419,15 @@ pub fn exotic_armor() { Perks::NecroticGrips, Box::new( |_input: ModifierResponseInput| -> HashMap { - let mut stats = HashMap::new(); - if _input.calc_data.intrinsic_hash == 1863355414 - || _input.calc_data.intrinsic_hash == 2965975126 - || _input.calc_data.intrinsic_hash == 2724693746 - { - //Thorn, Osteo Striga, Touch of Malice - stats.insert(StatHashes::AIRBORNE.into(), 30); - }; - stats + if !matches!( + _input.calc_data.intrinsic_hash, + 1863355414 | 2965975126 | 2724693746 + ) { + return HashMap::new(); + } + + //Thorn, Osteo Striga, Touch of Malice + HashMap::from([(StatHashes::AIRBORNE.into(), 30)]) }, ), ); @@ -427,12 +436,11 @@ pub fn exotic_armor() { Perks::BootsOfTheAssembler, Box::new( |_input: ModifierResponseInput| -> HashMap { - let mut stats = HashMap::new(); - if _input.calc_data.intrinsic_hash == 2144092201 { - //Lumina - stats.insert(StatHashes::AIRBORNE.into(), 30); - }; - stats + if _input.calc_data.intrinsic_hash != 2144092201 || _input.value == 0 { + return HashMap::new(); + } + + HashMap::from([(StatHashes::AIRBORNE.into(), 30)]) }, ), ); @@ -441,13 +449,16 @@ pub fn exotic_armor() { Perks::RainOfFire, Box::new( |_input: ModifierResponseInput| -> HashMap { - let mut stats = HashMap::new(); - if _input.calc_data.weapon_type == &WeaponType::FUSIONRIFLE - || _input.calc_data.weapon_type == &WeaponType::LINEARFUSIONRIFLE + if _input.value == 0 + || !matches!( + *_input.calc_data.weapon_type, + WeaponType::FUSIONRIFLE | WeaponType::LINEARFUSIONRIFLE + ) { - stats.insert(StatHashes::AIRBORNE.into(), 30); + return HashMap::new(); } - stats + + HashMap::from([(StatHashes::AIRBORNE.into(), 30)]) }, ), ); @@ -456,6 +467,9 @@ pub fn exotic_armor() { Perks::SpeedloaderSlacks, Box::new( |_input: ModifierResponseInput| -> HashMap { + if _input.value == 0 { + return HashMap::new(); + } let modifiers = match _input.value { 0 => (0, 0, 0), 1 => (40, 40, 30), From d3ba7acc154188d7ceab9bf298f7dbce5c28a344 Mon Sep 17 00:00:00 2001 From: andromeda Date: Mon, 21 Aug 2023 18:39:48 -0400 Subject: [PATCH 4/6] chore: add value conditions to abilities and armour --- src/perks/buff_perks.rs | 7 +++ src/perks/exotic_armor.rs | 73 +++++++++++---------------- src/perks/meta_perks.rs | 5 ++ src/perks/other_perks.rs | 83 ++++++++++++++----------------- src/perks/perk_options_handler.rs | 2 +- 5 files changed, 78 insertions(+), 92 deletions(-) diff --git a/src/perks/buff_perks.rs b/src/perks/buff_perks.rs index c2eb1fda..64d6d0cb 100644 --- a/src/perks/buff_perks.rs +++ b/src/perks/buff_perks.rs @@ -63,6 +63,7 @@ pub fn buff_perks() { add_dmr( Perks::WellOfRadiance, Box::new(|_input: ModifierResponseInput| -> DamageModifierResponse { + if _input.value == 0 {return DamageModifierResponse::default();} let buff = emp_buff(_input.cached_data, 1.25); DamageModifierResponse { impact_dmg_scale: buff, @@ -91,6 +92,7 @@ pub fn buff_perks() { add_dmr( Perks::Radiant, Box::new(|_input: ModifierResponseInput| -> DamageModifierResponse { + if _input.value == 0 {return DamageModifierResponse::default();} let des_buff = if _input.pvp { 1.1 } else { 1.25 }; let buff = emp_buff(_input.cached_data, des_buff); _input.cached_data.insert("radiant".to_string(), 1.0); @@ -120,6 +122,7 @@ pub fn buff_perks() { add_dmr( Perks::BannerShield, Box::new(|_input: ModifierResponseInput| -> DamageModifierResponse { + if _input.value == 0 {return DamageModifierResponse::default();} let des_buff = if _input.pvp { 1.35 } else { 1.4 }; let buff = emp_buff(_input.cached_data, des_buff); DamageModifierResponse { @@ -133,6 +136,7 @@ pub fn buff_perks() { add_dmr( Perks::EmpRift, Box::new(|_input: ModifierResponseInput| -> DamageModifierResponse { + if _input.value == 0 {return DamageModifierResponse::default();} let des_buff = if _input.pvp { 1.15 } else { 1.2 }; let buff = emp_buff(_input.cached_data, des_buff); DamageModifierResponse { @@ -231,6 +235,7 @@ pub fn buff_perks() { add_dmr( Perks::Weaken, Box::new(|_input: ModifierResponseInput| -> DamageModifierResponse { + if _input.value == 0 {return DamageModifierResponse::default();} let des_debuff = if _input.pvp { 1.075 } else { 1.15 }; let debuff = gbl_debuff(_input.cached_data, des_debuff); DamageModifierResponse { @@ -260,6 +265,7 @@ pub fn buff_perks() { add_dmr( Perks::MoebiusQuiver, Box::new(|_input: ModifierResponseInput| -> DamageModifierResponse { + if _input.value == 0 {return DamageModifierResponse::default();} let des_debuff = if _input.pvp { 1.5 } else { 1.3 }; let debuff = gbl_debuff(_input.cached_data, des_debuff); DamageModifierResponse { @@ -272,6 +278,7 @@ pub fn buff_perks() { add_dmr( Perks::DeadFall, Box::new(|_input: ModifierResponseInput| -> DamageModifierResponse { + if _input.value == 0 {return DamageModifierResponse::default();} let des_debuff = if _input.pvp { 1.5 } else { 1.3 }; let debuff = gbl_debuff(_input.cached_data, des_debuff); DamageModifierResponse { diff --git a/src/perks/exotic_armor.rs b/src/perks/exotic_armor.rs index f30b9d1e..1efeec31 100644 --- a/src/perks/exotic_armor.rs +++ b/src/perks/exotic_armor.rs @@ -30,24 +30,12 @@ pub fn exotic_armor() { }), ); - add_dmr( - Perks::MechaneersTricksleeves, - Box::new(|_input: ModifierResponseInput| -> DamageModifierResponse { - let mut dmr = DamageModifierResponse::default(); - if _input.value <= 0 || _input.calc_data.weapon_type != &WeaponType::SIDEARM { - return dmr; - }; - let damage_mult = if _input.pvp { 1.35 } else { 2.0 }; - dmr.explosive_dmg_scale = damage_mult; - dmr.impact_dmg_scale = damage_mult; - dmr - }), - ); - //doesnt work for sturm overcharge, (maybe) memento add_dmr( Perks::LuckyPants, Box::new(|_input: ModifierResponseInput| -> DamageModifierResponse { + if _input.value == 0 {return DamageModifierResponse::default();} + let perks = _input.calc_data.perk_value_map.clone(); let perk_check = @@ -90,11 +78,10 @@ pub fn exotic_armor() { add_flmr( Perks::TomeOfDawn, Box::new(|_input: ModifierResponseInput| -> FlinchModifierResponse { - if _input.value > 0 { - FlinchModifierResponse { flinch_scale: 0.80 } - } else { - FlinchModifierResponse::default() + if _input.value == 0 { + return FlinchModifierResponse::default(); } + FlinchModifierResponse { flinch_scale: 0.80 } }), ); @@ -130,7 +117,7 @@ pub fn exotic_armor() { Box::new( |_input: ModifierResponseInput| -> HashMap { let mut stats = HashMap::new(); - if _input.calc_data.weapon_type == &WeaponType::SIDEARM { + if _input.value > 0 && _input.calc_data.weapon_type == &WeaponType::SIDEARM { stats.insert(StatHashes::AIRBORNE.into(), 50); stats.insert(StatHashes::HANDLING.into(), 100); stats.insert(StatHashes::RELOAD.into(), 100); @@ -144,27 +131,25 @@ pub fn exotic_armor() { Perks::MechaneersTricksleeves, Box::new( |_input: ModifierResponseInput| -> HandlingModifierResponse { - if _input.calc_data.weapon_type == &WeaponType::SIDEARM { - HandlingModifierResponse { - stat_add: 100, - ..Default::default() - } - } else { - HandlingModifierResponse::default() + if _input.value == 0 || _input.calc_data.weapon_type != &WeaponType::SIDEARM { + return HandlingModifierResponse::default(); + } + HandlingModifierResponse { + stat_add: 100, + ..Default::default() } - }, + } ), ); add_rsmr( Perks::MechaneersTricksleeves, Box::new(|_input: ModifierResponseInput| -> ReloadModifierResponse { - if _input.calc_data.weapon_type == &WeaponType::SIDEARM { - ReloadModifierResponse { - reload_stat_add: 100, - ..Default::default() - } - } else { - ReloadModifierResponse::default() + if _input.value == 0 || _input.calc_data.weapon_type != &WeaponType::SIDEARM { + return ReloadModifierResponse::default(); + } + ReloadModifierResponse { + reload_stat_add: 100, + ..Default::default() } }), ); @@ -172,15 +157,15 @@ pub fn exotic_armor() { add_dmr( Perks::MechaneersTricksleeves, Box::new(|_input: ModifierResponseInput| -> DamageModifierResponse { - let mult = if _input.pvp { 1.35 } else { 2.0 }; - if _input.value > 0 && _input.calc_data.weapon_type == &WeaponType::SIDEARM { - DamageModifierResponse { - explosive_dmg_scale: mult, - impact_dmg_scale: mult, - ..Default::default() - } - } else { - DamageModifierResponse::default() + if _input.value == 0 || _input.calc_data.weapon_type != &WeaponType::SIDEARM { + return DamageModifierResponse::default(); + } + + let damage_mult = if _input.pvp { 1.35 } else { 2.0 }; + DamageModifierResponse { + explosive_dmg_scale: damage_mult, + impact_dmg_scale: damage_mult, + ..Default::default() } }), ); @@ -264,7 +249,7 @@ pub fn exotic_armor() { Box::new( |_input: ModifierResponseInput| -> HashMap { let mut stats = HashMap::new(); - if _input.calc_data.weapon_type == &WeaponType::SHOTGUN { + if _input.value > 0 && _input.calc_data.weapon_type == &WeaponType::SHOTGUN { stats.insert(StatHashes::AIRBORNE.into(), 30); }; stats diff --git a/src/perks/meta_perks.rs b/src/perks/meta_perks.rs index 1ca68e54..8eb496d4 100644 --- a/src/perks/meta_perks.rs +++ b/src/perks/meta_perks.rs @@ -299,8 +299,10 @@ pub fn meta_perks() { Perks::RallyBarricade, Box::new(|_input: ModifierResponseInput| -> HashMap { let mut stats = HashMap::new(); + if _input.value > 0 { stats.insert(StatHashes::STABILITY.into(), 30); stats.insert(StatHashes::RELOAD.into(), 100); + } stats }), ); @@ -308,6 +310,7 @@ pub fn meta_perks() { add_flmr( Perks::RallyBarricade, Box::new(|_input: ModifierResponseInput| -> FlinchModifierResponse { + if _input.value == 0 {return FlinchModifierResponse::default();} FlinchModifierResponse { flinch_scale: 0.5 } }), ); @@ -315,6 +318,7 @@ pub fn meta_perks() { add_rsmr( Perks::RallyBarricade, Box::new(|_input: ModifierResponseInput| -> ReloadModifierResponse { + if _input.value == 0 {return ReloadModifierResponse::default();} ReloadModifierResponse { reload_stat_add: 100, reload_time_scale: 0.9, @@ -325,6 +329,7 @@ pub fn meta_perks() { add_rmr( Perks::RallyBarricade, Box::new(|_input: ModifierResponseInput| -> RangeModifierResponse { + if _input.value == 0 {return RangeModifierResponse::default();} RangeModifierResponse { range_all_scale: 1.1, ..Default::default() diff --git a/src/perks/other_perks.rs b/src/perks/other_perks.rs index b8409c0a..0d8f7986 100644 --- a/src/perks/other_perks.rs +++ b/src/perks/other_perks.rs @@ -1,4 +1,4 @@ -use std::collections::{btree_map::Range, HashMap}; +use std::{collections::{btree_map::Range, HashMap}, alloc::handle_alloc_error}; use serde::de::value; @@ -117,6 +117,7 @@ pub fn other_perks() { Perks::OphidianAspect, Box::new( |_input: ModifierResponseInput| -> HandlingModifierResponse { + if _input.value == 0 {return HandlingModifierResponse::default();} HandlingModifierResponse { stat_add: 35, ..Default::default() @@ -128,6 +129,7 @@ pub fn other_perks() { add_rsmr( Perks::OphidianAspect, Box::new(|_input: ModifierResponseInput| -> ReloadModifierResponse { + if _input.value == 0 {return ReloadModifierResponse::default();} ReloadModifierResponse { reload_stat_add: 35, reload_time_scale: 1.0, @@ -139,9 +141,11 @@ pub fn other_perks() { Perks::OphidianAspect, Box::new(|_input: ModifierResponseInput| -> HashMap { let mut stats = HashMap::new(); + if _input.value > 0 { stats.insert(StatHashes::HANDLING.into(), 35); stats.insert(StatHashes::RELOAD.into(), 35); stats.insert(StatHashes::AIRBORNE.into(), 10); + } stats }), ); @@ -150,7 +154,7 @@ pub fn other_perks() { Perks::DragonShadow, Box::new(|_input: ModifierResponseInput| -> HashMap { let mut stats = HashMap::new(); - if _input.value >= 1 { + if _input.value > 0 { stats.insert(StatHashes::HANDLING.into(), 100); stats.insert(StatHashes::RELOAD.into(), 100); } @@ -162,16 +166,13 @@ pub fn other_perks() { Perks::DragonShadow, Box::new( |_input: ModifierResponseInput| -> HandlingModifierResponse { - if _input.value >= 1 { - HandlingModifierResponse { - stat_add: 100, - draw_scale: 0.7, - stow_scale: 0.7, - ..Default::default() - } - } else { - HandlingModifierResponse::default() - } + if _input.value == 0 {return HandlingModifierResponse::default();} + HandlingModifierResponse { + stat_add: 100, + draw_scale: 0.7, + stow_scale: 0.7, + ..Default::default() + } }, ), ); @@ -179,13 +180,10 @@ pub fn other_perks() { add_rsmr( Perks::DragonShadow, Box::new(|_input: ModifierResponseInput| -> ReloadModifierResponse { - if _input.value >= 1 { - ReloadModifierResponse { - reload_stat_add: 100, - reload_time_scale: 1.0, - } - } else { - ReloadModifierResponse::default() + if _input.value == 0 {return ReloadModifierResponse::default();} + ReloadModifierResponse { + reload_stat_add: 100, + reload_time_scale: 1.0, } }), ); @@ -194,7 +192,9 @@ pub fn other_perks() { Perks::Amplified, Box::new(|_input: ModifierResponseInput| -> HashMap { let mut stats = HashMap::new(); - stats.insert(StatHashes::HANDLING.into(), 40); + if _input.value > 0 { + stats.insert(StatHashes::HANDLING.into(), 40); + } stats }), ); @@ -203,6 +203,7 @@ pub fn other_perks() { Perks::Amplified, Box::new( |_input: ModifierResponseInput| -> HandlingModifierResponse { + if _input.value == 0 {return HandlingModifierResponse::default();} HandlingModifierResponse { stat_add: 40, draw_scale: 0.95, @@ -216,13 +217,10 @@ pub fn other_perks() { add_rsmr( Perks::Frequency, Box::new(|_input: ModifierResponseInput| -> ReloadModifierResponse { - if _input.value > 0 { - ReloadModifierResponse { - reload_stat_add: 50, - reload_time_scale: 0.8, - } - } else { - ReloadModifierResponse::default() + if _input.value == 0 {return ReloadModifierResponse::default();} + ReloadModifierResponse { + reload_stat_add: 50, + reload_time_scale: 0.8, } }), ); @@ -241,13 +239,10 @@ pub fn other_perks() { add_rsmr( Perks::FlowState, Box::new(|_input: ModifierResponseInput| -> ReloadModifierResponse { - if _input.value > 0 { + if _input.value == 0 {return ReloadModifierResponse::default();} ReloadModifierResponse { reload_stat_add: 50, reload_time_scale: 0.8, - } - } else { - ReloadModifierResponse::default() } }), ); @@ -318,8 +313,8 @@ pub fn other_perks() { let mut buff = 20; if _input.value > 0 { buff += 50; + stats.insert(StatHashes::AIRBORNE.into(), buff); }; - stats.insert(StatHashes::AIRBORNE.into(), buff); stats }), ); @@ -562,15 +557,12 @@ pub fn other_perks() { Perks::ThreadOfAscent, Box::new( |_input: ModifierResponseInput| -> HandlingModifierResponse { - if _input.value > 0 { - HandlingModifierResponse { - stat_add: 40, - draw_scale: 0.925, - stow_scale: 0.925, - ..Default::default() - } - } else { - HandlingModifierResponse::default() + if _input.value == 0 {return HandlingModifierResponse::default();} + HandlingModifierResponse { + stat_add: 40, + draw_scale: 0.925, + stow_scale: 0.925, + ..Default::default() } }, ), @@ -578,13 +570,10 @@ pub fn other_perks() { add_rsmr( Perks::ThreadOfAscent, Box::new(|_input: ModifierResponseInput| -> ReloadModifierResponse { - if _input.value > 0 { + if _input.value == 0 {return ReloadModifierResponse::default();} ReloadModifierResponse { - reload_time_scale: 0.925, - reload_stat_add: 40, - } - } else { - ReloadModifierResponse::default() + reload_time_scale: 0.925, + reload_stat_add: 40, } }), ); diff --git a/src/perks/perk_options_handler.rs b/src/perks/perk_options_handler.rs index a6813ada..faac9cd9 100644 --- a/src/perks/perk_options_handler.rs +++ b/src/perks/perk_options_handler.rs @@ -395,7 +395,7 @@ fn hash_to_perk_option_data(_hash: u32) -> Option { )), Perks::Foetracer => Some(PerkOptionData::toggled_on()), Perks::MechaneersTricksleeves => Some(PerkOptionData::toggled_on()), - Perks::Oathkeeper => Some(PerkOptionData::toggled_on()), + Perks::Oathkeeper => Some(PerkOptionData::static_()), Perks::SealedAhamkaraGrasps => Some(PerkOptionData::toggled_on()), Perks::LuckyPants => Some(PerkOptionData::stacking(10)), Perks::NoBackupPlans => Some(PerkOptionData::toggled_on()), From d9181e621e09c5a5277ac915d7a67b4977c5074a Mon Sep 17 00:00:00 2001 From: Harmon Brammer Date: Mon, 21 Aug 2023 19:24:35 -0400 Subject: [PATCH 5/6] fix: necrotic grips and eye of another world --- src/perks/exotic_armor.rs | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/perks/exotic_armor.rs b/src/perks/exotic_armor.rs index 1efeec31..361b004a 100644 --- a/src/perks/exotic_armor.rs +++ b/src/perks/exotic_armor.rs @@ -34,7 +34,9 @@ pub fn exotic_armor() { add_dmr( Perks::LuckyPants, Box::new(|_input: ModifierResponseInput| -> DamageModifierResponse { - if _input.value == 0 {return DamageModifierResponse::default();} + if _input.value == 0 { + return DamageModifierResponse::default(); + } let perks = _input.calc_data.perk_value_map.clone(); @@ -133,12 +135,12 @@ pub fn exotic_armor() { |_input: ModifierResponseInput| -> HandlingModifierResponse { if _input.value == 0 || _input.calc_data.weapon_type != &WeaponType::SIDEARM { return HandlingModifierResponse::default(); - } + } HandlingModifierResponse { stat_add: 100, ..Default::default() } - } + }, ), ); add_rsmr( @@ -366,6 +368,9 @@ pub fn exotic_armor() { Perks::EyeOfAnotherWorld, Box::new( |_input: ModifierResponseInput| -> HashMap { + if _input.value == 0 { + return HashMap::new(); + } HashMap::from([(StatHashes::AIRBORNE.into(), 15)]) }, ), @@ -404,10 +409,12 @@ pub fn exotic_armor() { Perks::NecroticGrips, Box::new( |_input: ModifierResponseInput| -> HashMap { - if !matches!( - _input.calc_data.intrinsic_hash, - 1863355414 | 2965975126 | 2724693746 - ) { + if _input.value == 0 + || !matches!( + _input.calc_data.intrinsic_hash, + 1863355414 | 2965975126 | 2724693746 + ) + { return HashMap::new(); } From 59453aa6e781f6d5b0b6f23e69fad9a9c8bc7bfa Mon Sep 17 00:00:00 2001 From: Harmon Brammer Date: Mon, 21 Aug 2023 19:36:17 -0400 Subject: [PATCH 6/6] fix: heat rises passive AE --- src/perks/other_perks.rs | 59 +++++++++++++++++++++++++++------------- 1 file changed, 40 insertions(+), 19 deletions(-) diff --git a/src/perks/other_perks.rs b/src/perks/other_perks.rs index 0d8f7986..b691d490 100644 --- a/src/perks/other_perks.rs +++ b/src/perks/other_perks.rs @@ -1,4 +1,7 @@ -use std::{collections::{btree_map::Range, HashMap}, alloc::handle_alloc_error}; +use std::{ + alloc::handle_alloc_error, + collections::{btree_map::Range, HashMap}, +}; use serde::de::value; @@ -117,7 +120,9 @@ pub fn other_perks() { Perks::OphidianAspect, Box::new( |_input: ModifierResponseInput| -> HandlingModifierResponse { - if _input.value == 0 {return HandlingModifierResponse::default();} + if _input.value == 0 { + return HandlingModifierResponse::default(); + } HandlingModifierResponse { stat_add: 35, ..Default::default() @@ -129,7 +134,9 @@ pub fn other_perks() { add_rsmr( Perks::OphidianAspect, Box::new(|_input: ModifierResponseInput| -> ReloadModifierResponse { - if _input.value == 0 {return ReloadModifierResponse::default();} + if _input.value == 0 { + return ReloadModifierResponse::default(); + } ReloadModifierResponse { reload_stat_add: 35, reload_time_scale: 1.0, @@ -142,9 +149,9 @@ pub fn other_perks() { Box::new(|_input: ModifierResponseInput| -> HashMap { let mut stats = HashMap::new(); if _input.value > 0 { - stats.insert(StatHashes::HANDLING.into(), 35); - stats.insert(StatHashes::RELOAD.into(), 35); - stats.insert(StatHashes::AIRBORNE.into(), 10); + stats.insert(StatHashes::HANDLING.into(), 35); + stats.insert(StatHashes::RELOAD.into(), 35); + stats.insert(StatHashes::AIRBORNE.into(), 10); } stats }), @@ -166,13 +173,15 @@ pub fn other_perks() { Perks::DragonShadow, Box::new( |_input: ModifierResponseInput| -> HandlingModifierResponse { - if _input.value == 0 {return HandlingModifierResponse::default();} + if _input.value == 0 { + return HandlingModifierResponse::default(); + } HandlingModifierResponse { stat_add: 100, draw_scale: 0.7, stow_scale: 0.7, ..Default::default() - } + } }, ), ); @@ -180,7 +189,9 @@ pub fn other_perks() { add_rsmr( Perks::DragonShadow, Box::new(|_input: ModifierResponseInput| -> ReloadModifierResponse { - if _input.value == 0 {return ReloadModifierResponse::default();} + if _input.value == 0 { + return ReloadModifierResponse::default(); + } ReloadModifierResponse { reload_stat_add: 100, reload_time_scale: 1.0, @@ -203,7 +214,9 @@ pub fn other_perks() { Perks::Amplified, Box::new( |_input: ModifierResponseInput| -> HandlingModifierResponse { - if _input.value == 0 {return HandlingModifierResponse::default();} + if _input.value == 0 { + return HandlingModifierResponse::default(); + } HandlingModifierResponse { stat_add: 40, draw_scale: 0.95, @@ -217,7 +230,9 @@ pub fn other_perks() { add_rsmr( Perks::Frequency, Box::new(|_input: ModifierResponseInput| -> ReloadModifierResponse { - if _input.value == 0 {return ReloadModifierResponse::default();} + if _input.value == 0 { + return ReloadModifierResponse::default(); + } ReloadModifierResponse { reload_stat_add: 50, reload_time_scale: 0.8, @@ -239,10 +254,12 @@ pub fn other_perks() { add_rsmr( Perks::FlowState, Box::new(|_input: ModifierResponseInput| -> ReloadModifierResponse { - if _input.value == 0 {return ReloadModifierResponse::default();} - ReloadModifierResponse { - reload_stat_add: 50, - reload_time_scale: 0.8, + if _input.value == 0 { + return ReloadModifierResponse::default(); + } + ReloadModifierResponse { + reload_stat_add: 50, + reload_time_scale: 0.8, } }), ); @@ -313,8 +330,8 @@ pub fn other_perks() { let mut buff = 20; if _input.value > 0 { buff += 50; - stats.insert(StatHashes::AIRBORNE.into(), buff); }; + stats.insert(StatHashes::AIRBORNE.into(), buff); stats }), ); @@ -557,7 +574,9 @@ pub fn other_perks() { Perks::ThreadOfAscent, Box::new( |_input: ModifierResponseInput| -> HandlingModifierResponse { - if _input.value == 0 {return HandlingModifierResponse::default();} + if _input.value == 0 { + return HandlingModifierResponse::default(); + } HandlingModifierResponse { stat_add: 40, draw_scale: 0.925, @@ -570,8 +589,10 @@ pub fn other_perks() { add_rsmr( Perks::ThreadOfAscent, Box::new(|_input: ModifierResponseInput| -> ReloadModifierResponse { - if _input.value == 0 {return ReloadModifierResponse::default();} - ReloadModifierResponse { + if _input.value == 0 { + return ReloadModifierResponse::default(); + } + ReloadModifierResponse { reload_time_scale: 0.925, reload_stat_add: 40, }