diff --git a/WORKLOG.md b/WORKLOG.md index 74d6e680..91f21879 100644 --- a/WORKLOG.md +++ b/WORKLOG.md @@ -29,6 +29,8 @@ *CLIENT* +mobile info page + rework scatter hatred maybe diff --git a/server/src/skill.rs b/server/src/skill.rs index 0ab9f711..2c243f05 100644 --- a/server/src/skill.rs +++ b/server/src/skill.rs @@ -466,16 +466,6 @@ pub enum Event { type Resolutions = Vec; pub type Cooldown = Option; -#[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)] -enum EffectCategory { - Buff, - Debuff, - - Constant, - - Ko, -} - #[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)] pub enum Effect { Amplify, @@ -632,50 +622,50 @@ impl Effect { } } - fn category(&self) -> EffectCategory { + fn colour(&self) -> Option { match self { // physical - Effect::Stun => EffectCategory::Debuff, - Effect::Block => EffectCategory::Buff, - Effect::Buff => EffectCategory::Buff, - Effect::Parry => EffectCategory::Buff, - Effect::Vulnerable => EffectCategory::Debuff, - Effect::Snare => EffectCategory::Debuff, - Effect::Clutch => EffectCategory::Buff, - Effect::Taunt => EffectCategory::Buff, + Effect::Stun => Some(Colour::Red), + Effect::Block => Some(Colour::Green), + Effect::Buff => Some(Colour::Green), + Effect::Parry => Some(Colour::Green), + Effect::Vulnerable => Some(Colour::Red), + Effect::Snare => Some(Colour::Red), + Effect::Clutch => Some(Colour::Green), + Effect::Taunt => Some(Colour::Green), // magic - Effect::Hex => EffectCategory::Debuff, - Effect::Curse => EffectCategory::Debuff, - Effect::Banish => EffectCategory::Debuff, // todo randomise + Effect::Hex => Some(Colour::Blue), + Effect::Curse => Some(Colour::Blue), + Effect::Banish => None, // Effect::Banish => rng.gen_bool(0.5), - Effect::Slow => EffectCategory::Debuff, - Effect::Haste => EffectCategory::Buff, - Effect::Hatred => EffectCategory::Buff, - Effect::Reflect => EffectCategory::Buff, - Effect::Amplify => EffectCategory::Buff, - Effect::Silence => EffectCategory::Debuff, - Effect::Wither => EffectCategory::Debuff, - Effect::Purge => EffectCategory::Debuff, + Effect::Slow => Some(Colour::Blue), + Effect::Haste => Some(Colour::Green), + Effect::Hatred => Some(Colour::Green), + Effect::Reflect => Some(Colour::Green), + Effect::Amplify => Some(Colour::Green), + Effect::Silence => Some(Colour::Blue), + Effect::Wither => Some(Colour::Blue), + Effect::Purge => Some(Colour::Blue), - Effect::Corrupt => EffectCategory::Buff, - Effect::Corruption => EffectCategory::Debuff, + Effect::Corrupt => Some(Colour::Green), + Effect::Corruption => Some(Colour::Blue), - Effect::Hostility => EffectCategory::Buff, + Effect::Hostility => Some(Colour::Green), // magic - Effect::Impurity => EffectCategory::Buff, - Effect::Scatter => EffectCategory::Buff, - Effect::Invert => EffectCategory::Buff, + Effect::Impurity => Some(Colour::Green), + Effect::Scatter => Some(Colour::Green), + Effect::Invert => Some(Colour::Green), // effects over time - Effect::Triage => EffectCategory::Buff, - Effect::Decay => EffectCategory::Debuff, - Effect::Regen => EffectCategory::Buff, - Effect::Siphon => EffectCategory::Debuff, + Effect::Triage => Some(Colour::Green), + Effect::Decay => Some(Colour::Blue), + Effect::Regen => Some(Colour::Green), + Effect::Siphon => Some(Colour::Blue), - Effect::Ko => EffectCategory::Ko, + Effect::Ko => None, } } } @@ -1864,7 +1854,13 @@ fn silence(source: &mut Construct, target: &mut Construct, mut results: Resoluti fn purge(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions { while let Some(i) = target.effects .iter() - .position(|ce| ce.effect.category() == EffectCategory::Buff) { + .position(|ce| { + if let Some(c) = ce.effect.colour() { + c == Colour::Green + } else { + false + } + }) { let ce = target.effects.remove(i); results.push(Resolution::new(source, target) .event(Event::Removal { effect: ce.effect, construct_effects: target.effects.clone() })); @@ -1890,7 +1886,13 @@ fn purify(source: &mut Construct, target: &mut Construct, mut results: Resolutio let amount = source.green_power().pct(skill.multiplier()); while let Some(i) = target.effects .iter() - .position(|ce| ce.effect.category() == EffectCategory::Debuff) { + .position(|ce| { + if let Some(c) = ce.effect.colour() { + [Colour::Red, Colour::Blue].contains(&c) + } else { + false + } + }) { let ce = target.effects.remove(i); results.push(Resolution::new(source, target) .event(Event::Removal { effect: ce.effect, construct_effects: target.effects.clone() })