O jogador local
O ped, o veículo, o assento e a arma em cache, o objeto player (posição, teleporte, animações), fades de tela, os peds de outros jogadores e o jogador mais próximo.
Tudo sobre o jogador sentado neste computador. Leia valores de cache em vez de chamar PlayerPedId() em loops: o ai-core mantém um único observador para todos os recursos e envia as mudanças, então nenhum script fica consultando por elas.
cache
Os valores mais lidos do jogador local, mantidos atualizados pelo único observador do ai-core. Como o cache do ox_lib: leia cache.ped em vez de chamar PlayerPedId(), e cache.vehicle em vez de GetVehiclePedIsIn a cada frame. Ler uma chave é uma simples leitura em memória, segura em loops e em código por frame.
Lado: Cliente · Espera: não
const cache: PlayerCache // somente leituralocal ped = aiLib.cache.pedChaves
Prop
Type
O tipo é PlayerCache.
Exemplo
import { cache, every } from "@aicore-fivem/lib/client";
// Velocidade mostrada enquanto dirige, lida do cache a cada 200 ms.
every(200, () => {
if (cache.vehicle === false || cache.seat !== -1) return;
const kmh = GetEntitySpeed(cache.vehicle) * 3.6;
SendNUIMessage({ action: "speed", data: Math.round(kmh) });
});cache.ped fica até 100 ms atrás de uma troca de modelo. Logo depois de trocar o modelo (SetPlayerModel), chame PlayerPedId() uma vez. As ações de player abaixo já leem o ped atualizado.
onCache
Roda um handler sempre que um valor em cache muda: o jogador entrou ou saiu de um veículo, trocou de assento, sacou ou guardou uma arma, ou recebeu um novo ped. Use em vez de verificar o valor em um timer.
Lado: Cliente · Espera: não
onCache<K extends keyof PlayerCache>(key: K, handler: (value: PlayerCache[K], old: PlayerCache[K]) => void): voidaiLib.cache.onChange(key, function(value, old) end)Parâmetros
Prop
Type
Retorno
void. Não há como remover o handler; mantenha um por funcionalidade no topo do arquivo.
Exemplo
import { onCache, inventory, Points } from "@aicore-fivem/lib/client";
const points = new Points();
// Os pontos cujo canShow lê cache.vehicle são verificados de novo.
onCache("vehicle", () => points.refresh());
// O item da arma na mão, lido só quando a arma muda.
onCache("weapon", (weapon) => {
const item = weapon === false ? null : inventory.currentWeapon();
SendNUIMessage({ action: "weapon", data: item });
});readPlayerState
Lê o veículo, o assento e a arma de um ped agora mesmo, sem o cache. O observador do ai-core o usa; você só precisa dele para um ped que não é o local, ou para comparar com o cache à mão.
Lado: Cliente · Espera: não
readPlayerState(ped: number): { vehicle: number | false; seat: number | false; weapon: number | false }Sem equivalente em Lua.
Parâmetros
Prop
Type
Retorno
Um objeto com vehicle (o handle do veículo, false a pé), seat (-1 motorista em diante, false a pé) e weapon (o hash na mão, false quando desarmado).
Exemplo
import { playerPed, readPlayerState } from "@aicore-fivem/lib/client";
const ped = playerPed(12);
if (ped !== 0 && readPlayerState(ped).seat === -1) console.log("player 12 is driving");readWeapon
A arma na mão de um ped agora mesmo, false quando desarmado.
Lado: Cliente · Espera: não
readWeapon(ped: number): number | falseSem equivalente em Lua.
Parâmetros
Prop
Type
Retorno
number | false: o hash da arma, ou false quando o ped segura WEAPON_UNARMED.
Exemplo
import { nearestPlayer, playerPed, readWeapon } from "@aicore-fivem/lib/client";
const id = nearestPlayer(5);
if (id !== null && readWeapon(playerPed(id)) !== false) console.log("the player next to you is armed");player
Um objeto para o ped local: onde ele está, movê-lo, animações. As leituras usam cache.ped; as ações leem o ped atualizado, então também funcionam logo depois de uma troca de modelo.
player.ped
O handle do ped local (o mesmo valor de cache.ped).
Lado: Cliente · Espera: não
player.ped: number // propriedade somente leituraSem equivalente em Lua: use aiLib.cache.ped.
Retorno
number: o handle do ped.
Exemplo
import { player } from "@aicore-fivem/lib/client";
SetPedArmour(player.ped, 100);player.coords
A posição do ped agora.
Lado: Cliente · Espera: não
player.coords(): Vec3local coords = aiLib.player.coords() -- vector3Retorno
Um Vec3 { x, y, z } em TypeScript (z é a raiz do ped, cerca de 1 m acima do chão). Lua retorna um vector3.
Exemplo
import { locationName, player } from "@aicore-fivem/lib/client";
const here = player.coords();
console.log(`${locationName(here).street} at ${here.x.toFixed(1)}, ${here.y.toFixed(1)}`);player.heading
A direção para onde o ped olha, em graus (0-360, 0 = norte).
Lado: Cliente · Espera: não
player.heading(): numberlocal heading = aiLib.player.heading()Retorno
number: o heading em graus.
Exemplo
import { player } from "@aicore-fivem/lib/client";
// Salva o lugar e a direção para um registro do painel.
const spot = { ...player.coords(), heading: player.heading() };player.distanceTo
Distância em linha reta do ped até um ponto, em metros.
Lado: Cliente · Espera: não
player.distanceTo(point: Vec3): numberlocal metres = aiLib.player.distanceTo(point) -- vector3 ou { x, y, z }Parâmetros
Prop
Type
Retorno
number: metros, medidos em 3D.
Exemplo
import { notify, player } from "@aicore-fivem/lib/client";
const counter = { x: 25.7, y: -1347.3, z: 29.5 };
if (player.distanceTo(counter) > 3) notify("Walk to the counter first", "error");player.freeze
Congela o ped no lugar, ou o deixa se mover de novo.
Lado: Cliente · Espera: não
player.freeze(state: boolean): voidaiLib.player.freeze(frozen)Parâmetros
Prop
Type
Retorno
void.
Exemplo
import { player } from "@aicore-fivem/lib/client";
player.freeze(true);
setTimeout(() => player.freeze(false), 5000);player.teleport
Move o jogador e espera até o mundo ao redor do novo lugar carregar, atrás de um fade para preto. Sem z (ou com ground: "find"), ele procura o chão sob x e y: use isso para o waypoint do mapa.
Lado: Cliente · Espera: sim (Promise em TypeScript, pausa a thread em Lua)
player.teleport(to: { x: number; y: number; z?: number }, options?: TeleportOptions): Promise<void>aiLib.player.teleport(to, options) -- chame dentro de uma threadParâmetros
Prop
Type
TeleportOptions
Prop
Type
Retorno
Promise<void> que resolve assim que o jogador está no novo lugar e a colisão ali carregou (ou depois de 5 segundos sem ela). Lua não retorna nada.
Exemplo
import { notify, player, waypoint } from "@aicore-fivem/lib/client";
RegisterCommand(
"tpm",
async () => {
const target = waypoint();
if (!target) return notify("Set a waypoint first", "error");
await player.teleport(target, { keepVehicle: true }); // sem z: cai no chão
},
false,
);A busca de chão em TypeScript coloca o ped congelado em alturas crescentes, espera a colisão em cada uma e pula superfícies dentro de interiores MLO ou IPL, então nunca cai em um telhado ou dentro de um prédio acima da rua. A versão Lua pega o primeiro chão que encontra e espera no máximo 3 segundos pela colisão.
player.playAnim
Toca uma animação no ped. Carrega o dicionário da animação primeiro.
Lado: Cliente · Espera: sim em TypeScript (resolve quando a animação começou); em Lua pausa enquanto o dicionário carrega
player.playAnim(dict: string, clip: string, options?: AnimOptions): Promise<void>aiLib.player.playAnim(dict, clip, options) -- chame dentro de uma threadParâmetros
Prop
Type
AnimOptions
Prop
Type
Retorno
Promise<void> que resolve quando a animação começou. Ela rejeita quando o dicionário não existe ou não carrega em 10 segundos. Lua não retorna nada e não faz nada quando o dicionário não carrega.
Exemplo
import { player } from "@aicore-fivem/lib/client";
export async function handOver(): Promise<void> {
await player.playAnim("mp_common", "givetake1_a", { flag: 48, duration: 1500 });
}player.stopAnim
Para o que quer que o ped esteja fazendo (ClearPedTasks): animações e cenários.
Lado: Cliente · Espera: não
player.stopAnim(): voidaiLib.player.stopAnim()Retorno
void.
Exemplo
import { player } from "@aicore-fivem/lib/client";
export async function readClipboard(): Promise<void> {
await player.playAnim("amb@world_human_clipboard@male@idle_a", "idle_c");
setTimeout(() => player.stopAnim(), 4000);
}player.holdAnim
Mantém uma animação tocando até você pará-la, retomando-a quando uma queda ou um esbarrão a interrompe. Documentado junto com os props em Peds, blips e props.
Fades e outros jogadores
fadeOut
Escurece a tela até o preto e espera até ela ficar totalmente preta. Use para esconder um teleporte, uma troca de modelo ou uma mudança de cena.
Lado: Cliente · Espera: sim (Promise em TypeScript, pausa a thread em Lua)
fadeOut(ms?: number): Promise<void>aiLib.fadeOut(ms) -- chame dentro de uma threadParâmetros
Prop
Type
Retorno
Promise<void> que resolve quando a tela está preta, ou depois de ms + 2 segundos no máximo. Nunca rejeita.
Exemplo
import { fadeIn, fadeOut } from "@aicore-fivem/lib/client";
export async function moveToSquare(): Promise<void> {
await fadeOut();
SetEntityCoords(PlayerPedId(), -269.4, -955.3, 31.2, false, false, false, false);
await fadeIn();
}fadeIn
Clareia a tela de novo e espera até ela ficar limpa. O par de fadeOut.
Lado: Cliente · Espera: sim (Promise em TypeScript, pausa a thread em Lua)
fadeIn(ms?: number): Promise<void>aiLib.fadeIn(ms) -- chame dentro de uma threadParâmetros
Prop
Type
Retorno
Promise<void> que resolve quando a tela está limpa, ou depois de ms + 2 segundos no máximo. Nunca rejeita.
Exemplo
Veja fadeOut: os dois são sempre usados juntos.
playerPed
O ped de um jogador pelo id de servidor. Para o jogador local retorna cache.ped; para outro jogador retorna 0 quando esse jogador não está perto o bastante para ser transmitido a este cliente.
Lado: Cliente · Espera: não
playerPed(serverId: number): numberlocal ped = aiLib.playerPed(serverId)Parâmetros
Prop
Type
Retorno
number: o handle do ped, ou 0 quando o jogador não está no escopo deste cliente.
Exemplo
import { onServerEvent, playerPed } from "@aicore-fivem/lib/client";
// O servidor avisa todos por perto que um jogador foi algemado.
onServerEvent(
"myscript:cuffed",
{ args: ([id]) => (typeof id === "number" ? [id] : null) },
(id) => {
const ped = playerPed(id);
if (ped !== 0) SetEnableHandcuffs(ped, true);
},
);Nunca use GetPlayerPed(-1) ou GetPlayerPed(GetPlayerFromServerId(id)) à mão: um id desconhecido dá -1, e GetPlayerPed(-1) é o ped local, então a ação atinge o jogador errado.
nearestPlayer
O outro jogador mais próximo dentro de uma distância, como id de servidor. Percorre só os jogadores transmitidos a este cliente. Use para escolher o alvo de ações de dar, revistar, algemar ou derrubar, e depois envie esse id ao servidor, que verifica a distância de novo.
Lado: Cliente · Espera: não
nearestPlayer(metres: number, options?: { from?: Vec3; filter?: (serverId: number, ped: number) => boolean }): number | nulllocal serverId = aiLib.nearestPlayer(metres, options) -- integer ou nilParâmetros
Prop
Type
Opções
Prop
Type
Retorno
number | null: o id de servidor do jogador mais próximo que passou em filter, ou null (nil em Lua) quando ninguém está a até metres. O jogador local nunca é retornado.
Exemplo
import { callAction, nearestPlayer, notify } from "@aicore-fivem/lib/client";
RegisterCommand(
"givecash",
async (_src: number, args: string[]) => {
const target = nearestPlayer(3, { filter: (_id, ped) => !IsPedInAnyVehicle(ped, false) });
if (target === null) return notify("Nobody is close enough", "error");
await callAction("myscript:give", [target, Number(args[0])], { fallback: "GIVE_FAILED" });
},
false,
);Falando com o servidor
Pergunte ao servidor e espere a resposta, execute ações no servidor com recusas traduzidas, escute eventos do servidor e responda callbacks do servidor.
Pontos de interação
Points - todo lugar que um jogador usa (balcões, lojas, portas, NPCs, caixas eletrônicos, porta-malas de veículos) como prompt ou opção de target, com peds, blips e pontos construídos a partir de registros do painel.