Clothing store
Ein Kleidungsladen mit gespeicherten Outfits, Firmen-Garderoben und einem Editor, der den Katalog direkt im Spiel bepreist. Jede Komponente und jedes Prop, Stück für Stück gekauft oder als ganzer Look, mit einem serverseitigen Register, das verhindert, dass jemand etwas trägt, wofür er nie bezahlt hat.
Was es kann
Den Katalog bepreisen, ohne eine Datei anzufassen
Ein Admin-Panel im Laden selbst. Klick ein Kleidungsstück an und setz seinen Preis, versteck es, reservier es für einen Job, gib einem Rucksack echten Stauraum, deklarier eine Komponenten-Verknüpfung oder blende eine einzelne Farbvariante aus. Alles landet in `config/clothes_overrides.lua` und bleibt nach einem Neustart erhalten. Keine Datei bearbeiten, keine Downtime und kein Server-Restart für eine Preisänderung.
Technische
Daten
Alles, was du
bekommst
-
Fünfzehn Sprachdateien, gefüllt ausgeliefert
Deine Spieler lesen das Script vom ersten Start an in ihrer Sprache, und die Dateien liegen außerhalb des Escrows, du kannst also jede Zeile im laufenden Betrieb ändern. Ehrlicher Hinweis: Sie sind von uns übersetzt und geprüft, nicht von Muttersprachlern aller fünfzehn gegengelesen. Sag uns, was in deiner falsch klingt, dann korrigieren wir es.
-
Acht Bridges, je eine Datei
Framework, Notifications, Interaktion, Kleidung, Inventar, Decorations, Screenshots und Compat. Jede Datei dokumentiert ihre Targets, was sie erkennt und was dich jedes Target kostet. Die Erkennung prüft den echten Export statt nur den Resource-Status, ein umbenannter Export degradiert also leise, statt beim Start einen Fehler zu werfen.
-
Der ganze Katalog bleibt offen
Läden, Sektionen, Preise, Steuer und Rabatt, gesperrte Drawables, VIP-Listen und die Overrides, die der Editor im Spiel schreibt. `config/*.lua`, `locales/*.lua` und `bridges/*.lua` sind escrow-frei und im Betrieb editierbar.
-
Ein Installationsbericht für den Support
`/avenida_clotheshops_check` zeigt, welche Bridge pro Kategorie gewählt wurde, ob Tabellen und Spalten existieren und welchen Game Build dein Server tatsächlich fährt. Er beantwortet die meisten Integrationsfragen, bevor du sie stellen musst.
Guide zur Integration
Installation
-
Resource ablegen
Hol dir das Script aus deinem Tebex-Konto, kopier den Ordner
avenida_clotheshops/in dein resources-Verzeichnis und fügensure avenida_clotheshopshinterensure oxmysqlin deine Serverconfig ein. -
SQL ausführen
Führ Abschnitt [A] von
INSTALL.sqlauf deiner Datenbank aus. Abschnitt [B] ist bedingt, der Dateikopf sagt, wann du ihn brauchst. -
Admin-Rechte vergeben
Füg
add_ace group.admin avenida_clotheshops.admin allowundadd_ace group.admin avenida_clotheshops.vip allowin deine Serverconfig ein. Das erste öffnet den Katalog-Editor, das zweite schaltet frei, was du hinter die VIP-Liste legst. -
Den Katalog direkt im Spiel bepreisen
Setz
Config.DevMode.Enabled = true, geh in einen Laden und öffne den Editor. Leg Preise fest, blende aus, was du nicht verkaufst, und reservier für einen Job, was dorthin gehört. Alles landet inconfig/clothes_overrides.lua. Schalt DevMode danach wieder aus, jede Speicherung wird ohnehin serverseitig erneut geprüft. -
Integrationen prüfen
Setz
Config.Debug = true, starte neu und lies die Konsole: Eine Zeile pro Bridge-Kategorie nennt das gewählte Target.Config.Debugsteuert nur das Logging und ist nicht der Schalter für den Editor.
Schnellstart
Eine Sektion auf drei Arten bepreisen
Jeder Laden deklariert seine Sektionen, und jede Sektion ihren 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.
-- 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 } },
-- only these drawables are offered
whitelist = { 12, 45, 51 },
},
}API-Referenz
Öffentliche Exports nach Bereich gruppiert. Jede Zeile zeigt die Signatur und was der Export macht, nicht wie er es macht.
Client
GetSkinData
exports['avenida_clotheshops']:GetSkinData()Das Outfit, das der Spieler trägt, Komponente für Komponente, samt Props. Genau das schreibt der Shop beim Kauf, es deckt sich also immer mit dem, was die Garderobe zeigt.
ApplySkin
exports['avenida_clotheshops']:ApplySkin(data, ped)Wendet ein komplettes Aussehen auf einen Ped an. Ein Outfit leert den Decoration-Slot, deshalb trägt dieser Aufruf danach die Arbeit von Barber und Tattoo wieder ein, statt blanke Haut zurückzulassen.
ApplyClothing
exports['avenida_clotheshops']:ApplyClothing(data, ped, temporary)Wechselt die Kleidung und sonst nichts. Mit
temporaryauf true gilt das Outfit nur für die Session, genau so soll sich eine Uniform verhalten, die ein Job ausgibt.
Server
GetBagStorage
exports['avenida_clotheshops']:GetBagStorage(sex, drawable) --> { weight, slots } | nilDie Kapazität, die ein Rucksack-Drawable mitbringt, Gewicht und Slots, oder nil, wenn das Drawable nichts fasst. Ruf den Export aus deiner Inventory-Resource auf, damit ein gekaufter Rucksack wirklich etwas fasst.
Rezepte
Praxisnahe Copy-Paste-Beispiele. In deine eigene Resource kopieren, Werte anpassen, fertig.
Ein Laden ist ein Eintrag. Er trägt seinen Anzeigenamen, seine Zahlungsart, sein Währungssymbol, eine optionale Steuer und einen Rabatt auf die Warenkorbsumme und die Sektionen, die er anbietet. Halt den Key stabil: Er ist die Laden-Id, die in Outfits gespeichert wird, und wer ihn umbenennt, nachdem Spieler dort eingekauft haben, zerschießt ihre Daten.
-- config/clothes_shops.lua
Config.Clothes.Shops[22] = {
name = 'Ponsonbys - Rockford Hills',
payment = 'bank',
currency = '$',
tax = 0.20, -- +20% on the cart
discount = 0.00,
outfitMode = true,
blip = { sprite = 73, color = 4, scale = 0.7, coords = vec3(-708.2, -152.2, 37.4) },
categories = {
tops = { enabled = true, price = { mode = 'fixed', base = 900 } },
shoes = { enabled = true, price = { mode = 'fixed', base = 450 } },
},
}Ein eingeschränktes Teil ist für alle unsichtbar, die die Prüfung nicht bestehen, ein Zivilist sieht die Polizeijacke also nie im Raster. Firmen-Garderoben gehen weiter: Der Chef pflegt eine gemeinsame Liste, und jedes Mitglied trägt sie, ohne zu zahlen, genau das, was ein Rekrut in seiner ersten Schicht braucht.
-- config/clothes_overrides.lua, or write it from the in-game editor
Overrides['tops'] = {
[56] = { job = 'police', label = 'LSPD jacket' },
[12] = { hidden = true },
[31] = { restricted = true }, -- ACE permission
}Es ist standardmäßig an und hält einen manipulierten Client davon ab, den Katalog gratis zu tragen. Schalt es nur ab, wenn eine andere deiner Resources Spieler in Teile kleidet, die sie nie gekauft haben, und du das Register dafür nicht befüllen willst. Für bestehende Charaktere wird das Register aus dem befüllt, was sie ohnehin tragen, ein späteres Einschalten nimmt also nichts weg.
-- config/clothes.lua
Config.Clothes.RequireOwnership = false
-- how far from a store the server still accepts a purchase
Config.Clothes.PurchaseRange = 30.0
-- saved outfits per character, enforced server side
Config.Clothes.MaxOutfits = 30
Config.Clothes.MaxOutfitsRestricted = 50Ein komplettes Outfit leert den Decoration-Slot des Peds, den sich jede Resource auf dem Server teilt. Wenn dein Script einen Spieler einkleidet, lies vorher aus, was diese Resource besitzt, und gib es danach zurück, sonst gehen Tattoos und Hair Base mit der Änderung verloren.
local hairbase = exports['avenida_clotheshops']:GetHairbase()
local tattoos = exports['avenida_clotheshops']:GetTattoos()
-- your own clothing work here
if hairbase then
AddPedDecorationFromHashes(PlayerPedId(), hairbase.c, hairbase.t)
end
for _, dec in ipairs(tattoos) do
AddPedDecorationFromHashes(PlayerPedId(), dec.c, dec.t)
endFehlerbehebung
- 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. Wenn eine deiner Resources Spieler in nie gekaufte Teile kleidet, registrier diese Käufe oder setz das Flag auf false.
- Er braucht beides gleichzeitig: die ACE-Permission `avenida_clotheshops.admin` und `Config.DevMode.Enabled = true`. `Config.Debug` ist ein anderer Schalter und steuert nur das Logging. Jede Speicherung wird serverseitig erneut geprüft, es reicht also nicht, sich die Permission im Spiel selbst zu geben.
- Das ist GTA. Das Spiel wiederholt ein Drawable über mehrere Indizes, und die meisten Läden listen jeden einzelnen davon. Phantom-Drawables werden hier gefiltert, wenn du also noch ein Duplikat siehst, ist es meist ein Kleidungs-Pack, das dasselbe Asset zweimal ausliefert. Blende das überzählige Teil im Editor im Spiel aus, es landet in `config/clothes_overrides.lua`.
- Der Schnitt wird pro Item deklariert, ein Helm oder eine Maske, die du selbst ergänzt hast, hat also noch keine Regel. Stell ihr Haarverhalten im Katalog-Editor ein, und denk an den Spieler-Override: Wer seine Frisur behalten will, kann das einstellen, und seine Wahl geht dem automatischen Schnitt vor.
- Sie brauchen screenshot-basic, und nur dafür. Es ist die einzige optionale Integration aus der Anforderungstabelle, deren Fehlen ein Spieler überhaupt bemerkt: Ohne sie funktionieren gespeicherte Outfits genau gleich, die Liste zeigt aber Namen statt Vorschaubildern.
- 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.
- Ja, genau dafür sind sie gebaut. Diese hier greift am stärksten ein, weil ein Outfit den Decoration-Slot leert, also trägt sie nach jeder Änderung wieder ein, was den beiden anderen gehört. Was du nicht tun darfst: die einzelnen Resources und das Bundle `avenida_skin` gleichzeitig laufen lassen. Die Resource erkennt die Überschneidung und meldet das beim Start in der Konsole.
- 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. Der Vorschau-Debounce existiert nur, solange ein Menü offen ist, und lässt sich für schwächere Rechner anpassen.
Was Käufer sagen
4.8 5 verifizierte Bewertungen
Haldor brilliant scripts and great support 10 /10
BigOppGrimeyy GangWrld NYC 10/10 was having a problem and these guys ain't stop till it was fix customer service is great definitely buying again
00hugi Super scripts and even better and fast support. Thanks a lot!!
reapersrow Amazing support from the developers and a smooth script!
Necro Huston RP Best service Ive ever received! He even helped me fix problems not associated with his script!
EMPFOHLEN Avenida TeamCore 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.
EMPFOHLEN Avenida TeamBarber shop
Ein Barbershop, inszeniert wie eine Szene, mit einer Kamera, die der Spieler wirklich steuert. Der Charakter kommt herein, setzt sich, und der Barber legt los, während eine Orbit-Kamera den Kopf ins Bild rückt. Haare, Bart, Overlays und der komplette Satz an Skin-Details, live am Charakter zu sehen, bevor ein einziger Dollar ausgegeben ist.
EMPFOHLEN Avenida TeamTattoo shop
Der komplette Tattoo-Katalog des Spiels, mit Warenkorb und einem Stuhl, in den du dich wirklich setzt. 1615 Motive aus 26 DLC-Collections, live an deinem Charakter zu sehen, während du sie hinzufügst, in einem Rutsch bezahlt. Laser-Entfernung inklusive, und ein Artist, der hereinkommt und die Arbeit erledigt.