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