fix siphon
This commit is contained in:
parent
48ebcf921f
commit
852f192ae7
@ -6,4 +6,5 @@ purify conditional healing
|
||||
|
||||
set static speed for dot ticks
|
||||
infinite counter loop
|
||||
cooldowns reduced after 1 complete cast
|
||||
cooldowns set after cast
|
||||
cooldowns reduced after 1 complete cast
|
||||
|
||||
@ -63,7 +63,7 @@ impl ConstructSkill {
|
||||
#[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)]
|
||||
pub enum EffectMeta {
|
||||
CastOnHit(Skill), // maybe needs source/target
|
||||
CastTick { source: Uuid, target: Uuid, skill: Skill },
|
||||
CastTick { source: Uuid, target: Uuid, skill: Skill, speed: usize, amount: usize },
|
||||
AddedDamage(usize),
|
||||
Multiplier(usize),
|
||||
}
|
||||
@ -98,7 +98,7 @@ impl ConstructEffect {
|
||||
|
||||
pub fn get_skill(&self) -> Option<Skill> {
|
||||
match self.meta {
|
||||
Some(EffectMeta::CastTick { source, target, skill }) => Some(skill),
|
||||
Some(EffectMeta::CastTick { source, target, skill, speed, amount }) => Some(skill),
|
||||
Some(EffectMeta::CastOnHit(s)) => Some(s),
|
||||
_ => None,
|
||||
}
|
||||
@ -128,6 +128,7 @@ pub enum Stat {
|
||||
Cooldowns,
|
||||
EffectsCount,
|
||||
Skills(Colour),
|
||||
TickDamage(Effect),
|
||||
}
|
||||
|
||||
#[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)]
|
||||
@ -520,10 +521,28 @@ impl Construct {
|
||||
Stat::Skills(colour) => self.skills.iter().filter(|cs| cs.skill.colours().contains(&colour)).count(),
|
||||
Stat::EffectsCount => self.effects.iter().filter(|ce| !ce.effect.hidden()).count(),
|
||||
|
||||
Stat::TickDamage(effect) => self.tick_damage(effect),
|
||||
|
||||
_ => panic!("{:?} cannot be calculated without an amount", stat),
|
||||
}
|
||||
}
|
||||
|
||||
fn tick_damage(&self, effect: Effect) -> usize {
|
||||
match self.effects.iter().find_map(|ce| match ce.effect == effect {
|
||||
true => match ce.meta {
|
||||
Some(EffectMeta::CastTick { source, target, skill, speed, amount }) => Some(amount),
|
||||
_ => None,
|
||||
},
|
||||
false => None,
|
||||
}) {
|
||||
Some(amount) => amount,
|
||||
None => {
|
||||
warn!("no tick damage {:?} {:?}", self.effects, effect);
|
||||
0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn skill_speed(&self, s: Skill) -> usize {
|
||||
self.stat(Stat::Speed).saturating_mul(s.speed() as usize)
|
||||
}
|
||||
@ -988,8 +1007,8 @@ impl Construct {
|
||||
self.effects.iter().find(|e| e.effect == Effect::Electric).unwrap();
|
||||
|
||||
match meta {
|
||||
Some(EffectMeta::CastTick { source: _, target, skill }) =>
|
||||
casts.push(Cast::new(self.id, self.account, *target, *skill)),
|
||||
Some(EffectMeta::CastOnHit(skill)) =>
|
||||
casts.push(Cast::new(self.id, self.account, cast.target, *skill)),
|
||||
_ => panic!("no electrify skill {:?}", meta),
|
||||
};
|
||||
}
|
||||
|
||||
@ -91,8 +91,6 @@ impl Effect {
|
||||
Skill::SiphonPlus,
|
||||
Skill::SiphonPlusPlus,
|
||||
Skill::SiphonTick,
|
||||
Skill::SiphonTickPlus,
|
||||
Skill::SiphonTickPlusPlus,
|
||||
].contains(&skill),
|
||||
|
||||
Effect::Decayed => [
|
||||
@ -100,8 +98,6 @@ impl Effect {
|
||||
Skill::DecayPlus,
|
||||
Skill::DecayPlusPlus,
|
||||
Skill::DecayTick,
|
||||
Skill::DecayTickPlus,
|
||||
Skill::DecayTickPlusPlus,
|
||||
].contains(&skill),
|
||||
|
||||
Effect::Triaged => [
|
||||
@ -109,8 +105,6 @@ impl Effect {
|
||||
Skill::TriagePlus,
|
||||
Skill::TriagePlusPlus,
|
||||
Skill::TriageTick,
|
||||
Skill::TriageTickPlus,
|
||||
Skill::TriageTickPlusPlus,
|
||||
].contains(&skill),
|
||||
|
||||
_ => false,
|
||||
|
||||
@ -428,7 +428,7 @@ impl Game {
|
||||
.cloned()
|
||||
.filter_map(|e| e.meta)
|
||||
.filter_map(move |m| match m {
|
||||
EffectMeta::CastTick { source, target, skill } => Some(Cast::new(source, c.account, target, skill)),
|
||||
EffectMeta::CastTick { source, target, skill, speed, amount } => Some(Cast::new(source, c.account, target, skill)),
|
||||
_ => None,
|
||||
})
|
||||
)
|
||||
@ -633,6 +633,10 @@ impl Game {
|
||||
}
|
||||
_ => dmg,
|
||||
}),
|
||||
|
||||
Value::TickDamage { construct, effect } =>
|
||||
self.construct(construct).stat(Stat::TickDamage(effect)),
|
||||
|
||||
// Skills { construct: Uuid, colour: Colour },
|
||||
}
|
||||
}
|
||||
@ -831,6 +835,7 @@ pub enum Value {
|
||||
Effects { construct: Uuid },
|
||||
Removals { construct: Uuid },
|
||||
DamageReceived { construct: Uuid, colour: Colour },
|
||||
TickDamage { construct: Uuid, effect: Effect },
|
||||
}
|
||||
|
||||
#[derive(Debug,Clone,PartialEq)]
|
||||
@ -1688,7 +1693,7 @@ mod tests {
|
||||
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::Slay));
|
||||
game.new_resolve(Cast::new(source, player_id, target, Skill::Slay));
|
||||
|
||||
let last = game.resolutions.len() - 1;
|
||||
let resolutions = &game.resolutions[last];
|
||||
@ -1715,12 +1720,12 @@ mod tests {
|
||||
let source = game.players[0].constructs[0].id;
|
||||
let target = game.players[1].constructs[0].id;
|
||||
|
||||
game.resolve(Cast::new(source, source_player_id, target, Skill::Decay));
|
||||
game.new_resolve(Cast::new(source, source_player_id, target, Skill::Decay));
|
||||
|
||||
// don't mention 3 we volvo now
|
||||
assert!(game.players[1].constructs[0].effects.len() == 3);
|
||||
|
||||
game.resolve(Cast::new(target, target_player_id, target, Skill::Purify));
|
||||
game.new_resolve(Cast::new(target, target_player_id, target, Skill::Purify));
|
||||
|
||||
assert!(game.players[1].constructs[0].effects.len() == 1);
|
||||
|
||||
@ -1744,9 +1749,9 @@ mod tests {
|
||||
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::Strike));
|
||||
game.resolve(Cast::new(source, player_id, target, Skill::Invert));
|
||||
game.resolve(Cast::new(source, player_id, target, Skill::Strike));
|
||||
game.new_resolve(Cast::new(source, player_id, target, Skill::Strike));
|
||||
game.new_resolve(Cast::new(source, player_id, target, Skill::Invert));
|
||||
game.new_resolve(Cast::new(source, player_id, target, Skill::Strike));
|
||||
|
||||
let last = game.resolutions.len() - 1;
|
||||
let resolutions = &game.resolutions[last];
|
||||
@ -1771,7 +1776,7 @@ mod tests {
|
||||
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::Siphon));
|
||||
game.new_resolve(Cast::new(source, player_id, target, Skill::Siphon));
|
||||
|
||||
let last = game.resolutions.len() - 1;
|
||||
let resolutions = &game.resolutions[last];
|
||||
@ -1784,6 +1789,7 @@ mod tests {
|
||||
_ => false,
|
||||
}));
|
||||
|
||||
println!("{:#?}", resolutions);
|
||||
assert!(resolutions.iter().any(|r| match r.event {
|
||||
Event::Damage { construct, colour, amount, mitigation: _, display: _ } =>
|
||||
construct == target && amount > 0 && colour == Colour::Blue,
|
||||
|
||||
@ -1215,11 +1215,7 @@ impl From<Skill> for Item {
|
||||
Skill::ElectrocutePlus => Item::ElectrifyPlus,
|
||||
Skill::ElectrocutePlusPlus => Item::ElectrifyPlusPlus,
|
||||
Skill::ElectrocuteTick => Item::Electrify,
|
||||
Skill::ElectrocuteTickPlus => Item::ElectrifyPlus,
|
||||
Skill::ElectrocuteTickPlusPlus => Item::ElectrifyPlus,
|
||||
Skill::DecayTick => Item::Decay,
|
||||
Skill::DecayTickPlus => Item::DecayPlus,
|
||||
Skill::DecayTickPlusPlus => Item::DecayPlusPlus,
|
||||
Skill::Absorption => Item::Absorb,
|
||||
Skill::AbsorptionPlus => Item::AbsorbPlus,
|
||||
Skill::AbsorptionPlusPlus => Item::AbsorbPlusPlus,
|
||||
@ -1229,11 +1225,7 @@ impl From<Skill> for Item {
|
||||
Skill::CounterAttackPlus => Item::CounterPlus,
|
||||
Skill::CounterAttackPlusPlus => Item::CounterPlusPlus,
|
||||
Skill::SiphonTick => Item::Siphon,
|
||||
Skill::SiphonTickPlus => Item::SiphonPlus,
|
||||
Skill::SiphonTickPlusPlus => Item::SiphonPlusPlus,
|
||||
Skill::TriageTick => Item::Triage,
|
||||
Skill::TriageTickPlus => Item::TriagePlus,
|
||||
Skill::TriageTickPlusPlus => Item::TriagePlusPlus,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -107,9 +107,7 @@ impl Cast {
|
||||
Skill::Decay => decay(self, game),
|
||||
Skill::DecayPlus => decay_plus(self, game),
|
||||
Skill::DecayPlusPlus => decay_plus_plus(self, game),
|
||||
Skill::DecayTick |
|
||||
Skill::DecayTickPlus |
|
||||
Skill::DecayTickPlusPlus => decay_tick(self, game),
|
||||
Skill::DecayTick => decay_tick(self, game),
|
||||
|
||||
Skill::Electrify => electrify(self, game),
|
||||
Skill::ElectrifyPlus => electrify_plus(self, game),
|
||||
@ -117,9 +115,7 @@ impl Cast {
|
||||
Skill::Electrocute => electrocute(self, game),
|
||||
Skill::ElectrocutePlus => electrocute_plus(self, game),
|
||||
Skill::ElectrocutePlusPlus => electrocute_plus_plus(self, game),
|
||||
Skill::ElectrocuteTick |
|
||||
Skill::ElectrocuteTickPlus |
|
||||
Skill::ElectrocuteTickPlusPlus => electrocute_tick(self, game),
|
||||
Skill::ElectrocuteTick => electrocute_tick(self, game),
|
||||
|
||||
Skill::Heal |
|
||||
Skill::HealPlus |
|
||||
@ -178,9 +174,7 @@ impl Cast {
|
||||
Skill::Siphon => siphon(self, game),
|
||||
Skill::SiphonPlus => siphon_plus(self, game),
|
||||
Skill::SiphonPlusPlus => siphon_plus_plus(self, game),
|
||||
Skill::SiphonTick |
|
||||
Skill::SiphonTickPlus |
|
||||
Skill::SiphonTickPlusPlus => siphon_tick(self, game),
|
||||
Skill::SiphonTick=> siphon_tick(self, game),
|
||||
|
||||
Skill::Slay |
|
||||
Skill::SlayPlus |
|
||||
@ -205,9 +199,7 @@ impl Cast {
|
||||
Skill::Triage => triage(self, game),
|
||||
Skill::TriagePlus => triage_plus(self, game),
|
||||
Skill::TriagePlusPlus => triage_plus_plus(self, game),
|
||||
Skill::TriageTick |
|
||||
Skill::TriageTickPlus |
|
||||
Skill::TriageTickPlusPlus => triage_tick(self, game),
|
||||
Skill::TriageTick => triage_tick(self, game),
|
||||
};
|
||||
|
||||
// actions.append(&mut rest);
|
||||
@ -301,6 +293,7 @@ pub enum Skill {
|
||||
DecayPlus,
|
||||
#[serde(rename = "Decay++")]
|
||||
DecayPlusPlus,
|
||||
DecayTick, // dot
|
||||
|
||||
Haste,
|
||||
#[serde(rename = "Haste+")]
|
||||
@ -403,6 +396,7 @@ pub enum Skill {
|
||||
SiphonPlus,
|
||||
#[serde(rename = "Siphon++")]
|
||||
SiphonPlusPlus,
|
||||
SiphonTick,
|
||||
|
||||
Intercept,
|
||||
#[serde(rename = "Intercept+")]
|
||||
@ -421,6 +415,7 @@ pub enum Skill {
|
||||
TriagePlus,
|
||||
#[serde(rename = "Triage++")]
|
||||
TriagePlusPlus,
|
||||
TriageTick,
|
||||
|
||||
Absorption,
|
||||
#[serde(rename = "Absorption+")]
|
||||
@ -440,31 +435,11 @@ pub enum Skill {
|
||||
#[serde(rename = "Electrocute++")]
|
||||
ElectrocutePlusPlus,
|
||||
ElectrocuteTick,
|
||||
#[serde(rename = "ElectrocuteTick+")]
|
||||
ElectrocuteTickPlus,
|
||||
#[serde(rename = "ElectrocuteTick++")]
|
||||
ElectrocuteTickPlusPlus,
|
||||
|
||||
DecayTick, // dot
|
||||
#[serde(rename = "DecayTick+")]
|
||||
DecayTickPlus,
|
||||
#[serde(rename = "DecayTick++")]
|
||||
DecayTickPlusPlus,
|
||||
|
||||
HasteStrike,
|
||||
HybridBlast,
|
||||
|
||||
SiphonTick,
|
||||
#[serde(rename = "SiphonTick+")]
|
||||
SiphonTickPlus,
|
||||
#[serde(rename = "SiphonTick++")]
|
||||
SiphonTickPlusPlus,
|
||||
|
||||
TriageTick,
|
||||
#[serde(rename = "TriageTick+")]
|
||||
TriageTickPlus,
|
||||
#[serde(rename = "TriageTick++")]
|
||||
TriageTickPlusPlus,
|
||||
}
|
||||
|
||||
impl Skill {
|
||||
@ -485,9 +460,9 @@ impl Skill {
|
||||
Skill::HealPlus => 135, //GG
|
||||
Skill::HealPlusPlus => 160, //GG
|
||||
|
||||
Skill::SiphonTick => 25, // GB
|
||||
Skill::SiphonTickPlus => 27,
|
||||
Skill::SiphonTickPlusPlus => 30,
|
||||
Skill::Siphon => 25, // GB
|
||||
Skill::SiphonPlus => 27,
|
||||
Skill::SiphonPlusPlus => 30,
|
||||
|
||||
Skill::Slay => 40, // RG
|
||||
Skill::SlayPlus => 50,
|
||||
@ -498,9 +473,9 @@ impl Skill {
|
||||
Skill::StrikePlusPlus => 140,
|
||||
|
||||
// Block Base
|
||||
Skill::ElectrocuteTick => 80,
|
||||
Skill::ElectrocuteTickPlus => 90,
|
||||
Skill::ElectrocuteTickPlusPlus => 100,
|
||||
Skill::Electrocute => 80,
|
||||
Skill::ElectrocutePlus => 90,
|
||||
Skill::ElectrocutePlusPlus => 100,
|
||||
|
||||
Skill::CounterAttack => 115,
|
||||
Skill::CounterAttackPlus => 130,
|
||||
@ -544,9 +519,9 @@ impl Skill {
|
||||
Skill::RuinPlusPlus => 70,
|
||||
|
||||
// Debuff Base
|
||||
Skill::DecayTick => 33,
|
||||
Skill::DecayTickPlus => 37,
|
||||
Skill::DecayTickPlusPlus => 45,
|
||||
Skill::Decay => 33,
|
||||
Skill::DecayPlus => 37,
|
||||
Skill::DecayPlusPlus => 45,
|
||||
|
||||
Skill::Silence => 55, // Deals more per blue skill on target
|
||||
Skill::SilencePlus => 65,
|
||||
@ -569,9 +544,9 @@ impl Skill {
|
||||
Skill::InterceptPlus => 100,
|
||||
Skill::InterceptPlusPlus => 125,
|
||||
|
||||
Skill::TriageTick => 75,
|
||||
Skill::TriageTickPlus => 90,
|
||||
Skill::TriageTickPlusPlus => 110,
|
||||
Skill::Triage => 75,
|
||||
Skill::TriagePlus => 90,
|
||||
Skill::TriagePlusPlus => 110,
|
||||
|
||||
_ => 100,
|
||||
}
|
||||
@ -605,9 +580,9 @@ impl Skill {
|
||||
Skill::Electrocute => vec![ConstructEffect { effect: Effect::Electrocute, duration: 2,
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::ElectrocuteTick)) }],
|
||||
Skill::ElectrocutePlus => vec![ConstructEffect { effect: Effect::Electrocute, duration: 3,
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::ElectrocuteTickPlus)) }],
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::ElectrocuteTick)) }],
|
||||
Skill::ElectrocutePlusPlus => vec![ConstructEffect { effect: Effect::Electrocute, duration: 4,
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::ElectrocuteTickPlusPlus)) }],
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::ElectrocuteTick)) }],
|
||||
|
||||
Skill::Sustain => vec![ConstructEffect { effect: Effect::Sustain, duration: 1, meta: None }],
|
||||
Skill::SustainPlus => vec![ConstructEffect { effect: Effect::Sustain, duration: 1, meta: None }],
|
||||
@ -630,11 +605,11 @@ impl Skill {
|
||||
Skill::DecayPlus => vec![ConstructEffect { effect: Effect::Wither, duration: 3,
|
||||
meta: Some(EffectMeta::Multiplier(35)) },
|
||||
ConstructEffect { effect: Effect::Decay, duration: 3,
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::DecayTickPlus)) }],
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::DecayTick)) }],
|
||||
Skill::DecayPlusPlus => vec![ConstructEffect { effect: Effect::Wither, duration: 4,
|
||||
meta: Some(EffectMeta::Multiplier(20)) },
|
||||
ConstructEffect { effect: Effect::Decay, duration: 4,
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::DecayTickPlusPlus)) }],
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::DecayTick)) }],
|
||||
|
||||
Skill::Haste => vec![ConstructEffect { effect: Effect::Haste, duration: 3,
|
||||
meta: Some(EffectMeta::Multiplier(150)) }],
|
||||
@ -705,9 +680,9 @@ impl Skill {
|
||||
Skill::Siphon => vec![ConstructEffect { effect: Effect::Siphon, duration: 2,
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::SiphonTick)) }],
|
||||
Skill::SiphonPlus => vec![ConstructEffect { effect: Effect::Siphon, duration: 3,
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::SiphonTickPlus)) }],
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::SiphonTick)) }],
|
||||
Skill::SiphonPlusPlus => vec![ConstructEffect { effect: Effect::Siphon, duration: 4,
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::SiphonTickPlusPlus)) }],
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::SiphonTick)) }],
|
||||
|
||||
Skill::Sleep => vec![ConstructEffect { effect: Effect::Stun, duration: 2, meta: None }],
|
||||
Skill::SleepPlus => vec![ConstructEffect { effect: Effect::Stun, duration: 3, meta: None }],
|
||||
@ -732,9 +707,9 @@ impl Skill {
|
||||
Skill::Triage => vec![ConstructEffect { effect: Effect::Triage, duration: 2,
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::TriageTick)) }],
|
||||
Skill::TriagePlus => vec![ConstructEffect { effect: Effect::Triage, duration: 3,
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::TriageTickPlus)) }],
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::TriageTick)) }],
|
||||
Skill::TriagePlusPlus => vec![ConstructEffect { effect: Effect::Triage, duration: 4,
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::TriageTickPlusPlus)) }],
|
||||
meta: Some(EffectMeta::CastOnHit(Skill::TriageTick)) }],
|
||||
|
||||
Skill::Purify => vec![ConstructEffect { effect: Effect::Pure, duration: 2,
|
||||
meta: Some(EffectMeta::Multiplier(150)) }],
|
||||
@ -894,17 +869,9 @@ impl Skill {
|
||||
Skill::AbsorptionPlusPlus |
|
||||
// Ticks
|
||||
Skill::ElectrocuteTick|
|
||||
Skill::ElectrocuteTickPlus |
|
||||
Skill::ElectrocuteTickPlusPlus |
|
||||
Skill::DecayTick|
|
||||
Skill::DecayTickPlus |
|
||||
Skill::DecayTickPlusPlus |
|
||||
Skill::SiphonTick|
|
||||
Skill::SiphonTickPlus |
|
||||
Skill::SiphonTickPlusPlus |
|
||||
Skill::TriageTick|
|
||||
Skill::TriageTickPlus |
|
||||
Skill::TriageTickPlusPlus => None,
|
||||
Skill::TriageTick => None,
|
||||
}
|
||||
}
|
||||
|
||||
@ -921,18 +888,10 @@ impl Skill {
|
||||
Skill::Absorption|
|
||||
Skill::AbsorptionPlus |
|
||||
Skill::AbsorptionPlusPlus |
|
||||
Skill::ElectrocuteTick|
|
||||
Skill::ElectrocuteTickPlus |
|
||||
Skill::ElectrocuteTickPlusPlus |
|
||||
Skill::DecayTick|
|
||||
Skill::DecayTickPlus |
|
||||
Skill::DecayTickPlusPlus |
|
||||
Skill::SiphonTick|
|
||||
Skill::SiphonTickPlus |
|
||||
Skill::SiphonTickPlusPlus |
|
||||
Skill::TriageTick|
|
||||
Skill::TriageTickPlus |
|
||||
Skill::TriageTickPlusPlus => false,
|
||||
Skill::ElectrocuteTick |
|
||||
Skill::DecayTick |
|
||||
Skill::SiphonTick |
|
||||
Skill::TriageTick => false,
|
||||
_ => true,
|
||||
}
|
||||
}
|
||||
@ -940,18 +899,9 @@ impl Skill {
|
||||
pub fn ko_castable(&self) -> bool {
|
||||
match self {
|
||||
Skill::ElectrocuteTick |
|
||||
Skill::ElectrocuteTickPlus |
|
||||
Skill::ElectrocuteTickPlusPlus |
|
||||
Skill::DecayTick |
|
||||
Skill::DecayTickPlus |
|
||||
Skill::DecayTickPlusPlus |
|
||||
Skill::SiphonTick |
|
||||
Skill::SiphonTickPlus |
|
||||
Skill::SiphonTickPlusPlus |
|
||||
|
||||
Skill::TriageTick |
|
||||
Skill::TriageTickPlus |
|
||||
Skill::TriageTickPlusPlus => true,
|
||||
Skill::TriageTick => true,
|
||||
_ => false,
|
||||
}
|
||||
}
|
||||
@ -959,17 +909,9 @@ impl Skill {
|
||||
pub fn is_tick(&self) -> bool {
|
||||
match self {
|
||||
Skill::ElectrocuteTick |
|
||||
Skill::ElectrocuteTickPlus |
|
||||
Skill::ElectrocuteTickPlusPlus |
|
||||
Skill::DecayTick |
|
||||
Skill::DecayTickPlus |
|
||||
Skill::DecayTickPlusPlus |
|
||||
Skill::SiphonTick |
|
||||
Skill::SiphonTickPlus |
|
||||
Skill::SiphonTickPlusPlus |
|
||||
Skill::TriageTick |
|
||||
Skill::TriageTickPlus |
|
||||
Skill::TriageTickPlusPlus => true,
|
||||
Skill::TriageTick => true,
|
||||
|
||||
_ => false,
|
||||
}
|
||||
@ -977,21 +919,10 @@ impl Skill {
|
||||
|
||||
pub fn speed(&self) -> usize {
|
||||
match self {
|
||||
Skill::SiphonTick |
|
||||
Skill::SiphonTickPlus |
|
||||
Skill::SiphonTickPlusPlus => Skill::Siphon.speed(),
|
||||
|
||||
Skill::DecayTick |
|
||||
Skill::DecayTickPlus |
|
||||
Skill::DecayTickPlusPlus => Skill::Decay.speed(),
|
||||
|
||||
Skill::TriageTick |
|
||||
Skill::TriageTickPlus |
|
||||
Skill::TriageTickPlusPlus => Skill::Triage.speed(),
|
||||
|
||||
Skill::ElectrocuteTick |
|
||||
Skill::ElectrocuteTickPlus |
|
||||
Skill::ElectrocuteTickPlusPlus => Skill::Electrify.speed(),
|
||||
Skill::SiphonTick => Skill::Siphon.speed(),
|
||||
Skill::DecayTick => Skill::Decay.speed(),
|
||||
Skill::TriageTick => Skill::Triage.speed(),
|
||||
Skill::ElectrocuteTick => Skill::Electrify.speed(),
|
||||
|
||||
_ => Item::from(*self).speed(),
|
||||
}
|
||||
@ -1490,11 +1421,12 @@ fn counter_attack(cast: Cast, game: &mut Game) {
|
||||
}
|
||||
|
||||
fn decay(cast: Cast, game: &mut Game) {
|
||||
let amount = game.value(Value::Stat { construct: cast.source, stat: Stat::BluePower }).pct(cast.skill.multiplier());
|
||||
game.action(cast,
|
||||
Action::Damage {
|
||||
construct: cast.target,
|
||||
colour: Colour::Blue,
|
||||
amount: game.value(Value::Stat { construct: cast.source, stat: Stat::BluePower }).pct(cast.skill.multiplier()),
|
||||
amount,
|
||||
}
|
||||
);
|
||||
game.action(cast,
|
||||
@ -1507,7 +1439,7 @@ fn decay(cast: Cast, game: &mut Game) {
|
||||
Action::Effect {
|
||||
construct: cast.target,
|
||||
effect: ConstructEffect { effect: Effect::Decay, duration: 2, meta:
|
||||
Some(EffectMeta::CastTick { source: cast.source, target: cast.target, skill: Skill::DecayTick }) },
|
||||
Some(EffectMeta::CastTick { source: cast.source, target: cast.target, skill: Skill::DecayTick, speed: cast.speed, amount }) },
|
||||
}
|
||||
);
|
||||
game.action(cast,
|
||||
@ -1519,11 +1451,12 @@ fn decay(cast: Cast, game: &mut Game) {
|
||||
}
|
||||
|
||||
fn decay_plus(cast: Cast, game: &mut Game) {
|
||||
let amount = game.value(Value::Stat { construct: cast.source, stat: Stat::BluePower }).pct(cast.skill.multiplier());
|
||||
game.action(cast,
|
||||
Action::Damage {
|
||||
construct: cast.target,
|
||||
colour: Colour::Blue,
|
||||
amount: game.value(Value::Stat { construct: cast.source, stat: Stat::BluePower }).pct(cast.skill.multiplier()),
|
||||
amount,
|
||||
}
|
||||
);
|
||||
game.action(cast,
|
||||
@ -1536,7 +1469,7 @@ fn decay_plus(cast: Cast, game: &mut Game) {
|
||||
Action::Effect {
|
||||
construct: cast.target,
|
||||
effect: ConstructEffect { effect: Effect::Decay, duration: 4, meta:
|
||||
Some(EffectMeta::CastTick { source: cast.source, target: cast.target, skill: Skill::DecayTickPlus }) },
|
||||
Some(EffectMeta::CastTick { source: cast.source, target: cast.target, skill: Skill::DecayTick, speed: cast.speed, amount }) },
|
||||
}
|
||||
);
|
||||
game.action(cast,
|
||||
@ -1548,11 +1481,12 @@ fn decay_plus(cast: Cast, game: &mut Game) {
|
||||
}
|
||||
|
||||
fn decay_plus_plus(cast: Cast, game: &mut Game) {
|
||||
let amount = game.value(Value::Stat { construct: cast.source, stat: Stat::BluePower }).pct(cast.skill.multiplier());
|
||||
game.action(cast,
|
||||
Action::Damage {
|
||||
construct: cast.target,
|
||||
colour: Colour::Blue,
|
||||
amount: game.value(Value::Stat { construct: cast.source, stat: Stat::BluePower }).pct(cast.skill.multiplier()),
|
||||
amount,
|
||||
}
|
||||
);
|
||||
game.action(cast,
|
||||
@ -1565,7 +1499,7 @@ fn decay_plus_plus(cast: Cast, game: &mut Game) {
|
||||
Action::Effect {
|
||||
construct: cast.target,
|
||||
effect: ConstructEffect { effect: Effect::Decay, duration: 4, meta:
|
||||
Some(EffectMeta::CastTick { source: cast.source, target: cast.target, skill: Skill::DecayTickPlusPlus }) },
|
||||
Some(EffectMeta::CastTick { source: cast.source, target: cast.target, skill: Skill::DecayTick, speed: cast.speed, amount }) },
|
||||
}
|
||||
);
|
||||
game.action(cast,
|
||||
@ -1577,11 +1511,13 @@ fn decay_plus_plus(cast: Cast, game: &mut Game) {
|
||||
}
|
||||
|
||||
fn decay_tick(cast: Cast, game: &mut Game) {
|
||||
let amount = game.value(Value::TickDamage { construct: cast.target, effect: Effect::Decay });
|
||||
|
||||
game.action(cast,
|
||||
Action::Damage {
|
||||
construct: cast.target,
|
||||
colour: Colour::Blue,
|
||||
amount: game.value(Value::Stat { construct: cast.source, stat: Stat::BluePower }).pct(cast.skill.multiplier()),
|
||||
amount,
|
||||
}
|
||||
);
|
||||
game.action(cast,
|
||||
@ -1620,6 +1556,8 @@ fn electrify_plus_plus(cast: Cast, game: &mut Game) {
|
||||
}
|
||||
|
||||
fn electrocute(cast: Cast, game: &mut Game) {
|
||||
let amount = game.value(Value::Stat { construct: cast.source, stat: Stat::BluePower }).pct(cast.skill.multiplier());
|
||||
|
||||
game.action(cast,
|
||||
Action::Remove {
|
||||
construct: cast.source,
|
||||
@ -1630,11 +1568,13 @@ fn electrocute(cast: Cast, game: &mut Game) {
|
||||
Action::Effect {
|
||||
construct: cast.target,
|
||||
effect: ConstructEffect { effect: Effect::Electric, duration: 2, meta:
|
||||
Some(EffectMeta::CastTick { source: cast.source, target: cast.target, skill: Skill::ElectrocuteTick }) },
|
||||
Some(EffectMeta::CastTick { source: cast.source, target: cast.target, skill: Skill::ElectrocuteTick, speed: cast.speed, amount }) },
|
||||
},
|
||||
);
|
||||
}
|
||||
fn electrocute_plus(cast: Cast, game: &mut Game) {
|
||||
let amount = game.value(Value::Stat { construct: cast.source, stat: Stat::BluePower }).pct(cast.skill.multiplier());
|
||||
|
||||
game.action(cast,
|
||||
Action::Remove {
|
||||
construct: cast.source,
|
||||
@ -1645,12 +1585,14 @@ fn electrocute_plus(cast: Cast, game: &mut Game) {
|
||||
Action::Effect {
|
||||
construct: cast.target,
|
||||
effect: ConstructEffect { effect: Effect::Electric, duration: 3, meta:
|
||||
Some(EffectMeta::CastTick { source: cast.source, target: cast.target, skill: Skill::ElectrocuteTickPlus }) },
|
||||
Some(EffectMeta::CastTick { source: cast.source, target: cast.target, skill: Skill::ElectrocuteTick, speed: cast.speed, amount }) },
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
fn electrocute_plus_plus(cast: Cast, game: &mut Game) {
|
||||
let amount = game.value(Value::Stat { construct: cast.source, stat: Stat::BluePower }).pct(cast.skill.multiplier());
|
||||
|
||||
game.action(cast,
|
||||
Action::Remove {
|
||||
construct: cast.source,
|
||||
@ -1661,7 +1603,7 @@ fn electrocute_plus_plus(cast: Cast, game: &mut Game) {
|
||||
Action::Effect {
|
||||
construct: cast.target,
|
||||
effect: ConstructEffect { effect: Effect::Electric, duration: 4, meta:
|
||||
Some(EffectMeta::CastTick { source: cast.source, target: cast.target, skill: Skill::ElectrocuteTickPlusPlus }) },
|
||||
Some(EffectMeta::CastTick { source: cast.source, target: cast.target, skill: Skill::ElectrocuteTick, speed: cast.speed, amount }) },
|
||||
},
|
||||
);
|
||||
}
|
||||
@ -1671,7 +1613,7 @@ fn electrocute_tick(cast: Cast, game: &mut Game) {
|
||||
Action::Damage {
|
||||
construct: cast.target,
|
||||
colour: Colour::Blue,
|
||||
amount: game.value(Value::Stat { construct: cast.source, stat: Stat::BluePower }).pct(cast.skill.multiplier()),
|
||||
amount: game.value(Value::TickDamage { construct: cast.target, effect: Effect::Electrocute }),
|
||||
},
|
||||
);
|
||||
}
|
||||
@ -2002,20 +1944,23 @@ fn ruin(cast: Cast, game: &mut Game) {
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
fn siphon(cast: Cast, game: &mut Game) {
|
||||
let amount =
|
||||
game.value(Value::Stat { construct: cast.source, stat: Stat::BluePower }).pct(cast.skill.multiplier())
|
||||
+ game.value(Value::Stat { construct: cast.source, stat: Stat::GreenPower }).pct(cast.skill.multiplier());
|
||||
|
||||
game.action(cast,
|
||||
Action::Effect {
|
||||
construct: cast.target,
|
||||
effect: ConstructEffect { effect: Effect::Siphon, duration: 2, meta:
|
||||
Some(EffectMeta::CastTick { source: cast.source, target: cast.target, skill: Skill::SiphonTick }) },
|
||||
Some(EffectMeta::CastTick { source: cast.source, target: cast.target, skill: Skill::SiphonTick, speed: cast.speed, amount }) },
|
||||
}
|
||||
);
|
||||
game.action(cast,
|
||||
Action::Damage {
|
||||
construct: cast.target,
|
||||
colour: Colour::Blue,
|
||||
amount: game.value(Value::Stat { construct: cast.source, stat: Stat::BluePower }).pct(cast.skill.multiplier()),
|
||||
amount,
|
||||
}
|
||||
);
|
||||
game.action(cast,
|
||||
@ -2034,18 +1979,22 @@ fn siphon(cast: Cast, game: &mut Game) {
|
||||
}
|
||||
|
||||
fn siphon_plus(cast: Cast, game: &mut Game) {
|
||||
let amount =
|
||||
game.value(Value::Stat { construct: cast.source, stat: Stat::BluePower }).pct(cast.skill.multiplier())
|
||||
+ game.value(Value::Stat { construct: cast.source, stat: Stat::GreenPower }).pct(cast.skill.multiplier());
|
||||
|
||||
game.action(cast,
|
||||
Action::Effect {
|
||||
construct: cast.target,
|
||||
effect: ConstructEffect { effect: Effect::Siphon, duration: 3, meta:
|
||||
Some(EffectMeta::CastTick { source: cast.source, target: cast.target, skill: Skill::SiphonTickPlus }) },
|
||||
Some(EffectMeta::CastTick { source: cast.source, target: cast.target, skill: Skill::SiphonTick, speed: cast.speed, amount }) },
|
||||
}
|
||||
);
|
||||
game.action(cast,
|
||||
Action::Damage {
|
||||
construct: cast.target,
|
||||
colour: Colour::Blue,
|
||||
amount: game.value(Value::Stat { construct: cast.source, stat: Stat::BluePower }).pct(cast.skill.multiplier()),
|
||||
amount,
|
||||
}
|
||||
);
|
||||
game.action(cast,
|
||||
@ -2064,18 +2013,22 @@ fn siphon_plus(cast: Cast, game: &mut Game) {
|
||||
}
|
||||
|
||||
fn siphon_plus_plus(cast: Cast, game: &mut Game) {
|
||||
let amount =
|
||||
game.value(Value::Stat { construct: cast.source, stat: Stat::BluePower }).pct(cast.skill.multiplier())
|
||||
+ game.value(Value::Stat { construct: cast.source, stat: Stat::GreenPower }).pct(cast.skill.multiplier());
|
||||
|
||||
game.action(cast,
|
||||
Action::Effect {
|
||||
construct: cast.target,
|
||||
effect: ConstructEffect { effect: Effect::Siphon, duration: 4, meta:
|
||||
Some(EffectMeta::CastTick { source: cast.source, target: cast.target, skill: Skill::SiphonTickPlusPlus }) },
|
||||
Some(EffectMeta::CastTick { source: cast.source, target: cast.target, skill: Skill::SiphonTick, speed: cast.speed, amount }) },
|
||||
}
|
||||
);
|
||||
game.action(cast,
|
||||
Action::Damage {
|
||||
construct: cast.target,
|
||||
colour: Colour::Blue,
|
||||
amount: game.value(Value::Stat { construct: cast.source, stat: Stat::BluePower }).pct(cast.skill.multiplier()),
|
||||
amount,
|
||||
}
|
||||
);
|
||||
game.action(cast,
|
||||
@ -2098,7 +2051,7 @@ fn siphon_tick(cast: Cast, game: &mut Game) {
|
||||
Action::Damage {
|
||||
construct: cast.target,
|
||||
colour: Colour::Blue,
|
||||
amount: game.value(Value::Stat { construct: cast.source, stat: Stat::BluePower }).pct(cast.skill.multiplier()),
|
||||
amount: game.value(Value::TickDamage { construct: cast.target, effect: Effect::Siphon }),
|
||||
}
|
||||
);
|
||||
game.action(cast,
|
||||
@ -2228,18 +2181,20 @@ fn sustain(cast: Cast, game: &mut Game) {
|
||||
}
|
||||
|
||||
fn triage(cast: Cast, game: &mut Game) {
|
||||
let amount = game.value(Value::Stat { construct: cast.source, stat: Stat::GreenPower }).pct(cast.skill.multiplier());
|
||||
|
||||
game.action(cast,
|
||||
Action::Effect {
|
||||
construct: cast.target,
|
||||
effect: ConstructEffect { effect: Effect::Triage, duration: 2, meta:
|
||||
Some(EffectMeta::CastTick { source: cast.source, target: cast.target, skill: Skill::TriageTick }) },
|
||||
Some(EffectMeta::CastTick { source: cast.source, target: cast.target, skill: Skill::TriageTick, speed: cast.speed, amount }) },
|
||||
}
|
||||
);
|
||||
game.action(cast,
|
||||
Action::Heal {
|
||||
construct: cast.target,
|
||||
colour: Colour::Green,
|
||||
amount: game.value(Value::Stat { construct: cast.source, stat: Stat::GreenPower }).pct(cast.skill.multiplier()),
|
||||
amount,
|
||||
}
|
||||
);
|
||||
game.action(cast,
|
||||
@ -2251,18 +2206,20 @@ fn triage(cast: Cast, game: &mut Game) {
|
||||
}
|
||||
|
||||
fn triage_plus(cast: Cast, game: &mut Game) {
|
||||
let amount = game.value(Value::Stat { construct: cast.source, stat: Stat::GreenPower }).pct(cast.skill.multiplier());
|
||||
|
||||
game.action(cast,
|
||||
Action::Effect {
|
||||
construct: cast.target,
|
||||
effect: ConstructEffect { effect: Effect::Triage, duration: 3, meta:
|
||||
Some(EffectMeta::CastTick { source: cast.source, target: cast.target, skill: Skill::TriageTickPlus }) },
|
||||
Some(EffectMeta::CastTick { source: cast.source, target: cast.target, skill: Skill::TriageTick, speed: cast.speed, amount }) },
|
||||
}
|
||||
);
|
||||
game.action(cast,
|
||||
Action::Heal {
|
||||
construct: cast.target,
|
||||
colour: Colour::Green,
|
||||
amount: game.value(Value::Stat { construct: cast.source, stat: Stat::GreenPower }).pct(cast.skill.multiplier()),
|
||||
amount,
|
||||
}
|
||||
);
|
||||
game.action(cast,
|
||||
@ -2274,18 +2231,20 @@ fn triage_plus(cast: Cast, game: &mut Game) {
|
||||
}
|
||||
|
||||
fn triage_plus_plus(cast: Cast, game: &mut Game) {
|
||||
let amount = game.value(Value::Stat { construct: cast.source, stat: Stat::GreenPower }).pct(cast.skill.multiplier());
|
||||
|
||||
game.action(cast,
|
||||
Action::Effect {
|
||||
construct: cast.target,
|
||||
effect: ConstructEffect { effect: Effect::Triage, duration: 4, meta:
|
||||
Some(EffectMeta::CastTick { source: cast.source, target: cast.target, skill: Skill::TriageTickPlusPlus }) },
|
||||
Some(EffectMeta::CastTick { source: cast.source, target: cast.target, skill: Skill::TriageTick, speed: cast.speed, amount }) },
|
||||
}
|
||||
);
|
||||
game.action(cast,
|
||||
Action::Heal {
|
||||
construct: cast.target,
|
||||
colour: Colour::Green,
|
||||
amount: game.value(Value::Stat { construct: cast.source, stat: Stat::GreenPower }).pct(cast.skill.multiplier()),
|
||||
amount,
|
||||
}
|
||||
);
|
||||
game.action(cast,
|
||||
@ -2301,7 +2260,7 @@ fn triage_tick(cast: Cast, game: &mut Game) {
|
||||
Action::Heal {
|
||||
construct: cast.target,
|
||||
colour: Colour::Green,
|
||||
amount: game.value(Value::Stat { construct: cast.source, stat: Stat::GreenPower }).pct(cast.skill.multiplier()),
|
||||
amount: game.value(Value::TickDamage { construct: cast.target, effect: Effect::Electrocute }),
|
||||
}
|
||||
);
|
||||
game.action(cast,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user