Aller au contenu
Blog

Dupe ou triche d’argent sur FiveM : annuler avec une sauvegarde

Quelqu’un a dupliqué des objets ou s’est donné de l’argent ? Trouvez le début, prenez la sauvegarde d’avant et restaurez la base en perdant le moins possible.

Par PK

9 min de lecture
  • Backups
  • Rollback
  • Dupes
  • Economy
Sur cette page

Quand un joueur duplique des objets ou qu’un tricheur se donne de l’argent sur votre serveur FiveM, la solution la plus propre est de restaurer la base de données depuis une sauvegarde prise juste avant. Supprimer les copies à la main marche rarement : le temps que vous le remarquiez, l’argent et les objets sont déjà chez d’autres joueurs. Cet article explique comment ces exploits arrivent le plus souvent, comment trouver le bon point de restauration, quand revenir en arrière pour tout le monde et quand pour quelques joueurs seulement, et comment les sauvegardes de FiveDock le font depuis le panel.

La plupart des serveurs découvrent FiveDock par son CDN, pour les images d’ox_inventory et les photos du téléphone. FiveDock sauvegarde aussi la base de données de votre serveur, sur tous les plans, gratuit compris. C’est ce qui vous sauve le soir où quelqu’un casse l’économie.

À quoi ressemble un dupe ou un exploit d’argent

Ça commence souvent par un message sur Discord. Quelqu’un vend des fusils à moitié prix, un nouveau joueur s’est offert trois supercars le premier jour, ou le marché est soudain plein d’un objet censé être rare. Vous vérifiez, et un personnage a 40 millions en banque alors que le deuxième plus riche en a 200 000.

Derrière, il y a presque toujours l’une de ces causes :

  • Un event serveur qui fait confiance au client. Un script de métier paie le montant que le client envoie, et quelqu’un avec un menu de triche appelle cet event avec 9 999 999 au lieu de 450.
  • Une race condition dans l’inventaire. Deux joueurs déplacent la même pile au même moment, un échange se termine pile quand l’un des deux se déconnecte, ou le serveur plante après qu’un objet a bougé mais avant la sauvegarde suivante. L’objet se retrouve aux deux endroits.
  • Un script de boutique ou de craft qui paie avant de vérifier. Il verse l’argent et seulement ensuite essaie de retirer l’objet, ou il accepte une quantité négative.
  • Une erreur du staff. Un /givemoney avec trois zéros de trop, ou un compte staff dans lequel quelqu’un d’autre est entré.

Pourquoi le nettoyage à la main marche rarement

Le premier réflexe, c’est de vider le compte du tricheur et de le bannir. Ça corrige une ligne. Le temps que vous l’appreniez, l’argent est en général déjà dans des voitures, des maisons et les poches d’autres joueurs, et les objets dupliqués ont été vendus, rangés dans des stashes et donnés à des amis. Chacun de ces endroits est une ligne de plus dans une table de plus, et vous en raterez forcément.

Une sauvegarde d’avant l’exploit ne contient rien de tout ça. Vous la restaurez, et les copies disparaissent partout d’un coup, y compris là où vous n’auriez jamais pensé à regarder.

Trouver le bon point de restauration

Le point de restauration, c’est la sauvegarde la plus récente prise avant le début de l’exploit. Une sauvegarde plus tardive contient déjà les copies. Pour la trouver :

  1. Trouvez le premier événement exploité. Vos logs d’argent, l’historique du joueur dans txAdmin ou l’heure d’une alerte vous disent à peu près quand le premier virement ou objet suspect est apparu.
  2. Prenez la dernière sauvegarde avant ce moment, pas la dernière avant que vous ne le remarquiez.
  3. Vérifiez qu’elle est propre avant de vous en servir. Chargez-la dans une base séparée à côté de la base en production et comparez les soldes.
terminal
mysql -u root -p -e "CREATE DATABASE restore_check"
mysql -u root -p restore_check < fivem-2026-10-23-2000.sql

Ensuite, listez qui a gagné le plus depuis cette sauvegarde. Sur QBCore et Qbox :

