diff --git a/src/worker/events.rs b/src/worker/events.rs index a433165..43c5b88 100644 --- a/src/worker/events.rs +++ b/src/worker/events.rs @@ -450,11 +450,13 @@ impl EventsWorker { } => { if effect_roll < *probability { let percent_change = rng.gen_range(*min_percent..=*max_percent); - Self::apply_money_change(&mut conn, user_id, percent_change)?; - effect_results.push(json!({ - "type": "money_change", - "percent": percent_change - })); + 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 + })); + } } } EventEffect::StorageCapacityChange { @@ -829,7 +831,7 @@ impl EventsWorker { max_percent, } => { if effect_roll < *probability { - if let Ok(affected_stocks) = Self::apply_regional_storage_capacity_change( + if let Ok((affected_stocks, percent_change)) = Self::apply_regional_storage_capacity_change( &mut conn, region_id, *min_percent, @@ -838,6 +840,7 @@ impl EventsWorker { ) { effect_results.push(json!({ "type": "storage_capacity_change", + "percent": percent_change, "affected_stocks": affected_stocks, })); } @@ -849,7 +852,7 @@ impl EventsWorker { max_change, } => { if effect_roll < *probability { - if let Ok(affected_houses) = Self::apply_regional_house_quality_change( + if let Ok((affected_houses, quality_change)) = Self::apply_regional_house_quality_change( &mut conn, region_id, *min_change, @@ -858,6 +861,7 @@ impl EventsWorker { ) { effect_results.push(json!({ "type": "house_quality_change", + "change": quality_change, "affected_houses": affected_houses, })); } @@ -927,7 +931,7 @@ impl EventsWorker { conn: &mut DbConnection, user_id: i32, percent_change: f64, - ) -> Result<(), DbError> { + ) -> Result { // Hole aktuelles Geld const QUERY_GET_MONEY: &str = r#" SELECT money @@ -947,7 +951,7 @@ impl EventsWorker { Some(m) => m, None => { eprintln!("[EventsWorker] Spieler {} nicht gefunden", user_id); - return Ok(()); + return Err(DbError::new("Spieler nicht gefunden".to_string())); } }; @@ -962,7 +966,7 @@ impl EventsWorker { ); let _ = conn.query(&sql)?; - Ok(()) + Ok(change) } fn apply_storage_capacity_change( @@ -1034,7 +1038,7 @@ impl EventsWorker { min_percent: f64, max_percent: f64, rng: &mut impl Rng, - ) -> Result { + ) -> Result<(i32, f64), DbError> { // Hole alle Stocks in der Region const QUERY_GET_REGION_STOCKS: &str = r#" SELECT s.id AS stock_id, s.quantity AS current_capacity @@ -1051,7 +1055,7 @@ impl EventsWorker { "[EventsWorker] Keine Stocks in Region {} gefunden", region_id ); - return Ok(0); + return Ok((0, 0.0)); } // Berechne die prozentuale Änderung @@ -1093,7 +1097,7 @@ impl EventsWorker { region_id, percent_change, affected_stocks ); - Ok(affected_stocks) + Ok((affected_stocks, percent_change)) } fn apply_regional_house_quality_change( @@ -1102,7 +1106,7 @@ impl EventsWorker { min_change: i32, max_change: i32, rng: &mut impl Rng, - ) -> Result { + ) -> Result<(i32, i32), DbError> { // Hole alle Häuser in der Region const QUERY_GET_REGION_HOUSES: &str = r#" SELECT uh.id AS house_id, @@ -1128,7 +1132,7 @@ impl EventsWorker { "[EventsWorker] Keine Häuser in Region {} gefunden", region_id ); - return Ok(0); + return Ok((0, 0)); } // Berechne die Änderung @@ -1166,7 +1170,7 @@ impl EventsWorker { region_id, quality_change, affected_houses ); - Ok(affected_houses) + Ok((affected_houses, quality_change)) } fn apply_weather_change(