Merge branch 'release/1.6.5' into face-imgs

This commit is contained in:
ntr
2019-10-25 16:09:24 +11:00
44 changed files with 3204 additions and 586 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
[package]
name = "mnml"
version = "1.6.2"
version = "1.6.5"
authors = ["ntr <ntr@smokestack.io>"]
[dependencies]
+3 -3
View File
@@ -606,7 +606,7 @@ impl Construct {
});
},
true => {
events.push(Event::Inversion { skill });
// events.push(Event::Inversion { skill });
// there is no green shield (yet)
let current_green_life = self.green_life();
@@ -669,7 +669,7 @@ impl Construct {
});
},
true => {
events.push(Event::Inversion { skill });
// events.push(Event::Inversion { skill });
let current_green_life = self.green_life();
self.green_life.increase(modified_power);
@@ -738,7 +738,7 @@ impl Construct {
});
},
true => {
events.push(Event::Inversion { skill });
// events.push(Event::Inversion { skill });
let current_green_life = self.green_life();
self.green_life.increase(modified_power);
+5 -3
View File
@@ -377,9 +377,11 @@ impl Game {
let mut sorted = self.stack.clone();
sorted.iter_mut()
.for_each(|s| {
let caster = self.construct_by_id(s.source_construct_id).unwrap();
let speed = caster.skill_speed(s.skill);
s.speed = speed;
if !s.skill.is_tick() {
let caster = self.construct_by_id(s.source_construct_id).unwrap();
let speed = caster.skill_speed(s.skill);
s.speed = speed;
}
});
sorted.sort_unstable_by_key(|s| s.speed);
+1 -1
View File
@@ -81,7 +81,7 @@ impl TimeControl {
pub fn lobby_timeout(&self) -> DateTime<Utc> {
Utc::now()
.checked_add_signed(Duration::seconds(30))
.checked_add_signed(Duration::seconds(15))
.expect("could not set phase end")
}
+47 -18
View File
@@ -16,7 +16,7 @@ pub fn dev_resolve(a_id: Uuid, b_id: Uuid, skill: Skill) -> Resolutions {
let mut b = Construct::new();
b.id = b_id;
if skill.aoe() { // Send an aoe skill event for anims
resolutions.push(Resolution::new(&a, &b).event(Event::AoeSkill { skill }));
resolutions.push(Resolution::new(&a, &b).event(Event::AoeSkill { skill }).stages(EventStages::StartEnd));
}
return resolve(skill, &mut a, &mut b, resolutions);
}
@@ -36,7 +36,7 @@ pub fn pre_resolve(cast: &Cast, game: &mut Game, mut resolutions: Resolutions) -
if skill.aoe() { // Send an aoe skill event for anims
resolutions.push(Resolution::new(&source,
&game.construct_by_id(cast.target_construct_id).unwrap().clone()).event(Event::AoeSkill { skill }));
&game.construct_by_id(cast.target_construct_id).unwrap().clone()).event(Event::AoeSkill { skill }).stages(EventStages::StartEnd));
}
for target_id in targets {
@@ -68,13 +68,13 @@ pub fn pre_resolve(cast: &Cast, game: &mut Game, mut resolutions: Resolutions) -
}
pub fn resolve(skill: Skill, source: &mut Construct, target: &mut Construct, mut resolutions: Vec<Resolution>) -> Resolutions {
if let Some(disable) = source.disabled(skill) {
resolutions.push(Resolution::new(source, target).event(Event::Disable { disable, skill }));
if let Some(_disable) = source.disabled(skill) {
// resolutions.push(Resolution::new(source, target).event(Event::Disable { disable, skill }).stages(EventStages::PostOnly));
return resolutions;
}
if target.is_ko() {
resolutions.push(Resolution::new(source, target).event(Event::TargetKo { skill }));
// resolutions.push(Resolution::new(source, target).event(Event::TargetKo { skill }).stages(EventStages::PostOnly));
return resolutions;
}
@@ -342,7 +342,7 @@ fn post_resolve(_skill: Skill, game: &mut Game, mut resolutions: Resolutions) ->
};
if target.is_ko() {
resolutions.push(Resolution::new(&source, &target).event(Event::Ko()));
resolutions.push(Resolution::new(&source, &target).event(Event::Ko()).stages(EventStages::PostOnly));
target.effects.clear();
}
@@ -384,7 +384,7 @@ impl Cast {
source_player_id: source.account,
target_construct_id: target.id,
skill,
speed: 0,
speed: source.skill_speed(skill),
}
}
@@ -408,13 +408,21 @@ pub struct EventConstruct {
#[derive(Debug,Clone,PartialEq,Serialize,Deserialize)]
pub enum EventStages {
#[serde(rename = "START_SKILL END_SKILL POST_SKILL")]
AllStages, // Anim Anim Anim
#[serde(rename = "START_SKILL END_SKILL")]
StartEnd, // Anim Anim Skip
#[serde(rename = "START_SKILL POST_SKILL")]
StartPost, // Anim Skip Anim
#[serde(rename = "START_SKILL")]
StartOnly, // Anim Skip Skip
#[serde(rename = "END_SKILL POST_SKILL")]
EndPost, // Skip Anim Anim
#[serde(rename = "END_SKILL")]
EndOnly, // Skip Anim Skip
#[serde(rename = "POST_SKILL")]
PostOnly, // Skip Skip Anim
#[serde(rename = "")]
NoStages, // Skip Skip Skip
}
@@ -1499,7 +1507,13 @@ fn heal(source: &mut Construct, target: &mut Construct, mut results: Resolutions
}
fn triage(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
let skip_tick = target.effects.iter().any(|e| e.effect == Effect::Triage);
let skip_tick = target.effects.iter().any(|e| {
match e.effect {
Effect::Triage => source.skill_speed(skill) <= e.tick.unwrap().speed,
_ => false,
}
});
let ConstructEffect { effect, duration, meta, tick: _ } = skill.effect()[0];
let tick_skill = match meta {
Some(EffectMeta::Skill(s)) => s,
@@ -1565,7 +1579,12 @@ fn decay(source: &mut Construct, target: &mut Construct, mut results: Resolution
let wither = skill.effect()[0];
results.push(Resolution::new(source, target).event(target.add_effect(skill, wither)));
let skip_tick = target.effects.iter().any(|e| e.effect == Effect::Decay);
let skip_tick = target.effects.iter().any(|e| {
match e.effect {
Effect::Decay => source.skill_speed(skill) <= e.tick.unwrap().speed,
_ => false,
}
});
let ConstructEffect { effect, duration, meta, tick: _ } = skill.effect()[1];
let tick_skill = match meta {
Some(EffectMeta::Skill(s)) => s,
@@ -1619,7 +1638,12 @@ fn electrocute(source: &mut Construct, target: &mut Construct, mut results: Reso
_ => panic!("no electrocute tick skill"),
};
let skip_tick = target.effects.iter().any(|e| e.effect == Effect::Electrocute);
let skip_tick = target.effects.iter().any(|e| {
match e.effect {
Effect::Electrocute => source.skill_speed(skill) <= e.tick.unwrap().speed,
_ => false,
}
});
let electrocute = ConstructEffect::new(effect, duration).set_tick(Cast::new_tick(source, target, tick_skill));
results.push(Resolution::new(source, target)
.event(target.add_effect(skill, electrocute))
@@ -1716,7 +1740,12 @@ 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 skip_tick = target.effects.iter().any(|e| e.effect == Effect::Siphon);
let skip_tick = target.effects.iter().any(|e| {
match e.effect {
Effect::Siphon => source.skill_speed(skill) <= e.tick.unwrap().speed,
_ => false,
}
});
let ConstructEffect { effect, duration, meta, tick: _ } = skill.effect()[0];
let tick_skill = match meta {
Some(EffectMeta::Skill(s)) => s,
@@ -1790,7 +1819,7 @@ fn silence(source: &mut Construct, target: &mut Construct, mut results: Resoluti
}
fn purge(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
results.push(Resolution::new(source, target).event(Event::Skill { skill }));
results.push(Resolution::new(source, target).event(Event::Skill { skill }).stages(EventStages::StartEnd));
while let Some(i) = target.effects
.iter()
.position(|ce| {
@@ -1824,7 +1853,7 @@ fn purge(source: &mut Construct, target: &mut Construct, mut results: Resolution
}
fn purify(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
results.push(Resolution::new(source, target).event(Event::Skill { skill }));
results.push(Resolution::new(source, target).event(Event::Skill { skill }).stages(EventStages::StartEnd));
let amount = source.green_power().pct(skill.multiplier());
while let Some(i) = target.effects
.iter()
@@ -1848,7 +1877,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 {
results.push(Resolution::new(source, target).event(Event::Skill { skill }));
results.push(Resolution::new(source, target).event(Event::Skill { skill }).stages(EventStages::StartEnd));
let red_damage = target.red_life().pct(skill.multiplier());
let blue_damage = target.blue_life().pct(skill.multiplier());
@@ -1983,10 +2012,10 @@ mod tests {
// attack should heal and recharge red shield
let mut results = attack(&mut x, &mut y, vec![], Skill::Attack);
match results.remove(0).event {
Event::Inversion { skill } => assert_eq!(skill, Skill::Attack),
_ => panic!("not inversion"),
};
// match results.remove(0).event {
// Event::Inversion { skill } => assert_eq!(skill, Skill::Attack),
// _ => panic!("not inversion"),
//};
match results.remove(0).event {
Event::Healing { skill: _, overhealing: _, amount } => assert!(amount > 0),