From b8bc435e3083ee0d3bd2105892d812f2b5853ed9 Mon Sep 17 00:00:00 2001 From: hellohellosharp Date: Mon, 9 Mar 2026 19:20:23 -0700 Subject: [PATCH] validate source inventory type on drop --- .../game/src/game/handlers/inventory/inventory_helper.rs | 7 +++++++ .../packages/game/src/game/handlers/inventory/item_drop.rs | 5 ++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/BitCraftServer/packages/game/src/game/handlers/inventory/inventory_helper.rs b/BitCraftServer/packages/game/src/game/handlers/inventory/inventory_helper.rs index 073a107..f393d6e 100644 --- a/BitCraftServer/packages/game/src/game/handlers/inventory/inventory_helper.rs +++ b/BitCraftServer/packages/game/src/game/handlers/inventory/inventory_helper.rs @@ -164,3 +164,10 @@ pub fn validate_swap(source_inventory_type: &InventoryType, target_inventory_typ return Ok(()); } + +pub fn validate_drop(source_inventory_type: &InventoryType) -> Result<(), String> { + if *source_inventory_type == InventoryType::Dropped { + return Err("Cannot drop items from a dropped inventory".into()); + } + return Ok(()); +} diff --git a/BitCraftServer/packages/game/src/game/handlers/inventory/item_drop.rs b/BitCraftServer/packages/game/src/game/handlers/inventory/item_drop.rs index 9b43972..0813fb7 100644 --- a/BitCraftServer/packages/game/src/game/handlers/inventory/item_drop.rs +++ b/BitCraftServer/packages/game/src/game/handlers/inventory/item_drop.rs @@ -43,7 +43,7 @@ pub fn item_drop(ctx: &ReducerContext, request: PlayerItemDropRequest) -> Result ctx.db.inventory_state().entity_id().find(&request.pocket.inventory_entity_id), "Invalid source inventory" ); - inventory_helper::validate_interact( + let source_inventory_type = inventory_helper::validate_interact( ctx, actor_id, pile_coordinates, @@ -51,6 +51,9 @@ pub fn item_drop(ctx: &ReducerContext, request: PlayerItemDropRequest) -> Result source_inventory.player_owner_entity_id, )?; + // Ensure this inventory type is allowed as a drop source. + inventory_helper::validate_drop(&source_inventory_type)?; + let pocket_index: usize = request.pocket.pocket_index as usize; item_stack = unwrap_or_err!( source_inventory.get_pocket_contents(pocket_index),