feat: echte Item-Icons im Charakter-Modal statt Platzhalter-Emojis #13

Merged
DasAoD merged 1 commit from feature/item-icons into main 2026-08-03 16:36:18 +02:00
Owner

Zusammenfassung

Ersetzt die Emoji-Platzhalter pro Ausrüstungsslot im Charakter-Modal durch echte Item-Icons, die aus den Unity-Asset-Bundles des Spiels geripped wurden.

  • 2.017 zugeschnittene PNGs unter public/assets/images/items/, aufgeteilt in Warrior/Mage/Scout (je eigenes Set für klassenspezifische Slots: Hat/BreastPlate/Gloves/FootWear/Belt/Weapon) sowie geteilte Bundles für Ring/Amulett/Talisman/Schild.
  • includes/item_icons.php: löst Slot + model_id/color/class eines Items per Datei-Glob (statt starrer Namenskonstruktion, da die Sprite-Dateinamen nicht durchgängig gleich aufgebaut sind) auf eine Icon-Datei auf.
  • api/player_character.php: hängt pro Ausrüstungsgegenstand ein icon-Feld mit dem aufgelösten Pfad an.
  • public/assets/js/guild.js: buildEquipTile() rendert jetzt ein <img>; fehlt/bricht das Bild, fällt es automatisch auf das bisherige Emoji zurück (onerror).
  • public/assets/css/guild.css: neue .char-slot-icon-img-Regel (passt sich der bestehenden 72px-Slot-Kachel an).

Klassen-Zuordnung

Die 9 "Hybrid"-Klassen haben keine eigenen Ausrüstungs-Grafiken, sondern nutzen laut sf-apis Item::can_be_used_by() (github.com/the-marenga/sf-api) eine der drei Basis-Klassen für Waffe bzw. Rüstung getrennt — das übernimmt automatisch das class-Feld, das schon in char_data_json gespeichert wird (kein zusätzlicher Code für die Zuordnung nötig):

Klasse Waffe Rüstung
Kampfmagier Krieger Magier
Dämonenjäger Kundschafter Krieger
Druide Magier Kundschafter
Barde Magier Kundschafter
Paladin Krieger Krieger
Berserker Krieger Krieger
Nekromant Magier Magier
Assassine Krieger Kundschafter
Pestdoktor Krieger Magier

Test

  • Datei-Auflösung stichprobenartig gegen echte Dateien verifiziert (Warrior/Mage/Scout je Slot, sowie Ring/Amulett/Talisman/Schild mit unterschiedlichem Namensschema).
  • Nicht browser-getestet (kein laufender Server in dieser Session verfügbar) — bitte vor dem Mergen kurz im echten Charakter-Modal gegenprüfen.

Portraits

Bewusst nicht Teil dieses PRs — wird separat angegangen (Rohmaterial für die Portrait-Sprites liegt bereits vor, siehe Chatverlauf).

## Zusammenfassung Ersetzt die Emoji-Platzhalter pro Ausrüstungsslot im Charakter-Modal durch echte Item-Icons, die aus den Unity-Asset-Bundles des Spiels geripped wurden. - **2.017 zugeschnittene PNGs** unter `public/assets/images/items/`, aufgeteilt in Warrior/Mage/Scout (je eigenes Set für klassenspezifische Slots: Hat/BreastPlate/Gloves/FootWear/Belt/Weapon) sowie geteilte Bundles für Ring/Amulett/Talisman/Schild. - `includes/item_icons.php`: löst Slot + `model_id`/`color`/`class` eines Items per Datei-Glob (statt starrer Namenskonstruktion, da die Sprite-Dateinamen nicht durchgängig gleich aufgebaut sind) auf eine Icon-Datei auf. - `api/player_character.php`: hängt pro Ausrüstungsgegenstand ein `icon`-Feld mit dem aufgelösten Pfad an. - `public/assets/js/guild.js`: `buildEquipTile()` rendert jetzt ein `<img>`; fehlt/bricht das Bild, fällt es automatisch auf das bisherige Emoji zurück (`onerror`). - `public/assets/css/guild.css`: neue `.char-slot-icon-img`-Regel (passt sich der bestehenden 72px-Slot-Kachel an). ## Klassen-Zuordnung Die 9 "Hybrid"-Klassen haben keine eigenen Ausrüstungs-Grafiken, sondern nutzen laut `sf-api`s `Item::can_be_used_by()` (github.com/the-marenga/sf-api) eine der drei Basis-Klassen für Waffe bzw. Rüstung getrennt — das übernimmt automatisch das `class`-Feld, das schon in `char_data_json` gespeichert wird (kein zusätzlicher Code für die Zuordnung nötig): | Klasse | Waffe | Rüstung | |---|---|---| | Kampfmagier | Krieger | Magier | | Dämonenjäger | Kundschafter | Krieger | | Druide | Magier | Kundschafter | | Barde | Magier | Kundschafter | | Paladin | Krieger | Krieger | | Berserker | Krieger | Krieger | | Nekromant | Magier | Magier | | Assassine | Krieger | Kundschafter | | Pestdoktor | Krieger | Magier | ## Test - Datei-Auflösung stichprobenartig gegen echte Dateien verifiziert (Warrior/Mage/Scout je Slot, sowie Ring/Amulett/Talisman/Schild mit unterschiedlichem Namensschema). - Nicht browser-getestet (kein laufender Server in dieser Session verfügbar) — bitte vor dem Mergen kurz im echten Charakter-Modal gegenprüfen. ## Portraits Bewusst nicht Teil dieses PRs — wird separat angegangen (Rohmaterial für die Portrait-Sprites liegt bereits vor, siehe Chatverlauf).
Ersetzt die Emoji-Platzhalter pro Ausrüstungsslot durch echte, aus den
Unity-Asset-Bundles des Spiels geripte Icons (Warrior/Mage/Scout je
eigenes Set für klassenspezifische Slots, Ring/Amulett/Talisman/Schild
klassenübergreifend geteilt).

- includes/item_icons.php: löst Slot + model_id/color/class eines
  Items per Glob auf eine Icon-Datei unter public/assets/images/items/ auf
- api/player_character.php: hängt pro Ausrüstungsgegenstand das
  aufgelöste icon-Feld an
- guild.js: buildEquipTile() rendert <img>, fällt bei fehlendem/
  kaputtem Icon automatisch auf das bisherige Emoji zurück
- 2017 zugeschnittene PNGs für alle 12 Klassen (Zuordnung Waffen-/
  Rüstungsklasse je Klasse verifiziert gegen sf-api can_be_used_by())
DasAoD merged commit 75f8fababd into main 2026-08-03 16:36:18 +02:00
Sign in to join this conversation.
No description provided.