Docs

API, exports y seguridad

1. Creación de Alertas de Despacho (Diferenciación Arquitectónica)

VARGAS MDT separa estrictamente los contextos de ejecución para evitar cualquier tipo de suplantación de identidad (caller spoofing) o inyección de coordenadas:

A. Export del Servidor (Server-Side Export — Confiable)

Invocable únicamente desde otros scripts del servidor (ej. robos de bancos, alarmas de tiendas, disparos automatizados). No requiere permisos de usuario cliente, pero aplica sanitización estricta de todos los campos:

lua
-- server.lua de cualquier recurso externo (trusted environment)
exports['vargas_mdt']:CreateAlert({
    type = 'police',      -- 'police' | 'ems' | 'fire' | '911'
    priority = 'high',    -- 'low' | 'medium' | 'high' | 'critical'
    title = 'Robo a Banco',
    message = 'Alarma de bóveda activada en Pacific Standard Bank',
    coords = vector3(254.12, 221.45, 106.28),
    street = 'Alta Street',
    zone = 'Downtown',
    caller_name = 'Sistema Central de Alarmas',
    caller_phone = 'N/A'
})

B. Evento de Red de Cliente (RegisterNetEvent('vargas_mdt:server:createAlert') — Restringido)

Invocable únicamente por clientes autorizados con el permiso explícito mdt.dispatch. El servidor:

  • Verifica permisos (Permissions.Assert(src, 'mdt.dispatch')) y rate limit (2 req / 5 seg).
  • Sobrescribe y fuerza caller_source = src.
  • Obtiene el nombre y teléfono del jugador directamente desde la base del servidor (Bridge.GetPlayer(src)), anulando cualquier intento de suplantación.
  • Valida matemáticamente las coordenadas y aplica fallback a la posición del ped si no son válidas.

C. Llamadas Ciudadanas de Emergencia (vargas_mdt:server:sendEmergencyCall)

Abierto para todos los ciudadanos para llamadas de socorro (/911, /policia, /ems):

  • Rate limit estricto (1 llamada cada 10 seg).
  • Coordenadas leídas de la entidad del ped en el servidor (GetEntityCoords(GetPlayerPed(src))).
  • Nombre y teléfono del remitente leídos de los datos oficiales del personaje en servidor.

2. Ciclo de Vida de Alertas

lua
-- Cerrar llamada de despacho
exports['vargas_mdt']:RemoveAlert(alertId)

3. Crear un Blip Sincronizado

lua
exports['vargas_mdt']:CreateBlip({
    name = 'Control Policial',
    sprite = 161,
    color = 3,
    scale = 1.0,
    coords = vector3(-200.0, -1000.0, 30.0),
    radius = 50.0,
    duration = 600,
    department = 'police'
})

4. Consultar Unidades y Alertas

lua
local units = exports['vargas_mdt']:GetActiveUnits()
local alerts = exports['vargas_mdt']:GetActiveAlerts()

5. Seguridad de Objetos Tácticos & Barreras

  • Aislamiento por Departamento: Los objetos desplegados (conos, barreras, pinchos, carpas médicas) pertenecen al departamento que los colocó (police, ems, fire). Un miembro de EMS no puede retirar ni mover barreras policiales ni viceversa, salvo agentes con rango administrativo (mdt.admin).
  • Validación de Proximidad en Servidor: Las peticiones de retirar (removeObject) o reposicionar (updateObjectTransform) objetos verifican en el servidor la distancia euclídea entre el ped del solicitante (GetEntityCoords(GetPlayerPed(src))) y el objeto táctico (Config.MaxObjectInteractDistance, por defecto 15.0 m).
  • Límite de Despliegue: Se restringe en servidor a Config.MaxDeployablesPerPlayer (15 objetos) tanto por source de sesión como por identificador persistente de personaje.
  • Transparencia Visual (getPlacedObjects): El evento de consulta de objetos es de lectura pública (con rate limit) para que todos los clientes en el servidor puedan renderizar las entidades físicas y sus colisiones en el mundo de GTA, evitando colisiones invisibles.