purge disable
This commit is contained in:
parent
1b38f8a047
commit
af569b155e
@ -489,6 +489,7 @@ pub enum Effect {
|
||||
Impurity,
|
||||
Invert,
|
||||
Parry,
|
||||
Purge,
|
||||
Reflect,
|
||||
Slow,
|
||||
Snare,
|
||||
@ -573,6 +574,7 @@ impl Effect {
|
||||
Effect::Banish => true,
|
||||
Effect::Silence => skill.colours().contains(&Colour::Blue),
|
||||
Effect::Snare => skill.colours().contains(&Colour::Red),
|
||||
Effect::Purge => skill.colours().contains(&Colour::Green),
|
||||
Effect::Ko => skill.ko_castable(),
|
||||
_ => false,
|
||||
}
|
||||
@ -655,6 +657,7 @@ impl Effect {
|
||||
Effect::Amplify => EffectCategory::Buff,
|
||||
Effect::Silence => EffectCategory::Debuff,
|
||||
Effect::Wither => EffectCategory::Debuff,
|
||||
Effect::Purge => EffectCategory::Debuff,
|
||||
|
||||
Effect::Corrupt => EffectCategory::Buff,
|
||||
Effect::Corruption => EffectCategory::Debuff,
|
||||
@ -1044,6 +1047,10 @@ impl Skill {
|
||||
Skill::RuinII => vec![ConstructEffect {effect: Effect::Stun, duration: 1, meta: None, tick: None}],
|
||||
Skill::RuinIII => vec![ConstructEffect {effect: Effect::Stun, duration: 2, meta: None, tick: None}],
|
||||
|
||||
Skill::PurgeI => vec![ConstructEffect {effect: Effect::Purge, duration: 1, meta: None, tick: None}],
|
||||
Skill::PurgeII => vec![ConstructEffect {effect: Effect::Purge, duration: 2, meta: None, tick: None}],
|
||||
Skill::PurgeIII => vec![ConstructEffect {effect: Effect::Purge, duration: 3, meta: None, tick: None}],
|
||||
|
||||
Skill::ScatterI => vec![ConstructEffect {effect: Effect::Scatter, duration: 2, meta: None, tick: None}],
|
||||
Skill::ScatterII => vec![ConstructEffect {effect: Effect::Scatter, duration: 3, meta: None, tick: None}],
|
||||
Skill::ScatterIII => vec![ConstructEffect {effect: Effect::Scatter, duration: 4, meta: None, tick: None}],
|
||||
@ -1854,7 +1861,7 @@ fn silence(source: &mut Construct, target: &mut Construct, mut results: Resoluti
|
||||
return results;
|
||||
}
|
||||
|
||||
fn purge(source: &mut Construct, target: &mut Construct, mut results: Resolutions, _skill: Skill) -> Resolutions {
|
||||
fn purge(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
|
||||
while let Some(i) = target.effects
|
||||
.iter()
|
||||
.position(|ce| ce.effect.category() == EffectCategory::Buff) {
|
||||
@ -1863,6 +1870,18 @@ fn purge(source: &mut Construct, target: &mut Construct, mut results: Resolution
|
||||
.event(Event::Removal { effect: ce.effect, construct_effects: target.effects.clone() }));
|
||||
}
|
||||
|
||||
let mut turns = 0;
|
||||
for cs in target.skills.iter_mut() {
|
||||
if Effect::Purge.disables_skill(cs.skill) {
|
||||
turns += 1;
|
||||
}
|
||||
}
|
||||
if turns > 0 {
|
||||
let mut effect = skill.effect()[0];
|
||||
effect.duration = effect.duration * turns;
|
||||
results.push(Resolution::new(source, target).event(target.add_effect(skill, effect)));
|
||||
}
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
@ -2185,4 +2204,19 @@ mod tests {
|
||||
assert!(y.skills.iter().any(|cs| cs.skill == Skill::Stun && cs.cd.unwrap() == stun_cd + 1));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn purge_test() {
|
||||
let mut x = Construct::new()
|
||||
.named(&"muji".to_string());
|
||||
|
||||
let mut y = Construct::new()
|
||||
.named(&"pretaliation".to_string())
|
||||
.learn(Skill::HealI)
|
||||
.learn(Skill::HealII);
|
||||
|
||||
purge(&mut x, &mut y, vec![], Skill::PurgeI);
|
||||
// 2 turns at lvl 1
|
||||
assert!(y.effects.iter().any(|e| e.effect == Effect::Purge && e.duration == 2));
|
||||
assert!(y.disabled(Skill::HealI).is_some());
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user