Befehle
addCommand: Chat-Befehle mit geparsten Argumenten, ACE-Berechtigungen, Chat-Vorschlägen und einer Zeile im Admin-Panel von ai-core.
import { addCommand } from "@aicore-fivem/lib/server";addCommand
Registriert einen Chat-Befehl (und Konsolenbefehl). Argumente werden geparst und geprüft, bevor dein Handler läuft, die Berechtigung wird per ACE geprüft, Chat-Vorschläge gehen nur an Spieler, die den Befehl nutzen dürfen, und das Admin-Panel von ai-core listet ihn im Tab Commands. Nutze es für jeden Server-Befehl statt eines nackten RegisterCommand.
Seite: Server · Wartet: nein
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)Parameter
Prop
Type
CommandOptions
Prop
Type
CommandParam
Prop
Type
Was der Spieler bei falscher Eingabe sieht
Bevor der Handler läuft, antwortet die Lib mit einer ai-core-Benachrichtigung (oder einer Konsolenzeile bei Source 0) mit den Texten von ai-core:
| Fall | Text (Englisch) |
|---|---|
| Keine Berechtigung | You are not allowed to use this command. |
| Ein Pflichtargument fehlt | <name> is missing. |
number / playerId ist keine Zahl | <name> must be a number. |
playerId ist kein Online-Spieler | No player is online with id <value>. |
| Nach jedem Argumentfehler | Usage: /name <required> [optional] |
Rückgabewert
void. Wirft in TypeScript, wenn name eine leere Liste ist.
Beispiel
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 ist number | undefined
if (target === 0) return; // die Konsole muss einen Spieler angeben
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);
},
);Prüfe Berechtigungen nie von Hand im Handler: restricted erledigt das, und die Chat-Vorschläge folgen ihm. Bei einer Liste von Principals gewährt ai-core jedem von ihnen command.<name>, was add_ace resource.ai-core command.add_ace allow und add_ace resource.ai-core command.remove_ace allow in permission.cfg braucht. Job- und Gang-Ränge sind Principals (ai.job.police), sodass sich die Vorschläge aktualisieren, wenn sich der Job oder die Gang eines Spielers ändert.
In TypeScript wird args aus params typisiert: args.id ist number, oder number | undefined, wenn optional. Eine Parameterliste, die mehrere Befehle teilen, muss as const deklariert werden, sonst werden Namen und Typen verbreitert und args verliert sie.
Client-Eingaben
Clients sicher antworten: onClientCallback, onClientEvent, Guards, triggerClientCallback, vom Server geprüfte Fortschrittsbalken und Minispiele, PendingActions.
Spieler und Charaktere
online, onCharacter, notify, Spieler in der Nähe, Positionen und Speicher pro Spieler: PlayerMap, Cooldowns, KeyedCooldowns, SourceLock, RateLimit, KeyWatchers.