use thiserror::Error; use crate::entity::gateway::EntityGateway; use crate::entity::character::CharacterEntity; use crate::entity::item::{ItemEntityId, ItemDetail}; use crate::entity::item::tool::ToolType; use crate::entity::item::mag::MagCell; use crate::ship::items::{ItemManager, ClientItemId, CharacterInventory, ConsumedItem}; #[derive(Error, Debug)] #[error("")] pub enum UseItemError { NoCharacter, ItemNotEquipped, InvalidItem, } //pub fn use_tool() pub async fn power_material(entity_gateway: &mut EG, character: &mut CharacterEntity) { character.materials.power += 1; entity_gateway.save_character(character).await; } pub async fn mind_material(entity_gateway: &mut EG, character: &mut CharacterEntity) { character.materials.mind += 1; entity_gateway.save_character(character).await; } pub async fn evade_material(entity_gateway: &mut EG, character: &mut CharacterEntity) { character.materials.evade += 1; entity_gateway.save_character(character).await; } pub async fn def_material(entity_gateway: &mut EG, character: &mut CharacterEntity) { character.materials.def += 1; entity_gateway.save_character(character).await; } pub async fn luck_material(entity_gateway: &mut EG, character: &mut CharacterEntity) { character.materials.luck += 1; entity_gateway.save_character(character).await; } pub async fn hp_material(entity_gateway: &mut EG, character: &mut CharacterEntity) { character.materials.hp += 1; entity_gateway.save_character(character).await; } pub async fn tp_material(entity_gateway: &mut EG, character: &mut CharacterEntity) { character.materials.tp += 1; entity_gateway.save_character(character).await; } async fn mag_cell(entity_gateway: &mut EG, used_cell: &ConsumedItem, inventory: &mut CharacterInventory, mag_cell_type: MagCell) -> Result<(), UseItemError> { let mut mag_handle = inventory.get_equipped_mag_handle().ok_or(UseItemError::ItemNotEquipped)?; let mag_item = mag_handle.item_mut() .ok_or(UseItemError::InvalidItem)?; let actual_mag = mag_item .individual() .ok_or(UseItemError::InvalidItem)? .mag_mut() .ok_or(UseItemError::InvalidItem)?; actual_mag.apply_mag_cell(mag_cell_type); for mag_entity_id in mag_item.entity_ids() { for cell_entity_id in used_cell.entity_ids() { entity_gateway.use_mag_cell(&mag_entity_id, &cell_entity_id).await; } } Ok(()) } pub async fn cell_of_mag_502(entity_gateway: &mut EG, used_cell: &ConsumedItem, inventory: &mut CharacterInventory) -> Result<(), UseItemError> { mag_cell(entity_gateway, used_cell, inventory, MagCell::CellOfMag502).await } pub async fn cell_of_mag_213(entity_gateway: &mut EG, used_cell: &ConsumedItem, inventory: &mut CharacterInventory) -> Result<(), UseItemError> { mag_cell(entity_gateway, used_cell, inventory, MagCell::CellOfMag213).await } pub async fn parts_of_robochao(entity_gateway: &mut EG, used_cell: &ConsumedItem, inventory: &mut CharacterInventory) -> Result<(), UseItemError> { mag_cell(entity_gateway, used_cell, inventory, MagCell::PartsOfRobochao).await } pub async fn heart_of_opaopa(entity_gateway: &mut EG, used_cell: &ConsumedItem, inventory: &mut CharacterInventory) -> Result<(), UseItemError> { mag_cell(entity_gateway, used_cell, inventory, MagCell::HeartOfOpaOpa).await } pub async fn heart_of_pian(entity_gateway: &mut EG, used_cell: &ConsumedItem, inventory: &mut CharacterInventory) -> Result<(), UseItemError> { mag_cell(entity_gateway, used_cell, inventory, MagCell::HeartOfPian).await } pub async fn heart_of_chao(entity_gateway: &mut EG, used_cell: &ConsumedItem, inventory: &mut CharacterInventory) -> Result<(), UseItemError> { mag_cell(entity_gateway, used_cell, inventory, MagCell::HeartOfChao).await } pub async fn heart_of_angel(entity_gateway: &mut EG, used_cell: &ConsumedItem, inventory: &mut CharacterInventory) -> Result<(), UseItemError> { mag_cell(entity_gateway, used_cell, inventory, MagCell::HeartOfAngel).await } pub async fn kit_of_hamburger(entity_gateway: &mut EG, used_cell: &ConsumedItem, inventory: &mut CharacterInventory) -> Result<(), UseItemError> { mag_cell(entity_gateway, used_cell, inventory, MagCell::KitOfHamburger).await } pub async fn panthers_spirit(entity_gateway: &mut EG, used_cell: &ConsumedItem, inventory: &mut CharacterInventory) -> Result<(), UseItemError> { mag_cell(entity_gateway, used_cell, inventory, MagCell::PanthersSpirit).await } pub async fn kit_of_mark3(entity_gateway: &mut EG, used_cell: &ConsumedItem, inventory: &mut CharacterInventory) -> Result<(), UseItemError> { mag_cell(entity_gateway, used_cell, inventory, MagCell::KitOfMark3).await } pub async fn kit_of_master_system(entity_gateway: &mut EG, used_cell: &ConsumedItem, inventory: &mut CharacterInventory) -> Result<(), UseItemError> { mag_cell(entity_gateway, used_cell, inventory, MagCell::KitOfMasterSystem).await } pub async fn kit_of_genesis(entity_gateway: &mut EG, used_cell: &ConsumedItem, inventory: &mut CharacterInventory) -> Result<(), UseItemError> { mag_cell(entity_gateway, used_cell, inventory, MagCell::KitOfGenesis).await } pub async fn kit_of_sega_saturn(entity_gateway: &mut EG, used_cell: &ConsumedItem, inventory: &mut CharacterInventory) -> Result<(), UseItemError> { mag_cell(entity_gateway, used_cell, inventory, MagCell::KitOfSegaSaturn).await } pub async fn kit_of_dreamcast(entity_gateway: &mut EG, used_cell: &ConsumedItem, inventory: &mut CharacterInventory) -> Result<(), UseItemError> { mag_cell(entity_gateway, used_cell, inventory, MagCell::KitOfDreamcast).await } pub async fn tablet(entity_gateway: &mut EG, used_cell: &ConsumedItem, inventory: &mut CharacterInventory) -> Result<(), UseItemError> { mag_cell(entity_gateway, used_cell, inventory, MagCell::Tablet).await } pub async fn dragon_scale(entity_gateway: &mut EG, used_cell: &ConsumedItem, inventory: &mut CharacterInventory) -> Result<(), UseItemError> { mag_cell(entity_gateway, used_cell, inventory, MagCell::DragonScale).await } pub async fn heaven_striker_coat(entity_gateway: &mut EG, used_cell: &ConsumedItem, inventory: &mut CharacterInventory) -> Result<(), UseItemError> { mag_cell(entity_gateway, used_cell, inventory, MagCell::HeavenStrikerCoat).await } pub async fn pioneer_parts(entity_gateway: &mut EG, used_cell: &ConsumedItem, inventory: &mut CharacterInventory) -> Result<(), UseItemError> { mag_cell(entity_gateway, used_cell, inventory, MagCell::PioneerParts).await } pub async fn amities_memo(entity_gateway: &mut EG, used_cell: &ConsumedItem, inventory: &mut CharacterInventory) -> Result<(), UseItemError> { mag_cell(entity_gateway, used_cell, inventory, MagCell::AmitiesMemo).await } pub async fn heart_of_morolian(entity_gateway: &mut EG, used_cell: &ConsumedItem, inventory: &mut CharacterInventory) -> Result<(), UseItemError> { mag_cell(entity_gateway, used_cell, inventory, MagCell::HeartOfMorolian).await } pub async fn rappys_beak(entity_gateway: &mut EG, used_cell: &ConsumedItem, inventory: &mut CharacterInventory) -> Result<(), UseItemError> { mag_cell(entity_gateway, used_cell, inventory, MagCell::RappysBeak).await } pub async fn yahoos_engine(entity_gateway: &mut EG, used_cell: &ConsumedItem, inventory: &mut CharacterInventory) -> Result<(), UseItemError> { mag_cell(entity_gateway, used_cell, inventory, MagCell::YahoosEngine).await } pub async fn d_photon_core(entity_gateway: &mut EG, used_cell: &ConsumedItem, inventory: &mut CharacterInventory) -> Result<(), UseItemError> { mag_cell(entity_gateway, used_cell, inventory, MagCell::DPhotonCore).await } pub async fn liberta_kit(entity_gateway: &mut EG, used_cell: &ConsumedItem, inventory: &mut CharacterInventory) -> Result<(), UseItemError> { mag_cell(entity_gateway, used_cell, inventory, MagCell::LibertaKit).await }