From e64e28ae850b7ddab2084eeaf245a5899ba84198 Mon Sep 17 00:00:00 2001 From: tommy Date: Fri, 12 Jul 2019 17:16:07 -0400 Subject: [PATCH 1/6] Updates based on code review #183 --- server/src/cmd.rs | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/server/src/cmd.rs b/server/src/cmd.rs index 9ed396771b..f8536da0fd 100644 --- a/server/src/cmd.rs +++ b/server/src/cmd.rs @@ -118,6 +118,12 @@ lazy_static! { "/build : Toggles build mode on and off", handle_build, ), + ChatCommand::new( + "killnpcs", + "{}", + "/killnpcs : Kill the NPCs", + handle_killnpcs, + ), ]; } @@ -407,3 +413,26 @@ fn kind_to_body(kind: NpcKind) -> comp::Body { NpcKind::Wolf => comp::Body::QuadrupedMedium(comp::quadruped_medium::Body::random()), } } + +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())); + } + } + for npc in npclist { + let mut text = npc.1.clone(); + text += " is no more."; + server.clients.notify(entity, ServerMsg::Chat(text)); + ecs.write_storage::() + .get_mut(npc.0) + .map(|s| s.health.set_to(0, comp::HealthSource::Command)); + } +} From 12a0ce125c195535c16b65eb761ae6f0418eb96c Mon Sep 17 00:00:00 2001 From: tommy Date: Fri, 12 Jul 2019 17:43:20 -0400 Subject: [PATCH 2/6] rustfmt updates --- server/src/cmd.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/server/src/cmd.rs b/server/src/cmd.rs index f8536da0fd..5e09c63459 100644 --- a/server/src/cmd.rs +++ b/server/src/cmd.rs @@ -416,15 +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(); + 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())); + for (npc, stat, ()) in (&entities, &stats, !&players).join() { + npclist.push((npc, stat.name.clone())); } } for npc in npclist { @@ -432,7 +432,7 @@ fn handle_killnpcs(server: &mut Server, entity: EcsEntity, _args: String, _actio text += " is no more."; server.clients.notify(entity, ServerMsg::Chat(text)); ecs.write_storage::() - .get_mut(npc.0) - .map(|s| s.health.set_to(0, comp::HealthSource::Command)); + .get_mut(npc.0) + .map(|s| s.health.set_to(0, comp::HealthSource::Command)); } } From 1ab3ab525f2565ab6fc90f6d41557c92526edf62 Mon Sep 17 00:00:00 2001 From: tommy Date: Sun, 14 Jul 2019 13:30:02 -0400 Subject: [PATCH 3/6] Stopped 'spammy' output --- server/src/cmd.rs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/server/src/cmd.rs b/server/src/cmd.rs index 5e09c63459..c8d44254a9 100644 --- a/server/src/cmd.rs +++ b/server/src/cmd.rs @@ -418,7 +418,7 @@ fn handle_killnpcs(server: &mut Server, entity: EcsEntity, _args: String, _actio let ecs = server.state.ecs(); let mut npclist = Vec::new(); { - // get the npc list, scope read access to prevent + // 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::(); @@ -427,12 +427,16 @@ fn handle_killnpcs(server: &mut Server, entity: EcsEntity, _args: String, _actio npclist.push((npc, stat.name.clone())); } } - for npc in npclist { - let mut text = npc.1.clone(); - text += " is no more."; - server.clients.notify(entity, ServerMsg::Chat(text)); + 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()) + } + else { + "No NPCs on server.".to_string() + }; + server.clients.notify(entity, ServerMsg::Chat(text)); } From 812e2144255266335a712df06717d21b0b14e8f3 Mon Sep 17 00:00:00 2001 From: tommy Date: Sun, 14 Jul 2019 13:39:27 -0400 Subject: [PATCH 4/6] rustfmt issues --- server/src/cmd.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/server/src/cmd.rs b/server/src/cmd.rs index c8d44254a9..5191111f6b 100644 --- a/server/src/cmd.rs +++ b/server/src/cmd.rs @@ -433,9 +433,8 @@ fn handle_killnpcs(server: &mut Server, entity: EcsEntity, _args: String, _actio .map(|s| s.health.set_to(0, comp::HealthSource::Command)); } let text = if npclist.len() > 0 { - format!("Destroyed {} NPCs.",npclist.len()) - } - else { + format!("Destroyed {} NPCs.", npclist.len()) + } else { "No NPCs on server.".to_string() }; server.clients.notify(entity, ServerMsg::Chat(text)); From 3162259072d060164f6454309788be8012cec8fa Mon Sep 17 00:00:00 2001 From: tommy Date: Sun, 14 Jul 2019 16:35:22 -0400 Subject: [PATCH 5/6] 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() }; From 556358e3b81b35e2d05036e57508d2b96d172be2 Mon Sep 17 00:00:00 2001 From: tommy Date: Mon, 15 Jul 2019 13:10:24 -0400 Subject: [PATCH 6/6] Code review updates --- server/src/cmd.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/server/src/cmd.rs b/server/src/cmd.rs index 179aad9718..36de3bd704 100644 --- a/server/src/cmd.rs +++ b/server/src/cmd.rs @@ -417,11 +417,11 @@ 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 stats = ecs.write_storage::(); - let players = ecs.write_storage::(); + let players = ecs.read_storage::(); let mut count = 0; - for (npc, ()) in (&mut stats, !&players).join() { + for (stats, ()) in (&mut stats, !&players).join() { count += 1; - npc.health.set_to(0, comp::HealthSource::Command); + stats.health.set_to(0, comp::HealthSource::Command); } let text = if count > 0 { format!("Destroyed {} NPCs.", count)