Files
yourpart-daemon/docs/FALUKANT_CHURCH_DAEMON.md
Torsten Schulz (local) fb5c1eb8be
All checks were successful
Deploy yourpart (blue-green) / deploy (push) Successful in 5m13s
Entferne automatische Annahme alter Bewerbungen und implementiere Entscheidung durch NPCs für offene Stellen ohne Vorgesetzten
2026-08-26 10:01:21 +02:00

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 — 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)
NPC-Entscheidung Nach mindestens 2 Tagen offener Bewerbung, täglich

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: Nach der zweitägigen Bewerbungsfrist bewertet er Bewerber mit churchCandidateScore und entscheidet über die freien Sitze.
  5. Kein Vorgesetzter: Der Kirchen-NPC führt denselben Auswahlvorgang nach zwei Tagen durch. Das deckt insbesondere Einstiegsämter ab und verhindert dauerhaft offene Bewerbungen.
  6. 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_level des Voramts.

Titelbedingungen unverändert (min_title_level).

Genehmigung / Amtsverlust

  • QUERY_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 (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.rsperform_church_office_task, process_church_supervisor_queue, NPC-Entscheidungen mit und ohne Vorgesetzten, Hilfsfunktionen.
  • src/worker/sql.rs — Abschnitt „Church Office Queries“.