Tout ce qui se trouve dans custom/ figure dans escrow_ignore : il reste donc ouvert quand la ressource est chiffrée, et il est séparé du cœur, si bien que les mises à jour du téléphone ne l’écrasent pas. Les fichiers de fournisseur de bridge/ sont eux aussi ouverts : tu peux les lire ou en copier un comme point de départ.
Chaque hook Custom renvoie nil par défaut, ce qui signifie « fais le comportement habituel ». Renvoie autre chose et ton code prend la main.
custom/client/notifications.lua
Custom.ShowNotification(data) → boolean|nil
Aspect d’une notification quand le téléphone est rangé. Par défaut, le téléphone surgit du bas de l’écran. Quand le téléphone est ouvert, les notifications s’affichent toujours à l’intérieur.
Le hook s’exécute dans un pcall. S’il échoue, l’erreur est affichée et le téléphone montre la notification comme d’habitude.
custom/server/money.lua
Tous les débits et paiements du téléphone passent par ici : annonces, courses de taxi, factures, virements, abonnements de rencontres, récupération de ligne. Par défaut, le téléphone utilise la passerelle Banking.
Compte choisi par le joueur, si l’app le lui permet
Retour
Comportement
nil
Débite via la passerelle bancaire
true
Débité, continue
false, 'reason'
Échec ; le texte est affiché au joueur
Débiter le liquide plutôt que la banque (Qbox) :
lua
functionCustom.Charge(source, amount, reason)local player = exports.qbx_core:GetPlayer(source)
ifnot player thenreturnfalse, 'Player not found'endif player.Functions.RemoveMoney('cash', amount, reason) thenreturntrueendreturnfalse, 'You do not have enough cash'end
Annonces gratuites pour les reporters :
lua
functionCustom.Charge(source, amount, reason)local job = Framework.GetJob(source)
if reason:find('Ad') and job and job.name == 'reporter'thenreturntrueendreturnnilend
Paie un joueur : gains des chauffeurs et des livreurs, ventes du marketplace et remboursements. Mêmes règles de retour que Custom.Charge.
Paramètre
Type
Description
source
number
ID serveur du joueur
amount
number
Montant à verser
reason
string
Déjà traduit dans la langue du joueur
custom/server/permissions.lua
Custom.CanUseApp(source, appId) → boolean|nil
Ton propre veto sur une app, pour les conditions qui ne rentrent pas dans une règle du panneau. S’exécute après les règles du panneau et ne peut que retirer l’accès, jamais l’accorder.
Ceci s’exécute à chaque ouverture d’un téléphone, une fois par app (plus de trente fois d’affilée). N’interroge pas la base de données ici : garde en mémoire ce dont tu as besoin.
custom/bridge
Chaque catégorie dispose d’un modèle avec les fonctions exactes dont elle a besoin. Remplis-le et mets la catégorie sur 'custom' dans config/bridge.lua :
lua
BridgeConfig.Banking = 'custom'
Chaque modèle s’enregistre avec Bridge.Register(category, 'custom', { ... }) et n’est utilisé que lorsque sa catégorie est sur 'custom'.