AI Core
Référence de l’APIAI Core : exports serveur

Vérifications de connexion

Ajouter des vérifications que chaque joueur qui se connecte doit passer (listes blanches, bannissements), et déclarer que votre script en remplace un autre.

Chaque joueur qui se connecte passe par une seule porte dans ai-core. Les propres vérifications d’ai-core viennent en premier : le joueur a besoin d’un compte FiveM, et aucun script inutile ne doit tourner à côté du script qui le remplace (quand Refuse players while both run (refuser les joueurs tant que les deux tournent) est activé dans le panneau). Viennent ensuite les vérifications que d’autres ressources ajoutent avec AddConnectionCheck, dans l’ordre où elles ont été ajoutées. Le premier refus l’emporte.

AddConnectionCheck

Ajoute une vérification que chaque joueur qui se connecte doit passer. Utilisez-la pour une liste blanche, une liste de bannissements ou un mode maintenance.

Côté : Serveur · Attend : non (la vérification elle-même doit répondre tout de suite) · Lib : aucune

Signature
AddConnectionCheck(
  id: string,
  check: (source: number, identifiers: Record<string, string>) => string | null | undefined,
): void
Lua
exports['ai-core']:AddConnectionCheck('myscript:whitelist', function(source, identifiers) end)

Paramètres

Prop

Type

identifiers contient chaque type d’identifiant avec sa valeur sans le préfixe : identifiers.license vaut abc123..., pas license:abc123.... Les types que le joueur n’a pas sont absents.

Retour

Rien. Sans id texte ou sans fonction, l’appel ne fait rien. La vérification est retirée quand votre ressource s’arrête.

Exemple

import { resourceExport } from "@aicore-fivem/lib/server";
import { Locale } from "common";

const core = resourceExport("ai-core");
const allowed = new Set<string>(); // rempli depuis votre base de données au démarrage

core.AddConnectionCheck("myscript:whitelist", (_source, identifiers) => {
  const fivem = identifiers.fivem;
  return fivem && allowed.has(fivem) ? null : Locale("CONNECT_NOT_WHITELISTED");
});

La vérification s’exécute pendant que le joueur se connecte et doit répondre tout de suite : pas de requête en base, pas d’await, pas de Wait. Gardez en mémoire ce que vous vérifiez (chargez-le au démarrage, mettez-le à jour quand il change). Une vérification qui lève une erreur est enregistrée dans le log et ignorée, si bien qu’elle n’enferme jamais tout le monde dehors.

RegisterReplacement

Déclare qu’un script en rend d’autres inutiles (votre script fait le même travail que les leurs). Tant que les deux sont installés, ai-core avertit dans la console et nomme le dossier à supprimer ; tant que les deux sont démarrés et que Refuse players while both run est activé dans le panneau, personne ne peut se connecter.

Côté : Serveur · Attend : non · Lib : aucune

Signature
RegisterReplacement(remove: string | string[], keep?: string): void
Lua
exports['ai-core']:RegisterReplacement({ 'qb-banking', 'okokBanking' })

Paramètres

Prop

Type

Retour

Rien. La règle est retirée quand la ressource appelante s’arrête. ai-core recherche de nouveau les conflits une seconde après le démarrage ou l’arrêt de n’importe quelle ressource.

Exemple

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

const core = resourceExport("ai-core");

// Notre script bancaire fait ce que font ceux-ci ; faire tourner les deux doublerait les écrans de banque.
core.RegisterReplacement(["qb-banking", "okokBanking"]);

Une ressource que vous ne pouvez pas modifier (un script escrow) peut déclarer la même chose avec une ligne dans son fxmanifest.lua : ai_replaces 'qb-banking'.

GetConflicts

Chaque conflit trouvé maintenant : un script installé à côté d’un script qui le remplace.

Côté : Serveur · Attend : non · Lib : aucune

Signature
GetConflicts(): { keep: string; remove: string; running: boolean; from: string }[]
Lua
local conflicts = exports['ai-core']:GetConflicts() -- liste de tables

Paramètres

Aucun.

Retour

Une liste, une entrée par conflit :

Prop

Type

Une liste vide quand il n’y a aucun conflit.

Exemple

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

const core = resourceExport("ai-core");

addCommand("conflicts", { help: "Lists scripts to remove", restricted: true }, () => {
  for (const c of core.GetConflicts())
    console.log(`${c.keep} replaces ${c.remove}${c.running ? " (both started!)" : ""} [${c.from}]`);
});

Sur cette page