1
0
mirror of https://git.ngram.ca/OpenJam/rc-servers synced 2026-08-23 23:08:52 +00:00

Populate garage data from factory purchase better #6

This commit is contained in:
NG (Graham)
2025-05-18 16:55:12 -04:00
parent 3f1438c068
commit 49781d35b2
8 changed files with 49 additions and 14 deletions

View File

@@ -20,16 +20,18 @@ async fn do_handling(params: ParameterTable<()>, user: &crate::UserTy, factory:
};
if let Some(Typed::Int(factory_id)) = params.remove(&FACTORY_ID_PARAM_KEY) {
// TODO charge for robot?
let vehicle_to_copy = factory.vehicle(factory_id as _).await.map_err(|e| {
let vehicle = factory.vehicle(factory_id as _).await.map_err(|e| {
log::error!("Failed to retrieve vehicle {} (for copy-construct) from factory: {}", factory_id, e);
rc_core::data::error_codes::WebServicesError::DatabaseError as i16
})?;
if let Some(vehicle_to_copy) = vehicle_to_copy {
if let Some((vehicle_to_copy, vehicle_meta)) = vehicle {
let to_save = rc_core::persist::user::VehicleData {
name: Some(vehicle_meta.name),
slot,
robot_data: vehicle_to_copy.cube_data,
colour_data: vehicle_to_copy.colour_data,
weapon_order: Vec::default(), // FIXME calculate this somehow? Or maybe get the factory adapter to calculate this
crf_id: Some(factory_id),
};
user_info.save_slot(to_save).await?;
} else {

View File

@@ -15,7 +15,7 @@ async fn do_handling(params: ParameterTable<()>, _user: &crate::UserTy, factory:
rc_core::data::error_codes::WebServicesError::DatabaseError as i16
})?;
if let Some(vehicle) = vehicle {
let vehicle_data = crate::data::crf::ItemData::from(vehicle);
let vehicle_data = crate::data::crf::ItemData::from(vehicle.0);
params.insert(DATA_PARAM_KEY, vehicle_data.as_transmissible());
} else {
log::warn!("Failed to retrieve non-existent factory vehicle {}", id);

View File

@@ -73,10 +73,12 @@ async fn do_save(params: ParameterTable<()>, user: &crate::UserTy) -> Result<Par
let weapon_order_filtered: Vec<_> = weapon_order.items.into_iter().filter_map(|ty| if let Typed::Int(i) = ty { Some(i) } else { None }).collect();
let user_info = user.user()?;
let vehicle_data = rc_core::persist::user::VehicleData {
name: None,
slot: slot_index,
robot_data: robot_data.vec,
colour_data: colour_data.vec,
weapon_order: weapon_order_filtered,
crf_id: None,
};
user_info.save_slot(vehicle_data).await?;
let mut params_out = std::collections::HashMap::with_capacity(1);