bash boi
This commit is contained in:
parent
211c2396bd
commit
c920c920ed
@ -40,9 +40,7 @@ change strangle
|
|||||||
hatred maybe
|
hatred maybe
|
||||||
|
|
||||||
reconnect based on time delta
|
reconnect based on time delta
|
||||||
fix refresh button
|
|
||||||
|
|
||||||
locaalstorage team
|
|
||||||
remove rounds
|
remove rounds
|
||||||
consolidate game and instance
|
consolidate game and instance
|
||||||
|
|
||||||
|
|||||||
@ -1111,7 +1111,7 @@ mod tests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// apply buff
|
// apply buff
|
||||||
game.add_skill(x_player.id, x_construct.id, None, Skill::CorruptI).unwrap();
|
game.add_skill(x_player.id, x_construct.id, Some(x_construct.id), Skill::CorruptI).unwrap();
|
||||||
game.player_ready(x_player.id).unwrap();
|
game.player_ready(x_player.id).unwrap();
|
||||||
game.player_ready(y_player.id).unwrap();
|
game.player_ready(y_player.id).unwrap();
|
||||||
game = game.resolve_phase_start();
|
game = game.resolve_phase_start();
|
||||||
|
|||||||
@ -52,6 +52,9 @@ pub enum Item {
|
|||||||
BanishI,
|
BanishI,
|
||||||
BanishII,
|
BanishII,
|
||||||
BanishIII,
|
BanishIII,
|
||||||
|
BashI,
|
||||||
|
BashII,
|
||||||
|
BashIII,
|
||||||
BlastI,
|
BlastI,
|
||||||
BlastII,
|
BlastII,
|
||||||
BlastIII,
|
BlastIII,
|
||||||
@ -121,9 +124,6 @@ pub enum Item {
|
|||||||
SnareI,
|
SnareI,
|
||||||
SnareII,
|
SnareII,
|
||||||
SnareIII,
|
SnareIII,
|
||||||
StrangleI,
|
|
||||||
StrangleII,
|
|
||||||
StrangleIII,
|
|
||||||
StrikeI,
|
StrikeI,
|
||||||
StrikeII,
|
StrikeII,
|
||||||
StrikeIII,
|
StrikeIII,
|
||||||
@ -332,9 +332,9 @@ impl Item {
|
|||||||
Item::SnareI => Some(Skill::SnareI),
|
Item::SnareI => Some(Skill::SnareI),
|
||||||
Item::SnareII => Some(Skill::SnareII),
|
Item::SnareII => Some(Skill::SnareII),
|
||||||
Item::SnareIII => Some(Skill::SnareIII),
|
Item::SnareIII => Some(Skill::SnareIII),
|
||||||
Item::StrangleI => Some(Skill::StrangleI),
|
Item::BashI => Some(Skill::BashI),
|
||||||
Item::StrangleII => Some(Skill::StrangleII),
|
Item::BashII => Some(Skill::BashII),
|
||||||
Item::StrangleIII => Some(Skill::StrangleIII),
|
Item::BashIII => Some(Skill::BashIII),
|
||||||
Item::Stun => Some(Skill::Stun),
|
Item::Stun => Some(Skill::Stun),
|
||||||
Item::StrikeI => Some(Skill::StrikeI),
|
Item::StrikeI => Some(Skill::StrikeI),
|
||||||
Item::StrikeII => Some(Skill::StrikeII),
|
Item::StrikeII => Some(Skill::StrikeII),
|
||||||
@ -621,11 +621,11 @@ impl Item {
|
|||||||
self.into_skill().unwrap().multiplier(),
|
self.into_skill().unwrap().multiplier(),
|
||||||
"Deals 35% more Damage per red skill on target"),
|
"Deals 35% more Damage per red skill on target"),
|
||||||
|
|
||||||
Item::StrangleI |
|
Item::BashI |
|
||||||
Item::StrangleII |
|
Item::BashII |
|
||||||
Item::StrangleIII => format!(
|
Item::BashIII => format!(
|
||||||
"Strangle the target disabling skills from both the caster and the target.
|
"Bash the target increasing the cooldowns of their skills.
|
||||||
While strangling deal RedDamage each turn {:?}% RedPower. Lasts {:?}T.",
|
Deals {:?}% RedPower per cooldown increased. Lasts {:?}T.",
|
||||||
self.into_skill().unwrap().effect()[0].get_skill().unwrap().multiplier(),
|
self.into_skill().unwrap().effect()[0].get_skill().unwrap().multiplier(),
|
||||||
self.into_skill().unwrap().effect()[0].get_duration()),
|
self.into_skill().unwrap().effect()[0].get_duration()),
|
||||||
|
|
||||||
@ -726,9 +726,9 @@ impl Item {
|
|||||||
Item::RechargeII => vec![Item::RechargeI, Item::RechargeI, Item::RechargeI],
|
Item::RechargeII => vec![Item::RechargeI, Item::RechargeI, Item::RechargeI],
|
||||||
Item::RechargeIII => vec![Item::RechargeII, Item::RechargeII, Item::RechargeII],
|
Item::RechargeIII => vec![Item::RechargeII, Item::RechargeII, Item::RechargeII],
|
||||||
|
|
||||||
Item::StrangleI => vec![Item::Stun, Item::Red, Item::Red],
|
Item::BashI => vec![Item::Stun, Item::Red, Item::Red],
|
||||||
Item::StrangleII => vec![Item::StrangleI, Item::StrangleI, Item::StrangleI],
|
Item::BashII => vec![Item::BashI, Item::BashI, Item::BashI],
|
||||||
Item::StrangleIII => vec![Item::StrangleII, Item::StrangleII, Item::StrangleII],
|
Item::BashIII => vec![Item::BashII, Item::BashII, Item::BashII],
|
||||||
Item::SleepI => vec![Item::Stun, Item::Green, Item::Green],
|
Item::SleepI => vec![Item::Stun, Item::Green, Item::Green],
|
||||||
Item::SleepII => vec![Item::SleepI, Item::SleepI, Item::SleepI],
|
Item::SleepII => vec![Item::SleepI, Item::SleepI, Item::SleepI],
|
||||||
Item::SleepIII => vec![Item::SleepII, Item::SleepII, Item::SleepII],
|
Item::SleepIII => vec![Item::SleepII, Item::SleepII, Item::SleepII],
|
||||||
@ -875,9 +875,9 @@ impl From<Skill> for Item {
|
|||||||
Skill::SnareI => Item::SnareI,
|
Skill::SnareI => Item::SnareI,
|
||||||
Skill::SnareII => Item::SnareII,
|
Skill::SnareII => Item::SnareII,
|
||||||
Skill::SnareIII => Item::SnareIII,
|
Skill::SnareIII => Item::SnareIII,
|
||||||
Skill::StrangleI => Item::StrangleI,
|
Skill::BashI => Item::BashI,
|
||||||
Skill::StrangleII => Item::StrangleII,
|
Skill::BashII => Item::BashII,
|
||||||
Skill::StrangleIII => Item::StrangleIII,
|
Skill::BashIII => Item::BashIII,
|
||||||
Skill::StrikeI => Item::StrikeI,
|
Skill::StrikeI => Item::StrikeI,
|
||||||
Skill::StrikeII => Item::StrikeII,
|
Skill::StrikeII => Item::StrikeII,
|
||||||
Skill::StrikeIII => Item::StrikeIII,
|
Skill::StrikeIII => Item::StrikeIII,
|
||||||
@ -913,9 +913,6 @@ impl From<Skill> for Item {
|
|||||||
Skill::SiphonTickI => Item::SiphonI,
|
Skill::SiphonTickI => Item::SiphonI,
|
||||||
Skill::SiphonTickII => Item::SiphonII,
|
Skill::SiphonTickII => Item::SiphonII,
|
||||||
Skill::SiphonTickIII => Item::SiphonIII,
|
Skill::SiphonTickIII => Item::SiphonIII,
|
||||||
Skill::StrangleTickI => Item::StrangleI,
|
|
||||||
Skill::StrangleTickII => Item::StrangleII,
|
|
||||||
Skill::StrangleTickIII => Item::StrangleIII,
|
|
||||||
Skill::TriageTickI => Item::TriageI,
|
Skill::TriageTickI => Item::TriageI,
|
||||||
Skill::TriageTickII => Item::TriageII,
|
Skill::TriageTickII => Item::TriageII,
|
||||||
Skill::TriageTickIII => Item::TriageIII,
|
Skill::TriageTickIII => Item::TriageIII,
|
||||||
@ -1034,9 +1031,9 @@ pub fn get_combos() -> Vec<Combo> {
|
|||||||
Combo { components: Item::RechargeII.combo(), item: Item::RechargeII },
|
Combo { components: Item::RechargeII.combo(), item: Item::RechargeII },
|
||||||
Combo { components: Item::RechargeIII.combo(), item: Item::RechargeIII },
|
Combo { components: Item::RechargeIII.combo(), item: Item::RechargeIII },
|
||||||
|
|
||||||
Combo { components: Item::StrangleI.combo(), item: Item::StrangleI },
|
Combo { components: Item::BashI.combo(), item: Item::BashI },
|
||||||
Combo { components: Item::StrangleII.combo(), item: Item::StrangleII },
|
Combo { components: Item::BashII.combo(), item: Item::BashII },
|
||||||
Combo { components: Item::StrangleIII.combo(), item: Item::StrangleIII },
|
Combo { components: Item::BashIII.combo(), item: Item::BashIII },
|
||||||
Combo { components: Item::SleepI.combo(), item: Item::SleepI },
|
Combo { components: Item::SleepI.combo(), item: Item::SleepI },
|
||||||
Combo { components: Item::SleepII.combo(), item: Item::SleepII },
|
Combo { components: Item::SleepII.combo(), item: Item::SleepII },
|
||||||
Combo { components: Item::SleepIII.combo(), item: Item::SleepIII },
|
Combo { components: Item::SleepIII.combo(), item: Item::SleepIII },
|
||||||
|
|||||||
@ -119,7 +119,11 @@ pub fn resolve(skill: Skill, source: &mut Construct, target: &mut Construct, mut
|
|||||||
|
|
||||||
Skill::BanishI |
|
Skill::BanishI |
|
||||||
Skill::BanishII |
|
Skill::BanishII |
|
||||||
Skill::BanishIII => banish(source, target, resolutions, skill), // TODO prevent all actions
|
Skill::BanishIII => banish(source, target, resolutions, skill),
|
||||||
|
|
||||||
|
Skill::BashI |
|
||||||
|
Skill::BashII |
|
||||||
|
Skill::BashIII => bash(source, target, resolutions, skill),
|
||||||
|
|
||||||
Skill::BlastI |
|
Skill::BlastI |
|
||||||
Skill::BlastII |
|
Skill::BlastII |
|
||||||
@ -226,13 +230,6 @@ pub fn resolve(skill: Skill, source: &mut Construct, target: &mut Construct, mut
|
|||||||
Skill::SnareII |
|
Skill::SnareII |
|
||||||
Skill::SnareIII => snare(source, target, resolutions, skill),
|
Skill::SnareIII => snare(source, target, resolutions, skill),
|
||||||
|
|
||||||
Skill::StrangleI |
|
|
||||||
Skill::StrangleII |
|
|
||||||
Skill::StrangleIII => strangle(source, target, resolutions, skill),
|
|
||||||
Skill::StrangleTickI |
|
|
||||||
Skill::StrangleTickII |
|
|
||||||
Skill::StrangleTickIII => strangle_tick(source, target, resolutions, skill),
|
|
||||||
|
|
||||||
Skill::StrikeI |
|
Skill::StrikeI |
|
||||||
Skill::StrikeII |
|
Skill::StrikeII |
|
||||||
Skill::StrikeIII => strike(source, target, resolutions, skill),
|
Skill::StrikeIII => strike(source, target, resolutions, skill),
|
||||||
@ -275,7 +272,6 @@ pub fn resolve(skill: Skill, source: &mut Construct, target: &mut Construct, mut
|
|||||||
|
|
||||||
|
|
||||||
// Not used
|
// Not used
|
||||||
// Skill::Injure => injure(source, target, resolutions, skill),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return resolutions;
|
return resolutions;
|
||||||
@ -496,8 +492,6 @@ pub enum Effect {
|
|||||||
Reflect,
|
Reflect,
|
||||||
Slow,
|
Slow,
|
||||||
Snare,
|
Snare,
|
||||||
Strangle,
|
|
||||||
Strangling,
|
|
||||||
Stun,
|
Stun,
|
||||||
Taunt,
|
Taunt,
|
||||||
Vulnerable,
|
Vulnerable,
|
||||||
@ -523,7 +517,6 @@ pub enum Effect {
|
|||||||
Regen,
|
Regen,
|
||||||
Siphon,
|
Siphon,
|
||||||
|
|
||||||
Injured,
|
|
||||||
// Airborne,
|
// Airborne,
|
||||||
// Boost
|
// Boost
|
||||||
// Bleed,
|
// Bleed,
|
||||||
@ -561,14 +554,10 @@ impl Effect {
|
|||||||
Skill::RuinI,
|
Skill::RuinI,
|
||||||
Skill::RuinII,
|
Skill::RuinII,
|
||||||
Skill::RuinIII,
|
Skill::RuinIII,
|
||||||
Skill::StrangleI,
|
|
||||||
Skill::StrangleII,
|
|
||||||
Skill::StrangleIII,
|
|
||||||
Skill::SnareI,
|
Skill::SnareI,
|
||||||
Skill::SnareII,
|
Skill::SnareII,
|
||||||
Skill::SnareIII
|
Skill::SnareIII
|
||||||
].contains(&skill),
|
].contains(&skill),
|
||||||
Effect::Injured => skill.colours().contains(&Colour::Green),
|
|
||||||
_ => false,
|
_ => false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -582,13 +571,6 @@ impl Effect {
|
|||||||
Effect::Stun => true,
|
Effect::Stun => true,
|
||||||
Effect::Hex => true,
|
Effect::Hex => true,
|
||||||
Effect::Banish => true,
|
Effect::Banish => true,
|
||||||
Effect::Strangle => true,
|
|
||||||
Effect::Strangling => match skill {
|
|
||||||
Skill::StrangleTickI |
|
|
||||||
Skill::StrangleTickII |
|
|
||||||
Skill::StrangleTickIII => false,
|
|
||||||
_ => true,
|
|
||||||
},
|
|
||||||
Effect::Silence => skill.colours().contains(&Colour::Blue),
|
Effect::Silence => skill.colours().contains(&Colour::Blue),
|
||||||
Effect::Snare => skill.colours().contains(&Colour::Red),
|
Effect::Snare => skill.colours().contains(&Colour::Red),
|
||||||
Effect::Ko => skill.ko_castable(),
|
Effect::Ko => skill.ko_castable(),
|
||||||
@ -690,13 +672,6 @@ impl Effect {
|
|||||||
Effect::Regen => EffectCategory::Buff,
|
Effect::Regen => EffectCategory::Buff,
|
||||||
Effect::Siphon => EffectCategory::Debuff,
|
Effect::Siphon => EffectCategory::Debuff,
|
||||||
|
|
||||||
// can't be purged or purified
|
|
||||||
Effect::Strangle => EffectCategory::Constant,
|
|
||||||
Effect::Strangling => EffectCategory::Constant,
|
|
||||||
|
|
||||||
// not in game
|
|
||||||
Effect::Injured => EffectCategory::Debuff,
|
|
||||||
|
|
||||||
Effect::Ko => EffectCategory::Ko,
|
Effect::Ko => EffectCategory::Ko,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -729,6 +704,10 @@ pub enum Skill {
|
|||||||
BanishII,
|
BanishII,
|
||||||
BanishIII,
|
BanishIII,
|
||||||
|
|
||||||
|
BashI,
|
||||||
|
BashII,
|
||||||
|
BashIII,
|
||||||
|
|
||||||
BlastI,
|
BlastI,
|
||||||
BlastII,
|
BlastII,
|
||||||
BlastIII,
|
BlastIII,
|
||||||
@ -786,7 +765,6 @@ pub enum Skill {
|
|||||||
ImpurityI,
|
ImpurityI,
|
||||||
ImpurityII,
|
ImpurityII,
|
||||||
ImpurityIII,
|
ImpurityIII,
|
||||||
// Injure,
|
|
||||||
|
|
||||||
InvertI,
|
InvertI,
|
||||||
InvertII,
|
InvertII,
|
||||||
@ -846,13 +824,6 @@ pub enum Skill {
|
|||||||
SnareII,
|
SnareII,
|
||||||
SnareIII,
|
SnareIII,
|
||||||
|
|
||||||
StrangleI,
|
|
||||||
StrangleII,
|
|
||||||
StrangleIII,
|
|
||||||
StrangleTickI,
|
|
||||||
StrangleTickII,
|
|
||||||
StrangleTickIII,
|
|
||||||
|
|
||||||
StrikeI,
|
StrikeI,
|
||||||
StrikeII,
|
StrikeII,
|
||||||
StrikeIII,
|
StrikeIII,
|
||||||
@ -931,9 +902,10 @@ impl Skill {
|
|||||||
Skill::SleepI => 240, //Green dmg (heal)
|
Skill::SleepI => 240, //Green dmg (heal)
|
||||||
Skill::SleepII => 300,
|
Skill::SleepII => 300,
|
||||||
Skill::SleepIII => 400,
|
Skill::SleepIII => 400,
|
||||||
Skill::StrangleTickI => 65,
|
|
||||||
Skill::StrangleTickII => 95,
|
Skill::BashI => 65,
|
||||||
Skill::StrangleTickIII => 140,
|
Skill::BashII => 95,
|
||||||
|
Skill::BashIII => 140,
|
||||||
|
|
||||||
// Debuff Base
|
// Debuff Base
|
||||||
Skill::DecayTickI => 25,
|
Skill::DecayTickI => 25,
|
||||||
@ -1095,12 +1067,12 @@ impl Skill {
|
|||||||
Skill::SnareII => vec![ConstructEffect {effect: Effect::Snare, duration: 3, meta: None, tick: None}],
|
Skill::SnareII => vec![ConstructEffect {effect: Effect::Snare, duration: 3, meta: None, tick: None}],
|
||||||
Skill::SnareIII => vec![ConstructEffect {effect: Effect::Snare, duration: 4, meta: None, tick: None}],
|
Skill::SnareIII => vec![ConstructEffect {effect: Effect::Snare, duration: 4, meta: None, tick: None}],
|
||||||
|
|
||||||
Skill::StrangleI => vec![ConstructEffect {effect: Effect::Strangle, duration: 2,
|
Skill::BashI => vec![ConstructEffect {effect: Effect::Stun, duration: 2,
|
||||||
meta: Some(EffectMeta::Skill(Skill::StrangleTickI)), tick: None}],
|
meta: Some(EffectMeta::Skill(Skill::BashI)), tick: None}],
|
||||||
Skill::StrangleII => vec![ConstructEffect {effect: Effect::Strangle, duration: 2,
|
Skill::BashII => vec![ConstructEffect {effect: Effect::Stun, duration: 2,
|
||||||
meta: Some(EffectMeta::Skill(Skill::StrangleTickII)), tick: None}],
|
meta: Some(EffectMeta::Skill(Skill::BashII)), tick: None}],
|
||||||
Skill::StrangleIII => vec![ConstructEffect {effect: Effect::Strangle, duration: 2,
|
Skill::BashIII => vec![ConstructEffect {effect: Effect::Stun, duration: 2,
|
||||||
meta: Some(EffectMeta::Skill(Skill::StrangleTickIII)), tick: None}],
|
meta: Some(EffectMeta::Skill(Skill::BashIII)), tick: None}],
|
||||||
Skill::Stun => vec![ConstructEffect {effect: Effect::Stun, duration: 2, meta: None, tick: None}],
|
Skill::Stun => vec![ConstructEffect {effect: Effect::Stun, duration: 2, meta: None, tick: None}],
|
||||||
|
|
||||||
Skill::TauntI => vec![ConstructEffect {effect: Effect::Taunt, duration: 2, meta: None, tick: None}],
|
Skill::TauntI => vec![ConstructEffect {effect: Effect::Taunt, duration: 2, meta: None, tick: None}],
|
||||||
@ -1113,9 +1085,6 @@ impl Skill {
|
|||||||
meta: Some(EffectMeta::Skill(Skill::TriageTickII)), tick: None}],
|
meta: Some(EffectMeta::Skill(Skill::TriageTickII)), tick: None}],
|
||||||
Skill::TriageIII => vec![ConstructEffect {effect: Effect::Triage, duration: 4,
|
Skill::TriageIII => vec![ConstructEffect {effect: Effect::Triage, duration: 4,
|
||||||
meta: Some(EffectMeta::Skill(Skill::TriageTickIII)), tick: None}],
|
meta: Some(EffectMeta::Skill(Skill::TriageTickIII)), tick: None}],
|
||||||
//Unused
|
|
||||||
// Skill::Injure => vec![ConstructEffect {effect: Effect::Injured, duration: 2, meta: None, tick: None }],
|
|
||||||
|
|
||||||
_ => {
|
_ => {
|
||||||
panic!("{:?} no skill effect", self);
|
panic!("{:?} no skill effect", self);
|
||||||
},
|
},
|
||||||
@ -1141,6 +1110,10 @@ impl Skill {
|
|||||||
Skill::SnareIII => Some(2),
|
Skill::SnareIII => Some(2),
|
||||||
Skill::Stun => Some(2),
|
Skill::Stun => Some(2),
|
||||||
|
|
||||||
|
Skill::BashI => Some(2),
|
||||||
|
Skill::BashII => Some(2),
|
||||||
|
Skill::BashIII => Some(2),
|
||||||
|
|
||||||
Skill::HealI => None,
|
Skill::HealI => None,
|
||||||
Skill::HealII => None,
|
Skill::HealII => None,
|
||||||
Skill::HealIII => None,
|
Skill::HealIII => None,
|
||||||
@ -1230,9 +1203,9 @@ impl Skill {
|
|||||||
Skill::SleepII => Some(3),
|
Skill::SleepII => Some(3),
|
||||||
Skill::SleepIII => Some(3),
|
Skill::SleepIII => Some(3),
|
||||||
|
|
||||||
Skill::StrangleI => Some(2),
|
Skill::BashI => Some(2),
|
||||||
Skill::StrangleII => Some(2),
|
Skill::BashII => Some(2),
|
||||||
Skill::StrangleIII => Some(2),
|
Skill::BashIII => Some(2),
|
||||||
|
|
||||||
Skill::ClutchI => Some(1),
|
Skill::ClutchI => Some(1),
|
||||||
Skill::ClutchII => Some(2),
|
Skill::ClutchII => Some(2),
|
||||||
@ -1241,7 +1214,6 @@ impl Skill {
|
|||||||
Skill::TauntI => Some(2),
|
Skill::TauntI => Some(2),
|
||||||
Skill::TauntII => Some(2),
|
Skill::TauntII => Some(2),
|
||||||
Skill::TauntIII => Some(2),
|
Skill::TauntIII => Some(2),
|
||||||
// Skill::Injure => Some(2),
|
|
||||||
|
|
||||||
Skill::CorruptI =>Some(1),
|
Skill::CorruptI =>Some(1),
|
||||||
Skill::CorruptII =>Some(1),
|
Skill::CorruptII =>Some(1),
|
||||||
@ -1277,9 +1249,6 @@ impl Skill {
|
|||||||
Skill::SiphonTickI |
|
Skill::SiphonTickI |
|
||||||
Skill::SiphonTickII |
|
Skill::SiphonTickII |
|
||||||
Skill::SiphonTickIII |
|
Skill::SiphonTickIII |
|
||||||
Skill::StrangleTickI |
|
|
||||||
Skill::StrangleTickII |
|
|
||||||
Skill::StrangleTickIII |
|
|
||||||
Skill::TriageTickI |
|
Skill::TriageTickI |
|
||||||
Skill::TriageTickII |
|
Skill::TriageTickII |
|
||||||
Skill::TriageTickIII => None,
|
Skill::TriageTickIII => None,
|
||||||
@ -1316,9 +1285,6 @@ impl Skill {
|
|||||||
Skill::SiphonTickI |
|
Skill::SiphonTickI |
|
||||||
Skill::SiphonTickII |
|
Skill::SiphonTickII |
|
||||||
Skill::SiphonTickIII |
|
Skill::SiphonTickIII |
|
||||||
Skill::StrangleTickI |
|
|
||||||
Skill::StrangleTickII |
|
|
||||||
Skill::StrangleTickIII |
|
|
||||||
|
|
||||||
Skill::TriageTickI |
|
Skill::TriageTickI |
|
||||||
Skill::TriageTickII |
|
Skill::TriageTickII |
|
||||||
@ -1337,6 +1303,7 @@ impl Skill {
|
|||||||
Skill::SiphonTickI |
|
Skill::SiphonTickI |
|
||||||
Skill::SiphonTickII |
|
Skill::SiphonTickII |
|
||||||
Skill::SiphonTickIII => Skill::SiphonI.speed(),
|
Skill::SiphonTickIII => Skill::SiphonI.speed(),
|
||||||
|
|
||||||
Skill::DecayTickI |
|
Skill::DecayTickI |
|
||||||
Skill::DecayTickII |
|
Skill::DecayTickII |
|
||||||
Skill::DecayTickIII => Skill::DecayI.speed(),
|
Skill::DecayTickIII => Skill::DecayI.speed(),
|
||||||
@ -1345,9 +1312,6 @@ impl Skill {
|
|||||||
Skill::TriageTickII |
|
Skill::TriageTickII |
|
||||||
Skill::TriageTickIII => Skill::TriageI.speed(),
|
Skill::TriageTickIII => Skill::TriageI.speed(),
|
||||||
|
|
||||||
Skill::StrangleTickI |
|
|
||||||
Skill::StrangleTickII |
|
|
||||||
Skill::StrangleTickIII => Skill::StrangleI.speed(),
|
|
||||||
Skill::CorruptionTickI |
|
Skill::CorruptionTickI |
|
||||||
Skill::CorruptionTickII |
|
Skill::CorruptionTickII |
|
||||||
Skill::CorruptionTickIII => Skill::CorruptI.speed(),
|
Skill::CorruptionTickIII => Skill::CorruptI.speed(),
|
||||||
@ -1368,9 +1332,6 @@ impl Skill {
|
|||||||
pub fn self_targeting(&self) -> bool {
|
pub fn self_targeting(&self) -> bool {
|
||||||
match self {
|
match self {
|
||||||
Skill::Block |
|
Skill::Block |
|
||||||
Skill::CorruptI |
|
|
||||||
Skill::CorruptII |
|
|
||||||
Skill::CorruptIII |
|
|
||||||
Skill::ClutchI |
|
Skill::ClutchI |
|
||||||
Skill::ClutchII |
|
Skill::ClutchII |
|
||||||
Skill::ClutchIII |
|
Skill::ClutchIII |
|
||||||
@ -1480,18 +1441,6 @@ fn strike(source: &mut Construct, target: &mut Construct, mut results: Resolutio
|
|||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*fn injure(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
|
|
||||||
let amount = source.red_power().pct(skill.multiplier());
|
|
||||||
target.deal_red_damage(skill, amount)
|
|
||||||
.into_iter()
|
|
||||||
.for_each(|e| results.push(Resolution::new(source, target).event(e)));
|
|
||||||
|
|
||||||
skill.effect().into_iter()
|
|
||||||
.for_each(|e| (results.push(Resolution::new(source, target).event(target.add_effect(skill, e)))));
|
|
||||||
|
|
||||||
return results;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
fn stun(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
|
fn stun(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
|
||||||
skill.effect().into_iter()
|
skill.effect().into_iter()
|
||||||
.for_each(|e| (results.push(Resolution::new(source, target).event(target.add_effect(skill, e)))));
|
.for_each(|e| (results.push(Resolution::new(source, target).event(target.add_effect(skill, e)))));
|
||||||
@ -1499,6 +1448,37 @@ fn stun(source: &mut Construct, target: &mut Construct, mut results: Resolutions
|
|||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn bash(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
|
||||||
|
skill.effect().into_iter()
|
||||||
|
.for_each(|e| (results.push(Resolution::new(source, target).event(target.add_effect(skill, e)))));
|
||||||
|
|
||||||
|
if results.iter().any(|r| match r.event {
|
||||||
|
Event::Effect { effect, skill: effect_skill, duration: _, construct_effects: _ }
|
||||||
|
=> effect == Effect::Stun && skill == effect_skill,
|
||||||
|
_ => false,
|
||||||
|
}) {
|
||||||
|
let mut cds = 0;
|
||||||
|
for cs in target.skills.iter_mut() {
|
||||||
|
if cs.skill.base_cd().is_some() {
|
||||||
|
cs.cd = match cs.cd {
|
||||||
|
None => Some(1),
|
||||||
|
Some(i) => Some(i + 1),
|
||||||
|
};
|
||||||
|
|
||||||
|
cds += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let amount = source.red_power().pct(skill.multiplier().saturating_mul(cds));
|
||||||
|
target.deal_red_damage(skill, amount)
|
||||||
|
.into_iter()
|
||||||
|
.for_each(|e| results.push(Resolution::new(source, target).event(e).stages(LogStages::PostOnly)));
|
||||||
|
}
|
||||||
|
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
fn sleep(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
|
fn sleep(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
|
||||||
skill.effect().into_iter()
|
skill.effect().into_iter()
|
||||||
.for_each(|e| (results.push(Resolution::new(source, target).event(target.add_effect(skill, e)))));
|
.for_each(|e| (results.push(Resolution::new(source, target).event(target.add_effect(skill, e)))));
|
||||||
@ -1535,46 +1515,6 @@ fn throw(source: &mut Construct, target: &mut Construct, mut results: Resolution
|
|||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn strangle(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
|
|
||||||
let ConstructEffect { effect, duration, meta, tick: _ } = skill.effect()[0];
|
|
||||||
let tick_skill = match meta {
|
|
||||||
Some(EffectMeta::Skill(s)) => s,
|
|
||||||
_ => panic!("no strangle tick skill"),
|
|
||||||
};
|
|
||||||
let strangle = ConstructEffect::new(effect, duration).set_tick(Cast::new_tick(source, target, tick_skill));
|
|
||||||
results.push(Resolution::new(source, target).event(target.add_effect(skill, strangle)));
|
|
||||||
|
|
||||||
let attacker_strangle = ConstructEffect::new(Effect::Strangling, duration);
|
|
||||||
results.push(Resolution::new(source, source).event(source.add_effect(skill, attacker_strangle)).stages(LogStages::PostOnly));
|
|
||||||
return strangle_tick(source, target, results, tick_skill);
|
|
||||||
}
|
|
||||||
|
|
||||||
fn strangle_tick(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
|
|
||||||
let amount = source.red_power().pct(skill.multiplier());
|
|
||||||
target.deal_red_damage(skill, amount)
|
|
||||||
.into_iter()
|
|
||||||
.for_each(|e| results.push(Resolution::new(source, target).event(e).stages(LogStages::EndPost)));
|
|
||||||
|
|
||||||
// remove immunity if target ko
|
|
||||||
if target.is_ko() && !source.is_ko() {
|
|
||||||
if let Some(i) = source.effects
|
|
||||||
.iter()
|
|
||||||
.position(|e| e.effect == Effect::Strangling) {
|
|
||||||
source.effects.remove(i);
|
|
||||||
results.push(Resolution::new(source, source)
|
|
||||||
.event(Event::Removal { effect: Effect::Strangling, construct_effects: target.effects.clone() })
|
|
||||||
.stages(LogStages::PostOnly));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
error!("{:?}", results);
|
|
||||||
println!("{:?}", results);
|
|
||||||
panic!("no strangling on source");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return results;
|
|
||||||
}
|
|
||||||
|
|
||||||
fn block(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
|
fn block(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
|
||||||
results.push(Resolution::new(source, target)
|
results.push(Resolution::new(source, target)
|
||||||
.event(target.add_effect(skill, skill.effect()[0]))
|
.event(target.add_effect(skill, skill.effect()[0]))
|
||||||
@ -2044,19 +1984,6 @@ mod tests {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/* #[test]
|
|
||||||
fn injure_test() {
|
|
||||||
let mut x = Construct::new()
|
|
||||||
.named(&"muji".to_string());
|
|
||||||
|
|
||||||
let mut y = Construct::new()
|
|
||||||
.named(&"camel".to_string());
|
|
||||||
|
|
||||||
resolve(Skill::Injure, &mut x, &mut y, vec![]);
|
|
||||||
assert!(y.immune(Skill::HealI).is_some());
|
|
||||||
// resolutions = heal(&mut y.clone(), &mut y, resolutions);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
#[test]
|
#[test]
|
||||||
fn invert_test() {
|
fn invert_test() {
|
||||||
let mut x = Construct::new()
|
let mut x = Construct::new()
|
||||||
@ -2247,22 +2174,19 @@ mod tests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn strangle_test() {
|
fn bash_test() {
|
||||||
let mut x = Construct::new()
|
let mut x = Construct::new()
|
||||||
.named(&"muji".to_string());
|
.named(&"muji".to_string());
|
||||||
|
|
||||||
let mut y = Construct::new()
|
let mut y = Construct::new()
|
||||||
.named(&"pretaliation".to_string());
|
.named(&"pretaliation".to_string())
|
||||||
|
.learn(Skill::Stun);
|
||||||
|
|
||||||
strangle(&mut x, &mut y, vec![], Skill::StrangleI);
|
let stun_cd = y.skills.iter().find(|cs| cs.skill == Skill::Stun).unwrap().cd.unwrap();
|
||||||
assert!(y.effects.iter().any(|e| e.effect == Effect::Strangle));
|
|
||||||
assert!(x.effects.iter().any(|e| e.effect == Effect::Strangling));
|
|
||||||
|
|
||||||
// ensure can't be removed
|
bash(&mut x, &mut y, vec![], Skill::BashI);
|
||||||
purify(&mut x, &mut y, vec![], Skill::PurifyI);
|
assert!(!x.effects.iter().any(|e| e.effect == Effect::Stun));
|
||||||
assert!(y.effects.iter().any(|e| e.effect == Effect::Strangle));
|
assert!(y.skills.iter().any(|cs| cs.skill == Skill::Stun && cs.cd.unwrap() == stun_cd + 1));
|
||||||
purge(&mut x.clone(), &mut x, vec![], Skill::PurgeI);
|
|
||||||
assert!(x.effects.iter().any(|e| e.effect == Effect::Strangling));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user