Skip to content

Configuración

Todas las opciones de Cuxial Interactions explicadas: config, conjuntos de NPC y cómo escribir tu propio NPC.

El comportamiento está en shared/config.lua. Los NPC están en data/, un archivo por conjunto. Reinicia el recurso después de cualquier cambio.

General ​

OpciónTipoPor defectoQué hace
debugbooleanfalseEscribe trazas en la consola: puntos registrados, tiendas registradas, ventas. También se activa poniendo la convar cuxial_interactions_debug a 1.
ui.accentstring (hex)configurableColor de acento del diálogo y de la tienda.
interactionstring'target'Cómo inicia el jugador una conversación, en los puntos que no indican el suyo. 'target' = opción de tu recurso de target. 'sprite' = aviso de tecla sobre el NPC; necesita bl_sprites arrancado, si no se usa el target. 'none' = sin opción; el punto solo se abre con el export Interact.

Target · target ​

OpciónTipoPor defectoQué hace
iconstring'fas fa-comment-dots'Clase Font Awesome de la opción de target, en los puntos sin targetIcon.
distancenumber2.5Metros desde los que se puede usar la opción, en los puntos sin activeDistance.

Aviso de tecla · sprite ​

Solo se usa con interaction = 'sprite'.

OpciónTipoPor defectoQué hace
keystring'E'Letra que se dibuja en el aviso.
controlnumber38Control de GTA que abre la conversación. 38 es E. Cámbialo junto con key.
shapestring'hex'Forma del aviso, se pasa a bl_sprites.
distancenumber2.5Metros desde los que reacciona el aviso, en los puntos sin activeDistance.

Los puntos sin ped usan siempre el target, también en modo sprite.

NPC · npc ​

OpciónTipoPor defectoQué hace
spawnDistancenumber60.0Metros a los que se crea y se quita el ped, en los puntos sin spawnDistance propio.
zOffsetnumber-1.0Se suma a la Z de coords al crear el ped. Con -1.0 puedes pegar las coordenadas tomadas de pie en el sitio.
modelTimeoutnumber5000Milisegundos de espera a que cargue el modelo del ped.
animTimeoutnumber2000Milisegundos de espera a que cargue un diccionario de animación.
fallbackModelstring'a_m_y_business_01'Modelo que se usa cuando un punto no tiene modelo o el suyo no existe.
watchIntervalnumber1000Milisegundos entre comprobaciones de los puntos colgados de un ped creado por otro recurso (entity / netId).

Cámara · camera ​

OpciónTipoPor defectoQué hace
enabledbooleantruetrue lleva la cámara delante del NPC mientras se habla. false mantiene la cámara del jugador. Un punto puede desactivarla para sí mismo con camera = false.
forwardnumber1.2Metros por delante del NPC donde se coloca la cámara.
heightnumber0.52Metros por encima de la posición del NPC.
yawOffsetnumber181.0Grados que se suman a la rotación del NPC para que la cámara lo mire.
transitionnumber2000Milisegundos de la transición de cámara, al entrar y al salir.
settlenumber1500Milisegundos que espera la ventana antes de aparecer, para que la cámara llegue primero.

La cámara solo se activa cuando el punto tiene ped. Los puntos sin ped abren la ventana al momento.

Diálogo · dialog ​

OpciónTipoPor defectoQué hace
hidePlayerbooleantruetrue vuelve invisible al ped del jugador mientras la ventana está abierta, para que no tape la cámara. false lo deja visible.
hideDelaynumber2000Milisegundos desde que se abre hasta que se oculta al jugador.
textSpeednumber25Milisegundos por carácter del efecto de escritura, en las páginas sin textSpeed propio.
conditionIntervalnumber500Milisegundos durante los que se reutiliza el resultado de las condiciones de un punto (job, item, canInteract) antes de volver a comprobarlas.

Tienda · shop ​

OpciónTipoPor defectoQué hace
accountstring'cash'Cuenta en la que se paga la venta, en las tiendas sin cuenta propia: 'cash', 'bank' o 'black_money'.
currencystring'$'Símbolo que se muestra junto a los precios y en la notificación de venta.
maxDistancenumber6.0Metros desde la tienda dentro de los que el servidor acepta una venta, en las tiendas sin distance propia.
maxQuantitynumber1000Máximo de unidades en una sola venta.
cooldownnumber300Milisegundos que un jugador debe esperar entre dos ventas.
imagestring'nui://ox_inventory/web/images/%s.webp'Imagen de un objeto sin image propia. %s es el nombre del objeto.

Aspecto de jugadores · skins ​

Lo usan los puntos con usePlayerSkin = true.

