feat: Charakter-Modal in Mitgliederliste (Phase 1) #12
No reviewers
Labels
No labels
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
DasAoD/sfguildsv2!12
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feature/character-modal"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Zusammenfassung
Klick auf einen Mitgliedsnamen in der Gilden-Mitgliederliste öffnet ein Modal mit Charakterdaten (Attribute + Ausrüstung + Tränke) aus S&F. Phase 1: reine Textansicht, keine Icons/Portrait (folgt ggf. später).
Wichtig: Die Daten werden nicht live beim Klick abgerufen, sondern von einem neuen, unabhängig planbaren Cronjob (
character_sync) periodisch in die DB geschrieben. Das Modal liest nur aus der DB. Damit werden laufende Spielsitzungen nicht durch parallele Logins gestört.Neue Komponenten
rust_examples/character_sync.rs— neues sf-api-Binary: loggt sich einmal ein, ruft pro GildenmitgliedViewPlayerab (gleiche Session), gibt Rohdaten als JSON aus. Bereits auf dns1 gebaut, deployt (/opt/sf-api/character_sync) und gegen alle 5 Gilden getestet (~40s Gesamtlaufzeit, weit unter dem 2-Minuten-Session-Timeout).cli/cron_character_sync.php— neuer Cronjob, verarbeitet die Rohdaten (Attribut-Formel:basis + additions, laut Screenshot-Abgleich verifiziert) und schreibt sie inmembers.char_data_json/members.char_fetched_at.api/player_character.php— liest die gespeicherten Charakterdaten für das Modal (reiner DB-Read).includes/sf_helpers.php— neue Helper-FunktionfindSfAccountForGuild(), extrahiert aus der bisher inline insf_member_sync.phpliegenden Logik; unterstützt sowohl den Cron-Kontext (alle Admin-Accounts) als auch den User-Kontext (manueller Sync-Button).public/guild.php,public/assets/css/guild.css,public/assets/js/guild.js.Konfiguration
member_syncintegriert) und standardmäßig deaktiviert mit leerem Zeitplan — die Häufigkeit ist bewusst nicht vorgegeben, sondern frei über die bestehende Admin-Cronjobs-UI konfigurierbar.members.char_data_json,members.char_fetched_at(Spalten), neuercron_jobs-Eintragcharacter_sync(disabled,times: []).Test plan
character_syncRust-Binary gegen alle 5 Gilden getestet (reale Produktionsdaten)php -lfür alle geänderten/neuen PHP-Dateiennode --checkfürguild.jsNicht enthalten (bewusst verschoben)
Nachtrag: Bug gefunden und gefixt — der Charakter, mit dem
character_syncsich einloggt, landete bisher immer inskippedstatt in den Ergebnissen. Betraf alle 5 Gilden-Login-Charaktere (Beedle the Bard, Gweneth, Haui Kaputti, Medea, Xyra Fieberkuss), dags.lookup(befüllt überViewPlayer) den eigenen Charakter nie enthält.Fix in
rust_examples/character_sync.rs: Die eigenen Daten werden jetzt direkt ausGameState.characterentnommen statt überlookupversucht zu werden.Character(eigener Charakter) undOtherPlayer(andere Spieler) teilen sich exakt dieselben relevanten Feldnamen (level,class,race,honor,rank,armor,min_damage,max_damage,attribute_basis,attribute_additions,equipment,active_potions) und denselbenEquipment-Typ — daher keine Änderung auf PHP-Seite nötig. Auf dns1 neu gebaut, deployt und der Fehlerfall (fehlende Env-Vars) erneut verifiziert.