From ed6b69877a66daa41aabda4afa713f53a0109698 Mon Sep 17 00:00:00 2001 From: Mashy Date: Fri, 3 May 2019 15:33:00 +1000 Subject: [PATCH] Rework recharge, reflect recharges blue life --- CHANGELOG.md | 17 ++++++++++++++--- client/src/utils.jsx | 4 ++++ server/src/cryp.rs | 25 +++++++++++++++++++------ server/src/skill.rs | 11 ++++++++++- server/src/vbox.rs | 4 ++-- 5 files changed, 49 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 84b6f778..2d8fa157 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,10 +20,21 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Changed Switch purify with reflect - - Purify now GG + block (was GB + block) - - Purify now applies a small heal 45% multiplier green damage (power) for each debuff removed + - Purify + Now GG + block (was GB + block) + Now applies a small heal 45% multiplier green damage (power) for each debuff removed - - reflect now GB + block (was GG + block) + - Reflect + Now GB + block (was GG + block) + Recharges blue life at 45% blue damage + + - Server function recharge changed to take skill, red amount and blue amount as inputs + + - Recharge Skill reworked + No longer restores full Red and Blue life + Now restores Red life and Blue life based on respective red and blue damage + Recharge value calculated at 85% multiplier with red and blue damage + Switch clutch with taunt Clutch now GR + Block (was GR + Buff) diff --git a/client/src/utils.jsx b/client/src/utils.jsx index 4fa5de59..494d1ce0 100644 --- a/client/src/utils.jsx +++ b/client/src/utils.jsx @@ -231,6 +231,10 @@ function getCombatSequence(event) { || event[1].skill === 'Purify' || event[1].skill === 'Sleep')) return ['POST_SKILL']; + if (['Recharge'].includes(event[0]) + && (event[1].skill === 'Reflect')) return ['POST_SKILL']; + + if (['Effect'].includes(event[0]) && event[1].skill === 'Decay' && event[1].effect === 'Wither') return ['POST_SKILL']; diff --git a/server/src/cryp.rs b/server/src/cryp.rs index 976b22b9..7cdc4af6 100644 --- a/server/src/cryp.rs +++ b/server/src/cryp.rs @@ -470,6 +470,14 @@ impl Cryp { .fold(self.speed.value, |acc, fx| fx.0.apply(acc, fx.1)); return modified_speed; } + + pub fn red_life(&self) -> u64 { + self.red_life.value + } + + pub fn blue_life(&self) -> u64 { + self.blue_life.value + } pub fn green_life(&self) -> u64 { self.green_life.value @@ -482,8 +490,8 @@ impl Cryp { } } - pub fn recharge(&mut self) -> Event { - let skill = Skill::Recharge; + pub fn recharge(&mut self, skill: Skill, red_amount: u64, blue_amount: u64) -> Event { + // Should red type immunity block recharge??? if let Some(immunity) = self.immune(skill) { return Event::Immunity { skill, @@ -491,11 +499,16 @@ impl Cryp { }; } - let red = self.red_life.max.saturating_sub(self.red_life.value); - self.red_life.value = self.red_life.max; + // Do we need inversion? + let current_red_life = self.red_life(); + self.red_life.increase(red_amount); + let new_red_life = self.red_life.value; + let red = new_red_life - current_red_life; - let blue = self.blue_life.max.saturating_sub(self.blue_life.value); - self.blue_life.value = self.blue_life.max; + let current_blue_life = self.blue_life(); + self.blue_life.increase(blue_amount); + let new_blue_life = self.blue_life.value; + let blue = new_blue_life - current_blue_life; Event::Recharge { red, blue, skill } } diff --git a/server/src/skill.rs b/server/src/skill.rs index c3a2be58..832ce072 100644 --- a/server/src/skill.rs +++ b/server/src/skill.rs @@ -565,6 +565,8 @@ impl Skill { // Block Base Skill::Purify => 45, //Green dmg (heal) + Skill::Recharge => 85, //restore red and blue life (heal) + Skill::Reflect => 45, //restore blue life (heal) // Stun Base Skill::Sleep => 240, //Green dmg (heal) @@ -1156,11 +1158,18 @@ fn invert(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions, skill: fn reflect(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions, skill: Skill) -> Resolutions { let effect = CrypEffect::new(Effect::Reflect, skill.duration()); results.push(Resolution::new(source, target).event(target.add_effect(skill, effect))); + + let blue_amount = source.blue_damage().pct(skill.multiplier()); + results.push(Resolution::new(source, target).event(target.recharge(skill, 0, blue_amount))); + return results;; } fn recharge(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions, skill: Skill) -> Resolutions { - results.push(Resolution::new(source, target).event(target.recharge())); + let red_amount = source.red_damage().pct(skill.multiplier()); + let blue_amount = source.blue_damage().pct(skill.multiplier()); + + results.push(Resolution::new(source, target).event(target.recharge(skill, red_amount, blue_amount))); return results; } diff --git a/server/src/vbox.rs b/server/src/vbox.rs index 5b045df1..dec3556c 100644 --- a/server/src/vbox.rs +++ b/server/src/vbox.rs @@ -358,9 +358,9 @@ fn get_combos() -> Vec { Combo { units: vec![Var::Buff, Var::Green, Var::Blue], var: Var::Curse }, // Needs a buff Combo { units: vec![Var::Buff, Var::Red, Var::Blue], var: Var::Haste }, // Needs a buff - Combo { units: vec![Var::Debuff, Var::Red, Var::Red], var: Var::Snare }, + Combo { units: vec![Var::Debuff, Var::Red, Var::Red], var: Var::Snare }, // Dmg for disabled red Combo { units: vec![Var::Debuff, Var::Green, Var::Green], var: Var::Purge }, // Needs a buff - Combo { units: vec![Var::Debuff, Var::Blue, Var::Blue], var: Var::Silence }, + Combo { units: vec![Var::Debuff, Var::Blue, Var::Blue], var: Var::Silence }, // Dmg for disabled blue Combo { units: vec![Var::Debuff, Var::Red, Var::Green], var: Var::Slow }, // Needs a buff Combo { units: vec![Var::Debuff, Var::Green, Var::Blue], var: Var::Decay }, Combo { units: vec![Var::Debuff, Var::Red, Var::Blue], var: Var::Invert },