implement rest of mag cells
This commit is contained in:
		
							parent
							
								
									d567c50216
								
							
						
					
					
						commit
						acd4e57d1d
					
				| @ -38,6 +38,7 @@ pub enum ItemManagerError { | ||||
|     InventoryItemConsumeError(#[from] InventoryItemConsumeError), | ||||
|     BankFull, | ||||
|     WrongItemType(ClientItemId), | ||||
|     UseItemError(#[from] use_tool::UseItemError), | ||||
| } | ||||
| 
 | ||||
| pub struct ItemManager { | ||||
| @ -673,7 +674,76 @@ impl ItemManager { | ||||
|                         use_tool::tp_material(entity_gateway, character).await; | ||||
|                     }, | ||||
|                     ToolType::CellOfMag502 => { | ||||
|                         use_tool::cell_of_mag_502(entity_gateway, &used_item, inventory).await; | ||||
|                         use_tool::cell_of_mag_502(entity_gateway, &used_item, inventory).await?; | ||||
|                     }, | ||||
|                     ToolType::CellOfMag213 => { | ||||
|                         use_tool::cell_of_mag_213(entity_gateway, &used_item, inventory).await?; | ||||
|                     }, | ||||
|                     ToolType::PartsOfRobochao => { | ||||
|                         use_tool::parts_of_robochao(entity_gateway, &used_item, inventory).await?; | ||||
|                     }, | ||||
|                     ToolType::HeartOfOpaOpa => { | ||||
|                         use_tool::heart_of_opaopa(entity_gateway, &used_item, inventory).await?; | ||||
|                     }, | ||||
|                     ToolType::HeartOfPian => { | ||||
|                         use_tool::heart_of_pian(entity_gateway, &used_item, inventory).await?; | ||||
|                     }, | ||||
|                     ToolType::HeartOfChao=> { | ||||
|                         use_tool::heart_of_chao(entity_gateway, &used_item, inventory).await?; | ||||
|                     }, | ||||
|                     ToolType::HeartOfAngel => { | ||||
|                         use_tool::heart_of_angel(entity_gateway, &used_item, inventory).await?; | ||||
|                     }, | ||||
|                     ToolType::KitOfHamburger => { | ||||
|                         use_tool::kit_of_hamburger(entity_gateway, &used_item, inventory).await?; | ||||
|                     }, | ||||
|                     ToolType::PanthersSpirit => { | ||||
|                         use_tool::panthers_spirit(entity_gateway, &used_item, inventory).await?; | ||||
|                     }, | ||||
|                     ToolType::KitOfMark3 => { | ||||
|                         use_tool::kit_of_mark3(entity_gateway, &used_item, inventory).await?; | ||||
|                     }, | ||||
|                     ToolType::KitOfMasterSystem=> { | ||||
|                         use_tool::kit_of_master_system(entity_gateway, &used_item, inventory).await?; | ||||
|                     }, | ||||
|                     ToolType::KitOfGenesis => { | ||||
|                         use_tool::kit_of_genesis(entity_gateway, &used_item, inventory).await?; | ||||
|                     }, | ||||
|                     ToolType::KitOfSegaSaturn => { | ||||
|                         use_tool::kit_of_sega_saturn(entity_gateway, &used_item, inventory).await?; | ||||
|                     }, | ||||
|                     ToolType::KitOfDreamcast => { | ||||
|                         use_tool::kit_of_dreamcast(entity_gateway, &used_item, inventory).await?; | ||||
|                     }, | ||||
|                     ToolType::Tablet => { | ||||
|                         use_tool::tablet(entity_gateway, &used_item, inventory).await?; | ||||
|                     }, | ||||
|                     ToolType::DragonScale => { | ||||
|                         use_tool::dragon_scale(entity_gateway, &used_item, inventory).await?; | ||||
|                     }, | ||||
|                     ToolType::HeavenStrikerCoat => { | ||||
|                         use_tool::heaven_striker_coat(entity_gateway, &used_item, inventory).await?; | ||||
|                     }, | ||||
|                     ToolType::PioneerParts => { | ||||
|                         use_tool::pioneer_parts(entity_gateway, &used_item, inventory).await?; | ||||
|                     }, | ||||
|                     ToolType::AmitiesMemo => { | ||||
|                         use_tool::amities_memo(entity_gateway, &used_item, inventory).await?; | ||||
|                     }, | ||||
|                     ToolType::HeartOfMorolian => { | ||||
|                         use_tool::heart_of_morolian(entity_gateway, &used_item, inventory).await?; | ||||
|                     }, | ||||
|                     ToolType::RappysBeak => { | ||||
|                         use_tool::rappys_beak(entity_gateway, &used_item, inventory).await?; | ||||
|                     }, | ||||
|                     ToolType::YahoosEngine => { | ||||
|                         use_tool::yahoos_engine(entity_gateway, &used_item, inventory).await?; | ||||
|                     }, | ||||
|                     ToolType::DPhotonCore => { | ||||
|                         use_tool::d_photon_core(entity_gateway, &used_item, inventory).await?; | ||||
|                     }, | ||||
|                     ToolType::LibertaKit => { | ||||
|                         use_tool::liberta_kit(entity_gateway, &used_item, inventory).await?; | ||||
|                     }, | ||||
|                     _ => {} | ||||
|                 } | ||||
|  | ||||
| @ -59,10 +59,6 @@ pub async fn tp_material<EG: EntityGateway>(entity_gateway: &mut EG, character: | ||||
|     entity_gateway.save_character(character).await; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| async fn mag_cell<EG: EntityGateway>(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() | ||||
| @ -82,8 +78,98 @@ async fn mag_cell<EG: EntityGateway>(entity_gateway: &mut EG, used_cell: &Consum | ||||
|     Ok(()) | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| pub async fn cell_of_mag_502<EG: EntityGateway>(entity_gateway: &mut EG, used_cell: &ConsumedItem, inventory: &mut CharacterInventory) -> Result<(), UseItemError> { | ||||
|     println!("used a 502!"); | ||||
|     mag_cell(entity_gateway, used_cell, inventory, MagCell::CellOfMag502).await | ||||
| } | ||||
| 
 | ||||
| pub async fn cell_of_mag_213<EG: EntityGateway>(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<EG: EntityGateway>(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<EG: EntityGateway>(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<EG: EntityGateway>(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<EG: EntityGateway>(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<EG: EntityGateway>(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<EG: EntityGateway>(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<EG: EntityGateway>(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<EG: EntityGateway>(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<EG: EntityGateway>(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<EG: EntityGateway>(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<EG: EntityGateway>(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<EG: EntityGateway>(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<EG: EntityGateway>(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<EG: EntityGateway>(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<EG: EntityGateway>(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<EG: EntityGateway>(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<EG: EntityGateway>(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<EG: EntityGateway>(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<EG: EntityGateway>(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<EG: EntityGateway>(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<EG: EntityGateway>(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<EG: EntityGateway>(entity_gateway: &mut EG, used_cell: &ConsumedItem, inventory: &mut CharacterInventory) -> Result<(), UseItemError> { | ||||
|     mag_cell(entity_gateway, used_cell, inventory, MagCell::LibertaKit).await | ||||
| } | ||||
|  | ||||
| @ -138,3 +138,73 @@ async fn test_mag_change_owner() { | ||||
|         _ => panic!() | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| #[async_std::test] | ||||
| async fn test_mag_cell() { | ||||
|     let mut entity_gateway = InMemoryGateway::new(); | ||||
| 
 | ||||
|     let (_user1, char1) = new_user_character(&mut entity_gateway, "a1", "a").await; | ||||
| 
 | ||||
|     let mag = entity_gateway.create_item( | ||||
|         item::NewItemEntity { | ||||
|             item: item::ItemDetail::Mag( | ||||
|                 item::mag::Mag::baby_mag(0) | ||||
|             ), | ||||
|             location: item::ItemLocation::Inventory { | ||||
|                 character_id: char1.id, | ||||
|                 slot: 0, | ||||
|                 equipped: true, | ||||
|             } | ||||
|         }).await.unwrap(); | ||||
| 
 | ||||
|     for _ in 0..1000 { | ||||
|         let fed_tool = entity_gateway.create_item( | ||||
|             item::NewItemEntity { | ||||
|                 item: item::ItemDetail::Tool ( | ||||
|                     item::tool::Tool { | ||||
|                         tool: item::tool::ToolType::Monomate, | ||||
|                     } | ||||
|                 ), | ||||
|                 location: item::ItemLocation::FedToMag { | ||||
|                     mag: mag.id, | ||||
|                 } | ||||
|             }).await.unwrap(); | ||||
|         entity_gateway.feed_mag(&mag.id, &fed_tool.id).await; | ||||
|     } | ||||
|     entity_gateway.create_item( | ||||
|         item::NewItemEntity { | ||||
|             item: item::ItemDetail::Tool( | ||||
|                 item::tool::Tool { | ||||
|                     tool: item::tool::ToolType::CellOfMag502, | ||||
|                 } | ||||
|             ), | ||||
|             location: item::ItemLocation::Inventory { | ||||
|                 character_id: char1.id, | ||||
|                 slot: 1, | ||||
|                 equipped: false, | ||||
|             } | ||||
|         }).await; | ||||
| 
 | ||||
|     let mut ship = ShipServerState::builder() | ||||
|         .gateway(entity_gateway.clone()) | ||||
|         .build(); | ||||
|     log_in_char(&mut ship, ClientId(1), "a1", "a").await; | ||||
|     join_lobby(&mut ship, ClientId(1)).await; | ||||
|     create_room(&mut ship, ClientId(1), "room", "").await; | ||||
| 
 | ||||
|     ship.handle(ClientId(1), &RecvShipPacket::Message(Message::new(GameMessage::PlayerUseItem(PlayerUseItem { | ||||
|         client: 0, | ||||
|         target: 0, | ||||
|         item_id: 0x10001, | ||||
|     })))).await.unwrap().for_each(drop); | ||||
| 
 | ||||
|     let p1_items = entity_gateway.get_items_by_character(&char1).await; | ||||
|     let mag = p1_items.get(0).unwrap(); | ||||
|     match &mag.item { | ||||
|         item::ItemDetail::Mag(mag) => { | ||||
|             assert!(mag.mag == item::mag::MagType::Soniti); | ||||
|         } | ||||
|         _ => panic!() | ||||
|     } | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user