From defcadbad29b081eceb115c2d60aee01ebe7786f Mon Sep 17 00:00:00 2001 From: Mashy Date: Tue, 1 Oct 2019 16:34:51 +1000 Subject: [PATCH] remove double tick dots, lose electrify on application --- WORKLOG.md | 4 ++++ server/src/skill.rs | 41 +++++++++++++++++++++++++++++++++++------ 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/WORKLOG.md b/WORKLOG.md index 8f93a003..4c2aa9e2 100644 --- a/WORKLOG.md +++ b/WORKLOG.md @@ -10,6 +10,8 @@ * can't reset password without knowing password =\ +* fix recharge combat display bug + ## SOON (Before or After PAX) * bot game grind @@ -45,6 +47,8 @@ reconnect based on time delta consolidate game and instance + * return of the combat log (last few events with condensed descriptions) + - click in to scroll * elo + leaderboards * mnml tv diff --git a/server/src/skill.rs b/server/src/skill.rs index a965f7de..949cbec5 100644 --- a/server/src/skill.rs +++ b/server/src/skill.rs @@ -779,7 +779,7 @@ impl Skill { Skill::BashPlusPlus => 140, // Debuff Base - Skill::DecayTick=> 25, + Skill::DecayTick=> 33, Skill::DecayTickPlus => 45, Skill::DecayTickPlusPlus => 70, Skill::Silence=> 55, // Deals more per blue skill on target @@ -1458,6 +1458,7 @@ fn heal(source: &mut Construct, target: &mut Construct, mut results: Resolutions } fn triage(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions { + let skip_tick = target.effects.iter().any(|e| e.effect == Effect::Triage); let ConstructEffect { effect, duration, meta, tick: _ } = skill.effect()[0]; let tick_skill = match meta { Some(EffectMeta::Skill(s)) => s, @@ -1465,7 +1466,11 @@ fn triage(source: &mut Construct, target: &mut Construct, mut results: Resolutio }; let triage = ConstructEffect::new(effect, duration).set_tick(Cast::new_tick(source, target, tick_skill)); results.push(Resolution::new(source, target).event(target.add_effect(skill, triage))); - return triage_tick(source, target, results, tick_skill); + + match skip_tick { + true => return results, + false => return triage_tick(source, target, results, tick_skill) + } } fn triage_tick(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions { @@ -1519,6 +1524,7 @@ fn decay(source: &mut Construct, target: &mut Construct, mut results: Resolution let wither = skill.effect()[0]; results.push(Resolution::new(source, target).event(target.add_effect(skill, wither))); + let skip_tick = target.effects.iter().any(|e| e.effect == Effect::Decay); let ConstructEffect { effect, duration, meta, tick: _ } = skill.effect()[1]; let tick_skill = match meta { Some(EffectMeta::Skill(s)) => s, @@ -1529,7 +1535,10 @@ fn decay(source: &mut Construct, target: &mut Construct, mut results: Resolution .event(target.add_effect(skill, decay)) .stages(EventStages::PostOnly)); - return decay_tick(source, target, results, tick_skill); + match skip_tick { + true => return results, + false => return decay_tick(source, target, results, tick_skill) + } } fn decay_tick(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions { @@ -1549,17 +1558,32 @@ fn electrify(source: &mut Construct, target: &mut Construct, mut results: Resolu } fn electrocute(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions { - + // Remove electric buff, no need to display if construct is dead + if !source.is_ko() { + let electric = source.effects.iter().position(|e| e.effect == Effect::Electric).expect("No electrify"); + let ce = source.effects.remove(electric); + results.push(Resolution::new(source, source) + .event(Event::Removal { effect: ce.effect, construct_effects: source.effects.clone() }) + .stages(EventStages::PostOnly)); + } + let ConstructEffect { effect, duration, meta, tick: _ } = skill.effect()[0]; let tick_skill = match meta { Some(EffectMeta::Skill(s)) => s, _ => panic!("no electrocute tick skill"), }; + + let skip_tick = target.effects.iter().any(|e| e.effect == Effect::Electrocute); let electrocute = ConstructEffect::new(effect, duration).set_tick(Cast::new_tick(source, target, tick_skill)); results.push(Resolution::new(source, target) .event(target.add_effect(skill, electrocute)) .stages(EventStages::EndPost)); - return electrocute_tick(source, target, results, tick_skill); + + + match skip_tick { + true => return results, + false => return electrocute_tick(source, target, results, tick_skill) + } } fn electrocute_tick(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions { @@ -1633,6 +1657,8 @@ fn recharge(source: &mut Construct, target: &mut Construct, mut results: Resolut } fn siphon(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions { + + let skip_tick = target.effects.iter().any(|e| e.effect == Effect::Siphon); let ConstructEffect { effect, duration, meta, tick: _ } = skill.effect()[0]; let tick_skill = match meta { Some(EffectMeta::Skill(s)) => s, @@ -1641,7 +1667,10 @@ fn siphon(source: &mut Construct, target: &mut Construct, mut results: Resolutio let siphon = ConstructEffect::new(effect, duration).set_tick(Cast::new_tick(source, target, tick_skill)); results.push(Resolution::new(source, target).event(target.add_effect(skill, siphon))); - return siphon_tick(source, target, results, tick_skill); + match skip_tick { + true => return results, + false => return siphon_tick(source, target, results, tick_skill) + } } fn siphon_tick(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {