From bb868b864d5d67e550caef090bdacebaaad1a44c Mon Sep 17 00:00:00 2001 From: Csoki Date: Sun, 22 Jan 2023 13:53:25 +0100 Subject: [PATCH 01/41] refactor(server/classes/player): player statebag --- [core]/es_extended/server/classes/player.lua | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/[core]/es_extended/server/classes/player.lua b/[core]/es_extended/server/classes/player.lua index 0af5ad6b..a9c2fa54 100644 --- a/[core]/es_extended/server/classes/player.lua +++ b/[core]/es_extended/server/classes/player.lua @@ -26,11 +26,12 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, ExecuteCommand(('add_principal identifier.%s group.%s'):format(self.license, self.group)) - Player(self.source).state:set("identifier", self.identifier, true) - Player(self.source).state:set("license", self.license, true) - Player(self.source).state:set("job", self.job, true) - Player(self.source).state:set("group", self.group, true) - Player(self.source).state:set("name", self.name, true) + local stateBag = Player(self.source).state + stateBag:set("identifier", self.identifier, true) + stateBag:set("license", self.license, true) + stateBag:set("job", self.job, true) + stateBag:set("group", self.group, true) + stateBag:set("name", self.name, true) function self.triggerEvent(eventName, ...) TriggerClientEvent(eventName, self.source, ...) From becdf1ec4933a318de6118261e2716a5004afa37 Mon Sep 17 00:00:00 2001 From: Csoki Date: Sun, 22 Jan 2023 14:14:20 +0100 Subject: [PATCH 02/41] refactor(server/functions): ESX.GetPlayerFromIdentifier add new table: Core.playersByIdentifier removed for loop from GetPlayerFromIdentifier. --- [core]/es_extended/server/common.lua | 2 ++ [core]/es_extended/server/functions.lua | 6 +----- [core]/es_extended/server/main.lua | 3 +++ 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/[core]/es_extended/server/common.lua b/[core]/es_extended/server/common.lua index 6aaf87c8..c130f59c 100644 --- a/[core]/es_extended/server/common.lua +++ b/[core]/es_extended/server/common.lua @@ -14,6 +14,8 @@ Core.Pickups = {} Core.PickupId = 0 Core.PlayerFunctionOverrides = {} +Core.playersByIdentifier = {} + AddEventHandler("esx:getSharedObject", function() local Invoke = GetInvokingResource() print(("[^1ERROR^7] Resource ^5%s^7 Used the ^5getSharedObject^7 Event, this event ^1no longer exists!^7 Visit https://documentation.esx-framework.org/tutorials/sharedevent for how to fix!"):format(Invoke)) diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index 3d2ffe32..f0bf792a 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -245,11 +245,7 @@ function ESX.GetPlayerFromId(source) end function ESX.GetPlayerFromIdentifier(identifier) - for k, v in pairs(ESX.Players) do - if v.identifier == identifier then - return v - end - end + return Core.playersByIdentifier[identifier] end function ESX.GetIdentifier(playerId) diff --git a/[core]/es_extended/server/main.lua b/[core]/es_extended/server/main.lua index 8b4c00d3..ffc8e114 100644 --- a/[core]/es_extended/server/main.lua +++ b/[core]/es_extended/server/main.lua @@ -280,6 +280,7 @@ function loadESXPlayer(identifier, playerId, isNew) local xPlayer = CreateExtendedPlayer(playerId, identifier, userData.group, userData.accounts, userData.inventory, userData.weight, userData.job, userData.loadout, userData.playerName, userData.coords) ESX.Players[playerId] = xPlayer + Core.playersByIdentifier[identifier] = xPlayer if userData.firstname then xPlayer.set('firstName', userData.firstname) @@ -342,6 +343,7 @@ AddEventHandler('playerDropped', function(reason) if xPlayer then TriggerEvent('esx:playerDropped', playerId, reason) + Core.playersByIdentifier[xPlayer.identifier] = nil Core.SavePlayer(xPlayer, function() ESX.Players[playerId] = nil end) @@ -353,6 +355,7 @@ AddEventHandler('esx:playerLogout', function(playerId, cb) if xPlayer then TriggerEvent('esx:playerDropped', playerId) + Core.playersByIdentifier[xPlayer.identifier] = nil Core.SavePlayer(xPlayer, function() ESX.Players[playerId] = nil if cb then From ecd0d4c4f36e812e56459c2ca6f6c9123469549f Mon Sep 17 00:00:00 2001 From: Csoki Date: Sun, 22 Jan 2023 14:15:22 +0100 Subject: [PATCH 03/41] fix(server/main): ident --- [core]/es_extended/server/main.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/[core]/es_extended/server/main.lua b/[core]/es_extended/server/main.lua index ffc8e114..7c50263b 100644 --- a/[core]/es_extended/server/main.lua +++ b/[core]/es_extended/server/main.lua @@ -309,10 +309,10 @@ function loadESXPlayer(identifier, playerId, isNew) maxWeight = xPlayer.getMaxWeight(), money = xPlayer.getMoney(), sex = xPlayer.get("sex") or "m", - firstName = xPlayer.get("firstName") or "John", - lastName = xPlayer.get("lastName") or "Doe", - dateofbirth = xPlayer.get("dateofbirth") or "01/01/2000", - height = xPlayer.get("height") or 120, + firstName = xPlayer.get("firstName") or "John", + lastName = xPlayer.get("lastName") or "Doe", + dateofbirth = xPlayer.get("dateofbirth") or "01/01/2000", + height = xPlayer.get("height") or 120, dead = false }, isNew, userData.skin) From 597574cd084e236150a734851d108a40baaa4ce2 Mon Sep 17 00:00:00 2001 From: Csoki Date: Sun, 22 Jan 2023 14:26:21 +0100 Subject: [PATCH 04/41] refactor(server/common): remove duplicated job load core --- [core]/es_extended/server/common.lua | 33 +--------------------------- 1 file changed, 1 insertion(+), 32 deletions(-) diff --git a/[core]/es_extended/server/common.lua b/[core]/es_extended/server/common.lua index c130f59c..8cbff655 100644 --- a/[core]/es_extended/server/common.lua +++ b/[core]/es_extended/server/common.lua @@ -63,38 +63,7 @@ MySQL.ready(function() end end - local Jobs = {} - local jobs = MySQL.query.await('SELECT * FROM jobs') - - for _, v in ipairs(jobs) do - Jobs[v.name] = v - Jobs[v.name].grades = {} - end - - local jobGrades = MySQL.query.await('SELECT * FROM job_grades') - - for _, v in ipairs(jobGrades) do - if Jobs[v.job_name] then - Jobs[v.job_name].grades[tostring(v.grade)] = v - else - print(('[^3WARNING^7] Ignoring job grades for ^5%s^0 due to missing job'):format(v.job_name)) - end - end - - for _, v in pairs(Jobs) do - if ESX.Table.SizeOf(v.grades) == 0 then - Jobs[v.name] = nil - print(('[^3WARNING^7] Ignoring job ^5%s^0 due to no job grades found'):format(v.name)) - end - end - - if not Jobs then - -- Fallback data, if no jobs exist - ESX.Jobs['unemployed'] = {label = 'Unemployed', - grades = {['0'] = {grade = 0, label = 'Unemployed', salary = 200, skin_male = {}, skin_female = {}}}} - else - ESX.Jobs = Jobs - end + ESX.RefreshJobs() print('[^2INFO^7] ESX ^5Legacy 1.9.0^0 initialized!') StartDBSync() From e4f81a75233f1cd2a482bae0f1762414d6b5484e Mon Sep 17 00:00:00 2001 From: Csoki Date: Sun, 22 Jan 2023 14:35:36 +0100 Subject: [PATCH 05/41] refactor(server/functions): ESX.GetPlayers() it only stayed for backwards compatibility --- [core]/es_extended/server/functions.lua | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index f0bf792a..50e1edf8 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -216,15 +216,7 @@ function Core.SavePlayers(cb) end end -function ESX.GetPlayers() - local sources = {} - - for k, v in pairs(ESX.Players) do - sources[#sources + 1] = k - end - - return sources -end +ESX.GetPlayers = GetPlayers function ESX.GetExtendedPlayers(key, val) local xPlayers = {} From da62365ab0a54c05f25206cba3833e93b32a1fac Mon Sep 17 00:00:00 2001 From: Csoki Date: Sun, 22 Jan 2023 15:57:20 +0100 Subject: [PATCH 06/41] refactor(server/classes/player): refactor some functions small code format --- [core]/es_extended/server/classes/player.lua | 65 ++++++++++---------- 1 file changed, 32 insertions(+), 33 deletions(-) diff --git a/[core]/es_extended/server/classes/player.lua b/[core]/es_extended/server/classes/player.lua index a9c2fa54..d02757e0 100644 --- a/[core]/es_extended/server/classes/player.lua +++ b/[core]/es_extended/server/classes/player.lua @@ -121,17 +121,17 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, end function self.getAccounts(minimal) - if minimal then - local minimalAccounts = {} - - for i=1, #self.accounts do - minimalAccounts[self.accounts[i].name] = self.accounts[i].money - end - - return minimalAccounts - else + if not minimal then return self.accounts end + + local minimalAccounts = {} + + for i=1, #self.accounts do + minimalAccounts[self.accounts[i].name] = self.accounts[i].money + end + + return minimalAccounts end function self.getAccount(account) @@ -163,32 +163,31 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, end function self.getLoadout(minimal) - if minimal then - local minimalLoadout = {} - - for k,v in ipairs(self.loadout) do - minimalLoadout[v.name] = {ammo = v.ammo} - if v.tintIndex > 0 then minimalLoadout[v.name].tintIndex = v.tintIndex end - - if #v.components > 0 then - local components = {} - - for k2,component in ipairs(v.components) do - if component ~= 'clip_default' then - components[#components + 1] = component - end - end - - if #components > 0 then - minimalLoadout[v.name].components = components - end - end - end - - return minimalLoadout - else + if not minimal then return self.loadout end + local minimalLoadout = {} + + for k,v in ipairs(self.loadout) do + minimalLoadout[v.name] = {ammo = v.ammo} + if v.tintIndex > 0 then minimalLoadout[v.name].tintIndex = v.tintIndex end + + if #v.components > 0 then + local components = {} + + for k2,component in ipairs(v.components) do + if component ~= 'clip_default' then + components[#components + 1] = component + end + end + + if #components > 0 then + minimalLoadout[v.name].components = components + end + end + end + + return minimalLoadout end function self.getName() From 94c36df94774ff7ba28b4a27398c70f711d46043 Mon Sep 17 00:00:00 2001 From: Csoki Date: Sun, 22 Jan 2023 16:23:16 +0100 Subject: [PATCH 07/41] refactor(server/functions): Core.SavePlayers() format: Core.SavePlayer --- [core]/es_extended/server/functions.lua | 75 ++++++++++++++++--------- 1 file changed, 50 insertions(+), 25 deletions(-) diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index 50e1edf8..d46184d6 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -176,10 +176,21 @@ function ESX.TriggerServerCallback(name, requestId, source,Invoke, cb, ...) end function Core.SavePlayer(xPlayer, cb) + local parameters = { + json.encode(xPlayer.getAccounts(true)), + xPlayer.job.name, + xPlayer.job.grade, + xPlayer.group, + json.encode(xPlayer.getCoords()), + json.encode(xPlayer.getInventory(true)), + json.encode(xPlayer.getLoadout(true)), + xPlayer.identifier + } + MySQL.prepare( 'UPDATE `users` SET `accounts` = ?, `job` = ?, `job_grade` = ?, `group` = ?, `position` = ?, `inventory` = ?, `loadout` = ? WHERE `identifier` = ?', - {json.encode(xPlayer.getAccounts(true)), xPlayer.job.name, xPlayer.job.grade, xPlayer.group, json.encode(xPlayer.getCoords()), - json.encode(xPlayer.getInventory(true)), json.encode(xPlayer.getLoadout(true)), xPlayer.identifier}, function(affectedRows) + parameters, + function(affectedRows) if affectedRows == 1 then print(('[^2INFO^7] Saved player ^5"%s^7"'):format(xPlayer.name)) TriggerEvent('esx:playerSaved', xPlayer.playerId, xPlayer) @@ -187,33 +198,47 @@ function Core.SavePlayer(xPlayer, cb) if cb then cb() end - end) + end + ) end function Core.SavePlayers(cb) - local xPlayers = ESX.GetExtendedPlayers() - local count = #xPlayers - if count > 0 then - local parameters = {} - local time = os.time() - for i = 1, count do - local xPlayer = xPlayers[i] - parameters[#parameters + 1] = {json.encode(xPlayer.getAccounts(true)), xPlayer.job.name, xPlayer.job.grade, xPlayer.group, - json.encode(xPlayer.getCoords()), json.encode(xPlayer.getInventory(true)), json.encode(xPlayer.getLoadout(true)), - xPlayer.identifier} - end - MySQL.prepare( - "UPDATE `users` SET `accounts` = ?, `job` = ?, `job_grade` = ?, `group` = ?, `position` = ?, `inventory` = ?, `loadout` = ? WHERE `identifier` = ?", - parameters, function(results) - if results then - if type(cb) == 'function' then - cb() - else - print(('[^2INFO^7] Saved ^5%s^7 %s over ^5%s^7 ms'):format(count, count > 1 and 'players' or 'player', ESX.Math.Round((os.time() - time) / 1000000, 2))) - end - end - end) + local xPlayers = ESX.Players + if not next(xPlayers) then + return end + + local startTime = os.time() + local parameters = {} + + for _, xPlayer in pairs(ESX.Players) do + parameters[#parameters + 1] = { + json.encode(xPlayer.getAccounts(true)), + xPlayer.job.name, + xPlayer.job.grade, + xPlayer.group, + json.encode(xPlayer.getCoords()), + json.encode(xPlayer.getInventory(true)), + json.encode(xPlayer.getLoadout(true)), + xPlayer.identifier + } + end + + MySQL.prepare( + "UPDATE `users` SET `accounts` = ?, `job` = ?, `job_grade` = ?, `group` = ?, `position` = ?, `inventory` = ?, `loadout` = ? WHERE `identifier` = ?", + parameters, + function(results) + if not results then + return + end + + if type(cb) == 'function' then + return cb() + end + + print(('[^2INFO^7] Saved ^5%s^7 %s over ^5%s^7 ms'):format(#parameters, #parameters > 1 and 'players' or 'player', ESX.Math.Round((os.time() - startTime) / 1000000, 2))) + end + ) end ESX.GetPlayers = GetPlayers From cd8bb8b1f77acb5128702614280c06efaea11d86 Mon Sep 17 00:00:00 2001 From: Csoki Date: Sun, 22 Jan 2023 18:29:06 +0100 Subject: [PATCH 08/41] refactor(client/functions): ESX.Game.GetPeds --- [core]/es_extended/client/functions.lua | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/[core]/es_extended/client/functions.lua b/[core]/es_extended/client/functions.lua index 5403abcd..1094ef87 100644 --- a/[core]/es_extended/client/functions.lua +++ b/[core]/es_extended/client/functions.lua @@ -537,10 +537,15 @@ function ESX.Game.GetObjects() -- Leave the function for compatibility end function ESX.Game.GetPeds(onlyOtherPeds) - local peds, myPed, pool = {}, ESX.PlayerData.ped, GetGamePool('CPed') + local myPed, pool = ESX.PlayerData.ped, GetGamePool('CPed') + if not onlyOtherPeds then + return pool + end + + local peds = {} for i = 1, #pool do - if ((onlyOtherPeds and pool[i] ~= myPed) or not onlyOtherPeds) then + if pool[i] ~= myPed then peds[#peds + 1] = pool[i] end end From ecb975feed30659ea78409bf74d519dc5e782057 Mon Sep 17 00:00:00 2001 From: Csoki Date: Sun, 22 Jan 2023 18:52:35 +0100 Subject: [PATCH 09/41] refactor(esx_menu_dialog): remove useless thread if nui cursor is active, movement is disabled. --- [core]/esx_menu_dialog/client/main.lua | 23 +---------------------- 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/[core]/esx_menu_dialog/client/main.lua b/[core]/esx_menu_dialog/client/main.lua index f58986c9..2720c412 100644 --- a/[core]/esx_menu_dialog/client/main.lua +++ b/[core]/esx_menu_dialog/client/main.lua @@ -30,10 +30,9 @@ local function closeMenu(namespace, name) name = name, }) - if ESX.Table.SizeOf(OpenedMenus) == 0 then + if not next(OpenedMenus) then SetNuiFocus(false) end - end ESX.UI.Menu.RegisterType(MenuType, openMenu, closeMenu) @@ -78,24 +77,4 @@ AddEventHandler('esx_menu_dialog:message:menu_change', function(data) if menu.change ~= nil then menu.change(data, menu) end -end) - -CreateThread(function() - while true do - Wait(0) - - if ESX.Table.SizeOf(OpenedMenus) > 0 then - DisableControlAction(0, 1, true) -- LookLeftRight - DisableControlAction(0, 2, true) -- LookUpDown - DisableControlAction(0, 142, true) -- MeleeAttackAlternate - DisableControlAction(0, 106, true) -- VehicleMouseControlOverride - DisableControlAction(0, 12, true) -- WeaponWheelUpDown - DisableControlAction(0, 14, true) -- WeaponWheelNext - DisableControlAction(0, 15, true) -- WeaponWheelPrev - DisableControlAction(0, 16, true) -- SelectNextWeapon - DisableControlAction(0, 17, true) -- SelectPrevWeapon - else - Wait(500) - end - end end) \ No newline at end of file From 5450414b0da59d3a4359ffddc02ce86e03504c6a Mon Sep 17 00:00:00 2001 From: Csoki Date: Sun, 22 Jan 2023 18:54:11 +0100 Subject: [PATCH 10/41] refactor(client/functions): ESX.SetTimeout and ESX.ClearTimeout timeout functions moved to shared file and removed thread from client side --- [core]/es_extended/client/functions.lua | 33 +------------------ [core]/es_extended/common/modules/timeout.lua | 23 +++++++++++++ [core]/es_extended/fxmanifest.lua | 6 ++-- [core]/es_extended/server/common.lua | 2 -- [core]/es_extended/server/functions.lua | 20 ----------- 5 files changed, 26 insertions(+), 58 deletions(-) create mode 100644 [core]/es_extended/common/modules/timeout.lua diff --git a/[core]/es_extended/client/functions.lua b/[core]/es_extended/client/functions.lua index 1094ef87..77c01ae3 100644 --- a/[core]/es_extended/client/functions.lua +++ b/[core]/es_extended/client/functions.lua @@ -4,7 +4,6 @@ ESX.PlayerData = {} ESX.PlayerLoaded = false Core.CurrentRequestId = 0 Core.ServerCallbacks = {} -Core.TimeoutCallbacks = {} Core.Input = {} ESX.UI = {} ESX.UI.HUD = {} @@ -21,18 +20,6 @@ ESX.Scaleform.Utils = {} ESX.Streaming = {} -function ESX.SetTimeout(msec, cb) - table.insert(Core.TimeoutCallbacks, { - time = GetGameTimer() + msec, - cb = cb - }) - return #Core.TimeoutCallbacks -end - -function ESX.ClearTimeout(i) - Core.TimeoutCallbacks[i] = nil -end - function ESX.IsPlayerLoaded() return ESX.PlayerLoaded end @@ -1392,22 +1379,4 @@ AddEventHandler('esx:showAdvancedNotification', RegisterNetEvent('esx:showHelpNotification') AddEventHandler('esx:showHelpNotification', function(msg, thisFrame, beep, duration) ESX.ShowHelpNotification(msg, thisFrame, beep, duration) -end) - --- SetTimeout -CreateThread(function() - while true do - local sleep = 100 - if #Core.TimeoutCallbacks > 0 then - local currTime = GetGameTimer() - sleep = 0 - for i = 1, #Core.TimeoutCallbacks, 1 do - if currTime >= Core.TimeoutCallbacks[i].time then - Core.TimeoutCallbacks[i].cb() - Core.TimeoutCallbacks[i] = nil - end - end - end - Wait(sleep) - end -end) +end) \ No newline at end of file diff --git a/[core]/es_extended/common/modules/timeout.lua b/[core]/es_extended/common/modules/timeout.lua new file mode 100644 index 00000000..cb56de7b --- /dev/null +++ b/[core]/es_extended/common/modules/timeout.lua @@ -0,0 +1,23 @@ +local TimeoutCount = 0 +local CancelledTimeouts = {} + +ESX.SetTimeout = function(msec, cb) + local id = TimeoutCount + 1 + + SetTimeout(msec, function() + if CancelledTimeouts[id] then + CancelledTimeouts[id] = nil + return + end + + cb() + end) + + TimeoutCount = id + + return id +end + +ESX.ClearTimeout = function(id) + CancelledTimeouts[id] = true +end \ No newline at end of file diff --git a/[core]/es_extended/fxmanifest.lua b/[core]/es_extended/fxmanifest.lua index 1c9c63be..ffc21344 100644 --- a/[core]/es_extended/fxmanifest.lua +++ b/[core]/es_extended/fxmanifest.lua @@ -27,8 +27,7 @@ server_scripts { 'server/main.lua', 'server/commands.lua', - 'common/modules/math.lua', - 'common/modules/table.lua', + 'common/modules/*.lua', 'common/functions.lua' } @@ -42,8 +41,7 @@ client_scripts { 'client/modules/scaleform.lua', 'client/modules/streaming.lua', - 'common/modules/math.lua', - 'common/modules/table.lua', + 'common/modules/*.lua', 'common/functions.lua' } diff --git a/[core]/es_extended/server/common.lua b/[core]/es_extended/server/common.lua index 8cbff655..e59e0243 100644 --- a/[core]/es_extended/server/common.lua +++ b/[core]/es_extended/server/common.lua @@ -7,8 +7,6 @@ Core.UsableItemsCallbacks = {} Core.ServerCallbacks = {} Core.ClientCallbacks = {} Core.CurrentRequestId = 0 -Core.TimeoutCount = -1 -Core.CancelledTimeouts = {} Core.RegisteredCommands = {} Core.Pickups = {} Core.PickupId = 0 diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index d46184d6..3e10f922 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -4,22 +4,6 @@ function ESX.Trace(msg) end end -function ESX.SetTimeout(msec, cb) - local id = Core.TimeoutCount + 1 - - SetTimeout(msec, function() - if Core.CancelledTimeouts[id] then - Core.CancelledTimeouts[id] = nil - else - cb() - end - end) - - Core.TimeoutCount = id - - return id -end - function ESX.RegisterCommand(name, group, cb, allowConsole, suggestion) if type(name) == 'table' then for k, v in ipairs(name) do @@ -159,10 +143,6 @@ function ESX.RegisterCommand(name, group, cb, allowConsole, suggestion) end end -function ESX.ClearTimeout(id) - Core.CancelledTimeouts[id] = true -end - function ESX.RegisterServerCallback(name, cb) Core.ServerCallbacks[name] = cb end From 1c77be6936e5f324c38bc717f5720be43722843d Mon Sep 17 00:00:00 2001 From: Csoki Date: Tue, 24 Jan 2023 20:39:00 +0100 Subject: [PATCH 11/41] fix(es_extended/fxmanifest): syntax fix --- [core]/es_extended/fxmanifest.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/es_extended/fxmanifest.lua b/[core]/es_extended/fxmanifest.lua index 816b9859..e21addea 100644 --- a/[core]/es_extended/fxmanifest.lua +++ b/[core]/es_extended/fxmanifest.lua @@ -41,7 +41,7 @@ client_scripts { 'common/modules/*.lua', 'common/functions.lua', - 'common/functions.lua' + 'common/functions.lua', 'client/modules/*.lua' } From a8b5727d2e04c7f904ea2db914ebc4d2d3c22114 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=20Gerg=C5=91?= Date: Sun, 5 Feb 2023 22:50:51 +0100 Subject: [PATCH 12/41] DisableVehicleRewards refactor --- [core]/es_extended/client/main.lua | 165 +++++++++++++++-------------- 1 file changed, 86 insertions(+), 79 deletions(-) diff --git a/[core]/es_extended/client/main.lua b/[core]/es_extended/client/main.lua index 6aad3384..32fe238a 100644 --- a/[core]/es_extended/client/main.lua +++ b/[core]/es_extended/client/main.lua @@ -14,7 +14,7 @@ CreateThread(function() end) RegisterNetEvent("esx:requestModel", function(model) - ESX.Streaming.RequestModel(model) + ESX.Streaming.RequestModel(model) end) RegisterNetEvent('esx:playerLoaded') @@ -60,7 +60,7 @@ AddEventHandler('esx:playerLoaded', function(xPlayer, isNew, skin) local playerId = PlayerId() -- RemoveHudCommonents - for i=1, #(Config.RemoveHudCommonents) do + for i = 1, #(Config.RemoveHudCommonents) do if Config.RemoveHudCommonents[i] then SetHudComponentPosition(i, 999999.0, 999999.0) end @@ -68,28 +68,34 @@ AddEventHandler('esx:playerLoaded', function(xPlayer, isNew, skin) -- DisableNPCDrops if Config.DisableNPCDrops then - local weaponPickups = {`PICKUP_WEAPON_CARBINERIFLE`, `PICKUP_WEAPON_PISTOL`, `PICKUP_WEAPON_PUMPSHOTGUN`} - for i = 1, #weaponPickups do - ToggleUsePickupsForPlayer(playerId, weaponPickups[i], false) + local weaponPickups = { `PICKUP_WEAPON_CARBINERIFLE`, `PICKUP_WEAPON_PISTOL`, `PICKUP_WEAPON_PUMPSHOTGUN` } + for i = 1, #weaponPickups do + ToggleUsePickupsForPlayer(playerId, weaponPickups[i], false) end end -- DisableVehicleRewards if Config.DisableVehicleRewards then + local inVehicle = false + + local function DisableVehicleRewardsThread() + CreateThread(function() + while inVehicle do + DisablePlayerVehicleRewards(playerId) + Wait(0) + end + end) + end + AddEventHandler('esx:enteredVehicle', function(vehicle, plate, seat, displayName, netId) if GetVehicleClass(vehicle) == 18 then - CreateThread(function() - while true do - DisablePlayerVehicleRewards(playerId) - if not IsPedInAnyVehicle(ESX.PlayerData.ped, false) then - break - end - - Wait(0) - end - end) + DisableVehicleRewardsThread() end end) + + AddEventHandler('esx:exitedVehicle', function(vehicle, plate, seat, displayName, netId) + inVehicle = false + end) end if Config.DisableHealthRegeneration or Config.DisableWeaponWheel or Config.DisableAimAssist then @@ -128,8 +134,8 @@ RegisterNetEvent('esx:setMaxWeight') AddEventHandler('esx:setMaxWeight', function(newMaxWeight) ESX.SetPlayerData("maxWeight", newMaxWeight) end) local function onPlayerSpawn() - ESX.SetPlayerData('ped', PlayerPedId()) - ESX.SetPlayerData('dead', false) + ESX.SetPlayerData('ped', PlayerPedId()) + ESX.SetPlayerData('dead', false) end AddEventHandler('playerSpawned', onPlayerSpawn) @@ -154,7 +160,7 @@ AddEventHandler('esx:restoreLoadout', function() local ammoTypes = {} RemoveAllPedWeapons(ESX.PlayerData.ped, true) - for k,v in ipairs(ESX.PlayerData.loadout) do + for k, v in ipairs(ESX.PlayerData.loadout) do local weaponName = v.name local weaponHash = joaat(weaponName) @@ -163,7 +169,7 @@ AddEventHandler('esx:restoreLoadout', function() local ammoType = GetPedAmmoTypeFromWeapon(ESX.PlayerData.ped, weaponHash) - for k2,v2 in ipairs(v.components) do + for k2, v2 in ipairs(v.components) do local componentHash = ESX.GetWeaponComponent(weaponName, v2).hash GiveWeaponComponentToPed(ESX.PlayerData.ped, weaponHash, componentHash) end @@ -178,27 +184,27 @@ end) AddStateBagChangeHandler('VehicleProperties', nil, function(bagName, key, value) if value then - Wait(0) - local NetId = value.NetId - local Vehicle = NetworkGetEntityFromNetworkId(NetId) - local Tries = 0 - while Vehicle == 0 do - Vehicle = NetworkGetEntityFromNetworkId(NetId) - Wait(100) - Tries = Tries + 1 - if Tries > 300 then - break - end - end - if NetworkGetEntityOwner(Vehicle) == PlayerId() then - ESX.Game.SetVehicleProperties(Vehicle, value) + Wait(0) + local NetId = value.NetId + local Vehicle = NetworkGetEntityFromNetworkId(NetId) + local Tries = 0 + while Vehicle == 0 do + Vehicle = NetworkGetEntityFromNetworkId(NetId) + Wait(100) + Tries = Tries + 1 + if Tries > 300 then + break end + end + if NetworkGetEntityOwner(Vehicle) == PlayerId() then + ESX.Game.SetVehicleProperties(Vehicle, value) + end end end) RegisterNetEvent('esx:setAccountMoney') AddEventHandler('esx:setAccountMoney', function(account) - for i=1, #(ESX.PlayerData.accounts) do + for i = 1, #(ESX.PlayerData.accounts) do if ESX.PlayerData.accounts[i].name == account.name then ESX.PlayerData.accounts[i] = account break @@ -211,7 +217,7 @@ end) if not Config.OxInventory then RegisterNetEvent('esx:addInventoryItem') AddEventHandler('esx:addInventoryItem', function(item, count, showNotification) - for k,v in ipairs(ESX.PlayerData.inventory) do + for k, v in ipairs(ESX.PlayerData.inventory) do if v.name == item then ESX.UI.ShowInventoryItemNotification(true, v.label, count - v.count) ESX.PlayerData.inventory[k].count = count @@ -228,7 +234,7 @@ if not Config.OxInventory then RegisterNetEvent('esx:removeInventoryItem') AddEventHandler('esx:removeInventoryItem', function(item, count, showNotification) - for k,v in ipairs(ESX.PlayerData.inventory) do + for k, v in ipairs(ESX.PlayerData.inventory) do if v.name == item then ESX.UI.ShowInventoryItemNotification(false, v.label, v.count - count) ESX.PlayerData.inventory[k].count = count @@ -261,7 +267,7 @@ if not Config.OxInventory then RegisterNetEvent('esx:setWeaponTint') AddEventHandler('esx:setWeaponTint', function(weapon, weaponTintIndex) SetPedWeaponTintIndex(ESX.PlayerData.ped, joaat(weapon), weaponTintIndex) - + end) RegisterNetEvent('esx:removeWeapon') @@ -306,7 +312,7 @@ if not Config.OxInventory then local pickupObject = CreateWeaponObject(weaponHash, 50, coords.x, coords.y, coords.z, true, 1.0, 0) SetWeaponObjectTintIndex(pickupObject, tintIndex) - for k,v in ipairs(components) do + for k, v in ipairs(components) do local component = ESX.GetWeaponComponent(name, v) GiveWeaponComponentToWeaponObject(pickupObject, component.hash) end @@ -320,14 +326,15 @@ if not Config.OxInventory then RegisterNetEvent('esx:createMissingPickups') AddEventHandler('esx:createMissingPickups', function(missingPickups) for pickupId, pickup in pairs(missingPickups) do - TriggerEvent('esx:createPickup', pickupId, pickup.label, pickup.coords - vector3(0,0, 1.0), pickup.type, pickup.name, pickup.components, pickup.tintIndex) + TriggerEvent('esx:createPickup', pickupId, pickup.label, pickup.coords - vector3(0, 0, 1.0), pickup.type, pickup.name + , pickup.components, pickup.tintIndex) end end) end RegisterNetEvent('esx:registerSuggestions') AddEventHandler('esx:registerSuggestions', function(registeredCommands) - for name,command in pairs(registeredCommands) do + for name, command in pairs(registeredCommands) do if command.suggestion then TriggerEvent('chat:addSuggestion', ('/%s'):format(name), command.suggestion.help, command.suggestion.arguments) end @@ -346,32 +353,32 @@ end function StartServerSyncLoops() if not Config.OxInventory then - -- keep track of ammo + -- keep track of ammo - CreateThread(function() - local currentWeapon = {Ammo = 0} - while ESX.PlayerLoaded do - local sleep = 1500 - if GetSelectedPedWeapon(ESX.PlayerData.ped) ~= -1569615261 then - sleep = 1000 - local _,weaponHash = GetCurrentPedWeapon(ESX.PlayerData.ped, true) - local weapon = ESX.GetWeaponFromHash(weaponHash) - if weapon then - local ammoCount = GetAmmoInPedWeapon(ESX.PlayerData.ped, weaponHash) - if weapon.name ~= currentWeapon.name then - currentWeapon.Ammo = ammoCount - currentWeapon.name = weapon.name - else - if ammoCount ~= currentWeapon.Ammo then - currentWeapon.Ammo = ammoCount - TriggerServerEvent('esx:updateWeaponAmmo', weapon.name, ammoCount) - end - end + CreateThread(function() + local currentWeapon = { Ammo = 0 } + while ESX.PlayerLoaded do + local sleep = 1500 + if GetSelectedPedWeapon(ESX.PlayerData.ped) ~= -1569615261 then + sleep = 1000 + local _, weaponHash = GetCurrentPedWeapon(ESX.PlayerData.ped, true) + local weapon = ESX.GetWeaponFromHash(weaponHash) + if weapon then + local ammoCount = GetAmmoInPedWeapon(ESX.PlayerData.ped, weaponHash) + if weapon.name ~= currentWeapon.name then + currentWeapon.Ammo = ammoCount + currentWeapon.name = weapon.name + else + if ammoCount ~= currentWeapon.Ammo then + currentWeapon.Ammo = ammoCount + TriggerServerEvent('esx:updateWeaponAmmo', weapon.name, ammoCount) end - end - Wait(sleep) + end end - end) + end + Wait(sleep) + end + end) end end @@ -398,7 +405,7 @@ if not Config.OxInventory then local playerCoords = GetEntityCoords(ESX.PlayerData.ped) local closestPlayer, closestDistance = ESX.Game.GetClosestPlayer(playerCoords) - for pickupId,pickup in pairs(pickups) do + for pickupId, pickup in pairs(pickups) do local distance = #(playerCoords - pickup.coords) if distance < 5 then @@ -596,30 +603,30 @@ end) RegisterNetEvent("esx:killPlayer") AddEventHandler("esx:killPlayer", function() - SetEntityHealth(ESX.PlayerData.ped, 0) + SetEntityHealth(ESX.PlayerData.ped, 0) end) RegisterNetEvent("esx:freezePlayer") AddEventHandler("esx:freezePlayer", function(input) - local player = PlayerId() - if input == 'freeze' then - SetEntityCollision(ESX.PlayerData.ped, false) - FreezeEntityPosition(ESX.PlayerData.ped, true) - SetPlayerInvincible(player, true) - elseif input == 'unfreeze' then - SetEntityCollision(ESX.PlayerData.ped, true) + local player = PlayerId() + if input == 'freeze' then + SetEntityCollision(ESX.PlayerData.ped, false) + FreezeEntityPosition(ESX.PlayerData.ped, true) + SetPlayerInvincible(player, true) + elseif input == 'unfreeze' then + SetEntityCollision(ESX.PlayerData.ped, true) FreezeEntityPosition(ESX.PlayerData.ped, false) - SetPlayerInvincible(player, false) - end + SetPlayerInvincible(player, false) + end end) RegisterNetEvent("esx:GetVehicleType", function(Model, Request) if not IsModelInCdimage(Model) then - return TriggerServerEvent("esx:ReturnVehicleType", false, Request) - end + return TriggerServerEvent("esx:ReturnVehicleType", false, Request) + end if Model == `submersible` or Model == `submersible2` then - return TriggerServerEvent("esx:ReturnVehicleType", "submarine", Request) + return TriggerServerEvent("esx:ReturnVehicleType", "submarine", Request) end local VehicleType = GetVehicleClassFromName(Model) @@ -647,8 +654,8 @@ local DoNotUse = { 'default_spawnpoint', } -for i=1, #DoNotUse do +for i = 1, #DoNotUse do if GetResourceState(DoNotUse[i]) == 'started' or GetResourceState(DoNotUse[i]) == 'starting' then - print("[^1ERROR^7] YOU ARE USING A RESOURCE THAT WILL BREAK ^1ESX^7, PLEASE REMOVE ^5"..DoNotUse[i].."^7") + print("[^1ERROR^7] YOU ARE USING A RESOURCE THAT WILL BREAK ^1ESX^7, PLEASE REMOVE ^5" .. DoNotUse[i] .. "^7") end end From e611ce9537b8393a6440c71cbe72b45f106b4450 Mon Sep 17 00:00:00 2001 From: Csoki Date: Mon, 6 Feb 2023 18:08:36 +0100 Subject: [PATCH 13/41] feat(es_extended/server/common.lua): add version getter to init print --- [core]/es_extended/server/common.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/es_extended/server/common.lua b/[core]/es_extended/server/common.lua index e59e0243..c3f04662 100644 --- a/[core]/es_extended/server/common.lua +++ b/[core]/es_extended/server/common.lua @@ -63,7 +63,7 @@ MySQL.ready(function() ESX.RefreshJobs() - print('[^2INFO^7] ESX ^5Legacy 1.9.0^0 initialized!') + print(('[^2INFO^7] ESX ^5Legacy %s^0 initialized!'):format(GetResourceMetadata(GetCurrentResourceName(), "version", 0))) StartDBSync() StartPayCheck() end) From 010bf82dfb7d4f9ae366f12e16330c1b11c2496a Mon Sep 17 00:00:00 2001 From: Csoki Date: Mon, 6 Feb 2023 18:19:12 +0100 Subject: [PATCH 14/41] refactor(es_extended/server/paycheck.lua): replace ESX.GetExtendedPlayers() with ESX.Players so performance is more optimal, because there is no for loop running in the background for ESX.GetExtendedPlayers --- [core]/es_extended/server/paycheck.lua | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/[core]/es_extended/server/paycheck.lua b/[core]/es_extended/server/paycheck.lua index 5c7b21d7..1f234a57 100644 --- a/[core]/es_extended/server/paycheck.lua +++ b/[core]/es_extended/server/paycheck.lua @@ -2,16 +2,15 @@ function StartPayCheck() CreateThread(function() while true do Wait(Config.PaycheckInterval) - local xPlayers = ESX.GetExtendedPlayers() - for i = 1, #(xPlayers) do - local xPlayer = xPlayers[i] + + for player, xPlayer in pairs(ESX.Players) do local job = xPlayer.job.grade_name local salary = xPlayer.job.grade_salary if salary > 0 then if job == 'unemployed' then -- unemployed xPlayer.addAccountMoney('bank', salary, "Welfare Check") - TriggerClientEvent('esx:showAdvancedNotification', xPlayer.source, TranslateCap('bank'), TranslateCap('received_paycheck'), TranslateCap('received_help', salary), + TriggerClientEvent('esx:showAdvancedNotification', player, TranslateCap('bank'), TranslateCap('received_paycheck'), TranslateCap('received_help', salary), 'CHAR_BANK_MAZE', 9) elseif Config.EnableSocietyPayouts then -- possibly a society TriggerEvent('esx_society:getSociety', xPlayer.job.name, function(society) @@ -21,21 +20,21 @@ function StartPayCheck() xPlayer.addAccountMoney('bank', salary, "Paycheck") account.removeMoney(salary) - TriggerClientEvent('esx:showAdvancedNotification', xPlayer.source, TranslateCap('bank'), TranslateCap('received_paycheck'), + TriggerClientEvent('esx:showAdvancedNotification', player, TranslateCap('bank'), TranslateCap('received_paycheck'), TranslateCap('received_salary', salary), 'CHAR_BANK_MAZE', 9) else - TriggerClientEvent('esx:showAdvancedNotification', xPlayer.source, TranslateCap('bank'), '', TranslateCap('company_nomoney'), 'CHAR_BANK_MAZE', 1) + TriggerClientEvent('esx:showAdvancedNotification', player, TranslateCap('bank'), '', TranslateCap('company_nomoney'), 'CHAR_BANK_MAZE', 1) end end) else -- not a society xPlayer.addAccountMoney('bank', salary, "Paycheck") - TriggerClientEvent('esx:showAdvancedNotification', xPlayer.source, TranslateCap('bank'), TranslateCap('received_paycheck'), TranslateCap('received_salary', salary), + TriggerClientEvent('esx:showAdvancedNotification', player, TranslateCap('bank'), TranslateCap('received_paycheck'), TranslateCap('received_salary', salary), 'CHAR_BANK_MAZE', 9) end end) else -- generic job xPlayer.addAccountMoney('bank', salary, "Paycheck") - TriggerClientEvent('esx:showAdvancedNotification', xPlayer.source, TranslateCap('bank'), TranslateCap('received_paycheck'), TranslateCap('received_salary', salary), + TriggerClientEvent('esx:showAdvancedNotification', player, TranslateCap('bank'), TranslateCap('received_paycheck'), TranslateCap('received_salary', salary), 'CHAR_BANK_MAZE', 9) end end From f0d00f9e849d061ef923a8982a5548d8ac5b1895 Mon Sep 17 00:00:00 2001 From: Csoki Date: Tue, 7 Feb 2023 13:40:26 +0100 Subject: [PATCH 15/41] refactor(es_extended/server/main.lua): defaultGroup as local variable --- [core]/es_extended/server/main.lua | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/[core]/es_extended/server/main.lua b/[core]/es_extended/server/main.lua index 7c50263b..6865c3ad 100644 --- a/[core]/es_extended/server/main.lua +++ b/[core]/es_extended/server/main.lua @@ -71,11 +71,10 @@ function createESXPlayer(identifier, playerId, data) accounts[account] = money end + local defaultGroup = "user" if Core.IsPlayerAdmin(playerId) then print(('[^2INFO^0] Player ^5%s^0 Has been granted admin permissions via ^5Ace Perms^7.'):format(playerId)) defaultGroup = "admin" - else - defaultGroup = "user" end if not Config.Multichar then From 3919780750147b080c0a45907952861bac8a4475 Mon Sep 17 00:00:00 2001 From: Csoki Date: Tue, 7 Feb 2023 16:14:29 +0100 Subject: [PATCH 16/41] docs(es_extended/server/onesync.lua): fix types --- [core]/es_extended/server/onesync.lua | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/[core]/es_extended/server/onesync.lua b/[core]/es_extended/server/onesync.lua index 21e979c9..2e3bbe82 100644 --- a/[core]/es_extended/server/onesync.lua +++ b/[core]/es_extended/server/onesync.lua @@ -1,10 +1,9 @@ ESX.OneSync = {} ----@class vector3 ----@field x number ----@field y number ----@field z number - +---@param source number|vector3 +---@param closest boolean +---@param distance? number +---@param ignore? table local function getNearbyPlayers(source, closest, distance, ignore) local result = {} local count = 0 @@ -44,14 +43,14 @@ end ---@param source vector3|number playerId or vector3 coordinates ---@param maxDistance number ----@param ignore table playerIds to ignore, where the key is playerId and value is true +---@param ignore? table playerIds to ignore, where the key is playerId and value is true function ESX.OneSync.GetPlayersInArea(source, maxDistance, ignore) return getNearbyPlayers(source, false, maxDistance, ignore) end ---@param source vector3|number playerId or vector3 coordinates ---@param maxDistance number ----@param ignore table playerIds to ignore, where the key is playerId and value is true +---@param ignore? table playerIds to ignore, where the key is playerId and value is true function ESX.OneSync.GetClosestPlayer(source, maxDistance, ignore) return getNearbyPlayers(source, true, maxDistance, ignore) end @@ -59,7 +58,7 @@ end ---@param model number|string ---@param coords vector3|table ---@param heading number ----@param Properties table +---@param properties table ---@param cb function function ESX.OneSync.SpawnVehicle(model, coords, heading, properties, cb) local vehicleModel = joaat(model) From debec53d05a6eea457ee5eecb7d3fb43cf4710bc Mon Sep 17 00:00:00 2001 From: Csoki Date: Tue, 7 Feb 2023 16:22:41 +0100 Subject: [PATCH 17/41] fix(es_extended/server/onesync.lua): ESX.OneSync.SpawnPed --- [core]/es_extended/server/onesync.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/[core]/es_extended/server/onesync.lua b/[core]/es_extended/server/onesync.lua index 2e3bbe82..bcb122fe 100644 --- a/[core]/es_extended/server/onesync.lua +++ b/[core]/es_extended/server/onesync.lua @@ -109,7 +109,7 @@ function ESX.OneSync.SpawnPed(model, coords, heading, cb) CreateThread(function() local entity = CreatePed(0, model, coords.x, coords.y, coords.z, heading, true, true) while not DoesEntityExist(entity) do Wait(50) end - return entity + cb(NetworkGetNetworkIdFromEntity(entity)) end) end @@ -163,7 +163,7 @@ end ---@param maxDistance number ---@param modelFilter table models to ignore, where the key is the model hash and the value is true ---@return table -function ESX.OneSync.GetVehiclesInArea(coords, maxDistance, modelFilter, cb) +function ESX.OneSync.GetVehiclesInArea(coords, maxDistance, modelFilter) return getNearbyEntities(GetAllVehicles(), coords, modelFilter, maxDistance) end From e042bfa9cffdac59d0ae8d52c6df451ee8c6ca60 Mon Sep 17 00:00:00 2001 From: Csoki Date: Tue, 7 Feb 2023 16:29:40 +0100 Subject: [PATCH 18/41] fix(es_extended/server/onesync.lua): fix ESX.OneSync.SpawnPedInVehicle --- [core]/es_extended/server/onesync.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/es_extended/server/onesync.lua b/[core]/es_extended/server/onesync.lua index bcb122fe..60ab1d56 100644 --- a/[core]/es_extended/server/onesync.lua +++ b/[core]/es_extended/server/onesync.lua @@ -122,7 +122,7 @@ function ESX.OneSync.SpawnPedInVehicle(model, vehicle, seat, cb) CreateThread(function() local entity = CreatePedInsideVehicle(vehicle, 1, model, seat, true, true) while not DoesEntityExist(entity) do Wait(50) end - return entity + cb(NetworkGetNetworkIdFromEntity(entity)) end) end From 51f6f2cc437e068e2fbf65b8bc78df1def40f36d Mon Sep 17 00:00:00 2001 From: xrtw <55210961+xrtw@users.noreply.github.com> Date: Tue, 7 Feb 2023 18:38:03 +0200 Subject: [PATCH 19/41] fix warning nuicallback fix fix --- [core]/esx_context/main.lua | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/[core]/esx_context/main.lua b/[core]/esx_context/main.lua index 833b5464..55bfad9c 100644 --- a/[core]/esx_context/main.lua +++ b/[core]/esx_context/main.lua @@ -84,7 +84,7 @@ RegisterNUICallback("closed",function(data,cb) Closed() end) -RegisterNUICallback("selected",function(data) +RegisterNUICallback("selected",function(data,cb) if not activeMenu or not activeMenu.onSelect or not data.index @@ -102,9 +102,10 @@ RegisterNUICallback("selected",function(data) end activeMenu:onSelect(ele) + if cb then cb('ok') end end) -RegisterNUICallback("changed",function(data) +RegisterNUICallback("changed",function(data,cb) if not activeMenu or not data.index or not data.value @@ -136,6 +137,7 @@ RegisterNUICallback("changed",function(data) elseif ele.inputType == "radio" then ele.inputValue = data.value end + if cb then cb('ok') end end) -- Keybind From 147ed7b8448b5809e83c78c2d993ba4d2da51049 Mon Sep 17 00:00:00 2001 From: ohscxr Date: Wed, 8 Feb 2023 15:12:30 -0500 Subject: [PATCH 20/41] feat(client/functions): Interior/Dashboard color saved in Vehicle Properties --- [core]/es_extended/client/functions.lua | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/[core]/es_extended/client/functions.lua b/[core]/es_extended/client/functions.lua index 240111c7..b37d4c9c 100644 --- a/[core]/es_extended/client/functions.lua +++ b/[core]/es_extended/client/functions.lua @@ -608,6 +608,8 @@ function ESX.Game.GetVehicleProperties(vehicle) local colorPrimary, colorSecondary = GetVehicleColours(vehicle) local pearlescentColor, wheelColor = GetVehicleExtraColours(vehicle) local hasCustomPrimaryColor = GetIsVehiclePrimaryColourCustom(vehicle) + local dashboardColor = GetVehicleDashboardColor(vehicle) + local interiorColor = GetVehicleInteriorColour(vehicle) local customPrimaryColor = nil if hasCustomPrimaryColor then customPrimaryColor = {GetVehicleCustomPrimaryColour(vehicle)} @@ -678,8 +680,12 @@ function ESX.Game.GetVehicleProperties(vehicle) customPrimaryColor = customPrimaryColor, customSecondaryColor = customSecondaryColor, + pearlescentColor = pearlescentColor, wheelColor = wheelColor, + + dashboardColor = dashboardColor, + interiorColor = interiorColor, wheels = GetVehicleWheelType(vehicle), windowTint = GetVehicleWindowTint(vehicle), @@ -792,6 +798,15 @@ function ESX.Game.SetVehicleProperties(vehicle, props) if props.pearlescentColor ~= nil then SetVehicleExtraColours(vehicle, props.pearlescentColor, wheelColor) end + + if props.interiorColor ~= nil then + SetVehicleInteriorColor(vehicle, props.interiorColor) + end + + if props.dashboardColor ~= nil then + SetVehicleDashboardColor(vehicle, props.dashboardColor) + end + if props.wheelColor ~= nil then SetVehicleExtraColours(vehicle, props.pearlescentColor or pearlescentColor, props.wheelColor) end From 330f245495fdd8cf92bf9b0c0172621400a954a8 Mon Sep 17 00:00:00 2001 From: ohscxr Date: Wed, 8 Feb 2023 15:22:05 -0500 Subject: [PATCH 21/41] Remove blank space --- [core]/es_extended/client/functions.lua | 1 - 1 file changed, 1 deletion(-) diff --git a/[core]/es_extended/client/functions.lua b/[core]/es_extended/client/functions.lua index b37d4c9c..0df14068 100644 --- a/[core]/es_extended/client/functions.lua +++ b/[core]/es_extended/client/functions.lua @@ -680,7 +680,6 @@ function ESX.Game.GetVehicleProperties(vehicle) customPrimaryColor = customPrimaryColor, customSecondaryColor = customSecondaryColor, - pearlescentColor = pearlescentColor, wheelColor = wheelColor, From 36fcdf5b434671f17d71107e4eadf74d9f2cc0c0 Mon Sep 17 00:00:00 2001 From: Csoki Date: Thu, 9 Feb 2023 16:23:22 +0100 Subject: [PATCH 22/41] refactor(es_extended/onesync): 'VehicleProperties' statebag --- [core]/es_extended/client/main.lua | 29 +++++++++++---------------- [core]/es_extended/server/onesync.lua | 12 +++++------ 2 files changed, 17 insertions(+), 24 deletions(-) diff --git a/[core]/es_extended/client/main.lua b/[core]/es_extended/client/main.lua index 32fe238a..0767cd40 100644 --- a/[core]/es_extended/client/main.lua +++ b/[core]/es_extended/client/main.lua @@ -182,23 +182,18 @@ AddEventHandler('esx:restoreLoadout', function() end end) -AddStateBagChangeHandler('VehicleProperties', nil, function(bagName, key, value) - if value then - Wait(0) - local NetId = value.NetId - local Vehicle = NetworkGetEntityFromNetworkId(NetId) - local Tries = 0 - while Vehicle == 0 do - Vehicle = NetworkGetEntityFromNetworkId(NetId) - Wait(100) - Tries = Tries + 1 - if Tries > 300 then - break - end - end - if NetworkGetEntityOwner(Vehicle) == PlayerId() then - ESX.Game.SetVehicleProperties(Vehicle, value) - end +AddStateBagChangeHandler('VehicleProperties', nil, function(bagName, _, value) + if not value then + return + end + + local vehicle = GetEntityFromStateBagName(bagName) + if not DoesEntityExist(vehicle) then + return + end + + if NetworkGetEntityOwner(vehicle) == PlayerId() then + ESX.Game.SetVehicleProperties(vehicle, value) end end) diff --git a/[core]/es_extended/server/onesync.lua b/[core]/es_extended/server/onesync.lua index 60ab1d56..ffcfa7d7 100644 --- a/[core]/es_extended/server/onesync.lua +++ b/[core]/es_extended/server/onesync.lua @@ -69,14 +69,12 @@ function ESX.OneSync.SpawnVehicle(model, coords, heading, properties, cb) ESX.GetVehicleType(vehicleModel, xPlayer.id, function(vehicleType) if vehicleType then local createdVehicle = CreateVehicleServerSetter(vehicleModel, vehicleType, coords, heading) - if DoesEntityExist(createdVehicle) then - local networkId = NetworkGetNetworkIdFromEntity(createdVehicle) - vehicleProperties.NetId = networkId - Entity(createdVehicle).state:set('VehicleProperties', vehicleProperties, true) - cb(networkId) - else - print('[^1ERROR^7] Unfortunately, this vehicle has not spawned') + if not DoesEntityExist(createdVehicle) then + return print('[^1ERROR^7] Unfortunately, this vehicle has not spawned') end + + Entity(createdVehicle).state:set('VehicleProperties', vehicleProperties, true) + cb(NetworkGetNetworkIdFromEntity(createdVehicle)) else print(('[^1ERROR^7] Tried to spawn invalid vehicle - ^5%s^7!'):format(model)) end From 18b82cb8164e7668de7649c4ab583f88b04d93d3 Mon Sep 17 00:00:00 2001 From: ic3d_ <65400214+ic3d00@users.noreply.github.com> Date: Mon, 13 Feb 2023 17:27:26 +0000 Subject: [PATCH 23/41] Update common.lua | Add Config.EnablePaycheck --- [core]/es_extended/server/common.lua | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/[core]/es_extended/server/common.lua b/[core]/es_extended/server/common.lua index 3e4b9671..16af44cb 100644 --- a/[core]/es_extended/server/common.lua +++ b/[core]/es_extended/server/common.lua @@ -96,7 +96,9 @@ MySQL.ready(function() print('[^2INFO^7] ESX ^5Legacy 1.9.1^0 initialized!') StartDBSync() - StartPayCheck() + if Config.EnablePaycheck then + StartPayCheck() + end end) RegisterServerEvent('esx:clientLog') From 80628eaa4f915d9cdc30e5d8f56b8f61afbec204 Mon Sep 17 00:00:00 2001 From: ic3d_ <65400214+ic3d00@users.noreply.github.com> Date: Mon, 13 Feb 2023 17:28:00 +0000 Subject: [PATCH 24/41] Update config.lua | Add Config.EnablePaycheck --- [core]/es_extended/config.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/[core]/es_extended/config.lua b/[core]/es_extended/config.lua index 2f465f82..f47052cd 100644 --- a/[core]/es_extended/config.lua +++ b/[core]/es_extended/config.lua @@ -20,6 +20,7 @@ Config.StartingAccountMoney = {bank = 50000} Config.EnableSocietyPayouts = false -- pay from the society account that the player is employed at? Requirement: esx_society Config.MaxWeight = 24 -- the max inventory weight without backpack +Config.EnablePaycheck = true -- enable paycheck Config.PaycheckInterval = 7 * 60000 -- how often to recieve pay checks in milliseconds Config.EnableDebug = false -- Use Debug options? Config.EnableDefaultInventory = true -- Display the default Inventory ( F2 ) From 1f49d7c28c089e46edab331722f51a0545211072 Mon Sep 17 00:00:00 2001 From: TheFantomas Date: Mon, 13 Feb 2023 22:10:27 +0100 Subject: [PATCH 25/41] Revert "Merge pull request #885 from esx-framework/fix-csoki" This reverts commit da3e5fbab961ef7909421b508af91b756c8d560d, reversing changes made to 39cf1053c771e9123ec270a12d97988d4525f7e9. --- [core]/es_extended/client/main.lua | 29 ++++++++++++++++----------- [core]/es_extended/server/onesync.lua | 12 ++++++----- 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/[core]/es_extended/client/main.lua b/[core]/es_extended/client/main.lua index 0767cd40..32fe238a 100644 --- a/[core]/es_extended/client/main.lua +++ b/[core]/es_extended/client/main.lua @@ -182,18 +182,23 @@ AddEventHandler('esx:restoreLoadout', function() end end) -AddStateBagChangeHandler('VehicleProperties', nil, function(bagName, _, value) - if not value then - return - end - - local vehicle = GetEntityFromStateBagName(bagName) - if not DoesEntityExist(vehicle) then - return - end - - if NetworkGetEntityOwner(vehicle) == PlayerId() then - ESX.Game.SetVehicleProperties(vehicle, value) +AddStateBagChangeHandler('VehicleProperties', nil, function(bagName, key, value) + if value then + Wait(0) + local NetId = value.NetId + local Vehicle = NetworkGetEntityFromNetworkId(NetId) + local Tries = 0 + while Vehicle == 0 do + Vehicle = NetworkGetEntityFromNetworkId(NetId) + Wait(100) + Tries = Tries + 1 + if Tries > 300 then + break + end + end + if NetworkGetEntityOwner(Vehicle) == PlayerId() then + ESX.Game.SetVehicleProperties(Vehicle, value) + end end end) diff --git a/[core]/es_extended/server/onesync.lua b/[core]/es_extended/server/onesync.lua index ffcfa7d7..60ab1d56 100644 --- a/[core]/es_extended/server/onesync.lua +++ b/[core]/es_extended/server/onesync.lua @@ -69,12 +69,14 @@ function ESX.OneSync.SpawnVehicle(model, coords, heading, properties, cb) ESX.GetVehicleType(vehicleModel, xPlayer.id, function(vehicleType) if vehicleType then local createdVehicle = CreateVehicleServerSetter(vehicleModel, vehicleType, coords, heading) - if not DoesEntityExist(createdVehicle) then - return print('[^1ERROR^7] Unfortunately, this vehicle has not spawned') + if DoesEntityExist(createdVehicle) then + local networkId = NetworkGetNetworkIdFromEntity(createdVehicle) + vehicleProperties.NetId = networkId + Entity(createdVehicle).state:set('VehicleProperties', vehicleProperties, true) + cb(networkId) + else + print('[^1ERROR^7] Unfortunately, this vehicle has not spawned') end - - Entity(createdVehicle).state:set('VehicleProperties', vehicleProperties, true) - cb(NetworkGetNetworkIdFromEntity(createdVehicle)) else print(('[^1ERROR^7] Tried to spawn invalid vehicle - ^5%s^7!'):format(model)) end From 3181b2ce911df3fdb644462a39f1b8e192bc6692 Mon Sep 17 00:00:00 2001 From: TheFantomas <117121911+TheFantomas@users.noreply.github.com> Date: Mon, 13 Feb 2023 22:14:57 +0100 Subject: [PATCH 26/41] refactor(es_extended/server/onesync) Reverse if statement --- [core]/es_extended/server/onesync.lua | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/[core]/es_extended/server/onesync.lua b/[core]/es_extended/server/onesync.lua index 21e979c9..61e2470f 100644 --- a/[core]/es_extended/server/onesync.lua +++ b/[core]/es_extended/server/onesync.lua @@ -70,14 +70,13 @@ function ESX.OneSync.SpawnVehicle(model, coords, heading, properties, cb) ESX.GetVehicleType(vehicleModel, xPlayer.id, function(vehicleType) if vehicleType then local createdVehicle = CreateVehicleServerSetter(vehicleModel, vehicleType, coords, heading) - if DoesEntityExist(createdVehicle) then - local networkId = NetworkGetNetworkIdFromEntity(createdVehicle) - vehicleProperties.NetId = networkId - Entity(createdVehicle).state:set('VehicleProperties', vehicleProperties, true) - cb(networkId) - else - print('[^1ERROR^7] Unfortunately, this vehicle has not spawned') + if not DoesEntityExist(createdVehicle) then + return print('[^1ERROR^7] Unfortunately, this vehicle has not spawned') end + + local networkId = NetworkGetNetworkIdFromEntity(createdVehicle) + Entity(createdVehicle).state:set('VehicleProperties', vehicleProperties, true) + cb(networkId) else print(('[^1ERROR^7] Tried to spawn invalid vehicle - ^5%s^7!'):format(model)) end From 5fd42adaf3897fab02975b3c00f4560c570af040 Mon Sep 17 00:00:00 2001 From: TheFantomas <117121911+TheFantomas@users.noreply.github.com> Date: Mon, 13 Feb 2023 22:31:42 +0100 Subject: [PATCH 27/41] Just little space --- [core]/es_extended/config.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/[core]/es_extended/config.lua b/[core]/es_extended/config.lua index ea043be2..e11d6b4b 100644 --- a/[core]/es_extended/config.lua +++ b/[core]/es_extended/config.lua @@ -31,6 +31,7 @@ Config.EnablePVP = true -- Allow Player to player combat Config.Multichar = true -- Enable support for esx_multicharacter Config.Identity = true -- Select a characters identity data before they have loaded in (this happens by default with multichar) Config.DistanceGive = 4.0 -- Max distance when giving items, weapons etc. + Config.DisableHealthRegeneration = false -- Player will no longer regenerate health Config.DisableVehicleRewards = false -- Disables Player Recieving weapons from vehicles Config.DisableNPCDrops = false -- stops NPCs from dropping weapons on death From 051a8d020044f75cee45115207b7ac41480bb706 Mon Sep 17 00:00:00 2001 From: TheFantomas <117121911+TheFantomas@users.noreply.github.com> Date: Mon, 13 Feb 2023 22:32:40 +0100 Subject: [PATCH 28/41] Fix DisableVehicleRewards --- [core]/es_extended/client/main.lua | 30 +++++------------------------- 1 file changed, 5 insertions(+), 25 deletions(-) diff --git a/[core]/es_extended/client/main.lua b/[core]/es_extended/client/main.lua index 32fe238a..e197e46b 100644 --- a/[core]/es_extended/client/main.lua +++ b/[core]/es_extended/client/main.lua @@ -74,31 +74,7 @@ AddEventHandler('esx:playerLoaded', function(xPlayer, isNew, skin) end end - -- DisableVehicleRewards - if Config.DisableVehicleRewards then - local inVehicle = false - - local function DisableVehicleRewardsThread() - CreateThread(function() - while inVehicle do - DisablePlayerVehicleRewards(playerId) - Wait(0) - end - end) - end - - AddEventHandler('esx:enteredVehicle', function(vehicle, plate, seat, displayName, netId) - if GetVehicleClass(vehicle) == 18 then - DisableVehicleRewardsThread() - end - end) - - AddEventHandler('esx:exitedVehicle', function(vehicle, plate, seat, displayName, netId) - inVehicle = false - end) - end - - if Config.DisableHealthRegeneration or Config.DisableWeaponWheel or Config.DisableAimAssist then + if Config.DisableHealthRegeneration or Config.DisableWeaponWheel or Config.DisableAimAssist or Config.DisableVehicleRewards then CreateThread(function() while true do if Config.DisableHealthRegeneration then @@ -115,6 +91,10 @@ AddEventHandler('esx:playerLoaded', function(xPlayer, isNew, skin) SetPlayerLockonRangeOverride(playerId, 2.0) end end + + if Config.DisableVehicleRewards then + DisablePlayerVehicleRewards(playerId) + end Wait(0) end From df1a4f247d37afffe2853fa14b6b564ffc484686 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=20Gerg=C5=91?= <69343477+Rav3n95@users.noreply.github.com> Date: Wed, 15 Feb 2023 09:30:11 +0100 Subject: [PATCH 29/41] async went to holiday --- [core]/async/LICENSE | 674 ++++++++++++++++++++++++++++++++++++ [core]/async/README.md | 15 + [core]/async/async.lua | 71 ++++ [core]/async/fxmanifest.lua | 7 + 4 files changed, 767 insertions(+) create mode 100644 [core]/async/LICENSE create mode 100644 [core]/async/README.md create mode 100644 [core]/async/async.lua create mode 100644 [core]/async/fxmanifest.lua diff --git a/[core]/async/LICENSE b/[core]/async/LICENSE new file mode 100644 index 00000000..4c37e893 --- /dev/null +++ b/[core]/async/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + async + Copyright (C) 2015-2022 Jérémie N'gadi + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + async Copyright (C) 2015-2022 Jérémie N'gadi + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. \ No newline at end of file diff --git a/[core]/async/README.md b/[core]/async/README.md new file mode 100644 index 00000000..9c76d28d --- /dev/null +++ b/[core]/async/README.md @@ -0,0 +1,15 @@ +

[ESX] Async

Discord - Website - Documentation + +A very Simple resource that allows resources to run tasks asynchronously. + +## Legal + +async - asynchronous tasks. + +Copyright (C) 2015-2022 Jérémie N'gadi + +This program Is free software: you can redistribute it And/Or modify it under the terms Of the GNU General Public License As published by the Free Software Foundation, either version 3 Of the License, Or (at your option) any later version. + +This program Is distributed In the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty Of MERCHANTABILITY Or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License For more details. + +You should have received a copy Of the GNU General Public License along with this program. If Not, see . diff --git a/[core]/async/async.lua b/[core]/async/async.lua new file mode 100644 index 00000000..aacd1a44 --- /dev/null +++ b/[core]/async/async.lua @@ -0,0 +1,71 @@ +Async = {} + +function Async.parallel(tasks, cb) + if #tasks == 0 then + cb({}) + return + end + + local remaining = #tasks + local results = {} + + for i = 1, #tasks, 1 do + CreateThread(function() + tasks[i](function(result) + results[#results+ 1] = result + + remaining = remaining - 1; + + if remaining == 0 then + cb(results) + end + end) + end) + end +end + +function Async.parallelLimit(tasks, limit, cb) + if #tasks == 0 then + cb({}) + return + end + + local remaining = #tasks + local running = 0 + local queue, results = {}, {} + + for i=1, #tasks, 1 do + queue[#queue + 1] = tasks[i] + end + + local function processQueue() + if #queue == 0 then + return + end + + while running < limit and #queue > 0 do + local task = table.remove(queue, 1) + + running = running + 1 + + task(function(result) + results[#results+ 1] = result + + remaining = remaining - 1; + running = running - 1 + + if remaining == 0 then + cb(results) + end + end) + end + + CreateThread(processQueue) + end + + processQueue() +end + +function Async.series(tasks, cb) + Async.parallelLimit(tasks, 1, cb) +end diff --git a/[core]/async/fxmanifest.lua b/[core]/async/fxmanifest.lua new file mode 100644 index 00000000..7f296d3a --- /dev/null +++ b/[core]/async/fxmanifest.lua @@ -0,0 +1,7 @@ +fx_version 'cerulean' +game 'gta5' + +author 'ESX-Framework' +description 'asynchronous Tasks' +lua54 'yes' +shared_script 'async.lua' From 93895bac7b6c1ae8ec160c0432e434de8e3bd31e Mon Sep 17 00:00:00 2001 From: TheFantomas <117121911+TheFantomas@users.noreply.github.com> Date: Wed, 15 Feb 2023 15:46:42 +0100 Subject: [PATCH 30/41] Light config value move --- [core]/es_extended/config.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/es_extended/config.lua b/[core]/es_extended/config.lua index 72a8a54a..1c6da954 100644 --- a/[core]/es_extended/config.lua +++ b/[core]/es_extended/config.lua @@ -20,9 +20,9 @@ Config.StartingAccountMoney = {bank = 50000} Config.DefaultSpawn = {x = -269.4, y = -955.3, z = 31.2, heading = 205.8} +Config.EnablePaycheck = true -- enable paycheck Config.EnableSocietyPayouts = false -- pay from the society account that the player is employed at? Requirement: esx_society Config.MaxWeight = 24 -- the max inventory weight without backpack -Config.EnablePaycheck = true -- enable paycheck Config.PaycheckInterval = 7 * 60000 -- how often to recieve pay checks in milliseconds Config.EnableDebug = false -- Use Debug options? Config.EnableDefaultInventory = true -- Display the default Inventory ( F2 ) From 1c7673dc2a9f14eabd79e776ba3ad2875cb72b08 Mon Sep 17 00:00:00 2001 From: ozzysunn <54042811+ozzysunn@users.noreply.github.com> Date: Fri, 17 Feb 2023 02:41:34 +0800 Subject: [PATCH 31/41] Update tc.lua add missing weapons,correct the translation. --- [core]/es_extended/locales/tc.lua | 311 +++++++++++++++++++++--------- 1 file changed, 224 insertions(+), 87 deletions(-) diff --git a/[core]/es_extended/locales/tc.lua b/[core]/es_extended/locales/tc.lua index 28d12b3d..59c269f1 100644 --- a/[core]/es_extended/locales/tc.lua +++ b/[core]/es_extended/locales/tc.lua @@ -54,6 +54,7 @@ Locales['tc'] = { ['in_vehicle'] = '請離開載具', -- Commands + ['command_bring'] = '傳送玩家到你旁邊', ['command_car'] = '生成載具', ['command_car_car'] = '生成載具的模型名稱或希哈值', ['command_cardel'] = '刪除附近的載具', @@ -61,7 +62,9 @@ Locales['tc'] = { ['command_clear'] = '清除聊天紀錄', ['command_clearall'] = '清除所有玩家的聊天紀錄', ['command_clearinventory'] = '清除玩家背包', - ['command_clearloadout'] = '清除玩家人物造型', + ['command_clearloadout'] = '清除玩家武器配置', + ['command_freeze'] = '凍結玩家', + ['command_unfreeze'] = '解凍玩家', ['command_giveaccountmoney'] = '給予帳戶錢', ['command_giveaccountmoney_account'] = '有效的帳戶名稱', ['command_giveaccountmoney_amount'] = '添加的數量', @@ -78,6 +81,8 @@ Locales['tc'] = { ['command_giveweaponcomponent_invalid'] = '無效的武器配件', ['command_giveweaponcomponent_hasalready'] = '該玩家已經擁有了武器配件', ['command_giveweaponcomponent_missingweapon'] = '該玩家沒有那把武器', + ['command_goto'] = '傳送到一名玩家旁邊', + ['command_kill'] = '殺死一名玩家', ['command_save'] = '保存玩家數據至資料庫', ['command_saveall'] = '保存所有玩家數據至資料庫', ['command_setaccountmoney'] = '為玩家設置賬戶資金', @@ -100,108 +105,240 @@ Locales['tc'] = { ['commanderror_invalidcommand'] = '/%s 不是有效的指令!', ['commanderror_invalidplayerid'] = '無效的玩家ID', ['commandgeneric_playerid'] = '玩家id', - ['command_giveammo_noweapon_found'] = '%s does not have that weapon', - ['command_giveammo_weapon'] = 'Weapon name', - ['command_giveammo_ammo'] = 'Ammo Quantity', + ['command_giveammo_noweapon_found'] = '%s 沒有找到這個武器', + ['command_giveammo_weapon'] = '武器名稱', + ['command_giveammo_ammo'] = '彈藥數量', + ['tpm_nowaypoint'] = '沒有設定導航點', + ['tpm_success'] = '成功傳送', + + ['noclip_message'] = 'Noclip 已被開啟 %s', + ['enabled'] = '~g~開啟~s~', + ['disabled'] = '~r~關閉~s~', -- Locale settings ['locale_digit_grouping_symbol'] = ',', ['locale_currency'] = '$%s', -- Weapons - ['weapon_knife'] = '刀', - ['weapon_nightstick'] = '警棍', - ['weapon_hammer'] = '錘子', - ['weapon_bat'] = '棒球棍', - ['weapon_golfclub'] = '高爾夫球棍', - ['weapon_crowbar'] = '撬棍', - ['weapon_pistol'] = '手槍', - ['weapon_combatpistol'] = '戰鬥手槍', - ['weapon_appistol'] = '穿甲手槍', - ['weapon_pistol50'] = '.50口徑手槍', - ['weapon_microsmg'] = '迷你衝鋒槍', - ['weapon_smg'] = '衝鋒槍', - ['weapon_assaultsmg'] = '突擊衝鋒槍', - ['weapon_assaultrifle'] = '突擊步槍', - ['weapon_carbinerifle'] = '卡賓槍步槍', - ['weapon_advancedrifle'] = '精準步槍', - ['weapon_mg'] = '機槍', - ['weapon_combatmg'] = '戰鬥機槍', - ['weapon_pumpshotgun'] = '霰彈槍', - ['weapon_sawnoffshotgun'] = '削短型霰彈槍', - ['weapon_assaultshotgun'] = '突擊霰彈槍', - ['weapon_bullpupshotgun'] = '泵動式霰彈槍', - ['weapon_stungun'] = '電擊槍', - ['weapon_sniperrifle'] = '狙擊步槍', - ['weapon_heavysniper'] = '重型狙擊槍', - ['weapon_grenadelauncher'] = '榴彈砲', - ['weapon_rpg'] = '火箭炮', - ['weapon_minigun'] = '火神機槍', - ['weapon_grenade'] = '手榴彈', - ['weapon_stickybomb'] = '黏彈', - ['weapon_smokegrenade'] = '煙霧彈', - ['weapon_bzgas'] = '催淚瓦斯', - ['weapon_molotov'] = '汽油彈', - ['weapon_fireextinguisher'] = '滅火器', - ['weapon_petrolcan'] = '汽油桶', - ['weapon_ball'] = '棒球', - ['weapon_snspistol'] = '劣質手槍', - ['weapon_bottle'] = '酒瓶', - ['weapon_gusenberg'] = '古森柏衝鋒槍', - ['weapon_specialcarbine'] = '特製卡賓槍', - ['weapon_heavypistol'] = '重型手槍', - ['weapon_bullpuprifle'] = 'AUG突擊步槍', - ['weapon_dagger'] = '匕首', - ['weapon_vintagepistol'] = '老式手槍', - ['weapon_firework'] = '煙火發射器', - ['weapon_musket'] = '老式火槍', - ['weapon_heavyshotgun'] = '重型霰彈槍', - ['weapon_marksmanrifle'] = '精確射手步槍', - ['weapon_hominglauncher'] = '火箭彈發射器', - ['weapon_proxmine'] = '感應地雷', - ['weapon_snowball'] = '雪球', - ['weapon_flaregun'] = '信號槍', - ['weapon_combatpdw'] = '戰鬥自衛衝鋒槍', - ['weapon_marksmanpistol'] = '神射手槍', - ['weapon_knuckle'] = '指虎', - ['weapon_hatchet'] = '斧頭', - ['weapon_railgun'] = '電磁軌彈炮', - ['weapon_machete'] = '開山刀', - ['weapon_machinepistol'] = '衝鋒手槍', - ['weapon_switchblade'] = '蝴蝶刀', - ['weapon_revolver'] = '重左輪手槍', - ['weapon_dbshotgun'] = '雙槍霰彈槍', - ['weapon_compactrifle'] = '半自動步槍', - ['weapon_autoshotgun'] = '半自動霰彈槍', - ['weapon_battleaxe'] = '戰斧', - ['weapon_compactlauncher'] = '精簡榴彈發射器', - ['weapon_minismg'] = '迷你衝鋒槍', - ['weapon_pipebomb'] = '土製炸彈', - ['weapon_poolcue'] = '桌球桿', - ['weapon_wrench'] = '扳手', + + -- Melee + ['weapon_dagger'] = '古董騎兵匕首', + ['weapon_bat'] = '球棒', + ['weapon_battleaxe'] = '戰鬥斧頭', + ['weapon_bottle'] = '瓶子', + ['weapon_crowbar'] = '鐵撬', ['weapon_flashlight'] = '手電筒', + ['weapon_golfclub'] = '高爾夫球桿', + ['weapon_hammer'] = '鐵鎚', + ['weapon_hatchet'] = '斧頭', + ['weapon_knife'] = '小刀', + ['weapon_knuckle'] = '手指虎', + ['weapon_machete'] = '開山刀', + ['weapon_nightstick'] = '警棍', + ['weapon_wrench'] = '管鉗扳手', + ['weapon_poolcue'] = '桌球桿', + ['weapon_stone_hatchet'] = '石斧', + ['weapon_switchblade'] = '彈簧刀', + + -- Handguns + ['weapon_appistol'] = '穿甲手槍', + ['weapon_ceramicpistol'] = '陶瓷手槍', + ['weapon_combatpistol'] = '戰鬥手槍', + ['weapon_doubleaction'] = '雙動式左輪手槍', + ['weapon_navyrevolver'] = '海軍左輪手槍', + ['weapon_flaregun'] = '信號槍', + ['weapon_gadgetpistol'] = '佩里克手槍', + ['weapon_heavypistol'] = '重型手槍', + ['weapon_revolver'] = '重型左輪手槍', + ['weapon_revolver_mk2'] = '重型左輪手槍 MK2', + ['weapon_marksmanpistol'] = '射手手槍', + ['weapon_pistol'] = '手槍', + ['weapon_pistol_mk2'] = '手槍 MK2', + ['weapon_pistol50'] = '50 口徑手槍', + ['weapon_snspistol'] = '劣質手槍', + ['weapon_snspistol_mk2'] = '劣質手槍 MK2', + ['weapon_stungun'] = '電擊槍', + ['weapon_raypistol'] = '原子堡手槍', + ['weapon_vintagepistol'] = '復古手槍', + + -- Shotguns + ['weapon_assaultshotgun'] = '突擊霰彈槍', + ['weapon_autoshotgun'] = '衝鋒霰彈槍', + ['weapon_bullpupshotgun'] = '犢牛式霰彈槍', + ['weapon_combatshotgun'] = '戰鬥霰彈槍', + ['weapon_dbshotgun'] = '雙管霰彈槍', + ['weapon_heavyshotgun'] = '重型霰彈槍', + ['weapon_musket'] = '老式火槍', + ['weapon_pumpshotgun'] = '泵動式霰彈槍', + ['weapon_pumpshotgun_mk2'] = '泵動式霰彈槍 MK2', + ['weapon_sawnoffshotgun'] = '削短型霰彈槍', + + -- SMG & LMG + ['weapon_assaultsmg'] = '突擊衝鋒槍', + ['weapon_combatmg'] = '戰鬥機關槍', + ['weapon_combatmg_mk2'] = '戰鬥機關槍 MK2', + ['weapon_combatpdw'] = '戰鬥自衛衝鋒槍', + ['weapon_gusenberg'] = '古森柏衝鋒槍', + ['weapon_machinepistol'] = '衝鋒手槍', + ['weapon_mg'] = '機關槍', + ['weapon_microsmg'] = '小型衝鋒槍', + ['weapon_minismg'] = '迷你衝鋒槍', + ['weapon_smg'] = '衝鋒槍', + ['weapon_smg_mk2'] = '衝鋒槍', + ['weapon_raycarbine'] = '不潔使者', + + -- Rifles + ['weapon_advancedrifle'] = '高階步槍', + ['weapon_assaultrifle'] = '突擊步槍', + ['weapon_assaultrifle_mk2'] = '突擊步槍 MK2', + ['weapon_bullpuprifle'] = '犢牛式步槍', + ['weapon_bullpuprifle_mk2'] = '犢牛式步槍 MK2', + ['weapon_carbinerifle'] = '卡賓步槍', + ['weapon_carbinerifle_mk2'] = '卡賓步槍 MK2', + ['weapon_compactrifle'] = '精簡型步槍', + ['weapon_militaryrifle'] = '軍用步槍', + ['weapon_specialcarbine'] = '特製卡賓步槍', + ['weapon_specialcarbine_mk2'] = '特製卡賓步槍 MK2', + + -- Sniper + ['weapon_heavysniper'] = '重型狙擊槍', + ['weapon_heavysniper_mk2'] = '重型狙擊槍 MK2', + ['weapon_marksmanrifle'] = '射手步槍', + ['weapon_marksmanrifle_mk2'] = '射手步槍 MK2', + ['weapon_sniperrifle'] = '狙擊槍', + + -- Heavy / Launchers + ['weapon_compactlauncher'] = '精簡榴彈發射器', + ['weapon_firework'] = '煙火發射器', + ['weapon_grenadelauncher'] = '榴彈發射器', + ['weapon_hominglauncher'] = '追蹤彈發射器', + ['weapon_minigun'] = '火神機槍', + ['weapon_railgun'] = '雷射槍', + ['weapon_rpg'] = '火箭砲', + ['weapon_rayminigun'] = '寡婦製造者', + + -- Criminal Enterprises DLC + ['weapon_metaldetector'] = '金屬探測器', + ['weapon_precisionrifle'] = '精準步槍', + ['weapon_tactilerifle'] = '制式卡賓步槍', + + -- Thrown + ['weapon_ball'] = '球', + ['weapon_bzgas'] = '毒氣彈', + ['weapon_flare'] = '信號彈', + ['weapon_grenade'] = '手榴彈', + ['weapon_petrolcan'] = '汽油桶', + ['weapon_hazardcan'] = '有害汽油桶', + ['weapon_molotov'] = '汽油彈', + ['weapon_proxmine'] = '感應式地雷', + ['weapon_pipebomb'] = '土製炸彈', + ['weapon_snowball'] = '雪球', + ['weapon_stickybomb'] = '黏彈', + ['weapon_smokegrenade'] = '催淚瓦斯', + + -- Special + ['weapon_fireextinguisher'] = '滅火器', + ['weapon_digiscanner'] = '數位掃描儀', + ['weapon_garbagebag'] = '垃圾袋', + ['weapon_handcuffs'] = '手銬', + ['gadget_nightvision'] = '夜視鏡', ['gadget_parachute'] = '降落傘', - ['weapon_flare'] = '信號棒', - ['weapon_doubleaction'] = '左輪手槍', -- Weapon Components - ['component_clip_default'] = '默認彈夾', - ['component_clip_extended'] = '延伸彈夾', - ['component_clip_drum'] = '彈鼓式彈匣', - ['component_clip_box'] = '盒式彈匣', - ['component_flashlight'] = '手電筒', + ['component_knuckle_base'] = '基本款', + ['component_knuckle_pimp'] = '皮條客', + ['component_knuckle_ballas'] = '巴勒幫', + ['component_knuckle_dollar'] = '江湖騙子', + ['component_knuckle_diamond'] = '搖滾龐克', + ['component_knuckle_hate'] = '仇恨份子', + ['component_knuckle_love'] = '甜蜜情人', + ['component_knuckle_player'] = '花花公子', + ['component_knuckle_king'] = '王者無敵', + ['component_knuckle_vagos'] = '維戈斯幫', + + ['component_luxary_finish'] = '尤瑟夫·阿米爾富豪塗裝', + + ['component_handle_default'] = '原裝刀柄', + ['component_handle_vip'] = '老大款式', + ['component_handle_bodyguard'] = '保鑣款式', + + ['component_vip_finish'] = '老大款式', + ['component_bodyguard_finish'] = '保鑣款式', + + ['component_camo_finish'] = '數碼迷彩', + ['component_camo_finish2'] = '筆刷迷彩', + ['component_camo_finish3'] = '林地迷彩', + ['component_camo_finish4'] = '骷髏頭', + ['component_camo_finish5'] = '希斯提·耐', + ['component_camo_finish6'] = '神之子', + ['component_camo_finish7'] = '豹紋', + ['component_camo_finish8'] = '斑馬紋', + ['component_camo_finish9'] = '幾何', + ['component_camo_finish10'] = 'BOOM!', + ['component_camo_finish11'] = '愛國者', + + ['component_camo_slide_finish'] = '數碼迷彩塗裝', + ['component_camo_slide_finish2'] = '筆刷迷彩塗裝', + ['component_camo_slide_finish3'] = '林地迷彩塗裝', + ['component_camo_slide_finish4'] = '骷髏頭塗裝', + ['component_camo_slide_finish5'] = '希斯提·耐塗裝', + ['component_camo_slide_finish6'] = '神之子塗裝', + ['component_camo_slide_finish7'] = '豹紋塗裝', + ['component_camo_slide_finish8'] = '斑馬紋塗裝', + ['component_camo_slide_finish9'] = '幾何塗裝', + ['component_camo_slide_finish10'] = 'BOOM塗裝', + ['component_camo_slide_finish11'] = '愛國者塗裝', + + ['component_clip_default'] = '預設彈匣', + ['component_clip_extended'] = '擴充彈匣', + ['component_clip_drum'] = '彈鼓', + ['component_clip_box'] = '盒型彈匣', + + ['component_scope_holo'] = '全像式瞄準鏡', + ['component_scope_small'] = '小型瞄準鏡', + ['component_scope_medium'] = '中型瞄準鏡', + ['component_scope_large'] = '大型瞄準鏡', ['component_scope'] = '瞄準鏡', - ['component_scope_advanced'] = '高級瞄準鏡', - ['component_suppressor'] = '消音管', + ['component_scope_advanced'] = '先進瞄準鏡', + ['component_ironsights'] = '鐵瞄具', + + ['component_suppressor'] = '消音器', + ['component_compensator'] = '補償器', + + ['component_muzzle_flat'] = '扁型槍口制動器', + ['component_muzzle_tactical'] = '戰術槍口制動器', + ['component_muzzle_fat'] = '寬尾型槍口制動器', + ['component_muzzle_precision'] = '精準槍口制動器', + ['component_muzzle_heavy'] = '耐用型槍口制動器', + ['component_muzzle_slanted'] = '傾斜型槍口制動器', + ['component_muzzle_split'] = '分岔型槍口制動器', + ['component_muzzle_squared'] = '方形槍口制動器', + + ['component_flashlight'] = '手電筒', ['component_grip'] = '握把', - ['component_luxary_finish'] = '豪華塗裝', + + ['component_barrel_default'] = '預設槍管', + ['component_barrel_heavy'] = '重型槍管', + + ['component_ammo_tracer'] = '曳光彈', + ['component_ammo_incendiary'] = '燃燒彈', + ['component_ammo_hollowpoint'] = '空包彈', + ['component_ammo_fmj'] = '全金屬外殼彈', + ['component_ammo_armor'] = '穿甲彈', + ['component_ammo_explosive'] = '爆裂彈', + + ['component_shells_default'] = '預設彈藥', + ['component_shells_incendiary'] = '龍息彈', + ['component_shells_armor'] = '鋼製獵鹿彈', + ['component_shells_hollowpoint'] = '飛鏢彈', + ['component_shells_explosive'] = '爆裂彈', -- Weapon Ammo ['ammo_rounds'] = '發(子彈)', ['ammo_shells'] = '發(子彈)', ['ammo_charge'] = '噴', ['ammo_petrol'] = '加崙(燃料)', - ['ammo_firework'] = '發(煙火子彈)', + ['ammo_firework'] = '發(煙火)', ['ammo_rockets'] = '枚(火箭彈)', ['ammo_grenadelauncher'] = '發(榴彈)', ['ammo_grenade'] = '枚(手榴彈)', @@ -217,12 +354,12 @@ Locales['tc'] = { ['ammo_flaregun'] = '發(信號彈)', -- Weapon Tints - ['tint_default'] = '默認色調', + ['tint_default'] = '預設色調', ['tint_green'] = '綠色調', ['tint_gold'] = '金色調', ['tint_pink'] = '粉色調', ['tint_army'] = '軍用色調', ['tint_lspd'] = '洛聖都警察局色調', ['tint_orange'] = '橘色調', - ['tint_platinum'] = '柏金色調', + ['tint_platinum'] = '白金色調', } From 23c29f5972aae3f12cc2569ee6c1e7fef097a9d5 Mon Sep 17 00:00:00 2001 From: Csoki Date: Sun, 19 Feb 2023 12:32:06 +0100 Subject: [PATCH 32/41] update scripts version to 1.9.2 --- [core]/cron/fxmanifest.lua | 2 +- [core]/es_extended/fxmanifest.lua | 2 +- [core]/esx_context/fxmanifest.lua | 2 +- [core]/esx_identity/fxmanifest.lua | 2 +- [core]/esx_loadingscreen/fxmanifest.lua | 2 +- [core]/esx_menu_default/fxmanifest.lua | 2 +- [core]/esx_menu_dialog/fxmanifest.lua | 2 +- [core]/esx_menu_list/fxmanifest.lua | 2 +- [core]/esx_multicharacter/fxmanifest.lua | 2 +- [core]/esx_notify/fxmanifest.lua | 2 +- [core]/esx_skin/fxmanifest.lua | 2 +- [core]/esx_textui/fxmanifest.lua | 2 +- [core]/skinchanger/fxmanifest.lua | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/[core]/cron/fxmanifest.lua b/[core]/cron/fxmanifest.lua index d5afd2aa..b48b0f2a 100644 --- a/[core]/cron/fxmanifest.lua +++ b/[core]/cron/fxmanifest.lua @@ -4,6 +4,6 @@ game 'gta5' author 'ESX-Framework' description 'cron' lua54 'yes' -version '1.9.0' +version '1.9.2' server_script 'server/main.lua' diff --git a/[core]/es_extended/fxmanifest.lua b/[core]/es_extended/fxmanifest.lua index b5230338..027ec462 100644 --- a/[core]/es_extended/fxmanifest.lua +++ b/[core]/es_extended/fxmanifest.lua @@ -5,7 +5,7 @@ game 'gta5' description 'ES Extended' lua54 'yes' -version '1.9.1' +version '1.9.2' shared_scripts { 'locale.lua', diff --git a/[core]/esx_context/fxmanifest.lua b/[core]/esx_context/fxmanifest.lua index 6bc711a9..791bbf08 100644 --- a/[core]/esx_context/fxmanifest.lua +++ b/[core]/esx_context/fxmanifest.lua @@ -4,7 +4,7 @@ game 'gta5' author 'ESX-Framework & Brayden' description 'Offical ESX Legacy Context Menu' lua54 'yes' -version '1.9.0' +version '1.9.2' ui_page 'index.html' diff --git a/[core]/esx_identity/fxmanifest.lua b/[core]/esx_identity/fxmanifest.lua index a04e812e..2e32480d 100644 --- a/[core]/esx_identity/fxmanifest.lua +++ b/[core]/esx_identity/fxmanifest.lua @@ -4,7 +4,7 @@ game 'gta5' description 'ESX Identity' lua54 'yes' -version '1.9.0' +version '1.9.2' shared_scripts { '@es_extended/imports.lua', diff --git a/[core]/esx_loadingscreen/fxmanifest.lua b/[core]/esx_loadingscreen/fxmanifest.lua index 3ab7ad59..c4efb00a 100644 --- a/[core]/esx_loadingscreen/fxmanifest.lua +++ b/[core]/esx_loadingscreen/fxmanifest.lua @@ -1,5 +1,5 @@ game 'common' -version '1.9.0' +version '1.9.2' fx_version 'cerulean' author 'ESX-Framework' lua54 'yes' diff --git a/[core]/esx_menu_default/fxmanifest.lua b/[core]/esx_menu_default/fxmanifest.lua index 8e0b4597..5a87e271 100644 --- a/[core]/esx_menu_default/fxmanifest.lua +++ b/[core]/esx_menu_default/fxmanifest.lua @@ -4,7 +4,7 @@ game 'gta5' description 'ESX Menu Default' lua54 'yes' -version '1.9.0' +version '1.9.2' client_scripts {'@es_extended/imports.lua', 'client/main.lua'} diff --git a/[core]/esx_menu_dialog/fxmanifest.lua b/[core]/esx_menu_dialog/fxmanifest.lua index 07150068..89cfe460 100644 --- a/[core]/esx_menu_dialog/fxmanifest.lua +++ b/[core]/esx_menu_dialog/fxmanifest.lua @@ -4,7 +4,7 @@ game 'gta5' description 'ESX Menu Dialog' lua54 'yes' -version '1.9.0' +version '1.9.2' client_scripts { '@es_extended/imports.lua', diff --git a/[core]/esx_menu_list/fxmanifest.lua b/[core]/esx_menu_list/fxmanifest.lua index 4f581c82..e6ec9fdf 100644 --- a/[core]/esx_menu_list/fxmanifest.lua +++ b/[core]/esx_menu_list/fxmanifest.lua @@ -4,7 +4,7 @@ game 'gta5' description 'ESX Menu List' lua54 'yes' -version '1.9.0' +version '1.9.2' client_scripts { '@es_extended/imports.lua', diff --git a/[core]/esx_multicharacter/fxmanifest.lua b/[core]/esx_multicharacter/fxmanifest.lua index 42c50da6..f5355dfe 100644 --- a/[core]/esx_multicharacter/fxmanifest.lua +++ b/[core]/esx_multicharacter/fxmanifest.lua @@ -2,7 +2,7 @@ fx_version 'cerulean' game 'gta5' author 'ESX-Framework - Linden - KASH' description 'Official Multicharacter System For ESX Legacy' -version '1.9.0' +version '1.9.2' lua54 'yes' dependencies {'es_extended', 'esx_context', 'esx_identity', 'esx_skin'} diff --git a/[core]/esx_notify/fxmanifest.lua b/[core]/esx_notify/fxmanifest.lua index fc2568c8..6ec61966 100644 --- a/[core]/esx_notify/fxmanifest.lua +++ b/[core]/esx_notify/fxmanifest.lua @@ -1,7 +1,7 @@ fx_version 'adamant' lua54 'yes' game 'gta5' -version '1.9.0' +version '1.9.2' author 'ESX-Framework' description 'Official NUI Notification system for ESX' diff --git a/[core]/esx_skin/fxmanifest.lua b/[core]/esx_skin/fxmanifest.lua index 450ff5a1..86759add 100644 --- a/[core]/esx_skin/fxmanifest.lua +++ b/[core]/esx_skin/fxmanifest.lua @@ -4,7 +4,7 @@ game 'gta5' description 'ESX Skin' -version '1.9.0' +version '1.9.2' lua54 'yes' shared_script '@es_extended/imports.lua' diff --git a/[core]/esx_textui/fxmanifest.lua b/[core]/esx_textui/fxmanifest.lua index 4bc29795..8342097c 100644 --- a/[core]/esx_textui/fxmanifest.lua +++ b/[core]/esx_textui/fxmanifest.lua @@ -1,7 +1,7 @@ fx_version 'adamant' game 'gta5' author 'ESX-Framework' -version '1.9.0' +version '1.9.2' description 'ESX TextUI' lua54 'yes' client_scripts { 'TextUI.lua' } diff --git a/[core]/skinchanger/fxmanifest.lua b/[core]/skinchanger/fxmanifest.lua index 1a39f816..94d43f6d 100644 --- a/[core]/skinchanger/fxmanifest.lua +++ b/[core]/skinchanger/fxmanifest.lua @@ -6,7 +6,7 @@ lua54 'yes' description 'Official ESX-Legacy resource for handling the Player`s Skin' -version '1.9.0' +version '1.9.2' client_scripts { '@es_extended/locale.lua', From d3183773772ae029ba530a06ddc51b4fb74568e6 Mon Sep 17 00:00:00 2001 From: TheFantomas <117121911+TheFantomas@users.noreply.github.com> Date: Sun, 19 Feb 2023 15:38:26 +0100 Subject: [PATCH 33/41] fix( es_extended/server/onesync) Fix broken vehicleProperties --- [core]/es_extended/server/onesync.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/[core]/es_extended/server/onesync.lua b/[core]/es_extended/server/onesync.lua index f43acdd7..168a7bee 100644 --- a/[core]/es_extended/server/onesync.lua +++ b/[core]/es_extended/server/onesync.lua @@ -74,6 +74,7 @@ function ESX.OneSync.SpawnVehicle(model, coords, heading, properties, cb) end local networkId = NetworkGetNetworkIdFromEntity(createdVehicle) + vehicleProperties.NetId = networkId Entity(createdVehicle).state:set('VehicleProperties', vehicleProperties, true) cb(networkId) else From 5e044c6eb7696a622f21e7d5554becede7450368 Mon Sep 17 00:00:00 2001 From: TheFantomas Date: Sun, 19 Feb 2023 17:33:08 +0100 Subject: [PATCH 34/41] Preparing for 1.9.3 - So that there is no problem like with 1.9.2 --- [core]/cron/fxmanifest.lua | 2 +- [core]/es_extended/fxmanifest.lua | 2 +- [core]/esx_context/fxmanifest.lua | 2 +- [core]/esx_identity/fxmanifest.lua | 2 +- [core]/esx_loadingscreen/fxmanifest.lua | 2 +- [core]/esx_menu_default/fxmanifest.lua | 2 +- [core]/esx_menu_dialog/fxmanifest.lua | 2 +- [core]/esx_menu_list/fxmanifest.lua | 2 +- [core]/esx_multicharacter/fxmanifest.lua | 2 +- [core]/esx_notify/fxmanifest.lua | 2 +- [core]/esx_skin/fxmanifest.lua | 2 +- [core]/esx_textui/fxmanifest.lua | 2 +- [core]/skinchanger/fxmanifest.lua | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/[core]/cron/fxmanifest.lua b/[core]/cron/fxmanifest.lua index b48b0f2a..f1a95837 100644 --- a/[core]/cron/fxmanifest.lua +++ b/[core]/cron/fxmanifest.lua @@ -4,6 +4,6 @@ game 'gta5' author 'ESX-Framework' description 'cron' lua54 'yes' -version '1.9.2' +version '1.9.3' server_script 'server/main.lua' diff --git a/[core]/es_extended/fxmanifest.lua b/[core]/es_extended/fxmanifest.lua index 027ec462..78fd08c6 100644 --- a/[core]/es_extended/fxmanifest.lua +++ b/[core]/es_extended/fxmanifest.lua @@ -5,7 +5,7 @@ game 'gta5' description 'ES Extended' lua54 'yes' -version '1.9.2' +version '1.9.3' shared_scripts { 'locale.lua', diff --git a/[core]/esx_context/fxmanifest.lua b/[core]/esx_context/fxmanifest.lua index 791bbf08..0c1f12b6 100644 --- a/[core]/esx_context/fxmanifest.lua +++ b/[core]/esx_context/fxmanifest.lua @@ -4,7 +4,7 @@ game 'gta5' author 'ESX-Framework & Brayden' description 'Offical ESX Legacy Context Menu' lua54 'yes' -version '1.9.2' +version '1.9.3' ui_page 'index.html' diff --git a/[core]/esx_identity/fxmanifest.lua b/[core]/esx_identity/fxmanifest.lua index 2e32480d..ba7133f2 100644 --- a/[core]/esx_identity/fxmanifest.lua +++ b/[core]/esx_identity/fxmanifest.lua @@ -4,7 +4,7 @@ game 'gta5' description 'ESX Identity' lua54 'yes' -version '1.9.2' +version '1.9.3' shared_scripts { '@es_extended/imports.lua', diff --git a/[core]/esx_loadingscreen/fxmanifest.lua b/[core]/esx_loadingscreen/fxmanifest.lua index c4efb00a..5333324b 100644 --- a/[core]/esx_loadingscreen/fxmanifest.lua +++ b/[core]/esx_loadingscreen/fxmanifest.lua @@ -1,5 +1,5 @@ game 'common' -version '1.9.2' +version '1.9.3' fx_version 'cerulean' author 'ESX-Framework' lua54 'yes' diff --git a/[core]/esx_menu_default/fxmanifest.lua b/[core]/esx_menu_default/fxmanifest.lua index 5a87e271..d60daad2 100644 --- a/[core]/esx_menu_default/fxmanifest.lua +++ b/[core]/esx_menu_default/fxmanifest.lua @@ -4,7 +4,7 @@ game 'gta5' description 'ESX Menu Default' lua54 'yes' -version '1.9.2' +version '1.9.3' client_scripts {'@es_extended/imports.lua', 'client/main.lua'} diff --git a/[core]/esx_menu_dialog/fxmanifest.lua b/[core]/esx_menu_dialog/fxmanifest.lua index 89cfe460..c765650f 100644 --- a/[core]/esx_menu_dialog/fxmanifest.lua +++ b/[core]/esx_menu_dialog/fxmanifest.lua @@ -4,7 +4,7 @@ game 'gta5' description 'ESX Menu Dialog' lua54 'yes' -version '1.9.2' +version '1.9.3' client_scripts { '@es_extended/imports.lua', diff --git a/[core]/esx_menu_list/fxmanifest.lua b/[core]/esx_menu_list/fxmanifest.lua index e6ec9fdf..17e80e95 100644 --- a/[core]/esx_menu_list/fxmanifest.lua +++ b/[core]/esx_menu_list/fxmanifest.lua @@ -4,7 +4,7 @@ game 'gta5' description 'ESX Menu List' lua54 'yes' -version '1.9.2' +version '1.9.3' client_scripts { '@es_extended/imports.lua', diff --git a/[core]/esx_multicharacter/fxmanifest.lua b/[core]/esx_multicharacter/fxmanifest.lua index f5355dfe..ebc9bf79 100644 --- a/[core]/esx_multicharacter/fxmanifest.lua +++ b/[core]/esx_multicharacter/fxmanifest.lua @@ -2,7 +2,7 @@ fx_version 'cerulean' game 'gta5' author 'ESX-Framework - Linden - KASH' description 'Official Multicharacter System For ESX Legacy' -version '1.9.2' +version '1.9.3' lua54 'yes' dependencies {'es_extended', 'esx_context', 'esx_identity', 'esx_skin'} diff --git a/[core]/esx_notify/fxmanifest.lua b/[core]/esx_notify/fxmanifest.lua index 6ec61966..fc60108b 100644 --- a/[core]/esx_notify/fxmanifest.lua +++ b/[core]/esx_notify/fxmanifest.lua @@ -1,7 +1,7 @@ fx_version 'adamant' lua54 'yes' game 'gta5' -version '1.9.2' +version '1.9.3' author 'ESX-Framework' description 'Official NUI Notification system for ESX' diff --git a/[core]/esx_skin/fxmanifest.lua b/[core]/esx_skin/fxmanifest.lua index 86759add..68dd1dbb 100644 --- a/[core]/esx_skin/fxmanifest.lua +++ b/[core]/esx_skin/fxmanifest.lua @@ -4,7 +4,7 @@ game 'gta5' description 'ESX Skin' -version '1.9.2' +version '1.9.3' lua54 'yes' shared_script '@es_extended/imports.lua' diff --git a/[core]/esx_textui/fxmanifest.lua b/[core]/esx_textui/fxmanifest.lua index 8342097c..c063aed9 100644 --- a/[core]/esx_textui/fxmanifest.lua +++ b/[core]/esx_textui/fxmanifest.lua @@ -1,7 +1,7 @@ fx_version 'adamant' game 'gta5' author 'ESX-Framework' -version '1.9.2' +version '1.9.3' description 'ESX TextUI' lua54 'yes' client_scripts { 'TextUI.lua' } diff --git a/[core]/skinchanger/fxmanifest.lua b/[core]/skinchanger/fxmanifest.lua index 94d43f6d..7e27d7d7 100644 --- a/[core]/skinchanger/fxmanifest.lua +++ b/[core]/skinchanger/fxmanifest.lua @@ -6,7 +6,7 @@ lua54 'yes' description 'Official ESX-Legacy resource for handling the Player`s Skin' -version '1.9.2' +version '1.9.3' client_scripts { '@es_extended/locale.lua', From fd759496f3472a8230570954892fae47a20709e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=20Gerg=C5=91?= Date: Mon, 20 Feb 2023 19:03:25 +0100 Subject: [PATCH 35/41] Fix: Actions, update ped in PlayerData --- [core]/es_extended/client/modules/actions.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/[core]/es_extended/client/modules/actions.lua b/[core]/es_extended/client/modules/actions.lua index af27393a..47f3aa4a 100644 --- a/[core]/es_extended/client/modules/actions.lua +++ b/[core]/es_extended/client/modules/actions.lua @@ -24,6 +24,7 @@ CreateThread(function() if playerPed ~= PlayerPedId() then playerPed = PlayerPedId() + ESX.SetPlayerData('ped', playerPed) TriggerEvent('esx:playerPedChanged', playerPed) TriggerServerEvent('esx:playerPedChanged', PedToNet(playerPed)) end From 54b6a2b7b719aaaf9115809515420f924f4fee18 Mon Sep 17 00:00:00 2001 From: ic3d_ <65400214+ic3d00@users.noreply.github.com> Date: Mon, 20 Feb 2023 18:36:42 +0000 Subject: [PATCH 36/41] feat(esx_progressbar/fxmanifest) Add version (1.9.2) --- [core]/esx_progressbar/fxmanifest.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/[core]/esx_progressbar/fxmanifest.lua b/[core]/esx_progressbar/fxmanifest.lua index 993113ad..f016689d 100644 --- a/[core]/esx_progressbar/fxmanifest.lua +++ b/[core]/esx_progressbar/fxmanifest.lua @@ -2,6 +2,7 @@ fx_version 'adamant' game 'gta5' author 'ESX-Framework' lua54 'yes' +version '1.9.2' description 'ESX Progressbar' client_scripts { 'Progress.lua' } From 5b3c0e6784f86512de322d7d95aa0c5701c81513 Mon Sep 17 00:00:00 2001 From: Naifen || Developer Date: Mon, 20 Feb 2023 22:30:43 +0100 Subject: [PATCH 37/41] Update sharedevent link --- [core]/es_extended/client/common.lua | 2 +- [core]/es_extended/server/common.lua | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/[core]/es_extended/client/common.lua b/[core]/es_extended/client/common.lua index c088fb90..e18f2884 100644 --- a/[core]/es_extended/client/common.lua +++ b/[core]/es_extended/client/common.lua @@ -8,5 +8,5 @@ end AddEventHandler("esx:getSharedObject", function() local Invoke = GetInvokingResource() - print(("[^1ERROR^7] Resource ^5%s^7 Used the ^5getSharedObject^7 Event, this event ^1no longer exists!^7 Visit https://documentation.esx-framework.org/tutorials/sharedevent for how to fix!"):format(Invoke)) + print(("[^1ERROR^7] Resource ^5%s^7 Used the ^5getSharedObject^7 Event, this event ^1no longer exists!^7 Visit https://documentation.esx-framework.org/tutorials/tutorials-esx/sharedevent for how to fix!"):format(Invoke)) end) diff --git a/[core]/es_extended/server/common.lua b/[core]/es_extended/server/common.lua index 3e4b9671..3b1b87c6 100644 --- a/[core]/es_extended/server/common.lua +++ b/[core]/es_extended/server/common.lua @@ -16,7 +16,7 @@ Core.PlayerFunctionOverrides = {} AddEventHandler("esx:getSharedObject", function() local Invoke = GetInvokingResource() - print(("[^1ERROR^7] Resource ^5%s^7 Used the ^5getSharedObject^7 Event, this event ^1no longer exists!^7 Visit https://documentation.esx-framework.org/tutorials/sharedevent for how to fix!"):format(Invoke)) + print(("[^1ERROR^7] Resource ^5%s^7 Used the ^5getSharedObject^7 Event, this event ^1no longer exists!^7 Visit https://documentation.esx-framework.org/tutorials/tutorials-esx/sharedevent for how to fix!"):format(Invoke)) end) exports('getSharedObject', function() From e41df74b0302dfc293e80abe7ce29ca5ef9a918e Mon Sep 17 00:00:00 2001 From: TheFantomas <117121911+TheFantomas@users.noreply.github.com> Date: Mon, 20 Feb 2023 22:52:49 +0100 Subject: [PATCH 38/41] chore(core/progressbar) Prepare for 1.9.3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Idk why I merge commit with 1.9.2 🤦 --- [core]/esx_progressbar/fxmanifest.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/esx_progressbar/fxmanifest.lua b/[core]/esx_progressbar/fxmanifest.lua index f016689d..fd81e99f 100644 --- a/[core]/esx_progressbar/fxmanifest.lua +++ b/[core]/esx_progressbar/fxmanifest.lua @@ -2,7 +2,7 @@ fx_version 'adamant' game 'gta5' author 'ESX-Framework' lua54 'yes' -version '1.9.2' +version '1.9.3' description 'ESX Progressbar' client_scripts { 'Progress.lua' } From df21f8a4cc5efc545711ca820d77719e2a42eb68 Mon Sep 17 00:00:00 2001 From: TheFantomas <117121911+TheFantomas@users.noreply.github.com> Date: Tue, 21 Feb 2023 18:50:52 +0100 Subject: [PATCH 39/41] refactor(es_extended/client/main.lua): VehicleProperties better way --- [core]/es_extended/client/main.lua | 38 +++++++++++++++++------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/[core]/es_extended/client/main.lua b/[core]/es_extended/client/main.lua index e197e46b..fc2addcd 100644 --- a/[core]/es_extended/client/main.lua +++ b/[core]/es_extended/client/main.lua @@ -163,23 +163,29 @@ AddEventHandler('esx:restoreLoadout', function() end) AddStateBagChangeHandler('VehicleProperties', nil, function(bagName, key, value) - if value then - Wait(0) - local NetId = value.NetId - local Vehicle = NetworkGetEntityFromNetworkId(NetId) - local Tries = 0 - while Vehicle == 0 do - Vehicle = NetworkGetEntityFromNetworkId(NetId) - Wait(100) - Tries = Tries + 1 - if Tries > 300 then - break - end - end - if NetworkGetEntityOwner(Vehicle) == PlayerId() then - ESX.Game.SetVehicleProperties(Vehicle, value) - end + if not value then + return end + + local netId = bagName:gsub('entity:', '') + local timer = GetGameTimer() + while not NetworkDoesEntityExistWithNetworkId(tonumber(netId)) do + Wait(0) + if GetGameTimer() - timer > 10000 then + return + end + end + + local vehicle = NetToVeh(tonumber(netId)) + local timer = GetGameTimer() + while NetworkGetEntityOwner(vehicle) ~= PlayerId() do + Wait(0) + if GetGameTimer() - timer > 10000 then + return + end + end + + ESX.Game.SetVehicleProperties(vehicle, value) end) RegisterNetEvent('esx:setAccountMoney') From ddd86526f21eb85fae057d2eecf7cf1bde7b9a15 Mon Sep 17 00:00:00 2001 From: TheFantomas <117121911+TheFantomas@users.noreply.github.com> Date: Tue, 21 Feb 2023 18:51:46 +0100 Subject: [PATCH 40/41] netId is already not needed --- [core]/es_extended/server/onesync.lua | 1 - 1 file changed, 1 deletion(-) diff --git a/[core]/es_extended/server/onesync.lua b/[core]/es_extended/server/onesync.lua index 168a7bee..f43acdd7 100644 --- a/[core]/es_extended/server/onesync.lua +++ b/[core]/es_extended/server/onesync.lua @@ -74,7 +74,6 @@ function ESX.OneSync.SpawnVehicle(model, coords, heading, properties, cb) end local networkId = NetworkGetNetworkIdFromEntity(createdVehicle) - vehicleProperties.NetId = networkId Entity(createdVehicle).state:set('VehicleProperties', vehicleProperties, true) cb(networkId) else From 4933b078110530cc093b3d472b9806f902ca70b6 Mon Sep 17 00:00:00 2001 From: TheFantomas <117121911+TheFantomas@users.noreply.github.com> Date: Tue, 21 Feb 2023 19:13:18 +0100 Subject: [PATCH 41/41] Credits --- [core]/es_extended/client/main.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/[core]/es_extended/client/main.lua b/[core]/es_extended/client/main.lua index fc2addcd..4dfff72c 100644 --- a/[core]/es_extended/client/main.lua +++ b/[core]/es_extended/client/main.lua @@ -162,6 +162,7 @@ AddEventHandler('esx:restoreLoadout', function() end end) +-- Credit: https://github.com/LukeWasTakenn, https://github.com/LukeWasTakenn/luke_garages/blob/master/client/client.lua#L331-L352 AddStateBagChangeHandler('VehicleProperties', nil, function(bagName, key, value) if not value then return