├── .gitattributes ├── package.json ├── README.md └── index.js /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fivem-script-converter", 3 | "version": "1.1.2", 4 | "description": "a fivem script converter", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [ 10 | "Fivem", 11 | "ESX", 12 | "Qbus" 13 | ], 14 | "author": "Amped#5557", 15 | "license": "ISC", 16 | "dependencies": { 17 | "colors": "^1.4.0", 18 | "finalhandler": "^1.1.2", 19 | "fs": "0.0.1-security", 20 | "node-fetch": "^3.2.0", 21 | "requestify": "^0.2.5", 22 | "router": "^1.3.6" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 |

4 | animated 5 |

6 | 7 | --- 8 | 9 |

10 | GitHub last commit 11 | 12 | 13 | 14 |
15 | GitHub language count 16 | GitHub top language 17 |
18 |

19 | 20 | --- 21 | 22 | # THIS IS A LIBRARY THIS WILL ONLY WORK IN JS USE THE CLI FOR NORMAL USE 23 | 24 | --- 25 | ## How it works 26 | 27 | This libary can convert FiveM ESX scripts to Qbus and Qbus to ESX 28 | 29 | --- 30 | 31 | ### Usage 32 | 33 | ```js 34 | const converter = require('fivem-script-converter'); 35 | 36 | // to convert a qbus script to esx 37 | converter.qbustoesx('path/to/qbus/script.lua'); 38 | // =============================== 39 | 40 | 41 | // to convert a esx script to qbus 42 | converter.esxtoqbus('path/to/esx/script.lua'); 43 | // =============================== 44 | ``` 45 | 46 | --- 47 | 48 | # Fivem Script Converter CLI 49 | 50 | 51 | ## Discord 52 | 53 | 54 | ## Npm Page 55 | 56 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const colors = require('colors'); 3 | var requestify = require('requestify'); 4 | var pjson = require('./package.json'); 5 | 6 | console.log(" __ ___ __ ___ ___ __ ".brightCyan) 7 | console.log(" / |/ /__ ____/ /__ / _ )__ __ / _ | __ _ ___ ___ ___/ / ".brightCyan) 8 | console.log(" / /|_/ / _ `/ _ / -_) / _ / // / / __ |/ ' \\/ _ \\/ -_) _ / ".brightCyan) 9 | console.log("/_/ /_/\\_,_/\\_,_/\\__/ /____/\\_, / /_/ |_/_/_/_/ .__/\\__/\\_,_/ ".brightCyan) 10 | console.log(" /___/ /_/ ".brightCyan) 11 | console.log("\n [+] Fivem Qbus to Esx / Esx to Qbus Converter [+] ".brightCyan) 12 | 13 | requestify.get('https://ampedscripts.nl/version.txt') 14 | .then(function(response) { 15 | // Get the response body (JSON parsed or jQuery object for XMLs) 16 | var responselmae = response.getBody(); 17 | var version = pjson.version; 18 | if (response.getBody() === `${version}\n`) { 19 | } else { 20 | console.log(`\n\nThis version is outdated make sure to npm i fivem-script-converter\n\nCurrent Version: ${version}\nNewest Version: ${responselmae}`); 21 | process.exit(); 22 | } 23 | }); 24 | 25 | 26 | var esxtoqbus = function esxtoqbus(file){ 27 | var code = fs.readFileSync(file,'utf8') 28 | 29 | code = code.replaceAll(`TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)`, `TriggerEvent('QBCore:GetObject', function(obj) QBCore = obj end)`); 30 | code = code.replaceAll(`while ESX == nil do`, `while QBCore == nil do`); 31 | code = code.replaceAll(`ESX.TriggerServerCallback`, `QBCore.Functions.TriggerCallback`); 32 | code = code.replaceAll(`ESX.Game.GetVehicleProperties`, `QBCore.Functions.GetVehicleProperties`); 33 | code = code.replaceAll(`ESX.Game.DeleteVehicle`, `QBCore.Functions.DeleteVehicle`); 34 | code = code.replaceAll(`ESX.Game.SpawnVehicle`, `QBCore.Functions.SpawnVehicle`); 35 | code = code.replaceAll(`ESX.Game.GetClosestVehicle`, `QBCore.Functions.GetClosestVehicle`); 36 | code = code.replaceAll(`ESX = nil`, `QBCore = nil `); 37 | code = code.replaceAll(`ESX = nil`, `QBCore = nil `); 38 | code = code.replaceAll(`RegisterNetEvent('esx:playerLoaded'`, `RegisterNetEvent('QBCore:Client:OnPlayerLoaded'`); 39 | code = code.replaceAll(`AddEventHandler('esx:playerLoaded',`, `AddEventHandler('QBCore:Client:OnPlayerLoaded',`); 40 | code = code.replaceAll(`RegisterNetEvent('esx:setJob'`, `RegisterNetEvent('QBCore:Client:OnJobUptade'`); 41 | code = code.replaceAll(`AddEventHandler('esx:setJob',`, `AddEventHandler('QBCore:Client:OnJobUptade', `); 42 | code = code.replaceAll(`RegisterNetEvent('esx:onPlayerDeath'`, `RegisterNetEvent('QBCore:Client:OnPlayerUnload'`); 43 | code = code.replaceAll(`AddEventHandler('esx:onPlayerDeath',`, `AddEventHandler('QBCore:Client:OnPlayerUnload',`); 44 | code = code.replaceAll(`ESX.Game.GetClosestPlayer()`, `QBCore.Functions.GetClosestPlayer()`); 45 | code = code.replaceAll(`ESX.UI.Menu.Open`, `QBCore.UI.Menu.Open`); 46 | code = code.replaceAll(`ESX.UI.Menu.CloseAll()`, `QBCore.UI.Menu.CloseAll()`); 47 | code = code.replaceAll(`xPlayer.getInventoryItem`, `xPlayer.Functions.GetItemByName `); 48 | code = code.replaceAll(`RegisterNetEvent('esx:setJob'`, `RegisterNetEvent('QBCore:Client:OnJobUpdate'`); 49 | code = code.replaceAll(`AddEventHandler('esx:setJob', function(job)`, `AddEventHandler('QBCore:Client:OnJobUpdate', function(job)`); 50 | code = code.replaceAll(`xPlayer.removeAccountMoney('bank', amount)`, `ply.Functions.AddMoney('bank', amount, "Bank depost")`); 51 | code = code.replaceAll(`xPlayer.addMoney(amount)`, `ply.Functions.RemoveMoney('cash', amount, "Bank depost")`); 52 | code = code.replaceAll(`xPlayer.getAccount('bank').money`, `ply.PlayerData.money["bank"]`); 53 | code = code.replaceAll(`xPlayer.removeInventoryItem `, `xPlayer.Functions.RemoveItem `); 54 | code = code.replaceAll(`xPlayer.addInventoryItem`, `xPlayer.Functions.AddItem`); 55 | code = code.replaceAll(`ESX.GetPlayerFromId`, `QBCore.Functions.GetPlayer`); 56 | code = code.replaceAll(`ESX.GetPlayerFromIdentifier`, `QBCore.Functions.GetPlayerByCitizenId`); 57 | code = code.replaceAll(`ESX.Math.Trim(value)`, `QBCore.Functions.MathTrim`); 58 | code = code.replaceAll(`ESX.GetPlayerData()`, `QBCore.Functions.GetPlayerData()`); 59 | code = code.replaceAll(`ESX.RegisterUsableItem()`, `QBCore.Functions.CreateUseableItem()`); 60 | code = code.replaceAll(`xPlayer.removeMoney(money)`, `Player.Functions.RemoveMoney()`); 61 | code = code.replaceAll(`ESX.RegisterServerCallback()`, `QBCore.Functions.CreateCallback()`); 62 | code = code.replaceAll(`ESX.TriggerServerCallback()`, `QBCore.Functions.TriggerCallback()`); 63 | code = code.replaceAll(`ESX.Game.SetVehicleProperties`, `QBCore.Functions.SetVehicleProperties`); 64 | code = code.replaceAll(`LoadModel`, `QBCore.Functions.LoadModel`); 65 | code = code.replaceAll(`ESX.RegisterServerCallback("system:fetchStatus", function(source, cb) 66 | local src = source 67 | local user = ESX.GetPlayerFromId(src) 68 | local fetch = [[ 69 | SELECT 70 | skills 71 | FROM 72 | users 73 | WHERE 74 | identifier = @identifier 75 | ]] 76 | MySQL.Async.fetchScalar(fetch, { 77 | ["@identifier"] = user.identifier 78 | }, function(status) 79 | if status ~= nil then 80 | cb(json.decode(status)) 81 | else 82 | cb(nil) 83 | end 84 | end) 85 | end)`, `QBCore.Functions.CreateCallback('system:fetchStatus', function(source, cb) 86 | local Player = QBCore.Functions.GetPlayer(source) 87 | if Player then 88 | exports['ghmattimysql']:execute('SELECT skills FROM players WHERE citizenid = @citizenid', { 89 | ['@citizenid'] = Player.PlayerData.citizenid 90 | }, function(status) 91 | if status ~= nil then 92 | cb(json.decode(status)) 93 | else 94 | cb(nil) 95 | end 96 | end) 97 | else 98 | cb() 99 | end 100 | end)`); 101 | code = code.replaceAll(`RegisterCommand `, `QBCore.Commands.Add()`); 102 | code = code.replaceAll(`local user = ESX.GetPlayerFromId(src)`, `local Player = QBCore.Functions.GetPlayer(source)`); 103 | code = code.replaceAll(`["@identifier"] = user.identifier`, `['@citizenid'] = Player.PlayerData.citizenid`); 104 | 105 | fs.writeFileSync('output.lua', code, function (err) { 106 | if (err) return console.log(err); 107 | }); 108 | 109 | console.log(`Succesfully converted the ${file} from ESX to Qbus!`) 110 | }; 111 | 112 | var qbustoesx = function qbustoesx(file){ 113 | var code = fs.readFileSync(file,'utf8') 114 | code = code.replaceAll(`TriggerEvent('QBCore:GetObject', function(obj) QBCore = obj end)`, `TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)`); 115 | code = code.replaceAll(`QBCore = exports['qb-core']:GetCoreObject()`, `TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)`); 116 | code = code.replaceAll(`local QBCore = exports['qb-core']:GetCoreObject()`,`ESX = nil\nTriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)`); 117 | code = code.replaceAll(`while QBCore == nil do`, `while ESX == nil do`); 118 | code = code.replaceAll(`QBCore.Functions.TriggerCallback`, `ESX.TriggerServerCallback`); 119 | code = code.replaceAll(`QBCore.Functions.GetVehicleProperties`, `ESX.Game.GetVehicleProperties`); 120 | code = code.replaceAll(`QBCore.Functions.DeleteVehicle`, `ESX.Game.DeleteVehicle`); 121 | code = code.replaceAll(`QBCore.Functions.SpawnVehicle`, `ESX.Game.SpawnVehicle`); 122 | code = code.replaceAll(`QBCore.Functions.GetClosestVehicle`, `ESX.Game.GetClosestVehicle`); 123 | code = code.replaceAll(`QBCore = nil`, `ESX = nil`); 124 | code = code.replaceAll(`QBCore == nil`, `ESX == nil`); 125 | code = code.replaceAll(`RegisterNetEvent('QBCore:Client:OnPlayerLoaded'`, `RegisterNetEvent('esx:playerLoaded'`); 126 | code = code.replaceAll(`AddEventHandler('QBCore:Client:OnPlayerLoaded',`, `AddEventHandler('esx:playerLoaded',`); 127 | code = code.replaceAll(`RegisterNetEvent('QBCore:Client:OnJobUptade'`, `RegisterNetEvent('esx:setJob'`); 128 | code = code.replaceAll(`AddEventHandler('QBCore:Client:OnJobUptade', `, `AddEventHandler('esx:setJob',`); 129 | code = code.replaceAll(`RegisterNetEvent('QBCore:Client:OnPlayerUnload'`, `RegisterNetEvent('esx:onPlayerDeath'`); 130 | code = code.replaceAll(`AddEventHandler('QBCore:Client:OnPlayerUnload',`, `AddEventHandler('esx:onPlayerDeath',`); 131 | code = code.replaceAll(`QBCore.Functions.GetClosestPlayer()`, `ESX.Game.GetClosestPlayer()`); 132 | code = code.replaceAll(`QBCore.UI.Menu.Open`, `ESX.UI.Menu.Open`); 133 | code = code.replaceAll(`QBCore.UI.Menu.CloseAll()`, `ESX.UI.Menu.CloseAll()`); 134 | code = code.replaceAll(`xPlayer.Functions.GetItemByName `, `xPlayer.getInventoryItem`); 135 | code = code.replaceAll(`RegisterNetEvent('QBCore:Client:OnJobUpdate'`, `RegisterNetEvent('esx:setJob'`); 136 | code = code.replaceAll(`AddEventHandler('QBCore:Client:OnJobUpdate', function(job`, `AddEventHandler('esx:setJob', function(job)`); 137 | code = code.replaceAll(`ply.Functions.AddMoney`, `xPlayer.removeAccountMoney`); 138 | code = code.replaceAll(`ply.Functions.RemoveMoney`, `xPlayer.addMoney`); 139 | code = code.replaceAll(`ply.PlayerData.money["bank"]`, `xPlayer.getAccount('bank').money`); 140 | code = code.replaceAll(`xPlayer.Functions.RemoveItem `, `xPlayer.removeInventoryItem`); 141 | code = code.replaceAll(`xPlayer.Functions.AddItem`, `xPlayer.addInventoryItem`); 142 | code = code.replaceAll(`QBCore.Functions.GetPlayer`, `ESX.GetPlayerFromId`); 143 | code = code.replaceAll(`QBCore.Functions.GetPlayerByCitizenId`, `ESX.GetPlayerFromIdentifier`); 144 | code = code.replaceAll(`QBCore.Functions.MathTrim`, `ESX.Math.Trim(value)`); 145 | code = code.replaceAll(`QBCore.Functions.GetPlayerData`, `ESX.GetPlayerData`); 146 | code = code.replaceAll(`QBCore.Functions.CreateUseableItem`, `ESX.RegisterUsableItem`); 147 | code = code.replaceAll(`Player.Functions.RemoveMoney`, `xPlayer.removeMoney`); 148 | code = code.replaceAll(`QBCore.Functions.CreateCallback`, `ESX.RegisterServerCallback`); 149 | code = code.replaceAll(`QBCore.Functions.TriggerCallback`, `ESX.TriggerServerCallback`); 150 | code = code.replaceAll(`QBCore.Functions.CreateCallback('system:fetchStatus', function(source, cb) 151 | local Player = QBCore.Functions.GetPlayer(source) 152 | 153 | if Player then 154 | exports['ghmattimysql']:execute('SELECT skills FROM players WHERE citizenid = @citizenid', { 155 | ['@citizenid'] = Player.PlayerData.citizenid 156 | }, function(status) 157 | if status ~= nil then 158 | cb(json.decode(status)) 159 | else 160 | cb(nil) 161 | end 162 | end) 163 | else 164 | cb() 165 | end 166 | end)`, `ESX.RegisterServerCallback("system:fetchStatus", function(source, cb) 167 | local src = source 168 | local user = ESX.GetPlayerFromId(src) 169 | 170 | 171 | local fetch = [[ 172 | SELECT 173 | skills 174 | FROM 175 | users 176 | WHERE 177 | identifier = @identifier 178 | ]] 179 | 180 | MySQL.Async.fetchScalar(fetch, { 181 | ["@identifier"] = user.identifier 182 | 183 | }, function(status) 184 | 185 | if status ~= nil then 186 | cb(json.decode(status)) 187 | else 188 | cb(nil) 189 | end 190 | 191 | end) 192 | end)`); 193 | code = code.replaceAll(`QBCore.Commands.Add`, `RegisterCommand`); 194 | code = code.replaceAll(`local Player = QBCore.Functions.GetPlayer(source)`, `local user = ESX.GetPlayerFromId(src)`); 195 | code = code.replaceAll(`['@citizenid'] = Player.PlayerData.citizenid`, `["@identifier"] = user.identifier`); 196 | 197 | fs.writeFileSync('output.lua', code, function (err) { 198 | if (err) return console.log(err); 199 | }); 200 | 201 | console.log(`Succesfully converted the ${file} from Qbus to ESX!`) 202 | }; 203 | 204 | module.exports.qbustoesx = qbustoesx; 205 | module.exports.esxtoqbus = esxtoqbus; --------------------------------------------------------------------------------