Zum Inhalt springen
Alle Dokumentationen

Giveaway

Giveaways direkt im Spiel erstellen: sofort starten oder als Vorlage speichern, die auf Wunsch automatisch zu festen Zeiten startet. Spieler treten per Taste oder Befehl bei, die Gewinner werden live mit einer Namens-Rolle gezogen. Die Tabellen legt das Script selbst an.

Voraussetzungen
  • ESX Legacy (es_extended, getestet mit 1.14)
  • oxmysql
  • Tabelle owned_vehicles für Fahrzeug-Gewinne (z. B. von ESX oder off_vehicleshop)
  • Für Item-Bilder: off_inventory (oder eigener Pfad in itemImages)

Funktionen

  • Admin-Menü (/giveawayadmin): Giveaways auf einer Seite erstellen (Gewinne, Dauer, Gewinner, optional ein Name), mit Live-Vorschau, wie Spieler es sehen.
  • Gewinne: Items, Waffen, Geld (Bargeld, Bank, Schwarzgeld oder eigene Konten) und Fahrzeuge. Alle Fahrzeuge aus dem Spiel, auch Addon-Fahrzeuge, stehen mit Bild und Kategorie zur Auswahl.
  • Fester Gewinn oder Lostopf: Entweder bekommt jeder Gewinner alles aus der Liste, oder jeder zieht einen Gewinn nach Chance, z. B. 60 % Geld, 30 % Bank, 10 % Fahrzeug.
  • Regeln: Anzahl Gewinner, Teilnahmegebühr, Laufzeit, maximale und Mindestteilnehmer. Kommen zu wenige zusammen, wird abgebrochen und erstattet.
  • Vorlagen: Giveaways speichern und mit einem Klick starten, duplizieren oder im Erstellen-Tab anpassen.
  • Automatisch starten: Pro Vorlage einschaltbar, an festen Wochentagen und Uhrzeiten, z. B. jeden Freitag um 20:00 und 22:30. Optional nur, wenn genug Spieler online sind.
  • Verlauf: Das laufende Giveaway live steuern (jetzt auslosen oder abbrechen) und die letzten 50 Giveaways mit Gewinnern ansehen.
  • Spieler-Anzeige: Oben im Bild mit Gewinnen, Timer und Teilnehmerzahl. Beitreten mit G oder /giveaway, H blendet die Anzeige ein und aus.
  • Nachliefern: Passt ein Gewinn nicht ins Inventar oder ist der Gewinner offline, wird er gespeichert und automatisch nachgeliefert.
  • Discord-Logs für Admin-Aktionen, Giveaways und jeden ausgegebenen Gewinn.

Installation

  1. Ordner off_giveaway in resources legen.
  2. In die server.cfg nach oxmysql und ESX:
cfg
ensure oxmysql
ensure es_extended
ensure off_giveaway
  1. Deine Gruppe in admin.groups eintragen und /giveawayadmin öffnen.
Items und Waffen

Items und Waffen müssen in ESX existieren (Tabelle items bzw. die Waffenliste von ESX). Sonst lässt sich das Giveaway nicht speichern oder starten. Vorlagen mit fehlenden Items meldet die Server-Konsole beim Start.

Konfiguration

config/settings/config.lua

