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,7 +514,10 @@ 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);
|
||||||
if let Ok(absolute_change) = Self::apply_money_change(&mut conn, user_id, percent_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!({
|
effect_results.push(json!({
|
||||||
"type": "money_change",
|
"type": "money_change",
|
||||||
"percent": percent_change,
|
"percent": percent_change,
|
||||||
@@ -522,7 +525,6 @@ impl EventsWorker {
|
|||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
EventEffect::StorageCapacityChange {
|
EventEffect::StorageCapacityChange {
|
||||||
probability,
|
probability,
|
||||||
min_percent,
|
min_percent,
|
||||||
@@ -1003,28 +1005,29 @@ impl EventsWorker {
|
|||||||
|
|
||||||
// Hilfsfunktionen zum Anwenden von Effekten
|
// 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(
|
fn apply_money_change(
|
||||||
conn: &mut DbConnection,
|
conn: &mut DbConnection,
|
||||||
user_id: i32,
|
user_id: i32,
|
||||||
percent_change: f64,
|
percent_change: f64,
|
||||||
) -> Result<f64, DbError> {
|
) -> Result<f64, DbError> {
|
||||||
// Hole aktuelles Geld
|
let current_money = Self::get_current_money(conn, user_id)?;
|
||||||
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 change = current_money * (percent_change / 100.0);
|
let change = current_money * (percent_change / 100.0);
|
||||||
let action = format!("Zufallsereignis: Geldänderung {:.2}%", percent_change);
|
let action = format!("Zufallsereignis: Geldänderung {:.2}%", percent_change);
|
||||||
|
|
||||||
|
|||||||
@@ -514,7 +514,10 @@ 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);
|
||||||
if let Ok(absolute_change) = Self::apply_money_change(&mut conn, user_id, percent_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!({
|
effect_results.push(json!({
|
||||||
"type": "money_change",
|
"type": "money_change",
|
||||||
"percent": percent_change,
|
"percent": percent_change,
|
||||||
@@ -522,7 +525,6 @@ impl EventsWorker {
|
|||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
EventEffect::StorageCapacityChange {
|
EventEffect::StorageCapacityChange {
|
||||||
probability,
|
probability,
|
||||||
min_percent,
|
min_percent,
|
||||||
@@ -1007,28 +1009,29 @@ impl EventsWorker {
|
|||||||
|
|
||||||
// Hilfsfunktionen zum Anwenden von Effekten
|
// 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(
|
fn apply_money_change(
|
||||||
conn: &mut DbConnection,
|
conn: &mut DbConnection,
|
||||||
user_id: i32,
|
user_id: i32,
|
||||||
percent_change: f64,
|
percent_change: f64,
|
||||||
) -> Result<f64, DbError> {
|
) -> Result<f64, DbError> {
|
||||||
// Hole aktuelles Geld
|
let current_money = Self::get_current_money(conn, user_id)?;
|
||||||
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 change = current_money * (percent_change / 100.0);
|
let change = current_money * (percent_change / 100.0);
|
||||||
let action = format!("Zufallsereignis: Geldänderung {:.2}%", percent_change);
|
let action = format!("Zufallsereignis: Geldänderung {:.2}%", percent_change);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user