{"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":"convertendo-scripts-fivem","status":"publish","type":"post","link":"https:\/\/rpcrate.com\/pt\/converting-fivem-scripts\/","title":{"rendered":"Converter Scripts FiveM entre ESX, QBCore e Qbox"},"content":{"rendered":"<p>Converta um recurso FiveM mapeando suas depend\u00eancias de framework, invent\u00e1rio e banco de dados, e ent\u00e3o testando um fluxo de jogo por vez. Renomear eventos ESX para eventos QBCore n\u00e3o \u00e9 uma convers\u00e3o completa. Uma migra\u00e7\u00e3o de personagem em todo o servidor \u00e9 um projeto separado.<\/p>\n<h2 id=\"before-changing-code\">Antes de alterar o c\u00f3digo<\/h2>\n<p>Trabalhe em um servidor de desenvolvimento isolado com uma c\u00f3pia do recurso e um banco de dados descart\u00e1vel. Registre as vers\u00f5es exatas do framework de origem e destino, invent\u00e1rio, biblioteca de direcionamento, biblioteca de UI e licen\u00e7a do recurso. Arquivos protegidos exigem uma vers\u00e3o suportada do autor; a configura\u00e7\u00e3o edit\u00e1vel sozinha pode n\u00e3o ser suficiente.<\/p>\n<h2 id=\"1-inventory-the-integration-points\">1. Inventarie os pontos de integra\u00e7\u00e3o<\/h2>\n<p>Pesquise os arquivos de recurso por <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> e nomes de tabelas SQL. Classifique cada correspond\u00eancia como servidor, cliente ou compartilhada. Liste as entradas esperadas, valores de retorno e comportamento de falha antes de substitu\u00ed-los.<\/p>\n<p>Por exemplo, um fluxo de loja inclui abrir sua UI, verificar o acesso, ler pre\u00e7os, efetuar pagamento, adicionar invent\u00e1rio e salvar o resultado. Converter apenas sua notifica\u00e7\u00e3o deixa o comportamento importante inalterado.<\/p>\n<h2 id=\"2-map-behavior-explicitly\">2. Mapeie o comportamento explicitamente<\/h2>\n<p>Resolva o jogador do framework de destino no servidor no momento da a\u00e7\u00e3o. Identificadores ESX e IDs de personagem QBCore\/Qbox t\u00eam significados diferentes; n\u00e3o gere IDs de personagem a partir de hashes truncados ou sobrescreva identificadores de conta. Mantenha um mapeamento revisado quando os dados existentes precisarem ser movidos.<\/p>\n<p>Escolha a integra\u00e7\u00e3o de invent\u00e1rio de forma deliberada. Nomes de itens, unidades de peso, tratamento de slots, metadados e verifica\u00e7\u00f5es de capacidade variam. N\u00e3o alterne silenciosamente para outro sistema de invent\u00e1rio em caso de falha. Defina a correspond\u00eancia de dinheiro em esp\u00e9cie, saldos banc\u00e1rios e eventuais moedas il\u00edcitas sem tratar contas distintas como equivalentes.<\/p>\n<h2 id=\"3-implement-a-small-adapter\">3. Implemente um pequeno adaptador<\/h2>\n<p>Mantenha as chamadas de jogador, trabalho, dinheiro e invent\u00e1rio espec\u00edficas do framework em um m\u00f3dulo apenas do servidor. Notifica\u00e7\u00f5es do cliente e callbacks da UI pertencem a um m\u00f3dulo cliente separado. Declare as depend\u00eancias reais em <code data-no-translation=\"\" translate=\"no\">fxmanifest.lua<\/code> e inicie-as antes do recurso.<\/p>\n<p>Para Qbox, consulte <a href=\"https:\/\/docs.qbox.re\/resources\/qbx_core\/exports\/server\">os exports do servidor<\/a> e suas diretrizes de compatibilidade. Uma ponte de compatibilidade pode ajudar recursos QB existentes, mas n\u00e3o garante compatibilidade com todos os invent\u00e1rios, consultas de banco de dados ou core modificado.<\/p>\n<h2 id=\"4-preserve-the-trust-boundary\">4. Preserve o limite de confian\u00e7a<\/h2>\n<p>O servidor deve determinar itens permitidos, pre\u00e7os, saldos, permiss\u00f5es de trabalho e conclus\u00e3o de tarefas recompensadas. Trate cada argumento de evento do cliente como n\u00e3o confi\u00e1vel. Um nome de trabalho sozinho n\u00e3o prova que uma entrega ocorreu; um evento repetido n\u00e3o deve pagar repetidamente. Verifique os resultados de d\u00e9bito e entrega de itens, e defina a compensa\u00e7\u00e3o quando a segunda a\u00e7\u00e3o falhar.<\/p>\n<h2 id=\"5-convert-resource-owned-storage\">5. Converta o armazenamento de propriedade do recurso<\/h2>\n<p>Compare os esquemas instalados de origem e destino antes de escrever uma migra\u00e7\u00e3o. Use um script separado e versionado para esses esquemas exatos. Preserve os identificadores originais, placas, metadados e uma tabela persistente de correspond\u00eancias. Informe linhas duplicadas ou sem correspond\u00eancia em vez de ignor\u00e1-las. N\u00e3o altere via SQL saldos gerenciados pelo framework enquanto estiverem carregados na mem\u00f3ria dele.<\/p>\n<h2 id=\"6-verify-and-release\">6. Verifique e libere<\/h2>\n<ol>\n<li>Teste um personagem novo e um existente: login, a a\u00e7\u00e3o convertida, reconex\u00e3o e rein\u00edcio do servidor. Verifique a persist\u00eancia ap\u00f3s cada um.<\/li>\n<li>Teste permiss\u00f5es negadas, fundos insuficientes, invent\u00e1rio cheio, entrada inv\u00e1lida, solicita\u00e7\u00f5es repetidas e desconex\u00f5es durante a opera\u00e7\u00e3o. Confirme que nenhum dinheiro ou item n\u00e3o intencional \u00e9 criado.<\/li>\n<li>Compare as linhas do banco de dados e os saldos antes e depois de a\u00e7\u00f5es de teste conhecidas. Investigue cada diferen\u00e7a inesperada.<\/li>\n<li>Implante os arquivos revisados e qualquer migra\u00e7\u00e3o necess\u00e1ria durante uma janela de manuten\u00e7\u00e3o. Mantenha backups de arquivos\/banco de dados correspondentes e um procedimento de revers\u00e3o que considere as grava\u00e7\u00f5es feitas ap\u00f3s o lan\u00e7amento.<\/li>\n<\/ol>\n<h2 id=\"if-the-conversion-fails\">Se a convers\u00e3o falhar<\/h2>\n<p>Um export ausente geralmente aponta para o recurso\/vers\u00e3o ou ordem de in\u00edcio errados. Um callback que nunca retorna precisa de inspe\u00e7\u00e3o tanto do registro quanto da invoca\u00e7\u00e3o, incluindo argumentos e lado da execu\u00e7\u00e3o. Itens ausentes podem refletir metadados de invent\u00e1rio ou regras de capacidade. Diagnostique o limite de falha em vez de adicionar shims de compatibilidade amplos.<\/p>\n<h2 id=\"reference-documentation\">Documenta\u00e7\u00e3o de refer\u00eancia<\/h2>\n<p><a href=\"https:\/\/docs.fivem.net\/docs\/scripting-reference\/resource-manifest\/\">Cfx.re \u2014 manifesto de recurso<\/a> \u00b7 <a href=\"https:\/\/docs.fivem.net\/docs\/developers\/server-security\/\">Cfx.re \u2014 seguran\u00e7a do servidor<\/a><\/p>\n<p><a href=\"https:\/\/rpcrate.com\/pt\/uso-simultaneo-esx-qbcore\/\">Uso simult\u00e2neo de ESX e QBCore: por que n\u00e3o \u00e9 vi\u00e1vel<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Converta um recurso FiveM mapeando suas depend\u00eancias de framework, invent\u00e1rio e banco de dados, e ent\u00e3o testando um fluxo de jogo por vez. Renomear eventos ESX para eventos QBCore n\u00e3o \u00e9 uma convers\u00e3o completa. Uma migra\u00e7\u00e3o de personagem em todo o servidor \u00e9 um projeto separado.<\/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\/pt\/wp-json\/wp\/v2\/posts\/192928","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rpcrate.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rpcrate.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rpcrate.com\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rpcrate.com\/pt\/wp-json\/wp\/v2\/comments?post=192928"}],"version-history":[{"count":4,"href":"https:\/\/rpcrate.com\/pt\/wp-json\/wp\/v2\/posts\/192928\/revisions"}],"predecessor-version":[{"id":209815,"href":"https:\/\/rpcrate.com\/pt\/wp-json\/wp\/v2\/posts\/192928\/revisions\/209815"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rpcrate.com\/pt\/wp-json\/wp\/v2\/media\/192929"}],"wp:attachment":[{"href":"https:\/\/rpcrate.com\/pt\/wp-json\/wp\/v2\/media?parent=192928"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rpcrate.com\/pt\/wp-json\/wp\/v2\/categories?post=192928"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rpcrate.com\/pt\/wp-json\/wp\/v2\/tags?post=192928"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}