From 8c68f7fec9e7cd3cda7ff2fa9019a7dd6a5b9e18 Mon Sep 17 00:00:00 2001 From: Mashy Date: Thu, 2 May 2019 09:36:12 +1000 Subject: [PATCH 1/2] added chaos, slay, moved purify --- client/src/utils.jsx | 4 ++++ server/src/skill.rs | 51 ++++++++++++++++++++++++++++++++++++++------ server/src/vbox.rs | 18 ++++++++++------ 3 files changed, 59 insertions(+), 14 deletions(-) diff --git a/client/src/utils.jsx b/client/src/utils.jsx index 7dcf50ca..e6c52928 100644 --- a/client/src/utils.jsx +++ b/client/src/utils.jsx @@ -216,6 +216,10 @@ function getCombatSequence(event) { if (dotTicks.includes(event[1].skill)) return ['END_SKILL', 'POST_SKILL']; if (['Immunity'].includes(event[0])) return ['START_SKILL', 'POST_SKILL']; + if (['Healing'].includes(event[0]) && event[1].skill === 'Slay') return ['POST_SKILL']; + + if (['Damage'].includes(event[0]) + && event[1].skill === 'Chaos' && event[1].colour === 'RedDamage') return ['POST_SKILL']; if (['Ko'].includes(event[0]) || (event[1].skill === 'Throw' && event[1].effect === 'Vulnerable')) return ['POST_SKILL']; diff --git a/server/src/skill.rs b/server/src/skill.rs index 997e78f8..a411944d 100644 --- a/server/src/skill.rs +++ b/server/src/skill.rs @@ -41,6 +41,7 @@ pub fn resolve(skill: Skill, source: &mut Cryp, target: &mut Cryp, mut resolutio Skill::Banish => banish(source, target, resolutions, Skill::Banish), // TODO prevent all actions Skill::Blast => blast(source, target, resolutions, Skill::Blast), Skill::Block => block(source, target, resolutions, Skill::Block), + Skill::Chaos => chaos(source, target, resolutions, Skill::Chaos), Skill::Clutch => clutch(source, target, resolutions, Skill::Clutch), Skill::Corrupt => corrupt(source, target, resolutions, Skill::Corrupt), Skill::CorruptionTick => corruption_tick(source, target, resolutions, Skill::CorruptionTick), @@ -65,7 +66,7 @@ pub fn resolve(skill: Skill, source: &mut Cryp, target: &mut Cryp, mut resolutio Skill::Silence => silence(source, target, resolutions, Skill::Silence), // target cannot cast spells Skill::Siphon => siphon(source, target, resolutions, Skill::Siphon), Skill::SiphonTick => siphon_tick(source, target, resolutions, Skill::SiphonTick), // hot - Skill::Slay => unimplemented!(), + Skill::Slay => slay(source, target, resolutions, Skill::Slay), // hybrid dmg self heal Skill::Slow => slow(source, target, resolutions, Skill::Slow), // speed slow Skill::Snare => snare(source, target, resolutions, Skill::Snare), Skill::Strangle => strangle(source, target, resolutions, Skill::Strangle), @@ -526,6 +527,7 @@ pub enum Skill { // Chaos // ----------------- Banish, + Chaos, Hex, Haste, Slow, @@ -541,18 +543,23 @@ pub enum Skill { impl Skill { pub fn multiplier(&self) -> u64 { match self { + // Attack Base Skill::Attack => 100, // 1.0 to pass tests - Skill::Strike => 110, + Skill::Blast => 130, // BB + Skill::Chaos => 50, // BR + Skill::Heal => 100, //GG 1.0 to pass tests + Skill::Slay => 70, // RG + Skill::Strike => 110, //RR Skill::StrikeII => 130, Skill::StrikeIII => 150, - Skill::StrangleTick => 30, - Skill::Riposte => 100, - Skill::Heal => 100, // 1.0 to pass tests - Skill::TriageTick => 65, - Skill::Blast => 130, + + // Others Skill::CorruptionTick => 80, Skill::DecayTick => 60, + Skill::Riposte => 100, Skill::SiphonTick => 100, // 1.0 to pass tests + Skill::StrangleTick => 30, + Skill::TriageTick => 65, _ => 100, } } @@ -635,6 +642,7 @@ impl Skill { Skill::TriageTick => None, Skill::Throw => Some(1), // no damage stun, adds vulnerable Skill::Blast => None, + Skill::Chaos => None, Skill::Amplify => Some(1), Skill::Invert => Some(2), Skill::Decay => None, // dot @@ -708,6 +716,7 @@ impl Skill { Skill::Invert => Category::Green, Skill::Blast => Category::Blue, + Skill::Chaos => Category::Red, Skill::Amplify => Category::Blue, Skill::Decay => Category::Blue, // dot Skill::DecayTick => Category::BlueTick, // hot @@ -947,6 +956,19 @@ fn empower(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions, skill return results; } +fn slay(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions, skill: Skill) -> Resolutions { + let amount = source.red_damage().pct(skill.multiplier()); + target.deal_red_damage(skill, amount) + .into_iter() + .for_each(|e| results.push(Resolution::new(source, target).event(e))); + + source.deal_green_damage(skill, amount) + .into_iter() + .for_each(|e| results.push(Resolution::new(source, source).event(e))); + + return results; +} + fn heal(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions, skill: Skill) -> Resolutions { let amount = source.green_damage().pct(skill.multiplier()); target.deal_green_damage(skill, amount) @@ -971,6 +993,21 @@ fn triage_tick(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions, s return results; } +fn chaos(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions, skill: Skill) -> Resolutions { + let mut rng = thread_rng(); + let b_rng: u64 = rng.gen_range(0, 20); + let amount = source.blue_damage().pct(skill.multiplier()) + b_rng; + target.deal_blue_damage(skill, amount) + .into_iter() + .for_each(|e| results.push(Resolution::new(source, target).event(e))); + let r_rng: u64 = rng.gen_range(0, 20); + let amount = source.red_damage().pct(skill.multiplier()) + r_rng; + target.deal_red_damage(skill, amount) + .into_iter() + .for_each(|e| results.push(Resolution::new(source, target).event(e))); + return results; +} + fn blast(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions, skill: Skill) -> Resolutions { let amount = source.blue_damage().pct(skill.multiplier()); target.deal_blue_damage(skill, amount) diff --git a/server/src/vbox.rs b/server/src/vbox.rs index bcdde1c1..1793a2e4 100644 --- a/server/src/vbox.rs +++ b/server/src/vbox.rs @@ -65,6 +65,7 @@ pub enum Var { Amplify, Banish, Blast, + Chaos, Curse, Decay, Empower, @@ -192,6 +193,7 @@ impl Var { Var::Banish => Some(Skill::Banish), Var::Blast => Some(Skill::Blast), Var::Block => Some(Skill::Block), + Var::Chaos => Some(Skill::Chaos), Var::Curse => Some(Skill::Curse), Var::Decay => Some(Skill::Decay), Var::Empower => Some(Skill::Empower), @@ -208,7 +210,7 @@ impl Var { Var::Ruin => Some(Skill::Ruin), Var::Shield => Some(Skill::Shield), Var::Silence => Some(Skill::Silence), - // Var::Slay => Some(Skill::Slay), + Var::Slay => Some(Skill::Slay), Var::Slow => Some(Skill::Slow), Var::Siphon => Some(Skill::Siphon), Var::Snare => Some(Skill::Snare), @@ -265,6 +267,7 @@ impl From for Var { Skill::Banish => Var::Banish, Skill::Blast => Var::Blast, Skill::Block => Var::Block, + Skill::Chaos => Var::Chaos, Skill::Curse => Var::Curse, Skill::Clutch => Var::Clutch, Skill::Decay => Var::Decay, @@ -283,6 +286,7 @@ impl From for Var { Skill::Shield => Var::Shield, Skill::Silence => Var::Silence, Skill::Siphon => Var::Siphon, + Skill::Slay => Var::Slay, Skill::Slow => Var::Slow, Skill::Snare => Var::Snare, Skill::Strangle => Var::Strangle, @@ -362,7 +366,7 @@ fn get_combos() -> Vec { Combo { units: vec![Var::Block, Var::Green, Var::Green], var: Var::Reflect }, Combo { units: vec![Var::Block, Var::Blue, Var::Blue], var: Var::Corrupt }, Combo { units: vec![Var::Block, Var::Red, Var::Green], var: Var::Taunt }, - Combo { units: vec![Var::Block, Var::Green, Var::Blue], var: Var::Recharge }, // was life before (clash) + Combo { units: vec![Var::Block, Var::Green, Var::Blue], var: Var::Purify }, Combo { units: vec![Var::Block, Var::Red, Var::Blue], var: Var::Recharge }, Combo { units: vec![Var::Stun, Var::Red, Var::Red], var: Var::Strangle }, @@ -376,11 +380,11 @@ fn get_combos() -> Vec { Combo { units: vec![Var::Strike, Var::Strike, Var::Strike], var: Var::StrikeII }, Combo { units: vec![Var::StrikeII, Var::StrikeII, Var::StrikeII], var: Var::StrikeIII }, - Combo { units: vec![Var::Attack, Var::Green, Var::Green], var: Var::Heal }, - Combo { units: vec![Var::Attack, Var::Blue, Var::Blue], var: Var::Blast }, - Combo { units: vec![Var::Attack, Var::Red, Var::Green], var: Var::Purify }, - Combo { units: vec![Var::Attack, Var::Green, Var::Blue], var: Var::Decay }, - Combo { units: vec![Var::Attack, Var::Red, Var::Blue], var: Var::Blast }, // AAAAAAAAAAAAAAAAAA + Combo { units: vec![Var::Attack, Var::Green, Var::Green], var: Var::Heal }, + Combo { units: vec![Var::Attack, Var::Blue, Var::Blue], var: Var::Blast }, + Combo { units: vec![Var::Attack, Var::Red, Var::Green], var: Var::Slay }, + Combo { units: vec![Var::Attack, Var::Green, Var::Blue], var: Var::Decay }, + Combo { units: vec![Var::Attack, Var::Red, Var::Blue], var: Var::Chaos }, Combo { units: vec![Var::Damage, Var::Red, Var::Red], var: Var::RedDamageI }, Combo { units: vec![Var::Damage, Var::Green, Var::Green], var: Var::GreenDamageI }, From 39ace02d922d9ecce3ebe73a02c8b2ad7abdc495 Mon Sep 17 00:00:00 2001 From: Mashy Date: Thu, 2 May 2019 09:40:03 +1000 Subject: [PATCH 2/2] fixed multi RNG --- server/src/skill.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/server/src/skill.rs b/server/src/skill.rs index a411944d..0bcef14e 100644 --- a/server/src/skill.rs +++ b/server/src/skill.rs @@ -716,7 +716,7 @@ impl Skill { Skill::Invert => Category::Green, Skill::Blast => Category::Blue, - Skill::Chaos => Category::Red, + Skill::Chaos => Category::Blue, Skill::Amplify => Category::Blue, Skill::Decay => Category::Blue, // dot Skill::DecayTick => Category::BlueTick, // hot @@ -996,12 +996,12 @@ fn triage_tick(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions, s fn chaos(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions, skill: Skill) -> Resolutions { let mut rng = thread_rng(); let b_rng: u64 = rng.gen_range(0, 20); - let amount = source.blue_damage().pct(skill.multiplier()) + b_rng; + let amount = source.blue_damage().pct(skill.multiplier() + b_rng); target.deal_blue_damage(skill, amount) .into_iter() .for_each(|e| results.push(Resolution::new(source, target).event(e))); let r_rng: u64 = rng.gen_range(0, 20); - let amount = source.red_damage().pct(skill.multiplier()) + r_rng; + let amount = source.red_damage().pct(skill.multiplier() + r_rng); target.deal_red_damage(skill, amount) .into_iter() .for_each(|e| results.push(Resolution::new(source, target).event(e)));