Los tres tipos de aviso#
Cada aviso de Text UI es una insignia de tecla y una línea de texto. Lo que cambia es dónde se dibuja y qué lo crea:
Tipo | Dónde se dibuja | Se crea con |
|---|---|---|
Aviso en pantalla | Fijo en la pantalla, en una de nueve posiciones. Entra deslizándose al mostrarse y sale al ocultarse. |
|
Texto 3D | Flotando sobre una coordenada del mundo: una puerta, un mostrador, una taquilla. |
|
Aviso sobre un jugador | Flotando sobre otro jugador y siguiéndolo mientras se mueve. |
|
Los avisos se apartan solos: se ocultan mientras el menú de pausa está abierto, mientras la pantalla está en fundido y mientras otro script tiene el cursor del ratón —un inventario, un teléfono, un menú— y vuelven cuando se cierra.
Cómo se comporta el texto 3D#
Un aviso 3D tiene dos distancias, medidas desde el jugador hasta el punto:
El jugador está | Lo que ve |
|---|---|
Más allá de | Nada. |
Entre | Un pequeño marcador en el punto, para que sepa que hay algo. |
A menos de | La insignia de la tecla y el texto. La tecla funciona desde aquí. |
Los avisos situados a menos de dos metros entre sí comparten un único marcador a distancia —una puerta con tres opciones muestra un punto, no tres superpuestos— y se separan en sus propias etiquetas cuando el jugador está a su alcance. Un aviso sobre un jugador funciona igual, medido hasta ese jugador.
Varias opciones en un mismo lugar#
Cuando el jugador está al alcance de más de un aviso a la vez, se convierten en una lista:
Tecla | Qué hace |
|---|---|
↑ / ↓ (flechas) | Mueve la selección. Pasa de la última opción a la primera. |
La tecla propia de la opción | Ejecuta la opción seleccionada, y solo esa. |
Las opciones pueden usar teclas distintas — E para llamar, G para forzar la cerradura —, pero solo responde la seleccionada, así que dos avisos nunca se activan con una sola pulsación. Las opciones en pantalla de las áreas de configuración se listan juntas en la parte inferior de la pantalla; las opciones 3D se quedan en su sitio con la seleccionada resaltada. En el estilo Cyberpunk ambas se reúnen en un único diálogo.
Colocar avisos en la configuración#
Los avisos que nunca se mueven —una puerta, un punto de servicio, un mostrador de trabajo— se pueden colocar en shared/config.lua sin escribir otro script. Cada entrada de Config.Areas es una tabla data más la función que se ejecuta al pulsar su tecla:
Config = {
-- ...
Areas = {
{
data = {
type = '3dtext',
coords = vector3(441.8, -982.1, 30.7),
displayDist = 8,
interactDist = 2,
keyNum = 38, -- control id of the key (38 = E)
key = 'E', -- label on the badge
text = 'Go on duty',
job = 'police' -- 'all' for everybody
},
onKeyClick = function()
TriggerServerEvent('my-police:server:toggleDuty')
end
},
{
data = {
type = 'textui',
coords = vector3(452.3, -980.0, 30.7),
dist = 3,
keyNum = 38,
key = 'E',
text = 'Open the armoury',
job = 'police',
canInteract = function()
return not IsPedInAnyVehicle(PlayerPedId(), false)
end
},
onKeyClick = function()
TriggerEvent('my-police:client:openArmoury')
end
}
}
}Campo | Usado por | Significado |
|---|---|---|
| ambos |
|
| ambos | Un |
| 3dtext | Distancia a la que aparece el marcador. |
| 3dtext | Distancia a la que se muestra el texto y funciona la tecla. |
| textui | Distancia a la que se muestra el aviso en pantalla y funciona la tecla. |
| ambos | ID de control de la tecla que ejecuta |
| ambos | La etiqueta de la insignia. Ponla siempre, incluso en un aviso sin tecla. |
| ambos | El texto. Se permiten códigos de GTA y HTML. |
| ambos |
|
| ambos | Función opcional. Devuelve |
onKeyClick se ejecuta en el propio cliente del jugador: llama a tus exports, dispara tus eventos o abre un menú desde ahí. canInteract se comprueba en cada fotograma mientras el jugador está cerca del aviso, así que mantenlo ligero: lee un state bag o una variable local en lugar de preguntar al servidor.
Números de tecla#
keyNum es el ID de control del juego, y key es solo la etiqueta que se muestra: mantenlos coherentes. Los más usados:
Tecla | E | F | G | H | Q | R | X | Y |
|---|---|---|---|---|---|---|---|---|
| 38 | 23 | 47 | 74 | 44 | 45 | 73 | 246 |
Posición en pantalla#
El aviso en pantalla puede situarse en nueve lugares. Config.DefaultAlign se usa cuando un script no indica ninguna, y cualquier script puede elegir otra en cada llamada: el tercer valor de displayTextUI.
| Izquierda | Centro | Derecha |
|---|---|---|---|
Arriba |
|
|
|
Medio |
|
|
|
Abajo |
|
|
|
Un valor que no está en esta lista vuelve al predeterminado en lugar de fallar. Una lista de opciones en pantalla siempre se sitúa abajo en el centro.
Colores#
El aspecto predeterminado es una insignia azul con una luz que recorre su borde. Config.Colors lo cambia para todos los avisos: en pantalla, en 3D y el marcador de distancia. Cada valor es CSS normal, así que los degradados y rgba funcionan:
Config.Colors = {
-- fill of the key badge, the text box and the marker
insideBackground = [[
radial-gradient(
50% 50% at 50% 50%,
#006299 0%,
#00a3ff 100%
)
]],
insideBoxShadow = '0px 0px 12px 0px rgba(0, 163, 255, 0.7)', -- the glow
insideBorder = '4px solid #0190e1', -- the border
backgroundAnimateColor = 'rgba(0, 163, 255, 1)' -- the light running around it
}Para un tema rojo, por ejemplo, cambia los azules por #7a0010, #ff2e4d y rgba(255, 46, 77, 0.7), y luego reinicia qs-textui.
El estilo Cyberpunk#
Activa Config.CyberpunkTextUI.enabled y todos los avisos se dibujan como un diálogo de Cyberpunk 2077: una placa con el interlocutor arriba, y cada opción en su propia línea con una barra y su tecla al lado.
Config.CyberpunkTextUI = {
enabled = true,
speaker = 'INTERACT',
showKey = true,
align = 'center-left'
}Campo | Predeterminado | Significado |
|---|---|---|
|
| Cambia todos los avisos al estilo Cyberpunk. |
|
| El nombre de la placa sobre las opciones. |
|
| Muestra la tecla como insignia a la izquierda de cada opción. |
|
| Dónde se sitúa el diálogo en pantalla cuando un script no elige: cualquiera de las nueve posiciones anteriores. |
En este estilo, los avisos 3D al alcance se reúnen en un único diálogo sobre el lugar en vez de una caja cada uno, y las opciones en pantalla forman el mismo diálogo en align. Los marcadores vistos a distancia mantienen un pequeño estilo propio. Tiene su propia paleta, así que Config.Colors no se le aplica.
Formato de texto#
El texto de cualquier aviso puede llevar los códigos de formato de GTA que los scripts ya usan con el texto propio del juego. Se convierten en colores, algo aclarados para que sigan siendo legibles sobre la insignia:
Código | Efecto | Código | Efecto |
|---|---|---|---|
| Rojo |
| Gris |
| Verde |
| Gris oscuro |
| Azul |
| Negro |
| Amarillo |
| Blanco |
| Naranja |
| Negrita sí / no |
| Morado |
| Cursiva sí / no |
| Rosa |
| Nueva línea |
|
|
| Volver a normal |
exports['qs-textui']:displayTextUI('Buy for ~g~$500~s~ · ~h~VIP~h~ only', 'E')Cualquier otro código — ~INPUT_CONTEXT~, ~a~ — se elimina en vez de mostrarse. El texto también se interpreta como HTML, así que <b>, <i> o un <span style="..."> también funcionan.
Como el texto es HTML, no pongas en un aviso texto escrito por otros jugadores —un nombre de personaje, un mensaje del chat— sin escapar antes
<y>.



