{"id":192928,"date":"2025-08-15T16:20:47","date_gmt":"2025-08-15T14:20:47","guid":{"rendered":"https:\/\/fivemx.com\/?p=192928"},"modified":"2026-08-10T07:53:33","modified_gmt":"2026-08-10T05:53:33","slug":"conversion-de-scripts-fivem","status":"publish","type":"post","link":"https:\/\/rpcrate.com\/fr\/converting-fivem-scripts\/","title":{"rendered":"Convertir les scripts FiveM entre ESX, QBCore et Qbox"},"content":{"rendered":"<p>Convertissez une ressource FiveM en mappant son framework, son inventaire et ses d\u00e9pendances de base de donn\u00e9es, puis en testant un flux de jeu \u00e0 la fois. Renommer les \u00e9v\u00e9nements ESX en \u00e9v\u00e9nements QBCore n'est pas une conversion compl\u00e8te. Une migration de personnage \u00e0 l'\u00e9chelle du serveur est un projet distinct.<\/p>\n<h2 id=\"before-changing-code\">Avant de modifier le code<\/h2>\n<p>Travaillez sur un serveur de d\u00e9veloppement isol\u00e9 avec une copie de la ressource et une base de donn\u00e9es jetable. Enregistrez les versions exactes du framework source et cible, l'inventaire, la biblioth\u00e8que de ciblage, la biblioth\u00e8que d'interface utilisateur et la licence de la ressource. Les fichiers prot\u00e9g\u00e9s n\u00e9cessitent une version prise en charge par l'auteur ; une configuration modifiable seule peut ne pas suffire.<\/p>\n<h2 id=\"1-inventory-the-integration-points\">1. Inventoriez les points d'int\u00e9gration<\/h2>\n<p>Recherchez dans les fichiers de ressources <code data-no-translation=\"\" translate=\"no\">ESX<\/code>, <code data-no-translation=\"\" translate=\"no\">QBCore<\/code>, <code data-no-translation=\"\" translate=\"no\">qbx_core<\/code>, <code data-no-translation=\"\" translate=\"no\">exports<\/code>, <code data-no-translation=\"\" translate=\"no\">RegisterNetEvent<\/code>, <code data-no-translation=\"\" translate=\"no\">MySQL<\/code> et les noms de tables SQL. Classez chaque correspondance comme serveur, client ou partag\u00e9e. Listez les entr\u00e9es attendues, les valeurs de retour et le comportement en cas d'\u00e9chec avant de les remplacer.<\/p>\n<p>Par exemple, un flux de boutique inclut l'ouverture de son interface utilisateur, la v\u00e9rification de l'acc\u00e8s, la lecture des prix, le paiement, l'ajout \u00e0 l'inventaire et la sauvegarde du r\u00e9sultat. Ne convertir que sa notification laisse le comportement important inchang\u00e9.<\/p>\n<h2 id=\"2-map-behavior-explicitly\">2. Mappez explicitement le comportement<\/h2>\n<p>R\u00e9solvez le joueur du framework cible sur le serveur au moment de l'action. Les identifiants ESX et les ID de personnage QBCore\/Qbox ont des significations diff\u00e9rentes ; ne g\u00e9n\u00e9rez pas d'ID de personnage \u00e0 partir de hachages tronqu\u00e9s et n\u2019\u00e9crasez pas les identifiants de compte. Conservez un mappage r\u00e9vis\u00e9 lorsque les donn\u00e9es existantes doivent \u00eatre d\u00e9plac\u00e9es.<\/p>\n<p>Choisissez d\u00e9lib\u00e9r\u00e9ment l'int\u00e9gration de l'inventaire. Les noms d'articles, les unit\u00e9s de poids, la gestion des emplacements, les m\u00e9tadonn\u00e9es et les v\u00e9rifications de capacit\u00e9 diff\u00e8rent. Ne revenez pas silencieusement entre les syst\u00e8mes d'inventaire. D\u00e9cidez comment l'argent liquide, les soldes bancaires et tout m\u00e9canisme de monnaie illicite sont mapp\u00e9s sans traiter les comptes non li\u00e9s comme \u00e9quivalents.<\/p>\n<h2 id=\"3-implement-a-small-adapter\">3. Impl\u00e9mentez un petit adaptateur<\/h2>\n<p>Conservez les appels sp\u00e9cifiques au framework pour le joueur, le m\u00e9tier, l'argent et l'inventaire dans un module r\u00e9serv\u00e9 au serveur. Les notifications client et les rappels d'interface utilisateur appartiennent \u00e0 un module client distinct. D\u00e9clarez les d\u00e9pendances r\u00e9elles dans <code data-no-translation=\"\" translate=\"no\">fxmanifest.lua<\/code> et d\u00e9marrez-les avant la ressource.<\/p>\n<p>Pour Qbox, consultez <a href=\"https:\/\/docs.qbox.re\/resources\/qbx_core\/exports\/server\">les exports du serveur<\/a> et ses directives de compatibilit\u00e9. Un pont de compatibilit\u00e9 peut aider les ressources QB existantes, mais il ne garantit pas la compatibilit\u00e9 avec chaque inventaire, requ\u00eate de base de donn\u00e9es ou c\u0153ur modifi\u00e9.<\/p>\n<h2 id=\"4-preserve-the-trust-boundary\">4. Pr\u00e9servez la limite de confiance<\/h2>\n<p>Le serveur doit d\u00e9terminer les objets autoris\u00e9s, les prix, les soldes, les permissions de m\u00e9tier et l'ach\u00e8vement des t\u00e2ches r\u00e9compens\u00e9es. Traitez chaque argument d'\u00e9v\u00e9nement client comme non fiable. Un nom de m\u00e9tier seul ne prouve pas qu'une livraison a eu lieu ; un \u00e9v\u00e9nement r\u00e9p\u00e9t\u00e9 ne doit pas payer de mani\u00e8re r\u00e9p\u00e9t\u00e9e. V\u00e9rifiez les r\u00e9sultats du d\u00e9bit et de la livraison des objets, et d\u00e9finissez une compensation si la deuxi\u00e8me action \u00e9choue.<\/p>\n<h2 id=\"5-convert-resource-owned-storage\">5. Convertissez le stockage appartenant \u00e0 la ressource<\/h2>\n<p>Comparez le sch\u00e9ma source et cible install\u00e9 avant d'\u00e9crire une migration. Utilisez un script s\u00e9par\u00e9 et versionn\u00e9 pour ce sch\u00e9ma exact. Conservez les identifiants, les plaques, les m\u00e9tadonn\u00e9es d'origine et un tableau de correspondance durable. Signalez les lignes dupliqu\u00e9es ou non mapp\u00e9es au lieu de les ignorer. Ne modifiez pas les soldes appartenant au framework via SQL pendant que le framework les a charg\u00e9s en m\u00e9moire.<\/p>\n<h2 id=\"6-verify-and-release\">6. V\u00e9rifiez et publiez<\/h2>\n<ol>\n<li>Testez un nouveau personnage et un personnage existant : connexion, action convertie, reconnexion et red\u00e9marrage du serveur. V\u00e9rifiez la persistance apr\u00e8s chaque \u00e9tape.<\/li>\n<li>Testez les permissions refus\u00e9es, les fonds insuffisants, l'inventaire plein, les entr\u00e9es invalides, les requ\u00eates r\u00e9p\u00e9t\u00e9es et les d\u00e9connexions pendant l'op\u00e9ration. Confirmez qu'aucun argent ou objet non intentionnel n'est cr\u00e9\u00e9.<\/li>\n<li>Comparez les lignes de la base de donn\u00e9es et les soldes avant et apr\u00e8s les actions de test connues. Enqu\u00eatez sur chaque diff\u00e9rence inattendue.<\/li>\n<li>D\u00e9ployez les fichiers r\u00e9vis\u00e9s et toute migration requise pendant une fen\u00eatre de maintenance. Conservez les sauvegardes de fichiers\/bases de donn\u00e9es correspondantes et une proc\u00e9dure de restauration qui tient compte des \u00e9critures effectu\u00e9es apr\u00e8s la publication.<\/li>\n<\/ol>\n<h2 id=\"if-the-conversion-fails\">Si la conversion \u00e9choue<\/h2>\n<p>Un export absent indique g\u00e9n\u00e9ralement une ressource\/version ou un ordre de d\u00e9marrage incorrect. Un rappel qui ne renvoie jamais de valeur n\u00e9cessite une inspection de l'enregistrement et de l'invocation, y compris les arguments et le c\u00f4t\u00e9 ex\u00e9cution. Les \u00e9l\u00e9ments manquants peuvent refl\u00e9ter les m\u00e9tadonn\u00e9es d'inventaire ou les r\u00e8gles de capacit\u00e9. Diagnostiquez la limite d\u00e9faillante plut\u00f4t que d'ajouter de larges shims de compatibilit\u00e9.<\/p>\n<h2 id=\"reference-documentation\">Documentation de r\u00e9f\u00e9rence<\/h2>\n<p><a href=\"https:\/\/docs.fivem.net\/docs\/scripting-reference\/resource-manifest\/\">Cfx.re \u2014 manifeste de ressource<\/a> \u00b7 <a href=\"https:\/\/docs.fivem.net\/docs\/developers\/server-security\/\">Cfx.re \u2014 s\u00e9curit\u00e9 du serveur<\/a><\/p>\n<p><a href=\"https:\/\/rpcrate.com\/fr\/utilisation-simultanee-desx-qbcore\/\">Utilisation simultan\u00e9e d'ESX et de QBCore : pourquoi ce n'est pas faisable<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Convertissez une ressource FiveM en mappant son framework, son inventaire et ses d\u00e9pendances de base de donn\u00e9es, puis en testant un flux de jeu \u00e0 la fois. Renommer les \u00e9v\u00e9nements ESX en \u00e9v\u00e9nements QBCore n'est pas une conversion compl\u00e8te. Une migration de personnage \u00e0 l'\u00e9chelle du serveur est un projet distinct.<\/p>","protected":false},"author":1,"featured_media":192929,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2882,2340],"tags":[2858,3001,2950,2859,2940],"class_list":["post-192928","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-framework-conversion","category-lua-scripting","tag-esx","tag-fivem-script","tag-framework","tag-qbcore","tag-qbox"],"_links":{"self":[{"href":"https:\/\/rpcrate.com\/fr\/wp-json\/wp\/v2\/posts\/192928","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rpcrate.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rpcrate.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rpcrate.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rpcrate.com\/fr\/wp-json\/wp\/v2\/comments?post=192928"}],"version-history":[{"count":4,"href":"https:\/\/rpcrate.com\/fr\/wp-json\/wp\/v2\/posts\/192928\/revisions"}],"predecessor-version":[{"id":209815,"href":"https:\/\/rpcrate.com\/fr\/wp-json\/wp\/v2\/posts\/192928\/revisions\/209815"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rpcrate.com\/fr\/wp-json\/wp\/v2\/media\/192929"}],"wp:attachment":[{"href":"https:\/\/rpcrate.com\/fr\/wp-json\/wp\/v2\/media?parent=192928"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rpcrate.com\/fr\/wp-json\/wp\/v2\/categories?post=192928"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rpcrate.com\/fr\/wp-json\/wp\/v2\/tags?post=192928"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}