Dokumentation

Dokumentation Core Skin (3 in 1)

Barbershop, Tattoo-Studio und Kleidungsladen in einer einzigen FiveM-Resource. 1615 Tattoos, jede Kleidungskomponente und jedes Prop, der komplette Bereich für Kopf und Haut, verteilt auf 36 Läden. Eine Oberfläche, eine Kamera, ein Kaufablauf und nur eine Sache, die du auf ESX, QBCore, vRP oder Standalone installierst.

  • ESX
  • QBCore
  • vRP
  • Standalone
  • oxmysql
01

Installation

  1. Resource ablegen

    Hol dir das Script aus deinem Tebex-Konto, kopier den Ordner in dein resources-Verzeichnis und trag ensure avenida_core_skin hinter ensure oxmysql in deine Serverconfig ein. Behalte den Ordnernamen so, wie er ausgeliefert wird, genau so deklariert ihn das Manifest.

  2. SQL ausführen, Abschnitt [A] komplett

    Abschnitt [A] enthält jede Tabelle, die die Resource besitzt, inklusive des Registers bezahlter Kleidung. Die Abschnitte [B], [C] und [D] sind bedingt, die Datei sagt dir, wann welcher gilt. [D] sind die Inventar-Items, nur nötig, wenn du Config.Clothes.GiveAsItems einschaltest, und genau den vergisst man.

  3. Module wählen

    Öffne config/config.lua und setz Config.Modules. Ein Modul auf false kostet gar nichts: kein Blip, kein Interaktionspunkt, kein Thread, und seine Config wird nie gelesen. Prüf bei der Gelegenheit gleich Config.Locale.

  4. Admin-Rechte vergeben

    Füg add_ace group.admin avenida_skin.admin allow und add_ace group.admin avenida_skin.vip allow ein. Das erste öffnet den Katalog-Editor im Spiel, das zweite schaltet frei, was du hinter die VIP-Liste legst.

  5. Integrationen prüfen

    Setz Config.Debug = true, starte neu und lies die Konsole: Eine Zeile pro Bridge-Kategorie nennt das gewählte Target. Setz es wieder auf false, sobald die Zeilen zu deinem Server passen, und denk daran, dass es nur das Logging steuert, der Editor hat seinen eigenen Schalter.

02

Konfiguration

Nur die Shops laufen lassen, die du brauchst

Die drei Module sind unabhängig voneinander. Wer schon einen Kleidungsladen hat, mit dem er zufrieden ist, behält Barbershop und Tattoo-Studio, und vom abgeschalteten Modul läuft nichts.

lua
-- config/config.lua
Config.Modules = {
    Barber  = true,
    Tattoo  = true,
    Clothes = false,   -- no blip, no point, no thread
}

Config.Locale = 'en'

Config.Framework = 'auto'   -- 'qbcore' | 'esx' | 'vrp' | 'standalone' | 'custom'
Config.Notif     = 'auto'
Config.Interact  = 'auto'
Config.Clothing  = 'auto'
03

Exports

Client

  • GetHairbase
    exports['avenida_skin']:GetHairbase() --> { c = collection, t = nameHash } | nil

    Die Hairbase, die der Ped gerade trägt. Das Bundle betreibt die drei Shops auf einem einzigen Decoration-Slot, das ist also die einzige Stelle zum Auslesen, egal, welchen Shop der Spieler zuletzt besucht hat.

  • GetTattoos
    exports['avenida_skin']:GetTattoos() --> { { c, t }, ... }

    Die Tattoos, die der Ped gerade trägt. Da Barber, Ink und Garderobe sich hier eine Registry teilen, bekommst du eine Liste, statt drei Resources nach derselben Antwort zu fragen.

Server

  • GetBagStorage
    exports['avenida_skin']:GetBagStorage(sex, drawable) --> { weight, slots } | nil

    Was ein Rucksack-Drawable an Gewicht und Slots wert ist, gelesen aus der Garderoben-Config. Für ein Drawable, das nicht als Tasche deklariert ist, kommt nil zurück.

04

Rezepte

Eine Kleidungssektion auf drei Arten bepreisen

Jeder Laden deklariert seine eigenen Sektionen, und jede Sektion ihren eigenen Preismodus. Ein fester Satz für eine ganze Sektion, ein Multiplikator, der spätere Drawables teurer macht, oder eine Tabelle, wenn nur eine Handvoll Teile einen eigenen Preis verdienen.

lua
-- config/clothes_shops.lua
categories = {
    tops = {
        enabled = true,
        price   = { mode = 'fixed', base = 300 },
    },
    pants = {
        enabled = true,
        -- price = base + index * mult
        price   = { mode = 'multiplier', base = 100, mult = 2 },
    },
    mask = {
        enabled = true,
        price   = { mode = 'table', map = { [12] = 900, [45] = 1500 } },
    },
}

Alte Tattoo-Collections billig machen, seltene teuer

Ein fester Satz deckt die 1615 Motive ab, ein Multiplikator pro DLC-Collection erledigt den Rest, du bepreist also nie einen Katalog von Hand. Die Laser-Entfernung behält ihren eigenen Preis und wird nie multipliziert.

