AI Core
Referência da APILib: servidor

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.

TypeScript
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

Signature
addCommand<P extends readonly CommandParam[]>(
  name: string | string[],
  options: CommandOptions<P>,
  handler: (source: number, args: CommandArgs<P>, raw: string) => unknown,
): void
Lua
aiLib.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:

CasoTexto (inglês)
Sem permissãoYou 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 onlineNo player is online with id <value>.
Depois de qualquer erro de argumentoUsage: /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.

Nesta página