Bridge : brancher vos propres systèmes
Tout ce qui dépend d'ESX ou d'une autre ressource est regroupé dans deux fichiers ouverts : bridge/client.lua et bridge/server.lua. Le reste du script n'appelle que Bridge.*.
Modifiez seulement le contenu de ces fonctions, sans changer leur nom ni leurs paramètres.
Fonctions côté client
bridge/client.lua
| Fonction | Rôle |
|---|---|
Bridge.Notify(msg, kind) | Afficher une notification |
Bridge.TriggerCallback(name, cb, ...) | Appeler un callback serveur |
Bridge.GetJob() | Job du joueur : { name, grade, grade_name, grade_label }. Déclencher l'événement local tth_burgershot:jobUpdated quand il change |
Bridge.GetItemCount(name) | Quantité d'un item dans l'inventaire |
Bridge.HelpFrame(text) / Bridge.HelpHide() | Aide à l'écran : HelpFrame est appelée à chaque image tant qu'il y a une aide, HelpHide une fois quand elle disparaît |
Bridge.PlainText(text) | Convertit ~INPUT_CONTEXT~ en [E] et ~n~ en retour à la ligne, pour un TextUI |
Bridge.Select(title, elements, onSelect) | Menu de choix. elements = { { label, count, value } }. Renvoyer false si aucun menu n'est disponible : le premier choix est alors pris |
Bridge.WearOutfit(clothes) / Bridge.WearCivilian() | Mettre une tenue / remettre la tenue civile |
Bridge.SoundReady / SoundPlay / SoundExists / SoundStop / SoundPause / SoundResume | Sons 3D (xsound par défaut) |
Fonctions côté serveur
bridge/server.lua
| Fonction | Rôle |
|---|---|
Bridge.GetPlayer(src) / GetPlayerFromIdentifier(id) / GetPlayers(job) | Renvoient un objet joueur |
Bridge.Notify(src, msg, kind) | Notification à un joueur |
Bridge.IsAdmin(src, groups) | Droits admin |
Bridge.RegisterCallback(name, fn) | Callback serveur, fn(src, cb, ...) |
Bridge.RegisterCommand(name, groups, fn, help) | Commande admin, fn(src, args) |
Bridge.RegisterUsableItem(item, fn) | Item utilisable, fn(src, data) |
Bridge.GetItemCount / CanCarryItem / AddItem / RemoveItem | Inventaire (ox_inventory détecté automatiquement) |
Bridge.GetSociety(name) | Compte de société : { money, addMoney(n), removeMoney(n) } ou nil |
Bridge.RegisterSociety(job, label, account) | Enregistrer la société |
Bridge.AddStatus(src, status, amount) | Faim et soif |
Bridge.GetJobGrades(job) | Liste des grades { grade, name, label, salary } |
Bridge.GetEmployees(job) | Employés, y compris hors ligne : { identifier, name, grade } |
Bridge.GetOfflineJob(id) / Bridge.SetOfflineJob(id, fromJob, job, grade) | Job d'un joueur hors ligne |
Bridge.SetGradeSalary(job, grade, salary) | Salaire d'un grade |
Bridge.UnemployedJob | Job donné en cas de licenciement (unemployed) |
L'objet joueur
Les modules n'utilisent que ces éléments de l'objet renvoyé par Bridge.GetPlayer. C'est tout ce qu'un adaptateur pour un autre framework doit fournir. Avec ESX, c'est directement le xPlayer.
| Élément | Attendu |
|---|---|
source | ID serveur |
identifier | Identifiant unique du personnage |
getName() | Nom affiché |
getJob() | { name, grade, grade_name, grade_label, label } |
setJob(name, grade) | Changer de job |
getAccount(name) | { money } pour 'money' ou 'bank' |
addAccountMoney(account, amount, reason) | Ajouter de l'argent |
removeAccountMoney(account, amount, reason) | Retirer de l'argent |
Exemples
okokNotify
function Bridge.Notify(msg, kind)
exports['okokNotify']:Alert('Burger Shot', msg, 4000, kind or 'info')
end
ox_lib
Ajoutez d'abord '@ox_lib/init.lua' en tête des shared_scripts du fxmanifest.lua.
Notifications
function Bridge.Notify(msg, kind)
lib.notify({ title = 'Burger Shot', description = msg, type = kind or 'inform' })
end
function Bridge.Notify(src, msg, kind)
TriggerClientEvent('ox_lib:notify', src, { title = 'Burger Shot', description = msg, type = kind or 'inform' })
end
TextUI à la place de l'aide native
local shown = nil
function Bridge.HelpFrame(text)
if text == shown then return end
shown = text
lib.showTextUI(Bridge.PlainText(text))
end
function Bridge.HelpHide()
shown = nil
lib.hideTextUI()
end
Menu contextuel à la place d'esx_menu_default
function Bridge.Select(title, elements, onSelect)
local options = {}
for _, e in ipairs(elements) do
options[#options + 1] = {
title = e.count and ('%s x%d'):format(e.label, e.count) or e.label,
onSelect = function() onSelect(e.value) end
}
end
lib.registerContext({ id = 'tth_bs_select', title = title, options = options })
lib.showContext('tth_bs_select')
return true
end
Autre framework (QBCore, Qbox…)
- Réécrivez
Bridge.GetPlayerpour renvoyer un objet qui respecte le tableau de l'objet joueur. - Adaptez les autres fonctions du bridge (callbacks, commandes, items utilisables, société, grades, employés hors ligne) à votre framework.
Le fichier jobs.sql (tables jobs, job_grades, addon_account…) est propre à ESX. Les deux tables tth_burgershot_catalog et tth_burgershot_transactions restent nécessaires.