Telas e controles
NuiScreen, hud, keyHints e controls - sua própria NUI de tela cheia, esconder todos os HUDs, linhas de ajuda de teclas e controles desativados.
Helpers para scripts com a própria página NUI ou modo de ferramenta: abrir uma página de tela cheia com foco e HUDs escondidos, listar as teclas de uma ferramenta no HUD e bloquear controles sem escrever um loop por frame.
NuiScreen
new NuiScreen
A página NUI de tela cheia do seu recurso em um objeto. open pega o foco, esconde todos os HUDs (por hud) e envia a mensagem de abertura; close devolve o foco, mostra os HUDs, envia { action: "close" } para a página e roda o seu onClose. O callback NUI close da própria página também a fecha. Crie uma por recurso, no topo do arquivo.
Lado: Cliente · Espera: não
new NuiScreen<M extends NuiPageMessage = NuiPageMessage>(name: string, options?: NuiScreenOptions)Sem equivalente em Lua: recursos Lua chamam SetNuiFocus, aiLib.hud.hide / show e RegisterNUICallback('close', ...) eles mesmos.
Parâmetros
Prop
Type
NuiScreenOptions
Prop
Type
NuiPageMessage
O que open e send recebem: { action: string; data?: unknown }. Passe o seu próprio tipo união como M para tipar todas as mensagens.
Membros
Prop
Type
Exemplo
import { callAction, NuiScreen, ScriptCamera } from "@aicore-fivem/lib/client";
import { readText } from "@aicore-fivem/lib/shared";
type Message =
| { action: "open"; data: { items: string[] } }
| { action: "result"; data: boolean };
const camera = new ScriptCamera();
const screen = new NuiScreen<Message>("shop", {
onClose: () => camera.stop(500),
});
export function openShop(items: string[]): void {
camera.start({ x: 26.5, y: -1345.0, z: 30.2 }, { pointAt: { x: 25.7, y: -1347.3, z: 29.5 } }, 500);
screen.open({ action: "open", data: { items } });
}
// A página chama fetch(`https://${GetParentResourceName()}/buy`, { body: JSON.stringify("water") }).
screen.on(
"buy",
(data) => readText(data, 32),
async (item) => {
const reply = await callAction("myshop:buy", [item], { fallback: "BUY_FAILED" });
return { ok: reply !== null };
},
);Use NuiScreen para páginas de tela cheia. Overlays que mantêm o HUD na tela (uma caixa de chat, uma roda radial, um olho de target) mantêm o próprio código de foco.
hud
HUDs (ai-hud e os outros scripts de HUD que o ai-core suporta) pelo ai-core. Uma UI de tela cheia os esconde ao abrir e os mostra ao fechar. Os motivos são contados por recurso, então duas telas abertas ao mesmo tempo mantêm os HUDs escondidos até as duas fecharem. Enquanto qualquer motivo vale, o ai-core esconde todos os HUDs e o minimapa.
hud.hide
Esconde todos os HUDs por um motivo, até hud.show com o mesmo motivo.
Lado: Cliente · Espera: não
hud.hide(reason: string): voidaiLib.hud.hide(reason)Parâmetros
Prop
Type
Retorno
void.
Exemplo
import { hud } from "@aicore-fivem/lib/client";
RegisterCommand(
"cinema",
() => {
if (hud.visible) hud.hide("cinema");
else hud.show("cinema");
},
false,
);hud.show
Remove um motivo de esconder. Os HUDs voltam quando não sobra motivo de nenhum recurso.
Lado: Cliente · Espera: não
hud.show(reason: string): voidaiLib.hud.show(reason)Parâmetros
Prop
Type
Retorno
void. Veja o exemplo de hud.hide.
hud.visible
Se os HUDs aparecem agora (nenhuma UI de tela cheia aberta).
Lado: Cliente · Espera: não
hud.visible: boolean // propriedade somente leituralocal visible = aiLib.hud.visible() -- uma função em LuaRetorno
boolean: true quando nenhum motivo de esconder de nenhum recurso vale.
hud.onChange
Roda um handler sempre que os HUDs aparecem ou se escondem. Um script de HUD usa isto para se esconder.
Lado: Cliente · Espera: não
hud.onChange(fn: (visible: boolean) => void): voidSem equivalente em Lua: escute o evento local ai-core:client:hudVisible (visible).
Parâmetros
Prop
Type
Retorno
void.
Exemplo
import { hud } from "@aicore-fivem/lib/client";
hud.onChange((visible) => SendNUIMessage({ action: "visible", data: visible }));keyHints
Linhas de ajuda de teclas que um script mostra por um tempo (as teclas do noclip de um admin, os controles de um minigame), listadas pelo HUD à esquerda ao lado das que os keybinds declaram com hint. As ajudas de um recurso parado somem sozinhas.
keyHints.show
Mostra uma ajuda de tecla, ou altera a que tem o mesmo id.
Lado: Cliente · Espera: não
keyHints.show(id: string, hint: KeyHintRequest): voidaiLib.keyHints.show(id, hint)Parâmetros
Prop
Type
KeyHintRequest
Prop
Type
O tipo é KeyHintRequest.
Retorno
void.
Exemplo
import { createLocale, keyHints } from "@aicore-fivem/lib/client";
const Locale = createLocale<typeof import("../../locales/en.json")>();
export function startPlacing(): void {
keyHints.show("rotate", { label: Locale("ROTATE"), key: "Q / E", icon: "rotate" });
keyHints.show("place", { label: Locale("PLACE"), keybind: "myscript_place", icon: "check" });
}
export function stopPlacing(): void {
keyHints.hide("rotate");
keyHints.hide("place");
}keyHints.hide
Remove uma das suas ajudas de teclas. Um id desconhecido não faz nada.
Lado: Cliente · Espera: não
keyHints.hide(id: string): voidaiLib.keyHints.hide(id)Parâmetros
Prop
Type
Retorno
void. Veja o exemplo de keyHints.show.
controls
Controles desativados do seu recurso, com um único job por frame para todos eles. Cada motivo (cuffed, menu, placing) adiciona os seus controles e os remove quando termina; o job só roda enquanto algum motivo está ativo. Nunca escreva o seu próprio setTick com DisableControlAction.
controls.disable
Desativa uma lista de controles a cada frame até controls.enable(reason). Chamá-la de novo com o mesmo motivo substitui a lista desse motivo.
Lado: Cliente · Espera: não
controls.disable(reason: string, controls: readonly number[], group?: number): voidaiLib.controls.disable(reason, controls, group)Parâmetros
Prop
Type
Retorno
void.
Exemplo
import { controls, onServerEvent } from "@aicore-fivem/lib/client";
const CUFFED = [21, 22, 23, 24, 25, 37, 44, 140, 141, 142, 143, 257, 263, 264];
onServerEvent(
"mypolice:cuffed",
{ args: ([on]) => (typeof on === "boolean" ? [on] : null) },
(on) => (on ? controls.disable("cuffed", CUFFED) : controls.enable("cuffed")),
);controls.disableAll
Desativa todos os controles (grupos de entrada 0, 1 e 2) a cada frame até controls.enable(reason), exceto os que você mantém. Use para um noclip ou uma câmera livre, e leia as teclas desativadas com IsDisabledControlPressed.
Lado: Cliente · Espera: não
controls.disableAll(reason: string, except?: readonly number[]): voidaiLib.controls.disableAll(reason, except)Parâmetros
Prop
Type
Retorno
void.
Exemplo
import { controls, every } from "@aicore-fivem/lib/client";
const fly = every(0, () => {
if (IsDisabledControlPressed(0, 32)) console.log("forward");
}, { active: false, name: "noclip" });
export function noclip(on: boolean): void {
if (on) controls.disableAll("noclip", [1, 2, 249]);
else controls.enable("noclip");
fly.set(on);
}controls.enable
Encerra um motivo: os controles dele voltam a funcionar, a menos que outro motivo ainda os desative. Um motivo desconhecido não faz nada.
Lado: Cliente · Espera: não
controls.enable(reason: string): voidaiLib.controls.enable(reason)Parâmetros
Prop
Type
Retorno
void. Veja os exemplos acima.
controls.isDisabled
Se um motivo do seu recurso está ativo agora.
Lado: Cliente · Espera: não
controls.isDisabled(reason: string): booleanSem equivalente em Lua.
Parâmetros
Prop
Type
Retorno
boolean: true enquanto esse motivo vale.
Exemplo
import { controls } from "@aicore-fivem/lib/client";
if (controls.isDisabled("cuffed")) console.log("the player is cuffed");UI compartilhada
notify, progress, menu, input, prompts, skillCheck, lockpick e itemPicker - a UI do jogador que o ai-lib desenha para todo recurso.
Teclas de atalho
Keybind - uma tecla que o jogador pode reconfigurar nas opções do GTA, cuja tecla padrão o dono do servidor pode mudar no painel de administração do ai-core.