From c32154e06ebf35b00c34da1bacf1541fb7ed3e67 Mon Sep 17 00:00:00 2001 From: Mashy Date: Wed, 29 May 2019 11:49:58 +1000 Subject: [PATCH] all skills have item conversion, tidy spec calcs --- server/src/item.rs | 32 +++++++++++++++++++++++++++- server/src/skill.rs | 12 +++++------ server/src/spec.rs | 52 +++++++++++++++++++++++---------------------- 3 files changed, 64 insertions(+), 32 deletions(-) diff --git a/server/src/item.rs b/server/src/item.rs index 295507d5..1a984143 100644 --- a/server/src/item.rs +++ b/server/src/item.rs @@ -877,12 +877,42 @@ impl From for Item { Skill::CorruptII => Item::CorruptII, Skill::CorruptIII => Item::CorruptIII, + // Convert subskills into parent skills + Skill::CorruptionI => Item::CorruptI, + Skill::CorruptionII => Item::CorruptII, + Skill::CorruptionIII => Item::CorruptIII, + Skill::CorruptionTickI => Item::CorruptI, + Skill::CorruptionTickII => Item::CorruptII, + Skill::CorruptionTickIII => Item::CorruptII, + Skill::DecayTickI => Item::DecayI, + Skill::DecayTickII => Item::DecayII, + Skill::DecayTickIII => Item::DecayIII, + Skill::HatredI => Item::HostilityI, + Skill::HatredII => Item::HostilityII, + Skill::HatredIII => Item::HostilityIII, + Skill::HasteStrike => Item::HasteI, + + Skill::ImpureBlast => Item::ImpurityI, + Skill::RiposteI => Item::ParryI, + Skill::RiposteII => Item::ParryII, + Skill::RiposteIII => Item::ParryIII, + Skill::SiphonTickI => Item::SiphonI, + Skill::SiphonTickII => Item::SiphonII, + Skill::SiphonTickIII => Item::SiphonIII, + Skill::StrangleTickI => Item::StrangleI, + Skill::StrangleTickII => Item::StrangleII, + Skill::StrangleTickIII => Item::StrangleIII, + Skill::TriageTickI => Item::TriageI, + Skill::TriageTickII => Item::TriageII, + Skill::TriageTickIII => Item::TriageIII, + + Skill::TestAttack => Item::Attack, + Skill::TestHeal => Item::HealI, Skill::TestTouch => Item::TestTouch, Skill::TestStun => Item::TestStun, Skill::TestBlock => Item::TestBlock, Skill::TestParry => Item::TestParry, Skill::TestSiphon => Item::TestSiphon, - _ => panic!("{:?} not implemented with item conversion", skill), } } } diff --git a/server/src/skill.rs b/server/src/skill.rs index c53dbdc2..ed7246a7 100644 --- a/server/src/skill.rs +++ b/server/src/skill.rs @@ -275,7 +275,7 @@ pub fn resolve(skill: Skill, source: &mut Construct, target: &mut Construct, mut // Not used - Skill::Injure => injure(source, target, resolutions, skill), + // Skill::Injure => injure(source, target, resolutions, skill), // ----------------- // Test // ----------------- @@ -759,7 +759,7 @@ pub enum Skill { ImpurityI, ImpurityII, ImpurityIII, - Injure, + // Injure, InvertI, InvertII, @@ -1096,7 +1096,7 @@ impl Skill { Skill::TriageIII => vec![ConstructEffect {effect: Effect::Triage, duration: 4, meta: Some(EffectMeta::Skill(Skill::TriageTickIII)), tick: None}], //Unused - Skill::Injure => vec![ConstructEffect {effect: Effect::Injured, duration: 2, meta: None, tick: None }], + // Skill::Injure => vec![ConstructEffect {effect: Effect::Injured, duration: 2, meta: None, tick: None }], _ => { panic!("{:?} no skill effect", self); @@ -1223,7 +1223,7 @@ impl Skill { Skill::TauntI => Some(2), Skill::TauntII => Some(2), Skill::TauntIII => Some(2), - Skill::Injure => Some(2), + // Skill::Injure => Some(2), Skill::CorruptI =>Some(1), Skill::CorruptII =>Some(1), @@ -2042,7 +2042,7 @@ mod tests { }; } - #[test] +/* #[test] fn injure_test() { let mut x = Construct::new() .named(&"muji".to_string()); @@ -2054,7 +2054,7 @@ mod tests { assert!(y.immune(Skill::HealI).is_some()); // resolutions = heal(&mut y.clone(), &mut y, resolutions); } - +*/ #[test] fn invert_test() { let mut x = Construct::new() diff --git a/server/src/spec.rs b/server/src/spec.rs index 72575664..839cb1f4 100644 --- a/server/src/spec.rs +++ b/server/src/spec.rs @@ -22,6 +22,13 @@ pub struct SpecValues { pub bonuses: Vec, } +impl SpecValues { + pub fn calc_value (&self, c: &Colours) -> u64 { + self.bonuses.iter().fold(self.base, |acc, s| acc + s.get_bonus(c)) + } +} + + #[derive(Debug,Copy,Clone,Serialize,Deserialize,PartialEq,PartialOrd,Ord,Eq)] pub enum Spec { Speed, @@ -31,8 +38,7 @@ pub enum Spec { SpeedRGI, SpeedGBI, SpeedRBI, - // Pure redLife has to come first as it applies the base amount - // that is multiplied + Life, LifeGGI, LifeRRI, @@ -89,7 +95,7 @@ impl Spec { Spec::PowerRRI => SpecValues { base: 10, bonuses: vec![ - SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 10 }, + SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 10 }, SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 20 }, SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 40 } ], @@ -98,7 +104,7 @@ impl Spec { Spec::PowerGGI => SpecValues { base: 10, bonuses: vec![ - SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 10 }, + SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 10 }, SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 20 }, SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 40 } ], @@ -107,7 +113,7 @@ impl Spec { Spec::PowerBBI => SpecValues { base: 10, bonuses: vec![ - SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 10 }, + SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 10 }, SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 20 }, SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 40 } ], @@ -116,7 +122,7 @@ impl Spec { Spec::PowerRGI => SpecValues { base: 5, bonuses: vec![ - SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 10 }, + SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 10 }, SpecBonus { req: Colours { red: 5, green: 5, blue: 0 }, bonus: 15 }, SpecBonus { req: Colours { red: 10, green: 10, blue: 0 }, bonus: 30 } ], @@ -125,7 +131,7 @@ impl Spec { Spec::PowerGBI => SpecValues { base: 5, bonuses: vec![ - SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 10 }, + SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 10 }, SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 15 }, SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 30 } ], @@ -134,7 +140,7 @@ impl Spec { Spec::PowerRBI => SpecValues { base: 5, bonuses: vec![ - SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 10 }, + SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 10 }, SpecBonus { req: Colours { red: 5, green: 0, blue: 5 }, bonus: 15 }, SpecBonus { req: Colours { red: 10, green: 0, blue: 10 }, bonus: 30 } ], @@ -148,7 +154,7 @@ impl Spec { Spec::SpeedRRI => SpecValues { base: 10, bonuses: vec![ - SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 10 }, + SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 10 }, SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 20 }, SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 40 } ], @@ -157,7 +163,7 @@ impl Spec { Spec::SpeedGGI => SpecValues { base: 10, bonuses: vec![ - SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 10 }, + SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 10 }, SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 20 }, SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 40 } ], @@ -166,7 +172,7 @@ impl Spec { Spec::SpeedBBI => SpecValues { base: 10, bonuses: vec![ - SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 10 }, + SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 10 }, SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 20 }, SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 40 } ], @@ -175,7 +181,7 @@ impl Spec { Spec::SpeedRGI => SpecValues { base: 5, bonuses: vec![ - SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 10 }, + SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 10 }, SpecBonus { req: Colours { red: 5, green: 5, blue: 0 }, bonus: 15 }, SpecBonus { req: Colours { red: 10, green: 10, blue: 0 }, bonus: 30 } ], @@ -184,7 +190,7 @@ impl Spec { Spec::SpeedGBI => SpecValues { base: 5, bonuses: vec![ - SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 10 }, + SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 10 }, SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 15 }, SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 30 } ], @@ -193,7 +199,7 @@ impl Spec { Spec::SpeedRBI => SpecValues { base: 5, bonuses: vec![ - SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 10 }, + SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 10 }, SpecBonus { req: Colours { red: 5, green: 0, blue: 5 }, bonus: 15 }, SpecBonus { req: Colours { red: 10, green: 0, blue: 10 }, bonus: 30 } ], @@ -206,7 +212,7 @@ impl Spec { Spec::LifeRRI => SpecValues { base: 10, bonuses: vec![ - SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 10 }, + SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 10 }, SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 20 }, SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 40 } ], @@ -215,7 +221,7 @@ impl Spec { Spec::LifeGGI => SpecValues { base: 10, bonuses: vec![ - SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 10 }, + SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 10 }, SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 20 }, SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 40 } ], @@ -224,7 +230,7 @@ impl Spec { Spec::LifeBBI => SpecValues { base: 10, bonuses: vec![ - SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 10 }, + SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 10 }, SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 20 }, SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 40 } ], @@ -233,7 +239,7 @@ impl Spec { Spec::LifeRGI => SpecValues { base: 5, bonuses: vec![ - SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 10 }, + SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 10 }, SpecBonus { req: Colours { red: 5, green: 5, blue: 0 }, bonus: 15 }, SpecBonus { req: Colours { red: 10, green: 10, blue: 0 }, bonus: 30 } ], @@ -243,7 +249,7 @@ impl Spec { Spec::LifeGBI => SpecValues { base: 5, bonuses: vec![ - SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 10 }, + SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 10 }, SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 15 }, SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 30 } ], @@ -278,9 +284,7 @@ impl Spec { Spec::SpeedRGI | Spec::SpeedGBI | Spec::SpeedRBI => modified + { - let spec_values = self.values(); - base.pct(spec_values.bonuses.iter() - .fold(spec_values.base, |acc, s| acc + s.get_bonus(player_colours))) + base.pct(self.values().calc_value(player_colours)) }, Spec::Life | @@ -290,9 +294,7 @@ impl Spec { Spec::LifeRGI | Spec::LifeGBI | Spec::LifeRBI => modified + { - let spec_values = self.values(); - construct_colour_total * (spec_values.bonuses.iter() - .fold(spec_values.base, |acc, s| acc + s.get_bonus(player_colours))) + construct_colour_total * self.values().calc_value(player_colours) }, } }