From d9f1fe513e6f7696809d3a9b4d44ca485fe99c97 Mon Sep 17 00:00:00 2001 From: salmonik Date: Thu, 29 Oct 2026 17:18:34 +0100 Subject: v2.1.0: add European roulette with split bets and wheel animation --- src/server/core.rs | 77 +++++++++++++++++++++++++++++++++++------------------- 1 file changed, 50 insertions(+), 27 deletions(-) (limited to 'src/server/core.rs') diff --git a/src/server/core.rs b/src/server/core.rs index 7231577..2ce8b2b 100644 --- a/src/server/core.rs +++ b/src/server/core.rs @@ -85,11 +85,11 @@ impl ServerCore { } } "PLAY_START" => { - if parts.len() != 3 { - "ERROR Invalid PLAY_START format. Usage: PLAY_START " + if parts.len() != 3 && parts.len() != 4 { + "ERROR Invalid PLAY_START format. Usage: PLAY_START [payload]" .to_string() } else { - self.handle_play_start(state, parts[1], parts[2]) + self.handle_play_start(state, parts[1], parts[2], parts.get(3).copied()) } } "REGISTER" => { @@ -187,6 +187,7 @@ impl ServerCore { state: &ConnectionState, game_type: &str, bet_amount_str: &str, + payload: Option<&str>, ) -> String { let Some(user) = state.user.as_deref() else { return "ERROR Not logged in".to_string(); @@ -216,7 +217,8 @@ impl ServerCore { } let game_state = game.prepare_state(user, bet_amount as u64); - let new_state = match game.process_action(&game_state, "spin", &[]) { + let params: Vec<&str> = payload.into_iter().collect(); + let new_state = match game.process_action(&game_state, "spin", ¶ms) { Ok(state) => state, Err(error) => return game_error(error), }; @@ -239,26 +241,6 @@ impl ServerCore { } }; - let reels = result - .result_data - .get("reels") - .cloned() - .unwrap_or_default(); - let win_type = result - .result_data - .get("win_type") - .cloned() - .unwrap_or_default(); - let win_lines = result - .result_data - .get("win_lines") - .cloned() - .unwrap_or_else(|| "-".to_string()); - let win_cells = result - .result_data - .get("win_cells") - .cloned() - .unwrap_or_else(|| "-".to_string()); let details = serde_json::to_string(&result.result_data).unwrap_or_else(|_| "{}".to_string()); @@ -273,9 +255,50 @@ impl ServerCore { ) { Ok(new_balance) => { let _ = self.sessions.remove_session(&session_id); - format!( - "GAME_RESULT {session_id} {winnings} {bet_amount} {new_balance} {reels} {win_type} {win_lines} {win_cells}" - ) + if game_type == "roulette" { + let number = result + .result_data + .get("number") + .cloned() + .unwrap_or_default(); + let color = result + .result_data + .get("color") + .cloned() + .unwrap_or_default(); + let bets = result + .result_data + .get("bets") + .cloned() + .unwrap_or_else(|| "{}".to_string()); + format!( + "ROULETTE_RESULT {session_id} {winnings} {bet_amount} {new_balance} {number} {color} {bets}" + ) + } else { + let reels = result + .result_data + .get("reels") + .cloned() + .unwrap_or_default(); + let win_type = result + .result_data + .get("win_type") + .cloned() + .unwrap_or_default(); + let win_lines = result + .result_data + .get("win_lines") + .cloned() + .unwrap_or_else(|| "-".to_string()); + let win_cells = result + .result_data + .get("win_cells") + .cloned() + .unwrap_or_else(|| "-".to_string()); + format!( + "GAME_RESULT {session_id} {winnings} {bet_amount} {new_balance} {reels} {win_type} {win_lines} {win_cells}" + ) + } } Err(error) => { let _ = self.sessions.remove_session(&session_id); -- cgit v1.2.3