Comandos
addCommand: comandos de chat com argumentos interpretados, permissões ACE, sugestões no chat e uma linha no painel de administração do ai-core.
import { addCommand } from "@aicore-fivem/lib/server";addCommand
Registra um comando de chat (e comando de console). Os argumentos são interpretados e verificados antes de o seu handler rodar, a permissão é verificada com ACE, as sugestões no chat vão só para os jogadores que podem usar o comando, e o painel de administração do ai-core o lista na aba Commands. Use para todo comando do servidor em vez de um RegisterCommand puro.
Lado: Servidor · Espera: não
addCommand<P extends readonly CommandParam[]>(
name: string | string[],
options: CommandOptions<P>,
handler: (source: number, args: CommandArgs<P>, raw: string) => unknown,
): voidaiLib.addCommand(name, options, handler) -- handler(source, args, raw)Parâmetros
Prop
Type
CommandOptions
Prop
Type
CommandParam
Prop
Type
O que o jogador vê com uma entrada errada
Antes de o handler rodar, a lib responde com uma notificação do ai-core (ou uma linha no console para source 0) usando os textos do ai-core:
| Caso | Texto (inglês) |
|---|---|
| Sem permissão | You are not allowed to use this command. |
| Falta um argumento obrigatório | <name> is missing. |
number / playerId não é um número | <name> must be a number. |
playerId não é um jogador online | No player is online with id <value>. |
| Depois de qualquer erro de argumento | Usage: /name <required> [optional] |
Retorno
void. Lança um erro em TypeScript quando name é uma lista vazia.
Exemplo
import { addCommand, medical, notify, createLocale } from "@aicore-fivem/lib/server";
const Locale = createLocale();
addCommand(
["heal", "h"],
{
help: Locale("CMD_HEAL"),
params: [{ name: "id", type: "playerId", help: Locale("CMD_P_ID"), optional: true }],
restricted: true,
},
(source, args) => {
const target = args.id ?? source; // args.id é number | undefined
if (target === 0) return; // o console precisa indicar um jogador
if (medical.heal(target) && source > 0) notify(source, Locale("HEALED"), "success");
},
);
addCommand(
"announce",
{
help: "Sends a message to everyone",
params: [{ name: "text", type: "longString" }],
restricted: ["group.admin", "ai.admin"],
},
(_source, { text }) => {
for (const player of getPlayers()) notify(Number(player), text, "info", 8000);
},
);Nunca verifique permissões à mão dentro do handler: restricted faz isso, e as sugestões do chat seguem essa regra. Para uma lista de principals, o ai-core concede command.<name> a cada um deles, o que exige add_ace resource.ai-core command.add_ace allow e add_ace resource.ai-core command.remove_ace allow no permission.cfg. Os cargos de emprego e de gangue são principals (ai.job.police), então as sugestões se atualizam quando o emprego ou a gangue de um jogador muda.
Em TypeScript, args é tipado a partir de params: args.id é number, ou number | undefined quando opcional. Uma lista de parâmetros compartilhada por vários comandos precisa ser declarada as const, senão os nomes e os tipos se alargam e args os perde.
Entrada do cliente
Responda aos clientes com segurança: onClientCallback, onClientEvent, guards, triggerClientCallback, barras de progresso e minigames verificados pelo servidor, PendingActions.
Jogadores e personagens
online, onCharacter, notify, jogadores próximos, posições e stores por jogador: PlayerMap, Cooldowns, KeyedCooldowns, SourceLock, RateLimit, KeyWatchers.