From 1e565e6dd9e2be0eacd29cfc921b26445f050939 Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Thu, 5 Feb 2026 08:16:54 +0100 Subject: [PATCH] Refactor money change handling in EventsWorker: Updated the logic for applying money changes to use the current money value for calculations, ensuring accurate adjustments. Introduced a new method to retrieve the current money of a user, enhancing error handling and improving the overall clarity of the code. --- YpDaemon/src/worker/events.rs | 51 ++++++++++++++++++----------------- src/worker/events.rs | 51 ++++++++++++++++++----------------- 2 files changed, 54 insertions(+), 48 deletions(-) diff --git a/YpDaemon/src/worker/events.rs b/YpDaemon/src/worker/events.rs index 0a672bf..5876da0 100644 --- a/YpDaemon/src/worker/events.rs +++ b/YpDaemon/src/worker/events.rs @@ -514,13 +514,15 @@ impl EventsWorker { } => { if effect_roll < *probability { let percent_change = rng.gen_range(*min_percent..=*max_percent); - if let Ok(absolute_change) = Self::apply_money_change(&mut conn, user_id, percent_change) { - effect_results.push(json!({ - "type": "money_change", - "percent": percent_change, - "absolute": absolute_change - })); - } + let current_money = Self::get_current_money(&mut conn, user_id).unwrap_or(0.0); + let computed_change = current_money * (percent_change / 100.0); + let absolute_change = Self::apply_money_change(&mut conn, user_id, percent_change) + .unwrap_or(computed_change); + effect_results.push(json!({ + "type": "money_change", + "percent": percent_change, + "absolute": absolute_change + })); } } EventEffect::StorageCapacityChange { @@ -1003,28 +1005,29 @@ impl EventsWorker { // Hilfsfunktionen zum Anwenden von Effekten + /// Liefert das aktuelle Geld des Spielers (für Events, z. B. Anzeige der Diebstahlhöhe). + fn get_current_money(conn: &mut DbConnection, user_id: i32) -> Result { + conn.prepare("get_money", QUERY_GET_MONEY)?; + let rows = conn.execute("get_money", &[&user_id])?; + let current_money: Option = rows + .first() + .and_then(|r| r.get("money")) + .and_then(|v| v.parse::().ok()); + match current_money { + Some(m) => Ok(m), + None => { + eprintln!("[EventsWorker] Spieler {} nicht gefunden", user_id); + Err(DbError::new("Spieler nicht gefunden".to_string())) + } + } + } + fn apply_money_change( conn: &mut DbConnection, user_id: i32, percent_change: f64, ) -> Result { - // Hole aktuelles Geld - conn.prepare("get_money", QUERY_GET_MONEY)?; - let rows = conn.execute("get_money", &[&user_id])?; - - let current_money: Option = rows - .first() - .and_then(|r| r.get("money")) - .and_then(|v| v.parse::().ok()); - - let current_money = match current_money { - Some(m) => m, - None => { - eprintln!("[EventsWorker] Spieler {} nicht gefunden", user_id); - return Err(DbError::new("Spieler nicht gefunden".to_string())); - } - }; - + let current_money = Self::get_current_money(conn, user_id)?; let change = current_money * (percent_change / 100.0); let action = format!("Zufallsereignis: Geldänderung {:.2}%", percent_change); diff --git a/src/worker/events.rs b/src/worker/events.rs index c9dd608..b71679e 100644 --- a/src/worker/events.rs +++ b/src/worker/events.rs @@ -514,13 +514,15 @@ impl EventsWorker { } => { if effect_roll < *probability { let percent_change = rng.gen_range(*min_percent..=*max_percent); - if let Ok(absolute_change) = Self::apply_money_change(&mut conn, user_id, percent_change) { - effect_results.push(json!({ - "type": "money_change", - "percent": percent_change, - "absolute": absolute_change - })); - } + let current_money = Self::get_current_money(&mut conn, user_id).unwrap_or(0.0); + let computed_change = current_money * (percent_change / 100.0); + let absolute_change = Self::apply_money_change(&mut conn, user_id, percent_change) + .unwrap_or(computed_change); + effect_results.push(json!({ + "type": "money_change", + "percent": percent_change, + "absolute": absolute_change + })); } } EventEffect::StorageCapacityChange { @@ -1007,28 +1009,29 @@ impl EventsWorker { // Hilfsfunktionen zum Anwenden von Effekten + /// Liefert das aktuelle Geld des Spielers (für Events, z. B. Anzeige der Diebstahlhöhe). + fn get_current_money(conn: &mut DbConnection, user_id: i32) -> Result { + conn.prepare("get_money", QUERY_GET_MONEY)?; + let rows = conn.execute("get_money", &[&user_id])?; + let current_money: Option = rows + .first() + .and_then(|r| r.get("money")) + .and_then(|v| v.parse::().ok()); + match current_money { + Some(m) => Ok(m), + None => { + eprintln!("[EventsWorker] Spieler {} nicht gefunden", user_id); + Err(DbError::new("Spieler nicht gefunden".to_string())) + } + } + } + fn apply_money_change( conn: &mut DbConnection, user_id: i32, percent_change: f64, ) -> Result { - // Hole aktuelles Geld - conn.prepare("get_money", QUERY_GET_MONEY)?; - let rows = conn.execute("get_money", &[&user_id])?; - - let current_money: Option = rows - .first() - .and_then(|r| r.get("money")) - .and_then(|v| v.parse::().ok()); - - let current_money = match current_money { - Some(m) => m, - None => { - eprintln!("[EventsWorker] Spieler {} nicht gefunden", user_id); - return Err(DbError::new("Spieler nicht gefunden".to_string())); - } - }; - + let current_money = Self::get_current_money(conn, user_id)?; let change = current_money * (percent_change / 100.0); let action = format!("Zufallsereignis: Geldänderung {:.2}%", percent_change);