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.
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
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
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:
| Caso | Texto (en inglés) |
|---|---|
| Sin permiso | You 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ínea | No player is online with id <value>. |
| Después de cualquier error de argumento | Usage: /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.
Entrada del cliente
Responde a los clientes de forma segura: onClientCallback, onClientEvent, guardas, triggerClientCallback, barras de progreso y minijuegos comprobados por el servidor, PendingActions.
Jugadores y personajes
online, onCharacter, notify, jugadores cercanos, posiciones y almacenes por jugador: PlayerMap, Cooldowns, KeyedCooldowns, SourceLock, RateLimit, KeyWatchers.