QBCore · Qbox
SELECT live.citizenid,
  CAST(JSON_EXTRACT(old.money, '$.bank') AS SIGNED) AS bank_then,
  CAST(JSON_EXTRACT(live.money, '$.bank') AS SIGNED) AS bank_now,
  CAST(JSON_EXTRACT(live.money, '$.bank') AS SIGNED)
    - CAST(JSON_EXTRACT(old.money, '$.bank') AS SIGNED) AS gained
FROM fivem.players AS live
JOIN restore_check.players AS old ON old.citizenid = live.citizenid
ORDER BY gained DESC
LIMIT 20;

Sur ESX, l’argent est dans la colonne accounts de users :

ESX
SELECT live.identifier,
  CAST(JSON_EXTRACT(old.accounts, '$.bank') AS SIGNED) AS bank_then,
  CAST(JSON_EXTRACT(live.accounts, '$.bank') AS SIGNED) AS bank_now,
  CAST(JSON_EXTRACT(live.accounts, '$.bank') AS SIGNED)
    - CAST(JSON_EXTRACT(old.accounts, '$.bank') AS SIGNED) AS gained
FROM fivem.users AS live
JOIN restore_check.users AS old ON old.identifier = live.identifier
ORDER BY gained DESC
LIMIT 20;

Remplacez $.bank par $.cash ($.money sur ESX) pour vérifier l’argent liquide. Les personnages créés après la sauvegarde n’apparaissent pas dans cette liste, regardez-les à part. Si le solde du tricheur paraît normal dans la sauvegarde, c’est un bon point de restauration. S’il est déjà énorme, remontez d’une sauvegarde.

La même requête montre aussi à qui le tricheur a envoyé l’argent. Un joueur qui a gagné quelques millions en une heure sans métier qui paie autant, c’est en général là que l’argent est parti.

Pourquoi la fréquence des sauvegardes décide de ce que vous perdez

Un rollback ramène chaque joueur au moment de la sauvegarde, donc tout ce qu’il a fait depuis est perdu aussi. Avec une sauvegarde par nuit à 04:00 et un exploit découvert à 21:00, toute la ville perd 17 heures de jeu. Avec une sauvegarde toutes les heures, elle perd moins d’une heure.

C’est pour ça que le temps entre l’exploit et le moment où vous le remarquez compte autant que la sauvegarde elle-même. Des alertes qui vous préviennent en quelques minutes gardent le rollback court.

Revenir en arrière pour tout le monde, ou pour quelques joueurs

Restaurez toute la base quand les copies se sont répandues : beaucoup de joueurs sont concernés, le bug a touché toute l’économie, ou vous ne savez pas qui a quoi. Tout le monde perd les mêmes quelques heures, mais l’économie est de nouveau propre.

Restaurez seulement quelques joueurs quand une ou deux personnes sont en cause et que les copies n’ont pas beaucoup circulé. Vous remettez leurs lignes depuis la sauvegarde et personne d’autre ne perd rien. Restaurer l’inventaire d’un joueur montre comment faire, avec le SQL pour ESX et QBCore.

Restaurer seulement le tricheur alors que ses copies dorment dans l’inventaire d’autres joueurs laisse le dupe dans le jeu. Vérifiez où sont partis les objets et l’argent avant de choisir cette voie.

Ce que font les sauvegardes de FiveDock

