Inicio › Documentación › 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.
GetPlayerGang(source) → string | nilDevuelve el ID de la banda del jugador indicado, o nil si no tiene ninguna.
local gangId = exports['origen_ilegalv2']:GetPlayerGang(source)GetPlayerGangData(source) → { id, label } | nilDevuelve el id de la banda del jugador y su label visible.
local data = exports['origen_ilegalv2']:GetPlayerGangData(source)
if data then
print(data.id, data.label)
endGetPlayerGangByCid(citizenid) → table | nilBusca la pertenencia a una banda a partir del identificador del ciudadano. Útil para paneles de administración y lecturas entre recursos.
local info = exports['origen_ilegalv2']:GetPlayerGangByCid(citizenid)
-- { id, name, label, rankName, rankGrade, isLeader }GetGangInfo(gangId) → table | nilDevuelve 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.
local info = exports['origen_ilegalv2']:GetGangInfo('vagos')
if not info then return end -- gang doesn't exist or isn't loadedCampos 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:
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 } | nillocal gang = exports['origen_ilegalv2']:GetGangById('vagos')GetGangByName(gangName) → { id, label, name, money } | nillocal gang = exports['origen_ilegalv2']:GetGangByName('vagos')GetGangs() → table<gangId, { id, label }>Devuelve todas las instancias de bandas activas indexadas por ID.
local gangs = exports['origen_ilegalv2']:GetGangs()
for id, gang in pairs(gangs) do
print(id, gang.label)
endGetGangLevelById(gangId) → number | nilDevuelve el nivel actual de una banda. Devuelve nil si la banda no existe.
local level = exports['origen_ilegalv2']:GetGangLevelById('vagos')
if level and level >= 5 then
-- unlock tier-2 content
endsetGang(identifier, gangName, rankId) → booleanExport de compatibilidad. Asigna a un jugador, por identificador, a una banda con nombre en el rango indicado, sacándolo antes de su banda actual.
exports['origen_ilegalv2']:setGang(identifier, 'vagos', 1)OpenGangMenuBySource(source) → booleanAbre la NUI del panel de banda para un jugador que ya está en una banda.
exports['origen_ilegalv2']:OpenGangMenuBySource(source)OpenGangCreationBySource(source) → booleanAbre el asistente de creación de bandas para un jugador. El jugador debe tener can_create_gang = 1 en origen_gang_permissions.
exports['origen_ilegalv2']:OpenGangCreationBySource(source)GetPlayerLabState(source) → { lab_id, lab_type, bucket, world_exit } | nilDevuelve en qué laboratorio está actualmente un jugador. nil si el jugador no está en ningún laboratorio.
local state = exports['origen_ilegalv2']:GetPlayerLabState(source)
if state then
print(state.lab_id, state.lab_type)
endAdminLabsGetAll() → table[]Devuelve todas las filas de laboratorios de la base de datos (en caché). Se usa internamente en las comprobaciones de acceso a laboratorios.
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.
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).
exports['origen_ilegalv2']:MethLabResetPlayerState(source)CokeLabResetPlayerState(source)Reinicia a la fuerza el estado de producción del laboratorio de cocaína de un jugador.
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).
exports['origen_ilegalv2']:WeedLabResetPlayerState(source)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.
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).
local instances = exports['origen_ilegalv2']:CraftingLabInstancesGetAll()CraftingPointsInvalidateCache()Invalida tanto la caché de puntos base como la de instancias de laboratorio.
exports['origen_ilegalv2']:CraftingPointsInvalidateCache()StoresGetAll() → table[]Devuelve todas las tiendas de bandas desde la caché de la base de datos.
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.
local sellStores = exports['origen_ilegalv2']:SellStoresGetAll()SellStoresInvalidateCache()Vacía la caché de tiendas de venta en memoria.
CaptureTerritory(territoryId, gangId) → booleanAsigna un territorio a una banda por código. Provoca una actualización del mapa en el cliente de todos los jugadores.
local ok = exports['origen_ilegalv2']:CaptureTerritory('davis', 'vagos')ReleaseTerritory(territoryId) → booleanRetira la propiedad de la banda sobre un territorio (establece gang_id = NULL). Provoca una actualización del mapa en el cliente.
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.
local result = exports['origen_ilegalv2']:AddTerritoryReputation('davis', 'vagos', 10.0)
if result.success then ... endRemoveTerritoryReputation(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) → numberDevuelve el valor actual de reputación de una banda en un territorio.
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.
local stab = exports['origen_ilegalv2']:GetTerritoryStabilization('davis')
if stab.active then
print('Locked for', stab.remaining_minutes, 'more minutes')
endGetTerritoryCaptureBlock(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.
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 | nilDevuelve el estado de seguimiento de presencia de un jugador: en qué territorio está, cuánto tiempo lleva allí, etc.
IsPlayerInTerritory(source, territoryId) → booleanDevuelve true si, según el sistema de presencia del servidor, un jugador está actualmente dentro del territorio indicado.
local inside = exports['origen_ilegalv2']:IsPlayerInTerritory(source, 'davis')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).
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.
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.
local info = exports['origen_ilegalv2']:GetPlayerSalesInfo(source)
print(info.remainingSales, 'sales left this hour')GetGangVehicles(gangId) → table[]Devuelve todas las filas de vehículos de origen_gang_vehicles de una banda.
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.
AddOrganizationTask(taskDef) → booleanRegistra una tarea en el catálogo global. Si task_key ya existe, se actualiza la fila.
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 }local result = exports['origen_ilegalv2']:CompleteGangTask('vagos', 'deliver_supplies', {
completed_by = identifier,
})IsGangTaskCompleted(gangId, taskKey) → booleanlocal 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.
AddOrganizationUpgrade(upgradeDef) → booleanexports['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) → booleanIsGangFeatureUnlocked(gangId, featureKey) → booleanComprueba si alguna mejora desbloqueada de una banda tiene effect.feature == featureKey.
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.
GetRobberyRequestConfig() → table | nilDevuelve 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.
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.
local res = exports['origen_ilegalv2']:GetRobberyRequestStatus(source, 'paleto_bank')
if res.ok and res.status == 'approved' then
-- allow the robbery to start
endPará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) → booleanAtajo 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.
if exports['origen_ilegalv2']:HasApprovedRobberyRequest(source, 'paleto_bank') then
-- start the robbery flow
endDevuelve false si el source no es válido, el jugador no tiene banda o la solicitud está en cualquier estado distinto de approved.
GetPlayerGang() → table | nilDevuelve 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.
local gang = exports['origen_ilegalv2']:GetPlayerGang()
if gang then
print(gang.id, gang.label)
endOpenGangMenu()Abre la NUI del panel de banda para el jugador local.
exports['origen_ilegalv2']:OpenGangMenu()OpenGangCreation()Abre el asistente de creación de bandas para el jugador local.
exports['origen_ilegalv2']:OpenGangCreation()GetInsideLab() → { lab_id, lab_type, lab_name } | nilDevuelve 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.
local lab = exports['origen_ilegalv2']:GetInsideLab()
if lab and lab.lab_type == 'meth' then ... endIsGangLabOpen() → booleanDevuelve true si el panel NUI del portátil del laboratorio está abierto.
if exports['origen_ilegalv2']:IsGangLabOpen() then
-- don't open another menu on top
endCloseGangLab()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).
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.
GetTerritories() → table<territoryId, territory>Devuelve el mapa completo de territorios cargado actualmente en el cliente.
local territories = exports['origen_ilegalv2']:GetTerritories()GetTerritoryById(territoryId) → table | nilDevuelve un solo territorio por ID desde la caché del cliente.
local t = exports['origen_ilegalv2']:GetTerritoryById('davis')IsPlayerInTerritory(territoryId) → booleanDevuelve true si la posición actual del jugador local está dentro de la zona del territorio indicado.
local inside = exports['origen_ilegalv2']:IsPlayerInTerritory('davis')GetPlayerPresenceData() → tableDevuelve el estado de seguimiento de presencia del cliente: { isInTerritory, currentTerritory, timeInZone, ... }.
local presence = exports['origen_ilegalv2']:GetPlayerPresenceData()
if presence.isInTerritory then
print('In territory:', presence.currentTerritory)
endGetCurrentTerritory() → table | nilDevuelve el objeto del territorio en el que está actualmente el jugador local, o nil si está fuera de todas las zonas.
local territory = exports['origen_ilegalv2']:GetCurrentTerritory()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.
exports['origen_ilegalv2']:SellDrugToNearestPed('packaged_weed')IsCraftingMenuOpen() → booleanDevuelve true si el panel NUI de crafteo está abierto.
CloseCraftingMenu()Cierra el panel NUI de crafteo y limpia el estado de vigilancia del servidor.
IsStoreMenuOpen() → booleanDevuelve true si la NUI de la tienda de la banda está abierta.
CloseStoreMenu()Cierra la NUI de la tienda de la banda.
IsSellMenuOpen() → booleanDevuelve 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.
IsHandcuffed() → booleanDevuelve true si el jugador local está esposado actualmente por la acción de esposar del menú rápido de la banda.
if exports['origen_ilegalv2']:IsHandcuffed() then
-- prevent certain actions
endRemoveHandCuff()Quita a la fuerza las esposas al jugador local (desacopla el prop, limpia las tareas y vuelve a permitir disparar).
exports['origen_ilegalv2']:RemoveHandCuff()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).
exports['origen_ilegalv2']:openManagement()IsOpenedFromHub() → booleanDevuelve si el panel de administración se abrió por última vez mediante openManagement().
ResetHubFlag()Borra el flag openedFromHub.