Merge branch 'master' of ssh://mnml.gg:40022/~/mnml

This commit is contained in:
ntr 2019-05-30 20:10:43 +10:00
commit d6432965b3
3 changed files with 74 additions and 83 deletions

View File

@ -72,7 +72,7 @@ pub enum EffectMeta {
Multiplier(u64),
}
#[derive(Debug,Clone,PartialEq,Serialize,Deserialize)]
#[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)]
pub struct ConstructEffect {
pub effect: Effect,
pub duration: u8,
@ -104,6 +104,13 @@ impl ConstructEffect {
Some(EffectMeta::Multiplier(s)) => s,
_ => 0
}
}
pub fn get_skill(&self) -> Option<Skill> {
match self.meta {
Some(EffectMeta::Skill(s)) => Some(s),
_ => None,
}
}
}

View File

@ -408,15 +408,15 @@ impl Item {
Item::Attack => format!("Deal RedDamage based on {:?}% RedPower",
self.into_skill().unwrap().multiplier()),
Item::Block => format!("Reduce incoming RedDamage by {:?}%",
100 - self.into_skill().unwrap().effect().first().unwrap().get_multiplier()),
100 - self.into_skill().unwrap().effect()[0].get_multiplier()),
Item::Stun => format!("Stun target construct for {:?}T",
self.into_skill().unwrap().effect().first().unwrap().get_duration()),
self.into_skill().unwrap().effect()[0].get_duration()),
Item::Buff => format!("Increase target construct RedPower and speed by {:?}%",
self.into_skill().unwrap().effect().first().unwrap().get_multiplier() - 100),
self.into_skill().unwrap().effect()[0].get_multiplier() - 100),
Item::Debuff => format!("Slow target construct speed by {:?}%",
100 - self.into_skill().unwrap().effect().first().unwrap().get_multiplier()),
100 - self.into_skill().unwrap().effect()[0].get_multiplier()),
// specs
// Base
Item::Power => format!("Base ITEM for increased Power. Power determines the damage caused by your SKILLS."),
@ -457,14 +457,14 @@ impl Item {
Item::AmplifyI |
Item::AmplifyII |
Item::AmplifyIII => format!("Increase red and blue power by {:?}%. Lasts {:?}T",
self.into_skill().unwrap().effect().first().unwrap().get_multiplier() - 100,
self.into_skill().unwrap().effect().first().unwrap().get_duration()),
self.into_skill().unwrap().effect()[0].get_multiplier() - 100,
self.into_skill().unwrap().effect()[0].get_duration()),
Item::BanishI |
Item::BanishII |
Item::BanishIII => format!("Banish target for {:?}T.
Banished constructs are immune to all skills and effects.",
self.into_skill().unwrap().effect().first().unwrap().get_duration()),
self.into_skill().unwrap().effect()[0].get_duration()),
Item::BlastI |
Item::BlastII |
@ -478,48 +478,51 @@ impl Item {
Item::ClutchI |
Item::ClutchII |
Item::ClutchIII => format!("Construct cannot be KO'd while active. Additionally provides immunity to disables."),
Item::ClutchIII => format!("Construct cannot be KO'd while active. Additionally provides immunity to disables. \
Lasts {:?}T",
self.into_skill().unwrap().effect()[0].get_duration()),
Item::CorruptI |
Item::CorruptII |
Item::CorruptIII => format!(
"Self targetting defensive for {:?}T. Applies corrupt to attackers dealing BlueDamage {:?}% \
"Self targetting defensive for {:?}T. Applies Corruption to attackers dealing BlueDamage {:?}% \
BluePower per turn for {:?}T.",
self.into_skill().unwrap().effect().first().unwrap().get_duration(),
Skill::CorruptI.multiplier(), // TO BE FIXT
self.into_skill().unwrap().effect().last().unwrap().get_duration()),
self.into_skill().unwrap().effect()[0].get_duration(),
self.into_skill().unwrap().effect()[0].get_skill().unwrap().effect()[0].get_skill().unwrap().multiplier(),
self.into_skill().unwrap().effect()[0].get_skill().unwrap().effect()[0].get_duration()),
Item::CurseI |
Item::CurseII |
Item::CurseIII => format!(
"Increases red and blue damage taken by {:?}%. Lasts {:?}T",
self.into_skill().unwrap().effect().first().unwrap().get_multiplier() - 100,
self.into_skill().unwrap().effect().first().unwrap().get_duration()),
self.into_skill().unwrap().effect()[0].get_multiplier() - 100,
self.into_skill().unwrap().effect()[0].get_duration()),
Item::DecayI |
Item::DecayII |
Item::DecayIII => format!(
"Reduces healing taken by {:?}% and deals blue damage {:?}% blue power each turn. Lasts {:?}T",
100 - self.into_skill().unwrap().effect().first().unwrap().get_multiplier(),
self.into_skill().unwrap().multiplier(),
self.into_skill().unwrap().effect().first().unwrap().get_duration()),
"Reduces healing taken by {:?}% for {:?}T. Deals blue damage {:?}% blue power each turn for {:?}T",
100 - self.into_skill().unwrap().effect()[0].get_multiplier(),
self.into_skill().unwrap().effect()[0].get_duration(),
self.into_skill().unwrap().effect()[1].get_skill().unwrap().multiplier(),
self.into_skill().unwrap().effect()[1].get_duration()),
Item::HostilityI |
Item::HostilityII |
Item::HostilityIII => format!(
"Gain Hostility for {:?}T. {} Hatred lasts {:?}T",
self.into_skill().unwrap().effect().first().unwrap().get_duration(),
self.into_skill().unwrap().effect()[0].get_duration(),
"When attacked by Hostility you gain Hatred which increased red and blue power based on Damage taken.",
self.into_skill().unwrap().effect().last().unwrap().get_duration()),
self.into_skill().unwrap().effect()[0].get_skill().unwrap().effect()[0].get_duration()),
Item::HasteI |
Item::HasteII |
Item::HasteIII => format!(
"Haste increases Speed by {:?}%, Red based Attack skills will strike again dealing {:?}{}. Lasts {:?}T",
self.into_skill().unwrap().effect().first().unwrap().get_multiplier() - 100,
self.into_skill().unwrap().effect()[0].get_multiplier() - 100,
Skill::HasteStrike.multiplier(),
"% Speed as RedDamage",
self.into_skill().unwrap().effect().first().unwrap().get_duration()),
self.into_skill().unwrap().effect()[0].get_duration()),
Item::HealI |
Item::HealII |
@ -529,16 +532,16 @@ impl Item {
Item::HexII |
Item::HexIII => format!("Blue based skill that applies Hex for {:?}T. \
Hexed targets cannot cast any skills.",
self.into_skill().unwrap().effect().first().unwrap().get_duration()),
self.into_skill().unwrap().effect()[0].get_duration()),
Item::ImpurityI |
Item::ImpurityII |
Item::ImpurityIII => format!(
"Impurity increases Green Power by {:?}%, Blue based Attack skills will blast again dealing {:?}{}. Lasts {:?}T",
self.into_skill().unwrap().effect().first().unwrap().get_multiplier() - 100,
self.into_skill().unwrap().effect()[0].get_multiplier() - 100,
Skill::ImpureBlast.multiplier(),
"% GreenPower as BluePower",
self.into_skill().unwrap().effect().first().unwrap().get_duration()),
self.into_skill().unwrap().effect()[0].get_duration()),
Item::InvertI |
Item::InvertII |
@ -551,9 +554,9 @@ impl Item {
Item::ParryIII => format!("{} {:?}% red power and blocks red skills for {:?}T. {} {:?}% red power.",
"Self targetting skill. Recharges RedLife for",
self.into_skill().unwrap().multiplier(),
self.into_skill().unwrap().effect().first().unwrap().get_duration(),
self.into_skill().unwrap().effect()[0].get_duration(),
"If a red skill is parried the construct will riposte the source dealing red damage",
Skill::RiposteI.multiplier()),
self.into_skill().unwrap().effect()[0].get_skill().unwrap().multiplier()),
Item::PurgeI |
Item::PurgeII |
@ -569,7 +572,7 @@ impl Item {
Item::ReflectII |
Item::ReflectIII => format!(
"Reflect incoming skills to source. Lasts {:?}T",
self.into_skill().unwrap().effect().first().unwrap().get_duration()),
self.into_skill().unwrap().effect()[0].get_duration()),
Item::RechargeI |
Item::RechargeII |
@ -581,7 +584,7 @@ impl Item {
Item::RuinII |
Item::RuinIII => format!(
"Team wide Stun for {:?}T. Stunned constructs are unable to cast skills.",
self.into_skill().unwrap().effect().first().unwrap().get_duration()),
self.into_skill().unwrap().effect()[0].get_duration()),
Item::ScatterI |
Item::ScatterII |
@ -593,7 +596,7 @@ impl Item {
Item::SilenceII |
Item::SilenceIII => format!(
"Block the target from using blue skills for {:?}T and deals blue damage {:?}% blue power. {}",
self.into_skill().unwrap().effect().first().unwrap().get_duration(),
self.into_skill().unwrap().effect()[0].get_duration(),
self.into_skill().unwrap().multiplier(),
"Deals 45% more Damage per blue skill on target"),
@ -607,14 +610,14 @@ impl Item {
Item::SleepII |
Item::SleepIII => format!(
"Stun for {:?}T and heal for {:?}% GreenPower.",
self.into_skill().unwrap().effect().first().unwrap().get_duration(),
self.into_skill().unwrap().effect()[0].get_duration(),
self.into_skill().unwrap().multiplier()),
Item::SnareI |
Item::SnareII |
Item::SnareIII => format!(
"Block the target from using red skills for {:?}T and deals RedDamage {:?}% RedPower. {}",
self.into_skill().unwrap().effect().first().unwrap().get_duration(),
self.into_skill().unwrap().effect()[0].get_duration(),
self.into_skill().unwrap().multiplier(),
"Deals 35% more Damage per red skill on target"),
@ -623,8 +626,8 @@ impl Item {
Item::StrangleIII => format!(
"Strangle the target disabling skills from both the caster and the target.
While strangling deal RedDamage each turn {:?}% RedPower. Lasts {:?}T.",
self.into_skill().unwrap().multiplier(),
self.into_skill().unwrap().effect().first().unwrap().get_duration()),
self.into_skill().unwrap().effect()[0].get_skill().unwrap().multiplier(),
self.into_skill().unwrap().effect()[0].get_duration()),
Item::StrikeI |
Item::StrikeII |
@ -636,33 +639,30 @@ impl Item {
Item::SiphonII |
Item::SiphonIII => format!(
"Deals BlueDamage {:?}% BluePower each turn and heals caster based on Damage dealt. Lasts {:?}T",
self.into_skill().unwrap().multiplier(),
self.into_skill().unwrap().effect().first().unwrap().get_duration()),
self.into_skill().unwrap().effect()[0].get_skill().unwrap().multiplier(),
self.into_skill().unwrap().effect()[0].get_duration()),
Item::TauntI |
Item::TauntII |
Item::TauntIII => format!("Taunt redirects skills against the team to target, lasts {:?}T.\
Recharges RedLife for {:?} RedPower.",
self.into_skill().unwrap().effect().first().unwrap().get_duration(),
self.into_skill().unwrap().effect()[0].get_duration(),
self.into_skill().unwrap().multiplier()),
Item::ThrowI |
Item::ThrowII |
Item::ThrowIII => format!(
"Stun the target for {:?}T and applies Vulnerable increasing RedDamage taken by {:?}% for {:?}T",
self.into_skill().unwrap().effect().first().unwrap().get_duration(),
self.into_skill().unwrap().effect().last().unwrap().get_multiplier() - 100,
self.into_skill().unwrap().effect().last().unwrap().get_duration()),
self.into_skill().unwrap().effect()[0].get_duration(),
self.into_skill().unwrap().effect()[1].get_multiplier() - 100,
self.into_skill().unwrap().effect()[1].get_duration()),
Item::TriageI |
Item::TriageII |
Item::TriageIII => format!(
"Heals target for {:?}% GreenPower each turn. Lasts {:?}T",
self.into_skill().unwrap().multiplier(),
self.into_skill().unwrap().effect().first().unwrap().get_duration()),
_ => format!("..."),
self.into_skill().unwrap().effect()[0].get_skill().unwrap().multiplier(),
self.into_skill().unwrap().effect()[0].get_duration()),
}
}

