Add random heir fallback logic in EventsWorker: Implement a new SQL query to select a random NPC heir from the same region when no children are available. Enhance error handling to log cases where no heir is found, ensuring better user feedback and maintaining character associations. Update UserCharacterWorker to utilize this new logic for heir assignment.
This commit is contained in:
@@ -45,6 +45,7 @@ use crate::worker::sql::{
|
||||
QUERY_DELETE_CHILD_RELATION,
|
||||
QUERY_DELETE_CHARACTER,
|
||||
QUERY_GET_HEIR,
|
||||
QUERY_GET_RANDOM_HEIR_FROM_REGION,
|
||||
QUERY_SET_CHARACTER_USER,
|
||||
QUERY_CLEAR_CHARACTER_USER,
|
||||
QUERY_GET_CURRENT_MONEY,
|
||||
@@ -1589,18 +1590,28 @@ impl EventsWorker {
|
||||
.and_then(|r| r.get("child_character_id"))
|
||||
.and_then(|v| v.parse::<i32>().ok());
|
||||
|
||||
// Kein Kind als Erbe vorhanden? Dann fallback: zufälliger NPC-Character aus der Region,
|
||||
// Alter 10–14 Tage.
|
||||
let heir_id = match heir_id {
|
||||
Some(id) if id > 0 => id,
|
||||
_ => {
|
||||
// Kein Erbe gefunden - Vermögen geht verloren
|
||||
eprintln!(
|
||||
"[EventsWorker] Kein Erbe für Charakter {} gefunden, Vermögen geht verloren",
|
||||
deceased_character_id
|
||||
);
|
||||
return Ok(());
|
||||
conn.prepare("random_heir_region", QUERY_GET_RANDOM_HEIR_FROM_REGION)?;
|
||||
let rows = conn.execute("random_heir_region", &[&deceased_character_id])?;
|
||||
rows.first()
|
||||
.and_then(|r| r.get("child_character_id"))
|
||||
.and_then(|v| v.parse::<i32>().ok())
|
||||
.unwrap_or(0)
|
||||
}
|
||||
};
|
||||
|
||||
if heir_id <= 0 {
|
||||
eprintln!(
|
||||
"[EventsWorker] Kein Erbe für Charakter {} gefunden (weder Kind noch Fallback in Region). User {} hat danach keinen Character.",
|
||||
deceased_character_id, falukant_user_id
|
||||
);
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
// 2) Wichtig: erst die alte User-Zuordnung am verstorbenen Charakter lösen.
|
||||
// Falls es einen Unique-Constraint auf `character.user_id` gibt, würde das
|
||||
// direkte Setzen am Erben sonst fehlschlagen.
|
||||
|
||||
Reference in New Issue
Block a user