From 7d0b66ca3d054d8ecbd29ad2db902b8e14859279 Mon Sep 17 00:00:00 2001 From: Mashy Date: Mon, 27 May 2019 16:58:09 +1000 Subject: [PATCH] hostility --- server/src/item.rs | 24 +++++++++++++------ server/src/skill.rs | 58 +++++++++++++++++++++++++++++++++++---------- 2 files changed, 62 insertions(+), 20 deletions(-) diff --git a/server/src/item.rs b/server/src/item.rs index f2f84154..45018a76 100644 --- a/server/src/item.rs +++ b/server/src/item.rs @@ -70,7 +70,9 @@ pub enum Item { DecayI, DecayII, DecayIII, - Hostility, + HostilityI, + HostilityII, + HostilityIII, Haste, HealI, HealII, @@ -265,7 +267,9 @@ impl Item { Item::HexI => Some(Skill::HexI), Item::HexII => Some(Skill::HexII), Item::HexIII => Some(Skill::HexIII), - Item::Hostility => Some(Skill::Hostility), + Item::HostilityI => Some(Skill::HostilityI), + Item::HostilityII => Some(Skill::HostilityII), + Item::HostilityIII=> Some(Skill::HostilityIII), Item::Impurity => Some(Skill::Impurity), Item::InvertI => Some(Skill::InvertI), Item::InvertII => Some(Skill::InvertII), @@ -477,7 +481,9 @@ impl Item { self.into_skill().unwrap().multiplier(), self.into_skill().unwrap().effect().first().unwrap().get_duration()), - Item::Hostility => format!( + Item::HostilityI | + Item::HostilityII | + Item::HostilityIII => format!( "Gain Hostility for {:?}T. {} Hatred lasts {:?}T", self.into_skill().unwrap().effect().first().unwrap().get_duration(), "When attacked by Hostility you gain Hatred which increased red and blue power based on Damage taken.", @@ -644,8 +650,10 @@ impl Item { Item::ScatterI => vec![Item::Buff, Item::Blue, Item::Blue], Item::ScatterII => vec![Item::ScatterI, Item::ScatterI, Item::ScatterI], Item::ScatterIII => vec![Item::ScatterIII, Item::ScatterIII, Item::ScatterIII], + Item::Haste => vec![Item::Buff, Item::Red, Item::Green], Item::Impurity => vec![Item::Buff, Item::Green, Item::Blue], + Item::AmplifyI => vec![Item::Buff, Item::Red, Item::Blue], Item::AmplifyII => vec![Item::AmplifyI, Item::AmplifyI, Item::AmplifyI], Item::AmplifyIII => vec![Item::AmplifyII, Item::AmplifyII, Item::AmplifyII], @@ -688,7 +696,6 @@ impl Item { Item::RechargeII => vec![Item::RechargeI, Item::RechargeI, Item::RechargeI], Item::RechargeIII => vec![Item::RechargeII, Item::RechargeII, Item::RechargeII], - Item::StrangleI => vec![Item::Stun, Item::Red, Item::Red], Item::StrangleII => vec![Item::StrangleI, Item::StrangleI, Item::StrangleI], Item::StrangleIII => vec![Item::StrangleII, Item::StrangleII, Item::StrangleII], @@ -782,7 +789,9 @@ impl From for Item { Skill::DecayIII => Item::DecayIII, Skill::Debuff => Item::Debuff, Skill::Haste => Item::Haste, - Skill::Hostility => Item::Hostility, + Skill::HostilityI => Item::HostilityI, + Skill::HostilityII => Item::HostilityII, + Skill::HostilityIII => Item::HostilityIII, Skill::HealI => Item::HealI, Skill::HealII => Item::HealII, Skill::HealIII => Item::HealIII, @@ -912,8 +921,9 @@ pub fn get_combos() -> Vec { Combo { components: Item::ScatterIII.combo(), item: Item::ScatterIII }, Combo { components: Item::Haste.combo(), item: Item::Haste }, - Combo { components: Item::Hostility.combo(), item: Item::Hostility }, - + Combo { components: Item::HostilityI.combo(), item: Item::HostilityI }, + Combo { components: Item::HostilityII.combo(), item: Item::HostilityII }, + Combo { components: Item::HostilityIII.combo(), item: Item::HostilityIII }, Combo { components: Item::Impurity.combo(), item: Item::Impurity }, Combo { components: Item::AmplifyI.combo(), item: Item::AmplifyI }, diff --git a/server/src/skill.rs b/server/src/skill.rs index 2542893f..627abadc 100644 --- a/server/src/skill.rs +++ b/server/src/skill.rs @@ -161,7 +161,9 @@ pub fn resolve(skill: Skill, source: &mut Construct, target: &mut Construct, mut Skill::HexII | Skill::HexIII => hex(source, target, resolutions, skill), - Skill::Hostility => hostility(source, target, resolutions, skill), + Skill::HostilityI | + Skill::HostilityII | + Skill::HostilityIII => hostility(source, target, resolutions, skill), Skill::Impurity => impurity(source, target, resolutions, skill), Skill::InvertI | @@ -256,8 +258,11 @@ pub fn resolve(skill: Skill, source: &mut Construct, target: &mut Construct, mut //Triggered Skill::CorruptionI | Skill::CorruptionII | - Skill::CorruptionIII => panic!("should only trigget from corrupt hit"), + Skill::CorruptionIII => panic!("should only trigger from corrupt hit"), Skill::HasteStrike => panic!("should only trigger from haste"), + Skill::HatredI | + Skill::HatredII | + Skill::HatredIII => panic!("should only trigger from hatred"), Skill::ImpureBlast => panic!("should only trigger from impurity"), Skill::RiposteI | Skill::RiposteII | @@ -300,7 +305,14 @@ fn post_resolve(_skill: Skill, game: &mut Game, mut resolutions: Resolutions) -> } if target.affected(Effect::Hostility) { - resolutions = hatred(&mut source, &mut target, resolutions, skill, amount, Skill::Hostility); + let ConstructEffect { effect: _, duration: _, meta, tick: _ } = target.effects.iter() + .find(|e| e.effect == Effect::Hostility).unwrap().clone(); + match meta { + Some(EffectMeta::Skill(s)) => { + resolutions = hatred(&mut target, &mut source, resolutions, skill, amount, s); + }, + _ => panic!("no hatred skill"), + }; } // beware that scatter doesn't cause any damage @@ -727,7 +739,12 @@ pub enum Skill { HexII, HexIII, - Hostility, + HatredI, + HatredII, + HatredIII, + HostilityI, + HostilityII, + HostilityIII, ImpureBlast, Impurity, Injure, @@ -977,8 +994,16 @@ impl Skill { Skill::HexII => vec![ConstructEffect {effect: Effect::Hex, duration: 3, meta: None, tick: None}], Skill::HexIII => vec![ConstructEffect {effect: Effect::Hex, duration: 4, meta: None, tick: None}], - Skill::Hostility => vec![ConstructEffect {effect: Effect::Hostility, duration: 2, meta: None, tick: None}, - ConstructEffect {effect: Effect::Hatred, duration: 5, meta: None, tick: None}], + Skill::HostilityI => vec![ConstructEffect {effect: Effect::Hostility, duration: 2, + meta: Some(EffectMeta::Skill(Skill::HatredI)), tick: None}], + Skill::HostilityII => vec![ConstructEffect {effect: Effect::Hostility, duration: 3, + meta: Some(EffectMeta::Skill(Skill::HatredII)), tick: None}], + Skill::HostilityIII => vec![ConstructEffect {effect: Effect::Hostility, duration: 4, + meta: Some(EffectMeta::Skill(Skill::HatredIII)), tick: None}], + + Skill::HatredI => vec![ConstructEffect {effect: Effect::Hatred, duration: 5, meta: None, tick: None}], + Skill::HatredII => vec![ConstructEffect {effect: Effect::Hatred, duration: 7, meta: None, tick: None}], + Skill::HatredIII => vec![ConstructEffect {effect: Effect::Hatred, duration: 9, meta: None, tick: None}], Skill::Impurity => vec![ConstructEffect {effect: Effect::Impurity, duration: 3, meta: Some(EffectMeta::Multiplier(150)), tick: None }], @@ -991,7 +1016,7 @@ impl Skill { meta: Some(EffectMeta::Skill(Skill::RiposteI)), tick: None}], Skill::ParryII => vec![ConstructEffect {effect: Effect::Parry, duration: 2, meta: Some(EffectMeta::Skill(Skill::RiposteII)), tick: None}], - Skill::ParryIII => vec![ConstructEffect {effect: Effect::Parry, duration: 2, + Skill::ParryIII => vec![ConstructEffect {effect: Effect::Parry, duration: 2, meta: Some(EffectMeta::Skill(Skill::RiposteIII)), tick: None}], Skill::ReflectI => vec![ConstructEffect {effect: Effect::Reflect, duration: 1, meta: None, tick: None }], @@ -1017,11 +1042,11 @@ impl Skill { Skill::SilenceII => vec![ConstructEffect {effect: Effect::Silence, duration: 3, meta: None, tick: None}], Skill::SilenceIII => vec![ConstructEffect {effect: Effect::Silence, duration: 4, meta: None, tick: None}], - Skill::SiphonI => vec![ConstructEffect {effect: Effect::Siphon, duration: 2, + Skill::SiphonI => vec![ConstructEffect {effect: Effect::Siphon, duration: 2, meta: Some(EffectMeta::Skill(Skill::SiphonTickI)), tick: None}], - Skill::SiphonII => vec![ConstructEffect {effect: Effect::Siphon, duration: 3, + Skill::SiphonII => vec![ConstructEffect {effect: Effect::Siphon, duration: 3, meta: Some(EffectMeta::Skill(Skill::SiphonTickII)), tick: None}], - Skill::SiphonIII => vec![ConstructEffect {effect: Effect::Siphon, duration: 4, + Skill::SiphonIII => vec![ConstructEffect {effect: Effect::Siphon, duration: 4, meta: Some(EffectMeta::Skill(Skill::SiphonTickIII)), tick: None}], Skill::SleepI => vec![ConstructEffect {effect: Effect::Stun, duration: 2, meta: None, tick: None}], @@ -1180,7 +1205,9 @@ impl Skill { Skill::CorruptIII =>Some(1), - Skill::Hostility => Some(1), + Skill::HostilityI | + Skill::HostilityII | + Skill::HostilityIII => Some(1), //----------- // Never cast directly @@ -1194,6 +1221,9 @@ impl Skill { Skill::CorruptionI | Skill::CorruptionII | Skill::CorruptionIII | + Skill::HatredI | + Skill::HatredII | + Skill::HatredIII | // Ticks Skill::CorruptionTickI | Skill::CorruptionTickII | @@ -1349,7 +1379,9 @@ impl Skill { Skill::HealI | Skill::HealII | Skill::HealIII | - Skill::Hostility | + Skill::HostilityI | + Skill::HostilityII | + Skill::HostilityIII | Skill::InvertI | Skill::InvertII | Skill::InvertIII | @@ -1728,7 +1760,7 @@ fn hostility(source: &mut Construct, target: &mut Construct, mut results: Resolu } fn hatred(source: &mut Construct, target: &mut Construct, mut results: Resolutions, reflect_skill: Skill, amount: u64, skill: Skill) -> Resolutions { - let hatred = skill.effect().last().unwrap().clone() + let hatred = skill.effect().first().unwrap().clone() .set_meta(EffectMeta::AddedDamage(amount)); results.push(Resolution::new(source, target).event(target.add_effect(reflect_skill, hatred)));