diff --git a/server/src/skill.rs b/server/src/skill.rs index 87e9058b..18d1abb2 100644 --- a/server/src/skill.rs +++ b/server/src/skill.rs @@ -65,13 +65,13 @@ pub fn resolve(skill: Skill, source: &mut Construct, target: &mut Construct, mut return resolutions; } - if target.affected(Effect::Reflect) { + if target.affected(Effect::Reflect) && skill.colours().contains(&Colour::Blue) { // guard against overflow if source.affected(Effect::Reflect) { return resolutions; } resolutions.push(Resolution::new(source, target).event(Event::Reflection { skill })); - return resolve(skill, target, source, resolutions); + return resolve(skill, &mut source.clone(), source, resolutions); } if source.affected(Effect::Haste) { @@ -1840,13 +1840,13 @@ mod tests { assert!(y.affected(Effect::Reflect)); let mut results = vec![]; - results = resolve(Skill::Attack, &mut x, &mut y, results); + results = resolve(Skill::BlastI, &mut x, &mut y, results); assert!(x.green_life() < 1024); let Resolution { source: _, target: _, event, stages: _ } = results.remove(0); match event { - Event::Reflection { skill } => assert_eq!(skill, Skill::Attack), + Event::Reflection { skill } => assert_eq!(skill, Skill::BlastI), _ => panic!("not reflection"), };