lua
-- config/tattoo.lua
Config.Tattoo.Prices = {
    flat  = 1000,
    reset = 3000,   -- laser removal, per tattoo removed
}

Config.Tattoo.CollectionMultipliers = {
    multiplayer_overlays = 0.80,   -- base game, cheaper
    mpHipster_overlays   = 0.85,
    -- anything not listed stays at 1.0
}

Die Barber- und die Tattoo-Szene ins Bild rücken

Die Kamera dreht sich um den Kopf, dieselben Höhenwerte funktionieren also im Stehen wie im Sitzen. Licht und Tiefenschärfe machen den Charakter zum Motiv, statt zum Ped in einem dunklen Raum.

lua
-- config/config.lua
Config.Camera = {
    Sensitivity = 1.0,      -- rotation, zoom and height, clamped to 0.1 - 5.0
    InvertY     = false,
}

Config.UI = {
    Tutorial          = true,
    Timecycle         = 'casino_brightroom',
    TimecycleFadeMs   = 400,
    DofStrength       = 0.1,
}

Dein HUD ausblenden, solange ein Shop offen ist

Die Resource feuert ein Client-Event, wenn sich ein Menü öffnet und schließt, für alle drei Module. Häng dich daran, statt zu pollen, es ist dasselbe Signal, das die eingebaute HUD-Steuerung nutzt.

lua
AddEventHandler('avenida_skin:client:uiStateChanged', function(hidden)
    if hidden then
        exports['myhud']:hide()
    else
        exports['myhud']:show()
    end
end)
05

Fragen

Bundle oder die drei einzelnen Resources?

Das Bundle, wenn du alle drei willst: Es kostet weniger und ist eine Sache zum Installieren und Aktualisieren. Die einzelnen Resources, wenn du nur eine oder zwei brauchst, oder wenn du schon einen Kleidungsladen hast, mit dem du zufrieden bist. Was du nie tun darfst: beide gleichzeitig laufen lassen. Sie würden je einen eigenen Blip setzen und je eine eigene Kopie desselben Charakters schreiben. Die Resource erkennt die Überschneidung und meldet das beim Start in der Konsole.

Ich will nur Barbershop und Tattoo-Studio

Setz Config.Clothes = false in Config.Modules. Ein abgeschaltetes Modul registriert nichts: kein Blip, kein Interaktionspunkt, kein Thread, und seine Config wird schlicht nie gelesen. Du kannst auch die beiden einzelnen Resources kaufen, die Entscheidung ist eine Preisfrage, nicht eine Frage dessen, was am Ende läuft.

Behält das Bundle das bestehende Aussehen meiner Spieler?

Ja. Es liest und schreibt dasselbe Charakter-Format wie die einzelnen Resources und läuft über dieselbe Appearance-Bridge. qb-clothing, illenium-appearance, fivem-appearance, esx_skin oder die eigene Tabelle funktionieren also weiter. Für bestehende Charaktere wird übernommen, was sie ohnehin tragen, auch im Besitz-Register der Kleidung.

Welche Frameworks werden wirklich unterstützt?

QBCore, ESX und vRP, dazu ein Standalone-Modus, der gar kein Framework braucht, und ein custom-Zweig in bridges/framework.lua für alles andere. Die Erkennung läuft beim Start und prüft den echten Export. Qbox und ox_core haben keinen eigenen Zweig: Sie laufen über den Standalone- oder Custom-Pfad, nicht über ein getestetes Target.

Funktioniert es mit dem ox-Stack?

Ja, überall, wo es zählt: ox_lib für Notifications, ox_target für den Interaktions-Prompt, ox_inventory für Kleidungs-Items und Rucksack-Container, und oxmysql als einzige harte Dependency. Nichts davon ist Pflicht außer oxmysql.

Was kostet mich vRP?

vRP speichert Kleidungskomponenten und Props, sonst nichts. Es hat kein Feld für Head-Overlays, Gesichtszüge, Haarfarbe, Augenfarbe oder Ped-Decorations. Auf vRP hält diese Resource den ganzen Charakter deshalb in ihrer eigenen Tabelle. Die Kleidungshälfte bekommt vRP trotzdem, nach jeder Änderung aufgefrischt. vRP 2 und vRP 0.5 werden nicht unterstützt, und die Resource sagt das in der Konsole, statt sich still falsch zu verhalten.

Ein Spieler sagt, er habe Kleidung verloren, die ihm gehörte

Prüf Config.Clothes.RequireOwnership. Das Register übernimmt beim ersten Mal, was ein Charakter ohnehin trägt, das Einschalten nimmt also niemandem seine Garderobe weg. Was es ablehnt, ist ein Schreibvorgang für ein Teil ohne Kauf dahinter, und genau das schickt ein manipulierter Client.

Was kostet es, wenn niemand im Shop ist?

0.00ms. Die Interaktionspunkte teilen sich einen Thread, der auf eine Sekunde hochgeht, wenn niemand in der Nähe ist, Blips werden einmal erzeugt, und jeder Session-Thread wird beim Verlassen beendet. Ein abgeschaltetes Modul kostet gar nichts, da keine einzige seiner Zeilen läuft.

Warenkorb
Spirit RP
Discord