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
AddConnectionCheck(
id: string,
check: (source: number, identifiers: Record<string, string>) => string | null | undefined,
): voidexports['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
RegisterReplacement(remove: string | string[], keep?: string): voidexports['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
GetConflicts(): { keep: string; remove: string; running: boolean; from: string }[]local conflicts = exports['ai-core']:GetConflicts() -- liste de tablesParamè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}]`);
});Logs
Envoyer les logs de votre ressource via ai-core vers Discord, Fivemanage, FiveM Stats et la console, et décrire vos canaux de log.
Panneau d’administration et commandes
Les exports derrière le panneau d’administration d’ai-core - enregistrement dans le panneau, changements du panneau, l’onglet Commands, listes de recherche et écrans de réglages des autres scripts sur le tableau de bord.