OptionStandardBeschreibung
serverInfo.name'OFF SCRIPTS'Servername, steht in der Oberfläche statt „OFF SCRIPTS“
serverInfo.locale'de'Sprache: de, en, pl, fr, es oder it
serverInfo.color{ 155, 89, 255 }Farbe der Menüs und der Spieler-Anzeige
serverInfo.design3Design der Oberfläche: 1 = Klassisch, 2 = Kassenbon, 3 = Storefront
blurtrueHintergrund unscharf, solange das Admin-Menü offen ist
admin.command / groups'giveawayadmin' / { 'projektleitung' }Befehl für das Admin-Menü und welche Gruppen es öffnen dürfen
join.command / key / keyLabel'giveaway' / 47 / 'G'Befehl und Taste zum Teilnehmen · key als Control-ID, keyLabel steht in der Anzeige
toggle.key / keyLabel74 / 'H'Taste, um die Anzeige ein- und auszublenden
itemImages'nui://off_inventory/web/dist/images/items/%s.png'Pfad zu den Item-Bildern, %s = Itemname
accountsBargeld, Bank, SchwarzgeldKonten, die als Geld-Gewinn zur Auswahl stehen: name = ESX-Konto, label = Anzeige, optional icon (Phosphor-Icon)
feeAccounts{ 'money', 'bank' }Teilnahmegebühr: Das erste Konto mit genug Geld zahlt, also Bargeld und sonst Bank
limits.maxMembers / maxWinners2500 / 25Höchstwerte im Menü
limits.maxDuration180Längste Laufzeit in Minuten
vehicles.plateFormat'LLL NNN'Kennzeichen für gewonnene Fahrzeuge: L = Buchstabe, N = Zahl, höchstens 8 Zeichen
vehicles.typessiehe DateiTyp in owned_vehicles pro Kategorie (Auto, Motorrad, Boot, Heli, Flugzeug), muss zu deiner Garage passen
vehicles.blacklistMilitärfahrzeugeModelle, die im Menü nicht zur Auswahl stehen
pendingInterval120Alle so viele Sekunden werden wartende Gewinne neu versucht

Eigenes Konto als Gewinn hinzufügen, z. B. Casino-Chips:

lua
accounts = {
  { name = 'money',  label = 'Bargeld' },
  { name = 'bank',   label = 'Bank' },
  { name = 'chips',  label = 'Casino-Chips' },
},

config/functions.lua

Hier bindest du eigene Scripts an. Fehler darin werden abgefangen, das Script läuft weiter.

FunktionWofür
Notify(message, type)Notify · Server: Notify(source, message, type)
ClientCanUseKeys()false = gerade nicht per Taste teilnehmen oder die Anzeige umschalten
ServerCanJoin(source, giveaway)false = Spieler darf nicht teilnehmen, z. B. im Jail
ServerGiveawayStarted(giveaway)Ein Giveaway startet, z. B. eigener Discord-Post
ServerGiveawayEnded(giveaway, winners)Ausgelost, winners mit source (nil = offline), identifier, name und reward
ServerGiveawayCancelled(giveaway, reason)Abgebrochen, reason = 'admin' oder 'members'
ServerRewardGiven(source, reward)Nach jedem ausgegebenen oder nachgelieferten Gewinn

config/settings/config.server.lua und Sprachen

Discord-Webhooks für admin (Vorlagen), giveaway (Start, Auslosung, Abbruch) und rewards (jeder Gewinn), url = '' schaltet einen Log aus. Alle Texte stehen in config/locales/ (eine Datei pro Sprache).

