Aller au contenu
Toute la documentation

Pompa

Des Pompas réparties sur la map : attaque-les à des heures fixes, tiens-les un certain temps et empoche la récompense. Avec des marqueurs colorés par état, une zone, une annonce pour tous et une barre de progression. Tout passe par la config, le script enregistre lui-même les cooldowns.

Prérequis
  • ESX Legacy (es_extended, testé avec 1.14)
  • oxmysql
  • OneSync (set onesync on dans le server.cfg)

Fonctionnalités

  • Quatre états avec leur propre couleur pour le marqueur (RGB) et le blip (couleur de blip GTA) :
  • Attaquable (vert) : E lance la Pompa.
  • Attaquée (rouge) : une Pompa est en cours ici.
  • Cooldown (orange) : après une prise ou une annulation, le temps restant s'affiche dans l'indication.
  • Hors horaires (blanc) : le lancement n'est possible qu'aux heures définies.
  • Zone : Chaque Pompa a son propre rayon. L'attaquant doit y rester. S'il quitte la zone, il a quelques secondes pour revenir (returnTime, par défaut 5), sinon la Pompa est annulée. Les joueurs à proximité voient la zone comme une sphère, sur la carte il y a un blip de rayon.
  • Durée de prise et cooldown : En minutes, identiques pour toutes les Pompas. En bas de l'écran, une barre de progression affiche le temps restant et le pourcentage.
  • Annonce pour tous au lancement, à la prise et à l'abandon, sous forme de bannière dans le design du script. Avec banner = false, elle passe à la place par la fonction Announce dans config/functions.lua, où tu branches ton propre script d'annonce.
  • Récompense identique pour toutes les Pompas : argent (liquide, banque, argent sale), items et armes, aussi en quantité aléatoire.
  • Une seule Pompa à la fois. Si l'attaquant meurt ou se déconnecte, la Pompa est annulée.
  • Blips activés ou désactivés, blip principal au centre de chaque Pompa dans la couleur de son état.
  • Les cooldowns sont conservés après un redémarrage du serveur.
  • Logs Discord pour le lancement, la prise et l'annulation.

Installation

  1. Place le dossier off_pompa dans resources.
  2. Dans le server.cfg, après oxmysql et ESX :
cfg
set onesync on

ensure oxmysql
ensure es_extended
ensure off_pompa
  1. Ajoute tes Pompas avec leur position dans config/settings/config.pompas.lua, la récompense dans config/settings/config.lua.

La table off_pompa_cooldowns est créée automatiquement. Les items et armes de la récompense doivent exister dans ESX, la console serveur signale ceux qui sont inconnus au démarrage.

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 de la barre de progression
serverInfo.design3Design de l'interface : 1 = Classique, 2 = Ticket, 3 = Storefront
times14:00 à 23:59Heures pendant lesquelles une Pompa peut être lancée (heure du serveur). Plusieurs possibles, passer minuit fonctionne aussi, vide = toujours
duration20Minutes jusqu'à la prise, valable pour toutes les Pompas
cooldown15Minutes de cooldown après une prise ou une annulation, valable pour toutes les Pompas
returnTime5Secondes pour revenir après avoir quitté la zone, sinon annulation
bannertrueAnnonce au lancement, à la prise et à l'abandon : true = bannière du script, false = ta propre annonce via Announce
rewardsArgent sale, crochetsRécompense pour chaque Pompa prise, voir ci-dessous
ignoreWeightfalsetrue = donner les items même au-delà du poids transportable, sinon l'item est perdu si l'inventaire est plein
colorsVert, rouge, orange, blancCouleur RGB par état : attackable, attacking, cooldown, closed
markervoir fichierType de marqueur, taille, opacité, distance d'affichage et distance pour E
key38Touche pour lancer, en Control-ID (E)
blips.enabledtrueBlips activés ou désactivés
blips.sprite / scale / shortRange437 / 0.8 / trueApparence du blip principal
blips.colors2, 1, 47, 0Couleur de blip GTA par état (les blips ne gèrent pas le RGB)
blips.radius / radiusAlphatrue / 90Blip de rayon autour de la zone tant qu'une Pompa est en cours

Récompense, valable pour chaque Pompa :

lua
rewards = {
  { type = 'account', name = 'black_money', amount = { 20000, 30000 } },  -- aléatoire entre
  { type = 'item',    name = 'lockpick',    amount = 3 },
  { type = 'weapon',  name = 'WEAPON_PISTOL', ammo = 60 },
},

