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.
This commit is contained in:
@@ -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<f64, DbError> {
|
||||
conn.prepare("get_money", QUERY_GET_MONEY)?;
|
||||
let rows = conn.execute("get_money", &[&user_id])?;
|
||||
let current_money: Option<f64> = rows
|
||||
.first()
|
||||
.and_then(|r| r.get("money"))
|
||||
.and_then(|v| v.parse::<f64>().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<f64, DbError> {
|
||||
// Hole aktuelles Geld
|
||||
conn.prepare("get_money", QUERY_GET_MONEY)?;
|
||||
let rows = conn.execute("get_money", &[&user_id])?;
|
||||
|
||||
let current_money: Option<f64> = rows
|
||||
.first()
|
||||
.and_then(|r| r.get("money"))
|
||||
.and_then(|v| v.parse::<f64>().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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user