Accueil › Documentation › Demandes de braquage · origen_ilegalv2

Demandes de braquage · origen_ilegalv2

Le module de demandes de braquage permet aux membres d’un gang de soumettre une demande formelle de braquage au département de police directement depuis le panneau de gang. La police l’approuve ou la refuse, et le gang peut suivre l’état en temps réel.

Ce module est totalement indépendant de origen_robberies. Il ne lance ni ne gère le braquage lui-même : il ne s’occupe que du handshake de demande et d’approbation entre le gang et la police.

L’onglet Robbery Requests n’apparaît dans le panneau de gang que si origen_police est en cours d’exécution. Si la ressource est arrêtée ou non installée, l’onglet est masqué automatiquement.


Configuration (config/robbery_request.lua)

luaconfig/robbery_request.lua
Config.RobberyRequest.Enabled              = true   -- enable/disable the entire module
Config.RobberyRequest.Permission           = 'request_robbery'
Config.RobberyRequest.Anonymous            = true
Config.RobberyRequest.PendingExpireMinutes = 15
Config.RobberyRequest.ApprovedExpireMinutes = 30
Clé Type Par défaut Description
Enabled boolean true Active ou désactive tout le module. Même à true, l’onglet se masque si origen_police n’est pas démarré.
Permission string 'request_robbery' Permission de grade requise pour envoyer et annuler des demandes. Les leaders l’ont toujours. Voir Configuration.
Anonymous boolean true Si true, le panneau de la police affiche "Anonymous" à la place du vrai nom du gang et du demandeur. L’ID du gang est quand même envoyé en interne pour la validation.
PendingExpireMinutes number 15 Minutes après lesquelles une demande pending expire si la police ne répond pas. 0 = pas d’expiration.
ApprovedExpireMinutes number 30 Minutes après lesquelles une demande approved expire si le gang ne lance pas le braquage. 0 = pas d’expiration.

Liste des braquages (Config.RobberyRequest.Requests)

Chaque entrée de la liste représente un type de braquage pouvant être demandé.

luaconfig/robbery_request.lua
Config.RobberyRequest.Requests = {
 
    {
        id                             = "small_robbery",
        label                          = "Small Robbery",
        image                          = "https://r2.fivemanage.com/.../small_rob.png",
        active                         = true,
        requiredCops                   = 1,
        minParticipants                = 1,
        maxParticipants                = 3,
        cooldownSeconds                = 900,
        rejectedRequestCooldownSeconds = 300,
    },
 
    {
        id                             = "medium_robbery",
        label                          = "Medium Robbery",
        image                          = "https://r2.fivemanage.com/.../med_rob.png",
        active                         = true,
        requiredCops                   = 4,
        minParticipants                = 2,
        maxParticipants                = 6,
        cooldownSeconds                = 1800,
        rejectedRequestCooldownSeconds = 600,
    },
 
    {
        id                             = "large_robbery",
        label                          = "Large Robbery",
        image                          = "https://r2.fivemanage.com/.../big_rob.png",
        active                         = true,
        requiredCops                   = 6,
        minParticipants                = 4,
        maxParticipants                = 6,
        cooldownSeconds                = 3600,
        rejectedRequestCooldownSeconds = 900,
    },
 
    -- add as many entries as needed
}
Champ Type Description
id string Identifiant unique et stable du braquage. Utilisé dans les exports et les vérifications d’état.
label string Nom affiché dans le panneau de gang.
image string URL de l’image de la carte. Laisse "" pour un espace réservé.
active boolean Si false, l’entrée est masquée du panneau et ne peut pas être demandée.
requiredCops number Nombre minimum d’agents en service requis pour demander ce braquage.
minParticipants number Nombre minimum de participants que le gang doit déclarer (inclus). Doit être >= 1.
maxParticipants number Nombre maximum de participants (inclus). Doit être >= minParticipants.
cooldownSeconds number Temps d’attente (secondes) après la fin du braquage avant de pouvoir redemander ce même braquage (utilise origen_robberies). 0 = pas de cooldown.
rejectedRequestCooldownSeconds number Temps (secondes) que le gang doit attendre avant de redemander ce braquage après un refus de la police. Ne bloque que ce braquage ; les autres ne sont pas affectés. 0 = pas de cooldown après refus (le gang peut redemander immédiatement après avoir marqué le refus comme lu).

