From b6ce6296d4039d2393353b9995b96e36257cb0e9 Mon Sep 17 00:00:00 2001 From: jake Date: Thu, 3 Dec 2020 15:01:41 -0700 Subject: [PATCH] create_item takes generic item rather than floor item --- src/ship/packet/builder/message.rs | 5 +++-- src/ship/packet/handler/direct_message.rs | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/ship/packet/builder/message.rs b/src/ship/packet/builder/message.rs index e57f626..c95f312 100644 --- a/src/ship/packet/builder/message.rs +++ b/src/ship/packet/builder/message.rs @@ -1,5 +1,6 @@ use libpso::packet::messages::*; use libpso::packet::ship::*; +use crate::entity::item; use crate::common::leveltable::CharacterStats; use crate::ship::ship::{ShipError}; use crate::ship::items::{ClientItemId, InventoryItem, StackedFloorItem, FloorItem, CharacterBank}; @@ -26,13 +27,13 @@ pub fn item_drop(client: u8, target: u8, item_drop: &FloorItem) -> Result Result { +pub fn create_item(area_client: AreaClient, item_id: ClientItemId, item: &item::ItemDetail) -> Result { let bytes = item.as_client_bytes(); Ok(CreateItem { client: area_client.local_client.id(), target: 0, item_data: bytes[0..12].try_into()?, - item_id: item.item_id().0, + item_id: item_id.0, item_data2: bytes[12..16].try_into()?, unknown: 0, }) diff --git a/src/ship/packet/handler/direct_message.rs b/src/ship/packet/handler/direct_message.rs index 4e93be7..7337a73 100644 --- a/src/ship/packet/handler/direct_message.rs +++ b/src/ship/packet/handler/direct_message.rs @@ -127,8 +127,10 @@ where let (item, floor_type) = item_manager.get_floor_item_by_id(&client.character, ClientItemId(pickup_item.item_id))?; let remove_item = builder::message::remove_item_from_floor(area_client, &item)?; let create_item = match item { + FloorItem::Individual(individual_floor_item) => Some(builder::message::create_item(area_client, item.item_id(), &individual_floor_item.item)?), + FloorItem::Stacked(stacked_floor_item) => Some(builder::message::create_item(area_client, item.item_id(), &item::ItemDetail::Tool(stacked_floor_item.tool))?), FloorItem::Meseta(_) => None, - _ => Some(builder::message::create_item(area_client, &item)?), + //_ => Some(builder::message::create_item(area_client, &item)?), }; match item_manager.character_picks_up_item(entity_gateway, &mut client.character, ClientItemId(pickup_item.item_id)).await {