Inicio › Documentación › Exports · origen_ilegalv2

Exports · origen_ilegalv2

Todos los exports están registrados bajo el nombre del recurso origen_ilegalv2. La tabla de abajo los separa según el lado de ejecución: usa el lado correcto o la llamada se ignorará sin avisar.


Exports del servidor

Datos de bandas

GetPlayerGang(source) → string | nil

Devuelve el ID de la banda del jugador indicado, o nil si no tiene ninguna.

lua
local gangId = exports['origen_ilegalv2']:GetPlayerGang(source)

GetPlayerGangData(source) → { id, label } | nil

Devuelve el id de la banda del jugador y su label visible.

lua
local data = exports['origen_ilegalv2']:GetPlayerGangData(source)
if data then
    print(data.id, data.label)
end

GetPlayerGangByCid(citizenid) → table | nil

Busca la pertenencia a una banda a partir del identificador del ciudadano. Útil para paneles de administración y lecturas entre recursos.

lua
local info = exports['origen_ilegalv2']:GetPlayerGangByCid(citizenid)
-- { id, name, label, rankName, rankGrade, isLeader }

GetGangInfo(gangId) → table | nil

Devuelve una instantánea consolidada de una banda. Es el export recomendado para recursos externos que necesitan algo más que el ID o el nombre: agrega los datos en memoria y un único recuento en la base de datos de los territorios en una sola llamada.

lua
local info = exports['origen_ilegalv2']:GetGangInfo('vagos')
if not info then return end -- gang doesn't exist or isn't loaded

Campos devueltos:

