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:
@@ -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 10–14 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
|
||||
|
||||
Reference in New Issue
Block a user