tick immunity effects
This commit is contained in:
parent
79f5e7e1be
commit
88237d3e5e
@ -1,25 +1,18 @@
|
||||
# FIXME
|
||||
|
||||
last round of animations skipped cause no skill phase to add new vec
|
||||
ko constructs are still casting
|
||||
|
||||
check silence skill multiplier
|
||||
|
||||
check for ko in cast_modifier
|
||||
|
||||
tick skips for triage etc
|
||||
game ready not auto starting resolve phase
|
||||
healing action
|
||||
remove immunity
|
||||
banish immunity
|
||||
|
||||
aoe event
|
||||
cooldown events leak skills
|
||||
hit event
|
||||
reqs moving eventconstruct into specific events
|
||||
|
||||
purify conditional healing
|
||||
|
||||
counter / absorb post resolve etc
|
||||
absorb post resolve
|
||||
|
||||
cooldown checking -> go through round and find all casters
|
||||
@ -62,10 +62,9 @@ impl ConstructSkill {
|
||||
|
||||
#[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)]
|
||||
pub enum EffectMeta {
|
||||
Skill(Skill),
|
||||
TickAmount(usize),
|
||||
CastOnHit(Skill), // maybe needs source/target
|
||||
CastTick { source: Uuid, target: Uuid, skill: Skill },
|
||||
AddedDamage(usize),
|
||||
LinkTarget(Uuid),
|
||||
Multiplier(usize),
|
||||
}
|
||||
|
||||
@ -74,17 +73,11 @@ pub struct ConstructEffect {
|
||||
pub effect: Effect,
|
||||
pub duration: u8,
|
||||
pub meta: Option<EffectMeta>,
|
||||
pub tick: Option<Cast>,
|
||||
}
|
||||
|
||||
impl ConstructEffect {
|
||||
pub fn new(effect: Effect, duration: u8) -> ConstructEffect {
|
||||
ConstructEffect { effect, duration, meta: None, tick: None }
|
||||
}
|
||||
|
||||
pub fn set_tick(mut self, tick: Cast) -> ConstructEffect {
|
||||
self.tick = Some(tick);
|
||||
self
|
||||
ConstructEffect { effect, duration, meta: None }
|
||||
}
|
||||
|
||||
pub fn set_meta(mut self, meta: EffectMeta) -> ConstructEffect {
|
||||
@ -105,7 +98,8 @@ impl ConstructEffect {
|
||||
|
||||
pub fn get_skill(&self) -> Option<Skill> {
|
||||
match self.meta {
|
||||
Some(EffectMeta::Skill(s)) => Some(s),
|
||||
Some(EffectMeta::CastTick { source, target, skill }) => Some(skill),
|
||||
Some(EffectMeta::CastOnHit(s)) => Some(s),
|
||||
_ => None,
|
||||
}
|
||||
|
||||
@ -731,7 +725,7 @@ impl Construct {
|
||||
let overhealing = modified_amount - healing;
|
||||
|
||||
if healing != 0 {
|
||||
events.push(Event::Healing {
|
||||
events.push(Event::Healing {
|
||||
construct: self.id,
|
||||
amount: healing,
|
||||
overhealing,
|
||||
@ -936,11 +930,11 @@ impl Construct {
|
||||
Event::Damage { construct: _, colour, amount: _, mitigation: _, display: _ } => {
|
||||
let mut casts = vec![];
|
||||
if self.affected(Effect::Electric) && !cast.skill.is_tick() {
|
||||
let ConstructEffect { effect: _, duration: _, meta, tick: _ } =
|
||||
let ConstructEffect { effect: _, duration: _, meta } =
|
||||
self.effects.iter().find(|e| e.effect == Effect::Electric).unwrap();
|
||||
|
||||
let skill = match meta {
|
||||
Some(EffectMeta::Skill(s)) => s,
|
||||
Some(EffectMeta::CastOnHit(s)) => s,
|
||||
_ => panic!("no electrify skill"),
|
||||
};
|
||||
|
||||
@ -948,7 +942,7 @@ impl Construct {
|
||||
}
|
||||
|
||||
// if self.affected(Effect::Absorb) {
|
||||
// let ConstructEffect { effect, duration: _, meta, tick: _ } =
|
||||
// let ConstructEffect { effect, duration: _, meta } =
|
||||
// self.effects.iter().find(|e| e.effect == Effect::Absorb).unwrap();
|
||||
|
||||
|
||||
@ -961,11 +955,11 @@ impl Construct {
|
||||
// }
|
||||
|
||||
if self.affected(Effect::Counter) && *colour == Colour::Red {
|
||||
let ConstructEffect { effect: _, duration: _, meta, tick: _ } =
|
||||
let ConstructEffect { effect: _, duration: _, meta } =
|
||||
self.effects.iter().find(|e| e.effect == Effect::Counter).unwrap();
|
||||
|
||||
let skill = match meta {
|
||||
Some(EffectMeta::Skill(s)) => s,
|
||||
Some(EffectMeta::CastOnHit(s)) => s,
|
||||
_ => panic!("no counter skill"),
|
||||
};
|
||||
|
||||
|
||||
@ -42,10 +42,15 @@ pub enum Effect {
|
||||
|
||||
// effects over time
|
||||
Triage,
|
||||
Decay,
|
||||
Regen,
|
||||
Siphon,
|
||||
Triaged, // immunity
|
||||
|
||||
Decay,
|
||||
Decayed, // immunity
|
||||
|
||||
Siphon,
|
||||
Siphoned, // immunity
|
||||
|
||||
// Regen,
|
||||
// Airborne,
|
||||
// Boost
|
||||
// Bleed,
|
||||
@ -193,10 +198,12 @@ impl Effect {
|
||||
// effects over time
|
||||
Effect::Triage => Some(Colour::Green),
|
||||
Effect::Decay => Some(Colour::Blue),
|
||||
Effect::Regen => Some(Colour::Green),
|
||||
Effect::Siphon => Some(Colour::Blue),
|
||||
Effect::Pure => Some(Colour::Green),
|
||||
|
||||
Effect::Triaged => None,
|
||||
Effect::Decayed => None,
|
||||
Effect::Siphoned => None,
|
||||
Effect::Ko => None,
|
||||
}
|
||||
}
|
||||
|
||||
@ -433,25 +433,21 @@ impl Game {
|
||||
|c| c.effects
|
||||
.iter()
|
||||
.cloned()
|
||||
.filter_map(|e| e.tick)
|
||||
.filter_map(|e| e.meta)
|
||||
.filter_map(move |m| match m {
|
||||
EffectMeta::CastTick { source, target, skill } => Some(Cast::new(source, c.account, target, skill)),
|
||||
_ => None,
|
||||
})
|
||||
).collect::<Vec<Cast>>();
|
||||
|
||||
// add them to the stack
|
||||
self.stack.append(&mut ticks);
|
||||
|
||||
self.stack_sort_speed();
|
||||
|
||||
// temp vec of this round's resolving skills
|
||||
// because need to check cooldown use before pushing them into the complete list
|
||||
let mut casters = vec![];
|
||||
let mut r_animation_ms = 0;
|
||||
while let Some(cast) = self.stack.pop() {
|
||||
// info!("{:} casts ", cast);
|
||||
// if theres no resolution Resolutions, the skill didn't trigger (disable etc)
|
||||
// if Resolutions.len() > 0 && cast.used_cooldown() {
|
||||
// casters.push(cast);
|
||||
// }
|
||||
|
||||
self.resolve(cast);
|
||||
|
||||
// sort the stack again in case speeds have changed
|
||||
@ -465,10 +461,9 @@ impl Game {
|
||||
res.set_delay(iter.peek());
|
||||
r_animation_ms += res.delay;
|
||||
}
|
||||
// info!("{:#?}", self.casts);
|
||||
|
||||
// handle cooldowns and statuses
|
||||
self.progress_durations(&casters);
|
||||
// self.progress_durations(&casters);
|
||||
|
||||
if self.finished() {
|
||||
return self.finish()
|
||||
@ -1799,6 +1794,8 @@ mod tests {
|
||||
let last = game.resolutions.len() - 1;
|
||||
let resolutions = &game.resolutions[last];
|
||||
|
||||
println!("{:?}", resolutions);
|
||||
|
||||
assert!(resolutions.iter().any(|r| match r.event {
|
||||
Event::Damage { construct, colour, amount, mitigation: _, display: _ } =>
|
||||
construct == target && amount > 0 && colour == Colour::Blue,
|
||||
@ -1811,4 +1808,24 @@ mod tests {
|
||||
_ => false,
|
||||
}));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn reflect_test() {
|
||||
let mut game = create_2v2_test_game();
|
||||
let player_id = game.players[0].id;
|
||||
let source = game.players[0].constructs[0].id;
|
||||
let target = game.players[1].constructs[0].id;
|
||||
|
||||
game.resolve(Cast::new(source, player_id, target, Skill::Reflect));
|
||||
game.resolve(Cast::new(source, player_id, target, Skill::Blast));
|
||||
|
||||
let last = game.resolutions.len() - 1;
|
||||
let resolutions = &game.resolutions[last];
|
||||
|
||||
assert!(resolutions.iter().any(|r| match r.event {
|
||||
Event::Damage { construct, colour, amount, mitigation: _, display: _ } =>
|
||||
construct == source && amount > 0 && colour == Colour::Blue,
|
||||
_ => false,
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
@ -75,28 +75,28 @@ impl Cast {
|
||||
Skill::Block => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Block, duration: 1, meta: Some(EffectMeta::Multiplier(35)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Block, duration: 1, meta: Some(EffectMeta::Multiplier(35)) },
|
||||
},
|
||||
],
|
||||
|
||||
Skill::Buff => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Buff, duration: 3, meta: Some(EffectMeta::Multiplier(130)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Buff, duration: 3, meta: Some(EffectMeta::Multiplier(130)) },
|
||||
},
|
||||
],
|
||||
|
||||
Skill::Debuff => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Slow, duration: 3, meta: Some(EffectMeta::Multiplier(50)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Slow, duration: 3, meta: Some(EffectMeta::Multiplier(50)) },
|
||||
},
|
||||
],
|
||||
|
||||
Skill::Stun => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Stun, duration: 2, meta: None, tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Stun, duration: 2, meta: None },
|
||||
},
|
||||
],
|
||||
|
||||
@ -104,26 +104,26 @@ impl Cast {
|
||||
Skill::Amplify => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Amplify, duration: 2, meta: Some(EffectMeta::Multiplier(150)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Amplify, duration: 2, meta: Some(EffectMeta::Multiplier(150)) },
|
||||
},
|
||||
],
|
||||
Skill::AmplifyPlus => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Amplify, duration: 3, meta: Some(EffectMeta::Multiplier(175)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Amplify, duration: 3, meta: Some(EffectMeta::Multiplier(175)) },
|
||||
},
|
||||
],
|
||||
Skill::AmplifyPlusPlus => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Amplify, duration: 4, meta: Some(EffectMeta::Multiplier(200)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Amplify, duration: 4, meta: Some(EffectMeta::Multiplier(200)) },
|
||||
},
|
||||
],
|
||||
|
||||
Skill::Absorb => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Absorb, duration: 1, meta: Some(EffectMeta::Skill(Skill::Absorption)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Absorb, duration: 1, meta: Some(EffectMeta::CastOnHit(Skill::Absorption)) },
|
||||
},
|
||||
Action::Heal {
|
||||
construct: self.target,
|
||||
@ -134,7 +134,7 @@ impl Cast {
|
||||
Skill::AbsorbPlus => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Absorb, duration: 1, meta: Some(EffectMeta::Skill(Skill::AbsorptionPlus)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Absorb, duration: 1, meta: Some(EffectMeta::CastOnHit(Skill::AbsorptionPlus)) },
|
||||
},
|
||||
Action::Heal {
|
||||
construct: self.target,
|
||||
@ -145,7 +145,7 @@ impl Cast {
|
||||
Skill::AbsorbPlusPlus => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Absorb, duration: 1, meta: Some(EffectMeta::Skill(Skill::AbsorptionPlusPlus)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Absorb, duration: 1, meta: Some(EffectMeta::CastOnHit(Skill::AbsorptionPlusPlus)) },
|
||||
},
|
||||
Action::Heal {
|
||||
construct: self.target,
|
||||
@ -160,7 +160,7 @@ impl Cast {
|
||||
},
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Absorption, duration: 3, meta: None, tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Absorption, duration: 3, meta: None },
|
||||
},
|
||||
],
|
||||
Skill::AbsorptionPlus => vec![
|
||||
@ -170,7 +170,7 @@ impl Cast {
|
||||
},
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Absorption, duration: 4, meta: None, tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Absorption, duration: 4, meta: None },
|
||||
},
|
||||
],
|
||||
Skill::AbsorptionPlusPlus => vec![
|
||||
@ -180,7 +180,7 @@ impl Cast {
|
||||
},
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Absorption, duration: 5, meta: None, tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Absorption, duration: 5, meta: None },
|
||||
},
|
||||
],
|
||||
|
||||
@ -223,7 +223,7 @@ impl Cast {
|
||||
},
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Banish, duration: 2, meta: None, tick: None }
|
||||
effect: ConstructEffect { effect: Effect::Banish, duration: 2, meta: None }
|
||||
}
|
||||
],
|
||||
|
||||
@ -240,7 +240,7 @@ impl Cast {
|
||||
},
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Stun, duration: 2, meta: None, tick: None }
|
||||
effect: ConstructEffect { effect: Effect::Stun, duration: 2, meta: None }
|
||||
},
|
||||
Action::IncreaseCooldowns {
|
||||
construct: self.target,
|
||||
@ -261,50 +261,50 @@ impl Cast {
|
||||
Skill::Break => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Stun, duration: 1, meta: None, tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Stun, duration: 1, meta: None },
|
||||
},
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Vulnerable, duration: 3, meta: Some(EffectMeta::Multiplier(150)), tick: None, },
|
||||
effect: ConstructEffect { effect: Effect::Vulnerable, duration: 3, meta: Some(EffectMeta::Multiplier(150)), },
|
||||
},
|
||||
],
|
||||
Skill::BreakPlus => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Stun, duration: 1, meta: None, tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Stun, duration: 1, meta: None },
|
||||
},
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Vulnerable, duration: 4, meta: Some(EffectMeta::Multiplier(175)), tick: None, },
|
||||
effect: ConstructEffect { effect: Effect::Vulnerable, duration: 4, meta: Some(EffectMeta::Multiplier(175)), },
|
||||
},
|
||||
],
|
||||
Skill::BreakPlusPlus => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Stun, duration: 2, meta: None, tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Stun, duration: 2, meta: None },
|
||||
},
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Vulnerable, duration: 4, meta: Some(EffectMeta::Multiplier(200)), tick: None, },
|
||||
effect: ConstructEffect { effect: Effect::Vulnerable, duration: 4, meta: Some(EffectMeta::Multiplier(200)), },
|
||||
},
|
||||
],
|
||||
|
||||
Skill::Curse => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Curse, duration: 2, meta: Some(EffectMeta::Multiplier(150)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Curse, duration: 2, meta: Some(EffectMeta::Multiplier(150)) },
|
||||
},
|
||||
],
|
||||
Skill::CursePlus => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Curse, duration: 2, meta: Some(EffectMeta::Multiplier(175)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Curse, duration: 2, meta: Some(EffectMeta::Multiplier(175)) },
|
||||
},
|
||||
],
|
||||
Skill::CursePlusPlus => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Curse, duration: 3, meta: Some(EffectMeta::Multiplier(200)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Curse, duration: 3, meta: Some(EffectMeta::Multiplier(200)) },
|
||||
},
|
||||
],
|
||||
|
||||
@ -332,19 +332,19 @@ impl Cast {
|
||||
Skill::Counter => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Counter, duration: 1, meta: Some(EffectMeta::Skill(Skill::CounterAttack)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Counter, duration: 1, meta: Some(EffectMeta::CastOnHit(Skill::CounterAttack)) },
|
||||
},
|
||||
],
|
||||
Skill::CounterPlus => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Counter, duration: 1, meta: Some(EffectMeta::Skill(Skill::CounterAttackPlus)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Counter, duration: 1, meta: Some(EffectMeta::CastOnHit(Skill::CounterAttackPlus)) },
|
||||
},
|
||||
],
|
||||
Skill::CounterPlusPlus => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Counter, duration: 1, meta: Some(EffectMeta::Skill(Skill::CounterAttackPlusPlus)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Counter, duration: 1, meta: Some(EffectMeta::CastOnHit(Skill::CounterAttackPlusPlus)) },
|
||||
},
|
||||
],
|
||||
Skill::CounterAttack |
|
||||
@ -360,31 +360,49 @@ impl Cast {
|
||||
Skill::Decay => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Wither, duration: 3, meta: Some(EffectMeta::Multiplier(50)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Wither, duration: 3, meta: Some(EffectMeta::Multiplier(50)) },
|
||||
},
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Decay, duration: 2, meta: Some(EffectMeta::Skill(Skill::DecayTick)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Decay, duration: 2, meta:
|
||||
Some(EffectMeta::CastTick { source: self.source, target: self.target, skill: Skill::DecayTick }) },
|
||||
},
|
||||
Action::Damage {
|
||||
construct: self.target,
|
||||
colour: Colour::Blue,
|
||||
values: vec![Value::Stat { construct: self.source, stat: Stat::BluePower, mult: self.skill.multiplier() }],
|
||||
},
|
||||
],
|
||||
Skill::DecayPlus => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Wither, duration: 3, meta: Some(EffectMeta::Multiplier(35)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Wither, duration: 3, meta: Some(EffectMeta::Multiplier(35)) },
|
||||
},
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Decay, duration: 4, meta: Some(EffectMeta::Skill(Skill::DecayTickPlus)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Decay, duration: 4, meta:
|
||||
Some(EffectMeta::CastTick { source: self.source, target: self.target, skill: Skill::DecayTickPlus }) },
|
||||
},
|
||||
Action::Damage {
|
||||
construct: self.target,
|
||||
colour: Colour::Blue,
|
||||
values: vec![Value::Stat { construct: self.source, stat: Stat::BluePower, mult: self.skill.multiplier() }],
|
||||
},
|
||||
],
|
||||
Skill::DecayPlusPlus => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Wither, duration: 4, meta: Some(EffectMeta::Multiplier(20)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Wither, duration: 4, meta: Some(EffectMeta::Multiplier(20)) },
|
||||
},
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Decay, duration: 4, meta: Some(EffectMeta::Skill(Skill::DecayTickPlusPlus)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Decay, duration: 4, meta:
|
||||
Some(EffectMeta::CastTick { source: self.source, target: self.target, skill: Skill::DecayTickPlusPlus }) },
|
||||
},
|
||||
Action::Damage {
|
||||
construct: self.target,
|
||||
colour: Colour::Blue,
|
||||
values: vec![Value::Stat { construct: self.source, stat: Stat::BluePower, mult: self.skill.multiplier() }],
|
||||
},
|
||||
],
|
||||
Skill::DecayTick |
|
||||
@ -395,24 +413,28 @@ impl Cast {
|
||||
colour: Colour::Blue,
|
||||
values: vec![Value::Stat { construct: self.source, stat: Stat::BluePower, mult: self.skill.multiplier() }],
|
||||
},
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Decayed, duration: 1, meta: None }, // immunity to additional ticks
|
||||
},
|
||||
],
|
||||
|
||||
Skill::Electrify=> vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Electric, duration: 1, meta: Some(EffectMeta::Skill(Skill::Electrocute)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Electric, duration: 1, meta: Some(EffectMeta::CastOnHit(Skill::Electrocute)) },
|
||||
},
|
||||
],
|
||||
Skill::ElectrifyPlus => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Electric, duration: 1, meta: Some(EffectMeta::Skill(Skill::ElectrocutePlus)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Electric, duration: 1, meta: Some(EffectMeta::CastOnHit(Skill::ElectrocutePlus)) },
|
||||
},
|
||||
],
|
||||
Skill::ElectrifyPlusPlus => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Electric, duration: 1, meta: Some(EffectMeta::Skill(Skill::ElectrocutePlusPlus)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Electric, duration: 1, meta: Some(EffectMeta::CastOnHit(Skill::ElectrocutePlusPlus)) },
|
||||
},
|
||||
],
|
||||
Skill::Electrocute => vec![
|
||||
@ -422,7 +444,8 @@ impl Cast {
|
||||
},
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Electric, duration: 2, meta: Some(EffectMeta::Skill(Skill::ElectrocuteTick)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Electric, duration: 2, meta:
|
||||
Some(EffectMeta::CastTick { source: self.source, target: self.target, skill: Skill::ElectrocuteTick }) },
|
||||
},
|
||||
],
|
||||
Skill::ElectrocutePlus => vec![
|
||||
@ -432,7 +455,8 @@ impl Cast {
|
||||
},
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Electric, duration: 3, meta: Some(EffectMeta::Skill(Skill::ElectrocuteTickPlus)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Electric, duration: 3, meta:
|
||||
Some(EffectMeta::CastTick { source: self.source, target: self.target, skill: Skill::ElectrocuteTickPlus }) },
|
||||
},
|
||||
],
|
||||
Skill::ElectrocutePlusPlus => vec![
|
||||
@ -442,7 +466,8 @@ impl Cast {
|
||||
},
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Electric, duration: 4, meta: Some(EffectMeta::Skill(Skill::ElectrocuteTickPlusPlus)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Electric, duration: 4, meta:
|
||||
Some(EffectMeta::CastTick { source: self.source, target: self.target, skill: Skill::ElectrocuteTickPlusPlus }) },
|
||||
},
|
||||
],
|
||||
Skill::ElectrocuteTick |
|
||||
@ -468,38 +493,38 @@ impl Cast {
|
||||
Skill::Haste => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Haste, duration: 3, meta: Some(EffectMeta::Multiplier(150)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Haste, duration: 3, meta: Some(EffectMeta::Multiplier(150)) },
|
||||
},
|
||||
],
|
||||
Skill::HastePlus => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Haste, duration: 3, meta: Some(EffectMeta::Multiplier(175)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Haste, duration: 3, meta: Some(EffectMeta::Multiplier(175)) },
|
||||
},
|
||||
],
|
||||
Skill::HastePlusPlus => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Haste, duration: 3, meta: Some(EffectMeta::Multiplier(225)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Haste, duration: 3, meta: Some(EffectMeta::Multiplier(225)) },
|
||||
},
|
||||
],
|
||||
|
||||
Skill::Hybrid => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Hybrid, duration: 3, meta: Some(EffectMeta::Multiplier(150)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Hybrid, duration: 3, meta: Some(EffectMeta::Multiplier(150)) },
|
||||
},
|
||||
],
|
||||
Skill::HybridPlus => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Hybrid, duration: 4, meta: Some(EffectMeta::Multiplier(175)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Hybrid, duration: 4, meta: Some(EffectMeta::Multiplier(175)) },
|
||||
},
|
||||
],
|
||||
Skill::HybridPlusPlus => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Hybrid, duration: 5, meta: Some(EffectMeta::Multiplier(200)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Hybrid, duration: 5, meta: Some(EffectMeta::Multiplier(200)) },
|
||||
},
|
||||
],
|
||||
|
||||
@ -508,7 +533,7 @@ impl Cast {
|
||||
Skill::InterceptPlusPlus => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Intercept, duration: 1, meta: None, tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Intercept, duration: 1, meta: None },
|
||||
},
|
||||
Action::Heal {
|
||||
construct: self.target,
|
||||
@ -520,19 +545,19 @@ impl Cast {
|
||||
Skill::Invert => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Invert, duration: 2, meta: None, tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Invert, duration: 2, meta: None },
|
||||
},
|
||||
],
|
||||
Skill::InvertPlus => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Invert, duration: 3, meta: None, tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Invert, duration: 3, meta: None },
|
||||
},
|
||||
],
|
||||
Skill::InvertPlusPlus => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Invert, duration: 4, meta: None, tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Invert, duration: 4, meta: None },
|
||||
},
|
||||
],
|
||||
|
||||
@ -541,7 +566,7 @@ impl Cast {
|
||||
Skill::LinkPlusPlus => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Stun, duration: 1, meta: None, tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Stun, duration: 1, meta: None },
|
||||
},
|
||||
Action::Damage {
|
||||
construct: self.target,
|
||||
@ -558,7 +583,7 @@ impl Cast {
|
||||
},
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Purge, duration: 2, meta: None, tick: None }
|
||||
effect: ConstructEffect { effect: Effect::Purge, duration: 2, meta: None }
|
||||
},
|
||||
],
|
||||
Skill::PurgePlus => vec![
|
||||
@ -567,7 +592,7 @@ impl Cast {
|
||||
},
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Purge, duration: 3, meta: None, tick: None }
|
||||
effect: ConstructEffect { effect: Effect::Purge, duration: 3, meta: None }
|
||||
},
|
||||
],
|
||||
Skill::PurgePlusPlus => vec![
|
||||
@ -576,7 +601,7 @@ impl Cast {
|
||||
},
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Purge, duration: 4, meta: None, tick: None }
|
||||
effect: ConstructEffect { effect: Effect::Purge, duration: 4, meta: None }
|
||||
},
|
||||
],
|
||||
|
||||
@ -594,7 +619,7 @@ impl Cast {
|
||||
},
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Pure, duration: 2, meta: Some(EffectMeta::Multiplier(150)), tick: None }
|
||||
effect: ConstructEffect { effect: Effect::Pure, duration: 2, meta: Some(EffectMeta::Multiplier(150)) }
|
||||
},
|
||||
],
|
||||
Skill::PurifyPlus => vec![
|
||||
@ -611,7 +636,7 @@ impl Cast {
|
||||
},
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Pure, duration: 2, meta: Some(EffectMeta::Multiplier(175)), tick: None }
|
||||
effect: ConstructEffect { effect: Effect::Pure, duration: 2, meta: Some(EffectMeta::Multiplier(175)) }
|
||||
},
|
||||
],
|
||||
Skill::PurifyPlusPlus => vec![
|
||||
@ -628,7 +653,7 @@ impl Cast {
|
||||
},
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Pure, duration: 2, meta: Some(EffectMeta::Multiplier(200)), tick: None }
|
||||
effect: ConstructEffect { effect: Effect::Pure, duration: 2, meta: Some(EffectMeta::Multiplier(200)) }
|
||||
},
|
||||
],
|
||||
|
||||
@ -652,7 +677,7 @@ impl Cast {
|
||||
Skill::ReflectPlusPlus => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Reflect, duration: 1, meta: None, tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Reflect, duration: 1, meta: None },
|
||||
},
|
||||
Action::Heal {
|
||||
construct: self.target,
|
||||
@ -666,7 +691,7 @@ impl Cast {
|
||||
Skill::RestrictPlusPlus => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Restrict, duration: 2, meta: None, tick: None }
|
||||
effect: ConstructEffect { effect: Effect::Restrict, duration: 2, meta: None }
|
||||
},
|
||||
Action::Damage {
|
||||
construct: self.target,
|
||||
@ -686,7 +711,7 @@ impl Cast {
|
||||
},
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Stun, duration: 1, meta: None, tick: None }
|
||||
effect: ConstructEffect { effect: Effect::Stun, duration: 1, meta: None }
|
||||
}
|
||||
],
|
||||
|
||||
@ -694,19 +719,37 @@ impl Cast {
|
||||
Skill::Siphon => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Siphon, duration: 2, meta: Some(EffectMeta::Skill(Skill::SiphonTick)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Siphon, duration: 2, meta:
|
||||
Some(EffectMeta::CastTick { source: self.source, target: self.target, skill: Skill::SiphonTick }) },
|
||||
},
|
||||
Action::Damage {
|
||||
construct: self.target,
|
||||
colour: Colour::Blue,
|
||||
values: vec![Value::Stat { construct: self.source, stat: Stat::BluePower, mult: self.skill.multiplier() }],
|
||||
},
|
||||
],
|
||||
Skill::SiphonPlus => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Siphon, duration: 3, meta: Some(EffectMeta::Skill(Skill::SiphonTickPlus)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Siphon, duration: 3, meta:
|
||||
Some(EffectMeta::CastTick { source: self.source, target: self.target, skill: Skill::SiphonTickPlus }) },
|
||||
},
|
||||
Action::Damage {
|
||||
construct: self.target,
|
||||
colour: Colour::Blue,
|
||||
values: vec![Value::Stat { construct: self.source, stat: Stat::BluePower, mult: self.skill.multiplier() }],
|
||||
},
|
||||
],
|
||||
Skill::SiphonPlusPlus => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Siphon, duration: 4, meta: Some(EffectMeta::Skill(Skill::SiphonTickPlusPlus)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Siphon, duration: 4, meta:
|
||||
Some(EffectMeta::CastTick { source: self.source, target: self.target, skill: Skill::SiphonTickPlusPlus }) },
|
||||
},
|
||||
Action::Damage {
|
||||
construct: self.target,
|
||||
colour: Colour::Blue,
|
||||
values: vec![Value::Stat { construct: self.source, stat: Stat::BluePower, mult: self.skill.multiplier() }],
|
||||
},
|
||||
],
|
||||
Skill::SiphonTick |
|
||||
@ -718,10 +761,14 @@ impl Cast {
|
||||
values: vec![Value::Stat { construct: self.source, stat: Stat::BluePower, mult: self.skill.multiplier() }],
|
||||
},
|
||||
Action::Heal {
|
||||
construct: self.target,
|
||||
construct: self.source,
|
||||
colour: Colour::Green,
|
||||
values: vec![Value::DamageReceived { construct: self.target, colour: Colour::Blue, mult: 100 }],
|
||||
},
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Siphoned, duration: 1, meta: None }, // immunity to additional ticks
|
||||
},
|
||||
],
|
||||
|
||||
Skill::Slay |
|
||||
@ -742,7 +789,7 @@ impl Cast {
|
||||
Skill::Sleep => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Stun, duration: 2, meta: None, tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Stun, duration: 2, meta: None },
|
||||
},
|
||||
Action::Heal {
|
||||
construct: self.target,
|
||||
@ -753,7 +800,7 @@ impl Cast {
|
||||
Skill::SleepPlus => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Stun, duration: 2, meta: None, tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Stun, duration: 2, meta: None },
|
||||
},
|
||||
Action::Heal {
|
||||
construct: self.target,
|
||||
@ -764,7 +811,7 @@ impl Cast {
|
||||
Skill::SleepPlusPlus => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Stun, duration: 2, meta: None, tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Stun, duration: 2, meta: None },
|
||||
},
|
||||
Action::Heal {
|
||||
construct: self.target,
|
||||
@ -778,7 +825,7 @@ impl Cast {
|
||||
Skill::SilencePlusPlus => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Silence, duration: 2, meta: None, tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Silence, duration: 2, meta: None },
|
||||
},
|
||||
Action::Damage {
|
||||
construct: self.target,
|
||||
@ -805,7 +852,7 @@ impl Cast {
|
||||
Skill::SustainPlusPlus => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Sustain, duration: 1, meta: None, tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Sustain, duration: 1, meta: None },
|
||||
},
|
||||
Action::Heal {
|
||||
construct: self.target,
|
||||
@ -817,19 +864,37 @@ impl Cast {
|
||||
Skill::Triage => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Triage, duration: 2, meta: Some(EffectMeta::Skill(Skill::TriageTick)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Triage, duration: 2, meta:
|
||||
Some(EffectMeta::CastTick { source: self.source, target: self.target, skill: Skill::TriageTick }) },
|
||||
},
|
||||
Action::Heal {
|
||||
construct: self.target,
|
||||
colour: Colour::Green,
|
||||
values: vec![Value::Stat { construct: self.source, stat: Stat::GreenPower, mult: self.skill.multiplier() }],
|
||||
},
|
||||
],
|
||||
Skill::TriagePlus => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Triage, duration: 3, meta: Some(EffectMeta::Skill(Skill::TriageTickPlus)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Triage, duration: 3, meta:
|
||||
Some(EffectMeta::CastTick { source: self.source, target: self.target, skill: Skill::TriageTickPlus }) },
|
||||
},
|
||||
Action::Heal {
|
||||
construct: self.target,
|
||||
colour: Colour::Green,
|
||||
values: vec![Value::Stat { construct: self.source, stat: Stat::GreenPower, mult: self.skill.multiplier() }],
|
||||
},
|
||||
],
|
||||
Skill::TriagePlusPlus => vec![
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Triage, duration: 4, meta: Some(EffectMeta::Skill(Skill::TriageTickPlusPlus)), tick: None },
|
||||
effect: ConstructEffect { effect: Effect::Triage, duration: 4, meta:
|
||||
Some(EffectMeta::CastTick { source: self.source, target: self.target, skill: Skill::TriageTickPlusPlus }) },
|
||||
},
|
||||
Action::Heal {
|
||||
construct: self.target,
|
||||
colour: Colour::Green,
|
||||
values: vec![Value::Stat { construct: self.source, stat: Stat::GreenPower, mult: self.skill.multiplier() }],
|
||||
},
|
||||
],
|
||||
Skill::TriageTick |
|
||||
@ -840,6 +905,10 @@ impl Cast {
|
||||
colour: Colour::Green,
|
||||
values: vec![Value::Stat { construct: self.source, stat: Stat::GreenPower, mult: self.skill.multiplier() }],
|
||||
},
|
||||
Action::Effect {
|
||||
construct: self.target,
|
||||
effect: ConstructEffect { effect: Effect::Triaged, duration: 1, meta: None },
|
||||
},
|
||||
],
|
||||
|
||||
// _ => unimplemented!(),
|
||||
@ -851,8 +920,6 @@ impl Cast {
|
||||
}
|
||||
}
|
||||
|
||||
fn end() {}
|
||||
|
||||
// pub fn dev_resolve(a_id: Uuid, b_id: Uuid, skill: Skill) {
|
||||
// let mut resolutions =vec![];
|
||||
|
||||
@ -1219,167 +1286,167 @@ impl Skill {
|
||||
match self {
|
||||
// Modifiers
|
||||
Skill::Amplify => vec![ConstructEffect { effect: Effect::Amplify, duration: 2,
|
||||
meta: Some(EffectMeta::Multiplier(150)), tick: None }],
|
||||
meta: Some(EffectMeta::Multiplier(150)) }],
|
||||
Skill::AmplifyPlus => vec![ConstructEffect { effect: Effect::Amplify, duration: 3,
|
||||
meta: Some(EffectMeta::Multiplier(175)), tick: None }],
|
||||
meta: Some(EffectMeta::Multiplier(175)) }],
|
||||
Skill::AmplifyPlusPlus => vec![ConstructEffect { effect: Effect::Amplify, duration: 4,
|
||||
meta: Some(EffectMeta::Multiplier(200)), tick: None }],
|
||||
meta: Some(EffectMeta::Multiplier(200)) }],
|
||||
|
||||
Skill::Banish => vec![ConstructEffect { effect: Effect::Banish, duration: 2, meta: None, tick: None }],
|
||||
Skill::BanishPlus => vec![ConstructEffect { effect: Effect::Banish, duration: 2, meta: None, tick: None }],
|
||||
Skill::BanishPlusPlus => vec![ConstructEffect { effect: Effect::Banish, duration: 2, meta: None, tick: None }],
|
||||
Skill::Banish => vec![ConstructEffect { effect: Effect::Banish, duration: 2, meta: None }],
|
||||
Skill::BanishPlus => vec![ConstructEffect { effect: Effect::Banish, duration: 2, meta: None }],
|
||||
Skill::BanishPlusPlus => vec![ConstructEffect { effect: Effect::Banish, duration: 2, meta: None }],
|
||||
|
||||
Skill::Block => vec![ConstructEffect { effect: Effect::Block, duration: 1,
|
||||
meta: Some(EffectMeta::Multiplier(35)), tick: None }],
|
||||
meta: Some(EffectMeta::Multiplier(35)) }],
|
||||
Skill::Buff => vec![ConstructEffect { effect: Effect::Buff, duration: 3,
|
||||
meta: Some(EffectMeta::Multiplier(130)), tick: None }],
|
||||
meta: Some(EffectMeta::Multiplier(130)) }],
|
||||
|
||||
Skill::Electrify => vec![ConstructEffect { effect: Effect::Electric, duration: 1,
|
||||
meta: Some(EffectMeta::Skill(Skill::Electrocute)), tick: None }],
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::Electrocute)) }],
|
||||
Skill::ElectrifyPlus => vec![ConstructEffect { effect: Effect::Electric, duration: 1,
|
||||
meta: Some(EffectMeta::Skill(Skill::ElectrocutePlus)), tick: None }],
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::ElectrocutePlus)) }],
|
||||
Skill::ElectrifyPlusPlus => vec![ConstructEffect { effect: Effect::Electric, duration: 1,
|
||||
meta: Some(EffectMeta::Skill(Skill::ElectrocutePlusPlus)), tick: None }],
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::ElectrocutePlusPlus)) }],
|
||||
Skill::Electrocute => vec![ConstructEffect { effect: Effect::Electrocute, duration: 2,
|
||||
meta: Some(EffectMeta::Skill(Skill::ElectrocuteTick)), tick: None }],
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::ElectrocuteTick)) }],
|
||||
Skill::ElectrocutePlus => vec![ConstructEffect { effect: Effect::Electrocute, duration: 3,
|
||||
meta: Some(EffectMeta::Skill(Skill::ElectrocuteTickPlus)), tick: None }],
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::ElectrocuteTickPlus)) }],
|
||||
Skill::ElectrocutePlusPlus => vec![ConstructEffect { effect: Effect::Electrocute, duration: 4,
|
||||
meta: Some(EffectMeta::Skill(Skill::ElectrocuteTickPlusPlus)), tick: None }],
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::ElectrocuteTickPlusPlus)) }],
|
||||
|
||||
Skill::Sustain => vec![ConstructEffect { effect: Effect::Sustain, duration: 1, meta: None, tick: None }],
|
||||
Skill::SustainPlus => vec![ConstructEffect { effect: Effect::Sustain, duration: 1, meta: None, tick: None }],
|
||||
Skill::SustainPlusPlus => vec![ConstructEffect { effect: Effect::Sustain, duration: 1, meta: None, tick: None }],
|
||||
Skill::Sustain => vec![ConstructEffect { effect: Effect::Sustain, duration: 1, meta: None }],
|
||||
Skill::SustainPlus => vec![ConstructEffect { effect: Effect::Sustain, duration: 1, meta: None }],
|
||||
Skill::SustainPlusPlus => vec![ConstructEffect { effect: Effect::Sustain, duration: 1, meta: None }],
|
||||
|
||||
Skill::Curse => vec![ConstructEffect { effect: Effect::Curse, duration: 2,
|
||||
meta: Some(EffectMeta::Multiplier(150)), tick: None }],
|
||||
meta: Some(EffectMeta::Multiplier(150)) }],
|
||||
Skill::CursePlus => vec![ConstructEffect { effect: Effect::Curse, duration: 2,
|
||||
meta: Some(EffectMeta::Multiplier(175)), tick: None }],
|
||||
meta: Some(EffectMeta::Multiplier(175)) }],
|
||||
Skill::CursePlusPlus => vec![ConstructEffect { effect: Effect::Curse, duration: 3,
|
||||
meta: Some(EffectMeta::Multiplier(200)), tick: None }],
|
||||
meta: Some(EffectMeta::Multiplier(200)) }],
|
||||
|
||||
Skill::Debuff => vec![ConstructEffect { effect: Effect::Slow, duration: 3,
|
||||
meta: Some(EffectMeta::Multiplier(50)), tick: None }],
|
||||
meta: Some(EffectMeta::Multiplier(50)) }],
|
||||
|
||||
Skill::Decay => vec![ConstructEffect { effect: Effect::Wither, duration: 3,
|
||||
meta: Some(EffectMeta::Multiplier(50)), tick: None },
|
||||
meta: Some(EffectMeta::Multiplier(50)) },
|
||||
ConstructEffect { effect: Effect::Decay, duration: 3,
|
||||
meta: Some(EffectMeta::Skill(Skill::DecayTick)), tick: None }],
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::DecayTick)) }],
|
||||
Skill::DecayPlus => vec![ConstructEffect { effect: Effect::Wither, duration: 3,
|
||||
meta: Some(EffectMeta::Multiplier(35)), tick: None },
|
||||
meta: Some(EffectMeta::Multiplier(35)) },
|
||||
ConstructEffect { effect: Effect::Decay, duration: 3,
|
||||
meta: Some(EffectMeta::Skill(Skill::DecayTickPlus)), tick: None }],
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::DecayTickPlus)) }],
|
||||
Skill::DecayPlusPlus => vec![ConstructEffect { effect: Effect::Wither, duration: 4,
|
||||
meta: Some(EffectMeta::Multiplier(20)), tick: None },
|
||||
meta: Some(EffectMeta::Multiplier(20)) },
|
||||
ConstructEffect { effect: Effect::Decay, duration: 4,
|
||||
meta: Some(EffectMeta::Skill(Skill::DecayTickPlusPlus)), tick: None }],
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::DecayTickPlusPlus)) }],
|
||||
|
||||
Skill::Haste => vec![ConstructEffect { effect: Effect::Haste, duration: 3,
|
||||
meta: Some(EffectMeta::Multiplier(150)), tick: None }],
|
||||
meta: Some(EffectMeta::Multiplier(150)) }],
|
||||
Skill::HastePlus => vec![ConstructEffect { effect: Effect::Haste, duration: 4,
|
||||
meta: Some(EffectMeta::Multiplier(175)), tick: None }],
|
||||
meta: Some(EffectMeta::Multiplier(175)) }],
|
||||
Skill::HastePlusPlus => vec![ConstructEffect { effect: Effect::Haste, duration: 5,
|
||||
meta: Some(EffectMeta::Multiplier(225)), tick: None }],
|
||||
meta: Some(EffectMeta::Multiplier(225)) }],
|
||||
|
||||
Skill::Absorb => vec![ConstructEffect { effect: Effect::Absorb, duration: 1,
|
||||
meta: Some(EffectMeta::Skill(Skill::Absorption)), tick: None }],
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::Absorption)) }],
|
||||
Skill::AbsorbPlus => vec![ConstructEffect { effect: Effect::Absorb, duration: 1,
|
||||
meta: Some(EffectMeta::Skill(Skill::AbsorptionPlus)), tick: None }],
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::AbsorptionPlus)) }],
|
||||
Skill::AbsorbPlusPlus => vec![ConstructEffect { effect: Effect::Absorb, duration: 1,
|
||||
meta: Some(EffectMeta::Skill(Skill::AbsorptionPlusPlus)), tick: None }],
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::AbsorptionPlusPlus)) }],
|
||||
|
||||
Skill::Absorption => vec![ConstructEffect { effect: Effect::Absorption, duration: 3, meta: None, tick: None }],
|
||||
Skill::AbsorptionPlus => vec![ConstructEffect { effect: Effect::Absorption, duration: 4, meta: None, tick: None }],
|
||||
Skill::AbsorptionPlusPlus => vec![ConstructEffect { effect: Effect::Absorption, duration: 5, meta: None, tick: None }],
|
||||
Skill::Absorption => vec![ConstructEffect { effect: Effect::Absorption, duration: 3, meta: None }],
|
||||
Skill::AbsorptionPlus => vec![ConstructEffect { effect: Effect::Absorption, duration: 4, meta: None }],
|
||||
Skill::AbsorptionPlusPlus => vec![ConstructEffect { effect: Effect::Absorption, duration: 5, meta: None }],
|
||||
|
||||
Skill::Hybrid => vec![ConstructEffect { effect: Effect::Hybrid, duration: 3,
|
||||
meta: Some(EffectMeta::Multiplier(150)), tick: None }],
|
||||
meta: Some(EffectMeta::Multiplier(150)) }],
|
||||
Skill::HybridPlus => vec![ConstructEffect { effect: Effect::Hybrid, duration: 4,
|
||||
meta: Some(EffectMeta::Multiplier(175)), tick: None }],
|
||||
meta: Some(EffectMeta::Multiplier(175)) }],
|
||||
Skill::HybridPlusPlus => vec![ConstructEffect { effect: Effect::Hybrid, duration: 5,
|
||||
meta: Some(EffectMeta::Multiplier(200)), tick: None }],
|
||||
meta: Some(EffectMeta::Multiplier(200)) }],
|
||||
|
||||
Skill::Invert => vec![ConstructEffect { effect: Effect::Invert, duration: 2, meta: None, tick: None }],
|
||||
Skill::InvertPlus => vec![ConstructEffect { effect: Effect::Invert, duration: 3, meta: None, tick: None }],
|
||||
Skill::InvertPlusPlus => vec![ConstructEffect { effect: Effect::Invert, duration: 4, meta: None, tick: None }],
|
||||
Skill::Invert => vec![ConstructEffect { effect: Effect::Invert, duration: 2, meta: None }],
|
||||
Skill::InvertPlus => vec![ConstructEffect { effect: Effect::Invert, duration: 3, meta: None }],
|
||||
Skill::InvertPlusPlus => vec![ConstructEffect { effect: Effect::Invert, duration: 4, meta: None }],
|
||||
|
||||
Skill::Counter => vec![ConstructEffect { effect: Effect::Counter, duration: 1,
|
||||
meta: Some(EffectMeta::Skill(Skill::CounterAttack)), tick: None }],
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::CounterAttack)) }],
|
||||
Skill::CounterPlus => vec![ConstructEffect { effect: Effect::Counter, duration: 1,
|
||||
meta: Some(EffectMeta::Skill(Skill::CounterAttackPlus)), tick: None }],
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::CounterAttackPlus)) }],
|
||||
Skill::CounterPlusPlus => vec![ConstructEffect { effect: Effect::Counter, duration: 1,
|
||||
meta: Some(EffectMeta::Skill(Skill::CounterAttackPlusPlus)), tick: None }],
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::CounterAttackPlusPlus)) }],
|
||||
|
||||
Skill::Reflect => vec![ConstructEffect { effect: Effect::Reflect, duration: 1, meta: None, tick: None }],
|
||||
Skill::ReflectPlus => vec![ConstructEffect { effect: Effect::Reflect, duration: 1, meta: None, tick: None }],
|
||||
Skill::ReflectPlusPlus => vec![ConstructEffect { effect: Effect::Reflect, duration: 1, meta: None, tick: None }],
|
||||
Skill::Reflect => vec![ConstructEffect { effect: Effect::Reflect, duration: 1, meta: None }],
|
||||
Skill::ReflectPlus => vec![ConstructEffect { effect: Effect::Reflect, duration: 1, meta: None }],
|
||||
Skill::ReflectPlusPlus => vec![ConstructEffect { effect: Effect::Reflect, duration: 1, meta: None }],
|
||||
|
||||
Skill::Break => vec![ConstructEffect { effect: Effect::Stun, duration: 1, meta: None, tick: None },
|
||||
Skill::Break => vec![ConstructEffect { effect: Effect::Stun, duration: 1, meta: None },
|
||||
ConstructEffect { effect: Effect::Vulnerable, duration: 3,
|
||||
meta: Some(EffectMeta::Multiplier(150)), tick: None }],
|
||||
Skill::BreakPlus => vec![ConstructEffect { effect: Effect::Stun, duration: 1, meta: None, tick: None },
|
||||
meta: Some(EffectMeta::Multiplier(150)) }],
|
||||
Skill::BreakPlus => vec![ConstructEffect { effect: Effect::Stun, duration: 1, meta: None },
|
||||
ConstructEffect { effect: Effect::Vulnerable, duration: 4,
|
||||
meta: Some(EffectMeta::Multiplier(175)), tick: None }],
|
||||
Skill::BreakPlusPlus => vec![ConstructEffect { effect: Effect::Stun, duration: 2, meta: None, tick: None },
|
||||
meta: Some(EffectMeta::Multiplier(175)) }],
|
||||
Skill::BreakPlusPlus => vec![ConstructEffect { effect: Effect::Stun, duration: 2, meta: None },
|
||||
ConstructEffect { effect: Effect::Vulnerable, duration: 4,
|
||||
meta: Some(EffectMeta::Multiplier(200)), tick: None }],
|
||||
meta: Some(EffectMeta::Multiplier(200)) }],
|
||||
|
||||
Skill::Ruin => vec![ConstructEffect { effect: Effect::Stun, duration: 1, meta: None, tick: None }],
|
||||
Skill::RuinPlus => vec![ConstructEffect { effect: Effect::Stun, duration: 1, meta: None, tick: None }],
|
||||
Skill::RuinPlusPlus => vec![ConstructEffect { effect: Effect::Stun, duration: 1, meta: None, tick: None }],
|
||||
Skill::Ruin => vec![ConstructEffect { effect: Effect::Stun, duration: 1, meta: None }],
|
||||
Skill::RuinPlus => vec![ConstructEffect { effect: Effect::Stun, duration: 1, meta: None }],
|
||||
Skill::RuinPlusPlus => vec![ConstructEffect { effect: Effect::Stun, duration: 1, meta: None }],
|
||||
|
||||
Skill::Purge => vec![ConstructEffect { effect: Effect::Purge, duration: 2, meta: None, tick: None }],
|
||||
Skill::PurgePlus => vec![ConstructEffect { effect: Effect::Purge, duration: 3, meta: None, tick: None }],
|
||||
Skill::PurgePlusPlus => vec![ConstructEffect { effect: Effect::Purge, duration: 4, meta: None, tick: None }],
|
||||
Skill::Purge => vec![ConstructEffect { effect: Effect::Purge, duration: 2, meta: None }],
|
||||
Skill::PurgePlus => vec![ConstructEffect { effect: Effect::Purge, duration: 3, meta: None }],
|
||||
Skill::PurgePlusPlus => vec![ConstructEffect { effect: Effect::Purge, duration: 4, meta: None }],
|
||||
|
||||
Skill::Link => vec![ConstructEffect { effect: Effect::Stun, duration: 1, meta: None, tick: None }],
|
||||
Skill::LinkPlus => vec![ConstructEffect { effect: Effect::Stun, duration: 1, meta: None, tick: None }],
|
||||
Skill::LinkPlusPlus => vec![ConstructEffect { effect: Effect::Stun, duration: 1, meta: None, tick: None }],
|
||||
Skill::Link => vec![ConstructEffect { effect: Effect::Stun, duration: 1, meta: None }],
|
||||
Skill::LinkPlus => vec![ConstructEffect { effect: Effect::Stun, duration: 1, meta: None }],
|
||||
Skill::LinkPlusPlus => vec![ConstructEffect { effect: Effect::Stun, duration: 1, meta: None }],
|
||||
|
||||
Skill::Silence => vec![ConstructEffect { effect: Effect::Silence, duration: 2, meta: None, tick: None }],
|
||||
Skill::SilencePlus => vec![ConstructEffect { effect: Effect::Silence, duration: 2, meta: None, tick: None }],
|
||||
Skill::SilencePlusPlus => vec![ConstructEffect { effect: Effect::Silence, duration: 2, meta: None, tick: None }],
|
||||
Skill::Silence => vec![ConstructEffect { effect: Effect::Silence, duration: 2, meta: None }],
|
||||
Skill::SilencePlus => vec![ConstructEffect { effect: Effect::Silence, duration: 2, meta: None }],
|
||||
Skill::SilencePlusPlus => vec![ConstructEffect { effect: Effect::Silence, duration: 2, meta: None }],
|
||||
|
||||
Skill::Siphon => vec![ConstructEffect { effect: Effect::Siphon, duration: 2,
|
||||
meta: Some(EffectMeta::Skill(Skill::SiphonTick)), tick: None }],
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::SiphonTick)) }],
|
||||
Skill::SiphonPlus => vec![ConstructEffect { effect: Effect::Siphon, duration: 3,
|
||||
meta: Some(EffectMeta::Skill(Skill::SiphonTickPlus)), tick: None }],
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::SiphonTickPlus)) }],
|
||||
Skill::SiphonPlusPlus => vec![ConstructEffect { effect: Effect::Siphon, duration: 4,
|
||||
meta: Some(EffectMeta::Skill(Skill::SiphonTickPlusPlus)), tick: None }],
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::SiphonTickPlusPlus)) }],
|
||||
|
||||
Skill::Sleep => vec![ConstructEffect { effect: Effect::Stun, duration: 2, meta: None, tick: None }],
|
||||
Skill::SleepPlus => vec![ConstructEffect { effect: Effect::Stun, duration: 3, meta: None, tick: None }],
|
||||
Skill::SleepPlusPlus => vec![ConstructEffect { effect: Effect::Stun, duration: 4, meta: None, tick: None }],
|
||||
Skill::Sleep => vec![ConstructEffect { effect: Effect::Stun, duration: 2, meta: None }],
|
||||
Skill::SleepPlus => vec![ConstructEffect { effect: Effect::Stun, duration: 3, meta: None }],
|
||||
Skill::SleepPlusPlus => vec![ConstructEffect { effect: Effect::Stun, duration: 4, meta: None }],
|
||||
|
||||
Skill::Restrict => vec![ConstructEffect { effect: Effect::Restrict, duration: 2, meta: None, tick: None }],
|
||||
Skill::RestrictPlus => vec![ConstructEffect { effect: Effect::Restrict, duration: 2, meta: None, tick: None }],
|
||||
Skill::RestrictPlusPlus => vec![ConstructEffect { effect: Effect::Restrict, duration: 2, meta: None, tick: None }],
|
||||
Skill::Restrict => vec![ConstructEffect { effect: Effect::Restrict, duration: 2, meta: None }],
|
||||
Skill::RestrictPlus => vec![ConstructEffect { effect: Effect::Restrict, duration: 2, meta: None }],
|
||||
Skill::RestrictPlusPlus => vec![ConstructEffect { effect: Effect::Restrict, duration: 2, meta: None }],
|
||||
|
||||
Skill::Bash => vec![ConstructEffect { effect: Effect::Stun, duration: 2,
|
||||
meta: Some(EffectMeta::Skill(Skill::Bash)), tick: None }],
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::Bash)) }],
|
||||
Skill::BashPlus => vec![ConstructEffect { effect: Effect::Stun, duration: 2,
|
||||
meta: Some(EffectMeta::Skill(Skill::BashPlus)), tick: None }],
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::BashPlus)) }],
|
||||
Skill::BashPlusPlus => vec![ConstructEffect { effect: Effect::Stun, duration: 2,
|
||||
meta: Some(EffectMeta::Skill(Skill::BashPlusPlus)), tick: None }],
|
||||
Skill::Stun => vec![ConstructEffect { effect: Effect::Stun, duration: 2, meta: None, tick: None }],
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::BashPlusPlus)) }],
|
||||
Skill::Stun => vec![ConstructEffect { effect: Effect::Stun, duration: 2, meta: None }],
|
||||
|
||||
Skill::Intercept => vec![ConstructEffect { effect: Effect::Intercept, duration: 1, meta: None, tick: None }],
|
||||
Skill::InterceptPlus => vec![ConstructEffect { effect: Effect::Intercept, duration: 1, meta: None, tick: None }],
|
||||
Skill::InterceptPlusPlus => vec![ConstructEffect { effect: Effect::Intercept, duration: 1, meta: None, tick: None }],
|
||||
Skill::Intercept => vec![ConstructEffect { effect: Effect::Intercept, duration: 1, meta: None }],
|
||||
Skill::InterceptPlus => vec![ConstructEffect { effect: Effect::Intercept, duration: 1, meta: None }],
|
||||
Skill::InterceptPlusPlus => vec![ConstructEffect { effect: Effect::Intercept, duration: 1, meta: None }],
|
||||
|
||||
Skill::Triage => vec![ConstructEffect { effect: Effect::Triage, duration: 2,
|
||||
meta: Some(EffectMeta::Skill(Skill::TriageTick)), tick: None }],
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::TriageTick)) }],
|
||||
Skill::TriagePlus => vec![ConstructEffect { effect: Effect::Triage, duration: 3,
|
||||
meta: Some(EffectMeta::Skill(Skill::TriageTickPlus)), tick: None }],
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::TriageTickPlus)) }],
|
||||
Skill::TriagePlusPlus => vec![ConstructEffect { effect: Effect::Triage, duration: 4,
|
||||
meta: Some(EffectMeta::Skill(Skill::TriageTickPlusPlus)), tick: None }],
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::TriageTickPlusPlus)) }],
|
||||
|
||||
Skill::Purify => vec![ConstructEffect { effect: Effect::Pure, duration: 2,
|
||||
meta: Some(EffectMeta::Multiplier(150)), tick: None }],
|
||||
meta: Some(EffectMeta::Multiplier(150)) }],
|
||||
Skill::PurifyPlus => vec![ConstructEffect { effect: Effect::Pure, duration: 2,
|
||||
meta: Some(EffectMeta::Multiplier(175)), tick: None }],
|
||||
meta: Some(EffectMeta::Multiplier(175)) }],
|
||||
Skill::PurifyPlusPlus => vec![ConstructEffect { effect: Effect::Pure, duration: 2,
|
||||
meta: Some(EffectMeta::Multiplier(200)), tick: None }],
|
||||
meta: Some(EffectMeta::Multiplier(200)) }],
|
||||
|
||||
_ => {
|
||||
panic!("{:?} no skill effect", self);
|
||||
@ -2184,7 +2251,7 @@ mod tests {
|
||||
// let ConstructEffect { effect: _, duration: _, meta, tick: _ } = target.effects.iter()
|
||||
// .find(|e| e.effect == Effect::Electric).unwrap().clone();
|
||||
// match meta {
|
||||
// Some(EffectMeta::Skill(s)) => {
|
||||
// Some(EffectMeta::CastOnHit(s)) => {
|
||||
// // Gurad against reflect overflow
|
||||
// if !(source.affected(Effect::Reflect) && target.affected(Effect::Reflect)) {
|
||||
// // Check reflect don't bother if electrocute is procing on death
|
||||
@ -2205,7 +2272,7 @@ mod tests {
|
||||
// let ConstructEffect { effect: _, duration: _, meta, tick: _ } = target.effects.iter()
|
||||
// .find(|e| e.effect == Effect::Absorb).unwrap().clone();
|
||||
// match meta {
|
||||
// Some(EffectMeta::Skill(s)) => {
|
||||
// Some(EffectMeta::CastOnHit(s)) => {
|
||||
// absorption(&mut source, &mut target, resolutions, skill, amount + mitigation, s);
|
||||
// },
|
||||
// _ => panic!("no absorb skill"),
|
||||
@ -2216,7 +2283,7 @@ mod tests {
|
||||
// let ConstructEffect { effect: _, duration: _, meta, tick: _ } = target.effects.iter()
|
||||
// .find(|e| e.effect == Effect::Counter).unwrap().clone();
|
||||
// match meta {
|
||||
// Some(EffectMeta::Skill(s)) => {
|
||||
// Some(EffectMeta::CastOnHit(s)) => {
|
||||
// counter_attack(&mut target, &mut source, resolutions, s);
|
||||
// },
|
||||
// _ => panic!("no counter skill"),
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user