Règles de validation


États de la demande

État Description
pending Envoyée, en attente de la réponse de la police.
approved Approuvée par la police. Le gang dispose de ApprovedExpireMinutes pour commencer.
rejected Refusée par la police. Le gang doit accuser réception du refus avant de redemander.
cancelled Annulée par un membre du gang disposant de la permission request_robbery.
expired Expirée sans réponse (pending) ou sans avoir été lancée (approved).
started Le braquage a commencé (terminal ; défini par origen_police).

Transitions autorisées

text
pending  → approved | rejected | cancelled | expired
approved → cancelled | started | expired
started  → (terminal)
rejected → (terminal — gang must acknowledge)
cancelled→ (terminal)
expired  → (terminal)

rejected n’est pas immédiatement terminal dans le cache du gang. Il reste visible jusqu’à ce que le membre du gang en accuse réception (bouton du panneau), ce qui efface l’entrée et permet de redemander.


Flux côté gang

  1. Un membre disposant de request_robbery ouvre le panneau de gang et va dans Robbery Requests.
  2. Il sélectionne un braquage, choisit le nombre de participants et envoie.
  3. Le serveur valide : cooldown, policiers connectés, plage de participants, et absence de demande pending déjà existante pour le gang.
  4. Si la demande est valide, elle est transmise à origen_police et mise en cache comme pending.
  5. Les mises à jour d’état arrivent en temps réel : la NUI reflète les changements sans que le joueur ait à rafraîchir.
  6. Si elle est refusée, le panneau affiche le motif du refus (fourni par la police). Le membre doit appuyer sur le bouton de fermeture pour l’effacer. Après accusé de réception, un cooldown par braquage (rejectedRequestCooldownSeconds) peut encore empêcher pendant un certain temps de redemander ce braquage précis ; les autres braquages ne sont pas affectés.
  7. Si elle est approuvée, le gang dispose du temps configuré pour lancer le braquage.
  8. Si le gang veut abandonner, il peut annuler (dans tous les états sauf started).

Mode anonyme

Lorsque Config.RobberyRequest.Anonymous = true :

Pour révéler l’identité du gang à la police, définis Anonymous = false.


Vérifier l’état d’une demande depuis des scripts externes

Utilise les exports côté serveur documentés dans Exports pour conditionner tes scripts de braquage à une demande approuvée valide :

lua
-- Gate: only allow starting the robbery if approved
local res = exports['origen_ilegalv2']:GetRobberyRequestStatus(source, 'paleto_bank')
if not res.ok or res.status ~= 'approved' then
    return -- block
end

Dépannage

Symptôme Cause Solution
L’onglet n’est pas visible dans le panneau de gang origen_police n’est pas démarré Démarre origen_police avant origen_ilegalv2
Erreur « Police unavailable » à l’envoi origen_police s’est arrêté en cours de session Redémarre origen_police ; le cache est vidé automatiquement
Le gang reste bloqué avec une demande pending La police n’a pas répondu avant l’écoulement de PendingExpireMinutes La demande expirera automatiquement ; réduis PendingExpireMinutes si besoin
Impossible de redemander après un refus Le refus n’a pas été acquitté, ou rejectedRequestCooldownSeconds est encore actif Ferme d’abord la notification de refus ; si un cooldown est configuré, attends qu’il expire (il ne bloque que le même braquage)
Le cooldown reste actif après un redémarrage Le cooldown n’existe qu’en mémoire et se réinitialise au redémarrage de la ressource Comportement attendu : aucun cooldown persistant entre les redémarrages