Merge branch 'release/1.6.5' into face-imgs
This commit is contained in:
@@ -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
@@ -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);
|
||||
|
||||
@@ -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
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user