Inicio › Documentación › Solicitudes de robo · origen_ilegalv2
El módulo de solicitudes de robo permite a los miembros de una banda enviar una solicitud formal de robo al departamento de policía directamente desde el panel de banda. La policía la aprueba o la rechaza, y la banda puede ver el estado en tiempo real.
Este módulo es completamente independiente de origen_robberies. No inicia ni gestiona el robo en sí: solo se encarga del handshake de solicitud y aprobación entre la banda y la policía.
La pestaña Robbery Requests solo aparece en el panel de banda si origen_police está en marcha. Si el recurso está detenido o no está instalado, la pestaña se oculta automáticamente.
config/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| Clave | Tipo | Por defecto | Descripción |
|---|---|---|---|
Enabled |
boolean |
true |
Activa o desactiva todo el módulo. Aunque sea true, la pestaña se oculta si origen_police no está arrancado. |
Permission |
string |
'request_robbery' |
Permiso de rango necesario para enviar y cancelar solicitudes. Los líderes siempre lo tienen. Consulta Configuración. |
Anonymous |
boolean |
true |
Si es true, el panel de policía muestra "Anonymous" en lugar del nombre real de la banda y del solicitante. El ID de la banda se sigue enviando internamente para la validación. |
PendingExpireMinutes |
number |
15 |
Minutos tras los cuales una solicitud pending caduca si la policía no responde. 0 = sin caducidad. |
ApprovedExpireMinutes |
number |
30 |
Minutos tras los cuales una solicitud approved caduca si la banda no inicia el robo. 0 = sin caducidad. |
Config.RobberyRequest.Requests)Cada entrada de la lista representa un tipo de robo que se puede solicitar.
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
}| Campo | Tipo | Descripción |
|---|---|---|
id |
string |
Identificador único y estable del robo. Se usa en los exports y en las comprobaciones de estado. |
label |
string |
Nombre mostrado en el panel de banda. |
image |
string |
URL de la imagen de la tarjeta. Déjalo en "" para usar un marcador de posición. |
active |
boolean |
Si es false, la entrada se oculta del panel y no se puede solicitar. |
requiredCops |
number |
Mínimo de agentes de servicio necesarios para solicitar este robo. |
minParticipants |
number |
Mínimo de participantes que debe declarar la banda (inclusive). Debe ser >= 1. |
maxParticipants |
number |
Máximo de participantes (inclusive). Debe ser >= minParticipants. |
cooldownSeconds |
number |
Tiempo de espera (segundos) tras completar el robo antes de poder solicitar de nuevo ese mismo robo (usa origen_robberies). 0 = sin cooldown. |
rejectedRequestCooldownSeconds |
number |
Tiempo (segundos) que la banda debe esperar antes de volver a solicitar este robo después de que la policía lo rechace. Solo bloquea este robo; los demás no se ven afectados. 0 = sin cooldown por rechazo (la banda puede volver a solicitarlo de inmediato tras marcar el rechazo como leído). |
id debe ser único entre todas las entradas.minParticipants >= 1 y maxParticipants >= minParticipants.requiredCops >= 0, cooldownSeconds >= 0 y rejectedRequestCooldownSeconds >= 0.| Estado | Descripción |
|---|---|
pending |
Enviada, a la espera de respuesta de la policía. |
approved |
Aprobada por la policía. La banda dispone de ApprovedExpireMinutes para empezar. |
rejected |
Rechazada por la policía. La banda debe confirmar el rechazo antes de volver a solicitar. |
cancelled |
Cancelada por un miembro de la banda con el permiso request_robbery. |
expired |
Caducó sin respuesta (pending) o sin iniciarse (approved). |
started |
El robo ha comenzado (terminal; lo establece origen_police). |
pending → approved | rejected | cancelled | expired
approved → cancelled | started | expired
started → (terminal)
rejected → (terminal — gang must acknowledge)
cancelled→ (terminal)
expired → (terminal)rejected no es terminal de inmediato en la caché de la banda. Sigue visible hasta que el miembro de la banda lo confirma (botón del panel), lo que borra la entrada y permite volver a solicitar.
request_robbery abre el panel de banda y navega a Robbery Requests.pending.origen_police y se guarda en la caché como pending.rejectedRequestCooldownSeconds) puede seguir bloqueando durante un tiempo que se vuelva a solicitar ese robo concreto; los demás robos no se ven afectados.started).Cuando Config.RobberyRequest.Anonymous = true:
gangLabel = "Anonymous" y requestedBy = "Anonymous".gangId se sigue transmitiendo internamente para que origen_ilegalv2 pueda validar la propiedad y las cancelaciones.Para revelar la identidad de la banda a la policía, establece Anonymous = false.
Usa los exports del lado servidor documentados en Exports para condicionar tus scripts de robo a una solicitud aprobada válida:
-- 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| Síntoma | Causa | Solución |
|---|---|---|
| La pestaña no es visible en el panel de banda | origen_police no está arrancado |
Arranca origen_police antes de origen_ilegalv2 |
| Error «Police unavailable» al enviar | origen_police se detuvo a mitad de sesión |
Reinicia origen_police; la caché se borra automáticamente |
La banda se queda con una solicitud pending atascada |
La policía no respondió antes de que pasaran PendingExpireMinutes |
La solicitud caducará automáticamente; baja PendingExpireMinutes si hace falta |
| No se puede volver a solicitar tras un rechazo | El rechazo no se ha confirmado, o rejectedRequestCooldownSeconds sigue activo |
Descarta primero la notificación de rechazo; si hay un cooldown configurado, espera a que expire (solo bloquea el mismo robo) |
| El cooldown sigue activo tras reiniciar | El cooldown solo existe en memoria y se restablece al reiniciar el recurso | Comportamiento esperado: no hay cooldown persistente entre reinicios |