Aller au contenu principal

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.*.

Règle d'or

Modifiez seulement le contenu de ces fonctions, sans changer leur nom ni leurs paramètres.

Fonctions côté client​

bridge/client.lua

FonctionRô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 / SoundResumeSons 3D (xsound par défaut)

Fonctions côté serveur​

bridge/server.lua

FonctionRô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 / RemoveItemInventaire (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.UnemployedJobJob 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émentAttendu
sourceID serveur
identifierIdentifiant 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​

bridge/client.lua
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

bridge/client.lua
function Bridge.Notify(msg, kind)
lib.notify({ title = 'Burger Shot', description = msg, type = kind or 'inform' })
end
bridge/server.lua
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

bridge/client.lua
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

bridge/client.lua
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…)​

  1. Réécrivez Bridge.GetPlayer pour renvoyer un objet qui respecte le tableau de l'objet joueur.
  2. 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.