From b589c3fc71a4204c95b9c6c9667f224e052b1034 Mon Sep 17 00:00:00 2001 From: Monty Marz Date: Mon, 4 May 2020 16:59:32 +0000 Subject: [PATCH] Fix animals not attacking --- assets/common/items/weapons/empty.ron | 10 ++++++++++ common/src/comp/inventory/item/tool.rs | 9 ++++++++- common/src/sys/agent.rs | 8 ++++---- server/src/sys/terrain.rs | 27 ++++++++++++++++++++------ world/src/site/settlement/mod.rs | 6 +++--- 5 files changed, 46 insertions(+), 14 deletions(-) create mode 100644 assets/common/items/weapons/empty.ron diff --git a/assets/common/items/weapons/empty.ron b/assets/common/items/weapons/empty.ron new file mode 100644 index 0000000000..62a2bf4785 --- /dev/null +++ b/assets/common/items/weapons/empty.ron @@ -0,0 +1,10 @@ +Item( + name: "Empty", + description: "", + kind: Tool ( + ( + kind: Empty, + equip_time_millis: 200, + ) + ), +) diff --git a/common/src/comp/inventory/item/tool.rs b/common/src/comp/inventory/item/tool.rs index 2a6aa52f6d..e5dd230343 100644 --- a/common/src/comp/inventory/item/tool.rs +++ b/common/src/comp/inventory/item/tool.rs @@ -283,7 +283,14 @@ impl Tool { projectile_gravity: None, }], }, - Empty => vec![], + Empty => vec![BasicMelee { + energy_cost: 0, + buildup_duration: Duration::from_millis(0), + recover_duration: Duration::from_millis(1000), + base_healthchange: -2, + range: 3.5, + max_angle: 45.0, + }], } } } diff --git a/common/src/sys/agent.rs b/common/src/sys/agent.rs index 61ce280579..9f349ada3c 100644 --- a/common/src/sys/agent.rs +++ b/common/src/sys/agent.rs @@ -256,10 +256,10 @@ impl<'a> System<'a> for Sys { let dist_sqrd = pos.0.distance_squared(tgt_pos.0); if dist_sqrd < (MIN_ATTACK_DIST * scale).powf(2.0) { // Close-range attack - inputs.move_dir = Vec2::from(tgt_pos.0 - pos.0) - .try_normalized() - .unwrap_or(Vec2::unit_y()) - * 0.7; + /*inputs.move_dir = Vec2::from(tgt_pos.0 - pos.0) + .try_normalized() + .unwrap_or(Vec2::unit_y()) + * 0.7;*/ match tactic { Tactic::Melee | Tactic::Staff => inputs.primary.set_state(true), diff --git a/server/src/sys/terrain.rs b/server/src/sys/terrain.rs index 76458cb2ba..3ff9f6e74f 100644 --- a/server/src/sys/terrain.rs +++ b/server/src/sys/terrain.rs @@ -2,7 +2,7 @@ use super::SysTimer; use crate::{chunk_generator::ChunkGenerator, client::Client, Tick}; use common::{ assets, - comp::{self, item, CharacterAbility, Item, ItemConfig, Player, Pos}, + comp::{self, item, CharacterAbility, ItemConfig, Player, Pos}, event::{EventBus, ServerEvent}, generation::get_npc_name, msg::ServerMsg, @@ -110,8 +110,9 @@ impl<'a> System<'a> for Sys { let name = entity.name.unwrap_or("Unnamed".to_string()); let alignment = entity.alignment; let main_tool = entity.main_tool; - let mut stats = comp::Stats::new(name, body); + // let damage = stats.level.level() as i32; TODO: Make NPC base damage + // non-linearly depend on their level let active_item = if let Some(item::ItemKind::Tool(tool)) = main_tool.as_ref().map(|i| &i.kind) { @@ -129,12 +130,12 @@ impl<'a> System<'a> for Sys { } else { Some(ItemConfig { // We need the empty item so npcs can attack - item: Item::empty(), + item: assets::load_expect_cloned("common.items.weapons.empty"), ability1: Some(CharacterAbility::BasicMelee { energy_cost: 0, buildup_duration: Duration::from_millis(0), recover_duration: Duration::from_millis(400), - base_healthchange: -4, + base_healthchange: -2, range: 3.5, max_angle: 60.0, }), @@ -213,7 +214,21 @@ impl<'a> System<'a> for Sys { tabard: None, }, _ => comp::Loadout { - active_item, + active_item: Some(comp::ItemConfig { + item: assets::load_expect_cloned("common.items.weapons.empty"), + ability1: Some(CharacterAbility::BasicMelee { + energy_cost: 10, + buildup_duration: Duration::from_millis(800), + recover_duration: Duration::from_millis(200), + base_healthchange: -2, + range: 3.5, + max_angle: 60.0, + }), + ability2: None, + ability3: None, + block_ability: None, + dodge_ability: None, + }), second_item: None, shoulder: None, chest: None, @@ -258,7 +273,7 @@ impl<'a> System<'a> for Sys { energy_cost: 0, buildup_duration: Duration::from_millis(800), recover_duration: Duration::from_millis(200), - base_healthchange: -13, + base_healthchange: -10, range: 3.5, max_angle: 60.0, }), diff --git a/world/src/site/settlement/mod.rs b/world/src/site/settlement/mod.rs index 8bffeb2c19..3fafa933d7 100644 --- a/world/src/site/settlement/mod.rs +++ b/world/src/site/settlement/mod.rs @@ -813,15 +813,15 @@ impl Settlement { }) .do_if(rng.gen(), |entity| { entity.with_main_tool(assets::load_expect_cloned( - match rng.gen_range(0, 8) { + match rng.gen_range(0, 7) { 0 => "common.items.weapons.tool.broom", 1 => "common.items.weapons.tool.hoe", 2 => "common.items.weapons.tool.pickaxe", 3 => "common.items.weapons.tool.pitchfork", 4 => "common.items.weapons.tool.rake", 5 => "common.items.weapons.tool.shovel-0", - 6 => "common.items.weapons.tool.shovel-1", - _ => "common.items.weapons.bow.starter_bow", + _ => "common.items.weapons.tool.shovel-1", + //_ => "common.items.weapons.bow.starter_bow", TODO: Re-Add this when we have a better way of distributing weapons here }, )) })