Enhance event effect handling in EventsWorker: Updated money change, storage capacity change, and house quality change methods to return absolute values and percentages. Improved JSON response structure for event effects, enhancing clarity and data accuracy in event processing.

This commit is contained in:
Torsten Schulz (local)
2025-12-08 11:51:10 +01:00
parent 0198bcd603
commit 2948586041

View File

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