From bad05a81ca7491006fb00d431979bb92ea77cec0 Mon Sep 17 00:00:00 2001 From: Andyyy7666 <86536434+Andyyy7666@users.noreply.github.com> Date: Sat, 11 Nov 2023 19:01:40 +0100 Subject: [PATCH] feat: esx backwards compatibility --- compatibility/esx/client.lua | 62 +++++++++++++++++++++++++----------- compatibility/esx/locale.lua | 29 +++++++++++++++++ compatibility/esx/server.lua | 52 ++++++++++++++++++++++-------- fxmanifest.lua | 4 ++- 4 files changed, 115 insertions(+), 32 deletions(-) create mode 100644 compatibility/esx/locale.lua diff --git a/compatibility/esx/client.lua b/compatibility/esx/client.lua index 62b667e..68d65f2 100644 --- a/compatibility/esx/client.lua +++ b/compatibility/esx/client.lua @@ -8,6 +8,7 @@ NDCore.Streaming = {} NDCore.UI = {} NDCore.UI.HUD = {} NDCore.UI.Menu = {} +NDCore.PlayerData = {} local uiMetatable = { __index = function(table, key) @@ -35,6 +36,7 @@ end) function NDCore.GetPlayerData() local player = NDCore.getPlayer() + if not player then return {} end player.Accounts = { Bank = player.bank, @@ -42,7 +44,31 @@ function NDCore.GetPlayerData() Black = player.Cash } - -- add more here + if player.jobInfo then + player.job = { + id = player.job, + name = player.job, + label = player.jobInfo.label, + grade = player.jobInfo.rank, + grade_name = player.jobInfo.rankName, + grade_label = player.jobInfo.rankName, + grade_salary = 0, + skin_male = {}, + skin_female = {} + } + end + + player.coords = GetEntityCoords(cache.ped) + player.loadout = {} + player.maxWeight = exports.ox_inventory:GetPlayerMaxWeight() + player.money = player.Accounts.Money + player.sex = player.gender + player.firstName = player.firstname + player.lastName = player.lastname + player.dateofbirth = player.dob + player.height = 120 + player.dead = LocalPlayer.state.dead or false + NDCore.PlayerData = player return player end @@ -62,7 +88,7 @@ function NDCore.Progressbar(message, lenght, options) newOptions.anim = {} if options.animation.type == "anim" then if options.animation.dict then - newOptions.anim.dict = options.animation.dict, + newOptions.anim.dict = options.animation.dict end if options.animation.lib then newOptions.anim.clip = options.animation.lib @@ -319,11 +345,9 @@ function NDCore.Game.SpawnLocalObject(model, coords, cb) end local entity = CreateObject(model, coords.x, coords.y, coords.z, false, false, false) entity = lib.waitFor(function() - if DoesEntityExist(entity) end + if DoesEntityExist(entity) then return entity end end) - if cb then - cb(entity) - end + if cb then cb(entity) end return entity end @@ -333,11 +357,9 @@ function NDCore.Game.SpawnLocalVehicle(model, coords, heading, cb) end local entity = CreateVehicle(model, coords.x, coords.y, coords.z, heading, false, false, false) entity = lib.waitFor(function() - if DoesEntityExist(entity) end + if DoesEntityExist(entity) then return entity end end) - if cb then - cb(entity) - end + if cb then cb(entity) end return entity end @@ -347,11 +369,9 @@ function NDCore.Game.SpawnObject(model, coords, cb) end local entity = CreateObject(model, coords.x, coords.y, coords.z, true, false, false) entity = lib.waitFor(function() - if DoesEntityExist(entity) end + if DoesEntityExist(entity) then return entity end end) - if cb then - cb(entity) - end + if cb then cb(entity) end return entity end @@ -361,11 +381,9 @@ function NDCore.Game.SpawnVehicle(model, coords, heading, cb) end local entity = CreateVehicle(model, coords.x, coords.y, coords.z, heading, true, false, false) entity = lib.waitFor(function() - if DoesEntityExist(entity) end + if DoesEntityExist(entity) then return entity end end) - if cb then - cb(entity) - end + if cb then cb(entity) end return entity end @@ -384,3 +402,11 @@ function NDCore.Game.Teleport(entity, coords, cb) cb() end end + +AddEventHandler("ND:characterLoaded", function() + NDCore.GetPlayerData() +end) + +AddEventHandler("ND:updateCharacter", function() + NDCore.GetPlayerData() +end) diff --git a/compatibility/esx/locale.lua b/compatibility/esx/locale.lua new file mode 100644 index 0000000..9ec37e5 --- /dev/null +++ b/compatibility/esx/locale.lua @@ -0,0 +1,29 @@ +local config_locale = "en" +Locales = {} + +function Translate(str, ...) -- Translate string + if not str then + print(("[^1ERROR^7] Resource ^5%s^7 You did not specify a parameter for the Translate function or the value is nil!"):format(GetInvokingResource() or GetCurrentResourceName())) + return 'Given translate function parameter is nil!' + end + if Locales[config_locale] then + if Locales[config_locale][str] then + return string.format(Locales[config_locale][str], ...) + elseif config_locale ~= 'en' and Locales['en'] and Locales['en'][str] then + return string.format(Locales['en'][str], ...) + else + return 'Translation [' .. config_locale .. '][' .. str .. '] does not exist' + end + elseif config_locale ~= 'en' and Locales['en'] and Locales['en'][str] then + return string.format(Locales['en'][str], ...) + else + return 'Locale [' .. config_locale .. '] does not exist' + end +end + +function TranslateCap(str, ...) -- Translate string first char uppercase + return _(str, ...):gsub("^%l", string.upper) +end + +_ = Translate +_U = TranslateCap diff --git a/compatibility/esx/server.lua b/compatibility/esx/server.lua index 41a1b3e..3c195d2 100644 --- a/compatibility/esx/server.lua +++ b/compatibility/esx/server.lua @@ -4,14 +4,50 @@ local itemNames local registeredItems = {} local function getAmmoFromWeapon(weapon) + if not weapon then return end for item, data in pairs(exports.ox_inventory:Items()) do - if data.weapon and data.model:lower() == weapon:lower then + if data.weapon and data.model and data.model:lower() == weapon:lower() then return data.ammoname end end end local function createPlayerFunctions(self) + self.Accounts = { + Bank = self.bank, + Money = self.Cash, + Black = self.Cash + } + + if self.jobInfo then + self.job = { + id = self.job, + name = self.job, + label = self.jobInfo.label, + grade = self.jobInfo.rank, + grade_name = self.jobInfo.rankName, + grade_label = self.jobInfo.rankName, + grade_salary = 0, + skin_male = {}, + skin_female = {} + } + end + + local ped = GetPlayerPed(self.source) + if DoesEntityExist(ped) then + self.coords = GetEntityCoords() + end + + self.loadout = {} + self.maxWeight = 30000 + self.money = self.Accounts.Money + self.sex = self.gender + self.firstName = self.firstname + self.lastName = self.lastname + self.dateofbirth = self.dob + self.height = 120 + self.dead = self.getMetadata("dead") + function self.addAccountMoney(account, amount) local amount = tonumber(amount) if not amount or amount <= 0 or account ~= "bank" and account ~= "cash" then return end @@ -326,20 +362,10 @@ function NDCore.OneSync.SpawnPedInVehicle(model, vehicle, seat, cb) cb(value) end -AddEventHandler("esx:playerDropped", function(src) - TriggerEvent("ND:characterUnloaded", src, NDCore.getPlayer(src)) -end - -AddEventHandler("esx:playerLoaded", function(src) - TriggerEvent("ND:characterLoaded", NDCore.getPlayer(src)) -end - AddEventHandler("ND:characterUnloaded", function(src, character) TriggerEvent("esx:playerDropped", src, "") -end +end) AddEventHandler("ND:characterLoaded", function(character) TriggerEvent("esx:playerLoaded", character.source, createPlayerFunctions(character)) -end - - +end) diff --git a/fxmanifest.lua b/fxmanifest.lua index 35cd0a8..0ea2ae7 100644 --- a/fxmanifest.lua +++ b/fxmanifest.lua @@ -33,7 +33,9 @@ server_scripts { files { "init.lua", - "client/vehicle/data.lua" + "client/vehicle/data.lua", + "compatibility/**/locale.lua" } dependency "oxmysql" +provide "es_extended"