diff --git a/client/src/events.jsx b/client/src/events.jsx index 216af011..f088c057 100644 --- a/client/src/events.jsx +++ b/client/src/events.jsx @@ -91,7 +91,7 @@ function registerEvents(store) { store.dispatch(actions.setAnimTarget(null)); store.dispatch(actions.setAnimText(null)); store.dispatch(actions.setAnimFocus([])); - if (!sequence.includes('END_SKILL') + if (!sequence.includes('END_SKILL' && anims.animTarget) || ['Banish', 'Invert'].includes(removeTier(anims.animTarget.skill))) return cb(); return true; }, timeout); diff --git a/server/src/game.rs b/server/src/game.rs index 222ab0f6..b96d15ad 100644 --- a/server/src/game.rs +++ b/server/src/game.rs @@ -322,7 +322,7 @@ impl Game { return Err(err_msg("game not in skill phase")); } let mut game_state = self.clone(); - self.stack.retain(|s| game_state.construct_by_id(s.source_construct_id).unwrap().account == player_id); + self.stack.retain(|s| game_state.construct_by_id(s.source_construct_id).unwrap().account != player_id); return Ok(self); } diff --git a/server/src/item.rs b/server/src/item.rs index 6a1266c2..2242f23b 100644 --- a/server/src/item.rs +++ b/server/src/item.rs @@ -337,13 +337,27 @@ impl Item { } } - pub fn speed(&self) -> u64 { + pub fn base_speed(&self) -> u64 { match self { Item::Attack => 1, Item::Stun => 2, Item::Block => 3, Item::Buff | Item::Debuff => 4, + Item::Blue => 1, + Item::Green => 2, + Item::Red => 3, + _ => 0, + } + } + + pub fn speed(&self) -> u64 { + match self { + Item::Attack | + Item::Stun | + Item::Block | + Item::Buff | + Item::Debuff => 24 + self.base_speed(), _ => { let combos = get_combos(); let combo = combos.iter().find(|c| c.item == *self) @@ -355,17 +369,17 @@ impl Item { combo.components.iter().for_each(|unit| { colour_speed += match unit { - Item::Red => 3, - Item::Green => 2, - Item::Blue => 1, + Item::Red | + Item::Green | + Item::Blue => unit.base_speed(), _ => 0, }; skill_speed += match unit { - Item::Attack => 1, - Item::Stun => 2, - Item::Block => 3, + Item::Attack | + Item::Stun | + Item::Block | Item::Buff | - Item::Debuff => 4, + Item::Debuff => unit.base_speed(), _ => 0, }; if colour_speed == 0 && skill_speed == 0 { diff --git a/server/src/skill.rs b/server/src/skill.rs index e66ab6a4..4d5ba5d6 100644 --- a/server/src/skill.rs +++ b/server/src/skill.rs @@ -293,7 +293,7 @@ fn post_resolve(_skill: Skill, game: &mut Game, mut resolutions: Resolutions) -> let mut target = game.construct_by_id(target.id).unwrap().clone(); match event { - Event::Damage { amount, skill, mitigation: _, colour: _ } => { + Event::Damage { amount, skill, mitigation: _, colour: c } => { if target.affected(Effect::Electric) { let ConstructEffect { effect: _, duration: _, meta, tick: _ } = target.effects.iter() .find(|e| e.effect == Effect::Electric).unwrap().clone(); @@ -315,16 +315,17 @@ fn post_resolve(_skill: Skill, game: &mut Game, mut resolutions: Resolutions) -> _ => panic!("no absorb skill"), }; } - - if target.affected(Effect::Counter) { - let ConstructEffect { effect: _, duration: _, meta, tick: _ } = target.effects.iter() - .find(|e| e.effect == Effect::Counter).unwrap().clone(); - match meta { - Some(EffectMeta::Skill(s)) => { - resolutions = counter_attack(&mut target, &mut source, resolutions, s); - }, - _ => panic!("no counter skill"), - }; + if c == Colour::Red { + if target.affected(Effect::Counter) { + let ConstructEffect { effect: _, duration: _, meta, tick: _ } = target.effects.iter() + .find(|e| e.effect == Effect::Counter).unwrap().clone(); + match meta { + Some(EffectMeta::Skill(s)) => { + resolutions = counter_attack(&mut target, &mut source, resolutions, s); + }, + _ => panic!("no counter skill"), + }; + } } }, _ => (),