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:
Torsten Schulz (local)
2026-01-07 10:14:24 +01:00
parent b7eafe28a1
commit f96e474f32
3 changed files with 76 additions and 8 deletions

View File

@@ -1351,6 +1351,31 @@ pub const QUERY_RANDOM_HEIR: &str = r#"
chosen.child_character_id;
"#;
// Fallback-Erbe: Wenn ein Spieler-Character ohne Kinder stirbt, suchen wir einen zufälligen
// NPC-Character in derselben Region (Alter 1014 Tage) und übergeben ihm die user_id.
pub const QUERY_GET_RANDOM_HEIR_FROM_REGION: &str = r#"
SELECT ch.id AS child_character_id
FROM falukant_data.character ch
WHERE ch.user_id IS NULL
AND ch.health > 0
AND ch.id <> $1
AND ch.region_id = (
SELECT region_id
FROM falukant_data.character
WHERE id = $1
)
-- Alter zwischen 10 und 14 Tagen: birthdate in [now-14d, now-10d]
AND ch.birthdate <= NOW() - INTERVAL '10 days'
AND ch.birthdate >= NOW() - INTERVAL '14 days'
AND ch.title_of_nobility = (
SELECT id
FROM falukant_type.title
WHERE label_tr = 'noncivil'
)
ORDER BY RANDOM()
LIMIT 1;
"#;
pub const QUERY_UPDATE_USER_MONEY: &str = r#"
UPDATE falukant_data.falukant_user
SET money = $1,
@@ -1600,8 +1625,16 @@ pub const QUERY_GET_FINISHED_PRODUCTIONS: &str = r#"
ON p.product_id = pr.id
JOIN falukant_data.branch br
ON p.branch_id = br.id
JOIN falukant_data.character c
ON c.user_id = br.falukant_user_id
-- Es kann vorkommen, dass ein User temporär keinen zugeordneten Character hat
-- (z.B. nach Tod/Erbe). Produktionen sollen trotzdem abschließen.
-- LATERAL verhindert Duplikate, falls ein User mehrere Characters hat.
LEFT JOIN LATERAL (
SELECT c.id, c.user_id
FROM falukant_data.character c
WHERE c.user_id = br.falukant_user_id
ORDER BY c.updated_at DESC NULLS LAST, c.id DESC
LIMIT 1
) c ON TRUE
LEFT JOIN falukant_data.knowledge k
ON p.product_id = k.product_id
AND k.character_id = c.id