Exports serveur d’ai-core
Chaque export serveur d’ai-core - signature et rôle, regroupés par domaine.
Typés comme AiCoreServerExports dans @aicore-fivem/shared (exports.ts). En TypeScript, prenez un handle par fichier ; en Lua, appelez directement exports['ai-core'].
import { resourceExport } from "@aicore-fivem/lib/server";
const core = resourceExport("ai-core");Types utilisés ci-dessous : CharacterInfo, AiPlayerData, JobMembership ({ job, grade }), GangMembership ({ gang, grade }), InventoryRef (l’id serveur d’un joueur ou l’id d’un autre inventaire : nom de coffre, plaque), KeyPurpose (purchase, garage, job, rental, temporary), tous dans @aicore-fivem/shared.
Personnages et joueurs
| Export | Rôle |
|---|---|
GetPlayerData(src: number): AiPlayerData | null | Tout ce qu’ai-core garde pour un joueur chargé : personnage, argent, métiers, service, gangs, métadonnées. |
GetCharacter(src: number): CharacterInfo | null | Le personnage chargé (id, citizenid, noms, date de naissance, sexe, nationalité). |
GetSourceByCharId(charId: number): number | null | Id serveur du joueur qui joue ce personnage. |
GetSourceByCitizenId(citizenid: string): number | null | La même chose par citizen id. |
GetLoadedSources(): number[] | Ids serveur de tous les joueurs avec un personnage chargé. |
GetFivemId(src: number): string | null | L’identifiant FiveM du joueur. |
SwitchCharacter(src: number): boolean | Renvoie le joueur à l’écran des personnages. |
SetOfflinePosition(charId: number, position: { x, y, z, heading? }): boolean | Déplace le point d’apparition d’un personnage enregistré (non chargé) ; false tant qu’il est chargé. |
GetPlayersInScope(source: number): number[] | Joueurs dans la portée OneSync d’un joueur (environ 424 m). |
const character = core.GetCharacter(source);
if (character) console.log(character.firstname, character.lastname);local character = exports['ai-core']:GetCharacter(source)
if character then print(character.firstname, character.lastname) endArgent
Les comptes sont ceux de la liste Comptes du panneau (cash, bank par défaut). reason va dans le registre.
| Export | Rôle |
|---|---|
GetMoney(src: number, account: string): number | null | Le solde d’un joueur. |
AddMoney(src: number, account: string, amount: number, reason?: string): boolean | Ajoute de l’argent. |
RemoveMoney(src: number, account: string, amount: number, reason?: string): boolean | Retire de l’argent ; false quand le compte ne peut pas payer. |
SetMoney(src: number, account: string, amount: number, reason?: string): boolean | Fixe un solde. |
GetSharedMoney(ownerType: "job" | "gang", ownerId: string, account: string): number | null | Le compte partagé d’un métier ou d’un gang. |
AddSharedMoney(ownerType, ownerId, account, amount: number, reason?: string): boolean | Ajoute à un compte partagé. |
RemoveSharedMoney(ownerType, ownerId, account, amount: number, reason?: string): boolean | Retire d’un compte partagé. |
TransferMoney(from: MoneyRef, to: MoneyRef, amount: number, reason?: string, fee?: number): boolean | Déplace de l’argent entre deux comptes en une transaction avec les deux lignes du registre ; from paie aussi fee. |
GetAccountTypes(): Record<string, AccountTypeDefinition> | La liste des comptes (label, start, allowNegative). |
MoneyRef vaut { source, account } pour un joueur chargé ou { owner: "job" \| "gang", id, account } pour un compte partagé.
if (core.RemoveMoney(source, "bank", 500, "fine")) {
core.AddSharedMoney("job", "police", "bank", 500, "fine");
}if exports['ai-core']:RemoveMoney(source, 'bank', 500, 'fine') then
exports['ai-core']:AddSharedMoney('job', 'police', 'bank', 500, 'fine')
endMétiers et gangs
Un personnage peut avoir plusieurs métiers et gangs, avec au plus un métier en service et un gang actif.
| Export | Rôle |
|---|---|
GetJobs(src: number): JobMembership[] | null | Chaque appartenance à un métier. |
GetCurrentJob(src: number): JobMembership | null | Le métier que les autres scripts voient comme « le » métier : en service, sinon le dernier en service, sinon le premier. |
GetDutyJob(src: number): string | null | Le métier pour lequel le joueur est en service. |
SetDuty(src: number, job: string | null): boolean | Met le joueur en service pour un métier, ou hors service (null). |
SetJob(src: number, job: string, grade: number): boolean | Ajoute un métier ou change son grade. |
RemoveJob(src: number, job: string): boolean | Retire une appartenance à un métier. |
GetOnDutyCount(job: string): number | Combien de joueurs sont en service dans un métier. |
IsPrimeTime(job?: string): boolean | Heures de pointe d’un métier (les heures de tgiann-policealert tant qu’il tourne, sinon celles du panneau). |
GetGangs(src: number): GangMembership[] | null | Chaque appartenance à un gang. |
GetActiveGang(src: number): string | null | Le gang actif. |
SetGang(src: number, gang: string, grade: number): boolean | Ajoute un gang ou change son grade. |
RemoveGang(src: number, gang: string): boolean | Retire une appartenance à un gang. |
SetActiveGang(src: number, gang: string | null): boolean | Choisit le gang actif. |
GetJobDefinitions(): Record<string, JobDefinition> | Chaque définition de métier (une copie : pour des lectures rares). |
GetJobDefinition(job: string): JobDefinition | null | Un métier : label, type, defaultDuty, listed?, grades (label, salary, boss). |
GetGangDefinitions(): Record<string, GangDefinition> | Chaque définition de gang. |
GetGangDefinition(gang: string): GangDefinition | null | Un gang : label, grades. |
if (core.GetDutyJob(source) === "police") {
const officers = core.GetOnDutyCount("police");
}if exports['ai-core']:GetDutyJob(source) == 'police' then
local officers = exports['ai-core']:GetOnDutyCount('police')
endMétadonnées et réglages du serveur
| Export | Rôle |
|---|---|
GetMeta(src: number, key: string): unknown | Une valeur des métadonnées du personnage. |
SetMeta(src: number, key: string, value: unknown): boolean | Fixe une valeur de métadonnées. |
GetBranding(): Branding | Le nom, le sous-titre, les slogans et le fond du serveur depuis les réglages généraux du panneau. |
GetUpdates(): UpdateInfo[] | Les scripts qui ont une release GitHub plus récente que la version en cours. |
Objets
La couche d’inventaire d’ai-core : l’inventaire actif répond (false, 0 ou vide tant qu’aucun ne tourne).
| Export | Rôle |
|---|---|
AddItem(inv: InventoryRef, item: string, count?: number, metadata?: ItemMetadata, slot?: number): boolean | Ajoute des objets. |
RemoveItem(inv: InventoryRef, item: string, count?: number, metadata?: ItemMetadata, slot?: number): boolean | Retire des objets. |
GetItemCount(inv: InventoryRef, item: string, metadata?: ItemMetadata): number | Combien d’un objet. |
HasItem(inv: InventoryRef, item: string, count?: number): boolean | Si l’inventaire en contient au moins count. |
CanCarryItem(inv: InventoryRef, item: string, count?: number, metadata?: ItemMetadata): boolean | Si les objets rentrent. |
GetItems(inv: InventoryRef): InventoryStack[] | Chaque pile (name, label, count, slot, metadata). |
ClearInventory(inv: InventoryRef): void | Vide un inventaire. |
RegisterStash(name: string, label: string, slots: number, maxWeight: number, jobs?: string[]): void | Un coffre ; gardé et enregistré à nouveau auprès de chaque inventaire qui devient actif. |
OpenInventory(source: number, inv: InventoryRef): boolean | Ouvre un coffre ou un autre inventaire sur l’écran du joueur. |
RegisterUsableItem(name: string, handler: UsableItemHandler): void | handler(source, item) s’exécute à l’utilisation ; renvoyer false garde l’objet. Survit aux redémarrages de l’inventaire. |
GetItemDefinition(name: string): ItemDefinition | null | Un objet (name, label, weight, unique, close, description, image?). |
GetItemDefinitions(): Record<string, ItemDefinition> | Chaque objet. |
UseItem(source: number, name: string, item?: unknown): unknown | Exécute le handler enregistré (le pont l’appelle). |
IsUsableItem(name: string): boolean | Si un handler est enregistré. |
core.RegisterUsableItem("bandage", (source, item) => {
// heal, then let the inventory take the item
});
if (core.CanCarryItem(source, "water", 2)) core.AddItem(source, "water", 2);exports['ai-core']:RegisterUsableItem('bandage', function(source, item)
-- heal, then let the inventory take the item
end)
if exports['ai-core']:CanCarryItem(source, 'water', 2) then
exports['ai-core']:AddItem(source, 'water', 2)
endClés de véhicule
Un véhicule est un handle d’entité serveur ou une plaque ; purpose vaut temporary par défaut.
| Export | Rôle |
|---|---|
GiveVehicleKeys(source: number, vehicle: number | string, purpose?: KeyPurpose): void | Donne les clés via le système de clés actif. |
RemoveVehicleKeys(source: number, vehicle: number | string): void | Retire les clés. |
HasVehicleKeys(source: number, vehicle: number | string): boolean | Si le joueur a les clés. |
exports['ai-core']:GiveVehicleKeys(source, 'AB12CDE', 'rental')Médical
| Export | Rôle |
|---|---|
GetMedicalSystem(): string | null | Le script de mort vers lequel ai-core transmet. |
RevivePlayer(source: number): boolean | Relève un joueur à terre là où il est ; false s’il n’est pas à terre ou si aucun script de mort ne tourne. |
HealPlayer(source: number): boolean | Santé pleine pour un joueur qui n’est pas à terre. |
IsPlayerDead(source: number): boolean | Si le joueur est à terre. |
Apparence
| Export | Rôle |
|---|---|
GetAppearanceSystem(): string | null | Le script de vêtements dont ai-core lit les apparences. |
GetCharacterAppearance(charId: number, done: (look: CharacterAppearance | null) => void): void | L’apparence enregistrée d’un personnage (chargé ou non) ; done reçoit { model, data } ou null. |
exports['ai-core']:GetCharacterAppearance(charId, function(look)
if look then TriggerClientEvent('myscript:dress', source, look) end
end)Téléphone
Le script de téléphone en place répond (aucun : null ou false).
| Export | Rôle |
|---|---|
GetPhoneNumber(source: number): string | null | Le numéro du joueur. |
GetSourceByPhone(number: string): number | null | Le joueur qui a ce numéro. |
HasPhone(source: number): boolean | Si le joueur a un téléphone. |
SendPhoneMail(to: number | string, mail: PhoneMail): boolean | Un mail (sender, subject, message) à un joueur ou un numéro. |
SendPhoneMessage(from: string, to: number | string, text: string): boolean | Un SMS. |
PhoneNotify(source: number, notification: PhoneNotification): boolean | Une notification de téléphone (title, message, app?). |
Dispatch
| Export | Rôle |
|---|---|
SendDispatchAlert(alert: DispatchAlert): boolean | Montre une alerte aux membres en service de jobs via le système d’alerte actif ; false quand aucun ne tourne. |
DispatchAlert : title, et en option code, message, coords, jobs, source (le suspect), blip (sprite, color?, scale?), duration (secondes), icon, priority (normal ou high). Les textes sont déjà traduits.
core.SendDispatchAlert({
code: "10-90",
title: "Store robbery",
jobs: ["police"],
source,
priority: "high",
});exports['ai-core']:SendDispatchAlert({
code = '10-90', title = 'Store robbery', jobs = { 'police' }, source = source, priority = 'high',
})Prison
| Export | Rôle |
|---|---|
JailPlayer(source: number, minutes: number, by?: number): boolean | Emprisonne un joueur via le script de prison en place. |
ReleasePlayer(source: number): boolean | Libère un joueur. |
GetJailTime(source: number): number | Minutes restantes. |
Heure et météo
Le contrat qb-weathersync du script météo en place (null ou false tant qu’aucun ne tourne).
| Export | Rôle |
|---|---|
GetWeather(): string | null | Le type de météo actuel. |
SetWeather(type: string): boolean | Fixe la météo (EXTRASUNNY, RAIN...). |
GetTime(): { hour, minute } | null | L’heure du jeu. |
SetTime(hour: number, minute?: number): boolean | Fixe l’heure du jeu. |
SetBlackout(on: boolean): boolean | Panne de courant activée ou non. |
FreezeTime(on: boolean): boolean | Gèle ou relance l’horloge. |
Routing buckets
| Export | Rôle |
|---|---|
AcquireBucket(tag: string): number | Un routing bucket libre pour la ressource appelante (sans population, verrouillage strict) ; libéré quand elle s’arrête. |
ReleaseBucket(id: number): boolean | Rend un bucket (seule la ressource qui l’a pris le peut) ; sortez d’abord ses joueurs. |
Logs
| Export | Rôle |
|---|---|
Log(channel: string, message: string, options?: LogOptions): void | Envoie un log de la ressource appelante à chaque fournisseur activé (Discord, Fivemanage, FiveM Stats, console). options : level, source, target, metadata. |
LogChannels(channels: Record<string, LogChannel>): void | Décrit les canaux de la ressource appelante (dataset, active) ; à appeler une fois au démarrage. |
exports['ai-core']:Log('sales', 'Sold a car', { source = source, metadata = { price = 25000 } })Connexion
| Export | Rôle |
|---|---|
AddConnectionCheck(id: string, check: (source, identifiers) => string | null | undefined): void | Une vérification que passe chaque joueur qui se connecte : renvoyez un texte de refus, ou null pour le laisser entrer. |
RegisterReplacement(remove: string | string[], keep?: string): void | Déclare que keep (par défaut l’appelant) rend remove inutile : un avertissement en console, connexions refusées tant que les deux tournent. |
GetConflicts(): { keep, remove, running, from }[] | Les scripts installés à côté de celui qui les remplace. |
Panneau d’administration et commandes
| Export | Rôle |
|---|---|
RegisterAdminPanel(resource: string): void | Une ressource avec un panneau s’annonce (l’AdminPanel de la lib le fait). |
AdminPanelChanged(delta: AdminDelta): void | Une ressource à panneau a modifié un enregistrement ; ai-core le transmet aux admins qui ont le panneau ouvert. |
RegisterCommands(resource: string, commands: CommandInfo[]): void | addCommand de la lib liste les commandes d’une ressource dans l’onglet Commandes. |
GetLookupValues(source: LookupSource): string[] | Les valeurs d’une liste de référence (item, job, gang, account...) pour la validation du panneau. |
RegisterExternalPanel(panel: { id?, label, icon?, description?, command?, url? }): void | Liste l’écran de réglages propre d’un autre script sur le tableau de bord (ouvert par command ou url intégrée). |
exports['ai-core']:RegisterExternalPanel({
label = 'My script', icon = 'gear', description = 'Its own settings', command = 'myscriptconfig',
})