{"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\/es\/converting-fivem-scripts\/","title":{"rendered":"Convierte scripts de FiveM entre ESX, QBCore y Qbox"},"content":{"rendered":"<p>Convierte un recurso de FiveM mapeando sus dependencias de framework, inventario y base de datos, luego prueba un flujo de juego a la vez. Renombrar eventos de ESX a eventos de QBCore no es una conversi\u00f3n completa. Una migraci\u00f3n de personajes a nivel de servidor es un proyecto aparte.<\/p>\n<h2 id=\"before-changing-code\">Antes de cambiar el c\u00f3digo<\/h2>\n<p>Trabaja en un servidor de desarrollo aislado con una copia del recurso y una base de datos desechable. Registra las versiones exactas del framework de origen y destino, el inventario, la biblioteca de targeting, la biblioteca de UI y la licencia del recurso. Los archivos protegidos requieren una versi\u00f3n compatible del autor; la configuraci\u00f3n editable por s\u00ed sola puede no ser suficiente.<\/p>\n<h2 id=\"1-inventory-the-integration-points\">1. Inventar\u00eda los puntos de integraci\u00f3n<\/h2>\n<p>Busca en los archivos de recursos <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> y nombres de tablas SQL. Clasifica cada coincidencia como de servidor, cliente o compartida. Enumera las entradas esperadas, los valores de retorno y el comportamiento en caso de fallo antes de reemplazarlo.<\/p>\n<p>Por ejemplo, un flujo de tienda incluye abrir su interfaz de usuario, verificar el acceso, leer precios, cobrar el pago, a\u00f1adir inventario y guardar el resultado. Convertir solo su notificaci\u00f3n deja el comportamiento importante sin cambios.<\/p>\n<h2 id=\"2-map-behavior-explicitly\">2. Mapea el comportamiento expl\u00edcitamente<\/h2>\n<p>Resuelve el jugador del framework de destino en el servidor en el momento de la acci\u00f3n. Los identificadores de ESX y los IDs de personaje de QBCore\/Qbox tienen significados diferentes; no generes IDs de personaje a partir de hashes truncados ni sobrescribas identificadores de cuenta. Mant\u00e9n un mapeo revisado cuando los datos existentes deban moverse.<\/p>\n<p>Elige la integraci\u00f3n de inventario deliberadamente. Los nombres de los \u00edtems, las unidades de peso, el manejo de ranuras, los metadatos y las comprobaciones de capacidad difieren. No recurras silenciosamente entre sistemas de inventario. Decide c\u00f3mo se mapean el efectivo, los saldos bancarios y cualquier mec\u00e1nica de moneda il\u00edcita sin tratar cuentas no relacionadas como equivalentes.<\/p>\n<h2 id=\"3-implement-a-small-adapter\">3. Implementa un peque\u00f1o adaptador<\/h2>\n<p>Mant\u00e9n las llamadas espec\u00edficas del framework para el jugador, el trabajo, el dinero y el inventario en un m\u00f3dulo solo de servidor. Las notificaciones del cliente y las devoluciones de llamada de la interfaz de usuario pertenecen a un m\u00f3dulo de cliente separado. Declara las dependencias reales en <code data-no-translation=\"\" translate=\"no\">fxmanifest.lua<\/code> e in\u00edcialas antes del recurso.<\/p>\n<p>Para Qbox, consulta <a href=\"https:\/\/docs.qbox.re\/resources\/qbx_core\/exports\/server\">las exportaciones del servidor<\/a> y su gu\u00eda de compatibilidad. Un puente de compatibilidad puede ayudar a los recursos QB existentes, pero no garantiza la compatibilidad con todos los inventarios, consultas de base de datos o n\u00facleos modificados.<\/p>\n<h2 id=\"4-preserve-the-trust-boundary\">4. Preserva el l\u00edmite de confianza<\/h2>\n<p>El servidor debe determinar los \u00edtems permitidos, los precios, los saldos, los permisos de trabajo y la finalizaci\u00f3n de las tareas recompensadas. Trata cada argumento de evento del cliente como no confiable. Un nombre de trabajo por s\u00ed solo no prueba que se haya realizado una entrega; un evento repetido no debe pagar repetidamente. Verifica tanto los resultados del d\u00e9bito como de la entrega de \u00edtems, y define una compensaci\u00f3n cuando la segunda acci\u00f3n falla.<\/p>\n<h2 id=\"5-convert-resource-owned-storage\">5. Convierte el almacenamiento propiedad del recurso<\/h2>\n<p>Compara el esquema de origen y destino instalado antes de escribir una migraci\u00f3n. Utiliza un script separado y versionado para ese esquema exacto. Mant\u00e9n los identificadores originales, las matr\u00edculas, los metadatos y una tabla de correspondencias persistente. Informa de las filas duplicadas o no mapeadas en lugar de ignorarlas. No modifiques los saldos propiedad del framework a trav\u00e9s de SQL mientras el framework los tenga cargados en memoria.<\/p>\n<h2 id=\"6-verify-and-release\">6. Verifica y lanza<\/h2>\n<ol>\n<li>Prueba un personaje nuevo y uno existente: inicio de sesi\u00f3n, la acci\u00f3n convertida, reconexi\u00f3n y reinicio del servidor. Verifica la persistencia despu\u00e9s de cada uno.<\/li>\n<li>Prueba los permisos denegados, fondos insuficientes, inventario lleno, entrada inv\u00e1lida, solicitudes repetidas y desconexiones durante la operaci\u00f3n. Confirma que no se crean dinero o \u00edtems no deseados.<\/li>\n<li>Compara las filas de la base de datos y los saldos antes y despu\u00e9s de las acciones de prueba conocidas. Investiga cada diferencia inesperada.<\/li>\n<li>Despliega los archivos revisados y cualquier migraci\u00f3n requerida durante una ventana de mantenimiento. Mant\u00e9n copias de seguridad de archivos\/bases de datos coincidentes y un procedimiento de reversi\u00f3n que tenga en cuenta las escrituras realizadas despu\u00e9s del lanzamiento.<\/li>\n<\/ol>\n<h2 id=\"if-the-conversion-fails\">Si la conversi\u00f3n falla<\/h2>\n<p>Una exportaci\u00f3n ausente suele apuntar a un recurso\/versi\u00f3n o un orden de inicio incorrectos. Una devoluci\u00f3n de llamada que nunca regresa necesita una inspecci\u00f3n tanto del registro como de la invocaci\u00f3n, incluidos los argumentos y el lado de la ejecuci\u00f3n. Los \u00edtems que faltan pueden reflejar metadatos de inventario o reglas de capacidad. Diagnostica el l\u00edmite que falla en lugar de a\u00f1adir parches de compatibilidad amplios.<\/p>\n<h2 id=\"reference-documentation\">Documentaci\u00f3n de referencia<\/h2>\n<p><a href=\"https:\/\/docs.fivem.net\/docs\/scripting-reference\/resource-manifest\/\">Cfx.re \u2014 manifiesto de recursos<\/a> \u00b7 <a href=\"https:\/\/docs.fivem.net\/docs\/developers\/server-security\/\">Cfx.re \u2014 seguridad del servidor<\/a><\/p>\n<p><a href=\"https:\/\/rpcrate.com\/es\/uso-simultaneo-de-esx-qbcore\/\">Uso simult\u00e1neo de ESX y QBCore: \u00bfPor qu\u00e9 no es viable?<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Convierte un recurso de FiveM mapeando sus dependencias de framework, inventario y base de datos, luego prueba un flujo de juego a la vez. Renombrar eventos de ESX a eventos de QBCore no es una conversi\u00f3n completa. Una migraci\u00f3n de personajes a nivel de servidor es un proyecto aparte.<\/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\/es\/wp-json\/wp\/v2\/posts\/192928","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rpcrate.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rpcrate.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rpcrate.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rpcrate.com\/es\/wp-json\/wp\/v2\/comments?post=192928"}],"version-history":[{"count":4,"href":"https:\/\/rpcrate.com\/es\/wp-json\/wp\/v2\/posts\/192928\/revisions"}],"predecessor-version":[{"id":209815,"href":"https:\/\/rpcrate.com\/es\/wp-json\/wp\/v2\/posts\/192928\/revisions\/209815"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rpcrate.com\/es\/wp-json\/wp\/v2\/media\/192929"}],"wp:attachment":[{"href":"https:\/\/rpcrate.com\/es\/wp-json\/wp\/v2\/media?parent=192928"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rpcrate.com\/es\/wp-json\/wp\/v2\/categories?post=192928"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rpcrate.com\/es\/wp-json\/wp\/v2\/tags?post=192928"}],"curies":[{"name":"gracias","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}