Files
yourpart-daemon/docs/FALUKANT_CHURCH_DAEMON.md

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 — Spalte falukant_data.character.highest_church_hierarchy_ever + Backfill aus bestehenden church_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)

  1. Freie Sitze je church_office_type / Region (QUERY_FIND_AVAILABLE_CHURCH_OFFICES, inkl. hierarchy_level).
  2. Vorgesetzter = nächsthöhere besetzte Hierarchie in der Region (QUERY_FIND_CHURCH_SUPERVISOR).
  3. Spieler-Vorgesetzter (character.user_id IS NOT NULL): falukantUpdateChurch mit reason: applicationskeine automatische Annahme/Ablehnung durch den Daemon.
  4. NPC-Vorgesetzter: Bewerber mit churchCandidateScore (Reputation, höchste Hierarchie, aktuelle Ämter, Titel, Alter, Zufallsanteil abhängig von supervisor.reputation). Pro (office_type_id, region) werden nur so viele Zusagen erteilt, wie Plätze frei sind.
  5. NPC-Bewerbungen: Nur Charaktere mit user_id IS NULL; nur wenn pending < freie Sitze (nachzüglernde Jobs).
  6. Interimsbesetzung: Kein Vorgesetzter, hierarchy_level <= 6 (bis einschließlich „Bishop“-Ebene im Typ-Stammbaum — anpassbar über Konstante INTERIM_MAX_CHURCH_HIERARCHY in politics.rs): bester NPC-Kandidat + direktes INSERT in church_office, Update highest_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_level des Voramts.

Titelbedingungen unverändert (min_title_level).

Genehmigung / Amtsverlust

  • QUERY_APPROVE_CHURCH_APPLICATION und QUERY_AUTO_APPROVE_CHURCH_APPLICATION: nach Eintrag church_office → Update highest_church_hierarchy_ever, dann DELETE niedrigerer konkurrierender church_office desselben 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.rsperform_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“.