
Giveaway
Crée des giveaways directement en jeu : lance-les tout de suite ou enregistre-les comme modèle, qui se lance automatiquement à heures fixes si tu le souhaites. Les joueurs participent avec une touche ou une commande, les gagnants sont tirés en direct avec une roue de noms. Le script crée lui-même les tables.
- ESX Legacy (
es_extended, testé avec 1.14) - oxmysql
- Table
owned_vehiclespour les lots de véhicules (p. ex. d'ESX ou de off_vehicleshop) - Pour les images d'items : off_inventory (ou ton propre chemin dans
itemImages)
Fonctionnalités
- Menu admin (
/giveawayadmin) : Crée des giveaways sur une seule page (lots, durée, gagnants, un nom en option), avec un aperçu en direct de ce que voient les joueurs. - Lots : Items, armes, argent (liquide, banque, argent sale ou comptes personnalisés) et véhicules. Tous les véhicules du jeu, y compris les véhicules addon, sont proposés avec image et catégorie.
- Lot fixe ou loterie : Soit chaque gagnant reçoit tout ce qui est dans la liste, soit chacun tire un lot selon les chances, p. ex. 60 % argent, 30 % banque, 10 % véhicule.
- Règles : Nombre de gagnants, frais d'entrée, durée, nombre maximum et minimum de participants. S'il y en a trop peu, le giveaway est annulé et remboursé.
- Modèles : Enregistre des giveaways et lance-les ou duplique-les en un clic, ou ajuste-les dans l'onglet Créer.
- Lancer automatiquement : Activable par modèle, à des jours de la semaine et des heures fixes, p. ex. chaque vendredi à 20:00 et 22:30. En option, seulement quand assez de joueurs sont en ligne.
- Historique : Contrôle le giveaway en cours en direct (tirer maintenant ou annuler) et consulte les 50 derniers giveaways avec leurs gagnants.
- Affichage joueurs : En haut de l'écran avec les lots, le timer et le nombre de participants. Participe avec G ou
/giveaway, H affiche ou masque l'affichage. - Livraison différée : Si un lot ne rentre pas dans l'inventaire ou si le gagnant est hors ligne, il est enregistré et livré automatiquement plus tard.
- Logs Discord pour les actions admin, les giveaways et chaque lot remis.
Installation
- Place le dossier
off_giveawaydansresources. - Dans le
server.cfg, après oxmysql et ESX :
ensure oxmysql
ensure es_extended
ensure off_giveaway- Ajoute ton groupe dans
admin.groupset ouvre/giveawayadmin.
Les items et armes doivent exister dans ESX (table items ou liste d'armes d'ESX). Sinon, le giveaway ne peut être ni enregistré ni lancé. La console serveur signale au démarrage les modèles avec des items manquants.
Configuration
config/settings/config.lua
| Option | Par défaut | Description |
|---|---|---|
serverInfo.name | 'OFF SCRIPTS' | Nom du serveur, affiché dans l'interface à la place de « OFF SCRIPTS » |
serverInfo.locale | 'de' | Langue : de, en, pl, fr, es ou it |
serverInfo.color | { 155, 89, 255 } | Couleur des menus et de l'affichage joueurs |
serverInfo.design | 3 | Design de l'interface : 1 = Classique, 2 = Ticket, 3 = Storefront |
blur | true | Arrière-plan flou tant que le menu admin est ouvert |
admin.command / groups | 'giveawayadmin' / { 'projektleitung' } | Commande du menu admin et groupes autorisés à l'ouvrir |
join.command / key / keyLabel | 'giveaway' / 47 / 'G' | Commande et touche pour participer · key en Control-ID, keyLabel apparaît dans l'affichage |
toggle.key / keyLabel | 74 / 'H' | Touche pour afficher et masquer l'affichage |
itemImages | 'nui://off_inventory/web/dist/images/items/%s.png' | Chemin vers les images des items, %s = nom de l'item |
accounts | Liquide, banque, argent sale | Comptes proposés comme lot d'argent : name = compte ESX, label = nom affiché, icon en option (icône Phosphor) |
feeAccounts | { 'money', 'bank' } | Frais d'entrée : le premier compte avec assez d'argent paie, donc le liquide et sinon la banque |
limits.maxMembers / maxWinners | 2500 / 25 | Valeurs maximales dans le menu |
limits.maxDuration | 180 | Durée maximale en minutes |
vehicles.plateFormat | 'LLL NNN' | Plaque des véhicules gagnés : L = lettre, N = chiffre, 8 caractères max. |
vehicles.types | voir fichier | Type dans owned_vehicles par catégorie (voiture, moto, bateau, hélico, avion), doit correspondre à ton garage |
vehicles.blacklist | Véhicules militaires | Modèles non proposés dans le menu |
pendingInterval | 120 | Nombre de secondes entre deux nouvelles tentatives pour les lots en attente |
Ajouter ton propre compte comme lot, p. ex. des jetons de casino :
accounts = {
{ name = 'money', label = 'Bargeld' },
{ name = 'bank', label = 'Bank' },
{ name = 'chips', label = 'Casino-Chips' },
},config/functions.lua
C'est ici que tu connectes tes propres scripts. Les erreurs qu'elles contiennent sont interceptées, le script continue de tourner.
| Fonction | Utilité |
|---|---|
Notify(message, type) | Notification · Serveur : Notify(source, message, type) |
ClientCanUseKeys() | false = ne pas participer par touche ni basculer l'affichage maintenant |
ServerCanJoin(source, giveaway) | false = le joueur ne peut pas participer, p. ex. en prison |
ServerGiveawayStarted(giveaway) | Un giveaway démarre, p. ex. ton propre post Discord |
ServerGiveawayEnded(giveaway, winners) | Tiré au sort, winners avec source (nil = hors ligne), identifier, name et reward |
ServerGiveawayCancelled(giveaway, reason) | Annulé, reason = 'admin' ou 'members' |
ServerRewardGiven(source, reward) | Après chaque lot remis ou livré plus tard |
config/settings/config.server.lua et langues
Webhooks Discord pour admin (modèles), giveaway (lancement, tirage, annulation) et rewards (chaque lot), url = '' désactive un log. Tous les textes se trouvent dans config/locales/ (un fichier par langue).
En jeu
- Menu admin (
/giveawayadmin) : En haut, tu passes entre Créer, Modèles et Historique. Si un giveaway est en cours, une indication LIVE en haut affiche le temps restant. - Créer : Réponds à trois questions : qu'y a-t-il à gagner, combien de temps ça dure, combien de gagnants. Le nom est optionnel, tout le reste se trouve sous Plus de réglages. À droite, tu vois l'affichage tel que les joueurs le voient. Lancer le giveaway le lance tout de suite, Comme modèle l'enregistre. Charger un modèle reprend un modèle enregistré pour l'ajuster.
- Lots : En haut, tu choisis le type. Item, arme et véhicule ouvrent une liste avec image et recherche, l'argent ajoute directement un montant. Pour les armes, la quantité correspond aux munitions. Dans la Loterie (sous Plus de réglages), tu donnes une chance à chaque lot, 100 % au total. Répartir également les répartit à parts égales.
- Modèles : À gauche la liste, à droite l'éditeur : en haut le nom, en dessous les mêmes questions que pour la création. Le nom du modèle est aussi le nom que voient les joueurs. Au lieu du nom, le point 4 demande Lancer automatiquement : choisis les jours de la semaine et jusqu'à 6 horaires, en dessous s'affiche le prochain lancement, en option Minimum en ligne. Seul Enregistrer applique les modifications. Lancer maintenant lance le modèle tout de suite, Ajuster et lancer l'ouvre dans l'onglet Créer. L'heure est celle du serveur.
- Historique : En haut, tu contrôles le giveaway en cours, en dessous se trouvent les statistiques et les 50 derniers giveaways. Un clic sur une entrée affiche les gagnants avec leurs lots.
- Participer : Quand un giveaway démarre, l'affichage apparaît en haut chez tous les joueurs. Tu participes avec G ou
/giveaway, les frais d'entrée sont prélevés d'abord sur le liquide, sinon sur la banque. H réduit l'affichage à une petite barre et le rouvre. - Tirage : Quand le temps est écoulé ou qu'un admin lance le tirage, les gagnants sont tirés l'un après l'autre avec la roue de noms. Ensuite, tout le monde voit la liste des gagnants, les gagnants reçoivent en plus un message. Sans Tirage animé, la liste apparaît tout de suite.
- Les véhicules gagnés arrivent rangés au garage (
owned_vehicles) avec leur propre plaque, même si le gagnant est hors ligne. - Livraison différée : Si l'inventaire est plein ou si le gagnant est hors ligne, il reçoit son lot automatiquement dès qu'il y a de la place ou qu'il revient en ligne. Les frais remboursés aux joueurs hors ligne fonctionnent de la même façon.
Il n'y a toujours qu'un seul giveaway en cours. Un lancement automatique qui tombe pendant un giveaway en cours est ignoré et noté dans la console.
Pour les développeurs
-- Serveur
local active = exports.off_giveaway:GetActiveGiveaway() -- nil si aucun n'est en cours
local member = exports.off_giveaway:IsMember(source)
local ok, err = exports.off_giveaway:StartPreset('p_friday', 'Discord-Bot')
local ok, err = exports.off_giveaway:StartGiveaway({
title = 'Event-Giveaway',
mode = 'fixed',
rewards = { { kind = 'account', name = 'bank', amount = 50000 } },
winners = 1,
duration = 600,
maxMembers = 500,
}, 'Event-Team')
local ok, err = exports.off_giveaway:DrawGiveaway()
local ok, err = exports.off_giveaway:CancelGiveaway()
-- Client
local active = exports.off_giveaway:IsGiveawayActive()
local joined = exports.off_giveaway:HasJoined()Avec StartGiveaway, duration est en secondes (au moins 30). En option : description, entryFee, minMembers et options = { reel = false } (sans tirage animé).
Lots pour StartGiveaway : kind = item, weapon, account ou vehicle, avec name et amount. Pour les véhicules, en plus category (car, bike, boat, heli, plane) et label. Dans la loterie (mode = 'pool'), chaque lot a besoin d'une chance, 100 au total.
Problèmes fréquents
Au démarrage, le script signale les erreurs et remarques dans la console serveur.
| Problème | Solution |
|---|---|
« Tu n'as pas la permission pour ça » avec /giveawayadmin | Ajoute ton groupe dans admin.groups et redémarre. |
| « L'objet … n'existe pas dans ESX » | Crée l'item dans la table items ou choisis-en un autre dans le modèle. |
| Véhicule absent du garage | Adapte vehicles.types aux types de ton garage (p. ex. aircraft pour hélico et avion). |
| Véhicule absent de la sélection | Est-il dans vehicles.blacklist ? Les véhicules addon apparaissent dès qu'ils sont chargés en jeu. |
| Le modèle ne se lance pas automatiquement | Vérifie l'heure du serveur, Lancer automatiquement est-il activé ? Si un giveaway est déjà en cours ou s'il y a trop peu de joueurs en ligne, la console le signale. |
| Le lot n'arrive pas | Inventaire plein : il est retenté toutes les pendingInterval secondes et arrive automatiquement. |
| La touche G ou H ne marche pas | D'autres scripts utilisent la touche. Change join.key / toggle.key, /giveaway marche toujours. |
| Images d'items manquantes | Fais pointer itemImages vers le dossier d'images de ton inventaire. |
Pas encore acheté ?
Voir Giveaway dans la boutique