Início › Documentação › Pedidos de assalto · origen_ilegalv2
O módulo de pedidos de assalto permite que os membros de uma gangue enviem um pedido formal de assalto ao departamento de polícia diretamente a partir do painel da gangue. A polícia aprova-o ou rejeita-o, e a gangue pode ver o estado em tempo real.
Este módulo é completamente independente do origen_robberies. Não inicia nem gere o assalto em si: apenas trata do handshake de pedido e aprovação entre a gangue e a polícia.
O separador Robbery Requests só aparece no painel da gangue se o origen_police estiver a correr. Se o recurso estiver parado ou não estiver instalado, o separador é escondido automaticamente.
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| Chave | Tipo | Por omissão | Descrição |
|---|---|---|---|
Enabled |
boolean |
true |
Ativa ou desativa todo o módulo. Mesmo com true, o separador esconde-se se o origen_police não estiver arrancado. |
Permission |
string |
'request_robbery' |
Permissão de cargo necessária para enviar e cancelar pedidos. Os líderes têm-na sempre. Consulta Configuração. |
Anonymous |
boolean |
true |
Se for true, o painel da polícia mostra "Anonymous" em vez do nome real da gangue e do requerente. O ID da gangue continua a ser enviado internamente para validação. |
PendingExpireMinutes |
number |
15 |
Minutos após os quais um pedido pending expira se a polícia não responder. 0 = sem expiração. |
ApprovedExpireMinutes |
number |
30 |
Minutos após os quais um pedido approved expira se a gangue não iniciar o assalto. 0 = sem expiração. |
Config.RobberyRequest.Requests)Cada entrada da lista representa um tipo de assalto que pode ser pedido.
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 | Descrição |
|---|---|---|
id |
string |
Identificador único e estável do assalto. Usado nos exports e nas verificações de estado. |
label |
string |
Nome mostrado no painel da gangue. |
image |
string |
URL da imagem do cartão. Deixa em "" para usar um marcador de posição. |
active |
boolean |
Se for false, a entrada é escondida do painel e não pode ser pedida. |
requiredCops |
number |
Mínimo de agentes em serviço necessários para pedir este assalto. |
minParticipants |
number |
Mínimo de participantes que a gangue tem de declarar (inclusive). Tem de ser >= 1. |
maxParticipants |
number |
Máximo de participantes (inclusive). Tem de ser >= minParticipants. |
cooldownSeconds |
number |
Tempo de espera (segundos) após concluir o assalto até se poder pedir de novo esse mesmo assalto (usa origen_robberies). 0 = sem cooldown. |
rejectedRequestCooldownSeconds |
number |
Tempo (segundos) que a gangue tem de esperar antes de voltar a pedir este assalto depois de a polícia o rejeitar. Bloqueia apenas este assalto; os restantes não são afetados. 0 = sem cooldown por rejeição (a gangue pode voltar a pedir de imediato depois de marcar a rejeição como lida). |
id tem de ser único entre todas as entradas.minParticipants >= 1 e maxParticipants >= minParticipants.requiredCops >= 0, cooldownSeconds >= 0 e rejectedRequestCooldownSeconds >= 0.| Estado | Descrição |
|---|---|
pending |
Enviado, à espera de resposta da polícia. |
approved |
Aprovado pela polícia. A gangue tem ApprovedExpireMinutes para começar. |
rejected |
Rejeitado pela polícia. A gangue tem de confirmar a rejeição antes de voltar a pedir. |
cancelled |
Cancelado por um membro da gangue com a permissão request_robbery. |
expired |
Expirou sem resposta (pending) ou sem ser iniciado (approved). |
started |
O assalto começou (terminal; definido pelo origen_police). |
pending → approved | rejected | cancelled | expired
approved → cancelled | started | expired
started → (terminal)
rejected → (terminal — gang must acknowledge)
cancelled→ (terminal)
expired → (terminal)rejected não é terminal de imediato na cache da gangue. Continua visível até o membro da gangue o confirmar (botão no painel), o que limpa a entrada e permite voltar a pedir.
request_robbery abre o painel da gangue e navega até Robbery Requests.pending.origen_police e guardado em cache como pending.rejectedRequestCooldownSeconds) pode continuar a impedir durante algum tempo que se volte a pedir esse assalto em concreto; os outros assaltos não são afetados.started).Quando Config.RobberyRequest.Anonymous = true:
gangLabel = "Anonymous" e requestedBy = "Anonymous".gangId continua a ser transmitido internamente para que o origen_ilegalv2 possa validar a propriedade e os cancelamentos.Para revelar a identidade da gangue à polícia, define Anonymous = false.
Usa os exports do lado do servidor documentados em Exports para condicionar os teus scripts de assalto a um pedido aprovado válido:
-- 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| Sintoma | Causa | Solução |
|---|---|---|
| O separador não está visível no painel da gangue | O origen_police não está arrancado |
Arranca o origen_police antes do origen_ilegalv2 |
| Erro «Police unavailable» ao enviar | O origen_police parou a meio da sessão |
Reinicia o origen_police; a cache é limpa automaticamente |
A gangue fica com um pedido pending preso |
A polícia não respondeu antes de passarem PendingExpireMinutes |
O pedido expirará automaticamente; baixa PendingExpireMinutes se for necessário |
| Não é possível voltar a pedir após uma rejeição | A rejeição não foi confirmada, ou rejectedRequestCooldownSeconds ainda está ativo |
Dispensa primeiro a notificação de rejeição; se houver um cooldown configurado, espera que expire (só bloqueia o mesmo assalto) |
| O cooldown continua ativo após reiniciar | O cooldown só existe em memória e repõe-se ao reiniciar o recurso | Comportamento esperado: não há cooldown persistente entre reinícios |