Vai al contenuto
Tutta la documentazione

Pompa

Pompe distribuite sulla mappa: attaccale a orari fissi, tienile per un po' e intasca la ricompensa. Con marker colorati per stato, zona, annuncio per tutti e barra di avanzamento. Tutto passa dalla config, i cooldown li salva lo script da solo.

Requisiti
  • ESX Legacy (es_extended, testato con 1.14)
  • oxmysql
  • OneSync (set onesync on nel server.cfg)

Funzionalità

  • Quattro stati con un colore proprio per marker (RGB) e blip (colore blip di GTA):
  • Attaccabile (verde): E avvia la Pompa.
  • Sotto attacco (rosso): qui è in corso una Pompa.
  • Cooldown (arancione): dopo la conquista o l'annullamento, il tempo rimanente compare nel suggerimento.
  • Fuori orario (bianco): si può avviare solo negli orari impostati.
  • Zona: Ogni Pompa ha un proprio raggio. L'attaccante deve restarci dentro. Se lascia la zona, ha qualche secondo per tornare (returnTime, predefinito 5), altrimenti la Pompa viene annullata. I giocatori vicini vedono la zona come una sfera, sulla mappa c'è un blip del raggio.
  • Tempo di conquista e cooldown: In minuti, uguali per tutte le Pompe. In basso sullo schermo scorre una barra di avanzamento con tempo rimanente e percentuale.
  • Annuncio per tutti all'avvio, alla conquista e all'interruzione, come banner nel design dello script. Con banner = false passa invece dalla funzione Announce in config/functions.lua, dove colleghi il tuo script di annunci.
  • Ricompensa uguale per tutte le Pompe: soldi (contanti, banca, soldi sporchi), item e armi, anche in quantità casuale.
  • Solo una Pompa alla volta. Se l'attaccante muore o va offline, la Pompa viene annullata.
  • Blip attivi o disattivati, blip principale al centro di ogni Pompa nel colore del suo stato.
  • I cooldown restano dopo un riavvio del server.
  • Log Discord per avvio, conquista e annullamento.

Installazione

  1. Metti la cartella off_pompa in resources.
  2. Nel server.cfg, dopo oxmysql ed ESX:
cfg
set onesync on

ensure oxmysql
ensure es_extended
ensure off_pompa
  1. Inserisci le tue Pompe con la posizione in config/settings/config.pompas.lua, la ricompensa in config/settings/config.lua.

La tabella off_pompa_cooldowns viene creata automaticamente. Item e armi della ricompensa devono esistere in ESX, quelli sconosciuti li segnala la console del server all'avvio.

Configurazione

config/settings/config.lua

OpzionePredefinitoDescrizione
serverInfo.name'OFF SCRIPTS'Nome del server, mostrato nell'interfaccia al posto di «OFF SCRIPTS»
serverInfo.locale'de'Lingua: de, en, pl, fr, es o it
serverInfo.color{ 155, 89, 255 }Colore della barra di avanzamento
serverInfo.design3Design dell'interfaccia: 1 = Classico, 2 = Scontrino, 3 = Storefront
timesdalle 14:00 alle 23:59Orari in cui si può avviare una Pompa (ora del server). Se ne possono mettere più, anche oltre la mezzanotte, vuoto = sempre
duration20Minuti fino alla conquista, vale per tutte le Pompe
cooldown15Minuti di cooldown dopo la conquista o l'annullamento, vale per tutte le Pompe
returnTime5Secondi per tornare dopo aver lasciato la zona, altrimenti annullamento
bannertrueAnnuncio all'avvio, alla conquista e all'interruzione: true = banner dello script, false = un tuo annuncio tramite Announce
rewardsSoldi sporchi, grimaldelliRicompensa per ogni Pompa conquistata, vedi sotto
ignoreWeightfalsetrue = dare gli item anche oltre il peso trasportabile, altrimenti l'item va perso con l'inventario pieno
colorsVerde, rosso, arancione, biancoColore RGB per stato: attackable, attacking, cooldown, closed
markervedi fileTipo di marker, dimensione, opacità, distanza di visibilità e distanza per E
key38Tasto per avviare come Control-ID (E)
blips.enabledtrueBlip attivi o disattivati
blips.sprite / scale / shortRange437 / 0.8 / trueAspetto del blip principale
blips.colors2, 1, 47, 0Colore blip di GTA per stato (i blip non supportano RGB)
blips.radius / radiusAlphatrue / 90Blip del raggio intorno alla zona mentre è in corso una Pompa

