Core Docs

kairo-core v2.4.0 dépendance : aucune Voir le produit

Présentation

Kairo Core est la base de tout le reste. Il charge les joueurs à la connexion, gère leurs comptes et leur argent, applique les permissions, sauvegarde les données en base et sécurise les échanges entre le client et le serveur.

Tous les modules kairo-* passent par Kairo Core pour récupérer un joueur, débiter de l'argent ou vérifier une permission. Si tu développes tes propres ressources, utilise la même API : elles fonctionneront avec tout l'écosystème sans adaptateur.

Kairo Core est volontairement léger : il ne contient ni interface, ni métier, ni inventaire. Ce sont des modules séparés, que tu installes seulement si tu en as besoin.

Installation

  1. Installe MariaDB 10.6 ou plus récent (ou MySQL 8) et crée une base vide, par exemple kairo.
  2. Télécharge Kairo Core depuis « Mes achats » et place le dossier kairo-core dans resources/[kairo]/.
  3. Renseigne la connexion à la base dans ton server.cfg avec la variable kairo_db (voir ci-dessous).
  4. Ajoute ensure kairo-core en premier, avant toutes les autres ressources Kairo.
  5. Démarre le serveur : les tables sont créées automatiquement. Le premier joueur qui se connecte reçoit son compte avec l'argent de départ défini dans la configuration.
server.cfg
# server.cfgset kairo_db "mysql://kairo:motdepasse@localhost/kairo?charset=utf8mb4"ensure kairo-coreensure kairo-inventoryensure kairo-hud

Configuration

Toute la configuration se trouve dans config.lua. Tu n'as jamais besoin de modifier les fichiers du cœur : les mises à jour remplacent le code, jamais ta configuration.

Les comptes d'argent sont déclarés dans Config.Accounts. Tu peux en ajouter autant que tu veux (argent sale, crypto…) : ils deviennent immédiatement utilisables avec player.money.

Les groupes associent un nom à une liste de permissions. Un joueur hérite des permissions de son groupe ; tu peux ensuite tester une permission précise avec player:hasPermission().

config.lua
-- config.luaConfig = {}Config.Locale = 'fr'Config.SaveInterval = 300 -- sauvegarde auto, en secondesConfig.Accounts = {    cash  = { label = 'Liquide', start = 500 },    bank  = { label = 'Banque',  start = 2500 },    black = { label = 'Argent sale', start = 0 },}Config.Groups = {    user  = {},    mod   = { 'kairo.kick', 'kairo.spectate' },    admin = { 'kairo.kick', 'kairo.spectate', 'kairo.ban', 'kairo.money' },}

API

Les exports s'appellent avec exports['kairo-core']:Nom(...). Les fonctions serveur ne sont jamais accessibles depuis le client.

GetPlayer

serveur
exports['kairo-core']:GetPlayer(source)

Renvoie l'objet joueur d'un joueur connecté. C'est le point d'entrée de presque toutes les opérations.

ParamètreTypeDescription
sourcenumberID serveur du joueur

Retour Player ou nil si le joueur n'est pas (encore) chargé.

exemple.lua
local player = exports['kairo-core']:GetPlayer(source)if not player then return endprint(player.name, player.identifier)

GetPlayerByIdentifier

serveur
exports['kairo-core']:GetPlayerByIdentifier(identifier)

Retrouve un joueur connecté à partir de son identifiant (licence). Utile pour agir sur un joueur à partir d'une donnée enregistrée en base.

ParamètreTypeDescription
identifierstringIdentifiant du joueur, par exemple license:abc123…

Retour Player ou nil si le joueur n'est pas connecté.

exemple.lua
local target = exports['kairo-core']:GetPlayerByIdentifier(owner)if target then    target:notify('Ton véhicule a été retrouvé')end

GetPlayers

serveur
exports['kairo-core']:GetPlayers()

Liste tous les joueurs chargés. La table est indexée par ID serveur.

Retour table<number, Player>

exemple.lua
for id, player in pairs(exports['kairo-core']:GetPlayers()) do    player.money:add('bank', 100, 'bonus')end

player.money:add

serveur
player.money:add(account, amount, reason)

Ajoute de l'argent sur un compte du joueur. Le montant doit être positif. La raison est transmise aux logs (Kairo Logs) si le module est installé.

ParamètreTypeDescription
accountstringNom du compte déclaré dans Config.Accounts
amountnumberMontant à ajouter (> 0)
reasonstring?Motif facultatif, enregistré dans les journaux

Retour boolean — true si l'opération a réussi.

exemple.lua
player.money:add('bank', 500, 'paie')

player.money:remove

serveur
player.money:remove(account, amount, reason)

Retire de l'argent si le solde est suffisant. Rien n'est retiré si le solde est trop bas : teste toujours la valeur renvoyée.

