From 828eb472701af16b7bd913111273b62d22ea3627 Mon Sep 17 00:00:00 2001 From: salmonik Date: Mon, 24 Aug 2026 17:36:19 +0200 Subject: Fix critical game bugs: payout, sessions, balance type, render_lines; add AGENTS.md and regression tests --- src/bin/server/games/slots.rs | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) (limited to 'src/bin/server/games/slots.rs') diff --git a/src/bin/server/games/slots.rs b/src/bin/server/games/slots.rs index d84e21f..3d285ef 100644 --- a/src/bin/server/games/slots.rs +++ b/src/bin/server/games/slots.rs @@ -36,23 +36,25 @@ impl SlotsGame { .collect() } - fn calculate_payout(&self, reels: &[char], bet: u64) -> u64 { + pub fn calculate_payout(&self, reels: &[char], bet: u64) -> u64 { let reel_string: String = reels.iter().collect(); if let Some(&multiplier) = self.payouts.get(&reel_string) { return bet * multiplier; } - for i in 0..2 { - if reels[i] == reels[i + 1] { - let two_of_kind = format!("{}{}", reels[i], reels[i]); + // Check all three pairs including non-adjacent (e.g. [C,D,C]) + let pairs: [(usize, usize); 3] = [(0, 1), (1, 2), (0, 2)]; + let mut best: u64 = 0; + for &(a, b) in &pairs { + if reels[a] == reels[b] { + let two_of_kind = format!("{}{}", reels[a], reels[a]); if let Some(&multiplier) = self.payouts.get(&two_of_kind) { - return bet * multiplier; + best = best.max(bet * multiplier); } } } - - 0 + best } } @@ -108,11 +110,8 @@ impl Game for SlotsGame { new_data.insert("reels".to_string(), reel_string.clone()); new_data.insert("status".to_string(), "spun".to_string()); - let winnings = self.calculate_payout(&reels, state.bet_amount); - new_data.insert("winnings".to_string(), winnings.to_string()); - let is_jackpot = reels[0] == reels[1] && reels[1] == reels[2]; - let is_two = reels[0] == reels[1] || reels[1] == reels[2]; + let is_two = reels[0] == reels[1] || reels[1] == reels[2] || reels[0] == reels[2]; new_data.insert( "win_type".to_string(), if is_jackpot { -- cgit v1.2.3