Parent : [[INDEX-FIVEM-GAMEPLAY]]
FiveM - Callbacks d'argent vides : argent free si non implémentés
Problème
Le script expose des callbacks pour gérer l'argent (chips) du casino, mais ils sont des stubs vides (nil). Le développeur intégrateur DOIT les implémenter, mais sans implémentation par défaut, le joueur peut jouer gratuitement (pas de retrait de chips, pas de vérification de solde).
-- kgv-blackjack/server.lua (PROBLEMATIQUE)
local getChipsCallback = nil
local takeChipsCallback = nil
local giveChipsCallback = nil
exports("SetGetChipsCallback", function(cb) getChipsCallback = cb end)
exports("SetTakeChipsCallback", function(cb) takeChipsCallback = cb end)
exports("SetGiveChipsCallback", function(cb) giveChipsCallback = cb end)
function GetPlayerChips(source)
if getChipsCallback then
return getChipsCallback(source)
else
return 0 -- Pas de chips → le joueur ne peut pas jouer ?
-- NON : le script ne vérifie pas si le callback est nil avant de laisser jouer
end
end
Conséquences
- Argent free : si le callback n'est pas implémenté, le joueur peut miser sans avoir de chips
- Extraction gratuite : les gains sont crédités sans vérification de solde préalable
- Perte de confiance : les casinos sont les premières cibles des cheaters
Solution
Correct
-- Validation obligatoire avant toute action
function GetPlayerChips(source)
if not getChipsCallback then
error("[kgv-blackjack] getChipsCallback non configuré ! Appel exports['kgv-blackjack']:SetGetChipsCallback()")
return 0
end
return getChipsCallback(source)
end
function CanPlaceBet(source, amount)
local chips = GetPlayerChips(source)
if chips < amount then
TriggerClientEvent('blackjack:insufficientFunds', source, amount - chips)
return false
end
return true
end
-- Au démarrage, vérifier que les callbacks sont configurés
AddEventHandler('onResourceStart', function(resourceName)
if GetCurrentResourceName() ~= resourceName then return end
if not getChipsCallback or not takeChipsCallback or not giveChipsCallback then
print('^1[ERROR] kgv-blackjack : callbacks d\'argent non configurés. Le casino est INACTIF.^0')
-- Optionnel : arrêter le resource
-- StopResource(GetCurrentResourceName())
end
end)
Incorrect
-- Le joueur peut toujours jouer même sans chips
RegisterNetEvent('blackjack:bet')
AddEventHandler('blackjack:bet', function(amount)
local src = source
-- AUCUNE vérification de callback ou de solde
StartGame(src, amount)
end)
Détection
Rechercher dans le code :
local \w+Callback = nil
exports\("Set\w+Callback"
Références
- kgv-blackjack/server.lua L95-106