Aller au contenu
Toute la documentation

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.

Prérequis
  • ESX Legacy (es_extended, testé avec 1.14)
  • oxmysql
  • Table owned_vehicles pour 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

  1. Place le dossier off_giveaway dans resources.
  2. Dans le server.cfg, après oxmysql et ESX :
cfg
ensure oxmysql
ensure es_extended
ensure off_giveaway
  1. Ajoute ton groupe dans admin.groups et ouvre /giveawayadmin.
Items et armes

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

OptionPar défautDescription
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.design3Design de l'interface : 1 = Classique, 2 = Ticket, 3 = Storefront
blurtrueArriè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 / keyLabel74 / '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
accountsLiquide, banque, argent saleComptes 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 / maxWinners2500 / 25Valeurs maximales dans le menu
limits.maxDuration180Durée maximale en minutes
vehicles.plateFormat'LLL NNN'Plaque des véhicules gagnés : L = lettre, N = chiffre, 8 caractères max.
vehicles.typesvoir fichierType dans owned_vehicles par catégorie (voiture, moto, bateau, hélico, avion), doit correspondre à ton garage
vehicles.blacklistVéhicules militairesModèles non proposés dans le menu
pendingInterval120Nombre de secondes entre deux nouvelles tentatives pour les lots en attente

Ajouter ton propre compte comme lot, p. ex. des jetons de casino :

lua
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.

FonctionUtilité
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.
Un giveaway à la fois

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

lua
-- 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èmeSolution
« Tu n'as pas la permission pour ça » avec /giveawayadminAjoute 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 garageAdapte vehicles.types aux types de ton garage (p. ex. aircraft pour hélico et avion).
Véhicule absent de la sélectionEst-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 automatiquementVé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 pasInventaire plein : il est retenté toutes les pendingInterval secondes et arrive automatiquement.
La touche G ou H ne marche pasD'autres scripts utilisent la touche. Change join.key / toggle.key, /giveaway marche toujours.
Images d'items manquantesFais pointer itemImages vers le dossier d'images de ton inventaire.

Pas encore acheté ?

Voir Giveaway dans la boutique