Das Bekleidungssystem von GTA V verstehen
GTA V verwendet ein komponentenbasiertes Bekleidungssystem, bei dem jedes Kleidungsstück innerhalb eines bestimmten Komponentensteckplatzes „ziehbar“ ist. Es gibt 12 Steckplätze für Komponenten auf einem Ped, von Kopf (Komponente 0) über Schuhe (Komponente 6) bis hin zu Taschen und Zubehör. Jeder Komponentensteckplatz kann mehrere Drawables enthalten, und jedes Drawable kann mehrere Texturvarianten haben. Beispielsweise könnte die Komponente 11 (Oberteile) die zeichnungsfähige 15 (eine Lederjacke) mit den Texturen 0 bis 3 haben, die die Farbvarianten Schwarz, Braun, Rot und Weiß darstellen. Bevor du benutzerdefinierte Kleidung erstellen können, ist es wichtig, diese Hierarchie von Komponenten, Zeichenobjekten und Texturen zu verstehen, da jedes hinzugefügte Teil in diese vorhandene Struktur passen muss. Das Multiplayer-Ped-Modell (MP) fügt eine weitere Ebene mit einer eigenen zeichnbaren Zuordnung hinzu, die sich von Einzelspieler-Charakteren unterscheidet, und FiveM-Server verwenden ausschließlich die MP-Freemode-Modelle.
Ressourcenstruktur und Streaming
Maßgeschneiderte Kleidung in FiveM funktioniert über das Streaming-System. Du erstellen eine Ressource, die das Spiel anweist, neben den Basisspiel-Assets zusätzliche Zeichen- und Texturdateien zu laden. Die Ressourcenstruktur folgt strengen Namenskonventionen, die die Spiel-Engine verwendet, um zu identifizieren, zu welchem Ped-Modell, welcher Komponente und welchem Zeichenindex jede Datei gehört. Eine falsche Ordnerstruktur ist die häufigste Ursache dafür, dass Kleidung im Spiel nicht angezeigt wird. Deine Ressource benötigt ein fxmanifest.lua, das die Streaming-Dateien deklariert, und die eigentlichen Bekleidungsdaten werden in ein stream-Verzeichnis mit der richtigen Unterordnerhierarchie verschoben.
Der Stream-Ordner folgt einer präzisen Hierarchie. Für MP Freemode-Männerbekleidung gehen die Dateien in stream/mp_m_freemode_01_mp_m_[dlcname]/. Ersetze für Frauen mp_m durch mp_f. In diesem Ordner platzierest du die Dateien YDD (Zeichnbares Wörterbuch), YTD (Texturwörterbuch) und YMT (Metadaten). Die Namenskonvention kodiert, welche Komponente und welchen Zeichenindex jede Datei darstellt. Eine Datei mit dem Namen mp_m_freemode_01_mp_m_mypack_jbib_000_u.ydd kann für Komponente 11 (jbib = Jacke/Tops) auf dem männlichen Freemode-Ped aus dem DLC-Paket „mypack“ gezeichnet werden.
Komponenten-IDs und Namenskonventionen
Für jede Bekleidungskomponente wird bei der Dateibenennung eine bestimmte Abkürzung verwendet. Es ist wichtig, sich diese zu merken, denn ein einziger Tippfehler bedeutet, dass das Spiel dein Asset nicht finden kann. Die Komponentenkarte ist: Kopf (Komponente 0, keine Kleidung), Ber (1, Masken), Haare (2), Ober (3, Arme/Handschuhe), Unter (4, Hosen/Beine), Hand (5, Taschen/Fallschirme), Füße (6, Schuhe), Tef (7, Accessoires wie Ketten), accs (8, Unterhemden/Körperzubehör), task (9, Körperschutz), decl (10, Aufkleber/Abzeichen) und jbib (11, Oberteile/Jacken). Requisiten verwenden ein anderes System: p_head (Hüte), p_eyes (Brillen), p_ears (Ohrringe) und p_lwrist/p_rwrist (Uhren/Armbänder).
YMT-Dateien verstehen
Die YMT-Datei (Ped-Metadaten) ist der Klebstoff, der ein Bekleidungspaket zusammenhält. Es handelt sich um eine XML-basierte Datei, die der Spiel-Engine mitteilt, wie viele Drawables in jeder Komponente vorhanden sind, wie viele Texturen jedes Drawable hat, welches Audio abgespielt werden soll, wenn sich die Kleidung bewegt, und verschiedene Rendering-Eigenschaften. Ohne einen korrekt konfigurierten YMT erkennt das Spiel deine Drawables nicht, selbst wenn die YDD- und YTD-Dateien perfekt erstellt sind. Der YMT muss jede einzelne Zeichen- und Texturkombination in deinem Paket auflisten. Ein einzelner fehlender Eintrag bedeutet, dass das Element unsichtbar ist. Das manuelle Bearbeiten von YMT-Dateien ist fehleranfällig, weshalb die meisten Ersteller Tools wie CodeWalker oder spezielle YMT-Generatoren verwenden, die die Datei automatisch aus den Inhalten deines Asset-Ordners erstellen.
Texturvariationen und Qualität
Jedes Zeichenelement kann mehrere Texturvarianten haben, die unterschiedliche Farben oder Muster desselben Kleidungsmodells darstellen. Die Basistexturdatei verwendet das Benennungsmuster [pack]_[component]_diff_[drawableIndex]_[textureIndex]_uni.ytd. Für eine optimale GPU-Kompatibilität sollten Texturen in Zweierpotenzen (512 x 512, 1024 x 1024, 2048 x 2048) erstellt werden. Texturen mit höherer Auflösung sehen besser aus, verbrauchen aber mehr VRAM, was eine begrenzte Ressource ist, insbesondere auf Servern, auf denen Spieler Dutzende individueller Kleidungspakete gleichzeitig laden. Eine praktische Richtlinie besteht darin, für die meisten Kleidungsstücke 1024 x 1024 zu verwenden und 2048 x 2048 für Artikel mit feinen Details wie gestickten Logos oder komplizierten Mustern zu reservieren. Jede YTD-Datei kann mehrere Texturebenen enthalten, einschließlich diffuser (Farbe), normaler (Oberflächendetails) und spiegelnder (Glanz) Karten. Allerdings verwenden die meisten FiveM-Bekleidungspakete nur die diffuse Ebene, um die Dateigröße überschaubar zu halten.
Erstellen eines Scripts für ein Bekleidungsmenü
Sobald deine Streaming-Ressource funktioniert, benötigst du eine Möglichkeit für die Spieler, die Kleidung zu durchsuchen und anzuwenden. Ein Kleidungsmenü-Script durchläuft alle verfügbaren Drawables pro Komponente und ermöglicht es den Spielern, sie in Echtzeit auf ihrem Charakter anzuzeigen. Die Kernlogik verwendet GetNumberOfPedDrawableVariations, um zu bestimmen, wie viele Zeichenobjekte für jede Komponente vorhanden sind, und verwendet dann SetPedComponentVariation, um das ausgewählte anzuwenden. Integriere dies in ein ox_lib- oder NUI-Menü für ein ausgefeiltes Benutzererlebnis. Der knifflige Teil besteht darin, Vorschauen und Kamerawinkel aus der ersten Person zu handhaben, damit die Spieler sehen können, was sie anprobieren, ohne umständliche Beschneidungs- oder Zoomprobleme.
Häufige Probleme und Fehlerbehebung
Das häufigste Problem besteht darin, dass Kleidung unsichtbar oder falsch erscheint. Dies ist fast immer auf eine falsche YMT-Datei zurückzuführen, die die Anzahl der Zeichen- oder Texturanzahl nicht richtig deklariert. Stell sicher, dass dein YMT die genaue Anzahl der Zeichenelemente und Texturen auflistet, die in deinem Stream-Ordner vorhanden sind. Ein weiteres häufiges Problem ist die Reihenfolge beim Laden der Ressourcen: Wenn dein Kleidungspaket vor den Assets des Basisspiels geladen wird, können die Zeichenindizes kollidieren und Vanilla-Kleidung überschreiben. Stelle deinem Ressourcennamen zzz_ voran, um sicherzustellen, dass er zuletzt geladen wird. Texturunschärfe weist normalerweise darauf hin, dass das YTD eine zu niedrige Auflösung verwendet oder die Mipmaps nicht korrekt generiert werden. Generiere immer Mipmaps, wenn du deine YTD-Dateien in CodeWalker exportieren. Wenn schließlich Kleidung bei männlichen, aber nicht bei weiblichen Modellen zu sehen ist oder umgekehrt, überprüfe noch einmal, ob du separate Ordner für mp_m_freemode_01 und mp_f_freemode_01 mit ordnungsgemäß geschlechtsspezifischen Netzdateien haben, da männliche und weibliche Pädiatriemodelle unterschiedliche Skelett-Rigs haben und separate Geometrie erfordern.
Optimierung der Serverleistung
Benutzerdefinierte Bekleidungspakete tragen am meisten zur Downloadgröße des Servers und zur VRAM-Nutzung des Clients bei. Ein einzelnes, schlecht optimiertes Paket mit 100 hochauflösenden Elementen kann den Downloadbedarf deines Servers um Gigabyte erhöhen. Damit alles überschaubar bleibt, komprimiere deine YTD-Texturen im DXT5- oder BC7-Format, das eine gute visuelle Qualität bei einem Bruchteil der Rohdateigröße bietet. Beschränke jedes Paket auf eine angemessene Anzahl von Artikeln, typischerweise 20 bis 50 Stück, und teilst du größere Sammlungen auf mehrere Ressourcen auf, die unabhängig voneinander geladen werden können. Erwäge, eine „Lite“-Version beliebter Pakete mit 512x512-Texturen für Spieler mit Hardware der unteren Preisklasse anzubieten. Vermeide auf der Skriptseite den wiederholten Aufruf von SetPedComponentVariation in einer Schleife, da jeder Aufruf eine Modellaktualisierung auslöst. Batch-Änderungen der Kleidung durch Sammeln aller Komponentenaktualisierungen und deren Anwendung nacheinander in einem einzigen Frame, um visuelles Knacken und Rendering-Overhead zu minimieren.