OpciónTipoPor defectoQué hace
resourcestring'cuxial_appearance'Recurso que aplica la apariencia al ped. Si no está arrancado, el ped conserva el modelo base.
activeDaysnumber7Solo se usan personajes jugados en los últimos días indicados aquí.
poolnumber8Apariencias que se cargan la primera vez que hace falta una y se conservan hasta reiniciar el recurso. El recurso carga más si los conjuntos de data/ tienen más NPC con usePlayerSkin que este número.
defaultModelstring'mp_m_freemode_01'Modelo que se usa cuando una apariencia guardada no trae modelo.
retrynumber60Segundos hasta que el servidor vuelve a buscar cuando no encontró ninguna apariencia.

Médico NPC de pago · maria ​

Un servicio que reanima al jugador a cambio de dinero cuando hay pocos médicos de servicio. Lo usan los botones del conjunto de ejemplo Doctor, que viene desactivado, a través del callback de servidor cuxial_interactions:server:ReviveNpc, que devuelve true cuando se atendió al jugador.

OpciónTipoPor defectoQué hace
costnumber1200Precio del servicio.
accountstring'bank'Cuenta de la que se cobra.
jobstring'ambulance'Trabajo cuyos miembros de servicio se cuentan.
maxOnDutynumber2Con este número de médicos de servicio, o más, el NPC se niega y manda al jugador a un hospital.
revivetable{ resource = 'cuxial_medical', export = 'RevivePlayer' }Export de servidor al que se llama para reanimar al jugador. Si el recurso no está arrancado, el servicio no cobra. Si el export falla, se devuelve el dinero.
setstring'Doctor'Conjunto de data/ cuyos NPC ofrecen el servicio. Si ese conjunto está desactivado, no se atiende a nadie.
maxDistancenumber8.0Metros desde uno de esos NPC dentro de los que el servidor acepta la petición.

Conjuntos de NPC · sets ​

Cada clave es el nombre de un archivo de data/, sin .lua. true carga el archivo; false, o no poner la clave, lo ignora.

shared/config.lua
lua
sets = {
    Greeter = true,
    Buyer = true,
    Doctor = false,
},

Los conjuntos que vienen con el recurso son ejemplos: cambia sus coordenadas, textos, trabajos y objetos, o desactívalos y escribe los tuyos.

Escribir un NPC ​

Un archivo de datos devuelve una tabla. Cada clave es un NPC; su valor es la definición del punto.

data/MisNpc.lua
lua
return {
    Chatarrero = {
        coords = vec4(25.7, -1347.3, 29.49, 271.0),
        model = 's_m_y_dealer_01',
        scenario = 'WORLD_HUMAN_STAND_IMPATIENT',
        behavior = { invincible = true, noTemporaryEvents = true, freeze = true },
        label = 'Hablar con el comprador',
        activeDistance = 2.5,
        blip = { id = 52, scale = 0.6, colour = 5, name = 'Chatarrero' },

        shop = {
            name = 'Sam',
            job = 'Comprador',
            items = {
                { name = 'scrapmetal', price = 12 },
                { name = 'copper', label = 'Cable de cobre', price = 20 },
            },
        },

        dialog = {
            {
                id = 'inicio',
                name = 'Sam',
                job = 'Comprador',
                text = '¿Traes algo para mí?',
                buttons = {
                    { id = 'vender', label = 'Enseñar lo que llevo', icon = 'hand-coins', shop = true },
                    { id = 'adios', label = 'Hoy no', icon = 'x', close = true },
                },
            },
        },
    },
}

Después activa el conjunto:

shared/config.lua
lua
sets = {
    MisNpc = true,
},

Lo que conviene saber de los archivos de datos:

  • El id de cada punto es <Archivo>_<Clave>. El del ejemplo es MisNpc_Chatarrero.
  • Una tienda escrita en un archivo de datos se registra sola en el servidor, en las coordenadas de su punto. Dentro de shop puedes poner además account y distance solo para esa tienda.
  • Los nombres de los objetos deben existir en ox_inventory. Un objeto sin label toma el nombre del inventario.
  • Una tienda solo compra. El jugador vende objetos al NPC y recibe dinero.
  • El archivo se carga en el cliente y en el servidor. Las funciones como onSelect solo se ejecutan en el cliente; no llames a natives de cliente fuera de una función.
  • Pon enabled = false en un punto, una página o un botón para desactivarlo sin borrarlo.

Todos los campos de un punto, una página, un botón y una tienda están en Exports y eventos.

Cambios habituales ​

Hablar con una tecla en lugar del target ​

shared/config.lua
lua
interaction = 'sprite',

bl_sprites debe estar arrancado. Para cambiar un solo NPC, pon interaction = 'sprite' en su definición.

Quitar la cámara ​

shared/config.lua
lua
camera = {
    enabled = false,
},
dialog = {
    hidePlayer = false,
},

Deja las demás claves de los dos bloques como están.

Pagar las ventas en el banco ​

shared/config.lua
lua
shop = {
    account = 'bank',
},

Limitar un NPC a un trabajo ​

data/MisNpc.lua
lua
Chatarrero = {
    job = { police = 2 },   -- police, grado 2 o superior
    -- ...
},

© Cuxial