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