3.5 KiB
3.5 KiB
Falukant: Kirchenämter (YpDaemon / PoliticsWorker)
Umsetzung des Zielmodells: Laufbahn highest_church_hierarchy_ever, NPC-Bewerbungen, NPC-Vorgesetzte mit Score, Spieler-Vorgesetzte ohne Daemon-Entscheidung, Interimsbesetzung, 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) |
| Auto-Approve alter Bewerbungen | Stündlich, nur wenn supervisor.user_id IS NULL (NPC-Vorgesetzter), 36 h+ |
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: Bewerber mit
churchCandidateScore(Reputation, höchste Hierarchie, aktuelle Ämter, Titel, Alter, Zufallsanteil abhängig vonsupervisor.reputation). Pro(office_type_id, region)werden nur so viele Zusagen erteilt, wie Plätze frei sind. - NPC-Bewerbungen: Nur Charaktere mit
user_id IS NULL; nur wennpending < freie Sitze(nachzüglernde Jobs). - Interimsbesetzung: Kein Vorgesetzter,
hierarchy_level <= 6(bis einschließlich „Bishop“-Ebene im Typ-Stammbaum — anpassbar über KonstanteINTERIM_MAX_CHURCH_HIERARCHYinpolitics.rs): bester NPC-Kandidat + direktesINSERTinchurch_office, Updatehighest_church_hierarchy_ever, Entfernen niedrigerer kirchlicher Ämter.
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_APPLICATIONundQUERY_AUTO_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 (NPC hat zugesagt), appointment (Auto-Approve 36 h, nur NPC-Supervisor), vacancy_fill (Interimsbesetzung, nur wenn Bewerber ein Spielercharakter ist).
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_resolve_church_applications_for_supervisor,try_interim_church_appointment, Hilfsfunktionen.src/worker/sql.rs— Abschnitt „Church Office Queries“.