mirror of
https://git.ngram.ca/OpenJam/rc-servers
synced 2026-08-23 23:08:52 +00:00
Save CRF rating garage state and consider CRF purchase price #70
This commit is contained in:
@@ -4,8 +4,8 @@ use oj_rc_factory::VehicleFactoryAdapter;
|
||||
const CODE: u8 = 166;
|
||||
|
||||
const SLOT_PARAM_KEY: u8 = 43; // in; int
|
||||
//const FREE_CURRENCY_COST_PARAM_KEY: u8 = 5; // in; int
|
||||
//const PREMIUM_CURRENCY_COST_PARAM_KEY: u8 = 6; // in; int
|
||||
const FREE_CURRENCY_COST_PARAM_KEY: u8 = 5; // in; int
|
||||
const PAID_CURRENCY_COST_PARAM_KEY: u8 = 6; // in; int
|
||||
const FACTORY_ID_PARAM_KEY: u8 = 94; // in; int
|
||||
|
||||
|
||||
@@ -19,32 +19,44 @@ async fn do_handling(params: ParameterTable<()>, user: &crate::UserTy, factory:
|
||||
user_info.new_slot(None).await?.slot_i
|
||||
};
|
||||
if let Some(Typed::Int(factory_id)) = params.remove(&FACTORY_ID_PARAM_KEY) {
|
||||
// TODO charge for robot?
|
||||
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);
|
||||
oj_rc_core::data::error_codes::WebServicesError::DatabaseError as i16
|
||||
})?;
|
||||
if let Some((vehicle_to_copy, vehicle_meta)) = vehicle {
|
||||
// parse cube data for weapon order
|
||||
let mut cursor = std::io::Cursor::new(&vehicle_to_copy.cube_data);
|
||||
let weapons = weapon_order.guess_weapons(&mut cursor);
|
||||
// save to database
|
||||
let to_save = oj_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: weapons,
|
||||
crf_id: Some(factory_id),
|
||||
};
|
||||
user_info.save_slot(to_save, cpu_counter).await?;
|
||||
} else {
|
||||
log::warn!("Failed to retrieve (for copy-construct) non-existent factory vehicle {}", factory_id);
|
||||
return Err(oj_rc_core::data::error_codes::WebServicesError::DatabaseError as i16);
|
||||
if let Some(Typed::Int(free_cost)) = params.remove(&FREE_CURRENCY_COST_PARAM_KEY) {
|
||||
if free_cost < 0 {
|
||||
return Err(oj_rc_core::data::error_codes::WebServicesError::NotEnoughMoney as i16);
|
||||
}
|
||||
if let Some(Typed::Int(paid_cost)) = params.remove(&PAID_CURRENCY_COST_PARAM_KEY) {
|
||||
if paid_cost < 0 {
|
||||
return Err(oj_rc_core::data::error_codes::WebServicesError::NotEnoughMoney as i16);
|
||||
}
|
||||
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);
|
||||
oj_rc_core::data::error_codes::WebServicesError::DatabaseError as i16
|
||||
})?;
|
||||
if let Some((vehicle_to_copy, vehicle_meta)) = vehicle {
|
||||
// parse cube data for weapon order
|
||||
let mut cursor = std::io::Cursor::new(&vehicle_to_copy.cube_data);
|
||||
let weapons = weapon_order.guess_weapons(&mut cursor);
|
||||
// save to database
|
||||
let to_save = oj_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: weapons,
|
||||
crf_id: Some(factory_id),
|
||||
was_rated: Some(false),
|
||||
};
|
||||
user_info.save_slot(to_save, cpu_counter).await?;
|
||||
user_info.currency_debit(oj_rc_core::persist::user::CurrencyType::Free, free_cost as _).await?;
|
||||
if paid_cost > 0 {
|
||||
user_info.currency_debit(oj_rc_core::persist::user::CurrencyType::Paid, paid_cost as _).await?;
|
||||
}
|
||||
} else {
|
||||
log::warn!("Failed to retrieve (for copy-construct) non-existent factory vehicle {}", factory_id);
|
||||
return Err(oj_rc_core::data::error_codes::WebServicesError::DatabaseError as i16);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Ok(params.into())
|
||||
}
|
||||
|
||||
|
||||
@@ -81,6 +81,7 @@ async fn do_save(params: ParameterTable<()>, user: &crate::UserTy, cpu_counter:
|
||||
colour_data: colour_data.vec,
|
||||
weapon_order: weapon_order_filtered,
|
||||
crf_id: None,
|
||||
was_rated: None,
|
||||
};
|
||||
user_info.save_slot(vehicle_data, cpu_counter).await?;
|
||||
let mut params_out = std::collections::HashMap::with_capacity(1);
|
||||
|
||||
Reference in New Issue
Block a user