diff --git a/core/src/construct.rs b/core/src/construct.rs index e7fcf993..2c45b7be 100644 --- a/core/src/construct.rs +++ b/core/src/construct.rs @@ -52,7 +52,7 @@ impl ConstructSkill { pub fn new(skill: Skill) -> ConstructSkill { ConstructSkill { skill, - cd: skill.base_cd(), + cd: skill.delay(), disabled: false, } } @@ -443,12 +443,12 @@ impl Construct { self.skills .iter_mut() - .for_each(|s| match s.skill.base_cd() { + .for_each(|s| match s.skill.delay() { Some(cd) => match cd.saturating_sub(delay_reduction) { 0 => s.set_cooldown(None), _ => s.set_cooldown(Some(cd.saturating_sub(delay_reduction))) }, - None => () + None => s.set_cooldown(None) }); } @@ -1241,7 +1241,7 @@ mod tests { i += 1; } - assert_eq!(i, Skill::Sleep.base_cd().unwrap()); + assert_eq!(i, Skill::Sleep.delay().unwrap()); } } diff --git a/core/src/game.rs b/core/src/game.rs index f7c0f8b1..42e14f8b 100644 --- a/core/src/game.rs +++ b/core/src/game.rs @@ -1285,7 +1285,7 @@ mod tests { // should auto progress back to skill phase assert!(game.phase == Phase::Skill); - assert!(game.player_by_id(y_player.id).unwrap().constructs[0].skill_on_cd(Skill::Stun).is_some()); + assert!(game.player_by_id(y_player.id).unwrap().constructs[0].skill_on_cd(Skill::Stun).is_none()); assert!(game.player_by_id(x_player.id).unwrap().constructs[0].skill_on_cd(Skill::Block).is_none()); game.add_skill(x_player.id, x_construct.id, y_construct.id, Skill::Attack).unwrap(); diff --git a/core/src/skill.rs b/core/src/skill.rs index 653719f2..257e2412 100644 --- a/core/src/skill.rs +++ b/core/src/skill.rs @@ -522,6 +522,155 @@ impl Skill { Skill::SustainPlus | Skill::SustainPlusPlus => Some(1), + + + Skill::Electrify | + Skill::ElectrifyPlus | + Skill::ElectrifyPlusPlus => None, + + Skill::Absorb | + Skill::AbsorbPlus | + Skill::AbsorbPlusPlus => Some(1), + + //----------- + // Never cast directly + //--------- + // Trigger + Skill::HybridBlast | + Skill::HasteStrike | + Skill::CounterAttack| + Skill::CounterAttackPlus | + Skill::CounterAttackPlusPlus | // counter + Skill::Electrocute| + Skill::ElectrocutePlus | + Skill::ElectrocutePlusPlus | + Skill::Absorption| + Skill::AbsorptionPlus | + Skill::AbsorptionPlusPlus | + // Ticks + Skill::ElectrocuteTick| + Skill::DecayTick| + Skill::SiphonTick| + Skill::TriageTick => None, + } + } + + pub fn delay(&self) -> Cooldown { + match self { + Skill::Attack => None, + Skill::Block => None, // reduce damage + Skill::Buff => None, + Skill::Debuff => None, + Skill::Stun => Some(1), + + Skill::Strike=> None, + Skill::StrikePlus => None, + Skill::StrikePlusPlus => None, + + Skill::Counter| + Skill::CounterPlus | + Skill::CounterPlusPlus => None, // avoid all damage + + Skill::Restrict | + Skill::RestrictPlus | + Skill::RestrictPlusPlus => Some(1), + + Skill::Bash | + Skill::BashPlus | + Skill::BashPlusPlus => Some(1), + + Skill::Heal=> None, + Skill::HealPlus => None, + Skill::HealPlusPlus => None, + + Skill::Triage=> None, // hot + Skill::TriagePlus => None, // hot + Skill::TriagePlusPlus => None, // hot + + Skill::Break | // no damage stun, adds vulnerable + Skill::BreakPlus | + Skill::BreakPlusPlus => Some(1), + + Skill::Blast | + Skill::BlastPlus | + Skill::BlastPlusPlus => None, + + Skill::Chaos | + Skill::ChaosPlus | + Skill::ChaosPlusPlus => None, + + Skill::Amplify | + Skill::AmplifyPlus | + Skill::AmplifyPlusPlus => Some(1), + + Skill::Hybrid | + Skill::HybridPlus | + Skill::HybridPlusPlus => Some(1), + + Skill::Invert | + Skill::InvertPlus | + Skill::InvertPlusPlus => Some(2), + + Skill::Decay => None, // dot + Skill::DecayPlus => None, + Skill::DecayPlusPlus => None, + + Skill::Siphon| + Skill::SiphonPlus | + Skill::SiphonPlusPlus => None, + + Skill::Curse | + Skill::CursePlus | + Skill::CursePlusPlus => Some(1), + + Skill::Link | + Skill::LinkPlus | + Skill::LinkPlusPlus => Some(1), + + Skill::Silence | + Skill::SilencePlus | + Skill::SilencePlusPlus => Some(1), + + Skill::Purify | + Skill::PurifyPlus | + Skill::PurifyPlusPlus => None, + + Skill::Purge | + Skill::PurgePlus | + Skill::PurgePlusPlus => Some(1), + + Skill::Banish | + Skill::BanishPlus | + Skill::BanishPlusPlus => Some(1), + + Skill::Haste | + Skill::HastePlus | + Skill::HastePlusPlus => Some(1), + + Skill::Reflect | + Skill::ReflectPlus | + Skill::ReflectPlusPlus => None, + + Skill::Recharge | + Skill::RechargePlus | + Skill::RechargePlusPlus => None, + + Skill::Ruin | + Skill::RuinPlus | + Skill::RuinPlusPlus => Some(2), + + Skill::Slay=> None, + Skill::SlayPlus => None, + Skill::SlayPlusPlus => None, + + Skill::Sleep | + Skill::SleepPlus | + Skill::SleepPlusPlus => Some(1), + + Skill::Sustain | + Skill::SustainPlus | + Skill::SustainPlusPlus => Some(1), + Skill::Intercept => Some(1), Skill::InterceptPlus => Some(1), Skill::InterceptPlusPlus => Some(1),