fix tick speed bug with new application

This commit is contained in:
Mashy 2019-10-21 19:40:19 +10:00
parent fa1135170b
commit 8e6048b912
3 changed files with 31 additions and 18 deletions

View File

@ -10,13 +10,6 @@
* clear active mtx after joining game * clear active mtx after joining game
* Check results stack for whether a construct has ticked a dot already. Current issue E.g.
Construct 1 with slow speed applies siphon round 1 on Enemy Construct 1
Construct 2 with fast speed applies siphon round 2 on Enemy Construct 2
Siphon tick won't proc at all that turn
It assumes the dot has triggered already from existing dot from pre_resolve
Instead of checking a dot already exists instead search for a matching dot tick event in results
* mobile styles * mobile styles
* mobile info page * mobile info page
@ -25,9 +18,6 @@
* can't reset password without knowing password =\ * can't reset password without knowing password =\
* Invert recharge * Invert recharge
* serde serialize privatise
* chat
* Convert spec 'Plus' -> '+' when it appears as combo text in combiner and in info text * Convert spec 'Plus' -> '+' when it appears as combo text in combiner and in info text
## SOON ## SOON

View File

@ -377,9 +377,11 @@ impl Game {
let mut sorted = self.stack.clone(); let mut sorted = self.stack.clone();
sorted.iter_mut() sorted.iter_mut()
.for_each(|s| { .for_each(|s| {
if !s.skill.is_tick() {
let caster = self.construct_by_id(s.source_construct_id).unwrap(); let caster = self.construct_by_id(s.source_construct_id).unwrap();
let speed = caster.skill_speed(s.skill); let speed = caster.skill_speed(s.skill);
s.speed = speed; s.speed = speed;
}
}); });
sorted.sort_unstable_by_key(|s| s.speed); sorted.sort_unstable_by_key(|s| s.speed);

View File

@ -384,7 +384,7 @@ impl Cast {
source_player_id: source.account, source_player_id: source.account,
target_construct_id: target.id, target_construct_id: target.id,
skill, skill,
speed: 0, speed: source.skill_speed(skill),
} }
} }
@ -1499,7 +1499,13 @@ 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 { 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 skip_tick = target.effects.iter().any(|e| {
match e.effect {
Effect::Triage => source.skill_speed(skill) <= e.tick.unwrap().speed,
_ => false,
}
});
let ConstructEffect { effect, duration, meta, tick: _ } = skill.effect()[0]; let ConstructEffect { effect, duration, meta, tick: _ } = skill.effect()[0];
let tick_skill = match meta { let tick_skill = match meta {
Some(EffectMeta::Skill(s)) => s, Some(EffectMeta::Skill(s)) => s,
@ -1565,7 +1571,12 @@ fn decay(source: &mut Construct, target: &mut Construct, mut results: Resolution
let wither = skill.effect()[0]; let wither = skill.effect()[0];
results.push(Resolution::new(source, target).event(target.add_effect(skill, wither))); 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 skip_tick = target.effects.iter().any(|e| {
match e.effect {
Effect::Decay => source.skill_speed(skill) <= e.tick.unwrap().speed,
_ => false,
}
});
let ConstructEffect { effect, duration, meta, tick: _ } = skill.effect()[1]; let ConstructEffect { effect, duration, meta, tick: _ } = skill.effect()[1];
let tick_skill = match meta { let tick_skill = match meta {
Some(EffectMeta::Skill(s)) => s, Some(EffectMeta::Skill(s)) => s,
@ -1619,7 +1630,12 @@ fn electrocute(source: &mut Construct, target: &mut Construct, mut results: Reso
_ => panic!("no electrocute tick skill"), _ => panic!("no electrocute tick skill"),
}; };
let skip_tick = target.effects.iter().any(|e| e.effect == Effect::Electrocute); let skip_tick = target.effects.iter().any(|e| {
match e.effect {
Effect::Electrocute => source.skill_speed(skill) <= e.tick.unwrap().speed,
_ => false,
}
});
let electrocute = ConstructEffect::new(effect, duration).set_tick(Cast::new_tick(source, target, tick_skill)); let electrocute = ConstructEffect::new(effect, duration).set_tick(Cast::new_tick(source, target, tick_skill));
results.push(Resolution::new(source, target) results.push(Resolution::new(source, target)
.event(target.add_effect(skill, electrocute)) .event(target.add_effect(skill, electrocute))
@ -1716,7 +1732,12 @@ 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 { 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 skip_tick = target.effects.iter().any(|e| {
match e.effect {
Effect::Siphon => source.skill_speed(skill) <= e.tick.unwrap().speed,
_ => false,
}
});
let ConstructEffect { effect, duration, meta, tick: _ } = skill.effect()[0]; let ConstructEffect { effect, duration, meta, tick: _ } = skill.effect()[0];
let tick_skill = match meta { let tick_skill = match meta {
Some(EffectMeta::Skill(s)) => s, Some(EffectMeta::Skill(s)) => s,