diff --git a/server/src/instance.rs b/server/src/instance.rs index 896bb2ca..bba1b5ed 100644 --- a/server/src/instance.rs +++ b/server/src/instance.rs @@ -402,7 +402,7 @@ pub fn instance_join(params: InstanceJoinParams, tx: &mut Transaction, account: let mut player = Player::new(account.id, instance.id, cryps); player.vbox.fill(); - player_create(tx, &player, account)?; + let player = player_create(tx, player, account)?; instance.add_player(player.clone()); @@ -475,7 +475,6 @@ pub fn instance_game_finished(tx: &mut Transaction, game: &Game, instance_id: Uu true => player.add_win(), false => player.add_loss(), }; - println!("{:?}", player); player_update(tx, player, true)?; }, } diff --git a/server/src/player.rs b/server/src/player.rs index 099dfed8..c2efdb9d 100644 --- a/server/src/player.rs +++ b/server/src/player.rs @@ -94,7 +94,7 @@ pub fn player_get(tx: &mut Transaction, account_id: Uuid, instance_id: Uuid) -> return Ok(data); } -pub fn player_create(tx: &mut Transaction, player: &Player, account: &Account) -> Result<(), Error> { +pub fn player_create(tx: &mut Transaction, player: Player, account: &Account) -> Result { let player_bytes = to_vec(&player)?; let query = " @@ -110,7 +110,7 @@ pub fn player_create(tx: &mut Transaction, player: &Player, account: &Account) - println!("wrote player {:} joined instance: {:}", account.name, player.instance); - return Ok(()); + return Ok(player); } pub fn player_update(tx: &mut Transaction, player: Player, ignore_phase: bool) -> Result { @@ -168,14 +168,18 @@ pub fn player_cryps_set(params: PlayerCrypsSetParams, tx: &mut Transaction, acco return Err(err_msg("team size is 3")); } - let mut player = player_get(tx, account.id, Uuid::nil())?; - let cryps = params.cryp_ids .iter() .map(|id| cryp_get(tx, *id, account.id)) .collect::, Error>>()?; - player.cryps = cryps; - - player_update(tx, player, false) + match player_get(tx, account.id, Uuid::nil()) { + Ok(mut p) => { + p.cryps = cryps; + player_update(tx, p, false) + }, + Err(_) => { + return player_create(tx, Player::new(account.id, Uuid::nil(), cryps), &account) + } + } } diff --git a/server/src/rpc.rs b/server/src/rpc.rs index c888fe53..40887e1a 100644 --- a/server/src/rpc.rs +++ b/server/src/rpc.rs @@ -21,7 +21,7 @@ use account::{Account, account_create, account_login, account_from_token, accoun use skill::{Skill}; // use zone::{Zone, zone_create, zone_join, zone_close}; use spec::{Spec}; -use player::{player_state, player_create, player_cryps_set, Player}; +use player::{player_state, player_cryps_set, Player}; use instance::{instance_join, instance_ready}; use vbox::{vbox_accept, vbox_apply, vbox_discard, vbox_combine, vbox_drop}; @@ -163,8 +163,6 @@ impl Rpc { let msg = from_slice::(&data).or(Err(err_msg("invalid params")))?; let account = account_create(msg.params, tx)?; - let player = Player::new(account.id, Uuid::nil(), vec![]); - player_create(tx, &player, &account)?; Ok(RpcResponse { method: "account_create".to_string(), @@ -198,9 +196,6 @@ impl Rpc { let name: String = iter::repeat(()).map(|()| rng.sample(Alphanumeric)).take(8).collect(); cryp_spawn(CrypSpawnParams { name }, tx, &account)?; - let player = Player::new(account.id, Uuid::nil(), vec![]); - player_create(tx, &player, &account)?; - let res = RpcResponse { method: "account_create".to_string(), params: RpcResult::Account(account),