From e18c22a197231c945f7e611db7dd35c31a5c3b99 Mon Sep 17 00:00:00 2001 From: Sam Date: Sat, 20 Mar 2021 16:26:10 -0400 Subject: [PATCH] Fixed gaining combo by shooting loot bags --- common/src/combat.rs | 3 ++- common/sys/src/beam.rs | 1 + common/sys/src/melee.rs | 1 + common/sys/src/projectile.rs | 4 +++- common/sys/src/shockwave.rs | 1 + server/src/events/entity_manipulation.rs | 22 +++++++++++----------- 6 files changed, 19 insertions(+), 13 deletions(-) diff --git a/common/src/combat.rs b/common/src/combat.rs index 98a5b837aa..230e09776e 100644 --- a/common/src/combat.rs +++ b/common/src/combat.rs @@ -53,6 +53,7 @@ pub struct TargetInfo<'a> { pub entity: EcsEntity, pub inventory: Option<&'a Inventory>, pub stats: Option<&'a Stats>, + pub health: Option<&'a Health>, } #[cfg(not(target_arch = "wasm32"))] @@ -229,7 +230,7 @@ impl Attack { .filter(|e| !(matches!(e.target, Some(GroupTarget::OutOfGroup)) && target_dodging)) { if effect.requirements.iter().all(|req| match req { - CombatRequirement::AnyDamage => accumulated_damage > 0.0, + CombatRequirement::AnyDamage => accumulated_damage > 0.0 && target.health.is_some(), CombatRequirement::Energy(r) => { if let Some(AttackerInfo { entity, diff --git a/common/sys/src/beam.rs b/common/sys/src/beam.rs index ab0ab78fff..65c86c8c45 100644 --- a/common/sys/src/beam.rs +++ b/common/sys/src/beam.rs @@ -169,6 +169,7 @@ impl<'a> System<'a> for Sys { entity: target, inventory: read_data.inventories.get(target), stats: read_data.stats.get(target), + health: read_data.healths.get(target), }; beam_segment.properties.attack.apply_attack( diff --git a/common/sys/src/melee.rs b/common/sys/src/melee.rs index 49222486b8..f844e7a84b 100644 --- a/common/sys/src/melee.rs +++ b/common/sys/src/melee.rs @@ -124,6 +124,7 @@ impl<'a> System<'a> for Sys { entity: target, inventory: read_data.inventories.get(target), stats: read_data.stats.get(target), + health: read_data.healths.get(target), }; melee_attack.attack.apply_attack( diff --git a/common/sys/src/projectile.rs b/common/sys/src/projectile.rs index 124af72606..b5f7b4b0d5 100644 --- a/common/sys/src/projectile.rs +++ b/common/sys/src/projectile.rs @@ -1,7 +1,7 @@ use common::{ combat::{AttackerInfo, TargetInfo}, comp::{ - projectile, Combo, Energy, Group, HealthSource, Inventory, Ori, PhysicsState, Pos, + projectile, Combo, Energy, Group, Health, HealthSource, Inventory, Ori, PhysicsState, Pos, Projectile, Stats, Vel, }, event::{EventBus, ServerEvent}, @@ -31,6 +31,7 @@ pub struct ReadData<'a> { energies: ReadStorage<'a, Energy>, stats: ReadStorage<'a, Stats>, combos: ReadStorage<'a, Combo>, + healths: ReadStorage<'a, Health>, } /// This system is responsible for handling projectile effect triggers @@ -119,6 +120,7 @@ impl<'a> System<'a> for Sys { entity: target, inventory: read_data.inventories.get(target), stats: read_data.stats.get(target), + health: read_data.healths.get(target), }; attack.apply_attack( diff --git a/common/sys/src/shockwave.rs b/common/sys/src/shockwave.rs index 8d421c269e..e00b591e78 100644 --- a/common/sys/src/shockwave.rs +++ b/common/sys/src/shockwave.rs @@ -188,6 +188,7 @@ impl<'a> System<'a> for Sys { entity: target, inventory: read_data.inventories.get(target), stats: read_data.stats.get(target), + health: read_data.healths.get(target), }; shockwave.properties.attack.apply_attack( diff --git a/server/src/events/entity_manipulation.rs b/server/src/events/entity_manipulation.rs index 92a847a73c..b76440e31d 100644 --- a/server/src/events/entity_manipulation.rs +++ b/server/src/events/entity_manipulation.rs @@ -697,17 +697,16 @@ pub fn handle_explosion(server: &Server, pos: Vec3, explosion: Explosion, o RadiusEffect::Attack(attack) => { let energies = &ecs.read_storage::(); let combos = &ecs.read_storage::(); - for (entity_b, pos_b, _health_b, inventory_b_maybe, stats_b_maybe, body_b_maybe) in - ( - &ecs.entities(), - &ecs.read_storage::(), - &ecs.read_storage::(), - ecs.read_storage::().maybe(), - ecs.read_storage::().maybe(), - ecs.read_storage::().maybe(), - ) - .join() - .filter(|(_, _, h, _, _, _)| !h.is_dead) + for (entity_b, pos_b, health_b, inventory_b_maybe, stats_b_maybe, body_b_maybe) in ( + &ecs.entities(), + &ecs.read_storage::(), + &ecs.read_storage::(), + ecs.read_storage::().maybe(), + ecs.read_storage::().maybe(), + ecs.read_storage::().maybe(), + ) + .join() + .filter(|(_, _, h, _, _, _)| !h.is_dead) { // Check if it is a hit let strength = if let Some(body) = body_b_maybe { @@ -749,6 +748,7 @@ pub fn handle_explosion(server: &Server, pos: Vec3, explosion: Explosion, o entity: entity_b, inventory: inventory_b_maybe, stats: stats_b_maybe, + health: Some(health_b), }; let server_eventbus = ecs.read_resource::>();