config/settings/config.pompas.lua

Chaque Pompa est une entrée avec la position et le rayon de la zone.

lua
{
  id = 'hafen',                           -- nom fixe, ne plus le changer
  label = 'Hafen',
  position = vec3(1003.6, -3108.6, 5.9),
  radius = 45.0,                          -- zone en mètres
},

config/functions.lua

C'est ici que tu connectes tes propres scripts. Les erreurs qu'elles contiennent arrivent dans la console, le script continue de tourner.

FonctionUtilité
Notify(message, type) / HelpNotify(text)Notification et texte d'aide · Serveur : Notify(source, message, type)
ClientCanStart()false = ne pas lancer de Pompa maintenant, p. ex. menotté ou en véhicule
ClientPompaStarted(pompa) / ClientPompaEnded(pompa, result)Ta Pompa lancée ou terminée, p. ex. un son
Announce(message, kind, pompa)Serveur : ta propre annonce pour tous, seulement avec banner = false. kind = 'start', 'captured' ou 'aborted'. Par défaut : notification ESX
ServerCanStart(source, pompa)return false, 'Text' = ne peut pas lancer, p. ex. police, trop peu de policiers en ligne, jobs
ServerPompaStarted(source, pompa)Pompa lancée
ServerPompaCaptured(source, pompa, rewards)Pompa prise, p. ex. points de faction
ServerPompaAborted(source, pompa, reason)Annulée, reason = 'zone', 'death', 'drop' ou 'admin'

Exemple : lancement seulement avec au moins 2 policiers en service et pas pour la police elle-même.

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

Exemple : ton propre script d'annonce au lieu de la notification, sans annonce lors d'une annulation.
Exemple : ton propre script d'annonce à la place de la bannière (banner = false), sans annonce à l'abandon.

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 et langues

Webhook Discord pompa pour le lancement, la prise et l'annulation, url = '' désactive le log. Tous les textes se trouvent dans config/locales/ (un fichier par langue).

En jeu

  • Marqueur : Chaque Pompa a un marqueur dans la couleur de son état. Au marqueur, tu vois ce qui est possible : lancer, cooldown avec le temps restant ou les horaires.
  • Lancer : Appuie sur E au marqueur vert. Tout le monde reçoit l'annonce, tu vois la barre de progression en bas.
  • Zone : Une sphère apparaît autour de la Pompa (pour tous ceux à proximité) et un blip de rayon sur la carte. Si tu sors, la barre de progression affiche un compte à rebours. Si tu n'es pas revenu après returnTime secondes, la Pompa est annulée.
  • Prise : Quand le temps est écoulé, tu reçois la récompense et la Pompa passe en cooldown. Ensuite, elle est de nouveau attaquable.
  • Annulation : Zone quittée, mort ou déconnexion. Là aussi, la Pompa passe en cooldown.
  • Une seule Pompa tourne à la fois. L'heure est celle du serveur. Une Pompa lancée peu avant la fin des horaires va jusqu'au bout.

Pour les développeurs

lua
-- Serveur
local active = exports.off_pompa:GetActive()          -- nil si aucune n'est en cours
local state = exports.off_pompa:GetState('hafen')      -- 'attackable', 'attacking', 'cooldown' ou 'closed'
local attacking = exports.off_pompa:IsAttacking(source)
exports.off_pompa:Abort()                              -- annuler la Pompa en cours
exports.off_pompa:ResetCooldown('hafen')               -- terminer le cooldown immédiatement

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

Problèmes fréquents

Au démarrage, le script signale les erreurs et remarques dans la console serveur.

ProblèmeSolution
Tous les marqueurs sont blancsEn dehors de times. Vérifie l'heure du serveur.
Le marqueur flotte ou est enfoncé dans le solReprends position en te tenant directement au sol.
La Pompa s'annule alors qu'on est tout prèsLa zone est une sphère, la hauteur compte aussi. Zone trop petite pour le terrain, augmente radius.
La récompense en items n'arrive pasInventaire plein, voir ignoreWeight. La console signale les items inconnus au démarrage.
« OneSync est désactivé »Ajoute set onesync on dans le server.cfg et redémarre.
Le lancement doit être réservé à certains jobsAdapte ServerCanStart dans config/functions.lua, exemple ci-dessus.

Pas encore acheté ?

Voir Pompa dans la boutique