Campo Tipo Descripción
id string ID interno de la banda
label string Nombre visible
leader string Identificador del líder (citizenid / license)
color string Color hexadecimal (#rrggbb)
is_active boolean Si la banda está activa actualmente (points > 0)
level number Nivel de la banda (1+)
exp number XP actual dentro del nivel actual
points number Puntos de la banda (0–100). Si llega a 0, la banda se desactiva
money number Saldo del banco de la banda
member_count number Total de miembros registrados
online_count number Miembros conectados ahora mismo
max_members number Máximo de miembros permitido (origen_gang_config)
max_vehicles number Máximo de vehículos permitido
territory_count number Territorios controlados actualmente (recuento en vivo en la base de datos)
base_territory string|nil ID del territorio base de la banda
created_at string|nil Marca de tiempo de creación

Ejemplo de uso:

lua
local info = exports['origen_ilegalv2']:GetGangInfo('vagos')
 
-- Gate by level
if info.level < 3 then
    return cb({ success = false, reason = 'gang_level_too_low' })
end
 
-- Gate by territories
if info.territory_count < 2 then
    return cb({ success = false, reason = 'not_enough_territories' })
end
 
-- Check capacity before inviting
if info.member_count >= info.max_members then
    return cb({ success = false, reason = 'gang_full' })
end
 
print(string.format(
    '[%s] Level %d | Members %d/%d | Territories %d | Bank $%d',
    info.label,
    info.level,
    info.member_count, info.max_members,
    info.territory_count,
    info.money
))

territory_count es el único campo que consulta la base de datos; todo lo demás se lee directamente de la instancia de Gang en memoria. La consulta es un único SELECT COUNT(*), así que es seguro llamarla en cada petición.


GetGangById(gangId) → { id, label, name, money, level } | nil

lua
local gang = exports['origen_ilegalv2']:GetGangById('vagos')

GetGangByName(gangName) → { id, label, name, money } | nil

lua
local gang = exports['origen_ilegalv2']:GetGangByName('vagos')

GetGangs() → table<gangId, { id, label }>

Devuelve todas las instancias de bandas activas indexadas por ID.

lua
local gangs = exports['origen_ilegalv2']:GetGangs()
for id, gang in pairs(gangs) do
    print(id, gang.label)
end

GetGangLevelById(gangId) → number | nil

Devuelve el nivel actual de una banda. Devuelve nil si la banda no existe.

lua
local level = exports['origen_ilegalv2']:GetGangLevelById('vagos')
if level and level >= 5 then
    -- unlock tier-2 content
end

setGang(identifier, gangName, rankId) → boolean

Export de compatibilidad. Asigna a un jugador, por identificador, a una banda con nombre en el rango indicado, sacándolo antes de su banda actual.

lua
exports['origen_ilegalv2']:setGang(identifier, 'vagos', 1)

Accesos directos de interfaz

OpenGangMenuBySource(source) → boolean

Abre la NUI del panel de banda para un jugador que ya está en una banda.

lua
exports['origen_ilegalv2']:OpenGangMenuBySource(source)

OpenGangCreationBySource(source) → boolean

Abre el asistente de creación de bandas para un jugador. El jugador debe tener can_create_gang = 1 en origen_gang_permissions.

lua
exports['origen_ilegalv2']:OpenGangCreationBySource(source)

Laboratorios

GetPlayerLabState(source) → { lab_id, lab_type, bucket, world_exit } | nil

Devuelve en qué laboratorio está actualmente un jugador. nil si el jugador no está en ningún laboratorio.

lua
local state = exports['origen_ilegalv2']:GetPlayerLabState(source)
if state then
    print(state.lab_id, state.lab_type)
end

AdminLabsGetAll() → table[]

Devuelve todas las filas de laboratorios de la base de datos (en caché). Se usa internamente en las comprobaciones de acceso a laboratorios.

lua
local labs = exports['origen_ilegalv2']:AdminLabsGetAll()

AdminLabsInvalidateCache()

Vacía la caché de laboratorios en memoria, de modo que la siguiente llamada a AdminLabsGetAll vuelva a consultar la base de datos.

lua
exports['origen_ilegalv2']:AdminLabsInvalidateCache()

MethLabResetPlayerState(source)

Reinicia a la fuerza el estado de producción del laboratorio de meta de un jugador (útil para expulsarlo a mitad de un ciclo).

lua
exports['origen_ilegalv2']:MethLabResetPlayerState(source)

CokeLabResetPlayerState(source)

Reinicia a la fuerza el estado de producción del laboratorio de cocaína de un jugador.

lua
exports['origen_ilegalv2']:CokeLabResetPlayerState(source)

WeedLabResetPlayerState(source)

Reinicia a la fuerza el estado del laboratorio de marihuana de un jugador (libera los puntos de secado que ocupe).

lua
exports['origen_ilegalv2']:WeedLabResetPlayerState(source)

Crafteo

CraftingPointsGetAll() → table[]

Devuelve todos los puntos de crafteo base (definidos por el administrador, sin incluir las instancias de laboratorio) desde la caché de la base de datos.

lua
local points = exports['origen_ilegalv2']:CraftingPointsGetAll()

CraftingLabInstancesGetAll() → table[]

Devuelve todas las instancias de puntos de crafteo que se compraron dentro de laboratorios (solo en tiempo de ejecución, no son puntos base).

lua
local instances = exports['origen_ilegalv2']:CraftingLabInstancesGetAll()

CraftingPointsInvalidateCache()

Invalida tanto la caché de puntos base como la de instancias de laboratorio.

lua
exports['origen_ilegalv2']:CraftingPointsInvalidateCache()

Tiendas

StoresGetAll() → table[]

Devuelve todas las tiendas de bandas desde la caché de la base de datos.

lua
local stores = exports['origen_ilegalv2']:StoresGetAll()

StoresInvalidateCache()

Vacía la caché de tiendas en memoria.


SellStoresGetAll() → table[]

Devuelve todas las tiendas de venta de bandas desde la caché de la base de datos.

lua
local sellStores = exports['origen_ilegalv2']:SellStoresGetAll()

SellStoresInvalidateCache()

Vacía la caché de tiendas de venta en memoria.


Territorios

CaptureTerritory(territoryId, gangId) → boolean

Asigna un territorio a una banda por código. Provoca una actualización del mapa en el cliente de todos los jugadores.

lua
local ok = exports['origen_ilegalv2']:CaptureTerritory('davis', 'vagos')

ReleaseTerritory(territoryId) → boolean

Retira la propiedad de la banda sobre un territorio (establece gang_id = NULL). Provoca una actualización del mapa en el cliente.

lua
exports['origen_ilegalv2']:ReleaseTerritory('davis')

AddTerritoryReputation(territoryId, gangId, amount) → { success, message? }

Añade puntos de reputación a una banda en un territorio. Valida que la banda y el territorio existan y que los territorios base estén protegidos.

lua
local result = exports['origen_ilegalv2']:AddTerritoryReputation('davis', 'vagos', 10.0)
if result.success then ... end

RemoveTerritoryReputation(territoryId, gangId, amount) → { success, message? }

Quita puntos de reputación a una banda en un territorio.


SetTerritoryReputation(territoryId, gangId, amount) → { success, message? }

Establece la reputación de una banda en un territorio en un valor exacto (0–100).


GetGangTerritoryReputation(territoryId, gangId) → number

Devuelve el valor actual de reputación de una banda en un territorio.

lua
local rep = exports['origen_ilegalv2']:GetGangTerritoryReputation('davis', 'vagos')

GetAllTerritoryReputations(territoryId) → table[]

Devuelve todas las filas de reputación de un territorio, ordenadas de mayor a menor reputación.


ClearTerritoryReputations(territoryId) → { success, message? }

Elimina todos los datos de reputación de un territorio y libera la propiedad de la banda.


GetTerritoryStabilization(territoryId) → { active, remaining_seconds, remaining_minutes }

Devuelve si un territorio está dentro de su ventana de estabilización posterior a la captura.

lua
local stab = exports['origen_ilegalv2']:GetTerritoryStabilization('davis')
if stab.active then
    print('Locked for', stab.remaining_minutes, 'more minutes')
end

GetTerritoryCaptureBlock(territoryId) → { active, remaining_seconds, remaining_minutes, cooldown_days }

Devuelve si el cooldown de captura de cada territorio (campo capture_cooldown_until de la base de datos) sigue activo.


GetPlayersInTerritory(territoryId) → table[]

Devuelve la lista de sources de jugadores que el sistema de presencia tiene registrados actualmente dentro de un territorio.

lua
local players = exports['origen_ilegalv2']:GetPlayersInTerritory('davis')

GetGangMembersInTerritory(territoryId, gangId) → table[]

Devuelve solo los miembros de una banda concreta que están actualmente dentro de un territorio.


GetPlayerPresenceData(source) → table | nil

Devuelve el estado de seguimiento de presencia de un jugador: en qué territorio está, cuánto tiempo lleva allí, etc.


IsPlayerInTerritory(source, territoryId) → boolean

Devuelve true si, según el sistema de presencia del servidor, un jugador está actualmente dentro del territorio indicado.

lua
local inside = exports['origen_ilegalv2']:IsPlayerInTerritory(source, 'davis')

Venta de droga

GetDrugSellLevel(source) → number (0–100)

Devuelve el nivel de venta en la calle de un jugador (un valor de progresión de 0 a 100 que aumenta con las ventas exitosas).

lua
local level = exports['origen_ilegalv2']:GetDrugSellLevel(source)

ProcessDrugSaleReputation(source)

Dispara manualmente el procesamiento de reputación de territorio por una venta de droga de un jugador: la misma lógica que se ejecuta con origen_gang:drugSales:saleCompleted.

lua
exports['origen_ilegalv2']:ProcessDrugSaleReputation(source)

GetPlayerSalesInfo(source) → { salesThisHour, maxSalesPerHour, remainingSales, nextResetIn }

Devuelve las estadísticas de ventas de droga de la hora actual de un jugador frente al límite de reputación del territorio.

lua
local info = exports['origen_ilegalv2']:GetPlayerSalesInfo(source)
print(info.remainingSales, 'sales left this hour')

Vehículos

GetGangVehicles(gangId) → table[]

Devuelve todas las filas de vehículos de origen_gang_vehicles de una banda.

lua
local vehicles = exports['origen_ilegalv2']:GetGangVehicles('vagos')

GetVehicleCatalog(gangId) → table[]

Devuelve las entradas habilitadas del catálogo de vehículos de una banda desde origen_gang_vehicle_catalog.


Organización — Tareas

AddOrganizationTask(taskDef) → boolean

Registra una tarea en el catálogo global. Si task_key ya existe, se actualiza la fila.

lua
exports['origen_ilegalv2']:AddOrganizationTask({
    task_key      = 'deliver_supplies',
    label         = 'Deliver Supplies',
    description   = 'Complete 3 supply runs.',
    category      = 'supply',
    is_repeatable = false,
    meta          = { reward = 5000 },
})

Llámalo dentro de AddEventHandler('onResourceStart', ...): OrgPanels no está listo antes de que el recurso termine de cargar.


CompleteGangTask(gangId, taskKey, opts?) → { ok, error?, times_completed }

lua
local result = exports['origen_ilegalv2']:CompleteGangTask('vagos', 'deliver_supplies', {
    completed_by = identifier,
})

IsGangTaskCompleted(gangId, taskKey) → boolean

lua
local done = exports['origen_ilegalv2']:IsGangTaskCompleted('vagos', 'deliver_supplies')

GetGangTasks(gangId) → table[]

Devuelve el catálogo completo de tareas con el estado de completado de cada banda.


Organización — Mejoras

AddOrganizationUpgrade(upgradeDef) → boolean

lua
exports['origen_ilegalv2']:AddOrganizationUpgrade({
    upgrade_key    = 'tier2_robberies',
    label          = 'Tier 2 Robberies',
    type           = 'robbery_unlock',
    required_tasks = { 'deliver_supplies' },
    effect         = { feature = 'robberies:tier2' },
})

UnlockGangUpgrade(gangId, upgradeKey, opts?) → { ok, error?, missing_tasks? }

Valida las dependencias de tareas antes de desbloquear. error = 'missing_dependencies' incluye missing_tasks: [{ task_key, label }].


HasGangUpgrade(gangId, upgradeKey) → boolean


IsGangFeatureUnlocked(gangId, featureKey) → boolean

Comprueba si alguna mejora desbloqueada de una banda tiene effect.feature == featureKey.

lua
local ok = exports['origen_ilegalv2']:IsGangFeatureUnlocked('vagos', 'robberies:tier2')

GetGangUpgrades(gangId) → table[]

Devuelve el catálogo completo de mejoras con el estado de desbloqueo de cada banda y la resolución de dependencias.


Solicitudes de robo

GetRobberyRequestConfig() → table | nil

Devuelve la configuración del módulo de solicitudes de robo, indexada para una consulta rápida por origen_police. Devuelve nil si el módulo está desactivado.

origen_police consume este export internamente para validar los ID de solicitud, los cooldowns y los rangos de participantes sin acoplarse a la tabla Config completa.

lua
local cfg = exports['origen_ilegalv2']:GetRobberyRequestConfig()
if not cfg then return end -- module disabled
 
local entry = cfg.requestsById['paleto_bank']
-- entry = { id, label, image, requiredCops, minParticipants, maxParticipants, cooldownSeconds }

Campos devueltos:

Campo Tipo Descripción
enabled boolean Siempre true (se devuelve nil cuando está desactivado)
pendingExpireMinutes number TTL de las solicitudes pending, en minutos
approvedExpireMinutes number TTL de las solicitudes approved, en minutos
requestsById table<robberyId, entry> Todas las entradas de robo activas indexadas por id para búsqueda en O(1)

GetRobberyRequestStatus(source, robberyId) → { ok, status, error? }

Devuelve el estado normalizado de la solicitud de robo de la banda para un source de jugador y un ID de robo dados. Resuelve la banda internamente: quien llama solo necesita el source del jugador.

lua
local res = exports['origen_ilegalv2']:GetRobberyRequestStatus(source, 'paleto_bank')
if res.ok and res.status == 'approved' then
    -- allow the robbery to start
end

Parámetros:

Parámetro Tipo Descripción
source number Source del servidor del jugador
robberyId string ID del robo tal como se define en Config.RobberyRequest.Requests

Devuelve:

Campo Tipo Descripción
ok boolean false si no se pudo resolver el source o la banda
status string "pending" | "approved" | "rejected" | "not_requested"
error string? Presente cuando ok = false: "invalid_source" | "no_gang"

Los estados internos (cancelled, expired, started) se normalizan a "not_requested", de modo que los integradores nunca tengan que gestionarlos.


HasApprovedRobberyRequest(source, robberyId) → boolean

Atajo booleano para la comprobación más habitual: devuelve true solo cuando la solicitud de la banda está en estado approved. Ideal para condicionales directos en los scripts de robos.

lua
if exports['origen_ilegalv2']:HasApprovedRobberyRequest(source, 'paleto_bank') then
    -- start the robbery flow
end

Devuelve false si el source no es válido, el jugador no tiene banda o la solicitud está en cualquier estado distinto de approved.


Exports del cliente

Banda

GetPlayerGang() → table | nil

Devuelve la tabla de datos de la banda actual del jugador local (el mismo objeto que usa la NUI). nil si no está en una banda.

lua
local gang = exports['origen_ilegalv2']:GetPlayerGang()
if gang then
    print(gang.id, gang.label)
end

OpenGangMenu()

Abre la NUI del panel de banda para el jugador local.

lua
exports['origen_ilegalv2']:OpenGangMenu()

OpenGangCreation()

Abre el asistente de creación de bandas para el jugador local.

lua
exports['origen_ilegalv2']:OpenGangCreation()

Laboratorios

GetInsideLab() → { lab_id, lab_type, lab_name } | nil

Devuelve el laboratorio en el que está actualmente el jugador local, o nil si no está en ninguno. Lo usan todos los scripts de cliente de laboratorios para proteger las interacciones.

lua
local lab = exports['origen_ilegalv2']:GetInsideLab()
if lab and lab.lab_type == 'meth' then ... end

IsGangLabOpen() → boolean

Devuelve true si el panel NUI del portátil del laboratorio está abierto.

lua
if exports['origen_ilegalv2']:IsGangLabOpen() then
    -- don't open another menu on top
end

CloseGangLab()

Cierra por código el panel NUI del portátil del laboratorio.


MethLabResetProduction()

Reinicia el estado de producción del laboratorio de meta en el cliente (borra la fase actual, los temporizadores y los modificadores).

lua
exports['origen_ilegalv2']:MethLabResetProduction()

CokeLabResetProduction()

Reinicia el estado de producción del laboratorio de cocaína en el cliente.


InitLabStashPoints(stashes)

Inicializa las zonas de interacción lib.points de los puntos de alijo del laboratorio. El ciclo de vida del laboratorio lo llama internamente al entrar; solo lo necesitas si estás construyendo una integración de laboratorio personalizada.


ClearLabStashPoints()

Elimina todos los puntos de interacción activos de los alijos del laboratorio y oculta cualquier HelpText abierto.


ApplyLabIplState(labType, iplModules)

Aplica el estado de IPL de las mejoras del laboratorio (cambios de props del interior) para el tipo de laboratorio y la instantánea de módulos indicados. Se llama internamente cuando un jugador entra en un laboratorio; solo lo necesitas para integraciones personalizadas.


Territorios

GetTerritories() → table<territoryId, territory>

Devuelve el mapa completo de territorios cargado actualmente en el cliente.

lua
local territories = exports['origen_ilegalv2']:GetTerritories()

GetTerritoryById(territoryId) → table | nil

Devuelve un solo territorio por ID desde la caché del cliente.

lua
local t = exports['origen_ilegalv2']:GetTerritoryById('davis')

IsPlayerInTerritory(territoryId) → boolean

Devuelve true si la posición actual del jugador local está dentro de la zona del territorio indicado.

lua
local inside = exports['origen_ilegalv2']:IsPlayerInTerritory('davis')

GetPlayerPresenceData() → table

Devuelve el estado de seguimiento de presencia del cliente: { isInTerritory, currentTerritory, timeInZone, ... }.

lua
local presence = exports['origen_ilegalv2']:GetPlayerPresenceData()
if presence.isInTerritory then
    print('In territory:', presence.currentTerritory)
end

GetCurrentTerritory() → table | nil

Devuelve el objeto del territorio en el que está actualmente el jugador local, o nil si está fuera de todas las zonas.

lua
local territory = exports['origen_ilegalv2']:GetCurrentTerritory()

Venta de droga

SellDrugToNearestPed(drugName)

Dispara por código un intento de vender una droga al ped elegible más cercano: la misma lógica que el modo pasivo de venta en la calle, pero invocable desde fuera.

lua
exports['origen_ilegalv2']:SellDrugToNearestPed('packaged_weed')

Crafteo

IsCraftingMenuOpen() → boolean

Devuelve true si el panel NUI de crafteo está abierto.


CloseCraftingMenu()

Cierra el panel NUI de crafteo y limpia el estado de vigilancia del servidor.


Tiendas

IsStoreMenuOpen() → boolean

Devuelve true si la NUI de la tienda de la banda está abierta.


CloseStoreMenu()

Cierra la NUI de la tienda de la banda.


IsSellMenuOpen() → boolean

Devuelve true si la NUI de la tienda de venta de la banda está abierta.


CloseSellMenu()

Cierra la NUI de la tienda de venta de la banda.


Esposas

IsHandcuffed() → boolean

Devuelve true si el jugador local está esposado actualmente por la acción de esposar del menú rápido de la banda.

lua
if exports['origen_ilegalv2']:IsHandcuffed() then
    -- prevent certain actions
end

RemoveHandCuff()

Quita a la fuerza las esposas al jugador local (desacopla el prop, limpia las tareas y vuelve a permitir disparar).

lua
exports['origen_ilegalv2']:RemoveHandCuff()

Panel de administración

openManagement()

Abre la NUI del panel de gestión de administración como si se abriera desde un hub externo (activa el flag openedFromHub para que el panel omita su retardo normal de captura del foco).

lua
exports['origen_ilegalv2']:openManagement()

IsOpenedFromHub() → boolean

Devuelve si el panel de administración se abrió por última vez mediante openManagement().


ResetHubFlag()

Borra el flag openedFromHub.