AI Core
Referencia de la APILib: servidor

Comandos

addCommand: comandos de chat con argumentos procesados, permisos ACE, sugerencias de chat y una fila en el panel de administración de ai-core.

TypeScript
import { addCommand } from "@aicore-fivem/lib/server";

addCommand

Registra un comando de chat (y de consola). Los argumentos se procesan y se comprueban antes de que se ejecute tu handler, el permiso se comprueba con ACE, las sugerencias de chat van solo a los jugadores que pueden usar el comando, y el panel de administración de ai-core lo muestra en su pestaña Commands. Úsalo para cada comando del servidor en lugar de un RegisterCommand a secas.

Lado: Servidor · Espera: no

Firma
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

Lo que ve el jugador con una entrada incorrecta

Antes de que se ejecute el handler, la lib responde con una notificación de ai-core (o una línea de consola para source 0) usando los textos de ai-core:

CasoTexto (en inglés)
Sin permisoYou are not allowed to use this command.
Falta un argumento obligatorio<name> is missing.
number / playerId no es un número<name> must be a number.
playerId no es un jugador en líneaNo player is online with id <value>.
Después de cualquier error de argumentoUsage: /name <required> [optional]

Devuelve

void. Lanza un error en TypeScript cuando name es una lista vacía.

Ejemplo

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 es number | undefined
    if (target === 0) return; // la consola debe indicar un jugador
    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 compruebes permisos a mano dentro del handler: restricted lo hace, y las sugerencias de chat lo siguen. Para una lista de principals, ai-core concede command.<name> a cada uno, lo que necesita add_ace resource.ai-core command.add_ace allow y add_ace resource.ai-core command.remove_ace allow en permission.cfg. Los rangos de trabajo y de banda son principals (ai.job.police), así que las sugerencias se actualizan cuando cambia el trabajo o la banda de un jugador.

En TypeScript, args se tipa a partir de params: args.id es number, o number | undefined cuando es opcional. Una lista de parámetros compartida por varios comandos debe declararse as const, o los nombres y tipos se ensanchan y args los pierde.

En esta página