Consulta organizaciones, miembros y territorio desde tus propios recursos, premia a una organización desde un trabajo o un atraco, y conecta tus propios NPC a los menús de interacción y de rehenes.
En toda la página, orgId es el id numérico de una organización y citizenid es el identificador del personaje que da el bridge.
Exports de servidor
getOrganisation
Devuelve la ficha completa de una organización.
local org = exports.cuxial_gang:getOrganisation(orgId)Devuelve: table | false. Entre sus campos: id, label, color, orgType, lvl, exp, balance, dirtymoney, ranks, upgrades.
local org = exports.cuxial_gang:getOrganisation(3)
if org then print(org.label, org.lvl) endgetOrganisationsList
Lista todas las organizaciones.
local list = exports.cuxial_gang:getOrganisationsList()Devuelve: table[]. Cada entrada es { identifier = orgId, label = string }.
getPlayerOrganisation
Devuelve la organización de un personaje con su entrada de miembro.
local data = exports.cuxial_gang:getPlayerOrganisation(citizenid)Devuelve: table | false.
| Campo | Tipo | Descripción |
|---|---|---|
orgIndex | number | Id de la organización. |
player | table | identifier, rank, status, totalTime. |
orgData | table | La misma ficha que getOrganisation. |
local data = exports.cuxial_gang:getPlayerOrganisation(citizenid)
if data then print(data.orgData.label, data.player.rank) endgetMemberGang
Forma corta de lo anterior.
local gang = exports.cuxial_gang:getMemberGang(citizenid)Devuelve: table | nil. { gangId = string, label = string, rank = string, name = string }.
checkPermissions
Indica si el rango de un personaje tiene un permiso.
local allowed = exports.cuxial_gang:checkPermissions(citizenid, permission)| Parámetro | Tipo | Descripción |
|---|---|---|
citizenid | string | Identificador del personaje. |
permission | string | bossmenu_access, garage_access, storage_access, blackmedic_access, moneylaundry_access o port_access. |
Devuelve: boolean.
getOnlineSource
Devuelve el id de servidor de un miembro que está conectado.
local src = exports.cuxial_gang:getOnlineSource(citizenid)Devuelve: number | nil.
getOrgsIntelList
Lista las organizaciones con su color, nivel y número de miembros, ordenadas por nombre.
local list = exports.cuxial_gang:getOrgsIntelList()Devuelve: table[]. Cada entrada es { gangId = string, label = string, color = string, lvl = number, members = number }.
getOrgIntelData
Devuelve una ficha detallada de una organización.
local card = exports.cuxial_gang:getOrgIntelData(orgId)Devuelve: table | nil.
| Campo | Tipo | Descripción |
|---|---|---|
gangId, label, color, lvl, exp, graffitiUrl | Datos básicos. | |
members | table[] | citizenid, name, rank, rankIndex, isBoss, online, since. |
ranks | table[] | { index, name }, ordenados. |
locations | table | hideout, stash, cloakroom, mulaStash, garage, helipad. Cada uno es { x, y, z, w } o nil si no está colocado. |
territories | table[] | { index, label, owner, points } de los territorios donde tiene lealtad o propiedad. |
getTurfZonesIntel
Lista los territorios con su polígono y su dueño actual.
local zones = exports.cuxial_gang:getTurfZonesIntel()Devuelve: table[]. Cada entrada es { index, label, polygon = { { x, y }, ... }, ownerId, ownerLabel }. ownerId es nil cuando la zona no es de nadie.
Territorio
| Export | Devuelve | Descripción |
|---|---|---|
getTurfOwnership(turfId) | table | nil | { ownerId, ownerLabel, expiresAt } de un territorio. |
isTurfOwner(turfId, orgId) | boolean | Si esa organización es la dueña de la zona. |
isPlayerTurfOwner(src, turfId) | boolean | Si la organización de ese jugador es la dueña de la zona. |
getPlayerTurfZone(src) | any | nil | Índice del territorio en el que está el jugador. |
isTurfZoneInRivalry(turfId) | boolean | Si hay una guerra en curso en la zona. |
local turfId = exports.cuxial_gang:getPlayerTurfZone(source)
if turfId and exports.cuxial_gang:isPlayerTurfOwner(source, turfId) then
-- el jugador está en su propio territorio
endFavelas
| Export | Devuelve | Descripción |
|---|---|---|
getFavelas(orgId?) | table[] | Ficha de todas las favelas, ordenadas por nombre. Con orgId, cada ficha dice si es tuya en isMine. |
getFavelaCard(id, orgId?) | table | nil | Ficha de una favela: id, label, state, ownerId, ownerLabel, ownerColor, expiresAt, progress y más. |
getFavelaOwner(id) | any | nil | Id de la organización dueña. |
Mulas
| Export | Devuelve | Descripción |
|---|---|---|
isPlayerMula(citizenid) | boolean | Si el personaje es una mula en activo. |
getMulaData(citizenid) | table | nil | identificator, name, orgId, trustLevel, status, completedContracts, failedContracts, joinDate. |
getMulaOrg(citizenid) | any | nil | Organización para la que trabaja la mula. |
getOrgMulas(orgId) | table[] | Mulas de una organización. |
getMulaActiveContract(citizenid) | table | nil | El encargo que la mula tiene en curso. |
completeMulaContractStep(citizenid, contractId, stepIndex) | Da por hecho un paso de un encargo desde tu propio recurso. | |
failMulaContract(citizenid, contractId) | boolean | Falla un encargo asignado a esa mula. |
Arsenal
| Export | Devuelve | Descripción |
|---|---|---|
getArsenalLevel(orgId) | number, number | Nivel del arsenal y unidades vendidas por la organización. 0, 0 con el arsenal desactivado. |
getArsenalParts() | table[] | Catálogo de piezas: { item, label, price }. |
Efectos sobre una organización
Pensados para un recurso de policía o de staff. Cambian el estado de la organización.
| Export | Devuelve | Descripción |
|---|---|---|
applyPoliceStrike(orgId, { loyalty = n }) | { turfs, loyalty } | nil | Quita n de lealtad a la organización en todos los territorios donde tenga. |
seizeOrgMoney(orgId, account) | number | Vacía una cuenta y devuelve el importe. account es 'balance' o 'dirtymoney' (por defecto). |
seizeOrgStash(orgId) | table[] | Vacía el alijo principal y devuelve { name, label, count } por ítem. |
Estos tres no se pueden deshacer. Llámalos solo desde código de servidor en el que confíes.
RegisterExtortionVictim
Añade un civil al que se puede extorsionar por teléfono, además de los de data/extortion.lua.
local ok = exports.cuxial_gang:RegisterExtortionVictim(victim)| Campo | Tipo | Descripción |
|---|---|---|
id | string | Id único. Obligatorio. |
name | string | Nombre visible. Obligatorio. |
personality | string | greedy, trusting, suspicious o aggressive. Obligatorio. |
occupation, wealthHint, pedModel, avatar | Opcionales. |
Devuelve: boolean. false cuando la forma no es válida.
exports.cuxial_gang:RegisterExtortionVictim({
id = 'victim_baker',
name = 'Tom Reyes',
occupation = 'Panadero',
personality = 'trusting',
})RegisterExtortionFixer
Añade un intermediario, además de los de data/extortionFixers.lua.
local ok = exports.cuxial_gang:RegisterExtortionFixer(fixer)fixer necesita id, name y personality (sharp, gruff o silky). Los precios y límites que falten toman los valores por defecto del archivo.
Devuelve: boolean.
Eventos de servidor
Estos cinco son solo de servidor. Dispáralos con TriggerEvent desde código de servidor. Una llamada que venga de un cliente se registra y se ignora.
| Evento | Parámetros | Qué hace |
|---|---|---|
cuxial_gang:addOrganisationEXP | orgId, amount | Suma experiencia. La organización sube de nivel cuando tiene suficiente. |
cuxial_gang:addOrganisationMoney | orgId, amount, account | Suma dinero. account es 'balance' o 'dirtymoney'. |
cuxial_gang:removeOrganisationMoney | orgId, amount, account | Quita dinero. No hace nada si no hay suficiente. |
cuxial_gang:addOrgMissionsDone | orgId, amount | Suma al contador de misiones hechas. |
cuxial_gang:addZonesCaptured | orgId, amount | Suma al contador de zonas capturadas. |
-- Premiar a la organización de un jugador después de un atraco
local data = exports.cuxial_gang:getPlayerOrganisation(citizenid)
if data then
TriggerEvent('cuxial_gang:addOrganisationMoney', data.orgIndex, 15000, 'dirtymoney')
TriggerEvent('cuxial_gang:addOrganisationEXP', data.orgIndex, 200)
endEventos que puedes escuchar
Eventos locales de servidor, lanzados con TriggerEvent.
| Evento | Parámetros | Cuándo |
|---|---|---|
cuxial_gang:server:ZoneOwnerChanged | { zoneIndex, oldOwnerId, newOwnerId } | Un territorio cambia de dueño. |
cuxial_gang:server:SaleRecorded | { orgId, turfIndex, units, amount, citizenid, source, counted } | Se registra una venta de droga. counted son las unidades que puntuaron. |
cuxial_gang:server:PlayerLeftGang | src, citizenid | Un jugador sale o es expulsado de una organización. |
cuxial_gang:intel | kind, payload | Una organización hace algo relevante. Solo se lanza mientras cuxial_police está en marcha. |
kind es uno de drug_sale, laundry, graffiti, mula, turf, favela, airdrop, weapon_crafted, supply_robbed, supply_seized, vehicle_seized u officer_kidnap. payload lleva siempre gangId y gangLabel cuando se conocen, normalmente coords, y campos que dependen del tipo.
AddEventHandler('cuxial_gang:server:ZoneOwnerChanged', function(data)
print(('zona %s: %s -> %s'):format(data.zoneIndex, data.oldOwnerId, data.newOwnerId))
end)Exports de cliente
getPlayerOrganisation
Devuelve la organización del jugador local.
local org = exports.cuxial_gang:getPlayerOrganisation()Devuelve: table | false. { id = number, label = string, bossmenuCoords = vector4 }. false cuando el jugador no tiene organización o los datos aún no han cargado.
hasOrgPermission
Indica si el rango del jugador local tiene un permiso. Lee una copia replicada, así que úsalo para pintar interfaz; vuelve a comprobarlo en el servidor antes de actuar.
local allowed = exports.cuxial_gang:hasOrgPermission('storage_access')Devuelve: boolean.
getOrgPermissions
local perms = exports.cuxial_gang:getOrgPermissions()Devuelve: table | nil. Un mapa de nombre de permiso a true.
Otras consultas
| Export | Devuelve | Descripción |
|---|---|---|
isInTurfZone() | any | nil | Índice del territorio en el que está el jugador. |
isPlayerMula() | boolean | Si el jugador local es una mula. Pregunta al servidor. |
getMulaData() | table | nil | Ficha de mula del jugador local. Pregunta al servidor. |
Abrir las interfaces
| Export | Descripción |
|---|---|
OpenTablet() | Abre la tablet. openCrimeTablet() hace lo mismo. |
openHandcuffsMenu() | Abre el menú de interacción sobre el jugador más cercano. |
useSpray() | Empieza a pintar un grafiti. |
useRemover() | Empieza a borrar un grafiti. |
Son los exports a los que apuntar un ítem del inventario.
OpenInteractionMenu
Abre el mismo menú en rueda con tus propias entradas.
exports.cuxial_gang:OpenInteractionMenu(payload, handlers)| Parámetro | Tipo | Descripción |
|---|---|---|
payload.title | string | Título del menú. |
payload.targetName | string | Nombre que se muestra como objetivo. |
payload.targetMeta | string | Texto pequeño bajo el nombre. Opcional. |
payload.icon | string | Clase de Font Awesome, como fa-solid fa-user. Opcional. |
payload.items | table[] | Entradas: value, title, description, icon y tone (warn, success o destructive). Obligatorio. |
handlers | table | Mapa de value a la función que se ejecuta al elegir esa entrada. |
exports.cuxial_gang:OpenInteractionMenu({
title = 'Informante',
targetName = 'Desconocido',
items = {
{ value = 'ask', title = 'Preguntar', description = 'Preguntar por la zona.', icon = 'fa-solid fa-comment' },
},
}, {
ask = function()
print('preguntado')
end,
})exports.cuxial_gang:CloseInteractionMenu() lo cierra.
RegisterHostage
Hace que uno de tus NPC se pueda controlar como rehén: al apuntarle se abre el menú de rehén.
exports.cuxial_gang:RegisterHostage(ped, meta)| Parámetro | Tipo | Descripción |
|---|---|---|
ped | number | Handle de entidad de un ped que existe. |
meta.name | string | Nombre que se muestra en el menú. Opcional. |
meta.contextKindLabel | string | Etiqueta del tipo de rehén. Opcional. |
meta.icon | string | Clase de Font Awesome. Opcional. |
meta.accentColor | string | Color hexadecimal. Opcional. |
meta.onKilled | function | Se llama con ped cuando el rehén muere. Opcional. |
exports.cuxial_gang:RegisterHostage(ped, {
name = 'Empleado del banco',
onKilled = function(entity)
print('rehén abatido', entity)
end,
})UnregisterHostage(ped) lo suelta e IsHostageControlled(ped) devuelve si está registrado.
State bags
Los pone el servidor en cada jugador y se replican a los clientes.
| State bag | Tipo | Descripción |
|---|---|---|
gangName | string | false | Nombre de la organización del jugador. false si no tiene. |
gangId | number | nil | Id de la organización. |
gangRankName | string | nil | Etiqueta del rango. |
orgPermissions | table | nil | Mapa de nombre de permiso a true. |
local orgId = Player(source).state.gangIdEn el framework, cada organización se registra como una banda llamada gang_<orgId>, por ejemplo gang_3.
