purge disable
This commit is contained in:
parent
1b38f8a047
commit
af569b155e
@ -489,6 +489,7 @@ pub enum Effect {
|
|||||||
Impurity,
|
Impurity,
|
||||||
Invert,
|
Invert,
|
||||||
Parry,
|
Parry,
|
||||||
|
Purge,
|
||||||
Reflect,
|
Reflect,
|
||||||
Slow,
|
Slow,
|
||||||
Snare,
|
Snare,
|
||||||
@ -573,6 +574,7 @@ impl Effect {
|
|||||||
Effect::Banish => true,
|
Effect::Banish => true,
|
||||||
Effect::Silence => skill.colours().contains(&Colour::Blue),
|
Effect::Silence => skill.colours().contains(&Colour::Blue),
|
||||||
Effect::Snare => skill.colours().contains(&Colour::Red),
|
Effect::Snare => skill.colours().contains(&Colour::Red),
|
||||||
|
Effect::Purge => skill.colours().contains(&Colour::Green),
|
||||||
Effect::Ko => skill.ko_castable(),
|
Effect::Ko => skill.ko_castable(),
|
||||||
_ => false,
|
_ => false,
|
||||||
}
|
}
|
||||||
@ -655,6 +657,7 @@ impl Effect {
|
|||||||
Effect::Amplify => EffectCategory::Buff,
|
Effect::Amplify => EffectCategory::Buff,
|
||||||
Effect::Silence => EffectCategory::Debuff,
|
Effect::Silence => EffectCategory::Debuff,
|
||||||
Effect::Wither => EffectCategory::Debuff,
|
Effect::Wither => EffectCategory::Debuff,
|
||||||
|
Effect::Purge => EffectCategory::Debuff,
|
||||||
|
|
||||||
Effect::Corrupt => EffectCategory::Buff,
|
Effect::Corrupt => EffectCategory::Buff,
|
||||||
Effect::Corruption => EffectCategory::Debuff,
|
Effect::Corruption => EffectCategory::Debuff,
|
||||||
@ -1044,6 +1047,10 @@ impl Skill {
|
|||||||
Skill::RuinII => vec![ConstructEffect {effect: Effect::Stun, duration: 1, meta: None, tick: None}],
|
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::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::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::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}],
|
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;
|
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
|
while let Some(i) = target.effects
|
||||||
.iter()
|
.iter()
|
||||||
.position(|ce| ce.effect.category() == EffectCategory::Buff) {
|
.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() }));
|
.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;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2185,4 +2204,19 @@ mod tests {
|
|||||||
assert!(y.skills.iter().any(|cs| cs.skill == Skill::Stun && cs.cd.unwrap() == stun_cd + 1));
|
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