Clothing store
Un magasin de vêtements avec tenues sauvegardées, garde-robes d'entreprise et un éditeur qui tarife le catalogue depuis le jeu. Tous les composants et tous les props, achetés pièce par pièce ou en tenue complète, avec un registre côté serveur qui empêche de porter ce qu'on n'a jamais payé.
Ce qu'il fait
Tarifez le catalogue sans toucher à un fichier
Un panneau admin à l'intérieur du magasin. Cliquez sur un vêtement et fixez son prix, masquez-le, réservez-le à un job, donnez un vrai stockage à un sac, déclarez un lien de composants ou cachez un seul coloris. Tout est écrit dans `config/clothes_overrides.lua` et survit à un redémarrage. Aucun fichier à éditer, aucune coupure, et pas de restart pour changer un prix.
Spécifications
techniques
Tout ce que vous
recevez
-
Quinze fichiers de langue, livrés remplis
Vos joueurs lisent le script dans leur langue dès le premier démarrage, et les fichiers sont hors escrow, donc vous pouvez corriger n'importe quelle ligne en production. Note honnête : ils sont traduits et relus par nos soins, pas par des natifs des quinze langues. Dites-nous ce qui sonne faux dans la vôtre, c'est corrigé.
-
Huit bridges, un fichier chacun
Framework, notifications, interaction, vêtements, inventaire, décorations, captures d'écran et compat. Chaque fichier documente ses cibles, ce qu'il détecte, et ce que chaque cible vous coûte. La détection sonde l'export réel plutôt que l'état de la ressource, un export renommé dégrade donc en silence au lieu de planter au démarrage.
-
Tout le catalogue reste ouvert
Magasins, sections, prix, taxe et remise, drawables bloqués, listes VIP et les overrides que l'éditeur en jeu écrit. `config/*.lua`, `locales/*.lua` et `bridges/*.lua` sont hors escrow et modifiables en production.
-
Un rapport d'installation à coller au support
`/avenida_clotheshops_check` affiche quel bridge a été retenu pour chaque catégorie, si les tables et les colonnes existent, et quelle version du jeu tourne réellement. Il répond à la plupart des questions d'intégration avant que vous ayez à les poser.
Guide d'intégration
Installation
-
Déposez la ressource
Récupérez le script depuis votre compte Tebex, copiez le dossier
avenida_clotheshops/dans votre dossier resources et ajoutezensure avenida_clotheshopsà votre config serveur, aprèsensure oxmysql. -
Passez le SQL
Exécutez la section [A] d'
INSTALL.sqlsur votre base. La section [B] est conditionnelle, l'en-tête du fichier dit quand elle s'applique. -
Donnez-vous les permissions
Ajoutez
add_ace group.admin avenida_clotheshops.admin allowetadd_ace group.admin avenida_clotheshops.vip allowà votre config serveur. La première ouvre l'éditeur de catalogue, la seconde débloque ce que vous placez derrière la liste VIP. -
Tarifez le catalogue depuis le jeu
Mettez
Config.DevMode.Enabled = true, entrez dans un magasin et ouvrez l'éditeur. Fixez les prix, masquez ce que vous ne vendez pas, réservez ce qui appartient à un job. Tout atterrit dansconfig/clothes_overrides.lua. Recoupez DevMode une fois terminé, il est revérifié côté serveur à chaque sauvegarde. -
Contrôlez les intégrations
Mettez
Config.Debug = true, redémarrez, et lisez la console : une ligne par catégorie de bridge nomme la cible retenue.Config.Debugne pilote que les logs, ce n'est pas l'interrupteur de l'éditeur.
Démarrage rapide
Tarifer une section de trois façons
Chaque magasin déclare ses sections, et chaque section son mode de tarification. Un forfait pour toute une section, un multiplicateur qui rend les drawables suivants plus chers, ou une table quand seules quelques pièces méritent leur propre prix.
-- 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 },
},
}Référence API
Exports publics groupés par domaine. Chaque ligne montre la signature d'appel
Client
GetSkinData
exports['avenida_clotheshops']:GetSkinData()La tenue portée par le joueur, composant par composant, props compris. C'est ce que la boutique écrit à l'achat, donc c'est toujours en phase avec ce que la penderie affiche.
ApplySkin
exports['avenida_clotheshops']:ApplySkin(data, ped)Applique une apparence complète à un ped. Poser une tenue vide l'emplacement de décoration, donc cet appel remet ensuite le travail du barbier et du tatoueur au lieu de laisser une peau nue.
ApplyClothing
exports['avenida_clotheshops']:ApplyClothing(data, ped, temporary)Change les vêtements et rien d'autre. Avec
temporaryà true, la tenue ne vit que le temps de la session, ce qui est le comportement attendu d'un uniforme distribué par un métier.
Server
GetBagStorage
exports['avenida_clotheshops']:GetBagStorage(sex, drawable) --> { weight, slots } | nilLa capacité qu'accorde un drawable de sac, poids et emplacements, ou nil quand ce drawable ne porte rien. Appelez-la depuis votre ressource d'inventaire pour qu'un sac acheté en boutique contienne vraiment quelque chose.
Recettes
Exemples copier-coller pour les cas courants. À déposer dans ta ressource, ajuster les valeurs, et c'est en prod.
Un magasin est une entrée. Il porte son nom d'affichage, son moyen de paiement, son symbole monétaire, une taxe et une remise appliquées au total du panier, et les sections qu'il propose. Gardez la clé stable : c'est l'identifiant de magasin enregistré dans les tenues, et le renommer après que des joueurs y ont acheté casse leurs données.
-- 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 } },
},
}Une pièce restreinte est masquée à qui ne passe pas le contrôle, un civil ne voit donc jamais la veste de police dans la grille. Les garde-robes d'entreprise vont plus loin : le patron édite une liste partagée et chaque membre la porte sans payer, ce qu'il vous faut pour une recrue à sa première prise de service.
-- 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
}Il est actif par défaut et c'est lui qui empêche un client trafiqué de porter le catalogue gratuitement. Ne le coupez que si une autre de vos ressources habille les joueurs avec des pièces qu'ils n'ont jamais achetées et que vous préférez ne pas les initialiser. Les personnages existants sont initialisés depuis ce qu'ils portent, l'activer plus tard ne retire donc rien.
-- 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 = 50Appliquer une tenue complète efface l'emplacement de décorations du ped, partagé par tout le serveur. Si votre script habille un joueur, lisez d'abord ce que cette ressource possède et remettez-le ensuite, sinon les tatouages et la hair base partent avec le changement.
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)
endQuestions fréquentes
- Regardez `Config.Clothes.RequireOwnership`. Le registre initialise un personnage depuis ce qu'il porte déjà la première fois qu'il le voit, l'activer ne retire donc pas de garde-robe. Ce qu'il refuse, c'est une écriture pour un vêtement sans achat derrière, ce qu'envoie justement un client trafiqué. Si une de vos ressources habille les joueurs avec des pièces jamais achetées, enregistrez ces achats ou passez le drapeau à false.
- Il lui faut deux choses en même temps : la permission ACE `avenida_clotheshops.admin` et `Config.DevMode.Enabled = true`. `Config.Debug` est un autre interrupteur, il ne pilote que les logs. Chaque sauvegarde est revérifiée côté serveur, se donner la permission en jeu ne suffit donc pas à lui seul.
- C'est GTA. Le jeu répète un drawable sur plusieurs index, et la plupart des magasins les listent tous. Les drawables fantômes sont filtrés ici, donc si vous voyez encore un doublon, c'est en général un pack de vêtements qui livre deux fois le même asset. Masquez celui de trop depuis l'éditeur en jeu, il atterrit dans `config/clothes_overrides.lua`.
- La coupe est déclarée par item, un casque ou un masque que vous avez ajouté vous-même n'a donc pas encore de règle. Réglez son comportement capillaire depuis l'éditeur de catalogue, et n'oubliez pas la préférence joueur : qui tient à garder sa coiffure peut le dire, et son choix l'emporte sur la coupe automatique.
- Elles demandent screenshot-basic, et uniquement pour ça. C'est la seule intégration optionnelle du tableau des prérequis dont l'absence se voit côté joueur : sans elle, les tenues sauvegardées fonctionnent exactement pareil mais la liste affiche des noms au lieu d'aperçus.
- QBCore, ESX et vRP, plus un mode standalone qui ne demande aucun framework et une branche `custom` dans `bridges/framework.lua` pour le reste. La détection tourne au démarrage et sonde l'export réel. Qbox et ox_core n'ont pas de branche dédiée : ils passent par le chemin standalone ou custom, pas par une cible testée.
- Oui, c'est exactement pour ça qu'ils sont construits. Celui-ci est le plus perturbateur des trois, puisque appliquer une tenue efface l'emplacement de décorations, il remet donc ce que possèdent les deux autres après chaque changement. Ce qu'il ne faut pas faire, c'est lancer les ressources séparées et le pack `avenida_skin` en même temps. La ressource détecte le recouvrement et le signale en console au démarrage.
- 0.00ms. Les points d'interaction partagent un thread qui se met à une seconde quand personne n'est à proximité, les blips sont créés une fois, et chaque thread de session est tué à la sortie. Le debounce d'aperçu n'existe que pendant qu'un menu est ouvert, et il se règle pour les machines faibles.
Ce qu'en disent les acheteurs
4.8 5 avis vérifiés
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!
EN AVANT Avenida TeamCore Skin (3 in 1)
Barbier, salon de tatouage et magasin de vêtements dans une seule ressource FiveM. 1615 tatouages, tous les composants et props de vêtements, tout le visage et la peau, répartis sur 36 boutiques. Une interface, une caméra, un flux d'achat, et une seule chose à installer sur ESX, QBCore, vRP ou en standalone.
EN AVANT Avenida TeamBarber shop
Un barbier mis en scène, avec une caméra que le joueur pilote vraiment. Le personnage entre, s'assoit, et le barbier travaille pendant qu'une caméra orbitale cadre la tête. Cheveux, barbe, overlays et tous les détails de peau, prévisualisés avant d'avoir dépensé un dollar.
EN AVANT Avenida TeamTattoo shop
Tout le catalogue de tatouages du jeu, avec un panier et un fauteuil où l'on s'assoit vraiment. 1615 motifs répartis sur 26 collections DLC, prévisualisés en direct sur votre personnage au fur et à mesure, payés en une fois. Détatouage au laser inclus, et un tatoueur qui entre et fait le travail.