FiveDock fait tout ça depuis le panel, via l’agent qui tourne déjà sur votre serveur pour le CDN et le reste. Chaque sauvegarde est chiffrée sur votre machine avec une clé que nous ne voyons jamais.

  • Des sauvegardes sur tous les plans. Free sauvegarde une fois par jour et garde 7 jours, City une fois par jour pendant 30 jours. Metro sauvegarde toutes les heures et garde les 24 dernières heures heure par heure, puis une par jour pendant 30 jours et une par semaine pendant 12 semaines.
  • Une sauvegarde à la seconde où une alerte se déclenche. Les alertes d’argent, sur tous les plans, publient sur Discord quand un seul virement dépasse un seuil ou qu’un joueur gagne de l’argent trop vite. Les alertes d’objets dupliqués sur Metro repèrent le même objet unique à deux endroits, ou une pile qui grossit sans explication. Chaque alerte prend une sauvegarde dans la seconde et la rattache à la détection : vous gardez une image figée de qui avait quoi au moment où c’est sorti.
  • Un aperçu avant tout changement. Vous choisissez une sauvegarde et voyez ce que le retour en arrière va changer avant de confirmer. Toute la base ou tout le serveur se restaure sur tous les plans ; une seule table ou un seul joueur, c’est Metro.
  • D’abord une sauvegarde de sécurité. Avant chaque retour en arrière, FiveDock sauvegarde l’état actuel. Vous vous êtes trompé d’heure ? Vous revenez là où vous étiez.
  • Le framework ne défait pas votre travail. Une restauration de la base est refusée tant qu’ESX, QBCore ou Qbox tourne, parce que le framework réécrirait par-dessus les joueurs qu’il garde en mémoire. La restauration d’un joueur est refusée tant que ce joueur est connecté. Les deux peuvent être forcées si vous savez ce que vous faites.
  • Seuls les owners peuvent revenir en arrière, et chaque restauration va dans le journal d’audit. Une sauvegarde supprimée reste verrouillée 30 jours, donc même un compte staff volé ne peut pas effacer votre historique.

Les prix et la liste complète de ce que contient chaque plan sont sur la page des tarifs. Pour voir comment faire et tester ces sauvegardes à la main, lisez sauvegarder un serveur FiveM.

Avant de relancer le serveur

Bouchez d’abord le trou. Si l’exploit vient d’un script, arrêtez cette ressource ou corrigez-la avant le redémarrage, sinon ça recommencera dans l’heure. Pour un event d’argent, c’est le serveur qui décide du montant, jamais le client :

server.lua
-- Exploitable: the client decides how much it gets paid
RegisterNetEvent('delivery:pay', function(amount)
  local xPlayer = ESX.GetPlayerFromId(source)
  xPlayer.addMoney(amount)
end)

-- Safe: the server decides the amount and checks the job was done
local PAY = 450
local onDelivery = {} -- set by the server when it hands out a job

RegisterNetEvent('delivery:finish', function()
  local src = source
  if not onDelivery[src] then return end
  onDelivery[src] = nil
  ESX.GetPlayerFromId(src).addMoney(PAY)
end)
  1. Bannissez le tricheur par sa licence et les autres identifiants que txAdmin affiche, pas seulement son personnage.
  2. Dites aux joueurs à quelle heure vous êtes revenu et pourquoi. Les gens acceptent bien mieux une soirée perdue quand ils savent que c’était un tricheur et pas vous.
  3. Gardez la sauvegarde de sécurité et celle de l’alerte quelque temps. Elles montrent ce qui s’est passé si quelqu’un conteste son ban.

Questions fréquentes

Jusqu’où revenir en arrière sur FiveM après un dupe ?

Jusqu’à la sauvegarde la plus récente prise avant le premier événement exploité, pas avant le moment où vous l’avez remarqué. Chargez-la d’abord dans une base séparée et vérifiez que le solde et les objets du tricheur y paraissent normaux.

Les joueurs perdent-ils leur progression si je restaure la base ?

Oui, tout ce qui s’est passé depuis la sauvegarde. Avec des sauvegardes toutes les heures, c’est moins d’une heure ; avec une sauvegarde par nuit, ça peut faire presque une journée. Si seuls quelques joueurs sont en cause, restaurez plutôt leurs lignes.

Un tricheur s’est donné de l’argent. Je le retire, tout simplement ?

Seulement si l’argent n’a jamais quitté son personnage. En général, il est déjà dans des voitures, des maisons ou sur les comptes d’autres joueurs, et le retirer d’une ligne laisse le reste. Revenir à une sauvegarde d’avant est plus rapide et attrape tout.

txAdmin peut-il restaurer la base de données ?

Non. txAdmin gère le processus du serveur, les bans et l’historique des joueurs, mais il ne sauvegarde ni ne restaure votre base MySQL ou MariaDB. Il vous faut mysqldump planifié ou un outil comme FiveDock.

Les sauvegardes FiveDock sont-elles incluses dans le plan gratuit ?

Oui. Free prend une sauvegarde par jour, la garde 7 jours et peut restaurer toute la base. Les sauvegardes horaires, les alertes d’objets dupliqués et la restauration d’un seul joueur sont sur Metro.

Tous les articles