Auto-render guild crest from synced /coa code #33

Merged
DasAoD merged 1 commit from feature/guild-crest-auto-render into main 2026-09-04 23:46:56 +02:00
Owner

Was

Rendert das Gildenwappen automatisch aus dem /coa-Code, den der S&F-Server bei jedem Login/Poll in owngroupsave.groupSave mitschickt — statt dass ein Gildenleiter das Wappen manuell screenshotten/zuschneiden/hochladen muss.

Manueller Upload (crest_file) bleibt komplett unverändert und hat immer Vorrang — diese Funktion ist reines Fallback, greift nur wenn kein crest_file gesetzt ist. Fehlen Assets/Code, fällt die UI einfach auf den bisherigen Platzhalter zurück (keine Regression möglich).

Änderungen

  • includes/guild_crest.php (neu): Compositor für die 7 Wappen-Ebenen (Helmdecke/Schildhalter/Schild+Farbzonen/Banner/Helm/Orden/Figur), als Python-Prototyp gegen einen echten Screenshot verifiziert, dann nach PHP/GD portiert und auf dns1 getestet
  • rust_examples/member_sync.rs: extrahiert den Code aus owngroupsave.groupSave via Response::raw_response() (sf-api's eigenes Guild.emblem-Feld ist dafür der falsche Ort, siehe Memory)
  • cli/cron_member_sync.php: schreibt den Code in die neue Spalte guilds.coa_code
  • api/members.php, api/battle_stats.php: liefern zusätzlich coa_image (gerendert+gecached), wenn kein crest_file gesetzt ist
  • public/assets/js/guild.js, reports.js: nutzen coa_image als Fallback vor dem generischen Platzhalter
  • Wappen-Rohgrafiken bewusst nicht im Repo (Urheberrecht) — Deployment-Schritte in install/GUILD_CREST_AUTO_INSTALL.md

Bekannte Einschränkungen (bewusst als v1 akzeptiert)

  • Farbpalette für Zonen-/Figur-Tönung ist größtenteils eine Näherung (nur 1 Datenpunkt real verifiziert: #009900)
  • Ebenen-Layout/Positionen basieren auf Augenmaß gegen einen einzigen Referenz-Screenshot (keine Positionsdaten in den Spiel-Assets vorhanden)
  • Gildenname wird nicht aufs Banner gerendert (im Original clientseitiger Text)

Details siehe Memory sfguildsv2-guild-crest-reverse-engineering.

Vor dem Deploy nötig (siehe install/GUILD_CREST_AUTO_INSTALL.md)

  1. ALTER TABLE guilds ADD COLUMN coa_code TEXT auf dns1 ausführen
  2. Wappen-Rohgrafiken nach data/guildcrests/ auf dns1 kopieren
  3. member_sync auf dns1 neu bauen (cargo build --release --example member_sync)

🤖 Generated with Claude Code

## Was Rendert das Gildenwappen automatisch aus dem `/coa`-Code, den der S&F-Server bei jedem Login/Poll in `owngroupsave.groupSave` mitschickt — statt dass ein Gildenleiter das Wappen manuell screenshotten/zuschneiden/hochladen muss. **Manueller Upload (`crest_file`) bleibt komplett unverändert und hat immer Vorrang** — diese Funktion ist reines Fallback, greift nur wenn kein `crest_file` gesetzt ist. Fehlen Assets/Code, fällt die UI einfach auf den bisherigen Platzhalter zurück (keine Regression möglich). ## Änderungen - `includes/guild_crest.php` (neu): Compositor für die 7 Wappen-Ebenen (Helmdecke/Schildhalter/Schild+Farbzonen/Banner/Helm/Orden/Figur), als Python-Prototyp gegen einen echten Screenshot verifiziert, dann nach PHP/GD portiert und auf dns1 getestet - `rust_examples/member_sync.rs`: extrahiert den Code aus `owngroupsave.groupSave` via `Response::raw_response()` (sf-api's eigenes `Guild.emblem`-Feld ist dafür der falsche Ort, siehe Memory) - `cli/cron_member_sync.php`: schreibt den Code in die neue Spalte `guilds.coa_code` - `api/members.php`, `api/battle_stats.php`: liefern zusätzlich `coa_image` (gerendert+gecached), wenn kein `crest_file` gesetzt ist - `public/assets/js/guild.js`, `reports.js`: nutzen `coa_image` als Fallback vor dem generischen Platzhalter - Wappen-Rohgrafiken bewusst **nicht im Repo** (Urheberrecht) — Deployment-Schritte in `install/GUILD_CREST_AUTO_INSTALL.md` ## Bekannte Einschränkungen (bewusst als v1 akzeptiert) - Farbpalette für Zonen-/Figur-Tönung ist größtenteils eine Näherung (nur 1 Datenpunkt real verifiziert: `#009900`) - Ebenen-Layout/Positionen basieren auf Augenmaß gegen einen einzigen Referenz-Screenshot (keine Positionsdaten in den Spiel-Assets vorhanden) - Gildenname wird nicht aufs Banner gerendert (im Original clientseitiger Text) Details siehe Memory `sfguildsv2-guild-crest-reverse-engineering`. ## Vor dem Deploy nötig (siehe install/GUILD_CREST_AUTO_INSTALL.md) 1. `ALTER TABLE guilds ADD COLUMN coa_code TEXT` auf dns1 ausführen 2. Wappen-Rohgrafiken nach `data/guildcrests/` auf dns1 kopieren 3. `member_sync` auf dns1 neu bauen (`cargo build --release --example member_sync`) 🤖 Generated with [Claude Code](https://claude.com/claude-code)
- new includes/guild_crest.php composites the 7-layer coat-of-arms from the synced /coa hex code (verified prototype), used only as fallback when no manual crest_file is set
- member_sync.rs now extracts the code from owngroupsave.groupSave (raw_response), cron_member_sync.php persists it to the new guilds.coa_code column
- members.php/battle_stats.php expose a resolved coa_image alongside crest_file; guild.js/reports.js fall back to it when no manual upload exists
- raw crest source PNGs and DB migration deliberately kept out of the repo, see install/GUILD_CREST_AUTO_INSTALL.md

Co-authored-by: Claude <claude@anthropic.com>
DasAoD merged commit 62ea97a5b1 into main 2026-09-04 23:46:56 +02:00
Sign in to join this conversation.
No description provided.