.
\ No newline at end of file
diff --git a/server-data/resources/[esx]/cron/README.md b/server-data/resources/[esx]/cron/README.md
new file mode 100644
index 000000000..02d60cca3
--- /dev/null
+++ b/server-data/resources/[esx]/cron/README.md
@@ -0,0 +1,38 @@
+cron
+Discord
+
+A simple, but vital, resource that allows resources to Run tasks at specific intervals.
+
+# Example Usage
+
+```lua
+
+-- Execute task 5:10, every day
+function CronTask(d, h, m)
+ print('Task done')
+end
+
+TriggerEvent('cron:runAt', 5, 10, CronTask)
+
+-- Execute task every monday at 18:30
+function CronTask(d, h, m)
+ if d == 1 then
+ print('Task done')
+ end
+end
+
+TriggerEvent('cron:runAt', 18, 30, CronTask)
+
+```
+
+# Legal
+
+cron - run tasks at specific intervals!
+
+Copyright (C) 2015-2024 Jérémie N'gadi
+
+This program Is free software: you can redistribute it And/Or modify it under the terms Of the GNU General Public License As published by the Free Software Foundation, either version 3 Of the License, Or (at your option) any later version.
+
+This program Is distributed In the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty Of MERCHANTABILITY Or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License For more details.
+
+You should have received a copy Of the GNU General Public License along with this program. If Not, see http://www.gnu.org/licenses/.
diff --git a/server-data/resources/[esx]/cron/fxmanifest.lua b/server-data/resources/[esx]/cron/fxmanifest.lua
new file mode 100644
index 000000000..fc4fc3cb8
--- /dev/null
+++ b/server-data/resources/[esx]/cron/fxmanifest.lua
@@ -0,0 +1,9 @@
+fx_version 'adamant'
+
+game 'gta5'
+author 'bitpredator'
+description 'cron'
+lua54 'yes'
+version '1.0.1'
+
+server_script 'server/main.lua'
From 696b6ae608af1d3cb8b0d5eb1560d5d3a78203e4 Mon Sep 17 00:00:00 2001
From: bitpredator <67551273+bitpredator@users.noreply.github.com>
Date: Thu, 29 Feb 2024 12:42:49 +0100
Subject: [PATCH 02/18] Add files via upload
---
.../resources/[esx]/cron/server/main.lua | 50 +++++++++++++++++++
1 file changed, 50 insertions(+)
create mode 100644 server-data/resources/[esx]/cron/server/main.lua
diff --git a/server-data/resources/[esx]/cron/server/main.lua b/server-data/resources/[esx]/cron/server/main.lua
new file mode 100644
index 000000000..ab619f9bc
--- /dev/null
+++ b/server-data/resources/[esx]/cron/server/main.lua
@@ -0,0 +1,50 @@
+local Jobs = {}
+local LastTime = nil
+
+function RunAt(h, m, cb)
+ Jobs[#Jobs + 1] = {
+ h = h,
+ m = m,
+ cb = cb,
+ }
+end
+
+function GetUnixTimestamp()
+ return os.time()
+end
+
+function OnTime(time)
+ for i = 1, #Jobs, 1 do
+ local scheduledTimestamp = os.time({
+ hour = Jobs[i].h,
+ minute = Jobs[i].m,
+ second = 0, -- Assuming tasks run at the start of the minute
+ day = os.date("%d", time),
+ month = os.date("%m", time),
+ year = os.date("%Y", time),
+ })
+
+ if time >= scheduledTimestamp and (not LastTime or LastTime < scheduledTimestamp) then
+ Jobs[i].cb(Jobs[i].h, Jobs[i].m)
+ end
+ end
+end
+
+function Tick()
+ local time = GetUnixTimestamp()
+
+ if not LastTime or os.date("%M", time) ~= os.date("%M", LastTime) then
+ OnTime(time)
+ LastTime = time
+ end
+
+ SetTimeout(60000, Tick)
+end
+
+LastTime = GetUnixTimestamp()
+
+Tick()
+
+AddEventHandler("cron:runAt", function(h, m, cb)
+ RunAt(h, m, cb)
+end)
From a76d175267392801bf856ecc8f125e8b5a3e71c6 Mon Sep 17 00:00:00 2001
From: bitpredator <67551273+bitpredator@users.noreply.github.com>
Date: Thu, 29 Feb 2024 17:59:06 +0100
Subject: [PATCH 03/18] refactor: partial rebuild for es_extended
- updated to version 1.0.1
---
.../resources/[esx]/es_extended/LICENSE | 13 +-
.../[esx]/es_extended/client/common.lua | 11 +-
.../[esx]/es_extended/client/functions.lua | 1250 ++++-----
.../[esx]/es_extended/client/main.lua | 582 ++--
.../es_extended/client/modules/actions.lua | 170 ++
.../es_extended/client/modules/callback.lua | 50 +
.../[esx]/es_extended/client/modules/npwd.lua | 57 +
.../[esx]/es_extended/common/functions.lua | 12 +-
.../[esx]/es_extended/common/modules/math.lua | 4 +-
.../es_extended/common/modules/table.lua | 19 +
.../es_extended/common/modules/timeout.lua | 23 +
.../[esx]/es_extended/config.logs.lua | 23 +
.../resources/[esx]/es_extended/config.lua | 87 +-
.../[esx]/es_extended/config.weapons.lua | 2424 ++++++++++++-----
.../dependencies/cron/server/main.lua | 46 -
.../dependencies/hardcap/client/main.lua | 10 -
.../dependencies/hardcap/server/main.lua | 31 -
.../[esx]/es_extended/es_extended.sql | 10 +-
.../[esx]/es_extended/fxmanifest.lua | 38 +-
.../[esx]/es_extended/html/css/app.css | 75 +
.../es_extended/html/fonts/bankgothic.ttf | Bin 0 -> 36272 bytes
.../[esx]/es_extended/html/fonts/pdown.ttf | Bin 0 -> 151512 bytes
.../[esx]/es_extended/html/js/app.js | 40 +
.../[esx]/es_extended/html/js/mustache.min.js | 347 +++
.../[esx]/es_extended/html/js/wrapper.js | 34 +
.../resources/[esx]/es_extended/html/ui.html | 15 +
.../resources/[esx]/es_extended/locale.js | 4 +-
.../resources/[esx]/es_extended/locale.lua | 25 +-
.../[esx]/es_extended/locales/cs.lua | 549 ++--
.../[esx]/es_extended/locales/de.lua | 535 ++--
.../[esx]/es_extended/locales/el.lua | 381 +++
.../[esx]/es_extended/locales/en.lua | 71 +-
.../[esx]/es_extended/locales/es.lua | 81 +-
.../[esx]/es_extended/locales/fi.lua | 412 +--
.../[esx]/es_extended/locales/fr.lua | 531 ++--
.../[esx]/es_extended/locales/he.lua | 375 +++
.../[esx]/es_extended/locales/hu.lua | 25 +
.../[esx]/es_extended/locales/id.lua | 381 +++
.../[esx]/es_extended/locales/it.lua | 381 +++
.../[esx]/es_extended/locales/nl.lua | 219 +-
.../[esx]/es_extended/locales/pl.lua | 22 +
.../[esx]/es_extended/locales/sl.lua | 377 +++
.../[esx]/es_extended/locales/sr.lua | 377 +++
.../[esx]/es_extended/locales/sv.lua | 284 +-
.../[esx]/es_extended/locales/zh-cn.lua | 377 +++
.../server/classes/overrides/oxinventory.lua | 26 +-
.../es_extended/server/classes/player.lua | 301 +-
.../[esx]/es_extended/server/commands.lua | 392 ++-
.../[esx]/es_extended/server/common.lua | 79 +-
.../[esx]/es_extended/server/functions.lua | 307 ++-
.../[esx]/es_extended/server/main.lua | 490 ++--
.../[esx]/es_extended/server/onesync.lua | 99 +-
.../[esx]/es_extended/server/paycheck.lua | 59 +-
53 files changed, 9223 insertions(+), 3308 deletions(-)
create mode 100644 server-data/resources/[esx]/es_extended/client/modules/actions.lua
create mode 100644 server-data/resources/[esx]/es_extended/client/modules/callback.lua
create mode 100644 server-data/resources/[esx]/es_extended/client/modules/npwd.lua
create mode 100644 server-data/resources/[esx]/es_extended/common/modules/timeout.lua
create mode 100644 server-data/resources/[esx]/es_extended/config.logs.lua
delete mode 100644 server-data/resources/[esx]/es_extended/dependencies/cron/server/main.lua
delete mode 100644 server-data/resources/[esx]/es_extended/dependencies/hardcap/client/main.lua
delete mode 100644 server-data/resources/[esx]/es_extended/dependencies/hardcap/server/main.lua
create mode 100644 server-data/resources/[esx]/es_extended/html/css/app.css
create mode 100644 server-data/resources/[esx]/es_extended/html/fonts/bankgothic.ttf
create mode 100644 server-data/resources/[esx]/es_extended/html/fonts/pdown.ttf
create mode 100644 server-data/resources/[esx]/es_extended/html/js/app.js
create mode 100644 server-data/resources/[esx]/es_extended/html/js/mustache.min.js
create mode 100644 server-data/resources/[esx]/es_extended/html/js/wrapper.js
create mode 100644 server-data/resources/[esx]/es_extended/html/ui.html
create mode 100644 server-data/resources/[esx]/es_extended/locales/el.lua
create mode 100644 server-data/resources/[esx]/es_extended/locales/he.lua
create mode 100644 server-data/resources/[esx]/es_extended/locales/id.lua
create mode 100644 server-data/resources/[esx]/es_extended/locales/it.lua
create mode 100644 server-data/resources/[esx]/es_extended/locales/sl.lua
create mode 100644 server-data/resources/[esx]/es_extended/locales/sr.lua
create mode 100644 server-data/resources/[esx]/es_extended/locales/zh-cn.lua
diff --git a/server-data/resources/[esx]/es_extended/LICENSE b/server-data/resources/[esx]/es_extended/LICENSE
index 7c1b638e7..f26a06604 100644
--- a/server-data/resources/[esx]/es_extended/LICENSE
+++ b/server-data/resources/[esx]/es_extended/LICENSE
@@ -1,7 +1,7 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
- Copyright (C) 2007 Free Software Foundation, Inc.
+ Copyright (C) 2007 Free Software Foundation, Inc.
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
@@ -631,8 +631,7 @@ to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
-
- Copyright (C) 2022-2024 bitpredator
+ es_extended Copyright (C) 2022-2024 bitpredator
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -645,14 +644,14 @@ the "copyright" line and a pointer to where the full notice is found.
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program. If not, see .
+ along with this program. If not, see .
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
- Copyright (C) 2022-2024 bitpredator
+ es_extended Copyright (C) 2022-2024 bitpredator
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
@@ -664,11 +663,11 @@ might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
-.
+.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
-.
+.
\ No newline at end of file
diff --git a/server-data/resources/[esx]/es_extended/client/common.lua b/server-data/resources/[esx]/es_extended/client/common.lua
index d6c65ca3a..11225fd22 100644
--- a/server-data/resources/[esx]/es_extended/client/common.lua
+++ b/server-data/resources/[esx]/es_extended/client/common.lua
@@ -2,14 +2,11 @@ exports("getSharedObject", function()
return ESX
end)
-if GetResourceState("ox_inventory") ~= "missing" then
- Config.OxInventory = true
-end
-
-RegisterNetEvent("esx:getSharedObject", function()
+AddEventHandler("esx:getSharedObject", function()
+ local Invoke = GetInvokingResource()
print(
- ("[^1ERROR^7] Resource ^5%s^7 Used the ^5getSharedObject^7 Event, this event ^1no longer exists!^7 Visit https://bitpredator.github.io/bptdevelopment/docs/esx-tutorial/sharedevent for how to fix!"):format(
- GetInvokingResource
+ ("[^1ERROR^7] Resource ^5%s^7 Used the ^5getSharedObject^7 Event, this event ^1no longer exists!^7 Visit https://documentation.esx-framework.org/tutorials/tutorials-esx/sharedevent for how to fix!"):format(
+ Invoke
)
)
end)
diff --git a/server-data/resources/[esx]/es_extended/client/functions.lua b/server-data/resources/[esx]/es_extended/client/functions.lua
index 456a35abc..bdd1f6049 100644
--- a/server-data/resources/[esx]/es_extended/client/functions.lua
+++ b/server-data/resources/[esx]/es_extended/client/functions.lua
@@ -2,9 +2,6 @@ ESX = {}
Core = {}
ESX.PlayerData = {}
ESX.PlayerLoaded = false
-Core.CurrentRequestId = 0
-Core.ServerCallbacks = {}
-Core.TimeoutCallbacks = {}
Core.Input = {}
ESX.UI = {}
ESX.UI.Menu = {}
@@ -19,18 +16,6 @@ ESX.Scaleform.Utils = {}
ESX.Streaming = {}
-function ESX.SetTimeout(msec, cb)
- table.insert(Core.TimeoutCallbacks, {
- time = GetGameTimer() + msec,
- cb = cb,
- })
- return #Core.TimeoutCallbacks
-end
-
-function ESX.ClearTimeout(i)
- Core.TimeoutCallbacks[i] = nil
-end
-
function ESX.IsPlayerLoaded()
return ESX.PlayerLoaded
end
@@ -40,31 +25,18 @@ function ESX.GetPlayerData()
end
function ESX.SearchInventory(items, count)
- if type(items) == "string" then
- items = { items }
- end
-
- local returnData = {}
- local itemCount = #items
+ items = type(items) == "string" and { items } or items
- for i = 1, itemCount do
- local itemName = items[i]
- returnData[itemName] = count and 0
-
- for _, item in pairs(ESX.PlayerData.inventory) do
- if item.name == itemName then
- if count then
- returnData[itemName] = returnData[itemName] + item.count
- else
- returnData[itemName] = item
- end
+ local data = {}
+ for i = 1, #items do
+ for c = 1, #ESX.PlayerData.inventory do
+ if ESX.PlayerData.inventory[c].name == items[i] then
+ data[items[i]] = (count and ESX.PlayerData.inventory[c].count) or ESX.PlayerData.inventory[c]
end
end
end
- if next(returnData) then
- return itemCount == 1 and returnData[items[1]] or returnData
- end
+ return #items == 1 and data[items[1]] or data
end
function ESX.SetPlayerData(key, val)
@@ -78,33 +50,35 @@ function ESX.SetPlayerData(key, val)
end
function ESX.Progressbar(message, length, Options)
- exports["esx_progressbar"]:Progressbar(message, length, Options)
+ if GetResourceState("esx_progressbar") ~= "missing" then
+ return exports["esx_progressbar"]:Progressbar(message, length, Options)
+ end
+
+ print("[^1ERROR^7] ^5ESX Progressbar^7 is Missing!")
end
-function ESX.ShowNotification(message, type, length)
+function ESX.ShowNotification(message, notifyType, length)
if GetResourceState("esx_notify") ~= "missing" then
- exports["esx_notify"]:Notify(type, length, message)
- else
- print("[^1ERROR^7] ^5BPT Notify^7 is Missing!")
+ return exports["esx_notify"]:Notify(notifyType, length, message)
end
+
+ print("[^1ERROR^7] ^5ESX Notify^7 is Missing!")
end
-function ESX.TextUI(message, type)
+function ESX.TextUI(message, notifyType)
if GetResourceState("esx_textui") ~= "missing" then
- exports["esx_textui"]:TextUI(message, type)
- else
- print("[^1ERROR^7] ^5BPT TextUI^7 is Missing!")
- return
+ return exports["esx_textui"]:TextUI(message, notifyType)
end
+
+ print("[^1ERROR^7] ^5ESX TextUI^7 is Missing!")
end
function ESX.HideUI()
if GetResourceState("esx_textui") ~= "missing" then
- exports["esx_textui"]:HideUI()
- else
- print("[^1ERROR^7] ^5BPT TextUI^7 is Missing!")
- return
+ return exports["esx_textui"]:HideUI()
end
+
+ print("[^1ERROR^7] ^5ESX TextUI^7 is Missing!")
end
function ESX.ShowAdvancedNotification(sender, subject, msg, textureDict, iconType, flash, saveToBrief, hudColorIndex)
@@ -153,38 +127,30 @@ ESX.HashString = function(str)
return input_map
end
-if GetResourceState("esx_context") ~= "missing" then
- function ESX.OpenContext(...)
- exports["esx_context"]:Open(...)
- end
+local contextAvailable = GetResourceState("esx_context") ~= "missing"
- function ESX.PreviewContext(...)
- exports["esx_context"]:Preview(...)
- end
-
- function ESX.CloseContext(...)
- exports["esx_context"]:Close(...)
- end
-
- function ESX.RefreshContext(...)
- exports["esx_context"]:Refresh(...)
- end
-else
- function ESX.OpenContext()
- print("[^1ERROR^7] Tried to ^5open^7 context menu, but ^5esx_context^7 is missing!")
- end
+function ESX.OpenContext(...)
+ return contextAvailable and exports["esx_context"]:Open(...)
+ or not contextAvailable
+ and print("[^1ERROR^7] Tried to ^5open^7 context menu, but ^5esx_context^7 is missing!")
+end
- function ESX.PreviewContext()
- print("[^1ERROR^7] Tried to ^5preview^7 context menu, but ^5esx_context^7 is missing!")
- end
+function ESX.PreviewContext(...)
+ return contextAvailable and exports["esx_context"]:Preview(...)
+ or not contextAvailable
+ and print("[^1ERROR^7] Tried to ^5preview^7 context menu, but ^5esx_context^7 is missing!")
+end
- function ESX.CloseContext()
- print("[^1ERROR^7] Tried to ^5close^7 context menu, but ^5esx_context^7 is missing!")
- end
+function ESX.CloseContext(...)
+ return contextAvailable and exports["esx_context"]:Close(...)
+ or not contextAvailable
+ and print("[^1ERROR^7] Tried to ^5close^7 context menu, but ^5esx_context^7 is missing!")
+end
- function ESX.RefreshContext()
- print("[^1ERROR^7] Tried to ^5Refresh^7 context menu, but ^5esx_context^7 is missing!")
- end
+function ESX.RefreshContext(...)
+ return contextAvailable and exports["esx_context"]:Refresh(...)
+ or not contextAvailable
+ and print("[^1ERROR^7] Tried to ^5Refresh^7 context menu, but ^5esx_context^7 is missing!")
end
ESX.RegisterInput = function(command_name, label, input_group, key, on_press, on_release)
@@ -196,26 +162,19 @@ ESX.RegisterInput = function(command_name, label, input_group, key, on_press, on
RegisterKeyMapping(on_release ~= nil and "+" .. command_name or command_name, label, input_group, key)
end
-function ESX.TriggerServerCallback(name, cb, ...)
- local Invoke = GetInvokingResource() or "unknown"
- Core.ServerCallbacks[Core.CurrentRequestId] = cb
-
- TriggerServerEvent("esx:triggerServerCallback", name, Core.CurrentRequestId, Invoke, ...)
- Core.CurrentRequestId = Core.CurrentRequestId < 65535 and Core.CurrentRequestId + 1 or 0
-end
-
-function ESX.UI.Menu.RegisterType(type, open, close)
- ESX.UI.Menu.RegisteredTypes[type] = {
+function ESX.UI.Menu.RegisterType(menuType, open, close)
+ ESX.UI.Menu.RegisteredTypes[menuType] = {
open = open,
close = close,
}
end
-function ESX.UI.Menu.Open(type, namespace, name, data, submit, cancel, change, close)
+function ESX.UI.Menu.Open(menuType, namespace, name, data, submit, cancel, change, close)
local menu = {}
- menu.type = type
+ menu.type = menuType
menu.namespace = namespace
+ menu.resourceName = (GetInvokingResource() or "Unknown")
menu.name = name
menu.data = data
menu.submit = submit
@@ -223,12 +182,12 @@ function ESX.UI.Menu.Open(type, namespace, name, data, submit, cancel, change, c
menu.change = change
menu.close = function()
- ESX.UI.Menu.RegisteredTypes[type].close(namespace, name)
+ ESX.UI.Menu.RegisteredTypes[menuType].close(namespace, name)
for i = 1, #ESX.UI.Menu.Opened, 1 do
if ESX.UI.Menu.Opened[i] then
if
- ESX.UI.Menu.Opened[i].type == type
+ ESX.UI.Menu.Opened[i].type == menuType
and ESX.UI.Menu.Opened[i].namespace == namespace
and ESX.UI.Menu.Opened[i].name == name
then
@@ -261,7 +220,7 @@ function ESX.UI.Menu.Open(type, namespace, name, data, submit, cancel, change, c
end
menu.refresh = function()
- ESX.UI.Menu.RegisteredTypes[type].open(namespace, name, menu.data)
+ ESX.UI.Menu.RegisteredTypes[menuType].open(namespace, name, menu.data)
end
menu.setElement = function(i, key, val)
@@ -290,16 +249,16 @@ function ESX.UI.Menu.Open(type, namespace, name, data, submit, cancel, change, c
end
ESX.UI.Menu.Opened[#ESX.UI.Menu.Opened + 1] = menu
- ESX.UI.Menu.RegisteredTypes[type].open(namespace, name, data)
+ ESX.UI.Menu.RegisteredTypes[menuType].open(namespace, name, data)
return menu
end
-function ESX.UI.Menu.Close(type, namespace, name)
+function ESX.UI.Menu.Close(menuType, namespace, name)
for i = 1, #ESX.UI.Menu.Opened, 1 do
if ESX.UI.Menu.Opened[i] then
if
- ESX.UI.Menu.Opened[i].type == type
+ ESX.UI.Menu.Opened[i].type == menuType
and ESX.UI.Menu.Opened[i].namespace == namespace
and ESX.UI.Menu.Opened[i].name == name
then
@@ -319,11 +278,11 @@ function ESX.UI.Menu.CloseAll()
end
end
-function ESX.UI.Menu.GetOpened(type, namespace, name)
+function ESX.UI.Menu.GetOpened(menuType, namespace, name)
for i = 1, #ESX.UI.Menu.Opened, 1 do
if ESX.UI.Menu.Opened[i] then
if
- ESX.UI.Menu.Opened[i].type == type
+ ESX.UI.Menu.Opened[i].type == menuType
and ESX.UI.Menu.Opened[i].namespace == namespace
and ESX.UI.Menu.Opened[i].name == name
then
@@ -337,8 +296,8 @@ function ESX.UI.Menu.GetOpenedMenus()
return ESX.UI.Menu.Opened
end
-function ESX.UI.Menu.IsOpen(type, namespace, name)
- return ESX.UI.Menu.GetOpened(type, namespace, name) ~= nil
+function ESX.UI.Menu.IsOpen(menuType, namespace, name)
+ return ESX.UI.Menu.GetOpened(menuType, namespace, name) ~= nil
end
function ESX.UI.ShowInventoryItemNotification(add, item, count)
@@ -385,34 +344,17 @@ end
function ESX.Game.SpawnObject(object, coords, cb, networked)
networked = networked == nil and true or networked
- if networked then
- ESX.TriggerServerCallback("esx:Onesync:SpawnObject", function(NetworkID)
- if cb then
- local obj = NetworkGetEntityFromNetworkId(NetworkID)
- local Tries = 0
- while not DoesEntityExist(obj) do
- obj = NetworkGetEntityFromNetworkId(NetworkID)
- Wait(0)
- Tries = Tries + 1
- if Tries > 250 then
- break
- end
- end
- cb(obj)
- end
- end, object, coords, 0.0)
- else
- local model = type(object) == "number" and object or joaat(object)
- local vector = type(coords) == "vector3" and coords or vec(coords.x, coords.y, coords.z)
- CreateThread(function()
- ESX.Streaming.RequestModel(model)
-
- local obj = CreateObject(model, vector.xyz, networked, false, true)
- if cb then
- cb(obj)
- end
- end)
- end
+
+ local model = type(object) == "number" and object or joaat(object)
+ local vector = type(coords) == "vector3" and coords or vec(coords.x, coords.y, coords.z)
+ CreateThread(function()
+ ESX.Streaming.RequestModel(model)
+
+ local obj = CreateObject(model, vector.xyz, networked, false, true)
+ if cb then
+ cb(obj)
+ end
+ end)
end
function ESX.Game.SpawnLocalObject(object, coords, cb)
@@ -429,13 +371,12 @@ function ESX.Game.DeleteObject(object)
DeleteObject(object)
end
-function ESX.Game.SpawnVehicle(vehicle, coords, heading, cb, networked)
- local model = type(vehicle) == "number" and vehicle or joaat(vehicle)
+function ESX.Game.SpawnVehicle(vehicleModel, coords, heading, cb, networked)
+ local model = type(vehicleModel) == "number" and vehicleModel or joaat(vehicleModel)
local vector = type(coords) == "vector3" and coords or vec(coords.x, coords.y, coords.z)
networked = networked == nil and true or networked
local playerCoords = GetEntityCoords(ESX.PlayerData.ped)
-
if not vector or not playerCoords then
return
end
@@ -453,25 +394,25 @@ function ESX.Game.SpawnVehicle(vehicle, coords, heading, cb, networked)
CreateThread(function()
ESX.Streaming.RequestModel(model)
- local vehicleEntity = CreateVehicle(model, vector.x, vector.y, vector.z, heading, networked, true)
+ local vehicle = CreateVehicle(model, vector.xyz, heading, networked, true)
if networked then
- local id = NetworkGetNetworkIdFromEntity(vehicleEntity)
+ local id = NetworkGetNetworkIdFromEntity(vehicle)
SetNetworkIdCanMigrate(id, true)
- SetEntityAsMissionEntity(vehicleEntity, true, true)
+ SetEntityAsMissionEntity(vehicle, true, true)
end
- SetVehicleHasBeenOwnedByPlayer(vehicleEntity, true)
- SetVehicleNeedsToBeHotwired(vehicleEntity, false)
+ SetVehicleHasBeenOwnedByPlayer(vehicle, true)
+ SetVehicleNeedsToBeHotwired(vehicle, false)
SetModelAsNoLongerNeeded(model)
- SetVehRadioStation(vehicleEntity, "OFF")
+ SetVehRadioStation(vehicle, "OFF")
- RequestCollisionAtCoord(vector.x, vector.y, vector.z)
- while not HasCollisionLoadedAroundEntity(vehicleEntity) do
+ RequestCollisionAtCoord(vector.xyz)
+ while not HasCollisionLoadedAroundEntity(vehicle) do
Wait(0)
end
if cb then
- cb(vehicleEntity)
+ cb(vehicle)
end
end)
end
@@ -492,20 +433,19 @@ function ESX.Game.GetObjects() -- Leave the function for compatibility
end
function ESX.Game.GetPeds(onlyOtherPeds)
- local myPed, pool = ESX.PlayerData.ped, GetGamePool("CPed")
- if not onlyOtherPeds then
- return pool
- end
-
- local peds = {}
-
- for i = 1, #pool do
- if pool[i] ~= myPed then
- peds[#peds + 1] = pool[i]
+ local pool = GetGamePool("CPed")
+
+ if onlyOtherPeds then
+ local myPed = ESX.PlayerData.ped
+ for i = 1, #pool do
+ if pool[i] == myPed then
+ table.remove(pool, i)
+ break
+ end
end
end
- return peds
+ return pool
end
function ESX.Game.GetVehicles() -- Leave the function for compatibility
@@ -514,15 +454,17 @@ end
function ESX.Game.GetPlayers(onlyOtherPlayers, returnKeyValue, returnPeds)
local players, myPlayer = {}, PlayerId()
+ local active = GetActivePlayers()
- for _, player in ipairs(GetActivePlayers()) do
- local ped = GetPlayerPed(player)
+ for i = 1, #active do
+ local currentPlayer = active[i]
+ local ped = GetPlayerPed(currentPlayer)
- if DoesEntityExist(ped) and ((onlyOtherPlayers and player ~= myPlayer) or not onlyOtherPlayers) then
+ if DoesEntityExist(ped) and ((onlyOtherPlayers and currentPlayer ~= myPlayer) or not onlyOtherPlayers) then
if returnKeyValue then
- players[player] = ped
+ players[currentPlayer] = ped
else
- players[#players + 1] = returnPeds and ped or player
+ players[#players + 1] = returnPeds and ped or currentPlayer
end
end
end
@@ -626,425 +568,436 @@ function ESX.Game.GetVehicleInDirection()
end
function ESX.Game.GetVehicleProperties(vehicle)
- if DoesEntityExist(vehicle) then
- local colorPrimary, colorSecondary = GetVehicleColours(vehicle)
- local pearlescentColor, wheelColor = GetVehicleExtraColours(vehicle)
- local hasCustomPrimaryColor = GetIsVehiclePrimaryColourCustom(vehicle)
- local customPrimaryColor = nil
- if hasCustomPrimaryColor then
- local r, g, b = GetVehicleCustomPrimaryColour(vehicle)
- customPrimaryColor = { r, g, b }
- end
+ if not DoesEntityExist(vehicle) then
+ return
+ end
- local customXenonColorR, customXenonColorG, customXenonColorB = GetVehicleXenonLightsCustomColor(vehicle)
- local customXenonColor = nil
- if customXenonColorR and customXenonColorG and customXenonColorB then
- customXenonColor = { customXenonColorR, customXenonColorG, customXenonColorB }
- end
+ local colorPrimary, colorSecondary = GetVehicleColours(vehicle)
+ local pearlescentColor, wheelColor = GetVehicleExtraColours(vehicle)
+ local hasCustomPrimaryColor = GetIsVehiclePrimaryColourCustom(vehicle)
+ local dashboardColor = GetVehicleDashboardColor(vehicle)
+ local interiorColor = GetVehicleInteriorColour(vehicle)
+ local customPrimaryColor = nil
+ if hasCustomPrimaryColor then
+ customPrimaryColor = { GetVehicleCustomPrimaryColour(vehicle) }
+ end
- local hasCustomSecondaryColor = GetIsVehicleSecondaryColourCustom(vehicle)
- local customSecondaryColor = nil
- if hasCustomSecondaryColor then
- local r, g, b = GetVehicleCustomSecondaryColour(vehicle)
- customSecondaryColor = { r, g, b }
- end
- local extras = {}
+ local hasCustomXenonColor, customXenonColorR, customXenonColorG, customXenonColorB =
+ GetVehicleXenonLightsCustomColor(vehicle)
+ local customXenonColor = nil
+ if hasCustomXenonColor then
+ customXenonColor = { customXenonColorR, customXenonColorG, customXenonColorB }
+ end
- for extraId = 0, 12 do
- if DoesExtraExist(vehicle, extraId) then
- local state = IsVehicleExtraTurnedOn(vehicle, extraId)
- extras[tostring(extraId)] = state
- end
+ local hasCustomSecondaryColor = GetIsVehicleSecondaryColourCustom(vehicle)
+ local customSecondaryColor = nil
+ if hasCustomSecondaryColor then
+ customSecondaryColor = { GetVehicleCustomSecondaryColour(vehicle) }
+ end
+
+ local extras = {}
+ for extraId = 0, 20 do
+ if DoesExtraExist(vehicle, extraId) then
+ extras[tostring(extraId)] = IsVehicleExtraTurnedOn(vehicle, extraId)
end
+ end
- local doorsBroken, windowsBroken, tyreBurst = {}, {}, {}
- local numWheels = tostring(GetVehicleNumberOfWheels(vehicle))
+ local doorsBroken, windowsBroken, tyreBurst = {}, {}, {}
+ local numWheels = tostring(GetVehicleNumberOfWheels(vehicle))
- local TyresIndex = { -- Wheel index list according to the number of vehicle wheels.
- ["2"] = { 0, 4 }, -- Bike and cycle.
- ["3"] = { 0, 1, 4, 5 }, -- Vehicle with 3 wheels (get for wheels because some 3 wheels vehicles have 2 wheels on front and one rear or the reverse).
- ["4"] = { 0, 1, 4, 5 }, -- Vehicle with 4 wheels.
- ["6"] = { 0, 1, 2, 3, 4, 5 }, -- Vehicle with 6 wheels.
- }
+ local TyresIndex = { -- Wheel index list according to the number of vehicle wheels.
+ ["2"] = { 0, 4 }, -- Bike and cycle.
+ ["3"] = { 0, 1, 4, 5 }, -- Vehicle with 3 wheels (get for wheels because some 3 wheels vehicles have 2 wheels on front and one rear or the reverse).
+ ["4"] = { 0, 1, 4, 5 }, -- Vehicle with 4 wheels.
+ ["6"] = { 0, 1, 2, 3, 4, 5 }, -- Vehicle with 6 wheels.
+ }
- if TyresIndex[numWheels] then
- for _, idx in pairs(TyresIndex[numWheels]) do
- if IsVehicleTyreBurst(vehicle, idx, false) then
- tyreBurst[tostring(idx)] = true
- else
- tyreBurst[tostring(idx)] = false
- end
- end
+ if TyresIndex[numWheels] then
+ for _, idx in pairs(TyresIndex[numWheels]) do
+ tyreBurst[tostring(idx)] = IsVehicleTyreBurst(vehicle, idx, false)
end
+ end
- for windowId = 0, 7 do -- 13
- if not IsVehicleWindowIntact(vehicle, windowId) then
- windowsBroken[tostring(windowId)] = true
- else
- windowsBroken[tostring(windowId)] = false
- end
- end
+ for windowId = 0, 7 do -- 13
+ RollUpWindow(vehicle, windowId) --fix when you put the car away with the window down
+ windowsBroken[tostring(windowId)] = not IsVehicleWindowIntact(vehicle, windowId)
+ end
- local numDoors = GetNumberOfVehicleDoors(vehicle)
- if numDoors and numDoors > 0 then
- for doorsId = 0, numDoors do
- if IsVehicleDoorDamaged(vehicle, doorsId) then
- doorsBroken[tostring(doorsId)] = true
- else
- doorsBroken[tostring(doorsId)] = false
- end
- end
+ local numDoors = GetNumberOfVehicleDoors(vehicle)
+ if numDoors and numDoors > 0 then
+ for doorsId = 0, numDoors do
+ doorsBroken[tostring(doorsId)] = IsVehicleDoorDamaged(vehicle, doorsId)
end
-
- return {
- model = GetEntityModel(vehicle),
- doorsBroken = doorsBroken,
- windowsBroken = windowsBroken,
- tyreBurst = tyreBurst,
- plate = ESX.Math.Trim(GetVehicleNumberPlateText(vehicle)),
- plateIndex = GetVehicleNumberPlateTextIndex(vehicle),
-
- bodyHealth = ESX.Math.Round(GetVehicleBodyHealth(vehicle), 1),
- engineHealth = ESX.Math.Round(GetVehicleEngineHealth(vehicle), 1),
- tankHealth = ESX.Math.Round(GetVehiclePetrolTankHealth(vehicle), 1),
-
- fuelLevel = ESX.Math.Round(GetVehicleFuelLevel(vehicle), 1),
- dirtLevel = ESX.Math.Round(GetVehicleDirtLevel(vehicle), 1),
- color1 = colorPrimary,
- color2 = colorSecondary,
- customPrimaryColor = customPrimaryColor,
- customSecondaryColor = customSecondaryColor,
-
- pearlescentColor = pearlescentColor,
- wheelColor = wheelColor,
-
- wheels = GetVehicleWheelType(vehicle),
- windowTint = GetVehicleWindowTint(vehicle),
- xenonColor = GetVehicleXenonLightsColor(vehicle),
- customXenonColor = customXenonColor,
-
- neonEnabled = {
- IsVehicleNeonLightEnabled(vehicle, 0),
- IsVehicleNeonLightEnabled(vehicle, 1),
- IsVehicleNeonLightEnabled(vehicle, 2),
- IsVehicleNeonLightEnabled(vehicle, 3),
- },
-
- neonColor = table.pack(GetVehicleNeonLightsColour(vehicle)),
- extras = extras,
- tyreSmokeColor = table.pack(GetVehicleTyreSmokeColor(vehicle)),
-
- modSpoilers = GetVehicleMod(vehicle, 0),
- modFrontBumper = GetVehicleMod(vehicle, 1),
- modRearBumper = GetVehicleMod(vehicle, 2),
- modSideSkirt = GetVehicleMod(vehicle, 3),
- modExhaust = GetVehicleMod(vehicle, 4),
- modFrame = GetVehicleMod(vehicle, 5),
- modGrille = GetVehicleMod(vehicle, 6),
- modHood = GetVehicleMod(vehicle, 7),
- modFender = GetVehicleMod(vehicle, 8),
- modRightFender = GetVehicleMod(vehicle, 9),
- modRoof = GetVehicleMod(vehicle, 10),
-
- modEngine = GetVehicleMod(vehicle, 11),
- modBrakes = GetVehicleMod(vehicle, 12),
- modTransmission = GetVehicleMod(vehicle, 13),
- modHorns = GetVehicleMod(vehicle, 14),
- modSuspension = GetVehicleMod(vehicle, 15),
- modArmor = GetVehicleMod(vehicle, 16),
-
- modTurbo = IsToggleModOn(vehicle, 18),
- modSmokeEnabled = IsToggleModOn(vehicle, 20),
- modXenon = IsToggleModOn(vehicle, 22),
-
- modFrontWheels = GetVehicleMod(vehicle, 23),
- modBackWheels = GetVehicleMod(vehicle, 24),
-
- modPlateHolder = GetVehicleMod(vehicle, 25),
- modVanityPlate = GetVehicleMod(vehicle, 26),
- modTrimA = GetVehicleMod(vehicle, 27),
- modOrnaments = GetVehicleMod(vehicle, 28),
- modDashboard = GetVehicleMod(vehicle, 29),
- modDial = GetVehicleMod(vehicle, 30),
- modDoorSpeaker = GetVehicleMod(vehicle, 31),
- modSeats = GetVehicleMod(vehicle, 32),
- modSteeringWheel = GetVehicleMod(vehicle, 33),
- modShifterLeavers = GetVehicleMod(vehicle, 34),
- modAPlate = GetVehicleMod(vehicle, 35),
- modSpeakers = GetVehicleMod(vehicle, 36),
- modTrunk = GetVehicleMod(vehicle, 37),
- modHydrolic = GetVehicleMod(vehicle, 38),
- modEngineBlock = GetVehicleMod(vehicle, 39),
- modAirFilter = GetVehicleMod(vehicle, 40),
- modStruts = GetVehicleMod(vehicle, 41),
- modArchCover = GetVehicleMod(vehicle, 42),
- modAerials = GetVehicleMod(vehicle, 43),
- modTrimB = GetVehicleMod(vehicle, 44),
- modTank = GetVehicleMod(vehicle, 45),
- modDoorR = GetVehicleMod(vehicle, 47),
- modLivery = GetVehicleMod(vehicle, 48) == -1 and GetVehicleLivery(vehicle) or GetVehicleMod(vehicle, 48),
- modLightbar = GetVehicleMod(vehicle, 49),
- }
- else
- return
end
+
+ return {
+ model = GetEntityModel(vehicle),
+ doorsBroken = doorsBroken,
+ windowsBroken = windowsBroken,
+ tyreBurst = tyreBurst,
+ tyresCanBurst = GetVehicleTyresCanBurst(vehicle),
+ plate = ESX.Math.Trim(GetVehicleNumberPlateText(vehicle)),
+ plateIndex = GetVehicleNumberPlateTextIndex(vehicle),
+
+ bodyHealth = ESX.Math.Round(GetVehicleBodyHealth(vehicle), 1),
+ engineHealth = ESX.Math.Round(GetVehicleEngineHealth(vehicle), 1),
+ tankHealth = ESX.Math.Round(GetVehiclePetrolTankHealth(vehicle), 1),
+
+ fuelLevel = ESX.Math.Round(GetVehicleFuelLevel(vehicle), 1),
+ dirtLevel = ESX.Math.Round(GetVehicleDirtLevel(vehicle), 1),
+ color1 = colorPrimary,
+ color2 = colorSecondary,
+ customPrimaryColor = customPrimaryColor,
+ customSecondaryColor = customSecondaryColor,
+
+ pearlescentColor = pearlescentColor,
+ wheelColor = wheelColor,
+
+ dashboardColor = dashboardColor,
+ interiorColor = interiorColor,
+
+ wheels = GetVehicleWheelType(vehicle),
+ windowTint = GetVehicleWindowTint(vehicle),
+ xenonColor = GetVehicleXenonLightsColor(vehicle),
+ customXenonColor = customXenonColor,
+
+ neonEnabled = {
+ IsVehicleNeonLightEnabled(vehicle, 0),
+ IsVehicleNeonLightEnabled(vehicle, 1),
+ IsVehicleNeonLightEnabled(vehicle, 2),
+ IsVehicleNeonLightEnabled(vehicle, 3),
+ },
+
+ neonColor = table.pack(GetVehicleNeonLightsColour(vehicle)),
+ extras = extras,
+ tyreSmokeColor = table.pack(GetVehicleTyreSmokeColor(vehicle)),
+
+ modSpoilers = GetVehicleMod(vehicle, 0),
+ modFrontBumper = GetVehicleMod(vehicle, 1),
+ modRearBumper = GetVehicleMod(vehicle, 2),
+ modSideSkirt = GetVehicleMod(vehicle, 3),
+ modExhaust = GetVehicleMod(vehicle, 4),
+ modFrame = GetVehicleMod(vehicle, 5),
+ modGrille = GetVehicleMod(vehicle, 6),
+ modHood = GetVehicleMod(vehicle, 7),
+ modFender = GetVehicleMod(vehicle, 8),
+ modRightFender = GetVehicleMod(vehicle, 9),
+ modRoof = GetVehicleMod(vehicle, 10),
+ modRoofLivery = GetVehicleRoofLivery(vehicle),
+
+ modEngine = GetVehicleMod(vehicle, 11),
+ modBrakes = GetVehicleMod(vehicle, 12),
+ modTransmission = GetVehicleMod(vehicle, 13),
+ modHorns = GetVehicleMod(vehicle, 14),
+ modSuspension = GetVehicleMod(vehicle, 15),
+ modArmor = GetVehicleMod(vehicle, 16),
+
+ modTurbo = IsToggleModOn(vehicle, 18),
+ modSmokeEnabled = IsToggleModOn(vehicle, 20),
+ modXenon = IsToggleModOn(vehicle, 22),
+
+ modFrontWheels = GetVehicleMod(vehicle, 23),
+ modCustomFrontWheels = GetVehicleModVariation(vehicle, 23),
+ modBackWheels = GetVehicleMod(vehicle, 24),
+ modCustomBackWheels = GetVehicleModVariation(vehicle, 24),
+
+ modPlateHolder = GetVehicleMod(vehicle, 25),
+ modVanityPlate = GetVehicleMod(vehicle, 26),
+ modTrimA = GetVehicleMod(vehicle, 27),
+ modOrnaments = GetVehicleMod(vehicle, 28),
+ modDashboard = GetVehicleMod(vehicle, 29),
+ modDial = GetVehicleMod(vehicle, 30),
+ modDoorSpeaker = GetVehicleMod(vehicle, 31),
+ modSeats = GetVehicleMod(vehicle, 32),
+ modSteeringWheel = GetVehicleMod(vehicle, 33),
+ modShifterLeavers = GetVehicleMod(vehicle, 34),
+ modAPlate = GetVehicleMod(vehicle, 35),
+ modSpeakers = GetVehicleMod(vehicle, 36),
+ modTrunk = GetVehicleMod(vehicle, 37),
+ modHydrolic = GetVehicleMod(vehicle, 38),
+ modEngineBlock = GetVehicleMod(vehicle, 39),
+ modAirFilter = GetVehicleMod(vehicle, 40),
+ modStruts = GetVehicleMod(vehicle, 41),
+ modArchCover = GetVehicleMod(vehicle, 42),
+ modAerials = GetVehicleMod(vehicle, 43),
+ modTrimB = GetVehicleMod(vehicle, 44),
+ modTank = GetVehicleMod(vehicle, 45),
+ modWindows = GetVehicleMod(vehicle, 46),
+ modLivery = GetVehicleMod(vehicle, 48) == -1 and GetVehicleLivery(vehicle) or GetVehicleMod(vehicle, 48),
+ modLightbar = GetVehicleMod(vehicle, 49),
+ }
end
function ESX.Game.SetVehicleProperties(vehicle, props)
- if DoesEntityExist(vehicle) then
- local colorPrimary, colorSecondary = GetVehicleColours(vehicle)
- local pearlescentColor, wheelColor = GetVehicleExtraColours(vehicle)
- SetVehicleModKit(vehicle, 0)
+ if not DoesEntityExist(vehicle) then
+ return
+ end
+ local colorPrimary, colorSecondary = GetVehicleColours(vehicle)
+ local pearlescentColor, wheelColor = GetVehicleExtraColours(vehicle)
+ SetVehicleModKit(vehicle, 0)
- if props.plate then
- SetVehicleNumberPlateText(vehicle, props.plate)
- end
- if props.plateIndex then
- SetVehicleNumberPlateTextIndex(vehicle, props.plateIndex)
- end
- if props.bodyHealth then
- SetVehicleBodyHealth(vehicle, props.bodyHealth + 0.0)
- end
- if props.engineHealth then
- SetVehicleEngineHealth(vehicle, props.engineHealth + 0.0)
- end
- if props.tankHealth then
- SetVehiclePetrolTankHealth(vehicle, props.tankHealth + 0.0)
- end
- if props.fuelLevel then
- SetVehicleFuelLevel(vehicle, props.fuelLevel + 0.0)
- end
- if props.dirtLevel then
- SetVehicleDirtLevel(vehicle, props.dirtLevel + 0.0)
- end
- if props.customPrimaryColor then
- SetVehicleCustomPrimaryColour(
- vehicle,
- props.customPrimaryColor[1],
- props.customPrimaryColor[2],
- props.customPrimaryColor[3]
- )
- end
- if props.customSecondaryColor then
- SetVehicleCustomSecondaryColour(
- vehicle,
- props.customSecondaryColor[1],
- props.customSecondaryColor[2],
- props.customSecondaryColor[3]
- )
- end
- if props.color1 then
- SetVehicleColours(vehicle, props.color1, colorSecondary)
- end
- if props.color2 then
- SetVehicleColours(vehicle, props.color1 or colorPrimary, props.color2)
- end
- if props.pearlescentColor then
- SetVehicleExtraColours(vehicle, props.pearlescentColor, wheelColor)
- end
- if props.wheelColor then
- SetVehicleExtraColours(vehicle, props.pearlescentColor or pearlescentColor, props.wheelColor)
- end
- if props.wheels then
- SetVehicleWheelType(vehicle, props.wheels)
- end
- if props.windowTint then
- SetVehicleWindowTint(vehicle, props.windowTint)
- end
+ if props.tyresCanBurst ~= nil then
+ SetVehicleTyresCanBurst(vehicle, props.tyresCanBurst)
+ end
- if props.neonEnabled then
- SetVehicleNeonLightEnabled(vehicle, 0, props.neonEnabled[1])
- SetVehicleNeonLightEnabled(vehicle, 1, props.neonEnabled[2])
- SetVehicleNeonLightEnabled(vehicle, 2, props.neonEnabled[3])
- SetVehicleNeonLightEnabled(vehicle, 3, props.neonEnabled[4])
- end
+ if props.plate ~= nil then
+ SetVehicleNumberPlateText(vehicle, props.plate)
+ end
+ if props.plateIndex ~= nil then
+ SetVehicleNumberPlateTextIndex(vehicle, props.plateIndex)
+ end
+ if props.bodyHealth ~= nil then
+ SetVehicleBodyHealth(vehicle, props.bodyHealth + 0.0)
+ end
+ if props.engineHealth ~= nil then
+ SetVehicleEngineHealth(vehicle, props.engineHealth + 0.0)
+ end
+ if props.tankHealth ~= nil then
+ SetVehiclePetrolTankHealth(vehicle, props.tankHealth + 0.0)
+ end
+ if props.fuelLevel ~= nil then
+ SetVehicleFuelLevel(vehicle, props.fuelLevel + 0.0)
+ end
+ if props.dirtLevel ~= nil then
+ SetVehicleDirtLevel(vehicle, props.dirtLevel + 0.0)
+ end
+ if props.customPrimaryColor ~= nil then
+ SetVehicleCustomPrimaryColour(
+ vehicle,
+ props.customPrimaryColor[1],
+ props.customPrimaryColor[2],
+ props.customPrimaryColor[3]
+ )
+ end
+ if props.customSecondaryColor ~= nil then
+ SetVehicleCustomSecondaryColour(
+ vehicle,
+ props.customSecondaryColor[1],
+ props.customSecondaryColor[2],
+ props.customSecondaryColor[3]
+ )
+ end
+ if props.color1 ~= nil then
+ SetVehicleColours(vehicle, props.color1, colorSecondary)
+ end
+ if props.color2 ~= nil then
+ SetVehicleColours(vehicle, props.color1 or colorPrimary, props.color2)
+ end
+ if props.pearlescentColor ~= nil then
+ SetVehicleExtraColours(vehicle, props.pearlescentColor, wheelColor)
+ end
- if props.extras then
- for extraId, enabled in pairs(props.extras) do
- if enabled then
- SetVehicleExtra(vehicle, tonumber(extraId), 0)
- else
- SetVehicleExtra(vehicle, tonumber(extraId), 1)
- end
- end
- end
+ if props.interiorColor ~= nil then
+ SetVehicleInteriorColor(vehicle, props.interiorColor)
+ end
- if props.neonColor then
- SetVehicleNeonLightsColour(vehicle, props.neonColor[1], props.neonColor[2], props.neonColor[3])
- end
- if props.xenonColor then
- SetVehicleXenonLightsColor(vehicle, props.xenonColor)
- end
- if props.customXenonColor then
- SetVehicleXenonLightsCustomColor(
- vehicle,
- props.customXenonColor[1],
- props.customXenonColor[2],
- props.customXenonColor[3]
- )
- end
- if props.modSmokeEnabled then
- ToggleVehicleMod(vehicle, 20, true)
- end
- if props.tyreSmokeColor then
- SetVehicleTyreSmokeColor(vehicle, props.tyreSmokeColor[1], props.tyreSmokeColor[2], props.tyreSmokeColor[3])
- end
- if props.modSpoilers then
- SetVehicleMod(vehicle, 0, props.modSpoilers, false)
- end
- if props.modFrontBumper then
- SetVehicleMod(vehicle, 1, props.modFrontBumper, false)
- end
- if props.modRearBumper then
- SetVehicleMod(vehicle, 2, props.modRearBumper, false)
- end
- if props.modSideSkirt then
- SetVehicleMod(vehicle, 3, props.modSideSkirt, false)
- end
- if props.modExhaust then
- SetVehicleMod(vehicle, 4, props.modExhaust, false)
- end
- if props.modFrame then
- SetVehicleMod(vehicle, 5, props.modFrame, false)
- end
- if props.modGrille then
- SetVehicleMod(vehicle, 6, props.modGrille, false)
- end
- if props.modHood then
- SetVehicleMod(vehicle, 7, props.modHood, false)
- end
- if props.modFender then
- SetVehicleMod(vehicle, 8, props.modFender, false)
- end
- if props.modRightFender then
- SetVehicleMod(vehicle, 9, props.modRightFender, false)
- end
- if props.modRoof then
- SetVehicleMod(vehicle, 10, props.modRoof, false)
- end
- if props.modEngine then
- SetVehicleMod(vehicle, 11, props.modEngine, false)
- end
- if props.modBrakes then
- SetVehicleMod(vehicle, 12, props.modBrakes, false)
- end
- if props.modTransmission then
- SetVehicleMod(vehicle, 13, props.modTransmission, false)
- end
- if props.modHorns then
- SetVehicleMod(vehicle, 14, props.modHorns, false)
- end
- if props.modSuspension then
- SetVehicleMod(vehicle, 15, props.modSuspension, false)
- end
- if props.modArmor then
- SetVehicleMod(vehicle, 16, props.modArmor, false)
- end
- if props.modTurbo then
- ToggleVehicleMod(vehicle, 18, props.modTurbo)
- end
- if props.modXenon then
- ToggleVehicleMod(vehicle, 22, props.modXenon)
- end
- if props.modFrontWheels then
- SetVehicleMod(vehicle, 23, props.modFrontWheels, false)
- end
- if props.modBackWheels then
- SetVehicleMod(vehicle, 24, props.modBackWheels, false)
- end
- if props.modPlateHolder then
- SetVehicleMod(vehicle, 25, props.modPlateHolder, false)
- end
- if props.modVanityPlate then
- SetVehicleMod(vehicle, 26, props.modVanityPlate, false)
- end
- if props.modTrimA then
- SetVehicleMod(vehicle, 27, props.modTrimA, false)
- end
- if props.modOrnaments then
- SetVehicleMod(vehicle, 28, props.modOrnaments, false)
- end
- if props.modDashboard then
- SetVehicleMod(vehicle, 29, props.modDashboard, false)
- end
- if props.modDial then
- SetVehicleMod(vehicle, 30, props.modDial, false)
- end
- if props.modDoorSpeaker then
- SetVehicleMod(vehicle, 31, props.modDoorSpeaker, false)
- end
- if props.modSeats then
- SetVehicleMod(vehicle, 32, props.modSeats, false)
- end
- if props.modSteeringWheel then
- SetVehicleMod(vehicle, 33, props.modSteeringWheel, false)
- end
- if props.modShifterLeavers then
- SetVehicleMod(vehicle, 34, props.modShifterLeavers, false)
- end
- if props.modAPlate then
- SetVehicleMod(vehicle, 35, props.modAPlate, false)
- end
- if props.modSpeakers then
- SetVehicleMod(vehicle, 36, props.modSpeakers, false)
- end
- if props.modTrunk then
- SetVehicleMod(vehicle, 37, props.modTrunk, false)
- end
- if props.modHydrolic then
- SetVehicleMod(vehicle, 38, props.modHydrolic, false)
- end
- if props.modEngineBlock then
- SetVehicleMod(vehicle, 39, props.modEngineBlock, false)
- end
- if props.modAirFilter then
- SetVehicleMod(vehicle, 40, props.modAirFilter, false)
- end
- if props.modStruts then
- SetVehicleMod(vehicle, 41, props.modStruts, false)
- end
- if props.modArchCover then
- SetVehicleMod(vehicle, 42, props.modArchCover, false)
- end
- if props.modAerials then
- SetVehicleMod(vehicle, 43, props.modAerials, false)
- end
- if props.modTrimB then
- SetVehicleMod(vehicle, 44, props.modTrimB, false)
- end
- if props.modTank then
- SetVehicleMod(vehicle, 45, props.modTank, false)
- end
- if props.modWindows then
- SetVehicleMod(vehicle, 46, props.modWindows, false)
- end
+ if props.dashboardColor ~= nil then
+ SetVehicleDashboardColor(vehicle, props.dashboardColor)
+ end
+
+ if props.wheelColor ~= nil then
+ SetVehicleExtraColours(vehicle, props.pearlescentColor or pearlescentColor, props.wheelColor)
+ end
+ if props.wheels ~= nil then
+ SetVehicleWheelType(vehicle, props.wheels)
+ end
+ if props.windowTint ~= nil then
+ SetVehicleWindowTint(vehicle, props.windowTint)
+ end
- if props.modLivery then
- SetVehicleMod(vehicle, 48, props.modLivery, false)
- SetVehicleLivery(vehicle, props.modLivery)
+ if props.neonEnabled ~= nil then
+ SetVehicleNeonLightEnabled(vehicle, 0, props.neonEnabled[1])
+ SetVehicleNeonLightEnabled(vehicle, 1, props.neonEnabled[2])
+ SetVehicleNeonLightEnabled(vehicle, 2, props.neonEnabled[3])
+ SetVehicleNeonLightEnabled(vehicle, 3, props.neonEnabled[4])
+ end
+
+ if props.extras ~= nil then
+ for extraId, enabled in pairs(props.extras) do
+ SetVehicleExtra(vehicle, tonumber(extraId), enabled and 0 or 1)
end
+ end
- if props.windowsBroken then
- for k, v in pairs(props.windowsBroken) do
- if v then
- SmashVehicleWindow(vehicle, tonumber(k))
- end
+ if props.neonColor ~= nil then
+ SetVehicleNeonLightsColour(vehicle, props.neonColor[1], props.neonColor[2], props.neonColor[3])
+ end
+ if props.xenonColor ~= nil then
+ SetVehicleXenonLightsColor(vehicle, props.xenonColor)
+ end
+ if props.customXenonColor ~= nil then
+ SetVehicleXenonLightsCustomColor(
+ vehicle,
+ props.customXenonColor[1],
+ props.customXenonColor[2],
+ props.customXenonColor[3]
+ )
+ end
+ if props.modSmokeEnabled ~= nil then
+ ToggleVehicleMod(vehicle, 20, true)
+ end
+ if props.tyreSmokeColor ~= nil then
+ SetVehicleTyreSmokeColor(vehicle, props.tyreSmokeColor[1], props.tyreSmokeColor[2], props.tyreSmokeColor[3])
+ end
+ if props.modSpoilers ~= nil then
+ SetVehicleMod(vehicle, 0, props.modSpoilers, false)
+ end
+ if props.modFrontBumper ~= nil then
+ SetVehicleMod(vehicle, 1, props.modFrontBumper, false)
+ end
+ if props.modRearBumper ~= nil then
+ SetVehicleMod(vehicle, 2, props.modRearBumper, false)
+ end
+ if props.modSideSkirt ~= nil then
+ SetVehicleMod(vehicle, 3, props.modSideSkirt, false)
+ end
+ if props.modExhaust ~= nil then
+ SetVehicleMod(vehicle, 4, props.modExhaust, false)
+ end
+ if props.modFrame ~= nil then
+ SetVehicleMod(vehicle, 5, props.modFrame, false)
+ end
+ if props.modGrille ~= nil then
+ SetVehicleMod(vehicle, 6, props.modGrille, false)
+ end
+ if props.modHood ~= nil then
+ SetVehicleMod(vehicle, 7, props.modHood, false)
+ end
+ if props.modFender ~= nil then
+ SetVehicleMod(vehicle, 8, props.modFender, false)
+ end
+ if props.modRightFender ~= nil then
+ SetVehicleMod(vehicle, 9, props.modRightFender, false)
+ end
+ if props.modRoof ~= nil then
+ SetVehicleMod(vehicle, 10, props.modRoof, false)
+ end
+
+ if props.modRoofLivery ~= nil then
+ SetVehicleRoofLivery(vehicle, props.modRoofLivery)
+ end
+
+ if props.modEngine ~= nil then
+ SetVehicleMod(vehicle, 11, props.modEngine, false)
+ end
+ if props.modBrakes ~= nil then
+ SetVehicleMod(vehicle, 12, props.modBrakes, false)
+ end
+ if props.modTransmission ~= nil then
+ SetVehicleMod(vehicle, 13, props.modTransmission, false)
+ end
+ if props.modHorns ~= nil then
+ SetVehicleMod(vehicle, 14, props.modHorns, false)
+ end
+ if props.modSuspension ~= nil then
+ SetVehicleMod(vehicle, 15, props.modSuspension, false)
+ end
+ if props.modArmor ~= nil then
+ SetVehicleMod(vehicle, 16, props.modArmor, false)
+ end
+ if props.modTurbo ~= nil then
+ ToggleVehicleMod(vehicle, 18, props.modTurbo)
+ end
+ if props.modXenon ~= nil then
+ ToggleVehicleMod(vehicle, 22, props.modXenon)
+ end
+ if props.modFrontWheels ~= nil then
+ SetVehicleMod(vehicle, 23, props.modFrontWheels, props.modCustomFrontWheels)
+ end
+ if props.modBackWheels ~= nil then
+ SetVehicleMod(vehicle, 24, props.modBackWheels, props.modCustomBackWheels)
+ end
+ if props.modPlateHolder ~= nil then
+ SetVehicleMod(vehicle, 25, props.modPlateHolder, false)
+ end
+ if props.modVanityPlate ~= nil then
+ SetVehicleMod(vehicle, 26, props.modVanityPlate, false)
+ end
+ if props.modTrimA ~= nil then
+ SetVehicleMod(vehicle, 27, props.modTrimA, false)
+ end
+ if props.modOrnaments ~= nil then
+ SetVehicleMod(vehicle, 28, props.modOrnaments, false)
+ end
+ if props.modDashboard ~= nil then
+ SetVehicleMod(vehicle, 29, props.modDashboard, false)
+ end
+ if props.modDial ~= nil then
+ SetVehicleMod(vehicle, 30, props.modDial, false)
+ end
+ if props.modDoorSpeaker ~= nil then
+ SetVehicleMod(vehicle, 31, props.modDoorSpeaker, false)
+ end
+ if props.modSeats ~= nil then
+ SetVehicleMod(vehicle, 32, props.modSeats, false)
+ end
+ if props.modSteeringWheel ~= nil then
+ SetVehicleMod(vehicle, 33, props.modSteeringWheel, false)
+ end
+ if props.modShifterLeavers ~= nil then
+ SetVehicleMod(vehicle, 34, props.modShifterLeavers, false)
+ end
+ if props.modAPlate ~= nil then
+ SetVehicleMod(vehicle, 35, props.modAPlate, false)
+ end
+ if props.modSpeakers ~= nil then
+ SetVehicleMod(vehicle, 36, props.modSpeakers, false)
+ end
+ if props.modTrunk ~= nil then
+ SetVehicleMod(vehicle, 37, props.modTrunk, false)
+ end
+ if props.modHydrolic ~= nil then
+ SetVehicleMod(vehicle, 38, props.modHydrolic, false)
+ end
+ if props.modEngineBlock ~= nil then
+ SetVehicleMod(vehicle, 39, props.modEngineBlock, false)
+ end
+ if props.modAirFilter ~= nil then
+ SetVehicleMod(vehicle, 40, props.modAirFilter, false)
+ end
+ if props.modStruts ~= nil then
+ SetVehicleMod(vehicle, 41, props.modStruts, false)
+ end
+ if props.modArchCover ~= nil then
+ SetVehicleMod(vehicle, 42, props.modArchCover, false)
+ end
+ if props.modAerials ~= nil then
+ SetVehicleMod(vehicle, 43, props.modAerials, false)
+ end
+ if props.modTrimB ~= nil then
+ SetVehicleMod(vehicle, 44, props.modTrimB, false)
+ end
+ if props.modTank ~= nil then
+ SetVehicleMod(vehicle, 45, props.modTank, false)
+ end
+ if props.modWindows ~= nil then
+ SetVehicleMod(vehicle, 46, props.modWindows, false)
+ end
+
+ if props.modLivery ~= nil then
+ SetVehicleMod(vehicle, 48, props.modLivery, false)
+ SetVehicleLivery(vehicle, props.modLivery)
+ end
+
+ if props.windowsBroken ~= nil then
+ for k, v in pairs(props.windowsBroken) do
+ if v then
+ RemoveVehicleWindow(vehicle, tonumber(k))
end
end
+ end
- if props.doorsBroken then
- for k, v in pairs(props.doorsBroken) do
- if v then
- SetVehicleDoorBroken(vehicle, tonumber(k), true)
- end
+ if props.doorsBroken ~= nil then
+ for k, v in pairs(props.doorsBroken) do
+ if v then
+ SetVehicleDoorBroken(vehicle, tonumber(k), true)
end
end
+ end
- if props.tyreBurst then
- for k, v in pairs(props.tyreBurst) do
- if v then
- SetVehicleTyreBurst(vehicle, tonumber(k), true, 1000.0)
- end
+ if props.tyreBurst ~= nil then
+ for k, v in pairs(props.tyreBurst) do
+ if v then
+ SetVehicleTyreBurst(vehicle, tonumber(k), true, 1000.0)
end
end
end
@@ -1056,18 +1009,14 @@ function ESX.Game.Utils.DrawText3D(coords, text, size, font)
local camCoords = GetFinalRenderedCamCoord()
local distance = #(vector - camCoords)
- if not size then
- size = 1
- end
- if not font then
- font = 0
- end
+ size = size or 1
+ font = font or 0
local scale = (size / distance) * 2
local fov = (1 / GetGameplayCamFov()) * 100
scale = scale * fov
- SetTextScale(0.0 * scale, 0.55 * scale)
+ SetTextScale(0.0, 0.55 * scale)
SetTextFont(font)
SetTextProportional(1)
SetTextColour(255, 255, 255, 215)
@@ -1079,16 +1028,32 @@ function ESX.Game.Utils.DrawText3D(coords, text, size, font)
ClearDrawOrigin()
end
+---@param account string Account name (money/bank/black_money)
+---@return table|nil
+function ESX.GetAccount(account)
+ for i = 1, #ESX.PlayerData.accounts, 1 do
+ if ESX.PlayerData.accounts[i].name == account then
+ return ESX.PlayerData.accounts[i]
+ end
+ end
+ return nil
+end
+
function ESX.ShowInventory()
+ if not Config.EnableDefaultInventory then
+ return
+ end
+
local playerPed = ESX.PlayerData.ped
local elements = {
- { unselectable = true, icon = "fas fa-box", title = "Player Inventory" },
+ { unselectable = true, icon = "fas fa-box" },
}
local currentWeight = 0
for i = 1, #ESX.PlayerData.accounts do
if ESX.PlayerData.accounts[i].money > 0 then
- local formattedMoney = _U("locale_currency", ESX.Math.GroupDigits(ESX.PlayerData.accounts[i].money))
+ local formattedMoney =
+ TranslateCap("locale_currency", ESX.Math.GroupDigits(ESX.PlayerData.accounts[i].money))
local canDrop = ESX.PlayerData.accounts[i].name ~= "bank"
elements[#elements + 1] = {
@@ -1107,7 +1072,8 @@ function ESX.ShowInventory()
end
end
- for _, v in ipairs(ESX.PlayerData.inventory) do
+ for i = 1, #ESX.PlayerData.inventory do
+ local v = ESX.PlayerData.inventory[i]
if v.count > 0 then
currentWeight = currentWeight + (v.weight * v.count)
@@ -1124,16 +1090,18 @@ function ESX.ShowInventory()
end
end
- for _, v in ipairs(Config.Weapons) do
+ elements[1].title = TranslateCap("inventory", currentWeight, Config.MaxWeight)
+
+ for i = 1, #Config.Weapons do
+ local v = Config.Weapons[i]
local weaponHash = joaat(v.name)
if HasPedGotWeapon(playerPed, weaponHash, false) then
local ammo = GetAmmoInPedWeapon(playerPed, weaponHash)
- local label = v.ammo and ("%s - %s %s"):format(v.label, ammo, v.ammo.label) or v.label
elements[#elements + 1] = {
icon = "fas fa-gun",
- title = label,
+ title = v.ammo and ("%s - %s %s"):format(v.label, ammo, v.ammo.label) or v.label,
count = 1,
type = "item_weapon",
value = v.name,
@@ -1146,12 +1114,6 @@ function ESX.ShowInventory()
end
end
- elements[#elements + 1] = {
- unselectable = true,
- icon = "fas fa-weight",
- title = "Current Weight: " .. currentWeight,
- }
-
ESX.CloseContext()
ESX.OpenContext("right", elements, function(_, element)
@@ -1162,7 +1124,7 @@ function ESX.ShowInventory()
if element.usable then
elements2[#elements2 + 1] = {
icon = "fas fa-utensils",
- title = _U("use"),
+ title = TranslateCap("use"),
action = "use",
type = element.type,
value = element.value,
@@ -1173,7 +1135,7 @@ function ESX.ShowInventory()
if player ~= -1 and distance <= 3.0 then
elements2[#elements2 + 1] = {
icon = "fas fa-hands",
- title = _U("give"),
+ title = TranslateCap("give"),
action = "give",
type = element.type,
value = element.value,
@@ -1182,7 +1144,7 @@ function ESX.ShowInventory()
elements2[#elements2 + 1] = {
icon = "fas fa-trash",
- title = _U("remove"),
+ title = TranslateCap("remove"),
action = "remove",
type = element.type,
value = element.value,
@@ -1198,7 +1160,7 @@ function ESX.ShowInventory()
then
elements2[#elements2 + 1] = {
icon = "fas fa-gun",
- title = _U("giveammo"),
+ title = TranslateCap("giveammo"),
action = "give_ammo",
type = element.type,
value = element.value,
@@ -1207,12 +1169,12 @@ function ESX.ShowInventory()
elements2[#elements2 + 1] = {
icon = "fas fa-arrow-left",
- title = _U("return"),
+ title = TranslateCap("return"),
action = "return",
}
ESX.OpenContext("right", elements2, function(_, element2)
- local item, type = element2.value, element2.type
+ local item, itemType = element2.value, element2.type
if element2.action == "give" then
local playersNearby = ESX.Game.GetPlayersInArea(GetEntityCoords(playerPed), 3.0)
@@ -1246,18 +1208,24 @@ function ESX.ShowInventory()
local selectedPlayerPed = GetPlayerPed(selectedPlayer)
if IsPedOnFoot(selectedPlayerPed) and not IsPedFalling(selectedPlayerPed) then
- if type == "item_weapon" then
- TriggerServerEvent("esx:giveInventoryItem", selectedPlayerId, type, item, nil)
+ if itemType == "item_weapon" then
+ TriggerServerEvent(
+ "esx:giveInventoryItem",
+ selectedPlayerId,
+ itemType,
+ item,
+ nil
+ )
ESX.CloseContext()
else
local elementsG = {
{ unselectable = true, icon = "fas fa-trash", title = element.title },
{
- icon = "fas fa-hashtag",
- title = "Amount",
+ icon = "fas fa-tally",
+ title = "Amount.",
input = true,
inputType = "number",
- inputPlaceholder = "Amount to give...",
+ inputPlaceholder = "Amount to give..",
inputMin = 1,
inputMax = 1000,
},
@@ -1271,21 +1239,21 @@ function ESX.ShowInventory()
TriggerServerEvent(
"esx:giveInventoryItem",
selectedPlayerId,
- type,
+ itemType,
item,
quantity
)
ESX.CloseContext()
else
- ESX.ShowNotification(_U("amount_invalid"))
+ ESX.ShowNotification(TranslateCap("amount_invalid"))
end
end)
end
else
- ESX.ShowNotification(_U("in_vehicle"))
+ ESX.ShowNotification(TranslateCap("in_vehicle"))
end
else
- ESX.ShowNotification(_U("players_nearby"))
+ ESX.ShowNotification(TranslateCap("players_nearby"))
ESX.CloseContext()
end
end)
@@ -1296,21 +1264,21 @@ function ESX.ShowInventory()
local dict, anim = "weapons@first_person@aim_rng@generic@projectile@sticky_bomb@", "plant_floor"
ESX.Streaming.RequestAnimDict(dict)
- if type == "item_weapon" then
+ if itemType == "item_weapon" then
ESX.CloseContext()
TaskPlayAnim(playerPed, dict, anim, 8.0, 1.0, 1000, 16, 0.0, false, false, false)
RemoveAnimDict(dict)
Wait(1000)
- TriggerServerEvent("esx:removeInventoryItem", type, item)
+ TriggerServerEvent("esx:removeInventoryItem", itemType, item)
else
local elementsR = {
{ unselectable = true, icon = "fas fa-trash", title = element.title },
{
- icon = "fas fa-hashtag",
- title = "Amount",
+ icon = "fas fa-tally",
+ title = "Amount.",
input = true,
inputType = "number",
- inputPlaceholder = "Amount to remove...",
+ inputPlaceholder = "Amount to remove..",
inputMin = 1,
inputMax = 1000,
},
@@ -1325,9 +1293,9 @@ function ESX.ShowInventory()
TaskPlayAnim(playerPed, dict, anim, 8.0, 1.0, 1000, 16, 0.0, false, false, false)
RemoveAnimDict(dict)
Wait(1000)
- TriggerServerEvent("esx:removeInventoryItem", type, item, quantity)
+ TriggerServerEvent("esx:removeInventoryItem", itemType, item, quantity)
else
- ESX.ShowNotification(_U("amount_invalid"))
+ ESX.ShowNotification(TranslateCap("amount_invalid"))
end
end)
end
@@ -1349,11 +1317,11 @@ function ESX.ShowInventory()
local elementsGA = {
{ unselectable = true, icon = "fas fa-trash", title = element.title },
{
- icon = "fas fa-hashtag",
- title = "Amount",
+ icon = "fas fa-tally",
+ title = "Amount.",
input = true,
inputType = "number",
- inputPlaceholder = "Amount to give...",
+ inputPlaceholder = "Amount to give..",
inputMin = 1,
inputMax = 1000,
},
@@ -1374,35 +1342,29 @@ function ESX.ShowInventory()
)
ESX.CloseContext()
else
- ESX.ShowNotification(_U("noammo"))
+ ESX.ShowNotification(TranslateCap("noammo"))
end
else
- ESX.ShowNotification(_U("amount_invalid"))
+ ESX.ShowNotification(TranslateCap("amount_invalid"))
end
end)
else
- ESX.ShowNotification(_U("noammo"))
+ ESX.ShowNotification(TranslateCap("noammo"))
end
else
- ESX.ShowNotification(_U("players_nearby"))
+ ESX.ShowNotification(TranslateCap("players_nearby"))
end
else
- ESX.ShowNotification(_U("in_vehicle"))
+ ESX.ShowNotification(TranslateCap("in_vehicle"))
end
end
end)
end)
end
-RegisterNetEvent("esx:serverCallback")
-AddEventHandler("esx:serverCallback", function(requestId, ...)
- Core.ServerCallbacks[requestId](...)
- Core.ServerCallbacks[requestId] = nil
-end)
-
RegisterNetEvent("esx:showNotification")
-AddEventHandler("esx:showNotification", function(msg, type, length)
- ESX.ShowNotification(msg, type, length)
+AddEventHandler("esx:showNotification", function(msg, notifyType, length)
+ ESX.ShowNotification(msg, notifyType, length)
end)
RegisterNetEvent("esx:showAdvancedNotification")
@@ -1421,28 +1383,74 @@ end)
AddEventHandler("onResourceStop", function(resourceName)
for i = 1, #ESX.UI.Menu.Opened, 1 do
if ESX.UI.Menu.Opened[i] then
- if ESX.UI.Menu.Opened[i].namespace == resourceName then
+ if
+ ESX.UI.Menu.Opened[i].resourceName == resourceName
+ or ESX.UI.Menu.Opened[i].namespace == resourceName
+ then
ESX.UI.Menu.Opened[i].close()
ESX.UI.Menu.Opened[i] = nil
end
end
end
end)
-
--- SetTimeout
-CreateThread(function()
- while true do
- local sleep = 100
- if #Core.TimeoutCallbacks > 0 then
- local currTime = GetGameTimer()
- sleep = 0
- for i = 1, #Core.TimeoutCallbacks, 1 do
- if currTime >= Core.TimeoutCallbacks[i].time then
- Core.TimeoutCallbacks[i].cb()
- Core.TimeoutCallbacks[i] = nil
- end
- end
- end
- Wait(sleep)
+-- Credits to txAdmin for the list.
+local mismatchedTypes = {
+ [`airtug`] = "automobile", -- trailer
+ [`avisa`] = "submarine", -- boat
+ [`blimp`] = "heli", -- plane
+ [`blimp2`] = "heli", -- plane
+ [`blimp3`] = "heli", -- plane
+ [`caddy`] = "automobile", -- trailer
+ [`caddy2`] = "automobile", -- trailer
+ [`caddy3`] = "automobile", -- trailer
+ [`chimera`] = "automobile", -- bike
+ [`docktug`] = "automobile", -- trailer
+ [`forklift`] = "automobile", -- trailer
+ [`kosatka`] = "submarine", -- boat
+ [`mower`] = "automobile", -- trailer
+ [`policeb`] = "bike", -- automobile
+ [`ripley`] = "automobile", -- trailer
+ [`rrocket`] = "automobile", -- bike
+ [`sadler`] = "automobile", -- trailer
+ [`sadler2`] = "automobile", -- trailer
+ [`scrap`] = "automobile", -- trailer
+ [`slamtruck`] = "automobile", -- trailer
+ [`Stryder`] = "automobile", -- bike
+ [`submersible`] = "submarine", -- boat
+ [`submersible2`] = "submarine", -- boat
+ [`thruster`] = "heli", -- automobile
+ [`towtruck`] = "automobile", -- trailer
+ [`towtruck2`] = "automobile", -- trailer
+ [`tractor`] = "automobile", -- trailer
+ [`tractor2`] = "automobile", -- trailer
+ [`tractor3`] = "automobile", -- trailer
+ [`trailersmall2`] = "trailer", -- automobile
+ [`utillitruck`] = "automobile", -- trailer
+ [`utillitruck2`] = "automobile", -- trailer
+ [`utillitruck3`] = "automobile", -- trailer
+}
+
+---@param model number|string
+---@return string
+function ESX.GetVehicleType(model)
+ model = type(model) == "string" and joaat(model) or model
+ if not IsModelInCdimage(model) then
+ return
end
-end)
+ if mismatchedTypes[model] then
+ return mismatchedTypes[model]
+ end
+
+ local vehicleType = GetVehicleClassFromName(model)
+ local types = {
+ [8] = "bike",
+ [11] = "trailer",
+ [13] = "bike",
+ [14] = "boat",
+ [15] = "heli",
+ [16] = "plane",
+ [21] = "train",
+ }
+
+ return types[vehicleType] or "automobile"
+end
diff --git a/server-data/resources/[esx]/es_extended/client/main.lua b/server-data/resources/[esx]/es_extended/client/main.lua
index 16f638901..b0271c8cf 100644
--- a/server-data/resources/[esx]/es_extended/client/main.lua
+++ b/server-data/resources/[esx]/es_extended/client/main.lua
@@ -1,7 +1,9 @@
local pickups = {}
+
CreateThread(function()
while not Config.Multichar do
- Wait(0)
+ Wait(100)
+
if NetworkIsPlayerActive(PlayerId()) then
exports.spawnmanager:setAutoSpawn(false)
DoScreenFadeOut(0)
@@ -16,41 +18,60 @@ RegisterNetEvent("esx:requestModel", function(model)
ESX.Streaming.RequestModel(model)
end)
+function ESX.SpawnPlayer(skin, coords, cb)
+ local p = promise.new()
+ TriggerEvent("skinchanger:loadSkin", skin, function()
+ p:resolve()
+ end)
+ Citizen.Await(p)
+
+ local playerPed = PlayerPedId()
+ FreezeEntityPosition(playerPed, true)
+ SetEntityCoordsNoOffset(playerPed, coords.x, coords.y, coords.z, false, false, false, true)
+ SetEntityHeading(playerPed, coords.heading)
+ while not HasCollisionLoadedAroundEntity(playerPed) do
+ Wait(0)
+ end
+ FreezeEntityPosition(playerPed, false)
+ NetworkResurrectLocalPlayer(coords.x, coords.y, coords.z, coords.heading, true, true, false)
+ TriggerEvent("playerSpawned", coords)
+ cb()
+end
+
RegisterNetEvent("esx:playerLoaded")
-AddEventHandler("esx:playerLoaded", function(xPlayer, isNew, skin)
+AddEventHandler("esx:playerLoaded", function(xPlayer, _, skin)
ESX.PlayerData = xPlayer
- if Config.Multichar then
- Wait(3000)
- else
- exports.spawnmanager:spawnPlayer({
- x = ESX.PlayerData.coords.x,
- y = ESX.PlayerData.coords.y,
- z = ESX.PlayerData.coords.z + 0.25,
- heading = ESX.PlayerData.coords.heading,
- model = `mp_m_freemode_01`,
- skipFade = false,
- }, function()
- TriggerServerEvent("esx:onPlayerSpawn")
+ if not Config.Multichar then
+ ESX.SpawnPlayer(skin, ESX.PlayerData.coords, function()
TriggerEvent("esx:onPlayerSpawn")
TriggerEvent("esx:restoreLoadout")
-
- if isNew then
- TriggerEvent("skinchanger:loadDefaultModel", skin.sex == 0)
- elseif skin then
- TriggerEvent("skinchanger:loadSkin", skin)
- end
-
+ TriggerServerEvent("esx:onPlayerSpawn")
TriggerEvent("esx:loadingScreenOff")
ShutdownLoadingScreen()
ShutdownLoadingScreenNui()
end)
end
+ while not DoesEntityExist(ESX.PlayerData.ped) do
+ Wait(20)
+ end
+
ESX.PlayerLoaded = true
- while ESX.PlayerData.ped == nil do
- Wait(20)
+ local metadata = ESX.PlayerData.metadata
+
+ if metadata.health then
+ SetEntityHealth(ESX.PlayerData.ped, metadata.health)
+ end
+
+ if metadata.armor and metadata.armor > 0 then
+ SetPedArmour(ESX.PlayerData.ped, metadata.armor)
+ end
+
+ local timer = GetGameTimer()
+ while not HaveAllStreamingRequestsCompleted(ESX.PlayerData.ped) and (GetGameTimer() - timer) < 2000 do
+ Wait(0)
end
if Config.EnablePVP then
@@ -59,7 +80,6 @@ AddEventHandler("esx:playerLoaded", function(xPlayer, isNew, skin)
end
local playerId = PlayerId()
-
-- RemoveHudComponents
for i = 1, #Config.RemoveHudComponents do
if Config.RemoveHudComponents[i] then
@@ -75,29 +95,24 @@ AddEventHandler("esx:playerLoaded", function(xPlayer, isNew, skin)
end
end
- -- DisableVehicleRewards
- if Config.DisableVehicleRewards then
- AddEventHandler("esx:enteredVehicle", function(vehicle)
- if GetVehicleClass(vehicle) == 18 then
- CreateThread(function()
- while true do
- DisablePlayerVehicleRewards(playerId)
- if not IsPedInAnyVehicle(ESX.PlayerData.ped, false) then
- break
- end
-
- Wait(0)
- end
- end)
+ if Config.DisableVehicleSeatShuff then
+ AddEventHandler("esx:enteredVehicle", function(vehicle, _, seat)
+ if seat == 0 then
+ SetPedIntoVehicle(ESX.PlayerData.ped, vehicle, 0)
+ SetPedConfigFlag(ESX.PlayerData.ped, 184, true)
end
end)
end
- if Config.DisableHealthRegeneration or Config.DisableWeaponWheel or Config.DisableAimAssist then
+ if Config.DisableHealthRegeneration then
+ SetPlayerHealthRechargeMultiplier(playerId, 0.0)
+ end
+
+ if Config.DisableWeaponWheel or Config.DisableAimAssist or Config.DisableVehicleRewards then
CreateThread(function()
while true do
- if Config.DisableHealthRegeneration then
- SetPlayerHealthRechargeMultiplier(playerId, 0.0)
+ if Config.DisableDisplayAmmo then
+ DisplayAmmoThisFrame(false)
end
if Config.DisableWeaponWheel then
@@ -105,20 +120,93 @@ AddEventHandler("esx:playerLoaded", function(xPlayer, isNew, skin)
DisableControlAction(0, 37, true)
end
- if Config.DisableDisplayAmmo then
- DisplayAmmoThisFrame(false)
- end
-
if Config.DisableAimAssist then
if IsPedArmed(ESX.PlayerData.ped, 4) then
SetPlayerLockonRangeOverride(playerId, 2.0)
end
end
+ if Config.DisableVehicleRewards then
+ DisablePlayerVehicleRewards(playerId)
+ end
+
Wait(0)
end
end)
end
+
+ -- Disable Dispatch services
+ if Config.DisableDispatchServices then
+ for i = 1, 15 do
+ EnableDispatchService(i, false)
+ end
+ end
+
+ -- Disable Scenarios
+ if Config.DisableScenarios then
+ local scenarios = {
+ "WORLD_VEHICLE_ATTRACTOR",
+ "WORLD_VEHICLE_AMBULANCE",
+ "WORLD_VEHICLE_BICYCLE_BMX",
+ "WORLD_VEHICLE_BICYCLE_BMX_BALLAS",
+ "WORLD_VEHICLE_BICYCLE_BMX_FAMILY",
+ "WORLD_VEHICLE_BICYCLE_BMX_HARMONY",
+ "WORLD_VEHICLE_BICYCLE_BMX_VAGOS",
+ "WORLD_VEHICLE_BICYCLE_MOUNTAIN",
+ "WORLD_VEHICLE_BICYCLE_ROAD",
+ "WORLD_VEHICLE_BIKE_OFF_ROAD_RACE",
+ "WORLD_VEHICLE_BIKER",
+ "WORLD_VEHICLE_BOAT_IDLE",
+ "WORLD_VEHICLE_BOAT_IDLE_ALAMO",
+ "WORLD_VEHICLE_BOAT_IDLE_MARQUIS",
+ "WORLD_VEHICLE_BOAT_IDLE_MARQUIS",
+ "WORLD_VEHICLE_BROKEN_DOWN",
+ "WORLD_VEHICLE_BUSINESSMEN",
+ "WORLD_VEHICLE_HELI_LIFEGUARD",
+ "WORLD_VEHICLE_CLUCKIN_BELL_TRAILER",
+ "WORLD_VEHICLE_CONSTRUCTION_SOLO",
+ "WORLD_VEHICLE_CONSTRUCTION_PASSENGERS",
+ "WORLD_VEHICLE_DRIVE_PASSENGERS",
+ "WORLD_VEHICLE_DRIVE_PASSENGERS_LIMITED",
+ "WORLD_VEHICLE_DRIVE_SOLO",
+ "WORLD_VEHICLE_FIRE_TRUCK",
+ "WORLD_VEHICLE_EMPTY",
+ "WORLD_VEHICLE_MARIACHI",
+ "WORLD_VEHICLE_MECHANIC",
+ "WORLD_VEHICLE_MILITARY_PLANES_BIG",
+ "WORLD_VEHICLE_MILITARY_PLANES_SMALL",
+ "WORLD_VEHICLE_PARK_PARALLEL",
+ "WORLD_VEHICLE_PARK_PERPENDICULAR_NOSE_IN",
+ "WORLD_VEHICLE_PASSENGER_EXIT",
+ "WORLD_VEHICLE_POLICE_BIKE",
+ "WORLD_VEHICLE_POLICE_CAR",
+ "WORLD_VEHICLE_POLICE",
+ "WORLD_VEHICLE_POLICE_NEXT_TO_CAR",
+ "WORLD_VEHICLE_QUARRY",
+ "WORLD_VEHICLE_SALTON",
+ "WORLD_VEHICLE_SALTON_DIRT_BIKE",
+ "WORLD_VEHICLE_SECURITY_CAR",
+ "WORLD_VEHICLE_STREETRACE",
+ "WORLD_VEHICLE_TOURBUS",
+ "WORLD_VEHICLE_TOURIST",
+ "WORLD_VEHICLE_TANDL",
+ "WORLD_VEHICLE_TRACTOR",
+ "WORLD_VEHICLE_TRACTOR_BEACH",
+ "WORLD_VEHICLE_TRUCK_LOGS",
+ "WORLD_VEHICLE_TRUCKS_TRAILERS",
+ "WORLD_VEHICLE_DISTANT_EMPTY_GROUND",
+ "WORLD_HUMAN_PAPARAZZI",
+ }
+
+ for _, v in pairs(scenarios) do
+ SetScenarioTypeEnabled(v, false)
+ end
+ end
+
+ if IsScreenFadedOut() then
+ DoScreenFadeIn(500)
+ end
+
SetDefaultVehicleNumberPlateTextPattern(-1, Config.CustomAIPlates)
StartServerSyncLoops()
end)
@@ -182,24 +270,31 @@ AddEventHandler("esx:restoreLoadout", function()
end
end)
-AddStateBagChangeHandler("VehicleProperties", nil, function(_, _, value)
- if value then
+-- Credit: https://github.com/LukeWasTakenn, https://github.com/LukeWasTakenn/luke_garages/blob/master/client/client.lua#L331-L352
+AddStateBagChangeHandler("VehicleProperties", nil, function(bagName, _, value)
+ if not value then
+ return
+ end
+
+ local netId = bagName:gsub("entity:", "")
+ local timer = GetGameTimer()
+ while not NetworkDoesEntityExistWithNetworkId(tonumber(netId)) do
Wait(0)
- local NetId = value.NetId
- local Vehicle = NetworkGetEntityFromNetworkId(NetId)
- local Tries = 0
- while Vehicle == 0 do
- Vehicle = NetworkGetEntityFromNetworkId(NetId)
- Wait(100)
- Tries = Tries + 1
- if Tries > 300 then
- break
- end
+ if GetGameTimer() - timer > 10000 then
+ return
end
- if NetworkGetEntityOwner(Vehicle) == PlayerId() then
- ESX.Game.SetVehicleProperties(Vehicle, value)
+ end
+
+ local vehicle = NetToVeh(tonumber(netId))
+ local timer2 = GetGameTimer()
+ while NetworkGetEntityOwner(vehicle) ~= PlayerId() do
+ Wait(0)
+ if GetGameTimer() - timer2 > 10000 then
+ return
end
end
+
+ ESX.Game.SetVehicleProperties(vehicle, value)
end)
RegisterNetEvent("esx:setAccountMoney")
@@ -228,18 +323,18 @@ if not Config.OxInventory then
if showNotification then
ESX.UI.ShowInventoryItemNotification(true, item, count)
end
-
- if ESX.UI.Menu.IsOpen("default", "es_extended") then
- ESX.ShowInventory()
- end
end)
RegisterNetEvent("esx:removeInventoryItem")
AddEventHandler("esx:removeInventoryItem", function(item, count, showNotification)
- for k, v in ipairs(ESX.PlayerData.inventory) do
- if v.name == item then
- ESX.UI.ShowInventoryItemNotification(false, v.label, v.count - count)
- ESX.PlayerData.inventory[k].count = count
+ for i = 1, #ESX.PlayerData.inventory do
+ if ESX.PlayerData.inventory[i].name == item then
+ ESX.UI.ShowInventoryItemNotification(
+ false,
+ ESX.PlayerData.inventory[i].label,
+ ESX.PlayerData.inventory[i].count - count
+ )
+ ESX.PlayerData.inventory[i].count = count
break
end
end
@@ -247,10 +342,6 @@ if not Config.OxInventory then
if showNotification then
ESX.UI.ShowInventoryItemNotification(false, item, count)
end
-
- if ESX.UI.Menu.IsOpen("default", "es_extended") then
- ESX.ShowInventory()
- end
end)
RegisterNetEvent("esx:addWeapon")
@@ -278,9 +369,8 @@ if not Config.OxInventory then
end)
RegisterNetEvent("esx:removeWeapon")
- AddEventHandler("esx:removeWeapon", function(weapon)
- RemoveWeaponFromPed(ESX.PlayerData.ped, joaat(weapon))
- SetPedAmmo(ESX.PlayerData.ped, joaat(weapon), 0)
+ AddEventHandler("esx:removeWeapon", function()
+ print("[^1ERROR^7] event ^5'esx:removeWeapon'^7 Has Been Removed. Please use ^5xPlayer.removeWeapon^7 Instead!")
end)
RegisterNetEvent("esx:removeWeaponComponent")
@@ -297,7 +387,7 @@ end)
if not Config.OxInventory then
RegisterNetEvent("esx:createPickup")
- AddEventHandler("esx:createPickup", function(pickupId, label, coords, type, name, components, tintIndex)
+ AddEventHandler("esx:createPickup", function(pickupId, label, coords, itemType, name, components, tintIndex)
local function setObjectProperties(object)
SetEntityAsMissionEntity(object, true, false)
PlaceObjectOnGroundProperly(object)
@@ -308,11 +398,11 @@ if not Config.OxInventory then
obj = object,
label = label,
inRange = false,
- coords = vector3(coords.x, coords.y, coords.z),
+ coords = coords,
}
end
- if type == "item_weapon" then
+ if itemType == "item_weapon" then
local weaponHash = joaat(name)
ESX.Streaming.RequestWeaponAsset(weaponHash)
local pickupObject = CreateWeaponObject(weaponHash, 50, coords.x, coords.y, coords.z, true, 1.0, 0)
@@ -336,7 +426,7 @@ if not Config.OxInventory then
"esx:createPickup",
pickupId,
pickup.label,
- pickup.coords - vector3(0, 0, 1.0),
+ vector3(pickup.coords.x, pickup.coords.y, pickup.coords.z - 1.0),
pickup.type,
pickup.name,
pickup.components,
@@ -401,13 +491,86 @@ function StartServerSyncLoops()
end
end
+if not Config.OxInventory and Config.EnableDefaultInventory then
+ ESX.RegisterInput("showinv", TranslateCap("keymap_showinventory"), "keyboard", "F2", function()
+ if not ESX.PlayerData.dead then
+ ESX.ShowInventory()
+ end
+ end)
+end
+
-- disable wanted level
if not Config.EnableWantedLevel then
ClearPlayerWantedLevel(PlayerId())
SetMaxWantedLevel(0)
end
------ Admin commnads from esx_adminplus
+if not Config.OxInventory then
+ CreateThread(function()
+ while true do
+ local Sleep = 1500
+ local playerCoords = GetEntityCoords(ESX.PlayerData.ped)
+ local _, closestDistance = ESX.Game.GetClosestPlayer(playerCoords)
+
+ for pickupId, pickup in pairs(pickups) do
+ local distance = #(playerCoords - pickup.coords)
+
+ if distance < 5 then
+ Sleep = 0
+ local label = pickup.label
+
+ if distance < 1 then
+ if IsControlJustReleased(0, 38) then
+ if
+ IsPedOnFoot(ESX.PlayerData.ped)
+ and (closestDistance == -1 or closestDistance > 3)
+ and not pickup.inRange
+ then
+ pickup.inRange = true
+
+ local dict, anim =
+ "weapons@first_person@aim_rng@generic@projectile@sticky_bomb@", "plant_floor"
+ ESX.Streaming.RequestAnimDict(dict)
+ TaskPlayAnim(
+ ESX.PlayerData.ped,
+ dict,
+ anim,
+ 8.0,
+ 1.0,
+ 1000,
+ 16,
+ 0.0,
+ false,
+ false,
+ false
+ )
+ RemoveAnimDict(dict)
+ Wait(1000)
+
+ TriggerServerEvent("esx:onPickup", pickupId)
+ PlaySoundFrontend(-1, "PICK_UP", "HUD_FRONTEND_DEFAULT_SOUNDSET", false)
+ end
+ end
+
+ label = ("%s~n~%s"):format(label, TranslateCap("threw_pickup_prompt"))
+ end
+
+ ESX.Game.Utils.DrawText3D({
+ x = pickup.coords.x,
+ y = pickup.coords.y,
+ z = pickup.coords.z + 0.25,
+ }, label, 1.2, 1)
+ elseif pickup.inRange then
+ pickup.inRange = false
+ end
+ end
+ Wait(Sleep)
+ end
+ end)
+end
+
+----- Admin commands from esx_adminplus
+
RegisterNetEvent("esx:tpm")
AddEventHandler("esx:tpm", function()
local GetEntityCoords = GetEntityCoords
@@ -419,112 +582,169 @@ AddEventHandler("esx:tpm", function()
local GetVehiclePedIsIn = GetVehiclePedIsIn
ESX.TriggerServerCallback("esx:isUserAdmin", function(admin)
- if admin then
- local blipMarker = GetFirstBlipInfoId(8)
- if not DoesBlipExist(blipMarker) then
- ESX.ShowNotification(_U("nowaipoint"), true, false, 140)
- return "marker"
- end
+ if not admin then
+ return
+ end
+ local blipMarker = GetFirstBlipInfoId(8)
+ if not DoesBlipExist(blipMarker) then
+ ESX.ShowNotification(TranslateCap("tpm_nowaypoint"), true, false, 140)
+ return "marker"
+ end
- -- Fade screen to hide how clients get teleported.
- DoScreenFadeOut(650)
- while not IsScreenFadedOut() do
- Wait(0)
- end
+ -- Fade screen to hide how clients get teleported.
+ DoScreenFadeOut(650)
+ while not IsScreenFadedOut() do
+ Wait(0)
+ end
- local ped, coords = ESX.PlayerData.ped, GetBlipInfoIdCoord(blipMarker)
- local vehicle = GetVehiclePedIsIn(ped, false)
- local oldCoords = GetEntityCoords(ped)
-
- -- Unpack coords instead of having to unpack them while iterating.
- -- 825.0 seems to be the max a player can reach while 0.0 being the lowest.
- local x, y, groundZ, Z_START = coords["x"], coords["y"], 850.0, 950.0
- local found = false
- if vehicle > 0 then
- FreezeEntityPosition(vehicle, true)
- else
- FreezeEntityPosition(ped, true)
- end
+ local ped, coords = ESX.PlayerData.ped, GetBlipInfoIdCoord(blipMarker)
+ local vehicle = GetVehiclePedIsIn(ped, false)
+ local oldCoords = GetEntityCoords(ped)
- for i = Z_START, 0, -25.0 do
- local z = i
- if (i % 2) ~= 0 then
- z = Z_START - i
- end
+ -- Unpack coords instead of having to unpack them while iterating.
+ -- 825.0 seems to be the max a player can reach while 0.0 being the lowest.
+ local x, y, groundZ, Z_START = coords["x"], coords["y"], 850.0, 950.0
+ local found = false
+ FreezeEntityPosition(vehicle > 0 and vehicle or ped, true)
- NewLoadSceneStart(x, y, z, x, y, z, 50.0, 0)
- local curTime = GetGameTimer()
- while IsNetworkLoadingScene() do
- if GetGameTimer() - curTime > 1000 then
- break
- end
- Wait(0)
- end
- NewLoadSceneStop()
- SetPedCoordsKeepVehicle(ped, x, y, z)
+ for i = Z_START, 0, -25.0 do
+ local z = i
+ if (i % 2) ~= 0 then
+ z = Z_START - i
+ end
- while not HasCollisionLoadedAroundEntity(ped) do
- RequestCollisionAtCoord(x, y, z)
- if GetGameTimer() - curTime > 1000 then
- break
- end
- Wait(0)
+ NewLoadSceneStart(x, y, z, x, y, z, 50.0, 0)
+ local curTime = GetGameTimer()
+ while IsNetworkLoadingScene() do
+ if GetGameTimer() - curTime > 1000 then
+ break
end
+ Wait(0)
+ end
+ NewLoadSceneStop()
+ SetPedCoordsKeepVehicle(ped, x, y, z)
- -- Get ground coord. As mentioned in the natives, this only works if the client is in render distance.
- found, groundZ = GetGroundZFor_3dCoord(x, y, z, false)
- if found then
- Wait(0)
- SetPedCoordsKeepVehicle(ped, x, y, groundZ)
+ while not HasCollisionLoadedAroundEntity(ped) do
+ RequestCollisionAtCoord(x, y, z)
+ if GetGameTimer() - curTime > 1000 then
break
end
Wait(0)
end
- -- Remove black screen once the loop has ended.
- DoScreenFadeIn(650)
- if vehicle > 0 then
- FreezeEntityPosition(vehicle, false)
- else
- FreezeEntityPosition(ped, false)
+ -- Get ground coord. As mentioned in the natives, this only works if the client is in render distance.
+ found, groundZ = GetGroundZFor_3dCoord(x, y, z, false)
+ if found then
+ Wait(0)
+ SetPedCoordsKeepVehicle(ped, x, y, groundZ)
+ break
end
+ Wait(0)
+ end
- if not found then
- -- If we can't find the coords, set the coords to the old ones.
- -- We don't unpack them before since they aren't in a loop and only called once.
- SetPedCoordsKeepVehicle(ped, oldCoords["x"], oldCoords["y"], oldCoords["z"] - 1.0)
- ESX.ShowNotification(_U("tpm_success"), true, false, 140)
- end
+ -- Remove black screen once the loop has ended.
+ DoScreenFadeIn(650)
+ FreezeEntityPosition(vehicle > 0 and vehicle or ped, false)
- -- If Z coord was found, set coords in found coords.
- SetPedCoordsKeepVehicle(ped, x, y, groundZ)
- ESX.ShowNotification(_U("tpm_success"), true, false, 140)
+ if not found then
+ -- If we can't find the coords, set the coords to the old ones.
+ -- We don't unpack them before since they aren't in a loop and only called once.
+ SetPedCoordsKeepVehicle(ped, oldCoords["x"], oldCoords["y"], oldCoords["z"] - 1.0)
+ ESX.ShowNotification(TranslateCap("tpm_success"), true, false, 140)
end
+
+ -- If Z coord was found, set coords in found coords.
+ SetPedCoordsKeepVehicle(ped, x, y, groundZ)
+ ESX.ShowNotification(TranslateCap("tpm_success"), true, false, 140)
end)
end)
-RegisterNetEvent("esx:repairPedVehicle")
-AddEventHandler("esx:repairPedVehicle", function()
- local GetVehiclePedIsIn = GetVehiclePedIsIn
+local noclip = false
+local noclip_pos = vector3(0, 0, 70)
+local heading = 0
+local function noclipThread()
+ while noclip do
+ SetEntityCoordsNoOffset(ESX.PlayerData.ped, noclip_pos.x, noclip_pos.y, noclip_pos.z, 0, 0, 0)
+
+ if IsControlPressed(1, 34) then
+ heading = heading + 1.5
+ if heading > 360 then
+ heading = 0
+ end
+
+ SetEntityHeading(ESX.PlayerData.ped, heading)
+ end
+
+ if IsControlPressed(1, 9) then
+ heading = heading - 1.5
+ if heading < 0 then
+ heading = 360
+ end
+
+ SetEntityHeading(ESX.PlayerData.ped, heading)
+ end
+
+ if IsControlPressed(1, 8) then
+ noclip_pos = GetOffsetFromEntityInWorldCoords(ESX.PlayerData.ped, 0.0, 1.0, 0.0)
+ end
+
+ if IsControlPressed(1, 32) then
+ noclip_pos = GetOffsetFromEntityInWorldCoords(ESX.PlayerData.ped, 0.0, -1.0, 0.0)
+ end
+
+ if IsControlPressed(1, 27) then
+ noclip_pos = GetOffsetFromEntityInWorldCoords(ESX.PlayerData.ped, 0.0, 0.0, 1.0)
+ end
+
+ if IsControlPressed(1, 173) then
+ noclip_pos = GetOffsetFromEntityInWorldCoords(ESX.PlayerData.ped, 0.0, 0.0, -1.0)
+ end
+ Wait(0)
+ end
+end
+
+RegisterNetEvent("esx:noclip")
+AddEventHandler("esx:noclip", function()
ESX.TriggerServerCallback("esx:isUserAdmin", function(admin)
if not admin then
return
end
- local ped = ESX.PlayerData.ped
- if IsPedInAnyVehicle(ped, false) then
- local vehicle = GetVehiclePedIsIn(ped, false)
- SetVehicleEngineHealth(vehicle, 1000)
- SetVehicleEngineOn(vehicle, true, true)
- SetVehicleFixed(vehicle)
- SetVehicleDirtLevel(vehicle, 0)
- ESX.ShowNotification(_U("command_repair_success"), true, false, 140)
- else
- ESX.ShowNotification(_U("not_in_vehicle"), true, false, 140)
+
+ if not noclip then
+ noclip_pos = GetEntityCoords(ESX.PlayerData.ped, false)
+ heading = GetEntityHeading(ESX.PlayerData.ped)
end
+
+ noclip = not noclip
+ if noclip then
+ CreateThread(noclipThread)
+ end
+
+ ESX.ShowNotification(
+ TranslateCap("noclip_message", noclip and Translate("enabled") or Translate("disabled")),
+ true,
+ false,
+ 140
+ )
end)
end)
+RegisterNetEvent("esx:killPlayer")
+AddEventHandler("esx:killPlayer", function()
+ SetEntityHealth(ESX.PlayerData.ped, 0)
+end)
+
+RegisterNetEvent("esx:repairPedVehicle")
+AddEventHandler("esx:repairPedVehicle", function()
+ local ped = ESX.PlayerData.ped
+ local vehicle = GetVehiclePedIsIn(ped, false)
+ SetVehicleEngineHealth(vehicle, 1000)
+ SetVehicleEngineOn(vehicle, true, true)
+ SetVehicleFixed(vehicle)
+ SetVehicleDirtLevel(vehicle, 0)
+end)
+
RegisterNetEvent("esx:freezePlayer")
AddEventHandler("esx:freezePlayer", function(input)
local player = PlayerId()
@@ -539,48 +759,10 @@ AddEventHandler("esx:freezePlayer", function(input)
end
end)
-RegisterNetEvent("esx:GetVehicleType", function(Model, Request)
- local ReturnedType = "automobile"
- local IsValidModel = IsModelInCdimage(Model)
- if IsValidModel == true or IsValidModel == 1 then
- local VehicleType = GetVehicleClassFromName(Model)
-
- if VehicleType == 15 then
- ReturnedType = "heli"
- elseif VehicleType == 16 then
- ReturnedType = "plane"
- elseif VehicleType == 14 then
- ReturnedType = "boat"
- elseif VehicleType == 11 then
- ReturnedType = "trailer"
- elseif VehicleType == 21 then
- ReturnedType = "train"
- elseif VehicleType == 13 or VehicleType == 8 then
- ReturnedType = "bike"
- end
- if Model == `submersible` or Model == `submersible2` then
- ReturnedType = "submarine"
- end
- else
- ReturnedType = false
- end
- TriggerServerEvent("esx:ReturnVehicleType", ReturnedType, Request)
+ESX.RegisterClientCallback("esx:GetVehicleType", function(cb, model)
+ cb(ESX.GetVehicleType(model))
end)
-local DoNotUse = {
- "essentialmode",
- "es_admin2",
- "basic-gamemode",
- "mapmanager",
- "fivem-map-skater",
- "fivem-map-hipster",
- "qb-core",
- "default_spawnpoint",
- "ox_core",
-}
-
-for i = 1, #DoNotUse do
- if GetResourceState(DoNotUse[i]) == "started" or GetResourceState(DoNotUse[i]) == "starting" then
- print("[^1ERROR^7] YOU ARE USING A RESOURCE THAT WILL BREAK ^1ESX^7, PLEASE REMOVE ^5" .. DoNotUse[i] .. "^7")
- end
-end
+AddStateBagChangeHandler("metadata", "player:" .. tostring(GetPlayerServerId(PlayerId())), function(_, key, val)
+ ESX.SetPlayerData(key, val)
+end)
diff --git a/server-data/resources/[esx]/es_extended/client/modules/actions.lua b/server-data/resources/[esx]/es_extended/client/modules/actions.lua
new file mode 100644
index 000000000..de94e476b
--- /dev/null
+++ b/server-data/resources/[esx]/es_extended/client/modules/actions.lua
@@ -0,0 +1,170 @@
+local isInVehicle, isEnteringVehicle, isJumping, inPauseMenu = false, false, false, false
+local playerPed = PlayerPedId()
+local current = {}
+
+local function GetPedVehicleSeat(ped, vehicle)
+ for i = -1, 16 do
+ if GetPedInVehicleSeat(vehicle, i) == ped then
+ return i
+ end
+ end
+ return -1
+end
+
+local function GetData(vehicle)
+ if not DoesEntityExist(vehicle) then
+ return
+ end
+ local model = GetEntityModel(vehicle)
+ local displayName = GetDisplayNameFromVehicleModel(model)
+ local netId = vehicle
+ if NetworkGetEntityIsNetworked(vehicle) then
+ netId = VehToNet(vehicle)
+ end
+ return displayName, netId
+end
+
+CreateThread(function()
+ while not ESX.PlayerLoaded do
+ Wait(200)
+ end
+ while true do
+ ESX.SetPlayerData("coords", GetEntityCoords(playerPed))
+ if playerPed ~= PlayerPedId() then
+ playerPed = PlayerPedId()
+ ESX.SetPlayerData("ped", playerPed)
+ TriggerEvent("esx:playerPedChanged", playerPed)
+ TriggerServerEvent("esx:playerPedChanged", PedToNet(playerPed))
+ if Config.DisableHealthRegeneration then
+ SetPlayerHealthRechargeMultiplier(PlayerId(), 0.0)
+ end
+ end
+
+ if IsPedJumping(playerPed) and not isJumping then
+ isJumping = true
+ TriggerEvent("esx:playerJumping")
+ TriggerServerEvent("esx:playerJumping")
+ elseif not IsPedJumping(playerPed) and isJumping then
+ isJumping = false
+ end
+
+ if IsPauseMenuActive() and not inPauseMenu then
+ inPauseMenu = true
+ TriggerEvent("esx:pauseMenuActive", inPauseMenu)
+ elseif not IsPauseMenuActive() and inPauseMenu then
+ inPauseMenu = false
+ TriggerEvent("esx:pauseMenuActive", inPauseMenu)
+ end
+
+ if not isInVehicle and not IsPlayerDead(PlayerId()) then
+ if DoesEntityExist(GetVehiclePedIsTryingToEnter(playerPed)) and not isEnteringVehicle then
+ -- trying to enter a vehicle!
+ local vehicle = GetVehiclePedIsTryingToEnter(playerPed)
+ local plate = GetVehicleNumberPlateText(vehicle)
+ local seat = GetSeatPedIsTryingToEnter(playerPed)
+ local _, netId = GetData(vehicle)
+ isEnteringVehicle = true
+ TriggerEvent("esx:enteringVehicle", vehicle, plate, seat, netId)
+ TriggerServerEvent("esx:enteringVehicle", plate, seat, netId)
+ elseif
+ not DoesEntityExist(GetVehiclePedIsTryingToEnter(playerPed))
+ and not IsPedInAnyVehicle(playerPed, true)
+ and isEnteringVehicle
+ then
+ -- vehicle entering aborted
+ TriggerEvent("esx:enteringVehicleAborted")
+ TriggerServerEvent("esx:enteringVehicleAborted")
+ isEnteringVehicle = false
+ elseif IsPedInAnyVehicle(playerPed, false) then
+ -- suddenly appeared in a vehicle, possible teleport
+ isEnteringVehicle = false
+ isInVehicle = true
+ current.vehicle = GetVehiclePedIsUsing(playerPed)
+ current.seat = GetPedVehicleSeat(playerPed, current.vehicle)
+ current.plate = GetVehicleNumberPlateText(current.vehicle)
+ current.displayName, current.netId = GetData(current.vehicle)
+ TriggerEvent(
+ "esx:enteredVehicle",
+ current.vehicle,
+ current.plate,
+ current.seat,
+ current.displayName,
+ current.netId
+ )
+ TriggerServerEvent(
+ "esx:enteredVehicle",
+ current.plate,
+ current.seat,
+ current.displayName,
+ current.netId
+ )
+ end
+ elseif isInVehicle then
+ if not IsPedInAnyVehicle(playerPed, false) or IsPlayerDead(PlayerId()) then
+ -- bye, vehicle
+ TriggerEvent(
+ "esx:exitedVehicle",
+ current.vehicle,
+ current.plate,
+ current.seat,
+ current.displayName,
+ current.netId
+ )
+ TriggerServerEvent("esx:exitedVehicle", current.plate, current.seat, current.displayName, current.netId)
+ isInVehicle = false
+ current = {}
+ end
+ end
+ Wait(200)
+ end
+end)
+
+if Config.EnableDebug then
+ AddEventHandler("esx:playerPedChanged", function(netId)
+ print("esx:playerPedChanged", netId)
+ end)
+
+ AddEventHandler("esx:playerJumping", function()
+ print("esx:playerJumping")
+ end)
+
+ AddEventHandler("esx:enteringVehicle", function(vehicle, plate, seat, netId)
+ print("esx:enteringVehicle", "vehicle", vehicle, "plate", plate, "seat", seat, "netId", netId)
+ end)
+
+ AddEventHandler("esx:enteringVehicleAborted", function()
+ print("esx:enteringVehicleAborted")
+ end)
+
+ AddEventHandler("esx:enteredVehicle", function(vehicle, plate, seat, displayName, netId)
+ print(
+ "esx:enteredVehicle",
+ "vehicle",
+ vehicle,
+ "plate",
+ plate,
+ "seat",
+ seat,
+ "displayName",
+ displayName,
+ "netId",
+ netId
+ )
+ end)
+
+ AddEventHandler("esx:exitedVehicle", function(vehicle, plate, seat, displayName, netId)
+ print(
+ "esx:exitedVehicle",
+ "vehicle",
+ vehicle,
+ "plate",
+ plate,
+ "seat",
+ seat,
+ "displayName",
+ displayName,
+ "netId",
+ netId
+ )
+ end)
+end
diff --git a/server-data/resources/[esx]/es_extended/client/modules/callback.lua b/server-data/resources/[esx]/es_extended/client/modules/callback.lua
new file mode 100644
index 000000000..c77000786
--- /dev/null
+++ b/server-data/resources/[esx]/es_extended/client/modules/callback.lua
@@ -0,0 +1,50 @@
+local RequestId = 0
+local serverRequests = {}
+
+local clientCallbacks = {}
+
+---@param eventName string
+---@param callback function
+---@param ... any
+ESX.TriggerServerCallback = function(eventName, callback, ...)
+ serverRequests[RequestId] = callback
+
+ TriggerServerEvent("esx:triggerServerCallback", eventName, RequestId, GetInvokingResource() or "unknown", ...)
+
+ RequestId = RequestId + 1
+end
+
+RegisterNetEvent("esx:serverCallback", function(requestId, invoker, ...)
+ if not serverRequests[requestId] then
+ return print(
+ ("[^1ERROR^7] Server Callback with requestId ^5%s^7 Was Called by ^5%s^7 but does not exist."):format(
+ requestId,
+ invoker
+ )
+ )
+ end
+
+ serverRequests[requestId](...)
+ serverRequests[requestId] = nil
+end)
+
+---@param eventName string
+---@param callback function
+ESX.RegisterClientCallback = function(eventName, callback)
+ clientCallbacks[eventName] = callback
+end
+
+RegisterNetEvent("esx:triggerClientCallback", function(eventName, requestId, invoker, ...)
+ if not clientCallbacks[eventName] then
+ return print(
+ ("[^1ERROR^7] Client Callback not registered, name: ^5%s^7, invoker resource: ^5%s^7"):format(
+ eventName,
+ invoker
+ )
+ )
+ end
+
+ clientCallbacks[eventName](function(...)
+ TriggerServerEvent("esx:clientCallback", requestId, invoker, ...)
+ end, ...)
+end)
diff --git a/server-data/resources/[esx]/es_extended/client/modules/npwd.lua b/server-data/resources/[esx]/es_extended/client/modules/npwd.lua
new file mode 100644
index 000000000..ddbe3b5b8
--- /dev/null
+++ b/server-data/resources/[esx]/es_extended/client/modules/npwd.lua
@@ -0,0 +1,57 @@
+local npwd = GetResourceState("npwd"):find("start") and exports.npwd or nil
+
+local function checkPhone()
+ if not npwd then
+ return
+ end
+
+ local phoneItem = ESX.SearchInventory("phone")
+ npwd:setPhoneDisabled((phoneItem and phoneItem.count or 0) <= 0)
+end
+
+RegisterNetEvent("esx:playerLoaded", checkPhone)
+
+AddEventHandler("onClientResourceStart", function(resource)
+ if resource ~= "npwd" then
+ return
+ end
+
+ npwd = GetResourceState("npwd"):find("start") and exports.npwd or nil
+
+ if ESX.PlayerLoaded then
+ checkPhone()
+ end
+end)
+
+AddEventHandler("onClientResourceStop", function(resource)
+ if resource == "npwd" then
+ npwd = nil
+ end
+end)
+
+RegisterNetEvent("esx:onPlayerLogout", function()
+ if not npwd then
+ return
+ end
+
+ npwd:setPhoneVisible(false)
+ npwd:setPhoneDisabled(true)
+end)
+
+RegisterNetEvent("esx:removeInventoryItem", function(item, count)
+ if not npwd then
+ return
+ end
+
+ if item == "phone" and count == 0 then
+ npwd:setPhoneDisabled(true)
+ end
+end)
+
+RegisterNetEvent("esx:addInventoryItem", function(item)
+ if not npwd or item ~= "phone" then
+ return
+ end
+
+ npwd:setPhoneDisabled(false)
+end)
diff --git a/server-data/resources/[esx]/es_extended/common/functions.lua b/server-data/resources/[esx]/es_extended/common/functions.lua
index 043396239..d3478f7f6 100644
--- a/server-data/resources/[esx]/es_extended/common/functions.lua
+++ b/server-data/resources/[esx]/es_extended/common/functions.lua
@@ -1,9 +1,13 @@
local Charset = {}
-for _, range in ipairs({ { 48, 57 }, { 65, 90 }, { 97, 122 } }) do
- for i = range[1], range[2] do
- Charset[#Charset + 1] = string.char(i)
- end
+for i = 48, 57 do
+ table.insert(Charset, string.char(i))
+end
+for i = 65, 90 do
+ table.insert(Charset, string.char(i))
+end
+for i = 97, 122 do
+ table.insert(Charset, string.char(i))
end
local weaponsByName = {}
diff --git a/server-data/resources/[esx]/es_extended/common/modules/math.lua b/server-data/resources/[esx]/es_extended/common/modules/math.lua
index 4e2c71159..e620d48a9 100644
--- a/server-data/resources/[esx]/es_extended/common/modules/math.lua
+++ b/server-data/resources/[esx]/es_extended/common/modules/math.lua
@@ -13,7 +13,9 @@ end
function ESX.Math.GroupDigits(value)
local left, num, right = string.match(value, "^([^%d]*%d)(%d*)(.-)$")
- return left .. (num:reverse():gsub("(%d%d%d)", "%1" .. _U("locale_digit_grouping_symbol")):reverse()) .. right
+ return left
+ .. (num:reverse():gsub("(%d%d%d)", "%1" .. TranslateCap("locale_digit_grouping_symbol")):reverse())
+ .. right
end
function ESX.Math.Trim(value)
diff --git a/server-data/resources/[esx]/es_extended/common/modules/table.lua b/server-data/resources/[esx]/es_extended/common/modules/table.lua
index 7aac3ca40..957cb68c8 100644
--- a/server-data/resources/[esx]/es_extended/common/modules/table.lua
+++ b/server-data/resources/[esx]/es_extended/common/modules/table.lua
@@ -136,6 +136,25 @@ function ESX.Table.Join(t, sep)
return str
end
+-- Credits: https://github.com/JonasDev99/qb-garages/blob/b0335d67cb72a6b9ac60f62a87fb3946f5c2f33d/server/main.lua#L5
+function ESX.Table.TableContains(tab, val)
+ if type(val) == "table" then
+ for _, value in pairs(tab) do
+ if ESX.Table.TableContains(val, value) then
+ return true
+ end
+ end
+ return false
+ else
+ for _, value in pairs(tab) do
+ if value == val then
+ return true
+ end
+ end
+ end
+ return false
+end
+
-- Credit: https://stackoverflow.com/a/15706820
-- Description: sort function for pairs
function ESX.Table.Sort(t, order)
diff --git a/server-data/resources/[esx]/es_extended/common/modules/timeout.lua b/server-data/resources/[esx]/es_extended/common/modules/timeout.lua
new file mode 100644
index 000000000..814b086ce
--- /dev/null
+++ b/server-data/resources/[esx]/es_extended/common/modules/timeout.lua
@@ -0,0 +1,23 @@
+local TimeoutCount = 0
+local CancelledTimeouts = {}
+
+ESX.SetTimeout = function(msec, cb)
+ local id = TimeoutCount + 1
+
+ SetTimeout(msec, function()
+ if CancelledTimeouts[id] then
+ CancelledTimeouts[id] = nil
+ return
+ end
+
+ cb()
+ end)
+
+ TimeoutCount = id
+
+ return id
+end
+
+ESX.ClearTimeout = function(id)
+ CancelledTimeouts[id] = true
+end
diff --git a/server-data/resources/[esx]/es_extended/config.logs.lua b/server-data/resources/[esx]/es_extended/config.logs.lua
new file mode 100644
index 000000000..92cdfc3ae
--- /dev/null
+++ b/server-data/resources/[esx]/es_extended/config.logs.lua
@@ -0,0 +1,23 @@
+Config.DiscordLogs = {
+ Webhooks = {
+ default = "",
+ test = "",
+ Chat = "",
+ UserActions = "",
+ Resources = "",
+ Paycheck = "",
+ },
+
+ Colors = { -- https://www.spycolor.com/
+ default = 14423100,
+ blue = 255,
+ red = 16711680,
+ green = 65280,
+ white = 16777215,
+ black = 0,
+ orange = 16744192,
+ yellow = 16776960,
+ pink = 16761035,
+ lightgreen = 65309,
+ },
+}
diff --git a/server-data/resources/[esx]/es_extended/config.lua b/server-data/resources/[esx]/es_extended/config.lua
index 91013fca1..45b4c9fe7 100644
--- a/server-data/resources/[esx]/es_extended/config.lua
+++ b/server-data/resources/[esx]/es_extended/config.lua
@@ -1,64 +1,93 @@
Config = {}
-Config.Locale = "en"
+Config.Locale = GetConvar("esx:locale", "en")
+
+Config.OxInventory = GetResourceState("ox_inventory") ~= "missing"
Config.Accounts = {
bank = {
- label = _U("account_bank"),
+ label = TranslateCap("account_bank"),
round = true,
},
black_money = {
- label = _U("account_black_money"),
+ label = TranslateCap("account_black_money"),
round = true,
},
money = {
- label = _U("account_money"),
+ label = TranslateCap("account_money"),
round = true,
},
}
Config.StartingAccountMoney = { bank = 50000 }
-Config.EnableSocietyPayouts = true -- pay from the society account that the player is employed at? Requirement: esx_society
+
+Config.StartingInventoryItems = false -- table/false
+
+Config.DefaultSpawns =
+ { -- If you want to have more spawn positions and select them randomly uncomment commented code or add more locations
+ { x = 222.2027, y = -864.0162, z = 30.2922, heading = 1.0 },
+ --{x = 224.9865, y = -865.0871, z = 30.2922, heading = 1.0},
+ --{x = 227.8436, y = -866.0400, z = 30.2922, heading = 1.0},
+ --{x = 230.6051, y = -867.1450, z = 30.2922, heading = 1.0},
+ --{x = 233.5459, y = -868.2626, z = 30.2922, heading = 1.0}
+ }
+
+Config.AdminGroups = {
+ ["owner"] = true,
+ ["admin"] = true,
+}
+
+Config.EnablePaycheck = true -- enable paycheck
+Config.LogPaycheck = false -- Logs paychecks to a nominated Discord channel via webhook (default is false)
+Config.EnableSocietyPayouts = false -- pay from the society account that the player is employed at? Requirement: esx_society
Config.MaxWeight = 24 -- the max inventory weight without backpack
Config.PaycheckInterval = 7 * 60000 -- how often to recieve pay checks in milliseconds
Config.EnableDebug = false -- Use Debug options?
+Config.EnableDefaultInventory = true -- Display the default Inventory ( F2 )
Config.EnableWantedLevel = false -- Use Normal GTA wanted Level?
Config.EnablePVP = true -- Allow Player to player combat
-Config.Multichar = true -- Enable support for esx_multicharacter
+
+Config.Multichar = GetResourceState("esx_multicharacter") ~= "missing"
Config.Identity = true -- Select a characters identity data before they have loaded in (this happens by default with multichar)
Config.DistanceGive = 4.0 -- Max distance when giving items, weapons etc.
+
+Config.AdminLogging = false -- Logs the usage of certain commands by those with group.admin ace permissions (default is false)
+
Config.DisableHealthRegeneration = false -- Player will no longer regenerate health
Config.DisableVehicleRewards = false -- Disables Player Recieving weapons from vehicles
-Config.DisableNPCDrops = true -- stops NPCs from dropping weapons on death
+Config.DisableNPCDrops = false -- stops NPCs from dropping weapons on death
+Config.DisableDispatchServices = false -- Disable Dispatch services
+Config.DisableScenarios = false -- Disable Scenarios
Config.DisableWeaponWheel = false -- Disables default weapon wheel
Config.DisableAimAssist = false -- disables AIM assist (mainly on controllers)
+Config.DisableVehicleSeatShuff = false -- Disables vehicle seat shuff
Config.DisableDisplayAmmo = false -- Disable ammunition display
Config.RemoveHudComponents = {
- [1] = false, -- WANTED_STARS,
- [2] = false, -- WEAPON_ICON
- [3] = false, -- CASH
- [4] = false, -- MP_CASH
- [5] = false, -- MP_MESSAGE
- [6] = false, -- VEHICLE_NAME
+ [1] = false, --WANTED_STARS,
+ [2] = false, --WEAPON_ICON
+ [3] = false, --CASH
+ [4] = false, --MP_CASH
+ [5] = false, --MP_MESSAGE
+ [6] = false, --VEHICLE_NAME
[7] = false, -- AREA_NAME
[8] = false, -- VEHICLE_CLASS
- [9] = false, -- STREET_NAME
- [10] = false, -- HELP_TEXT
- [11] = false, -- FLOATING_HELP_TEXT_1
- [12] = false, -- FLOATING_HELP_TEXT_2
- [13] = false, -- CASH_CHANGE
- [14] = false, -- RETICLE
- [15] = false, -- SUBTITLE_TEXT
- [16] = false, -- RADIO_STATIONS
- [17] = false, -- SAVING_GAME,
- [18] = false, -- GAME_STREAM
- [19] = false, -- WEAPON_WHEEL
- [20] = false, -- WEAPON_WHEEL_STATS
- [21] = false, -- HUD_COMPONENTS
- [22] = false, -- HUD_WEAPONS
+ [9] = false, --STREET_NAME
+ [10] = false, --HELP_TEXT
+ [11] = false, --FLOATING_HELP_TEXT_1
+ [12] = false, --FLOATING_HELP_TEXT_2
+ [13] = false, --CASH_CHANGE
+ [14] = false, --RETICLE
+ [15] = false, --SUBTITLE_TEXT
+ [16] = false, --RADIO_STATIONS
+ [17] = false, --SAVING_GAME,
+ [18] = false, --GAME_STREAM
+ [19] = false, --WEAPON_WHEEL
+ [20] = false, --WEAPON_WHEEL_STATS
+ [21] = false, --HUD_COMPONENTS
+ [22] = false, --HUD_WEAPONS
}
-Config.MaxAdminVehicles = true -- admin vehicles spawn with max vehcle settings
-Config.CustomAIPlates = "BPT.A111" -- Custom plates for AI vehicles
+Config.SpawnVehMaxUpgrades = true -- admin vehicles spawn with max vehcle settings
+Config.CustomAIPlates = "........" -- Custom plates for AI vehicles
-- Pattern string format
--1 will lead to a random number from 0-9.
--A will lead to a random letter from A-Z.
diff --git a/server-data/resources/[esx]/es_extended/config.weapons.lua b/server-data/resources/[esx]/es_extended/config.weapons.lua
index ea4d5bfbf..0dbdb5203 100644
--- a/server-data/resources/[esx]/es_extended/config.weapons.lua
+++ b/server-data/resources/[esx]/es_extended/config.weapons.lua
@@ -1,76 +1,104 @@
Config.DefaultWeaponTints = {
- [0] = _U("tint_default"),
- [1] = _U("tint_green"),
- [2] = _U("tint_gold"),
- [3] = _U("tint_pink"),
- [4] = _U("tint_army"),
- [5] = _U("tint_lspd"),
- [6] = _U("tint_orange"),
- [7] = _U("tint_platinum"),
+ [0] = TranslateCap("tint_default"),
+ [1] = TranslateCap("tint_green"),
+ [2] = TranslateCap("tint_gold"),
+ [3] = TranslateCap("tint_pink"),
+ [4] = TranslateCap("tint_army"),
+ [5] = TranslateCap("tint_lspd"),
+ [6] = TranslateCap("tint_orange"),
+ [7] = TranslateCap("tint_platinum"),
}
Config.Weapons = {
-- Melee
- { name = "WEAPON_DAGGER", label = _U("weapon_dagger"), components = {} },
- { name = "WEAPON_BAT", label = _U("weapon_bat"), components = {} },
- { name = "WEAPON_BATTLEAXE", label = _U("weapon_battleaxe"), components = {} },
+ { name = "WEAPON_DAGGER", label = TranslateCap("weapon_dagger"), components = {} },
+ { name = "WEAPON_BAT", label = TranslateCap("weapon_bat"), components = {} },
+ { name = "WEAPON_BATTLEAXE", label = TranslateCap("weapon_battleaxe"), components = {} },
{
name = "WEAPON_KNUCKLE",
- label = _U("weapon_knuckle"),
+ label = TranslateCap("weapon_knuckle"),
components = {
- { name = "knuckle_base", label = _U("component_knuckle_base"), hash = `COMPONENT_KNUCKLE_VARMOD_BASE` },
- { name = "knuckle_pimp", label = _U("component_knuckle_pimp"), hash = `COMPONENT_KNUCKLE_VARMOD_PIMP` },
+ {
+ name = "knuckle_base",
+ label = TranslateCap("component_knuckle_base"),
+ hash = `COMPONENT_KNUCKLE_VARMOD_BASE`,
+ },
+ {
+ name = "knuckle_pimp",
+ label = TranslateCap("component_knuckle_pimp"),
+ hash = `COMPONENT_KNUCKLE_VARMOD_PIMP`,
+ },
{
name = "knuckle_ballas",
- label = _U("component_knuckle_ballas"),
+ label = TranslateCap("component_knuckle_ballas"),
hash = `COMPONENT_KNUCKLE_VARMOD_BALLAS`,
},
{
name = "knuckle_dollar",
- label = _U("component_knuckle_dollar"),
+ label = TranslateCap("component_knuckle_dollar"),
hash = `COMPONENT_KNUCKLE_VARMOD_DOLLAR`,
},
{
name = "knuckle_diamond",
- label = _U("component_knuckle_diamond"),
+ label = TranslateCap("component_knuckle_diamond"),
hash = `COMPONENT_KNUCKLE_VARMOD_DIAMOND`,
},
- { name = "knuckle_hate", label = _U("component_knuckle_hate"), hash = `COMPONENT_KNUCKLE_VARMOD_HATE` },
- { name = "knuckle_love", label = _U("component_knuckle_love"), hash = `COMPONENT_KNUCKLE_VARMOD_LOVE` },
+ {
+ name = "knuckle_hate",
+ label = TranslateCap("component_knuckle_hate"),
+ hash = `COMPONENT_KNUCKLE_VARMOD_HATE`,
+ },
+ {
+ name = "knuckle_love",
+ label = TranslateCap("component_knuckle_love"),
+ hash = `COMPONENT_KNUCKLE_VARMOD_LOVE`,
+ },
{
name = "knuckle_player",
- label = _U("component_knuckle_player"),
+ label = TranslateCap("component_knuckle_player"),
hash = `COMPONENT_KNUCKLE_VARMOD_PLAYER`,
},
- { name = "knuckle_king", label = _U("component_knuckle_king"), hash = `COMPONENT_KNUCKLE_VARMOD_KING` },
- { name = "knuckle_vagos", label = _U("component_knuckle_vagos"), hash = `COMPONENT_KNUCKLE_VARMOD_VAGOS` },
+ {
+ name = "knuckle_king",
+ label = TranslateCap("component_knuckle_king"),
+ hash = `COMPONENT_KNUCKLE_VARMOD_KING`,
+ },
+ {
+ name = "knuckle_vagos",
+ label = TranslateCap("component_knuckle_vagos"),
+ hash = `COMPONENT_KNUCKLE_VARMOD_VAGOS`,
+ },
},
},
- { name = "WEAPON_BOTTLE", label = _U("weapon_bottle"), components = {} },
- { name = "WEAPON_CROWBAR", label = _U("weapon_crowbar"), components = {} },
- { name = "WEAPON_FLASHLIGHT", label = _U("weapon_flashlight"), components = {} },
- { name = "WEAPON_GOLFCLUB", label = _U("weapon_golfclub"), components = {} },
- { name = "WEAPON_HAMMER", label = _U("weapon_hammer"), components = {} },
- { name = "WEAPON_HATCHET", label = _U("weapon_hatchet"), components = {} },
- { name = "WEAPON_KNIFE", label = _U("weapon_knife"), components = {} },
- { name = "WEAPON_MACHETE", label = _U("weapon_machete"), components = {} },
- { name = "WEAPON_NIGHTSTICK", label = _U("weapon_nightstick"), components = {} },
- { name = "WEAPON_WRENCH", label = _U("weapon_wrench"), components = {} },
- { name = "WEAPON_POOLCUE", label = _U("weapon_poolcue"), components = {} },
- { name = "WEAPON_STONE_HATCHET", label = _U("weapon_stone_hatchet"), components = {} },
+ { name = "WEAPON_BOTTLE", label = TranslateCap("weapon_bottle"), components = {} },
+ { name = "WEAPON_CROWBAR", label = TranslateCap("weapon_crowbar"), components = {} },
+ { name = "WEAPON_FLASHLIGHT", label = TranslateCap("weapon_flashlight"), components = {} },
+ { name = "WEAPON_GOLFCLUB", label = TranslateCap("weapon_golfclub"), components = {} },
+ { name = "WEAPON_HAMMER", label = TranslateCap("weapon_hammer"), components = {} },
+ { name = "WEAPON_HATCHET", label = TranslateCap("weapon_hatchet"), components = {} },
+ { name = "WEAPON_KNIFE", label = TranslateCap("weapon_knife"), components = {} },
+ { name = "WEAPON_MACHETE", label = TranslateCap("weapon_machete"), components = {} },
+ { name = "WEAPON_NIGHTSTICK", label = TranslateCap("weapon_nightstick"), components = {} },
+ { name = "WEAPON_WRENCH", label = TranslateCap("weapon_wrench"), components = {} },
+ { name = "WEAPON_POOLCUE", label = TranslateCap("weapon_poolcue"), components = {} },
+ { name = "WEAPON_STONE_HATCHET", label = TranslateCap("weapon_stone_hatchet"), components = {} },
{
name = "WEAPON_SWITCHBLADE",
- label = _U("weapon_switchblade"),
+ label = TranslateCap("weapon_switchblade"),
components = {
{
name = "handle_default",
- label = _U("component_handle_default"),
+ label = TranslateCap("component_handle_default"),
hash = `COMPONENT_SWITCHBLADE_VARMOD_BASE`,
},
- { name = "handle_vip", label = _U("component_handle_vip"), hash = `COMPONENT_SWITCHBLADE_VARMOD_VAR1` },
+ {
+ name = "handle_vip",
+ label = TranslateCap("component_handle_vip"),
+ hash = `COMPONENT_SWITCHBLADE_VARMOD_VAR1`,
+ },
{
name = "handle_bodyguard",
- label = _U("component_handle_bodyguard"),
+ label = TranslateCap("component_handle_bodyguard"),
hash = `COMPONENT_SWITCHBLADE_VARMOD_VAR2`,
},
},
@@ -78,550 +106,852 @@ Config.Weapons = {
-- Handguns
{
name = "WEAPON_APPISTOL",
- label = _U("weapon_appistol"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_PISTOL` },
+ label = TranslateCap("weapon_appistol"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_PISTOL` },
tints = Config.DefaultWeaponTints,
components = {
- { name = "clip_default", label = _U("component_clip_default"), hash = `COMPONENT_APPISTOL_CLIP_01` },
- { name = "clip_extended", label = _U("component_clip_extended"), hash = `COMPONENT_APPISTOL_CLIP_02` },
- { name = "flashlight", label = _U("component_flashlight"), hash = `COMPONENT_AT_PI_FLSH` },
- { name = "suppressor", label = _U("component_suppressor"), hash = `COMPONENT_AT_PI_SUPP` },
- { name = "luxary_finish", label = _U("component_luxary_finish"), hash = `COMPONENT_APPISTOL_VARMOD_LUXE` },
+ {
+ name = "clip_default",
+ label = TranslateCap("component_clip_default"),
+ hash = `COMPONENT_APPISTOL_CLIP_01`,
+ },
+ {
+ name = "clip_extended",
+ label = TranslateCap("component_clip_extended"),
+ hash = `COMPONENT_APPISTOL_CLIP_02`,
+ },
+ { name = "flashlight", label = TranslateCap("component_flashlight"), hash = `COMPONENT_AT_PI_FLSH` },
+ { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_PI_SUPP` },
+ {
+ name = "luxary_finish",
+ label = TranslateCap("component_luxary_finish"),
+ hash = `COMPONENT_APPISTOL_VARMOD_LUXE`,
+ },
},
},
{
name = "WEAPON_CERAMICPISTOL",
- label = _U("weapon_ceramicpistol"),
+ label = TranslateCap("weapon_ceramicpistol"),
tints = Config.DefaultWeaponTints,
components = {},
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_PISTOL` },
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_PISTOL` },
},
{
name = "WEAPON_COMBATPISTOL",
- label = _U("weapon_combatpistol"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_PISTOL` },
+ label = TranslateCap("weapon_combatpistol"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_PISTOL` },
tints = Config.DefaultWeaponTints,
components = {
- { name = "clip_default", label = _U("component_clip_default"), hash = `COMPONENT_COMBATPISTOL_CLIP_01` },
- { name = "clip_extended", label = _U("component_clip_extended"), hash = `COMPONENT_COMBATPISTOL_CLIP_02` },
- { name = "flashlight", label = _U("component_flashlight"), hash = `COMPONENT_AT_PI_FLSH` },
- { name = "suppressor", label = _U("component_suppressor"), hash = `COMPONENT_AT_PI_SUPP` },
+ {
+ name = "clip_default",
+ label = TranslateCap("component_clip_default"),
+ hash = `COMPONENT_COMBATPISTOL_CLIP_01`,
+ },
+ {
+ name = "clip_extended",
+ label = TranslateCap("component_clip_extended"),
+ hash = `COMPONENT_COMBATPISTOL_CLIP_02`,
+ },
+ { name = "flashlight", label = TranslateCap("component_flashlight"), hash = `COMPONENT_AT_PI_FLSH` },
+ { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_PI_SUPP` },
{
name = "luxary_finish",
- label = _U("component_luxary_finish"),
+ label = TranslateCap("component_luxary_finish"),
hash = `COMPONENT_COMBATPISTOL_VARMOD_LOWRIDER`,
},
},
},
{
name = "WEAPON_DOUBLEACTION",
- label = _U("weapon_doubleaction"),
+ label = TranslateCap("weapon_doubleaction"),
tints = Config.DefaultWeaponTints,
components = {},
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_PISTOL` },
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_PISTOL` },
},
{
name = "WEAPON_NAVYREVOLVER",
- label = _U("weapon_navyrevolver"),
+ label = TranslateCap("weapon_navyrevolver"),
tints = Config.DefaultWeaponTints,
components = {},
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_PISTOL` },
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_PISTOL` },
},
{
name = "WEAPON_FLAREGUN",
- label = _U("weapon_flaregun"),
+ label = TranslateCap("weapon_flaregun"),
tints = Config.DefaultWeaponTints,
components = {},
- ammo = { label = _U("ammo_flaregun"), hash = `AMMO_FLAREGUN` },
+ ammo = { label = TranslateCap("ammo_flaregun"), hash = `AMMO_FLAREGUN` },
},
{
name = "WEAPON_GADGETPISTOL",
- label = _U("weapon_gadgetpistol"),
+ label = TranslateCap("weapon_gadgetpistol"),
tints = Config.DefaultWeaponTints,
components = {},
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_PISTOL` },
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_PISTOL` },
},
{
name = "WEAPON_HEAVYPISTOL",
- label = _U("weapon_heavypistol"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_PISTOL` },
+ label = TranslateCap("weapon_heavypistol"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_PISTOL` },
tints = Config.DefaultWeaponTints,
components = {
- { name = "clip_default", label = _U("component_clip_default"), hash = `COMPONENT_HEAVYPISTOL_CLIP_01` },
- { name = "clip_extended", label = _U("component_clip_extended"), hash = `COMPONENT_HEAVYPISTOL_CLIP_02` },
- { name = "flashlight", label = _U("component_flashlight"), hash = `COMPONENT_AT_PI_FLSH` },
- { name = "suppressor", label = _U("component_suppressor"), hash = `COMPONENT_AT_PI_SUPP` },
+ {
+ name = "clip_default",
+ label = TranslateCap("component_clip_default"),
+ hash = `COMPONENT_HEAVYPISTOL_CLIP_01`,
+ },
+ {
+ name = "clip_extended",
+ label = TranslateCap("component_clip_extended"),
+ hash = `COMPONENT_HEAVYPISTOL_CLIP_02`,
+ },
+ { name = "flashlight", label = TranslateCap("component_flashlight"), hash = `COMPONENT_AT_PI_FLSH` },
+ { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_PI_SUPP` },
{
name = "luxary_finish",
- label = _U("component_luxary_finish"),
+ label = TranslateCap("component_luxary_finish"),
hash = `COMPONENT_HEAVYPISTOL_VARMOD_LUXE`,
},
},
},
{
name = "WEAPON_REVOLVER",
- label = _U("weapon_revolver"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_PISTOL` },
+ label = TranslateCap("weapon_revolver"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_PISTOL` },
tints = Config.DefaultWeaponTints,
components = {
- { name = "clip_default", label = _U("component_clip_default"), hash = `COMPONENT_REVOLVER_CLIP_01` },
- { name = "vip_finish", label = _U("component_vip_finish"), hash = `COMPONENT_REVOLVER_VARMOD_BOSS` },
+ {
+ name = "clip_default",
+ label = TranslateCap("component_clip_default"),
+ hash = `COMPONENT_REVOLVER_CLIP_01`,
+ },
+ {
+ name = "vip_finish",
+ label = TranslateCap("component_vip_finish"),
+ hash = `COMPONENT_REVOLVER_VARMOD_BOSS`,
+ },
{
name = "bodyguard_finish",
- label = _U("component_bodyguard_finish"),
+ label = TranslateCap("component_bodyguard_finish"),
hash = `COMPONENT_REVOLVER_VARMOD_GOON`,
},
},
},
{
name = "WEAPON_REVOLVER_MK2",
- label = _U("weapon_revolver_mk2"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_PISTOL` },
+ label = TranslateCap("weapon_revolver_mk2"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_PISTOL` },
tints = Config.DefaultWeaponTints,
components = {
- { name = "clip_default", label = _U("component_clip_default"), hash = `COMPONENT_REVOLVER_MK2_CLIP_01` },
- { name = "ammo_tracer", label = _U("component_ammo_tracer"), hash = `COMPONENT_REVOLVER_MK2_CLIP_TRACER` },
+ {
+ name = "clip_default",
+ label = TranslateCap("component_clip_default"),
+ hash = `COMPONENT_REVOLVER_MK2_CLIP_01`,
+ },
+ {
+ name = "ammo_tracer",
+ label = TranslateCap("component_ammo_tracer"),
+ hash = `COMPONENT_REVOLVER_MK2_CLIP_TRACER`,
+ },
{
name = "ammo_incendiary",
- label = _U("component_ammo_incendiary"),
+ label = TranslateCap("component_ammo_incendiary"),
hash = `COMPONENT_REVOLVER_MK2_CLIP_INCENDIARY`,
},
{
name = "ammo_hollowpoint",
- label = _U("component_ammo_hollowpoint"),
+ label = TranslateCap("component_ammo_hollowpoint"),
hash = `COMPONENT_REVOLVER_MK2_CLIP_HOLLOWPOINT`,
},
- { name = "ammo_fmj", label = _U("component_ammo_fmj"), hash = `COMPONENT_REVOLVER_MK2_CLIP_FMJ` },
- { name = "scope_holo", label = _U("component_scope_holo"), hash = `COMPONENT_AT_SIGHTS` },
- { name = "scope_small", label = _U("component_ammo_fmj"), hash = `COMPONENT_AT_SCOPE_MACRO_MK2` },
- { name = "flashlight", label = _U("component_flashlight"), hash = `COMPONENT_AT_PI_FLSH` },
- { name = "compensator", label = _U("component_compensator"), hash = `COMPONENT_AT_PI_COMP_03` },
- { name = "camo_finish", label = _U("component_camo_finish"), hash = `COMPONENT_REVOLVER_MK2_CAMO` },
- { name = "camo_finish2", label = _U("component_camo_finish2"), hash = `COMPONENT_REVOLVER_MK2_CAMO_02` },
- { name = "camo_finish3", label = _U("component_camo_finish3"), hash = `COMPONENT_REVOLVER_MK2_CAMO_03` },
- { name = "camo_finish4", label = _U("component_camo_finish4"), hash = `COMPONENT_REVOLVER_MK2_CAMO_04` },
- { name = "camo_finish5", label = _U("component_camo_finish5"), hash = `COMPONENT_REVOLVER_MK2_CAMO_05` },
- { name = "camo_finish6", label = _U("component_camo_finish6"), hash = `COMPONENT_REVOLVER_MK2_CAMO_06` },
- { name = "camo_finish7", label = _U("component_camo_finish7"), hash = `COMPONENT_REVOLVER_MK2_CAMO_07` },
- { name = "camo_finish8", label = _U("component_camo_finish8"), hash = `COMPONENT_REVOLVER_MK2_CAMO_08` },
- { name = "camo_finish9", label = _U("component_camo_finish9"), hash = `COMPONENT_REVOLVER_MK2_CAMO_09` },
- { name = "camo_finish10", label = _U("component_camo_finish10"), hash = `COMPONENT_REVOLVER_MK2_CAMO_10` },
+ { name = "ammo_fmj", label = TranslateCap("component_ammo_fmj"), hash = `COMPONENT_REVOLVER_MK2_CLIP_FMJ` },
+ { name = "scope_holo", label = TranslateCap("component_scope_holo"), hash = `COMPONENT_AT_SIGHTS` },
+ { name = "scope_small", label = TranslateCap("component_ammo_fmj"), hash = `COMPONENT_AT_SCOPE_MACRO_MK2` },
+ { name = "flashlight", label = TranslateCap("component_flashlight"), hash = `COMPONENT_AT_PI_FLSH` },
+ { name = "compensator", label = TranslateCap("component_compensator"), hash = `COMPONENT_AT_PI_COMP_03` },
+ {
+ name = "camo_finish",
+ label = TranslateCap("component_camo_finish"),
+ hash = `COMPONENT_REVOLVER_MK2_CAMO`,
+ },
+ {
+ name = "camo_finish2",
+ label = TranslateCap("component_camo_finish2"),
+ hash = `COMPONENT_REVOLVER_MK2_CAMO_02`,
+ },
+ {
+ name = "camo_finish3",
+ label = TranslateCap("component_camo_finish3"),
+ hash = `COMPONENT_REVOLVER_MK2_CAMO_03`,
+ },
+ {
+ name = "camo_finish4",
+ label = TranslateCap("component_camo_finish4"),
+ hash = `COMPONENT_REVOLVER_MK2_CAMO_04`,
+ },
+ {
+ name = "camo_finish5",
+ label = TranslateCap("component_camo_finish5"),
+ hash = `COMPONENT_REVOLVER_MK2_CAMO_05`,
+ },
+ {
+ name = "camo_finish6",
+ label = TranslateCap("component_camo_finish6"),
+ hash = `COMPONENT_REVOLVER_MK2_CAMO_06`,
+ },
+ {
+ name = "camo_finish7",
+ label = TranslateCap("component_camo_finish7"),
+ hash = `COMPONENT_REVOLVER_MK2_CAMO_07`,
+ },
+ {
+ name = "camo_finish8",
+ label = TranslateCap("component_camo_finish8"),
+ hash = `COMPONENT_REVOLVER_MK2_CAMO_08`,
+ },
+ {
+ name = "camo_finish9",
+ label = TranslateCap("component_camo_finish9"),
+ hash = `COMPONENT_REVOLVER_MK2_CAMO_09`,
+ },
+ {
+ name = "camo_finish10",
+ label = TranslateCap("component_camo_finish10"),
+ hash = `COMPONENT_REVOLVER_MK2_CAMO_10`,
+ },
{
name = "camo_finish11",
- label = _U("component_camo_finish11"),
+ label = TranslateCap("component_camo_finish11"),
hash = `COMPONENT_REVOLVER_MK2_CAMO_IND_01`,
},
},
},
{
name = "WEAPON_MARKSMANPISTOL",
- label = _U("weapon_marksmanpistol"),
+ label = TranslateCap("weapon_marksmanpistol"),
tints = Config.DefaultWeaponTints,
components = {},
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_PISTOL` },
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_PISTOL` },
},
{
name = "WEAPON_PISTOL",
- label = _U("weapon_pistol"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_PISTOL` },
+ label = TranslateCap("weapon_pistol"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_PISTOL` },
tints = Config.DefaultWeaponTints,
components = {
- { name = "clip_default", label = _U("component_clip_default"), hash = `COMPONENT_PISTOL_CLIP_01` },
- { name = "clip_extended", label = _U("component_clip_extended"), hash = `COMPONENT_PISTOL_CLIP_02` },
- { name = "flashlight", label = _U("component_flashlight"), hash = `COMPONENT_AT_PI_FLSH` },
- { name = "suppressor", label = _U("component_suppressor"), hash = `COMPONENT_AT_PI_SUPP_02` },
- { name = "luxary_finish", label = _U("component_luxary_finish"), hash = `COMPONENT_PISTOL_VARMOD_LUXE` },
+ {
+ name = "clip_default",
+ label = TranslateCap("component_clip_default"),
+ hash = `COMPONENT_PISTOL_CLIP_01`,
+ },
+ {
+ name = "clip_extended",
+ label = TranslateCap("component_clip_extended"),
+ hash = `COMPONENT_PISTOL_CLIP_02`,
+ },
+ { name = "flashlight", label = TranslateCap("component_flashlight"), hash = `COMPONENT_AT_PI_FLSH` },
+ { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_PI_SUPP_02` },
+ {
+ name = "luxary_finish",
+ label = TranslateCap("component_luxary_finish"),
+ hash = `COMPONENT_PISTOL_VARMOD_LUXE`,
+ },
},
},
{
name = "WEAPON_PISTOL_MK2",
- label = _U("weapon_pistol_mk2"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_PISTOL` },
+ label = TranslateCap("weapon_pistol_mk2"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_PISTOL` },
tints = Config.DefaultWeaponTints,
components = {
- { name = "clip_default", label = _U("component_clip_default"), hash = `COMPONENT_PISTOL_MK2_CLIP_01` },
- { name = "clip_extended", label = _U("component_clip_extended"), hash = `COMPONENT_PISTOL_MK2_CLIP_02` },
- { name = "ammo_tracer", label = _U("component_ammo_tracer"), hash = `COMPONENT_PISTOL_MK2_CLIP_TRACER` },
+ {
+ name = "clip_default",
+ label = TranslateCap("component_clip_default"),
+ hash = `COMPONENT_PISTOL_MK2_CLIP_01`,
+ },
+ {
+ name = "clip_extended",
+ label = TranslateCap("component_clip_extended"),
+ hash = `COMPONENT_PISTOL_MK2_CLIP_02`,
+ },
+ {
+ name = "ammo_tracer",
+ label = TranslateCap("component_ammo_tracer"),
+ hash = `COMPONENT_PISTOL_MK2_CLIP_TRACER`,
+ },
{
name = "ammo_incendiary",
- label = _U("component_ammo_incendiary"),
+ label = TranslateCap("component_ammo_incendiary"),
hash = `COMPONENT_PISTOL_MK2_CLIP_INCENDIARY`,
},
{
name = "ammo_hollowpoint",
- label = _U("component_ammo_hollowpoint"),
+ label = TranslateCap("component_ammo_hollowpoint"),
hash = `COMPONENT_PISTOL_MK2_CLIP_HOLLOWPOINT`,
},
- { name = "ammo_fmj", label = _U("component_ammo_fmj"), hash = `COMPONENT_PISTOL_MK2_CLIP_FMJ` },
- { name = "scope", label = _U("component_scope"), hash = `COMPONENT_AT_PI_RAIL` },
- { name = "flashlight", label = _U("component_flashlight"), hash = `COMPONENT_AT_PI_FLSH_02` },
- { name = "suppressor", label = _U("component_suppressor"), hash = `COMPONENT_AT_PI_SUPP_02` },
- { name = "compensator", label = _U("component_suppressor"), hash = `COMPONENT_AT_PI_COMP` },
- { name = "camo_finish", label = _U("component_camo_finish"), hash = `COMPONENT_PISTOL_MK2_CAMO` },
- { name = "camo_finish2", label = _U("component_camo_finish2"), hash = `COMPONENT_PISTOL_MK2_CAMO_02` },
- { name = "camo_finish3", label = _U("component_camo_finish3"), hash = `COMPONENT_PISTOL_MK2_CAMO_03` },
- { name = "camo_finish4", label = _U("component_camo_finish4"), hash = `COMPONENT_PISTOL_MK2_CAMO_04` },
- { name = "camo_finish5", label = _U("component_camo_finish5"), hash = `COMPONENT_PISTOL_MK2_CAMO_05` },
- { name = "camo_finish6", label = _U("component_camo_finish6"), hash = `COMPONENT_PISTOL_MK2_CAMO_06` },
- { name = "camo_finish7", label = _U("component_camo_finish7"), hash = `COMPONENT_PISTOL_MK2_CAMO_07` },
- { name = "camo_finish8", label = _U("component_camo_finish8"), hash = `COMPONENT_PISTOL_MK2_CAMO_08` },
- { name = "camo_finish9", label = _U("component_camo_finish9"), hash = `COMPONENT_PISTOL_MK2_CAMO_09` },
- { name = "camo_finish10", label = _U("component_camo_finish10"), hash = `COMPONENT_PISTOL_MK2_CAMO_10` },
+ { name = "ammo_fmj", label = TranslateCap("component_ammo_fmj"), hash = `COMPONENT_PISTOL_MK2_CLIP_FMJ` },
+ { name = "scope", label = TranslateCap("component_scope"), hash = `COMPONENT_AT_PI_RAIL` },
+ { name = "flashlight", label = TranslateCap("component_flashlight"), hash = `COMPONENT_AT_PI_FLSH_02` },
+ { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_PI_SUPP_02` },
+ { name = "compensator", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_PI_COMP` },
+ { name = "camo_finish", label = TranslateCap("component_camo_finish"), hash = `COMPONENT_PISTOL_MK2_CAMO` },
+ {
+ name = "camo_finish2",
+ label = TranslateCap("component_camo_finish2"),
+ hash = `COMPONENT_PISTOL_MK2_CAMO_02`,
+ },
+ {
+ name = "camo_finish3",
+ label = TranslateCap("component_camo_finish3"),
+ hash = `COMPONENT_PISTOL_MK2_CAMO_03`,
+ },
+ {
+ name = "camo_finish4",
+ label = TranslateCap("component_camo_finish4"),
+ hash = `COMPONENT_PISTOL_MK2_CAMO_04`,
+ },
+ {
+ name = "camo_finish5",
+ label = TranslateCap("component_camo_finish5"),
+ hash = `COMPONENT_PISTOL_MK2_CAMO_05`,
+ },
+ {
+ name = "camo_finish6",
+ label = TranslateCap("component_camo_finish6"),
+ hash = `COMPONENT_PISTOL_MK2_CAMO_06`,
+ },
+ {
+ name = "camo_finish7",
+ label = TranslateCap("component_camo_finish7"),
+ hash = `COMPONENT_PISTOL_MK2_CAMO_07`,
+ },
+ {
+ name = "camo_finish8",
+ label = TranslateCap("component_camo_finish8"),
+ hash = `COMPONENT_PISTOL_MK2_CAMO_08`,
+ },
+ {
+ name = "camo_finish9",
+ label = TranslateCap("component_camo_finish9"),
+ hash = `COMPONENT_PISTOL_MK2_CAMO_09`,
+ },
+ {
+ name = "camo_finish10",
+ label = TranslateCap("component_camo_finish10"),
+ hash = `COMPONENT_PISTOL_MK2_CAMO_10`,
+ },
{
name = "camo_finish11",
- label = _U("component_camo_finish11"),
+ label = TranslateCap("component_camo_finish11"),
hash = `COMPONENT_PISTOL_MK2_CAMO_IND_01`,
},
{
name = "camo_slide_finish",
- label = _U("component_camo_slide_finish"),
+ label = TranslateCap("component_camo_slide_finish"),
hash = `COMPONENT_PISTOL_MK2_CAMO_SLIDE`,
},
{
name = "camo_slide_finish2",
- label = _U("component_camo_slide_finish2"),
+ label = TranslateCap("component_camo_slide_finish2"),
hash = `COMPONENT_PISTOL_MK2_CAMO_02_SLIDE`,
},
{
name = "camo_slide_finish3",
- label = _U("component_camo_slide_finish3"),
+ label = TranslateCap("component_camo_slide_finish3"),
hash = `COMPONENT_PISTOL_MK2_CAMO_03_SLIDE`,
},
{
name = "camo_slide_finish4",
- label = _U("component_camo_slide_finish4"),
+ label = TranslateCap("component_camo_slide_finish4"),
hash = `COMPONENT_PISTOL_MK2_CAMO_04_SLIDE`,
},
{
name = "camo_slide_finish5",
- label = _U("component_camo_slide_finish5"),
+ label = TranslateCap("component_camo_slide_finish5"),
hash = `COMPONENT_PISTOL_MK2_CAMO_05_SLIDE`,
},
{
name = "camo_slide_finish6",
- label = _U("component_camo_slide_finish6"),
+ label = TranslateCap("component_camo_slide_finish6"),
hash = `COMPONENT_PISTOL_MK2_CAMO_06_SLIDE`,
},
{
name = "camo_slide_finish7",
- label = _U("component_camo_slide_finish7"),
+ label = TranslateCap("component_camo_slide_finish7"),
hash = `COMPONENT_PISTOL_MK2_CAMO_07_SLIDE`,
},
{
name = "camo_slide_finish8",
- label = _U("component_camo_slide_finish8"),
+ label = TranslateCap("component_camo_slide_finish8"),
hash = `COMPONENT_PISTOL_MK2_CAMO_08_SLIDE`,
},
{
name = "camo_slide_finish9",
- label = _U("component_camo_slide_finish9"),
+ label = TranslateCap("component_camo_slide_finish9"),
hash = `COMPONENT_PISTOL_MK2_CAMO_09_SLIDE`,
},
{
name = "camo_slide_finish10",
- label = _U("component_camo_slide_finish10"),
+ label = TranslateCap("component_camo_slide_finish10"),
hash = `COMPONENT_PISTOL_MK2_CAMO_10_SLIDE`,
},
{
name = "camo_slide_finish11",
- label = _U("component_camo_slide_finish11"),
+ label = TranslateCap("component_camo_slide_finish11"),
hash = `COMPONENT_PISTOL_MK2_CAMO_IND_01_SLIDE`,
},
},
},
{
name = "WEAPON_PISTOL50",
- label = _U("weapon_pistol50"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_PISTOL` },
+ label = TranslateCap("weapon_pistol50"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_PISTOL` },
tints = Config.DefaultWeaponTints,
components = {
- { name = "clip_default", label = _U("component_clip_default"), hash = `COMPONENT_PISTOL50_CLIP_01` },
- { name = "clip_extended", label = _U("component_clip_extended"), hash = `COMPONENT_PISTOL50_CLIP_02` },
- { name = "flashlight", label = _U("component_flashlight"), hash = `COMPONENT_AT_PI_FLSH` },
- { name = "suppressor", label = _U("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP_02` },
- { name = "luxary_finish", label = _U("component_luxary_finish"), hash = `COMPONENT_PISTOL50_VARMOD_LUXE` },
+ {
+ name = "clip_default",
+ label = TranslateCap("component_clip_default"),
+ hash = `COMPONENT_PISTOL50_CLIP_01`,
+ },
+ {
+ name = "clip_extended",
+ label = TranslateCap("component_clip_extended"),
+ hash = `COMPONENT_PISTOL50_CLIP_02`,
+ },
+ { name = "flashlight", label = TranslateCap("component_flashlight"), hash = `COMPONENT_AT_PI_FLSH` },
+ { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP_02` },
+ {
+ name = "luxary_finish",
+ label = TranslateCap("component_luxary_finish"),
+ hash = `COMPONENT_PISTOL50_VARMOD_LUXE`,
+ },
},
},
{
name = "WEAPON_SNSPISTOL",
- label = _U("weapon_snspistol"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_PISTOL` },
+ label = TranslateCap("weapon_snspistol"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_PISTOL` },
tints = Config.DefaultWeaponTints,
components = {
- { name = "clip_default", label = _U("component_clip_default"), hash = `COMPONENT_SNSPISTOL_CLIP_01` },
- { name = "clip_extended", label = _U("component_clip_extended"), hash = `COMPONENT_SNSPISTOL_CLIP_02` },
+ {
+ name = "clip_default",
+ label = TranslateCap("component_clip_default"),
+ hash = `COMPONENT_SNSPISTOL_CLIP_01`,
+ },
+ {
+ name = "clip_extended",
+ label = TranslateCap("component_clip_extended"),
+ hash = `COMPONENT_SNSPISTOL_CLIP_02`,
+ },
{
name = "luxary_finish",
- label = _U("component_luxary_finish"),
+ label = TranslateCap("component_luxary_finish"),
hash = `COMPONENT_SNSPISTOL_VARMOD_LOWRIDER`,
},
},
},
{
name = "WEAPON_SNSPISTOL_MK2",
- label = _U("weapon_snspistol_mk2"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_PISTOL` },
+ label = TranslateCap("weapon_snspistol_mk2"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_PISTOL` },
tints = Config.DefaultWeaponTints,
components = {
- { name = "clip_default", label = _U("component_clip_default"), hash = `COMPONENT_SNSPISTOL_MK2_CLIP_01` },
- { name = "clip_extended", label = _U("component_clip_extended"), hash = `COMPONENT_SNSPISTOL_MK2_CLIP_02` },
- { name = "ammo_tracer", label = _U("component_ammo_tracer"), hash = `COMPONENT_SNSPISTOL_MK2_CLIP_TRACER` },
+ {
+ name = "clip_default",
+ label = TranslateCap("component_clip_default"),
+ hash = `COMPONENT_SNSPISTOL_MK2_CLIP_01`,
+ },
+ {
+ name = "clip_extended",
+ label = TranslateCap("component_clip_extended"),
+ hash = `COMPONENT_SNSPISTOL_MK2_CLIP_02`,
+ },
+ {
+ name = "ammo_tracer",
+ label = TranslateCap("component_ammo_tracer"),
+ hash = `COMPONENT_SNSPISTOL_MK2_CLIP_TRACER`,
+ },
{
name = "ammo_incendiary",
- label = _U("component_ammo_incendiary"),
+ label = TranslateCap("component_ammo_incendiary"),
hash = `COMPONENT_SNSPISTOL_MK2_CLIP_INCENDIARY`,
},
{
name = "ammo_hollowpoint",
- label = _U("component_ammo_hollowpoint"),
+ label = TranslateCap("component_ammo_hollowpoint"),
hash = `COMPONENT_SNSPISTOL_MK2_CLIP_HOLLOWPOINT`,
},
- { name = "ammo_fmj", label = _U("component_ammo_fmj"), hash = `COMPONENT_SNSPISTOL_MK2_CLIP_FMJ` },
- { name = "scope", label = _U("component_scope"), hash = `COMPONENT_AT_PI_RAIL_02` },
- { name = "flashlight", label = _U("component_flashlight"), hash = `COMPONENT_AT_PI_FLSH_03` },
- { name = "suppressor", label = _U("component_suppressor"), hash = `COMPONENT_AT_PI_SUPP_02` },
- { name = "compensator", label = _U("component_suppressor"), hash = `COMPONENT_AT_PI_COMP_02` },
- { name = "camo_finish", label = _U("component_camo_finish"), hash = `COMPONENT_SNSPISTOL_MK2_CAMO` },
- { name = "camo_finish2", label = _U("component_camo_finish2"), hash = `COMPONENT_SNSPISTOL_MK2_CAMO_02` },
- { name = "camo_finish3", label = _U("component_camo_finish3"), hash = `COMPONENT_SNSPISTOL_MK2_CAMO_03` },
- { name = "camo_finish4", label = _U("component_camo_finish4"), hash = `COMPONENT_SNSPISTOL_MK2_CAMO_04` },
- { name = "camo_finish5", label = _U("component_camo_finish5"), hash = `COMPONENT_SNSPISTOL_MK2_CAMO_05` },
- { name = "camo_finish6", label = _U("component_camo_finish6"), hash = `COMPONENT_SNSPISTOL_MK2_CAMO_06` },
- { name = "camo_finish7", label = _U("component_camo_finish7"), hash = `COMPONENT_SNSPISTOL_MK2_CAMO_07` },
- { name = "camo_finish8", label = _U("component_camo_finish8"), hash = `COMPONENT_SNSPISTOL_MK2_CAMO_08` },
- { name = "camo_finish9", label = _U("component_camo_finish9"), hash = `COMPONENT_SNSPISTOL_MK2_CAMO_09` },
- { name = "camo_finish10", label = _U("component_camo_finish10"), hash = `COMPONENT_SNSPISTOL_MK2_CAMO_10` },
+ {
+ name = "ammo_fmj",
+ label = TranslateCap("component_ammo_fmj"),
+ hash = `COMPONENT_SNSPISTOL_MK2_CLIP_FMJ`,
+ },
+ { name = "scope", label = TranslateCap("component_scope"), hash = `COMPONENT_AT_PI_RAIL_02` },
+ { name = "flashlight", label = TranslateCap("component_flashlight"), hash = `COMPONENT_AT_PI_FLSH_03` },
+ { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_PI_SUPP_02` },
+ { name = "compensator", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_PI_COMP_02` },
+ {
+ name = "camo_finish",
+ label = TranslateCap("component_camo_finish"),
+ hash = `COMPONENT_SNSPISTOL_MK2_CAMO`,
+ },
+ {
+ name = "camo_finish2",
+ label = TranslateCap("component_camo_finish2"),
+ hash = `COMPONENT_SNSPISTOL_MK2_CAMO_02`,
+ },
+ {
+ name = "camo_finish3",
+ label = TranslateCap("component_camo_finish3"),
+ hash = `COMPONENT_SNSPISTOL_MK2_CAMO_03`,
+ },
+ {
+ name = "camo_finish4",
+ label = TranslateCap("component_camo_finish4"),
+ hash = `COMPONENT_SNSPISTOL_MK2_CAMO_04`,
+ },
+ {
+ name = "camo_finish5",
+ label = TranslateCap("component_camo_finish5"),
+ hash = `COMPONENT_SNSPISTOL_MK2_CAMO_05`,
+ },
+ {
+ name = "camo_finish6",
+ label = TranslateCap("component_camo_finish6"),
+ hash = `COMPONENT_SNSPISTOL_MK2_CAMO_06`,
+ },
+ {
+ name = "camo_finish7",
+ label = TranslateCap("component_camo_finish7"),
+ hash = `COMPONENT_SNSPISTOL_MK2_CAMO_07`,
+ },
+ {
+ name = "camo_finish8",
+ label = TranslateCap("component_camo_finish8"),
+ hash = `COMPONENT_SNSPISTOL_MK2_CAMO_08`,
+ },
+ {
+ name = "camo_finish9",
+ label = TranslateCap("component_camo_finish9"),
+ hash = `COMPONENT_SNSPISTOL_MK2_CAMO_09`,
+ },
+ {
+ name = "camo_finish10",
+ label = TranslateCap("component_camo_finish10"),
+ hash = `COMPONENT_SNSPISTOL_MK2_CAMO_10`,
+ },
{
name = "camo_finish11",
- label = _U("component_camo_finish11"),
+ label = TranslateCap("component_camo_finish11"),
hash = `COMPONENT_SNSPISTOL_MK2_CAMO_IND_01`,
},
{
name = "camo_slide_finish",
- label = _U("component_camo_slide_finish"),
+ label = TranslateCap("component_camo_slide_finish"),
hash = `COMPONENT_SNSPISTOL_MK2_CAMO_SLIDE`,
},
{
name = "camo_slide_finish2",
- label = _U("component_camo_slide_finish2"),
+ label = TranslateCap("component_camo_slide_finish2"),
hash = `COMPONENT_SNSPISTOL_MK2_CAMO_02_SLIDE`,
},
{
name = "camo_slide_finish3",
- label = _U("component_camo_slide_finish3"),
+ label = TranslateCap("component_camo_slide_finish3"),
hash = `COMPONENT_SNSPISTOL_MK2_CAMO_03_SLIDE`,
},
{
name = "camo_slide_finish4",
- label = _U("component_camo_slide_finish4"),
+ label = TranslateCap("component_camo_slide_finish4"),
hash = `COMPONENT_SNSPISTOL_MK2_CAMO_04_SLIDE`,
},
{
name = "camo_slide_finish5",
- label = _U("component_camo_slide_finish5"),
+ label = TranslateCap("component_camo_slide_finish5"),
hash = `COMPONENT_SNSPISTOL_MK2_CAMO_05_SLIDE`,
},
{
name = "camo_slide_finish6",
- label = _U("component_camo_slide_finish6"),
+ label = TranslateCap("component_camo_slide_finish6"),
hash = `COMPONENT_SNSPISTOL_MK2_CAMO_06_SLIDE`,
},
{
name = "camo_slide_finish7",
- label = _U("component_camo_slide_finish7"),
+ label = TranslateCap("component_camo_slide_finish7"),
hash = `COMPONENT_SNSPISTOL_MK2_CAMO_07_SLIDE`,
},
{
name = "camo_slide_finish8",
- label = _U("component_camo_slide_finish8"),
+ label = TranslateCap("component_camo_slide_finish8"),
hash = `COMPONENT_SNSPISTOL_MK2_CAMO_08_SLIDE`,
},
{
name = "camo_slide_finish9",
- label = _U("component_camo_slide_finish9"),
+ label = TranslateCap("component_camo_slide_finish9"),
hash = `COMPONENT_SNSPISTOL_MK2_CAMO_09_SLIDE`,
},
{
name = "camo_slide_finish10",
- label = _U("component_camo_slide_finish10"),
+ label = TranslateCap("component_camo_slide_finish10"),
hash = `COMPONENT_SNSPISTOL_MK2_CAMO_10_SLIDE`,
},
{
name = "camo_slide_finish11",
- label = _U("component_camo_slide_finish11"),
+ label = TranslateCap("component_camo_slide_finish11"),
hash = `COMPONENT_SNSPISTOL_MK2_CAMO_IND_01_SLIDE`,
},
},
},
- { name = "WEAPON_STUNGUN", label = _U("weapon_stungun"), tints = Config.DefaultWeaponTints, components = {} },
- { name = "WEAPON_RAYPISTOL", label = _U("weapon_raypistol"), tints = Config.DefaultWeaponTints, components = {} },
+ {
+ name = "WEAPON_STUNGUN",
+ label = TranslateCap("weapon_stungun"),
+ tints = Config.DefaultWeaponTints,
+ components = {},
+ },
+ {
+ name = "WEAPON_RAYPISTOL",
+ label = TranslateCap("weapon_raypistol"),
+ tints = Config.DefaultWeaponTints,
+ components = {},
+ },
{
name = "WEAPON_VINTAGEPISTOL",
- label = _U("weapon_vintagepistol"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_PISTOL` },
+ label = TranslateCap("weapon_vintagepistol"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_PISTOL` },
tints = Config.DefaultWeaponTints,
components = {
- { name = "clip_default", label = _U("component_clip_default"), hash = `COMPONENT_VINTAGEPISTOL_CLIP_01` },
- { name = "clip_extended", label = _U("component_clip_extended"), hash = `COMPONENT_VINTAGEPISTOL_CLIP_02` },
- { name = "suppressor", label = _U("component_suppressor"), hash = `COMPONENT_AT_PI_SUPP` },
+ {
+ name = "clip_default",
+ label = TranslateCap("component_clip_default"),
+ hash = `COMPONENT_VINTAGEPISTOL_CLIP_01`,
+ },
+ {
+ name = "clip_extended",
+ label = TranslateCap("component_clip_extended"),
+ hash = `COMPONENT_VINTAGEPISTOL_CLIP_02`,
+ },
+ { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_PI_SUPP` },
},
},
-- Shotguns
{
name = "WEAPON_ASSAULTSHOTGUN",
- label = _U("weapon_assaultshotgun"),
- ammo = { label = _U("ammo_shells"), hash = `AMMO_SHOTGUN` },
+ label = TranslateCap("weapon_assaultshotgun"),
+ ammo = { label = TranslateCap("ammo_shells"), hash = `AMMO_SHOTGUN` },
tints = Config.DefaultWeaponTints,
components = {
- { name = "clip_default", label = _U("component_clip_default"), hash = `COMPONENT_ASSAULTSHOTGUN_CLIP_01` },
+ {
+ name = "clip_default",
+ label = TranslateCap("component_clip_default"),
+ hash = `COMPONENT_ASSAULTSHOTGUN_CLIP_01`,
+ },
{
name = "clip_extended",
- label = _U("component_clip_extended"),
+ label = TranslateCap("component_clip_extended"),
hash = `COMPONENT_ASSAULTSHOTGUN_CLIP_02`,
},
- { name = "flashlight", label = _U("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
- { name = "suppressor", label = _U("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP` },
- { name = "grip", label = _U("component_grip"), hash = `COMPONENT_AT_AR_AFGRIP` },
+ { name = "flashlight", label = TranslateCap("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
+ { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP` },
+ { name = "grip", label = TranslateCap("component_grip"), hash = `COMPONENT_AT_AR_AFGRIP` },
},
},
{
name = "WEAPON_AUTOSHOTGUN",
- label = _U("weapon_autoshotgun"),
+ label = TranslateCap("weapon_autoshotgun"),
tints = Config.DefaultWeaponTints,
components = {},
- ammo = { label = _U("ammo_shells"), hash = `AMMO_SHOTGUN` },
+ ammo = { label = TranslateCap("ammo_shells"), hash = `AMMO_SHOTGUN` },
},
{
name = "WEAPON_BULLPUPSHOTGUN",
- label = _U("weapon_bullpupshotgun"),
- ammo = { label = _U("ammo_shells"), hash = `AMMO_SHOTGUN` },
+ label = TranslateCap("weapon_bullpupshotgun"),
+ ammo = { label = TranslateCap("ammo_shells"), hash = `AMMO_SHOTGUN` },
tints = Config.DefaultWeaponTints,
components = {
- { name = "flashlight", label = _U("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
- { name = "suppressor", label = _U("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP_02` },
- { name = "grip", label = _U("component_grip"), hash = `COMPONENT_AT_AR_AFGRIP` },
+ { name = "flashlight", label = TranslateCap("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
+ { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP_02` },
+ { name = "grip", label = TranslateCap("component_grip"), hash = `COMPONENT_AT_AR_AFGRIP` },
},
},
{
name = "WEAPON_COMBATSHOTGUN",
- label = _U("weapon_combatshotgun"),
- ammo = { label = _U("ammo_shells"), hash = `AMMO_SHOTGUN` },
+ label = TranslateCap("weapon_combatshotgun"),
+ ammo = { label = TranslateCap("ammo_shells"), hash = `AMMO_SHOTGUN` },
tints = Config.DefaultWeaponTints,
components = {
- { name = "flashlight", label = _U("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
- { name = "suppressor", label = _U("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP` },
+ { name = "flashlight", label = TranslateCap("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
+ { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP` },
},
},
{
name = "WEAPON_DBSHOTGUN",
- label = _U("weapon_dbshotgun"),
+ label = TranslateCap("weapon_dbshotgun"),
tints = Config.DefaultWeaponTints,
components = {},
- ammo = { label = _U("ammo_shells"), hash = `AMMO_SHOTGUN` },
+ ammo = { label = TranslateCap("ammo_shells"), hash = `AMMO_SHOTGUN` },
},
{
name = "WEAPON_HEAVYSHOTGUN",
- label = _U("weapon_heavyshotgun"),
- ammo = { label = _U("ammo_shells"), hash = `AMMO_SHOTGUN` },
+ label = TranslateCap("weapon_heavyshotgun"),
+ ammo = { label = TranslateCap("ammo_shells"), hash = `AMMO_SHOTGUN` },
tints = Config.DefaultWeaponTints,
components = {
- { name = "clip_default", label = _U("component_clip_default"), hash = `COMPONENT_HEAVYSHOTGUN_CLIP_01` },
- { name = "clip_extended", label = _U("component_clip_extended"), hash = `COMPONENT_HEAVYSHOTGUN_CLIP_02` },
- { name = "clip_drum", label = _U("component_clip_drum"), hash = `COMPONENT_HEAVYSHOTGUN_CLIP_03` },
- { name = "flashlight", label = _U("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
- { name = "suppressor", label = _U("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP_02` },
- { name = "grip", label = _U("component_grip"), hash = `COMPONENT_AT_AR_AFGRIP` },
+ {
+ name = "clip_default",
+ label = TranslateCap("component_clip_default"),
+ hash = `COMPONENT_HEAVYSHOTGUN_CLIP_01`,
+ },
+ {
+ name = "clip_extended",
+ label = TranslateCap("component_clip_extended"),
+ hash = `COMPONENT_HEAVYSHOTGUN_CLIP_02`,
+ },
+ {
+ name = "clip_drum",
+ label = TranslateCap("component_clip_drum"),
+ hash = `COMPONENT_HEAVYSHOTGUN_CLIP_03`,
+ },
+ { name = "flashlight", label = TranslateCap("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
+ { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP_02` },
+ { name = "grip", label = TranslateCap("component_grip"), hash = `COMPONENT_AT_AR_AFGRIP` },
},
},
{
name = "WEAPON_MUSKET",
- label = _U("weapon_musket"),
+ label = TranslateCap("weapon_musket"),
tints = Config.DefaultWeaponTints,
components = {},
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_SHOTGUN` },
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_SHOTGUN` },
},
{
name = "WEAPON_PUMPSHOTGUN",
- label = _U("weapon_pumpshotgun"),
- ammo = { label = _U("ammo_shells"), hash = `AMMO_SHOTGUN` },
+ label = TranslateCap("weapon_pumpshotgun"),
+ ammo = { label = TranslateCap("ammo_shells"), hash = `AMMO_SHOTGUN` },
tints = Config.DefaultWeaponTints,
components = {
- { name = "flashlight", label = _U("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
- { name = "suppressor", label = _U("component_suppressor"), hash = `COMPONENT_AT_SR_SUPP` },
+ { name = "flashlight", label = TranslateCap("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
+ { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_SR_SUPP` },
{
name = "luxary_finish",
- label = _U("component_luxary_finish"),
+ label = TranslateCap("component_luxary_finish"),
hash = `COMPONENT_PUMPSHOTGUN_VARMOD_LOWRIDER`,
},
},
},
{
name = "WEAPON_PUMPSHOTGUN_MK2",
- label = _U("weapon_pumpshotgun_mk2"),
- ammo = { label = _U("ammo_shells"), hash = `AMMO_SHOTGUN` },
+ label = TranslateCap("weapon_pumpshotgun_mk2"),
+ ammo = { label = TranslateCap("ammo_shells"), hash = `AMMO_SHOTGUN` },
tints = Config.DefaultWeaponTints,
components = {
{
name = "shells_default",
- label = _U("component_shells_default"),
+ label = TranslateCap("component_shells_default"),
hash = `COMPONENT_PUMPSHOTGUN_MK2_CLIP_01`,
},
{
name = "shells_incendiary",
- label = _U("component_shells_incendiary"),
+ label = TranslateCap("component_shells_incendiary"),
hash = `COMPONENT_PUMPSHOTGUN_MK2_CLIP_INCENDIARY`,
},
{
name = "shells_armor",
- label = _U("component_shells_armor"),
+ label = TranslateCap("component_shells_armor"),
hash = `COMPONENT_PUMPSHOTGUN_MK2_CLIP_ARMORPIERCING`,
},
{
name = "shells_hollowpoint",
- label = _U("component_shells_hollowpoint"),
+ label = TranslateCap("component_shells_hollowpoint"),
hash = `COMPONENT_PUMPSHOTGUN_MK2_CLIP_HOLLOWPOINT`,
},
{
name = "shells_explosive",
- label = _U("component_shells_explosive"),
+ label = TranslateCap("component_shells_explosive"),
hash = `COMPONENT_PUMPSHOTGUN_MK2_CLIP_EXPLOSIVE`,
},
- { name = "scope_holo", label = _U("component_scope_holo"), hash = `COMPONENT_AT_SIGHTS` },
- { name = "scope_small", label = _U("component_scope_small"), hash = `COMPONENT_AT_SCOPE_MACRO_MK2` },
- { name = "scope_medium", label = _U("component_scope_medium"), hash = `COMPONENT_AT_SCOPE_SMALL_MK2` },
- { name = "flashlight", label = _U("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
- { name = "suppressor", label = _U("component_suppressor"), hash = `COMPONENT_AT_SR_SUPP_03` },
- { name = "muzzle_squared", label = _U("component_muzzle_squared"), hash = `COMPONENT_AT_MUZZLE_08` },
- { name = "camo_finish", label = _U("component_camo_finish"), hash = `COMPONENT_PUMPSHOTGUN_MK2_CAMO` },
- { name = "camo_finish2", label = _U("component_camo_finish2"), hash = `COMPONENT_PUMPSHOTGUN_MK2_CAMO_02` },
- { name = "camo_finish3", label = _U("component_camo_finish3"), hash = `COMPONENT_PUMPSHOTGUN_MK2_CAMO_03` },
- { name = "camo_finish4", label = _U("component_camo_finish4"), hash = `COMPONENT_PUMPSHOTGUN_MK2_CAMO_04` },
- { name = "camo_finish5", label = _U("component_camo_finish5"), hash = `COMPONENT_PUMPSHOTGUN_MK2_CAMO_05` },
- { name = "camo_finish6", label = _U("component_camo_finish6"), hash = `COMPONENT_PUMPSHOTGUN_MK2_CAMO_06` },
- { name = "camo_finish7", label = _U("component_camo_finish7"), hash = `COMPONENT_PUMPSHOTGUN_MK2_CAMO_07` },
- { name = "camo_finish8", label = _U("component_camo_finish8"), hash = `COMPONENT_PUMPSHOTGUN_MK2_CAMO_08` },
- { name = "camo_finish9", label = _U("component_camo_finish9"), hash = `COMPONENT_PUMPSHOTGUN_MK2_CAMO_09` },
+ { name = "scope_holo", label = TranslateCap("component_scope_holo"), hash = `COMPONENT_AT_SIGHTS` },
+ {
+ name = "scope_small",
+ label = TranslateCap("component_scope_small"),
+ hash = `COMPONENT_AT_SCOPE_MACRO_MK2`,
+ },
+ {
+ name = "scope_medium",
+ label = TranslateCap("component_scope_medium"),
+ hash = `COMPONENT_AT_SCOPE_SMALL_MK2`,
+ },
+ { name = "flashlight", label = TranslateCap("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
+ { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_SR_SUPP_03` },
+ {
+ name = "muzzle_squared",
+ label = TranslateCap("component_muzzle_squared"),
+ hash = `COMPONENT_AT_MUZZLE_08`,
+ },
+ {
+ name = "camo_finish",
+ label = TranslateCap("component_camo_finish"),
+ hash = `COMPONENT_PUMPSHOTGUN_MK2_CAMO`,
+ },
+ {
+ name = "camo_finish2",
+ label = TranslateCap("component_camo_finish2"),
+ hash = `COMPONENT_PUMPSHOTGUN_MK2_CAMO_02`,
+ },
+ {
+ name = "camo_finish3",
+ label = TranslateCap("component_camo_finish3"),
+ hash = `COMPONENT_PUMPSHOTGUN_MK2_CAMO_03`,
+ },
+ {
+ name = "camo_finish4",
+ label = TranslateCap("component_camo_finish4"),
+ hash = `COMPONENT_PUMPSHOTGUN_MK2_CAMO_04`,
+ },
+ {
+ name = "camo_finish5",
+ label = TranslateCap("component_camo_finish5"),
+ hash = `COMPONENT_PUMPSHOTGUN_MK2_CAMO_05`,
+ },
+ {
+ name = "camo_finish6",
+ label = TranslateCap("component_camo_finish6"),
+ hash = `COMPONENT_PUMPSHOTGUN_MK2_CAMO_06`,
+ },
+ {
+ name = "camo_finish7",
+ label = TranslateCap("component_camo_finish7"),
+ hash = `COMPONENT_PUMPSHOTGUN_MK2_CAMO_07`,
+ },
+ {
+ name = "camo_finish8",
+ label = TranslateCap("component_camo_finish8"),
+ hash = `COMPONENT_PUMPSHOTGUN_MK2_CAMO_08`,
+ },
+ {
+ name = "camo_finish9",
+ label = TranslateCap("component_camo_finish9"),
+ hash = `COMPONENT_PUMPSHOTGUN_MK2_CAMO_09`,
+ },
{
name = "camo_finish10",
- label = _U("component_camo_finish10"),
+ label = TranslateCap("component_camo_finish10"),
hash = `COMPONENT_PUMPSHOTGUN_MK2_CAMO_10`,
},
{
name = "camo_finish11",
- label = _U("component_camo_finish11"),
+ label = TranslateCap("component_camo_finish11"),
hash = `COMPONENT_PUMPSHOTGUN_MK2_CAMO_IND_01`,
},
},
},
{
name = "WEAPON_SAWNOFFSHOTGUN",
- label = _U("weapon_sawnoffshotgun"),
- ammo = { label = _U("ammo_shells"), hash = `AMMO_SHOTGUN` },
+ label = TranslateCap("weapon_sawnoffshotgun"),
+ ammo = { label = TranslateCap("ammo_shells"), hash = `AMMO_SHOTGUN` },
tints = Config.DefaultWeaponTints,
components = {
{
name = "luxary_finish",
- label = _U("component_luxary_finish"),
+ label = TranslateCap("component_luxary_finish"),
hash = `COMPONENT_SAWNOFFSHOTGUN_VARMOD_LUXE`,
},
},
@@ -629,961 +959,1552 @@ Config.Weapons = {
-- SMG & LMG
{
name = "WEAPON_ASSAULTSMG",
- label = _U("weapon_assaultsmg"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_SMG` },
+ label = TranslateCap("weapon_assaultsmg"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_SMG` },
tints = Config.DefaultWeaponTints,
components = {
- { name = "clip_default", label = _U("component_clip_default"), hash = `COMPONENT_ASSAULTSMG_CLIP_01` },
- { name = "clip_extended", label = _U("component_clip_extended"), hash = `COMPONENT_ASSAULTSMG_CLIP_02` },
- { name = "flashlight", label = _U("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
- { name = "scope", label = _U("component_scope"), hash = `COMPONENT_AT_SCOPE_MACRO` },
- { name = "suppressor", label = _U("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP_02` },
+ {
+ name = "clip_default",
+ label = TranslateCap("component_clip_default"),
+ hash = `COMPONENT_ASSAULTSMG_CLIP_01`,
+ },
+ {
+ name = "clip_extended",
+ label = TranslateCap("component_clip_extended"),
+ hash = `COMPONENT_ASSAULTSMG_CLIP_02`,
+ },
+ { name = "flashlight", label = TranslateCap("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
+ { name = "scope", label = TranslateCap("component_scope"), hash = `COMPONENT_AT_SCOPE_MACRO` },
+ { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP_02` },
{
name = "luxary_finish",
- label = _U("component_luxary_finish"),
+ label = TranslateCap("component_luxary_finish"),
hash = `COMPONENT_ASSAULTSMG_VARMOD_LOWRIDER`,
},
},
},
{
name = "WEAPON_COMBATMG",
- label = _U("weapon_combatmg"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_MG` },
+ label = TranslateCap("weapon_combatmg"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_MG` },
tints = Config.DefaultWeaponTints,
components = {
- { name = "clip_default", label = _U("component_clip_default"), hash = `COMPONENT_COMBATMG_CLIP_01` },
- { name = "clip_extended", label = _U("component_clip_extended"), hash = `COMPONENT_COMBATMG_CLIP_02` },
- { name = "scope", label = _U("component_scope"), hash = `COMPONENT_AT_SCOPE_MEDIUM` },
- { name = "grip", label = _U("component_grip"), hash = `COMPONENT_AT_AR_AFGRIP` },
+ {
+ name = "clip_default",
+ label = TranslateCap("component_clip_default"),
+ hash = `COMPONENT_COMBATMG_CLIP_01`,
+ },
+ {
+ name = "clip_extended",
+ label = TranslateCap("component_clip_extended"),
+ hash = `COMPONENT_COMBATMG_CLIP_02`,
+ },
+ { name = "scope", label = TranslateCap("component_scope"), hash = `COMPONENT_AT_SCOPE_MEDIUM` },
+ { name = "grip", label = TranslateCap("component_grip"), hash = `COMPONENT_AT_AR_AFGRIP` },
{
name = "luxary_finish",
- label = _U("component_luxary_finish"),
+ label = TranslateCap("component_luxary_finish"),
hash = `COMPONENT_COMBATMG_VARMOD_LOWRIDER`,
},
},
},
{
name = "WEAPON_COMBATMG_MK2",
- label = _U("weapon_combatmg_mk2"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_MG` },
+ label = TranslateCap("weapon_combatmg_mk2"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_MG` },
tints = Config.DefaultWeaponTints,
components = {
- { name = "clip_default", label = _U("component_clip_default"), hash = `COMPONENT_COMBATMG_MK2_CLIP_01` },
- { name = "clip_extended", label = _U("component_clip_extended"), hash = `COMPONENT_COMBATMG_MK2_CLIP_02` },
- { name = "ammo_tracer", label = _U("component_ammo_tracer"), hash = `COMPONENT_COMBATMG_MK2_CLIP_TRACER` },
+ {
+ name = "clip_default",
+ label = TranslateCap("component_clip_default"),
+ hash = `COMPONENT_COMBATMG_MK2_CLIP_01`,
+ },
+ {
+ name = "clip_extended",
+ label = TranslateCap("component_clip_extended"),
+ hash = `COMPONENT_COMBATMG_MK2_CLIP_02`,
+ },
+ {
+ name = "ammo_tracer",
+ label = TranslateCap("component_ammo_tracer"),
+ hash = `COMPONENT_COMBATMG_MK2_CLIP_TRACER`,
+ },
{
name = "ammo_incendiary",
- label = _U("component_ammo_incendiary"),
+ label = TranslateCap("component_ammo_incendiary"),
hash = `COMPONENT_COMBATMG_MK2_CLIP_INCENDIARY`,
},
{
name = "ammo_hollowpoint",
- label = _U("component_ammo_hollowpoint"),
+ label = TranslateCap("component_ammo_hollowpoint"),
hash = `COMPONENT_COMBATMG_MK2_CLIP_ARMORPIERCING`,
},
- { name = "ammo_fmj", label = _U("component_ammo_fmj"), hash = `COMPONENT_COMBATMG_MK2_CLIP_FMJ` },
- { name = "grip", label = _U("component_grip"), hash = `COMPONENT_AT_AR_AFGRIP_02` },
- { name = "scope_holo", label = _U("component_scope_holo"), hash = `COMPONENT_AT_SIGHTS` },
- { name = "scope_medium", label = _U("component_scope_medium"), hash = `COMPONENT_AT_SCOPE_SMALL_MK2` },
- { name = "scope_large", label = _U("component_scope_large"), hash = `COMPONENT_AT_SCOPE_MEDIUM_MK2` },
- { name = "muzzle_flat", label = _U("component_muzzle_flat"), hash = `COMPONENT_AT_MUZZLE_01` },
- { name = "muzzle_tactical", label = _U("component_muzzle_tactical"), hash = `COMPONENT_AT_MUZZLE_02` },
- { name = "muzzle_fat", label = _U("component_muzzle_fat"), hash = `COMPONENT_AT_MUZZLE_03` },
- { name = "muzzle_precision", label = _U("component_muzzle_precision"), hash = `COMPONENT_AT_MUZZLE_04` },
- { name = "muzzle_heavy", label = _U("component_muzzle_heavy"), hash = `COMPONENT_AT_MUZZLE_05` },
- { name = "muzzle_slanted", label = _U("component_muzzle_slanted"), hash = `COMPONENT_AT_MUZZLE_06` },
- { name = "muzzle_split", label = _U("component_muzzle_split"), hash = `COMPONENT_AT_MUZZLE_07` },
- { name = "barrel_default", label = _U("component_barrel_default"), hash = `COMPONENT_AT_MG_BARREL_01` },
- { name = "barrel_heavy", label = _U("component_barrel_heavy"), hash = `COMPONENT_AT_MG_BARREL_02` },
- { name = "camo_finish", label = _U("component_camo_finish"), hash = `COMPONENT_COMBATMG_MK2_CAMO` },
- { name = "camo_finish2", label = _U("component_camo_finish2"), hash = `COMPONENT_COMBATMG_MK2_CAMO_02` },
- { name = "camo_finish3", label = _U("component_camo_finish3"), hash = `COMPONENT_COMBATMG_MK2_CAMO_03` },
- { name = "camo_finish4", label = _U("component_camo_finish4"), hash = `COMPONENT_COMBATMG_MK2_CAMO_04` },
- { name = "camo_finish5", label = _U("component_camo_finish5"), hash = `COMPONENT_COMBATMG_MK2_CAMO_05` },
- { name = "camo_finish6", label = _U("component_camo_finish6"), hash = `COMPONENT_COMBATMG_MK2_CAMO_06` },
- { name = "camo_finish7", label = _U("component_camo_finish7"), hash = `COMPONENT_COMBATMG_MK2_CAMO_07` },
- { name = "camo_finish8", label = _U("component_camo_finish8"), hash = `COMPONENT_COMBATMG_MK2_CAMO_08` },
- { name = "camo_finish9", label = _U("component_camo_finish9"), hash = `COMPONENT_COMBATMG_MK2_CAMO_09` },
- { name = "camo_finish10", label = _U("component_camo_finish10"), hash = `COMPONENT_COMBATMG_MK2_CAMO_10` },
+ { name = "ammo_fmj", label = TranslateCap("component_ammo_fmj"), hash = `COMPONENT_COMBATMG_MK2_CLIP_FMJ` },
+ { name = "grip", label = TranslateCap("component_grip"), hash = `COMPONENT_AT_AR_AFGRIP_02` },
+ { name = "scope_holo", label = TranslateCap("component_scope_holo"), hash = `COMPONENT_AT_SIGHTS` },
+ {
+ name = "scope_medium",
+ label = TranslateCap("component_scope_medium"),
+ hash = `COMPONENT_AT_SCOPE_SMALL_MK2`,
+ },
+ {
+ name = "scope_large",
+ label = TranslateCap("component_scope_large"),
+ hash = `COMPONENT_AT_SCOPE_MEDIUM_MK2`,
+ },
+ { name = "muzzle_flat", label = TranslateCap("component_muzzle_flat"), hash = `COMPONENT_AT_MUZZLE_01` },
+ {
+ name = "muzzle_tactical",
+ label = TranslateCap("component_muzzle_tactical"),
+ hash = `COMPONENT_AT_MUZZLE_02`,
+ },
+ { name = "muzzle_fat", label = TranslateCap("component_muzzle_fat"), hash = `COMPONENT_AT_MUZZLE_03` },
+ {
+ name = "muzzle_precision",
+ label = TranslateCap("component_muzzle_precision"),
+ hash = `COMPONENT_AT_MUZZLE_04`,
+ },
+ { name = "muzzle_heavy", label = TranslateCap("component_muzzle_heavy"), hash = `COMPONENT_AT_MUZZLE_05` },
+ {
+ name = "muzzle_slanted",
+ label = TranslateCap("component_muzzle_slanted"),
+ hash = `COMPONENT_AT_MUZZLE_06`,
+ },
+ { name = "muzzle_split", label = TranslateCap("component_muzzle_split"), hash = `COMPONENT_AT_MUZZLE_07` },
+ {
+ name = "barrel_default",
+ label = TranslateCap("component_barrel_default"),
+ hash = `COMPONENT_AT_MG_BARREL_01`,
+ },
+ {
+ name = "barrel_heavy",
+ label = TranslateCap("component_barrel_heavy"),
+ hash = `COMPONENT_AT_MG_BARREL_02`,
+ },
+ {
+ name = "camo_finish",
+ label = TranslateCap("component_camo_finish"),
+ hash = `COMPONENT_COMBATMG_MK2_CAMO`,
+ },
+ {
+ name = "camo_finish2",
+ label = TranslateCap("component_camo_finish2"),
+ hash = `COMPONENT_COMBATMG_MK2_CAMO_02`,
+ },
+ {
+ name = "camo_finish3",
+ label = TranslateCap("component_camo_finish3"),
+ hash = `COMPONENT_COMBATMG_MK2_CAMO_03`,
+ },
+ {
+ name = "camo_finish4",
+ label = TranslateCap("component_camo_finish4"),
+ hash = `COMPONENT_COMBATMG_MK2_CAMO_04`,
+ },
+ {
+ name = "camo_finish5",
+ label = TranslateCap("component_camo_finish5"),
+ hash = `COMPONENT_COMBATMG_MK2_CAMO_05`,
+ },
+ {
+ name = "camo_finish6",
+ label = TranslateCap("component_camo_finish6"),
+ hash = `COMPONENT_COMBATMG_MK2_CAMO_06`,
+ },
+ {
+ name = "camo_finish7",
+ label = TranslateCap("component_camo_finish7"),
+ hash = `COMPONENT_COMBATMG_MK2_CAMO_07`,
+ },
+ {
+ name = "camo_finish8",
+ label = TranslateCap("component_camo_finish8"),
+ hash = `COMPONENT_COMBATMG_MK2_CAMO_08`,
+ },
+ {
+ name = "camo_finish9",
+ label = TranslateCap("component_camo_finish9"),
+ hash = `COMPONENT_COMBATMG_MK2_CAMO_09`,
+ },
+ {
+ name = "camo_finish10",
+ label = TranslateCap("component_camo_finish10"),
+ hash = `COMPONENT_COMBATMG_MK2_CAMO_10`,
+ },
{
name = "camo_finish11",
- label = _U("component_camo_finish11"),
+ label = TranslateCap("component_camo_finish11"),
hash = `COMPONENT_COMBATMG_MK2_CAMO_IND_01`,
},
},
},
{
name = "WEAPON_COMBATPDW",
- label = _U("weapon_combatpdw"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_SMG` },
+ label = TranslateCap("weapon_combatpdw"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_SMG` },
tints = Config.DefaultWeaponTints,
components = {
- { name = "clip_default", label = _U("component_clip_default"), hash = `COMPONENT_COMBATPDW_CLIP_01` },
- { name = "clip_extended", label = _U("component_clip_extended"), hash = `COMPONENT_COMBATPDW_CLIP_02` },
- { name = "clip_drum", label = _U("component_clip_drum"), hash = `COMPONENT_COMBATPDW_CLIP_03` },
- { name = "flashlight", label = _U("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
- { name = "grip", label = _U("component_grip"), hash = `COMPONENT_AT_AR_AFGRIP` },
- { name = "scope", label = _U("component_scope"), hash = `COMPONENT_AT_SCOPE_SMALL` },
+ {
+ name = "clip_default",
+ label = TranslateCap("component_clip_default"),
+ hash = `COMPONENT_COMBATPDW_CLIP_01`,
+ },
+ {
+ name = "clip_extended",
+ label = TranslateCap("component_clip_extended"),
+ hash = `COMPONENT_COMBATPDW_CLIP_02`,
+ },
+ { name = "clip_drum", label = TranslateCap("component_clip_drum"), hash = `COMPONENT_COMBATPDW_CLIP_03` },
+ { name = "flashlight", label = TranslateCap("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
+ { name = "grip", label = TranslateCap("component_grip"), hash = `COMPONENT_AT_AR_AFGRIP` },
+ { name = "scope", label = TranslateCap("component_scope"), hash = `COMPONENT_AT_SCOPE_SMALL` },
},
},
{
name = "WEAPON_GUSENBERG",
- label = _U("weapon_gusenberg"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_MG` },
+ label = TranslateCap("weapon_gusenberg"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_MG` },
tints = Config.DefaultWeaponTints,
components = {
- { name = "clip_default", label = _U("component_clip_default"), hash = `COMPONENT_GUSENBERG_CLIP_01` },
- { name = "clip_extended", label = _U("component_clip_extended"), hash = `COMPONENT_GUSENBERG_CLIP_02` },
+ {
+ name = "clip_default",
+ label = TranslateCap("component_clip_default"),
+ hash = `COMPONENT_GUSENBERG_CLIP_01`,
+ },
+ {
+ name = "clip_extended",
+ label = TranslateCap("component_clip_extended"),
+ hash = `COMPONENT_GUSENBERG_CLIP_02`,
+ },
},
},
{
name = "WEAPON_MACHINEPISTOL",
- label = _U("weapon_machinepistol"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_PISTOL` },
+ label = TranslateCap("weapon_machinepistol"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_PISTOL` },
tints = Config.DefaultWeaponTints,
components = {
- { name = "clip_default", label = _U("component_clip_default"), hash = `COMPONENT_MACHINEPISTOL_CLIP_01` },
- { name = "clip_extended", label = _U("component_clip_extended"), hash = `COMPONENT_MACHINEPISTOL_CLIP_02` },
- { name = "clip_drum", label = _U("component_clip_drum"), hash = `COMPONENT_MACHINEPISTOL_CLIP_03` },
- { name = "suppressor", label = _U("component_suppressor"), hash = `COMPONENT_AT_PI_SUPP` },
+ {
+ name = "clip_default",
+ label = TranslateCap("component_clip_default"),
+ hash = `COMPONENT_MACHINEPISTOL_CLIP_01`,
+ },
+ {
+ name = "clip_extended",
+ label = TranslateCap("component_clip_extended"),
+ hash = `COMPONENT_MACHINEPISTOL_CLIP_02`,
+ },
+ {
+ name = "clip_drum",
+ label = TranslateCap("component_clip_drum"),
+ hash = `COMPONENT_MACHINEPISTOL_CLIP_03`,
+ },
+ { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_PI_SUPP` },
},
},
{
name = "WEAPON_MG",
- label = _U("weapon_mg"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_MG` },
+ label = TranslateCap("weapon_mg"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_MG` },
tints = Config.DefaultWeaponTints,
components = {
- { name = "clip_default", label = _U("component_clip_default"), hash = `COMPONENT_MG_CLIP_01` },
- { name = "clip_extended", label = _U("component_clip_extended"), hash = `COMPONENT_MG_CLIP_02` },
- { name = "scope", label = _U("component_scope"), hash = `COMPONENT_AT_SCOPE_SMALL_02` },
- { name = "luxary_finish", label = _U("component_luxary_finish"), hash = `COMPONENT_MG_VARMOD_LOWRIDER` },
+ { name = "clip_default", label = TranslateCap("component_clip_default"), hash = `COMPONENT_MG_CLIP_01` },
+ { name = "clip_extended", label = TranslateCap("component_clip_extended"), hash = `COMPONENT_MG_CLIP_02` },
+ { name = "scope", label = TranslateCap("component_scope"), hash = `COMPONENT_AT_SCOPE_SMALL_02` },
+ {
+ name = "luxary_finish",
+ label = TranslateCap("component_luxary_finish"),
+ hash = `COMPONENT_MG_VARMOD_LOWRIDER`,
+ },
},
},
{
name = "WEAPON_MICROSMG",
- label = _U("weapon_microsmg"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_SMG` },
+ label = TranslateCap("weapon_microsmg"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_SMG` },
tints = Config.DefaultWeaponTints,
components = {
- { name = "clip_default", label = _U("component_clip_default"), hash = `COMPONENT_MICROSMG_CLIP_01` },
- { name = "clip_extended", label = _U("component_clip_extended"), hash = `COMPONENT_MICROSMG_CLIP_02` },
- { name = "flashlight", label = _U("component_flashlight"), hash = `COMPONENT_AT_PI_FLSH` },
- { name = "scope", label = _U("component_scope"), hash = `COMPONENT_AT_SCOPE_MACRO` },
- { name = "suppressor", label = _U("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP_02` },
- { name = "luxary_finish", label = _U("component_luxary_finish"), hash = `COMPONENT_MICROSMG_VARMOD_LUXE` },
+ {
+ name = "clip_default",
+ label = TranslateCap("component_clip_default"),
+ hash = `COMPONENT_MICROSMG_CLIP_01`,
+ },
+ {
+ name = "clip_extended",
+ label = TranslateCap("component_clip_extended"),
+ hash = `COMPONENT_MICROSMG_CLIP_02`,
+ },
+ { name = "flashlight", label = TranslateCap("component_flashlight"), hash = `COMPONENT_AT_PI_FLSH` },
+ { name = "scope", label = TranslateCap("component_scope"), hash = `COMPONENT_AT_SCOPE_MACRO` },
+ { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP_02` },
+ {
+ name = "luxary_finish",
+ label = TranslateCap("component_luxary_finish"),
+ hash = `COMPONENT_MICROSMG_VARMOD_LUXE`,
+ },
},
},
{
name = "WEAPON_MINISMG",
- label = _U("weapon_minismg"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_SMG` },
+ label = TranslateCap("weapon_minismg"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_SMG` },
tints = Config.DefaultWeaponTints,
components = {
- { name = "clip_default", label = _U("component_clip_default"), hash = `COMPONENT_MINISMG_CLIP_01` },
- { name = "clip_extended", label = _U("component_clip_extended"), hash = `COMPONENT_MINISMG_CLIP_02` },
+ {
+ name = "clip_default",
+ label = TranslateCap("component_clip_default"),
+ hash = `COMPONENT_MINISMG_CLIP_01`,
+ },
+ {
+ name = "clip_extended",
+ label = TranslateCap("component_clip_extended"),
+ hash = `COMPONENT_MINISMG_CLIP_02`,
+ },
},
},
{
name = "WEAPON_SMG",
- label = _U("weapon_smg"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_SMG` },
+ label = TranslateCap("weapon_smg"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_SMG` },
tints = Config.DefaultWeaponTints,
components = {
- { name = "clip_default", label = _U("component_clip_default"), hash = `COMPONENT_SMG_CLIP_01` },
- { name = "clip_extended", label = _U("component_clip_extended"), hash = `COMPONENT_SMG_CLIP_02` },
- { name = "clip_drum", label = _U("component_clip_drum"), hash = `COMPONENT_SMG_CLIP_03` },
- { name = "flashlight", label = _U("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
- { name = "scope", label = _U("component_scope"), hash = `COMPONENT_AT_SCOPE_MACRO_02` },
- { name = "suppressor", label = _U("component_suppressor"), hash = `COMPONENT_AT_PI_SUPP` },
- { name = "luxary_finish", label = _U("component_luxary_finish"), hash = `COMPONENT_SMG_VARMOD_LUXE` },
+ { name = "clip_default", label = TranslateCap("component_clip_default"), hash = `COMPONENT_SMG_CLIP_01` },
+ { name = "clip_extended", label = TranslateCap("component_clip_extended"), hash = `COMPONENT_SMG_CLIP_02` },
+ { name = "clip_drum", label = TranslateCap("component_clip_drum"), hash = `COMPONENT_SMG_CLIP_03` },
+ { name = "flashlight", label = TranslateCap("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
+ { name = "scope", label = TranslateCap("component_scope"), hash = `COMPONENT_AT_SCOPE_MACRO_02` },
+ { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_PI_SUPP` },
+ {
+ name = "luxary_finish",
+ label = TranslateCap("component_luxary_finish"),
+ hash = `COMPONENT_SMG_VARMOD_LUXE`,
+ },
},
},
{
name = "WEAPON_SMG_MK2",
- label = _U("weapon_smg_mk2"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_SMG` },
+ label = TranslateCap("weapon_smg_mk2"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_SMG` },
tints = Config.DefaultWeaponTints,
components = {
- { name = "clip_default", label = _U("component_clip_default"), hash = `COMPONENT_SMG_MK2_CLIP_01` },
- { name = "clip_extended", label = _U("component_clip_extended"), hash = `COMPONENT_SMG_MK2_CLIP_02` },
- { name = "ammo_tracer", label = _U("component_ammo_tracer"), hash = `COMPONENT_SMG_MK2_CLIP_TRACER` },
{
- name = "ammo_incendiary",
- label = _U("component_ammo_incendiary"),
- hash = `COMPONENT_SMG_MK2_CLIP_INCENDIARY`,
+ name = "clip_default",
+ label = TranslateCap("component_clip_default"),
+ hash = `COMPONENT_SMG_MK2_CLIP_01`,
+ },
+ {
+ name = "clip_extended",
+ label = TranslateCap("component_clip_extended"),
+ hash = `COMPONENT_SMG_MK2_CLIP_02`,
+ },
+ {
+ name = "ammo_tracer",
+ label = TranslateCap("component_ammo_tracer"),
+ hash = `COMPONENT_SMG_MK2_CLIP_TRACER`,
+ },
+ {
+ name = "ammo_incendiary",
+ label = TranslateCap("component_ammo_incendiary"),
+ hash = `COMPONENT_SMG_MK2_CLIP_INCENDIARY`,
+ },
+ {
+ name = "ammo_hollowpoint",
+ label = TranslateCap("component_ammo_hollowpoint"),
+ hash = `COMPONENT_SMG_MK2_CLIP_HOLLOWPOINT`,
+ },
+ { name = "ammo_fmj", label = TranslateCap("component_ammo_fmj"), hash = `COMPONENT_SMG_MK2_CLIP_FMJ` },
+ { name = "flashlight", label = TranslateCap("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
+ { name = "scope_holo", label = TranslateCap("component_scope_holo"), hash = `COMPONENT_AT_SIGHTS_SMG` },
+ {
+ name = "scope_small",
+ label = TranslateCap("component_scope_small"),
+ hash = `COMPONENT_AT_SCOPE_MACRO_02_SMG_MK2`,
+ },
+ {
+ name = "scope_medium",
+ label = TranslateCap("component_scope_medium"),
+ hash = `COMPONENT_AT_SCOPE_SMALL_SMG_MK2`,
+ },
+ { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_PI_SUPP` },
+ { name = "muzzle_flat", label = TranslateCap("component_muzzle_flat"), hash = `COMPONENT_AT_MUZZLE_01` },
+ {
+ name = "muzzle_tactical",
+ label = TranslateCap("component_muzzle_tactical"),
+ hash = `COMPONENT_AT_MUZZLE_02`,
+ },
+ { name = "muzzle_fat", label = TranslateCap("component_muzzle_fat"), hash = `COMPONENT_AT_MUZZLE_03` },
+ {
+ name = "muzzle_precision",
+ label = TranslateCap("component_muzzle_precision"),
+ hash = `COMPONENT_AT_MUZZLE_04`,
+ },
+ { name = "muzzle_heavy", label = TranslateCap("component_muzzle_heavy"), hash = `COMPONENT_AT_MUZZLE_05` },
+ {
+ name = "muzzle_slanted",
+ label = TranslateCap("component_muzzle_slanted"),
+ hash = `COMPONENT_AT_MUZZLE_06`,
+ },
+ { name = "muzzle_split", label = TranslateCap("component_muzzle_split"), hash = `COMPONENT_AT_MUZZLE_07` },
+ {
+ name = "barrel_default",
+ label = TranslateCap("component_barrel_default"),
+ hash = `COMPONENT_AT_SB_BARREL_01`,
+ },
+ {
+ name = "barrel_heavy",
+ label = TranslateCap("component_barrel_heavy"),
+ hash = `COMPONENT_AT_SB_BARREL_02`,
+ },
+ { name = "camo_finish", label = TranslateCap("component_camo_finish"), hash = `COMPONENT_SMG_MK2_CAMO` },
+ {
+ name = "camo_finish2",
+ label = TranslateCap("component_camo_finish2"),
+ hash = `COMPONENT_SMG_MK2_CAMO_02`,
+ },
+ {
+ name = "camo_finish3",
+ label = TranslateCap("component_camo_finish3"),
+ hash = `COMPONENT_SMG_MK2_CAMO_03`,
+ },
+ {
+ name = "camo_finish4",
+ label = TranslateCap("component_camo_finish4"),
+ hash = `COMPONENT_SMG_MK2_CAMO_04`,
+ },
+ {
+ name = "camo_finish5",
+ label = TranslateCap("component_camo_finish5"),
+ hash = `COMPONENT_SMG_MK2_CAMO_05`,
},
{
- name = "ammo_hollowpoint",
- label = _U("component_ammo_hollowpoint"),
- hash = `COMPONENT_SMG_MK2_CLIP_HOLLOWPOINT`,
+ name = "camo_finish6",
+ label = TranslateCap("component_camo_finish6"),
+ hash = `COMPONENT_SMG_MK2_CAMO_06`,
+ },
+ {
+ name = "camo_finish7",
+ label = TranslateCap("component_camo_finish7"),
+ hash = `COMPONENT_SMG_MK2_CAMO_07`,
+ },
+ {
+ name = "camo_finish8",
+ label = TranslateCap("component_camo_finish8"),
+ hash = `COMPONENT_SMG_MK2_CAMO_08`,
+ },
+ {
+ name = "camo_finish9",
+ label = TranslateCap("component_camo_finish9"),
+ hash = `COMPONENT_SMG_MK2_CAMO_09`,
+ },
+ {
+ name = "camo_finish10",
+ label = TranslateCap("component_camo_finish10"),
+ hash = `COMPONENT_SMG_MK2_CAMO_10`,
+ },
+ {
+ name = "camo_finish11",
+ label = TranslateCap("component_camo_finish11"),
+ hash = `COMPONENT_SMG_MK2_CAMO_IND_01`,
},
- { name = "ammo_fmj", label = _U("component_ammo_fmj"), hash = `COMPONENT_SMG_MK2_CLIP_FMJ` },
- { name = "flashlight", label = _U("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
- { name = "scope_holo", label = _U("component_scope_holo"), hash = `COMPONENT_AT_SIGHTS_SMG` },
- { name = "scope_small", label = _U("component_scope_small"), hash = `COMPONENT_AT_SCOPE_MACRO_02_SMG_MK2` },
- { name = "scope_medium", label = _U("component_scope_medium"), hash = `COMPONENT_AT_SCOPE_SMALL_SMG_MK2` },
- { name = "suppressor", label = _U("component_suppressor"), hash = `COMPONENT_AT_PI_SUPP` },
- { name = "muzzle_flat", label = _U("component_muzzle_flat"), hash = `COMPONENT_AT_MUZZLE_01` },
- { name = "muzzle_tactical", label = _U("component_muzzle_tactical"), hash = `COMPONENT_AT_MUZZLE_02` },
- { name = "muzzle_fat", label = _U("component_muzzle_fat"), hash = `COMPONENT_AT_MUZZLE_03` },
- { name = "muzzle_precision", label = _U("component_muzzle_precision"), hash = `COMPONENT_AT_MUZZLE_04` },
- { name = "muzzle_heavy", label = _U("component_muzzle_heavy"), hash = `COMPONENT_AT_MUZZLE_05` },
- { name = "muzzle_slanted", label = _U("component_muzzle_slanted"), hash = `COMPONENT_AT_MUZZLE_06` },
- { name = "muzzle_split", label = _U("component_muzzle_split"), hash = `COMPONENT_AT_MUZZLE_07` },
- { name = "barrel_default", label = _U("component_barrel_default"), hash = `COMPONENT_AT_SB_BARREL_01` },
- { name = "barrel_heavy", label = _U("component_barrel_heavy"), hash = `COMPONENT_AT_SB_BARREL_02` },
- { name = "camo_finish", label = _U("component_camo_finish"), hash = `COMPONENT_SMG_MK2_CAMO` },
- { name = "camo_finish2", label = _U("component_camo_finish2"), hash = `COMPONENT_SMG_MK2_CAMO_02` },
- { name = "camo_finish3", label = _U("component_camo_finish3"), hash = `COMPONENT_SMG_MK2_CAMO_03` },
- { name = "camo_finish4", label = _U("component_camo_finish4"), hash = `COMPONENT_SMG_MK2_CAMO_04` },
- { name = "camo_finish5", label = _U("component_camo_finish5"), hash = `COMPONENT_SMG_MK2_CAMO_05` },
- { name = "camo_finish6", label = _U("component_camo_finish6"), hash = `COMPONENT_SMG_MK2_CAMO_06` },
- { name = "camo_finish7", label = _U("component_camo_finish7"), hash = `COMPONENT_SMG_MK2_CAMO_07` },
- { name = "camo_finish8", label = _U("component_camo_finish8"), hash = `COMPONENT_SMG_MK2_CAMO_08` },
- { name = "camo_finish9", label = _U("component_camo_finish9"), hash = `COMPONENT_SMG_MK2_CAMO_09` },
- { name = "camo_finish10", label = _U("component_camo_finish10"), hash = `COMPONENT_SMG_MK2_CAMO_10` },
- { name = "camo_finish11", label = _U("component_camo_finish11"), hash = `COMPONENT_SMG_MK2_CAMO_IND_01` },
},
},
{
name = "WEAPON_RAYCARBINE",
- label = _U("weapon_raycarbine"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_SMG` },
+ label = TranslateCap("weapon_raycarbine"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_SMG` },
tints = Config.DefaultWeaponTints,
components = {},
},
-- Rifles
{
name = "WEAPON_ADVANCEDRIFLE",
- label = _U("weapon_advancedrifle"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_RIFLE` },
+ label = TranslateCap("weapon_advancedrifle"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_RIFLE` },
tints = Config.DefaultWeaponTints,
components = {
- { name = "clip_default", label = _U("component_clip_default"), hash = `COMPONENT_ADVANCEDRIFLE_CLIP_01` },
- { name = "clip_extended", label = _U("component_clip_extended"), hash = `COMPONENT_ADVANCEDRIFLE_CLIP_02` },
- { name = "flashlight", label = _U("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
- { name = "scope", label = _U("component_scope"), hash = `COMPONENT_AT_SCOPE_SMALL` },
- { name = "suppressor", label = _U("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP` },
+ {
+ name = "clip_default",
+ label = TranslateCap("component_clip_default"),
+ hash = `COMPONENT_ADVANCEDRIFLE_CLIP_01`,
+ },
+ {
+ name = "clip_extended",
+ label = TranslateCap("component_clip_extended"),
+ hash = `COMPONENT_ADVANCEDRIFLE_CLIP_02`,
+ },
+ { name = "flashlight", label = TranslateCap("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
+ { name = "scope", label = TranslateCap("component_scope"), hash = `COMPONENT_AT_SCOPE_SMALL` },
+ { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP` },
{
name = "luxary_finish",
- label = _U("component_luxary_finish"),
+ label = TranslateCap("component_luxary_finish"),
hash = `COMPONENT_ADVANCEDRIFLE_VARMOD_LUXE`,
},
},
},
{
name = "WEAPON_ASSAULTRIFLE",
- label = _U("weapon_assaultrifle"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_RIFLE` },
+ label = TranslateCap("weapon_assaultrifle"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_RIFLE` },
tints = Config.DefaultWeaponTints,
components = {
- { name = "clip_default", label = _U("component_clip_default"), hash = `COMPONENT_ASSAULTRIFLE_CLIP_01` },
- { name = "clip_extended", label = _U("component_clip_extended"), hash = `COMPONENT_ASSAULTRIFLE_CLIP_02` },
- { name = "clip_drum", label = _U("component_clip_drum"), hash = `COMPONENT_ASSAULTRIFLE_CLIP_03` },
- { name = "flashlight", label = _U("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
- { name = "scope", label = _U("component_scope"), hash = `COMPONENT_AT_SCOPE_MACRO` },
- { name = "suppressor", label = _U("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP_02` },
- { name = "grip", label = _U("component_grip"), hash = `COMPONENT_AT_AR_AFGRIP` },
+ {
+ name = "clip_default",
+ label = TranslateCap("component_clip_default"),
+ hash = `COMPONENT_ASSAULTRIFLE_CLIP_01`,
+ },
+ {
+ name = "clip_extended",
+ label = TranslateCap("component_clip_extended"),
+ hash = `COMPONENT_ASSAULTRIFLE_CLIP_02`,
+ },
+ {
+ name = "clip_drum",
+ label = TranslateCap("component_clip_drum"),
+ hash = `COMPONENT_ASSAULTRIFLE_CLIP_03`,
+ },
+ { name = "flashlight", label = TranslateCap("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
+ { name = "scope", label = TranslateCap("component_scope"), hash = `COMPONENT_AT_SCOPE_MACRO` },
+ { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP_02` },
+ { name = "grip", label = TranslateCap("component_grip"), hash = `COMPONENT_AT_AR_AFGRIP` },
{
name = "luxary_finish",
- label = _U("component_luxary_finish"),
+ label = TranslateCap("component_luxary_finish"),
hash = `COMPONENT_ASSAULTRIFLE_VARMOD_LUXE`,
},
},
},
{
name = "WEAPON_ASSAULTRIFLE_MK2",
- label = _U("weapon_assaultrifle_mk2"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_RIFLE` },
+ label = TranslateCap("weapon_assaultrifle_mk2"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_RIFLE` },
tints = Config.DefaultWeaponTints,
components = {
{
name = "clip_default",
- label = _U("component_clip_default"),
+ label = TranslateCap("component_clip_default"),
hash = `COMPONENT_ASSAULTRIFLE_MK2_CLIP_01`,
},
{
name = "clip_extended",
- label = _U("component_clip_extended"),
+ label = TranslateCap("component_clip_extended"),
hash = `COMPONENT_ASSAULTRIFLE_MK2_CLIP_02`,
},
{
name = "ammo_tracer",
- label = _U("component_ammo_tracer"),
+ label = TranslateCap("component_ammo_tracer"),
hash = `COMPONENT_ASSAULTRIFLE_MK2_CLIP_TRACER`,
},
{
name = "ammo_incendiary",
- label = _U("component_ammo_incendiary"),
+ label = TranslateCap("component_ammo_incendiary"),
hash = `COMPONENT_ASSAULTRIFLE_MK2_CLIP_INCENDIARY`,
},
{
name = "ammo_armor",
- label = _U("component_ammo_armor"),
+ label = TranslateCap("component_ammo_armor"),
hash = `COMPONENT_ASSAULTRIFLE_MK2_CLIP_ARMORPIERCING`,
},
- { name = "ammo_fmj", label = _U("component_ammo_fmj"), hash = `COMPONENT_ASSAULTRIFLE_MK2_CLIP_FMJ` },
- { name = "grip", label = _U("component_grip"), hash = `COMPONENT_AT_AR_AFGRIP_02` },
- { name = "flashlight", label = _U("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
- { name = "scope_holo", label = _U("component_scope_holo"), hash = `COMPONENT_AT_SIGHTS` },
- { name = "scope_small", label = _U("component_scope_small"), hash = `COMPONENT_AT_SCOPE_MACRO_MK2` },
- { name = "scope_large", label = _U("component_scope_large"), hash = `COMPONENT_AT_SCOPE_MEDIUM_MK2` },
- { name = "suppressor", label = _U("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP_02` },
- { name = "muzzle_flat", label = _U("component_muzzle_flat"), hash = `COMPONENT_AT_MUZZLE_01` },
- { name = "muzzle_tactical", label = _U("component_muzzle_tactical"), hash = `COMPONENT_AT_MUZZLE_02` },
- { name = "muzzle_fat", label = _U("component_muzzle_fat"), hash = `COMPONENT_AT_MUZZLE_03` },
- { name = "muzzle_precision", label = _U("component_muzzle_precision"), hash = `COMPONENT_AT_MUZZLE_04` },
- { name = "muzzle_heavy", label = _U("component_muzzle_heavy"), hash = `COMPONENT_AT_MUZZLE_05` },
- { name = "muzzle_slanted", label = _U("component_muzzle_slanted"), hash = `COMPONENT_AT_MUZZLE_06` },
- { name = "muzzle_split", label = _U("component_muzzle_split"), hash = `COMPONENT_AT_MUZZLE_07` },
- { name = "barrel_default", label = _U("component_barrel_default"), hash = `COMPONENT_AT_AR_BARREL_01` },
- { name = "barrel_heavy", label = _U("component_barrel_heavy"), hash = `COMPONENT_AT_AR_BARREL_02` },
- { name = "camo_finish", label = _U("component_camo_finish"), hash = `COMPONENT_ASSAULTRIFLE_MK2_CAMO` },
+ {
+ name = "ammo_fmj",
+ label = TranslateCap("component_ammo_fmj"),
+ hash = `COMPONENT_ASSAULTRIFLE_MK2_CLIP_FMJ`,
+ },
+ { name = "grip", label = TranslateCap("component_grip"), hash = `COMPONENT_AT_AR_AFGRIP_02` },
+ { name = "flashlight", label = TranslateCap("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
+ { name = "scope_holo", label = TranslateCap("component_scope_holo"), hash = `COMPONENT_AT_SIGHTS` },
+ {
+ name = "scope_small",
+ label = TranslateCap("component_scope_small"),
+ hash = `COMPONENT_AT_SCOPE_MACRO_MK2`,
+ },
+ {
+ name = "scope_large",
+ label = TranslateCap("component_scope_large"),
+ hash = `COMPONENT_AT_SCOPE_MEDIUM_MK2`,
+ },
+ { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP_02` },
+ { name = "muzzle_flat", label = TranslateCap("component_muzzle_flat"), hash = `COMPONENT_AT_MUZZLE_01` },
+ {
+ name = "muzzle_tactical",
+ label = TranslateCap("component_muzzle_tactical"),
+ hash = `COMPONENT_AT_MUZZLE_02`,
+ },
+ { name = "muzzle_fat", label = TranslateCap("component_muzzle_fat"), hash = `COMPONENT_AT_MUZZLE_03` },
+ {
+ name = "muzzle_precision",
+ label = TranslateCap("component_muzzle_precision"),
+ hash = `COMPONENT_AT_MUZZLE_04`,
+ },
+ { name = "muzzle_heavy", label = TranslateCap("component_muzzle_heavy"), hash = `COMPONENT_AT_MUZZLE_05` },
+ {
+ name = "muzzle_slanted",
+ label = TranslateCap("component_muzzle_slanted"),
+ hash = `COMPONENT_AT_MUZZLE_06`,
+ },
+ { name = "muzzle_split", label = TranslateCap("component_muzzle_split"), hash = `COMPONENT_AT_MUZZLE_07` },
+ {
+ name = "barrel_default",
+ label = TranslateCap("component_barrel_default"),
+ hash = `COMPONENT_AT_AR_BARREL_01`,
+ },
+ {
+ name = "barrel_heavy",
+ label = TranslateCap("component_barrel_heavy"),
+ hash = `COMPONENT_AT_AR_BARREL_02`,
+ },
+ {
+ name = "camo_finish",
+ label = TranslateCap("component_camo_finish"),
+ hash = `COMPONENT_ASSAULTRIFLE_MK2_CAMO`,
+ },
{
name = "camo_finish2",
- label = _U("component_camo_finish2"),
+ label = TranslateCap("component_camo_finish2"),
hash = `COMPONENT_ASSAULTRIFLE_MK2_CAMO_02`,
},
{
name = "camo_finish3",
- label = _U("component_camo_finish3"),
+ label = TranslateCap("component_camo_finish3"),
hash = `COMPONENT_ASSAULTRIFLE_MK2_CAMO_03`,
},
{
name = "camo_finish4",
- label = _U("component_camo_finish4"),
+ label = TranslateCap("component_camo_finish4"),
hash = `COMPONENT_ASSAULTRIFLE_MK2_CAMO_04`,
},
{
name = "camo_finish5",
- label = _U("component_camo_finish5"),
+ label = TranslateCap("component_camo_finish5"),
hash = `COMPONENT_ASSAULTRIFLE_MK2_CAMO_05`,
},
{
name = "camo_finish6",
- label = _U("component_camo_finish6"),
+ label = TranslateCap("component_camo_finish6"),
hash = `COMPONENT_ASSAULTRIFLE_MK2_CAMO_06`,
},
{
name = "camo_finish7",
- label = _U("component_camo_finish7"),
+ label = TranslateCap("component_camo_finish7"),
hash = `COMPONENT_ASSAULTRIFLE_MK2_CAMO_07`,
},
{
name = "camo_finish8",
- label = _U("component_camo_finish8"),
+ label = TranslateCap("component_camo_finish8"),
hash = `COMPONENT_ASSAULTRIFLE_MK2_CAMO_08`,
},
{
name = "camo_finish9",
- label = _U("component_camo_finish9"),
+ label = TranslateCap("component_camo_finish9"),
hash = `COMPONENT_ASSAULTRIFLE_MK2_CAMO_09`,
},
{
name = "camo_finish10",
- label = _U("component_camo_finish10"),
+ label = TranslateCap("component_camo_finish10"),
hash = `COMPONENT_ASSAULTRIFLE_MK2_CAMO_10`,
},
{
name = "camo_finish11",
- label = _U("component_camo_finish11"),
+ label = TranslateCap("component_camo_finish11"),
hash = `COMPONENT_ASSAULTRIFLE_MK2_CAMO_IND_01`,
},
},
},
{
name = "WEAPON_BULLPUPRIFLE",
- label = _U("weapon_bullpuprifle"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_RIFLE` },
+ label = TranslateCap("weapon_bullpuprifle"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_RIFLE` },
tints = Config.DefaultWeaponTints,
components = {
- { name = "clip_default", label = _U("component_clip_default"), hash = `COMPONENT_BULLPUPRIFLE_CLIP_01` },
- { name = "clip_extended", label = _U("component_clip_extended"), hash = `COMPONENT_BULLPUPRIFLE_CLIP_02` },
- { name = "flashlight", label = _U("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
- { name = "scope", label = _U("component_scope"), hash = `COMPONENT_AT_SCOPE_SMALL` },
- { name = "suppressor", label = _U("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP` },
- { name = "grip", label = _U("component_grip"), hash = `COMPONENT_AT_AR_AFGRIP` },
+ {
+ name = "clip_default",
+ label = TranslateCap("component_clip_default"),
+ hash = `COMPONENT_BULLPUPRIFLE_CLIP_01`,
+ },
+ {
+ name = "clip_extended",
+ label = TranslateCap("component_clip_extended"),
+ hash = `COMPONENT_BULLPUPRIFLE_CLIP_02`,
+ },
+ { name = "flashlight", label = TranslateCap("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
+ { name = "scope", label = TranslateCap("component_scope"), hash = `COMPONENT_AT_SCOPE_SMALL` },
+ { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP` },
+ { name = "grip", label = TranslateCap("component_grip"), hash = `COMPONENT_AT_AR_AFGRIP` },
{
name = "luxary_finish",
- label = _U("component_luxary_finish"),
+ label = TranslateCap("component_luxary_finish"),
hash = `COMPONENT_BULLPUPRIFLE_VARMOD_LOW`,
},
},
},
{
name = "WEAPON_BULLPUPRIFLE_MK2",
- label = _U("weapon_bullpuprifle_mk2"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_RIFLE` },
+ label = TranslateCap("weapon_bullpuprifle_mk2"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_RIFLE` },
tints = Config.DefaultWeaponTints,
components = {
{
name = "clip_default",
- label = _U("component_clip_default"),
+ label = TranslateCap("component_clip_default"),
hash = `COMPONENT_BULLPUPRIFLE_MK2_CLIP_01`,
},
{
name = "clip_extended",
- label = _U("component_clip_extended"),
+ label = TranslateCap("component_clip_extended"),
hash = `COMPONENT_BULLPUPRIFLE_MK2_CLIP_02`,
},
{
name = "ammo_tracer",
- label = _U("component_ammo_tracer"),
+ label = TranslateCap("component_ammo_tracer"),
hash = `COMPONENT_BULLPUPRIFLE_MK2_CLIP_TRACER`,
},
{
name = "ammo_incendiary",
- label = _U("component_ammo_incendiary"),
+ label = TranslateCap("component_ammo_incendiary"),
hash = `COMPONENT_BULLPUPRIFLE_MK2_CLIP_INCENDIARY`,
},
{
name = "ammo_armor",
- label = _U("component_ammo_armor"),
+ label = TranslateCap("component_ammo_armor"),
hash = `COMPONENT_BULLPUPRIFLE_MK2_CLIP_ARMORPIERCING`,
},
- { name = "ammo_fmj", label = _U("component_ammo_fmj"), hash = `COMPONENT_BULLPUPRIFLE_MK2_CLIP_FMJ` },
- { name = "flashlight", label = _U("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
- { name = "scope_holo", label = _U("component_scope_holo"), hash = `COMPONENT_AT_SIGHTS` },
- { name = "scope_small", label = _U("component_scope_small"), hash = `COMPONENT_AT_SCOPE_MACRO_02_MK2` },
- { name = "scope_medium", label = _U("component_scope_medium"), hash = `COMPONENT_AT_SCOPE_SMALL_MK2` },
- { name = "barrel_default", label = _U("component_barrel_default"), hash = `COMPONENT_AT_BP_BARREL_01` },
- { name = "barrel_heavy", label = _U("component_barrel_heavy"), hash = `COMPONENT_AT_BP_BARREL_02` },
- { name = "suppressor", label = _U("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP` },
- { name = "muzzle_flat", label = _U("component_muzzle_flat"), hash = `COMPONENT_AT_MUZZLE_01` },
- { name = "muzzle_tactical", label = _U("component_muzzle_tactical"), hash = `COMPONENT_AT_MUZZLE_02` },
- { name = "muzzle_fat", label = _U("component_muzzle_fat"), hash = `COMPONENT_AT_MUZZLE_03` },
- { name = "muzzle_precision", label = _U("component_muzzle_precision"), hash = `COMPONENT_AT_MUZZLE_04` },
- { name = "muzzle_heavy", label = _U("component_muzzle_heavy"), hash = `COMPONENT_AT_MUZZLE_05` },
- { name = "muzzle_slanted", label = _U("component_muzzle_slanted"), hash = `COMPONENT_AT_MUZZLE_06` },
- { name = "muzzle_split", label = _U("component_muzzle_split"), hash = `COMPONENT_AT_MUZZLE_07` },
- { name = "grip", label = _U("component_grip"), hash = `COMPONENT_AT_AR_AFGRIP_02` },
- { name = "camo_finish", label = _U("component_camo_finish"), hash = `COMPONENT_BULLPUPRIFLE_MK2_CAMO` },
+ {
+ name = "ammo_fmj",
+ label = TranslateCap("component_ammo_fmj"),
+ hash = `COMPONENT_BULLPUPRIFLE_MK2_CLIP_FMJ`,
+ },
+ { name = "flashlight", label = TranslateCap("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
+ { name = "scope_holo", label = TranslateCap("component_scope_holo"), hash = `COMPONENT_AT_SIGHTS` },
+ {
+ name = "scope_small",
+ label = TranslateCap("component_scope_small"),
+ hash = `COMPONENT_AT_SCOPE_MACRO_02_MK2`,
+ },
+ {
+ name = "scope_medium",
+ label = TranslateCap("component_scope_medium"),
+ hash = `COMPONENT_AT_SCOPE_SMALL_MK2`,
+ },
+ {
+ name = "barrel_default",
+ label = TranslateCap("component_barrel_default"),
+ hash = `COMPONENT_AT_BP_BARREL_01`,
+ },
+ {
+ name = "barrel_heavy",
+ label = TranslateCap("component_barrel_heavy"),
+ hash = `COMPONENT_AT_BP_BARREL_02`,
+ },
+ { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP` },
+ { name = "muzzle_flat", label = TranslateCap("component_muzzle_flat"), hash = `COMPONENT_AT_MUZZLE_01` },
+ {
+ name = "muzzle_tactical",
+ label = TranslateCap("component_muzzle_tactical"),
+ hash = `COMPONENT_AT_MUZZLE_02`,
+ },
+ { name = "muzzle_fat", label = TranslateCap("component_muzzle_fat"), hash = `COMPONENT_AT_MUZZLE_03` },
+ {
+ name = "muzzle_precision",
+ label = TranslateCap("component_muzzle_precision"),
+ hash = `COMPONENT_AT_MUZZLE_04`,
+ },
+ { name = "muzzle_heavy", label = TranslateCap("component_muzzle_heavy"), hash = `COMPONENT_AT_MUZZLE_05` },
+ {
+ name = "muzzle_slanted",
+ label = TranslateCap("component_muzzle_slanted"),
+ hash = `COMPONENT_AT_MUZZLE_06`,
+ },
+ { name = "muzzle_split", label = TranslateCap("component_muzzle_split"), hash = `COMPONENT_AT_MUZZLE_07` },
+ { name = "grip", label = TranslateCap("component_grip"), hash = `COMPONENT_AT_AR_AFGRIP_02` },
+ {
+ name = "camo_finish",
+ label = TranslateCap("component_camo_finish"),
+ hash = `COMPONENT_BULLPUPRIFLE_MK2_CAMO`,
+ },
{
name = "camo_finish2",
- label = _U("component_camo_finish2"),
+ label = TranslateCap("component_camo_finish2"),
hash = `COMPONENT_BULLPUPRIFLE_MK2_CAMO_02`,
},
{
name = "camo_finish3",
- label = _U("component_camo_finish3"),
+ label = TranslateCap("component_camo_finish3"),
hash = `COMPONENT_BULLPUPRIFLE_MK2_CAMO_03`,
},
{
name = "camo_finish4",
- label = _U("component_camo_finish4"),
+ label = TranslateCap("component_camo_finish4"),
hash = `COMPONENT_BULLPUPRIFLE_MK2_CAMO_04`,
},
{
name = "camo_finish5",
- label = _U("component_camo_finish5"),
+ label = TranslateCap("component_camo_finish5"),
hash = `COMPONENT_BULLPUPRIFLE_MK2_CAMO_05`,
},
{
name = "camo_finish6",
- label = _U("component_camo_finish6"),
+ label = TranslateCap("component_camo_finish6"),
hash = `COMPONENT_BULLPUPRIFLE_MK2_CAMO_06`,
},
{
name = "camo_finish7",
- label = _U("component_camo_finish7"),
+ label = TranslateCap("component_camo_finish7"),
hash = `COMPONENT_BULLPUPRIFLE_MK2_CAMO_07`,
},
{
name = "camo_finish8",
- label = _U("component_camo_finish8"),
+ label = TranslateCap("component_camo_finish8"),
hash = `COMPONENT_BULLPUPRIFLE_MK2_CAMO_08`,
},
{
name = "camo_finish9",
- label = _U("component_camo_finish9"),
+ label = TranslateCap("component_camo_finish9"),
hash = `COMPONENT_BULLPUPRIFLE_MK2_CAMO_09`,
},
{
name = "camo_finish10",
- label = _U("component_camo_finish10"),
+ label = TranslateCap("component_camo_finish10"),
hash = `COMPONENT_BULLPUPRIFLE_MK2_CAMO_10`,
},
{
name = "camo_finish11",
- label = _U("component_camo_finish11"),
+ label = TranslateCap("component_camo_finish11"),
hash = `COMPONENT_BULLPUPRIFLE_MK2_CAMO_IND_01`,
},
},
},
{
name = "WEAPON_CARBINERIFLE",
- label = _U("weapon_carbinerifle"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_RIFLE` },
+ label = TranslateCap("weapon_carbinerifle"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_RIFLE` },
tints = Config.DefaultWeaponTints,
components = {
- { name = "clip_default", label = _U("component_clip_default"), hash = `COMPONENT_CARBINERIFLE_CLIP_01` },
- { name = "clip_extended", label = _U("component_clip_extended"), hash = `COMPONENT_CARBINERIFLE_CLIP_02` },
- { name = "clip_box", label = _U("component_clip_box"), hash = `COMPONENT_CARBINERIFLE_CLIP_03` },
- { name = "flashlight", label = _U("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
- { name = "scope", label = _U("component_scope"), hash = `COMPONENT_AT_SCOPE_MEDIUM` },
- { name = "suppressor", label = _U("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP` },
- { name = "grip", label = _U("component_grip"), hash = `COMPONENT_AT_AR_AFGRIP` },
+ {
+ name = "clip_default",
+ label = TranslateCap("component_clip_default"),
+ hash = `COMPONENT_CARBINERIFLE_CLIP_01`,
+ },
+ {
+ name = "clip_extended",
+ label = TranslateCap("component_clip_extended"),
+ hash = `COMPONENT_CARBINERIFLE_CLIP_02`,
+ },
+ { name = "clip_box", label = TranslateCap("component_clip_box"), hash = `COMPONENT_CARBINERIFLE_CLIP_03` },
+ { name = "flashlight", label = TranslateCap("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
+ { name = "scope", label = TranslateCap("component_scope"), hash = `COMPONENT_AT_SCOPE_MEDIUM` },
+ { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP` },
+ { name = "grip", label = TranslateCap("component_grip"), hash = `COMPONENT_AT_AR_AFGRIP` },
{
name = "luxary_finish",
- label = _U("component_luxary_finish"),
+ label = TranslateCap("component_luxary_finish"),
hash = `COMPONENT_CARBINERIFLE_VARMOD_LUXE`,
},
},
},
{
name = "WEAPON_CARBINERIFLE_MK2",
- label = _U("weapon_carbinerifle_mk2"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_RIFLE` },
+ label = TranslateCap("weapon_carbinerifle_mk2"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_RIFLE` },
tints = Config.DefaultWeaponTints,
components = {
{
name = "clip_default",
- label = _U("component_clip_default"),
+ label = TranslateCap("component_clip_default"),
hash = `COMPONENT_CARBINERIFLE_MK2_CLIP_01`,
},
{
name = "clip_extended",
- label = _U("component_clip_extended"),
+ label = TranslateCap("component_clip_extended"),
hash = `COMPONENT_CARBINERIFLE_MK2_CLIP_02`,
},
{
name = "ammo_tracer",
- label = _U("component_ammo_tracer"),
+ label = TranslateCap("component_ammo_tracer"),
hash = `COMPONENT_CARBINERIFLE_MK2_CLIP_TRACER`,
},
{
name = "ammo_incendiary",
- label = _U("component_ammo_incendiary"),
+ label = TranslateCap("component_ammo_incendiary"),
hash = `COMPONENT_CARBINERIFLE_MK2_CLIP_INCENDIARY`,
},
{
name = "ammo_armor",
- label = _U("component_ammo_armor"),
+ label = TranslateCap("component_ammo_armor"),
hash = `COMPONENT_CARBINERIFLE_MK2_CLIP_ARMORPIERCING`,
},
- { name = "ammo_fmj", label = _U("component_ammo_fmj"), hash = `COMPONENT_CARBINERIFLE_MK2_CLIP_FMJ` },
- { name = "grip", label = _U("component_grip"), hash = `COMPONENT_AT_AR_AFGRIP_02` },
- { name = "flashlight", label = _U("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
- { name = "scope_holo", label = _U("component_scope_holo"), hash = `COMPONENT_AT_SIGHTS` },
- { name = "scope_medium", label = _U("component_scope_medium"), hash = `COMPONENT_AT_SCOPE_MACRO_MK2` },
- { name = "scope_large", label = _U("component_scope_large"), hash = `COMPONENT_AT_SCOPE_MEDIUM_MK2` },
- { name = "suppressor", label = _U("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP` },
- { name = "muzzle_flat", label = _U("component_muzzle_flat"), hash = `COMPONENT_AT_MUZZLE_01` },
- { name = "muzzle_tactical", label = _U("component_muzzle_tactical"), hash = `COMPONENT_AT_MUZZLE_02` },
- { name = "muzzle_fat", label = _U("component_muzzle_fat"), hash = `COMPONENT_AT_MUZZLE_03` },
- { name = "muzzle_precision", label = _U("component_muzzle_precision"), hash = `COMPONENT_AT_MUZZLE_04` },
- { name = "muzzle_heavy", label = _U("component_muzzle_heavy"), hash = `COMPONENT_AT_MUZZLE_05` },
- { name = "muzzle_slanted", label = _U("component_muzzle_slanted"), hash = `COMPONENT_AT_MUZZLE_06` },
- { name = "muzzle_split", label = _U("component_muzzle_split"), hash = `COMPONENT_AT_MUZZLE_07` },
- { name = "barrel_default", label = _U("component_barrel_default"), hash = `COMPONENT_AT_CR_BARREL_01` },
- { name = "barrel_heavy", label = _U("component_barrel_heavy"), hash = `COMPONENT_AT_CR_BARREL_02` },
- { name = "camo_finish", label = _U("component_camo_finish"), hash = `COMPONENT_CARBINERIFLE_MK2_CAMO` },
+ {
+ name = "ammo_fmj",
+ label = TranslateCap("component_ammo_fmj"),
+ hash = `COMPONENT_CARBINERIFLE_MK2_CLIP_FMJ`,
+ },
+ { name = "grip", label = TranslateCap("component_grip"), hash = `COMPONENT_AT_AR_AFGRIP_02` },
+ { name = "flashlight", label = TranslateCap("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
+ { name = "scope_holo", label = TranslateCap("component_scope_holo"), hash = `COMPONENT_AT_SIGHTS` },
+ {
+ name = "scope_medium",
+ label = TranslateCap("component_scope_medium"),
+ hash = `COMPONENT_AT_SCOPE_MACRO_MK2`,
+ },
+ {
+ name = "scope_large",
+ label = TranslateCap("component_scope_large"),
+ hash = `COMPONENT_AT_SCOPE_MEDIUM_MK2`,
+ },
+ { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP` },
+ { name = "muzzle_flat", label = TranslateCap("component_muzzle_flat"), hash = `COMPONENT_AT_MUZZLE_01` },
+ {
+ name = "muzzle_tactical",
+ label = TranslateCap("component_muzzle_tactical"),
+ hash = `COMPONENT_AT_MUZZLE_02`,
+ },
+ { name = "muzzle_fat", label = TranslateCap("component_muzzle_fat"), hash = `COMPONENT_AT_MUZZLE_03` },
+ {
+ name = "muzzle_precision",
+ label = TranslateCap("component_muzzle_precision"),
+ hash = `COMPONENT_AT_MUZZLE_04`,
+ },
+ { name = "muzzle_heavy", label = TranslateCap("component_muzzle_heavy"), hash = `COMPONENT_AT_MUZZLE_05` },
+ {
+ name = "muzzle_slanted",
+ label = TranslateCap("component_muzzle_slanted"),
+ hash = `COMPONENT_AT_MUZZLE_06`,
+ },
+ { name = "muzzle_split", label = TranslateCap("component_muzzle_split"), hash = `COMPONENT_AT_MUZZLE_07` },
+ {
+ name = "barrel_default",
+ label = TranslateCap("component_barrel_default"),
+ hash = `COMPONENT_AT_CR_BARREL_01`,
+ },
+ {
+ name = "barrel_heavy",
+ label = TranslateCap("component_barrel_heavy"),
+ hash = `COMPONENT_AT_CR_BARREL_02`,
+ },
+ {
+ name = "camo_finish",
+ label = TranslateCap("component_camo_finish"),
+ hash = `COMPONENT_CARBINERIFLE_MK2_CAMO`,
+ },
{
name = "camo_finish2",
- label = _U("component_camo_finish2"),
+ label = TranslateCap("component_camo_finish2"),
hash = `COMPONENT_CARBINERIFLE_MK2_CAMO_02`,
},
{
name = "camo_finish3",
- label = _U("component_camo_finish3"),
+ label = TranslateCap("component_camo_finish3"),
hash = `COMPONENT_CARBINERIFLE_MK2_CAMO_03`,
},
{
name = "camo_finish4",
- label = _U("component_camo_finish4"),
+ label = TranslateCap("component_camo_finish4"),
hash = `COMPONENT_CARBINERIFLE_MK2_CAMO_04`,
},
{
name = "camo_finish5",
- label = _U("component_camo_finish5"),
+ label = TranslateCap("component_camo_finish5"),
hash = `COMPONENT_CARBINERIFLE_MK2_CAMO_05`,
},
{
name = "camo_finish6",
- label = _U("component_camo_finish6"),
+ label = TranslateCap("component_camo_finish6"),
hash = `COMPONENT_CARBINERIFLE_MK2_CAMO_06`,
},
{
name = "camo_finish7",
- label = _U("component_camo_finish7"),
+ label = TranslateCap("component_camo_finish7"),
hash = `COMPONENT_CARBINERIFLE_MK2_CAMO_07`,
},
{
name = "camo_finish8",
- label = _U("component_camo_finish8"),
+ label = TranslateCap("component_camo_finish8"),
hash = `COMPONENT_CARBINERIFLE_MK2_CAMO_08`,
},
{
name = "camo_finish9",
- label = _U("component_camo_finish9"),
+ label = TranslateCap("component_camo_finish9"),
hash = `COMPONENT_CARBINERIFLE_MK2_CAMO_09`,
},
{
name = "camo_finish10",
- label = _U("component_camo_finish10"),
+ label = TranslateCap("component_camo_finish10"),
hash = `COMPONENT_CARBINERIFLE_MK2_CAMO_10`,
},
{
name = "camo_finish11",
- label = _U("component_camo_finish11"),
+ label = TranslateCap("component_camo_finish11"),
hash = `COMPONENT_CARBINERIFLE_MK2_CAMO_IND_01`,
},
},
},
{
name = "WEAPON_COMPACTRIFLE",
- label = _U("weapon_compactrifle"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_RIFLE` },
+ label = TranslateCap("weapon_compactrifle"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_RIFLE` },
tints = Config.DefaultWeaponTints,
components = {
- { name = "clip_default", label = _U("component_clip_default"), hash = `COMPONENT_COMPACTRIFLE_CLIP_01` },
- { name = "clip_extended", label = _U("component_clip_extended"), hash = `COMPONENT_COMPACTRIFLE_CLIP_02` },
- { name = "clip_drum", label = _U("component_clip_drum"), hash = `COMPONENT_COMPACTRIFLE_CLIP_03` },
+ {
+ name = "clip_default",
+ label = TranslateCap("component_clip_default"),
+ hash = `COMPONENT_COMPACTRIFLE_CLIP_01`,
+ },
+ {
+ name = "clip_extended",
+ label = TranslateCap("component_clip_extended"),
+ hash = `COMPONENT_COMPACTRIFLE_CLIP_02`,
+ },
+ {
+ name = "clip_drum",
+ label = TranslateCap("component_clip_drum"),
+ hash = `COMPONENT_COMPACTRIFLE_CLIP_03`,
+ },
},
},
{
name = "WEAPON_MILITARYRIFLE",
- label = _U("weapon_militaryrifle"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_RIFLE` },
+ label = TranslateCap("weapon_militaryrifle"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_RIFLE` },
tints = Config.DefaultWeaponTints,
components = {
- { name = "clip_default", label = _U("component_clip_default"), hash = `COMPONENT_MILITARYRIFLE_CLIP_01` },
- { name = "clip_extended", label = _U("component_clip_extended"), hash = `COMPONENT_MILITARYRIFLE_CLIP_02` },
- { name = "ironsights", label = _U("component_ironsights"), hash = `COMPONENT_MILITARYRIFLE_SIGHT_01` },
- { name = "scope", label = _U("component_scope"), hash = `COMPONENT_AT_SCOPE_SMALL` },
- { name = "flashlight", label = _U("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
- { name = "suppressor", label = _U("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP` },
+ {
+ name = "clip_default",
+ label = TranslateCap("component_clip_default"),
+ hash = `COMPONENT_MILITARYRIFLE_CLIP_01`,
+ },
+ {
+ name = "clip_extended",
+ label = TranslateCap("component_clip_extended"),
+ hash = `COMPONENT_MILITARYRIFLE_CLIP_02`,
+ },
+ {
+ name = "ironsights",
+ label = TranslateCap("component_ironsights"),
+ hash = `COMPONENT_MILITARYRIFLE_SIGHT_01`,
+ },
+ { name = "scope", label = TranslateCap("component_scope"), hash = `COMPONENT_AT_SCOPE_SMALL` },
+ { name = "flashlight", label = TranslateCap("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
+ { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP` },
},
},
{
name = "WEAPON_SPECIALCARBINE",
- label = _U("weapon_specialcarbine"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_RIFLE` },
+ label = TranslateCap("weapon_specialcarbine"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_RIFLE` },
tints = Config.DefaultWeaponTints,
components = {
- { name = "clip_default", label = _U("component_clip_default"), hash = `COMPONENT_SPECIALCARBINE_CLIP_01` },
+ {
+ name = "clip_default",
+ label = TranslateCap("component_clip_default"),
+ hash = `COMPONENT_SPECIALCARBINE_CLIP_01`,
+ },
{
name = "clip_extended",
- label = _U("component_clip_extended"),
+ label = TranslateCap("component_clip_extended"),
hash = `COMPONENT_SPECIALCARBINE_CLIP_02`,
},
- { name = "clip_drum", label = _U("component_clip_drum"), hash = `COMPONENT_SPECIALCARBINE_CLIP_03` },
- { name = "flashlight", label = _U("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
- { name = "scope", label = _U("component_scope"), hash = `COMPONENT_AT_SCOPE_MEDIUM` },
- { name = "suppressor", label = _U("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP_02` },
- { name = "grip", label = _U("component_grip"), hash = `COMPONENT_AT_AR_AFGRIP` },
+ {
+ name = "clip_drum",
+ label = TranslateCap("component_clip_drum"),
+ hash = `COMPONENT_SPECIALCARBINE_CLIP_03`,
+ },
+ { name = "flashlight", label = TranslateCap("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
+ { name = "scope", label = TranslateCap("component_scope"), hash = `COMPONENT_AT_SCOPE_MEDIUM` },
+ { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP_02` },
+ { name = "grip", label = TranslateCap("component_grip"), hash = `COMPONENT_AT_AR_AFGRIP` },
{
name = "luxary_finish",
- label = _U("component_luxary_finish"),
+ label = TranslateCap("component_luxary_finish"),
hash = `COMPONENT_SPECIALCARBINE_VARMOD_LOWRIDER`,
},
},
},
{
name = "WEAPON_SPECIALCARBINE_MK2",
- label = _U("weapon_specialcarbine_mk2"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_RIFLE` },
+ label = TranslateCap("weapon_specialcarbine_mk2"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_RIFLE` },
tints = Config.DefaultWeaponTints,
components = {
{
name = "clip_default",
- label = _U("component_clip_default"),
+ label = TranslateCap("component_clip_default"),
hash = `COMPONENT_SPECIALCARBINE_MK2_CLIP_01`,
},
{
name = "clip_extended",
- label = _U("component_clip_extended"),
+ label = TranslateCap("component_clip_extended"),
hash = `COMPONENT_SPECIALCARBINE_MK2_CLIP_02`,
},
{
name = "ammo_tracer",
- label = _U("component_ammo_tracer"),
+ label = TranslateCap("component_ammo_tracer"),
hash = `COMPONENT_SPECIALCARBINE_MK2_CLIP_TRACER`,
},
{
name = "ammo_incendiary",
- label = _U("component_ammo_incendiary"),
+ label = TranslateCap("component_ammo_incendiary"),
hash = `COMPONENT_SPECIALCARBINE_MK2_CLIP_INCENDIARY`,
},
{
name = "ammo_armor",
- label = _U("component_ammo_armor"),
+ label = TranslateCap("component_ammo_armor"),
hash = `COMPONENT_SPECIALCARBINE_MK2_CLIP_ARMORPIERCING`,
},
- { name = "ammo_fmj", label = _U("component_ammo_fmj"), hash = `COMPONENT_SPECIALCARBINE_MK2_CLIP_FMJ` },
- { name = "flashlight", label = _U("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
- { name = "scope_holo", label = _U("component_scope_holo"), hash = `COMPONENT_AT_SIGHTS` },
- { name = "scope_small", label = _U("component_scope_small"), hash = `COMPONENT_AT_SCOPE_MACRO_MK2` },
- { name = "scope_large", label = _U("component_scope_large"), hash = `COMPONENT_AT_SCOPE_MEDIUM_MK2` },
- { name = "suppressor", label = _U("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP_02` },
- { name = "muzzle_flat", label = _U("component_muzzle_flat"), hash = `COMPONENT_AT_MUZZLE_01` },
- { name = "muzzle_tactical", label = _U("component_muzzle_tactical"), hash = `COMPONENT_AT_MUZZLE_02` },
- { name = "muzzle_fat", label = _U("component_muzzle_fat"), hash = `COMPONENT_AT_MUZZLE_03` },
- { name = "muzzle_precision", label = _U("component_muzzle_precision"), hash = `COMPONENT_AT_MUZZLE_04` },
- { name = "muzzle_heavy", label = _U("component_muzzle_heavy"), hash = `COMPONENT_AT_MUZZLE_05` },
- { name = "muzzle_slanted", label = _U("component_muzzle_slanted"), hash = `COMPONENT_AT_MUZZLE_06` },
- { name = "muzzle_split", label = _U("component_muzzle_split"), hash = `COMPONENT_AT_MUZZLE_07` },
- { name = "grip", label = _U("component_grip"), hash = `COMPONENT_AT_AR_AFGRIP_02` },
- { name = "barrel_default", label = _U("component_barrel_default"), hash = `COMPONENT_AT_SC_BARREL_01` },
- { name = "barrel_heavy", label = _U("component_barrel_heavy"), hash = `COMPONENT_AT_SC_BARREL_02` },
- { name = "camo_finish", label = _U("component_camo_finish"), hash = `COMPONENT_SPECIALCARBINE_MK2_CAMO` },
+ {
+ name = "ammo_fmj",
+ label = TranslateCap("component_ammo_fmj"),
+ hash = `COMPONENT_SPECIALCARBINE_MK2_CLIP_FMJ`,
+ },
+ { name = "flashlight", label = TranslateCap("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
+ { name = "scope_holo", label = TranslateCap("component_scope_holo"), hash = `COMPONENT_AT_SIGHTS` },
+ {
+ name = "scope_small",
+ label = TranslateCap("component_scope_small"),
+ hash = `COMPONENT_AT_SCOPE_MACRO_MK2`,
+ },
+ {
+ name = "scope_large",
+ label = TranslateCap("component_scope_large"),
+ hash = `COMPONENT_AT_SCOPE_MEDIUM_MK2`,
+ },
+ { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP_02` },
+ { name = "muzzle_flat", label = TranslateCap("component_muzzle_flat"), hash = `COMPONENT_AT_MUZZLE_01` },
+ {
+ name = "muzzle_tactical",
+ label = TranslateCap("component_muzzle_tactical"),
+ hash = `COMPONENT_AT_MUZZLE_02`,
+ },
+ { name = "muzzle_fat", label = TranslateCap("component_muzzle_fat"), hash = `COMPONENT_AT_MUZZLE_03` },
+ {
+ name = "muzzle_precision",
+ label = TranslateCap("component_muzzle_precision"),
+ hash = `COMPONENT_AT_MUZZLE_04`,
+ },
+ { name = "muzzle_heavy", label = TranslateCap("component_muzzle_heavy"), hash = `COMPONENT_AT_MUZZLE_05` },
+ {
+ name = "muzzle_slanted",
+ label = TranslateCap("component_muzzle_slanted"),
+ hash = `COMPONENT_AT_MUZZLE_06`,
+ },
+ { name = "muzzle_split", label = TranslateCap("component_muzzle_split"), hash = `COMPONENT_AT_MUZZLE_07` },
+ { name = "grip", label = TranslateCap("component_grip"), hash = `COMPONENT_AT_AR_AFGRIP_02` },
+ {
+ name = "barrel_default",
+ label = TranslateCap("component_barrel_default"),
+ hash = `COMPONENT_AT_SC_BARREL_01`,
+ },
+ {
+ name = "barrel_heavy",
+ label = TranslateCap("component_barrel_heavy"),
+ hash = `COMPONENT_AT_SC_BARREL_02`,
+ },
+ {
+ name = "camo_finish",
+ label = TranslateCap("component_camo_finish"),
+ hash = `COMPONENT_SPECIALCARBINE_MK2_CAMO`,
+ },
{
name = "camo_finish2",
- label = _U("component_camo_finish2"),
+ label = TranslateCap("component_camo_finish2"),
hash = `COMPONENT_SPECIALCARBINE_MK2_CAMO_02`,
},
{
name = "camo_finish3",
- label = _U("component_camo_finish3"),
+ label = TranslateCap("component_camo_finish3"),
hash = `COMPONENT_SPECIALCARBINE_MK2_CAMO_03`,
},
{
name = "camo_finish4",
- label = _U("component_camo_finish4"),
+ label = TranslateCap("component_camo_finish4"),
hash = `COMPONENT_SPECIALCARBINE_MK2_CAMO_04`,
},
{
name = "camo_finish5",
- label = _U("component_camo_finish5"),
+ label = TranslateCap("component_camo_finish5"),
hash = `COMPONENT_SPECIALCARBINE_MK2_CAMO_05`,
},
{
name = "camo_finish6",
- label = _U("component_camo_finish6"),
+ label = TranslateCap("component_camo_finish6"),
hash = `COMPONENT_SPECIALCARBINE_MK2_CAMO_06`,
},
{
name = "camo_finish7",
- label = _U("component_camo_finish7"),
+ label = TranslateCap("component_camo_finish7"),
hash = `COMPONENT_SPECIALCARBINE_MK2_CAMO_07`,
},
{
name = "camo_finish8",
- label = _U("component_camo_finish8"),
+ label = TranslateCap("component_camo_finish8"),
hash = `COMPONENT_SPECIALCARBINE_MK2_CAMO_08`,
},
{
name = "camo_finish9",
- label = _U("component_camo_finish9"),
+ label = TranslateCap("component_camo_finish9"),
hash = `COMPONENT_SPECIALCARBINE_MK2_CAMO_09`,
},
{
name = "camo_finish10",
- label = _U("component_camo_finish10"),
+ label = TranslateCap("component_camo_finish10"),
hash = `COMPONENT_SPECIALCARBINE_MK2_CAMO_10`,
},
{
name = "camo_finish11",
- label = _U("component_camo_finish11"),
+ label = TranslateCap("component_camo_finish11"),
hash = `COMPONENT_SPECIALCARBINE_MK2_CAMO_IND_01`,
},
},
},
+ {
+ name = "WEAPON_HEAVYRIFLE",
+ label = TranslateCap("weapon_heavyrifle"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_RIFLE` },
+ tints = Config.DefaultWeaponTints,
+ components = {
+ {
+ name = "clip_default",
+ label = TranslateCap("component_clip_default"),
+ hash = `COMPONENT_HEAVYRIFLE_CLIP_01`,
+ },
+ {
+ name = "clip_extended",
+ label = TranslateCap("component_clip_extended"),
+ hash = `COMPONENT_HEAVYRIFLE_CLIP_02`,
+ },
+ {
+ name = "scope_holo",
+ label = TranslateCap("component_scope_holo"),
+ hash = `COMPONENT_HEAVYRIFLE_SIGHT_01`,
+ },
+ { name = "scope", label = TranslateCap("component_scope"), hash = `COMPONENT_AT_SCOPE_MEDIUM` },
+ { name = "flashlight", label = TranslateCap("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
+ { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP` },
+ { name = "grip", label = TranslateCap("component_grip"), hash = `COMPONENT_AT_AR_AFGRIP` },
+ },
+ },
-- Sniper
{
name = "WEAPON_HEAVYSNIPER",
- label = _U("weapon_heavysniper"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_SNIPER` },
+ label = TranslateCap("weapon_heavysniper"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_SNIPER` },
tints = Config.DefaultWeaponTints,
components = {
- { name = "scope", label = _U("component_scope"), hash = `COMPONENT_AT_SCOPE_LARGE` },
- { name = "scope_advanced", label = _U("component_scope_advanced"), hash = `COMPONENT_AT_SCOPE_MAX` },
+ { name = "scope", label = TranslateCap("component_scope"), hash = `COMPONENT_AT_SCOPE_LARGE` },
+ {
+ name = "scope_advanced",
+ label = TranslateCap("component_scope_advanced"),
+ hash = `COMPONENT_AT_SCOPE_MAX`,
+ },
},
},
{
name = "WEAPON_HEAVYSNIPER_MK2",
- label = _U("weapon_heavysniper_mk2"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_SNIPER` },
+ label = TranslateCap("weapon_heavysniper_mk2"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_SNIPER` },
tints = Config.DefaultWeaponTints,
components = {
- { name = "clip_default", label = _U("component_clip_default"), hash = `COMPONENT_HEAVYSNIPER_MK2_CLIP_01` },
+ {
+ name = "clip_default",
+ label = TranslateCap("component_clip_default"),
+ hash = `COMPONENT_HEAVYSNIPER_MK2_CLIP_01`,
+ },
{
name = "clip_extended",
- label = _U("component_clip_extended"),
+ label = TranslateCap("component_clip_extended"),
hash = `COMPONENT_HEAVYSNIPER_MK2_CLIP_02`,
},
{
name = "ammo_incendiary",
- label = _U("component_ammo_incendiary"),
+ label = TranslateCap("component_ammo_incendiary"),
hash = `COMPONENT_HEAVYSNIPER_MK2_CLIP_INCENDIARY`,
},
{
name = "ammo_armor",
- label = _U("component_ammo_armor"),
+ label = TranslateCap("component_ammo_armor"),
hash = `COMPONENT_HEAVYSNIPER_MK2_CLIP_ARMORPIERCING`,
},
- { name = "ammo_fmj", label = _U("component_ammo_fmj"), hash = `COMPONENT_HEAVYSNIPER_MK2_CLIP_FMJ` },
+ {
+ name = "ammo_fmj",
+ label = TranslateCap("component_ammo_fmj"),
+ hash = `COMPONENT_HEAVYSNIPER_MK2_CLIP_FMJ`,
+ },
{
name = "ammo_explosive",
- label = _U("component_ammo_explosive"),
+ label = TranslateCap("component_ammo_explosive"),
hash = `COMPONENT_HEAVYSNIPER_MK2_CLIP_EXPLOSIVE`,
},
- { name = "scope_zoom", label = _U("component_scope_zoom"), hash = `COMPONENT_AT_SCOPE_LARGE_MK2` },
- { name = "scope_advanced", label = _U("component_scope_advanced"), hash = `COMPONENT_AT_SCOPE_MAX` },
- { name = "scope_nightvision", label = _U("component_scope_nightvision"), hash = `COMPONENT_AT_SCOPE_NV` },
- { name = "scope_thermal", label = _U("component_scope_thermal"), hash = `COMPONENT_AT_SCOPE_THERMAL` },
- { name = "suppressor", label = _U("component_suppressor"), hash = `COMPONENT_AT_SR_SUPP_03` },
- { name = "muzzle_squared", label = _U("component_muzzle_squared"), hash = `COMPONENT_AT_MUZZLE_08` },
- { name = "muzzle_bell", label = _U("component_muzzle_bell"), hash = `COMPONENT_AT_MUZZLE_09` },
- { name = "barrel_default", label = _U("component_barrel_default"), hash = `COMPONENT_AT_SR_BARREL_01` },
- { name = "barrel_heavy", label = _U("component_barrel_heavy"), hash = `COMPONENT_AT_SR_BARREL_02` },
- { name = "camo_finish", label = _U("component_camo_finish"), hash = `COMPONENT_HEAVYSNIPER_MK2_CAMO` },
- { name = "camo_finish2", label = _U("component_camo_finish2"), hash = `COMPONENT_HEAVYSNIPER_MK2_CAMO_02` },
- { name = "camo_finish3", label = _U("component_camo_finish3"), hash = `COMPONENT_HEAVYSNIPER_MK2_CAMO_03` },
- { name = "camo_finish4", label = _U("component_camo_finish4"), hash = `COMPONENT_HEAVYSNIPER_MK2_CAMO_04` },
- { name = "camo_finish5", label = _U("component_camo_finish5"), hash = `COMPONENT_HEAVYSNIPER_MK2_CAMO_05` },
- { name = "camo_finish6", label = _U("component_camo_finish6"), hash = `COMPONENT_HEAVYSNIPER_MK2_CAMO_06` },
- { name = "camo_finish7", label = _U("component_camo_finish7"), hash = `COMPONENT_HEAVYSNIPER_MK2_CAMO_07` },
- { name = "camo_finish8", label = _U("component_camo_finish8"), hash = `COMPONENT_HEAVYSNIPER_MK2_CAMO_08` },
- { name = "camo_finish9", label = _U("component_camo_finish9"), hash = `COMPONENT_HEAVYSNIPER_MK2_CAMO_09` },
+ {
+ name = "scope_zoom",
+ label = TranslateCap("component_scope_zoom"),
+ hash = `COMPONENT_AT_SCOPE_LARGE_MK2`,
+ },
+ {
+ name = "scope_advanced",
+ label = TranslateCap("component_scope_advanced"),
+ hash = `COMPONENT_AT_SCOPE_MAX`,
+ },
+ {
+ name = "scope_nightvision",
+ label = TranslateCap("component_scope_nightvision"),
+ hash = `COMPONENT_AT_SCOPE_NV`,
+ },
+ {
+ name = "scope_thermal",
+ label = TranslateCap("component_scope_thermal"),
+ hash = `COMPONENT_AT_SCOPE_THERMAL`,
+ },
+ { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_SR_SUPP_03` },
+ {
+ name = "muzzle_squared",
+ label = TranslateCap("component_muzzle_squared"),
+ hash = `COMPONENT_AT_MUZZLE_08`,
+ },
+ { name = "muzzle_bell", label = TranslateCap("component_muzzle_bell"), hash = `COMPONENT_AT_MUZZLE_09` },
+ {
+ name = "barrel_default",
+ label = TranslateCap("component_barrel_default"),
+ hash = `COMPONENT_AT_SR_BARREL_01`,
+ },
+ {
+ name = "barrel_heavy",
+ label = TranslateCap("component_barrel_heavy"),
+ hash = `COMPONENT_AT_SR_BARREL_02`,
+ },
+ {
+ name = "camo_finish",
+ label = TranslateCap("component_camo_finish"),
+ hash = `COMPONENT_HEAVYSNIPER_MK2_CAMO`,
+ },
+ {
+ name = "camo_finish2",
+ label = TranslateCap("component_camo_finish2"),
+ hash = `COMPONENT_HEAVYSNIPER_MK2_CAMO_02`,
+ },
+ {
+ name = "camo_finish3",
+ label = TranslateCap("component_camo_finish3"),
+ hash = `COMPONENT_HEAVYSNIPER_MK2_CAMO_03`,
+ },
+ {
+ name = "camo_finish4",
+ label = TranslateCap("component_camo_finish4"),
+ hash = `COMPONENT_HEAVYSNIPER_MK2_CAMO_04`,
+ },
+ {
+ name = "camo_finish5",
+ label = TranslateCap("component_camo_finish5"),
+ hash = `COMPONENT_HEAVYSNIPER_MK2_CAMO_05`,
+ },
+ {
+ name = "camo_finish6",
+ label = TranslateCap("component_camo_finish6"),
+ hash = `COMPONENT_HEAVYSNIPER_MK2_CAMO_06`,
+ },
+ {
+ name = "camo_finish7",
+ label = TranslateCap("component_camo_finish7"),
+ hash = `COMPONENT_HEAVYSNIPER_MK2_CAMO_07`,
+ },
+ {
+ name = "camo_finish8",
+ label = TranslateCap("component_camo_finish8"),
+ hash = `COMPONENT_HEAVYSNIPER_MK2_CAMO_08`,
+ },
+ {
+ name = "camo_finish9",
+ label = TranslateCap("component_camo_finish9"),
+ hash = `COMPONENT_HEAVYSNIPER_MK2_CAMO_09`,
+ },
{
name = "camo_finish10",
- label = _U("component_camo_finish10"),
+ label = TranslateCap("component_camo_finish10"),
hash = `COMPONENT_HEAVYSNIPER_MK2_CAMO_10`,
},
{
name = "camo_finish11",
- label = _U("component_camo_finish11"),
+ label = TranslateCap("component_camo_finish11"),
hash = `COMPONENT_HEAVYSNIPER_MK2_CAMO_IND_01`,
},
},
},
{
name = "WEAPON_MARKSMANRIFLE",
- label = _U("weapon_marksmanrifle"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_SNIPER` },
+ label = TranslateCap("weapon_marksmanrifle"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_SNIPER` },
tints = Config.DefaultWeaponTints,
components = {
- { name = "clip_default", label = _U("component_clip_default"), hash = `COMPONENT_MARKSMANRIFLE_CLIP_01` },
- { name = "clip_extended", label = _U("component_clip_extended"), hash = `COMPONENT_MARKSMANRIFLE_CLIP_02` },
- { name = "flashlight", label = _U("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
- { name = "scope", label = _U("component_scope"), hash = `COMPONENT_AT_SCOPE_LARGE_FIXED_ZOOM` },
- { name = "suppressor", label = _U("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP` },
- { name = "grip", label = _U("component_grip"), hash = `COMPONENT_AT_AR_AFGRIP` },
+ {
+ name = "clip_default",
+ label = TranslateCap("component_clip_default"),
+ hash = `COMPONENT_MARKSMANRIFLE_CLIP_01`,
+ },
+ {
+ name = "clip_extended",
+ label = TranslateCap("component_clip_extended"),
+ hash = `COMPONENT_MARKSMANRIFLE_CLIP_02`,
+ },
+ { name = "flashlight", label = TranslateCap("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
+ { name = "scope", label = TranslateCap("component_scope"), hash = `COMPONENT_AT_SCOPE_LARGE_FIXED_ZOOM` },
+ { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP` },
+ { name = "grip", label = TranslateCap("component_grip"), hash = `COMPONENT_AT_AR_AFGRIP` },
{
name = "luxary_finish",
- label = _U("component_luxary_finish"),
+ label = TranslateCap("component_luxary_finish"),
hash = `COMPONENT_MARKSMANRIFLE_VARMOD_LUXE`,
},
},
},
{
name = "WEAPON_MARKSMANRIFLE_MK2",
- label = _U("weapon_marksmanrifle_mk2"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_SNIPER` },
+ label = TranslateCap("weapon_marksmanrifle_mk2"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_SNIPER` },
tints = Config.DefaultWeaponTints,
components = {
{
name = "clip_default",
- label = _U("component_clip_default"),
+ label = TranslateCap("component_clip_default"),
hash = `COMPONENT_MARKSMANRIFLE_MK2_CLIP_01`,
},
{
name = "clip_extended",
- label = _U("component_clip_extended"),
+ label = TranslateCap("component_clip_extended"),
hash = `COMPONENT_MARKSMANRIFLE_MK2_CLIP_02`,
},
{
name = "ammo_tracer",
- label = _U("component_ammo_tracer"),
+ label = TranslateCap("component_ammo_tracer"),
hash = `COMPONENT_MARKSMANRIFLE_MK2_CLIP_TRACER`,
},
{
name = "ammo_incendiary",
- label = _U("component_ammo_incendiary"),
+ label = TranslateCap("component_ammo_incendiary"),
hash = `COMPONENT_MARKSMANRIFLE_MK2_CLIP_INCENDIARY`,
},
{
name = "ammo_armor",
- label = _U("component_ammo_armor"),
+ label = TranslateCap("component_ammo_armor"),
hash = `COMPONENT_MARKSMANRIFLE_MK2_CLIP_ARMORPIERCING`,
},
- { name = "ammo_fmj", label = _U("component_ammo_fmj"), hash = `COMPONENT_MARKSMANRIFLE_MK2_CLIP_FMJ` },
- { name = "scope_holo", label = _U("component_scope_holo"), hash = `COMPONENT_AT_SIGHTS` },
- { name = "scope_large", label = _U("component_scope_large"), hash = `COMPONENT_AT_SCOPE_MEDIUM_MK2` },
+ {
+ name = "ammo_fmj",
+ label = TranslateCap("component_ammo_fmj"),
+ hash = `COMPONENT_MARKSMANRIFLE_MK2_CLIP_FMJ`,
+ },
+ { name = "scope_holo", label = TranslateCap("component_scope_holo"), hash = `COMPONENT_AT_SIGHTS` },
+ {
+ name = "scope_large",
+ label = TranslateCap("component_scope_large"),
+ hash = `COMPONENT_AT_SCOPE_MEDIUM_MK2`,
+ },
{
name = "scope_zoom",
- label = _U("component_scope_zoom"),
+ label = TranslateCap("component_scope_zoom"),
hash = `COMPONENT_AT_SCOPE_LARGE_FIXED_ZOOM_MK2`,
},
- { name = "flashlight", label = _U("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
- { name = "suppressor", label = _U("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP` },
- { name = "muzzle_flat", label = _U("component_muzzle_flat"), hash = `COMPONENT_AT_MUZZLE_01` },
- { name = "muzzle_tactical", label = _U("component_muzzle_tactical"), hash = `COMPONENT_AT_MUZZLE_02` },
- { name = "muzzle_fat", label = _U("component_muzzle_fat"), hash = `COMPONENT_AT_MUZZLE_03` },
- { name = "muzzle_precision", label = _U("component_muzzle_precision"), hash = `COMPONENT_AT_MUZZLE_04` },
- { name = "muzzle_heavy", label = _U("component_muzzle_heavy"), hash = `COMPONENT_AT_MUZZLE_05` },
- { name = "muzzle_slanted", label = _U("component_muzzle_slanted"), hash = `COMPONENT_AT_MUZZLE_06` },
- { name = "muzzle_split", label = _U("component_muzzle_split"), hash = `COMPONENT_AT_MUZZLE_07` },
- { name = "barrel_default", label = _U("component_barrel_default"), hash = `COMPONENT_AT_MRFL_BARREL_01` },
- { name = "barrel_heavy", label = _U("component_barrel_heavy"), hash = `COMPONENT_AT_MRFL_BARREL_02` },
- { name = "grip", label = _U("component_grip"), hash = `COMPONENT_AT_AR_AFGRIP_02` },
- { name = "camo_finish", label = _U("component_camo_finish"), hash = `COMPONENT_MARKSMANRIFLE_MK2_CAMO` },
+ { name = "flashlight", label = TranslateCap("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH` },
+ { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP` },
+ { name = "muzzle_flat", label = TranslateCap("component_muzzle_flat"), hash = `COMPONENT_AT_MUZZLE_01` },
+ {
+ name = "muzzle_tactical",
+ label = TranslateCap("component_muzzle_tactical"),
+ hash = `COMPONENT_AT_MUZZLE_02`,
+ },
+ { name = "muzzle_fat", label = TranslateCap("component_muzzle_fat"), hash = `COMPONENT_AT_MUZZLE_03` },
+ {
+ name = "muzzle_precision",
+ label = TranslateCap("component_muzzle_precision"),
+ hash = `COMPONENT_AT_MUZZLE_04`,
+ },
+ { name = "muzzle_heavy", label = TranslateCap("component_muzzle_heavy"), hash = `COMPONENT_AT_MUZZLE_05` },
+ {
+ name = "muzzle_slanted",
+ label = TranslateCap("component_muzzle_slanted"),
+ hash = `COMPONENT_AT_MUZZLE_06`,
+ },
+ { name = "muzzle_split", label = TranslateCap("component_muzzle_split"), hash = `COMPONENT_AT_MUZZLE_07` },
+ {
+ name = "barrel_default",
+ label = TranslateCap("component_barrel_default"),
+ hash = `COMPONENT_AT_MRFL_BARREL_01`,
+ },
+ {
+ name = "barrel_heavy",
+ label = TranslateCap("component_barrel_heavy"),
+ hash = `COMPONENT_AT_MRFL_BARREL_02`,
+ },
+ { name = "grip", label = TranslateCap("component_grip"), hash = `COMPONENT_AT_AR_AFGRIP_02` },
+ {
+ name = "camo_finish",
+ label = TranslateCap("component_camo_finish"),
+ hash = `COMPONENT_MARKSMANRIFLE_MK2_CAMO`,
+ },
{
name = "camo_finish2",
- label = _U("component_camo_finish2"),
+ label = TranslateCap("component_camo_finish2"),
hash = `COMPONENT_MARKSMANRIFLE_MK2_CAMO_02`,
},
{
name = "camo_finish3",
- label = _U("component_camo_finish3"),
+ label = TranslateCap("component_camo_finish3"),
hash = `COMPONENT_MARKSMANRIFLE_MK2_CAMO_03`,
},
{
name = "camo_finish4",
- label = _U("component_camo_finish4"),
+ label = TranslateCap("component_camo_finish4"),
hash = `COMPONENT_MARKSMANRIFLE_MK2_CAMO_04`,
},
{
name = "camo_finish5",
- label = _U("component_camo_finish5"),
+ label = TranslateCap("component_camo_finish5"),
hash = `COMPONENT_MARKSMANRIFLE_MK2_CAMO_05`,
},
{
name = "camo_finish6",
- label = _U("component_camo_finish6"),
+ label = TranslateCap("component_camo_finish6"),
hash = `COMPONENT_MARKSMANRIFLE_MK2_CAMO_06`,
},
{
name = "camo_finish7",
- label = _U("component_camo_finish7"),
+ label = TranslateCap("component_camo_finish7"),
hash = `COMPONENT_MARKSMANRIFLE_MK2_CAMO_07`,
},
{
name = "camo_finish8",
- label = _U("component_camo_finish8"),
+ label = TranslateCap("component_camo_finish8"),
hash = `COMPONENT_MARKSMANRIFLE_MK2_CAMO_08`,
},
{
name = "camo_finish9",
- label = _U("component_camo_finish9"),
+ label = TranslateCap("component_camo_finish9"),
hash = `COMPONENT_MARKSMANRIFLE_MK2_CAMO_09`,
},
{
name = "camo_finish10",
- label = _U("component_camo_finish10"),
+ label = TranslateCap("component_camo_finish10"),
hash = `COMPONENT_MARKSMANRIFLE_MK2_CAMO_10`,
},
{
name = "camo_finish11",
- label = _U("component_camo_finish11"),
+ label = TranslateCap("component_camo_finish11"),
hash = `COMPONENT_MARKSMANRIFLE_MK2_CAMO_IND_01`,
},
},
},
{
name = "WEAPON_SNIPERRIFLE",
- label = _U("weapon_sniperrifle"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_SNIPER` },
+ label = TranslateCap("weapon_sniperrifle"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_SNIPER` },
tints = Config.DefaultWeaponTints,
components = {
- { name = "scope", label = _U("component_scope"), hash = `COMPONENT_AT_SCOPE_LARGE` },
- { name = "scope_advanced", label = _U("component_scope_advanced"), hash = `COMPONENT_AT_SCOPE_MAX` },
- { name = "suppressor", label = _U("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP_02` },
+ { name = "scope", label = TranslateCap("component_scope"), hash = `COMPONENT_AT_SCOPE_LARGE` },
+ {
+ name = "scope_advanced",
+ label = TranslateCap("component_scope_advanced"),
+ hash = `COMPONENT_AT_SCOPE_MAX`,
+ },
+ { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP_02` },
{
name = "luxary_finish",
- label = _U("component_luxary_finish"),
+ label = TranslateCap("component_luxary_finish"),
hash = `COMPONENT_SNIPERRIFLE_VARMOD_LUXE`,
},
},
@@ -1591,178 +2512,203 @@ Config.Weapons = {
-- Heavy / Launchers
{
name = "WEAPON_COMPACTLAUNCHER",
- label = _U("weapon_compactlauncher"),
+ label = TranslateCap("weapon_compactlauncher"),
tints = Config.DefaultWeaponTints,
components = {},
- ammo = { label = _U("ammo_grenadelauncher"), hash = `AMMO_GRENADELAUNCHER` },
+ ammo = { label = TranslateCap("ammo_grenadelauncher"), hash = `AMMO_GRENADELAUNCHER` },
},
{
name = "WEAPON_FIREWORK",
- label = _U("weapon_firework"),
+ label = TranslateCap("weapon_firework"),
components = {},
- ammo = { label = _U("ammo_firework"), hash = `AMMO_FIREWORK` },
+ ammo = { label = TranslateCap("ammo_firework"), hash = `AMMO_FIREWORK` },
},
{
name = "WEAPON_GRENADELAUNCHER",
- label = _U("weapon_grenadelauncher"),
+ label = TranslateCap("weapon_grenadelauncher"),
tints = Config.DefaultWeaponTints,
components = {},
- ammo = { label = _U("ammo_grenadelauncher"), hash = `AMMO_GRENADELAUNCHER` },
+ ammo = { label = TranslateCap("ammo_grenadelauncher"), hash = `AMMO_GRENADELAUNCHER` },
},
{
name = "WEAPON_HOMINGLAUNCHER",
- label = _U("weapon_hominglauncher"),
+ label = TranslateCap("weapon_hominglauncher"),
tints = Config.DefaultWeaponTints,
components = {},
- ammo = { label = _U("ammo_rockets"), hash = `AMMO_HOMINGLAUNCHER` },
+ ammo = { label = TranslateCap("ammo_rockets"), hash = `AMMO_HOMINGLAUNCHER` },
},
{
name = "WEAPON_MINIGUN",
- label = _U("weapon_minigun"),
+ label = TranslateCap("weapon_minigun"),
tints = Config.DefaultWeaponTints,
components = {},
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_MINIGUN` },
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_MINIGUN` },
},
{
name = "WEAPON_RAILGUN",
- label = _U("weapon_railgun"),
+ label = TranslateCap("weapon_railgun"),
tints = Config.DefaultWeaponTints,
components = {},
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_RAILGUN` },
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_RAILGUN` },
},
{
name = "WEAPON_RPG",
- label = _U("weapon_rpg"),
+ label = TranslateCap("weapon_rpg"),
tints = Config.DefaultWeaponTints,
components = {},
- ammo = { label = _U("ammo_rockets"), hash = `AMMO_RPG` },
+ ammo = { label = TranslateCap("ammo_rockets"), hash = `AMMO_RPG` },
},
{
name = "WEAPON_RAYMINIGUN",
- label = _U("weapon_rayminigun"),
+ label = TranslateCap("weapon_rayminigun"),
tints = Config.DefaultWeaponTints,
components = {},
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_MINIGUN` },
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_MINIGUN` },
},
-- Thrown
{
name = "WEAPON_BALL",
- label = _U("weapon_ball"),
+ label = TranslateCap("weapon_ball"),
components = {},
- ammo = { label = _U("ammo_ball"), hash = `AMMO_BALL` },
+ ammo = { label = TranslateCap("ammo_ball"), hash = `AMMO_BALL` },
},
{
name = "WEAPON_BZGAS",
- label = _U("weapon_bzgas"),
+ label = TranslateCap("weapon_bzgas"),
components = {},
- ammo = { label = _U("ammo_bzgas"), hash = `AMMO_BZGAS` },
+ ammo = { label = TranslateCap("ammo_bzgas"), hash = `AMMO_BZGAS` },
},
{
name = "WEAPON_FLARE",
- label = _U("weapon_flare"),
+ label = TranslateCap("weapon_flare"),
components = {},
- ammo = { label = _U("ammo_flare"), hash = `AMMO_FLARE` },
+ ammo = { label = TranslateCap("ammo_flare"), hash = `AMMO_FLARE` },
},
{
name = "WEAPON_GRENADE",
- label = _U("weapon_grenade"),
+ label = TranslateCap("weapon_grenade"),
components = {},
- ammo = { label = _U("ammo_grenade"), hash = `AMMO_GRENADE` },
+ ammo = { label = TranslateCap("ammo_grenade"), hash = `AMMO_GRENADE` },
},
{
name = "WEAPON_PETROLCAN",
- label = _U("weapon_petrolcan"),
+ label = TranslateCap("weapon_petrolcan"),
components = {},
- ammo = { label = _U("ammo_petrol"), hash = `AMMO_PETROLCAN` },
+ ammo = { label = TranslateCap("ammo_petrol"), hash = `AMMO_PETROLCAN` },
},
{
name = "WEAPON_HAZARDCAN",
- label = _U("weapon_hazardcan"),
+ label = TranslateCap("weapon_hazardcan"),
components = {},
- ammo = { label = _U("ammo_petrol"), hash = `AMMO_PETROLCAN` },
+ ammo = { label = TranslateCap("ammo_petrol"), hash = `AMMO_PETROLCAN` },
},
{
name = "WEAPON_MOLOTOV",
- label = _U("weapon_molotov"),
+ label = TranslateCap("weapon_molotov"),
components = {},
- ammo = { label = _U("ammo_molotov"), hash = `AMMO_MOLOTOV` },
+ ammo = { label = TranslateCap("ammo_molotov"), hash = `AMMO_MOLOTOV` },
},
{
name = "WEAPON_PROXMINE",
- label = _U("weapon_proxmine"),
+ label = TranslateCap("weapon_proxmine"),
components = {},
- ammo = { label = _U("ammo_proxmine"), hash = `AMMO_PROXMINE` },
+ ammo = { label = TranslateCap("ammo_proxmine"), hash = `AMMO_PROXMINE` },
},
{
name = "WEAPON_PIPEBOMB",
- label = _U("weapon_pipebomb"),
+ label = TranslateCap("weapon_pipebomb"),
components = {},
- ammo = { label = _U("ammo_pipebomb"), hash = `AMMO_PIPEBOMB` },
+ ammo = { label = TranslateCap("ammo_pipebomb"), hash = `AMMO_PIPEBOMB` },
},
{
name = "WEAPON_SNOWBALL",
- label = _U("weapon_snowball"),
+ label = TranslateCap("weapon_snowball"),
components = {},
- ammo = { label = _U("ammo_snowball"), hash = `AMMO_SNOWBALL` },
+ ammo = { label = TranslateCap("ammo_snowball"), hash = `AMMO_SNOWBALL` },
},
{
name = "WEAPON_STICKYBOMB",
- label = _U("weapon_stickybomb"),
+ label = TranslateCap("weapon_stickybomb"),
components = {},
- ammo = { label = _U("ammo_stickybomb"), hash = `AMMO_STICKYBOMB` },
+ ammo = { label = TranslateCap("ammo_stickybomb"), hash = `AMMO_STICKYBOMB` },
},
{
name = "WEAPON_SMOKEGRENADE",
- label = _U("weapon_smokegrenade"),
+ label = TranslateCap("weapon_smokegrenade"),
components = {},
- ammo = { label = _U("ammo_smokebomb"), hash = `AMMO_SMOKEGRENADE` },
+ ammo = { label = TranslateCap("ammo_smokebomb"), hash = `AMMO_SMOKEGRENADE` },
},
-- Tools
{
name = "WEAPON_FIREEXTINGUISHER",
- label = _U("weapon_fireextinguisher"),
+ label = TranslateCap("weapon_fireextinguisher"),
components = {},
- ammo = { label = _U("ammo_charge"), hash = `AMMO_FIREEXTINGUISHER` },
+ ammo = { label = TranslateCap("ammo_charge"), hash = `AMMO_FIREEXTINGUISHER` },
},
- { name = "WEAPON_DIGISCANNER", label = _U("weapon_digiscanner"), components = {} },
+ { name = "WEAPON_DIGISCANNER", label = TranslateCap("weapon_digiscanner"), components = {} },
+ { name = "GADGET_PARACHUTE", label = TranslateCap("gadget_parachute"), components = {} },
{
- name = "GADGET_PARACHUTE",
- label = _U("gadget_parachute"),
- components = {},
- {
- name = "WEAPON_TACTICALRIFLE",
- label = _U("weapon_tactilerifle"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_RIFLE` },
- tints = Config.DefaultWeaponTints,
- components = {
- {
- name = "clip_default",
- label = _U("component_clip_default"),
- hash = `COMPONENT_TACTICALRIFLE_CLIP_01`,
- },
- {
- name = "clip_extended",
- label = _U("component_clip_extended"),
- hash = `COMPONENT_TACTICALRIFLE_CLIP_02`,
- },
- { name = "flashlight", label = _U("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH_REH` },
- { name = "grip", label = _U("component_grip"), hash = `COMPONENT_AT_AR_AFGRIP` },
- { name = "suppressor", label = _U("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP_02` },
+ name = "WEAPON_TACTICALRIFLE",
+ label = TranslateCap("weapon_tactilerifle"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_RIFLE` },
+ tints = Config.DefaultWeaponTints,
+ components = {
+ {
+ name = "clip_default",
+ label = TranslateCap("component_clip_default"),
+ hash = `COMPONENT_TACTICALRIFLE_CLIP_01`,
+ },
+ {
+ name = "clip_extended",
+ label = TranslateCap("component_clip_extended"),
+ hash = `COMPONENT_TACTICALRIFLE_CLIP_02`,
+ },
+ { name = "flashlight", label = TranslateCap("component_flashlight"), hash = `COMPONENT_AT_AR_FLSH_REH` },
+ { name = "grip", label = TranslateCap("component_grip"), hash = `COMPONENT_AT_AR_AFGRIP` },
+ { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_AT_AR_SUPP_02` },
+ },
+ },
+ {
+ name = "WEAPON_PRECISIONRIFLE",
+ label = TranslateCap("weapon_precisionrifle"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_SNIPER` },
+ tints = Config.DefaultWeaponTints,
+ components = {
+ {
+ name = "clip_default",
+ label = TranslateCap("component_clip_default"),
+ hash = `COMPONENT_PRECISIONRIFLE_CLIP_01`,
+ },
+ },
+ },
+ { name = "WEAPON_METALDETECTOR", label = TranslateCap("weapon_metaldetector"), components = {} },
+ {
+ name = "WEAPON_PISTOLXM3",
+ label = TranslateCap("weapon_pistolxm3"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_PISTOL` },
+ tints = Config.DefaultWeaponTints,
+ components = {
+ {
+ name = "clip_default",
+ label = TranslateCap("component_clip_default"),
+ hash = `COMPONENT_PISTOLXM3_CLIP_01`,
},
+ { name = "suppressor", label = TranslateCap("component_suppressor"), hash = `COMPONENT_PISTOLXM3_SUPP` },
},
- {
- name = "WEAPON_PRECISIONRIFLE",
- label = _U("weapon_precisionrifle"),
- ammo = { label = _U("ammo_rounds"), hash = `AMMO_SNIPER` },
- tints = Config.DefaultWeaponTints,
- components = {
- {
- name = "clip_default",
- label = _U("component_clip_default"),
- hash = `COMPONENT_PRECISIONRIFLE_CLIP_01`,
- },
+ },
+ { name = "WEAPON_ACIDPACKAGE", label = TranslateCap("weapon_acidpackage"), components = {} },
+ { name = "WEAPON_CANDYCANE", label = TranslateCap("weapon_candycane"), components = {} },
+ {
+ name = "WEAPON_RAILGUNXM3",
+ label = TranslateCap("weapon_railgunxm3"),
+ ammo = { label = TranslateCap("ammo_rounds"), hash = `AMMO_RAILGUN` },
+ tints = Config.DefaultWeaponTints,
+ components = {
+ {
+ name = "clip_default",
+ label = TranslateCap("component_clip_default"),
+ hash = `COMPONENT_RAILGUNXM3_CLIP_01`,
},
},
- { name = "WEAPON_METALDETECTOR", label = _U("weapon_metaldetector"), components = {} },
},
}
diff --git a/server-data/resources/[esx]/es_extended/dependencies/cron/server/main.lua b/server-data/resources/[esx]/es_extended/dependencies/cron/server/main.lua
deleted file mode 100644
index 7e7c059a2..000000000
--- a/server-data/resources/[esx]/es_extended/dependencies/cron/server/main.lua
+++ /dev/null
@@ -1,46 +0,0 @@
-local Jobs = {}
-local LastTime = nil
-
-function RunAt(h, m, cb)
- table.insert(Jobs, {
- h = h,
- m = m,
- cb = cb,
- })
-end
-
-function GetTime()
- local timestamp = os.time()
- local d = os.date("*t", timestamp).wday
- local h = tonumber(os.date("%H", timestamp))
- local m = tonumber(os.date("%M", timestamp))
-
- return { d = d, h = h, m = m }
-end
-
-function OnTime(d, h, m)
- for i = 1, #Jobs, 1 do
- if Jobs[i].h == h and Jobs[i].m == m then
- Jobs[i].cb(d, h, m)
- end
- end
-end
-
-function Tick()
- local time = GetTime()
-
- if time.h ~= LastTime.h or time.m ~= LastTime.m then
- OnTime(time.d, time.h, time.m)
- LastTime = time
- end
-
- SetTimeout(60000, Tick)
-end
-
-LastTime = GetTime()
-
-Tick()
-
-AddEventHandler("cron:runAt", function(h, m, cb)
- RunAt(h, m, cb)
-end)
diff --git a/server-data/resources/[esx]/es_extended/dependencies/hardcap/client/main.lua b/server-data/resources/[esx]/es_extended/dependencies/hardcap/client/main.lua
deleted file mode 100644
index 118a924b3..000000000
--- a/server-data/resources/[esx]/es_extended/dependencies/hardcap/client/main.lua
+++ /dev/null
@@ -1,10 +0,0 @@
-CreateThread(function()
- while true do
- Wait(0)
- if NetworkIsSessionStarted() then
- TriggerServerEvent("hardcap:playerActivated")
-
- return
- end
- end
-end)
diff --git a/server-data/resources/[esx]/es_extended/dependencies/hardcap/server/main.lua b/server-data/resources/[esx]/es_extended/dependencies/hardcap/server/main.lua
deleted file mode 100644
index 53f80b154..000000000
--- a/server-data/resources/[esx]/es_extended/dependencies/hardcap/server/main.lua
+++ /dev/null
@@ -1,31 +0,0 @@
-local playerCount = 0
-local list = {}
-
-RegisterNetEvent("hardcap:playerActivated")
-
-AddEventHandler("hardcap:playerActivated", function()
- if not list[source] then
- playerCount = playerCount + 1
- list[source] = true
- end
-end)
-
-AddEventHandler("playerDropped", function()
- if list[source] then
- playerCount = playerCount - 1
- list[source] = nil
- end
-end)
-
-AddEventHandler("playerConnecting", function(name, setReason)
- local cv = GetConvarInt("sv_maxclients", 48)
-
- print("Connecting: " .. name .. "^7")
-
- if playerCount >= cv then
- print("Full. :(")
-
- setReason("This server is full (past " .. tostring(cv) .. " players).")
- CancelEvent()
- end
-end)
diff --git a/server-data/resources/[esx]/es_extended/es_extended.sql b/server-data/resources/[esx]/es_extended/es_extended.sql
index ab2241107..c61089284 100644
--- a/server-data/resources/[esx]/es_extended/es_extended.sql
+++ b/server-data/resources/[esx]/es_extended/es_extended.sql
@@ -1,12 +1,13 @@
CREATE DATABASE IF NOT EXISTS `es_extended`;
-
ALTER DATABASE `es_extended`
DEFAULT CHARACTER SET UTF8MB4;
ALTER DATABASE `es_extended`
DEFAULT COLLATE UTF8MB4_UNICODE_CI;
+USE `es_extended`;
+
CREATE TABLE `users` (
`identifier` VARCHAR(60) NOT NULL,
`accounts` LONGTEXT NULL DEFAULT NULL,
@@ -15,12 +16,12 @@ CREATE TABLE `users` (
`job` VARCHAR(20) NULL DEFAULT 'unemployed',
`job_grade` INT NULL DEFAULT 0,
`loadout` LONGTEXT NULL DEFAULT NULL,
- `position` VARCHAR(255) NULL DEFAULT '{"x":-269.4,"y":-955.3,"z":31.2,"heading":205.8}',
+ `metadata` LONGTEXT NULL DEFAULT NULL,
+ `position` longtext NULL DEFAULT NULL,
PRIMARY KEY (`identifier`)
) ENGINE=InnoDB;
-
CREATE TABLE `items` (
`name` VARCHAR(50) NOT NULL,
`label` VARCHAR(50) NOT NULL,
@@ -31,7 +32,6 @@ CREATE TABLE `items` (
PRIMARY KEY (`name`)
) ENGINE=InnoDB;
-
CREATE TABLE `job_grades` (
`id` INT NOT NULL AUTO_INCREMENT,
`job_name` VARCHAR(50) DEFAULT NULL,
@@ -45,7 +45,6 @@ CREATE TABLE `job_grades` (
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
-
INSERT INTO `job_grades` VALUES (1,'unemployed',0,'unemployed','Unemployed',200,'{}','{}');
CREATE TABLE `jobs` (
@@ -55,5 +54,4 @@ CREATE TABLE `jobs` (
PRIMARY KEY (`name`)
) ENGINE=InnoDB;
-
INSERT INTO `jobs` VALUES ('unemployed','Unemployed');
diff --git a/server-data/resources/[esx]/es_extended/fxmanifest.lua b/server-data/resources/[esx]/es_extended/fxmanifest.lua
index 62e7dbdac..c41e3d9fa 100644
--- a/server-data/resources/[esx]/es_extended/fxmanifest.lua
+++ b/server-data/resources/[esx]/es_extended/fxmanifest.lua
@@ -1,23 +1,22 @@
-fx_version("adamant")
+fx_version("cerulean")
game("gta5")
-
description("ES Extended")
-
lua54("yes")
-version("1.0.0")
+version("1.0.1")
shared_scripts({
"locale.lua",
"locales/*.lua",
"config.lua",
"config.weapons.lua",
- "dependencies/async/*.lua",
})
server_scripts({
"@oxmysql/lib/MySQL.lua",
+ "config.logs.lua",
"server/common.lua",
+ "server/modules/callback.lua",
"server/classes/player.lua",
"server/classes/overrides/*.lua",
"server/functions.lua",
@@ -25,34 +24,47 @@ server_scripts({
"server/paycheck.lua",
"server/main.lua",
"server/commands.lua",
- "common/modules/math.lua",
- "common/modules/table.lua",
+ "common/modules/*.lua",
"common/functions.lua",
- "dependencies/cron/server/*.lua",
- "dependencies/hardcap/server/*.lua",
+ "server/modules/actions.lua",
+ "server/modules/npwd.lua",
})
client_scripts({
"client/common.lua",
"client/functions.lua",
"client/wrapper.lua",
+ "client/modules/callback.lua",
"client/main.lua",
+ "common/modules/*.lua",
+ "common/functions.lua",
+ "common/functions.lua",
+ "client/modules/actions.lua",
"client/modules/death.lua",
+ "client/modules/npwd.lua",
"client/modules/scaleform.lua",
"client/modules/streaming.lua",
- "common/modules/math.lua",
- "common/modules/table.lua",
- "common/functions.lua",
- "dependencies/hardcap/client/*.lua",
+})
+
+ui_page({
+ "html/ui.html",
})
files({
"imports.lua",
"locale.js",
+ "html/ui.html",
+ "html/css/app.css",
+ "html/js/mustache.min.js",
+ "html/js/wrapper.js",
+ "html/js/app.js",
+ "html/fonts/pdown.ttf",
+ "html/fonts/bankgothic.ttf",
})
dependencies({
"/native:0x6AE51D4B",
+ "/native:0xA61C8FC6",
"oxmysql",
"spawnmanager",
})
diff --git a/server-data/resources/[esx]/es_extended/html/css/app.css b/server-data/resources/[esx]/es_extended/html/css/app.css
new file mode 100644
index 000000000..2478a1a99
--- /dev/null
+++ b/server-data/resources/[esx]/es_extended/html/css/app.css
@@ -0,0 +1,75 @@
+@font-face {
+ font-family: "Pricedown";
+ src: url("../fonts/pdown.ttf");
+}
+
+@font-face {
+ font-family: "bankgothic";
+ src: url("../fonts/bankgothic.ttf");
+}
+
+html {
+ overflow: hidden;
+}
+
+#inventory_notifications {
+ font-family: bankgothic;
+ position: absolute;
+ right: 40;
+ bottom: 40;
+ font-size: 2em;
+ font-weight: bold;
+ color: #fff;
+ text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000;
+}
+
+.menu {
+ font-family: "Open Sans", sans-serif;
+ min-width: 400px;
+ min-height: 250px;
+ color: #fff;
+ position: absolute;
+ left: 40;
+ top: 0;
+}
+
+.menu .head {
+ font-family: "Open Sans", sans-serif;
+ font-size: 28px;
+ padding: 10px;
+ background: #1a1a1a;
+ border-bottom: 3px solid #bc1635;
+ border-radius: 10px 10px 0 0;
+ -webkit-border-radius: 10px 10px 0 0;
+ -moz-border-radius: 10px 10px 0 0;
+ -o-border-radius: 10px 10px 0 0;
+ box-shadow: inset 0px 1px 0 rgba(255, 255, 255, 0.28);
+ -webkit-box-shadow: inset 0px 1px 0 rgba(255, 255, 255, 0.28);
+ -moz-box-shadow: inset 0px 1px 0 rgba(255, 255, 255, 0.28);
+ -o-box-shadow: inset 0px 1px 0 rgba(255, 255, 255, 0.28);
+ box-shadow: 1px 1px 10px 4px rgba(0, 0, 0, 0.4);
+}
+
+.menu .head span {
+ font-family: "Pricedown";
+ font-size: 28px;
+ padding-left: 15px;
+ padding-top: 6px;
+}
+
+.menu .menu-items .menu-item {
+ font-family: "Open Sans", sans-serif;
+ font-size: 14px;
+ height: 40px;
+ display: block;
+ background-color: #f1f1f1;
+ box-shadow: inset 1px 0px 0px 1px #b8b8b8;
+ height: 32px;
+ line-height: 32px;
+ color: #3a3a3a;
+ text-align: center;
+}
+
+.menu .menu-items .menu-item.selected {
+ background-color: #ccc;
+}
\ No newline at end of file
diff --git a/server-data/resources/[esx]/es_extended/html/fonts/bankgothic.ttf b/server-data/resources/[esx]/es_extended/html/fonts/bankgothic.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..f3d8049b052a1f9cfd27557eb3675bc85ce4b9fc
GIT binary patch
literal 36272
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
D`#l06
literal 0
HcmV?d00001
diff --git a/server-data/resources/[esx]/es_extended/html/fonts/pdown.ttf b/server-data/resources/[esx]/es_extended/html/fonts/pdown.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..69c76cf3f2a6bbc93f570124554fec06d7bbac25
GIT binary patch
literal 151512
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