Im Spiel

  • Admin-Menü (/giveawayadmin): Oben wechselst du zwischen Erstellen, Vorlagen und Verlauf. Läuft gerade ein Giveaway, zeigt oben ein LIVE-Hinweis die Restzeit.
  • Erstellen: Drei Fragen beantworten: Was gibt es zu gewinnen, wie lange läuft es, wie viele gewinnen. Der Name ist optional, alles andere steckt unter Weitere Einstellungen. Rechts siehst du die Anzeige, wie Spieler sie sehen. Giveaway starten startet sofort, Als Vorlage speichert es. Vorlage laden übernimmt eine gespeicherte Vorlage zum Anpassen.
  • Gewinne: Oben wählst du die Art. Item, Waffe und Fahrzeug öffnen eine Liste mit Bild und Suche, Geld fügt direkt einen Betrag hinzu. Bei Waffen ist die Menge die Munition. Im Lostopf (unter Weitere Einstellungen) gibst du jedem Gewinn eine Chance, zusammen 100 %. Gleich verteilen teilt sie gleichmäßig auf.
  • Vorlagen: Links die Liste, rechts der Editor: oben der Name, darunter dieselben Fragen wie beim Erstellen. Der Name der Vorlage ist auch der Name, den Spieler sehen. Statt nach dem Namen fragt Punkt 4 nach Automatisch starten: Wochentage und bis zu 6 Uhrzeiten wählen, darunter steht der nächste Start, optional Mindestens online. Erst Speichern übernimmt Änderungen. Jetzt starten startet die Vorlage sofort, Anpassen & starten öffnet sie im Erstellen-Tab. Die Uhrzeit ist die des Servers.
  • Verlauf: Oben steuerst du das laufende Giveaway, darunter stehen Statistik und die letzten 50 Giveaways. Ein Klick auf einen Eintrag zeigt die Gewinner mit ihren Gewinnen.
  • Teilnehmen: Startet ein Giveaway, erscheint oben die Anzeige bei allen Spielern. Mit G oder /giveaway trittst du bei, eine Teilnahmegebühr wird erst vom Bargeld, sonst von der Bank abgebucht. H blendet die Anzeige auf eine kleine Leiste ein und aus.
  • Ziehung: Läuft die Zeit ab oder ein Admin lost aus, werden die Gewinner nacheinander mit der Namens-Rolle gezogen. Danach sehen alle die Gewinnerliste, Gewinner bekommen zusätzlich eine Nachricht. Ohne Animierte Ziehung erscheint sofort die Liste.
  • Fahrzeug-Gewinne landen mit eigenem Kennzeichen eingeparkt in der Garage (owned_vehicles), auch wenn der Gewinner offline ist.
  • Nachliefern: Ist das Inventar voll oder der Gewinner offline, bekommt er den Gewinn automatisch, sobald Platz ist oder er wieder online kommt. Erstattete Gebühren für offline Spieler laufen genauso.
Ein Giveaway zur Zeit

Es läuft immer nur ein Giveaway. Ein automatischer Start, der in ein laufendes Giveaway fällt, wird übersprungen und in der Konsole vermerkt.

Für Entwickler

lua
-- Server
local active = exports.off_giveaway:GetActiveGiveaway()        -- nil, wenn keins läuft
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()

Bei StartGiveaway ist duration in Sekunden (mindestens 30). Optional sind description, entryFee, minMembers und options = { reel = false } (ohne animierte Ziehung).

Gewinne bei StartGiveaway: kind = item, weapon, account oder vehicle, dazu name und amount. Bei Fahrzeugen zusätzlich category (car, bike, boat, heli, plane) und label. Im Lostopf (mode = 'pool') braucht jeder Gewinn eine chance, zusammen 100.

Häufige Fehler

Beim Start meldet das Script Fehler und Hinweise in der Server-Konsole.

ProblemLösung
„Dafür hast du keine Berechtigung“ bei /giveawayadminDeine Gruppe in admin.groups eintragen und neu starten.
„Das Item … gibt es in ESX nicht“Item in der Tabelle items anlegen oder in der Vorlage ein anderes wählen.
Fahrzeug fehlt in der Garagevehicles.types an die Typen deiner Garage anpassen (z. B. aircraft für Heli und Flugzeug).
Fahrzeug fehlt in der AuswahlSteht es in vehicles.blacklist? Addon-Fahrzeuge erscheinen, sobald sie im Spiel geladen sind.
Vorlage startet nicht automatischServer-Uhrzeit prüfen, Automatisch starten an? Läuft schon ein Giveaway oder sind zu wenige online, meldet es die Konsole.
Gewinn kommt nicht anInventar voll: Er wird alle pendingInterval Sekunden neu versucht und kommt automatisch.
Taste G oder H geht nichtAndere Scripts belegen die Taste. join.key / toggle.key ändern, /giveaway geht immer.
Item-Bilder fehlenitemImages auf den Bilder-Ordner deines Inventars stellen.

Noch nicht gekauft?

Giveaway im Shop ansehen