From bfa42dd33b1f3cd73d52920d8c4c76bb63e9d19b Mon Sep 17 00:00:00 2001 From: tommy Date: Sun, 14 Jul 2019 16:35:22 -0400 Subject: [PATCH] Incorporated changes from Imbris --- server/src/cmd.rs | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/server/src/cmd.rs b/server/src/cmd.rs index 5191111f6b..179aad9718 100644 --- a/server/src/cmd.rs +++ b/server/src/cmd.rs @@ -416,24 +416,15 @@ fn kind_to_body(kind: NpcKind) -> comp::Body { fn handle_killnpcs(server: &mut Server, entity: EcsEntity, _args: String, _action: &ChatCommand) { let ecs = server.state.ecs(); - let mut npclist = Vec::new(); - { - // Get the npc list, scope read access to prevent - // 'Already borrowed: InvalidBorrow' error when setting health stat - let entities = ecs.entities(); - let stats = ecs.read_storage::(); - let players = ecs.read_storage::(); - for (npc, stat, ()) in (&entities, &stats, !&players).join() { - npclist.push((npc, stat.name.clone())); - } + let mut stats = ecs.write_storage::(); + let players = ecs.write_storage::(); + let mut count = 0; + for (npc, ()) in (&mut stats, !&players).join() { + count += 1; + npc.health.set_to(0, comp::HealthSource::Command); } - for npc in &npclist { - ecs.write_storage::() - .get_mut(npc.0) - .map(|s| s.health.set_to(0, comp::HealthSource::Command)); - } - let text = if npclist.len() > 0 { - format!("Destroyed {} NPCs.", npclist.len()) + let text = if count > 0 { + format!("Destroyed {} NPCs.", count) } else { "No NPCs on server.".to_string() };