Écrire son provider
Tout ce qui relie le téléphone à votre serveur vit dans zs-phone/bridge/. Ce dossier est livré en clair, jamais obfusqué, et jamais écrasé par une mise à jour automatique : vos modifications survivent aux versions.
Organisation
bridge/
shared/detect.lua résolution des sélecteurs 'auto'
client/
lib/ helpers partagés
defaults/ valeurs par défaut (ne pas modifier)
framework/<framework>/ core, vehicles, services
inventory/ housing/ voice/
server/
lib/ defaults/
framework/<framework>/ core, money, vehicles, services
banking/ billing/ society/ housing/ inventory/ voice/Le principe
Le cœur du téléphone n'appelle jamais votre framework directement : il appelle des tables de fonctions.
| Table | Domaine |
|---|---|
Bridge | Identité, nom, métier, admin, notifications, item utilisable |
Money | Argent en poche (liquide, banque, sale) |
Banking | Comptes, IBAN, virements, historique |
Billing | Factures |
Society | Métiers, grades, employés, caisse, service |
Garage | Véhicules |
Housing | Propriétés et résidents |
Inventory | Item téléphone, métadonnées |
Voice | Canaux d'appel |
Chaque fonction a une valeur par défaut inoffensive dans bridge/*/defaults/. Un provider absent ou cassé dégrade la fonctionnalité, il ne fait pas planter le téléphone.
Ajouter un framework
Créez un dossier à votre nom et une garde en première ligne de chaque fichier :
-- bridge/server/framework/monframework/core.lua
if Bridge.framework ~= 'monframework' then return end
--- @param src number
--- @return string|nil
function Bridge.getOwnerKey(src)
return exports.monframework:GetIdentifier(src)
end
--- @param src number
--- @return string firstname
--- @return string lastname
function Bridge.getCharacterName(src)
local player <const> = exports.monframework:GetPlayer(src)
if not player then return '', '' end
return player.firstname, player.lastname
endPuis déclarez-le :
Config.Phone.Framework = 'monframework'Ajouter une banque, un housing, un inventaire
Même principe, avec la garde correspondante :
if Bridge.banking ~= 'mabanque' then return end
if Bridge.housing ~= 'monhousing' then return end
if Bridge.inventory ~= 'moninventaire' then return end
if Bridge.voice ~= 'mavoix' then return endLe plus simple reste de copier le provider existant le plus proche du vôtre et d'en adapter les appels.
Deux règles à respecter
Le return de garde doit être indenté et sans valeur. return seul, jamais return quelquechose en début de ligne : le processus de build interprète cette forme différemment.
Un helper appelé au chargement va dans lib/. Les fichiers d'un même dossier sont chargés dans l'ordre ASCII, où les majuscules précèdent l'underscore — un helper nommé _helper.lua se chargerait après Renewed-Banking.lua. Les dossiers lib/ sont déclarés avant tous les providers dans le manifeste.
Vérifier
Au démarrage, la console indique quel provider a été retenu sur chaque axe :
[zs-phone] framework=monframework inventory=ox_inventory housing=false garage=native banking=internal billing=internal society=internal voice=pmaSi votre provider n'apparaît pas, c'est que la garde ne correspond pas à la valeur de Config.Phone.*.