diff --git a/common/src/combat.rs b/common/src/combat.rs index cf13842281..8c8bfdca3a 100644 --- a/common/src/combat.rs +++ b/common/src/combat.rs @@ -127,6 +127,18 @@ impl Attack { }); } }, + AttackEffect::Lifesteal(l) => { + let change = HealthChange { + amount: (damage_damage * l) as i32, + cause: HealthSource::Heal { + by: Some(attacker_uid), + }, + }; + server_events.push(ServerEvent::Damage { + entity: attacker_entity, + change, + }); + }, } } } @@ -170,6 +182,18 @@ impl Attack { }); } }, + AttackEffect::Lifesteal(l) => { + let change = HealthChange { + amount: (accumulated_damage * l) as i32, + cause: HealthSource::Heal { + by: Some(attacker_uid), + }, + }; + server_events.push(ServerEvent::Damage { + entity: attacker_entity, + change, + }); + }, } } } @@ -227,7 +251,7 @@ pub enum AttackEffect { Buff(CombatBuff), Knockback(Knockback), EnergyReward(u32), - //Lifesteal(f32), + Lifesteal(f32), } #[derive(Clone, Debug, Serialize, Deserialize)] diff --git a/common/src/states/basic_beam.rs b/common/src/states/basic_beam.rs index 5f23c595df..5c367e38d1 100644 --- a/common/src/states/basic_beam.rs +++ b/common/src/states/basic_beam.rs @@ -136,7 +136,9 @@ impl CharacterBehavior for Data { let energy = AttackEffect::EnergyReward(self.static_data.energy_regen); let energy = EffectComponent::new(None, energy) .with_requirement(CombatRequirement::AnyDamage); - let damage = DamageComponent::new(damage, Some(GroupTarget::OutOfGroup)); + let lifesteal = AttackEffect::Lifesteal(self.static_data.lifesteal_eff); + let damage = DamageComponent::new(damage, Some(GroupTarget::OutOfGroup)) + .with_effect(lifesteal); let attack = Attack::default().with_damage(damage).with_effect(energy); let properties = beam::Properties {