ParamètreTypeDescription
accountstringNom du compte
amountnumberMontant à retirer (> 0)
reasonstring?Motif facultatif

Retour boolean — false si le solde est insuffisant.

exemple.lua
if player.money:remove('cash', 250, 'achat') then    -- donner l'objetelse    player:notify('Pas assez d\'argent', 'error')end

player.money:get

serveur
player.money:get(account)

Lit le solde actuel d'un compte.

ParamètreTypeDescription
accountstringNom du compte

Retour number

exemple.lua
local bank = player.money:get('bank')

player:hasPermission

serveur
player:hasPermission(permission)

Vérifie si le joueur possède une permission, via son groupe.

ParamètreTypeDescription
permissionstringNom de la permission, par exemple kairo.ban

Retour boolean

exemple.lua
if not player:hasPermission('kairo.ban') then return end

player:notify

serveur
player:notify(message, kind)

Envoie une notification au joueur. Utilise Kairo UI s'il est installé, sinon la notification native du jeu.

ParamètreTypeDescription
messagestringTexte affiché
kindstring?info, success, warning ou error (info par défaut)

Retour rien

exemple.lua
player:notify('Virement reçu', 'success')

player:getMeta / setMeta

serveur
player:getMeta(key) player:setMeta(key, value)

Lit ou écrit une métadonnée libre sur le joueur. Elle est sauvegardée avec lui et retrouvée à la prochaine connexion. Préfixe la clé avec le nom de ton script.

ParamètreTypeDescription
keystringNom de la donnée, par exemple mon-script:niveau
valueanyValeur à enregistrer (nombre, texte, booléen ou table)

Retour getMeta : la valeur, ou nil si absente

exemple.lua
if not player:getMeta('mon-script:bienvenue') then    player:setMeta('mon-script:bienvenue', true)end

RegisterCallback

serveur
exports['kairo-core']:RegisterCallback(name, handler)

Déclare une fonction serveur que le client peut appeler et dont il attend une réponse. Le serveur reste maître : le client ne fait que demander.

ParamètreTypeDescription
namestringNom unique du callback
handlerfunction(source, ...)Fonction appelée, sa valeur de retour est renvoyée au client

Retour rien

exemple.lua
exports['kairo-core']:RegisterCallback('bank:balance', function(source)    local player = exports['kairo-core']:GetPlayer(source)    return player.money:get('bank')end)

TriggerCallback

client
exports['kairo-core']:TriggerCallback(name, ...)

Appelle un callback serveur et attend sa réponse (fonction bloquante, à utiliser dans un thread).

ParamètreTypeDescription
namestringNom du callback
...anyArguments transmis au serveur

Retour Ce que renvoie le handler serveur.

exemple.lua
local balance = exports['kairo-core']:TriggerCallback('bank:balance')print('Solde : ' .. balance)

Événements

kairo:playerLoaded

serveur

Déclenché quand un joueur est entièrement chargé (compte, argent, groupe).

exemple.lua
AddEventHandler('kairo:playerLoaded', function(source, player)    print(player.name .. ' est arrivé')end)

kairo:playerDropped

serveur

Déclenché après la sauvegarde d'un joueur qui se déconnecte.

exemple.lua
AddEventHandler('kairo:playerDropped', function(source, reason)    print('Départ : ' .. reason)end)

kairo:moneyChanged

serveur

Déclenché à chaque modification d'un compte.

exemple.lua
AddEventHandler('kairo:moneyChanged', function(source, account, amount, balance)    -- amount est négatif pour un retraitend)

kairo:client:loaded

client

Côté client, quand les données du joueur sont disponibles.

exemple.lua
AddEventHandler('kairo:client:loaded', function(data)    print('Groupe : ' .. data.group)end)

Commandes

CommandeDescription
/kairo setgroup <id> <groupe>Change le groupe d'un joueur (permission kairo.admin requise).
/kairo givemoney <id> <compte> <montant>Ajoute de l'argent sur un compte (permission kairo.money).
/kairo saveForce la sauvegarde de tous les joueurs.

FAQ

Puis-je utiliser Kairo Core avec des scripts écrits pour un autre framework ?

Ils ne fonctionneront pas tels quels : Kairo Core a sa propre API. La plupart des adaptations se résument à remplacer la récupération du joueur et les fonctions d'argent par celles de Kairo, ce qui prend généralement quelques minutes par script.

Comment ajouter un nouveau type d'argent ?

Ajoute une entrée dans Config.Accounts et redémarre. Le compte est créé à la volée pour chaque joueur, avec la valeur start comme solde initial.

Où sont stockées les données ?

Dans la base indiquée par kairo_db. Les joueurs sont sauvegardés à intervalle régulier (Config.SaveInterval) et à la déconnexion.