From efcc4379850d4ac9cdcbd1de308f8619bcf2637b Mon Sep 17 00:00:00 2001 From: Mashy Date: Thu, 7 Nov 2019 10:08:25 +1000 Subject: [PATCH] ruin deals dmg to each construct and reduce cd --- server/src/game.rs | 1 + server/src/item.rs | 6 +- server/src/skill.rs | 200 ++++++++++++++++++++++++-------------------- 3 files changed, 112 insertions(+), 95 deletions(-) diff --git a/server/src/game.rs b/server/src/game.rs index 12a175b4..c996782c 100644 --- a/server/src/game.rs +++ b/server/src/game.rs @@ -1390,6 +1390,7 @@ mod tests { true }, Event::AoeSkill { skill: _ } => false, + Event::Damage { amount: _, mitigation: _, colour: _, skill: _ } => false, _ => panic!("ruin result not effect {:?}", event), } false => false, diff --git a/server/src/item.rs b/server/src/item.rs index 4d5604f0..3e93435d 100644 --- a/server/src/item.rs +++ b/server/src/item.rs @@ -850,8 +850,10 @@ impl Item { Item::Ruin| Item::RuinPlus | Item::RuinPlusPlus => format!( - "Team wide Stun for {:?}T. Stunned constructs are unable to cast skills.", - self.into_skill().unwrap().effect()[0].get_duration()), + "Team wide skill. Stun each construct for {:?}T. + Deal {:?}% BluePower as blue damage to each construct.", + self.into_skill().unwrap().effect()[0].get_duration(), + self.into_skill().unwrap().multiplier()), Item::Link| Item::LinkPlus | diff --git a/server/src/skill.rs b/server/src/skill.rs index ceccf0f8..8d01e061 100644 --- a/server/src/skill.rs +++ b/server/src/skill.rs @@ -753,48 +753,48 @@ impl Skill { // Attack Base Skill::Attack => 80, // Base - Skill::Blast=> 105, // BB + Skill::Blast => 105, // BB Skill::BlastPlus => 140, // BB Skill::BlastPlusPlus => 200, // BB - Skill::Chaos=> 40, // BR + Skill::Chaos => 40, // BR Skill::ChaosPlus => 65, // BR Skill::ChaosPlusPlus => 90, // BR - Skill::Heal=> 125, //GG + Skill::Heal => 125, //GG Skill::HealPlus => 185, //GG Skill::HealPlusPlus => 270, //GG - Skill::SiphonTick=> 25, // GB + Skill::SiphonTick => 25, // GB Skill::SiphonTickPlus => 30, Skill::SiphonTickPlusPlus => 40, - Skill::Slay=> 45, // RG + Skill::Slay => 45, // RG Skill::SlayPlus => 65, Skill::SlayPlusPlus => 100, - Skill::Strike=> 90, //RR + Skill::Strike => 90, //RR Skill::StrikePlus => 140, Skill::StrikePlusPlus => 200, // Block Base - Skill::ElectrocuteTick=> 80, + Skill::ElectrocuteTick => 80, Skill::ElectrocuteTickPlus => 100, Skill::ElectrocuteTickPlusPlus => 130, - Skill::CounterAttack=> 120, + Skill::CounterAttack => 120, Skill::CounterAttackPlus => 160, Skill::CounterAttackPlusPlus => 230, - Skill::Purify=> 45, //Green dmg (heal) + Skill::Purify => 45, //Green dmg (heal) Skill::PurifyPlus => 70, Skill::PurifyPlusPlus => 105, - Skill::Reflect=> 45, //Recharge blue life (heal) + Skill::Reflect => 45, //Recharge blue life (heal) Skill::ReflectPlus => 70, Skill::ReflectPlusPlus => 100, - Skill::Recharge=> 70, //Recharge red and blue life (heal) + Skill::Recharge => 70, //Recharge red and blue life (heal) Skill::RechargePlus => 110, Skill::RechargePlusPlus => 170, @@ -803,29 +803,36 @@ impl Skill { Skill::SustainPlusPlus => 230, // Stun Base - Skill::Sleep=> 200, //Green dmg (heal) + Skill::Sleep => 200, //Green dmg (heal) Skill::SleepPlus => 290, Skill::SleepPlusPlus => 400, - Skill::Banish=> 40, //Green dmg (heal) + Skill::Banish => 40, //Green dmg (heal) Skill::BanishPlus => 75, Skill::BanishPlusPlus => 125, - Skill::Bash=> 45, + Skill::Bash => 45, Skill::BashPlus => 65, Skill::BashPlusPlus => 100, - Skill::Link=> 75, + Skill::Link => 75, Skill::LinkPlus => 100, Skill::LinkPlusPlus => 150, + + Skill::Ruin => 40, + Skill::RuinPlus => 70, + Skill::RuinPlusPlus => 100, + // Debuff Base - Skill::DecayTick=> 33, + Skill::DecayTick => 33, Skill::DecayTickPlus => 45, Skill::DecayTickPlusPlus => 70, - Skill::Silence=> 55, // Deals more per blue skill on target + + Skill::Silence => 55, // Deals more per blue skill on target Skill::SilencePlus => 80, Skill::SilencePlusPlus => 110, - Skill::Restrict=> 40, // Deals more per red skill on target + + Skill::Restrict => 40, // Deals more per red skill on target Skill::RestrictPlus => 65, Skill::RestrictPlusPlus => 100, @@ -834,11 +841,11 @@ impl Skill { Skill::HasteStrike => 60, - Skill::Intercept=> 80, + Skill::Intercept => 80, Skill::InterceptPlus => 110, Skill::InterceptPlusPlus => 150, - Skill::TriageTick=> 75, + Skill::TriageTick => 75, Skill::TriageTickPlus => 110, Skill::TriageTickPlusPlus => 140, @@ -956,7 +963,7 @@ impl Skill { Skill::Ruin => vec![ConstructEffect {effect: Effect::Stun, duration: 1, meta: None, tick: None}], Skill::RuinPlus => vec![ConstructEffect {effect: Effect::Stun, duration: 1, meta: None, tick: None}], - Skill::RuinPlusPlus => vec![ConstructEffect {effect: Effect::Stun, duration: 2, meta: None, tick: None}], + Skill::RuinPlusPlus => vec![ConstructEffect {effect: Effect::Stun, duration: 1, meta: None, tick: None}], Skill::Purge => vec![ConstructEffect {effect: Effect::Purge, duration: 2, meta: None, tick: None}], Skill::PurgePlus => vec![ConstructEffect {effect: Effect::Purge, duration: 3, meta: None, tick: None}], @@ -967,8 +974,8 @@ impl Skill { Skill::LinkPlusPlus => vec![ConstructEffect {effect: Effect::Stun, duration: 1, meta: None, tick: None}], Skill::Silence => vec![ConstructEffect {effect: Effect::Silence, duration: 2, meta: None, tick: None}], - Skill::SilencePlus => vec![ConstructEffect {effect: Effect::Silence, duration: 3, meta: None, tick: None}], - Skill::SilencePlusPlus => vec![ConstructEffect {effect: Effect::Silence, duration: 4, meta: None, tick: None}], + Skill::SilencePlus => vec![ConstructEffect {effect: Effect::Silence, duration: 2, meta: None, tick: None}], + Skill::SilencePlusPlus => vec![ConstructEffect {effect: Effect::Silence, duration: 2, meta: None, tick: None}], Skill::Siphon => vec![ConstructEffect {effect: Effect::Siphon, duration: 2, meta: Some(EffectMeta::Skill(Skill::SiphonTick)), tick: None}], @@ -982,8 +989,8 @@ impl Skill { Skill::SleepPlusPlus => vec![ConstructEffect {effect: Effect::Stun, duration: 4, meta: None, tick: None}], Skill::Restrict => vec![ConstructEffect {effect: Effect::Restrict, duration: 2, meta: None, tick: None}], - Skill::RestrictPlus => vec![ConstructEffect {effect: Effect::Restrict, duration: 3, meta: None, tick: None}], - Skill::RestrictPlusPlus => vec![ConstructEffect {effect: Effect::Restrict, duration: 4, meta: None, tick: None}], + Skill::RestrictPlus => vec![ConstructEffect {effect: Effect::Restrict, duration: 2, meta: None, tick: None}], + Skill::RestrictPlusPlus => vec![ConstructEffect {effect: Effect::Restrict, duration: 2, meta: None, tick: None}], Skill::Bash => vec![ConstructEffect {effect: Effect::Stun, duration: 2, meta: Some(EffectMeta::Skill(Skill::Bash)), tick: None}], @@ -1012,24 +1019,25 @@ impl Skill { pub fn base_cd(&self) -> Cooldown { match self { Skill::Attack => None, - Skill::Debuff => Some(1), + Skill::Block => None, // reduce damage Skill::Buff => None, + Skill::Debuff => Some(1), + Skill::Stun => Some(2), Skill::Strike=> None, Skill::StrikePlus => None, Skill::StrikePlusPlus => None, - Skill::Block => None, // reduce damage + Skill::Counter| Skill::CounterPlus | Skill::CounterPlusPlus => None, // avoid all damage - Skill::Restrict=> Some(2), - Skill::RestrictPlus => Some(2), + Skill::Restrict | + Skill::RestrictPlus | Skill::RestrictPlusPlus => Some(2), - Skill::Stun => Some(2), - Skill::Bash=> Some(2), - Skill::BashPlus => Some(2), + Skill::Bash | + Skill::BashPlus | Skill::BashPlusPlus => Some(2), Skill::Heal=> None, @@ -1040,97 +1048,99 @@ impl Skill { Skill::TriagePlus => None, // hot Skill::TriagePlusPlus => None, // hot - Skill::Break=> Some(1), // no damage stun, adds vulnerable - Skill::BreakPlus => Some(1), + Skill::Break | // no damage stun, adds vulnerable + Skill::BreakPlus | Skill::BreakPlusPlus => Some(1), - Skill::Blast=> None, - Skill::BlastPlus => None, + Skill::Blast | + Skill::BlastPlus | Skill::BlastPlusPlus => None, - Skill::Chaos=> None, - Skill::ChaosPlus => None, + Skill::Chaos | + Skill::ChaosPlus | Skill::ChaosPlusPlus => None, - Skill::Amplify=> Some(1), - Skill::AmplifyPlus => Some(1), + Skill::Amplify | + Skill::AmplifyPlus | Skill::AmplifyPlusPlus => Some(1), - Skill::Hybrid| + + Skill::Hybrid | Skill::HybridPlus | Skill::HybridPlusPlus => Some(1), - Skill::Invert=> Some(2), - Skill::InvertPlus => Some(2), + Skill::Invert | + Skill::InvertPlus | Skill::InvertPlusPlus => Some(2), - Skill::Decay=> Some(1), // dot - Skill::DecayPlus => Some(1), + + Skill::Decay | + Skill::DecayPlus | Skill::DecayPlusPlus => Some(1), - Skill::Siphon| + + Skill::Siphon | Skill::SiphonPlus | Skill::SiphonPlusPlus => None, - Skill::Curse=> Some(1), - Skill::CursePlus => Some(1), + Skill::Curse | + Skill::CursePlus | Skill::CursePlusPlus => Some(1), - Skill::Link=> Some(2), - Skill::LinkPlus => Some(2), + Skill::Link | + Skill::LinkPlus | Skill::LinkPlusPlus => Some(2), - Skill::Silence=> Some(2), - Skill::SilencePlus => Some(2), + Skill::Silence | + Skill::SilencePlus | Skill::SilencePlusPlus => Some(2), Skill::Purify | Skill::PurifyPlus | Skill::PurifyPlusPlus => None, - Skill::Purge=> Some(1), - Skill::PurgePlus => Some(1), + Skill::Purge | + Skill::PurgePlus | Skill::PurgePlusPlus => Some(1), Skill::Banish | Skill::BanishPlus | Skill::BanishPlusPlus => Some(2), - Skill::Haste=> Some(1), - Skill::HastePlus => Some(1), + Skill::Haste | + Skill::HastePlus | Skill::HastePlusPlus => Some(1), Skill::Reflect | Skill::ReflectPlus | Skill::ReflectPlusPlus => None, - Skill::Recharge=> None, - Skill::RechargePlus => None, + Skill::Recharge | + Skill::RechargePlus | Skill::RechargePlusPlus => None, - Skill::Ruin=> Some(3), - Skill::RuinPlus => Some(2), + Skill::Ruin | + Skill::RuinPlus | Skill::RuinPlusPlus => Some(2), Skill::Slay=> None, Skill::SlayPlus => None, Skill::SlayPlusPlus => None, - Skill::Sleep=> Some(2), - Skill::SleepPlus => Some(2), + Skill::Sleep | + Skill::SleepPlus | Skill::SleepPlusPlus => Some(2), Skill::Sustain | Skill::SustainPlus | Skill::SustainPlusPlus => Some(1), - Skill::Intercept=> Some(2), - Skill::InterceptPlus => Some(2), + Skill::Intercept | + Skill::InterceptPlus | Skill::InterceptPlusPlus => Some(2), Skill::Electrify | Skill::ElectrifyPlus | Skill::ElectrifyPlusPlus => None, - - Skill::Absorb| + Skill::Absorb | Skill::AbsorbPlus | Skill::AbsorbPlusPlus => Some(1), @@ -1167,17 +1177,17 @@ impl Skill { pub fn ko_castable(&self) -> bool { match self { - Skill::ElectrocuteTick| + Skill::ElectrocuteTick | Skill::ElectrocuteTickPlus | Skill::ElectrocuteTickPlusPlus | - Skill::DecayTick| + Skill::DecayTick | Skill::DecayTickPlus | Skill::DecayTickPlusPlus | - Skill::SiphonTick| + Skill::SiphonTick | Skill::SiphonTickPlus | Skill::SiphonTickPlusPlus | - Skill::TriageTick| + Skill::TriageTick | Skill::TriageTickPlus | Skill::TriageTickPlusPlus => true, _ => false, @@ -1186,17 +1196,16 @@ impl Skill { pub fn is_tick(&self) -> bool { match self { - Skill::ElectrocuteTick| + Skill::ElectrocuteTick | Skill::ElectrocuteTickPlus | Skill::ElectrocuteTickPlusPlus | - Skill::DecayTick| + Skill::DecayTick | Skill::DecayTickPlus | Skill::DecayTickPlusPlus | - Skill::SiphonTick| + Skill::SiphonTick | Skill::SiphonTickPlus | Skill::SiphonTickPlusPlus | - - Skill::TriageTick| + Skill::TriageTick | Skill::TriageTickPlus | Skill::TriageTickPlusPlus => true, @@ -1206,19 +1215,19 @@ impl Skill { pub fn speed(&self) -> u64 { match self { - Skill::SiphonTick| + Skill::SiphonTick | Skill::SiphonTickPlus | Skill::SiphonTickPlusPlus => Skill::Siphon.speed(), - Skill::DecayTick| + Skill::DecayTick | Skill::DecayTickPlus | Skill::DecayTickPlusPlus => Skill::Decay.speed(), - Skill::TriageTick| + Skill::TriageTick | Skill::TriageTickPlus | Skill::TriageTickPlusPlus => Skill::Triage.speed(), - Skill::ElectrocuteTick| + Skill::ElectrocuteTick | Skill::ElectrocuteTickPlus | Skill::ElectrocuteTickPlusPlus => Skill::Electrify.speed(), @@ -1228,7 +1237,7 @@ impl Skill { pub fn aoe(&self) -> bool { match self { - Skill::Ruin| + Skill::Ruin | Skill::RuinPlus | Skill::RuinPlusPlus => true, _ => false, @@ -1243,44 +1252,44 @@ impl Skill { Skill::AmplifyPlus | Skill::AmplifyPlusPlus | Skill::Block | - Skill::Sustain| + Skill::Sustain | Skill::SustainPlus | Skill::SustainPlusPlus | - Skill::Electrify| + Skill::Electrify | Skill::ElectrifyPlus | Skill::ElectrifyPlusPlus | - Skill::Haste| + Skill::Haste | Skill::HastePlus | Skill::HastePlusPlus | - Skill::Heal| + Skill::Heal | Skill::HealPlus | Skill::HealPlusPlus | - Skill::Absorb| + Skill::Absorb | Skill::AbsorbPlus | Skill::AbsorbPlusPlus | - Skill::Invert| + Skill::Invert | Skill::InvertPlus | Skill::InvertPlusPlus | - Skill::Intercept| + Skill::Intercept | Skill::InterceptPlus | Skill::InterceptPlusPlus | - Skill::Counter| + Skill::Counter | Skill::CounterPlus | Skill::CounterPlusPlus | - Skill::Purify| + Skill::Purify | Skill::PurifyPlus | Skill::PurifyPlusPlus | - Skill::Recharge| + Skill::Recharge | Skill::RechargePlus | Skill::RechargePlusPlus | - Skill::Reflect| + Skill::Reflect | Skill::ReflectPlus | Skill::ReflectPlusPlus | - Skill::Triage| + Skill::Triage | Skill::TriagePlus | Skill::TriagePlusPlus => true, - Skill::Banish| + Skill::Banish | Skill::BanishPlus | Skill::BanishPlusPlus => rng.gen_bool(0.5), @@ -1667,6 +1676,11 @@ fn electrocute_tick(source: &mut Construct, target: &mut Construct, mut results: } fn ruin(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions { + let amount = source.blue_power().pct(skill.multiplier()); + target.deal_blue_damage(skill, amount) + .into_iter() + .for_each(|e| results.push(Resolution::new(source, target).event(e).stages(EventStages::PostOnly))); + results.push(Resolution::new(source, target) .event(target.add_effect(skill, skill.effect()[0])) .stages(EventStages::PostOnly));