Skip to main content

Technical Reference

Archivos clave

  • fxmanifest.lua
  • shared/config.lua
  • shared/locales.lua
  • shared/config_internal.lua
  • client/main.lua
  • client/modules/validation.lua
  • client/framework/init.lua
  • client/framework/qbox.lua
  • client/framework/qbcore.lua
  • client/framework/esx.lua
  • server/framework/init.lua
  • server/main.lua
  • server/framework/qbox.lua
  • server/framework/qbcore.lua
  • server/framework/esx.lua
  • html/index.html
  • html/app.js
  • html/modules/*.js

Comandos

ComandoConfigFuncion
logoutConfig.Logout.command en el shared/config.lua actualFuerza logout y devuelve al selector si Config.Logout.enabled ~= false
coldaddslot <id>Config.Slots.unlockCommandDesbloquea un slot extra para un jugador

Notas:

  • Si borras Config.Logout y dejas actuar solo el normalizador interno, el fallback del comando pasa a ser coldlogout.
  • coldaddslot exige admin por defecto y comprueba ACE mas permisos de qbox o qbcore.

Exports

Server

  • exports('IsInMultichar', function(source) -> boolean end)
  • exports('ForceMultichar', function(source) -> boolean end)

Client

  • exports('IsInMultichar', function() -> boolean end)
  • exports('OpenMultichar', function() end)

Callbacks internos

  • cold_multichar:server:getSlotAmount
  • cold_multichar:server:shouldAutoOpenSelector
  • cold_multichar:server:getCharacters
  • cold_multichar:server:getPreviewPedData
  • cold_multichar:server:getCharacterLastPosition
  • cold_multichar:server:createCharacter
  • cold_multichar:server:loadCharacter

Estos callbacks no dependen de ox_lib. El recurso usa un bridge propio con eventos cold_multichar:server:callbackRequest y cold_multichar:client:callbackResponse.

NUI callbacks principales

  • previewSlot
  • playSlot
  • createPreviewOpen
  • createPreviewClose
  • createPreviewUpdate
  • createCharacter
  • disconnect
  • saveSettings
  • spawnPreview
  • spawnChoose
  • spawnCancel
  • nuiReady

Eventos

Server

  • cold_multichar:server:setSelectionIsolation
  • cold_multichar:server:disconnectSelf

Client

  • cold_multichar:client:slotAmountUpdated

Framework listeners

  • qbx_core:client:playerLoggedOut
  • QBCore:Client:OnPlayerUnload
  • esx:onPlayerLogout

Estado del jugador y aislamiento

  • Usa LocalPlayer.state.coldMulticharOpen para marcar selector abierto.
  • El servidor reacciona a ese statebag y mueve al jugador a un routing bucket aislado.
  • Por defecto usa buckets unicos desde base 65000 + source.
  • Al cerrar el selector lo devuelve al bucket 0 salvo que cambies el codigo interno.

Persistencia de slots

Tabla:

cold_multichar_slot_extras

Columnas:

  • identifier
  • extra_slots
  • created_at
  • updated_at

Fallback legacy:

  • KVP cold_multichar:slotExtra:<identifier>

Persistencia de ajustes locales

  • KVP cliente: <resource>:ui_settings:v1
  • localStorage: cold_multichar_settings_v1

Validacion de creacion

  • Slots validos entre 1 y configuredSlotAmount.
  • Textos solo con letras, espacios, - y '.
  • Se bloquea la palabra interna badword.
  • Fecha valida entre 1900-01-01 y 2006-12-31.
  • gender: male -> 0, female -> 1.

Detalles tecnicos utiles

  • Los ajustes del NUI se guardan tanto en localStorage como en KVP del recurso.
  • El intro admite un maximo real de 6 entradas.
  • El selector intenta refrescar la lista real de personajes incluso si el primer fetch falla.
  • El preview de apariencia cae a freemode aleatorio si no puede cargar skin o modelo.
  • El selector cinematico usa ubicaciones custom mas ultima posicion y spawn por defecto.

Gaps detectados en el recurso actual

  • No hay flujo de borrado de personaje implementado.
  • No existe soporte real para mas de 3 slots.
  • Las notificaciones del comando de slots dependen de que alguien escuche cold_library:notify.