View File

@ -1506,7 +1506,7 @@ fn throw(source: &mut Construct, target: &mut Construct, mut results: Resolution
}
fn strangle(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
let ConstructEffect { effect, duration, meta, tick: _ } = skill.effect().first().unwrap().clone();
let ConstructEffect { effect, duration, meta, tick: _ } = skill.effect()[0];
let tick_skill = match meta {
Some(EffectMeta::Skill(s)) => s,
_ => panic!("no strangle tick skill"),
@ -1659,29 +1659,26 @@ fn blast(source: &mut Construct, target: &mut Construct, mut results: Resolution
}
fn amplify(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)))));
results.push(Resolution::new(source, target).event(target.add_effect(skill, skill.effect()[0])));
return results;;
}
fn haste(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)))));
results.push(Resolution::new(source, target).event(target.add_effect(skill, skill.effect()[0])));
return results;;
}
fn debuff(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)))));
results.push(Resolution::new(source, target).event(target.add_effect(skill, skill.effect()[0])));
return results;;
}
fn decay(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
let wither = skill.effect().first().unwrap().clone();
let wither = skill.effect()[0];
results.push(Resolution::new(source, target).event(target.add_effect(skill, wither)));
let ConstructEffect { effect, duration, meta, tick: _ } = skill.effect().last().unwrap().clone();
let ConstructEffect { effect, duration, meta, tick: _ } = skill.effect()[1];
let tick_skill = match meta {
Some(EffectMeta::Skill(s)) => s,
_ => panic!("no decay tick skill"),
@ -1703,14 +1700,14 @@ fn decay_tick(source: &mut Construct, target: &mut Construct, mut results: Resol
// corrupt is the buff effect
// when attacked it runs corruption and applies a debuff
fn corrupt(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
let corrupt = skill.effect().first().unwrap().clone();
let corrupt = skill.effect()[0];
results.push(Resolution::new(source, target).event(target.add_effect(skill, corrupt)));
return results;;
}
fn corruption(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
let ConstructEffect { effect, duration, meta, tick: _ } = skill.effect().first().unwrap().clone();
let ConstructEffect { effect, duration, meta, tick: _ } = skill.effect()[0];
let tick_skill = match meta {
Some(EffectMeta::Skill(s)) => s,
_ => panic!("no corruption tick skill"),
@ -1729,53 +1726,44 @@ fn corruption_tick(source: &mut Construct, target: &mut Construct, mut results:
}
fn ruin(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)))));
results.push(Resolution::new(source, target).event(target.add_effect(skill, skill.effect()[0])));
return results;;
}
fn hex(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)))));
results.push(Resolution::new(source, target).event(target.add_effect(skill, skill.effect()[0])));
return results;;
}
fn hostility(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
let hostility = skill.effect().first().unwrap().clone();
results.push(Resolution::new(source, target).event(target.add_effect(skill, hostility)));
results.push(Resolution::new(source, target).event(target.add_effect(skill, skill.effect()[0])));
return results;;
}
fn hatred(source: &mut Construct, target: &mut Construct, mut results: Resolutions, reflect_skill: Skill, amount: u64, skill: Skill) -> Resolutions {
let hatred = skill.effect().first().unwrap().clone()
.set_meta(EffectMeta::AddedDamage(amount));
let hatred = skill.effect()[0].set_meta(EffectMeta::AddedDamage(amount));
results.push(Resolution::new(source, target).event(target.add_effect(reflect_skill, hatred)));
return results;;
}
fn curse(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)))));
results.push(Resolution::new(source, target).event(target.add_effect(skill, skill.effect()[0])));
return results;;
}
fn impurity(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)))));
results.push(Resolution::new(source, target).event(target.add_effect(skill, skill.effect()[0])));
return results;;
}
fn invert(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)))));
results.push(Resolution::new(source, target).event(target.add_effect(skill, skill.effect()[0])));
return results;;
}
fn reflect(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)))));
results.push(Resolution::new(source, target).event(target.add_effect(skill, skill.effect()[0])));
let blue_amount = source.blue_power().pct(skill.multiplier());
results.push(Resolution::new(source, target).event(target.recharge(skill, 0, blue_amount)));
@ -1792,7 +1780,7 @@ fn recharge(source: &mut Construct, target: &mut Construct, mut results: Resolut
}
fn siphon(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
let ConstructEffect { effect, duration, meta, tick: _ } = skill.effect().first().unwrap().clone();
let ConstructEffect { effect, duration, meta, tick: _ } = skill.effect()[0];
let tick_skill = match meta {
Some(EffectMeta::Skill(s)) => s,
_ => panic!("no siphon tick skill"),
@ -1827,10 +1815,8 @@ fn scatter(source: &mut Construct, target: &mut Construct, mut results: Resoluti
let blue_amount = source.blue_power().pct(skill.multiplier());
results.push(Resolution::new(source, target).event(target.recharge(skill, 0, blue_amount)));
skill.effect().into_iter().for_each(|e| {
let scatter = e.clone().set_meta(EffectMeta::ScatterTarget(target.id));
let scatter = skill.effect()[0].set_meta(EffectMeta::ScatterTarget(target.id));
results.push(Resolution::new(source, target).event(source.add_effect(skill, scatter)));
});
return results;
}
@ -1862,8 +1848,7 @@ fn scatter_hit(source: &Construct, target: &Construct, mut results: Resolutions,
}
fn silence(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)))));
results.push(Resolution::new(source, target).event(target.add_effect(skill, skill.effect()[0])));
let s_multi = target.skills
.iter()
@ -1908,8 +1893,7 @@ fn purify(source: &mut Construct, target: &mut Construct, mut results: Resolutio
}
fn banish(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)))));
results.push(Resolution::new(source, target).event(target.add_effect(skill, skill.effect()[0])));
return results;
}