Zum Inhalt springen
Alle Dokumentationen

Pompa

Pompas auf der Map verteilt: Zu festen Uhrzeiten angreifen, eine Zeit lang halten und die Belohnung einsacken. Mit farbigen Markern je Zustand, Zone, Ansage für alle und Progressbar. Alles läuft über die Config, die Cooldowns speichert das Script selbst.

Voraussetzungen
  • ESX Legacy (es_extended, getestet mit 1.14)
  • oxmysql
  • OneSync (set onesync on in der server.cfg)

Funktionen

  • Vier Zustände mit eigener Farbe für Marker (RGB) und Blip (GTA-Blipfarbe):
  • Angreifbar (Grün): E startet das Pompa.
  • Im Angriff (Rot): Gerade läuft hier ein Pompa.
  • Cooldown (Orange): Nach Einnahme oder Abbruch, die Restzeit steht im Hinweis.
  • Außerhalb der Zeiten (Weiß): Starten geht nur zu den eingestellten Uhrzeiten.
  • Zone: Jedes Pompa hat einen eigenen Radius. Der Angreifer muss drin bleiben, verlässt er die Zone, hat er ein paar Sekunden zum Zurückkommen (returnTime, Standard 5), sonst bricht das Pompa ab. Spieler in der Nähe sehen die Zone als Kugel, auf der Map gibt es einen Radius-Blip.
  • Einnahme-Zeit und Cooldown: In Minuten, für alle Pompas gleich. Unten im Bild läuft eine Progressbar mit Restzeit und Prozent.
  • Ansage für alle beim Start, bei Einnahme und bei Abbruch als Banner im Design des Scripts. Mit banner = false läuft sie stattdessen über die Funktion Announce in config/functions.lua, dort bindest du dein eigenes Announce-Script ein.
  • Belohnung für alle Pompas gleich: Geld (Bargeld, Bank, Schwarzgeld), Items und Waffen, auch als zufällige Menge.
  • Nur ein Pompa gleichzeitig. Stirbt der Angreifer oder geht er offline, bricht das Pompa ab.
  • Blips an oder aus, Hauptblip in der Mitte jedes Pompas in der Farbe des Zustands.
  • Cooldowns bleiben nach einem Server-Neustart erhalten.
  • Discord-Logs für Start, Einnahme und Abbruch.

Installation

  1. Ordner off_pompa in resources legen.
  2. In die server.cfg nach oxmysql und ESX:
cfg
set onesync on

ensure oxmysql
ensure es_extended
ensure off_pompa
  1. Deine Pompas mit Position in config/settings/config.pompas.lua eintragen, die Belohnung in config/settings/config.lua.

Die Tabelle off_pompa_cooldowns wird automatisch angelegt. Items und Waffen aus der Belohnung müssen in ESX existieren, unbekannte 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 Progressbar
serverInfo.design3Design der Oberfläche: 1 = Klassisch, 2 = Kassenbon, 3 = Storefront
times14:00 bis 23:59Uhrzeiten, in denen ein Pompa startet (Server-Zeit). Mehrere möglich, über Mitternacht geht auch, leer = immer
duration20Minuten bis zur Einnahme, gilt für alle Pompas
cooldown15Minuten Cooldown nach Einnahme oder Abbruch, gilt für alle Pompas
returnTime5Sekunden, um nach dem Verlassen der Zone zurückzukommen, sonst Abbruch
bannertrueAnsage bei Start, Einnahme und Abbruch: true = Banner vom Script, false = eigene Ansage über Announce
rewardsSchwarzgeld, LockpicksBelohnung für jedes eingenommene Pompa, siehe unten
ignoreWeightfalsetrue = Items auch über das Tragegewicht geben, sonst verfällt das Item bei vollem Inventar
colorsGrün, Rot, Orange, WeißRGB-Farbe je Zustand: attackable, attacking, cooldown, closed
markersiehe DateiMarker-Typ, Größe, Deckkraft, Sichtweite und Abstand für E
key38Taste zum Starten als Control-ID (E)
blips.enabledtrueBlips an oder aus
blips.sprite / scale / shortRange437 / 0.8 / trueAussehen des Hauptblips
blips.colors2, 1, 47, 0GTA-Blipfarbe je Zustand (Blips können kein RGB)
blips.radius / radiusAlphatrue / 90Radius-Blip um die Zone, solange ein Pompa läuft

Belohnung, gilt für jedes Pompa:

lua
rewards = {
  { type = 'account', name = 'black_money', amount = { 20000, 30000 } },  -- zufällig zwischen
  { type = 'item',    name = 'lockpick',    amount = 3 },
  { type = 'weapon',  name = 'WEAPON_PISTOL', ammo = 60 },
},

config/settings/config.pompas.lua

Jedes Pompa ist ein Eintrag mit Position und Radius der Zone.

