Advanced Daily Shop with Admin Panel | ESX Framework
urBoutique est un système de boutique in-game complet pour FiveM avec monnaie virtuelle (Coins), rotations automatiques, abonnements VIP et panel admin intégré. Interface moderne, boutiques personnalisées par joueur et système de codes partenaires inclus.
✅ Interface NUI Moderne : React + Tailwind CSS, responsive avec 3 thèmes personnalisables.
✅ Monnaie Virtuelle : Coins avec cache optimisé et API d'exports complète.
✅ Rotations Intelligentes : Automatiques (quotidiennes) + manuelles (dates personnalisées).
✅ Système VIP : Offres personnalisables avec refresh gratuits et avantages exclusifs.
✅ Panel Admin Complet : Gestion produits, catégories, transactions, logs et statistiques en temps réel.
✅ Boutiques Personnalisées : Code unique par joueur avec sélection d'items individuelle.
✅ Codes Partenaires : Système promotionnel avec tracking et logs Discord automatiques.
✅ Performance : Cache RAM, requêtes asynchrones, anti-spam intégré.
Ouvrir la boutique : Touche F10 (configurable) pour accéder à l'interface avec votre solde Coins.
Acheter : Sélectionnez un produit, visualisez les récompenses (items, argent, véhicules), ajoutez un code partenaire optionnel et validez. Distribution instantanée.
Refresh : Régénérez votre boutique (complète ou item individuel). Gratuit pour VIP avec cooldown, payant pour les autres.
VIP : Achetez des abonnements avec avantages exclusifs (refresh gratuits, prix réduits).
Historique : Consultez toutes vos transactions avec filtres et détails complets.
🔹 Framework : ESX
🔹 Base de données : oxmysql
🔹 Dépendances : es_extended, oxmysql
urBoutique dans votre dossier resources/.es_extended, oxmysql).shared/config.lua selon vos besoins.server.cfg :1ensure urBoutique
📁 Client & Server : Lua optimisé avec cache RAM et requêtes asynchrones.
📁 Interface NUI : React + Tailwind CSS (source incluse + build prod).
📁 ORM Intégré : Système de repositories pour gérer les données facilement.
📁 Système de Logs : Logs Discord avec webhooks configurables.
📁 Panel Admin : Interface complète pour gérer produits, catégories, transactions, rotations, VIP et statistiques.
📁 Thèmes CSS : 3 thèmes préinstallés + possibilité d'en créer facilement.
💰 Coins : Monnaie virtuelle avec cache optimisé, API d'exports et commandes admin.
🔄 Rotations : Automatiques (quotidiennes configurables) ou manuelles (dates personnalisées) avec gestion admin.
👑 VIP : Offres personnalisables avec refresh gratuits, prix réduits et badge exclusif.
🎟️ Codes Partenaires : Création/suppression par commandes, tracking d'utilisations et logs Discord.
🛍️ Boutiques Personnalisées : Code unique par joueur (8 caractères), sélection individuelle, régénération auto.
📊 Panel Admin : Gestion complète des produits (CRUD + images), catégories (icônes), transactions (filtres), rotations (preview), VIP (offres + joueurs), statistiques (revenus, tops) et logs (actions + filtres).
| Commande | Accès | Description |
|---|---|---|
/boutique ou F10 | Tous | Ouvre l'interface de la boutique |
/givecoins <id> <montant> | Admin | Donne des Coins à un joueur |
/removecoins <id> <montant> | Admin | Retire des Coins à un joueur |
/create_code <code> | Admin | Crée un code partenaire |
/delete_code <code> | Admin | Supprime un code partenaire |
/get_codes | Admin | Affiche la liste des codes partenaires |
1exports['urBoutique']:AddCoins(source, amount)
Paramètres :
source (number) : ID du joueuramount (number) : Montant à ajouter (doit être positif)Retour : boolean — true si succès, false si erreur
Exemple d'utilisation :
1-- Récompenser un joueur après une mission 2local playerId = source 3local reward = 500 4 5if exports['urBoutique']:AddCoins(playerId, reward) then 6 TriggerClientEvent('esx:showNotification', playerId, 'Vous avez reçu ' .. reward .. ' Coins !') 7else 8 print('Erreur lors de l\'ajout de coins') 9end
1exports['urBoutique']:RemoveCoins(source, amount)
Paramètres :
source (number) : ID du joueuramount (number) : Montant à retirer (doit être positif)Retour : boolean — true si succès, false si solde insuffisant ou erreur
Exemple d'utilisation :
1-- Déduire un coût pour un service 2local playerId = source 3local cost = 200 4 5if exports['urBoutique']:RemoveCoins(playerId, cost) then 6 TriggerClientEvent('esx:showNotification', playerId, 'Service acheté pour ' .. cost .. ' Coins') 7 -- Donner le service au joueur 8else 9 TriggerClientEvent('esx:showNotification', playerId, '~r~Solde insuffisant !') 10end
1exports['urBoutique']:SetCoins(source, amount)
Paramètres :
source (number) : ID du joueuramount (number) : Nouveau solde (doit être positif ou zéro)Retour : boolean — true si succès, false si erreur
Exemple d'utilisation :
1-- Reset le solde d'un joueur 2local playerId = source 3 4if exports['urBoutique']:SetCoins(playerId, 1000) then 5 print('Solde du joueur ' .. playerId .. ' défini à 1000 Coins') 6else 7 print('Erreur lors de la définition du solde') 8end
1local balance = exports['urBoutique']:GetCoins(source)
Paramètres :
source (number) : ID du joueurRetour : number — Solde actuel du joueur (depuis le cache)
Exemple d'utilisation :
1-- Vérifier le solde avant une action 2local playerId = source 3local balance = exports['urBoutique']:GetCoins(playerId) 4 5if balance >= 500 then 6 print('Le joueur ' .. playerId .. ' a ' .. balance .. ' Coins') 7 -- Autoriser l'action 8else 9 TriggerClientEvent('esx:showNotification', playerId, '~r~Vous avez besoin de 500 Coins') 10end
1exports['urBoutique']:SendDiscordLog(title, description, color, imageUrl)
Paramètres :
title (string) : Titre du logdescription (string) : Description/contenu du log (supporte le markdown Discord)color (number, optionnel) : Couleur de l'embed (format décimal)
3066993 = Vert (succès)15158332 = Rouge (erreur)16776960 = Jaune (warning)3447003 = Bleu (info)imageUrl (string, optionnel) : URL d'une image à afficherExemple d'utilisation :
1-- Logger un événement important 2local playerName = GetPlayerName(source) 3local playerId = source 4 5exports['urBoutique']:SendDiscordLog( 6 '🎉 Achat Important', 7 '**Joueur :** ' .. playerName .. '\n' .. 8 '**ID :** ' .. playerId .. '\n' .. 9 '**Produit :** Super Item VIP\n' .. 10 '**Montant :** 5000 Coins', 11 3066993, -- Vert 12 'https://example.com/image.png' 13)
shared/config.lua1Config = {} 2 3-- ── Général ────────────────────────────────────────────────── 4Config.Locale = 'fr' -- Langue ('en', 'fr') 5Config.DEBUG = false -- Logs de debug 6Config.CoinsLabel = "DC" -- Label de la monnaie 7Config.KeyOpen = 'F10' -- Touche pour ouvrir 8Config.ResetHour = 6 -- Heure du reset quotidien 9Config.DailyRotationSize = 6 -- Items par rotation 10Config.PremiumRefreshPerDay = 1 -- Refresh VIP gratuits/jour 11Config.AntiSpamDelay = 2000 -- Délai anti-spam (ms) 12Config.FullShopRefreshPrice = 1000 -- Prix refresh complet 13Config.SingleItemRefreshPrice = 500 -- Prix refresh 1 item 14Config.PlayerShopDefaultRefreshHours = 24 -- Durée boutique joueur 15Config.PlayerShopMaxItemsPerCategory = 2 -- Max items/catégorie 16Config.ShopCodeChangeIntervalDays = 7 -- Intervalle changement code 17 18-- ── Thème ──────────────────────────────────────────────────── 19Config.Theme = 'blue' -- 'blue' | 'red' | 'green' 20 21-- ── Webhook Discord ────────────────────────────────────────── 22Config.WebhookURL = 'VOTRE_WEBHOOK_ICI' 23Config.WebhookName = 'urBoutique' 24Config.WebhookAvatar = '' 25 26-- ── Rotation Automatique ───────────────────────────────────── 27Config.AutoRotationEnabled = true 28Config.AutoRotationHour = 6 -- Heure de rotation 29Config.AutoRotationIntervalDays = 1 -- Intervalle en jours 30Config.AutoRotationNbProducts = 6 -- Nombre de produits
1-- Récompenser un joueur après une quête
2RegisterServerEvent('myQuest:complete')
3AddEventHandler('myQuest:complete', function()
4 local playerId = source
5 local reward = 250
6
7 if exports['urBoutique']:AddCoins(playerId, reward) then
8 TriggerClientEvent('esx:showNotification', playerId,
9 '~g~Quête terminée ! +' .. reward .. ' Coins')
10 end
11end)
1-- Récompenser les votes
2RegisterServerEvent('voteSystem:voted')
3AddEventHandler('voteSystem:voted', function()
4 local playerId = source
5 local voteReward = 100
6
7 exports['urBoutique']:AddCoins(playerId, voteReward)
8
9 exports['urBoutique']:SendDiscordLog(
10 '🗳️ Vote Reçu',
11 '**Joueur :** ' .. GetPlayerName(playerId) .. '\n' ..
12 '**Récompense :** ' .. voteReward .. ' Coins',
13 3066993
14 )
15end)
1-- Vendre un service premium
2RegisterServerEvent('customShop:buyService')
3AddEventHandler('customShop:buyService', function(serviceId)
4 local playerId = source
5 local serviceCost = 500
6
7 local balance = exports['urBoutique']:GetCoins(playerId)
8
9 if balance >= serviceCost then
10 if exports['urBoutique']:RemoveCoins(playerId, serviceCost) then
11 -- Donner le service
12 TriggerClientEvent('customShop:giveService', playerId, serviceId)
13 TriggerClientEvent('esx:showNotification', playerId,
14 '~g~Service acheté avec succès !')
15 end
16 else
17 TriggerClientEvent('esx:showNotification', playerId,
18 '~r~Solde insuffisant ! Nécessaire: ' .. serviceCost .. ' Coins')
19 end
20end)
✅ Vérifications serveur, anti-spam configurable, cache optimisé, validation des montants et logs Discord complets.
urBoutique — Boutique in-game complète pour FiveM ESX avec monnaie virtuelle, VIP et panel admin
TriggerClientEvent('esx:showNotification', source, 'gAcheté !