purge / purify removes all effects
This commit is contained in:
parent
6f453c45fc
commit
ab7625def0
@ -168,6 +168,9 @@ function getText(resolution) {
|
||||
|
||||
if (type === 'Removal') {
|
||||
const { effect, construct_effects: effects } = event;
|
||||
if (!effect) {
|
||||
return { text: 'Effect Removal', css: '', effects };
|
||||
}
|
||||
return { text: `-${effect}`, css: '', effects };
|
||||
}
|
||||
return false;
|
||||
|
||||
@ -505,7 +505,7 @@ pub enum Event {
|
||||
AoeSkill { skill: Skill },
|
||||
Skill { skill: Skill },
|
||||
Effect { skill: Skill, effect: Effect, duration: u8, construct_effects: Vec<ConstructEffect> },
|
||||
Removal { effect: Effect, construct_effects: Vec<ConstructEffect> },
|
||||
Removal { effect: Option<Effect>, construct_effects: Vec<ConstructEffect> },
|
||||
TargetKo { skill: Skill },
|
||||
// skill not necessary but makes it neater as all events are arrays in js
|
||||
Ko (),
|
||||
@ -1630,7 +1630,7 @@ fn electrocute(source: &mut Construct, target: &mut Construct, mut results: Reso
|
||||
Some(eff) => {
|
||||
let ce = source.effects.remove(eff);
|
||||
results.push(Resolution::new(source, source)
|
||||
.event(Event::Removal { effect: ce.effect, construct_effects: source.effects.clone() })
|
||||
.event(Event::Removal { effect: Some(ce.effect), construct_effects: source.effects.clone() })
|
||||
.stages(EventStages::PostOnly));
|
||||
}
|
||||
None => ()
|
||||
@ -1701,7 +1701,7 @@ fn absorption(source: &mut Construct, target: &mut Construct, mut results: Resol
|
||||
let ce = target.effects.remove(absorb_index);
|
||||
|
||||
results.push(Resolution::new(source, target)
|
||||
.event(Event::Removal { effect: ce.effect, construct_effects: target.effects.clone() })
|
||||
.event(Event::Removal { effect: Some(ce.effect), construct_effects: target.effects.clone() })
|
||||
.stages(EventStages::PostOnly));
|
||||
return results;;
|
||||
}
|
||||
@ -1816,53 +1816,26 @@ fn silence(source: &mut Construct, target: &mut Construct, mut results: Resoluti
|
||||
|
||||
fn purge(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
|
||||
results.push(Resolution::new(source, target).event(Event::Skill { skill }).stages(EventStages::StartEnd));
|
||||
while let Some(i) = target.effects
|
||||
.iter()
|
||||
.position(|ce| {
|
||||
if let Some(c) = ce.effect.colour() {
|
||||
c == Colour::Green
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}) {
|
||||
let ce = target.effects.remove(i);
|
||||
if target.effects.len() > 0 {
|
||||
target.effects.clear();
|
||||
results.push(Resolution::new(source, target)
|
||||
.event(Event::Removal { effect: ce.effect, construct_effects: target.effects.clone() })
|
||||
.event(Event::Removal { effect: None, construct_effects: target.effects.clone() })
|
||||
.stages(EventStages::PostOnly));
|
||||
}
|
||||
|
||||
let effect = skill.effect()[0];
|
||||
results.push(Resolution::new(source, target).event(target.add_effect(skill, effect)).stages(EventStages::PostOnly));
|
||||
|
||||
/*let mut turns = 1;
|
||||
for cs in target.skills.iter_mut() {
|
||||
if Effect::Purge.disables_skill(cs.skill) {
|
||||
turns += 1;
|
||||
}
|
||||
}
|
||||
|
||||
if turns > 1 {
|
||||
effect.duration = effect.duration * turns;
|
||||
}*/
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
fn purify(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
|
||||
results.push(Resolution::new(source, target).event(Event::Skill { skill }).stages(EventStages::StartEnd));
|
||||
let amount = source.green_power().pct(skill.multiplier());
|
||||
while let Some(i) = target.effects
|
||||
.iter()
|
||||
.position(|ce| {
|
||||
if let Some(c) = ce.effect.colour() {
|
||||
[Colour::Red, Colour::Blue].contains(&c)
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}) {
|
||||
let ce = target.effects.remove(i);
|
||||
if target.effects.len() > 0 {
|
||||
let amount = source.green_power().pct(skill.multiplier().saturating_mul(target.effects.len() as u64));
|
||||
target.effects.clear();
|
||||
results.push(Resolution::new(source, target)
|
||||
.event(Event::Removal { effect: ce.effect, construct_effects: target.effects.clone() })
|
||||
.event(Event::Removal { effect: None, construct_effects: target.effects.clone() })
|
||||
.stages(EventStages::PostOnly));
|
||||
target.deal_green_damage(skill, amount)
|
||||
.into_iter()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user