From b8e6840bf63c9babb282c3d00d02acd6451c8f0c Mon Sep 17 00:00:00 2001 From: juliancoffee Date: Sat, 13 Jan 2024 18:45:32 +0200 Subject: [PATCH] Enhance /kit all - "all" is now in proposed completions - `/kit all` gives all imaginable items, it's not limited to assets anymore --- .../common/items/debug/admin_black_hole.ron | 4 +- common/src/cmd.rs | 7 +++- server/src/cmd.rs | 42 ++++++++++++------- 3 files changed, 33 insertions(+), 20 deletions(-) diff --git a/assets/common/items/debug/admin_black_hole.ron b/assets/common/items/debug/admin_black_hole.ron index 4faf6b2289..1bf987bdc6 100644 --- a/assets/common/items/debug/admin_black_hole.ron +++ b/assets/common/items/debug/admin_black_hole.ron @@ -1,6 +1,6 @@ ItemDef( name: "Admin's Black Hole", - description: "It just works.", + description: "They say it will fit anything.", kind: Armor( ( kind: Bag, @@ -9,5 +9,5 @@ ItemDef( ), quality: Debug, tags: [], - slots: 900, + slots: 2500, ) diff --git a/common/src/cmd.rs b/common/src/cmd.rs index f29099a65c..8434a6d3c1 100644 --- a/common/src/cmd.rs +++ b/common/src/cmd.rs @@ -242,13 +242,16 @@ lazy_static! { }; pub static ref KITS: Vec = { - if let Ok(kits) = KitManifest::load_and_combine(KIT_MANIFEST_PATH) { + let mut kits = if let Ok(kits) = KitManifest::load_and_combine(KIT_MANIFEST_PATH) { let mut kits = kits.read().0.keys().cloned().collect::>(); kits.sort(); kits } else { Vec::new() - } + }; + kits.push("all".to_owned()); + + kits }; static ref PRESETS: HashMap> = { diff --git a/server/src/cmd.rs b/server/src/cmd.rs index a478ca4108..4b5472a2b2 100644 --- a/server/src/cmd.rs +++ b/server/src/cmd.rs @@ -21,14 +21,14 @@ use common::{ assets, calendar::Calendar, cmd::{ - AreaKind, EntityTarget, KitSpec, ServerChatCommand, BUFF_PACK, BUFF_PARSER, ITEM_SPECS, + AreaKind, EntityTarget, KitSpec, ServerChatCommand, BUFF_PACK, BUFF_PARSER, KIT_MANIFEST_PATH, PRESET_MANIFEST_PATH, }, comp::{ self, buff::{Buff, BuffData, BuffKind, BuffSource, MiscBuffData}, inventory::{ - item::{tool::AbilityMap, MaterialStatManifest, Quality}, + item::{all_items_expect, tool::AbilityMap, MaterialStatManifest, Quality}, slot::Slot, }, invite::InviteKind, @@ -2434,6 +2434,15 @@ fn handle_kill_npcs( Ok(()) } +enum KitEntry { + Spec(KitSpec), + Item(Item), +} + +impl From for KitEntry { + fn from(spec: KitSpec) -> Self { Self::Spec(spec) } +} + fn handle_kit( server: &mut Server, client: EcsEntity, @@ -2453,13 +2462,13 @@ fn handle_kit( match name.as_str() { "all" => { - // TODO: we will probably want to handle modular items here too - let items = &ITEM_SPECS; + // This can't fail, we have tests + let items = all_items_expect(); + let total = items.len(); + let res = push_kit( - items - .iter() - .map(|item_id| (KitSpec::Item(item_id.to_string()), 1)), - items.len(), + items.into_iter().map(|item| (KitEntry::Item(item), 1)), + total, server, target, ); @@ -2480,7 +2489,7 @@ fn handle_kit( let res = push_kit( kit.iter() - .map(|(item_id, quantity)| (item_id.clone(), *quantity)), + .map(|(item_id, quantity)| (item_id.clone().into(), *quantity)), kit.len(), server, target, @@ -2495,7 +2504,7 @@ fn handle_kit( fn push_kit(kit: I, count: usize, server: &mut Server, target: EcsEntity) -> CmdResult<()> where - I: Iterator, + I: Iterator, { if let (Some(mut target_inventory), mut target_inv_update) = ( server @@ -2529,19 +2538,20 @@ where } fn push_item( - item_id: KitSpec, + item_id: KitEntry, quantity: u32, server: &Server, push: &mut dyn FnMut(Item) -> Result<(), Item>, ) -> CmdResult<()> { - let items = match &item_id { - KitSpec::Item(item_id) => vec![ - Item::new_from_asset(item_id).map_err(|_| format!("Unknown item: {:#?}", item_id))?, + let items = match item_id { + KitEntry::Spec(KitSpec::Item(item_id)) => vec![ + Item::new_from_asset(&item_id).map_err(|_| format!("Unknown item: {:#?}", item_id))?, ], - KitSpec::ModularWeapon { tool, material } => { - comp::item::modular::generate_weapons(*tool, *material, None) + KitEntry::Spec(KitSpec::ModularWeapon { tool, material }) => { + comp::item::modular::generate_weapons(tool, material, None) .map_err(|err| format!("{:#?}", err))? }, + KitEntry::Item(item) => vec![item], }; let mut res = Ok(());