From a341ad037ac08bddcb23d33fcf3e43ab8f562397 Mon Sep 17 00:00:00 2001 From: wasabirobby <79250053+wasabirobby@users.noreply.github.com> Date: Mon, 20 Mar 2023 14:48:30 -0700 Subject: [PATCH 01/43] feat: ESX.CreateJob(tb) --- [core]/es_extended/server/functions.lua | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index 202e1b5e..be2fead0 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -313,6 +313,25 @@ function ESX.DiscordLogFields(name, title, color, fields) }) end +function ESX.CreateJob(tb) + -- tb (array) containing: name (string), label (string) and grades (table) + -- grades (table) contains: grade (int), name (string), label (string), salary (int) + local job = {} + MySQL.Async.execute('INSERT IGNORE INTO jobs (name, label) VALUES (@name, @label)', {['name'] = tb.name, ['label'] = tb.label}) + job = {name = tb.name, label = tb.label, grades = {}} + for k,v in pairs(tb.grades) do + job.grades[tostring(v.grade)] = {job_name = tb.name, grade = v.grade, name = v.name, label = v.label, v.salary, skin_male = {}, skin_female = {}} + MySQL.Async.execute('INSERT IGNORE INTO job_grades (job_name, grade, name, label, salary) VALUES (@job_name, @grade, @name, @label, @salary)', { + ['@job_name'] = tb.name, + ['@grade'] = v.grade, + ['@name'] = v.name, + ['@label'] = v.label, + ['@salary'] = v.salary + }) + end + ESX.Jobs[tb.name] = job +end + function ESX.RefreshJobs() local Jobs = {} local jobs = MySQL.query.await('SELECT * FROM jobs') From 921c435c619aaf97c047fc8a7c0f17b66a3bd374 Mon Sep 17 00:00:00 2001 From: wasabirobby <79250053+wasabirobby@users.noreply.github.com> Date: Mon, 27 Mar 2023 20:10:40 -0700 Subject: [PATCH 02/43] refactor (ESX.CreateJob) --- [core]/es_extended/server/functions.lua | 41 +++++++++++++++++-------- 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index be2fead0..5c02683f 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -314,21 +314,36 @@ function ESX.DiscordLogFields(name, title, color, fields) end function ESX.CreateJob(tb) - -- tb (array) containing: name (string), label (string) and grades (table) + -- tb (table) containing: name (string), label (string) and grades (table) -- grades (table) contains: grade (int), name (string), label (string), salary (int) - local job = {} - MySQL.Async.execute('INSERT IGNORE INTO jobs (name, label) VALUES (@name, @label)', {['name'] = tb.name, ['label'] = tb.label}) - job = {name = tb.name, label = tb.label, grades = {}} - for k,v in pairs(tb.grades) do - job.grades[tostring(v.grade)] = {job_name = tb.name, grade = v.grade, name = v.name, label = v.label, v.salary, skin_male = {}, skin_female = {}} - MySQL.Async.execute('INSERT IGNORE INTO job_grades (job_name, grade, name, label, salary) VALUES (@job_name, @grade, @name, @label, @salary)', { - ['@job_name'] = tb.name, - ['@grade'] = v.grade, - ['@name'] = v.name, - ['@label'] = v.label, - ['@salary'] = v.salary - }) + + if tb == nil or next(tb) == nil then + return print('[^3WARNING^7] paramter must be a table.') end + + if tb.name == nil then + return print('[^3WARNING^7] table must contain name(string) for the job name') + end + + if tb.label == nil then + return print('[^3WARNING^7] table must contain label(string) for the job name label') + end + + if tb.grades == nil or next(tb.grades) == nil then + return print('[^3WARNING^7] table must contain grades(table)!') + end + + local parameters = {} + local job = {name = tb.name, label = tb.label, grades = {}} + + for k,v in pairs(tb.grades) do + job.grades[tostring(v.grade)] = {job_name = tb.name, grade = v.grade, name = v.name, label = v.label, salary = v.salary, skin_male = {}, skin_female = {}} + parameters[#parameters + 1] = { tb.name, v.grade, v.name, v.label, v.salary} + end + + MySQL.insert('INSERT IGNORE INTO jobs (name, label) VALUES (?, ?)', {tb.name, tb.label}) + MySQL.prepare('INSERT INTO job_grades (job_name, grade, name, label, salary) VALUES (?, ?, ?, ?, ?)', parameters) + ESX.Jobs[tb.name] = job end From a9e8661b9972114573081c048500a0d82bc92aee Mon Sep 17 00:00:00 2001 From: Taavi <97351942+Taavi-AU@users.noreply.github.com> Date: Wed, 5 Apr 2023 20:18:15 +0800 Subject: [PATCH 03/43] add esx:spawnVehicle callback MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit to spawn vehicles client side using a callback to server side spawn vehicles 👍 --- [core]/es_extended/server/main.lua | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/[core]/es_extended/server/main.lua b/[core]/es_extended/server/main.lua index 892b5a5e..9602d469 100644 --- a/[core]/es_extended/server/main.lua +++ b/[core]/es_extended/server/main.lua @@ -628,6 +628,22 @@ ESX.RegisterServerCallback('esx:getPlayerNames', function(source, cb, players) cb(players) end) +ESX.RegisterServerCallback("esx:spawnVehicle", function(source,cb,model,coords,heading,props,warp) + local ped = GetPlayerPed(source) + local vehicle = nil + props = props or {} + ESX.OneSync.SpawnVehicle(model, coords, heading, props, function(id) + vehicle = NetworkGetEntityFromNetworkId(id) + if warp then + while GetVehiclePedIsIn(ped) ~= vehicle do + Wait(0) + TaskWarpPedIntoVehicle(ped, vehicle, -1) + end + end + cb(id) + end) +end) + AddEventHandler('txAdmin:events:scheduledRestart', function(eventData) if eventData.secondsRemaining == 60 then CreateThread(function() From 05cf9d1387beebfe53f815f41eedc263806f32ca Mon Sep 17 00:00:00 2001 From: CENSOR_1337 Date: Mon, 1 May 2023 07:07:13 +0700 Subject: [PATCH 04/43] feat(xPlayer): add hasMeta class function --- [core]/es_extended/server/classes/player.lua | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/[core]/es_extended/server/classes/player.lua b/[core]/es_extended/server/classes/player.lua index e0788424..c04efc58 100644 --- a/[core]/es_extended/server/classes/player.lua +++ b/[core]/es_extended/server/classes/player.lua @@ -681,6 +681,18 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, Player(self.source).state:set('metadata', self.metadata, true) end + function self.hasMeta(index) + if not index then + return print(("[^1ERROR^7] xPlayer.hasMeta ^5%s^7 is Missing!"):format(index)) + end + + if type(index) ~= 'string' then + return print("[^1ERROR^7] xPlayer.hasMeta ^5index^7 should be ^5string^7!") + end + + return self.metadata[index] ~= nil + end + for fnName,fn in pairs(targetOverrides) do self[fnName] = fn(self) end From 002a03b5db609c54013b783af24584b43bd3fff0 Mon Sep 17 00:00:00 2001 From: CENSOR_1337 Date: Thu, 4 May 2023 04:37:41 +0700 Subject: [PATCH 05/43] refactor(xPlayer): delete hasMeta, getMeta no longer print error message --- [core]/es_extended/server/classes/player.lua | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/[core]/es_extended/server/classes/player.lua b/[core]/es_extended/server/classes/player.lua index c04efc58..54ff75b5 100644 --- a/[core]/es_extended/server/classes/player.lua +++ b/[core]/es_extended/server/classes/player.lua @@ -615,7 +615,7 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, return self.metadata[index] else - return print(("[^1ERROR^7] xPlayer.getMeta ^5%s^7 not exist!"):format(index)) + return end end @@ -681,18 +681,6 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, Player(self.source).state:set('metadata', self.metadata, true) end - function self.hasMeta(index) - if not index then - return print(("[^1ERROR^7] xPlayer.hasMeta ^5%s^7 is Missing!"):format(index)) - end - - if type(index) ~= 'string' then - return print("[^1ERROR^7] xPlayer.hasMeta ^5index^7 should be ^5string^7!") - end - - return self.metadata[index] ~= nil - end - for fnName,fn in pairs(targetOverrides) do self[fnName] = fn(self) end From d680d5ac4f6fab2d986b3d64d458bfc59ec67535 Mon Sep 17 00:00:00 2001 From: r3ps4J <40723838+r3ps4J@users.noreply.github.com> Date: Tue, 6 Jun 2023 08:18:17 +0000 Subject: [PATCH 06/43] fix(es_extended/server/classes/player.lua): Fix showNotification function parameters to correspond with esx:showNotification event --- [core]/es_extended/server/classes/player.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/[core]/es_extended/server/classes/player.lua b/[core]/es_extended/server/classes/player.lua index 9249c984..9c22be27 100644 --- a/[core]/es_extended/server/classes/player.lua +++ b/[core]/es_extended/server/classes/player.lua @@ -572,8 +572,8 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, end end - function self.showNotification(msg) - self.triggerEvent('esx:showNotification', msg) + function self.showNotification(msg, type, length) + self.triggerEvent('esx:showNotification', msg, type, length) end function self.showHelpNotification(msg, thisFrame, beep, duration) From 4ebb5fbd72a0ceed1437d61f877b5dd1e7d3833f Mon Sep 17 00:00:00 2001 From: r3ps4J <40723838+r3ps4J@users.noreply.github.com> Date: Tue, 6 Jun 2023 08:22:33 +0000 Subject: [PATCH 07/43] feat(es_extended/server/classes/player.lua): Add showAdvancedNotification function --- [core]/es_extended/server/classes/player.lua | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/[core]/es_extended/server/classes/player.lua b/[core]/es_extended/server/classes/player.lua index 9249c984..9632501e 100644 --- a/[core]/es_extended/server/classes/player.lua +++ b/[core]/es_extended/server/classes/player.lua @@ -576,6 +576,10 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, self.triggerEvent('esx:showNotification', msg) end + function self.showAdvancedNotification(sender, subject, msg, textureDict, iconType, flash, saveToBrief, hudColorIndex) + self.triggerEvent('esx:showAdvancedNotification', sender, subject, msg, textureDict, iconType, flash, saveToBrief, hudColorIndex) + end + function self.showHelpNotification(msg, thisFrame, beep, duration) self.triggerEvent('esx:showHelpNotification', msg, thisFrame, beep, duration) end From f2e0441538faf566490cefd4c4e7b5aec79c19da Mon Sep 17 00:00:00 2001 From: Hubert Date: Wed, 7 Jun 2023 21:53:45 +0200 Subject: [PATCH 08/43] Optimized saving of player position The changes I applied to the code regarding self.getCoords(), changing the conditions when joining the server at coordinates to userData.coords and getting rid of the self.updateCoords() function. I believe that my changes when saving are more efficient, because the player's position is not overwritten unnecessarily every second if he changes his position, but the position is saved when leaving the server to the database, and then loaded when entering the server. --- [core]/es_extended/server/classes/player.lua | 31 ++++++-------------- [core]/es_extended/server/main.lua | 4 +-- 2 files changed, 11 insertions(+), 24 deletions(-) diff --git a/[core]/es_extended/server/classes/player.lua b/[core]/es_extended/server/classes/player.lua index e0788424..b22cd2ff 100644 --- a/[core]/es_extended/server/classes/player.lua +++ b/[core]/es_extended/server/classes/player.lua @@ -47,31 +47,18 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, SetEntityHeading(Ped, vector.w) end - function self.updateCoords() - SetTimeout(1000,function() - local Ped = GetPlayerPed(self.source) - if DoesEntityExist(Ped) then - local coords = GetEntityCoords(Ped) - local distance = #(coords - vector3(self.coords.x, self.coords.y, self.coords.z)) - if distance > 1.5 then - local heading = GetEntityHeading(Ped) - self.coords = { - x = coords.x, - y = coords.y, - z = coords.z, - heading = heading or 0.0 - } - end - end - self.updateCoords() - end) - end - function self.getCoords(vector) + local ped = GetPlayerPed(self.source) + local coords = GetEntityCoords(ped) + if vector then - return vector3(self.coords.x, self.coords.y, self.coords.z) + return coords else - return self.coords + return { + x = coords.x, + y = coords.y, + z = coords.z, + } end end diff --git a/[core]/es_extended/server/main.lua b/[core]/es_extended/server/main.lua index 892b5a5e..87b8ef7a 100644 --- a/[core]/es_extended/server/main.lua +++ b/[core]/es_extended/server/main.lua @@ -309,7 +309,7 @@ function loadESXPlayer(identifier, playerId, isNew) xPlayer.triggerEvent('esx:playerLoaded', { accounts = xPlayer.getAccounts(), - coords = xPlayer.getCoords(), + coords = userData.coords, identifier = xPlayer.getIdentifier(), inventory = xPlayer.getInventory(), job = xPlayer.getJob(), @@ -331,7 +331,7 @@ function loadESXPlayer(identifier, playerId, isNew) else exports.ox_inventory:setPlayerInventory(xPlayer, userData.inventory) end - xPlayer.updateCoords() + xPlayer.triggerEvent('esx:registerSuggestions', Core.RegisteredCommands) print(('[^2INFO^0] Player ^5"%s"^0 has connected to the server. ID: ^5%s^7'):format(xPlayer.getName(), playerId)) end From 1b918cca3f315f39053eeb02cf412b881b90eead Mon Sep 17 00:00:00 2001 From: Hubert Date: Thu, 8 Jun 2023 13:47:44 +0200 Subject: [PATCH 09/43] Added showAdvancedNotification for xPlayer --- [core]/es_extended/server/classes/player.lua | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/[core]/es_extended/server/classes/player.lua b/[core]/es_extended/server/classes/player.lua index b22cd2ff..fc5a3e54 100644 --- a/[core]/es_extended/server/classes/player.lua +++ b/[core]/es_extended/server/classes/player.lua @@ -562,6 +562,10 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, self.triggerEvent('esx:showNotification', msg) end + function self.showAdvancedNotification(sender, subject, msg, textureDict, iconType, flash, saveToBrief, hudColorIndex) + self.triggerEvent('esx:showAdvancedNotification', sender, subject, msg, textureDict, iconType, flash, saveToBrief, hudColorIndex) + end + function self.showHelpNotification(msg, thisFrame, beep, duration) self.triggerEvent('esx:showHelpNotification', msg, thisFrame, beep, duration) end From ab527c6df189a53f230b699562400eb1b173c3d9 Mon Sep 17 00:00:00 2001 From: KeyTur Date: Fri, 9 Jun 2023 11:38:35 +0200 Subject: [PATCH 10/43] Save Custom Wheels --- [core]/es_extended/client/functions.lua | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/[core]/es_extended/client/functions.lua b/[core]/es_extended/client/functions.lua index 90191138..b7d238aa 100644 --- a/[core]/es_extended/client/functions.lua +++ b/[core]/es_extended/client/functions.lua @@ -715,6 +715,7 @@ function ESX.Game.GetVehicleProperties(vehicle) modXenon = IsToggleModOn(vehicle, 22), modFrontWheels = GetVehicleMod(vehicle, 23), + modCustomWheels = GetVehicleModVariation(vehicle, 23), modBackWheels = GetVehicleMod(vehicle, 24), modPlateHolder = GetVehicleMod(vehicle, 25), @@ -897,6 +898,9 @@ function ESX.Game.SetVehicleProperties(vehicle, props) end if props.modFrontWheels ~= nil then SetVehicleMod(vehicle, 23, props.modFrontWheels, false) + end + if props.modCustomWheels ~= nil then + SetVehicleMod(vehicle, 23, props.modFrontWheels, true) end if props.modBackWheels ~= nil then SetVehicleMod(vehicle, 24, props.modBackWheels, false) @@ -1342,4 +1346,4 @@ function ESX.GetVehicleType(model) } return types[vehicleType] or "automobile" -end \ No newline at end of file +end From 8144e80f8caf38c7ba93b2892accae8a157a7a22 Mon Sep 17 00:00:00 2001 From: Lockwood Date: Fri, 9 Jun 2023 19:46:21 +0100 Subject: [PATCH 11/43] feat(multichar): multiple spawns --- [core]/esx_multicharacter/client/main.lua | 25 +++++++++++++---------- [core]/esx_multicharacter/config.lua | 4 +++- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/[core]/esx_multicharacter/client/main.lua b/[core]/esx_multicharacter/client/main.lua index 4cb35486..7cc94907 100644 --- a/[core]/esx_multicharacter/client/main.lua +++ b/[core]/esx_multicharacter/client/main.lua @@ -1,5 +1,8 @@ local mp_m_freemode_01 = `mp_m_freemode_01` local mp_f_freemode_01 = `mp_f_freemode_01` + +local SpawnCoords = Config.Spawn[math.random(#Config.Spawn)] + if ESX.GetConfig().Multichar then CreateThread(function() @@ -28,14 +31,14 @@ if ESX.GetConfig().Multichar then spawned = false cam = CreateCam("DEFAULT_SCRIPTED_CAMERA", true) local playerPed = PlayerPedId() - SetEntityCoords(playerPed, Config.Spawn.x, Config.Spawn.y, Config.Spawn.z, true, false, false, false) - SetEntityHeading(playerPed, Config.Spawn.w) + SetEntityCoords(playerPed, SpawnCoords.x, SpawnCoords.y, SpawnCoords.z, true, false, false, false) + SetEntityHeading(playerPed, SpawnCoords.w) local offset = GetOffsetFromEntityInWorldCoords(playerPed, 0, 1.7, 0.4) DoScreenFadeOut(0) SetCamActive(cam, true) RenderScriptCams(true, false, 1, true, true) SetCamCoord(cam, offset.x, offset.y, offset.z) - PointCamAtCoord(cam, Config.Spawn.x, Config.Spawn.y, Config.Spawn.z + 1.3) + PointCamAtCoord(cam, SpawnCoords.x, SpawnCoords.y, SpawnCoords.z + 1.3) StartLoop() ShutdownLoadingScreen() ShutdownLoadingScreenNui() @@ -98,10 +101,10 @@ if ESX.GetConfig().Multichar then SetupCharacter = function(index) if not spawned then exports.spawnmanager:spawnPlayer({ - x = Config.Spawn.x, - y = Config.Spawn.y, - z = Config.Spawn.z, - heading = Config.Spawn.w, + x = SpawnCoords.x, + y = SpawnCoords.y, + z = SpawnCoords.z, + heading = SpawnCoords.w, model = Characters[index].model or mp_m_freemode_01, skipFade = true }, function() @@ -242,10 +245,10 @@ if ESX.GetConfig().Multichar then action = "closeui" }) exports.spawnmanager:spawnPlayer({ - x = Config.Spawn.x, - y = Config.Spawn.y, - z = Config.Spawn.z, - heading = Config.Spawn.w, + x = SpawnCoords.x, + y = SpawnCoords.y, + z = SpawnCoords.z, + heading = SpawnCoords.w, model = mp_m_freemode_01, skipFade = true }, function() diff --git a/[core]/esx_multicharacter/config.lua b/[core]/esx_multicharacter/config.lua index 9a2cb18f..f8256d38 100644 --- a/[core]/esx_multicharacter/config.lua +++ b/[core]/esx_multicharacter/config.lua @@ -16,7 +16,9 @@ if IsDuplicityVersion() then else -- Sets the location for the character selection scene -- To set the spawn location for new characters, modify the default value in the users SQL table - Config.Spawn = vector4(-284.2856, 562.4627, 172.9182, 19.9895) + Config.Spawn = { + {x = -284.2856, y = 562.4627, z = 172.9182, heading = 19.9895}, + } -------------------- -- Do not use unless you are prepared to adjust your resources to correctly reset data From 85da00f4246fc171c9fbcc7f395d3e93b44cdef0 Mon Sep 17 00:00:00 2001 From: mx developement <62698394+TrymTube@users.noreply.github.com> Date: Mon, 12 Jun 2023 21:39:09 +0200 Subject: [PATCH 12/43] Update main.lua --- [core]/es_extended/server/main.lua | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/[core]/es_extended/server/main.lua b/[core]/es_extended/server/main.lua index 892b5a5e..89f0eade 100644 --- a/[core]/es_extended/server/main.lua +++ b/[core]/es_extended/server/main.lua @@ -330,6 +330,14 @@ function loadESXPlayer(identifier, playerId, isNew) xPlayer.triggerEvent('esx:createMissingPickups', Core.Pickups) else exports.ox_inventory:setPlayerInventory(xPlayer, userData.inventory) + + if isNew then + for account, money in pairs(Config.StartingAccountMoney) do + if account == 'money' or account == 'black_money' then + exports.ox_inventory:AddItem(playerId, account, money) + end + end + end end xPlayer.updateCoords() xPlayer.triggerEvent('esx:registerSuggestions', Core.RegisteredCommands) From 0e871043519a68c8a1ed6f7c90fa592daacc94e1 Mon Sep 17 00:00:00 2001 From: Thekuca <63980591+Thekuca@users.noreply.github.com> Date: Tue, 13 Jun 2023 14:41:35 +0200 Subject: [PATCH 13/43] Update functions.lua --- [core]/es_extended/server/functions.lua | 37 ++++++++++++------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index 5c02683f..ef1a4234 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -313,38 +313,35 @@ function ESX.DiscordLogFields(name, title, color, fields) }) end -function ESX.CreateJob(tb) - -- tb (table) containing: name (string), label (string) and grades (table) - -- grades (table) contains: grade (int), name (string), label (string), salary (int) - - if tb == nil or next(tb) == nil then - return print('[^3WARNING^7] paramter must be a table.') +--- Create Job at Runtime +--- @param name string +--- @param label string +--- @param grades table +function ESX.CreateJob(name, label, grades) + if not name then + return print('[^3WARNING^7] missing argument `name(string)` while creating a job') end - if tb.name == nil then - return print('[^3WARNING^7] table must contain name(string) for the job name') + if not label then + return print('[^3WARNING^7] missing argument `label(string)` while creating a job') end - if tb.label == nil then - return print('[^3WARNING^7] table must contain label(string) for the job name label') - end - - if tb.grades == nil or next(tb.grades) == nil then - return print('[^3WARNING^7] table must contain grades(table)!') + if not grades or not next(grades) then + return print('[^3WARNING^7] missing argument `grades(table)` while creating a job!') end local parameters = {} - local job = {name = tb.name, label = tb.label, grades = {}} + local job = {name = name, label = label, grades = {}} - for k,v in pairs(tb.grades) do - job.grades[tostring(v.grade)] = {job_name = tb.name, grade = v.grade, name = v.name, label = v.label, salary = v.salary, skin_male = {}, skin_female = {}} - parameters[#parameters + 1] = { tb.name, v.grade, v.name, v.label, v.salary} + for k,v in pairs(grades) do + job.grades[tostring(v.grade)] = {job_name = name, grade = v.grade, name = v.name, label = v.label, salary = v.salary, skin_male = {}, skin_female = {}} + parameters[#parameters + 1] = { name, v.grade, v.name, v.label, v.salary} end - MySQL.insert('INSERT IGNORE INTO jobs (name, label) VALUES (?, ?)', {tb.name, tb.label}) + MySQL.insert('INSERT IGNORE INTO jobs (name, label) VALUES (?, ?)', {name, label}) MySQL.prepare('INSERT INTO job_grades (job_name, grade, name, label, salary) VALUES (?, ?, ?, ?, ?)', parameters) - ESX.Jobs[tb.name] = job + ESX.Jobs[name] = job end function ESX.RefreshJobs() From c8a7e5500e1f31259dccc18810c1fe83fab3e5dd Mon Sep 17 00:00:00 2001 From: CENSOR_1337 Date: Wed, 14 Jun 2023 07:46:29 +0700 Subject: [PATCH 14/43] refactor: print an error getMeta when debug enabled --- [core]/es_extended/server/classes/player.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/es_extended/server/classes/player.lua b/[core]/es_extended/server/classes/player.lua index 54ff75b5..2d73e0eb 100644 --- a/[core]/es_extended/server/classes/player.lua +++ b/[core]/es_extended/server/classes/player.lua @@ -615,7 +615,7 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, return self.metadata[index] else - return + return Config.EnableDebug and print(("[^1ERROR^7] xPlayer.getMeta ^5%s^7 not exist!"):format(index)) or nil end end From 31a952eda523eaa400969622d319160326bea395 Mon Sep 17 00:00:00 2001 From: CENSOR_1337 Date: Wed, 14 Jun 2023 16:51:26 +0700 Subject: [PATCH 15/43] refactor: maintenance code flow of `getMeta` * recursive function call on table sub index --- [core]/es_extended/server/classes/player.lua | 60 +++++++++----------- 1 file changed, 27 insertions(+), 33 deletions(-) diff --git a/[core]/es_extended/server/classes/player.lua b/[core]/es_extended/server/classes/player.lua index 2d73e0eb..786e2df7 100644 --- a/[core]/es_extended/server/classes/player.lua +++ b/[core]/es_extended/server/classes/player.lua @@ -579,49 +579,43 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, self.triggerEvent('esx:showHelpNotification', msg, thisFrame, beep, duration) end - function self.getMeta(index, subIndex) - if index then + function self.getMeta(index, subIndex) + if not (index) then return self.metadata end - if type(index) ~= "string" then - return print("[^1ERROR^7] xPlayer.getMeta ^5index^7 should be ^5string^7!") - end + if type(index) ~= "string" then + return print("[^1ERROR^7] xPlayer.getMeta ^5index^7 should be ^5string^7!") + end - if self.metadata[index] then + local metadata = self.metadata[index] + if (metadata == nil) then + return Config.EnableDebug and print(("[^1ERROR^7] xPlayer.getMeta ^5%s^7 not exist!"):format(index)) or nil + end - if subIndex and type(self.metadata[index]) == "table" then - local _type = type(subIndex) + if (subIndex and type(metadata) == "table") then + local _type = type(subIndex) - if _type == "string" then - if self.metadata[index][subIndex] then - return self.metadata[index][subIndex] - end - return - end + if (_type == "string") then + local value = metadata[subIndex] + return value or nil + end - if _type == "table" then - local returnValues = {} - for i = 1, #subIndex do - if self.metadata[index][subIndex[i]] then - returnValues[subIndex[i]] = self.metadata[index][subIndex[i]] - else - print(("[^1ERROR^7] xPlayer.getMeta ^5%s^7 not esxist on ^5%s^7!"):format(subIndex[i], index)) - end - end + if (_type == "table") then + local returnValues = {} - return returnValues - end + for i = 1, #subIndex do + local key = subIndex[i] + returnValues[key] = self.getMeta(index, key) + end - end + return returnValues + end - return self.metadata[index] - else - return Config.EnableDebug and print(("[^1ERROR^7] xPlayer.getMeta ^5%s^7 not exist!"):format(index)) or nil - end + return print(("[^1ERROR^7] xPlayer.getMeta subIndexshould be ^5string^7 or ^5table^7!, received ^5%s^7!"):format(_type)) + end - end + return metadata + end - return self.metadata - end function self.setMeta(index, value, subValue) if not index then From 5d77ed304d07316fe9c9e3d5f04f800f595c4f74 Mon Sep 17 00:00:00 2001 From: CENSOR_1337 Date: Wed, 14 Jun 2023 16:59:19 +0700 Subject: [PATCH 16/43] typo: --- [core]/es_extended/server/classes/player.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/es_extended/server/classes/player.lua b/[core]/es_extended/server/classes/player.lua index 786e2df7..30e4cb65 100644 --- a/[core]/es_extended/server/classes/player.lua +++ b/[core]/es_extended/server/classes/player.lua @@ -610,7 +610,7 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, return returnValues end - return print(("[^1ERROR^7] xPlayer.getMeta subIndexshould be ^5string^7 or ^5table^7!, received ^5%s^7!"):format(_type)) + return print(("[^1ERROR^7] xPlayer.getMeta subIndex should be ^5string^7 or ^5table^7!, received ^5%s^7!"):format(_type)) end return metadata From 2c36f7a03935376fea5f5ceb6d078b07357ae517 Mon Sep 17 00:00:00 2001 From: CENSOR_1337 Date: Thu, 15 Jun 2023 01:12:15 +0700 Subject: [PATCH 17/43] refactor: simple return value --- [core]/es_extended/server/classes/player.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/es_extended/server/classes/player.lua b/[core]/es_extended/server/classes/player.lua index 30e4cb65..ebad67e2 100644 --- a/[core]/es_extended/server/classes/player.lua +++ b/[core]/es_extended/server/classes/player.lua @@ -596,7 +596,7 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, if (_type == "string") then local value = metadata[subIndex] - return value or nil + return value end if (_type == "table") then From fa82e7e64897b29533c7c73685ecd03cbd3c2971 Mon Sep 17 00:00:00 2001 From: CENSOR_1337 Date: Thu, 15 Jun 2023 01:15:07 +0700 Subject: [PATCH 18/43] refactor: subIndex will only handle string --- [core]/es_extended/server/classes/player.lua | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/[core]/es_extended/server/classes/player.lua b/[core]/es_extended/server/classes/player.lua index ebad67e2..3c269cc4 100644 --- a/[core]/es_extended/server/classes/player.lua +++ b/[core]/es_extended/server/classes/player.lua @@ -604,7 +604,11 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, for i = 1, #subIndex do local key = subIndex[i] - returnValues[key] = self.getMeta(index, key) + if (type(key) == "string") then + returnValues[key] = self.getMeta(index, key) + else + print(("[^1ERROR^7] xPlayer.getMeta subIndex should be ^5string^7 or ^5table^7! that contains ^5string^7, received ^5%s^7!, skipping..."):format(type(key))) + end end return returnValues From 8a544383ba0bf8a478046e4efb110302a1376e38 Mon Sep 17 00:00:00 2001 From: TheFantomas <117121911+TheFantomas@users.noreply.github.com> Date: Fri, 16 Jun 2023 19:37:32 +0200 Subject: [PATCH 19/43] formatting --- [core]/es_extended/server/main.lua | 409 +++++++++++++++-------------- 1 file changed, 211 insertions(+), 198 deletions(-) diff --git a/[core]/es_extended/server/main.lua b/[core]/es_extended/server/main.lua index e1cf1fa3..bb8b1c34 100644 --- a/[core]/es_extended/server/main.lua +++ b/[core]/es_extended/server/main.lua @@ -121,239 +121,252 @@ if not Config.Multichar then end function loadESXPlayer(identifier, playerId, isNew) -local userData = { accounts = {}, inventory = {}, job = {}, loadout = {}, playerName = GetPlayerName(playerId), - weight = 0, metadata = {} } -local result = MySQL.prepare.await(loadPlayer, { identifier }) -local job, grade, jobObject, gradeObject = result.job, tostring(result.job_grade) -local foundAccounts, foundItems = {}, {} - --- Accounts -if result.accounts and result.accounts ~= '' then - local accounts = json.decode(result.accounts) - - for account, money in pairs(accounts) do - foundAccounts[account] = money - end -end - -for account, data in pairs(Config.Accounts) do - if data.round == nil then - data.round = true - end - local index = #userData.accounts + 1 - userData.accounts[index] = { - name = account, - money = foundAccounts[account] or Config.StartingAccountMoney[account] or 0, - label = data.label, - round = data.round, - index = index + local userData = { + accounts = {}, + inventory = {}, + job = {}, + loadout = {}, + playerName = GetPlayerName(playerId), + weight = 0, + metadata = {} } -end + local result = MySQL.prepare.await(loadPlayer, { identifier }) + local job, grade, jobObject, gradeObject = result.job, tostring(result.job_grade) + local foundAccounts, foundItems = {}, {} --- Job -if ESX.DoesJobExist(job, grade) then - jobObject, gradeObject = ESX.Jobs[job], ESX.Jobs[job].grades[grade] -else - print(('[^3WARNING^7] Ignoring invalid job for ^5%s^7 [job: ^5%s^7, grade: ^5%s^7]'):format(identifier, job, grade)) - job, grade = 'unemployed', '0' - jobObject, gradeObject = ESX.Jobs[job], ESX.Jobs[job].grades[grade] -end + -- Accounts + if result.accounts and result.accounts ~= '' then + local accounts = json.decode(result.accounts) -userData.job.id = jobObject.id -userData.job.name = jobObject.name -userData.job.label = jobObject.label - -userData.job.grade = tonumber(grade) -userData.job.grade_name = gradeObject.name -userData.job.grade_label = gradeObject.label -userData.job.grade_salary = gradeObject.salary - -userData.job.skin_male = {} -userData.job.skin_female = {} - -if gradeObject.skin_male then - userData.job.skin_male = json.decode(gradeObject.skin_male) -end -if gradeObject.skin_female then - userData.job.skin_female = json.decode(gradeObject.skin_female) -end - --- Inventory -if not Config.OxInventory then - if result.inventory and result.inventory ~= '' then - local inventory = json.decode(result.inventory) - - for name, count in pairs(inventory) do - local item = ESX.Items[name] - - if item then - foundItems[name] = count - else - print(('[^3WARNING^7] Ignoring invalid item ^5"%s"^7 for ^5"%s^7"'):format(name, identifier)) - end + for account, money in pairs(accounts) do + foundAccounts[account] = money end end - for name, item in pairs(ESX.Items) do - local count = foundItems[name] or 0 - if count > 0 then - userData.weight = userData.weight + (item.weight * count) + for account, data in pairs(Config.Accounts) do + if data.round == nil then + data.round = true end - - table.insert(userData.inventory, - { - name = name, - count = count, - label = item.label, - weight = item.weight, - usable = Core.UsableItemsCallbacks[name] ~= nil, - rare = item.rare, - canRemove = item.canRemove - }) + local index = #userData.accounts + 1 + userData.accounts[index] = { + name = account, + money = foundAccounts[account] or Config.StartingAccountMoney[account] or 0, + label = data.label, + round = data.round, + index = index + } end - table.sort(userData.inventory, function(a, b) - return a.label < b.label - end) -else - if result.inventory and result.inventory ~= '' then - userData.inventory = json.decode(result.inventory) + -- Job + if ESX.DoesJobExist(job, grade) then + jobObject, gradeObject = ESX.Jobs[job], ESX.Jobs[job].grades[grade] else - userData.inventory = {} + print(('[^3WARNING^7] Ignoring invalid job for ^5%s^7 [job: ^5%s^7, grade: ^5%s^7]'):format(identifier, job, + grade)) + job, grade = 'unemployed', '0' + jobObject, gradeObject = ESX.Jobs[job], ESX.Jobs[job].grades[grade] end -end --- Group -if result.group then - if result.group == "superadmin" then - userData.group = "admin" - print("[^3WARNING^7] ^5Superadmin^7 detected, setting group to ^5admin^7") - else - userData.group = result.group + userData.job.id = jobObject.id + userData.job.name = jobObject.name + userData.job.label = jobObject.label + + userData.job.grade = tonumber(grade) + userData.job.grade_name = gradeObject.name + userData.job.grade_label = gradeObject.label + userData.job.grade_salary = gradeObject.salary + + userData.job.skin_male = {} + userData.job.skin_female = {} + + if gradeObject.skin_male then + userData.job.skin_male = json.decode(gradeObject.skin_male) + end + if gradeObject.skin_female then + userData.job.skin_female = json.decode(gradeObject.skin_female) end -else - userData.group = 'user' -end --- Loadout -if not Config.OxInventory then - if result.loadout and result.loadout ~= '' then - local loadout = json.decode(result.loadout) + -- Inventory + if not Config.OxInventory then + if result.inventory and result.inventory ~= '' then + local inventory = json.decode(result.inventory) - for name, weapon in pairs(loadout) do - local label = ESX.GetWeaponLabel(name) + for name, count in pairs(inventory) do + local item = ESX.Items[name] - if label then - if not weapon.components then - weapon.components = {} + if item then + foundItems[name] = count + else + print(('[^3WARNING^7] Ignoring invalid item ^5"%s"^7 for ^5"%s^7"'):format(name, identifier)) end - if not weapon.tintIndex then - weapon.tintIndex = 0 - end - - table.insert(userData.loadout, - { name = name, ammo = weapon.ammo, label = label, components = weapon.components, - tintIndex = weapon.tintIndex }) end end - end -end --- Position -userData.coords = json.decode(result.position) or Config.DefaultSpawns[math.random(#Config.DefaultSpawns)] + for name, item in pairs(ESX.Items) do + local count = foundItems[name] or 0 + if count > 0 then + userData.weight = userData.weight + (item.weight * count) + end --- Skin -if result.skin and result.skin ~= '' then - userData.skin = json.decode(result.skin) -else - if userData.sex == 'f' then - userData.skin = { sex = 1 } + table.insert(userData.inventory, + { + name = name, + count = count, + label = item.label, + weight = item.weight, + usable = Core.UsableItemsCallbacks[name] ~= nil, + rare = item.rare, + canRemove = item.canRemove + }) + end + + table.sort(userData.inventory, function(a, b) + return a.label < b.label + end) else - userData.skin = { sex = 0 } + if result.inventory and result.inventory ~= '' then + userData.inventory = json.decode(result.inventory) + else + userData.inventory = {} + end end -end --- Identity -if result.firstname and result.firstname ~= '' then - userData.firstname = result.firstname - userData.lastname = result.lastname - userData.playerName = userData.firstname .. ' ' .. userData.lastname - if result.dateofbirth then - userData.dateofbirth = result.dateofbirth + -- Group + if result.group then + if result.group == "superadmin" then + userData.group = "admin" + print("[^3WARNING^7] ^5Superadmin^7 detected, setting group to ^5admin^7") + else + userData.group = result.group + end + else + userData.group = 'user' end - if result.sex then - userData.sex = result.sex - end - if result.height then - userData.height = result.height - end -end -if result.metadata and result.metadata ~= '' then - local metadata = json.decode(result.metadata) - userData.metadata = metadata -end + -- Loadout + if not Config.OxInventory then + if result.loadout and result.loadout ~= '' then + local loadout = json.decode(result.loadout) -local xPlayer = CreateExtendedPlayer(playerId, identifier, userData.group, userData.accounts, userData.inventory, - userData.weight, userData.job, - userData.loadout, userData.playerName, userData.coords, userData.metadata) -ESX.Players[playerId] = xPlayer -Core.playersByIdentifier[identifier] = xPlayer + for name, weapon in pairs(loadout) do + local label = ESX.GetWeaponLabel(name) -if userData.firstname then - xPlayer.set('firstName', userData.firstname) - xPlayer.set('lastName', userData.lastname) - if userData.dateofbirth then - xPlayer.set('dateofbirth', userData.dateofbirth) - end - if userData.sex then - xPlayer.set('sex', userData.sex) - end - if userData.height then - xPlayer.set('height', userData.height) - end -end + if label then + if not weapon.components then + weapon.components = {} + end + if not weapon.tintIndex then + weapon.tintIndex = 0 + end -TriggerEvent('esx:playerLoaded', playerId, xPlayer, isNew) - -xPlayer.triggerEvent('esx:playerLoaded', - { - accounts = xPlayer.getAccounts(), - coords = userData.coords, - identifier = xPlayer.getIdentifier(), - inventory = xPlayer.getInventory(), - job = xPlayer.getJob(), - loadout = xPlayer.getLoadout(), - 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, - dead = false, - metadata = xPlayer.getMeta() - }, isNew, - userData.skin) - -if not Config.OxInventory then - xPlayer.triggerEvent('esx:createMissingPickups', Core.Pickups) -else - exports.ox_inventory:setPlayerInventory(xPlayer, userData.inventory) - - if isNew then - for account, money in pairs(Config.StartingAccountMoney) do - if account == 'money' or account == 'black_money' then - exports.ox_inventory:AddItem(playerId, account, money) + table.insert(userData.loadout, + { + name = name, + ammo = weapon.ammo, + label = label, + components = weapon.components, + tintIndex = weapon.tintIndex + }) + end end end end -end -xPlayer.triggerEvent('esx:registerSuggestions', Core.RegisteredCommands) -print(('[^2INFO^0] Player ^5"%s"^0 has connected to the server. ID: ^5%s^7'):format(xPlayer.getName(), playerId)) + -- Position + userData.coords = json.decode(result.position) or Config.DefaultSpawns[math.random(#Config.DefaultSpawns)] + + -- Skin + if result.skin and result.skin ~= '' then + userData.skin = json.decode(result.skin) + else + if userData.sex == 'f' then + userData.skin = { sex = 1 } + else + userData.skin = { sex = 0 } + end + end + + -- Identity + if result.firstname and result.firstname ~= '' then + userData.firstname = result.firstname + userData.lastname = result.lastname + userData.playerName = userData.firstname .. ' ' .. userData.lastname + if result.dateofbirth then + userData.dateofbirth = result.dateofbirth + end + if result.sex then + userData.sex = result.sex + end + if result.height then + userData.height = result.height + end + end + + if result.metadata and result.metadata ~= '' then + local metadata = json.decode(result.metadata) + userData.metadata = metadata + end + + local xPlayer = CreateExtendedPlayer(playerId, identifier, userData.group, userData.accounts, userData.inventory, + userData.weight, userData.job, + userData.loadout, userData.playerName, userData.coords, userData.metadata) + ESX.Players[playerId] = xPlayer + Core.playersByIdentifier[identifier] = xPlayer + + if userData.firstname then + xPlayer.set('firstName', userData.firstname) + xPlayer.set('lastName', userData.lastname) + if userData.dateofbirth then + xPlayer.set('dateofbirth', userData.dateofbirth) + end + if userData.sex then + xPlayer.set('sex', userData.sex) + end + if userData.height then + xPlayer.set('height', userData.height) + end + end + + TriggerEvent('esx:playerLoaded', playerId, xPlayer, isNew) + + xPlayer.triggerEvent('esx:playerLoaded', + { + accounts = xPlayer.getAccounts(), + coords = userData.coords, + identifier = xPlayer.getIdentifier(), + inventory = xPlayer.getInventory(), + job = xPlayer.getJob(), + loadout = xPlayer.getLoadout(), + 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, + dead = false, + metadata = xPlayer.getMeta() + }, isNew, + userData.skin) + + if not Config.OxInventory then + xPlayer.triggerEvent('esx:createMissingPickups', Core.Pickups) + else + exports.ox_inventory:setPlayerInventory(xPlayer, userData.inventory) + + if isNew then + for account, money in pairs(Config.StartingAccountMoney) do + if account == 'money' or account == 'black_money' then + exports.ox_inventory:AddItem(playerId, account, money) + end + end + end + end + xPlayer.triggerEvent('esx:registerSuggestions', Core.RegisteredCommands) + print(('[^2INFO^0] Player ^5"%s"^0 has connected to the server. ID: ^5%s^7'):format(xPlayer.getName(), playerId)) end + AddEventHandler('chatMessage', function(playerId, author, message) local xPlayer = ESX.GetPlayerFromId(playerId) if message:sub(1, 1) == '/' and playerId > 0 then From 74b3ccd9d9fbf65985ef9c698c6073ce8462ad6b Mon Sep 17 00:00:00 2001 From: TheFantomas <117121911+TheFantomas@users.noreply.github.com> Date: Fri, 16 Jun 2023 19:39:13 +0200 Subject: [PATCH 20/43] formatting v2 --- [core]/es_extended/server/main.lua | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/[core]/es_extended/server/main.lua b/[core]/es_extended/server/main.lua index bb8b1c34..14105ce7 100644 --- a/[core]/es_extended/server/main.lua +++ b/[core]/es_extended/server/main.lua @@ -161,8 +161,7 @@ function loadESXPlayer(identifier, playerId, isNew) if ESX.DoesJobExist(job, grade) then jobObject, gradeObject = ESX.Jobs[job], ESX.Jobs[job].grades[grade] else - print(('[^3WARNING^7] Ignoring invalid job for ^5%s^7 [job: ^5%s^7, grade: ^5%s^7]'):format(identifier, job, - grade)) + print(('[^3WARNING^7] Ignoring invalid job for ^5%s^7 [job: ^5%s^7, grade: ^5%s^7]'):format(identifier, job, grade)) job, grade = 'unemployed', '0' jobObject, gradeObject = ESX.Jobs[job], ESX.Jobs[job].grades[grade] end @@ -307,9 +306,7 @@ function loadESXPlayer(identifier, playerId, isNew) userData.metadata = metadata end - local xPlayer = CreateExtendedPlayer(playerId, identifier, userData.group, userData.accounts, userData.inventory, - userData.weight, userData.job, - userData.loadout, userData.playerName, userData.coords, userData.metadata) + local xPlayer = CreateExtendedPlayer(playerId, identifier, userData.group, userData.accounts, userData.inventory, userData.weight, userData.job, userData.loadout, userData.playerName, userData.coords, userData.metadata) ESX.Players[playerId] = xPlayer Core.playersByIdentifier[identifier] = xPlayer From cf0d1aaa9b9ef379437ae05113cb6cb03a2d8aa2 Mon Sep 17 00:00:00 2001 From: Lenny <84620158+Lenny822@users.noreply.github.com> Date: Sat, 17 Jun 2023 11:37:19 +0200 Subject: [PATCH 21/43] Update de.lua Because mine wasnt uploaded or something, this is the newer and updated one. --- [core]/es_extended/locales/de.lua | 483 +++++++++++++++++++----------- 1 file changed, 310 insertions(+), 173 deletions(-) diff --git a/[core]/es_extended/locales/de.lua b/[core]/es_extended/locales/de.lua index 9a6ea35c..77626408 100644 --- a/[core]/es_extended/locales/de.lua +++ b/[core]/es_extended/locales/de.lua @@ -1,205 +1,342 @@ Locales['de'] = { -- Inventory - ['inventory'] = 'Inventar %s / %s', - ['use'] = 'benutzen', - ['give'] = 'geben', - ['remove'] = 'entfernen', - ['return'] = 'zurück', - ['give_to'] = 'geben an', - ['amount'] = 'Betrag', + ['inventory'] = 'Inventar ( Gewicht %s / %s )', + ['use'] = 'Benutzen', + ['give'] = 'Geben', + ['remove'] = 'Entsorgen', + ['return'] = 'Zurück', + ['give_to'] = 'Geben an', + ['amount'] = 'Anzahl', ['giveammo'] = 'Munition geben', - ['amountammo'] = 'Anzahl der Munition', - ['noammo'] = 'du hast keine Munition!', - ['gave_item'] = 'du gibst %sx %s an %s', - ['received_item'] = 'du empfängst %sx %s von %s', - ['gave_weapon'] = 'du gibst %s an %s', - ['gave_weapon_ammo'] = 'du gibst ~o~%sx %s von %s an %s', - ['gave_weapon_withammo'] = 'du gibst %s mit ~o~%sx %s an %s', - ['gave_weapon_hasalready'] = '%s hat bereits eine(n) %s', + ['amountammo'] = 'Munitions Anzahl', + ['noammo'] = 'Nicht Genug!', + ['gave_item'] = 'Du gibst %sx %s an %s', + ['received_item'] = 'Du bekommst %sx %s von %s', + ['gave_weapon'] = 'Du gibst %s an %s', + ['gave_weapon_ammo'] = 'Du gibst ~o~%sx %s für %s an %s', + ['gave_weapon_withammo'] = 'Du gibst %s mit ~o~%sx %s an %s', + ['gave_weapon_hasalready'] = '%s hat bereits %s', ['gave_weapon_noweapon'] = '%s hat diese Waffe nicht', - ['received_weapon'] = 'du erhälst %s von %s', - ['received_weapon_ammo'] = 'du erhälst %sx %s für dein %s von %s', - ['received_weapon_withammo'] = 'du erhälst %s mit %sx %s von %s', - ['received_weapon_hasalready'] = '%s hat versucht dir eine(n) %s zu geben, aber du hast bereits eine(n)', - ['received_weapon_noweapon'] = '%s hat versucht dir Munition für eine(n) %s, aber du besitzt diese Waffe nicht', - ['gave_account_money'] = 'du gibst $%s (%s) an %s', - ['received_account_money'] = 'du empfängst $%s (%s) von %s', - ['amount_invalid'] = 'ungültiger Betrag', - ['players_nearby'] = 'keine Spieler in der Nähe', - ['ex_inv_lim'] = 'Aktion nicht möglich, Inventarlimit überschritten für %s', - ['imp_invalid_quantity'] = 'Aktion nicht möglich, ungültige Anzahl', - ['imp_invalid_amount'] = 'Aktion nicht möglich, ungültiger Betrag', - ['threw_standard'] = 'du wirfst %sx %s', - ['threw_account'] = 'du wirfst $%s %s weg', - ['threw_weapon'] = 'du wirfst %s weg', - ['threw_weapon_ammo'] = 'du wirfst %s mit %sx %s weg', - ['threw_weapon_already'] = 'Du hast bereits diese Waffe', - ['threw_cannot_pickup'] = 'Du kannst das nicht aufheben, da dein Inventar voll ist', - ['threw_pickup_prompt'] = 'drücke E um aufzuheben', + ['received_weapon'] = 'Du bekommst %s von %s', + ['received_weapon_ammo'] = 'Du bekommst ~o~%sx %s für deine %s von %s', + ['received_weapon_withammo'] = 'Du bekommst %s mit ~o~%sx %s von %s', + ['received_weapon_hasalready'] = '%s hat versucht dir eine %s zu geben, jedoch hast du diese Waffe bereits!', + ['received_weapon_noweapon'] = '%s hat versucht dir Munition für eine %s zu geben, jedoch hast du diese Waffe bereits!', + ['gave_account_money'] = 'Du gibst %s€ (%s) an %s', + ['received_account_money'] = 'Du bekommst %s€ (%s) von %s', + ['amount_invalid'] = 'Ungültige Anzahl', + ['players_nearby'] = 'Keine Personen in der Nähe!', + ['ex_inv_lim'] = 'Du kannst diese Aktion nicht ausführen!, Inventarlimit für %s überschritten.', + ['imp_invalid_quantity'] = 'Du kannst diese Aktion nicht ausführen!, Ungültige Anzahl!', + ['imp_invalid_amount'] = 'Du kannst diese Aktion nicht ausführen!, Ungültige Anzahl', + ['threw_standard'] = 'Du entsorgst %sx %s', + ['threw_account'] = 'Du Entsorgst %s€ %s', + ['threw_weapon'] = 'Du entsorgst %s', + ['threw_weapon_ammo'] = 'Du entsorgst %s mit ~o~%sx %s', + ['threw_weapon_already'] = 'Du hast diese Waffe bereits!', + ['threw_cannot_pickup'] = 'Inventar ist voll! Du kannst dies nicht aufheben', + ['threw_pickup_prompt'] = 'Drücke [E] zum aufheben', -- Key mapping - ['keymap_showinventory'] = 'Inventar anzeigen', + ['keymap_showinventory'] = 'Inventar Anzeigen', -- Salary related - ['received_salary'] = 'du hast dein Gehalt erhalten: $%s', - ['received_help'] = 'du hast deine Sozialhilfe erhalten: $%s', - ['company_nomoney'] = 'die Firma in der du angestellt bist, ist zu arm um dir dein Gehalt zu zahlen', - ['received_paycheck'] = 'erhaltener Gehaltsscheck', - ['bank'] = 'Bank', + ['received_salary'] = 'Dein Gehaltscheck ist angekommen!: %s€', + ['received_help'] = 'Deine Sozialhilfe ist angekommen: %s€', + ['company_nomoney'] = 'Die Firma an der du Angestellt bist, ist leider Arm und kann dich nicht bezahlen :(', + ['received_paycheck'] = 'Gehaltscheck erhalten', + ['bank'] = 'Sparkasse', ['account_bank'] = 'Bank', ['account_black_money'] = 'Schwarzgeld', - ['account_money'] = 'Geld', + ['account_money'] = 'Bargeld', - ['act_imp'] = 'Aktion nicht möglich', - ['in_vehicle'] = 'du kannst keine Items in einem Fahrzeug weitergeben', + ['act_imp'] = 'Du kannst diese Aktion nicht ausführen!', + ['in_vehicle'] = 'Du kannst diese Aktion nicht ausführen! Person ist in einem Fahrzeug', -- Commands - ['command_car'] = 'Fahrzeug spawnen', - ['command_car_car'] = 'Fahrzeug spawnname oder hash', - ['command_cardel'] = 'Fahrzeuge in der nähe löschen', - ['command_cardel_radius'] = 'Optional, jedes Fahrzeug innerhalb des angegebenen Radius löschen', - ['command_clear'] = 'Chat leeren', - ['command_clearall'] = 'Chat leeren für alle spieler', - ['command_clearinventory'] = 'Spielerinventar leeren', - ['command_clearloadout'] = 'Spielerausstattung löschen', - ['command_giveaccountmoney'] = 'Geld aufs Konto laden', - ['command_giveaccountmoney_account'] = 'gültiger Kontoname', + ['command_bring'] = 'Person zu dir bringen', + ['command_car'] = 'Fahrzeug Spawnen', + ['command_car_car'] = 'Fahrzeug Model oder Hash', + ['command_cardel'] = 'Fahrzeuge entfernen', + ['command_cardel_radius'] = 'Entfernt alle Fahrzeuge in einem bestimmten Radius', + ['command_clear'] = 'Textchat leeren', + ['command_clearall'] = 'Textchat leeren für alle Spieler leeren', + ['command_clearinventory'] = 'Alle Items von dem Inventar eines Spielers entfernen', + ['command_clearloadout'] = 'Alle waffen von dem Spieler Loadout entfernen', + ['command_freeze'] = 'Spieler Freezen', + ['command_unfreeze'] = 'Spieler Entfreezen', + ['command_giveaccountmoney'] = 'Geld an einen bestimmten Account geben', + ['command_giveaccountmoney_account'] = 'Account wohin das Geld hinzugefügt werden soll', ['command_giveaccountmoney_amount'] = 'Anzahl zum hinzufügen', - ['command_giveaccountmoney_invalid'] = 'Ungültiger Kontoname', - ['command_giveitem'] = 'Item an Spieler geben', - ['command_giveitem_item'] = 'Itemname', - ['command_giveitem_count'] = 'item Anzahl', + ['command_giveaccountmoney_invalid'] = 'Accountname Ungültig', + ['command_giveitem'] = 'Spieler ein item geben', + ['command_giveitem_item'] = 'Item Name', + ['command_giveitem_count'] = 'Anzahl', ['command_giveweapon'] = 'Spieler eine Waffe geben', ['command_giveweapon_weapon'] = 'Waffenname', ['command_giveweapon_ammo'] = 'Munitionsanzahl', - ['command_giveweapon_hasalready'] = 'Spieler bereits im Besitz dieser Waffe', - ['command_giveweaponcomponent'] = 'Spieler Waffenaufsatz geben', - ['command_giveweaponcomponent_component'] = 'Waffenaufsatz Name', - ['command_giveweaponcomponent_invalid'] = 'ungültiger Waffenaufsatz', - ['command_giveweaponcomponent_hasalready'] = 'Spieler hat bereits diesen Waffenaufsatz', - ['command_giveweaponcomponent_missingweapon'] = 'Der Spieler besitzt diese Waffe nicht', - ['command_save'] = 'Spieler in der Datenbank sichern', - ['command_saveall'] = 'Sichern von allen Spielern auf der Datenbank', - ['command_setaccountmoney'] = 'Kontosumme des Spielers setzen', - ['command_setaccountmoney_amount'] = 'Summe', - ['command_setcoords'] = 'Zu den Koordinaten Teleportieren', - ['command_setcoords_x'] = 'x Position', - ['command_setcoords_y'] = 'y Position', - ['command_setcoords_z'] = 'z Position', - ['command_setjob'] = 'Dem Spieler einen Job setzen', - ['command_setjob_job'] = 'Name des Jobs', - ['command_setjob_grade'] = 'Rang des Jobs', - ['command_setjob_invalid'] = 'Der Rang oder der Job ist nicht gültigt.', - ['command_setgroup'] = 'Spielergruppe setzen', - ['command_setgroup_group'] = 'Gruppenname', - ['commanderror_argumentmismatch'] = 'Die Anzahl der Argumente stimmen nicht überein (übergeben %s, gesucht %s)', - ['commanderror_argumentmismatch_number'] = 'argument #%s typ stimmt nicht überein (übergeben string, gewünscht zahl)', - ['commanderror_invaliditem'] = 'falscher Itemname', - ['commanderror_invalidweapon'] = 'ungültige Waffe', - ['commanderror_console'] = 'Der Befehl kann nicht in der Konsole genutzt werden', - ['commanderror_invalidcommand'] = '/%s ist kein verfügbarer Befehl!', - ['commanderror_invalidplayerid'] = 'Kein Spieler mit dieser ID scheint online zu sein', - ['commandgeneric_playerid'] = 'Spieler ID', + ['command_giveweapon_hasalready'] = 'Spieler hat bereits diese Waffe', + ['command_giveweaponcomponent'] = 'Waffenkomponent an einen Spieler geben', + ['command_giveweaponcomponent_component'] = 'Komponent Name', + ['command_giveweaponcomponent_invalid'] = 'Ungültiger Komponent Name', + ['command_giveweaponcomponent_hasalready'] = 'Spieler hat bereits diesen Komponent', + ['command_giveweaponcomponent_missingweapon'] = 'Spieler hat diese Waffe nicht', + ['command_goto'] = 'Teleportiere dich zu einem Spieler', + ['command_kill'] = 'Spieler Töten', + ['command_save'] = 'Von einem bestimmten Spieler die Spielerdaten Speichern', + ['command_saveall'] = 'Von allen Spielern die Spielerdaten Speichern', + ['command_setaccountmoney'] = 'Geld auf einem bestimmten Account setzen', + ['command_setaccountmoney_amount'] = 'Anzahl', + ['command_setcoords'] = 'Zu den bestimmten Koordinaten teleportieren', + ['command_setcoords_x'] = 'X Koordinate', + ['command_setcoords_y'] = 'Y Koordinate', + ['command_setcoords_z'] = 'Z Koordinate', + ['command_setjob'] = 'Job eines Spielers setzen', + ['command_setjob_job'] = 'Name', + ['command_setjob_grade'] = 'Job Grad', + ['command_setjob_invalid'] = 'Der Job Grad oder beides sind ungültig', + ['command_setgroup'] = 'Setzt eine Berechtigungs Gruppe für einen User', + ['command_setgroup_group'] = 'Name der Gruppe', + ['commanderror_argumentmismatch'] = 'Ungültiger Argument (gegeben %s, gewollt %s)', + ['commanderror_argumentmismatch_number'] = 'Ungültiges Argument #%s daten typ (string gegeben, gewollte nummer)', + ['commanderror_invaliditem'] = 'Ungültiges Item', + ['commanderror_invalidweapon'] = 'Ungültige Waffe', + ['commanderror_console'] = 'Befehl kann nicht von der Konsole aus ausgeführt werden', + ['commanderror_invalidcommand'] = 'Ungültiger Befehl - /%s', + ['commanderror_invalidplayerid'] = 'Angegebener Spieler ist nicht online!', + ['commandgeneric_playerid'] = 'Spieler`s ID', ['command_giveammo_noweapon_found'] = '%s besitzt diese Waffe nicht', ['command_giveammo_weapon'] = 'Waffenname', ['command_giveammo_ammo'] = 'Munitionsanzahl', + ['tpm_nowaypoint'] = 'Kein Wegpunkt gesetzt.', + ['tpm_success'] = 'Erfolgreich teleportiert', + + ['noclip_message'] = 'Noclip wurde %s', + ['enabled'] = '~g~Aktiviert~s~', + ['disabled'] = '~r~Deaktiviert~s~', -- Locale settings - ['locale_digit_grouping_symbol'] = ' ', - ['locale_currency'] = '$%s', + ['locale_digit_grouping_symbol'] = ',', + ['locale_currency'] = '%s€', -- Weapons - ['weapon_knife'] = 'Messer', - ['weapon_nightstick'] = 'Schlagstock', - ['weapon_hammer'] = 'Hammer', - ['weapon_bat'] = 'Schläger', - ['weapon_golfclub'] = 'Golfschläger', - ['weapon_crowbar'] = 'Brecheisen', - ['weapon_pistol'] = 'Pistole', - ['weapon_combatpistol'] = 'Kampfpistole', - ['weapon_appistol'] = 'AP Pistole', - ['weapon_pistol50'] = 'Pistole .50', - ['weapon_microsmg'] = 'Mikro SMG', - ['weapon_smg'] = 'SMG', - ['weapon_assaultsmg'] = 'Kampf SMG', - ['weapon_assaultrifle'] = 'Kampfgewehr', - ['weapon_carbinerifle'] = 'Karabinergewehr', - ['weapon_advancedrifle'] = 'Advancedgewehr', - ['weapon_mg'] = 'MG', - ['weapon_combatmg'] = 'Kampf MG', - ['weapon_pumpshotgun'] = 'Pumpgun', - ['weapon_sawnoffshotgun'] = 'Abgesägte Schrotflinte', - ['weapon_assaultshotgun'] = 'Kampf Schrotflinte', - ['weapon_bullpupshotgun'] = 'Bullpup Schrotflinte', - ['weapon_stungun'] = 'Tazer', - ['weapon_sniperrifle'] = 'Scharfschützengewehr', - ['weapon_heavysniper'] = 'Schweres Sniper', - ['weapon_grenadelauncher'] = 'Granatwerfer', - ['weapon_rpg'] = 'RPG', - ['weapon_minigun'] = 'Minigun', - ['weapon_grenade'] = 'Granate', - ['weapon_stickybomb'] = 'Haftbombe', - ['weapon_smokegrenade'] = 'Rauchgranate', - ['weapon_bzgas'] = 'BZ Gas', - ['weapon_molotov'] = 'Molotov Cocktail', - ['weapon_fireextinguisher'] = 'Feuerlöscher', - ['weapon_petrolcan'] = 'Benzinkanister', - ['weapon_ball'] = 'Ball', - ['weapon_snspistol'] = 'SNS Pistole', - ['weapon_bottle'] = 'Flasche', - ['weapon_gusenberg'] = 'Gusenberg', - ['weapon_specialcarbine'] = 'Spezialkarabiner', - ['weapon_heavypistol'] = 'Schwere Pistole', - ['weapon_bullpuprifle'] = 'Bullpupgewehr', + + -- Melee ['weapon_dagger'] = 'Dolch', - ['weapon_vintagepistol'] = 'Vintage Pistole', - ['weapon_firework'] = 'Feuerwerk', - ['weapon_musket'] = 'Muskete', - ['weapon_heavyshotgun'] = 'Schwere Schrotflinte', - ['weapon_marksmanrifle'] = 'Marksmangewehr', - ['weapon_hominglauncher'] = 'Homing Launcher', - ['weapon_proxmine'] = 'Annäherungsmine', - ['weapon_snowball'] = 'Schneeball', - ['weapon_flaregun'] = 'Leuchtpistole', - ['weapon_combatpdw'] = 'Kampf PDW', - ['weapon_marksmanpistol'] = 'Marksman Pistole', - ['weapon_knuckle'] = 'Schlagring', - ['weapon_hatchet'] = 'Axt', - ['weapon_railgun'] = 'Railgun', - ['weapon_machete'] = 'Machete', - ['weapon_machinepistol'] = 'Maschinenpistole', - ['weapon_switchblade'] = 'Klappmesser', - ['weapon_revolver'] = 'Schwerer Revolver', - ['weapon_dbshotgun'] = 'Doppelläufige Schrotflinte', - ['weapon_compactrifle'] = 'Kampfgewehr', - ['weapon_autoshotgun'] = 'Auto Schrotflinte', + ['weapon_bat'] = 'Baseballschläger', ['weapon_battleaxe'] = 'Kampfaxt', - ['weapon_compactlauncher'] = 'Kompakt Granatwerfer', - ['weapon_minismg'] = 'Mini SMG', - ['weapon_pipebomb'] = 'Rohrbombe', - ['weapon_poolcue'] = 'Billiard-Kö', - ['weapon_wrench'] = 'Rohrzange', + ['weapon_bottle'] = 'Flasche', + ['weapon_crowbar'] = 'Brechstange', ['weapon_flashlight'] = 'Taschenlampe', + ['weapon_golfclub'] = 'Golfschläger', + ['weapon_hammer'] = 'Hammer', + ['weapon_hatchet'] = 'Beil', + ['weapon_knife'] = 'Messer', + ['weapon_knuckle'] = 'Schlagring', + ['weapon_machete'] = 'Machete', + ['weapon_nightstick'] = 'Schlagstock', + ['weapon_wrench'] = 'Rohrzange', + ['weapon_poolcue'] = 'Billiardstange', + ['weapon_stone_hatchet'] = 'Steinbeil', + ['weapon_switchblade'] = 'Springmesser', + + -- Handguns + ['weapon_appistol'] = 'AP Pistole', + ['weapon_ceramicpistol'] = 'Keramikpistole', + ['weapon_combatpistol'] = 'Kampfpistole', + ['weapon_doubleaction'] = 'Double-Action Revolver', + ['weapon_navyrevolver'] = 'Navy Revolver', + ['weapon_flaregun'] = 'Flaregun', + ['weapon_gadgetpistol'] = 'Gadgetpistole', + ['weapon_heavypistol'] = 'Schwere Pistole', + ['weapon_revolver'] = 'Schwerer Revolver', + ['weapon_revolver_mk2'] = 'Schwerer Revolver MK2', + ['weapon_marksmanpistol'] = 'Scharfschützen Pistole', + ['weapon_pistol'] = 'Pistole', + ['weapon_pistol_mk2'] = 'Pistole MK2', + ['weapon_pistol50'] = 'Pistole 50 Kaliber', + ['weapon_snspistol'] = 'SNS Pistol', + ['weapon_snspistol_mk2'] = 'SNS Pistol MK2', + ['weapon_stungun'] = 'Taser', + ['weapon_raypistol'] = 'Up-N-Atomizer', + ['weapon_vintagepistol'] = 'Vintagepistole', + + -- Shotguns + ['weapon_assaultshotgun'] = 'Sturmschrotflinte', + ['weapon_autoshotgun'] = 'Automatische Schrotflinte', + ['weapon_bullpupshotgun'] = 'Bullpup-Schrotflinte', + ['weapon_combatshotgun'] = 'Kampfschrotfline', + ['weapon_dbshotgun'] = 'Doppelbarrel Schrotflinte', + ['weapon_heavyshotgun'] = 'Schwere Schrotflinte', + ['weapon_musket'] = 'Muskete', + ['weapon_pumpshotgun'] = 'Pump Schrotflinte', + ['weapon_pumpshotgun_mk2'] = 'Pump Schrotflinte MK2', + ['weapon_sawnoffshotgun'] = 'Abgesägte Schrotflinte', + + -- SMG & LMG + ['weapon_assaultsmg'] = 'Sturm SMG', + ['weapon_combatmg'] = 'Kampf MG', + ['weapon_combatmg_mk2'] = 'Kampf MG MK2', + ['weapon_combatpdw'] = 'Kampf PDW', + ['weapon_gusenberg'] = 'Gusenberg Sweeper', + ['weapon_machinepistol'] = 'Maschinenpistole', + ['weapon_mg'] = 'MG', + ['weapon_microsmg'] = 'Mikro SMG', + ['weapon_minismg'] = 'Mini SMG', + ['weapon_smg'] = 'SMG', + ['weapon_smg_mk2'] = 'SMG MK2', + ['weapon_raycarbine'] = 'Unheiliger Höllenbringer', + + -- Rifles + ['weapon_advancedrifle'] = 'Fortgeschrittenes Gewehr', + ['weapon_assaultrifle'] = 'Sturmgewehr', + ['weapon_assaultrifle_mk2'] = 'Sturmgewehr MK2', + ['weapon_bullpuprifle'] = 'Bullpup Gewehr', + ['weapon_bullpuprifle_mk2'] = 'Bullpup Gewehr MK2', + ['weapon_carbinerifle'] = 'Karabinergewehr', + ['weapon_carbinerifle_mk2'] = 'Karabinergewehr MK2', + ['weapon_compactrifle'] = 'Kompaktesgewehr', + ['weapon_militaryrifle'] = 'Militärgewehr', + ['weapon_specialcarbine'] = 'Spezialkarabiner', + ['weapon_specialcarbine_mk2'] = 'Spezialkarabiner MK2', + + -- Sniper + ['weapon_heavysniper'] = 'Schwere Sniper', + ['weapon_heavysniper_mk2'] = 'Schwere Sniper MK2', + ['weapon_marksmanrifle'] = 'Scharfschützengewehr', + ['weapon_marksmanrifle_mk2'] = 'Scharfschützengewehr MK2', + ['weapon_sniperrifle'] = 'Sniper', + + -- Heavy / Launchers + ['weapon_compactlauncher'] = 'Kompaktlauncher', + ['weapon_firework'] = 'Feuerwerklauncher', + ['weapon_grenadelauncher'] = 'Granatwerfer', + ['weapon_hominglauncher'] = 'Lenkraketenwerfer', + ['weapon_minigun'] = 'Minigun', + ['weapon_railgun'] = 'Railgun', + ['weapon_rpg'] = 'Raketenwerfer', + ['weapon_rayminigun'] = 'Witwenmacher', + + -- Criminal Enterprises DLC + ['weapon_metaldetector'] = 'Metalldetektor', + ['weapon_precisionrifle'] = 'Präzisionsgewehr', + ['weapon_tactilerifle'] = 'Service Karabiner', + + -- Thrown + ['weapon_ball'] = 'Baseball', + ['weapon_bzgas'] = 'BZ Gas', + ['weapon_flare'] = 'Leuchtfackel', + ['weapon_grenade'] = 'Granate', + ['weapon_petrolcan'] = 'Benzinkanister', + ['weapon_hazardcan'] = 'Gefährliche Kanister', + ['weapon_molotov'] = 'Molotov Cocktail', + ['weapon_proxmine'] = 'Annährungsmine', + ['weapon_pipebomb'] = 'Rohrbombe', + ['weapon_snowball'] = 'Schneeball', + ['weapon_stickybomb'] = 'Haftbombe', + ['weapon_smokegrenade'] = 'Tränengas', + + -- Special + ['weapon_fireextinguisher'] = 'Feuerlöscher', + ['weapon_digiscanner'] = 'Digitalscanner', + ['weapon_garbagebag'] = 'Müllsack', + ['weapon_handcuffs'] = 'Handschelle', + ['gadget_nightvision'] = 'Nachtsicht', ['gadget_parachute'] = 'Fallschirm', - ['weapon_flare'] = 'Leuchtpistole', - ['weapon_doubleaction'] = 'double-Action Revolver', -- Weapon Components - ['component_clip_default'] = 'standart Magazin', - ['component_clip_extended'] = 'erweiterters Magazin', + ['component_knuckle_base'] = 'Basismodell', + ['component_knuckle_pimp'] = 'Der Pimp', + ['component_knuckle_ballas'] = 'Die Ballas', + ['component_knuckle_dollar'] = 'Der Hustler', + ['component_knuckle_diamond'] = 'Der Stein', + ['component_knuckle_hate'] = 'Der Hater', + ['component_knuckle_love'] = 'Der Lover', + ['component_knuckle_player'] = 'Der Player', + ['component_knuckle_king'] = 'Der King', + ['component_knuckle_vagos'] = 'Die Vagos', + + ['component_luxary_finish'] = 'Luxuswaffenlackierung', + + ['component_handle_default'] = 'Normaler Handgriff', + ['component_handle_vip'] = 'VIP Handgriff', + ['component_handle_bodyguard'] = 'Bodyguard Handgriff', + + ['component_vip_finish'] = 'VIP Lackierung', + ['component_bodyguard_finish'] = 'Bodyguard Lackierung', + + ['component_camo_finish'] = 'Digitales Camouflage', + ['component_camo_finish2'] = 'Pinselstrich Camouflage', + ['component_camo_finish3'] = 'Holzland Camouflage', + ['component_camo_finish4'] = 'Kopf Camouflage', + ['component_camo_finish5'] = 'Sessebta-Nove Camouflage', + ['component_camo_finish6'] = 'Perseus Camouflage', + ['component_camo_finish7'] = 'Leopard Camouflage', + ['component_camo_finish8'] = 'Zebra Camouflage', + ['component_camo_finish9'] = 'Geometrisch Camouflage', + ['component_camo_finish10'] = 'BOOM Camouflage', + ['component_camo_finish11'] = 'Patriotisch Camouflage', + + ['component_camo_slide_finish'] = 'Digital Rutschen Camouflage', + ['component_camo_slide_finish2'] = 'Pinselstrich Rutschen Camouflage', + ['component_camo_slide_finish3'] = 'Holzland Rutschen Camouflage', + ['component_camo_slide_finish4'] = 'Kopf Rutschen Camouflage', + ['component_camo_slide_finish5'] = 'Sessebta-Nove Nove Rutschen Camouflage', + ['component_camo_slide_finish6'] = 'Perseus Rutschen Camouflage', + ['component_camo_slide_finish7'] = 'Leopard Rutschen Camouflage', + ['component_camo_slide_finish8'] = 'Zebra Rutschen Camouflage', + ['component_camo_slide_finish9'] = 'Geometrisch Rutschen Camouflage', + ['component_camo_slide_finish10'] = 'BOOM Rutschen Camouflage', + ['component_camo_slide_finish11'] = 'Patriotisch Rutschen Camouflage', + + ['component_clip_default'] = 'Standart Magazin', + ['component_clip_extended'] = 'Erweiterters Magazin', ['component_clip_drum'] = 'Trommelmagazin', ['component_clip_box'] = 'Kastenmagazin', + + ['component_scope_holo'] = 'Holographisches Zielfernrohr', + ['component_scope_small'] = 'Kleines Zielfernrohr', + ['component_scope_medium'] = 'Mittleres Zielfernrohr', + ['component_scope_large'] = 'Großes Zielfernrohr', + ['component_scope'] = 'Montiertes Zielfernrohr', + ['component_scope_advanced'] = 'Fortgeschrittenes Zielfernrohr', + ['component_ironsights'] = 'Ironsights', + + ['component_suppressor'] = 'Entstörer', + ['component_compensator'] = 'Kompensator', + + ['component_muzzle_flat'] = 'Flache Mündung', + ['component_muzzle_tactical'] = 'Taktische Mündung', + ['component_muzzle_fat'] = 'Fettes-Ende Mündung', + ['component_muzzle_precision'] = 'Präzision Mündung', + ['component_muzzle_heavy'] = 'Schwere Mündung', + ['component_muzzle_slanted'] = 'Schräge Mündung', + ['component_muzzle_split'] = 'Geteiletes-Ende Mündung', + ['component_muzzle_squared'] = 'Quadratische Mündung', + ['component_flashlight'] = 'Taschenlampe', - ['component_scope'] = 'Zielfernrohr', - ['component_scope_advanced'] = 'erweitertes Zielfernrohr', - ['component_suppressor'] = 'Schalldämpfer', - ['component_grip'] = 'Griff', - ['component_luxary_finish'] = 'luxus Waffendesign', + ['component_grip'] = 'Grip', + + ['component_barrel_default'] = 'Normales Fass', + ['component_barrel_heavy'] = 'Schweres Fass', + + ['component_ammo_tracer'] = 'Tracer Munition', + ['component_ammo_incendiary'] = 'Aufruhr Munition', + ['component_ammo_hollowpoint'] = 'Hohlspitze Munition', + ['component_ammo_fmj'] = 'FMJ Munition', + ['component_ammo_armor'] = 'Panzerbrechende Munition', + ['component_ammo_explosive'] = 'Panzerbrechende brennende Munition', + + ['component_shells_default'] = 'Normale Hülsen', + ['component_shells_incendiary'] = 'Drachenatem Hülsen', + ['component_shells_armor'] = 'Stahlschrot Hülsen', + ['component_shells_hollowpoint'] = 'Flechette Hülsen', + ['component_shells_explosive'] = 'Explosives Geschoss Hülsen', -- Weapon Ammo ['ammo_rounds'] = 'Kugel(n)', ['ammo_shells'] = 'Schrotpatrone(n)', - ['ammo_charge'] = 'Ladung', + ['ammo_charge'] = 'Nachladen', ['ammo_petrol'] = 'Benzinkanister', ['ammo_firework'] = 'Feuerwerksrakete(n)', ['ammo_rockets'] = 'Rakete(n)', @@ -217,12 +354,12 @@ Locales['de'] = { ['ammo_flaregun'] = 'Signalfackeln(munition)', -- Weapon Tints - ['tint_default'] = 'standard', - ['tint_green'] = 'grün', - ['tint_gold'] = 'gold', - ['tint_pink'] = 'pink', - ['tint_army'] = 'camouflage', - ['tint_lspd'] = 'blau', - ['tint_orange'] = 'orange', - ['tint_platinum'] = 'platin', + ['tint_default'] = 'Standard', + ['tint_green'] = 'Grün', + ['tint_gold'] = 'Gold', + ['tint_pink'] = 'Pink', + ['tint_army'] = 'Camouflage', + ['tint_lspd'] = 'Blau', + ['tint_orange'] = 'Orange', + ['tint_platinum'] = 'Platin', } From f8b9455a86c1044d4d569d7632aee0049b80c24e Mon Sep 17 00:00:00 2001 From: Gellipapa Date: Sat, 17 Jun 2023 18:42:25 +0200 Subject: [PATCH 22/43] Revert "Update de.lua" --- [core]/es_extended/locales/de.lua | 365 ------------------------------ 1 file changed, 365 deletions(-) diff --git a/[core]/es_extended/locales/de.lua b/[core]/es_extended/locales/de.lua index 892e4dc9..635d9a75 100644 --- a/[core]/es_extended/locales/de.lua +++ b/[core]/es_extended/locales/de.lua @@ -1,368 +1,4 @@ Locales['de'] = { - -- Inventory - ['inventory'] = 'Inventar ( Gewicht %s / %s )', - ['use'] = 'Benutzen', - ['give'] = 'Geben', - ['remove'] = 'Entsorgen', - ['return'] = 'Zurück', - ['give_to'] = 'Geben an', - ['amount'] = 'Anzahl', - ['giveammo'] = 'Munition geben', - ['amountammo'] = 'Munitions Anzahl', - ['noammo'] = 'Nicht Genug!', - ['gave_item'] = 'Du gibst %sx %s an %s', - ['received_item'] = 'Du bekommst %sx %s von %s', - ['gave_weapon'] = 'Du gibst %s an %s', - ['gave_weapon_ammo'] = 'Du gibst ~o~%sx %s für %s an %s', - ['gave_weapon_withammo'] = 'Du gibst %s mit ~o~%sx %s an %s', - ['gave_weapon_hasalready'] = '%s hat bereits %s', - ['gave_weapon_noweapon'] = '%s hat diese Waffe nicht', - ['received_weapon'] = 'Du bekommst %s von %s', - ['received_weapon_ammo'] = 'Du bekommst ~o~%sx %s für deine %s von %s', - ['received_weapon_withammo'] = 'Du bekommst %s mit ~o~%sx %s von %s', - ['received_weapon_hasalready'] = '%s hat versucht dir eine %s zu geben, jedoch hast du diese Waffe bereits!', - ['received_weapon_noweapon'] = '%s hat versucht dir Munition für eine %s zu geben, jedoch hast du diese Waffe bereits!', - ['gave_account_money'] = 'Du gibst %s€ (%s) an %s', - ['received_account_money'] = 'Du bekommst %s€ (%s) von %s', - ['amount_invalid'] = 'Ungültige Anzahl', - ['players_nearby'] = 'Keine Personen in der Nähe!', - ['ex_inv_lim'] = 'Du kannst diese Aktion nicht ausführen!, Inventarlimit für %s überschritten.', - ['imp_invalid_quantity'] = 'Du kannst diese Aktion nicht ausführen!, Ungültige Anzahl!', - ['imp_invalid_amount'] = 'Du kannst diese Aktion nicht ausführen!, Ungültige Anzahl', - ['threw_standard'] = 'Du entsorgst %sx %s', - ['threw_account'] = 'Du Entsorgst %s€ %s', - ['threw_weapon'] = 'Du entsorgst %s', - ['threw_weapon_ammo'] = 'Du entsorgst %s mit ~o~%sx %s', - ['threw_weapon_already'] = 'Du hast diese Waffe bereits!', - ['threw_cannot_pickup'] = 'Inventar ist voll! Du kannst dies nicht aufheben', - ['threw_pickup_prompt'] = 'Drücke [E] zum aufheben', - - -- Key mapping - ['keymap_showinventory'] = 'Inventar Anzeigen', - - -- Salary related - ['received_salary'] = 'Dein Gehaltscheck ist angekommen!: %s€', - ['received_help'] = 'Deine Sozialhilfe ist angekommen: %s€', - ['company_nomoney'] = 'Die Firma an der du Angestellt bist, ist leider Arm und kann dich nicht bezahlen :(', - ['received_paycheck'] = 'Gehaltscheck erhalten', - ['bank'] = 'Sparkasse', - ['account_bank'] = 'Bank', - ['account_black_money'] = 'Schwarzgeld', - ['account_money'] = 'Bargeld', - - ['act_imp'] = 'Du kannst diese Aktion nicht ausführen!', - ['in_vehicle'] = 'Du kannst diese Aktion nicht ausführen! Person ist in einem Fahrzeug', - - -- Commands - ['command_bring'] = 'Person zu dir bringen', - ['command_car'] = 'Fahrzeug Spawnen', - ['command_car_car'] = 'Fahrzeug Model oder Hash', - ['command_cardel'] = 'Fahrzeuge entfernen', - ['command_cardel_radius'] = 'Entfernt alle Fahrzeuge in einem bestimmten Radius', - ['command_clear'] = 'Textchat leeren', - ['command_clearall'] = 'Textchat leeren für alle Spieler leeren', - ['command_clearinventory'] = 'Alle Items von dem Inventar eines Spielers entfernen', - ['command_clearloadout'] = 'Alle waffen von dem Spieler Loadout entfernen', - ['command_freeze'] = 'Spieler Freezen', - ['command_unfreeze'] = 'Spieler Entfreezen', - ['command_giveaccountmoney'] = 'Geld an einen bestimmten Account geben', - ['command_giveaccountmoney_account'] = 'Account wohin das Geld hinzugefügt werden soll', - ['command_giveaccountmoney_amount'] = 'Anzahl zum hinzufügen', - ['command_giveaccountmoney_invalid'] = 'Accountname Ungültig', - ['command_giveitem'] = 'Spieler ein item geben', - ['command_giveitem_item'] = 'Item Name', - ['command_giveitem_count'] = 'Anzahl', - ['command_giveweapon'] = 'Spieler eine Waffe geben', - ['command_giveweapon_weapon'] = 'Waffenname', - ['command_giveweapon_ammo'] = 'Munitionsanzahl', - ['command_giveweapon_hasalready'] = 'Spieler hat bereits diese Waffe', - ['command_giveweaponcomponent'] = 'Waffenkomponent an einen Spieler geben', - ['command_giveweaponcomponent_component'] = 'Komponent Name', - ['command_giveweaponcomponent_invalid'] = 'Ungültiger Komponent Name', - ['command_giveweaponcomponent_hasalready'] = 'Spieler hat bereits diesen Komponent', - ['command_giveweaponcomponent_missingweapon'] = 'Spieler hat diese Waffe nicht', - ['command_goto'] = 'Teleportiere dich zu einem Spieler', - ['command_kill'] = 'Spieler Töten', - ['command_save'] = 'Von einem bestimmten Spieler die Spielerdaten Speichern', - ['command_saveall'] = 'Von allen Spielern die Spielerdaten Speichern', - ['command_setaccountmoney'] = 'Geld auf einem bestimmten Account setzen', - ['command_setaccountmoney_amount'] = 'Anzahl', - ['command_setcoords'] = 'Zu den bestimmten Koordinaten teleportieren', - ['command_setcoords_x'] = 'X Koordinate', - ['command_setcoords_y'] = 'Y Koordinate', - ['command_setcoords_z'] = 'Z Koordinate', - ['command_setjob'] = 'Job eines Spielers setzen', - ['command_setjob_job'] = 'Name', - ['command_setjob_grade'] = 'Job Grad', - ['command_setjob_invalid'] = 'Der Job Grad oder beides sind ungültig', - ['command_setgroup'] = 'Setzt eine Berechtigungs Gruppe für einen User', - ['command_setgroup_group'] = 'Name der Gruppe', - ['commanderror_argumentmismatch'] = 'Ungültiger Argument (gegeben %s, gewollt %s)', - ['commanderror_argumentmismatch_number'] = 'Ungültiges Argument #%s daten typ (string gegeben, gewollte nummer)', - ['commanderror_invaliditem'] = 'Ungültiges Item', - ['commanderror_invalidweapon'] = 'Ungültige Waffe', - ['commanderror_console'] = 'Befehl kann nicht von der Konsole aus ausgeführt werden', - ['commanderror_invalidcommand'] = 'Ungültiger Befehl - /%s', - ['commanderror_invalidplayerid'] = 'Angegebener Spieler ist nicht online!', - ['commandgeneric_playerid'] = 'Spieler`s ID', - ['command_giveammo_noweapon_found'] = '%s besitzt diese Waffe nicht', - ['command_giveammo_weapon'] = 'Waffenname', - ['command_giveammo_ammo'] = 'Munitionsanzahl', - ['tpm_nowaypoint'] = 'Kein Wegpunkt gesetzt.', - ['tpm_success'] = 'Erfolgreich teleportiert', - - ['noclip_message'] = 'Noclip wurde %s', - ['enabled'] = '~g~Aktiviert~s~', - ['disabled'] = '~r~Deaktiviert~s~', - - -- Locale settings - ['locale_digit_grouping_symbol'] = ',', - ['locale_currency'] = '%s€', - - -- Weapons - - -- Melee - ['weapon_dagger'] = 'Dolch', - ['weapon_bat'] = 'Baseballschläger', - ['weapon_battleaxe'] = 'Kampfaxt', - ['weapon_bottle'] = 'Flasche', - ['weapon_crowbar'] = 'Brechstange', - ['weapon_flashlight'] = 'Taschenlampe', - ['weapon_golfclub'] = 'Golfschläger', - ['weapon_hammer'] = 'Hammer', - ['weapon_hatchet'] = 'Beil', - ['weapon_knife'] = 'Messer', - ['weapon_knuckle'] = 'Schlagring', - ['weapon_machete'] = 'Machete', - ['weapon_nightstick'] = 'Schlagstock', - ['weapon_wrench'] = 'Rohrzange', - ['weapon_poolcue'] = 'Billiardstange', - ['weapon_stone_hatchet'] = 'Steinbeil', - ['weapon_switchblade'] = 'Springmesser', - - -- Handguns - ['weapon_appistol'] = 'AP Pistole', - ['weapon_ceramicpistol'] = 'Keramikpistole', - ['weapon_combatpistol'] = 'Kampfpistole', - ['weapon_doubleaction'] = 'Double-Action Revolver', - ['weapon_navyrevolver'] = 'Navy Revolver', - ['weapon_flaregun'] = 'Flaregun', - ['weapon_gadgetpistol'] = 'Gadgetpistole', - ['weapon_heavypistol'] = 'Schwere Pistole', - ['weapon_revolver'] = 'Schwerer Revolver', - ['weapon_revolver_mk2'] = 'Schwerer Revolver MK2', - ['weapon_marksmanpistol'] = 'Scharfschützen Pistole', - ['weapon_pistol'] = 'Pistole', - ['weapon_pistol_mk2'] = 'Pistole MK2', - ['weapon_pistol50'] = 'Pistole 50 Kaliber', - ['weapon_snspistol'] = 'SNS Pistol', - ['weapon_snspistol_mk2'] = 'SNS Pistol MK2', - ['weapon_stungun'] = 'Taser', - ['weapon_raypistol'] = 'Up-N-Atomizer', - ['weapon_vintagepistol'] = 'Vintagepistole', - - -- Shotguns - ['weapon_assaultshotgun'] = 'Sturmschrotflinte', - ['weapon_autoshotgun'] = 'Automatische Schrotflinte', - ['weapon_bullpupshotgun'] = 'Bullpup-Schrotflinte', - ['weapon_combatshotgun'] = 'Kampfschrotfline', - ['weapon_dbshotgun'] = 'Doppelbarrel Schrotflinte', - ['weapon_heavyshotgun'] = 'Schwere Schrotflinte', - ['weapon_musket'] = 'Muskete', - ['weapon_pumpshotgun'] = 'Pump Schrotflinte', - ['weapon_pumpshotgun_mk2'] = 'Pump Schrotflinte MK2', - ['weapon_sawnoffshotgun'] = 'Abgesägte Schrotflinte', - - -- SMG & LMG - ['weapon_assaultsmg'] = 'Sturm SMG', - ['weapon_combatmg'] = 'Kampf MG', - ['weapon_combatmg_mk2'] = 'Kampf MG MK2', - ['weapon_combatpdw'] = 'Kampf PDW', - ['weapon_gusenberg'] = 'Gusenberg Sweeper', - ['weapon_machinepistol'] = 'Maschinenpistole', - ['weapon_mg'] = 'MG', - ['weapon_microsmg'] = 'Mikro SMG', - ['weapon_minismg'] = 'Mini SMG', - ['weapon_smg'] = 'SMG', - ['weapon_smg_mk2'] = 'SMG MK2', - ['weapon_raycarbine'] = 'Unheiliger Höllenbringer', - - -- Rifles - ['weapon_advancedrifle'] = 'Fortgeschrittenes Gewehr', - ['weapon_assaultrifle'] = 'Sturmgewehr', - ['weapon_assaultrifle_mk2'] = 'Sturmgewehr MK2', - ['weapon_bullpuprifle'] = 'Bullpup Gewehr', - ['weapon_bullpuprifle_mk2'] = 'Bullpup Gewehr MK2', - ['weapon_carbinerifle'] = 'Karabinergewehr', - ['weapon_carbinerifle_mk2'] = 'Karabinergewehr MK2', - ['weapon_compactrifle'] = 'Kompaktesgewehr', - ['weapon_militaryrifle'] = 'Militärgewehr', - ['weapon_specialcarbine'] = 'Spezialkarabiner', - ['weapon_specialcarbine_mk2'] = 'Spezialkarabiner MK2', - - -- Sniper - ['weapon_heavysniper'] = 'Schwere Sniper', - ['weapon_heavysniper_mk2'] = 'Schwere Sniper MK2', - ['weapon_marksmanrifle'] = 'Scharfschützengewehr', - ['weapon_marksmanrifle_mk2'] = 'Scharfschützengewehr MK2', - ['weapon_sniperrifle'] = 'Sniper', - - -- Heavy / Launchers - ['weapon_compactlauncher'] = 'Kompaktlauncher', - ['weapon_firework'] = 'Feuerwerklauncher', - ['weapon_grenadelauncher'] = 'Granatwerfer', - ['weapon_hominglauncher'] = 'Lenkraketenwerfer', - ['weapon_minigun'] = 'Minigun', - ['weapon_railgun'] = 'Railgun', - ['weapon_rpg'] = 'Raketenwerfer', - ['weapon_rayminigun'] = 'Witwenmacher', - - -- Criminal Enterprises DLC - ['weapon_metaldetector'] = 'Metalldetektor', - ['weapon_precisionrifle'] = 'Präzisionsgewehr', - ['weapon_tactilerifle'] = 'Service Karabiner', - - -- Thrown - ['weapon_ball'] = 'Baseball', - ['weapon_bzgas'] = 'BZ Gas', - ['weapon_flare'] = 'Leuchtfackel', - ['weapon_grenade'] = 'Granate', - ['weapon_petrolcan'] = 'Benzinkanister', - ['weapon_hazardcan'] = 'Gefährliche Kanister', - ['weapon_molotov'] = 'Molotov Cocktail', - ['weapon_proxmine'] = 'Annährungsmine', - ['weapon_pipebomb'] = 'Rohrbombe', - ['weapon_snowball'] = 'Schneeball', - ['weapon_stickybomb'] = 'Haftbombe', - ['weapon_smokegrenade'] = 'Tränengas', - - -- Special - ['weapon_fireextinguisher'] = 'Feuerlöscher', - ['weapon_digiscanner'] = 'Digitalscanner', - ['weapon_garbagebag'] = 'Müllsack', - ['weapon_handcuffs'] = 'Handschelle', - ['gadget_nightvision'] = 'Nachtsicht', - ['gadget_parachute'] = 'Fallschirm', - - -- Weapon Components - ['component_knuckle_base'] = 'Basismodell', - ['component_knuckle_pimp'] = 'Der Pimp', - ['component_knuckle_ballas'] = 'Die Ballas', - ['component_knuckle_dollar'] = 'Der Hustler', - ['component_knuckle_diamond'] = 'Der Stein', - ['component_knuckle_hate'] = 'Der Hater', - ['component_knuckle_love'] = 'Der Lover', - ['component_knuckle_player'] = 'Der Player', - ['component_knuckle_king'] = 'Der King', - ['component_knuckle_vagos'] = 'Die Vagos', - - ['component_luxary_finish'] = 'Luxuswaffenlackierung', - - ['component_handle_default'] = 'Normaler Handgriff', - ['component_handle_vip'] = 'VIP Handgriff', - ['component_handle_bodyguard'] = 'Bodyguard Handgriff', - - ['component_vip_finish'] = 'VIP Lackierung', - ['component_bodyguard_finish'] = 'Bodyguard Lackierung', - - ['component_camo_finish'] = 'Digitales Camouflage', - ['component_camo_finish2'] = 'Pinselstrich Camouflage', - ['component_camo_finish3'] = 'Holzland Camouflage', - ['component_camo_finish4'] = 'Kopf Camouflage', - ['component_camo_finish5'] = 'Sessebta-Nove Camouflage', - ['component_camo_finish6'] = 'Perseus Camouflage', - ['component_camo_finish7'] = 'Leopard Camouflage', - ['component_camo_finish8'] = 'Zebra Camouflage', - ['component_camo_finish9'] = 'Geometrisch Camouflage', - ['component_camo_finish10'] = 'BOOM Camouflage', - ['component_camo_finish11'] = 'Patriotisch Camouflage', - - ['component_camo_slide_finish'] = 'Digital Rutschen Camouflage', - ['component_camo_slide_finish2'] = 'Pinselstrich Rutschen Camouflage', - ['component_camo_slide_finish3'] = 'Holzland Rutschen Camouflage', - ['component_camo_slide_finish4'] = 'Kopf Rutschen Camouflage', - ['component_camo_slide_finish5'] = 'Sessebta-Nove Nove Rutschen Camouflage', - ['component_camo_slide_finish6'] = 'Perseus Rutschen Camouflage', - ['component_camo_slide_finish7'] = 'Leopard Rutschen Camouflage', - ['component_camo_slide_finish8'] = 'Zebra Rutschen Camouflage', - ['component_camo_slide_finish9'] = 'Geometrisch Rutschen Camouflage', - ['component_camo_slide_finish10'] = 'BOOM Rutschen Camouflage', - ['component_camo_slide_finish11'] = 'Patriotisch Rutschen Camouflage', - - ['component_clip_default'] = 'Standart Magazin', - ['component_clip_extended'] = 'Erweiterters Magazin', - ['component_clip_drum'] = 'Trommelmagazin', - ['component_clip_box'] = 'Kastenmagazin', - - ['component_scope_holo'] = 'Holographisches Zielfernrohr', - ['component_scope_small'] = 'Kleines Zielfernrohr', - ['component_scope_medium'] = 'Mittleres Zielfernrohr', - ['component_scope_large'] = 'Großes Zielfernrohr', - ['component_scope'] = 'Montiertes Zielfernrohr', - ['component_scope_advanced'] = 'Fortgeschrittenes Zielfernrohr', - ['component_ironsights'] = 'Ironsights', - - ['component_suppressor'] = 'Entstörer', - ['component_compensator'] = 'Kompensator', - - ['component_muzzle_flat'] = 'Flache Mündung', - ['component_muzzle_tactical'] = 'Taktische Mündung', - ['component_muzzle_fat'] = 'Fettes-Ende Mündung', - ['component_muzzle_precision'] = 'Präzision Mündung', - ['component_muzzle_heavy'] = 'Schwere Mündung', - ['component_muzzle_slanted'] = 'Schräge Mündung', - ['component_muzzle_split'] = 'Geteiletes-Ende Mündung', - ['component_muzzle_squared'] = 'Quadratische Mündung', - - ['component_flashlight'] = 'Taschenlampe', - ['component_grip'] = 'Grip', - - ['component_barrel_default'] = 'Normales Fass', - ['component_barrel_heavy'] = 'Schweres Fass', - - ['component_ammo_tracer'] = 'Tracer Munition', - ['component_ammo_incendiary'] = 'Aufruhr Munition', - ['component_ammo_hollowpoint'] = 'Hohlspitze Munition', - ['component_ammo_fmj'] = 'FMJ Munition', - ['component_ammo_armor'] = 'Panzerbrechende Munition', - ['component_ammo_explosive'] = 'Panzerbrechende brennende Munition', - - ['component_shells_default'] = 'Normale Hülsen', - ['component_shells_incendiary'] = 'Drachenatem Hülsen', - ['component_shells_armor'] = 'Stahlschrot Hülsen', - ['component_shells_hollowpoint'] = 'Flechette Hülsen', - ['component_shells_explosive'] = 'Explosives Geschoss Hülsen', - - -- Weapon Ammo - ['ammo_rounds'] = 'Kugel(n)', - ['ammo_shells'] = 'Schrotpatrone(n)', - ['ammo_charge'] = 'Nachladen', - ['ammo_petrol'] = 'Benzinkanister', - ['ammo_firework'] = 'Feuerwerksrakete(n)', - ['ammo_rockets'] = 'Rakete(n)', - ['ammo_grenadelauncher'] = 'Granate(n)', - ['ammo_grenade'] = 'Granate(n)', - ['ammo_stickybomb'] = 'C4(s)', - ['ammo_pipebomb'] = 'Rohrbombe(n)', - ['ammo_smokebomb'] = 'Rauchgranate(n)', - ['ammo_molotov'] = 'Molotovcocktail(s)', - ['ammo_proxmine'] = 'Annäherungsmine(n)', - ['ammo_bzgas'] = 'Bzgas', - ['ammo_ball'] = 'Ball', - ['ammo_snowball'] = 'Schneebälle', - ['ammo_flare'] = 'Signalfackel(n)', - ['ammo_flaregun'] = 'Signalfackeln(munition)', - - -- Weapon Tints - ['tint_default'] = 'Standard', - ['tint_green'] = 'Grün', - ['tint_gold'] = 'Gold', - ['tint_pink'] = 'Pink', - ['tint_army'] = 'Camouflage', - ['tint_lspd'] = 'Blau', - ['tint_orange'] = 'Orange', - ['tint_platinum'] = 'Platin', - -- Inventory ['inventory'] = 'Inventar ( Gewicht %s / %s )', ['use'] = 'Benutzen', @@ -732,5 +368,4 @@ Locales['de'] = { ['tint_lspd'] = 'Blau', ['tint_orange'] = 'Orange', ['tint_platinum'] = 'Platin', - } From d60b099523ebba3453e80b3f03ba6b1dbdfc5b3d Mon Sep 17 00:00:00 2001 From: TheFantomas <117121911+TheFantomas@users.noreply.github.com> Date: Sun, 18 Jun 2023 14:57:05 +0200 Subject: [PATCH 23/43] Support for Back wheels & Some Fixes --- [core]/es_extended/client/functions.lua | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/[core]/es_extended/client/functions.lua b/[core]/es_extended/client/functions.lua index b7d238aa..031f043f 100644 --- a/[core]/es_extended/client/functions.lua +++ b/[core]/es_extended/client/functions.lua @@ -715,8 +715,9 @@ function ESX.Game.GetVehicleProperties(vehicle) modXenon = IsToggleModOn(vehicle, 22), modFrontWheels = GetVehicleMod(vehicle, 23), - modCustomWheels = GetVehicleModVariation(vehicle, 23), + modCustomFrontWheels = GetVehicleModVariation(vehicle, 23), modBackWheels = GetVehicleMod(vehicle, 24), + modCustomBackWheels = GetVehicleModVariation(vehicle, 24), modPlateHolder = GetVehicleMod(vehicle, 25), modVanityPlate = GetVehicleMod(vehicle, 26), @@ -899,12 +900,15 @@ function ESX.Game.SetVehicleProperties(vehicle, props) if props.modFrontWheels ~= nil then SetVehicleMod(vehicle, 23, props.modFrontWheels, false) end - if props.modCustomWheels ~= nil then - SetVehicleMod(vehicle, 23, props.modFrontWheels, true) + if props.modCustomFrontWheels ~= nil then + SetVehicleMod(vehicle, 23, props.modCustomFrontWheels, false) end if props.modBackWheels ~= nil then SetVehicleMod(vehicle, 24, props.modBackWheels, false) end + if props.modCustomBackWheels ~= nil then + SetVehicleMod(vehicle, 24, props.modCustomBackWheels, false) + end if props.modPlateHolder ~= nil then SetVehicleMod(vehicle, 25, props.modPlateHolder, false) end From 59fd0e551d37a55f6375f05ec530246012472134 Mon Sep 17 00:00:00 2001 From: Tony Stark <76168122+tony-stark-17@users.noreply.github.com> Date: Tue, 20 Jun 2023 23:18:06 +0530 Subject: [PATCH 24/43] timeout for loop and parameters changed to table --- [core]/es_extended/server/main.lua | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/[core]/es_extended/server/main.lua b/[core]/es_extended/server/main.lua index 9602d469..47570c40 100644 --- a/[core]/es_extended/server/main.lua +++ b/[core]/es_extended/server/main.lua @@ -628,16 +628,21 @@ ESX.RegisterServerCallback('esx:getPlayerNames', function(source, cb, players) cb(players) end) -ESX.RegisterServerCallback("esx:spawnVehicle", function(source,cb,model,coords,heading,props,warp) +ESX.RegisterServerCallback("esx:spawnVehicle", function(source,cb,vehData) local ped = GetPlayerPed(source) local vehicle = nil - props = props or {} + local model = vehData.model or `ADDER` + local heading = vehData.heading or 0.0 + local warp = vehData.warp + local props = vehData.props or {} ESX.OneSync.SpawnVehicle(model, coords, heading, props, function(id) vehicle = NetworkGetEntityFromNetworkId(id) if warp then - while GetVehiclePedIsIn(ped) ~= vehicle do + local timeout = 0 + while GetVehiclePedIsIn(ped) ~= vehicle and timeout <= 15 do Wait(0) TaskWarpPedIntoVehicle(ped, vehicle, -1) + timeout += 1 end end cb(id) From 35873f7bd119b26b5bb3f604999480cbe622bbab Mon Sep 17 00:00:00 2001 From: Tony Stark <76168122+tony-stark-17@users.noreply.github.com> Date: Tue, 20 Jun 2023 23:26:38 +0530 Subject: [PATCH 25/43] fix coords and better way of checking heading --- [core]/es_extended/server/main.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/[core]/es_extended/server/main.lua b/[core]/es_extended/server/main.lua index 47570c40..b66bcbb5 100644 --- a/[core]/es_extended/server/main.lua +++ b/[core]/es_extended/server/main.lua @@ -632,7 +632,8 @@ ESX.RegisterServerCallback("esx:spawnVehicle", function(source,cb,vehData) local ped = GetPlayerPed(source) local vehicle = nil local model = vehData.model or `ADDER` - local heading = vehData.heading or 0.0 + local coords = vehData.coords + local heading = coords.w or 0.0 local warp = vehData.warp local props = vehData.props or {} ESX.OneSync.SpawnVehicle(model, coords, heading, props, function(id) From 6224c1004973183126db1dfa5ad45a8902f6ff2f Mon Sep 17 00:00:00 2001 From: GLN <48370836+GLN123@users.noreply.github.com> Date: Wed, 21 Jun 2023 05:21:03 +0200 Subject: [PATCH 26/43] Update main.lua --- [core]/esx_multicharacter/server/main.lua | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/[core]/esx_multicharacter/server/main.lua b/[core]/esx_multicharacter/server/main.lua index e07debe4..a31439db 100644 --- a/[core]/esx_multicharacter/server/main.lua +++ b/[core]/esx_multicharacter/server/main.lua @@ -214,8 +214,13 @@ end if isNew then awaitingRegistration[source] = charid else - TriggerEvent('esx:onPlayerJoined', source, PREFIX..charid) - ESX.Players[GetIdentifier(source)] = true + local identifier = PREFIX..charid .. ':' .. GetIdentifier(source) + if not ESX.GetPlayerFromIdentifier(identifier) then + TriggerEvent('esx:onPlayerJoined', source, PREFIX..charid) + ESX.Players[GetIdentifier(source)] = true + else + DropPlayer(source, 'Your identifier '..identifier..' is already on the server!') + end end end end) From aba27c43fe7376b7135fbf3efb8ab9ac342e02ba Mon Sep 17 00:00:00 2001 From: lxi <75556084+lxi1400@users.noreply.github.com> Date: Wed, 21 Jun 2023 01:31:11 -0500 Subject: [PATCH 27/43] fix spelling and grammar --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 16609cf8..8731c473 100644 --- a/readme.md +++ b/readme.md @@ -2,7 +2,7 @@

Discord - Website - Documentation

Want more resources? You can browse the ESX Community Github or Cfx.re Releases board for more! -

ESX is the leading framework, trusted By thousands of commmunitys for the heighest quality roleplay servers on FiveM

+

ESX is the leading framework, trusted by thousands of communities for the highest quality roleplay servers on FiveM


From 369971387b907a061422cddbfb9eb8b5ca72ee06 Mon Sep 17 00:00:00 2001 From: Taavi <97351942+Taavi-AU@users.noreply.github.com> Date: Wed, 21 Jun 2023 19:12:24 +0800 Subject: [PATCH 28/43] format --- [core]/es_extended/server/main.lua | 38 +++++++++++++++--------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/[core]/es_extended/server/main.lua b/[core]/es_extended/server/main.lua index b66bcbb5..2943c7e8 100644 --- a/[core]/es_extended/server/main.lua +++ b/[core]/es_extended/server/main.lua @@ -629,25 +629,25 @@ ESX.RegisterServerCallback('esx:getPlayerNames', function(source, cb, players) end) ESX.RegisterServerCallback("esx:spawnVehicle", function(source,cb,vehData) - local ped = GetPlayerPed(source) - local vehicle = nil - local model = vehData.model or `ADDER` - local coords = vehData.coords - local heading = coords.w or 0.0 - local warp = vehData.warp - local props = vehData.props or {} - ESX.OneSync.SpawnVehicle(model, coords, heading, props, function(id) - vehicle = NetworkGetEntityFromNetworkId(id) - if warp then - local timeout = 0 - while GetVehiclePedIsIn(ped) ~= vehicle and timeout <= 15 do - Wait(0) - TaskWarpPedIntoVehicle(ped, vehicle, -1) - timeout += 1 - end - end - cb(id) - end) + local ped = GetPlayerPed(sourcec) + local vehicle = nil + local model = vehData.model or `ADDER` + local coords = vehData.coords or GetEntityCoords(ped) + local heading = coords.w or 0.0 + local warp = vehData.warp + local props = vehData.props or {} + ESX.OneSync.SpawnVehicle(model, coords, heading, props, function(id) + vehicle = NetworkGetEntityFromNetworkId(id) + if warp then + local timeout = 0 + while GetVehiclePedIsIn(ped) ~= vehicle and timeout <= 15 do + Wait(0) + TaskWarpPedIntoVehicle(ped, vehicle, -1) + timeout += 1 + end + end + cb(id) + end) end) AddEventHandler('txAdmin:events:scheduledRestart', function(eventData) From f7ec2e5b7cafd78de9c23366eb8f7954012eaabb Mon Sep 17 00:00:00 2001 From: Taavi <97351942+Taavi-AU@users.noreply.github.com> Date: Wed, 21 Jun 2023 19:15:09 +0800 Subject: [PATCH 29/43] remove stupid vars can be reverted if better with vars, imo its uglier with vars --- [core]/es_extended/server/main.lua | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/[core]/es_extended/server/main.lua b/[core]/es_extended/server/main.lua index 2943c7e8..68cc298a 100644 --- a/[core]/es_extended/server/main.lua +++ b/[core]/es_extended/server/main.lua @@ -631,12 +631,7 @@ end) ESX.RegisterServerCallback("esx:spawnVehicle", function(source,cb,vehData) local ped = GetPlayerPed(sourcec) local vehicle = nil - local model = vehData.model or `ADDER` - local coords = vehData.coords or GetEntityCoords(ped) - local heading = coords.w or 0.0 - local warp = vehData.warp - local props = vehData.props or {} - ESX.OneSync.SpawnVehicle(model, coords, heading, props, function(id) + ESX.OneSync.SpawnVehicle(vehData.model or `ADDER`, vehData.coords or GetEntityCoords(ped), vehData.coords.w or 0.0, vehData.props or {}, function(id) vehicle = NetworkGetEntityFromNetworkId(id) if warp then local timeout = 0 From d96cb4c52c0ddd0dbe5c68c6d765fca09f8041de Mon Sep 17 00:00:00 2001 From: Taavi <97351942+Taavi-AU@users.noreply.github.com> Date: Wed, 21 Jun 2023 19:16:22 +0800 Subject: [PATCH 30/43] remove vehicle = nil, useless --- [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 68cc298a..b96d6226 100644 --- a/[core]/es_extended/server/main.lua +++ b/[core]/es_extended/server/main.lua @@ -630,9 +630,8 @@ end) ESX.RegisterServerCallback("esx:spawnVehicle", function(source,cb,vehData) local ped = GetPlayerPed(sourcec) - local vehicle = nil ESX.OneSync.SpawnVehicle(vehData.model or `ADDER`, vehData.coords or GetEntityCoords(ped), vehData.coords.w or 0.0, vehData.props or {}, function(id) - vehicle = NetworkGetEntityFromNetworkId(id) + local vehicle = NetworkGetEntityFromNetworkId(id) if warp then local timeout = 0 while GetVehiclePedIsIn(ped) ~= vehicle and timeout <= 15 do From c3dea9e80c5b00d5fd12b5e68334bd068447cf98 Mon Sep 17 00:00:00 2001 From: Taavi <97351942+Taavi-AU@users.noreply.github.com> Date: Wed, 21 Jun 2023 19:20:13 +0800 Subject: [PATCH 31/43] fix warp = nil --- [core]/es_extended/server/main.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/es_extended/server/main.lua b/[core]/es_extended/server/main.lua index b96d6226..1ae94274 100644 --- a/[core]/es_extended/server/main.lua +++ b/[core]/es_extended/server/main.lua @@ -632,7 +632,7 @@ ESX.RegisterServerCallback("esx:spawnVehicle", function(source,cb,vehData) local ped = GetPlayerPed(sourcec) ESX.OneSync.SpawnVehicle(vehData.model or `ADDER`, vehData.coords or GetEntityCoords(ped), vehData.coords.w or 0.0, vehData.props or {}, function(id) local vehicle = NetworkGetEntityFromNetworkId(id) - if warp then + if vehData.warp then local timeout = 0 while GetVehiclePedIsIn(ped) ~= vehicle and timeout <= 15 do Wait(0) From 3489682ac36234e314b65d083c9c8256bc5dca3d Mon Sep 17 00:00:00 2001 From: Taavi <97351942+Taavi-AU@users.noreply.github.com> Date: Wed, 21 Jun 2023 19:20:55 +0800 Subject: [PATCH 32/43] incorrect spelling for source --- [core]/es_extended/server/main.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/es_extended/server/main.lua b/[core]/es_extended/server/main.lua index 1ae94274..a569fd08 100644 --- a/[core]/es_extended/server/main.lua +++ b/[core]/es_extended/server/main.lua @@ -629,7 +629,7 @@ ESX.RegisterServerCallback('esx:getPlayerNames', function(source, cb, players) end) ESX.RegisterServerCallback("esx:spawnVehicle", function(source,cb,vehData) - local ped = GetPlayerPed(sourcec) + local ped = GetPlayerPed(source) ESX.OneSync.SpawnVehicle(vehData.model or `ADDER`, vehData.coords or GetEntityCoords(ped), vehData.coords.w or 0.0, vehData.props or {}, function(id) local vehicle = NetworkGetEntityFromNetworkId(id) if vehData.warp then From dc6567d184a8fd132633c6fec4d80240a0dcb0e6 Mon Sep 17 00:00:00 2001 From: GLN <48370836+GLN123@users.noreply.github.com> Date: Wed, 21 Jun 2023 15:46:19 +0200 Subject: [PATCH 33/43] Update main.lua --- [core]/esx_multicharacter/server/main.lua | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/[core]/esx_multicharacter/server/main.lua b/[core]/esx_multicharacter/server/main.lua index a31439db..12ceacc9 100644 --- a/[core]/esx_multicharacter/server/main.lua +++ b/[core]/esx_multicharacter/server/main.lua @@ -214,13 +214,16 @@ end if isNew then awaitingRegistration[source] = charid else - local identifier = PREFIX..charid .. ':' .. GetIdentifier(source) - if not ESX.GetPlayerFromIdentifier(identifier) then - TriggerEvent('esx:onPlayerJoined', source, PREFIX..charid) - ESX.Players[GetIdentifier(source)] = true - else - DropPlayer(source, 'Your identifier '..identifier..' is already on the server!') + if not ESX.GetConfig().EnableDebug then + local identifier = PREFIX..charid .. ':' .. GetIdentifier(source) + if ESX.GetPlayerFromIdentifier(identifier) then + DropPlayer(source, 'Your identifier '..identifier..' is already on the server!') + return + end end + + TriggerEvent('esx:onPlayerJoined', source, PREFIX..charid) + ESX.Players[GetIdentifier(source)] = true end end end) From 3382605469b100f2e8c0e4e7d3918c368f5664aa Mon Sep 17 00:00:00 2001 From: Taavi <97351942+Taavi-AU@users.noreply.github.com> Date: Thu, 22 Jun 2023 12:28:28 +0800 Subject: [PATCH 34/43] Update main.lua --- [core]/es_extended/server/main.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/es_extended/server/main.lua b/[core]/es_extended/server/main.lua index a569fd08..d1f08bc1 100644 --- a/[core]/es_extended/server/main.lua +++ b/[core]/es_extended/server/main.lua @@ -631,8 +631,8 @@ end) ESX.RegisterServerCallback("esx:spawnVehicle", function(source,cb,vehData) local ped = GetPlayerPed(source) ESX.OneSync.SpawnVehicle(vehData.model or `ADDER`, vehData.coords or GetEntityCoords(ped), vehData.coords.w or 0.0, vehData.props or {}, function(id) - local vehicle = NetworkGetEntityFromNetworkId(id) if vehData.warp then + local vehicle = NetworkGetEntityFromNetworkId(id) local timeout = 0 while GetVehiclePedIsIn(ped) ~= vehicle and timeout <= 15 do Wait(0) From 3d4e07fb8edeef5c1b99e79bbb0babb0272d0557 Mon Sep 17 00:00:00 2001 From: Gellipapa Date: Thu, 22 Jun 2023 23:27:46 +0200 Subject: [PATCH 35/43] :adhesive_bandage: fix get current resource name --- [core]/es_extended/locale.lua | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/[core]/es_extended/locale.lua b/[core]/es_extended/locale.lua index 18120067..37c7e091 100644 --- a/[core]/es_extended/locale.lua +++ b/[core]/es_extended/locale.lua @@ -2,8 +2,7 @@ Locales = {} function Translate(str, ...) -- Translate string if not str then - local currentResourceName = GetCurrentResourceName() - print(("[^1ERROR^7] Resource ^5%s^7 You did not specify a parameter for the Translate function or the value is nil!"):format(currentResourceName)) + print(("[^1ERROR^7] Resource ^5%s^7 You did not specify a parameter for the Translate function or the value is nil!"):format(GetInvokingResource() or GetCurrentResourceName())) return 'Given translate function parameter is nil!' end if Locales[Config.Locale] then From ef013312014efbd5209197636e155d582382b303 Mon Sep 17 00:00:00 2001 From: Gellipapa Date: Thu, 22 Jun 2023 23:30:34 +0200 Subject: [PATCH 36/43] :adhesive_bandage: fix menu stuck --- [core]/esx_menu_default/client/main.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/[core]/esx_menu_default/client/main.lua b/[core]/esx_menu_default/client/main.lua index 65d62d09..81a2f45f 100644 --- a/[core]/esx_menu_default/client/main.lua +++ b/[core]/esx_menu_default/client/main.lua @@ -15,6 +15,9 @@ end local function closeMenu(namespace, name) CurrentNameSpace = namespace OpenedMenus -= 1 + if OpenedMenus < 0 then + OpenedMenus = 0 + end SendNUIMessage({ action = 'closeMenu', namespace = namespace, From 04c287330a68a6d42244d8b0fe89d9c9f4280e7f Mon Sep 17 00:00:00 2001 From: Gellipapa Date: Thu, 22 Jun 2023 23:37:41 +0200 Subject: [PATCH 37/43] :pencil2: fix typo --- [core]/es_extended/server/functions.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index 1d290795..b1b16e56 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -378,7 +378,7 @@ function ESX.SetPlayerFunctionOverride(index) return print('[^3WARNING^7] No valid index provided.') end - Core.PlayerFunctionOverride = index + Config.PlayerFunctionOverride = index end function ESX.GetItemLabel(item) From 5e44373d80c3eb94bad3b068788f5c742adb3e30 Mon Sep 17 00:00:00 2001 From: MoskalykA <100430077+MoskalykA@users.noreply.github.com> Date: Mon, 26 Jun 2023 13:26:24 +0200 Subject: [PATCH 38/43] refactor: simplify the `GetExtendedPlayers` function --- [core]/es_extended/server/functions.lua | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index 202e1b5e..9b6e2135 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -214,13 +214,11 @@ end ESX.GetPlayers = GetPlayers function ESX.GetExtendedPlayers(key, val) + if not key then return ESX.Players end + local xPlayers = {} for k, v in pairs(ESX.Players) do - if key then - if (key == 'job' and v.job.name == val) or v[key] == val then - xPlayers[#xPlayers + 1] = v - end - else + if (key == 'job' and v.job.name == val) or v[key] == val then xPlayers[#xPlayers + 1] = v end end From 0104223af455764fc3fc11ecc7e8531f36574dc6 Mon Sep 17 00:00:00 2001 From: MoskalykA <100430077+MoskalykA@users.noreply.github.com> Date: Tue, 27 Jun 2023 14:39:27 +0200 Subject: [PATCH 39/43] feat: `GetExtendedPlayers` can take a table as a second parameter --- [core]/es_extended/server/functions.lua | 26 ++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index fbda3d4e..a3a34878 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -221,15 +221,35 @@ end ESX.GetPlayers = GetPlayers +local function checkTable(key, val, player) + for valIndex = 1, #val do + local value = val[valIndex] + if not xPlayers[value] then + xPlayers[value] = {} + end + + if (key == 'job' and player.job.name == value) or player[key] == value then + xPlayers[value][#xPlayers[value] + 1] = v + end + end +end + function ESX.GetExtendedPlayers(key, val) if not key then return ESX.Players end local xPlayers = {} - for k, v in pairs(ESX.Players) do - if (key == 'job' and v.job.name == val) or v[key] == val then - xPlayers[#xPlayers + 1] = v + if type(val) == "table" then + for k, v in pairs(ESX.Players) do + checkTable(key, val, v) + end + else + for k, v in pairs(ESX.Players) do + if (key == 'job' and v.job.name == val) or v[key] == val then + xPlayers[#xPlayers + 1] = v + end end end + return xPlayers end From f43c81f07e50f0e3659cf2613e1ac770adefa5f7 Mon Sep 17 00:00:00 2001 From: MoskalykA <100430077+MoskalykA@users.noreply.github.com> Date: Tue, 27 Jun 2023 14:43:13 +0200 Subject: [PATCH 40/43] refactor: add forgotten codes --- [core]/es_extended/server/functions.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index a3a34878..4192a51f 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -221,7 +221,7 @@ end ESX.GetPlayers = GetPlayers -local function checkTable(key, val, player) +local function checkTable(key, val, player, xPlayers) for valIndex = 1, #val do local value = val[valIndex] if not xPlayers[value] then @@ -229,7 +229,7 @@ local function checkTable(key, val, player) end if (key == 'job' and player.job.name == value) or player[key] == value then - xPlayers[value][#xPlayers[value] + 1] = v + xPlayers[value][#xPlayers[value] + 1] = player end end end @@ -240,7 +240,7 @@ function ESX.GetExtendedPlayers(key, val) local xPlayers = {} if type(val) == "table" then for k, v in pairs(ESX.Players) do - checkTable(key, val, v) + checkTable(key, val, v, xPlayers) end else for k, v in pairs(ESX.Players) do From ad4227d9745419699681f0fe22490d4906943718 Mon Sep 17 00:00:00 2001 From: MoskalykA <100430077+MoskalykA@users.noreply.github.com> Date: Tue, 27 Jun 2023 14:48:26 +0200 Subject: [PATCH 41/43] refactor: correction of lint errors --- [core]/es_extended/server/functions.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index 4192a51f..6ef5bbff 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -239,11 +239,11 @@ function ESX.GetExtendedPlayers(key, val) local xPlayers = {} if type(val) == "table" then - for k, v in pairs(ESX.Players) do + for _, v in pairs(ESX.Players) do checkTable(key, val, v, xPlayers) end else - for k, v in pairs(ESX.Players) do + for _, v in pairs(ESX.Players) do if (key == 'job' and v.job.name == val) or v[key] == val then xPlayers[#xPlayers + 1] = v end From c4bff589d6fb0d005f05f8b7574923cb7142710f Mon Sep 17 00:00:00 2001 From: MoskalykA <100430077+MoskalykA@users.noreply.github.com> Date: Tue, 27 Jun 2023 15:12:53 +0200 Subject: [PATCH 42/43] refactor(esx_skin): correction of lint errors --- [core]/esx_skin/client/main.lua | 13 +++++-------- [core]/esx_skin/server/main.lua | 4 ++-- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/[core]/esx_skin/client/main.lua b/[core]/esx_skin/client/main.lua index 367e27a6..de5b919f 100644 --- a/[core]/esx_skin/client/main.lua +++ b/[core]/esx_skin/client/main.lua @@ -1,8 +1,8 @@ local lastSkin, cam, isCameraActive -local firstSpawn, zoomOffset, camOffset, heading, skinLoaded = true, 0.0, 0.0, 90.0, false +local firstSpawn, zoomOffset, camOffset, heading = true, 0.0, 0.0, 90.0, false RegisterNetEvent('esx:playerLoaded') -AddEventHandler('esx:playerLoaded', function(xPlayer, isNew, skin) +AddEventHandler('esx:playerLoaded', function(_, _, skin) TriggerServerEvent('esx_skin:setWeight', skin) end) @@ -117,7 +117,7 @@ function OpenMenu(submitCb, cancelCb, restrict) menu.refresh() end - end, function(data, menu) + end, function() DeleteSkinCam() end) end) @@ -248,7 +248,6 @@ end AddEventHandler('esx_skin:resetFirstSpawn', function() firstSpawn = true - skinLoaded = false ESX.PlayerLoaded = false end) @@ -259,15 +258,13 @@ AddEventHandler('esx_skin:playerRegistered', function() end if firstSpawn then - ESX.TriggerServerCallback('esx_skin:getPlayerSkin', function(skin, jobSkin) + ESX.TriggerServerCallback('esx_skin:getPlayerSkin', function(skin) if skin == nil then TriggerEvent('skinchanger:loadSkin', {sex = 0}, OpenSaveableMenu) Wait(100) - skinLoaded = true else TriggerEvent('skinchanger:loadSkin', skin) Wait(100) - skinLoaded = true end end) @@ -277,7 +274,7 @@ AddEventHandler('esx_skin:playerRegistered', function() end) RegisterNetEvent('esx:playerLoaded') -AddEventHandler('esx:playerLoaded', function(xPlayer) +AddEventHandler('esx:playerLoaded', function() ESX.PlayerLoaded = true end) diff --git a/[core]/esx_skin/server/main.lua b/[core]/esx_skin/server/main.lua index 73f47cd0..29d3da28 100644 --- a/[core]/esx_skin/server/main.lua +++ b/[core]/esx_skin/server/main.lua @@ -71,10 +71,10 @@ ESX.RegisterServerCallback('esx_skin:getPlayerSkin', function(source, cb) end) end) -ESX.RegisterCommand('skin', 'admin', function(xPlayer, args, showError) +ESX.RegisterCommand('skin', 'admin', function(xPlayer) xPlayer.triggerEvent('esx_skin:openSaveableMenu') end, false, {help = TranslateCap('skin')}) -ESX.RegisterCommand('skinsave', 'admin', function(xPlayer, args, showError) +ESX.RegisterCommand('skinsave', 'admin', function(xPlayer) xPlayer.triggerEvent('esx_skin:requestSaveSkin') end, false, {help = TranslateCap('saveskin')}) From 6301398c6e4a1f8b8b3a8f0befcba82f5ec0228e Mon Sep 17 00:00:00 2001 From: MoskalykA <100430077+MoskalykA@users.noreply.github.com> Date: Tue, 27 Jun 2023 15:27:58 +0200 Subject: [PATCH 43/43] refactor(esx_multicharacter): correction of lint errors --- [core]/esx_multicharacter/client/main.lua | 10 +++++----- [core]/esx_multicharacter/server/commands.lua | 10 +++++----- [core]/esx_multicharacter/server/main.lua | 4 ++-- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/[core]/esx_multicharacter/client/main.lua b/[core]/esx_multicharacter/client/main.lua index 90677046..4e5c5915 100644 --- a/[core]/esx_multicharacter/client/main.lua +++ b/[core]/esx_multicharacter/client/main.lua @@ -12,7 +12,7 @@ if ESX.GetConfig().Multichar then if NetworkIsPlayerActive(PlayerId()) then exports.spawnmanager:setAutoSpawn(false) DoScreenFadeOut(0) - while not GetResourceState('esx_context') == 'started' do + while GetResourceState('esx_context') ~= 'started' do Wait(100) end TriggerEvent("esx_multicharacter:SetupCharacters") @@ -150,7 +150,7 @@ if ESX.GetConfig().Multichar then {title = TranslateCap('return'), unselectable = false, icon = "fa-solid fa-arrow-left", description = TranslateCap('char_delete_no_description'), action = "return"} } - ESX.OpenContext("left", elements, function(element, Action) + ESX.OpenContext("left", elements, function(_, Action) if Action.action == "delete" then ESX.CloseContext() TriggerServerEvent('esx_multicharacter:DeleteCharacter', Action.value) @@ -170,7 +170,7 @@ if ESX.GetConfig().Multichar then elements[3] = {title = TranslateCap('char_disabled'), value = SelectedCharacter.value, icon ="fa-solid fa-xmark", description = TranslateCap('char_disabled_description'),} end if Config.CanDelete then elements[4] = {title = TranslateCap('char_delete'),icon ="fa-solid fa-xmark",description = TranslateCap('char_delete_description'), action = 'delete', value = SelectedCharacter.value} end - ESX.OpenContext("left", elements, function(element, Action) + ESX.OpenContext("left", elements, function(_, Action) if Action.action == "play" then SendNUIMessage({ action = "closeui" @@ -204,7 +204,7 @@ if ESX.GetConfig().Multichar then elements[#elements+1] = {title = TranslateCap('create_char'), icon = "fa-solid fa-plus", value = (#elements+1), new = true} end - ESX.OpenContext("left", elements, function(menu, SelectedCharacter) + ESX.OpenContext("left", elements, function(_, SelectedCharacter) if SelectedCharacter.new then ESX.CloseContext() local GetSlot = function() @@ -321,7 +321,7 @@ if ESX.GetConfig().Multichar then end) if Config.Relog then - RegisterCommand('relog', function(source, args, rawCommand) + RegisterCommand('relog', function() if canRelog then canRelog = false TriggerServerEvent('esx_multicharacter:relog') diff --git a/[core]/esx_multicharacter/server/commands.lua b/[core]/esx_multicharacter/server/commands.lua index 02dcdb18..ae24109f 100644 --- a/[core]/esx_multicharacter/server/commands.lua +++ b/[core]/esx_multicharacter/server/commands.lua @@ -1,4 +1,4 @@ -ESX.RegisterCommand('setslots', 'admin', function(xPlayer, args, showError) +ESX.RegisterCommand('setslots', 'admin', function(xPlayer, args) local slots = MySQL.scalar('SELECT `slots` FROM `multicharacter_slots` WHERE identifier = ?', { args.identifier }) @@ -21,7 +21,7 @@ end, true, {help = TranslateCap('command_setslots'), validate = true, arguments {name = 'slots', help = TranslateCap('command_slots'), type = 'number'} }}) -ESX.RegisterCommand('remslots', 'admin', function(xPlayer, args, showError) +ESX.RegisterCommand('remslots', 'admin', function(xPlayer, args) local slots = MySQL.scalar('SELECT `slots` FROM `multicharacter_slots` WHERE identifier = ?', { args.identifier }) @@ -36,7 +36,7 @@ end, true, {help = TranslateCap('command_remslots'), validate = true, arguments {name = 'identifier', help = TranslateCap('command_identifier'), type = 'string'} }}) -ESX.RegisterCommand('enablechar', 'admin', function(xPlayer, args, showError) +ESX.RegisterCommand('enablechar', 'admin', function(xPlayer, args) local selectedCharacter = 'char'..args.charslot..':'..args.identifier; @@ -55,7 +55,7 @@ end, true, {help = TranslateCap('command_enablechar'), validate = true, argument {name = 'charslot', help = TranslateCap('command_charslot'), type = 'number'} }}) -ESX.RegisterCommand('disablechar', 'admin', function(xPlayer, args, showError) +ESX.RegisterCommand('disablechar', 'admin', function(xPlayer, args) local selectedCharacter = 'char'..args.charslot..':'..args.identifier; @@ -74,6 +74,6 @@ end, true, {help = TranslateCap('command_disablechar'), validate = true, argumen {name = 'charslot', help = TranslateCap('command_charslot'), type = 'number'} }}) -RegisterCommand('forcelog', function(source, args, rawCommand) +RegisterCommand('forcelog', function(source) TriggerEvent('esx:playerLogout', source) end, true) diff --git a/[core]/esx_multicharacter/server/main.lua b/[core]/esx_multicharacter/server/main.lua index 12ceacc9..e09b48de 100644 --- a/[core]/esx_multicharacter/server/main.lua +++ b/[core]/esx_multicharacter/server/main.lua @@ -96,7 +96,7 @@ end TriggerClientEvent('esx_multicharacter:SetupUI', source, characters, slots) end - AddEventHandler('playerConnecting', function(playerName, setKickReason, deferrals) + AddEventHandler('playerConnecting', function(_, _, deferrals) deferrals.defer() local identifier = GetIdentifier(source) if oneSyncState == "off" or oneSyncState == "legacy" then @@ -234,7 +234,7 @@ end ESX.Players[GetIdentifier(source)] = true end) - AddEventHandler('playerDropped', function(reason) + AddEventHandler('playerDropped', function() awaitingRegistration[source] = nil ESX.Players[GetIdentifier(source)] = nil end)