All checks were successful
Deploy yourpart (blue-green) / deploy (push) Successful in 5m13s
3.0 KiB
Executable File
3.0 KiB
Executable File
Falukant: Kirchenämter (YpDaemon / PoliticsWorker)
Umsetzung des Zielmodells: Laufbahn highest_church_hierarchy_ever, NPC-Bewerbungen, NPC-Vorgesetzte mit Score, Spieler-Vorgesetzte ohne Daemon-Entscheidung und Events falukantUpdateChurch.
Migration
migrations/007_falukant_character_church_career.sql— Spaltefalukant_data.character.highest_church_hierarchy_ever+ Backfill aus bestehendenchurch_office.
Ohne Migration schlagen Bewerbungs-Checks fehl, die die Spalte referenzieren.
Ticks
| Was | Wann |
|---|---|
| Kirchen-Gesamtprozess | Täglich im gleichen Lauf wie perform_daily_politics_task (nicht mehr nur 13:00) |
| NPC-Entscheidung | Nach mindestens 2 Tagen offener Bewerbung, täglich |
Logik (Kurz)
- Freie Sitze je
church_office_type/ Region (QUERY_FIND_AVAILABLE_CHURCH_OFFICES, inkl.hierarchy_level). - Vorgesetzter = nächsthöhere besetzte Hierarchie in der Region (
QUERY_FIND_CHURCH_SUPERVISOR). - Spieler-Vorgesetzter (
character.user_id IS NOT NULL):falukantUpdateChurchmitreason: applications— keine automatische Annahme/Ablehnung durch den Daemon. - NPC-Vorgesetzter: Nach der zweitägigen Bewerbungsfrist bewertet er Bewerber mit
churchCandidateScoreund entscheidet über die freien Sitze. - Kein Vorgesetzter: Der Kirchen-NPC führt denselben Auswahlvorgang nach zwei Tagen durch. Das deckt insbesondere Einstiegsämter ab und verhindert dauerhaft offene Bewerbungen.
- NPC-Laufbahn: Nur Charaktere mit
user_id IS NULL; Einstieg ohne Kirchenamt, jede Beförderung ausschließlich aus einem aktuell gehaltenen Amt genau eine Hierarchiestufe darunter.
Bewerbungsvoraussetzungen (Daemon-SQL)
QUERY_CHECK_CHARACTER_ELIGIBILITY: Für ein gefordertes Voramt (prerequisite_office_type_id) gilt Erfüllt, wenn
- das exakte Amt aktuell gehalten wird, oder
GREATEST(highest_church_hierarchy_ever, max. aktuelle Hierarchie aus church_office) >= hierarchy_leveldes Voramts.
Titelbedingungen unverändert (min_title_level).
Genehmigung / Amtsverlust
QUERY_APPROVE_CHURCH_APPLICATION: nach Eintragchurch_office→ Updatehighest_church_hierarchy_ever, dannDELETEniedrigerer konkurrierenderchurch_officedesselben Charakters (remove_lower_ranked).
WebSocket
| Event | Payload |
|---|---|
falukantUpdateChurch |
{"event":"falukantUpdateChurch","user_id":N,"reason":"…"} |
falukantUpdateStatus |
wie üblich, direkt danach |
reason: applications (Spieler-Vorgesetzter), npc_decision (Kirchen-NPC hat entschieden).
Details: FALUKANT_UI_WEBSOCKET.md.
Backend (außerhalb YpDaemon)
getAvailableChurchPositions()muss dieselbe Laufbahn-Logik nutzen (Spec Abschnitt 11).- Spieleranträge und gleiche Bewertungsregeln wie im Daemon.
Code
src/worker/politics.rs—perform_church_office_task,process_church_supervisor_queue, NPC-Entscheidungen mit und ohne Vorgesetzten, Hilfsfunktionen.src/worker/sql.rs— Abschnitt „Church Office Queries“.