Ricompensa, vale per ogni Pompa:

lua
rewards = {
  { type = 'account', name = 'black_money', amount = { 20000, 30000 } },  -- casuale tra
  { type = 'item',    name = 'lockpick',    amount = 3 },
  { type = 'weapon',  name = 'WEAPON_PISTOL', ammo = 60 },
},

config/settings/config.pompas.lua

Ogni Pompa è una voce con posizione e raggio della zona.

lua
{
  id = 'hafen',                           -- nome fisso, non cambiarlo più
  label = 'Hafen',
  position = vec3(1003.6, -3108.6, 5.9),
  radius = 45.0,                          -- zona in metri
},

config/functions.lua

Qui colleghi i tuoi script. Gli errori al loro interno finiscono nella console, lo script continua a funzionare.

FunzioneA cosa serve
Notify(message, type) / HelpNotify(text)Notify e testo di aiuto · Server: Notify(source, message, type)
ClientCanStart()false = non avviare una Pompa adesso, ad es. ammanettato o in un veicolo
ClientPompaStarted(pompa) / ClientPompaEnded(pompa, result)La tua Pompa avviata o finita, ad es. un suono
Announce(message, kind, pompa)Server: un tuo annuncio per tutti, solo con banner = false. kind = 'start', 'captured' o 'aborted'. Predefinito: notifica ESX
ServerCanStart(source, pompa)return false, 'Text' = non può avviare, ad es. polizia, troppo pochi poliziotti online, lavori
ServerPompaStarted(source, pompa)Pompa avviata
ServerPompaCaptured(source, pompa, rewards)Pompa conquistata, ad es. punti fazione
ServerPompaAborted(source, pompa, reason)Annullata, reason = 'zone', 'death', 'drop' o 'admin'

Esempio: avvio solo con almeno 2 poliziotti in servizio e non per la polizia stessa.

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

Esempio: il tuo script di annunci al posto del notify, senza annuncio in caso di annullamento.
Esempio: un tuo script di annunci al posto del banner (banner = false), senza annuncio all'interruzione.

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 e lingue

Webhook Discord pompa per avvio, conquista e annullamento, url = '' disattiva il log. Tutti i testi si trovano in config/locales/ (un file per lingua).

In gioco

  • Marker: Ogni Pompa ha un marker nel colore del suo stato. Sul marker c'è scritto cosa si può fare: avviare, cooldown con il tempo rimanente o gli orari.
  • Avvio: Premi E al marker verde. Tutti ricevono l'annuncio, tu vedi in basso la barra di avanzamento.
  • Zona: Intorno alla Pompa compare una sfera (per tutti quelli vicini) e sulla mappa un blip del raggio. Se esci, la barra di avanzamento mostra un conto alla rovescia. Se non torni entro returnTime secondi, la Pompa viene annullata.
  • Conquista: Quando il tempo è scaduto, ricevi la ricompensa e la Pompa va in cooldown. Dopo è di nuovo attaccabile.
  • Annullamento: Zona lasciata, morte o disconnessione. Anche in quel caso la Pompa va in cooldown.
  • È sempre in corso una sola Pompa. L'ora è quella del server. Una Pompa avviata poco prima della fine degli orari arriva fino in fondo.

Per sviluppatori

lua
-- Server
local active = exports.off_pompa:GetActive()          -- nil se non ce n'è nessuna in corso
local state = exports.off_pompa:GetState('hafen')      -- 'attackable', 'attacking', 'cooldown' o 'closed'
local attacking = exports.off_pompa:IsAttacking(source)
exports.off_pompa:Abort()                              -- annulla la Pompa in corso
exports.off_pompa:ResetCooldown('hafen')               -- termina subito il cooldown

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

Problemi comuni

All'avvio lo script segnala errori e avvisi nella console del server.

ProblemaSoluzione
Tutti i marker sono bianchiFuori da times. Controlla l'ora del server.
Il marker fluttua o è incastrato nel terrenoRiprendi la position stando direttamente a terra.
La Pompa si annulla anche se sei vicinoLa zona è una sfera, conta anche l'altezza. Zona troppo piccola per il terreno, aumenta radius.
La ricompensa in item non arrivaInventario pieno, vedi ignoreWeight. La console segnala gli item sconosciuti all'avvio.
«OneSync è disattivato»Aggiungi set onesync on al server.cfg e riavvia.
L'avvio deve funzionare solo per certi lavoriAdatta ServerCanStart in config/functions.lua, esempio sopra.

Non l’hai ancora acquistato?

Vedi Pompa nel negozio