clean these functions up a bit
This commit is contained in:
		
							parent
							
								
									4e88f684c5
								
							
						
					
					
						commit
						5be796cb5c
					
				| @ -45,23 +45,19 @@ fn add_floor_item_to_inventory(character: &CharacterEntity) | ||||
|             let mut inventory = item_state.inventory(&character.id)?; | ||||
| 
 | ||||
|             let character_id = character.id; | ||||
|             let transaction = floor_item.with_entity_id(Ok(transaction), |mut transaction: Result<_, ItemStateError>, entity_id| { | ||||
|             let transaction = floor_item.with_entity_id(transaction, |mut transaction, entity_id| { | ||||
|                 async move { | ||||
|                     if let Ok(transaction) = &mut transaction { | ||||
|                     transaction.gateway().add_item_note(&entity_id, ItemNote::Pickup { | ||||
|                         character_id | ||||
|                     }).await?; | ||||
|                     } | ||||
|                     transaction | ||||
|                     Ok(transaction) | ||||
|                 }}).await?; | ||||
| 
 | ||||
|             let mut transaction = floor_item.with_mag(Ok(transaction), |mut transaction: Result<_, ItemStateError>, entity_id, _mag| { | ||||
|             let mut transaction = floor_item.with_mag(transaction, |mut transaction, entity_id, _mag| { | ||||
|                 let character = character.clone(); | ||||
|                 async move { | ||||
|                     if let Ok(transaction) = &mut transaction { | ||||
|                     transaction.gateway().change_mag_owner(&entity_id, &character).await?; | ||||
|                     } | ||||
|                     transaction | ||||
|                     Ok(transaction) | ||||
|                 }}).await?; | ||||
| 
 | ||||
|             let add_result = inventory.add_floor_item(floor_item)?; | ||||
| @ -125,9 +121,8 @@ fn add_inventory_item_to_shared_floor(character_id: CharacterEntityId, map_area: | ||||
| { | ||||
|     move |(mut item_state, transaction), inventory_item| { | ||||
|         Box::pin(async move { | ||||
|             let transaction = inventory_item.with_entity_id(Ok(transaction), |mut transaction: Result<_, ItemStateError>, entity_id| { | ||||
|             let transaction = inventory_item.with_entity_id(transaction, |mut transaction, entity_id| { | ||||
|                 async move { | ||||
|                     if let Ok(transaction) = &mut transaction { | ||||
|                     transaction.gateway().add_item_note(&entity_id, ItemNote::PlayerDrop { | ||||
|                         character_id, | ||||
|                         map_area, | ||||
| @ -135,8 +130,7 @@ fn add_inventory_item_to_shared_floor(character_id: CharacterEntityId, map_area: | ||||
|                         y: drop_position.1, | ||||
|                         z: drop_position.2, | ||||
|                     }).await?; | ||||
|                     } | ||||
|                     transaction | ||||
|                     Ok(transaction) | ||||
|                 }}).await?; | ||||
| 
 | ||||
|             let mut floor = item_state.floor(&character_id)?; | ||||
| @ -376,16 +370,14 @@ fn add_bank_item_to_inventory(character: &CharacterEntity) | ||||
|             let mut inventory = item_state.inventory(&character.id)?; | ||||
| 
 | ||||
|             let character_id = character.id; | ||||
|             let transaction = bank_item.with_entity_id(Ok(transaction), |mut transaction: Result<_, ItemStateError>, entity_id| { | ||||
|             let transaction = bank_item.with_entity_id(transaction, |mut transaction, entity_id| { | ||||
|                 let bank_name = bank_name.clone(); | ||||
|                 async move { | ||||
|                     if let Ok(transaction) = &mut transaction { | ||||
|                     transaction.gateway().add_item_note(&entity_id, ItemNote::Withdraw { | ||||
|                         character_id, | ||||
|                         bank: bank_name, | ||||
|                     }).await?; | ||||
|                     } | ||||
|                     transaction | ||||
|                     Ok(transaction) | ||||
|                 }}).await?; | ||||
| 
 | ||||
|             let inventory_item = InventoryItem { | ||||
| @ -396,13 +388,11 @@ fn add_bank_item_to_inventory(character: &CharacterEntity) | ||||
|                 }, | ||||
|             }; | ||||
| 
 | ||||
|             let mut transaction = inventory_item.with_mag(Ok(transaction), |mut transaction: Result<_, ItemStateError>, entity_id, _mag| { | ||||
|             let mut transaction = inventory_item.with_mag(transaction, |mut transaction, entity_id, _mag| { | ||||
|                 let character = character.clone(); | ||||
|                 async move { | ||||
|                     if let Ok(transaction) = &mut transaction { | ||||
|                     transaction.gateway().change_mag_owner(&entity_id, &character).await?; | ||||
|                     } | ||||
|                     transaction | ||||
|                     Ok(transaction) | ||||
|                 }}).await?; | ||||
| 
 | ||||
|             inventory.add_item(inventory_item.clone())?; | ||||
| @ -444,16 +434,14 @@ fn add_inventory_item_to_bank(character_id: CharacterEntityId) | ||||
|         Box::pin(async move { | ||||
|             let mut bank = item_state.bank(&character_id)?; | ||||
|             let bank_name = bank.name.clone(); | ||||
|             let mut transaction = inventory_item.with_entity_id(Ok(transaction), move |mut transaction: Result<_, ItemStateError>, entity_id| { | ||||
|             let mut transaction = inventory_item.with_entity_id(transaction, move |mut transaction, entity_id| { | ||||
|                 let bank_name = bank_name.clone(); | ||||
|                 async move { | ||||
|                     if let Ok(transaction) = &mut transaction { | ||||
|                     transaction.gateway().add_item_note(&entity_id, ItemNote::Deposit { | ||||
|                         character_id, | ||||
|                         bank: bank_name, | ||||
|                     }).await?; | ||||
|                     } | ||||
|                     transaction | ||||
|                     Ok(transaction) | ||||
|                 }}).await?; | ||||
| 
 | ||||
|             bank.add_inventory_item(inventory_item)?; | ||||
| @ -609,12 +597,10 @@ fn use_consumed_item(character: CharacterEntity) | ||||
|     move |(mut item_state, mut transaction), inventory_item| { | ||||
|         let mut character = character.clone(); | ||||
|         Box::pin(async move { | ||||
|             let mut transaction = inventory_item.with_entity_id(Ok(transaction), |mut transaction: Result<_, ItemStateError>, entity_id| { | ||||
|             let mut transaction = inventory_item.with_entity_id(transaction, |mut transaction, entity_id| { | ||||
|                 async move { | ||||
|                     if let Ok(transaction) = &mut transaction { | ||||
|                     transaction.gateway().add_item_note(&entity_id, ItemNote::Consumed).await?; | ||||
|                     } | ||||
|                     transaction | ||||
|                     Ok(transaction) | ||||
|                 }}).await?; | ||||
| 
 | ||||
|             apply_item(&mut item_state, transaction.gateway(), &mut character, inventory_item).await?; | ||||
|  | ||||
| @ -268,36 +268,36 @@ pub struct InventoryItem { | ||||
| } | ||||
| 
 | ||||
| impl InventoryItem { | ||||
|     pub async fn with_entity_id<F, Fut, T>(&self, mut param: T, mut func: F) -> T | ||||
|     pub async fn with_entity_id<F, Fut, T>(&self, mut param: T, mut func: F) -> Result<T, ItemStateError> | ||||
|     where | ||||
|         F: FnMut(T, ItemEntityId) -> Fut, | ||||
|         Fut: Future<Output=T>, | ||||
|         Fut: Future<Output=Result<T, ItemStateError>>, | ||||
|     { | ||||
|         match &self.item { | ||||
|             InventoryItemDetail::Individual(individual_item) => { | ||||
|                 param = func(param, individual_item.entity_id).await; | ||||
|                 param = func(param, individual_item.entity_id).await?; | ||||
|             }, | ||||
|             InventoryItemDetail::Stacked(stacked_item) => { | ||||
|                 for entity_id in &stacked_item.entity_ids { | ||||
|                     param = func(param, *entity_id).await; | ||||
|                     param = func(param, *entity_id).await?; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         param | ||||
|         Ok(param) | ||||
|     } | ||||
| 
 | ||||
|     pub async fn with_mag<F, Fut, T>(&self, mut param: T, mut func: F) -> T | ||||
|     pub async fn with_mag<F, Fut, T>(&self, mut param: T, mut func: F) -> Result<T, ItemStateError> | ||||
|     where | ||||
|         F: FnMut(T, ItemEntityId, Mag) -> Fut, | ||||
|         Fut: Future<Output=T>, | ||||
|         Fut: Future<Output=Result<T, ItemStateError>>, | ||||
|     { | ||||
|         if let InventoryItemDetail::Individual(individual_item) = &self.item { | ||||
|             if let ItemDetail::Mag(mag) = &individual_item.item { | ||||
|                 param = func(param, individual_item.entity_id, mag.clone()).await; | ||||
|                 param = func(param, individual_item.entity_id, mag.clone()).await?; | ||||
|             } | ||||
|         } | ||||
|         param | ||||
|         Ok(param) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| @ -344,23 +344,22 @@ pub struct BankItem { | ||||
| } | ||||
| 
 | ||||
| impl BankItem { | ||||
|     pub async fn with_entity_id<F, Fut, T>(&self, mut param: T, mut func: F) -> T | ||||
|     pub async fn with_entity_id<F, Fut, T>(&self, mut param: T, mut func: F) -> Result<T, ItemStateError> | ||||
|     where | ||||
|         F: FnMut(T, ItemEntityId) -> Fut, | ||||
|         Fut: Future<Output=T>, | ||||
|         Fut: Future<Output=Result<T, ItemStateError>>, | ||||
|     { | ||||
|         match &self.item { | ||||
|             BankItemDetail::Individual(individual_item) => { | ||||
|                 param = func(param, individual_item.entity_id).await; | ||||
|                 param = func(param, individual_item.entity_id).await?; | ||||
|             }, | ||||
|             BankItemDetail::Stacked(stacked_item) => { | ||||
|                 for entity_id in &stacked_item.entity_ids { | ||||
|                     param = func(param, *entity_id).await; | ||||
|                     param = func(param, *entity_id).await?; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         param | ||||
|         Ok(param) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| @ -391,37 +390,37 @@ pub struct FloorItem { | ||||
| } | ||||
| 
 | ||||
| impl FloorItem { | ||||
|     pub async fn with_entity_id<F, Fut, T>(&self, mut param: T, mut func: F) -> T | ||||
|     pub async fn with_entity_id<F, Fut, T>(&self, mut param: T, mut func: F) -> Result<T, ItemStateError> | ||||
|     where | ||||
|         F: FnMut(T, ItemEntityId) -> Fut, | ||||
|         Fut: Future<Output=T>, | ||||
|         Fut: Future<Output=Result<T, ItemStateError>>, | ||||
|     { | ||||
|         match &self.item { | ||||
|             FloorItemDetail::Individual(individual_item) => { | ||||
|                 param = func(param, individual_item.entity_id).await; | ||||
|                 param = func(param, individual_item.entity_id).await?; | ||||
|             }, | ||||
|             FloorItemDetail::Stacked(stacked_item) => { | ||||
|                 for entity_id in &stacked_item.entity_ids { | ||||
|                     param = func(param, *entity_id).await; | ||||
|                     param = func(param, *entity_id).await?; | ||||
|                 } | ||||
|             }, | ||||
|             FloorItemDetail::Meseta(_meseta) => {}, | ||||
|         } | ||||
| 
 | ||||
|         param | ||||
|         Ok(param) | ||||
|     } | ||||
| 
 | ||||
|     pub async fn with_mag<F, Fut, T>(&self, mut param: T, mut func: F) -> T | ||||
|     pub async fn with_mag<F, Fut, T>(&self, mut param: T, mut func: F) -> Result<T, ItemStateError> | ||||
|     where | ||||
|         F: FnMut(T, ItemEntityId, Mag) -> Fut, | ||||
|         Fut: Future<Output=T>, | ||||
|         Fut: Future<Output=Result<T, ItemStateError>>, | ||||
|     { | ||||
|         if let FloorItemDetail::Individual(individual_item) = &self.item { | ||||
|             if let ItemDetail::Mag(mag) = &individual_item.item { | ||||
|                 param = func(param, individual_item.entity_id, mag.clone()).await; | ||||
|                 param = func(param, individual_item.entity_id, mag.clone()).await?; | ||||
|             } | ||||
|         } | ||||
|         param | ||||
|         Ok(param) | ||||
|     } | ||||
| 
 | ||||
|     pub fn as_client_bytes(&self) -> [u8; 16] { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user