From 54175e47102289b4f921e7c36e48f8674767b047 Mon Sep 17 00:00:00 2001 From: Sam Date: Wed, 27 Jan 2021 21:15:25 -0500 Subject: [PATCH] Effects now work when not tied to a damage. --- common/src/combat.rs | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/common/src/combat.rs b/common/src/combat.rs index 9c3c9e4c92..693f53146f 100644 --- a/common/src/combat.rs +++ b/common/src/combat.rs @@ -90,6 +90,8 @@ impl Attack { is_crit, self.crit_multiplier, ); + let damage_damage = -change.amount as f32; + accumulated_damage += damage_damage; if change.amount != 0 { server_events.push(ServerEvent::Damage { entity: target_entity, @@ -120,7 +122,7 @@ impl Attack { server_events.push(ServerEvent::Buff { entity: target_entity, buff_change: BuffChange::Add( - b.to_buff(attacker_uid, -change.amount as f32), + b.to_buff(attacker_uid, damage_damage), ), }); } @@ -129,6 +131,43 @@ impl Attack { } } } + for effect in self + .effects + .iter() + .filter(|e| e.target.map_or(true, |t| t == target_group)) + .filter(|e| !(matches!(e.target, Some(GroupTarget::OutOfGroup)) && target_dodging)) + { + match effect.effect { + AttackEffect::Knockback(kb) => { + let impulse = kb.calculate_impulse(dir); + if !impulse.is_approx_zero() { + server_events.push(ServerEvent::Knockback { + entity: target_entity, + impulse, + }); + } + }, + AttackEffect::EnergyReward(ec) => { + server_events.push(ServerEvent::EnergyChange { + entity: attacker_entity, + change: EnergyChange { + amount: ec as i32, + source: EnergySource::HitEnemy, + }, + }); + }, + AttackEffect::Buff(b) => { + if thread_rng().gen::() < b.chance { + server_events.push(ServerEvent::Buff { + entity: target_entity, + buff_change: BuffChange::Add( + b.to_buff(attacker_uid, accumulated_damage), + ), + }); + } + }, + } + } server_events } }