lua
{
  id = 'hafen',                           -- fester Name, nicht mehr ändern
  label = 'Hafen',
  position = vec3(1003.6, -3108.6, 5.9),
  radius = 45.0,                          -- Zone in Metern
},

config/functions.lua

Hier bindest du eigene Scripts an. Fehler darin landen in der Konsole, das Script läuft weiter.

FunktionWofür
Notify(message, type) / HelpNotify(text)Notify und Hinweistext · Server: Notify(source, message, type)
ClientCanStart()false = gerade kein Pompa starten, z. B. gefesselt oder im Fahrzeug
ClientPompaStarted(pompa) / ClientPompaEnded(pompa, result)Eigenes Pompa gestartet oder vorbei, z. B. Sound
Announce(message, kind, pompa)Server: eigene Ansage für alle, nur bei banner = false. kind = 'start', 'captured' oder 'aborted'. Standard: ESX-Notify
ServerCanStart(source, pompa)return false, 'Text' = darf nicht starten, z. B. Polizei, zu wenige Cops online, Jobs
ServerPompaStarted(source, pompa)Pompa gestartet
ServerPompaCaptured(source, pompa, rewards)Pompa eingenommen, z. B. Fraktionspunkte
ServerPompaAborted(source, pompa, reason)Abgebrochen, reason = 'zone', 'death', 'drop' oder 'admin'

Beispiel: Starten nur mit mindestens 2 Polizisten im Dienst und nicht für die Polizei selbst.

lua
function ServerCanStart(source, pompa)
  local xPlayer = ESX.GetPlayerFromId(source);

  if xPlayer.getJob().name == 'police' then
    return false, 'Als Polizist kannst du kein Pompa starten.';
  end

  if #ESX.GetExtendedPlayers('job', 'police') < 2 then
    return false, 'Es sind zu wenige Polizisten im Dienst.';
  end

  return true;
end

Beispiel: Eigenes Announce-Script statt Notify, ohne Ansage beim Abbruch.
Beispiel: Eigenes Announce-Script statt Banner (banner = false), ohne Ansage beim Abbruch.

lua
function Announce(message, kind, pompa)
  if kind == 'aborted' then
    return;
  end

  TriggerClientEvent('dein_announce:show', -1, 'Pompa', message);
end

config/settings/config.server.lua und Sprachen

Discord-Webhook pompa für Start, Einnahme und Abbruch, url = '' schaltet den Log aus. Alle Texte stehen in config/locales/ (eine Datei pro Sprache).

Im Spiel

  • Marker: Jedes Pompa hat einen Marker in der Farbe seines Zustands. Am Marker steht, was gerade geht: starten, Cooldown mit Restzeit oder die Uhrzeiten.
  • Starten: Am grünen Marker E drücken. Alle bekommen die Ansage, du siehst unten die Progressbar.
  • Zone: Um das Pompa erscheint eine Kugel (für alle in der Nähe) und auf der Map ein Radius-Blip. Läufst du raus, zeigt die Progressbar einen Countdown. Bist du nach returnTime Sekunden nicht zurück, bricht das Pompa ab.
  • Einnahme: Ist die Zeit um, bekommst du die Belohnung und das Pompa geht in den Cooldown. Danach ist es wieder angreifbar.
  • Abbruch: Zone verlassen, gestorben oder offline gegangen. Auch dann geht das Pompa in den Cooldown.
  • Es läuft immer nur ein Pompa. Die Uhrzeit ist die des Servers. Ein Pompa, das kurz vor Ende der Zeiten gestartet wurde, läuft zu Ende.

Für Entwickler

lua
-- Server
local active = exports.off_pompa:GetActive()          -- nil, wenn keins läuft
local state = exports.off_pompa:GetState('hafen')      -- 'attackable', 'attacking', 'cooldown' oder 'closed'
local attacking = exports.off_pompa:IsAttacking(source)
exports.off_pompa:Abort()                              -- laufendes Pompa abbrechen
exports.off_pompa:ResetCooldown('hafen')               -- Cooldown sofort beenden

-- Client
local state = exports.off_pompa:GetState('hafen')
local attacking = exports.off_pompa:IsAttacking()

Häufige Fehler

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

ProblemLösung
Alle Marker sind weißAußerhalb von times. Uhrzeit des Servers prüfen.
Marker schwebt oder steckt im Bodenposition neu holen, dabei direkt am Boden stehen.
Pompa bricht ab, obwohl man nah dran istDie Zone ist eine Kugel, die Höhe zählt mit. Zone zu klein für das Gelände, radius erhöhen.
Item-Belohnung kommt nicht anInventar voll, siehe ignoreWeight. Unbekannte Items meldet die Konsole beim Start.
„OneSync ist aus“set onesync on in die server.cfg und neu starten.
Starten soll nur für bestimmte Jobs gehenServerCanStart in config/functions.lua anpassen, Beispiel oben.

Noch nicht gekauft?

Pompa im Shop ansehen